diff --git a/.github/workflows/legacy-ui.yml b/.github/workflows/legacy-ui.yml index 6ec6ed1a1c2c..74a0ebcb8594 100755 --- a/.github/workflows/legacy-ui.yml +++ b/.github/workflows/legacy-ui.yml @@ -39,6 +39,13 @@ jobs: tools: composer:v2 coverage: none + - uses: actions/setup-node@v6 + with: + node-version: 24 + + - name: "Install npm version 11" + run: sudo npm install -g npm@11 + - name: Install Node dependencies run: npm clean-install --omit-dev --ignore-scripts diff --git a/components/ILIAS/AccessControl/classes/class.ilClaimingPermissionHelper.php b/components/ILIAS/AccessControl/classes/class.ilClaimingPermissionHelper.php index 4132aa27e6dd..774aa1672d27 100755 --- a/components/ILIAS/AccessControl/classes/class.ilClaimingPermissionHelper.php +++ b/components/ILIAS/AccessControl/classes/class.ilClaimingPermissionHelper.php @@ -99,7 +99,7 @@ abstract protected function buildPermissionMap(): array; */ protected function isValidContextAndAction( int $a_context_type, - string $a_context_id, + int $a_context_id, int $a_action_id, ?int $a_action_sub_id = null ): bool { @@ -149,7 +149,7 @@ protected function getValidContextIds(int $a_context_type): array */ public function hasPermission( int $a_context_type, - string $a_context_id, + int $a_context_id, int $a_action_id, ?int $a_action_sub_id = null ): bool { @@ -163,7 +163,7 @@ public function hasPermission( /** * Check permissions */ - public function hasPermissions(int $a_context_type, string $a_context_id, array $a_action_ids): array + public function hasPermissions(int $a_context_type, int $a_context_id, array $a_action_ids): array { $res = []; @@ -186,12 +186,12 @@ public function hasPermissions(int $a_context_type, string $a_context_id, array */ protected function checkPermission( int $a_context_type, - string $a_context_id, + int $a_context_id, int $a_action_id, ?int $a_action_sub_id = null ): bool { return ($this->checkRBAC() && - $this->checkPlugins($a_context_type, (string) $a_context_id, $a_action_id, $a_action_sub_id)); + $this->checkPlugins($a_context_type, $a_context_id, $a_action_id, $a_action_sub_id)); } /** @@ -216,7 +216,7 @@ abstract protected function getActivePlugins(): Generator; */ protected function checkPlugins( int $a_context_type, - string $a_context_id, + int $a_context_id, int $a_action_id, ?int $a_action_sub_id = null ): bool { @@ -238,24 +238,4 @@ protected function checkPlugins( return $valid; } - - /** - * @return array of object type strings - */ - public function getAllowedObjectTypes(): array - { - $accepted_types = ['cat','crs','sess','grp','iass','exc','file']; - - $obj_def = new ilObjectDefinition(); - $adv_md_types = $obj_def->getAdvancedMetaDataTypes(); - - $valid_accepted_types = []; - foreach ($adv_md_types as $value) { - if (in_array($value['obj_type'], $accepted_types) || in_array($value['sub_type'], $accepted_types)) { - array_push($valid_accepted_types, $value['obj_type']); - } - } - - return $valid_accepted_types; - } } diff --git a/components/ILIAS/AccessControl/classes/class.ilObjRoleGUI.php b/components/ILIAS/AccessControl/classes/class.ilObjRoleGUI.php index 049e151320ca..d23f6c0403d0 100755 --- a/components/ILIAS/AccessControl/classes/class.ilObjRoleGUI.php +++ b/components/ILIAS/AccessControl/classes/class.ilObjRoleGUI.php @@ -117,8 +117,7 @@ public function executeCommand(): void $eo = ilExportOptions::newInstance(ilExportOptions::allocateExportId()); $eo->addOption(ilExportOptions::KEY_ROOT, 0, $this->object->getId(), $this->obj_ref_id); - $exp = new ilExportGUI($this, new ilObjRole($this->object->getId())); - $exp->addFormat('xml'); + $exp = new ilExportGUI($this, new ilObjRole($this->object->getId()), false); $this->ctrl->forwardCommand($exp); break; diff --git a/components/ILIAS/AccessControl/classes/class.ilPermissionGUI.php b/components/ILIAS/AccessControl/classes/class.ilPermissionGUI.php index 1bd0e72952b6..5e66bce8a146 100755 --- a/components/ILIAS/AccessControl/classes/class.ilPermissionGUI.php +++ b/components/ILIAS/AccessControl/classes/class.ilPermissionGUI.php @@ -914,17 +914,26 @@ public function owner(): void { $this->__initSubTabs('owner'); - $form = new ilPropertyFormGUI(); - $form->setFormAction($this->ctrl->getFormAction($this, "owner")); - $form->setTitle($this->lng->txt("info_owner_of_object")); + $this->tpl->setOnScreenMessage('info', $this->lng->txt('chown_warning')); - $login = new ilTextInputGUI($this->lng->txt("login"), "owner"); - $login->setDataSource($this->ctrl->getLinkTargetByClass([get_class($this), - 'ilRepositorySearchGUI' - ], 'doUserAutoComplete', '', true)); + $form = new ilPropertyFormGUI(); + $form->setFormAction($this->ctrl->getFormAction($this, 'owner')); + $form->setTitle($this->lng->txt('info_owner_of_object')); + + $login = new ilTextInputGUI($this->lng->txt('login'), 'owner'); + $login->setDataSource( + $this->ctrl->getLinkTargetByClass( + [ + $this::class, + ilRepositorySearchGUI::class + ], + 'doUserAutoComplete', + '', + true + ) + ); $login->setRequired(true); $login->setSize(50); - $login->setInfo($this->lng->txt("chown_warning")); $login->setValue(ilObjUser::_lookupLogin($this->gui_obj->getObject()->getOwner())); $form->addItem($login); $form->addCommandButton("changeOwner", $this->lng->txt("change_owner")); diff --git a/components/ILIAS/AccessControl/src/Log/Table.php b/components/ILIAS/AccessControl/src/Log/Table.php index ff1bf2aa6c7b..450e3a86696d 100644 --- a/components/ILIAS/AccessControl/src/Log/Table.php +++ b/components/ILIAS/AccessControl/src/Log/Table.php @@ -172,7 +172,7 @@ public function getTotalRowCount( mixed $filter_data, mixed $additional_parameters ): ?int { - return $this->rbac_log->getLogItemsCount($this->getRefId(), $filter_data); + return $this->rbac_log->getLogItemsCount($this->getRefId(), $filter_data ?? []); } private function getRefId(): int @@ -216,7 +216,10 @@ private function applyFilterValuesTrafos(array $filter_values): array private function buildChangeColumn(int $action, array $data): string { if ($action === \ilRbacLog::CHANGE_OWNER) { - $user_name = \ilObjUser::_lookupFullname($data[0] ?? 0); + + $user_name = isset($data[0]) && is_numeric($data[0]) + ? \ilObjUser::_lookupFullname((int) $data[0]) + : ''; return "{$this->lng->txt('rbac_log_changed_owner')}: {$user_name}"; } diff --git a/components/ILIAS/Accordion/Accordion.php b/components/ILIAS/Accordion/Accordion.php index 59477bd07f57..de9e2323b0db 100644 --- a/components/ILIAS/Accordion/Accordion.php +++ b/components/ILIAS/Accordion/Accordion.php @@ -34,9 +34,5 @@ public function init( ): void { $contribute[Component\Resource\PublicAsset::class] = fn() => new Component\Resource\ComponentJS($this, "accordion.js"); - /* This library was missing after discussing dependencies for ILIAS 10 - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("owl.carousel/dist/owl.carousel.js"); - */ } } diff --git a/components/ILIAS/Accordion/classes/class.ilAccordionGUI.php b/components/ILIAS/Accordion/classes/class.ilAccordionGUI.php index 25163c486e07..c9f02be21eb8 100755 --- a/components/ILIAS/Accordion/classes/class.ilAccordionGUI.php +++ b/components/ILIAS/Accordion/classes/class.ilAccordionGUI.php @@ -44,9 +44,6 @@ class ilAccordionGUI protected string $containerclass = ""; protected string $id = ""; protected bool $head_class_set = false; - public static string $owl_path = "./node_modules/owl.carousel/dist"; - public static string $owl_js_path = "/owl.carousel.js"; - public static string $owl_css_path = "/assets/owl.carousel.css"; protected ilGlobalTemplateInterface $main_tpl; protected string $active_headerclass = ""; protected string $behaviour = self::FIRST_OPEN; @@ -228,8 +225,6 @@ public static function addJavaScript(?ilGlobalTemplate $main_tpl = null): void $tpl = $DIC["tpl"]; } - ilYuiUtil::initConnection($tpl); - foreach (self::getLocalJavascriptFiles() as $f) { $tpl->addJavaScript($f, true, 3); } @@ -258,16 +253,14 @@ public static function getLocalJavascriptFiles(): array ); } return array( - "assets/js/accordion.js", - "assets/js" . self::$owl_js_path + "assets/js/accordion.js" ); } public static function getLocalCssFiles(): array { return array( - "./components/ILIAS/Accordion/css/accordion.css", - self::$owl_path . self::$owl_css_path + "./components/ILIAS/Accordion/css/accordion.css" ); } diff --git a/components/ILIAS/Administration/classes/RecoveryFolder/class.ilObjRecoveryFolderGUI.php b/components/ILIAS/Administration/classes/RecoveryFolder/class.ilObjRecoveryFolderGUI.php index e11cd4f89bf6..96ba8a909a0b 100755 --- a/components/ILIAS/Administration/classes/RecoveryFolder/class.ilObjRecoveryFolderGUI.php +++ b/components/ILIAS/Administration/classes/RecoveryFolder/class.ilObjRecoveryFolderGUI.php @@ -100,4 +100,19 @@ public function getActions(): array "removeFromSystem" => array("name" => "removeFromSystem", "lng" => "btn_remove_system") ); } + + protected function checkPermissionBool(string $perm, string $cmd = "", string $type = "", ?int $ref_id = null): bool + { + /* + * Since nodes in the administration do not have visible permissions anymore, + * those object permission checks have to be overwritten. + */ + $operations = explode(',', $perm); + $operations = array_diff($operations, ["visible"]); + $perm = implode(',', $operations); + if ($perm === '') { + return true; + } + return parent::checkPermissionBool($perm, $cmd, $type, $ref_id); + } } diff --git a/components/ILIAS/Administration/classes/SystemFolder/class.ilObjSystemFolderGUI.php b/components/ILIAS/Administration/classes/SystemFolder/class.ilObjSystemFolderGUI.php index ff80bc3fc7e4..ccb026d39bc7 100755 --- a/components/ILIAS/Administration/classes/SystemFolder/class.ilObjSystemFolderGUI.php +++ b/components/ILIAS/Administration/classes/SystemFolder/class.ilObjSystemFolderGUI.php @@ -47,6 +47,8 @@ public function viewObject(): void public static function _goto(): void { global $DIC; + + $DIC->ctrl()->setParameterByClass(self::class, 'ref_id', SYSTEM_FOLDER_ID); $DIC->ctrl()->redirectByClass([ilAdministrationGUI::class, self::class]); } } diff --git a/components/ILIAS/Administration/classes/SystemSupport/class.ilSystemSupportContactsGUI.php b/components/ILIAS/Administration/classes/SystemSupport/class.ilSystemSupportContactsGUI.php index 73b59ee2c521..c8568c24d92f 100755 --- a/components/ILIAS/Administration/classes/SystemSupport/class.ilSystemSupportContactsGUI.php +++ b/components/ILIAS/Administration/classes/SystemSupport/class.ilSystemSupportContactsGUI.php @@ -17,11 +17,13 @@ *********************************************************************/ use ILIAS\User\Profile\PublicProfileGUI; +use ILIAS\Data\URI; /** * System support contacts * * @author Alex Killing + * @ilCtrl_Calls ilSystemSupportContactsGUI: ILIAS\User\Profile\PublicProfileGUI */ class ilSystemSupportContactsGUI implements ilCtrlBaseClassInterface { @@ -61,9 +63,20 @@ public function __construct() */ public function executeCommand() { - $cmd = $this->ctrl->getCmd("showContacts"); - if (in_array($cmd, array("showContacts"))) { - $this->$cmd(); + $next_class = $this->ctrl->getNextClass($this); + + switch ($next_class) { + case strtolower(PublicProfileGUI::class): + $gui = new PublicProfileGUI(); + $this->ctrl->setReturn($this, 'showContacts'); + $this->ctrl->forwardCommand($gui); + break; + + default: + $cmd = $this->ctrl->getCmd("showContacts"); + if (in_array($cmd, array("showContacts"))) { + $this->$cmd(); + } } } @@ -95,18 +108,13 @@ public function showContacts() $this->tpl->printToStdout(); } - - /** - * Get footer link - * - * @return string footer link - */ - public static function getFooterLink() + public static function getFooterLink(): null|URI|string { global $DIC; $ilCtrl = $DIC->ctrl(); $ilUser = $DIC->user(); + $uri = $DIC->http()->request()->getUri(); $users = ilSystemSupportContacts::getValidSupportContactIds(); if (count($users) > 0) { @@ -116,11 +124,12 @@ public static function getFooterLink() ilSystemSupportContacts::getMailsToAddress() ); } else { - return $ilCtrl->getLinkTargetByClass("ilsystemsupportcontactsgui", "", "", false, false); + $path = $ilCtrl->getLinkTargetByClass("ilsystemsupportcontactsgui", "", "", false, false); + return new URI($uri->getScheme() . '://' . $uri->getHost() . '/' . $path); } } - return ""; + return null; } /** diff --git a/components/ILIAS/Administration/classes/class.ilAdministrationGUI.php b/components/ILIAS/Administration/classes/class.ilAdministrationGUI.php index b396e4b93ccc..54dd62ac748a 100755 --- a/components/ILIAS/Administration/classes/class.ilAdministrationGUI.php +++ b/components/ILIAS/Administration/classes/class.ilAdministrationGUI.php @@ -98,6 +98,7 @@ public function __construct() $this->ctrl = $DIC->ctrl(); $this->global_screen = $DIC->globalScreen(); + $this->lng->loadLanguageModule('administration'); $this->lng->loadLanguageModule('benchmark'); $context = $this->global_screen->tool()->context(); diff --git a/components/ILIAS/AdministrativeNotification/classes/Table.php b/components/ILIAS/AdministrativeNotification/classes/Table.php index f65727c68110..8eceeba2e233 100755 --- a/components/ILIAS/AdministrativeNotification/classes/Table.php +++ b/components/ILIAS/AdministrativeNotification/classes/Table.php @@ -31,7 +31,7 @@ use ILIAS\UI\URLBuilderToken; /** - * + * @author Fabian Schmid */ class Table { @@ -45,11 +45,12 @@ class Table private ilLanguage $lng; private URLBuilder $url_builder; private URLBuilderToken $id_token; + private bool $write_access; protected array $components = []; public function __construct( - private ilADNNotificationGUI $calling_gui, + private ilADNNotificationGUI $calling_gui ) { global $DIC; $this->ui_factory = $DIC['ui.factory']; @@ -58,15 +59,16 @@ public function __construct( $this->lng = $DIC['lng']; $this->url_builder = $this->initURIBuilder(); + $this->write_access = (new ilObjAdministrativeNotificationAccess())->hasUserPermissionTo('write'); $columns = $this->initColumns(); $actions = $this->initActions(); $data_retrieval = new DataRetrieval( - (new ilObjAdministrativeNotificationAccess())->hasUserPermissionTo('write') + $this->write_access ); $this->components[] = $this->ui_factory->table()->data( $data_retrieval, - $this->lng->txt('notifications'), + $this->lng->txt('msg_table_title'), $columns, )->withActions($actions)->withRequest( $DIC->http()->request() @@ -105,6 +107,10 @@ protected function initColumns(): array protected function initActions(): array { + if ($this->write_access === false) { + return []; + } + return [ self::ACTION_EDIT => $this->ui_factory->table()->action()->single( $this->lng->txt("btn_edit"), diff --git a/components/ILIAS/AdministrativeNotification/classes/class.ilADNNotification.php b/components/ILIAS/AdministrativeNotification/classes/class.ilADNNotification.php index 98bf777641d9..364daea5af24 100755 --- a/components/ILIAS/AdministrativeNotification/classes/class.ilADNNotification.php +++ b/components/ILIAS/AdministrativeNotification/classes/class.ilADNNotification.php @@ -142,14 +142,23 @@ public function isVisibleForUser(ilObjUser $ilObjUser): bool return ($this->isVisibleToUserBasedOnLanguage($ilObjUser) && $this->isVisibleRoleUserRoles($ilObjUser)); } - - protected function isVisibleToUserBasedOnLanguage(ilObjUser $ilObjUser): bool + protected function isVisibleToUserBasedOnLanguage(ilObjUser $user): bool { if (!$this->hasLanguageLimitation()) { return true; } - return in_array($ilObjUser->getLanguage(), $this->getLimitedToLanguages(), true); + // Special case for anonymous user + if ($user->isAnonymous()) { + // current language + global $DIC; + $current_language = $DIC->http()->request()->getQueryParams()['lang'] + ?? $DIC->language()->getDefaultLanguage(); + } else { + $current_language = $user->getLanguage(); + } + + return in_array($current_language, $this->getLimitedToLanguages(), true); } diff --git a/components/ILIAS/AdministrativeNotification/classes/class.ilObjAdministrativeNotificationAccess.php b/components/ILIAS/AdministrativeNotification/classes/class.ilObjAdministrativeNotificationAccess.php index 9da1fe5e33cf..fb1d667c51af 100755 --- a/components/ILIAS/AdministrativeNotification/classes/class.ilObjAdministrativeNotificationAccess.php +++ b/components/ILIAS/AdministrativeNotification/classes/class.ilObjAdministrativeNotificationAccess.php @@ -17,8 +17,7 @@ *********************************************************************/ /** - * Class ilObjAdministrativeNotificationAccess - * @author Fabian Schmid + * @author Fabian Schmid */ class ilObjAdministrativeNotificationAccess extends ilObjectAccess { @@ -48,8 +47,14 @@ public function checkAccessAndThrowException(string $permission): void } } - public function hasUserPermissionTo(string $permission): bool + public function hasUserPermissionTo(string $permissions_string): bool { - return $this->rbacsystem->checkAccess($permission, $this->ref_id); + $permissions = explode(',', $permissions_string); + foreach ($permissions as $permission) { + if ($this->rbacsystem->checkAccess($permission, $this->ref_id)) { + return true; + } + } + return false; } } diff --git a/components/ILIAS/AdvancedMetaData/classes/Types/class.ilAdvancedMDFieldDefinitionSelect.php b/components/ILIAS/AdvancedMetaData/classes/Types/class.ilAdvancedMDFieldDefinitionSelect.php index 3a2eaff7cffb..2ba58780172f 100755 --- a/components/ILIAS/AdvancedMetaData/classes/Types/class.ilAdvancedMDFieldDefinitionSelect.php +++ b/components/ILIAS/AdvancedMetaData/classes/Types/class.ilAdvancedMDFieldDefinitionSelect.php @@ -476,10 +476,10 @@ protected function importNewSelectOptions( /* * Update positions and value - * If an entry is is moved down, shift new position to reflect entry not + * If an entry is moved down, shift new position to reflect entry not * being in its old position anymore. */ - if ($new_position > $edited_option->getPosition()) { + if ($edited_id !== self::ADD_NEW_ENTRY_ID && $new_position > $edited_option->getPosition()) { $new_position -= 1; } diff --git a/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php b/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php index ebe99b9c33e8..9e00e4a979ba 100755 --- a/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php +++ b/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDFieldDefinition.php @@ -573,7 +573,7 @@ public function addToFieldDefinitionForm( $perm = $a_permissions->hasPermissions( ilAdvancedMDPermissionHelper::CONTEXT_FIELD, - (string) $this->getFieldId(), + (int) $this->getFieldId(), array( array(ilAdvancedMDPermissionHelper::ACTION_FIELD_EDIT_PROPERTY, ilAdvancedMDPermissionHelper::SUBACTION_FIELD_TITLE @@ -685,7 +685,7 @@ public function importDefinitionFormPostValues( if ($a_permissions->hasPermission( ilAdvancedMDPermissionHelper::CONTEXT_FIELD, - (string) $this->getFieldId(), + (int) $this->getFieldId(), ilAdvancedMDPermissionHelper::ACTION_FIELD_EDIT_PROPERTY, ilAdvancedMDPermissionHelper::SUBACTION_FIELD_PROPERTIES )) { diff --git a/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDFieldTableGUI.php b/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDFieldTableGUI.php index cc4b6d4829bd..e6d67362a8d7 100755 --- a/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDFieldTableGUI.php +++ b/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDFieldTableGUI.php @@ -139,7 +139,7 @@ public function parseDefinitions(array $a_definitions): void $tmp_arr['perm'] = $this->permissions->hasPermissions( ilAdvancedMDPermissionHelper::CONTEXT_FIELD, - (string) $definition->getFieldId(), + (int) $definition->getFieldId(), array( ilAdvancedMDPermissionHelper::ACTION_FIELD_EDIT , diff --git a/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDPermissionHelper.php b/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDPermissionHelper.php index d52df9e80edb..3124ef83b47c 100755 --- a/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDPermissionHelper.php +++ b/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDPermissionHelper.php @@ -26,80 +26,35 @@ */ class ilAdvancedMDPermissionHelper extends ilClaimingPermissionHelper { - public const CONTEXT_MD = 1; - public const CONTEXT_RECORD = 2; - public const CONTEXT_FIELD = 3; - public const CONTEXT_SUBSTITUTION = 4; - public const CONTEXT_SUBSTITUTION_COURSE = 5; - public const CONTEXT_SUBSTITUTION_CATEGORY = 6; - public const CONTEXT_SUBSTITUTION_SESSION = 7; - public const CONTEXT_SUBSTITUTION_IASS = 8; - public const CONTEXT_SUBSTITUTION_GROUP = 9; - public const CONTEXT_SUBSTITUTION_EXERCISE = 10; - - public const CONTEXT_SUBSTITUTION_FILE = 11; - public const CONTEXT_SUBSTITUTION_PRG = 12; - public const CONTEXT_SUBSTITUTION_ORG_UNIT = 13; - - public const ACTION_MD_CREATE_RECORD = 1; - public const ACTION_MD_IMPORT_RECORDS = 2; - - public const ACTION_RECORD_EDIT = 5; - public const ACTION_RECORD_DELETE = 6; - public const ACTION_RECORD_EXPORT = 7; - public const ACTION_RECORD_TOGGLE_ACTIVATION = 8; - public const ACTION_RECORD_EDIT_PROPERTY = 9; - public const ACTION_RECORD_EDIT_FIELDS = 10; - public const ACTION_RECORD_CREATE_FIELD = 11; - public const ACTION_RECORD_FIELD_POSITIONS = 12; - - public const ACTION_FIELD_EDIT = 13; - public const ACTION_FIELD_DELETE = 14; - public const ACTION_FIELD_EDIT_PROPERTY = 15; - - public const ACTION_SUBSTITUTION_SHOW_DESCRIPTION = 16; - public const ACTION_SUBSTITUTION_SHOW_FIELDNAMES = 17; - public const ACTION_SUBSTITUTION_FIELD_POSITIONS = 18; - - public const ACTION_SUBSTITUTION_COURSE_SHOW_FIELD = 19; - public const ACTION_SUBSTITUTION_COURSE_EDIT_FIELD_PROPERTY = 20; - - public const ACTION_SUBSTITUTION_CATEGORY_SHOW_FIELD = 21; - public const ACTION_SUBSTITUTION_CATEGORY_EDIT_FIELD_PROPERTY = 22; - - public const ACTION_SUBSTITUTION_SESSION_SHOW_FIELD = 23; - public const ACTION_SUBSTITUTION_SESSION_EDIT_FIELD_PROPERTY = 24; - - public const ACTION_SUBSTITUTION_GROUP_SHOW_FIELD = 25; - public const ACTION_SUBSTITUTION_GROUP_EDIT_FIELD_PROPERTY = 26; - - public const ACTION_SUBSTITUTION_IASS_SHOW_FIELD = 27; - public const ACTION_SUBSTITUTION_IASS_EDIT_FIELD_PROPERTY = 28; - - public const ACTION_SUBSTITUTION_EXERCISE_SHOW_FIELD = 29; - public const ACTION_SUBSTITUTION_EXERCISE_EDIT_FIELD_PROPERTY = 30; - - public const ACTION_SUBSTITUTION_FILE_SHOW_FIELD = 31; - public const ACTION_SUBSTITUTION_FILE_EDIT_FIELD_PROPERTY = 32; - - public const ACTION_SUBSTITUTION_PRG_SHOW_FIELD = 33; - public const ACTION_SUBSTITUTION_PRG_EDIT_FIELD_PROPERTY = 34; - - public const ACTION_SUBSTITUTION_ORG_UNIT_SHOW_FIELD = 35; - public const ACTION_SUBSTITUTION_ORG_UNIT_EDIT_FIELD_PROPERTY = 36; - - public const SUBACTION_UNDEFINED = 0; - public const SUBACTION_RECORD_TITLE = 1; - public const SUBACTION_RECORD_DESCRIPTION = 2; - public const SUBACTION_RECORD_OBJECT_TYPES = 3; - - public const SUBACTION_FIELD_TITLE = 4; - public const SUBACTION_FIELD_DESCRIPTION = 5; - public const SUBACTION_FIELD_SEARCHABLE = 6; - public const SUBACTION_FIELD_PROPERTIES = 7; - - public const SUBACTION_SUBSTITUTION_BOLD = 8; - public const SUBACTION_SUBSTITUTION_NEWLINE = 9; + public const int CONTEXT_MD = 1; + public const int CONTEXT_RECORD = 2; + public const int CONTEXT_FIELD = 3; + + public const int ACTION_MD_CREATE_RECORD = 1; + public const int ACTION_MD_IMPORT_RECORDS = 2; + + public const int ACTION_RECORD_EDIT = 5; + public const int ACTION_RECORD_DELETE = 6; + public const int ACTION_RECORD_EXPORT = 7; + public const int ACTION_RECORD_TOGGLE_ACTIVATION = 8; + public const int ACTION_RECORD_EDIT_PROPERTY = 9; + public const int ACTION_RECORD_EDIT_FIELDS = 10; + public const int ACTION_RECORD_CREATE_FIELD = 11; + public const int ACTION_RECORD_FIELD_POSITIONS = 12; + + public const int ACTION_FIELD_EDIT = 13; + public const int ACTION_FIELD_DELETE = 14; + public const int ACTION_FIELD_EDIT_PROPERTY = 15; + + public const int SUBACTION_UNDEFINED = 0; + public const int SUBACTION_RECORD_TITLE = 1; + public const int SUBACTION_RECORD_DESCRIPTION = 2; + public const int SUBACTION_RECORD_OBJECT_TYPES = 3; + + public const int SUBACTION_FIELD_TITLE = 4; + public const int SUBACTION_FIELD_DESCRIPTION = 5; + public const int SUBACTION_FIELD_SEARCHABLE = 6; + public const int SUBACTION_FIELD_PROPERTIES = 7; protected function readContextIds(int $a_context_type): array { @@ -117,22 +72,10 @@ protected function readContextIds(int $a_context_type): array break; case self::CONTEXT_FIELD: - case self::CONTEXT_SUBSTITUTION_COURSE: - case self::CONTEXT_SUBSTITUTION_GROUP: - case self::CONTEXT_SUBSTITUTION_SESSION: - case self::CONTEXT_SUBSTITUTION_CATEGORY: - case self::CONTEXT_SUBSTITUTION_IASS: - case self::CONTEXT_SUBSTITUTION_EXERCISE: - case self::CONTEXT_SUBSTITUTION_FILE: - case self::CONTEXT_SUBSTITUTION_PRG: - case self::CONTEXT_SUBSTITUTION_ORG_UNIT: $set = $ilDB->query("SELECT field_id id" . " FROM adv_mdf_definition"); break; - case self::CONTEXT_SUBSTITUTION: - return $this->getAllowedObjectTypes(); - default: return array(); } @@ -200,133 +143,7 @@ protected function buildPermissionMap(): array self::SUBACTION_FIELD_PROPERTIES ) ) - ), - self::CONTEXT_SUBSTITUTION => array( - "actions" => array( - self::ACTION_SUBSTITUTION_SHOW_DESCRIPTION - , - self::ACTION_SUBSTITUTION_SHOW_FIELDNAMES - , - self::ACTION_SUBSTITUTION_FIELD_POSITIONS - ) - ), - self::CONTEXT_SUBSTITUTION_COURSE => array( - "actions" => array( - self::ACTION_SUBSTITUTION_COURSE_SHOW_FIELD - ), - "subactions" => array( - self::ACTION_SUBSTITUTION_COURSE_EDIT_FIELD_PROPERTY => - array( - self::SUBACTION_SUBSTITUTION_BOLD - , - self::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ), - self::CONTEXT_SUBSTITUTION_CATEGORY => array( - "actions" => array( - self::ACTION_SUBSTITUTION_CATEGORY_SHOW_FIELD - ), - "subactions" => array( - self::ACTION_SUBSTITUTION_CATEGORY_EDIT_FIELD_PROPERTY => - array( - self::SUBACTION_SUBSTITUTION_BOLD - , - self::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ), - self::CONTEXT_SUBSTITUTION_SESSION => array( - "actions" => array( - self::ACTION_SUBSTITUTION_SESSION_SHOW_FIELD - ), - "subactions" => array( - self::ACTION_SUBSTITUTION_SESSION_EDIT_FIELD_PROPERTY => - array( - self::SUBACTION_SUBSTITUTION_BOLD - , - self::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ), - self::CONTEXT_SUBSTITUTION_GROUP => array( - "actions" => array( - self::ACTION_SUBSTITUTION_GROUP_SHOW_FIELD - ), - "subactions" => array( - self::ACTION_SUBSTITUTION_GROUP_EDIT_FIELD_PROPERTY => - array( - self::SUBACTION_SUBSTITUTION_BOLD - , - self::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ), - self::CONTEXT_SUBSTITUTION_IASS => array( - "actions" => array( - self::ACTION_SUBSTITUTION_IASS_SHOW_FIELD - ), - "subactions" => array( - self::ACTION_SUBSTITUTION_IASS_EDIT_FIELD_PROPERTY => - array( - self::SUBACTION_SUBSTITUTION_BOLD - , - self::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ), - self::CONTEXT_SUBSTITUTION_EXERCISE => array( - "actions" => array( - self::ACTION_SUBSTITUTION_EXERCISE_SHOW_FIELD - ), - "subactions" => array( - self::ACTION_SUBSTITUTION_EXERCISE_EDIT_FIELD_PROPERTY => - array( - self::SUBACTION_SUBSTITUTION_BOLD - , - self::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ), - self::CONTEXT_SUBSTITUTION_FILE => array( - "actions" => array( - self::ACTION_SUBSTITUTION_FILE_SHOW_FIELD - ), - "subactions" => array( - self::ACTION_SUBSTITUTION_FILE_EDIT_FIELD_PROPERTY => - array( - self::SUBACTION_SUBSTITUTION_BOLD - , - self::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ), - self::CONTEXT_SUBSTITUTION_PRG => array( - "actions" => array( - self::ACTION_SUBSTITUTION_PRG_SHOW_FIELD - ), - "subactions" => array( - self::ACTION_SUBSTITUTION_PRG_EDIT_FIELD_PROPERTY => - array( - self::SUBACTION_SUBSTITUTION_BOLD - , - self::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ), - self::CONTEXT_SUBSTITUTION_ORG_UNIT => [ - "actions" => [ - self::ACTION_SUBSTITUTION_ORG_UNIT_SHOW_FIELD - ], - "subactions" => [ - self::ACTION_SUBSTITUTION_ORG_UNIT_EDIT_FIELD_PROPERTY => - [ - self::SUBACTION_SUBSTITUTION_BOLD - , - self::SUBACTION_SUBSTITUTION_NEWLINE - ] - ] - ] + ) ); } @@ -342,7 +159,7 @@ protected function getActivePlugins(): Generator protected function checkPermission( int $a_context_type, - string $a_context_id, + int $a_context_id, int $a_action_id, ?int $a_action_sub_id = null ): bool { diff --git a/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDSettingsGUI.php b/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDSettingsGUI.php index ccd0cc7f9dc2..17e200e51cb3 100755 --- a/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDSettingsGUI.php +++ b/components/ILIAS/AdvancedMetaData/classes/class.ilAdvancedMDSettingsGUI.php @@ -60,6 +60,7 @@ class ilAdvancedMDSettingsGUI protected ilToolbarGUI $toolbar; protected ilLogger $logger; protected ilObjUser $user; + protected ilAccess $access; protected ilAdvancedMDPermissionHelper $permissions; protected ?ilAdvancedMDRecord $record = null; @@ -95,6 +96,7 @@ public function __construct(int $a_context, int $a_ref_id, ?string $a_obj_type = $this->http = $DIC->http(); $this->db = $DIC->database(); $this->user = $DIC->user(); + $this->access = $DIC->access(); /** @noinspection PhpUndefinedMethodInspection */ $this->logger = $DIC->logger()->amet(); @@ -290,16 +292,11 @@ public function executeCommand(): void public function showRecords(): void { - global $DIC; - - $ilToolbar = $DIC['ilToolbar']; - $ilAccess = $DIC['ilAccess']; - $this->setSubTabs($this->context); $perm = $this->getPermissions()->hasPermissions( ilAdvancedMDPermissionHelper::CONTEXT_MD, - (string) $this->ref_id, + $this->ref_id, array( ilAdvancedMDPermissionHelper::ACTION_MD_CREATE_RECORD, ilAdvancedMDPermissionHelper::ACTION_MD_IMPORT_RECORDS @@ -311,10 +308,10 @@ public function showRecords(): void $this->lng->txt('add'), $this->ctrl->getLinkTargetByClass(strtolower(self::class), "createRecord") ); - $ilToolbar->addComponent($button); + $this->toolbar->addComponent($button); if ($perm[ilAdvancedMDPermissionHelper::ACTION_MD_IMPORT_RECORDS]) { - $ilToolbar->addSeparator(); + $this->toolbar->addSeparator(); } } @@ -323,7 +320,7 @@ public function showRecords(): void $this->lng->txt('import'), $this->ctrl->getLinkTargetByClass(strtolower(self::class), "importRecords") ); - $ilToolbar->addComponent($button); + $this->toolbar->addComponent($button); } $obj_type_context = ($this->obj_id > 0) @@ -343,12 +340,12 @@ public function showRecords(): void $table_gui->addMultiCommand("exportRecords", $this->lng->txt('export')); $table_gui->setSelectAllCheckbox("record_id"); - if ($ilAccess->checkAccess('write', '', $this->ref_id)) { + if ($this->access->checkAccess('write', '', $this->ref_id)) { $table_gui->addMultiCommand("confirmDeleteRecords", $this->lng->txt("delete")); $table_gui->addCommandButton("updateRecords", $this->lng->txt("save")); } - $DIC->ui()->mainTemplate()->setContent($table_gui->getHTML()); + $this->tpl->setContent($table_gui->getHTML()); } protected function showPresentation(): void @@ -369,11 +366,7 @@ protected function showPresentation(): void */ public function updateSubstitutions(): void { - global $DIC; - - $ilAccess = $DIC['ilAccess']; - - if (!$ilAccess->checkAccess('write', '', $this->ref_id)) { + if (!$this->access->checkAccess('write', '', $this->ref_id)) { $this->ctrl->redirect($this, "showPresentation"); } @@ -392,29 +385,9 @@ public function updateSubstitutions(): void } foreach ($visible_records as $obj_type => $record) { - $perm = null; - - if (in_array($obj_type, $this->permissions->getAllowedObjectTypes())) { - $perm = $this->getPermissions()->hasPermissions( - ilAdvancedMDPermissionHelper::CONTEXT_SUBSTITUTION, - "0", - array( - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SHOW_DESCRIPTION - , - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SHOW_FIELDNAMES - , - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_FIELD_POSITIONS - ) - ); - } $sub = ilAdvancedMDSubstitution::_getInstanceByObjectType($obj_type); - if ($perm && $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SHOW_DESCRIPTION]) { - $sub->enableDescription((bool) $form->getInput('enabled_desc_' . $obj_type)); - } - - if ($perm && $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SHOW_FIELDNAMES]) { - $sub->enableFieldNames((bool) $form->getInput('enabled_field_names_' . $obj_type)); - } + $sub->enableDescription((bool) $form->getInput('enabled_desc_' . $obj_type)); + $sub->enableFieldNames((bool) $form->getInput('enabled_field_names_' . $obj_type)); $definitions = ilAdvancedMDFieldDefinition::getInstancesByObjType($obj_type); $definitions = $sub->sortDefinitions($definitions); @@ -439,23 +412,13 @@ public function updateSubstitutions(): void $field_id = $def->getFieldId(); $old = $old_sub[$field_id]; - $perm_def = $this->getSubstitutionFieldPermissions($obj_type, $field_id); - if ($perm_def["show"] ?? false) { - $active = (bool) $form->getInput('show_' . $obj_type . '_' . $field_id); - } else { - $active = $old["active"] ?? false; - } + $active = (bool) $form->getInput('show_' . $obj_type . '_' . $field_id); + if ($active) { $new_sub[$field_id] = $old; - if ($perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_FIELD_POSITIONS]) { - $new_sub[$field_id]['pos'] = (int) $form->getInput('position_' . $obj_type . '_' . $field_id); - } - if ($perm_def["bold"] ?? false) { - $new_sub[$field_id]['bold'] = (bool) $form->getInput('bold_' . $obj_type . '_' . $field_id); - } - if ($perm_def["newline"] ?? false) { - $new_sub[$field_id]['newline'] = (bool) $form->getInput('newline_' . $obj_type . '_' . $field_id); - } + $new_sub[$field_id]['pos'] = (int) $form->getInput('position_' . $obj_type . '_' . $field_id); + $new_sub[$field_id]['bold'] = (bool) $form->getInput('bold_' . $obj_type . '_' . $field_id); + $new_sub[$field_id]['newline'] = (bool) $form->getInput('newline_' . $obj_type . '_' . $field_id); } } @@ -490,7 +453,7 @@ public function exportRecords(): void foreach ($record_ids as $record_id) { if (!$this->getPermissions()->hasPermission( ilAdvancedMDPermissionHelper::CONTEXT_RECORD, - (string) $record_id, + (int) $record_id, ilAdvancedMDPermissionHelper::ACTION_RECORD_EXPORT )) { $record = ilAdvancedMDRecord::_getInstanceByRecordId($record_id); @@ -690,7 +653,7 @@ public function deleteRecords(): void if (!$this->getPermissions()->hasPermission( ilAdvancedMDPermissionHelper::CONTEXT_RECORD, - (string) $record_id, + (int) $record_id, ilAdvancedMDPermissionHelper::ACTION_RECORD_DELETE )) { $record = ilAdvancedMDRecord::_getInstanceByRecordId($record_id); @@ -746,7 +709,7 @@ public function updateRecords(): void $perm = $this->getPermissions()->hasPermissions( ilAdvancedMDPermissionHelper::CONTEXT_RECORD, - (string) $item['id'], + (int) $item['id'], [ ilAdvancedMDPermissionHelper::ACTION_RECORD_TOGGLE_ACTIVATION, [ @@ -875,7 +838,7 @@ public function deleteFields(): void foreach ($field_ids as $field_id) { if (!$this->getPermissions()->hasPermission( ilAdvancedMDPermissionHelper::CONTEXT_FIELD, - (string) $field_id, + (int) $field_id, ilAdvancedMDPermissionHelper::ACTION_FIELD_DELETE )) { $field = ilAdvancedMDFieldDefinition::getInstance($field_id); @@ -915,8 +878,6 @@ public function editRecord(?ilPropertyFormGUI $form = null): void protected function editFields(): void { - global $DIC; - $record_id = $this->getRecordIdFromQuery(); if (!$record_id) { $this->ctrl->redirect($this, 'showRecords'); @@ -929,7 +890,7 @@ protected function editFields(): void $perm = $this->getPermissions()->hasPermissions( ilAdvancedMDPermissionHelper::CONTEXT_RECORD, - (string) $this->record->getRecordId(), + (int) $this->record->getRecordId(), array( ilAdvancedMDPermissionHelper::ACTION_RECORD_CREATE_FIELD , @@ -1019,7 +980,7 @@ public function updateFields(): void if ($this->getPermissions()->hasPermission( ilAdvancedMDPermissionHelper::CONTEXT_RECORD, - (string) $record_id, + $record_id, ilAdvancedMDPermissionHelper::ACTION_RECORD_FIELD_POSITIONS )) { $positions_flipped = array_flip(array_keys($positions)); @@ -1032,7 +993,7 @@ public function updateFields(): void foreach ($fields as $field) { if ($this->getPermissions()->hasPermission( ilAdvancedMDPermissionHelper::CONTEXT_FIELD, - (string) $field->getFieldId(), + (int) $field->getFieldId(), ilAdvancedMDPermissionHelper::ACTION_FIELD_EDIT_PROPERTY, ilAdvancedMDPermissionHelper::SUBACTION_FIELD_SEARCHABLE )) { @@ -1451,7 +1412,7 @@ protected function initForm($a_mode): ilPropertyFormGUI } $perm = $this->getPermissions()->hasPermissions( ilAdvancedMDPermissionHelper::CONTEXT_RECORD, - (string) $this->record->getRecordId(), + $this->record->getRecordId(), array( array(ilAdvancedMDPermissionHelper::ACTION_RECORD_EDIT_PROPERTY, ilAdvancedMDPermissionHelper::SUBACTION_RECORD_TITLE @@ -1633,231 +1594,12 @@ protected function initForm($a_mode): ilPropertyFormGUI return $this->form; } - protected function getSubstitutionFieldPermissions(string $a_obj_type, int $a_field_id): array - { - if ($a_obj_type == "crs") { - $perm = $this->getPermissions()->hasPermissions( - ilAdvancedMDPermissionHelper::CONTEXT_SUBSTITUTION_COURSE, - (string) $a_field_id, - array( - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_COURSE_SHOW_FIELD - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_COURSE_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD - ) - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_COURSE_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ); - return array( - "show" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_COURSE_SHOW_FIELD] - , - "bold" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_COURSE_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD] - , - "newline" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_COURSE_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE] - ); - } elseif ($a_obj_type == "cat") { - $perm = $this->getPermissions()->hasPermissions( - ilAdvancedMDPermissionHelper::CONTEXT_SUBSTITUTION_CATEGORY, - (string) $a_field_id, - array( - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_CATEGORY_SHOW_FIELD - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_CATEGORY_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD - ) - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_CATEGORY_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ); - return array( - "show" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_CATEGORY_SHOW_FIELD] - , - "bold" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_CATEGORY_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD] - , - "newline" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_CATEGORY_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE] - ); - } elseif ($a_obj_type == "sess") { - $perm = $this->getPermissions()->hasPermissions( - ilAdvancedMDPermissionHelper::CONTEXT_SUBSTITUTION_SESSION, - (string) $a_field_id, - array( - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SESSION_SHOW_FIELD - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SESSION_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD - ) - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SESSION_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ); - return array( - "show" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SESSION_SHOW_FIELD] - , - "bold" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SESSION_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD] - , - "newline" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SESSION_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE] - ); - } elseif ($a_obj_type == "grp") { - $perm = $this->getPermissions()->hasPermissions( - ilAdvancedMDPermissionHelper::CONTEXT_SUBSTITUTION_GROUP, - (string) $a_field_id, - array( - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_GROUP_SHOW_FIELD - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_GROUP_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD - ) - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_GROUP_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ); - return array( - "show" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_GROUP_SHOW_FIELD] - , - "bold" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_GROUP_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD] - , - "newline" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_GROUP_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE] - ); - } elseif ($a_obj_type == "iass") { - $perm = $this->getPermissions()->hasPermissions( - ilAdvancedMDPermissionHelper::CONTEXT_SUBSTITUTION_IASS, - (string) $a_field_id, - array( - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_IASS_SHOW_FIELD - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_IASS_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD - ) - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_IASS_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ); - return array( - "show" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_IASS_SHOW_FIELD] - , - "bold" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_IASS_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD] - , - "newline" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_IASS_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE] - ); - } elseif ($a_obj_type == "exc") { - $perm = $this->getPermissions()->hasPermissions( - ilAdvancedMDPermissionHelper::CONTEXT_SUBSTITUTION_EXERCISE, - (string) $a_field_id, - array( - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_EXERCISE_SHOW_FIELD - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_EXERCISE_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD - ) - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_EXERCISE_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ); - return array( - "show" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_EXERCISE_SHOW_FIELD] - , - "bold" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_EXERCISE_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD] - , - "newline" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_EXERCISE_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE] - ); - } elseif ($a_obj_type == "file") { - $perm = $this->getPermissions()->hasPermissions( - ilAdvancedMDPermissionHelper::CONTEXT_SUBSTITUTION_FILE, - (string) $a_field_id, - array( - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_FILE_SHOW_FIELD - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_FILE_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD - ) - , - array(ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_FILE_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE - ) - ) - ); - return array( - "show" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_FILE_SHOW_FIELD] - , - "bold" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_FILE_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD] - , - "newline" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_FILE_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE] - ); - } elseif ($a_obj_type == "prg") { - $perm = $this->getPermissions()->hasPermissions( - ilAdvancedMDPermissionHelper::CONTEXT_SUBSTITUTION_PRG, - (string) $a_field_id, - [ - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_PRG_SHOW_FIELD, - [ - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_PRG_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD - ], - [ - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_PRG_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE - ] - ] - ); - return array( - "show" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_PRG_SHOW_FIELD] - , - "bold" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_PRG_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD] - , - "newline" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_PRG_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE] - ); - } elseif ($a_obj_type == "orgu") { - $perm = $this->getPermissions()->hasPermissions( - ilAdvancedMDPermissionHelper::CONTEXT_SUBSTITUTION_ORG_UNIT, - (string) $a_field_id, - [ - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_ORG_UNIT_SHOW_FIELD - , - [ - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_ORG_UNIT_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD - ] - , - [ - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_ORG_UNIT_EDIT_FIELD_PROPERTY, - ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE - ] - ] - ); - return [ - "show" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_ORG_UNIT_SHOW_FIELD] - , - "bold" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_ORG_UNIT_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_BOLD] - , - "newline" => $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_ORG_UNIT_EDIT_FIELD_PROPERTY][ilAdvancedMDPermissionHelper::SUBACTION_SUBSTITUTION_NEWLINE] - ]; - } - return []; - } - /** * init form table 'substitutions' * @access protected */ protected function initFormSubstitutions(): ?ilPropertyFormGUI { - global $DIC; - - $ilAccess = $DIC['ilAccess']; - if (!$visible_records = ilAdvancedMDRecord::_getAllRecordsByObjectType()) { return null; } @@ -1868,21 +1610,8 @@ protected function initFormSubstitutions(): ?ilPropertyFormGUI // substitution foreach ($visible_records as $obj_type => $records) { - $perm = null; - - if (in_array($obj_type, $this->permissions->getAllowedObjectTypes())) { - $perm = $this->getPermissions()->hasPermissions( - ilAdvancedMDPermissionHelper::CONTEXT_SUBSTITUTION, - (string) $obj_type, - array( - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SHOW_DESCRIPTION - , - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SHOW_FIELDNAMES - , - ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_FIELD_POSITIONS - ) - ); - } + $read_only = !$this->access->checkAccess('write', '', $this->ref_id); + ; $sub = ilAdvancedMDSubstitution::_getInstanceByObjectType($obj_type); @@ -1897,7 +1626,7 @@ protected function initFormSubstitutions(): ?ilPropertyFormGUI $check->setChecked($sub->isDescriptionEnabled()); $this->form->addItem($check); - if ($perm && !$perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SHOW_DESCRIPTION]) { + if ($read_only) { $check->setDisabled(true); } @@ -1907,15 +1636,10 @@ protected function initFormSubstitutions(): ?ilPropertyFormGUI $check->setChecked($sub->enabledFieldNames()); $this->form->addItem($check); - if ($perm && !$perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_SHOW_FIELDNAMES]) { + if ($read_only) { $check->setDisabled(true); } - $perm_pos = null; - if ($perm) { - $perm_pos = $perm[ilAdvancedMDPermissionHelper::ACTION_SUBSTITUTION_FIELD_POSITIONS]; - } - $definitions = ilAdvancedMDFieldDefinition::getInstancesByObjType($obj_type); $definitions = $sub->sortDefinitions($definitions); @@ -1923,8 +1647,6 @@ protected function initFormSubstitutions(): ?ilPropertyFormGUI foreach ($definitions as $def) { $definition_id = $def->getFieldId(); - $perm = $this->getSubstitutionFieldPermissions($obj_type, $definition_id); - $title = ilAdvancedMDRecord::_lookupTitle((int) $def->getRecordId()); $title = $def->getTitle() . ' (' . $title . ')'; @@ -1933,7 +1655,7 @@ protected function initFormSubstitutions(): ?ilPropertyFormGUI $check->setOptionTitle($this->lng->txt('md_adv_show')); $check->setChecked($sub->isSubstituted($definition_id)); - if ($perm && !$perm["show"]) { + if ($read_only) { $check->setDisabled(true); } @@ -1947,7 +1669,7 @@ protected function initFormSubstitutions(): ?ilPropertyFormGUI $pos->setValue(sprintf('%.1f', $counter++)); $check->addSubItem($pos); - if ($perm && !$perm_pos) { + if ($read_only) { $pos->setDisabled(true); } @@ -1959,7 +1681,7 @@ protected function initFormSubstitutions(): ?ilPropertyFormGUI $bold->setChecked($sub->isBold($definition_id)); $check->addSubItem($bold); - if ($perm && !$perm["bold"]) { + if ($read_only) { $bold->setDisabled(true); } @@ -1971,7 +1693,7 @@ protected function initFormSubstitutions(): ?ilPropertyFormGUI $bold->setChecked($sub->hasNewline($definition_id)); $check->addSubItem($bold); - if ($perm && !$perm["newline"]) { + if ($read_only) { $bold->setDisabled(true); } @@ -1980,7 +1702,7 @@ protected function initFormSubstitutions(): ?ilPropertyFormGUI } $this->form->setTitle($this->lng->txt('md_adv_substitution_table')); - if ($ilAccess->checkAccess('write', '', $this->ref_id)) { + if ($this->access->checkAccess('write', '', $this->ref_id)) { $this->form->addCommandButton('updateSubstitutions', $this->lng->txt('save')); } return $this->form; @@ -1992,7 +1714,7 @@ protected function loadRecordFormData(ilPropertyFormGUI $form): ilAdvancedMDReco $perm = $this->getPermissions()->hasPermissions( ilAdvancedMDPermissionHelper::CONTEXT_RECORD, - (string) $this->record->getRecordId(), + $this->record->getRecordId(), array( array(ilAdvancedMDPermissionHelper::ACTION_RECORD_EDIT_PROPERTY, ilAdvancedMDPermissionHelper::SUBACTION_RECORD_TITLE @@ -2200,7 +1922,7 @@ protected function getParsedRecordObjects(): array $tmp_arr['perm'] = $this->permissions->hasPermissions( ilAdvancedMDPermissionHelper::CONTEXT_RECORD, - (string) $record->getRecordId(), + $record->getRecordId(), array( ilAdvancedMDPermissionHelper::ACTION_RECORD_EDIT , diff --git a/components/ILIAS/AuthApache/phpunit.xml b/components/ILIAS/AuthApache/phpunit.xml index dd3871d35d69..7fa9d3ece399 100755 --- a/components/ILIAS/AuthApache/phpunit.xml +++ b/components/ILIAS/AuthApache/phpunit.xml @@ -9,6 +9,7 @@ displayDetailsOnTestsThatTriggerWarnings="true" displayDetailsOnTestsThatTriggerDeprecations="true" displayDetailsOnTestsThatTriggerNotices="true" + displayDetailsOnPhpunitDeprecations="true" displayDetailsOnSkippedTests="true" backupGlobals="false" bootstrap="./tests/bootstrap.php" diff --git a/components/ILIAS/AuthShibboleth/classes/Config/class.ilShibbolethSettings.php b/components/ILIAS/AuthShibboleth/classes/Config/class.ilShibbolethSettings.php index 99f437040b0b..e91b6d221460 100755 --- a/components/ILIAS/AuthShibboleth/classes/Config/class.ilShibbolethSettings.php +++ b/components/ILIAS/AuthShibboleth/classes/Config/class.ilShibbolethSettings.php @@ -34,7 +34,7 @@ class ilShibbolethSettings /** * @var string */ - private const DEFAULT_LOGIN_BUTTON = "assets/images/auth/shib_login_button.svg"; + private const DEFAULT_LOGIN_BUTTON = "./assets/images/auth/shib_login_button.svg"; /** * @var string */ diff --git a/components/ILIAS/AuthShibboleth/classes/Config/class.shibConfig.php b/components/ILIAS/AuthShibboleth/classes/Config/class.shibConfig.php index 85b998149ab2..dd49b4f85b2c 100755 --- a/components/ILIAS/AuthShibboleth/classes/Config/class.shibConfig.php +++ b/components/ILIAS/AuthShibboleth/classes/Config/class.shibConfig.php @@ -457,9 +457,6 @@ public function setUpdateTitle(bool $update_title): void $this->update_title = $update_title; } - /** - * @return mixed - */ public function getUpdateTitle(): bool { return $this->update_title; diff --git a/components/ILIAS/AuthShibboleth/classes/class.ilAuthProviderShibboleth.php b/components/ILIAS/AuthShibboleth/classes/class.ilAuthProviderShibboleth.php index b6fa638bef75..0216138fd379 100755 --- a/components/ILIAS/AuthShibboleth/classes/class.ilAuthProviderShibboleth.php +++ b/components/ILIAS/AuthShibboleth/classes/class.ilAuthProviderShibboleth.php @@ -110,6 +110,7 @@ public function doAuthentication(ilAuthStatus $status): bool return false; } + ilSession::set('shibboleth_session_id', $_SERVER['Shib-Session-ID'] ?? ''); return true; } } diff --git a/components/ILIAS/AuthShibboleth/resources/shib_logout.php b/components/ILIAS/AuthShibboleth/resources/shib_logout.php index d7a46c37f3cc..2207637d7541 100644 --- a/components/ILIAS/AuthShibboleth/resources/shib_logout.php +++ b/components/ILIAS/AuthShibboleth/resources/shib_logout.php @@ -17,9 +17,11 @@ *********************************************************************/ require_once("../vendor/composer/vendor/autoload.php"); +ilContext::init(ilContext::CONTEXT_SHIBBOLETH); require_once("../artifacts/bootstrap_default.php"); global $DIC; + $q = $DIC->http()->wrapper()->query(); if ( $q->has('return') @@ -43,7 +45,7 @@ // stored in the application's session data. // See function LogoutNotification below -elseif (!empty($HTTP_RAW_POST_DATA)) { +elseif (!empty(file_get_contents('php://input'))) { ilContext::init(ilContext::CONTEXT_SOAP); // Load ILIAS libraries and initialise ILIAS in non-web context @@ -69,16 +71,15 @@ echo << - + - + @@ -98,7 +99,7 @@ - + @@ -117,9 +118,9 @@ - + - + WSDL; @@ -141,17 +142,17 @@ function LogoutNotification($SessionID): ?\SoapFault $q = "SELECT session_id, data FROM usr_session WHERE expires > 'NOW()'"; $r = $ilDB->query($q); - while ($session_entry = $r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) { - $user_session = unserializesession($session_entry['data']); - - // Look for session with matching Shibboleth session id - // and then delete this ilias session - foreach ($user_session as $user_session_entry) { - // Delete this session entry - if (is_array($user_session_entry) && array_key_exists('shibboleth_session_id', $user_session_entry) && $user_session_entry['shibboleth_session_id'] == $SessionID && !ilSession::_destroy($session_entry['session_id']) - ) { - return new SoapFault('LogoutError', 'Could not delete session entry in database.'); - } + while ($session = $r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) { + $session_data = unserializesession($session['data']); + // Delete this session entry + if ( + is_array($session_data) + && array_key_exists('shibboleth_session_id', $session_data) + && $session_data['shibboleth_session_id'] === $SessionID + && !ilSession::_destroy($session['session_id'] + ) + ) { + return new SoapFault('LogoutError', 'Could not delete session entry in database.'); } } // If no SoapFault is returned, all is fine diff --git a/components/ILIAS/AuthShibboleth/src/LoginPerformer.php b/components/ILIAS/AuthShibboleth/src/LoginPerformer.php index 417f2473f451..fc61d0a17194 100755 --- a/components/ILIAS/AuthShibboleth/src/LoginPerformer.php +++ b/components/ILIAS/AuthShibboleth/src/LoginPerformer.php @@ -75,12 +75,12 @@ public function doShibbolethAuthentication(): void // no break case ilAuthStatus::STATUS_ACCOUNT_MIGRATION_REQUIRED: - $this->ctrl->redirect($this, 'showAccountMigration'); + $this->ctrl->redirectByClass([ilStartUpGUI::class], 'showAccountMigration'); // no break case ilAuthStatus::STATUS_AUTHENTICATION_FAILED: $this->template->setOnScreenMessage('failure', $status->getTranslatedReason(), true); - $this->ctrl->redirect($this, 'showLoginPage'); + $this->ctrl->redirectByClass([ilStartUpGUI::class], 'showLoginPage'); } $this->template->setOnScreenMessage('failure', $this->lng->txt('err_wrong_login'), true); diff --git a/components/ILIAS/Authentication/classes/Cron/class.ilAuthDestroyExpiredSessionsCron.php b/components/ILIAS/Authentication/classes/Cron/class.ilAuthDestroyExpiredSessionsCron.php index 20e7b429c4d0..7f38fe762170 100755 --- a/components/ILIAS/Authentication/classes/Cron/class.ilAuthDestroyExpiredSessionsCron.php +++ b/components/ILIAS/Authentication/classes/Cron/class.ilAuthDestroyExpiredSessionsCron.php @@ -87,7 +87,7 @@ public function run(): JobResult $result->setStatus(JobResult::STATUS_OK); $num_destroyed_sessions = ilSession::_destroyExpiredSessions(); - ilSessionStatistics::aggretateRaw(time()); + ilSessionStatistics::aggregateRaw(time()); $result->setMessage('Number of destroyed sessions: ' . $num_destroyed_sessions); return $result; diff --git a/components/ILIAS/Authentication/classes/Form/ApacheAuthSettingsForm.php b/components/ILIAS/Authentication/classes/Form/ApacheAuthSettingsForm.php index 3d9c338a9a23..048171db3e7e 100644 --- a/components/ILIAS/Authentication/classes/Form/ApacheAuthSettingsForm.php +++ b/components/ILIAS/Authentication/classes/Form/ApacheAuthSettingsForm.php @@ -74,33 +74,41 @@ public function __construct( public function buildForm(): StandardForm { $access = $this->rbac_system->checkAccess('write', $this->ref_id); + $inputs = [ + 'apache_enable_auth' => $this->buildEnableAuthInput(), + 'apache_enable_local' => $this->ui_field->checkbox($this->lng->txt('apache_enable_local')) + ->withValue((bool) ($this->values['apache_enable_local'] ?? true)), + 'apache_enable_ldap' => $this->buildLdapEnableInput(), + 'apache_auth_indicator_name' => $this->ui_field->text($this->lng->txt('apache_auth_indicator_name')) + ->withRequired(true) + ->withValue($this->values['apache_auth_indicator_name'] ?? ''), + 'apache_auth_indicator_value' => $this->ui_field->text($this->lng->txt('apache_auth_indicator_value')) + ->withRequired(true) + ->withValue($this->values['apache_auth_indicator_value'] ?? ''), + 'apache_auth_enable_override_login_page' => $this->buildAuthEnableOverrideLoginPageInput(), + 'apache_auth_authenticate_on_login_page' => $this->ui_field->checkbox($this->lng->txt('apache_auth_authenticate_on_login_page')) + ->withValue((bool) ($this->values['apache_auth_authenticate_on_login_page'] ?? true)), + 'apache_auth_username_config' => $this->ui_field->section([ + 'apache_auth_username_config_type' => $this->buildAuthUsernameConfigTypeInput() + ], $this->lng->txt('apache_auth_username_config')), + 'apache_auth_security' => $this->ui_field->section([ + 'apache_auth_domains' => $this->ui_field->textarea( + $this->lng->txt('apache_auth_domains'), + $this->lng->txt('apache_auth_domains_description') + )->withValue($this->values['apache_auth_domains'] ?? '') + ], $this->lng->txt('apache_auth_security')) + ]; + + if (!$access) { + foreach ($inputs as $key => $input) { + $inputs[$key] = $input->withDisabled(true); + } + } + $form = $this->ui_factory->input()->container()->form()->standard( $this->ctrl->getFormAction($this->parentObject, $access ? $this->save_command : $this->show_command), - [ - 'apache_enable_auth' => $this->buildEnableAuthInput(), - 'apache_enable_local' => $this->ui_field->checkbox($this->lng->txt('apache_enable_local')) - ->withValue((bool) ($this->values['apache_enable_local'] ?? true)), - 'apache_enable_ldap' => $this->buildLdapEnableInput(), - 'apache_auth_indicator_name' => $this->ui_field->text($this->lng->txt('apache_auth_indicator_name')) - ->withRequired(true) - ->withValue($this->values['apache_auth_indicator_name'] ?? ''), - 'apache_auth_indicator_value' => $this->ui_field->text($this->lng->txt('apache_auth_indicator_value')) - ->withRequired(true) - ->withValue($this->values['apache_auth_indicator_value'] ?? ''), - 'apache_auth_enable_override_login_page' => $this->buildAuthEnableOverrideLoginPageInput(), - 'apache_auth_authenticate_on_login_page' => $this->ui_field->checkbox($this->lng->txt('apache_auth_authenticate_on_login_page')) - ->withValue((bool) ($this->values['apache_auth_authenticate_on_login_page'] ?? true)), - 'apache_auth_username_config' => $this->ui_field->section([ - 'apache_auth_username_config_type' => $this->buildAuthUsernameConfigTypeInput() - ], $this->lng->txt('apache_auth_username_config')), - 'apache_auth_security' => $this->ui_field->section([ - 'apache_auth_domains' => $this->ui_field->textarea( - $this->lng->txt('apache_auth_domains'), - $this->lng->txt('apache_auth_domains_description') - )->withValue($this->values['apache_auth_domains'] ?? '') - ], $this->lng->txt('apache_auth_security')) - ] + $inputs ); if (!$access) { @@ -200,7 +208,12 @@ private function buildAuthUsernameConfigTypeInput(): SwitchableGroup '2' => $this->ui_field->group([], $this->lng->txt('apache_auth_username_extended_mapping'))->withDisabled(true), '3' => $this->ui_field->group([], $this->lng->txt('apache_auth_username_by_function')), ], $this->lng->txt('apache_auth_username_config_type')) - ->withValue($this->values['apache_auth_username_config_type'] ?? '1'); + ->withValue( + isset($this->values['apache_auth_username_config_type']) && + $this->values['apache_auth_username_config_type'] !== '' ? + $this->values['apache_auth_username_config_type'] : + '1' + ); } private function checkGroupEnabled(string $post_var): bool diff --git a/components/ILIAS/Authentication/classes/Frontend/class.ilAuthFrontend.php b/components/ILIAS/Authentication/classes/Frontend/class.ilAuthFrontend.php index 04d3d50925df..6343f0015e74 100755 --- a/components/ILIAS/Authentication/classes/Frontend/class.ilAuthFrontend.php +++ b/components/ILIAS/Authentication/classes/Frontend/class.ilAuthFrontend.php @@ -315,6 +315,7 @@ protected function handleAuthenticationSuccess(ilAuthProviderInterface $provider ); $this->getStatus()->setReason(''); + return true; } @@ -454,7 +455,7 @@ protected function handleLoginAttempts(): void } if ($num_deacticated_accounts > 0) { - $this->getStatus()->setReason('auth_err_login_attempts_deactivation'); + $this->getStatus()->setReason('auth_err_invalid_user_account'); } } } diff --git a/components/ILIAS/Authentication/classes/Frontend/class.ilAuthFrontendCredentialsApache.php b/components/ILIAS/Authentication/classes/Frontend/class.ilAuthFrontendCredentialsApache.php index 339838f00c09..1015a9bb32cd 100755 --- a/components/ILIAS/Authentication/classes/Frontend/class.ilAuthFrontendCredentialsApache.php +++ b/components/ILIAS/Authentication/classes/Frontend/class.ilAuthFrontendCredentialsApache.php @@ -18,17 +18,21 @@ declare(strict_types=1); -use Psr\Http\Message\ServerRequestInterface; - class ilAuthFrontendCredentialsApache extends ilAuthFrontendCredentials { - private ServerRequestInterface $httpRequest; - private ilCtrlInterface $ctrl; - private ilSetting $settings; - - public function __construct(ServerRequestInterface $httpRequest, ilCtrlInterface $ctrl) - { - $this->httpRequest = $httpRequest; + private readonly \ILIAS\HTTP\GlobalHttpState $http; + private readonly \ILIAS\Refinery\Factory $refinery; + private readonly ilCtrlInterface $ctrl; + private readonly ilSetting $settings; + + public function __construct( + \ILIAS\HTTP\GlobalHttpState $http, + \ILIAS\Refinery\Factory $refinery, + ilCtrlInterface $ctrl + ) { + global $DIC; + $this->http = $http; + $this->refinery = $refinery; $this->ctrl = $ctrl; $this->settings = new ilSetting('apache_auth'); parent::__construct(); @@ -40,15 +44,6 @@ public function __construct(ServerRequestInterface $httpRequest, ilCtrlInterface */ public function tryAuthenticationOnLoginPage(): void { - $cmd = (string) ($this->httpRequest->getQueryParams()['cmd'] ?? ''); - if ($cmd === '') { - $cmd = (string) ($this->httpRequest->getParsedBody()['cmd'] ?? ''); - } - - if ($cmd === 'force_login') { - return; - } - if (!$this->getSettings()->get('apache_enable_auth', '0')) { return; } @@ -60,29 +55,37 @@ public function tryAuthenticationOnLoginPage(): void if ( (defined('IL_CERT_SSO') && (int) IL_CERT_SSO === 1) || !ilContext::supportsRedirects() || - isset($this->httpRequest->getQueryParams()['passed_sso']) + $this->http->wrapper()->query()->has('passed_sso') ) { return; } - $path = (string) ($this->httpRequest->getServerParams()['REQUEST_URI'] ?? ''); - if (str_starts_with($path, '/')) { - $path = substr($path, 1); - } + $redirect_url = ilUtil::getHtmlPath('./sso/index.php?force_mode_apache=1'); + + if ($this->http->wrapper()->query()->has('target')) { + $url = (string) ($this->http->request()->getServerParams()['REQUEST_URI'] ?? ''); + if (str_starts_with($url, '/')) { + $url = substr($url, 1); + } + + if (!str_starts_with($url, 'http')) { + $parts = parse_url(ILIAS_HTTP_PATH); + $url = $parts['scheme'] . '://' . $parts['host'] . '/' . $url; + } - if (!str_starts_with($path, 'http')) { - $parts = parse_url(ILIAS_HTTP_PATH); - $path = $parts['scheme'] . '://' . $parts['host'] . '/' . $path; + $uri = new \ILIAS\Data\URI($url); + /* + * If `tryAuthenticationOnLoginPage` is called and a permanent-link "target" is provided, + * we ensure using `goto.php` as landing page after successful authentication + */ + $uri = $uri->withPath(str_replace(['login.php', 'ilias.php'], 'goto.php', $uri->getPath())); + $redirect_url = ilUtil::appendUrlParameterString( + $redirect_url, + 'r=' . urlencode($this->refinery->uri()->toString()->transform($uri)) + ); } - $this->ctrl->redirectToURL( - ilUtil::getHtmlPath( - './public/sso/index.php?force_mode_apache=1&' . - 'r=' . urlencode($path) . - '&cookie_path=' . urlencode(IL_COOKIE_PATH) . - '&ilias_path=' . urlencode(ILIAS_HTTP_PATH) - ) - ); + $this->ctrl->redirectToURL($redirect_url); } protected function getSettings(): ilSetting @@ -92,15 +95,15 @@ protected function getSettings(): ilSetting public function initFromRequest(): void { - $mappingFieldName = $this->getSettings()->get('apache_auth_username_direct_mapping_fieldname', ''); + $mapping_field_name = $this->getSettings()->get('apache_auth_username_direct_mapping_fieldname', ''); - $this->logger->dump($this->httpRequest->getServerParams(), ilLogLevel::DEBUG); - $this->logger->debug($mappingFieldName); + $this->logger->dump($this->http->request()->getServerParams(), ilLogLevel::DEBUG); + $this->logger->debug($mapping_field_name); switch ($this->getSettings()->get('apache_auth_username_config_type')) { case ilAuthProviderApache::APACHE_AUTH_TYPE_DIRECT_MAPPING: - if (isset($this->httpRequest->getServerParams()[$mappingFieldName])) { - $this->setUsername($this->httpRequest->getServerParams()[$mappingFieldName]); + if (isset($this->http->request()->getServerParams()[$mapping_field_name])) { + $this->setUsername($this->http->request()->getServerParams()[$mapping_field_name]); } break; @@ -112,26 +115,33 @@ public function initFromRequest(): void public function hasValidTargetUrl(): bool { - $targetUrl = trim((string) ($this->httpRequest->getQueryParams()['r'] ?? '')); - if ($targetUrl === '') { + $target_url = trim( + $this->http->wrapper()->query()->retrieve('r', $this->refinery->byTrying([ + $this->refinery->kindlyTo()->string(), + $this->refinery->always(''), + ])) + ); + if ($target_url === '') { return false; } - $validDomains = []; + $valid_hosts = []; $path = ILIAS_DATA_DIR . '/' . CLIENT_ID . '/apache_auth_allowed_domains.txt'; if (file_exists($path) && is_readable($path)) { foreach (file($path) as $line) { if (trim($line)) { - $validDomains[] = trim($line); + $valid_hosts[] = trim($line); } } } - return (new ilWhiteListUrlValidator($targetUrl, $validDomains))->isValid(); + return (new ilWhiteListUrlValidator($target_url, $valid_hosts))->isValid(); } public function getTargetUrl(): string { - return ilUtil::appendUrlParameterString(trim($this->httpRequest->getQueryParams()['r']), 'passed_sso=1'); + $target_url = trim($this->http->wrapper()->query()->retrieve('r', $this->refinery->kindlyTo()->string())); + + return ilUtil::appendUrlParameterString($target_url, 'passed_sso=1'); } } diff --git a/components/ILIAS/Authentication/classes/Logout/class.ilAuthLogoutBehaviourGUI.php b/components/ILIAS/Authentication/classes/Logout/class.ilAuthLogoutBehaviourGUI.php index d12d308ed18a..519cf73aef9f 100644 --- a/components/ILIAS/Authentication/classes/Logout/class.ilAuthLogoutBehaviourGUI.php +++ b/components/ILIAS/Authentication/classes/Logout/class.ilAuthLogoutBehaviourGUI.php @@ -39,11 +39,13 @@ class ilAuthLogoutBehaviourGUI private Refinery $refinery; private ilSetting $settings; private UIFactory $ui_factory; + private ilErrorHandling $ilErr; private UIRenderer $ui_renderer; + private ilRbacSystem $rbac_system; private ilGlobalTemplateInterface $tpl; private ConfigurableLogoutTarget $configurable_logout_target; - public function __construct() + public function __construct(private readonly int $ref_id) { global $DIC; $this->ctrl = $DIC->ctrl(); @@ -52,7 +54,9 @@ public function __construct() $this->refinery = $DIC->refinery(); $this->tpl = $DIC->ui()->mainTemplate(); $this->ui_factory = $DIC->ui()->factory(); + $this->rbac_system = $DIC->rbac()->system(); $this->ui_renderer = $DIC->ui()->renderer(); + $this->ilErr = $DIC->error(); $this->lng->loadLanguageModule('auth'); $this->settings = new ilSetting('auth'); $this->configurable_logout_target = new ConfigurableLogoutTarget( @@ -157,6 +161,11 @@ public function getForm( ) ); + $access = $this->rbac_system->checkAccess('write', $this->ref_id); + if (!$access) { + $logout_behaviour_switchable_group = $logout_behaviour_switchable_group->withDisabled(true); + } + $section = $this->ui_factory->input()->field() ->section( ['logout_behaviour_settings' => $logout_behaviour_switchable_group], @@ -165,13 +174,19 @@ public function getForm( $form = $this->ui_factory->input()->container()->form() ->standard( - $this->ctrl->getFormAction($this, 'saveForm'), + $access ? + $this->ctrl->getFormAction($this, 'saveForm') : + $this->ctrl->getFormAction($this, 'showForm'), ['logout_behaviour' => $section] ); if ($request) { $form = $form->withRequest($request); } + if (!$access) { + $form = $form->withSubmitLabel($this->lng->txt('refresh')); + } + return $form; } @@ -195,6 +210,11 @@ public function showForm(): void public function saveForm(): void { + if (!$this->rbac_system->checkAccess('write', $this->ref_id)) { + $this->ilErr->raiseError($this->lng->txt('permission_denied'), $this->ilErr->WARNING); + return; + } + $form = $this->getForm(); $form = $form->withRequest($this->http->request()); $section = $form->getInputs()['logout_behaviour']; diff --git a/components/ILIAS/Authentication/classes/Pages/AuthPageLanguagesOverviewTable.php b/components/ILIAS/Authentication/classes/Pages/AuthPageLanguagesOverviewTable.php index 75b1f62ee05e..371672a71e1c 100644 --- a/components/ILIAS/Authentication/classes/Pages/AuthPageLanguagesOverviewTable.php +++ b/components/ILIAS/Authentication/classes/Pages/AuthPageLanguagesOverviewTable.php @@ -27,12 +27,15 @@ use ilLanguage; use ilCtrlInterface; use ilAuthPageEditorSettings; +use ILIAS\Data\Range; +use ilAuthPageEditorGUI; class AuthPageLanguagesOverviewTable implements UI\Component\Table\DataRetrieval { public const string ACTIVATE = 'activate'; public const string DEACTIVATE = 'deactivate'; public const string EDIT = 'edit'; + public const string PREVIEW = 'preview'; private ServerRequestInterface $request; private Data\Factory $data_factory; @@ -47,7 +50,8 @@ public function __construct( \ILIAS\HTTP\Services $http, private readonly \ILIAS\UI\Factory $ui_factory, private readonly \ILIAS\UI\Renderer $ui_renderer, - private readonly AuthPageEditorContext $context + private readonly AuthPageEditorContext $context, + private readonly bool $has_write_access ) { $this->request = $http->request(); $this->data_factory = new Data\Factory(); @@ -61,8 +65,9 @@ public function getComponent(): UI\Component\Table\Data return $this->ui_factory ->table() ->data($this, $this->lng->txt($this->context->pageLanguageIdentifier(true)), $columns) - ->withId(self::class . '_' . $this->context->value) + ->withId(str_replace('\\', '', self::class) . '_' . $this->context->value) ->withOrder(new \ILIAS\Data\Order('language', \ILIAS\Data\Order::ASC)) + ->withRange(new Range(0, 100)) ->withActions($actions) ->withRequest($this->request); } @@ -111,23 +116,28 @@ protected function getActions(): array 'key' ); - return [ - self::EDIT => $this->ui_factory->table()->action()->single( - $this->lng->txt('edit'), - $overview_url_builder->withParameter($overview_action_parameter, self::EDIT), - $overview_row_id - ), - self::ACTIVATE => $this->ui_factory->table()->action()->standard( + $actions = []; + $actions[self::EDIT] = $this->ui_factory->table()->action()->single( + $this->lng->txt($this->has_write_access ? 'edit' : 'preview'), + $overview_url_builder->withParameter($overview_action_parameter, $this->has_write_access ? self::EDIT : self::PREVIEW), + $overview_row_id + ); + + if ($this->has_write_access) { + $actions[self::ACTIVATE] = $this->ui_factory->table()->action()->standard( $this->lng->txt('page_design_activate'), $overview_url_builder->withParameter($overview_action_parameter, self::ACTIVATE), $overview_row_id - ), - self::DEACTIVATE => $this->ui_factory->table()->action()->standard( + ); + + $actions[self::DEACTIVATE] = $this->ui_factory->table()->action()->standard( $this->lng->txt('page_design_deactivate'), $overview_url_builder->withParameter($overview_action_parameter, self::DEACTIVATE), $overview_row_id - ) - ]; + ); + } + + return $actions; } private function initRecords(): void diff --git a/components/ILIAS/Authentication/classes/Password/class.ilLocalUserPasswordSettingsGUI.php b/components/ILIAS/Authentication/classes/Password/class.ilLocalUserPasswordSettingsGUI.php index 90bd185d3bdb..5672209aff5b 100644 --- a/components/ILIAS/Authentication/classes/Password/class.ilLocalUserPasswordSettingsGUI.php +++ b/components/ILIAS/Authentication/classes/Password/class.ilLocalUserPasswordSettingsGUI.php @@ -91,7 +91,7 @@ public function showPasswordCmd( ); } elseif ($this->user->isPasswordExpired()) { $msg = $this->lng->txt('password_expired'); - $password_age = $this->user->getPasswordAge(); + $password_age = $this->user->getPasswordAgeInDays(); $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_INFO, sprintf($msg, $password_age)); } diff --git a/components/ILIAS/Authentication/classes/class.ilAuthPageEditorGUI.php b/components/ILIAS/Authentication/classes/class.ilAuthPageEditorGUI.php index 06de1a95adaf..891e979cfd96 100644 --- a/components/ILIAS/Authentication/classes/class.ilAuthPageEditorGUI.php +++ b/components/ILIAS/Authentication/classes/class.ilAuthPageEditorGUI.php @@ -46,6 +46,8 @@ class ilAuthPageEditorGUI implements ilCtrlSecurityInterface private GUIService $content_style_gui; private int $ref_id; private ?string $request_ipe_context; + private ilRbacSystem $rbac_system; + private ilErrorHandling $ilErr; public function __construct(int $a_ref_id) { @@ -56,9 +58,11 @@ public function __construct(int $a_ref_id) $this->tabs = $DIC->tabs(); $this->http = $DIC->http(); + $this->ilErr = $DIC->ilErr(); $this->refinery = $DIC->refinery(); $this->ui_factory = $DIC->ui()->factory(); $this->ui_renderer = $DIC->ui()->renderer(); + $this->rbac_system = $DIC->rbac()->system(); $this->lng = $DIC['lng']; @@ -170,6 +174,7 @@ private function forwardToPageObject(): void } $this->ctrl->setReturnByClass($ipe_gui_class, 'edit'); + /** @var ilLoginPageGUI $page_gui */ $page_gui = new ($ipe_gui_class)($this->requested_language_id); $this->tpl->addCss(ilObjStyleSheet::getContentStylePath(0)); @@ -180,6 +185,11 @@ private function forwardToPageObject(): void $page_gui->setStyleId($this->content_style_domain->getEffectiveStyleId()); $page_gui->setTemplateOutput(false); + if (!$this->rbac_system->checkAccess('write', $this->ref_id)) { + $page_gui->setOutputMode(ilPageObjectGUI::PREVIEW); + $page_gui->setEnableEditing(false); + } + $html = $this->ctrl->forwardCommand($page_gui); if ($html !== '') { @@ -208,16 +218,21 @@ private function handlePageActionsCommand(): void switch ($action) { case AuthPageLanguagesOverviewTable::DEACTIVATE: case AuthPageLanguagesOverviewTable::ACTIVATE: + if (!$this->rbac_system->checkAccess('write', $this->ref_id)) { + $this->ilErr->raiseError($this->lng->txt('permission_denied'), $this->ilErr->WARNING); + break; + } $this->$action(); break; case AuthPageLanguagesOverviewTable::EDIT: + case AuthPageLanguagesOverviewTable::PREVIEW: $language_id = ilLanguage::lookupId((string) current($keys)); if ($language_id) { $this->ctrl->setParameter($this, 'key', $language_id); $this->ctrl->redirectByClass( $this->getRequestedAuthPageEditorContext()->pageUiClass(), - 'edit' + $action ); } } @@ -290,7 +305,8 @@ private function showPageEditorLanguagesCommand(): void $this->http, $this->ui_factory, $this->ui_renderer, - $this->getRequestedAuthPageEditorContext() + $this->getRequestedAuthPageEditorContext(), + $this->rbac_system->checkAccess('write', $this->ref_id) ); $this->tpl->setContent($this->ui_renderer->render($tbl->getComponent())); diff --git a/components/ILIAS/Authentication/classes/class.ilObjAuthSettingsGUI.php b/components/ILIAS/Authentication/classes/class.ilObjAuthSettingsGUI.php index 72a37d0a1817..acfc418912d5 100755 --- a/components/ILIAS/Authentication/classes/class.ilObjAuthSettingsGUI.php +++ b/components/ILIAS/Authentication/classes/class.ilObjAuthSettingsGUI.php @@ -49,6 +49,7 @@ public function __construct($a_data, int $a_id, bool $a_call_by_reference, bool global $DIC; $this->logger = $DIC->logger()->auth(); + $this->lng->loadLanguageModule('administration'); $this->lng->loadLanguageModule('registration'); $this->lng->loadLanguageModule('auth'); $this->lng->loadLanguageModule('content'); @@ -114,6 +115,7 @@ private function authSettingsObject( ); $this->logger->debug(print_r($auth_modes, true)); + $access = $this->rbac_system->checkAccess('write', $this->object->getRefId()); foreach ($auth_modes as $mode => $mode_name) { if (!in_array($mode, $valid_modes, true) && !ilLDAPServer::isAuthModeLDAP( (string) $mode @@ -164,6 +166,11 @@ private function authSettingsObject( } $generalSettingsTpl->setVariable('AUTH_ID', $mode_name); $generalSettingsTpl->setVariable('AUTH_VAL', $mode); + + if (!$access) { + $generalSettingsTpl->touchBlock('DISABLED'); + } + $generalSettingsTpl->setCurrentBlock('auth_mode'); $generalSettingsTpl->parseCurrentBlock(); } @@ -209,18 +216,29 @@ private function authSettingsObject( private function buildRegistrationRoleMappingForm(): ILIAS\UI\Component\Input\Container\Form\Form { - $disabled_fields = !$this->rbac_system->checkAccess('write', $this->object->getRefId()); + $access = $this->rbac_system->checkAccess('write', $this->object->getRefId()); $fields = []; $reg_roles = ilObjRole::_lookupRegisterAllowed(); - $excluded_auth_names = ['default', 'saml', 'shibboleth', 'ldap', 'apache', 'ecs', 'openid']; + $excluded_auth_names = ['default', 'saml', 'shibboleth', 'ldap', 'lti', 'apache', 'ecs', 'oidc']; // do not list auth modes with external login screen // even not default, because it can easily be set to // a non-working auth mode $active_auth_modes = array_filter( ilAuthUtils::_getActiveAuthModes(), - static fn(string $auth_name): bool => in_array($auth_name, $excluded_auth_names, true), + static function (string $auth_name) use ($excluded_auth_names): bool { + foreach ($excluded_auth_names as $excluded_auth_name) { + if ($auth_name === $excluded_auth_name) { + return false; + } + + if (str_starts_with($auth_name, $excluded_auth_name)) { + return false; + } + } + return true; + }, ARRAY_FILTER_USE_KEY ); @@ -232,12 +250,6 @@ private function buildRegistrationRoleMappingForm(): ILIAS\UI\Component\Input\Co $name = $this->lng->txt('auth_' . $auth_name) . ' (' . $this->lng->txt( 'auth_' . ilAuthUtils::_getAuthModeName($auth_key) ) . ')'; - } elseif ($id = ilLDAPServer::getServerIdByAuthMode((string) $auth_key)) { - $server = ilLDAPServer::getInstanceByServerId($id); - $name = $server->getName(); - } elseif ($id = ilSamlIdp::getIdpIdByAuthMode((string) $auth_key)) { - $idp = ilSamlIdp::getInstanceByIdpId($id); - $name = $idp->getEntityId(); } else { $name = $this->lng->txt('auth_' . $auth_name); } @@ -253,7 +265,7 @@ private function buildRegistrationRoleMappingForm(): ILIAS\UI\Component\Input\Co continue; } - $value = $value ?? ilAuthUtils::AUTH_LOCAL; + $value = $value ?? ilAuthUtils::_getAuthModeName(ilAuthUtils::AUTH_LOCAL); $fields['r_' . $role['id']] = $this->ui_factory ->input() @@ -266,15 +278,26 @@ private function buildRegistrationRoleMappingForm(): ILIAS\UI\Component\Input\Co ->withRequired(true) ->withValue($value) ->withDedicatedName('r_' . $role['id']) - ->withDisabled($disabled_fields); + ->withDisabled(!$access); } - return $this->ui_factory + $form = $this->ui_factory ->input() ->container() ->form() - ->standard($this->ctrl->getFormAction($this, 'updateRegistrationRoleMapping'), $fields) + ->standard( + $access ? + $this->ctrl->getFormAction($this, 'updateRegistrationRoleMapping') : + $this->ctrl->getFormAction($this, 'authSettings'), + $fields + ) ->withDedicatedName('registration_role_mapping'); + + if (!$access) { + $form = $form->withSubmitLabel($this->lng->txt('refresh')); + } + + return $form; } private function updateRegistrationRoleMappingObject(): void @@ -322,7 +345,7 @@ private function buildAuthModeDeterminationForm(): ?ILIAS\UI\Component\Input\Con return null; } - $disabled_fields = !$this->rbac_system->checkAccess('write', $this->object->getRefId()); + $access = $this->rbac_system->checkAccess('write', $this->object->getRefId()); $automatic_options = []; $counter = 1; @@ -358,7 +381,7 @@ private function buildAuthModeDeterminationForm(): ?ILIAS\UI\Component\Input\Con ->numeric($text) ->withDedicatedName('m' . $auth_mode) ->withValue($counter++) - ->withDisabled($disabled_fields); + ->withDisabled(!$access); } $options = [ @@ -370,7 +393,7 @@ private function buildAuthModeDeterminationForm(): ?ILIAS\UI\Component\Input\Con $this->lng->txt('auth_by_user') ) ->withDedicatedName((string) ilAuthModeDetermination::TYPE_MANUAL) - ->withDisabled($disabled_fields), + ->withDisabled(!$access), (string) ilAuthModeDetermination::TYPE_AUTOMATIC => $this->ui_factory ->input() ->field() @@ -379,7 +402,7 @@ private function buildAuthModeDeterminationForm(): ?ILIAS\UI\Component\Input\Con $this->lng->txt('auth_automatic') ) ->withDedicatedName((string) ilAuthModeDetermination::TYPE_AUTOMATIC) - ->withDisabled($disabled_fields) + ->withDisabled(!$access) ]; $sections = [ @@ -393,15 +416,20 @@ private function buildAuthModeDeterminationForm(): ?ILIAS\UI\Component\Input\Con ) ->withDedicatedName(self::PROP_AUTH_MODE_KIND) ->withValue((string) $det->getKind()) - ->withDisabled($disabled_fields) + ->withDisabled(!$access) ->withRequired(true) ]; - return $this->ui_factory + $form = $this->ui_factory ->input() ->container() ->form() - ->standard($this->ctrl->getFormAction($this, 'updateAuthModeDetermination'), $sections) + ->standard( + $access ? + $this->ctrl->getFormAction($this, 'updateAuthModeDetermination') : + $this->ctrl->getFormAction($this, 'authSettings'), + $sections + ) ->withDedicatedName('auth_mode_determination') ->withAdditionalTransformation( $this->refinery->custom()->transformation(function ($value): array { @@ -423,6 +451,12 @@ private function buildAuthModeDeterminationForm(): ?ILIAS\UI\Component\Input\Con return $merged_values; }) ); + + if (!$access) { + $form = $form->withSubmitLabel($this->lng->txt('refresh')); + } + + return $form; } private function updateAuthModeDeterminationObject(): void @@ -556,7 +590,8 @@ public function setAuthModeObject(): void } private function buildSOAPForm( - string $submit_action + string $submit_action, + string $show_action ): \ILIAS\UI\Component\Input\Container\Form\Form { $role_list = $this->rbac_review->getRolesByFilter(2, $this->object->getId()); $roles = []; @@ -665,22 +700,36 @@ private function buildSOAPForm( ) ->withValue((bool) $this->settings->get('soap_auth_user_default_role', '')); + $access = $this->rbac_system->checkAccess('write', $this->object->getRefId()); + $inputs = [ + 'active' => $active, + 'server' => $server, + 'port' => $port, + 'use_https' => $use_https, + 'uri' => $uri, + 'namespace' => $namespace, + 'dotnet' => $dotnet, + 'createuser' => $createuser, + 'sendmail' => $sendmail, + 'defaultrole' => $defaultrole, + 'allowlocal' => $allowlocal + ]; + + if (!$access) { + foreach ($inputs as $key => $input) { + $inputs[$key] = $input->withDisabled(true); + } + } + $form = $this->ui_factory->input()->container()->form()->standard( - $submit_action, - [ - 'active' => $active, - 'server' => $server, - 'port' => $port, - 'use_https' => $use_https, - 'uri' => $uri, - 'namespace' => $namespace, - 'dotnet' => $dotnet, - 'createuser' => $createuser, - 'sendmail' => $sendmail, - 'defaultrole' => $defaultrole, - 'allowlocal' => $allowlocal - ] + $access ? $submit_action : $show_action, + $inputs ); + + if (!$access) { + $form = $form->withSubmitLabel($this->lng->txt('refresh')); + } + return $form; } @@ -702,7 +751,7 @@ private function buildSOAPTestForm( 'soap_pw' => $soap_pw, 'new_user' => $new_user ] - )->withSubmitLabel('Send'); + )->withSubmitLabel($this->lng->txt('send')); } public function editSOAPObject(): void @@ -711,8 +760,13 @@ public function editSOAPObject(): void $this->ilias->raiseError($this->lng->txt('permission_denied'), $this->ilias->error_obj->MESSAGE); } - $soap_form = $this->buildSOAPForm($this->ctrl->getFormAction($this, 'saveSOAP')); - $test_form = $this->buildSOAPTestForm($this->ctrl->getFormAction($this, 'testSoapAuthConnection')); + $soap_form = $this->buildSOAPForm( + $this->ctrl->getFormAction($this, 'saveSOAP'), + $this->ctrl->getFormAction($this, 'editSOAP') + ); + $test_form = $this->buildSOAPTestForm( + $this->ctrl->getFormAction($this, 'testSoapAuthConnection'), + ); $this->tabs_gui->setTabActive('auth_soap'); $panel = $this->ui_factory->panel()->standard('SOAP', [$soap_form, $test_form]); @@ -725,15 +779,20 @@ public function testSoapAuthConnectionObject(): void $this->ilias->raiseError($this->lng->txt('permission_denied'), $this->ilias->error_obj->MESSAGE); } - $soap_form = $this->buildSOAPForm($this->ctrl->getFormAction($this, 'saveSOAP')); - $test_form = $this->buildSOAPTestForm($this->ctrl->getFormAction($this, 'testSoapAuthConnection')); + $soap_form = $this->buildSOAPForm( + $this->ctrl->getFormAction($this, 'saveSOAP'), + $this->ctrl->getFormAction($this, 'editSOAP') + ); + $test_form = $this->buildSOAPTestForm( + $this->ctrl->getFormAction($this, 'testSoapAuthConnection') + ); $panel_content = [$soap_form, $test_form]; if ($this->request->getMethod() === 'POST') { $test_form = $test_form->withRequest($this->request); $result = $test_form->getData(); if ($result !== null) { $panel_content[] = $this->ui_factory->legacy()->content( - ilSOAPAuth::testConnection($result['ext_uid'], $result['soap_pw'], $result['new_user']) + ilAuthSOAP::testConnection($result['ext_uid'], $result['soap_pw'], $result['new_user']) ); } } @@ -748,8 +807,13 @@ public function saveSOAPObject(): void $this->ilias->raiseError($this->lng->txt('permission_denied'), $this->ilias->error_obj->MESSAGE); } - $soap_form = $this->buildSOAPForm($this->ctrl->getFormAction($this, 'saveSOAP')); - $test_form = $this->buildSOAPTestForm($this->ctrl->getFormAction($this, 'testSoapAuthConnection')); + $soap_form = $this->buildSOAPForm( + $this->ctrl->getFormAction($this, 'saveSOAP'), + $this->ctrl->getFormAction($this, 'editSOAP') + ); + $test_form = $this->buildSOAPTestForm( + $this->ctrl->getFormAction($this, 'testSoapAuthConnection'), + ); if ($this->request->getMethod() === 'POST') { $soap_form = $soap_form->withRequest($this->request); $result = $soap_form->getData(); @@ -905,7 +969,6 @@ public function executeCommand(): void break; case strtolower(ilObjectContentStyleSettingsGUI::class): - $this->checkPermission('write'); $this->setTitleAndDescription(); $this->setSubTabs('authSettings'); $this->tabs_gui->activateTab('authentication_settings'); @@ -924,7 +987,7 @@ public function executeCommand(): void $this->tabs_gui->setTabActive('authentication_settings'); $this->tabs_gui->setSubTabActive('logout_behaviour'); - $gui = new ilAuthLogoutBehaviourGUI(); + $gui = new ilAuthLogoutBehaviourGUI($this->object->getRefId()); $this->ctrl->forwardCommand($gui); break; @@ -1020,7 +1083,7 @@ public function setSubTabs(string $a_tab): void { $this->lng->loadLanguageModule('auth'); - if ($a_tab === 'authSettings' && $this->access->checkAccess('write', '', $this->object->getRefId())) { + if ($a_tab === 'authSettings' && $this->access->checkAccess('read', '', $this->object->getRefId())) { $this->tabs_gui->addSubTabTarget( 'auth_settings', $this->ctrl->getLinkTarget($this, 'authSettings'), @@ -1162,7 +1225,7 @@ public function saveApacheSettingsObject(): void $this->ctrl->redirect($this, self::CMD_SHOW_APACHE_SETTINGS); } - $this->ctrl->redirect($this, self::CMD_SHOW_APACHE_SETTINGS); + $this->apacheAuthSettingsObject($form); } private function validateApacheAuthAllowedDomains(string $text): string diff --git a/components/ILIAS/Authentication/classes/class.ilSession.php b/components/ILIAS/Authentication/classes/class.ilSession.php index 944c5a29d504..cf9cef39f946 100755 --- a/components/ILIAS/Authentication/classes/class.ilSession.php +++ b/components/ILIAS/Authentication/classes/class.ilSession.php @@ -195,7 +195,7 @@ public static function _writeData(string $a_session_id, string $a_data): bool if ($r->getInt(0, 50) === 2) { // get time _before_ destroying expired sessions self::_destroyExpiredSessions(); - ilSessionStatistics::aggretateRaw($now); + ilSessionStatistics::aggregateRaw($now); } } @@ -228,29 +228,35 @@ public static function _destroy($a_session_id, ?int $a_closing_context = null, $ { global $DIC; - $ilDB = $DIC['ilDB']; - if (!$a_closing_context) { $a_closing_context = self::$closing_context; } ilSessionStatistics::closeRawEntry($a_session_id, $a_closing_context, $a_expired_at); + $deletion_queries = []; if (is_array($a_session_id)) { // array: id => timestamp - so we get rid of timestamps if ($a_expired_at) { $a_session_id = array_keys($a_session_id); } - $q = 'DELETE FROM usr_session WHERE ' . - $ilDB->in('session_id', $a_session_id, false, 'text'); + + $chunk_size = 500; + $batches = array_chunk($a_session_id, $chunk_size); + foreach ($batches as $batch) { + $deletion_queries[] = 'DELETE FROM usr_session WHERE ' . + $DIC->database()->in('session_id', $batch, false, ilDBConstants::T_TEXT); + } } else { - $q = 'DELETE FROM usr_session WHERE session_id = ' . - $ilDB->quote($a_session_id, 'text'); + $deletion_queries[] = 'DELETE FROM usr_session WHERE session_id = ' . + $DIC->database()->quote($a_session_id, ilDBConstants::T_TEXT); } ilSessionIStorage::destroySession($a_session_id); - $ilDB->manipulate($q); + foreach ($deletion_queries as $deletion_query) { + $DIC->database()->manipulate($deletion_query); + } if (ilContext::usesHTTP()) { try { diff --git a/components/ILIAS/Authentication/classes/class.ilSessionIStorage.php b/components/ILIAS/Authentication/classes/class.ilSessionIStorage.php index bdc032d65575..c619f280ead4 100755 --- a/components/ILIAS/Authentication/classes/class.ilSessionIStorage.php +++ b/components/ILIAS/Authentication/classes/class.ilSessionIStorage.php @@ -114,13 +114,17 @@ public static function destroySession($a_session_id): void global $DIC; if (is_array($a_session_id)) { - $q = 'DELETE FROM usr_sess_istorage WHERE ' . - $DIC->database()->in('session_id', $a_session_id, false, 'text'); + $chunk_size = 500; + $batches = array_chunk($a_session_id, $chunk_size); + foreach ($batches as $batch) { + $q = 'DELETE FROM usr_sess_istorage WHERE ' . + $DIC->database()->in('session_id', $batch, false, ilDBConstants::T_TEXT); + $DIC->database()->manipulate($q); + } } else { $q = 'DELETE FROM usr_sess_istorage WHERE session_id = ' . - $DIC->database()->quote($a_session_id, 'text'); + $DIC->database()->quote($a_session_id, ilDBConstants::T_TEXT); + $DIC->database()->manipulate($q); } - - $DIC->database()->manipulate($q); } } diff --git a/components/ILIAS/Authentication/classes/class.ilSessionStatistics.php b/components/ILIAS/Authentication/classes/class.ilSessionStatistics.php index 8ed679c53efe..9c0b97ede4c3 100755 --- a/components/ILIAS/Authentication/classes/class.ilSessionStatistics.php +++ b/components/ILIAS/Authentication/classes/class.ilSessionStatistics.php @@ -22,25 +22,25 @@ class ilSessionStatistics { private const int SLOT_SIZE = 15; - /** - * Is session statistics active at all? - */ + private static ?ilDBStatement $number_of_active_raw_sessions_statement = null; + private static ?ilDBStatement $aggregated_raw_data_statement = null; + private static ?ilDBStatement $raw_data_statement = null; + public static function isActive(): bool { global $DIC; + /** @var ilSetting $ilSetting */ $ilSetting = $DIC['ilSetting']; return (bool) $ilSetting->get('session_statistics', '1'); } - /** - * Create raw data entry - */ public static function createRawEntry(string $a_session_id, int $a_session_type, int $a_timestamp, int $a_user_id): void { global $DIC; + /** @var ilDBInterface $ilDB */ $ilDB = $DIC['ilDB']; if (!$a_user_id || !$a_session_id || !self::isActive()) { @@ -49,31 +49,28 @@ public static function createRawEntry(string $a_session_id, int $a_session_type, // #9669: if a session was destroyed and somehow the session id is still // in use there will be a id-collision for the raw-entry - $ilDB->replace( 'usr_session_stats_raw', [ - 'session_id' => ['text', $a_session_id] + 'session_id' => [ilDBConstants::T_TEXT, $a_session_id] ], [ - 'type' => ['integer', $a_session_type], - 'start_time' => ['integer', $a_timestamp], - 'user_id' => ['integer', $a_user_id] + 'type' => [ilDBConstants::T_INTEGER, $a_session_type], + 'start_time' => [ilDBConstants::T_INTEGER, $a_timestamp], + 'user_id' => [ilDBConstants::T_INTEGER, $a_user_id] ] ); } /** - * Close raw data entry - * - * @param int|array $a_session_id - * @param int $a_context + * @param string|list $a_session_id * @param int|bool $a_expired_at */ public static function closeRawEntry($a_session_id, ?int $a_context = null, $a_expired_at = null): void { global $DIC; + /** @var ilDBInterface $ilDB */ $ilDB = $DIC['ilDB']; if (!self::isActive()) { @@ -88,22 +85,22 @@ public static function closeRawEntry($a_session_id, ?int $a_context = null, $a_e $end_time = time(); } $sql = 'UPDATE usr_session_stats_raw' . - ' SET end_time = ' . $ilDB->quote($end_time, 'integer'); + ' SET end_time = ' . $ilDB->quote($end_time, ilDBConstants::T_INTEGER); if ($a_context) { - $sql .= ',end_context = ' . $ilDB->quote($a_context, 'integer'); + $sql .= ', end_context = ' . $ilDB->quote($a_context, ilDBConstants::T_INTEGER); } - $sql .= ' WHERE session_id = ' . $ilDB->quote($a_session_id, 'text') . + $sql .= ' WHERE session_id = ' . $ilDB->quote($a_session_id, ilDBConstants::T_TEXT) . ' AND end_time IS NULL'; $ilDB->manipulate($sql); } // batch closing elseif (!$a_expired_at) { $sql = 'UPDATE usr_session_stats_raw' . - ' SET end_time = ' . $ilDB->quote(time(), 'integer'); + ' SET end_time = ' . $ilDB->quote(time(), ilDBConstants::T_INTEGER); if ($a_context) { - $sql .= ',end_context = ' . $ilDB->quote($a_context, 'integer'); + $sql .= ', end_context = ' . $ilDB->quote($a_context, ilDBConstants::T_INTEGER); } - $sql .= ' WHERE ' . $ilDB->in('session_id', $a_session_id, false, 'text') . + $sql .= ' WHERE ' . $ilDB->in('session_id', $a_session_id, false, ilDBConstants::T_TEXT) . ' AND end_time IS NULL'; $ilDB->manipulate($sql); } @@ -111,11 +108,11 @@ public static function closeRawEntry($a_session_id, ?int $a_context = null, $a_e else { foreach ($a_session_id as $id => $ts) { $sql = 'UPDATE usr_session_stats_raw' . - ' SET end_time = ' . $ilDB->quote($ts, 'integer'); + ' SET end_time = ' . $ilDB->quote($ts, ilDBConstants::T_INTEGER); if ($a_context) { - $sql .= ',end_context = ' . $ilDB->quote($a_context, 'integer'); + $sql .= ', end_context = ' . $ilDB->quote($a_context, ilDBConstants::T_INTEGER); } - $sql .= ' WHERE session_id = ' . $ilDB->quote($id, 'text') . + $sql .= ' WHERE session_id = ' . $ilDB->quote($id, ilDBConstants::T_TEXT) . ' AND end_time IS NULL'; $ilDB->manipulate($sql); } @@ -124,18 +121,17 @@ public static function closeRawEntry($a_session_id, ?int $a_context = null, $a_e /** * Get next slot to aggregate - * - * @return array begin, end + * @return array{0: int, 1: int}|null */ - protected static function getCurrentSlot(int $a_now): ?array + private static function getCurrentSlot(int $a_now): ?array { global $DIC; + /** @var ilDBInterface $ilDB */ $ilDB = $DIC['ilDB']; // get latest slot in db - $sql = 'SELECT MAX(slot_end) previous_slot_end' . - ' FROM usr_session_stats'; + $sql = 'SELECT MAX(slot_end) previous_slot_end FROM usr_session_stats'; $res = $ilDB->query($sql); $row = $ilDB->fetchAssoc($res); $previous_slot_end = $row['previous_slot_end']; @@ -162,55 +158,53 @@ protected static function getCurrentSlot(int $a_now): ?array if ($current_slot_end < $a_now) { return [$current_slot_begin, $current_slot_end]; } + return null; } - protected static function getNumberOfActiveRawSessions(int $a_time): int + private static function getNumberOfActiveRawSessions(int $a_time): int { global $DIC; + /** @var ilDBInterface $ilDB */ $ilDB = $DIC['ilDB']; - $sql = 'SELECT COUNT(*) counter FROM usr_session_stats_raw' . - ' WHERE (end_time IS NULL OR end_time >= ' . $ilDB->quote($a_time, 'integer') . ')' . - ' AND start_time <= ' . $ilDB->quote($a_time, 'integer') . - ' AND ' . $ilDB->in('type', ilSessionControl::$session_types_controlled, false, 'integer'); - $res = $ilDB->query($sql); - $row = $ilDB->fetchAssoc($res); - return (int) $row['counter']; + return (int) $ilDB->fetchAssoc( + $ilDB->execute( + self::getNumberOfActiveRawSessionsPreparedStatement(), + [$a_time, $a_time] + ) + )['counter']; } /** - * Read raw data for timespan + * @return Generator */ - protected static function getRawData(int $a_begin, int $a_end): array + private static function getRawData(int $a_begin, int $a_end): Generator { global $DIC; + /** @var ilDBInterface $ilDB */ $ilDB = $DIC['ilDB']; - $sql = 'SELECT start_time,end_time,end_context FROM usr_session_stats_raw' . - ' WHERE start_time <= ' . $ilDB->quote($a_end, 'integer') . - ' AND (end_time IS NULL OR end_time >= ' . $ilDB->quote($a_begin, 'integer') . ')' . - ' AND ' . $ilDB->in('type', ilSessionControl::$session_types_controlled, false, 'integer') . - ' ORDER BY start_time'; - $res = $ilDB->query($sql); - $all = []; + $res = $ilDB->execute( + self::getRawDataPreparedStatement(), + [$a_end, $a_begin] + ); while ($row = $ilDB->fetchAssoc($res)) { - $all[] = $row; + yield $row; } - return $all; } /** * Create new slot (using table lock) - * - * @return array begin, end + * @return array{0: int, 1: int}|null */ - protected static function createNewAggregationSlot(int $a_now): ?array + private static function createNewAggregationSlot(int $a_now): ?array { global $DIC; + /** @var ilDBInterface $ilDB */ $ilDB = $DIC['ilDB']; $ilAtomQuery = $ilDB->buildAtomQuery(); @@ -226,8 +220,8 @@ protected static function createNewAggregationSlot(int $a_now): ?array // save slot to mark as taken $fields = [ - 'slot_begin' => ['integer', $slot[0]], - 'slot_end' => ['integer', $slot[1]], + 'slot_begin' => [ilDBConstants::T_INTEGER, $slot[0]], + 'slot_end' => [ilDBConstants::T_INTEGER, $slot[1]], ]; $ilDB->insert('usr_session_stats', $fields); }); @@ -237,10 +231,7 @@ protected static function createNewAggregationSlot(int $a_now): ?array return $slot; } - /** - * Aggregate raw session data (older than given time) - */ - public static function aggretateRaw(int $a_now): void + public static function aggregateRaw(int $a_now): void { if (!self::isActive()) { return; @@ -256,14 +247,90 @@ public static function aggretateRaw(int $a_now): void self::deleteAggregatedRaw($a_now); } - /** - * Aggregate statistics data for one slot - * - */ - public static function aggregateRawHelper(int $a_begin, int $a_end): void + private static function getNumberOfActiveRawSessionsPreparedStatement(): ilDBStatement + { + if (self::$number_of_active_raw_sessions_statement === null) { + global $DIC; + + /** @var ilDBInterface $ilDB */ + $ilDB = $DIC['ilDB']; + + self::$number_of_active_raw_sessions_statement = $ilDB->prepare( + 'SELECT COUNT(*) counter FROM usr_session_stats_raw ' + . 'WHERE (end_time IS NULL OR end_time >= ?) ' + . 'AND start_time <= ? ' + . 'AND ' . $ilDB->in('type', ilSessionControl::$session_types_controlled, false, ilDBConstants::T_INTEGER), + [ilDBConstants::T_INTEGER, ilDBConstants::T_INTEGER] + ); + } + + return self::$number_of_active_raw_sessions_statement; + } + + private static function getAggregatedRawDataPreparedStatement(): ilDBStatement + { + if (!self::$aggregated_raw_data_statement) { + global $DIC; + + /** @var ilDBInterface $ilDB */ + $ilDB = $DIC['ilDB']; + + self::$aggregated_raw_data_statement = $ilDB->prepareManip( + 'UPDATE usr_session_stats ' + . 'SET active_min = ?, ' + . 'active_max = ?, ' + . 'active_avg = ?, ' + . 'active_end = ?, ' + . 'opened = ?, ' + . 'closed_manual = ?, ' + . 'closed_expire = ?, ' + . 'closed_login = ?, ' + . 'closed_misc = ? ' + . 'WHERE slot_begin = ? AND slot_end = ?', + [ + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER + ] + ); + } + + return self::$aggregated_raw_data_statement; + } + + private static function getRawDataPreparedStatement(): ilDBStatement + { + if (!self::$raw_data_statement) { + global $DIC; + + /** @var ilDBInterface $ilDB */ + $ilDB = $DIC['ilDB']; + + self::$raw_data_statement = $ilDB->prepare( + 'SELECT start_time, end_time, end_context FROM usr_session_stats_raw' . + ' WHERE start_time <= ?' . + ' AND (end_time IS NULL OR end_time >= ?)' . + ' AND ' . $ilDB->in('type', ilSessionControl::$session_types_controlled, false, ilDBConstants::T_INTEGER) . + ' ORDER BY start_time', + [ilDBConstants::T_INTEGER, ilDBConstants::T_INTEGER] + ); + } + return self::$raw_data_statement; + } + + private static function aggregateRawHelper(int $a_begin, int $a_end): void { global $DIC; + /** @var ilDBInterface $ilDB */ $ilDB = $DIC['ilDB']; // "relevant" closing types @@ -274,7 +341,8 @@ public static function aggregateRawHelper(int $a_begin, int $a_end): void ]; // gather/process data (build event timeline) - $closed_counter = $events = []; + $events = []; + $closed_counter = $events; $opened_counter = 0; foreach (self::getRawData($a_begin, $a_end) as $item) { // open/close counters are _not_ time related @@ -304,11 +372,14 @@ public static function aggregateRawHelper(int $a_begin, int $a_end): void } } - // initialising active statistical values + // initializing active statistical values $active_begin = self::getNumberOfActiveRawSessions($a_begin - 1); - $active_end = $active_min = $active_max = $active_avg = $active_begin; + $active_avg = $active_begin; + $active_max = $active_begin; + $active_min = $active_begin; + $active_end = $active_begin; - // parsing events / building avergages + // parsing events / building averages if (count($events)) { $last_update_avg = $a_begin - 1; $slot_seconds = self::SLOT_SIZE * 60; @@ -355,35 +426,29 @@ public static function aggregateRawHelper(int $a_begin, int $a_end): void } unset($events); - // save aggregated data - $fields = [ - 'active_min' => ['integer', $active_min], - 'active_max' => ['integer', $active_max], - 'active_avg' => ['integer', $active_avg], - 'active_end' => ['integer', $active_end], - 'opened' => ['integer', $opened_counter], - 'closed_manual' => ['integer', (int) ($closed_counter[ilSession::SESSION_CLOSE_USER] ?? 0)], - 'closed_expire' => ['integer', (int) ($closed_counter[ilSession::SESSION_CLOSE_EXPIRE] ?? 0)], - 'closed_login' => ['integer', (int) ($closed_counter[ilSession::SESSION_CLOSE_LOGIN] ?? 0)], - 'closed_misc' => ['integer', (int) ($closed_counter[0] ?? 0)], - ]; - $ilDB->update( - 'usr_session_stats', - $fields, + $ilDB->execute( + self::getAggregatedRawDataPreparedStatement(), [ - 'slot_begin' => ['integer', $a_begin], - 'slot_end' => ['integer', $a_end] + 'active_min' => $active_min, + 'active_max' => $active_max, + 'active_avg' => $active_avg, + 'active_end' => $active_end, + 'opened' => $opened_counter, + 'closed_manual' => (int) ($closed_counter[ilSession::SESSION_CLOSE_USER] ?? 0), + 'closed_expire' => (int) ($closed_counter[ilSession::SESSION_CLOSE_EXPIRE] ?? 0), + 'closed_login' => (int) ($closed_counter[ilSession::SESSION_CLOSE_LOGIN] ?? 0), + 'closed_misc' => (int) ($closed_counter[0] ?? 0), + 'slot_begin' => $a_begin, + 'slot_end' => $a_end ] ); } - /** - * Remove already aggregated raw data - */ - protected static function deleteAggregatedRaw(int $a_now): void + private static function deleteAggregatedRaw(int $a_now): void { global $DIC; + /** @var ilDBInterface $ilDB */ $ilDB = $DIC['ilDB']; // we are rather defensive here - 7 days BEFORE current aggregation @@ -391,31 +456,33 @@ protected static function deleteAggregatedRaw(int $a_now): void $ilDB->manipulate( 'DELETE FROM usr_session_stats_raw' . - ' WHERE start_time <= ' . $ilDB->quote($cut, 'integer') + ' WHERE start_time <= ' . $ilDB->quote($cut, ilDBConstants::T_INTEGER) ); } /** - * Get session counters by type (opened, closed) + * @return array{opened: int, closed_manual: int, closed_expire: int, closed_login: int, closed_misc: int} */ public static function getNumberOfSessionsByType(int $a_from, int $a_to): array { global $DIC; + /** @var ilDBInterface $ilDB */ $ilDB = $DIC['ilDB']; $sql = 'SELECT SUM(opened) opened, SUM(closed_manual) closed_manual,' . ' SUM(closed_expire) closed_expire,' . ' SUM(closed_login) closed_login, SUM(closed_misc) closed_misc' . ' FROM usr_session_stats' . - ' WHERE slot_end > ' . $ilDB->quote($a_from, 'integer') . - ' AND slot_begin < ' . $ilDB->quote($a_to, 'integer'); + ' WHERE slot_end > ' . $ilDB->quote($a_from, ilDBConstants::T_INTEGER) . + ' AND slot_begin < ' . $ilDB->quote($a_to, ilDBConstants::T_INTEGER); $res = $ilDB->query($sql); + return $ilDB->fetchAssoc($res); } /** - * Get active sessions aggregated data + * @return list */ public static function getActiveSessions(int $a_from, int $a_to): array { @@ -426,18 +493,16 @@ public static function getActiveSessions(int $a_from, int $a_to): array $sql = 'SELECT slot_begin, slot_end, active_min, active_max, active_avg' . ' FROM usr_session_stats' . - ' WHERE slot_end > ' . $ilDB->quote($a_from, 'integer') . - ' AND slot_begin < ' . $ilDB->quote($a_to, 'integer') . + ' WHERE slot_end > ' . $ilDB->quote($a_from, ilDBConstants::T_INTEGER) . + ' AND slot_begin < ' . $ilDB->quote($a_to, ilDBConstants::T_INTEGER) . ' ORDER BY slot_begin'; $res = $ilDB->query($sql); + $all = []; while ($row = $ilDB->fetchAssoc($res)) { - $entry = []; - foreach ($row as $key => $value) { - $entry[$key] = (int) $value; - } - $all[] = $entry; + $all[] = array_map(intval(...), $row); } + return $all; } @@ -450,12 +515,13 @@ public static function getLastAggregation(): ?int $ilDB = $DIC['ilDB']; - $sql = 'SELECT max(slot_end) latest FROM usr_session_stats'; + $sql = 'SELECT MAX(slot_end) latest FROM usr_session_stats'; $res = $ilDB->query($sql); $row = $ilDB->fetchAssoc($res); - if ($row['latest']) { + if ($row['latest'] !== null) { return (int) $row['latest']; } + //TODO check if return null as timestamp causes issues return null; } diff --git a/components/ILIAS/Authentication/classes/class.ilSessionStatisticsGUI.php b/components/ILIAS/Authentication/classes/class.ilSessionStatisticsGUI.php index f376c171789f..890937ba001e 100755 --- a/components/ILIAS/Authentication/classes/class.ilSessionStatisticsGUI.php +++ b/components/ILIAS/Authentication/classes/class.ilSessionStatisticsGUI.php @@ -736,7 +736,7 @@ protected function adminSync(): void // see ilSession::_writeData() $now = time(); ilSession::_destroyExpiredSessions(); - ilSessionStatistics::aggretateRaw($now); + ilSessionStatistics::aggregateRaw($now); $this->tpl->setOnScreenMessage('success', $this->lng->txt('trac_sync_session_stats_success'), true); $this->ilCtrl->redirect($this); diff --git a/components/ILIAS/Authentication/resources/js/dist/SessionReminder.min.js b/components/ILIAS/Authentication/resources/js/dist/SessionReminder.min.js index 1cf72f07e9f0..e6a1ddd46202 100644 --- a/components/ILIAS/Authentication/resources/js/dist/SessionReminder.min.js +++ b/components/ILIAS/Authentication/resources/js/dist/SessionReminder.min.js @@ -12,4 +12,4 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning */ -!function(e){"use strict";class t{#e;#t;#s;#i;#r;#n;constructor(e,t,s,i,r){this.#e=e,this.#i=s,this.#s=t,this.#n=i,this.#r=r;const n=this.#s.getItem(this.#r);this.#t=n?{...i,...n}:i,t.notifyOnUpdate(this.#r,(e=>{null!==e&&(this.#t={...this.#t,...e},this.#i.info(`State updated: ${JSON.stringify(this.#t)}`))}))}get(){return{...this.#t}}update(e){this.#t={...this.#t,...e},this.#s.setItem(this.#r,this.#t),this.#i.info(`State updated (incl. storage): ${JSON.stringify(this.#t)}`)}}class s{#e;#s;#i;#o;#a;#l={};constructor(e,t,s,i,r){this.#e=e,this.#s=t,this.#i=s,this.#o=i,this.#a=r,this.#e.addEventListener("storage",(e=>{if(e.key&&e.key.startsWith(`${this.#o}_${this.#a}_`)){const t=e.key.replace(`${this.#o}_${this.#a}_`,"");if(Object.prototype.hasOwnProperty.call(this.#l,t)){const s=JSON.parse(e.newValue),i=s?s.value:null;this.#i.info(`Storage event: Item ${e.key} changed to: ${e.newValue}`),this.#l[t].forEach((e=>{e(i)}))}else this.#i.info(`Storage event: Could not find subscriber for item: ${t}`)}})),this.gc()}notifyOnUpdate(e,t){Object.prototype.hasOwnProperty.call(this.#l,e)||(this.#l[e]=[]),this.#l[e].push(t)}setItem(e,t){const s={lastChange:(new Date).getTime(),value:t};this.#s.setItem(`${this.#o}_${this.#a}_${e}`,JSON.stringify(s))}getItem(e,t={}){const s=this.#s.getItem(`${this.#o}_${this.#a}_${e}`);if(null===s)return t;return JSON.parse(s).value||t}gc(){this.#e.setInterval((()=>{for(const[e,t]of Object.entries(this.#s))if(-1!==e.indexOf(this.#o)&&Object.prototype.hasOwnProperty.call(this.#s,e)){let s=t;"string"==typeof s&&(s=JSON.parse(s)),s.lastChange<(new Date).getTime()-864e5&&(this.#s.removeItem(e),this.#i.debug(`Garbage collected: ${e}`))}}),6e4)}}class i{#e;#c;#h;#g=null;#d;constructor(e,t,s){this.#e=e,this.#c=t,this.#h=s,this.#d=!1,this.#u()}#u(){this.#g=this.#e.setInterval((()=>this.#f()),this.#h)}stop(){this.#g&&(this.#e.clearInterval(this.#g),this.#g=null)}#f(){if(!this.#d)try{this.#d=!0,this.#c()}finally{this.#d=!1}}}class r{#b;#t;#i;#p;#m;#e;constructor(e,t,s,i,r){this.#b=e,this.#t=t,this.#i=s,this.#m=i,this.#e=r}run(){this.#e.addEventListener("beforeunload",(()=>{this.#t.update({status:"unlocked"}),this.#i.info("Unlocked session reminder on browser's unload event")})),this.#i.info("Session reminder started"),this.#t.get().hash!==this.#b.hash&&(this.#t.update({activation:"enabled",status:"unlocked",hash:this.#b.hash}),this.#i.info("Session cookie changed after new login or session reminder initially started for current session: Released lock and enabled reminder.")),this.#p=new this.#m(this.#e,this.#c.bind(this),1e3*this.#b.frequency),this.#i.info("Started periodical executer")}#c(){const e=this.#t.get();if("disabled"===e.activation||"locked"===e.status)return void this.#i.info("Session reminder disabled or locked for current user session");this.#t.update({status:"locked"}),this.#i.info("Session reminder locked"),this.#p.stop(),this.#i.info("Stopped periodical executer");const t=new FormData;t.append("hash",this.#b.hash),fetch(this.#b.url,{method:"POST",body:t}).then((e=>e.json())).then((e=>{try{if("object"!=typeof e||null===e||Array.isArray(e)||void 0===JSON.stringify(e))throw new Error("The response body seems not to be valid JSON")}catch(e){throw new Error("Invalid response format",{cause:e})}if(e.message&&"string"==typeof e.message&&this.#i.info(e.message),!e.remind)return void this.#i.info("Reminder of session expiration not necessary: Session reminder unlocked");if(!this.#e.confirm(e.txt))return this.#t.update({activation:"disabled",status:"unlocked"}),void this.#i.info("User disabled reminder for current session: Session reminder disabled but unlocked");fetch(e.extend_url,{method:"GET"}).then((()=>(this.#i.info("Session extended successfully"),new Promise((e=>{e(!0)}))))).catch((e=>{this.#i.error("Fetch error occurred:",e)}))})).catch((e=>{this.#i.error("Fetch error occurred:",e)})).finally((()=>{this.#t.update({status:"unlocked"}),this.#i.info("Unlocked session reminder"),this.#p=new this.#m(this.#e,this.#c.bind(this),1e3*this.#b.frequency),this.#i.info("Restarted periodical executer")}))}}class n{static defineLogLevel(e,t){return{value:e,name:t}}static TRACE=n.defineLogLevel(50,"TRACE");static DEBUG=n.defineLogLevel(100,"DEBUG");static INFO=n.defineLogLevel(200,"INFO");static NOTICE=n.defineLogLevel(250,"NOTICE");static WARNING=n.defineLogLevel(300,"WARN");static ERROR=n.defineLogLevel(400,"ERROR");static CRITICAL=n.defineLogLevel(500,"CRITICAL");static ALERT=n.defineLogLevel(550,"ALERT");static EMERGENCY=n.defineLogLevel(600,"EMERGENCY");static OFF=n.defineLogLevel(1e3,"OFF");static LEVELS=[n.TRACE,n.DEBUG,n.INFO,n.NOTICE,n.WARNING,n.ERROR,n.CRITICAL,n.ALERT,n.EMERGENCY,n.OFF];#w;#E;constructor(e,t=n.DEBUG){this.#w=e,this.setLevel(t)}setLevel(e){e&&"value"in e&&(this.#E=e)}getLevel(){return this.#E}enabledFor(e){return e.value>=this.#E.value}logMessage(e,t){if(!this.enabledFor(e))return;let s=t,[i,...r]=s;"string"==typeof i&&(i=`SessionReminder | ${i}`,s=[i,...r]),e.name.toLowerCase()in this.#w?this.#w[e.name.toLowerCase()](...s):this.#w.error(...s)}trace(...e){this.logMessage(n.TRACE,e)}debug(...e){this.logMessage(n.DEBUG,e)}info(...e){this.logMessage(n.INFO,e)}notice(...e){this.logMessage(n.NOTICE,e)}warn(...e){this.logMessage(n.WARNING,e)}error(...e){this.logMessage(n.ERROR,e)}critical(...e){this.logMessage(n.CRITICAL,e)}alert(...e){this.logMessage(n.ALERT,e)}emergency(...e){this.logMessage(n.EMERGENCY,e)}log(...e){this.info(...e)}static levelForNumericValue(e){if(Number.isNaN(e))return n.DEBUG;for(const t of n.LEVELS)if(Number.parseInt(e,10)===t.value)return t;return n.DEBUG}}e.SessionReminder=e.SessionReminder||(()=>{let e=null;return{init(o,a,l){if(e)return e.logger?.warning("SessionReminder init() called again; already running."),e;const c={url:"",clientId:"",hash:"",frequency:60,logLevel:n.INFO.value},h=Object.fromEntries(Object.entries({...c,...o}).filter((([e])=>e in c))),g=new n(l,n.levelForNumericValue(h.logLevel));"localStorage"in a||g.warn("No 'localStorage' support.");const d="localStorage"in a?a.localStorage:(()=>{const e={};return{removeItem:t=>{delete e[t]},getItem:t=>e[t]??null,setItem:(t,s)=>{e[t]=s}}})(),u=new s(a,d,g,"il_sr",h.clientId),f=new t(a,u,g,{activation:"disabled",status:"unlocked",hash:""},"state");return e=new r(h,f,g,i,a),e},run(){if(!e)throw new Error("SessionReminder not initialized. Call init() first.");e.run(),this.run=()=>{e.logger?.warning("SessionReminder run() called again; already running.")}}}})()}(il); +!function(e){"use strict";class t{#e;#t;#s;#i;#r;#n;constructor(e,t,s,i,r){this.#e=e,this.#i=s,this.#s=t,this.#n=i,this.#r=r;const n=this.#s.getItem(this.#r);this.#t=n?{...i,...n}:i,t.notifyOnUpdate(this.#r,(e=>{null!==e&&(this.#t={...this.#t,...e},this.#i.info(`State updated: ${JSON.stringify(this.#t)}`))}))}get(){return{...this.#t}}update(e){this.#t={...this.#t,...e},this.#s.setItem(this.#r,this.#t),this.#i.info(`State updated (incl. storage): ${JSON.stringify(this.#t)}`)}}class s{#e;#s;#i;#o;#a;#l={};constructor(e,t,s,i,r){this.#e=e,this.#s=t,this.#i=s,this.#o=i,this.#a=r,this.#e.addEventListener("storage",(e=>{if(e.key&&e.key.startsWith(`${this.#o}_${this.#a}_`)){const t=e.key.replace(`${this.#o}_${this.#a}_`,"");if(Object.prototype.hasOwnProperty.call(this.#l,t)){const s=JSON.parse(e.newValue),i=s?s.value:null;this.#i.info(`Storage event: Item ${e.key} changed to: ${e.newValue}`),this.#l[t].forEach((e=>{e(i)}))}else this.#i.info(`Storage event: Could not find subscriber for item: ${t}`)}})),this.gc()}notifyOnUpdate(e,t){Object.prototype.hasOwnProperty.call(this.#l,e)||(this.#l[e]=[]),this.#l[e].push(t)}setItem(e,t){const s={lastChange:(new Date).getTime(),value:t};this.#s.setItem(`${this.#o}_${this.#a}_${e}`,JSON.stringify(s))}getItem(e,t={}){const s=this.#s.getItem(`${this.#o}_${this.#a}_${e}`);if(null===s)return t;return JSON.parse(s).value||t}gc(){this.#e.setInterval((()=>{for(const[e,t]of Object.entries(this.#s))if(-1!==e.indexOf(this.#o)&&Object.prototype.hasOwnProperty.call(this.#s,e)){let s=t;"string"==typeof s&&(s=JSON.parse(s)),s.lastChange<(new Date).getTime()-864e5&&(this.#s.removeItem(e),this.#i.debug(`Garbage collected: ${e}`))}}),6e4)}}class i{#e;#c;#h;#g=null;#d;constructor(e,t,s){this.#e=e,this.#c=t,this.#h=s,this.#d=!1,this.#u()}#u(){this.#g=this.#e.setInterval((()=>this.#f()),this.#h)}stop(){this.#g&&(this.#e.clearInterval(this.#g),this.#g=null)}#f(){if(!this.#d)try{this.#d=!0,this.#c()}finally{this.#d=!1}}}class r{#b;#t;#i;#m;#p;#e;constructor(e,t,s,i,r){this.#b=e,this.#t=t,this.#i=s,this.#p=i,this.#e=r}run(){this.#e.addEventListener("beforeunload",(()=>{this.#t.update({status:"unlocked"}),this.#i.info("Unlocked session reminder on browser's unload event")})),this.#i.info("Session reminder started"),this.#t.get().hash!==this.#b.hash&&(this.#t.update({activation:"enabled",status:"unlocked",hash:this.#b.hash}),this.#i.info("Session cookie changed after new login or session reminder initially started for current session: Released lock and enabled reminder.")),this.#m=new this.#p(this.#e,this.#c.bind(this),1e3*this.#b.frequency),this.#i.info("Started periodical executer")}#c(){const e=this.#t.get();if("disabled"===e.activation||"locked"===e.status)return void this.#i.info("Session reminder disabled or locked for current user session");this.#t.update({status:"locked"}),this.#i.info("Session reminder locked"),this.#m.stop(),this.#i.info("Stopped periodical executer");const t=new FormData;t.append("hash",this.#b.hash),fetch(this.#b.url,{method:"POST",body:t,credentials:"omit"}).then((e=>e.json())).then((e=>{try{if("object"!=typeof e||null===e||Array.isArray(e)||void 0===JSON.stringify(e))throw new Error("The response body seems not to be valid JSON")}catch(e){throw new Error("Invalid response format",{cause:e})}if(e.message&&"string"==typeof e.message&&this.#i.info(e.message),!e.remind)return void this.#i.info("Reminder of session expiration not necessary: Session reminder unlocked");if(!this.#e.confirm(e.txt))return this.#t.update({activation:"disabled",status:"unlocked"}),void this.#i.info("User disabled reminder for current session: Session reminder disabled but unlocked");fetch(e.extend_url,{method:"GET"}).then((()=>(this.#i.info("Session extended successfully"),new Promise((e=>{e(!0)}))))).catch((e=>{this.#i.error("Fetch error occurred:",e)}))})).catch((e=>{this.#i.error("Fetch error occurred:",e)})).finally((()=>{this.#t.update({status:"unlocked"}),this.#i.info("Unlocked session reminder"),this.#m=new this.#p(this.#e,this.#c.bind(this),1e3*this.#b.frequency),this.#i.info("Restarted periodical executer")}))}}class n{static defineLogLevel(e,t){return{value:e,name:t}}static TRACE=n.defineLogLevel(50,"TRACE");static DEBUG=n.defineLogLevel(100,"DEBUG");static INFO=n.defineLogLevel(200,"INFO");static NOTICE=n.defineLogLevel(250,"NOTICE");static WARNING=n.defineLogLevel(300,"WARN");static ERROR=n.defineLogLevel(400,"ERROR");static CRITICAL=n.defineLogLevel(500,"CRITICAL");static ALERT=n.defineLogLevel(550,"ALERT");static EMERGENCY=n.defineLogLevel(600,"EMERGENCY");static OFF=n.defineLogLevel(1e3,"OFF");static LEVELS=[n.TRACE,n.DEBUG,n.INFO,n.NOTICE,n.WARNING,n.ERROR,n.CRITICAL,n.ALERT,n.EMERGENCY,n.OFF];#w;#E;constructor(e,t=n.DEBUG){this.#w=e,this.setLevel(t)}setLevel(e){e&&"value"in e&&(this.#E=e)}getLevel(){return this.#E}enabledFor(e){return e.value>=this.#E.value}logMessage(e,t){if(!this.enabledFor(e))return;let s=t,[i,...r]=s;"string"==typeof i&&(i=`SessionReminder | ${i}`,s=[i,...r]),e.name.toLowerCase()in this.#w?this.#w[e.name.toLowerCase()](...s):this.#w.error(...s)}trace(...e){this.logMessage(n.TRACE,e)}debug(...e){this.logMessage(n.DEBUG,e)}info(...e){this.logMessage(n.INFO,e)}notice(...e){this.logMessage(n.NOTICE,e)}warn(...e){this.logMessage(n.WARNING,e)}error(...e){this.logMessage(n.ERROR,e)}critical(...e){this.logMessage(n.CRITICAL,e)}alert(...e){this.logMessage(n.ALERT,e)}emergency(...e){this.logMessage(n.EMERGENCY,e)}log(...e){this.info(...e)}static levelForNumericValue(e){if(Number.isNaN(e))return n.DEBUG;for(const t of n.LEVELS)if(Number.parseInt(e,10)===t.value)return t;return n.DEBUG}}e.SessionReminder=e.SessionReminder||(()=>{let e=null;return{init(o,a,l){if(e)return e.logger?.warning("SessionReminder init() called again; already running."),e;const c={url:"",clientId:"",hash:"",frequency:60,logLevel:n.INFO.value},h=Object.fromEntries(Object.entries({...c,...o}).filter((([e])=>e in c))),g=new n(l,n.levelForNumericValue(h.logLevel));"localStorage"in a||g.warn("No 'localStorage' support.");const d="localStorage"in a?a.localStorage:(()=>{const e={};return{removeItem:t=>{delete e[t]},getItem:t=>e[t]??null,setItem:(t,s)=>{e[t]=s}}})(),u=new s(a,d,g,"il_sr",h.clientId),f=new t(a,u,g,{activation:"disabled",status:"unlocked",hash:""},"state");return e=new r(h,f,g,i,a),e},run(){if(!e)throw new Error("SessionReminder not initialized. Call init() first.");e.run(),this.run=()=>{e.logger?.warning("SessionReminder run() called again; already running.")}}}})()}(il); diff --git a/components/ILIAS/Authentication/resources/js/src/SessionReminder.js b/components/ILIAS/Authentication/resources/js/src/SessionReminder.js index c6e01dcd3cfa..53c47f06f2ea 100644 --- a/components/ILIAS/Authentication/resources/js/src/SessionReminder.js +++ b/components/ILIAS/Authentication/resources/js/src/SessionReminder.js @@ -108,6 +108,7 @@ export default class SessionReminder { fetch(this.#options.url, { method: 'POST', body: formData, + credentials: 'omit', }) .then((response) => response.json()) .then((data) => { diff --git a/components/ILIAS/Authentication/resources/sessioncheck.php b/components/ILIAS/Authentication/resources/sessioncheck.php index 21665de0b041..377ee374f3e3 100644 --- a/components/ILIAS/Authentication/resources/sessioncheck.php +++ b/components/ILIAS/Authentication/resources/sessioncheck.php @@ -25,12 +25,10 @@ } require_once '../vendor/composer/vendor/autoload.php'; -require_once __DIR__ . '/../artifacts/bootstrap_default.php'; -entry_point('ILIAS Legacy Initialisation Adapter'); - ilContext::init(ilContext::CONTEXT_SESSION_REMINDER); -ilInitialisation::initILIAS(); +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); /** @var ILIAS\DI\Container $DIC */ $DIC->http()->saveResponse( diff --git a/components/ILIAS/Authentication/templates/default/tpl.auth_general.html b/components/ILIAS/Authentication/templates/default/tpl.auth_general.html index dc94b772b417..0e7a937a525f 100755 --- a/components/ILIAS/Authentication/templates/default/tpl.auth_general.html +++ b/components/ILIAS/Authentication/templates/default/tpl.auth_general.html @@ -9,7 +9,7 @@ - + disabled="disabled"/> {AUTH_ACTIVE} {AUTH_USER_NUM} diff --git a/components/ILIAS/Awareness/classes/class.ilAwarenessGUI.php b/components/ILIAS/Awareness/classes/class.ilAwarenessGUI.php index eeb15509f512..72175dcdcb73 100755 --- a/components/ILIAS/Awareness/classes/class.ilAwarenessGUI.php +++ b/components/ILIAS/Awareness/classes/class.ilAwarenessGUI.php @@ -91,10 +91,12 @@ public function executeCommand(): void public function initJS(): void { - $ilUser = $this->user; - // init js - //$this->main_tpl->addJavaScript("../components/ILIAS/Awareness/resources/Awareness.js"); - $this->main_tpl->addJavaScript("./assets/js/Awareness.js"); + $debug = false; + if ($debug) { + $this->main_tpl->addJavaScript("../components/ILIAS/Awareness/resources/Awareness.js"); + } else { + $this->main_tpl->addJavaScript("./assets/js/Awareness.js"); + } $this->ctrl->setParameter($this, "ref_id", $this->ref_id); $this->main_tpl->addOnLoadCode("il.Awareness.setBaseUrl('" . $this->ctrl->getLinkTarget( $this, diff --git a/components/ILIAS/Awareness/resources/Awareness.js b/components/ILIAS/Awareness/resources/Awareness.js index 16f1485268ed..001e2d0cb525 100755 --- a/components/ILIAS/Awareness/resources/Awareness.js +++ b/components/ILIAS/Awareness/resources/Awareness.js @@ -76,6 +76,7 @@ il.Awareness = { afterListUpdate: function() { var t = il.Awareness; + t.init(); $("#il_awrn_filter_form").submit(function (e) { var t = il.Awareness; $("#il_awrn_filer_btn").html(""); diff --git a/components/ILIAS/BackgroundTasks_/classes/class.ilBTControllerGUI.php b/components/ILIAS/BackgroundTasks_/classes/class.ilBTControllerGUI.php index d9e7f7186a78..f6e9d13d048c 100755 --- a/components/ILIAS/BackgroundTasks_/classes/class.ilBTControllerGUI.php +++ b/components/ILIAS/BackgroundTasks_/classes/class.ilBTControllerGUI.php @@ -16,6 +16,13 @@ * *********************************************************************/ +use ILIAS\HTTP\StatusCode; +use ILIAS\Filesystem\Stream\Streams; +use ILIAS\Data\URI; +use ILIAS\Data\Factory; +use ILIAS\BackgroundTasks\Bucket; +use ILIAS\Filesystem\Stream\Stream; +use ILIAS\HTTP\Response\ResponseHeader; use ILIAS\BackgroundTasks\Implementation\Tasks\UserInteraction\UserInteractionOption; use ILIAS\components\OrgUnit\ARHelper\DIC; @@ -25,7 +32,7 @@ * @author Oskar Truffer * @author Fabian Schmid */ -class ilBTControllerGUI implements ilCtrlBaseClassInterface +class ilBTControllerGUI implements ilCtrlBaseClassInterface, ilCtrlSecurityInterface { use DIC; public const FROM_URL = 'from_url'; @@ -37,7 +44,6 @@ class ilBTControllerGUI implements ilCtrlBaseClassInterface public const IS_ASYNC = 'bt_task_is_async'; public const CMD_GET_REPLACEMENT_ITEM = "getAsyncReplacementItem"; - public function executeCommand(): void { $cmd = $this->ctrl()->getCmd(); @@ -57,38 +63,55 @@ public function executeCommand(): void } } + public function getUnsafeGetCommands(): array + { + return array_unique([ + self::CMD_ABORT, + self::CMD_REMOVE, + self::CMD_USER_INTERACTION, + ]); + } - protected function userInteraction(): void + public function getSafePostCommands(): array { - $observer_id = (int) $this->http()->request()->getQueryParams()[self::OBSERVER_ID]; - $selected_option = $this->http()->request()->getQueryParams()[self::SELECTED_OPTION]; - $from_url = $this->getFromURL(); + return []; + } - $observer = $this->dic()->backgroundTasks()->persistence()->loadBucket($observer_id); - if ($observer->getUserId() !== $this->user()->getId()) { - return; - } - $option = new UserInteractionOption("", $selected_option); - $this->dic()->backgroundTasks()->taskManager()->continueTask($observer, $option); - if ($this->http()->request()->getQueryParams()[self::IS_ASYNC] === "true") { - $this->http()->close(); + protected function userInteraction(): void + { + $observer_id = $this->retrieveObserverIdFromRequest(); + $selected_option = $this->retrieveSelectedInteractionOption(); + if ($observer_id === null || $selected_option === null) { + $this->respondWithError(StatusCode::HTTP_BAD_REQUEST, 'Bad Request'); } - $this->ctrl()->redirectToURL($from_url); + + $bucket = $this->dic()->backgroundTasks()->persistence()->loadBucket($observer_id); + + $this->enforceBucketBelongsToCurrentUser($bucket); + + $this->dic()->backgroundTasks()->taskManager()->continueTask( + $bucket, + new UserInteractionOption('', $selected_option) + ); + + $this->redirectToCallerOrClose(); } protected function abortBucket(): void { - $observer_id = (int) $this->http()->request()->getQueryParams()[self::OBSERVER_ID]; - $from_url = $this->getFromURL(); + $observer_id = $this->retrieveObserverIdFromRequest(); + if ($observer_id === null) { + $this->respondWithError(StatusCode::HTTP_BAD_REQUEST, 'Bad Request'); + } $bucket = $this->dic()->backgroundTasks()->persistence()->loadBucket($observer_id); + $this->enforceBucketBelongsToCurrentUser($bucket); + $this->dic()->backgroundTasks()->taskManager()->quitBucket($bucket); - if ($this->http()->request()->getQueryParams()[self::IS_ASYNC] === "true") { - exit; - } - $this->ctrl()->redirectToURL($from_url); + + $this->redirectToCallerOrClose(); } @@ -98,37 +121,168 @@ protected function abortBucket(): void */ protected function getAsyncReplacementItem(): void { - $observer_id = (int) $this->http()->request()->getQueryParams()[self::OBSERVER_ID]; + $observer_id = $this->retrieveObserverIdFromRequest(); + if ($observer_id === null) { + $this->respondWithError(StatusCode::HTTP_BAD_REQUEST, 'Bad Request'); + } + $bucket = $this->dic()->backgroundTasks()->persistence()->loadBucket($observer_id); + $this->enforceBucketBelongsToCurrentUser($bucket); + $item_source = new ilBTPopOverGUI($this->dic()); $this->dic()->language()->loadLanguageModule('background_tasks'); $item = $item_source->getItemForObserver($bucket); - echo $this->dic()->ui()->renderer()->renderAsync($item); - exit; + + $this->sendSuccessResponse( + Streams::ofString( + $this->dic()->ui()->renderer()->renderAsync($item) + ) + ); } - protected function getFromURL(): string + private function getFromURL(): URI { - return self::unhash($this->http()->request()->getQueryParams()[self::FROM_URL]); - } + $uri = (new Factory())->uri($this->defaultReturnUrl()); + $decoded_from_url = $this->retrieveFromUrlFromRequest(); + if ($decoded_from_url === null || $decoded_from_url === '') { + return $uri; + } - /** - * @param $url - */ - public static function hash($url): string + $from_url = self::unhash($decoded_from_url); + if ($from_url === false) { + return $uri; + } + + $from_url_parts = parse_url($from_url); + if (!is_array($from_url_parts)) { + return $uri; + } + + $uri = $uri->withPath(null)->withQuery(null)->withFragment(null); + + $mutators = [ + 'path' => static fn(URI $u, string $v): URI => $u->withPath($v), + 'query' => static fn(URI $u, string $v): URI => $u->withQuery($v), + 'fragment' => static fn(URI $u, string $v): URI => $u->withFragment($v), + ]; + + foreach ($mutators as $key => $apply) { + $value = $from_url_parts[$key] ?? null; + if (is_string($value) && $value !== '') { + $uri = $apply($uri, $value); + } + } + + return $uri; + } + + public static function hash(string $url): string { return base64_encode((string) $url); } - - /** - * @param $url - */ - public static function unhash($url): string + public static function unhash(string $url): string|false { return base64_decode((string) $url); } + + private function enforceBucketBelongsToCurrentUser(Bucket $bucket): void + { + if ($bucket->getUserId() !== $this->user()->getId()) { + $this->respondWithError(StatusCode::HTTP_FORBIDDEN, 'Forbidden'); + } + } + + private function defaultReturnUrl(): string + { + return ilUtil::_getHttpPath(); + } + + private function sendSuccessResponse(Stream $stream): void + { + $response = $this->http()->response() + ->withStatus(StatusCode::HTTP_OK, 'OK') + ->withBody($stream); + $this->http()->saveResponse($response); + + if ($this->wasInvokedAsynchronously()) { + $this->http()->sendResponse(); + $this->http()->close(); + } + } + + private function redirectToCallerOrClose(): never + { + if (!$this->wasInvokedAsynchronously()) { + $this->ctrl()->redirectToURL((string) $this->getFromURL()); + } + + $this->http()->close(); + } + + private function respondWithError(int $error_status_code, string $message): never + { + $response = $this->http()->response()->withStatus($error_status_code, $message); + if ($error_status_code === StatusCode::HTTP_FORBIDDEN && !$this->wasInvokedAsynchronously()) { + $this->tpl()->setOnScreenMessage( + $this->tpl()::MESSAGE_TYPE_FAILURE, + $this->lng()->txt('permission_denied'), + true + ); + $response = $response + ->withStatus(StatusCode::HTTP_FOUND, 'Found') + ->withHeader(ResponseHeader::LOCATION, $this->defaultReturnUrl()); + } + + $this->http()->saveResponse($response); + $this->http()->sendResponse(); + $this->http()->close(); + } + + private function retrieveSelectedInteractionOption(): ?string + { + return $this->http()->wrapper()->query()->retrieve( + self::SELECTED_OPTION, + $this->dic()->refinery()->byTrying([ + $this->dic()->refinery()->kindlyTo()->string(), + $this->dic()->refinery()->always(null) + ]) + ); + } + + private function wasInvokedAsynchronously(): bool + { + return $this->http()->wrapper()->query()->retrieve( + self::IS_ASYNC, + $this->dic()->refinery()->byTrying([ + $this->dic()->refinery()->kindlyTo()->bool(), + $this->dic()->refinery()->always(false) + ]) + ); + } + + private function retrieveObserverIdFromRequest(): ?int + { + return $this->http()->wrapper()->query()->retrieve( + self::OBSERVER_ID, + $this->dic()->refinery()->byTrying([ + $this->dic()->refinery()->kindlyTo()->int(), + $this->dic()->refinery()->always(null) + ]) + ); + } + + private function retrieveFromUrlFromRequest(): ?string + { + return $this->http()->wrapper()->query()->retrieve( + self::FROM_URL, + $this->dic()->refinery()->byTrying([ + $this->dic()->refinery()->kindlyTo()->string(), + $this->dic()->refinery()->always(null) + ]) + ); + } } diff --git a/components/ILIAS/Badge/classes/Flavours/class.ilBadgePictureDefinition.php b/components/ILIAS/Badge/classes/Flavours/class.ilBadgePictureDefinition.php deleted file mode 100644 index 005e2ea6f16a..000000000000 --- a/components/ILIAS/Badge/classes/Flavours/class.ilBadgePictureDefinition.php +++ /dev/null @@ -1,77 +0,0 @@ - 1920, - 'l' => 960, - 'm' => 480, - 's' => 240, - 'xs' => 120 - ]; - - public function getId(): string - { - return self::ID; - } - - public function getFlavourMachineId(): string - { - return ilBadgePictureMachine::ID; - } - - public function getInternalName(): string - { - return 'badge_picture'; - } - - public function getVariantName(): ?string - { - return json_encode([ - 'quality' => $this->quality, - 'sizes' => $this->widths - ], JSON_THROW_ON_ERROR); - } - - public function persist(): bool - { - return true; - } - - public function getQuality(): int - { - return $this->quality; - } - - /** - * @return array{"xl": int, "l": int, "m": int, "s": int, "xs": int} - */ - public function getWidths(): array - { - return $this->widths; - } -} diff --git a/components/ILIAS/Badge/classes/Flavours/class.ilBadgePictureMachine.php b/components/ILIAS/Badge/classes/Flavours/class.ilBadgePictureMachine.php deleted file mode 100644 index b9236fee6b9c..000000000000 --- a/components/ILIAS/Badge/classes/Flavours/class.ilBadgePictureMachine.php +++ /dev/null @@ -1,124 +0,0 @@ -extract_pages = new ExtractPages(); - $this->crop = new CropSquare(); - } - - public function getId(): string - { - return self::ID; - } - - public function canHandleDefinition(FlavourDefinition $definition): bool - { - return $definition instanceof ilBadgePictureDefinition; - } - - public function dependsOnEngine(): ?string - { - return ImagickEngine::class; - } - - public function processStream( - FileInformation $information, - FileStream $stream, - FlavourDefinition $for_definition - ): Generator { - /** @var ilBadgePictureDefinition $for_definition */ - $this->definition = $for_definition; - $this->information = $information; - - $page_stream = $this->extract_pages->processStream( - $this->information, - $stream, - new PagesToExtract( - false, - $this->definition->getWidths()['xl'], - 1, - false, - 100 - ) - )->current()?->getStream(); - - if ($page_stream === null) { - return; - } - - $i = 0; - foreach ($for_definition->getWidths() as $width) { - yield new Result( - $for_definition, - $this->cropImage($page_stream, $width), - $i, - true - ); - $i++; - } - } - - protected function cropImage( - FileStream $stream, - int $size - ): ?Stream { - $quality = $size <= self::FULL_QUALITY_SIZE_THRESHOLD - ? 100 - : $this->definition->getQuality(); - - - return $this->crop->processStream( - $this->information, - $stream, - new CropToSquare( - false, - $size, - $quality - ) - )->current()->getStream(); - } -} diff --git a/components/ILIAS/Badge/classes/ModalBuilder.php b/components/ILIAS/Badge/classes/ModalBuilder.php index eab9e79a25d4..9da21c0e8978 100644 --- a/components/ILIAS/Badge/classes/ModalBuilder.php +++ b/components/ILIAS/Badge/classes/ModalBuilder.php @@ -28,7 +28,6 @@ use ilDatePresentation; use ILIAS\UI\Renderer; use ILIAS\UI\Factory; -use ILIAS\UI\Implementation\Component\Card\Card; class ModalBuilder { @@ -57,10 +56,17 @@ public function __construct(?ilBadgeAssignment $assignment = null) public function constructModal( ?Image $badge_image, string $badge_title, - array $badge_properties = [] + array $badge_properties = [], + bool $enclose_in_div = false ): Modal { if ($badge_image !== null) { - $modal_content[] = $badge_image; + if ($enclose_in_div) { + $modal_content[] = $this->ui_factory->legacy()->content( + '
' . $this->ui_renderer->render($badge_image) . '
' + ); + } else { + $modal_content[] = $badge_image; + } } if ($this->assignment) { diff --git a/components/ILIAS/Badge/classes/class.ilBadgeHandler.php b/components/ILIAS/Badge/classes/class.ilBadgeHandler.php index ff413c10ae1f..1381a4e2c0f1 100755 --- a/components/ILIAS/Badge/classes/class.ilBadgeHandler.php +++ b/components/ILIAS/Badge/classes/class.ilBadgeHandler.php @@ -524,7 +524,7 @@ public function sendNotification( $ntf->addAdditionalInfo('badge_notification_badges', implode("\n", $user_badges), true); - $url = ilLink::_getLink($user_id, 'usr', [], '_bdg'); + $url = ilLink::_getLink(null, 'badge', ['profile']); $ntf->addAdditionalInfo('badge_notification_badges_goto', $url); $ntf->setReasonLangId('badge_notification_reason'); diff --git a/components/ILIAS/Badge/classes/class.ilBadgeImage.php b/components/ILIAS/Badge/classes/class.ilBadgeImage.php index 8b8f6c5b076d..0359188f128f 100644 --- a/components/ILIAS/Badge/classes/class.ilBadgeImage.php +++ b/components/ILIAS/Badge/classes/class.ilBadgeImage.php @@ -67,11 +67,7 @@ public function getImageFromResourceId( if ($badge->getImageRid() !== '' && $badge->getImageRid() !== null) { $identification = $this->resource_storage->manage()->find($badge->getImageRid()); if ($identification !== null) { - $flavour = $this->resource_storage->flavours()->get($identification, new \ilBadgePictureDefinition()); - $urls = $this->resource_storage->consume()->flavourUrls($flavour)->getURLsAsArray(); - if (\count($urls) === self::IMAGE_URL_COUNT && isset($urls[$size])) { - $image_src = $urls[$size]; - } + $image_src = $this->resource_storage->consume()->src($identification)->getSrc(); } } elseif ($badge->getImage()) { $image_src = ilWACSignedPath::signFile($badge->getImagePath()); @@ -88,7 +84,6 @@ public function processImageUpload(ilBadge $badge): void $array_result = array_pop($array_result); $stakeholder = new ilBadgeFileStakeholder(); $identification = $this->resource_storage->manage()->upload($array_result, $stakeholder); - $this->resource_storage->flavours()->ensure($identification, new \ilBadgePictureDefinition()); $badge->setImageRid($identification->serialize()); $badge->update(); } catch (IllegalStateException $e) { diff --git a/components/ILIAS/Badge/classes/class.ilBadgeImageTemplate.php b/components/ILIAS/Badge/classes/class.ilBadgeImageTemplate.php index 187981d50843..c95b348f852a 100755 --- a/components/ILIAS/Badge/classes/class.ilBadgeImageTemplate.php +++ b/components/ILIAS/Badge/classes/class.ilBadgeImageTemplate.php @@ -19,7 +19,6 @@ use ILIAS\FileUpload\Exception\IllegalStateException; use ILIAS\ResourceStorage\Services; use ILIAS\FileUpload\FileUpload; -use ILIAS\Badge\ilBadgeImage; use ILIAS\ResourceStorage\Identification\ResourceIdentification; class ilBadgeImageTemplate @@ -179,10 +178,11 @@ public function processImageUpload(ilBadgeImageTemplate $badge): void $array_result = $this->upload_service->getResults(); $array_result = array_pop($array_result); if ($array_result->getName() !== '') { - $this->resource_storage->manage()->remove(new ResourceIdentification($badge->getImageRid()), new ilBadgeFileStakeholder()); + if ($badge->getImageRid()) { + $this->resource_storage->manage()->remove(new ResourceIdentification($badge->getImageRid()), new ilBadgeFileStakeholder()); + } $stakeholder = new ilBadgeFileStakeholder(); $identification = $this->resource_storage->manage()->upload($array_result, $stakeholder); - $this->resource_storage->flavours()->ensure($identification, new \ilBadgePictureDefinition()); $badge->setImageRid($identification); $badge->update(); } @@ -376,18 +376,13 @@ public function setImageRid(?string $image_rid = null): void } public function getImageFromResourceId( - int $size = ilBadgeImage::IMAGE_SIZE_XS ): string { $image_src = ''; if ($this->getImageRid()) { $identification = $this->resource_storage->manage()->find($this->getImageRid()); if ($identification !== null) { - $flavour = $this->resource_storage->flavours()->get($identification, new ilBadgePictureDefinition()); - $urls = $this->resource_storage->consume()->flavourUrls($flavour)->getURLsAsArray(); - if (count($urls) === ilBadgeImage::IMAGE_URL_COUNT && isset($urls[$size])) { - $image_src = $urls[$size]; - } + $image_src = $this->resource_storage->consume()->src($identification)->getSrc(); } } elseif ($this->getImage()) { $image_src = ilWACSignedPath::signFile($this->getImagePath()); diff --git a/components/ILIAS/Badge/classes/class.ilBadgeImageTemplateTableGUI.php b/components/ILIAS/Badge/classes/class.ilBadgeImageTemplateTableGUI.php index 3095b5341aa7..43d751ffa77b 100755 --- a/components/ILIAS/Badge/classes/class.ilBadgeImageTemplateTableGUI.php +++ b/components/ILIAS/Badge/classes/class.ilBadgeImageTemplateTableGUI.php @@ -37,6 +37,7 @@ use ILIAS\UI\URLBuilderToken; use ILIAS\Filesystem\Stream\Streams; use ILIAS\UI\Component\Table\Column\Column; +use ILIAS\Badge\Table\TableContentWrapper; class ilBadgeImageTemplateTableGUI implements DataRetrieval { @@ -86,15 +87,12 @@ private function getRecords(): array ); $image_html = $this->renderer->render($image_component); - $image_src_large = $template->getImageFromResourceId( - ilBadgeImage::IMAGE_SIZE_XL - ); $large_image_component = $this->factory->image()->responsive( - $image_src_large, + $image_src, $template->getTitle() ); - $modal = $modal_container->constructModal($large_image_component, $template->getTitle()); + $modal = $modal_container->constructModal($large_image_component, $template->getTitle(), [], true); $image = implode('', [ $modal_container->renderShyButton($image_html, $modal), @@ -217,12 +215,12 @@ public function renderTable(string $url): void $table = $this->factory ->table() ->data($this, $this->lng->txt('badge_image_templates'), $this->getColumns()) - ->withId(self::class) + ->withId(str_replace('\\', '', self::class)) ->withOrder(new Order('title', Order::ASC)) + ->withRange(new Range(0, 100)) ->withActions($this->getActions($url_builder, $action_parameter_token, $row_id_token)) ->withRequest($this->request); - $out = [$table]; $query = $this->http->wrapper()->query(); if ($query->has('tid')) { $query_values = $query->retrieve( @@ -280,6 +278,11 @@ public function renderTable(string $url): void } } - $this->tpl->setContent($this->renderer->render($out)); + $content_wrapper = new TableContentWrapper($this->renderer, $this->factory); + $this->tpl->setContent($this->renderer->render( + $content_wrapper->wrap( + $table + ) + )); } } diff --git a/components/ILIAS/Badge/classes/class.ilBadgeManagementGUI.php b/components/ILIAS/Badge/classes/class.ilBadgeManagementGUI.php index 1ab74e7dd602..24990641a995 100755 --- a/components/ILIAS/Badge/classes/class.ilBadgeManagementGUI.php +++ b/components/ILIAS/Badge/classes/class.ilBadgeManagementGUI.php @@ -18,26 +18,36 @@ use ILIAS\Badge\ilBadgeImage; use ILIAS\ResourceStorage\Services; -use ILIAS\FileUpload\FileUpload; use ILIAS\FileUpload\Exception\IllegalStateException; use ILIAS\Badge\ilBadgeTableGUI; use ILIAS\Badge\ilBadgeUserTableGUI; use ILIAS\Refinery\Factory; use ILIAS\ResourceStorage\Identification\ResourceIdentification; -use ILIAS\ResourceStorage\Collection\ResourceCollection; -use ILIAS\Setup\ArrayEnvironment; /** * @ilCtrl_Calls ilBadgeManagementGUI: ilPropertyFormGUI */ class ilBadgeManagementGUI implements ilCtrlSecurityInterface { - public const TABLE_ALL_OBJECTS_ACTION = 'ALL_OBJECTS'; + private const string LIST_USERS_ACTION = 'listUsers'; + private const string LIST_BADGES_ACTION = 'listBadges'; + private const string DELETE_BADGES_ACTION = 'deleteBadges'; + private const string DEASSIGN_BADGE_ACTION = 'deassignBadge'; + private const string SAVE_BADGE_ACTION = 'saveBadge'; + private const string UPDATE_BADGE_ACTION = 'updateBadge'; + private const string ADD_BADGE_ACTION = 'addBadge'; + private const string PASTE_BADGES_ACTION = 'pasteBadges'; + private const string CLEAR_CLIPBOARD_ACTION = 'clearClipboard'; + private const string SELECT_BADGE_FOR_AWARD_REVOKE_ACTION = 'selectBadgeForAwardingOrRevoking'; + private const string AWARD_BADGE_USER_SELECTION_ACTION = 'awardBadgeUserSelection'; + private const string DEFAULT_ACTION = self::LIST_BADGES_ACTION; + private const string TABLE_ACTIONS = 'handleTableActions'; + public const string TABLE_ALL_OBJECTS_ACTION = 'ALL_OBJECTS'; private ilBadgeGUIRequest $request; private ilBadgeManagementSessionRepository $session_repo; private ilLanguage $lng; - private ilCtrl $ctrl; + private ilCtrlInterface $ctrl; private ilTabsGUI $tabs; private ilAccessHandler $access; private ilToolbarGUI $toolbar; @@ -49,8 +59,6 @@ class ilBadgeManagementGUI implements ilCtrlSecurityInterface private ?ilBadgeImage $badge_image_service = null; private ?Services $resource_storage; - private ?FileUpload $upload_service; - private ?ilBadgePictureDefinition $flavour_definition = null; private \ILIAS\HTTP\Services $http; private Factory $refinery; @@ -70,7 +78,6 @@ public function __construct( $this->toolbar = $DIC->toolbar(); $this->ui_factory = $DIC->ui()->factory(); $this->resource_storage = $DIC->resourceStorage(); - $this->upload_service = $DIC->upload(); $this->tpl = $DIC->ui()->mainTemplate(); $this->user = $DIC->user(); $lng = $DIC->language(); @@ -96,7 +103,6 @@ public function __construct( $DIC->upload(), $DIC->ui()->mainTemplate() ); - $this->flavour_definition = new ilBadgePictureDefinition(); } /** @@ -109,7 +115,7 @@ private function splitBadgeAndUserIdsFromString(array $splittable_user_ids): arr $badge_id = null; if ($splittable_user_ids !== []) { - if ($splittable_user_ids === ['ALL_OBJECTS']) { + if ($splittable_user_ids === [self::TABLE_ALL_OBJECTS_ACTION]) { $parent_obj_id = $this->parent_obj_id; if (!$parent_obj_id && $this->parent_ref_id) { $parent_obj_id = ilObject::_lookupObjId($this->parent_ref_id); @@ -120,6 +126,7 @@ private function splitBadgeAndUserIdsFromString(array $splittable_user_ids): arr } $badge_id = $this->http->wrapper()->query()->retrieve('bid', $this->refinery->kindlyTo()->int()); + return [$user_ids, $badge_id]; } else { foreach ($splittable_user_ids as $row) { @@ -145,10 +152,12 @@ private function splitBadgeAndUserIdsFromString(array $splittable_user_ids): arr public function executeCommand(): void { - $ilCtrl = $this->ctrl; - - $next_class = $ilCtrl->getNextClass($this); - $cmd = $ilCtrl->getCmd('listBadges'); + $next_class = $this->ctrl->getNextClass($this); + $cmd = $this->ctrl->getCmd(self::DEFAULT_ACTION); + if ($cmd === null || $cmd === '' || !method_exists($this, $cmd . 'Cmd')) { + $cmd = self::DEFAULT_ACTION; + } + $cmd .= 'Cmd'; switch ($next_class) { case 'ilpropertyformgui': @@ -161,62 +170,22 @@ public function executeCommand(): void } // ajax- create else { $type_id = $this->request->getType(); - $ilCtrl->setParameter($this, 'type', $type_id); + $this->ctrl->setParameter($this, 'type', $type_id); $handler = ilBadgeHandler::getInstance(); $type = $handler->getTypeInstanceByUniqueId($type_id); $form = $this->initBadgeForm('create', $type, $type_id); } - $ilCtrl->forwardCommand($form); + $this->ctrl->forwardCommand($form); break; default: - $render_default = true; - global $DIC; - $action_parameter_token = 'tid_id'; - $parameter = 'tid_table_action'; - - $query = $DIC->http()->wrapper()->query(); - if ($query->has($action_parameter_token)) { - if ($query->has($action_parameter_token)) { - $id = $query->retrieve( - $action_parameter_token, - $DIC->refinery()->kindlyTo()->listOf($DIC->refinery()->kindlyTo()->string()) - ); - if (is_array($id)) { - $id = array_pop($id); - } - $DIC->ctrl()->setParameter($this, "tid", $id); - } - } - - $get = fn(string $key) => $query->has($key) ? - $query->retrieve($key, $DIC->refinery()->kindlyTo()->string()) : - ''; - - $action = $get($parameter); - $return_cmd = $get('returnCmd'); - - $actions = [ - 'badge_table_activate' => ['activateBadges', true], - 'badge_table_deactivate' => ['deactivateBadges', true], - 'badge_table_edit' => 'editBadge', - 'badge_table_delete' => 'confirmDeleteBadges', - 'award_revoke_badge' => 'awardBadgeUserSelection', - 'revokeBadge' => 'confirmDeassignBadge', - 'assignBadge' => 'assignBadge', - ]; - - $entry = $actions[$action] ?? null; - if ($cmd !== 'action' || !$entry) { - $this->$cmd(); - return; + $badge_ids = $this->request->getMultiActionBadgeIdsFromUrl(); + if (count($badge_ids) === 1) { + $badge_id = array_pop($badge_ids); + $this->ctrl->setParameter($this, 'tid', $badge_id); } - $entry = is_array($entry) ? $entry : [$entry, false]; - $this->{$entry[0]}(); - if ($entry[1] && in_array($return_cmd, ['awardBadgeUserSelection', 'listUsers', 'listUsers', 'listBadges'], true)) { - $this->$return_cmd(); - } + $this->$cmd(); break; } } @@ -226,44 +195,60 @@ public function getSafePostCommands(): array return []; } - public function getUnsafeGetCommands(): array + private function getTableAction(): ?string { - return ['action']; + return $this->http->wrapper()->query()->retrieve( + 'tid_table_action', + $this->refinery->byTrying([ + $this->refinery->kindlyTo()->string(), + $this->refinery->always(null) + ]) + ); } - protected function setTabs(string $a_active): void + private function handleTableActionsCmd(): void { - $ilTabs = $this->tabs; - $lng = $this->lng; - $ilCtrl = $this->ctrl; + match ($this->getTableAction()) { + 'badge_table_activate' => $this->activateBadges(), + 'badge_table_deactivate' => $this->deactivateBadges(), + 'badge_table_edit' => $this->editBadgeCmd(), + 'badge_table_delete' => $this->confirmDeleteBadges(), + 'award_revoke_badge' => $this->awardBadgeUserSelectionCmd(), + 'revokeBadge' => $this->confirmDeassignBadge(), + 'assignBadge' => $this->assignBadge(), + default => $this->ctrl->redirect($this, self::DEFAULT_ACTION), + }; + } - $ilTabs->addSubTab( + public function getUnsafeGetCommands(): array + { + return [self::TABLE_ACTIONS]; + } + + private function setTabs(string $a_active): void + { + $this->tabs->addSubTab( 'badges', - $lng->txt('obj_bdga'), - $ilCtrl->getLinkTarget($this, 'listBadges') + $this->lng->txt('obj_bdga'), + $this->ctrl->getLinkTarget($this, self::LIST_BADGES_ACTION) ); - $ilTabs->addSubTab( + $this->tabs->addSubTab( 'users', - $lng->txt('users'), - $ilCtrl->getLinkTarget($this, 'listUsers') + $this->lng->txt('users'), + $this->ctrl->getLinkTarget($this, self::LIST_USERS_ACTION) ); - $ilTabs->activateSubTab($a_active); + $this->tabs->activateSubTab($a_active); } - protected function hasWrite(): bool + private function hasWrite(): bool { - $ilAccess = $this->access; - return $ilAccess->checkAccess('write', '', $this->parent_ref_id); + return $this->access->checkAccess('write', '', $this->parent_ref_id); } - protected function listBadges(): void + private function listBadgesCmd(): void { - $ilToolbar = $this->toolbar; - $lng = $this->lng; - $ilCtrl = $this->ctrl; - $this->setTabs('badges'); if ($this->hasWrite()) { @@ -272,27 +257,31 @@ protected function listBadges(): void if ($valid_types) { $options = []; foreach ($valid_types as $id => $type) { - $ilCtrl->setParameter($this, 'type', $id); + $this->ctrl->setParameter($this, 'type', $id); $options[$id] = $this->ui_factory->link()->standard( - $this->parent_obj_type !== 'bdga' ? ilBadge::getExtendedTypeCaption($type) : $type->getCaption(), - $ilCtrl->getLinkTarget($this, 'addBadge') + $this->parent_obj_type !== 'bdga' ? ilBadge::getExtendedTypeCaption($type) : $type->getCaption( + ), + $this->ctrl->getLinkTarget($this, self::ADD_BADGE_ACTION) ); - $ilCtrl->setParameter($this, 'type', null); + $this->ctrl->setParameter($this, 'type', null); } asort($options); $options = array_values($options); - $ilToolbar->addComponent( - $this->ui_factory->dropdown()->standard($options)->withLabel($lng->txt('badge_create')) + $this->toolbar->addComponent( + $this->ui_factory->dropdown()->standard($options)->withLabel($this->lng->txt('badge_create')) ); } else { - $this->tpl->setOnScreenMessage('info', $lng->txt('badge_no_valid_types_for_obj')); + $this->tpl->setOnScreenMessage( + $this->tpl::MESSAGE_TYPE_INFO, + $this->lng->txt('badge_no_valid_types_for_obj') + ); } $clip_ids = $this->session_repo->getBadgeIds(); if (count($clip_ids) > 0) { if ($valid_types) { - $ilToolbar->addSeparator(); + $this->toolbar->addSeparator(); } $tt = []; @@ -301,85 +290,77 @@ protected function listBadges(): void } $ttid = 'bdgpst'; - $lng->loadLanguageModule('content'); - $ilToolbar->addButton( - $lng->txt('cont_paste_from_clipboard') . + $this->lng->loadLanguageModule('content'); + $this->toolbar->addButton( + $this->lng->txt('cont_paste_from_clipboard') . ' (' . count($tt) . ')', - $ilCtrl->getLinkTarget($this, 'pasteBadges'), + $this->ctrl->getLinkTarget($this, self::PASTE_BADGES_ACTION), '', null, '', $ttid ); - $ilToolbar->addButton( - $lng->txt('clear_clipboard'), - $ilCtrl->getLinkTarget($this, 'clearClipboard') + $this->toolbar->addButton( + $this->lng->txt('clear_clipboard'), + $this->ctrl->getLinkTarget($this, self::CLEAR_CLIPBOARD_ACTION) ); } } $table = new ilBadgeTableGUI($this->parent_obj_id, $this->parent_obj_type, $this->hasWrite()); - $this->ctrl->setParameter($this, 'returnCmd', __FUNCTION__); - $table->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, 'action')); + $table->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, self::TABLE_ACTIONS)); } - // // badge (CRUD) // - protected function addBadge(?ilPropertyFormGUI $a_form = null): void + private function addBadgeCmd(?ilPropertyFormGUI $a_form = null): void { - $ilCtrl = $this->ctrl; - $tpl = $this->tpl; - $type_id = $this->request->getType(); if (!$type_id || !$this->hasWrite()) { - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - $ilCtrl->setParameter($this, 'type', $type_id); + $this->ctrl->setParameter($this, 'type', $type_id); $handler = ilBadgeHandler::getInstance(); $type = $handler->getTypeInstanceByUniqueId($type_id); if (!$type) { - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } if (!$a_form) { $a_form = $this->initBadgeForm('create', $type, $type_id); } - $tpl->setContent($a_form->getHTML()); + $this->tpl->setContent($a_form->getHTML()); } - protected function initBadgeForm( + private function initBadgeForm( string $a_mode, ilBadgeType $a_type, string $a_type_unique_id ): ilPropertyFormGUI { - $lng = $this->lng; - $ilCtrl = $this->ctrl; - $form = new ilPropertyFormGUI(); - $form->setFormAction($ilCtrl->getFormAction($this, 'saveBadge')); - $form->setTitle($lng->txt('badge_badge') . ' "' . $a_type->getCaption() . '"'); + $form->setFormAction($this->ctrl->getFormAction($this, self::SAVE_BADGE_ACTION)); + $form->setTitle($this->lng->txt('badge_badge') . ' "' . $a_type->getCaption() . '"'); - $active = new ilCheckboxInputGUI($lng->txt('active'), 'act'); + $active = new ilCheckboxInputGUI($this->lng->txt('active'), 'act'); $form->addItem($active); - $title = new ilTextInputGUI($lng->txt('title'), 'title'); + $title = new ilTextInputGUI($this->lng->txt('title'), 'title'); $title->setMaxLength(255); $title->setRequired(true); $form->addItem($title); - $desc = new ilTextAreaInputGUI($lng->txt('description'), 'desc'); + $desc = new ilTextAreaInputGUI($this->lng->txt('description'), 'desc'); $desc->setMaxNumOfChars(4000); $desc->setRequired(true); $form->addItem($desc); - $crit = new ilTextAreaInputGUI($lng->txt('badge_criteria'), 'crit'); + $crit = new ilTextAreaInputGUI($this->lng->txt('badge_criteria'), 'crit'); $crit->setMaxNumOfChars(4000); $crit->setRequired(true); $form->addItem($crit); @@ -387,18 +368,18 @@ protected function initBadgeForm( if ($a_mode === 'create') { // upload - $img_mode = new ilRadioGroupInputGUI($lng->txt('image'), 'img_mode'); + $img_mode = new ilRadioGroupInputGUI($this->lng->txt('image'), 'img_mode'); $img_mode->setRequired(true); $img_mode->setValue('tmpl'); $form->addItem($img_mode); - $img_mode_tmpl = new ilRadioOption($lng->txt('badge_image_from_template'), 'tmpl'); + $img_mode_tmpl = new ilRadioOption($this->lng->txt('badge_image_from_template'), 'tmpl'); $img_mode->addOption($img_mode_tmpl); - $img_mode_up = new ilRadioOption($lng->txt('badge_image_from_upload'), 'up'); + $img_mode_up = new ilRadioOption($this->lng->txt('badge_image_from_upload'), 'up'); $img_mode->addOption($img_mode_up); - $img_upload = new ilImageFileInputGUI($lng->txt('file'), 'img'); + $img_upload = new ilImageFileInputGUI($this->lng->txt('file'), 'img'); $img_upload->setRequired(true); $img_upload->setSuffixes(['png', 'svg']); $img_mode_up->addSubItem($img_upload); @@ -408,12 +389,12 @@ protected function initBadgeForm( $valid_templates = ilBadgeImageTemplate::getInstancesByType($a_type_unique_id); if (count($valid_templates)) { $options = []; - $options[''] = $lng->txt('please_select'); + $options[''] = $this->lng->txt('please_select'); foreach ($valid_templates as $tmpl) { $options[$tmpl->getId()] = $tmpl->getTitle(); } - $tmpl = new ilSelectInputGUI($lng->txt('badge_image_template_form'), 'tmpl'); + $tmpl = new ilSelectInputGUI($this->lng->txt('badge_image_template_form'), 'tmpl'); $tmpl->setRequired(true); $tmpl->setOptions($options); $img_mode_tmpl->addSubItem($tmpl); @@ -423,14 +404,14 @@ protected function initBadgeForm( $img_mode->setValue('up'); } } else { - $img_upload = new ilImageFileInputGUI($lng->txt('image'), 'img'); + $img_upload = new ilImageFileInputGUI($this->lng->txt('image'), 'img'); $img_upload->setSuffixes(['png', 'svg']); $img_upload->setAllowDeletion(false); $img_upload->setUseCache(false); $form->addItem($img_upload); } - $valid = new ilTextInputGUI($lng->txt('badge_valid'), 'valid'); + $valid = new ilTextInputGUI($this->lng->txt('badge_valid'), 'valid'); $valid->setMaxLength(255); $form->addItem($valid); @@ -442,11 +423,11 @@ protected function initBadgeForm( // :TODO: valid date/period if ($a_mode === 'create') { - $form->addCommandButton('saveBadge', $lng->txt('save')); + $form->addCommandButton(self::SAVE_BADGE_ACTION, $this->lng->txt('save')); } else { - $form->addCommandButton('updateBadge', $lng->txt('save')); + $form->addCommandButton(self::UPDATE_BADGE_ACTION, $this->lng->txt('save')); } - $form->addCommandButton('listBadges', $lng->txt('cancel')); + $form->addCommandButton(self::LIST_BADGES_ACTION, $this->lng->txt('cancel')); return $form; } @@ -455,23 +436,20 @@ protected function initBadgeForm( * @throws ilCtrlException * @throws IllegalStateException */ - protected function saveBadge(): void + private function saveBadgeCmd(): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $type_id = $this->request->getType(); if (!$type_id || !$this->hasWrite()) { - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - $ilCtrl->setParameter($this, 'type', $type_id); + $this->ctrl->setParameter($this, 'type', $type_id); $handler = ilBadgeHandler::getInstance(); $type = $handler->getTypeInstanceByUniqueId($type_id); if (!$type) { - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } $form = $this->initBadgeForm('create', $type, $type_id); @@ -501,33 +479,36 @@ protected function saveBadge(): void $this->cloneBadgeTemplate($badge, new ResourceIdentification($tmpl->getImageRid())); } - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); - $ilCtrl->redirect($this, 'listBadges'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } $form->setValuesByPost(); - $this->addBadge($form); + $this->addBadgeCmd($form); } - protected function editBadge(?ilPropertyFormGUI $a_form = null): void + private function editBadgeCmd(?ilPropertyFormGUI $a_form = null): void { - $ilCtrl = $this->ctrl; - $tpl = $this->tpl; - $lng = $this->lng; - $badge_id = $this->request->getBadgeIdFromUrl(); + if (!$badge_id) { + $badge_id = $this->request->getBadgeId(); + } + if (!$badge_id || !$this->hasWrite()) { - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - $ilCtrl->setParameter($this, 'bid', $badge_id); + $this->ctrl->setParameter($this, 'bid', $badge_id); $badge = new ilBadge($badge_id); $static_cnt = ilBadgeHandler::getInstance()->countStaticBadgeInstances($badge); if ($static_cnt) { - $this->tpl->setOnScreenMessage('info', sprintf($lng->txt('badge_edit_with_published'), $static_cnt)); + $this->tpl->setOnScreenMessage( + $this->tpl::MESSAGE_TYPE_INFO, + sprintf($this->lng->txt('badge_edit_with_published'), $static_cnt) + ); } if (!$a_form) { @@ -536,10 +517,10 @@ protected function editBadge(?ilPropertyFormGUI $a_form = null): void $this->setBadgeFormValues($a_form, $badge, $type); } - $tpl->setContent($a_form->getHTML()); + $this->tpl->setContent($a_form->getHTML()); } - protected function setBadgeFormValues( + private function setBadgeFormValues( ilPropertyFormGUI $a_form, ilBadge $a_badge, ilBadgeType $a_type @@ -568,18 +549,15 @@ protected function setBadgeFormValues( * @throws ilCtrlException * @throws IllegalStateException */ - protected function updateBadge(): void + private function updateBadgeCmd(): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $badge_id = $this->request->getBadgeId(); if (!$badge_id || !$this->hasWrite()) { - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - $ilCtrl->setParameter($this, 'bid', $badge_id); + $this->ctrl->setParameter($this, 'bid', $badge_id); $badge = new ilBadge($badge_id); $type = $badge->getTypeInstance(); @@ -614,41 +592,36 @@ protected function updateBadge(): void } $badge->update(); - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); - $ilCtrl->redirect($this, 'listBadges'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - $this->tpl->setOnScreenMessage('failure', $lng->txt('form_input_not_valid')); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_FAILURE, $this->lng->txt('form_input_not_valid')); $form->setValuesByPost(); - $this->editBadge($form); + $this->editBadgeCmd($form); } - protected function confirmDeleteBadges(): void + private function confirmDeleteBadges(): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $tpl = $this->tpl; - $ilTabs = $this->tabs; - $badge_ids = $this->request->getMultiActionBadgeIdsFromUrl(); - if ($badge_ids === ['ALL_OBJECTS']) { + if ($badge_ids === [self::TABLE_ALL_OBJECTS_ACTION]) { $badge_ids = []; foreach (ilBadge::getInstancesByParentId($this->parent_obj_id) as $badge) { $badge_ids[] = $badge->getId(); } } - $ilTabs->clearTargets(); - $ilTabs->setBackTarget( - $lng->txt('back'), - $ilCtrl->getLinkTarget($this, 'listBadges') + $this->tabs->clearTargets(); + $this->tabs->setBackTarget( + $this->lng->txt('back'), + $this->ctrl->getLinkTarget($this, self::LIST_BADGES_ACTION) ); $confirmation_gui = new ilConfirmationGUI(); - $confirmation_gui->setFormAction($ilCtrl->getFormAction($this)); - $confirmation_gui->setHeaderText($lng->txt('badge_deletion_confirmation')); - $confirmation_gui->setCancel($lng->txt('cancel'), 'listBadges'); - $confirmation_gui->setConfirm($lng->txt('delete'), 'deleteBadges'); + $confirmation_gui->setFormAction($this->ctrl->getFormAction($this)); + $confirmation_gui->setHeaderText($this->lng->txt('badge_deletion_confirmation')); + $confirmation_gui->setCancel($this->lng->txt('cancel'), self::LIST_BADGES_ACTION); + $confirmation_gui->setConfirm($this->lng->txt('delete'), self::DELETE_BADGES_ACTION); foreach ($badge_ids as $badge_id) { $badge = new ilBadge((int) $badge_id); @@ -660,14 +633,11 @@ protected function confirmDeleteBadges(): void ); } - $tpl->setContent($confirmation_gui->getHTML()); + $this->tpl->setContent($confirmation_gui->getHTML()); } - protected function deleteBadges(): void + private function deleteBadgesCmd(): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $badge_ids = $this->request->getIds(); if (count($badge_ids) > 0) { @@ -675,15 +645,14 @@ protected function deleteBadges(): void $badge = new ilBadge((int) $badge_id); $badge->delete(); } - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); } else { - $this->tpl->setOnScreenMessage('failure', $lng->txt('badge_select_one'), true); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_FAILURE, $this->lng->txt('badge_select_one'), true); } - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - // // badges multi action // @@ -691,23 +660,19 @@ protected function deleteBadges(): void /** * @return int[] */ - protected function getBadgesFromMultiAction(): array + private function getBadgesFromMultiAction(): array { - $ilCtrl = $this->ctrl; - $badge_ids = $this->request->getIds(); if (!$badge_ids || !$this->hasWrite()) { - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } return $badge_ids; } - protected function copyBadges(): void + private function copyBadgesCmd(): void { - $ilCtrl = $this->ctrl; - $badge_ids = $this->getBadgesFromMultiAction(); $clip_ids = $this->session_repo->getBadgeIds(); @@ -716,21 +681,19 @@ protected function copyBadges(): void ); $this->session_repo->setBadgeIds(array_map(intval(...), $clip_ids)); - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - protected function clearClipboard(): void + private function clearClipboardCmd(): void { - $ilCtrl = $this->ctrl; - $this->session_repo->clear(); - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } /** * @return ilBadge[] */ - protected function getValidBadgesFromClipboard(): array + private function getValidBadgesFromClipboard(): array { $res = []; @@ -746,28 +709,23 @@ protected function getValidBadgesFromClipboard(): array return $res; } - protected function pasteBadges(): void + private function pasteBadgesCmd(): void { - $ilCtrl = $this->ctrl; - $clip_ids = $this->session_repo->getBadgeIds(); if (!$this->hasWrite() || count($clip_ids) === 0) { - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - $copy_suffix = $this->lng->txt("copy_of_suffix"); + $copy_suffix = $this->lng->txt('copy_of_suffix'); foreach ($this->getValidBadgesFromClipboard() as $badge) { $badge->copy($this->parent_obj_id, $copy_suffix); } - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - protected function toggleBadges(bool $a_status): void + private function toggleBadges(bool $a_status): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $badge_ids = $this->request->getMultiActionBadgeIdsFromUrl(); if (count($badge_ids) > 0) { foreach ($badge_ids as $badge_id) { @@ -782,37 +740,35 @@ protected function toggleBadges(bool $a_status): void $badge->setActive($a_status); $badge->update(); } - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); + $this->tpl->setOnScreenMessage( + $this->tpl::MESSAGE_TYPE_SUCCESS, + $this->lng->txt('settings_saved'), + true + ); } } else { - $this->tpl->setOnScreenMessage('failure', $lng->txt('badge_select_one'), true); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_FAILURE, $this->lng->txt('badge_select_one'), true); } - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - protected function activateBadges(): void + private function activateBadges(): void { $this->toggleBadges(true); } - protected function deactivateBadges(): void + private function deactivateBadges(): void { $this->toggleBadges(false); } - // // users // - protected function listUsers(): void + private function listUsersCmd(): void { - $lng = $this->lng; - $ilCtrl = $this->ctrl; - $ilToolbar = $this->toolbar; - $tpl = $this->tpl; - $this->setTabs('users'); if ($this->hasWrite()) { @@ -821,31 +777,35 @@ protected function listUsers(): void $this->parent_obj_type ); if (count($manual)) { - $drop = new ilSelectInputGUI($lng->txt('badge_badge'), 'bid'); + $drop = new ilSelectInputGUI($this->lng->txt('badge_badge'), 'bid'); $drop->setOptions($manual); - $ilToolbar->addInputItem($drop, true); + $this->toolbar->addInputItem($drop, true); - $ilToolbar->setFormAction($ilCtrl->getFormAction($this, 'selectBadgeForAwardingOrRevoking')); - $ilToolbar->addFormButton($lng->txt('badge_award_badge'), 'selectBadgeForAwardingOrRevoking'); + $this->toolbar->setFormAction( + $this->ctrl->getFormAction($this, self::SELECT_BADGE_FOR_AWARD_REVOKE_ACTION) + ); + $this->toolbar->addFormButton( + $this->lng->txt('badge_award_badge'), + self::SELECT_BADGE_FOR_AWARD_REVOKE_ACTION + ); } } $tbl = new ilBadgeUserTableGUI($this->parent_ref_id); - $this->ctrl->setParameter($this, 'returnCmd', __FUNCTION__); - $tbl->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, 'action')); + $tbl->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, self::TABLE_ACTIONS)); } - private function selectBadgeForAwardingOrRevoking(): never + private function selectBadgeForAwardingOrRevokingCmd(): never { $this->ctrl->setParameter( $this, 'bid', $this->http->wrapper()->post()->retrieve('bid', $this->refinery->kindlyTo()->int()) ); - $this->ctrl->redirect($this, 'awardBadgeUserSelection'); + $this->ctrl->redirect($this, self::AWARD_BADGE_USER_SELECTION_ACTION); } - protected function awardBadgeUserSelection(): void + private function awardBadgeUserSelectionCmd(): void { $badge_ids = $this->request->getMultiActionBadgeIdsFromUrl(); $bid = null; @@ -862,7 +822,7 @@ protected function awardBadgeUserSelection(): void if (!$bid || !$this->hasWrite()) { - $this->ctrl->redirect($this, 'listUsers'); + $this->ctrl->redirect($this, self::LIST_USERS_ACTION); } $manual = array_keys( @@ -870,13 +830,13 @@ protected function awardBadgeUserSelection(): void ); if (!in_array($bid, $manual, true)) { - $this->ctrl->redirect($this, 'listUsers'); + $this->ctrl->redirect($this, self::LIST_USERS_ACTION); } - $back_target = 'listUsers'; + $back_target = self::LIST_USERS_ACTION; if ($this->request->getTgt() === 'bdgl') { $this->ctrl->saveParameter($this, 'tgt'); - $back_target = 'listBadges'; + $back_target = self::LIST_BADGES_ACTION; } $this->tabs->clearTargets(); @@ -890,30 +850,25 @@ protected function awardBadgeUserSelection(): void $badge = new ilBadge($bid); $tbl = new ilBadgeUserTableGUI($this->parent_ref_id, $badge); - $this->ctrl->setParameter($this, 'returnCmd', __FUNCTION__); - $tbl->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, 'action')); + $tbl->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, self::TABLE_ACTIONS)); } - protected function assignBadge(): void + private function assignBadge(): void { - $ilCtrl = $this->ctrl; - $ilUser = $this->user; - $lng = $this->lng; - $splittable_user_ids = $this->request->getBadgeAssignableUsers(); [$user_ids, $badge_id] = $this->splitBadgeAndUserIdsFromString($splittable_user_ids); if (!$user_ids || !$badge_id || !$this->hasWrite()) { - $ilCtrl->redirect($this, 'listUsers'); + $this->ctrl->redirect($this, self::LIST_USERS_ACTION); } $new_badges = []; foreach ($user_ids as $user_id) { if (!ilBadgeAssignment::exists($badge_id, $user_id)) { $ass = new ilBadgeAssignment($badge_id, $user_id); - $ass->setAwardedBy($ilUser->getId()); + $ass->setAwardedBy($this->user->getId()); $ass->store(); $new_badges[$user_id][] = $badge_id; @@ -922,43 +877,38 @@ protected function assignBadge(): void ilBadgeHandler::getInstance()->sendNotification($new_badges, $this->parent_ref_id); - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); - $ilCtrl->redirect($this, 'listUsers'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); + $this->ctrl->redirect($this, self::LIST_USERS_ACTION); } - protected function confirmDeassignBadge(): void + private function confirmDeassignBadge(): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $tpl = $this->tpl; - $ilTabs = $this->tabs; - $splittable_user_ids = $this->request->getMultiActionBadgeIdsFromUrl(); [$user_ids, $badge_id] = $this->splitBadgeAndUserIdsFromString($splittable_user_ids); if (!$user_ids || !$badge_id || !$this->hasWrite()) { - $ilCtrl->redirect($this, 'listUsers'); + $this->ctrl->redirect($this, self::LIST_USERS_ACTION); } - $ilTabs->clearTargets(); - $ilTabs->setBackTarget( - $lng->txt('back'), - $ilCtrl->getLinkTarget($this, 'listUsers') + $this->tabs->clearTargets(); + $this->tabs->setBackTarget( + $this->lng->txt('back'), + $this->ctrl->getLinkTarget($this, self::LIST_USERS_ACTION) ); $badge = new ilBadge($badge_id); - $ilCtrl->setParameter($this, 'bid', $badge->getId()); + $this->ctrl->setParameter($this, 'bid', $badge->getId()); $confirmation_gui = new ilConfirmationGUI(); - $confirmation_gui->setFormAction($ilCtrl->getFormAction($this)); + $confirmation_gui->setFormAction($this->ctrl->getFormAction($this, self::DEASSIGN_BADGE_ACTION)); $confirmation_gui->setHeaderText( - sprintf($lng->txt('badge_assignment_deletion_confirmation'), $badge->getTitle()) + sprintf($this->lng->txt('badge_assignment_deletion_confirmation'), $badge->getTitle()) ); - $confirmation_gui->setCancel($lng->txt('cancel'), 'listUsers'); - $confirmation_gui->setConfirm($lng->txt('badge_remove_badge'), 'deassignBadge'); + $confirmation_gui->setCancel($this->lng->txt('cancel'), self::LIST_USERS_ACTION); + $confirmation_gui->setConfirm($this->lng->txt('badge_remove_badge'), self::DEASSIGN_BADGE_ACTION); $assigned_users = ilBadgeAssignment::getAssignedUsers($badge->getId()); @@ -972,14 +922,11 @@ protected function confirmDeassignBadge(): void } } - $tpl->setContent($confirmation_gui->getHTML()); + $this->tpl->setContent($confirmation_gui->getHTML()); } - protected function deassignBadge(): void + private function deassignBadgeCmd(): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $post_values = $this->request->getIds(); $user_ids = []; $badge_id = null; @@ -991,7 +938,7 @@ protected function deassignBadge(): void if (!$user_ids || !$badge_id || !$this->hasWrite()) { - $ilCtrl->redirect($this, 'listUsers'); + $this->ctrl->redirect($this, self::LIST_USERS_ACTION); } foreach ($user_ids as $user_id) { @@ -999,14 +946,14 @@ protected function deassignBadge(): void $ass->delete(); } - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); - $ilCtrl->redirect($this, 'listUsers'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); + $this->ctrl->redirect($this, self::LIST_USERS_ACTION); } /** * @throws Exception */ - protected function cloneBadgeTemplate(ilBadge $badge, ?ResourceIdentification $rid): void + private function cloneBadgeTemplate(ilBadge $badge, ?ResourceIdentification $rid): void { if ($rid !== null) { $new_rid = $this->badge_image_service->cloneBadgeImageByRid($rid); @@ -1015,7 +962,7 @@ protected function cloneBadgeTemplate(ilBadge $badge, ?ResourceIdentification $r } } - protected function removeResourceStorageImage(ilBadge $badge): void + private function removeResourceStorageImage(ilBadge $badge): void { if ($badge->getImageRid() !== '') { $this->resource_storage->manage()->remove( diff --git a/components/ILIAS/Badge/classes/class.ilBadgePersonalTableGUI.php b/components/ILIAS/Badge/classes/class.ilBadgePersonalTableGUI.php index d567c39dfdb0..173d1479c1f4 100755 --- a/components/ILIAS/Badge/classes/class.ilBadgePersonalTableGUI.php +++ b/components/ILIAS/Badge/classes/class.ilBadgePersonalTableGUI.php @@ -35,6 +35,7 @@ use ILIAS\Badge\PresentationHeader; use ILIAS\Badge\Tile; use ILIAS\UI\Component\Table\Column\Column; +use ILIAS\Badge\Table\TableContentWrapper; class ilBadgePersonalTableGUI implements DataRetrieval { @@ -376,14 +377,20 @@ public function renderTable(string $url): void $this->lng->txt('badge_personal_badges'), $this->getColumns($this->user->getDateTimeFormat()), ) - ->withId(self::class) + ->withId(str_replace('\\', '', self::class)) ->withOrder(new Order('title', Order::ASC)) + ->withRange(new Range(0, 50)) ->withActions($this->getActions($url_builder, $action_parameter_token, $row_id_token)) ->withRequest($this->request); $pres = new PresentationHeader($this->dic, ilBadgeProfileGUI::class); $pres->show($this->lng->txt('table_view')); - $this->tpl->setContent($this->renderer->render($table)); + $content_wrapper = new TableContentWrapper($this->renderer, $this->factory); + $this->tpl->setContent($this->renderer->render( + $content_wrapper->wrap( + $table + ) + )); } } diff --git a/components/ILIAS/Badge/classes/class.ilBadgeProfileGUI.php b/components/ILIAS/Badge/classes/class.ilBadgeProfileGUI.php index d29c0bac2172..e03f50b6117c 100755 --- a/components/ILIAS/Badge/classes/class.ilBadgeProfileGUI.php +++ b/components/ILIAS/Badge/classes/class.ilBadgeProfileGUI.php @@ -23,18 +23,24 @@ class ilBadgeProfileGUI implements ilCtrlSecurityInterface { - final public const BACKPACK_EMAIL = 'badge_mozilla_bp'; - - protected ilBadgeGUIRequest $request; - protected ilCtrl $ctrl; - protected ilLanguage $lng; - protected ilGlobalTemplateInterface $tpl; - protected ilTabsGUI $tabs; - protected ilObjUser $user; - protected ilAccessHandler $access; - protected \ILIAS\UI\Factory $factory; - protected \ILIAS\UI\Renderer $renderer; - protected BadgeNotificationPrefRepository $noti_repo; + private const string LIST_BADGES_ACTION = 'listBadges'; + private const string MANAGE_BADGES_ACTION = 'manageBadges'; + private const string TABLE_ACTIONS = 'handleTableActions'; + private const string DEFAULT_ACTION = self::LIST_BADGES_ACTION; + + public const string TABLE_ALL_OBJECTS_ACTION = 'ALL_OBJECTS'; + + final public const string BACKPACK_EMAIL = 'badge_mozilla_bp'; + + private readonly ilBadgeGUIRequest $request; + private readonly ilCtrlInterface $ctrl; + private readonly ilLanguage $lng; + private readonly ilGlobalTemplateInterface $tpl; + private readonly ilTabsGUI $tabs; + private readonly ilObjUser $user; + private readonly \ILIAS\Refinery\Factory $refinery; + private readonly \ILIAS\HTTP\GlobalHttpState $http; + private readonly BadgeNotificationPrefRepository $noti_repo; private readonly TileView $tile_view; public function __construct() @@ -46,9 +52,8 @@ public function __construct() $this->tpl = $DIC['tpl']; $this->tabs = $DIC->tabs(); $this->user = $DIC->user(); - $this->access = $DIC->access(); - $this->factory = $DIC->ui()->factory(); - $this->renderer = $DIC->ui()->renderer(); + $this->refinery = $DIC->refinery(); + $this->http = $DIC->http(); $this->request = new ilBadgeGUIRequest( $DIC->http(), $DIC->refinery() @@ -66,28 +71,16 @@ public function __construct() public function executeCommand(): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; + $this->lng->loadLanguageModule('badge'); - $lng->loadLanguageModule('badge'); - - switch ($ilCtrl->getNextClass()) { + switch ($this->ctrl->getNextClass()) { default: - $cmd = $ilCtrl->getCmd('listBadges'); - - global $DIC; - $query = $DIC->http()->wrapper()->query(); - $action = ''; - $parameter = 'badge_table_action'; - if ($cmd === 'action' && $this->query->has($parameter)) { - $action = $this->query->retrieve($parameter, $DIC->refinery()->kindlyTo()->string()); - $cmd = 'listBadges'; - } - if ($action === 'obj_badge_activate') { - $this->activate(); - } elseif ($action === 'obj_badge_deactivate') { - $this->deactivate(); + $cmd = $this->ctrl->getCmd(self::DEFAULT_ACTION); + if ($cmd === '' || $cmd === null || !method_exists($this, $cmd . 'Cmd')) { + $cmd = self::DEFAULT_ACTION; } + $cmd .= 'Cmd'; + $this->$cmd(); break; } @@ -98,12 +91,32 @@ public function getSafePostCommands(): array return []; } + private function getTableAction(): ?string + { + return $this->http->wrapper()->query()->retrieve( + 'badge_table_action', + $this->refinery->byTrying([ + $this->refinery->kindlyTo()->string(), + $this->refinery->always(null) + ]) + ); + } + + private function handleTableActionsCmd(): void + { + match ($this->getTableAction()) { + 'obj_badge_activate' => $this->activate(), + 'obj_badge_deactivate' => $this->deactivate(), + default => $this->ctrl->redirect($this, self::DEFAULT_ACTION), + }; + } + public function getUnsafeGetCommands(): array { - return ['action']; + return [self::TABLE_ACTIONS]; } - protected function listBadges(): void + private function listBadgesCmd(): void { $this->tpl->setContent($this->renderDeck($this->tile_view->show())); $this->noti_repo->updateLastCheckedTimestamp(); @@ -116,36 +129,52 @@ private function renderDeck(string $deck): string return $template->get(); } - protected function manageBadges(): void + private function manageBadgesCmd(): void { $tpl = new ilBadgePersonalTableGUI(); - $tpl->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, 'action')); + $tpl->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, self::TABLE_ACTIONS)); } - protected function getMultiSelection(): array + private function getMultiSelection(): array { - $ids = $this->request->getBadgeIds(); - if (count($ids) > 0) { - $res = []; - foreach ($ids as $id) { - $ass = new ilBadgeAssignment($id, $this->user->getId()); - if ($ass->getTimestamp()) { - $res[] = $ass; - } - } + $badge_ids = array_filter( + $this->http->wrapper()->query()->retrieve( + 'badge_id', + $this->refinery->byTrying([ + $this->refinery->kindlyTo()->listOf($this->refinery->kindlyTo()->string()), + $this->refinery->always([]) + ]) + ) + ); - return $res; + if ($badge_ids === [self::TABLE_ALL_OBJECTS_ACTION]) { + $badge_assignments = array_filter( + ilBadgeAssignment::getInstancesByUserId($this->user->getId()), + static fn(ilBadgeAssignment $ass): bool => (bool) $ass->getTimestamp() + ); + } else { + $badge_assignments = array_filter( + array_map( + fn(int $badge_id): ilBadgeAssignment => new ilBadgeAssignment( + $badge_id, + $this->user->getId() + ), + $this->request->getBadgeIds() + ), + static fn(ilBadgeAssignment $ass): bool => (bool) $ass->getTimestamp() + ); } - $this->tpl->setOnScreenMessage('failure', $this->lng->txt('select_one'), true); - $this->ctrl->redirect($this, 'manageBadges'); + if (!empty($badge_assignments)) { + return $badge_assignments; + } + + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_FAILURE, $this->lng->txt('select_one'), true); + $this->ctrl->redirect($this, self::MANAGE_BADGES_ACTION); } - protected function activate(): void + private function activate(): void { - $lng = $this->lng; - $ilCtrl = $this->ctrl; - foreach ($this->getMultiSelection() as $ass) { // already active? if (!$ass->getPosition()) { @@ -154,15 +183,12 @@ protected function activate(): void } } - $this->tpl->setOnScreenMessage('success', $lng->txt('position_updated'), true); - $ilCtrl->redirect($this, 'manageBadges'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('position_updated'), true); + $this->ctrl->redirect($this, self::MANAGE_BADGES_ACTION); } - protected function deactivate(): void + private function deactivate(): void { - $lng = $this->lng; - $ilCtrl = $this->ctrl; - foreach ($this->getMultiSelection() as $ass) { // already inactive? if ($ass->getPosition()) { @@ -171,15 +197,12 @@ protected function deactivate(): void } } - $this->tpl->setOnScreenMessage('success', $lng->txt('position_updated'), true); - $ilCtrl->redirect($this, 'manageBadges'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('position_updated'), true); + $this->ctrl->redirect($this, self::MANAGE_BADGES_ACTION); } - protected function activateInCard(): void + private function activateInCardCmd(): void { - $lng = $this->lng; - $ilCtrl = $this->ctrl; - foreach ($this->getMultiSelection() as $ass) { // already active? if (!$ass->getPosition()) { @@ -188,15 +211,12 @@ protected function activateInCard(): void } } - $this->tpl->setOnScreenMessage('success', $lng->txt('position_updated'), true); - $ilCtrl->redirect($this, 'listBadges'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('position_updated'), true); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - protected function deactivateInCard(): void + private function deactivateInCardCmd(): void { - $lng = $this->lng; - $ilCtrl = $this->ctrl; - foreach ($this->getMultiSelection() as $ass) { // already inactive? if ($ass->getPosition()) { @@ -205,61 +225,52 @@ protected function deactivateInCard(): void } } - $this->tpl->setOnScreenMessage('success', $lng->txt('position_updated'), true); - $ilCtrl->redirect($this, 'listBadges'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('position_updated'), true); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - protected function setBackpackSubTabs(): void + private function setBackpackSubTabs(): void { - $ilTabs = $this->tabs; - $lng = $this->lng; - $ilCtrl = $this->ctrl; - - $ilTabs->addSubTab( + $this->tabs->addSubTab( 'backpack_badges', - $lng->txt('obj_bdga'), - $ilCtrl->getLinkTarget($this, 'listBackpackGroups') + $this->lng->txt('obj_bdga'), + $this->ctrl->getLinkTarget($this, 'listBackpackGroups') ); - $ilTabs->addSubTab( + $this->tabs->addSubTab( 'backpack_settings', - $lng->txt('settings'), - $ilCtrl->getLinkTarget($this, 'editSettings') + $this->lng->txt('settings'), + $this->ctrl->getLinkTarget($this, 'editSettings') ); - $ilTabs->activateTab('backpack_badges'); + $this->tabs->activateTab('backpack_badges'); } - protected function listBackpackGroups(): void + private function listBackpackGroupsCmd(): void { - $lng = $this->lng; - $tpl = $this->tpl; - $ilCtrl = $this->ctrl; - $ilTabs = $this->tabs; - $this->setBackpackSubTabs(); - $ilTabs->activateSubTab('backpack_badges'); + $this->tabs->activateSubTab('backpack_badges'); - $this->tpl->setOnScreenMessage('info', $lng->txt('badge_backpack_gallery_info')); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_INFO, $this->lng->txt('badge_backpack_gallery_info')); $bp = new ilBadgeBackpack($this->getBackpackMail()); $bp_groups = $bp->getGroups(); if (!count($bp_groups)) { - $this->tpl->setOnScreenMessage('info', $lng->txt('badge_backpack_no_groups')); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_INFO, $this->lng->txt('badge_backpack_no_groups')); return; } $tmpl = new ilTemplate('tpl.badge_backpack.html', true, true, 'components/ILIAS/Badge/'); - $tmpl->setVariable('BACKPACK_TITLE', $lng->txt('badge_backpack_list')); + $tmpl->setVariable('BACKPACK_TITLE', $this->lng->txt('badge_backpack_list')); ilDatePresentation::setUseRelativeDates(false); foreach ($bp_groups as $group_id => $group) { $bp_badges = $bp->getBadges($group_id); if (count($bp_badges)) { - foreach ($bp_badges as $idx => $badge) { + foreach ($bp_badges as $badge) { $tmpl->setCurrentBlock('badge_bl'); $tmpl->setVariable('BADGE_TITLE', $badge['title']); $tmpl->setVariable('BADGE_DESC', $badge['description']); @@ -277,76 +288,63 @@ protected function listBackpackGroups(): void $tmpl->parseCurrentBlock(); } - $tpl->setContent($tmpl->get()); + $this->tpl->setContent($tmpl->get()); } // // settings // - protected function getBackpackMail(): string + private function getBackpackMail(): string { - $ilUser = $this->user; - - $mail = $ilUser->getPref(self::BACKPACK_EMAIL); + $mail = $this->user->getPref(self::BACKPACK_EMAIL); if (!$mail) { - $mail = $ilUser->getEmail(); + $mail = $this->user->getEmail(); } + return $mail; } - protected function initSettingsForm(): ilPropertyFormGUI + private function initSettingsForm(): ilPropertyFormGUI { - $lng = $this->lng; - $ilCtrl = $this->ctrl; - $form = new ilPropertyFormGUI(); - $form->setFormAction($ilCtrl->getFormAction($this, 'saveSettings')); - $form->setTitle($lng->txt('settings')); + $form->setFormAction($this->ctrl->getFormAction($this, 'saveSettings')); + $form->setTitle($this->lng->txt('settings')); - $email = new ilEMailInputGUI($lng->txt('badge_backpack_email'), 'email'); - // $email->setRequired(true); - $email->setInfo($lng->txt('badge_backpack_email_info')); + $email = new ilEMailInputGUI($this->lng->txt('badge_backpack_email'), 'email'); + $email->setInfo($this->lng->txt('badge_backpack_email_info')); $email->setValue($this->getBackpackMail()); $form->addItem($email); - $form->addCommandButton('saveSettings', $lng->txt('save')); + $form->addCommandButton('saveSettings', $this->lng->txt('save')); return $form; } - protected function editSettings(?ilPropertyFormGUI $a_form = null): void + private function editSettingsCmd(?ilPropertyFormGUI $a_form = null): void { - $tpl = $this->tpl; - $ilCtrl = $this->ctrl; - $ilTabs = $this->tabs; - - $ilCtrl->redirect($this, 'listBadges'); + $this->ctrl->redirect($this, self::LIST_BADGES_ACTION); } - protected function saveSettings(): void + private function saveSettingsCmd(): void { - $ilUser = $this->user; - $lng = $this->lng; - $ilCtrl = $this->ctrl; - $form = $this->initSettingsForm(); if ($form->checkInput()) { $new_email = $form->getInput('email'); $old_email = $this->getBackpackMail(); - $ilUser->writePref(self::BACKPACK_EMAIL, $new_email); + $this->user->writePref(self::BACKPACK_EMAIL, $new_email); // if email was changed: delete badge files - if ($new_email != $old_email) { - ilBadgeAssignment::clearBadgeCache($ilUser->getId()); + if ($new_email !== $old_email) { + ilBadgeAssignment::clearBadgeCache($this->user->getId()); } - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); - $ilCtrl->redirect($this, 'editSettings'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); + $this->ctrl->redirect($this, 'editSettings'); } $form->setValuesByPost(); - $this->editSettings($form); + $this->editSettingsCmd($form); } } diff --git a/components/ILIAS/Badge/classes/class.ilBadgeTableGUI.php b/components/ILIAS/Badge/classes/class.ilBadgeTableGUI.php index 5615db8e5183..b11788288141 100755 --- a/components/ILIAS/Badge/classes/class.ilBadgeTableGUI.php +++ b/components/ILIAS/Badge/classes/class.ilBadgeTableGUI.php @@ -38,6 +38,7 @@ use ilBadgeAuto; use ILIAS\Filesystem\Stream\Streams; use ILIAS\UI\Component\Table\Column\Column; +use ILIAS\Badge\Table\TableContentWrapper; class ilBadgeTableGUI implements DataRetrieval { @@ -179,7 +180,8 @@ private function enrichRecord(ModalBuilder $modal_builder, array $record): array [ 'description' => $badge->getDescription(), 'badge_criteria' => $badge->getCriteria(), - ] + ], + true ); $record['image'] = $images['rendered'] @@ -347,11 +349,11 @@ public function renderTable(string $url): void $table = $this->factory ->table() ->data($this, $this->lng->txt('obj_bdga'), $this->getColumns()) - ->withId(self::class . '_' . $this->parent_id) + ->withId(str_replace('\\', '', self::class) . '_' . $this->parent_id) ->withOrder(new Order('title', Order::ASC)) + ->withRange(new Range(0, 100)) ->withActions($this->getActions($url_builder, $action_parameter_token, $row_id_token)) ->withRequest($this->request); - $out = [$table]; $query = $this->http->wrapper()->query(); @@ -387,6 +389,11 @@ public function renderTable(string $url): void } } - $this->tpl->setContent($this->renderer->render($out)); + $content_wrapper = new TableContentWrapper($this->renderer, $this->factory); + $this->tpl->setContent($this->renderer->render( + $content_wrapper->wrap( + $table + ) + )); } } diff --git a/components/ILIAS/Badge/classes/class.ilBadgeTypesTableGUI.php b/components/ILIAS/Badge/classes/class.ilBadgeTypesTableGUI.php index cd11e8bc498c..6162d6b97ce5 100755 --- a/components/ILIAS/Badge/classes/class.ilBadgeTypesTableGUI.php +++ b/components/ILIAS/Badge/classes/class.ilBadgeTypesTableGUI.php @@ -231,8 +231,9 @@ public function renderTable(string $url): void $table = $this->factory ->table() ->data($this, $this->lng->txt('badge_types'), $this->getColumns()) - ->withId(self::class) + ->withId(str_replace('\\', '', self::class)) ->withOrder(new Order('name', Order::ASC)) + ->withRange(new Range(0, 100)) ->withActions($this->getActions($url_builder, $action_parameter_token, $row_id_token)) ->withRequest($this->request); diff --git a/components/ILIAS/Badge/classes/class.ilBadgeUserTableGUI.php b/components/ILIAS/Badge/classes/class.ilBadgeUserTableGUI.php index 8359f0d42b53..ffcce655c9e6 100755 --- a/components/ILIAS/Badge/classes/class.ilBadgeUserTableGUI.php +++ b/components/ILIAS/Badge/classes/class.ilBadgeUserTableGUI.php @@ -41,7 +41,6 @@ use ILIAS\UI\URLBuilderToken; use ilObjectDataDeletionLog; use ilTree; -use ilCalendarSettings; use ilObjUser; use ILIAS\Data\DateFormat\DateFormat; use ILIAS\UI\Component\Table\Column\Column; @@ -383,8 +382,9 @@ public function renderTable(string $url): void $table = $this->factory ->table() ->data($this, $title, $this->getColumns()) - ->withId(self::class . '_' . $this->parent_ref_id) + ->withId(str_replace('\\', '', self::class) . '_' . $this->parent_ref_id) ->withOrder(new Order('name', Order::ASC)) + ->withRange(new Range(0, 100)) ->withActions($this->getActions($url_builder, $action_parameter_token, $row_id_token)) ->withRequest($this->request); diff --git a/components/ILIAS/Badge/classes/class.ilObjBadgeAdministrationGUI.php b/components/ILIAS/Badge/classes/class.ilObjBadgeAdministrationGUI.php index e20d18f3907c..2281aa9bb755 100755 --- a/components/ILIAS/Badge/classes/class.ilObjBadgeAdministrationGUI.php +++ b/components/ILIAS/Badge/classes/class.ilObjBadgeAdministrationGUI.php @@ -17,7 +17,6 @@ *********************************************************************/ use ILIAS\Badge\ilBadgeImageTemplateTableGUI; -use ILIAS\HTTP\Services; use ILIAS\Badge\ilBadgeTypesTableGUI; use ILIAS\Badge\ilObjectBadgeTableGUI; use ILIAS\Badge\ilBadgeUserTableGUI; @@ -28,8 +27,20 @@ */ class ilObjBadgeAdministrationGUI extends ilObjectGUI implements ilCtrlSecurityInterface { - public const TABLE_ALL_OBJECTS_ACTION = 'ALL_OBJECTS'; - private \ILIAS\ResourceStorage\Services $resource_storage; + private const string LIST_TYPES_ACTION = 'listTypes'; + private const string LIST_IMG_TPL_ACTION = 'listImageTemplates'; + private const string LIST_OBJ_BADGES_ACTION = 'listObjectBadges'; + private const string EDIT_SETTINGS_ACTION = 'editSettings'; + private const string SAVE_SETTINGS_ACTION = 'saveSettings'; + private const string SAVE_IMG_TPL_ACTION = 'saveImageTemplate'; + private const string UPDATE_IMG_TPL_ACTION = 'updateImageTemplate'; + private const string ADD_IMG_TPL_ACTION = 'addImageTemplate'; + private const string DELETE_IMG_TPL_ACTION = 'deleteImageTemplates'; + private const string DELETE_OBJ_BADGES_ACTION = 'deleteObjectBadges'; + private const string DEFAULT_ACTION = self::EDIT_SETTINGS_ACTION; + private const string TABLE_ACTIONS = 'handleTableActions'; + public const string TABLE_ALL_OBJECTS_ACTION = 'ALL_OBJECTS'; + private ilRbacSystem $rbacsystem; private ilBadgeGUIRequest $badge_request; private ilTabsGUI $tabs; @@ -42,7 +53,6 @@ public function __construct( ) { global $DIC; - $this->resource_storage = $DIC->resourceStorage(); $this->rbacsystem = $DIC->rbac()->system(); $this->ctrl = $DIC->ctrl(); $this->access = $DIC->access(); @@ -83,75 +93,40 @@ public function executeCommand(): void break; default: - if (!$cmd || $cmd === 'view') { - $cmd = 'editSettings'; + if ($cmd === '' || $cmd === null || $cmd === 'view' || !method_exists($this, $cmd . 'Cmd')) { + $cmd = self::DEFAULT_ACTION; } + $cmd .= 'Cmd'; if ($this->badge_request->getBadgeIdFromUrl()) { $this->ctrl->setParameter($this, 'tid', $this->badge_request->getBadgeIdFromUrl()); } - $get = fn(string $key) => $this->http->wrapper()->query()->retrieve( - $key, - $this->refinery->byTrying([ - $this->refinery->kindlyTo()->string(), - $this->refinery->always('') - ]) - ); - - $table_action = $get('tid_table_action'); - $return_cmd = $get('returnCmd') ?: 'view'; - - $render_default = true; - $actions = [ - 'badge_type_activate' => ['activateTypes', true], - 'badge_type_deactivate' => ['deactivateTypes', true], - 'badge_image_template_editImageTemplate' => 'editImageTemplate', - 'obj_badge_user' => 'editImageTemplate', - 'obj_badge_activate' => 'activateObjectBadges', - 'obj_badge_deactivate' => 'deactivateObjectBadges', - 'obj_badge_show_users' => 'listObjectBadgeUsers', - 'badge_image_template_delete' => 'confirmDeleteImageTemplates', - 'obj_badge_delete' => 'confirmDeleteObjectBadges', - ]; - - $entry = $actions[$table_action] ?? null; - if ($cmd !== 'action' || !$entry) { - $this->$cmd(); - return; - } - - $entry = is_array($entry) ? $entry : [$entry, false]; - $this->{$entry[0]}(); - if ($entry[1] && in_array($return_cmd, ['listObjectBadges', 'listObjectBadgeUsers', 'listImageTemplates', 'listTypes'], true)) { - $this->$return_cmd(); - } + $this->$cmd(); break; } } public function getAdminTabs(): void { - $rbacsystem = $this->rbacsystem; - - if ($rbacsystem->checkAccess('read', $this->object->getRefId())) { + if ($this->rbacsystem->checkAccess('read', $this->object->getRefId())) { $this->tabs_gui->addTab( 'settings', $this->lng->txt('settings'), - $this->ctrl->getLinkTarget($this, 'editSettings') + $this->ctrl->getLinkTarget($this, self::EDIT_SETTINGS_ACTION) ); if (ilBadgeHandler::getInstance()->isActive()) { $this->tabs_gui->addTab( 'types', $this->lng->txt('badge_types'), - $this->ctrl->getLinkTarget($this, 'listTypes') + $this->ctrl->getLinkTarget($this, self::LIST_TYPES_ACTION) ); $this->tabs_gui->addTab( 'imgtmpl', $this->lng->txt('badge_image_templates'), - $this->ctrl->getLinkTarget($this, 'listImageTemplates') + $this->ctrl->getLinkTarget($this, self::LIST_IMG_TPL_ACTION) ); $this->tabs_gui->addTab( @@ -163,12 +138,12 @@ public function getAdminTabs(): void $this->tabs_gui->addTab( 'obj_badges', $this->lng->txt('badge_object_badges'), - $this->ctrl->getLinkTarget($this, 'listObjectBadges') + $this->ctrl->getLinkTarget($this, self::LIST_OBJ_BADGES_ACTION) ); } } - if ($rbacsystem->checkAccess('edit_permission', $this->object->getRefId())) { + if ($this->rbacsystem->checkAccess('edit_permission', $this->object->getRefId())) { $this->tabs_gui->addTab( 'perm_settings', $this->lng->txt('perm_settings'), @@ -182,24 +157,49 @@ public function getSafePostCommands(): array return []; } + private function getTableAction(): ?string + { + return $this->http->wrapper()->query()->retrieve( + 'tid_table_action', + $this->refinery->byTrying([ + $this->refinery->kindlyTo()->string(), + $this->refinery->always(null) + ]) + ); + } + + private function handleTableActionsCmd(): void + { + match ($this->getTableAction()) { + 'badge_type_activate' => $this->activateTypes(), + 'badge_type_deactivate' => $this->deactivateTypes(), + 'badge_image_template_editImageTemplate', 'obj_badge_user' => $this->editImageTemplate(), + 'obj_badge_activate' => $this->activateObjectBadges(), + 'obj_badge_deactivate' => $this->deactivateObjectBadges(), + 'obj_badge_show_users' => $this->listObjectBadgeUsers(), + 'badge_image_template_delete' => $this->confirmDeleteImageTemplates(), + 'obj_badge_delete' => $this->confirmDeleteObjectBadges(), + default => $this->ctrl->redirect($this, self::DEFAULT_ACTION), + }; + } + public function getUnsafeGetCommands(): array { - return ['action']; + return [self::TABLE_ACTIONS]; } - protected function assertActive(): void + private function assertActive(): void { if (!ilBadgeHandler::getInstance()->isActive()) { - $this->ctrl->redirect($this, 'editSettings'); + $this->ctrl->redirect($this, self::DEFAULT_ACTION); } } - // // settings // - protected function editSettings(?ilPropertyFormGUI $a_form = null): void + private function editSettingsCmd(?ilPropertyFormGUI $a_form = null): void { $this->tabs_gui->setTabActive('settings'); @@ -210,10 +210,8 @@ protected function editSettings(?ilPropertyFormGUI $a_form = null): void $this->tpl->setContent($a_form->getHTML()); } - protected function saveSettings(): void + private function saveSettingsCmd(): void { - $ilCtrl = $this->ctrl; - $this->checkPermission('write'); $form = $this->initFormSettings(); @@ -221,25 +219,23 @@ protected function saveSettings(): void $handler = ilBadgeHandler::getInstance(); $handler->setActive((bool) $form->getInput('act')); - $this->tpl->setOnScreenMessage('success', $this->lng->txt('settings_saved'), true); - $ilCtrl->redirect($this, 'editSettings'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); + $this->ctrl->redirect($this, self::EDIT_SETTINGS_ACTION); } $form->setValuesByPost(); - $this->editSettings($form); + $this->editSettingsCmd($form); } - protected function initFormSettings(): ilPropertyFormGUI + private function initFormSettings(): ilPropertyFormGUI { - $ilAccess = $this->access; - $form = new ilPropertyFormGUI(); - $form->setFormAction($this->ctrl->getFormAction($this)); + $form->setFormAction($this->ctrl->getFormAction($this, self::SAVE_SETTINGS_ACTION)); $form->setTitle($this->lng->txt('badge_settings')); - if ($ilAccess->checkAccess('write', '', $this->object->getRefId())) { - $form->addCommandButton('saveSettings', $this->lng->txt('save')); - $form->addCommandButton('editSettings', $this->lng->txt('cancel')); + if ($this->access->checkAccess('write', '', $this->object->getRefId())) { + $form->addCommandButton(self::SAVE_SETTINGS_ACTION, $this->lng->txt('save')); + $form->addCommandButton(self::EDIT_SETTINGS_ACTION, $this->lng->txt('cancel')); } $act = new ilCheckboxInputGUI($this->lng->txt('badge_service_activate'), 'act'); @@ -252,26 +248,21 @@ protected function initFormSettings(): ilPropertyFormGUI return $form; } - // // types // - protected function listTypes(): void + private function listTypesCmd(): void { - $ilAccess = $this->access; - $this->assertActive(); $this->tabs_gui->setTabActive('types'); - $tpl = new ilBadgeTypesTableGUI($this->access->checkAccess("write", "", $this->object->getRefId())); - $this->ctrl->setParameter($this, 'returnCmd', __FUNCTION__); - $tpl->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, 'action')); + $tpl = new ilBadgeTypesTableGUI($this->access->checkAccess('write', '', $this->object->getRefId())); + $tpl->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, self::TABLE_ACTIONS)); } - protected function activateTypes(): void + private function activateTypes(): void { - $lng = $this->lng; $this->assertActive(); $tmpl_ids = $this->badge_request->getMultiActionBadgeIdsFromUrl(); @@ -290,14 +281,14 @@ protected function activateTypes(): void $handler->setInactiveTypes($change_state); } - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); } - $this->ctrl->redirect($this, 'listTypes'); + + $this->ctrl->redirect($this, self::LIST_TYPES_ACTION); } - protected function deactivateTypes(): void + private function deactivateTypes(): void { - $lng = $this->lng; $this->assertActive(); $tmpl_ids = $this->badge_request->getMultiActionBadgeIdsFromUrl(); @@ -323,43 +314,37 @@ protected function deactivateTypes(): void $inactive = array_merge($handler->getInactiveTypes(), $tmpl_ids); $handler->setInactiveTypes($inactive); - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); } - $this->ctrl->redirect($this, 'listTypes'); - } + $this->ctrl->redirect($this, self::LIST_TYPES_ACTION); + } // // images templates // - protected function listImageTemplates(): void + private function listImageTemplatesCmd(): void { - $lng = $this->lng; - $ilToolbar = $this->toolbar; - $ilCtrl = $this->ctrl; - $this->assertActive(); $this->tabs_gui->setTabActive('imgtmpl'); if ($this->checkPermissionBool('write')) { - $ilToolbar->addButton( - $lng->txt('badge_add_template'), - $ilCtrl->getLinkTarget($this, 'addImageTemplate') + $this->toolbar->addButton( + $this->lng->txt('badge_add_template'), + $this->ctrl->getLinkTarget($this, self::ADD_IMG_TPL_ACTION) ); } - $template_table = new ilBadgeImageTemplateTableGUI($this->access->checkAccess("write", "", $this->object->getRefId())); - $this->ctrl->setParameter($this, 'returnCmd', __FUNCTION__); - $template_table->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, 'action')); + $template_table = new ilBadgeImageTemplateTableGUI( + $this->access->checkAccess('write', '', $this->object->getRefId()) + ); + $template_table->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, self::TABLE_ACTIONS)); } - - protected function addImageTemplate( + private function addImageTemplateCmd( ?ilPropertyFormGUI $a_form = null ): void { - $tpl = $this->tpl; - $this->checkPermission('write'); $this->assertActive(); @@ -369,25 +354,26 @@ protected function addImageTemplate( $a_form = $this->initImageTemplateForm('create'); } - $tpl->setContent($a_form->getHTML()); + $this->tpl->setContent($a_form->getHTML()); } - protected function initImageTemplateForm( + private function initImageTemplateForm( string $a_mode ): ilPropertyFormGUI { - $lng = $this->lng; - $ilCtrl = $this->ctrl; - $form = new ilPropertyFormGUI(); - $form->setFormAction($ilCtrl->getFormAction($this, 'saveBadge')); - $form->setTitle($lng->txt('badge_image_template_form')); + if ($a_mode === 'create') { + $form->setFormAction($this->ctrl->getFormAction($this, self::SAVE_IMG_TPL_ACTION)); + } else { + $form->setFormAction($this->ctrl->getFormAction($this, self::UPDATE_IMG_TPL_ACTION)); + } + $form->setTitle($this->lng->txt('badge_image_template_form')); - $title = new ilTextInputGUI($lng->txt('title'), 'title'); + $title = new ilTextInputGUI($this->lng->txt('title'), 'title'); $title->setMaxLength(255); $title->setRequired(true); $form->addItem($title); - $img = new ilImageFileInputGUI($lng->txt('image'), 'img'); + $img = new ilImageFileInputGUI($this->lng->txt('image'), 'img'); $img->setSuffixes(['png', 'svg']); if ($a_mode === 'create') { $img->setRequired(true); @@ -396,18 +382,18 @@ protected function initImageTemplateForm( $img->setAllowDeletion(false); $form->addItem($img); - $types_mode = new ilRadioGroupInputGUI($lng->txt('badge_template_types'), 'tmode'); + $types_mode = new ilRadioGroupInputGUI($this->lng->txt('badge_template_types'), 'tmode'); $types_mode->setRequired(true); $types_mode->setValue('all'); $form->addItem($types_mode); - $type_all = new ilRadioOption($lng->txt('badge_template_types_all'), 'all'); + $type_all = new ilRadioOption($this->lng->txt('badge_template_types_all'), 'all'); $types_mode->addOption($type_all); - $type_spec = new ilRadioOption($lng->txt('badge_template_types_specific'), 'spec'); + $type_spec = new ilRadioOption($this->lng->txt('badge_template_types_specific'), 'spec'); $types_mode->addOption($type_spec); - $types = new ilCheckboxGroupInputGUI($lng->txt('badge_types'), 'type'); + $types = new ilCheckboxGroupInputGUI($this->lng->txt('badge_types'), 'type'); $types->setRequired(true); $type_spec->addSubItem($types); @@ -416,20 +402,17 @@ protected function initImageTemplateForm( } if ($a_mode === 'create') { - $form->addCommandButton('saveImageTemplate', $lng->txt('save')); + $form->addCommandButton(self::SAVE_IMG_TPL_ACTION, $this->lng->txt('save')); } else { - $form->addCommandButton('updateImageTemplate', $lng->txt('save')); + $form->addCommandButton(self::UPDATE_IMG_TPL_ACTION, $this->lng->txt('save')); } - $form->addCommandButton('listImageTemplates', $lng->txt('cancel')); + $form->addCommandButton(self::LIST_IMG_TPL_ACTION, $this->lng->txt('cancel')); return $form; } - protected function saveImageTemplate(): void + private function saveImageTemplateCmd(): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $this->checkPermission('write'); $form = $this->initImageTemplateForm('create'); @@ -441,20 +424,17 @@ protected function saveImageTemplate(): void $tmpl->processImageUpload($tmpl); - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); - $ilCtrl->redirect($this, 'listImageTemplates'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); + $this->ctrl->redirect($this, self::LIST_IMG_TPL_ACTION); } $form->setValuesByPost(); - $this->addImageTemplate($form); + $this->addImageTemplateCmd($form); } - protected function editImageTemplate( + private function editImageTemplate( ?ilPropertyFormGUI $a_form = null ): void { - $ilCtrl = $this->ctrl; - $tpl = $this->tpl; - $this->checkPermission('write'); $this->assertActive(); @@ -462,11 +442,16 @@ protected function editImageTemplate( $tmpl_ids = $this->badge_request->getMultiActionBadgeIdsFromUrl(); if (count($tmpl_ids) !== 1) { - $this->ctrl->redirect($this, 'listImageTemplates'); + $tmpl_id = $this->badge_request->getTemplateId(); + if (!$tmpl_id) { + $this->ctrl->redirect($this, self::LIST_IMG_TPL_ACTION); + } + + $tmpl_ids = [$tmpl_id]; } $template_id = (int) array_pop($tmpl_ids); - $ilCtrl->setParameter($this, 'tid', $template_id); + $this->ctrl->setParameter($this, 'tid', $template_id); $tmpl = new ilBadgeImageTemplate($template_id); @@ -475,10 +460,10 @@ protected function editImageTemplate( $this->setImageTemplateFormValues($a_form, $tmpl); } - $tpl->setContent($a_form->getHTML()); + $this->tpl->setContent($a_form->getHTML()); } - protected function setImageTemplateFormValues( + private function setImageTemplateFormValues( ilPropertyFormGUI $a_form, ilBadgeImageTemplate $a_tmpl ): void { @@ -500,19 +485,16 @@ protected function setImageTemplateFormValues( } } - protected function updateImageTemplate(): void + private function updateImageTemplateCmd(): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $this->checkPermission('write'); $tmpl_id = $this->badge_request->getTemplateId(); if (!$tmpl_id) { - $ilCtrl->redirect($this, 'listImageTemplates'); + $this->ctrl->redirect($this, self::LIST_IMG_TPL_ACTION); } - $ilCtrl->setParameter($this, 'tid', $tmpl_id); + $this->ctrl->setParameter($this, 'tid', $tmpl_id); $tmpl = new ilBadgeImageTemplate($tmpl_id); @@ -530,8 +512,8 @@ protected function updateImageTemplate(): void $tmpl->processImageUpload($tmpl); - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); - $ilCtrl->redirect($this, 'listImageTemplates'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); + $this->ctrl->redirect($this, self::LIST_IMG_TPL_ACTION); } $this->setImageTemplateFormValues($form, $tmpl); @@ -539,17 +521,12 @@ protected function updateImageTemplate(): void $this->editImageTemplate($form); } - protected function confirmDeleteImageTemplates(): void + private function confirmDeleteImageTemplates(): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $tpl = $this->tpl; - $ilTabs = $this->tabs; - $this->checkPermission('write'); $tmpl_ids = $this->badge_request->getBadgeAssignableUsers(); - if ($tmpl_ids === ['ALL_OBJECTS']) { + if ($tmpl_ids === [self::TABLE_ALL_OBJECTS_ACTION]) { $tmpl_ids = []; foreach (ilBadgeImageTemplate::getInstances() as $template) { $tmpl_ids[] = $template->getId(); @@ -557,32 +534,31 @@ protected function confirmDeleteImageTemplates(): void } if (!$tmpl_ids) { - $ilCtrl->redirect($this, 'listImageTemplates'); + $this->ctrl->redirect($this, self::LIST_IMG_TPL_ACTION); } - $ilTabs->clearTargets(); - $ilTabs->setBackTarget( - $lng->txt('back'), - $ilCtrl->getLinkTarget($this, 'listImageTemplates') + $this->tabs->clearTargets(); + $this->tabs->setBackTarget( + $this->lng->txt('back'), + $this->ctrl->getLinkTarget($this, self::LIST_IMG_TPL_ACTION) ); $confirmation_gui = new ilConfirmationGUI(); - $confirmation_gui->setFormAction($ilCtrl->getFormAction($this)); - $confirmation_gui->setHeaderText($lng->txt('badge_template_deletion_confirmation')); - $confirmation_gui->setCancel($lng->txt('cancel'), 'listImageTemplates'); - $confirmation_gui->setConfirm($lng->txt('delete'), 'deleteImageTemplates'); + $confirmation_gui->setFormAction($this->ctrl->getFormAction($this)); + $confirmation_gui->setHeaderText($this->lng->txt('badge_template_deletion_confirmation')); + $confirmation_gui->setCancel($this->lng->txt('cancel'), self::LIST_IMG_TPL_ACTION); + $confirmation_gui->setConfirm($this->lng->txt('delete'), self::DELETE_IMG_TPL_ACTION); foreach ($tmpl_ids as $tmpl_id) { $tmpl = new ilBadgeImageTemplate($tmpl_id); $confirmation_gui->addItem('id[]', $tmpl_id, $tmpl->getTitle()); } - $tpl->setContent($confirmation_gui->getHTML()); + $this->tpl->setContent($confirmation_gui->getHTML()); } - protected function deleteImageTemplates(): void + private function deleteImageTemplatesCmd(): void { - $lng = $this->lng; $tmpl_ids = $this->badge_request->getIds(); if ($this->checkPermissionBool('write') && count($tmpl_ids) > 0) { @@ -596,30 +572,19 @@ protected function deleteImageTemplates(): void $tmpl = new ilBadgeImageTemplate((int) $tmpl_id); $tmpl->delete(); } - $this->tpl->setOnScreenMessage('success', $lng->txt('badge_deletion'), true); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('badge_deletion'), true); } else { - $this->tpl->setOnScreenMessage('failure', $lng->txt('badge_select_one'), true); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_FAILURE, $this->lng->txt('badge_select_one'), true); } - $this->ctrl->redirect($this, 'listImageTemplates'); + $this->ctrl->redirect($this, self::LIST_IMG_TPL_ACTION); } - // // object badges // - protected function applyObjectFilter(): void - { - $this->listObjectBadges(); - } - - protected function resetObjectFilter(): void - { - $this->listObjectBadges(); - } - - protected function listObjectBadgeUsers(): void + private function listObjectBadgeUsers(): void { $parent_obj_id = $this->badge_request->getParentId(); if (!$parent_obj_id && $this->badge_request->getBadgeIdFromUrl()) { @@ -628,7 +593,7 @@ protected function listObjectBadgeUsers(): void $parent_obj_id = $badge->getParentId(); } if (!$parent_obj_id) { - $this->ctrl->redirect($this, 'listObjectBadges'); + $this->ctrl->redirect($this, self::LIST_OBJ_BADGES_ACTION); } $this->assertActive(); @@ -636,59 +601,41 @@ protected function listObjectBadgeUsers(): void $this->tabs_gui->clearTargets(); $this->tabs_gui->setBackTarget( $this->lng->txt('back'), - $this->ctrl->getLinkTarget($this, 'listObjectBadges') + $this->ctrl->getLinkTarget($this, self::LIST_OBJ_BADGES_ACTION) ); $this->ctrl->saveParameter($this, 'pid'); $tbl = new ilBadgeUserTableGUI(null, null, $parent_obj_id, $this->badge_request->getBadgeId()); - $this->ctrl->setParameter($this, 'returnCmd', __FUNCTION__); - $tbl->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, 'action')); + $tbl->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, self::TABLE_ACTIONS)); } - protected function applylistObjectBadgeUsers(): void - { - $this->listObjectBadges(); - } - - protected function resetlistObjectBadgeUsers(): void - { - $this->listObjectBadges(); - } - - protected function listObjectBadges(): void + private function listObjectBadgesCmd(): void { $this->assertActive(); $this->tabs_gui->setTabActive('obj_badges'); - $tbl = new ilObjectBadgeTableGUI($this, $this->access->checkAccess("write", "", $this->object->getRefId())); - $this->ctrl->setParameter($this, 'returnCmd', __FUNCTION__); - $tbl->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, 'action')); + $tbl = new ilObjectBadgeTableGUI($this, $this->access->checkAccess('write', '', $this->object->getRefId())); + $tbl->renderTable(ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTarget($this, self::TABLE_ACTIONS)); } // // see ilBadgeManagementGUI // - protected function getObjectBadgesFromMultiAction(): array + private function getObjectBadgesFromMultiAction(): array { - $ilAccess = $this->access; - $ilCtrl = $this->ctrl; - $badge_ids = $this->badge_request->getMultiActionBadgeIdsFromUrl(); if (!$badge_ids || - !$ilAccess->checkAccess('write', '', $this->object->getRefId())) { - $ilCtrl->redirect($this, 'listObjectBadges'); + !$this->access->checkAccess('write', '', $this->object->getRefId())) { + $this->ctrl->redirect($this, self::LIST_OBJ_BADGES_ACTION); } return $badge_ids; } - protected function toggleObjectBadges(bool $a_status): void + private function toggleObjectBadges(bool $a_status): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $badge_ids = $this->getObjectBadgesFromMultiAction(); if (current($badge_ids) === self::TABLE_ALL_OBJECTS_ACTION) { $filter = ['type' => '' , 'title' => '', 'object' => '']; @@ -696,56 +643,45 @@ protected function toggleObjectBadges(bool $a_status): void foreach (ilBadge::getObjectInstances($filter) as $badge_item) { $badge_ids[] = $badge_item['id']; } - foreach ($badge_ids as $badge_id) { - $badge = new ilBadge($badge_id); - $badge->setActive($a_status); - $badge->update(); - } - } else { - foreach ($badge_ids as $badge_id) { - $badge = new ilBadge($badge_id); - $badge->setActive($a_status); - $badge->update(); - } } + foreach ($badge_ids as $badge_id) { + $badge = new ilBadge($badge_id); + $badge->setActive($a_status); + $badge->update(); + } - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); - $ilCtrl->redirect($this, 'listObjectBadges'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); + $this->ctrl->redirect($this, self::LIST_OBJ_BADGES_ACTION); } - protected function activateObjectBadges(): void + private function activateObjectBadges(): void { $this->toggleObjectBadges(true); } - protected function deactivateObjectBadges(): void + private function deactivateObjectBadges(): void { $this->toggleObjectBadges(false); } - protected function confirmDeleteObjectBadges(): void + private function confirmDeleteObjectBadges(): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $tpl = $this->tpl; - $ilTabs = $this->tabs; - $badge_ids = $this->badge_request->getMultiActionBadgeIdsFromUrl(); - $ilTabs->clearTargets(); - $ilTabs->setBackTarget( - $lng->txt('back'), - $ilCtrl->getLinkTarget($this, 'listObjectBadges') + $this->tabs->clearTargets(); + $this->tabs->setBackTarget( + $this->lng->txt('back'), + $this->ctrl->getLinkTarget($this, self::LIST_OBJ_BADGES_ACTION) ); $confirmation_gui = new ilConfirmationGUI(); - $confirmation_gui->setFormAction($ilCtrl->getFormAction($this)); - $confirmation_gui->setHeaderText($lng->txt('badge_deletion_confirmation')); - $confirmation_gui->setCancel($lng->txt('cancel'), 'listObjectBadges'); - $confirmation_gui->setConfirm($lng->txt('delete'), 'deleteObjectBadges'); + $confirmation_gui->setFormAction($this->ctrl->getFormAction($this)); + $confirmation_gui->setHeaderText($this->lng->txt('badge_deletion_confirmation')); + $confirmation_gui->setCancel($this->lng->txt('cancel'), self::LIST_OBJ_BADGES_ACTION); + $confirmation_gui->setConfirm($this->lng->txt('delete'), self::DELETE_OBJ_BADGES_ACTION); - if ($badge_ids === ['ALL_OBJECTS']) { + if ($badge_ids === [self::TABLE_ALL_OBJECTS_ACTION]) { $badge_ids = []; $filter = [ 'type' => '', @@ -764,7 +700,7 @@ protected function confirmDeleteObjectBadges(): void $parent['id'] . ') ' . $parent['title']; if ($parent['deleted']) { - $container .= ' ' . $lng->txt('deleted') . ''; + $container .= ' ' . $this->lng->txt('deleted') . ''; } $confirmation_gui->addItem( @@ -776,14 +712,11 @@ protected function confirmDeleteObjectBadges(): void ); } - $tpl->setContent($confirmation_gui->getHTML()); + $this->tpl->setContent($confirmation_gui->getHTML()); } - protected function deleteObjectBadges(): void + private function deleteObjectBadgesCmd(): void { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $badge_ids = $this->badge_request->getMultiActionBadgeIdsFromPost(); foreach ($badge_ids as $badge_id) { @@ -791,7 +724,7 @@ protected function deleteObjectBadges(): void $badge->delete(); } - $this->tpl->setOnScreenMessage('success', $lng->txt('settings_saved'), true); - $ilCtrl->redirect($this, 'listObjectBadges'); + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('settings_saved'), true); + $this->ctrl->redirect($this, self::LIST_OBJ_BADGES_ACTION); } } diff --git a/components/ILIAS/Badge/classes/class.ilObjectBadgeTableGUI.php b/components/ILIAS/Badge/classes/class.ilObjectBadgeTableGUI.php index a9e4e097e5b9..9ca370369496 100755 --- a/components/ILIAS/Badge/classes/class.ilObjectBadgeTableGUI.php +++ b/components/ILIAS/Badge/classes/class.ilObjectBadgeTableGUI.php @@ -45,6 +45,7 @@ use ILIAS\UI\Component\Table\Action\Action; use ilAccessHandler; use ILIAS\UI\Component\Table\Column\Column; +use ILIAS\Badge\Table\TableContentWrapper; class ilObjectBadgeTableGUI implements DataRetrieval { @@ -299,7 +300,8 @@ private function enrichRecord( 'active' => $badge_item['active'] ? $this->lng->txt('yes') : $this->lng->txt('no'), 'type' => $record['type'], 'container' => implode(' ', \array_slice($container_title_parts, 1, null, true)), - ] + ], + true ); return [ @@ -451,13 +453,12 @@ public function renderTable(string $url): void $table = $this->factory ->table() ->data($this, $this->lng->txt('badge_object_badges'), $this->getColumns()) - ->withId(self::class) + ->withId(str_replace('\\', '', self::class)) ->withOrder(new Order('title', Order::ASC)) + ->withRange(new Range(0, 100)) ->withActions($this->getActions($url_builder, $action_parameter_token, $row_id_token)) ->withRequest($this->request); - $out = [$table]; - $query = $this->http->wrapper()->query(); if ($query->has($action_parameter_token->getName())) { $action = $query->retrieve($action_parameter_token->getName(), $this->refinery->kindlyTo()->string()); @@ -506,6 +507,11 @@ public function renderTable(string $url): void } } - $this->tpl->setContent($this->renderer->render($out)); + $content_wrapper = new TableContentWrapper($this->renderer, $this->factory); + $this->tpl->setContent($this->renderer->render( + $content_wrapper->wrap( + $table + ) + )); } } diff --git a/components/ILIAS/Badge/src/Table/LegacyTableContentWrapper.php b/components/ILIAS/Badge/src/Table/LegacyTableContentWrapper.php new file mode 100644 index 000000000000..284b41f54eed --- /dev/null +++ b/components/ILIAS/Badge/src/Table/LegacyTableContentWrapper.php @@ -0,0 +1,57 @@ + Table > Data + * into a specific HTML container/block element (div). + * Since badge images are of different types (PNG as raster image, SVG as vector image), + * and the UI > Table > Data > Column types are agnostic of the content type, we need + * this wrapper to apply specific CSS styles to the rendered HTML images to prevent visual issues + * (like image stretching, alignment issues, etc.). + * We were not able to adress this with IRSS flavours and picture mashines (crop etc.) to ensure + * equal dimensions of the images (in contrast to ILIAS <= 9.x), since this heavily + * relies on `Imagick` (which is not always available) and also causes issues because + * of the different image types (transparancy handling etc.). + * If the UI > Table > Data supports some non-responsive/fixed width image column types, + * this class MUST NOT be used anymore. + * See: https://mantis.ilias.de/view.php?id=46327, https://mantis.ilias.de/view.php?id=46551 + * @deprecated + */ +final class TableContentWrapper +{ + public function __construct( + private readonly Renderer $r, + private readonly Factory $f, + ) { + } + + public function wrap(Data $c): \ILIAS\UI\Component\Legacy\Content + { + return $this->f->legacy()->content( + '
' . $this->r->render($c) . '
' + ); + } +} diff --git a/components/ILIAS/Badge/src/URL/StaticUrlHandler.php b/components/ILIAS/Badge/src/URL/StaticUrlHandler.php new file mode 100644 index 000000000000..f50fdea5e2ec --- /dev/null +++ b/components/ILIAS/Badge/src/URL/StaticUrlHandler.php @@ -0,0 +1,63 @@ +isUserLoggedIn()) { + return $response_factory->loginFirst(); + } + + if (!\ilBadgeHandler::getInstance()->isActive()) { + return $response_factory->cannot(); + } + + $params = implode('/', $request->getAdditionalParameters() ?? []); + $path = parse_url($params, PHP_URL_PATH); + + return match ($path) { + 'profile' => $response_factory->can($context->ctrl()->getLinkTargetByClass( + [ + \ilDashboardGUI::class, + \ilAchievementsGUI::class, + \ilBadgeProfileGUI::class + ] + )), + default => $response_factory->cannot(), + }; + } +} diff --git a/components/ILIAS/Benchmark/classes/class.ilBenchmark.php b/components/ILIAS/Benchmark/classes/class.ilBenchmark.php index 70b7c1860f41..d767def5b220 100755 --- a/components/ILIAS/Benchmark/classes/class.ilBenchmark.php +++ b/components/ILIAS/Benchmark/classes/class.ilBenchmark.php @@ -29,7 +29,7 @@ class ilBenchmark private ?ilSetting $settings = null; private ?ilObjUser $user = null; - private Container $dic; + private ?Container $dic; private string $start = ''; private ?string $temporary_sql_storage = ''; @@ -37,8 +37,6 @@ class ilBenchmark private bool $stop_db_recording = false; - private int $bench_max_records = 2000; - private ?bool $db_bechmark_enabled = null; private ?int $db_bechmark_user_id = null; @@ -48,12 +46,16 @@ class ilBenchmark public function __construct() { global $DIC; - $this->dic = $DIC; - $this->initSettins();//(int) ($this->retrieveSetting("bench_max_records") ?? 0); + $this->dic = $DIC instanceof Container ? $DIC : null; + $this->initSettings(); } - private function initSettins(): void + private function initSettings(): void { + if ($this->dic === null) { + return; + } + if (!$this->settings instanceof ilSetting) { $global_settings_available = $this->dic->isDependencyAvailable('settings'); if ($global_settings_available) { @@ -168,22 +170,6 @@ public function save(): void } } - /** - * get current number of benchmark records - */ - private function getCurrentRecordNumber(): int - { - if ($this->isDBavailable()) { - $db = $this->retrieveDB(); - if ($db !== null) { - $cnt_set = $db->query("SELECT COUNT(*) AS cnt FROM benchmark"); - $cnt_rec = $db->fetchAssoc($cnt_set); - return (int) $cnt_rec["cnt"]; - } - } - return 0; - } - // // // NEW DB BENCHMARK IMPLEMENTATION @@ -204,7 +190,7 @@ public function enableDbBenchmarkForUserName(?string $a_user): void $this->disableDbBenchmark(); return; } - $this->initSettins(); + $this->initSettings(); $this->db_bechmark_enabled = true; $this->settings->set(self::ENABLE_DB_BENCH, '1'); @@ -227,14 +213,14 @@ public function disableDbBenchmark(): void */ public function startDbBench(string $a_sql): void { - $this->initSettins(); + $this->initSettings(); if ( !$this->stop_db_recording && $this->isDbBenchEnabled() && $this->isUserAvailable() && $this->db_bechmark_user_id === $this->user->getId() ) { - $this->start = (string) microtime(); + $this->start = microtime(); $this->temporary_sql_storage = $a_sql; } } @@ -247,7 +233,7 @@ public function stopDbBench(): bool && $this->isUserAvailable() && $this->db_bechmark_user_id === $this->user->getId() ) { - $this->collected_db_benchmarks[] = ["start" => $this->start, "stop" => (string) microtime(), "sql" => $this->temporary_sql_storage]; + $this->collected_db_benchmarks[] = ["start" => $this->start, "stop" => microtime(), "sql" => $this->temporary_sql_storage]; return true; } diff --git a/components/ILIAS/Blog/Export/class.ilBlogImporter.php b/components/ILIAS/Blog/Export/class.ilBlogImporter.php index 87cd4a484b71..598da0655699 100755 --- a/components/ILIAS/Blog/Export/class.ilBlogImporter.php +++ b/components/ILIAS/Blog/Export/class.ilBlogImporter.php @@ -70,7 +70,7 @@ public function finalProcessing( $sty_map = $a_mapping->getMappingsOfEntity("components/ILIAS/Style", "sty"); foreach ($sty_map as $old_sty_id => $new_sty_id) { - if (is_array(ilBlogDataSet::$style_map[$old_sty_id])) { + if (is_array(ilBlogDataSet::$style_map[$old_sty_id] ?? false)) { foreach (ilBlogDataSet::$style_map[$old_sty_id] as $blog_id) { $this->content_style_domain ->styleForObjId($blog_id) diff --git a/components/ILIAS/Blog/Notification/NotificationManager.php b/components/ILIAS/Blog/Notification/NotificationManager.php index 351a0edbfec9..76628f3c5436 100644 --- a/components/ILIAS/Blog/Notification/NotificationManager.php +++ b/components/ILIAS/Blog/Notification/NotificationManager.php @@ -140,7 +140,7 @@ protected function sendSystemNotification( $notified = $ntf->sendMailAndReturnRecipients( $users, - "_" . $posting->getId(), + (string) $posting->getId(), ($admin_only ? "write" : "read") ); diff --git a/components/ILIAS/Blog/Posting/class.PostingManager.php b/components/ILIAS/Blog/Posting/class.PostingManager.php index ada9ec9faddf..dddf6675ef8e 100644 --- a/components/ILIAS/Blog/Posting/class.PostingManager.php +++ b/components/ILIAS/Blog/Posting/class.PostingManager.php @@ -44,9 +44,9 @@ public function update(Posting $posting): void $this->repo->posting()->update($posting); } - public function delete(Posting $posting): void + public function delete(int $posting_id): void { - $this->repo->posting()->delete($posting->getId()); + $this->repo->posting()->delete($posting_id); } public function getById(int $id): ?Posting diff --git a/components/ILIAS/Blog/Posting/class.ilBlogPostingGUI.php b/components/ILIAS/Blog/Posting/class.ilBlogPostingGUI.php index 0b46a7eb0160..57075b41b008 100755 --- a/components/ILIAS/Blog/Posting/class.ilBlogPostingGUI.php +++ b/components/ILIAS/Blog/Posting/class.ilBlogPostingGUI.php @@ -788,6 +788,14 @@ protected function getFirstMediaObjectAsTag( $mob_obj = new ilObjMediaObject((int) $mob_id); $mob_item = $mob_obj->getMediaItem("Standard"); if (stripos($mob_item->getFormat(), "image") !== false) { + if ($mob_item->getFormat() === "image/svg+xml") { + $location = $mob_obj->getStandardSrc(); + return ''; + } $mob_size = $mob_item->getOriginalSize(); if (is_null($mob_size)) { continue; diff --git a/components/ILIAS/Blog/classes/class.ilObjBlog.php b/components/ILIAS/Blog/classes/class.ilObjBlog.php index b7765b17b55d..0613bd4c91f5 100755 --- a/components/ILIAS/Blog/classes/class.ilObjBlog.php +++ b/components/ILIAS/Blog/classes/class.ilObjBlog.php @@ -80,7 +80,7 @@ protected function doCreate(bool $clone_mode = false): void $ilDB->manipulate("INSERT INTO il_blog (id,ppic,rss_active,approval" . ",abs_shorten,abs_shorten_len,abs_image,abs_img_width,abs_img_height" . - ",keywords,authors,nav_mode,nav_list_mon_with_post,ov_post) VALUES (" . + ",keywords,authors,nav_mode,nav_list_mon_with_post,ov_post,nav_list_mon) VALUES (" . $ilDB->quote($this->id, "integer") . "," . $ilDB->quote(true, "integer") . "," . $ilDB->quote(true, "integer") . "," . @@ -94,6 +94,7 @@ protected function doCreate(bool $clone_mode = false): void $ilDB->quote(false, "integer") . "," . $ilDB->quote(self::NAV_MODE_LIST, "integer") . "," . $ilDB->quote(5, "integer") . "," . + $ilDB->quote(5, "integer") . "," . $ilDB->quote(5, "integer") . ")"); diff --git a/components/ILIAS/Blog/classes/class.ilObjBlogGUI.php b/components/ILIAS/Blog/classes/class.ilObjBlogGUI.php index 26d8420f9904..2dfc4ad428ab 100755 --- a/components/ILIAS/Blog/classes/class.ilObjBlogGUI.php +++ b/components/ILIAS/Blog/classes/class.ilObjBlogGUI.php @@ -1727,7 +1727,7 @@ public function renderNavigation( // by date if (count($a_items)) { - $blocks[$order["navigation"]] = array( + $blocks[$order["navigation"] ?? 0] = array( $this->lng->txt("blog_navigation"), $this->renderNavigationByDate($a_items, $a_list_cmd, $a_posting_cmd, $a_link_template, $a_show_inactive, $a_blpg) ); @@ -1746,7 +1746,7 @@ public function renderNavigation( $keywords = $this->lng->txt("blog_no_keywords"); } $cmd = null; - $blocks[$order["keywords"]] = array( + $blocks[$order["keywords"] ?? 2] = array( $this->lng->txt("blog_keywords"), $keywords, $cmd @@ -1763,7 +1763,7 @@ public function renderNavigation( $this->blog_settings->getAuthors()) { $authors = $this->renderNavigationByAuthors($a_items, $a_list_cmd, $a_show_inactive); if ($authors) { - $blocks[$order["authors"]] = array($this->lng->txt("blog_authors"), $authors); + $blocks[$order["authors"] ?? 1] = array($this->lng->txt("blog_authors"), $authors); } } diff --git a/components/ILIAS/BookingManager/Access/AccessManager.php b/components/ILIAS/BookingManager/Access/AccessManager.php index fb068a76e151..627c649503b1 100644 --- a/components/ILIAS/BookingManager/Access/AccessManager.php +++ b/components/ILIAS/BookingManager/Access/AccessManager.php @@ -76,7 +76,7 @@ public function filterManageableParticipants( array $participant_ids ): array { return $this->access->filterUserIdsByRbacOrPositionOfCurrentUser( - 'render', + 'write', 'render', $ref_id, $participant_ids diff --git a/components/ILIAS/BookingManager/BookingProcess/class.ProcessUtilGUI.php b/components/ILIAS/BookingManager/BookingProcess/class.ProcessUtilGUI.php index 435b6a6688bb..584281ab09f1 100755 --- a/components/ILIAS/BookingManager/BookingProcess/class.ProcessUtilGUI.php +++ b/components/ILIAS/BookingManager/BookingProcess/class.ProcessUtilGUI.php @@ -20,6 +20,7 @@ namespace ILIAS\BookingManager\BookingProcess; +use ilBookingProcessWithScheduleGUI; use ILIAS\BookingManager\InternalDomainService; use ILIAS\BookingManager\InternalGUIService; use ILIAS\BookingManager\Objects\ObjectsManager; @@ -60,6 +61,17 @@ public function back(): void $this->log->debug("back"); $retCmd = $this->request->getReturnCmd(); $this->log->debug("returnCmd is " . $retCmd); + + $class = get_class($this->parent_gui); + if ($retCmd === 'week' && $class === ilBookingProcessWithScheduleGUI::class) { + if ($this->request->getOriginCmd() === 'book') { + $this->domain->objectSelection($this->pool->getId())->setSelectedObjects([$this->request->getObjectId()]); + } + $this->ctrl->setParameterByClass($class, 'seed', $this->request->getSeed()); + $this->ctrl->redirectByClass($class, $retCmd); + return; + } + if ($retCmd !== "") { $this->ctrl->redirectByClass(get_class($this->parent_gui), $retCmd); } else { diff --git a/components/ILIAS/BookingManager/BookingProcess/class.WeekGUI.php b/components/ILIAS/BookingManager/BookingProcess/class.WeekGUI.php index 855123ccc160..99d1b8e86aa2 100755 --- a/components/ILIAS/BookingManager/BookingProcess/class.WeekGUI.php +++ b/components/ILIAS/BookingManager/BookingProcess/class.WeekGUI.php @@ -205,7 +205,9 @@ protected function getWeekGridEntries( $this->ctrl->setParameterByClass(self::PROCESS_CLASS, "slot", $slot_from . "_" . $slot_to); $this->ctrl->setParameterByClass(self::PROCESS_CLASS, "object_id", $obj->getId()); $this->ctrl->setParameterByClass(self::PROCESS_CLASS, "seed", $this->seed_str); + $this->ctrl->setParameterByClass(self::PROCESS_CLASS, "origin_cmd", $this->ctrl->getCmd()); $link = $this->ctrl->getLinkTargetByClass(self::PROCESS_CLASS, "showNumberForm", "", true); + $this->ctrl->setParameterByClass(self::PROCESS_CLASS, "origin_cmd", null); $this->ctrl->setParameterByClass(self::PROCESS_CLASS, "slot", null); $this->ctrl->setParameterByClass(self::PROCESS_CLASS, "object_id", null); $slot_gui = new SlotGUI( diff --git a/components/ILIAS/BookingManager/BookingProcess/class.ilBookingProcessWithScheduleGUI.php b/components/ILIAS/BookingManager/BookingProcess/class.ilBookingProcessWithScheduleGUI.php index c31c4e294a8d..16021d7f8446 100755 --- a/components/ILIAS/BookingManager/BookingProcess/class.ilBookingProcessWithScheduleGUI.php +++ b/components/ILIAS/BookingManager/BookingProcess/class.ilBookingProcessWithScheduleGUI.php @@ -48,6 +48,7 @@ class ilBookingProcessWithScheduleGUI implements \ILIAS\BookingManager\BookingPr protected ilObjUser $user; protected int $book_obj_id; protected array $rsv_ids = []; + protected ?string $origin_cmd = null; public function __construct( ilObjBookingPool $pool, @@ -219,7 +220,7 @@ public function book(): void // ok $this->lng->loadLanguageModule("dateplaner"); $this->ctrl->setParameter($this, 'object_id', $obj->getId()); - //$this->ctrl->setParameter($this, 'returnCmd', "book"); + $this->ctrl->setParameter($this, 'returnCmd', 'week'); if ($this->user_id_to_book !== $this->user_id_assigner) { $this->ctrl->setParameter($this, 'bkusr', $this->user_id_to_book); @@ -295,7 +296,8 @@ protected function getNumberForm( ->number("nr", $period, "", 1, 1, $counter) ->radio("recurrence", $this->lng->txt("book_recurrence"), "", "0") ->radioOption("0", $this->lng->txt("book_no_recurrence")) - ->radioOption("1", $this->lng->txt("book_book_recurrence")); + ->radioOption("1", $this->lng->txt("book_book_recurrence")) + ->hidden("origin_cmd", $this->book_request->getOriginCmd()); if ($this->pool->usesMessages()) { $form = $form->textarea( "message", @@ -331,6 +333,11 @@ public function processNumberForm(): void ->send(); } + $origin_cmd = $form->getData("origin_cmd"); + if (is_string($origin_cmd) && $origin_cmd !== "") { + $this->origin_cmd = $origin_cmd; + } + $message = $this->pool->usesMessages() ? $form->getData("message") : ""; @@ -526,6 +533,9 @@ protected function getBookAvailableTarget( $this->ctrl->setParameter($this, "recurrence", $recurrence); $this->ctrl->setParameter($this, "nr", $nr); $this->ctrl->setParameter($this, "until", $until); + if (is_string($this->origin_cmd) && $this->origin_cmd !== "") { + $this->ctrl->setParameter($this, "origin_cmd", $this->origin_cmd); + } return $this->ctrl->getLinkTarget($this, "bookAvailableItems"); } diff --git a/components/ILIAS/BookingManager/BookingProcess/class.ilBookingProcessWithoutScheduleGUI.php b/components/ILIAS/BookingManager/BookingProcess/class.ilBookingProcessWithoutScheduleGUI.php index 53171b99ab25..384cb89f4dbc 100755 --- a/components/ILIAS/BookingManager/BookingProcess/class.ilBookingProcessWithoutScheduleGUI.php +++ b/components/ILIAS/BookingManager/BookingProcess/class.ilBookingProcessWithoutScheduleGUI.php @@ -154,7 +154,7 @@ public function book(): void // ok $this->lng->loadLanguageModule("dateplaner"); $this->ctrl->setParameter($this, 'object_id', $obj->getId()); - $this->ctrl->setParameter($this, 'returnCmd', "back"); + $this->ctrl->setParameter($this, 'returnCmd', 'week'); if ($this->user_id_to_book !== $this->user_id_assigner) { $this->ctrl->setParameter($this, 'bkusr', $this->user_id_to_book); diff --git a/components/ILIAS/BookingManager/Participants/class.ilBookingParticipantGUI.php b/components/ILIAS/BookingManager/Participants/class.ilBookingParticipantGUI.php index bee9c100493c..8a19294fa671 100755 --- a/components/ILIAS/BookingManager/Participants/class.ilBookingParticipantGUI.php +++ b/components/ILIAS/BookingManager/Participants/class.ilBookingParticipantGUI.php @@ -58,6 +58,7 @@ public function __construct( $this->pool_id = $a_parent_obj->getObject()->getId(); $this->lng->loadLanguageModule("book"); + $this->lng->loadLanguageModule("exc"); } public function executeCommand(): void @@ -76,7 +77,7 @@ public function executeCommand(): void $a_user_id ); }); - $rep_search->setTitle($this->lng->txt("exc_add_participant")); + $rep_search->setTitle($this->lng->txt("book_add_participant")); $rep_search->setCallback($this, 'addParticipantObject'); $this->ctrl->setReturn($this, 'render'); $this->ctrl->forwardCommand($rep_search); diff --git a/components/ILIAS/BookingManager/Reservations/class.ilBookingReservationsGUI.php b/components/ILIAS/BookingManager/Reservations/class.ilBookingReservationsGUI.php index e503e571f40a..e994a4656545 100755 --- a/components/ILIAS/BookingManager/Reservations/class.ilBookingReservationsGUI.php +++ b/components/ILIAS/BookingManager/Reservations/class.ilBookingReservationsGUI.php @@ -133,31 +133,25 @@ protected function setHelpId(string $a_id): void */ public function log(): void { - $tpl = $this->tpl; $this->showRerunPreferenceAssignment(); - $table = $this->getReservationsTable(); - $tpl->setContent($table->getHTML()); + $this->tpl->setContent($this->getReservationsTable()->getHTML()); } /** * Get reservationsTable */ - protected function getReservationsTable( - ?string $reservation_id = null - ): ilBookingReservationsTableGUI { - $show_all = ($this->access->canManageAllReservations($this->ref_id) || $this->pool->hasPublicLog()); + protected function getReservationsTable(?string $reservation_id = null): ilBookingReservationsTableGUI + { + $show_all = $this->access->canManageAllReservations($this->ref_id) || $this->pool->hasPublicLog(); - $filter = null; + $filter = []; if ($this->book_obj_id > 0) { - $filter["object"] = $this->book_obj_id; + $filter['object'] = $this->book_obj_id; } // coming from participants tab to cancel reservations. if ($this->book_request->getUserId() > 0) { - $filter["user_id"] = $this->book_request->getUserId(); + $filter['user_id'] = $this->book_request->getUserId(); } - $context_filter = ($this->context_obj_id > 0) - ? [$this->context_obj_id] - : null; return new ilBookingReservationsTableGUI( $this, @@ -167,7 +161,7 @@ protected function getReservationsTable( $show_all, $filter, $reservation_id, - $context_filter + $this->context_obj_id > 0 ? [$this->context_obj_id] : null ); } diff --git a/components/ILIAS/BookingManager/Reservations/class.ilBookingReservationsTableGUI.php b/components/ILIAS/BookingManager/Reservations/class.ilBookingReservationsTableGUI.php index 5f39d17b5065..728c3b363f18 100755 --- a/components/ILIAS/BookingManager/Reservations/class.ilBookingReservationsTableGUI.php +++ b/components/ILIAS/BookingManager/Reservations/class.ilBookingReservationsTableGUI.php @@ -169,10 +169,8 @@ public function __construct( // user columns foreach ($this->getSelectedColumns() as $col) { - if (array_key_exists($col, $cols)) { - if (isset($user_cols[$col])) { - $this->addColumn($cols[$col]["txt"], $col); - } + if (isset($cols[$col]["txt"], $user_cols[$col])) { + $this->addColumn($cols[$col]["txt"], $col); } } @@ -200,38 +198,25 @@ public function __construct( protected function showMessages(): bool { - return $this->pool->usesMessages() && - $this->access->canManageAllReservations($this->ref_id); + return $this->pool->usesMessages() && $this->access->canManageAllReservations($this->ref_id); } public function getSelectableColumns(): array { - $cols = array(); + $cols = []; if ($this->has_schedule) { - $this->lng->loadLanguageModule("dateplaner"); + $this->lng->loadLanguageModule('dateplaner'); - $cols["week"] = array( - "txt" => $this->lng->txt("wk_short"), - "default" => true - ); - - $cols["weekday"] = array( - "txt" => $this->lng->txt("cal_weekday"), - "default" => true - ); + $cols['week'] = ['txt' => $this->lng->txt('wk_short'), 'default' => true]; + $cols['weekday'] = ['txt' => $this->lng->txt('cal_weekday'), 'default' => true]; } foreach ($this->advmd as $field) { - $cols["advmd" . $field["id"]] = array( - "txt" => $field["title"], - "default" => false - ); + $cols["advmd{$field['id']}"] = ['txt' => $field['title'], 'default' => false]; } - $cols = array_merge($cols, $this->getSelectableUserColumns()); - - return $cols; + return array_merge($cols, $this->getSelectableUserColumns()); } /** @@ -517,11 +502,12 @@ public function getItems(array $filter): void $user_columns = []; $odf_ids = []; foreach ($this->getSelectedUserColumns() as $field) { - if (strpos($field, 'odf') === 0) { - $odf_ids[] = substr($field, 4); - } else { - $user_columns[] = $field; + if (str_starts_with($field, 'odf')) { + $odf_ids[] = (int) substr($field, 4); + continue; } + + $user_columns[] = $field; } // see ilCourseParticipantsTableGUI @@ -549,34 +535,33 @@ public function getItems(array $filter): void } // object specific user data fields of parent course or group - if ($odf_ids) { + if ($odf_ids !== []) { $parent = $this->access->getParentGroupCourse($this->ref_id); $parent_obj_id = ilObject::_lookupObjectId($parent['ref_id']); $parent_obj_type = ilObject::_lookupType($parent_obj_id); - $confirmation_required = ($parent_obj_type === 'crs') - ? ilPrivacySettings::getInstance()->courseConfirmationRequired() - : ilPrivacySettings::getInstance()->groupConfirmationRequired(); + $privacy_settings = ilPrivacySettings::getInstance(); + $confirmation_required = $parent_obj_type === 'crs' + ? $privacy_settings->courseConfirmationRequired() + : $privacy_settings->groupConfirmationRequired(); if ($confirmation_required) { $user_ids = array_diff($user_ids, ilMemberAgreement::lookupAcceptedAgreements($parent_obj_id)); } $odf_data = ilCourseUserData::_getValuesByObjId($parent_obj_id); $usr_data = []; foreach ($odf_data as $usr_id => $fields) { - // this currently does not with strict mode, since - // $user_ids holds strings - if (in_array($usr_id, $user_ids)) { + if (in_array($usr_id, $user_ids, true)) { foreach ($fields as $field_id => $value) { if (in_array($field_id, $odf_ids, true)) { - $usr_data[$usr_id]['odf_' . $field_id] = $value; + $usr_data[$usr_id]["odf_{$field_id}"] = $value; } } } } foreach ($data as $key => $v) { - if (isset($usr_data[$v["user_id"]])) { - $data[$key] = array_merge($v, $usr_data[$v["user_id"]]); + if (isset($usr_data[$v['user_id']])) { + $data[$key] = array_merge($v, $usr_data[$v['user_id']]); } } } @@ -787,10 +772,8 @@ protected function getAdditionalExportCols(): array // user columns foreach ($this->getSelectedColumns() as $col) { - if (array_key_exists($col, $cols)) { - if (isset($user_cols[$col])) { - $add_cols[$col] = $cols[$col]["txt"]; - } + if (isset($cols[$col]["txt"], $user_cols[$col])) { + $add_cols[$col] = $cols[$col]["txt"]; } } @@ -862,7 +845,7 @@ protected function fillRowExcel( } $a_excel->setCell($a_row, ++$col, $val); } else { - $a_excel->setCell($a_row, ++$col, $a_set[$colid]); + $a_excel->setCell($a_row, ++$col, $a_set[$colid] ?? ""); } } } @@ -928,7 +911,7 @@ protected function fillRowCSV( } $a_csv->addColumn($val); } else { - $a_csv->addColumn($a_set[$colid]); + $a_csv->addColumn($a_set[$colid] ?? ""); } } diff --git a/components/ILIAS/BookingManager/Settings/class.SettingsGUI.php b/components/ILIAS/BookingManager/Settings/class.SettingsGUI.php index de6d4a877768..51c336d2b56a 100644 --- a/components/ILIAS/BookingManager/Settings/class.SettingsGUI.php +++ b/components/ILIAS/BookingManager/Settings/class.SettingsGUI.php @@ -127,9 +127,8 @@ protected function getEditForm(): FormAdapterGUI ) ->number( "limit", - $lng->txt("book_bookings_per_user") . " - " . $lng->txt("book_overall_limit"), - "", + $lng->txt("book_total_individual_bookings_limit"), $settings->getOverallLimit() ); diff --git a/components/ILIAS/BookingManager/classes/class.StandardGUIRequest.php b/components/ILIAS/BookingManager/classes/class.StandardGUIRequest.php index 903d361eaba2..b3d8f879e931 100755 --- a/components/ILIAS/BookingManager/classes/class.StandardGUIRequest.php +++ b/components/ILIAS/BookingManager/classes/class.StandardGUIRequest.php @@ -225,4 +225,8 @@ public function getBulkCreationData(): string return $this->str("data"); } + public function getOriginCmd(): string + { + return $this->str("origin_cmd"); + } } diff --git a/components/ILIAS/BookingManager/classes/class.ilObjBookingPoolGUI.php b/components/ILIAS/BookingManager/classes/class.ilObjBookingPoolGUI.php index 3414448fc237..3f7db02a6b79 100755 --- a/components/ILIAS/BookingManager/classes/class.ilObjBookingPoolGUI.php +++ b/components/ILIAS/BookingManager/classes/class.ilObjBookingPoolGUI.php @@ -352,7 +352,7 @@ protected function initEditCustomForm(ilPropertyFormGUI $form): void $limit = new ilNumberInputGUI($this->lng->txt("book_overall_limit"), "limit"); $limit->setSize(4); $limit->setMinValue(1); - $limit->setSuffix($this->lng->txt("book_bookings_per_user")); + $limit->setInfo($this->lng->txt("book_total_individual_bookings_limit")); $none->addSubItem($limit); // no schedule, using preferences diff --git a/components/ILIAS/COPage/Editor/UI/Init.php b/components/ILIAS/COPage/Editor/UI/Init.php index b5e4706291ed..5d7eeb26ddb9 100755 --- a/components/ILIAS/COPage/Editor/UI/Init.php +++ b/components/ILIAS/COPage/Editor/UI/Init.php @@ -61,7 +61,6 @@ public function initUI( $main_tpl->addJavaScript("node_modules/tinymce/tinymce.min.js"); } - \ilYuiUtil::initConnection(); $main_tpl->addJavaScript("assets/js/ilExplorer.js"); // ensure that form.js is loaded which is needed for file input (js that shows file names) diff --git a/components/ILIAS/COPage/Editor/js/src/client/client.js b/components/ILIAS/COPage/Editor/js/src/client/client.js index 01f50cc931b7..4ccf7af7ef8c 100755 --- a/components/ILIAS/COPage/Editor/js/src/client/client.js +++ b/components/ILIAS/COPage/Editor/js/src/client/client.js @@ -151,7 +151,11 @@ export default class Client { formData.append('action_id', command_action.getId()); formData.append('component', command_action.getComponent()); formData.append('action', command_action.getType()); - + this.log(this.command_endpoint); + for (const [key, value] of formData.entries()) { + this.log(key); + this.log(value); + } FetchWrapper.postForm(this.command_endpoint, formData).then((response) => { this.log('client.sendCommand, response:'); this.log(response); diff --git a/components/ILIAS/COPage/Editor/js/src/client/response/response-factory.js b/components/ILIAS/COPage/Editor/js/src/client/response/response-factory.js index 09d12324fb01..71f2f8b62fc4 100755 --- a/components/ILIAS/COPage/Editor/js/src/client/response/response-factory.js +++ b/components/ILIAS/COPage/Editor/js/src/client/response/response-factory.js @@ -12,7 +12,7 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning * - *********************************************************************/ + ******************************************************************** */ import Response from './response.js'; @@ -20,7 +20,6 @@ import Response from './response.js'; * Response factory */ export default class ResponseFactory { - /** */ constructor() { @@ -32,8 +31,8 @@ export default class ResponseFactory { * @returns {Response} */ response(action, payload) { - console.log("...got payload"); - console.log(payload); + // console.log("...got payload"); + // console.log(payload); return new Response(action, payload); } -} \ No newline at end of file +} diff --git a/components/ILIAS/COPage/Editor/js/src/components/media/ui/media-ui.js b/components/ILIAS/COPage/Editor/js/src/components/media/ui/media-ui.js index 445f62794adf..2f15b74cd232 100755 --- a/components/ILIAS/COPage/Editor/js/src/components/media/ui/media-ui.js +++ b/components/ILIAS/COPage/Editor/js/src/components/media/ui/media-ui.js @@ -1,5 +1,5 @@ -import ACTIONS from "../actions/media-action-types.js"; -import PAGE_ACTIONS from "../../page/actions/page-action-types.js"; +import ACTIONS from '../actions/media-action-types.js'; +import PAGE_ACTIONS from '../../page/actions/page-action-types.js'; /** * This file is part of ILIAS, a powerful learning management system @@ -15,56 +15,53 @@ import PAGE_ACTIONS from "../../page/actions/page-action-types.js"; * https://www.ilias.de * https://github.com/ILIAS-eLearning * - *********************************************************************/ + ******************************************************************** */ /** * media ui */ export default class MediaUI { - - /** * @type {boolean} */ - //debug = true; + // debug = true; /** * Model * @type {PageModel} */ - //page_model = {}; + // page_model = {}; /** * UI model * @type {Object} */ - //uiModel = {}; + // uiModel = {}; /** * @type {Client} */ - //client; + // client; /** * @type {Dispatcher} */ - //dispatcher; + // dispatcher; /** * @type {ActionFactory} */ - //actionFactory; + // actionFactory; /** * @type {ToolSlate} */ - //toolSlate; + // toolSlate; /** * @type {pageModifier} */ -// pageModifier; - + // pageModifier; /** * @param {Client} client @@ -75,7 +72,7 @@ export default class MediaUI { * @param {PageModifier} pageModifier */ constructor(client, dispatcher, actionFactory, page_model, toolSlate, pageModifier) { - this.debug = true; + this.debug = false; this.client = client; this.dispatcher = dispatcher; this.actionFactory = actionFactory; @@ -98,17 +95,16 @@ export default class MediaUI { } } - /** */ init(uiModel) { - this.log("media-ui.init"); + this.log('media-ui.init'); const action = this.actionFactory; const dispatch = this.dispatcher; this.uiModel = uiModel; - let t = this; + const t = this; } /** @@ -125,29 +121,26 @@ export default class MediaUI { let url; switch (actionType) { - case ACTIONS.SELECT_POOL: url = el.dataset.copgEdParUrl; - el.addEventListener("click", (event) => { + el.addEventListener('click', (event) => { dispatch.dispatch(action.media().editor().selectPool(url, this.page_model.getCurrentInsertPCId())); }); case ACTIONS.OPEN_CLIPBOARD: url = el.dataset.copgEdParUrl; - el.addEventListener("click", (event) => { + el.addEventListener('click', (event) => { dispatch.dispatch(action.media().editor().openClipboard(url, this.page_model.getCurrentInsertPCId())); }); - } }); } handlePoolSelection(url, pcid) { - this.pageModifier.redirect(url + "&pcid=" + pcid); + this.pageModifier.redirect(`${url}&pcid=${pcid}`); } handleOpenClipboard(url, pcid) { - this.pageModifier.redirect(url + "&pcid=" + pcid); + this.pageModifier.redirect(`${url}&pcid=${pcid}`); } - } diff --git a/components/ILIAS/COPage/Editor/js/src/components/page/model/page-model.js b/components/ILIAS/COPage/Editor/js/src/components/page/model/page-model.js index e5f0d5490746..c5c20529e7ac 100755 --- a/components/ILIAS/COPage/Editor/js/src/components/page/model/page-model.js +++ b/components/ILIAS/COPage/Editor/js/src/components/page/model/page-model.js @@ -12,13 +12,12 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning * - *********************************************************************/ + ******************************************************************** */ /** * Controller (handles editor initialisation process) */ export default class PageModel { - /* debug = true; @@ -41,25 +40,25 @@ export default class PageModel { /** * @type {*[]} */ - //states = []; + // states = []; /** * @type {*[]} */ - //component_states = []; + // component_states = []; /** * @type {*[]} */ - //multi_states = []; + // multi_states = []; - //dom; + // dom; /** * Paragraph auto splitting * @type {*[]} */ - //splitIds = []; + // splitIds = []; /** * @type {Object} @@ -83,23 +82,23 @@ export default class PageModel { */ constructor() { - this.debug = true; + this.debug = false; - this.STATE_PAGE = "page"; // page editing - this.STATE_DRAG_DROP = "drag_drop"; // drag drop - this.STATE_COMPONENT = "component"; // component editing (in slate) - this.STATE_MULTI_ACTION = "multi"; // multi action - this.STATE_SERVER_CMD = "server_cmd"; // server command being performed + this.STATE_PAGE = 'page'; // page editing + this.STATE_DRAG_DROP = 'drag_drop'; // drag drop + this.STATE_COMPONENT = 'component'; // component editing (in slate) + this.STATE_MULTI_ACTION = 'multi'; // multi action + this.STATE_SERVER_CMD = 'server_cmd'; // server command being performed - this.STATE_COMPONENT_EDIT = "edit"; // component editing - this.STATE_COMPONENT_INSERT = "insert"; // component inserting - this.STATE_COMPONENT_SERVER_CMD = "comp_server_cmd"; // component server command being performed - this.STATE_COMPONENT_NONE = ""; + this.STATE_COMPONENT_EDIT = 'edit'; // component editing + this.STATE_COMPONENT_INSERT = 'insert'; // component inserting + this.STATE_COMPONENT_SERVER_CMD = 'comp_server_cmd'; // component server command being performed + this.STATE_COMPONENT_NONE = ''; - this.STATE_MULTI_COPY = "copy"; // multi copy - this.STATE_MULTI_CUT = "cut"; // multi cut - this.STATE_MULTI_CHARACTERISTIC = "characteristic"; // multi cut - this.STATE_MULTI_NONE = ""; + this.STATE_MULTI_COPY = 'copy'; // multi copy + this.STATE_MULTI_CUT = 'cut'; // multi cut + this.STATE_MULTI_CHARACTERISTIC = 'characteristic'; // multi cut + this.STATE_MULTI_NONE = ''; this.model = { state: this.STATE_PAGE, @@ -113,12 +112,12 @@ export default class PageModel { currentInsertPCID: null, page_components: [], page_components_undo: [], - sectionFormat: "", - paragraphFormat: "", - mediaFormat: "", + sectionFormat: '', + paragraphFormat: '', + mediaFormat: '', addedSection: false, pasting: false, - autoSavedPCID: null + autoSavedPCID: null, }; this.splitIds = []; @@ -128,13 +127,13 @@ export default class PageModel { this.STATE_DRAG_DROP, this.STATE_COMPONENT, this.STATE_MULTI_ACTION, - this.STATE_SERVER_CMD + this.STATE_SERVER_CMD, ]; this.component_states = [ this.STATE_COMPONENT_NONE, this.STATE_COMPONENT_EDIT, this.STATE_COMPONENT_INSERT, - this.STATE_COMPONENT_SERVER_CMD + this.STATE_COMPONENT_SERVER_CMD, ]; this.multi_states = [this.STATE_MULTI_NONE, this.STATE_MULTI_CUT, this.STATE_MULTI_COPY, this.STATE_MULTI_CHARACTERISTIC]; } @@ -150,7 +149,7 @@ export default class PageModel { */ setState(state) { if (this.states.includes(state)) { - this.log("page-model.setState " + state); + this.log(`page-model.setState ${state}`); this.model.state = state; } } @@ -167,7 +166,7 @@ export default class PageModel { */ setComponentState(state) { if (this.component_states.includes(state)) { - this.log("page-model.setComponentState " + state); + this.log(`page-model.setComponentState ${state}`); this.model.component_state = state; } } @@ -183,9 +182,9 @@ export default class PageModel { * @param {string} state */ setMultiState(state) { - this.log("TRY page-model.setMultiState " + state); + this.log(`TRY page-model.setMultiState ${state}`); if (this.multi_states.includes(state)) { - this.log("page-model.setMultiState " + state); + this.log(`page-model.setMultiState ${state}`); this.model.multi_state = state; } } @@ -203,7 +202,7 @@ export default class PageModel { * @param {string} hierid */ toggleSelect(pcid, hierid) { - const key = hierid + ":" + pcid; + const key = `${hierid}:${pcid}`; if (this.model.selectedItems.has(key)) { this.model.selectedItems.delete(key); } else { @@ -215,7 +214,6 @@ export default class PageModel { this.model.selectedItems.clear(); } - isProtectedElement(curElement) { do { if (curElement && curElement.dataset.cname == 'Section') { @@ -231,13 +229,12 @@ export default class PageModel { selectAll() { let key; - this.dom.querySelectorAll("[data-copg-ed-type='pc-area']").forEach(pc_area => { - + this.dom.querySelectorAll("[data-copg-ed-type='pc-area']").forEach((pc_area) => { if (this.isProtectedElement(pc_area)) { return; } - key = pc_area.dataset.hierid + ":" + pc_area.dataset.pcid; + key = `${pc_area.dataset.hierid}:${pc_area.dataset.pcid}`; this.model.selectedItems.add(key); }); } @@ -247,7 +244,7 @@ export default class PageModel { * @return {boolean} */ hasSelected() { - return (this.model.selectedItems.size > 0); + return (this.model.selectedItems.size > 0); } /** @@ -307,7 +304,7 @@ export default class PageModel { * @param {string} pcid * @param {string} hierid */ - setCurrentPageComponent(cname, pcid, hierid = "") { + setCurrentPageComponent(cname, pcid, hierid = '') { this.model.currentPCName = cname; this.model.currentPCID = pcid; this.model.currentHierId = hierid; @@ -419,7 +416,7 @@ export default class PageModel { * @return {null|Object} */ getUndoPCModel(pcid) { - this.log("getUndoPCModel"); + this.log('getUndoPCModel'); if (pcid in this.model.page_components_undo) { this.log(pcid); this.log(this.model.page_components_undo[pcid]); @@ -445,11 +442,10 @@ export default class PageModel { } } - getNewPCId() { - let vals = new Uint32Array(2); + const vals = new Uint32Array(2); window.crypto.getRandomValues(vals); - return vals[0] + "" + vals[1]; + return `${vals[0]}${vals[1]}`; } setSectionFormat(format) { @@ -490,10 +486,10 @@ export default class PageModel { */ setAddedSection(as) { this.model.addedSection = as; - console.log("setAddedSection " + as); + console.log(`setAddedSection ${as}`); } getAddedSection() { return this.model.addedSection; } -} \ No newline at end of file +} diff --git a/components/ILIAS/COPage/Editor/js/src/components/page/ui/page-ui-action-handler.js b/components/ILIAS/COPage/Editor/js/src/components/page/ui/page-ui-action-handler.js index 1da2c4f5e878..d35caed86720 100755 --- a/components/ILIAS/COPage/Editor/js/src/components/page/ui/page-ui-action-handler.js +++ b/components/ILIAS/COPage/Editor/js/src/components/page/ui/page-ui-action-handler.js @@ -48,7 +48,7 @@ export default class PageUIActionHandler { * @param {Client} client */ constructor(actionFactory, client) { - this.debug = true; + this.debug = false; this.actionFactory = actionFactory; this.client = client; this.dispatcher = null; @@ -90,7 +90,7 @@ export default class PageUIActionHandler { switch (action.getType()) { case 'component.insert': // legacy - console.log(model.getCurrentPCName()); + this.log(model.getCurrentPCName()); if (!['Paragraph', 'LayoutTemplate', 'PlaceHolder', 'Grid', 'MediaObject', 'Section', 'Tabs', 'Resources', 'DataTable', 'SourceCode', 'InteractiveImage'].includes(model.getCurrentPCName())) { const ctype = this.ui.getPCTypeForName(params.cname); @@ -421,8 +421,9 @@ export default class PageUIActionHandler { /* for (const pair of data.entries()) { console.log(`${pair[0]}, ${pair[1]}`); - return; - } */ + } + return; + */ insert_action = af.page().command().insert( params.afterPcid, @@ -464,7 +465,7 @@ export default class PageUIActionHandler { update_action = af.page().command().update( params.pcid, params.component, - params.data + params.data, ); this.client.sendCommand(update_action).then((result) => { diff --git a/components/ILIAS/COPage/Editor/js/src/components/page/ui/page-ui.js b/components/ILIAS/COPage/Editor/js/src/components/page/ui/page-ui.js index 3eec2f890956..ed908c7df026 100755 --- a/components/ILIAS/COPage/Editor/js/src/components/page/ui/page-ui.js +++ b/components/ILIAS/COPage/Editor/js/src/components/page/ui/page-ui.js @@ -222,7 +222,7 @@ export default class PageUI { const { uiModel } = this; let li; let li_templ; let ul; - area.innerHTML = this.droparea + uiModel.dropdown; + area.innerHTML = this.droparea + uiModel.addDropdown; const { model } = this; @@ -296,9 +296,11 @@ export default class PageUI { this.hideAllAddDropdowns(); ul.style.display = 'block'; ul.dataset.copgDDShown = '1'; + b.setAttribute('aria-expanded', 'true'); } else { ul.style.display = 'none'; ul.dataset.copgDDShown = '0'; + b.setAttribute('aria-expanded', 'false'); } }); }); @@ -591,7 +593,7 @@ export default class PageUI { document.querySelectorAll(droppableSelector).forEach((droppableElement) => { droppableElement.addEventListener('dragover', (event) => { event.preventDefault(); // Necessary to allow a drop - event.dataTransfer.dropEffect = "move"; + event.dataTransfer.dropEffect = 'move'; }); droppableElement.addEventListener('dragenter', (event) => { diff --git a/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/dom-util.js b/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/dom-util.js index 4d95986117ab..171d5db25e35 100755 --- a/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/dom-util.js +++ b/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/dom-util.js @@ -12,17 +12,16 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning * - *********************************************************************/ + ******************************************************************** */ /** * Dom utilities */ export default class DomUtil { - /** * @type {boolean} */ - //debug = true; + // debug = true; constructor() { this.debug = false; @@ -42,9 +41,9 @@ export default class DomUtil { return Math.max(document.documentElement.scrollTop, document.body.scrollTop); } - getXY (node) { - let scrollLeft, scrollTop, box, - xy = false; + getXY(node) { + let scrollLeft; let scrollTop; let box; + let xy = false; if (node.style.display !== 'none') { box = node.getBoundingClientRect(); @@ -64,17 +63,17 @@ export default class DomUtil { } getRegion(node) { - const p = this.getXY(node), - t = p[1], - r = p[0] + node.offsetWidth, - b = p[1] + node.offsetHeight, - l = p[0]; + const p = this.getXY(node); + const t = p[1]; + const r = p[0] + node.offsetWidth; + const b = p[1] + node.offsetHeight; + const l = p[0]; const reg = this.region(t,r,b,l); // console.log(reg); return reg; - }; + } - region(t,r,b,l) { + region(t, r, b, l) { return { top: t, y: t, @@ -83,9 +82,10 @@ export default class DomUtil { right: r, bottom: b, width: r - l, - height: b - t + height: b - t, }; } + getViewportWidth() { return document.documentElement.clientWidth; } @@ -95,15 +95,15 @@ export default class DomUtil { } getClientRegion() { - const t = this.getDocumentScrollTop(), - l = this.getDocumentScrollLeft(), - r = this.getViewportWidth() + l, - b = this.getViewportHeight() + t; + const t = this.getDocumentScrollTop(); + const l = this.getDocumentScrollLeft(); + const r = this.getViewportWidth() + l; + const b = this.getViewportHeight() + t; return this.region(t, r, b, l); } getComputedStyle(node, property) { - return node.ownerDocument.defaultView.getComputedStyle(node,null)[property]; + return node.ownerDocument.defaultView.getComputedStyle(node, null)[property]; } setX(node, x) { @@ -115,13 +115,13 @@ export default class DomUtil { } setXY(node, xy, retry = false) { - let pos = node.style.position, - delta = [ // assuming pixels; if not we will have to retry - parseInt( this.getComputedStyle(node, 'left'), 10 ), - parseInt( this.getComputedStyle(node, 'top'), 10 ) - ], - currentXY, - newXY; + const pos = node.style.position; + const delta = [ // assuming pixels; if not we will have to retry + parseInt(this.getComputedStyle(node, 'left'), 10), + parseInt(this.getComputedStyle(node, 'top'), 10), + ]; + let currentXY; + let newXY; currentXY = this.getXY(node); @@ -133,28 +133,28 @@ export default class DomUtil { node.style.position = relative; } - if (isNaN(delta[0]) ) { // 'auto' + if (isNaN(delta[0])) { // 'auto' delta[0] = (pos === 'relative') ? 0 : node.offsetLeft; } - if (isNaN(delta[1]) ) { // 'auto' + if (isNaN(delta[1])) { // 'auto' delta[1] = (pos === 'relative') ? 0 : node.offsetTop; } if (xy[0] !== null) { // from setX - node.style.left = (xy[0] - currentXY[0] + delta[0] + 'px'); + node.style.left = (`${xy[0] - currentXY[0] + delta[0]}px`); } if (xy[1] !== null) { // from setY - node.style.top = (xy[1] - currentXY[1] + delta[1] + 'px'); + node.style.top = (`${xy[1] - currentXY[1] + delta[1]}px`); } if (!retry) { newXY = this.getXY(node); - if ((xy[0] !== null && newXY[0] !== xy[0]) || - (xy[1] !== null && newXY[1] !== xy[1]) ) { + if ((xy[0] !== null && newXY[0] !== xy[0]) + || (xy[1] !== null && newXY[1] !== xy[1])) { this.setXY(node, xy, true); } } } -} \ No newline at end of file +} diff --git a/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/html-transform.js b/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/html-transform.js index 81fc45704212..712b5853967f 100755 --- a/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/html-transform.js +++ b/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/html-transform.js @@ -12,20 +12,19 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning * - *********************************************************************/ + ******************************************************************** */ /** * HTML transformations */ export default class HTMLTransform { - /** * @type {boolean} */ - //debug = true; + // debug = true; constructor() { - this.debug = true; + this.debug = false; } /** @@ -44,8 +43,8 @@ export default class HTMLTransform { * @return {string} */ removeAttributesFromTag(tag, str) { - const re = new RegExp("(<" + tag + " [^>]*>)","g"); - return str.replace(re, '<' + tag + '>'); + const re = new RegExp(`(<${tag} [^>]*>)`, 'g'); + return str.replace(re, `<${tag}>`); } /** @@ -54,8 +53,8 @@ export default class HTMLTransform { * @return {string} */ removeTag(tag, str) { - const re1 = new RegExp("(<" + tag + " [^>]*>)","g"); - const re2 = new RegExp("(<\/" + tag + ">)","g"); + const re1 = new RegExp(`(<${tag} [^>]*>)`, 'g'); + const re2 = new RegExp(`(<\/${tag}>)`, 'g'); str = str.replace(re1, ''); str = str.replace(re2, ''); return str; @@ -67,7 +66,7 @@ export default class HTMLTransform { // Entfernt alle Tags außer

tempDiv.querySelectorAll('*').forEach((node) => { - if (node.tagName.toLowerCase() !== 'p') { + if (!['p', 'li', 'ol', 'ul'].includes(node.tagName.toLowerCase())) { // see #0046876 node.replaceWith(...node.childNodes); // Ersetzt das Element mit seinem Inhalt } }); @@ -89,19 +88,17 @@ export default class HTMLTransform { */ p2br(c) { // remove

and \n - c = c.split("

").join(""); - c = c.split("\n").join(""); + c = c.split('

').join(''); + c = c.split('\n').join(''); // convert

to
- c = c.split("

").join("
"); + c = c.split('

').join('
'); // remove trailing
- if (c.substr(c.length - 6) === "
") { + if (c.substr(c.length - 6) === '
') { c = c.substr(0, c.length - 6); } return c; } - - -} \ No newline at end of file +} diff --git a/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/paragraph-ui.js b/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/paragraph-ui.js index 64a313ef0452..5d04bd4990a0 100755 --- a/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/paragraph-ui.js +++ b/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/paragraph-ui.js @@ -244,14 +244,27 @@ export default class ParagraphUI { li.removeAttribute('onclick'); li.addEventListener('click', (event) => { cl = li.querySelector('.ilCOPgEditStyleSelectionItem').querySelector('h1,h2,h3,div').classList[0]; - this.log(cl); - cl = cl.split('_'); - cl = cl[cl.length - 1]; + cl = this.getCharacteristicFromClass(cl); this.setParagraphClass(cl); }); }); } + /** + * E.g. "ilc_text_block_Classname" -> "Classname" + */ + getCharacteristicFromClass(cl) { + let characteristic; + const prefix = 'ilc_text_block_'; + if (cl.startsWith(prefix)) { + characteristic = cl.slice(prefix.length); + } else { + const cl_arr = cl.split('_'); + characteristic = cl_arr[cl_arr.length - 1]; + } + return characteristic; + } + // // PORTED STUFF // diff --git a/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/tiny-dom-transform.js b/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/tiny-dom-transform.js index b0653779851b..359e85ff8ee6 100755 --- a/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/tiny-dom-transform.js +++ b/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/tiny-dom-transform.js @@ -26,7 +26,7 @@ export default class TinyDomTransform { // tiny; constructor(tiny) { - this.debug = true; + this.debug = false; this.tiny = tiny; } diff --git a/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/tiny-wrapper.js b/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/tiny-wrapper.js index 86ceb2a99d92..9690d37bf72c 100755 --- a/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/tiny-wrapper.js +++ b/components/ILIAS/COPage/Editor/js/src/components/paragraph/ui/tiny-wrapper.js @@ -212,8 +212,6 @@ export default class TinyWrapper { plugins: 'save,lists', license_key: 'gpl', smart_paste: false, - save_onsavecallback: 'saveParagraph', - mode: 'exact', selector: `#${this.id}`, content_css: this.content_css, fix_list_elements: true, @@ -226,8 +224,6 @@ export default class TinyWrapper { removeformat_selector: 'span,code', remove_linebreaks: true, convert_newlines_to_brs: false, - force_p_newlines: true, - force_br_newlines: false, /* not found in 3 docu (anymore?) */ cleanup_on_startup: true, cleanup: true, @@ -698,6 +694,7 @@ export default class TinyWrapper { copyInputToGhost(add_final_spacer) { this.log('tiny-wrapper.copyInputToGhost'); let tag; + let characteristic; const ed = this.tiny; const html = this.htmlTransform; @@ -707,12 +704,13 @@ export default class TinyWrapper { if (this.getDataTableMode()) { cl = 'ilc_Paragraph ilc_text_block_TableContent'; + characteristic = 'TableContent'; + } else { + characteristic = this.getCharacteristicFromClass(cl); } cl = `copg-input-ghost ${cl}`; this.log(cl); - const cl_arr = cl.split('_'); - const characteristic = cl_arr[cl_arr.length - 1]; switch (characteristic) { case 'Headline1': tag = 'h1'; @@ -767,6 +765,21 @@ export default class TinyWrapper { } } + /** + * E.g. "ilc_text_block_Classname" -> "Classname" + */ + getCharacteristicFromClass(cl) { + let characteristic; + const prefix = 'ilc_text_block_'; + if (cl.startsWith(prefix)) { + characteristic = cl.slice(prefix.length); + } else { + const cl_arr = cl.split('_'); + characteristic = cl_arr[cl_arr.length - 1]; + } + return characteristic; + } + stopEditing() { this.copyInputToGhost(false); this.clearGhost(); @@ -959,9 +972,7 @@ export default class TinyWrapper { getCharacteristic() { const ed = this.tiny; - const parts = ed.dom.getRoot().className.split('_'); - // console.log("---"); - return parts[parts.length - 1]; + return this.getCharacteristicFromClass(ed.dom.getRoot().className); } setParagraphClass(i) { @@ -1118,7 +1129,11 @@ export default class TinyWrapper { children = dummy.childNodes; for (let k = 0; k < children.length; k++) { if (children[k].nodeName === 'P') { // paragraphs - contents.push(html.p2br(children[k].innerHTML)); + if (children[k].textContent === '') { // see #42980 + contents.push(''); + } else { + contents.push(html.p2br(children[k].innerHTML)); + } } else if (children[k].nodeType === 3) { // text nodes (seems to be only \n) // contents.push(html.p2br(children[k].textContent)); } else { diff --git a/components/ILIAS/COPage/Editor/js/src/components/placeholder/ui/placeholder-ui.js b/components/ILIAS/COPage/Editor/js/src/components/placeholder/ui/placeholder-ui.js index 679f23a128d4..0c46e69d94d1 100755 --- a/components/ILIAS/COPage/Editor/js/src/components/placeholder/ui/placeholder-ui.js +++ b/components/ILIAS/COPage/Editor/js/src/components/placeholder/ui/placeholder-ui.js @@ -72,7 +72,7 @@ export default class PlaceholderUI { * @param {PageModifier} pageModifier */ constructor(client, dispatcher, actionFactory, page_model, toolSlate, pageModifier) { - this.debug = true; + this.debug = false; this.client = client; this.dispatcher = dispatcher; this.actionFactory = actionFactory; diff --git a/components/ILIAS/COPage/Editor/js/src/components/table/model/table-model.js b/components/ILIAS/COPage/Editor/js/src/components/table/model/table-model.js index 77fb71837c9d..a268b3c29b58 100755 --- a/components/ILIAS/COPage/Editor/js/src/components/table/model/table-model.js +++ b/components/ILIAS/COPage/Editor/js/src/components/table/model/table-model.js @@ -12,31 +12,31 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning * - *********************************************************************/ + ******************************************************************** */ /** * Controller (handles editor initialisation process) */ export default class TableModel { + // debug = true; - //debug = true; - - //currentRow = null; - //currentCol = null; + // currentRow = null; + // currentCol = null; constructor(pageModel) { - console.log("TABLE MODEL CONSTRUCTUR"); - console.log(pageModel); + this.debug = false; + this.log('TABLE MODEL CONSTRUCTUR'); + this.log(pageModel); this.pageModel = pageModel; - this.STATE_DATA = "data"; // data editing - this.STATE_TABLE = "table"; // table properties editing - this.STATE_CELLS = "cells"; // cells properties editing - this.STATE_MERGE = "merge"; // merge/split cells + this.STATE_DATA = 'data'; // data editing + this.STATE_TABLE = 'table'; // table properties editing + this.STATE_CELLS = 'cells'; // cells properties editing + this.STATE_MERGE = 'merge'; // merge/split cells this.states = [ this.STATE_DATA, this.STATE_TABLE, this.STATE_CELLS, - this.STATE_MERGE + this.STATE_MERGE, ]; this.state = this.STATE_TABLE; @@ -44,9 +44,8 @@ export default class TableModel { top: -1, left: -1, bottom: -1, - right: -1 - }, - this.debug = true; + right: -1, + }; this.currentRow = null; this.currentCol = null; } @@ -62,7 +61,7 @@ export default class TableModel { */ setState(state) { if (this.states.includes(state)) { - this.log("table-model.setState " + state); + this.log(`table-model.setState ${state}`); this.state = state; } } @@ -74,7 +73,6 @@ export default class TableModel { return this.state; } - /** * * @param {number} row @@ -108,7 +106,7 @@ export default class TableModel { top: parseInt(row), left: parseInt(col), bottom: parseInt(row), - right: parseInt(col) + right: parseInt(col), }, expand); } @@ -120,7 +118,7 @@ export default class TableModel { top: row, left: 0, bottom: row, - right: this.getNrOfCols() - 1 + right: this.getNrOfCols() - 1, }, expand); } @@ -132,7 +130,7 @@ export default class TableModel { top: 0, left: col, bottom: this.getNrOfRows() - 1, - right: col + right: col, }, expand); } @@ -144,7 +142,7 @@ export default class TableModel { top: 0, left: 0, bottom: this.getNrOfRows() - 1, - right: this.getNrOfCols() - 1 + right: this.getNrOfCols() - 1, }, expand); } @@ -166,7 +164,7 @@ export default class TableModel { top: Math.min(this.selected.top, selection.top), left: Math.min(this.selected.left, selection.left), bottom: Math.max(this.selected.bottom, selection.bottom), - right: Math.max(this.selected.right, selection.right) + right: Math.max(this.selected.right, selection.right), }; } } @@ -176,8 +174,8 @@ export default class TableModel { top: -1, left: -1, bottom: -1, - right: -1 - } + right: -1, + }; } /** @@ -185,10 +183,10 @@ export default class TableModel { * @return {boolean} */ hasSelected() { - return (this.selected.top > -1 && - this.selected.bottom > -1 && - this.selected.left > -1 && - this.selected.right > -1 + return (this.selected.top > -1 + && this.selected.bottom > -1 + && this.selected.left > -1 + && this.selected.right > -1 ); } @@ -209,5 +207,4 @@ export default class TableModel { const pcModel = this.pageModel.getPCModel(this.pageModel.getCurrentPCId()); return pcModel.content[1].length; } - -} \ No newline at end of file +} diff --git a/components/ILIAS/COPage/Editor/js/src/components/table/ui/table-ui.js b/components/ILIAS/COPage/Editor/js/src/components/table/ui/table-ui.js index b3716f2a82db..4d171417ffbf 100755 --- a/components/ILIAS/COPage/Editor/js/src/components/table/ui/table-ui.js +++ b/components/ILIAS/COPage/Editor/js/src/components/table/ui/table-ui.js @@ -92,7 +92,7 @@ export default class TableUI { * @param {TableModel} tableModel */ constructor(client, dispatcher, actionFactory, page_model, toolSlate, pageModifier, paragraphUI, tableModel) { - this.debug = true; + this.debug = false; this.page_model = {}; this.uiModel = {}; @@ -415,7 +415,7 @@ export default class TableUI { initCellEditing() { const dispatch = this.dispatcher; const action = this.actionFactory; - console.log('INIT CELL EDITING'); + this.log('INIT CELL EDITING'); document.querySelectorAll("[data-copg-ed-type='data-cell']").forEach((el) => { const { column } = el.dataset; const { row } = el.dataset; @@ -423,7 +423,7 @@ export default class TableUI { const table_pcid = table.dataset.pcid; const table_hierid = table.dataset.hierid; const { tableModel } = this; - console.log(el.dataset); + this.log(el.dataset); el.addEventListener('click', (event) => { if (tableModel.getState() !== tableModel.STATE_CELLS && tableModel.getState() !== tableModel.STATE_MERGE) { @@ -571,8 +571,8 @@ export default class TableUI { } refreshUIFromModelState(pageModel, table_model) { - console.log('REFRESH'); - console.log(table_model.getState()); + this.log('REFRESH'); + this.log(table_model.getState()); switch (table_model.getState()) { case table_model.STATE_TABLE: this.showTableProperties(); @@ -663,8 +663,8 @@ export default class TableUI { const act = form_button.dataset.copgEdAction; const cname = form_button.dataset.copgEdComponent; if (cname === 'Table') { - console.log('ATTACHING EVENT TO FORM BUTTON'); - console.log(form_button); + this.log('ATTACHING EVENT TO FORM BUTTON'); + this.log(form_button); form_button.addEventListener('click', (event) => { event.preventDefault(); switch (act) { @@ -692,7 +692,7 @@ export default class TableUI { } updateMergeButton(pageModel, tableModel) { - console.log('UPDATE MERGE BUTTON'); + this.log('UPDATE MERGE BUTTON'); const b = document.querySelector("#copg-editor-slate-content [data-copg-ed-action='toggle.merge']"); const sel = tableModel.getSelected(); if (!b) { @@ -702,23 +702,23 @@ export default class TableUI { && sel.left > -1 && sel.left === sel.right && this.isMerged(sel.top, sel.left)) { b.innerHTML = il.Language.txt('cont_split_cell'); b.disabled = false; - console.log('--1--'); + this.log('--1--'); } else if (sel.top < sel.bottom || sel.left < sel.right) { - console.log('--2--'); + this.log('--2--'); b.innerHTML = il.Language.txt('cont_merge_cells'); b.disabled = false; } else { - console.log('--3--'); + this.log('--3--'); b.disabled = true; } } isMerged(row, col) { const td = document.querySelector(`td[data-row='${row}'][data-column='${col}']`); - console.log('ISMERGED'); - console.log(td); - console.log(td.colSpan); - console.log(td.rowSpan); + this.log('ISMERGED'); + this.log(td); + this.log(td.colSpan); + this.log(td.rowSpan); if (td && (td.colSpan > 1 || td.rowSpan > 1)) { return true; } @@ -776,8 +776,8 @@ export default class TableUI { markSelectedCells() { const selected = this.tableModel.getSelected(); - console.log('MARK SELECTED'); - console.log(selected); + this.log('MARK SELECTED'); + this.log(selected); document.querySelectorAll("[data-copg-ed-type='data-cell']").forEach((el) => { const col = el.dataset.column; const { row } = el.dataset; diff --git a/components/ILIAS/COPage/Editor/js/src/controller.js b/components/ILIAS/COPage/Editor/js/src/controller.js index ac437266fa9e..25bc449acbab 100755 --- a/components/ILIAS/COPage/Editor/js/src/controller.js +++ b/components/ILIAS/COPage/Editor/js/src/controller.js @@ -12,17 +12,16 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning * - *********************************************************************/ + ******************************************************************** */ /** * Controller (handles editor initialisation process) */ export default class Controller { - /** * @type {UI} */ - //ui; + // ui; constructor(ui) { this.ui = ui; @@ -32,7 +31,7 @@ export default class Controller { * Init editor */ init(after_init) { - console.log(this.ui); + // console.log(this.ui); this.ui.init(after_init); } @@ -42,5 +41,4 @@ export default class Controller { reInit() { this.ui.reInit(); } - -} \ No newline at end of file +} diff --git a/components/ILIAS/COPage/Editor/js/src/dispatcher.js b/components/ILIAS/COPage/Editor/js/src/dispatcher.js index 752b6494d48c..35df7ea8eb92 100755 --- a/components/ILIAS/COPage/Editor/js/src/dispatcher.js +++ b/components/ILIAS/COPage/Editor/js/src/dispatcher.js @@ -12,13 +12,12 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning * - *********************************************************************/ + ******************************************************************** */ /** * Editor action dispatcher */ export default class Dispatcher { - constructor(modelActionHandler, uiActionHandler) { this.modelActionHandler = modelActionHandler; this.uiActionHandler = uiActionHandler; @@ -28,9 +27,9 @@ export default class Dispatcher { * @param {EditorAction} action */ dispatch(action) { - console.log("dispatch " + action.getType()); - console.log(action.getParams()); + // console.log("dispatch " + action.getType()); + // console.log(action.getParams()); this.modelActionHandler.handle(action); this.uiActionHandler.handle(action, this.modelActionHandler.getModel()); } -} \ No newline at end of file +} diff --git a/components/ILIAS/COPage/Editor/js/src/ui/ui.js b/components/ILIAS/COPage/Editor/js/src/ui/ui.js index c50be4d564fb..b53e2aea2860 100755 --- a/components/ILIAS/COPage/Editor/js/src/ui/ui.js +++ b/components/ILIAS/COPage/Editor/js/src/ui/ui.js @@ -12,7 +12,7 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning * - *********************************************************************/ + ******************************************************************** */ import PageUI from '../components/page/ui/page-ui.js'; import ParagraphUI from '../components/paragraph/ui/paragraph-ui.js'; @@ -25,58 +25,57 @@ import PlaceHolderUI from '../components/placeholder/ui/placeholder-ui.js'; * editor ui */ export default class UI { - /** * UI model * @type {Object} */ - //uiModel = {}; + // uiModel = {}; /** * Model * @type {Model} */ - //model = {}; + // model = {}; /** * @type {Client} */ - //client; + // client; /** * @type {Dispatcher} */ - //dispatcher; + // dispatcher; /** * @type {ActionFactory} */ - //actionFactory; + // actionFactory; /** * @type {PageUI} */ - //page; + // page; /** * @type {ParagraphUI} */ - //paragraph; + // paragraph; /** * @type {MediaUI} */ - //media; + // media; /** * @type {ToolSlate} */ - //toolSlate; + // toolSlate; /** * @type {pageModifier} */ - //pageModifier; + // pageModifier; /** * @param {Client} client @@ -86,8 +85,14 @@ export default class UI { * @param {ToolSlate} toolSlate * @param {PageModifer} pageModifer */ - constructor(client, dispatcher, actionFactory, model, toolSlate, - pageModifer) { + constructor( + client, + dispatcher, + actionFactory, + model, + toolSlate, + pageModifer, + ) { this.uiModel = {}; this.client = client; this.dispatcher = dispatcher; @@ -95,57 +100,57 @@ export default class UI { this.model = model; this.toolSlate = toolSlate; this.pageModifer = pageModifer; - this.debug = true; + this.debug = false; // @todo we need a ui factory here... this.page = new PageUI( this.client, this.dispatcher, this.actionFactory, - this.model.model("page"), + this.model.model('page'), this.toolSlate, - this.pageModifer + this.pageModifer, ); this.paragraph = new ParagraphUI( this.client, this.dispatcher, this.actionFactory, - this.model.model("page"), + this.model.model('page'), this.toolSlate, this.pageModifer, - new AutoSave()); + new AutoSave(), + ); this.media = new MediaUI( this.client, this.dispatcher, this.actionFactory, - this.model.model("page"), + this.model.model('page'), this.toolSlate, - this.pageModifer + this.pageModifer, ); this.table = new TableUI( this.client, this.dispatcher, this.actionFactory, - this.model.model("page"), + this.model.model('page'), this.toolSlate, this.pageModifer, this.paragraph, - this.model.model("table"), + this.model.model('table'), ); this.placeholder = new PlaceHolderUI( - this.client, - this.dispatcher, - this.actionFactory, - this.model.model("page"), - this.toolSlate, - this.pageModifer + this.client, + this.dispatcher, + this.actionFactory, + this.model.model('page'), + this.toolSlate, + this.pageModifer, ); - - this.page.addComponentUI("Paragraph", this.paragraph); - this.page.addComponentUI("Media", this.media); - this.page.addComponentUI("Table", this.table); - this.page.addComponentUI("PlaceHolder", this.placeholder); + this.page.addComponentUI('Paragraph', this.paragraph); + this.page.addComponentUI('Media', this.media); + this.page.addComponentUI('Table', this.table); + this.page.addComponentUI('PlaceHolder', this.placeholder); this.pageModifer.setPageUI(this.page); } @@ -173,16 +178,16 @@ export default class UI { */ init(after_init) { const ui_all_action = this.actionFactory.page().query().uiAll(); - this.client.sendQuery(ui_all_action).then(result => { + this.client.sendQuery(ui_all_action).then((result) => { this.uiModel = result.getPayload(); // move page component model to model - this.log("ui.js, init, uiModel:"); + this.log('ui.js, init, uiModel:'); this.log(this.uiModel); - this.log("ui.js, init, pcModel:"); + this.log('ui.js, init, pcModel:'); this.log(this.uiModel.pcModel); - this.model.model("page").setComponentModel(this.uiModel.pcModel); - this.model.model("page").activatePasting(this.uiModel.pasting); + this.model.model('page').setComponentModel(this.uiModel.pcModel); + this.model.model('page').activatePasting(this.uiModel.pasting); this.uiModel.pcModel = null; this.toolSlate.init(this.uiModel); diff --git a/components/ILIAS/COPage/Editor/js/src/ui/util.js b/components/ILIAS/COPage/Editor/js/src/ui/util.js index b70afb7ea9e2..867f3d593dfc 100755 --- a/components/ILIAS/COPage/Editor/js/src/ui/util.js +++ b/components/ILIAS/COPage/Editor/js/src/ui/util.js @@ -49,6 +49,7 @@ export default class Util { // process only dropzones in our form with file data if (form.contains(el) && Dropzone.instances[i].getQueuedFiles().length > 0) { cnt++; + Dropzone.instances[i].options.form.should_submit = false; Dropzone.instances[i].on('queuecomplete', () => { cnt--; if (cnt === 0) { diff --git a/components/ILIAS/COPage/IntLink/class.ilInternalLink.php b/components/ILIAS/COPage/IntLink/class.ilInternalLink.php index db6f1d7ae2bf..047bd9c23b27 100755 --- a/components/ILIAS/COPage/IntLink/class.ilInternalLink.php +++ b/components/ILIAS/COPage/IntLink/class.ilInternalLink.php @@ -176,6 +176,9 @@ public static function _getIdForImportId( string $a_type, string $a_target ): ?string { + global $DIC; + $wiki_import_resolver = $DIC->wiki()->internal()->domain()->page()->importResolver(); + switch ($a_type) { case "PageObject": $id = ilLMObject::_getIdForImportId($a_target); @@ -200,13 +203,10 @@ public static function _getIdForImportId( break; case "WikiPage": - // no import IDs for wiki pages (yet) - //$id = ilGlossaryTerm::_getIdForImportId($a_target); - $id = 0; - /* + $id = $wiki_import_resolver->getIdForImportId($a_target); if ($id > 0) { return "il__wpage_" . $id; - }*/ + } break; case "MediaObject": diff --git a/components/ILIAS/COPage/IntLink/class.ilInternalLinkGUI.php b/components/ILIAS/COPage/IntLink/class.ilInternalLinkGUI.php index 0935efebbc48..72a204d25a73 100755 --- a/components/ILIAS/COPage/IntLink/class.ilInternalLinkGUI.php +++ b/components/ILIAS/COPage/IntLink/class.ilInternalLinkGUI.php @@ -58,6 +58,9 @@ public function __construct( bool $a_is_ref = true ) { global $DIC; + if ($a_default_link_type === "PortfolioPage") { + $a_is_ref = false; + } $this->tree = $DIC->repositoryTree(); $this->lng = $DIC->language(); $this->ctrl = $DIC->ctrl(); diff --git a/components/ILIAS/COPage/Layout/Administration/class.ilPageLayoutAdministrationGUI.php b/components/ILIAS/COPage/Layout/Administration/class.ilPageLayoutAdministrationGUI.php index e94106fcc886..5a8c536657c5 100755 --- a/components/ILIAS/COPage/Layout/Administration/class.ilPageLayoutAdministrationGUI.php +++ b/components/ILIAS/COPage/Layout/Administration/class.ilPageLayoutAdministrationGUI.php @@ -18,6 +18,7 @@ use ILIAS\COPage\Layout\AdministrationGUIRequest; use ILIAS\DI\UIServices; +use ILIAS\Export\ExportHandler\Factory as ilExportHandler; /** * Administration for page layouts @@ -39,6 +40,7 @@ class ilPageLayoutAdministrationGUI protected ilGlobalTemplateInterface $tpl; protected ILIAS\DI\Container $DIC; protected int $ref_id; + protected ilExportHandler $export_handler; public function __construct() { @@ -60,6 +62,7 @@ public function __construct() ->layout() ->adminRequest(); $this->ref_id = $this->admin_request->getRefId(); + $this->export_handler = new ilExportHandler(); } public function executeCommand(): void @@ -235,6 +238,7 @@ public function addPageLayout(?ilPropertyFormGUI $a_form = null): void public function initAddPageLayoutForm(): ilPropertyFormGUI { $this->lng->loadLanguageModule("content"); + $this->lng->loadLanguageModule("copg"); $form_gui = new ilPropertyFormGUI(); $form_gui->setFormAction($this->ctrl->getFormAction($this)); @@ -254,7 +258,7 @@ public function initAddPageLayoutForm(): ilPropertyFormGUI // modules - $mods = new ilCheckboxGroupInputGUI($this->lng->txt("modules"), "module"); + $mods = new ilCheckboxGroupInputGUI($this->lng->txt("copg_obj_types"), "module"); // $mods->setRequired(true); foreach (ilPageLayout::getAvailableModules() as $mod_id => $mod_caption) { $mod = new ilCheckboxOption($mod_caption, $mod_id); @@ -357,6 +361,7 @@ public function exportLayout(): void $tmpdir = ilFileUtils::ilTempnam(); ilFileUtils::makeDir($tmpdir); + $exp->setExportConfigs($this->export_handler->consumer()->exportConfig()->allExportConfigs()); $succ = $exp->exportEntity( "pgtp", $this->admin_request->getObjId(), diff --git a/components/ILIAS/COPage/Layout/classes/class.ilPageLayoutGUI.php b/components/ILIAS/COPage/Layout/classes/class.ilPageLayoutGUI.php index 37ca30e558bd..efcc3f544fdd 100755 --- a/components/ILIAS/COPage/Layout/classes/class.ilPageLayoutGUI.php +++ b/components/ILIAS/COPage/Layout/classes/class.ilPageLayoutGUI.php @@ -17,6 +17,7 @@ *********************************************************************/ use ILIAS\UI\Component\Input\Field\Radio; +use ILIAS\Repository\Form\FormAdapterGUI; /** * Class ilPageLayoutGUI GUI class @@ -189,7 +190,7 @@ public function setTabs(?ilTabsGUI $a_tabs = null): void /** * Get template selection radio */ - public static function getTemplateSelection(string $module): ?Radio + public static function getTemplateSelection(string $module, bool $include_none = false): ?Radio { global $DIC; $ui = $DIC->ui(); @@ -200,10 +201,13 @@ public static function getTemplateSelection(string $module): ?Radio return null; } $radio = $f->input()->field()->radio($lng->txt("cont_page_template"), ""); - $first = 0; + $first = "0"; + if ($include_none) { + $radio = $radio->withOption("0", $lng->txt("none")); + } /** @var ilPageLayout $templ */ foreach ($arr_templates as $templ) { - if ($first == 0) { + if ($first == "0" && !$include_none) { $first = $templ->getId(); } $templ->readObject(); @@ -213,6 +217,33 @@ public static function getTemplateSelection(string $module): ?Radio return $radio; } + public static function addTemplateSelection(string $module, FormAdapterGUI $form, bool $include_none = false): FormAdapterGUI + { + global $DIC; + $ui = $DIC->ui(); + $f = $ui->factory(); + $lng = $DIC->language(); + $arr_templates = ilPageLayout::activeLayouts($module); + if (count($arr_templates) == 0) { + return $form; + } + $form = $form->radio("template_id", $lng->txt("cont_page_template")); + $radio = $f->input()->field()->radio($lng->txt("cont_page_template"), ""); + $first = "0"; + if ($include_none) { + $form = $form->radioOption("0", $lng->txt("none")); + } + /** @var ilPageLayout $templ */ + foreach ($arr_templates as $templ) { + if ($first == "0" && !$include_none) { + $first = $templ->getId(); + } + $templ->readObject(); + $form = $form->radioOption($templ->getId(), $templ->getPreview(), $templ->getTitle()); + } + return $form; + } + public function finishEditing(): void { $this->ctrl->redirectByClass("ilpagelayoutadministrationgui", "listLayouts"); diff --git a/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/shape-edit/handle.js b/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/shape-edit/handle.js index 705fb2a90c37..1a3f454b3bb0 100755 --- a/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/shape-edit/handle.js +++ b/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/shape-edit/handle.js @@ -1,4 +1,3 @@ - /** * This file is part of ILIAS, a powerful learning management system * published by ILIAS open source e-Learning e.V. @@ -13,100 +12,98 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning * - *********************************************************************/ - + ******************************************************************** */ /** * Handle */ export default class Handle { - - /** + /** * @param int x * @param int y */ - constructor(x, y) { - this.x = x; - this.y = y; - this.onDrag = null; - } + constructor(x, y) { + this.x = x; + this.y = y; + this.onDrag = null; + } - /** + /** * @return int */ - getX() { - return this.x; - } + getX() { + return this.x; + } - /** + /** * @return int */ - getY() { - return this.y; - } + getY() { + return this.y; + } - addHandleToMobElement(mobEl, drag = true) { - const handleEl = document.createElement("a"); - handleEl.setAttribute('data-copg-iim-type', 'handle'); - handleEl.style.position = "absolute"; - handleEl.style.display = "block"; - handleEl.style.left = (this.getX() - 3) + "px"; - handleEl.style.top = (this.getY() - 3) + "px"; - handleEl.style.background = "white"; - handleEl.style.width = "5px"; - handleEl.style.height = "5px"; - handleEl.style.width = "5px"; - handleEl.style.border = "black solid 2px"; - if (drag) { - this.draggable(handleEl); - } - mobEl.appendChild(handleEl); + addHandleToMobElement(mobEl, drag = true) { + const handleEl = document.createElement('a'); + handleEl.setAttribute('data-copg-iim-type', 'handle'); + handleEl.style.position = 'absolute'; + handleEl.style.display = 'block'; + handleEl.style.left = `${this.getX() - 5}px`; + handleEl.style.top = `${this.getY() - 5}px`; + handleEl.style.background = 'white'; + handleEl.style.height = '10px'; + handleEl.style.width = '10px'; + handleEl.style.border = 'black solid 2px'; + if (drag) { + this.draggable(handleEl); } + mobEl.appendChild(handleEl); + } - setOnDrag(f) { - this.onDrag = f; - } + setOnDrag(f) { + this.onDrag = f; + } - draggable(elmnt) { - var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; - const t = this; - elmnt.onmousedown = dragMouseDown; + draggable(elmnt) { + let pos1 = 0; let pos2 = 0; let pos3 = 0; let + pos4 = 0; + const t = this; + elmnt.onmousedown = dragMouseDown; - function dragMouseDown(e) { - e = e || window.event; - e.preventDefault(); - // get the mouse cursor position at startup: - pos3 = e.clientX; - pos4 = e.clientY; - document.onmouseup = closeDragElement; - // call a function whenever the cursor moves: - document.onmousemove = elementDrag; - } + function dragMouseDown(e) { + e = e || window.event; + e.preventDefault(); + // get the mouse cursor position at startup: + pos3 = e.clientX; + pos4 = e.clientY; + document.onmouseup = closeDragElement; + // call a function whenever the cursor moves: + document.onmousemove = elementDrag; + } - function elementDrag(e) { - e = e || window.event; - e.preventDefault(); - // calculate the new cursor position: - pos1 = pos3 - e.clientX; - pos2 = pos4 - e.clientY; - pos3 = e.clientX; - pos4 = e.clientY; - // set the element's new position: - elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; - elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; - t.x = (elmnt.offsetLeft - pos1) + 3; - t.y = (elmnt.offsetTop - pos2) + 3; - if (t.onDrag) { - const f = t.onDrag; - console.log("call on drag"); - f(); - } - } + function elementDrag(e) { + e = e || window.event; + e.preventDefault(); + // calculate the new cursor position: + pos1 = pos3 - e.clientX; + pos2 = pos4 - e.clientY; + pos3 = e.clientX; + pos4 = e.clientY; + // set the element's new position: + elmnt.style.top = `${elmnt.offsetTop - pos2}px`; + elmnt.style.left = `${elmnt.offsetLeft - pos1}px`; + t.x = (elmnt.offsetLeft - pos1) + 3; + t.y = (elmnt.offsetTop - pos2) + 3; + if (t.onDrag) { + const f = t.onDrag; + console.log('call on drag'); + f(); + } + } - function closeDragElement() { - // stop moving when mouse button is released: - document.onmouseup = null; - document.onmousemove = null; - } + function closeDragElement() { + // stop moving when mouse button is released: + document.onmouseup = null; + document.onmousemove = null; } + } } diff --git a/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/ui/iim-ui-action-handler.js b/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/ui/iim-ui-action-handler.js index 33be37d3cf4f..9e3c152d569d 100755 --- a/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/ui/iim-ui-action-handler.js +++ b/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/ui/iim-ui-action-handler.js @@ -398,7 +398,6 @@ export default class IIMUIActionHandler { const af = this.actionFactory; const dispatch = this.dispatcher; const { util } = this; - this.util.sendFiles(params.form).then(() => { const data = new FormData(params.form); save_action = af.interactiveImage().command().saveSettings( diff --git a/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/ui/iim-ui.js b/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/ui/iim-ui.js index 9e44fb935603..c5ab7d99a437 100755 --- a/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/ui/iim-ui.js +++ b/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/ui/iim-ui.js @@ -479,7 +479,7 @@ export default class UI { dispatch.dispatch(action.interactiveImage().editor().saveTriggerOverlay( model.getCurrentTrigger().nr, this.getInputValueByName(this.formInput(0)), - model.getCurrentTrigger().getOverlay().getCoordsString() + model.getCurrentTrigger().getOverlay().getCoordsString(), )); break; } @@ -684,7 +684,7 @@ export default class UI { switch (act) { case ACTIONS.E_SAVE_SETTINGS: event.preventDefault(); - const form = document.querySelector('#copg-editor-slate-content .modal-body form'); + const form = document.querySelector('#copg-editor-slate-content form'); dispatch.dispatch(action.interactiveImage().editor().saveSettings( form, )); diff --git a/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/ui/ui.js b/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/ui/ui.js index 71a2227a5c41..58441d064ef0 100755 --- a/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/ui/ui.js +++ b/components/ILIAS/COPage/PC/InteractiveImage/js/editor/src/ui/ui.js @@ -12,68 +12,67 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning * - *********************************************************************/ + ******************************************************************** */ import IIMUI from './iim-ui.js'; import ActionFactory from '../actions/action-factory.js'; -import IIMUIModifier from "./iim-ui-modifier.js"; +import IIMUIModifier from './iim-ui-modifier.js'; /** * editor ui */ export default class UI { - /** * UI model * @type {Object} */ - //uiModel = {}; + // uiModel = {}; /** * Model * @type {Model} */ - //model = {}; + // model = {}; /** * @type {Client} */ - //client; + // client; /** * @type {Dispatcher} */ - //dispatcher; + // dispatcher; /** * @type {ActionFactory} */ - //actionFactory; + // actionFactory; /** * @type {PageUI} */ - //page; + // page; /** * @type {ParagraphUI} */ - //paragraph; + // paragraph; /** * @type {MediaUI} */ - //media; + // media; /** * @type {ToolSlate} */ - //toolSlate; + // toolSlate; /** * @type {pageModifier} */ - //pageModifier; + // pageModifier; /** * @param {Client} client @@ -83,8 +82,14 @@ export default class UI { * @param {ToolSlate} toolSlate * @param {IIMUIModifier} IIMUIModifier */ - constructor(client, dispatcher, actionFactory, iimModel, toolSlate, - uiModifier) { + constructor( + client, + dispatcher, + actionFactory, + iimModel, + toolSlate, + uiModifier, + ) { this.uiModel = {}; this.client = client; this.dispatcher = dispatcher; @@ -92,7 +97,7 @@ export default class UI { this.iimModel = iimModel; this.toolSlate = toolSlate; this.uiModifier = uiModifier; - this.debug = true; + this.debug = false; this.iim = new IIMUI( this.client, @@ -101,7 +106,7 @@ export default class UI { iimModel, this.uiModel, this.toolSlate, - this.uiModifier + this.uiModifier, ); /* @@ -109,7 +114,7 @@ export default class UI { this.page.addComponentUI("Media", this.media); this.page.addComponentUI("Table", this.table); this.page.addComponentUI("PlaceHolder", this.placeholder); - this.pageModifer.setPageUI(this.page);*/ + this.pageModifer.setPageUI(this.page); */ } /** @@ -136,10 +141,9 @@ export default class UI { */ init(after_init) { const ui_all_action = this.actionFactory.interactiveImage().query().init(); - this.client.sendQuery(ui_all_action).then(result => { - + this.client.sendQuery(ui_all_action).then((result) => { const p = result.getPayload(); - console.log("INIT PAYLOAD"); + console.log('INIT PAYLOAD'); console.log(p); this.iimModel.initModel(p.iimModel); this.uiModel = p.uiModel; @@ -165,7 +169,7 @@ export default class UI { this.placeholder.init(this.uiModel); if (after_init) { after_init(); - }*/ + } */ }); } diff --git a/components/ILIAS/COPage/PC/MediaObject/class.ilPCMediaObject.php b/components/ILIAS/COPage/PC/MediaObject/class.ilPCMediaObject.php index 83d2db555eb5..33aa560298a6 100755 --- a/components/ILIAS/COPage/PC/MediaObject/class.ilPCMediaObject.php +++ b/components/ILIAS/COPage/PC/MediaObject/class.ilPCMediaObject.php @@ -25,6 +25,7 @@ */ class ilPCMediaObject extends ilPageContent { + protected \ILIAS\MediaObjects\MediaObjectManager $mob_manager; protected ilCtrlInterface $ctrl; protected UsageDBRepository $mob_usage_repo; protected DOMNode $mal_node; @@ -50,6 +51,7 @@ public function init(): void ->repo() ->usage(); $this->ctrl = $DIC->ctrl(); + $this->mob_manager = $DIC->mediaObjects()->internal()->domain()->mediaObject(); } public function readMediaObject(int $a_mob_id = 0): void @@ -259,7 +261,9 @@ public static function afterPageUpdate( 0, $a_page->getLanguage() ); - self::saveMobUsage($a_page, $a_domdoc); + } + self::saveMobUsage($a_page, $a_domdoc); + if (!$a_page->getImportMode()) { foreach ($mob_ids as $mob) { // check, whether media object can be deleted if (ilObject::_exists($mob) && ilObject::_lookupType($mob) == "mob") { $mob_obj = new ilObjMediaObject($mob); @@ -407,8 +411,20 @@ public function modifyPageContentPostXsl( $srts = $mob->getSrtFiles(); foreach ($srts as $srt) { if ($ilUser->getLanguage() == $srt["language"]) { - $srt_content = file_get_contents(ilObjMediaObject::_getDirectory($mob->getId()) . "/" . $srt["full_path"]); - $a_output = str_replace("[[[[[mobsubtitle;il__mob_" . $mob->getId() . "_Standard]]]]]", $srt_content, $a_output); + $srt_content = ""; + $file_path = ilObjMediaObject::_getDirectory($mob->getId()) . "/" . $srt["full_path"]; + if (is_file($file_path)) { + $srt_content = $file_path; + } else { + $srt_content = $this->mob_manager->getLocationContent( + $mob->getId(), + $srt["full_path"] + ); + } + if ($srt_content !== "") { + $a_output = str_replace("[[[[[mobsubtitle;il__mob_" . $mob->getId() . "_Standard]]]]]", + $srt_content, $a_output); + } } } } diff --git a/components/ILIAS/COPage/PC/MediaObject/class.ilPCMediaObjectEditorGUI.php b/components/ILIAS/COPage/PC/MediaObject/class.ilPCMediaObjectEditorGUI.php index f3835e7b3115..92b181b8325e 100755 --- a/components/ILIAS/COPage/PC/MediaObject/class.ilPCMediaObjectEditorGUI.php +++ b/components/ILIAS/COPage/PC/MediaObject/class.ilPCMediaObjectEditorGUI.php @@ -221,6 +221,8 @@ public function getRenderedUrlForm( public function getUrlForm( ilLanguage $lng ): ilPropertyFormGUI { + global $DIC; + $media_types = $DIC->mediaObjects()->internal()->domain()->mediaType(); $form = new ilPropertyFormGUI(); $form->setShowTopButtons(false); @@ -240,8 +242,11 @@ public function getUrlForm( $form->addItem($hi3); // standard reference + $lng->loadLanguageModule("mob"); $ti = new ilTextInputGUI($lng->txt("url"), "standard_reference"); - $ti->setInfo($lng->txt("cont_url_info")); + $info = $lng->txt("mob_url_info1") . " " . implode(", ", iterator_to_array($media_types->getAllowedSuffixes())) . "."; + $info .= " " . $lng->txt("mob_url_info_video"); + $ti->setInfo($info); $ti->setRequired(true); $form->addItem($ti); diff --git a/components/ILIAS/COPage/PC/MediaObject/class.ilPCMediaObjectGUI.php b/components/ILIAS/COPage/PC/MediaObject/class.ilPCMediaObjectGUI.php index 45b0c324166a..f7e0e3c826fc 100755 --- a/components/ILIAS/COPage/PC/MediaObject/class.ilPCMediaObjectGUI.php +++ b/components/ILIAS/COPage/PC/MediaObject/class.ilPCMediaObjectGUI.php @@ -1447,7 +1447,7 @@ public static function _getStandardCharacteristics(): array $lng = $DIC->language(); return array( - "MediaContainer" => $lng->txt("cont_Media"), + "MediaContainer" => $lng->txt("cont_char_media"), "MediaContainerMax50" => "MediaContainerMax50", "MediaContainerFull100" => "MediaContainerFull100", "MediaContainerHighlighted" => "MediaContainerHighlighted", diff --git a/components/ILIAS/COPage/PC/Paragraph/class.ilPCParagraph.php b/components/ILIAS/COPage/PC/Paragraph/class.ilPCParagraph.php index 0bdc6aa230c5..55799df8875f 100755 --- a/components/ILIAS/COPage/PC/Paragraph/class.ilPCParagraph.php +++ b/components/ILIAS/COPage/PC/Paragraph/class.ilPCParagraph.php @@ -1719,7 +1719,7 @@ protected static function linkTermsInDom( ? ilStr::subStr($node_val, $pos - 1, 1) : ""; $a = ilStr::subStr($node_val, $pos + ilStr::strLen($t["term"]), 1); - if ((in_array($b, $valid_limiters) || htmlentities($b, null, 'utf-8') == " ") && in_array($a, $valid_limiters)) { + if ((in_array($b, $valid_limiters) || htmlentities($b, 0, 'utf-8') == " ") && in_array($a, $valid_limiters)) { $mid = '[iln term="' . $t["id"] . '"]' . ilStr::subStr($node_val, $pos, ilStr::strLen($t["term"])) . "[/iln]"; diff --git a/components/ILIAS/COPage/PC/Question/QuestionManager.php b/components/ILIAS/COPage/PC/Question/QuestionManager.php index e0fc3829caa7..10f4206b9c29 100755 --- a/components/ILIAS/COPage/PC/Question/QuestionManager.php +++ b/components/ILIAS/COPage/PC/Question/QuestionManager.php @@ -47,7 +47,11 @@ public function resolveQuestionReferences( foreach ($nodes as $node) { $qref = $node->getAttribute("QRef"); if (isset($a_mapping[$qref])) { - $node->setAttribute("QRef", "il__qst_" . $a_mapping[$qref]["pool"]); + $new_id = (int) ($a_mapping[$qref]["pool"] ?? 0); + if ($new_id === 0 && isset($a_mapping[$qref]["test"])) { // changed with 10 + $new_id = $a_mapping[$qref]["test"]; + } + $node->setAttribute("QRef", "il__qst_" . $new_id); $updated = true; } } diff --git a/components/ILIAS/COPage/PC/Question/class.ilPCQuestion.php b/components/ILIAS/COPage/PC/Question/class.ilPCQuestion.php index afdb55f03749..e95064f2b0b3 100755 --- a/components/ILIAS/COPage/PC/Question/class.ilPCQuestion.php +++ b/components/ILIAS/COPage/PC/Question/class.ilPCQuestion.php @@ -207,7 +207,6 @@ public function modifyPageContentPostXsl( $lng = $this->lng; $qhtml = ""; - if ($this->getPage()->getPageConfig()->getEnableSelfAssessment()) { // #14154 $q_ids = $this->getQuestionIds(); @@ -215,7 +214,7 @@ public function modifyPageContentPostXsl( foreach ($q_ids as $q_id) { $q_gui = assQuestionGUI::_getQuestionGUI("", $q_id); // object check due to #16557 - if (is_object($q_gui->getObject()) && !$q_gui->getObject()->isComplete()) { + if (!is_null($q_gui) && is_object($q_gui->getObject()) && !$q_gui->getObject()->isComplete()) { $a_output = str_replace( "{{{{{Question;il__qst_" . $q_id . "}}}}}", "" . $lng->txt("cont_empty_question") . "", @@ -280,7 +279,9 @@ public function getJavascriptFiles(string $a_mode): array foreach ($this->getQuestionIds() as $qId) { $qstGui = assQuestionGUI::_getQuestionGUI('', $qId); - $js_files = array_merge($js_files, $qstGui->getPresentationJavascripts()); + if (!is_null($qstGui)) { + $js_files = array_merge($js_files, $qstGui->getPresentationJavascripts()); + } } } @@ -335,11 +336,20 @@ public function getOnloadCode(string $a_mode): array if ($get_stored_tries) { if (count($q_ids) > 0) { foreach ($q_ids as $q_id) { - $as = ilPageQuestionProcessor::getAnswerStatus($q_id, $ilUser->getId()); - $code[] = "ilias.questions.initAnswer(" . $q_id . ", " . (int) ($as["try"] ?? 0) . ", " . ($as["passed"] ? "true" : "null") . ");"; + $status = ilPageQuestionProcessor::getAnswerStatus($q_id, $ilUser->getId()); + $status = $status[$q_id] ?? $status; + + $try = (int) ($status["try"] ?? 0); + $passed = isset($status["passed"]) && $status["passed"] ? "true" : "null"; + $points = $status["points"] ?? "null"; + $code[] = "ilias.questions.initAnswer(" . $q_id . ", " . $try . ", " . $passed . ", " . $points . ");"; } } } + + if ($this->getPage()->getPageConfig()->getEnableSelfAssessment()) { + $code[] = "ilias.questions.refresh_lang();"; + } return $code; } @@ -376,7 +386,6 @@ public static function getJSTextInitCode(string $a_lang): string ilias.questions.txt.please_select = "' . $lng->txtlng("content", "cont_please_select", $a_lang) . '"; ilias.questions.txt.ov_preview = "' . $lng->txtlng("content", "cont_ov_preview", $a_lang) . '"; ilias.questions.txt.submit_answers = "' . $lng->txtlng("content", "cont_submit_answers", $a_lang) . '"; - ilias.questions.refresh_lang(); '; } diff --git a/components/ILIAS/COPage/PC/Resources/class.ilPCResourcesGUI.php b/components/ILIAS/COPage/PC/Resources/class.ilPCResourcesGUI.php index 51137b76c900..1ba5592d40b1 100755 --- a/components/ILIAS/COPage/PC/Resources/class.ilPCResourcesGUI.php +++ b/components/ILIAS/COPage/PC/Resources/class.ilPCResourcesGUI.php @@ -169,7 +169,7 @@ public function initForm(bool $a_insert = false): ilPropertyFormGUI if ($this->supportsItemGroups() && count($item_groups) > 0) { // item groups $options = $item_groups; - sort($options); + asort($options); $si = new ilSelectInputGUI($this->lng->txt("obj_itgr"), "itgr"); $si->setOptions($options); $selected = ($a_insert) diff --git a/components/ILIAS/COPage/PC/Section/class.ilPCSection.php b/components/ILIAS/COPage/PC/Section/class.ilPCSection.php index 0283d08391b8..ae7503d1e8cd 100755 --- a/components/ILIAS/COPage/PC/Section/class.ilPCSection.php +++ b/components/ILIAS/COPage/PC/Section/class.ilPCSection.php @@ -192,11 +192,15 @@ public function setExtLink(string $a_href): void public function setIntLink( string $a_type, string $a_target, - string $a_target_frame + string $a_target_frame, + string $a_anchor = "" ): void { $this->setNoLink(); $attributes = array("Type" => $a_type, "Target" => $a_target, "TargetFrame" => $a_target_frame); + if ($a_anchor !== "") { + $attributes["Anchor"] = trim($a_anchor); + } $this->dom_util->setFirstOptionalElement( $this->getChildNode(), "IntLink", @@ -218,7 +222,9 @@ public function getLink(): array return array("LinkType" => "IntLink", "Target" => $child->getAttribute("Target"), "Type" => $child->getAttribute("Type"), - "TargetFrame" => $child->getAttribute("TargetFrame")); + "TargetFrame" => $child->getAttribute("TargetFrame"), + "Anchor" => $child->getAttribute("Anchor") + ); } } return array("LinkType" => "NoLink"); diff --git a/components/ILIAS/COPage/PC/Section/class.ilPCSectionGUI.php b/components/ILIAS/COPage/PC/Section/class.ilPCSectionGUI.php index 70bf451b9ea2..d8600ccf3ef2 100755 --- a/components/ILIAS/COPage/PC/Section/class.ilPCSectionGUI.php +++ b/components/ILIAS/COPage/PC/Section/class.ilPCSectionGUI.php @@ -129,7 +129,7 @@ public static function _getStandardCharacteristics(): array "Confirmation" => $lng->txt("cont_Confirmation"), "Information" => $lng->txt("cont_Information"), "Interaction" => $lng->txt("cont_Interaction"), - "Link" => $lng->txt("cont_Link"), + "Link" => $lng->txt("cont_char_link"), "Literature" => $lng->txt("cont_Literature"), "Separator" => $lng->txt("cont_Separator"), "StandardCenter" => $lng->txt("cont_StandardCenter"), @@ -302,7 +302,11 @@ public function initForm( if (!$a_insert) { $l = $this->content_obj->getLink(); if ($l["LinkType"] == "IntLink") { - $ac->setValueByIntLinkAttributes($l["Type"], $l["Target"], $l["TargetFrame"]); + $target_frame = $l["TargetFrame"]; + if (trim($target_frame) === "") { + $target_frame = trim($l["Anchor"]); + } + $ac->setValueByIntLinkAttributes($l["Type"], $l["Target"], $target_frame); $cb->setChecked(true); } elseif ($l["LinkType"] == "ExtLink") { $ac->setValue($l["Href"]); @@ -463,7 +467,13 @@ public function setValuesFromForm(ilPropertyFormGUI $form): void } elseif ($form->getInput("link_mode") == "int" && $form->getInput("link") != "") { $la = $form->getItemByPostVar("link")->getIntLinkAttributes(); if (($la["Type"] ?? "") != "") { - $this->content_obj->setIntLink($la["Type"], $la["Target"], $la["TargetFrame"]); + $anchor = ""; + if (trim($la["TargetFrame"]) !== "" && + !in_array($la["TargetFrame"], ["Media", "FAQ", "Glossary", "New"])) { + $anchor = trim($la["TargetFrame"]); + $la["TargetFrame"] = ""; + } + $this->content_obj->setIntLink($la["Type"], $la["Target"], $la["TargetFrame"], $anchor); } } else { $this->content_obj->setNoLink(); diff --git a/components/ILIAS/COPage/PC/SourceCode/class.ilPCSourceCode.php b/components/ILIAS/COPage/PC/SourceCode/class.ilPCSourceCode.php index 6e32e228114d..79cb68657c1b 100755 --- a/components/ILIAS/COPage/PC/SourceCode/class.ilPCSourceCode.php +++ b/components/ILIAS/COPage/PC/SourceCode/class.ilPCSourceCode.php @@ -16,16 +16,68 @@ * *********************************************************************/ -/** - * Class ilPCSourceCode - * - * Paragraph of ilPageObject - * - * @author Roland Küstermann - * @author Alex Killing - */ +use Phiki\Phiki; +use Phiki\Grammar\Grammar; +use Phiki\Theme\Theme; + class ilPCSourceCode extends ilPCParagraph { + public const string JAVA = "java"; + public const string PHP = "php"; + public const string C = "c"; + public const string CPP = "cpp"; + public const string HTML = "html4strict"; + public const string XML = "xml"; + public const string VISUAL_BASIC = "vb"; + public const string LATEX = "latex"; + public const string DELPHI = "delphi"; + public const string PYTHON = "python"; + public const string CSS = "css"; + public const string JAVASCRIPT = "javascript"; + public const string SQL = "sql"; + public const string BASH = "bash"; + public const string POWERSHELL = "powershell"; + + /** + * @var string[] + */ + protected static array $langs = array( + self::BASH => "Bash", + self::C => "C", + self::CPP => "C++", + self::CSS => "CSS", + self::DELPHI => "Delphi", + self::HTML => "HTML", + self::JAVA => "Java", + self::JAVASCRIPT => "Javascript", + self::LATEX => "LaTeX", + self::PHP => "PHP", + self::POWERSHELL => "Powershell", + self::PYTHON => "Python", + self::SQL => "SQL", + self::VISUAL_BASIC => "Visual Basic", + self::XML => "XML" + ); + + protected static array $v51_map = array( + "php3" => "php", + "java122" => "java", + "html" => "html4strict" + ); + + public static function getSupportedLanguages(): array + { + $langs = array(); + $map = array_flip(self::$v51_map); + foreach (self::$langs as $k => $v) { + if (isset($map[$k])) { + $k = $map[$k]; + } + $langs[$k] = $v; + } + return $langs; + } + public function init(): void { $this->setType("src"); @@ -109,7 +161,7 @@ function ($hit) { //if we have to show line numbers if (strcmp($showlinenumbers, "y") == 0) { $linenumbers = ""; - $linenumbers .= "
";
+                $linenumbers .= "
";
 
                 for ($j = 0; $j < $rownums; $j++) {
                     $indentno = strlen($rownums) - strlen($j + 1) + 2;
@@ -119,7 +171,7 @@ function ($hit) {
                         $linenumbers .= "\n";
                     }
                 }
-                $linenumbers .= "
"; + $linenumbers .= "
"; $linenumbers .= ""; } @@ -153,6 +205,30 @@ function ($hit) { return $a_output; } + protected function phikiMap(string $lang) : ?Grammar + { + $grammar = match ($lang) { + "java" => Grammar::Java, + "php" => Grammar::Php, + "c" => Grammar::C, + "cpp" => Grammar::Cpp, + "html4strict" => Grammar::Html, + "xml" => Grammar::Xml, + "vb" => Grammar::Vb, + "latex" => Grammar::Latex, + "delphi" => Grammar::Pascal, + "python" => Grammar::Python, + "css" => Grammar::Css, + "javascript" => Grammar::Javascript, + "sql" => Grammar::Sql, + "bash" => Grammar::Shellscript, + "powershell" => Grammar::Powershell, + default => Grammar::Markdown + }; + + return $grammar; + } + /** * Highlights Text with given ProgLang */ @@ -167,8 +243,14 @@ public function highlightText( $proglang = $map[$proglang]; } - $geshi = new GeSHi(html_entity_decode($a_text), $proglang); - $a_code = $geshi->parse_code(); + $phiki = new Phiki(); + $grammar = $this->phikiMap($proglang); + if (!is_null($grammar)) { + $a_code = $phiki->codeToHtml(html_entity_decode($a_text), $grammar, Theme::GithubLight); + } else { + $a_code = $a_text; + } + $a_code = substr($a_code, strpos($a_code, ">") + 1); $a_code = substr($a_code, 0, strrpos($a_code, "<")); return $a_code; diff --git a/components/ILIAS/COPage/PC/SourceCode/class.ilPCSourceCodeGUI.php b/components/ILIAS/COPage/PC/SourceCode/class.ilPCSourceCodeGUI.php index 4b23b90d6252..4cb4bef153b2 100755 --- a/components/ILIAS/COPage/PC/SourceCode/class.ilPCSourceCodeGUI.php +++ b/components/ILIAS/COPage/PC/SourceCode/class.ilPCSourceCodeGUI.php @@ -160,30 +160,6 @@ public function update(): void $this->requested_par_content = $this->request->getRaw("par_content"); $this->requested_par_downloadtitle = str_replace('"', '', $this->request->getString("par_downloadtitle")); - // $this->upload_source(); - - // set language and characteristic - - /* - $this->content_obj->setLanguage( - $this->request->getString("par_language") - ); - $this->content_obj->setCharacteristic($this->request->getString("par_characteristic"));*/ - - // set language and characteristic - /*$this->content_obj->setLanguage($this->request->getString("par_language")); - $this->content_obj->setSubCharacteristic($this->request->getString("par_subcharacteristic")); - $this->content_obj->setDownloadTitle( - str_replace('"', '', $this->requested_par_downloadtitle) - ); - $this->content_obj->setShowLineNumbers( - $this->request->getString("par_showlinenumbers") ? "y" : "n" - ); - $this->content_obj->setSubCharacteristic($this->request->getString("par_subcharacteristic")); - $this->content_obj->setCharacteristic("Code"); - - */ - $this->updated = $this->content_obj->setText( $this->content_obj->input2xml($this->requested_par_content, 0, false) ); @@ -296,7 +272,7 @@ public function getProgLangOptions(): array { $prog_langs = array( "" => "other"); - foreach (ilSyntaxHighlighter::getSupportedLanguagesV51() as $k => $v) { + foreach (ilPCSourceCode::getSupportedLanguages() as $k => $v) { $prog_langs[$k] = $v; } return $prog_langs; @@ -313,31 +289,10 @@ public function initPropertyForm( $form->addCommandButton($a_cmd, $this->lng->txt("save")); $form->addCommandButton($a_cmd_cancel, $this->lng->txt("cancel")); - /* - $lang_var = ilMDLanguageItem::_getLanguages(); - $lang = new ilSelectInputGUI($this->lng->txt("language"), "par_language"); - $lang->setOptions($lang_var); - $form->addItem($lang); - - $prog_langs = $this->getProgLangOptions(); - $code_style = new ilSelectInputGUI($this->lng->txt("cont_src"), "par_subcharacteristic"); - $code_style->setOptions($prog_langs); - $form->addItem($code_style); - $line_number = new ilCheckboxInputGUI($this->lng->txt("cont_show_line_numbers"), "par_showlinenumbers"); - $form->addItem($line_number); -*/ $code = new ilTextAreaInputGUI("", "par_content"); $code->setRows(12); $form->addItem($code); - /* - $downlaod_title = new ilTextInputGUI($this->lng->txt("cont_download_title"), "par_downloadtitle"); - $downlaod_title->setSize(40); - $form->addItem($downlaod_title); - - $file = new ilFileInputGUI($this->lng->txt("import_file"), "userfile"); - $form->addItem($file);*/ - return $form; } diff --git a/components/ILIAS/COPage/PC/Tabs/class.ilPCTabsGUI.php b/components/ILIAS/COPage/PC/Tabs/class.ilPCTabsGUI.php index 66e94fe2d2eb..721e8a065f5d 100755 --- a/components/ILIAS/COPage/PC/Tabs/class.ilPCTabsGUI.php +++ b/components/ILIAS/COPage/PC/Tabs/class.ilPCTabsGUI.php @@ -611,6 +611,9 @@ protected function getTabContent(string $pc_id): string $pc_obj = new $pc_class($this->getPage()); // post xsl page content modification by pc elements + // #45742 + $pc_obj->setFileDownloadLink("#"); + $pc_obj->setSourcecodeDownloadScript("#"); $output = $pc_obj->modifyPageContentPostXsl($output, "presentation", false); } diff --git a/components/ILIAS/COPage/Page/class.PageContentManager.php b/components/ILIAS/COPage/Page/class.PageContentManager.php index 6fffc87827ed..94b8f5333757 100755 --- a/components/ILIAS/COPage/Page/class.PageContentManager.php +++ b/components/ILIAS/COPage/Page/class.PageContentManager.php @@ -668,7 +668,7 @@ public function moveContentAfter( string $a_tpcid = "" ): void { // nothing to do... - if ($a_source === $a_target) { + if ($a_source === $a_target || $a_spcid === $a_tpcid) { return; } diff --git a/components/ILIAS/COPage/Page/class.PageQueryActionHandler.php b/components/ILIAS/COPage/Page/class.PageQueryActionHandler.php index 76bd7e885343..e75693a289df 100755 --- a/components/ILIAS/COPage/Page/class.PageQueryActionHandler.php +++ b/components/ILIAS/COPage/Page/class.PageQueryActionHandler.php @@ -83,15 +83,9 @@ public function handle(array $query): Server\Response protected function allCommand(): Server\Response { $ctrl = $this->ctrl; - $f = $this->ui->factory(); - $dd = $f->dropdown()->standard([ - $f->link()->standard("label", "#") - ]); - $r = $this->ui->renderer(); $o = new \stdClass(); - $dd_html = preg_replace('/\s*id="[^"]*"/', '', $r->render($dd)); - $r->renderAsync($dd); // this prevents further buttons to get the dd JS attached - $o->dropdown = $dd_html; + $o->dropdown = $this->getDropdownTemplate(); + $o->addDropdown = $this->getDropdownTemplate($this->lng->txt("copg_add_content")); $o->addCommands = $this->getAddCommands(); $o->pageEditHelp = $this->getPageEditHelp(); $o->multiEditHelp = $this->getMultiEditHelp(); @@ -126,6 +120,21 @@ protected function allCommand(): Server\Response return new Server\Response($o); } + protected function getDropdownTemplate(string $aria_label = ""): string + { + $f = $this->ui->factory(); + $dd = $f->dropdown()->standard([ + $f->link()->standard("label", "#") + ]); + if ($aria_label !== "") { + $dd = $dd->withAriaLabel($aria_label); + } + $r = $this->ui->renderer(); + $dd_html = preg_replace('/\s*id="[^"]*"/', '', $r->render($dd)); + $r->renderAsync($dd); // this prevents further buttons to get the dd JS attached + return $dd_html; + } + protected function getConfig(): \stdClass { $config = new \stdClass(); @@ -361,39 +370,30 @@ public function getActionsDropDown(): \ILIAS\UI\Component\Dropdown\Standard $ctrl->getLinkTargetByClass([get_class($this->page_gui), "ilnewsitemgui"], "editNews") ); } + } + if ($this->page_gui->use_meta_data) { if (($md_link = $this->page_gui->getMetaDataLink()) !== "") { $items[] = $ui->factory()->link()->standard( $lng->txt("meta_data"), $md_link ); - } - } - - if ($this->page_gui->use_meta_data) { - $mdgui = new \ilObjectMetaDataGUI( - $this->page_gui->meta_data_rep_obj, - $this->page_gui->meta_data_type, - $this->page_gui->meta_data_sub_obj_id - ); - $mdtab = $mdgui->getTab(); - if ($mdtab) { - $items[] = $ui->factory()->link()->standard( - $lng->txt("meta_data"), - $mdtab + } else { + $mdgui = new \ilObjectMetaDataGUI( + $this->page_gui->meta_data_rep_obj, + $this->page_gui->meta_data_type, + $this->page_gui->meta_data_sub_obj_id ); + $mdtab = $mdgui->getTab(); + if ($mdtab) { + $items[] = $ui->factory()->link()->standard( + $lng->txt("meta_data"), + $mdtab + ); + } } } - - if ($this->page_gui->getEnabledNews()) { - $items[] = $ui->factory()->link()->standard( - $lng->txt("news"), - $ctrl->getLinkTargetByClass([get_class($this->page_gui), \ilNewsItemGUI::class], "editNews") - ); - } - - // additional page actions foreach ($this->page_gui->getAdditionalPageActions() as $item) { $items[] = $item; diff --git a/components/ILIAS/COPage/Service/class.InternalService.php b/components/ILIAS/COPage/Service/class.InternalService.php index f8025fcd6967..730b93a185ac 100755 --- a/components/ILIAS/COPage/Service/class.InternalService.php +++ b/components/ILIAS/COPage/Service/class.InternalService.php @@ -22,53 +22,44 @@ use ILIAS\DI\Container; -/** - * COPage internal service - * @author Alexander Killing - */ class InternalService { - protected InternalDataService $data; - protected InternalRepoService $repo; - protected InternalDomainService $domain; - protected InternalGUIService $gui; + protected array $instance = []; - public function __construct(Container $DIC) + public function __construct( + protected Container $DIC + ) { - $this->data = new InternalDataService(); - $this->repo = new InternalRepoService( - $this->data(), - $DIC->database() - ); - $this->domain = new InternalDomainService( - $DIC, - $this->repo, - $this->data - ); - $this->gui = new InternalGUIService( - $DIC, - $this->data, - $this->domain - ); } public function data(): InternalDataService { - return $this->data; + return $this->instance["data"] ??= new InternalDataService(); } public function repo(): InternalRepoService { - return $this->repo; + return $this->instance["repo"] ??= new InternalRepoService( + $this->data(), + $this->DIC->database() + ); } public function domain(): InternalDomainService { - return $this->domain; + return $this->instance["domain"] ??= new InternalDomainService( + $this->DIC, + $this->repo(), + $this->data() + ); } public function gui(): InternalGUIService { - return $this->gui; + return $this->instance["gui"] ??= new InternalGUIService( + $this->DIC, + $this->data(), + $this->domain() + ); } } diff --git a/components/ILIAS/COPage/classes/class.ilCOPageExporter.php b/components/ILIAS/COPage/classes/class.ilCOPageExporter.php index 0864c9c70e4f..74d72c33a885 100755 --- a/components/ILIAS/COPage/classes/class.ilCOPageExporter.php +++ b/components/ILIAS/COPage/classes/class.ilCOPageExporter.php @@ -144,6 +144,25 @@ public function getXmlExportTailDependencies( } if (!empty($this->plugin_dependencies)) { + if ($a_entity == "pg") { + foreach ($a_ids as $id) { + $id = explode(":", $id); + $langs = ["-"]; + if (!$this->config->getMasterLanguageOnly()) { + foreach (ilPageObject::lookupTranslations($id[0], $id[1]) as $t) { + if ($t != "-") { + $langs[] = $t; + } + } + } + foreach ($langs as $l) { + $page_object = ilPageObjectFactory::getInstance($id[0], $id[1], 0, $l); + $this->extractPluginProperties($page_object); + $page_object->freeDom(); + } + } + } + // use numeric keys instead plugin names return array_values($this->plugin_dependencies); } @@ -174,7 +193,6 @@ public function getXmlRepresentation( $page_object = ilPageObjectFactory::getInstance($id[0], $id[1], 0, $l); $page_object->buildDom(); $page_object->insertInstIntoIDs(IL_INST_ID); - $this->extractPluginProperties($page_object); $pxml = $page_object->getXMLFromDom(false, false, false, "", true); $pxml = str_replace("&", "&", $pxml); $a_media = ($this->config->getIncludeMedia()) @@ -241,6 +259,7 @@ protected function extractPluginProperties( } $a_page->buildDom(); + $a_page->insertInstIntoIDs(IL_INST_ID); $domdoc = $a_page->getDomDoc(); $xpath = new DOMXPath($domdoc); $nodes = $xpath->query("//PageContent[child::Plugged]"); diff --git a/components/ILIAS/COPage/classes/class.ilPageContentGUI.php b/components/ILIAS/COPage/classes/class.ilPageContentGUI.php index 6b3e72e04242..22d4f3db659a 100755 --- a/components/ILIAS/COPage/classes/class.ilPageContentGUI.php +++ b/components/ILIAS/COPage/classes/class.ilPageContentGUI.php @@ -43,7 +43,7 @@ class ilPageContentGUI public string $hier_id = ""; public DOMDocument $dom; /** @var array|bool */ - public array|bool $updated; + public array|bool|null $updated = null; public string $target_script = ""; public string $return_location = ""; public ?ilPageConfig $page_config = null; diff --git a/components/ILIAS/COPage/classes/class.ilPageLinker.php b/components/ILIAS/COPage/classes/class.ilPageLinker.php index c70cfd829a4d..f1330627497a 100755 --- a/components/ILIAS/COPage/classes/class.ilPageLinker.php +++ b/components/ILIAS/COPage/classes/class.ilPageLinker.php @@ -28,6 +28,7 @@ class ilPageLinker implements \ILIAS\COPage\PageLinker protected string $profile_back_url = ""; protected ilCtrl $ctrl; protected string $cmd_gui; + protected \ILIAS\StaticURL\Services $static_url; public function __construct( string $cmd_gui_class, @@ -44,6 +45,7 @@ public function __construct( $this->ctrl = (is_null($ctrl)) ? $DIC->ctrl() : $ctrl; + $this->static_url = $DIC["static_url"]; } public function setOffline(bool $offline = true): void @@ -112,10 +114,18 @@ public function getLinkXML(array $int_links): string case "PageObject": case "StructureObject": $lm_id = ilLMObject::_lookupContObjID($target_id); - if ($type == "PageObject") { - $href = "./goto.php?target=pg_" . $target_id . $anc_add; + if ($type === "PageObject") { + $href = (string) $this->static_url->builder()->build( + "pg", + null, + [$target_id] + ) . $anc_add; } else { - $href = "./goto.php?target=st_" . $target_id; + $href = (string) $this->static_url->builder()->build( + "st", + null, + [$target_id] + ) . $anc_add; } if ($lm_id == "") { $href = ""; @@ -159,8 +169,14 @@ public function getLinkXML(array $int_links): string case "RepositoryItem": $obj_type = ilObject::_lookupType((int) $target_id, true); - $obj_id = ilObject::_lookupObjId((int) $target_id); - $href = "./goto.php?target=" . $obj_type . "_" . $target_id; + if ((int) $target_id > 0) { + $href = (string) $this->static_url->builder()->build( + $obj_type, + new \ILIAS\Data\ReferenceId($target_id) + ); + } else { + $href = "#"; + } break; case "File": @@ -186,7 +202,7 @@ public function getLinkXML(array $int_links): string $href = ""; if (ilUserUtil::hasPublicProfile($target_id)) { $href = $this->ctrl->getLinkTargetByClass( - [PublicProfileGUI::class], + [ilPublicProfileBaseClassGUI::class, PublicProfileGUI::class], "getHTML", "", false, diff --git a/components/ILIAS/COPage/classes/class.ilPageObject.php b/components/ILIAS/COPage/classes/class.ilPageObject.php index d83726ac8647..9bdd0fb89a41 100755 --- a/components/ILIAS/COPage/classes/class.ilPageObject.php +++ b/components/ILIAS/COPage/classes/class.ilPageObject.php @@ -719,7 +719,7 @@ public function getContentObject( $a_hier_id, $a_pc_id ); - $this->log->debug("getContentObject: " . " $a_hier_id, $a_pc_id, " . $node->nodeName); + $this->log->debug("getContentObject: " . " $a_hier_id, $a_pc_id, " . $node?->nodeName); return $this->pc_service->getByNode($node, $this); } @@ -2369,6 +2369,7 @@ public static function getParentObjectContributors( global $DIC; $db = $DIC->database(); + $profile = $DIC->copage()->internal()->domain()->profile(); $and_lang = ""; if ($a_lang != "") { @@ -2411,7 +2412,7 @@ public static function getParentObjectContributors( $c = array(); foreach ($contributors as $k => $co) { - if (ilObject::_lookupType($k) == "usr") { + if ($profile->exists($k)) { $name = ilObjUser::_lookupName($k); $c[] = array("user_id" => $k, "pages" => $co, @@ -2742,7 +2743,7 @@ public function getEditLock(): bool " AND parent_type = " . $db->quote($this->getParentType(), "text") ); $rec = $db->fetchAssoc($set); - if ($rec["edit_lock_user"] != $user->getId()) { + if (($rec["edit_lock_user"] ?? 0) != $user->getId()) { return false; } } diff --git a/components/ILIAS/COPage/classes/class.ilPageObjectGUI.php b/components/ILIAS/COPage/classes/class.ilPageObjectGUI.php index 446088f3623b..fee5de37ed52 100755 --- a/components/ILIAS/COPage/classes/class.ilPageObjectGUI.php +++ b/components/ILIAS/COPage/classes/class.ilPageObjectGUI.php @@ -1788,7 +1788,7 @@ public function displayMedia(bool $a_fullscreen = false): void $wb_path = ilFileUtils::getWebspaceDir("output") . "/"; $enlarge_path = ilUtil::getImagePath("media/enlarge.svg"); $params = array('mode' => $mode, 'enlarge_path' => $enlarge_path, - 'link_params' => "ref_id=" . $this->requested_ref_id,'fullscreen_link' => "", + 'link_params' => "ref_id=" . $this->requested_ref_id,'fullscreen_link' => $this->getFullscreenLink(), 'enable_html_mob' => ilObjMediaObject::isTypeAllowed("html") ? "y" : "n", 'ref_id' => $this->requested_ref_id, 'webspace_path' => $wb_path); $output = $this->xsl->process($xml, $params); @@ -2458,11 +2458,9 @@ public function editActivation(): void { $this->setBackToEditTabs(); - $atpl = new ilTemplate("tpl.page_activation.php", true, true, "components/ILIAS/COPage"); $this->initActivationForm(); $this->getActivationFormValues(); - $atpl->setVariable("FORM", $this->form->getHTML()); - $this->tpl->setContent($atpl->get()); + $this->tpl->setContent($this->form->getHTML()); } /** diff --git a/components/ILIAS/COPage/classes/class.ilPageQuestionProcessor.php b/components/ILIAS/COPage/classes/class.ilPageQuestionProcessor.php index 8e0a5050275f..26dbd5d5a597 100755 --- a/components/ILIAS/COPage/classes/class.ilPageQuestionProcessor.php +++ b/components/ILIAS/COPage/classes/class.ilPageQuestionProcessor.php @@ -287,9 +287,9 @@ public static function getAnswerStatus( $ilDB = $DIC->database(); - $qst = (is_array($a_q_id)) - ? $ilDB->in("qst_id", $a_q_id, false, "integer") - : " qst_id = " . $ilDB->quote($a_q_id, "integer"); + $a_q_id = is_array($a_q_id) ? $a_q_id : [(int) $a_q_id]; + + $qst = $ilDB->in("qst_id", $a_q_id, false, "integer"); $and = ($a_user_id > 0) ? " AND user_id = " . $ilDB->quote($a_user_id, "integer") @@ -317,7 +317,8 @@ public static function getAnswerStatus( } return [ "try" => 0, - "passed" => false + "passed" => false, + "points" => null ]; } diff --git a/components/ILIAS/COPage/classes/class.ilQuestionExporter.php b/components/ILIAS/COPage/classes/class.ilQuestionExporter.php index 75474d6cd036..ec9c2baf51b0 100755 --- a/components/ILIAS/COPage/classes/class.ilQuestionExporter.php +++ b/components/ILIAS/COPage/classes/class.ilQuestionExporter.php @@ -88,7 +88,7 @@ public function exportQuestion($a_ref_id, $a_image_path = null, $a_output_mode = $this->q_gui = assQuestionGUI::_getQuestionGUI("", $q_id); - if (!is_object($this->q_gui->getObject())) { + if (is_null($this->q_gui) || !is_object($this->q_gui->getObject())) { return "Error: Question not found."; } diff --git a/components/ILIAS/COPage/css/content.css b/components/ILIAS/COPage/css/content.css index 9f25273c43a8..badb230ae15f 100755 --- a/components/ILIAS/COPage/css/content.css +++ b/components/ILIAS/COPage/css/content.css @@ -923,6 +923,10 @@ input.ilc_qsubmit_Submit { margin-top: 20px; background-color: #4C6586; } +input.ilc_qsubmit_Submit:hover { + cursor: pointer; + background-color: #314157; +} input.ilc_qinput_TextInput { padding-left: 4px; } diff --git a/components/ILIAS/COPage/css/content.less b/components/ILIAS/COPage/css/content.less index 32c1f7ee8696..c78b7bd65b5c 100755 --- a/components/ILIAS/COPage/css/content.less +++ b/components/ILIAS/COPage/css/content.less @@ -1147,6 +1147,12 @@ input.ilc_qsubmit_Submit background-color: #4C6586; } +input.ilc_qsubmit_Submit:hover +{ + cursor: pointer; + background-color: #314157; +} + input.ilc_qinput_TextInput { padding-left: 4px; diff --git a/components/ILIAS/COPage/css/content_base.css b/components/ILIAS/COPage/css/content_base.css index 250b91f36ab6..ff752cb79828 100755 --- a/components/ILIAS/COPage/css/content_base.css +++ b/components/ILIAS/COPage/css/content_base.css @@ -26,7 +26,8 @@ left:0; } -#iltinymenu div.ilTinyMenuSection p, #iltinymenu .il-copg-button-group p { +/* see #41844 and #46127 */ +#copg-editor-slate-content p, #iltinymenu .il-copg-button-group p { background-color: transparent; } @@ -98,7 +99,9 @@ div.ilc_VerificationPlaceHolder /* no custom image yet */ } .copg-iim-area-shape-sel.copg-iim-hl-mode-Edit { - stroke: #B54F00; + stroke: #FFF; + stroke-dasharray: 4 2; + filter: drop-shadow(0 0 1px #000) drop-shadow(0 0 1px #000); } .copg-iim-area-shape-sel.copg-iim-hl-mode-Always, .copg-iim-area-shape-sel.copg-iim-hl-mode-Hover:hover { @@ -120,6 +123,7 @@ div.ilc_VerificationPlaceHolder /* no custom image yet */ stroke: #0078D7; fill-opacity: 40%; fill: white; + filter: none; } .copg-iim-popup { @@ -248,4 +252,4 @@ button.copg-add.dropdown-toggle.btn:focus-visible { .il-copg-mob-fullscreen { height: calc(90vh - 160px); -} +} \ No newline at end of file diff --git a/components/ILIAS/COPage/js/ilCOPagePres.js b/components/ILIAS/COPage/js/ilCOPagePres.js index fd2a9473aaee..d46aee619c1f 100644 --- a/components/ILIAS/COPage/js/ilCOPagePres.js +++ b/components/ILIAS/COPage/js/ilCOPagePres.js @@ -245,6 +245,69 @@ il.COPagePres = { /// / Audio/Video /// / + normalizePath(p) { + return (p || "").trim().replace(/^\.\//, ""); + }, + + vttTextFromScript(scriptEl) { + // Use textContent; trim to avoid accidental leading whitespace before WEBVTT + return (scriptEl.textContent || "").replace(/^\uFEFF/, "").trim(); + }, + + replaceTrackSrcWithBlob(trackEl, blobUrl) { + // Cloning is more reliable than setting trackEl.src in-place + const replacement = trackEl.cloneNode(true); + replacement.src = blobUrl; + + // Optional: preserve current mode if it was toggled already + try { + replacement.default = trackEl.default; + } catch (_) {} + + trackEl.parentNode.replaceChild(replacement, trackEl); + return replacement; + }, + + processVideo(videoEl) { + const tracks = Array.from(videoEl.querySelectorAll("track[src]")); + + tracks.forEach((trackEl) => { + const src = il.COPagePres.normalizePath(trackEl.getAttribute("src")); + if (!src) return; + + const scriptEl = document.querySelector( + `script[type="text/vtt"][data-mob-path="${CSS.escape(src)}"]` + ); + + if (!scriptEl) return; + + const vtt = il.COPagePres.vttTextFromScript(scriptEl); + if (!vtt) return; + + const blob = new Blob([vtt], { type: "text/vtt" }); + const blobUrl = URL.createObjectURL(blob); + + const newTrackEl = il.COPagePres.replaceTrackSrcWithBlob(trackEl, blobUrl); + + // Cleanup: revoke when the video element goes away (best-effort) + // (No perfect "track unlil.COPagePres.oaded" event; this is a reasonable compromise.) + const revoke = () => URL.revokeObjectURL(blobUrl); + videoEl.addEventListener("emptied", revoke, { once: true }); + window.addEventListener("beforeunload", revoke, { once: true }); + + // If you want subtitles to show automatically when the track is default: + // (Browser may require user interaction depending on settings.) + newTrackEl.track.mode = newTrackEl.default ? "showing" : "disabled"; + }); + }, + + replaceTrackForOffline(accEl) { + if (!accEl) { + accEl = document; + } + document.querySelectorAll("video").forEach(il.COPagePres.processVideo); + }, + initAudioVideo(acc_el) { let $elements; if (acc_el) { @@ -253,6 +316,8 @@ il.COPagePres = { $elements = $('video.ilPageVideo,audio.ilPageAudio'); } + il.COPagePres.replaceTrackForOffline(acc_el); + if ($elements.mediaelementplayer) { $elements.each((i, el) => { let def; let diff --git a/components/ILIAS/COPage/templates/default/tpl.page_activation.php b/components/ILIAS/COPage/templates/default/tpl.page_activation.php deleted file mode 100755 index fc7b61535bce..000000000000 --- a/components/ILIAS/COPage/templates/default/tpl.page_activation.php +++ /dev/null @@ -1,48 +0,0 @@ -/** - * This file is part of ILIAS, a powerful learning management system - * published by ILIAS open source e-Learning e.V. - * - * ILIAS is licensed with the GPL-3.0, - * see https://www.gnu.org/licenses/gpl-3.0.en.html - * You should have received a copy of said license along with the - * source code, too. - * - * If this is not the case or you just want to try ILIAS, you'll find - * us at: - * https://www.ilias.de - * https://github.com/ILIAS-eLearning - * - *********************************************************************/ - -/** - * This file is part of ILIAS, a powerful learning management system - * published by ILIAS open source e-Learning e.V. - * - * ILIAS is licensed with the GPL-3.0, - * see https://www.gnu.org/licenses/gpl-3.0.en.html - * You should have received a copy of said license along with the - * source code, too. - * - * If this is not the case or you just want to try ILIAS, you'll find - * us at: - * https://www.ilias.de - * https://github.com/ILIAS-eLearning - */ - -/** - * This file is part of ILIAS, a powerful learning management system - * published by ILIAS open source e-Learning e.V. - * - * ILIAS is licensed with the GPL-3.0, - * see https://www.gnu.org/licenses/gpl-3.0.en.html - * You should have received a copy of said license along with the - * source code, too. - * - * If this is not the case or you just want to try ILIAS, you'll find - * us at: - * https://www.ilias.de - * https://github.com/ILIAS-eLearning - * - *********************************************************************/ - -{FORM} \ No newline at end of file diff --git a/components/ILIAS/COPage/xsl/page.xsl b/components/ILIAS/COPage/xsl/page.xsl index 97bcb8707c12..4036795be9ca 100755 --- a/components/ILIAS/COPage/xsl/page.xsl +++ b/components/ILIAS/COPage/xsl/page.xsl @@ -2591,6 +2591,7 @@ @@ -2682,7 +2683,7 @@ max-width: 100%; width: 100%; max-height: 100%; - mobs/mm_/ + - + @@ -2743,6 +2747,7 @@ @@ -2948,7 +2953,7 @@ - + /overlays/ iim_ov__ @@ -3586,7 +3591,7 @@ - copg-edit-container +
col-sm- @@ -3598,33 +3603,35 @@ - +
+ + + + + + + + + + + + + + cmd[exec_:] + +
+
+ + End of Grid Cell +
- - - - - - - - - - - - - - - - cmd[exec_:] - -
-
+ + - End of Grid Cell
diff --git a/components/ILIAS/Calendar/classes/ConsultationHours/class.ilConsultationHoursGUI.php b/components/ILIAS/Calendar/classes/ConsultationHours/class.ilConsultationHoursGUI.php index a933bf6a8da8..3097264f2258 100755 --- a/components/ILIAS/Calendar/classes/ConsultationHours/class.ilConsultationHoursGUI.php +++ b/components/ILIAS/Calendar/classes/ConsultationHours/class.ilConsultationHoursGUI.php @@ -462,8 +462,6 @@ protected function createSequence(): void */ protected function initFormSequence(int $a_mode): ilPropertyFormGUI { - ilYuiUtil::initDomEvent(); - $this->form = new ilPropertyFormGUI(); $this->form->setFormAction($this->ctrl->getFormAction($this)); diff --git a/components/ILIAS/Calendar/classes/Recurrence/Input/BuilderImpl.php b/components/ILIAS/Calendar/classes/Recurrence/Input/BuilderImpl.php index 0b7d589b529d..6a5a139ffc30 100755 --- a/components/ILIAS/Calendar/classes/Recurrence/Input/BuilderImpl.php +++ b/components/ILIAS/Calendar/classes/Recurrence/Input/BuilderImpl.php @@ -500,11 +500,11 @@ protected function getOutputTransformation(): Transformation break; } - $end_data = $rule_data[1][self::END]; - if ($end_data[0] === self::UNTIL_COUNT) { + $end_data = $rule_data[1][self::END] ?? []; + if (($end_data[0] ?? false) === self::UNTIL_COUNT) { $recurrence->setFrequenceUntilCount($end_data[1][self::COUNT]); } - if ($end_data[0] === self::UNTIL_END_DATE) { + if (($end_data[0] ?? false) === self::UNTIL_END_DATE) { $recurrence->setFrequenceUntilDate(new ilDate( $end_data[1][self::END_DATE]->getTimestamp(), IL_CAL_UNIX diff --git a/components/ILIAS/Calendar/classes/UserSettings/DateFormat.php b/components/ILIAS/Calendar/classes/UserSettings/DateFormat.php index 08836fc6f3cf..7dc14af45b20 100644 --- a/components/ILIAS/Calendar/classes/UserSettings/DateFormat.php +++ b/components/ILIAS/Calendar/classes/UserSettings/DateFormat.php @@ -121,16 +121,16 @@ public function persistUserInput( \ilObjUser $user, mixed $input ): \ilObjUser { - $calendar_settings = \ilCalendarUserSettings::_getInstance($user->getId()); - $calendar_settings->setDateFormat( - $input !== null ? (int) $input : \ilCalendarSettings::_getInstance()->getDefaultDateFormat() + $user->setPref( + 'date_format', + $input !== null ? $input : (string) \ilCalendarSettings::_getInstance()->getDefaultDateFormat() ); - $calendar_settings->save(); return $user; } public function retrieveValueFromUser(\ilObjUser $user): int { - return \ilCalendarUserSettings::_getInstance($user->getId())->getDateFormat(); + return (int) ($user->getPref('date_format') + ?? \ilCalendarSettings::_getInstance()->getDefaultDateFormat()); } } diff --git a/components/ILIAS/Calendar/classes/UserSettings/TimeFormat.php b/components/ILIAS/Calendar/classes/UserSettings/TimeFormat.php index 6f1e3212a3aa..6dd2196c634d 100644 --- a/components/ILIAS/Calendar/classes/UserSettings/TimeFormat.php +++ b/components/ILIAS/Calendar/classes/UserSettings/TimeFormat.php @@ -110,17 +110,17 @@ public function persistUserInput( \ilObjUser $user, mixed $input ): \ilObjUser { - $calendar_settings = \ilCalendarUserSettings::_getInstance($user->getId()); - $calendar_settings->setTimeFormat( - $input !== null ? (int) $input : \ilCalendarSettings::_getInstance()->getDefaultTimeFormat() + $user->setPref( + 'time_format', + $input !== null ? $input : (string) \ilCalendarSettings::_getInstance()->getDefaultTimeFormat() ); - $calendar_settings->save(); return $user; } public function retrieveValueFromUser(\ilObjUser $user): int { - return (int) $user->getTimeFormat(); + return (int) ($user->getPref('time_format') + ?? \ilCalendarSettings::_getInstance()->getDefaultTimeFormat()); } private function buildOptions(): array diff --git a/components/ILIAS/Calendar/classes/UserSettings/TimeZone.php b/components/ILIAS/Calendar/classes/UserSettings/TimeZone.php index 19089b249816..41af21834862 100644 --- a/components/ILIAS/Calendar/classes/UserSettings/TimeZone.php +++ b/components/ILIAS/Calendar/classes/UserSettings/TimeZone.php @@ -109,16 +109,15 @@ public function persistUserInput( \ilObjUser $user, mixed $input ): \ilObjUser { - $calendar_settings = \ilCalendarUserSettings::_getInstance($user->getId()); - $calendar_settings->setTimeZone( + $user->setPref( + 'user_tz', $input !== null ? $input : \ilCalendarSettings::_getInstance()->getDefaultTimeZone() ); - $calendar_settings->save(); return $user; } public function retrieveValueFromUser(\ilObjUser $user): string { - return $user->getTimeZone(); + return $user->getPref('user_tz') ?? \ilCalendarSettings::_getInstance()->getDefaultTimeZone(); } } diff --git a/components/ILIAS/Calendar/classes/class.ilCalendarDayGUI.php b/components/ILIAS/Calendar/classes/class.ilCalendarDayGUI.php index 61a975e2fb36..7c3217d16860 100755 --- a/components/ILIAS/Calendar/classes/class.ilCalendarDayGUI.php +++ b/components/ILIAS/Calendar/classes/class.ilCalendarDayGUI.php @@ -97,8 +97,6 @@ protected function show(): void $this->tpl = new ilTemplate('tpl.day_view.html', true, true, 'components/ILIAS/Calendar'); - ilYuiUtil::initDragDrop(); - $bkid = $this->initBookingUserFromQuery(); if ($bkid) { $user_id = $bkid; diff --git a/components/ILIAS/Calendar/classes/class.ilCalendarMonthGUI.php b/components/ILIAS/Calendar/classes/class.ilCalendarMonthGUI.php index 4065cf7cd47d..1035bf9cc2ee 100755 --- a/components/ILIAS/Calendar/classes/class.ilCalendarMonthGUI.php +++ b/components/ILIAS/Calendar/classes/class.ilCalendarMonthGUI.php @@ -97,8 +97,6 @@ public function show(): void { $this->tpl = new ilTemplate('tpl.month_view.html', true, true, 'components/ILIAS/Calendar'); - ilYuiUtil::initDragDrop(); - $navigation = new ilCalendarHeaderNavigationGUI($this, $this->seed, ilDateTime::MONTH); $this->tpl->setVariable('NAVIGATION', $navigation->getHTML()); diff --git a/components/ILIAS/Calendar/classes/class.ilCalendarPresentationGUI.php b/components/ILIAS/Calendar/classes/class.ilCalendarPresentationGUI.php index a5d215abbaa9..12e13621d2c6 100755 --- a/components/ILIAS/Calendar/classes/class.ilCalendarPresentationGUI.php +++ b/components/ILIAS/Calendar/classes/class.ilCalendarPresentationGUI.php @@ -481,6 +481,8 @@ public function setCmdClass($a_class): void protected function redirectWithParameters(string $class): void { $this->ctrl->saveParameter($this, 'seed'); + $this->ctrl->saveParameter($this, 'cal_view'); + $this->ctrl->saveParameter($this, 'cal_agenda_per'); $this->ctrl->redirectByClass($class); } diff --git a/components/ILIAS/Calendar/classes/class.ilCalendarRemoteAccessHandler.php b/components/ILIAS/Calendar/classes/class.ilCalendarRemoteAccessHandler.php index 8068b6572bd7..7df5d7eb7335 100755 --- a/components/ILIAS/Calendar/classes/class.ilCalendarRemoteAccessHandler.php +++ b/components/ILIAS/Calendar/classes/class.ilCalendarRemoteAccessHandler.php @@ -64,7 +64,11 @@ public function parseRequest(): void public function handleRequest(): bool { session_name('ILCALSESSID'); + + require_once(__DIR__ . "/../../../../artifacts/bootstrap_default.php"); + entry_point('ILIAS Legacy Initialisation Adapter'); $this->initIlias(); + $logger = $GLOBALS['DIC']->logger()->cal(); $this->initTokenHandler(); $this->initLimitEnabled(); diff --git a/components/ILIAS/Calendar/classes/class.ilCalendarSelectionBlockGUI.php b/components/ILIAS/Calendar/classes/class.ilCalendarSelectionBlockGUI.php index fabe372efac5..82f4ddb649ed 100755 --- a/components/ILIAS/Calendar/classes/class.ilCalendarSelectionBlockGUI.php +++ b/components/ILIAS/Calendar/classes/class.ilCalendarSelectionBlockGUI.php @@ -367,6 +367,7 @@ protected function renderItem(array $a_set, ilTemplate $a_tpl): void $this->ctrl->setParameterByClass('ilcalendarpresentationgui', 'ref_id', $a_set['ref_id']); switch ($obj_type) { case 'crs': + $this->ctrl->setParameterByClass("ilcalendarpresentationgui", 'category_id', $a_set['id']); $link = $this->ctrl->getLinkTargetByClass( [ ilRepositoryGUI::class, @@ -375,9 +376,11 @@ protected function renderItem(array $a_set, ilTemplate $a_tpl): void ], '' ); + $this->ctrl->setParameterByClass("ilcalendarpresentationgui", 'category_id', $this->category_id); break; case 'grp': + $this->ctrl->setParameterByClass("ilcalendarpresentationgui", 'category_id', $a_set['id']); $link = $this->ctrl->getLinkTargetByClass( [ ilRepositoryGUI::class, @@ -386,6 +389,7 @@ protected function renderItem(array $a_set, ilTemplate $a_tpl): void ], '' ); + $this->ctrl->setParameterByClass("ilcalendarpresentationgui", 'category_id', $this->category_id); break; case 'tals': @@ -395,7 +399,9 @@ protected function renderItem(array $a_set, ilTemplate $a_tpl): void break; default: + $this->ctrl->setParameterByClass("ilcalendarpresentationgui", 'category_id', $a_set['id']); $link = ilLink::_getLink($a_set['ref_id']); + $this->ctrl->setParameterByClass("ilcalendarpresentationgui", 'category_id', $this->category_id); break; } diff --git a/components/ILIAS/Calendar/classes/class.ilCalendarWeekGUI.php b/components/ILIAS/Calendar/classes/class.ilCalendarWeekGUI.php index 6f93caeab829..7106c07c6210 100755 --- a/components/ILIAS/Calendar/classes/class.ilCalendarWeekGUI.php +++ b/components/ILIAS/Calendar/classes/class.ilCalendarWeekGUI.php @@ -96,8 +96,6 @@ public function show(): void $this->tpl = new ilTemplate('tpl.week_view.html', true, true, 'components/ILIAS/Calendar'); - ilYuiUtil::initDragDrop(); - $navigation = new ilCalendarHeaderNavigationGUI($this, $this->seed, ilDateTime::WEEK); $this->tpl->setVariable('NAVIGATION', $navigation->getHTML()); $this->setUpCalendar(); diff --git a/components/ILIAS/Category/classes/class.ilObjCategoryGUI.php b/components/ILIAS/Category/classes/class.ilObjCategoryGUI.php index 6cf782b1ceea..3ebbbbcc7249 100755 --- a/components/ILIAS/Category/classes/class.ilObjCategoryGUI.php +++ b/components/ILIAS/Category/classes/class.ilObjCategoryGUI.php @@ -231,7 +231,7 @@ public function executeCommand(): void case 'ildidactictemplategui': $this->ctrl->setReturn($this, 'edit'); - $did = new ilDidacticTemplateGUI($this); + $did = new ilDidacticTemplateGUI($this, $this->getDidacticTemplateIdFromQuery()); $this->ctrl->forwardCommand($did); break; @@ -1041,6 +1041,7 @@ public function listUsersObject(bool $show_delete = false): void $this->lng->loadLanguageModule('user'); $utab = new ilUserTableGUI($this, 'listUsers', ilUserTableGUI::MODE_LOCAL_USER); + $utab->setTitle($this->lng->txt('administrate_users_headline')); $this->tpl->setVariable('USERS_TABLE', $utab->getHTML()); } diff --git a/components/ILIAS/CategoryReference/ObjectProperties/CategoryReferenceObjectProperties.php b/components/ILIAS/CategoryReference/ObjectProperties/CategoryReferenceObjectProperties.php new file mode 100644 index 000000000000..23ebdbfae541 --- /dev/null +++ b/components/ILIAS/CategoryReference/ObjectProperties/CategoryReferenceObjectProperties.php @@ -0,0 +1,45 @@ +providers === null) { + $this->providers = new CategoryReferenceObjectPropertiesProviders(); + } + return $this->providers; + } + + public function preload(array $object_ids): void + { + return; + } +} diff --git a/components/ILIAS/CategoryReference/ObjectProperties/CategoryReferenceObjectPropertiesProviders.php b/components/ILIAS/CategoryReference/ObjectProperties/CategoryReferenceObjectPropertiesProviders.php new file mode 100644 index 000000000000..9085b5be575b --- /dev/null +++ b/components/ILIAS/CategoryReference/ObjectProperties/CategoryReferenceObjectPropertiesProviders.php @@ -0,0 +1,59 @@ +getObjectProperties()->getPropertyIcon()->getCustomIcon(); + if ($custom_icon?->exists()) { + return $icon_factory->custom( + $custom_icon->getFullPath(), + '' + ); + } + + return null; + } +} diff --git a/components/ILIAS/Certificate/classes/API/Download/class.ilUserCertificateApiGUI.php b/components/ILIAS/Certificate/classes/API/Download/class.ilUserCertificateApiGUI.php index d612928afb15..67b09d73d6d6 100755 --- a/components/ILIAS/Certificate/classes/API/Download/class.ilUserCertificateApiGUI.php +++ b/components/ILIAS/Certificate/classes/API/Download/class.ilUserCertificateApiGUI.php @@ -20,15 +20,11 @@ use Psr\Http\Message\ServerRequestInterface; -/** - * @ingroup ServicesCertificate - * @author Niels Theen - */ class ilUserCertificateApiGUI { - final public const CMD_DOWNLOAD = 'download'; + final public const string CMD_DOWNLOAD = 'download'; - private readonly ilLogger $certificateLogger; + private readonly ilLogger $logger; private readonly ServerRequestInterface $request; private readonly ilLanguage $language; private readonly ilCtrlInterface $ctrl; @@ -36,30 +32,15 @@ class ilUserCertificateApiGUI public function __construct( ?ilLanguage $language = null, ?ServerRequestInterface $request = null, - ?ilLogger $certificateLogger = null, + ?ilLogger $logger = null, ?ilCtrlInterface $ctrl = null ) { global $DIC; - if ($language === null) { - $language = $DIC->language(); - } - $this->language = $language; - - if ($request === null) { - $request = $DIC->http()->request(); - } - $this->request = $request; - - if ($certificateLogger === null) { - $certificateLogger = $DIC->logger()->cert(); - } - $this->certificateLogger = $certificateLogger; - - if ($ctrl === null) { - $ctrl = $DIC->ctrl(); - } - $this->ctrl = $ctrl; + $this->language = $language ?? $DIC->language(); + $this->request = $request ?? $DIC->http()->request(); + $this->logger = $logger ?? $DIC->logger()->cert(); + $this->ctrl = $ctrl ?? $DIC->ctrl(); $this->language->loadLanguageModule('cert'); } @@ -80,19 +61,20 @@ public function executeCommand(): void public function download(): void { - $userCertificateRepository = new ilUserCertificateRepository(null, $this->certificateLogger); - $pdfGenerator = new ilPdfGenerator($userCertificateRepository); + $repo = new ilUserCertificateRepository(null, $this->logger); - $userCertificateId = (int) $this->request->getQueryParams()['certificate_id']; + $certificate_id = (int) $this->request->getQueryParams()['certificate_id']; - $userCertificate = $userCertificateRepository->fetchCertificate($userCertificateId); + $certificate = $repo->fetchCertificate($certificate_id); - $pdfAction = new ilCertificatePdfAction( - $pdfGenerator, + $action = (new ilCertificatePdfAction( + (new ilPdfGenerator($repo))->withLogger($this->logger), new ilCertificateUtilHelper(), $this->language->txt('error_creating_certificate_pdf') + ))->withLogger($this->logger); + $action->downloadPdf( + $certificate->getUserId(), + $certificate->getObjId() ); - - $pdfAction->downloadPdf($userCertificate->getUserId(), $userCertificate->getObjId()); } } diff --git a/components/ILIAS/Certificate/classes/API/UserCertificateAPI.php b/components/ILIAS/Certificate/classes/API/UserCertificateAPI.php index c031d26765a4..67f3b1dcfb07 100755 --- a/components/ILIAS/Certificate/classes/API/UserCertificateAPI.php +++ b/components/ILIAS/Certificate/classes/API/UserCertificateAPI.php @@ -86,13 +86,15 @@ public function getUserCertificateDataMaxCount(UserDataFilter $filter): int public function certificateCriteriaMetForGivenTemplate(int $usr_id, ilCertificateTemplate $template): void { if (!$template->isCurrentlyActive()) { - $this->logger->debug(sprintf( - 'Did not trigger certificate achievement for inactive template: usr_id: %s/obj_id: %s/type: %s/template_id: %s', - $usr_id, - $template->getObjId(), - $template->getObjType(), - $template->getId() - )); + $this->logger->debug( + \sprintf( + 'Did not trigger certificate achievement for inactive template: usr_id: %s/obj_id: %s/type: %s/template_id: %s', + $usr_id, + $template->getObjId(), + $template->getObjType(), + $template->getId() + ) + ); return; } @@ -106,13 +108,26 @@ public function certificateCriteriaMet(int $usr_id, int $obj_id): void { $type = $this->object_data_cache->lookupType($obj_id); if (!$this->type_class_map->typeExistsInMap($type)) { - throw new ilCertificateConsumerNotSupported(sprintf( - "Oject type '%s' is not supported by the certificate component!", - $type - )); + throw new ilCertificateConsumerNotSupported( + \sprintf( + "Oject type '%s' is not supported by the certificate component!", + $type + ) + ); } $template = $this->template_repository->fetchCurrentlyActiveCertificate($obj_id); + if ($template->getObjType() !== $type) { + $this->logger->error( + 'Object type mismatch between template and determined type for object with id {obj_id}: ' + . 'Expected {type} but got {template_type}!', + [ + 'obj_id' => $obj_id, + 'type' => $type, + 'template_type' => $template->getObjType() + ] + ); + } $this->certificateCriteriaMetForGivenTemplate($usr_id, $template); } @@ -136,13 +151,15 @@ private function processEntry( int $userId, ilCertificateTemplate $template ): void { - $this->logger->debug(sprintf( - 'Trigger persisting certificate achievement for: usr_id: %s/obj_id: %s/type: %s/template_id: %s', - $userId, - $template->getObjId(), - $template->getObjType(), - $template->getId() - )); + $this->logger->debug( + \sprintf( + 'Trigger persisting certificate achievement for: usr_id: %s/obj_id: %s/type: %s/template_id: %s', + $userId, + $template->getObjId(), + $template->getObjType(), + $template->getId() + ) + ); $entry = new ilCertificateQueueEntry( $template->getObjId(), diff --git a/components/ILIAS/Certificate/classes/File/Certificate/class.ilPdfGenerator.php b/components/ILIAS/Certificate/classes/File/Certificate/class.ilPdfGenerator.php index d1f40380ecf4..d194a7a94139 100755 --- a/components/ILIAS/Certificate/classes/File/Certificate/class.ilPdfGenerator.php +++ b/components/ILIAS/Certificate/classes/File/Certificate/class.ilPdfGenerator.php @@ -20,49 +20,33 @@ use ILIAS\ResourceStorage\Services as IRSS; use ILIAS\ResourceStorage\Identification\ResourceIdentification; -use ILIAS\Filesystem\Filesystem; -/** - * @author Niels Theen - */ class ilPdfGenerator { - private readonly ilCertificateRpcClientFactoryHelper $rpcHelper; - private readonly ilCertificatePdfFileNameFactory $pdfFilenameFactory; + private ?ilLogger $logger = null; public function __construct( - private readonly ilUserCertificateRepository $certificateRepository, + private readonly ilUserCertificateRepository $repository, private ?IRSS $irss = null, - private ?Filesystem $filesystem = null, - ?ilCertificateRpcClientFactoryHelper $rpcHelper = null, - ?ilCertificatePdfFileNameFactory $pdfFileNameFactory = null, - ?ilLanguage $lng = null, + private ?ilCertificateRpcClientFactoryHelper $rpc = null, + private ?ilCertificatePdfFileNameFactory $filename_factory = null, + ?ilLanguage $lng = null ) { global $DIC; - if (null === $irss) { - $irss = $DIC->resourceStorage(); - } - $this->irss = $irss; - - if (null === $this->filesystem) { - $filesystem = $DIC->filesystem()->web(); - } - $this->filesystem = $filesystem; - - if (null === $rpcHelper) { - $rpcHelper = new ilCertificateRpcClientFactoryHelper(); - } - $this->rpcHelper = $rpcHelper; + $this->irss = $irss ?? $DIC->resourceStorage(); + $this->rpc = $rpc ?? new ilCertificateRpcClientFactoryHelper(); + $this->filename_factory = $filename_factory ?? new ilCertificatePdfFileNameFactory( + $lng ?? $DIC->language() + ); + } - if (null === $lng) { - $lng = $DIC->language(); - } + public function withLogger(ilLogger $logger): self + { + $clone = clone $this; + $clone->logger = $logger; - if (null === $pdfFileNameFactory) { - $pdfFileNameFactory = new ilCertificatePdfFileNameFactory($lng); - } - $this->pdfFilenameFactory = $pdfFileNameFactory; + return $clone; } /** @@ -70,7 +54,7 @@ public function __construct( */ public function generate(int $userCertificateId): string { - $certificate = $this->certificateRepository->fetchCertificate($userCertificateId); + $certificate = $this->repository->fetchCertificate($userCertificateId); return $this->createPDFScalar($certificate); } @@ -80,7 +64,7 @@ public function generate(int $userCertificateId): string */ public function generateCurrentActiveCertificate(int $userId, int $objId): string { - $certificate = $this->certificateRepository->fetchActiveCertificate($userId, $objId); + $certificate = $this->repository->fetchActiveCertificate($userId, $objId); return $this->createPDFScalar($certificate); } @@ -92,33 +76,65 @@ public function generateCurrentActiveCertificate(int $userId, int $objId): strin */ public function generateFileName(int $userId, int $objId): string { - $certificate = $this->certificateRepository->fetchActiveCertificateForPresentation($userId, $objId); + $certificate = $this->repository->fetchActiveCertificateForPresentation($userId, $objId); $user = ilObjectFactory::getInstanceByObjId($userId); if (!$user instanceof ilObjUser) { throw new ilException(sprintf('The usr_id "%s" does NOT reference a user', $userId)); } - return $this->pdfFilenameFactory->create($certificate); + return $this->filename_factory->create($certificate); } private function createPDFScalar(ilUserCertificate $certificate): string { - $certificateContent = $certificate->getCertificateContent(); + $content = $certificate->getCertificateContent(); + + $this->logger?->debug( + 'Delegating certificate PDF generation for certificate id {certificate_id} (user {user_id} and object {object_id}) to ilServer', + [ + 'certificate_id' => $certificate->getCertificateId()->asString(), + 'user_id' => $certificate->getUserId(), + 'object_id' => $certificate->getObjId() + ] + ); $background_rid = $this->irss->manage()->find($certificate->getBackgroundImageIdentification()); - $background_src = ''; if ($background_rid instanceof ResourceIdentification) { $background_src = $this->irss->consume()->src($background_rid)->getSrc(true); - $certificateContent = str_replace( + $content = str_replace( ['[BACKGROUND_IMAGE]'], [$background_src], - $certificateContent + $content ); } - $pdf_base64 = $this->rpcHelper->ilFO2PDF('RPCTransformationHandler', $certificateContent); + $pdf_base64 = $this->rpc->ilFO2PDF('RPCTransformationHandler', $content); + if (!is_string($pdf_base64->scalar)) { + $this->logger?->error( + 'ilServer returned invalid PDF content for certificate id {certificate_id} ' . + '(user {user_id} and object {object_id})', + [ + 'certificate_id' => $certificate->getCertificateId()->asString(), + 'user_id' => $certificate->getUserId(), + 'object_id' => $certificate->getObjId() + ] + ); + + throw new ilException('ilServer returned invalid PDF content'); + } + + $this->logger?->debug( + 'Received generated PDF with size {size} bytes for certificate id {certificate_id} (user {user_id} ' . + 'and object {object_id}) from ilServer', + [ + 'size' => strlen($pdf_base64->scalar), + 'certificate_id' => $certificate->getCertificateId()->asString(), + 'user_id' => $certificate->getUserId(), + 'object_id' => $certificate->getObjId() + ] + ); return $pdf_base64->scalar; } diff --git a/components/ILIAS/Certificate/classes/Gui/class.ilCertificateGUIFactory.php b/components/ILIAS/Certificate/classes/Gui/class.ilCertificateGUIFactory.php index f5bd8c66c7da..0a40dd6686ad 100755 --- a/components/ILIAS/Certificate/classes/Gui/class.ilCertificateGUIFactory.php +++ b/components/ILIAS/Certificate/classes/Gui/class.ilCertificateGUIFactory.php @@ -30,7 +30,7 @@ use ILIAS\StudyProgramme\Certificate\ilCertificateSettingsStudyProgrammeFormRepository; use ILIAS\Test\Certificate\TestPlaceholderValues; use ILIAS\Test\Certificate\TestPlaceholderDescription; -use ILIAS\Course\Certificate\CertificateTestTemplateDeleteAction; +use ILIAS\Test\Certificate\CertificateTestTemplateDeleteAction; use ILIAS\Test\Certificate\CertificateSettingsTestFormRepository; /** diff --git a/components/ILIAS/Certificate/classes/Helper/ilCertificateRpcClientFactoryHelper.php b/components/ILIAS/Certificate/classes/Helper/ilCertificateRpcClientFactoryHelper.php index 7bc7525ba991..1d3c52401c54 100755 --- a/components/ILIAS/Certificate/classes/Helper/ilCertificateRpcClientFactoryHelper.php +++ b/components/ILIAS/Certificate/classes/Helper/ilCertificateRpcClientFactoryHelper.php @@ -18,11 +18,11 @@ declare(strict_types=1); -/** - * @author Niels Theen - */ class ilCertificateRpcClientFactoryHelper { + /** + * @return stdClass{"scalar": string} + */ public function ilFO2PDF(string $package, string $certificateContent): stdClass { /** @noinspection PhpIncompatibleReturnTypeInspection */ diff --git a/components/ILIAS/Certificate/classes/Overview/CertificateOverviewTable.php b/components/ILIAS/Certificate/classes/Overview/CertificateOverviewTable.php index 020cf8a9c696..6054727fdc20 100644 --- a/components/ILIAS/Certificate/classes/Overview/CertificateOverviewTable.php +++ b/components/ILIAS/Certificate/classes/Overview/CertificateOverviewTable.php @@ -212,6 +212,7 @@ private function buildTable(): Data ], ) ->withOrder(new Order('issue_date', Order::DESC)) + ->withRange(new Range(0, 100)) ->withId('certificateOverviewTable') ->withRequest($this->request) ->withActions($this->buildTableActions()); diff --git a/components/ILIAS/Certificate/classes/Placeholder/Values/class.ilUserDefinedFieldsPlaceholderValues.php b/components/ILIAS/Certificate/classes/Placeholder/Values/class.ilUserDefinedFieldsPlaceholderValues.php index 25e3b169f11d..18278bd58ade 100755 --- a/components/ILIAS/Certificate/classes/Placeholder/Values/class.ilUserDefinedFieldsPlaceholderValues.php +++ b/components/ILIAS/Certificate/classes/Placeholder/Values/class.ilUserDefinedFieldsPlaceholderValues.php @@ -52,10 +52,10 @@ public function getPlaceholderValues(int $userId, int $objId): array throw new ilException('The entered id: ' . $userId . ' is not an user object'); } - $userDefinedFields = $this->user_profile->getVisibleUserDefinedFields(Context::Certificate); + $fields = $this->user_profile->getVisibleUserDefinedFields(Context::Certificate); $placeholder = []; - foreach ($userDefinedFields as $field) { + foreach ($fields as $field) { $placeholderText = '#' . str_replace(' ', '_', ilStr::strToUpper($field->getLabel($this->lng))); $placeholder[$placeholderText] = $this->ilUtilHelper->prepareFormOutput( $field->retrieveValueFromUser($user) @@ -72,14 +72,14 @@ public function getPlaceholderValues(int $userId, int $objId): array */ public function getPlaceholderValuesForPreview(int $userId, int $objId): array { - $userDefinedFields = $this->user_profile->getDefinitions(); + $fields = $this->user_profile->getVisibleUserDefinedFields(Context::Certificate); $placeholder = []; - foreach ($userDefinedFields as $field) { - if ($field['certificate']) { - $placeholderText = '#' . str_replace(' ', '_', ilStr::strToUpper($field['field_name'])); - - $placeholder[$placeholderText] = $field['field_name']; + foreach ($fields as $field) { + if ($field->isAvailableInCertificates()) { + $label = $field->getLabel($this->lng); + $placeholder_text = '#' . str_replace(' ', '_', ilStr::strToUpper($label)); + $placeholder[$placeholder_text] = $label; } } diff --git a/components/ILIAS/Certificate/classes/Portfolio/class.ilPortfolioCertificateFileService.php b/components/ILIAS/Certificate/classes/Portfolio/class.ilPortfolioCertificateFileService.php index 51870ec67da4..a6e914108b55 100755 --- a/components/ILIAS/Certificate/classes/Portfolio/class.ilPortfolioCertificateFileService.php +++ b/components/ILIAS/Certificate/classes/Portfolio/class.ilPortfolioCertificateFileService.php @@ -28,18 +28,18 @@ */ class ilPortfolioCertificateFileService { + private const string PERSISTENT_CERTIFICATES_DIRECTORY = 'PersistentCertificates/'; + private const string CERTIFICATE_FILENAME = 'certificate.pdf'; + private readonly Filesystem $filesystem; - private const PERSISTENT_CERTIFICATES_DIRECTORY = 'PersistentCertificates/'; - private const CERTIFICATE_FILENAME = 'certificate.pdf'; + private readonly ilLogger $logger; - public function __construct(?Filesystem $filesystem = null) + public function __construct(?Filesystem $filesystem = null, ?ilLogger $logger = null) { global $DIC; - if (null === $filesystem) { - $filesystem = $DIC->filesystem()->storage(); - } - $this->filesystem = $filesystem; + $this->filesystem = $filesystem ?? $DIC->filesystem()->storage(); + $this->logger = $logger ?? $DIC->logger()->cert(); } /** @@ -58,7 +58,7 @@ public function createCertificateFile(int $userId, int $objectId): void $this->filesystem->createDir($dirPath); } - $pdfGenerator = new ilPdfGenerator($userCertificateRepository); + $pdfGenerator = (new ilPdfGenerator($userCertificateRepository))->withLogger($this->logger); $pdfScalar = $pdfGenerator->generate($userCertificate->getId()); diff --git a/components/ILIAS/Certificate/classes/Template/Action/Clone/class.ilCertificateCloneAction.php b/components/ILIAS/Certificate/classes/Template/Action/Clone/class.ilCertificateCloneAction.php index 94328b7d8755..509a3e85eeb0 100755 --- a/components/ILIAS/Certificate/classes/Template/Action/Clone/class.ilCertificateCloneAction.php +++ b/components/ILIAS/Certificate/classes/Template/Action/Clone/class.ilCertificateCloneAction.php @@ -69,8 +69,6 @@ public function cloneCertificate( )); } - $certificatePath = $this->pathFactory->create($newObject); - $templates = $this->templateRepository->fetchCertificateTemplatesByObjId($oldObject->getId()); /** @var ilCertificateTemplate $template */ diff --git a/components/ILIAS/Certificate/classes/Template/class.ilCertificateTemplate.php b/components/ILIAS/Certificate/classes/Template/class.ilCertificateTemplate.php index fa04211552c1..703d01a683e8 100755 --- a/components/ILIAS/Certificate/classes/Template/class.ilCertificateTemplate.php +++ b/components/ILIAS/Certificate/classes/Template/class.ilCertificateTemplate.php @@ -18,8 +18,6 @@ declare(strict_types=1); -use ILIAS\ResourceStorage\Identification\ResourceIdentification; - /** * @author Niels Theen */ @@ -40,6 +38,12 @@ public function __construct( private readonly ?int $id = null, private readonly bool $deleted = false ) { + if ($this->obj_type === '' || is_numeric($this->obj_type)) { + throw new ilInvalidCertificateException( + 'Certificate template object type must be a non-numeric string ' + . ', got ' . var_export($this->obj_type, true) + ); + } } public function getObjId(): int diff --git a/components/ILIAS/Certificate/classes/Template/class.ilCertificateTemplateDatabaseRepository.php b/components/ILIAS/Certificate/classes/Template/class.ilCertificateTemplateDatabaseRepository.php index 29cc2427083b..f7a8940651d5 100755 --- a/components/ILIAS/Certificate/classes/Template/class.ilCertificateTemplateDatabaseRepository.php +++ b/components/ILIAS/Certificate/classes/Template/class.ilCertificateTemplateDatabaseRepository.php @@ -18,6 +18,8 @@ declare(strict_types=1); +use ILIAS\ResourceStorage\Identification\ResourceIdentification; + /** * @author Niels Theen * Repository that allows interaction with the database @@ -397,6 +399,34 @@ private function deactivatePreviousTemplates(int $objId): void $this->logger->debug(sprintf('END - Certificate template deactivated for object: "%s"', $objId)); } + public function updateDefaultBackgroundImagePaths( + ResourceIdentification|string $new_rid, + ResourceIdentification|string $old_rid + ): void { + $this->logger->debug(sprintf( + 'START - Update all default background image ResourceIdentifications from "%s" to "%s"', + $old_rid, + $new_rid + )); + + $affected_rows = $this->database->manipulateF( + 'UPDATE il_cert_template SET background_image_ident = %s WHERE currently_active = 1 AND background_image_ident = %s', + [ + ilDBConstants::T_TEXT, + ilDBConstants::T_TEXT + ], + [ + $new_rid instanceof ResourceIdentification ? $new_rid->serialize() : $new_rid, + $old_rid instanceof ResourceIdentification ? $old_rid->serialize() : $old_rid, + ] + ); + + $this->logger->debug(sprintf( + 'END - Updated %s certificate templates using old ResourceIdentification', + $affected_rows + )); + } + public function isResourceUsed(string $relative_image_identification): bool { $this->logger->debug( diff --git a/components/ILIAS/Certificate/classes/User/Action/Pdf/class.ilCertificatePdfAction.php b/components/ILIAS/Certificate/classes/User/Action/Pdf/class.ilCertificatePdfAction.php index 2874dc7bb254..08bd18e279fa 100755 --- a/components/ILIAS/Certificate/classes/User/Action/Pdf/class.ilCertificatePdfAction.php +++ b/components/ILIAS/Certificate/classes/User/Action/Pdf/class.ilCertificatePdfAction.php @@ -18,54 +18,64 @@ declare(strict_types=1); -/** - * @author Niels Theen - */ class ilCertificatePdfAction { - private readonly ilCertificateUtilHelper $ilUtilHelper; - private readonly ilErrorHandling $errorHandler; + private readonly ilCertificateUtilHelper $helper; + private readonly ilErrorHandling $error_handler; + private ?ilLogger $logger = null; public function __construct( - private readonly ilPdfGenerator $pdfGenerator, - ?ilCertificateUtilHelper $ilUtilHelper = null, - private readonly string $translatedErrorText = '', - ?ilErrorHandling $errorHandler = null + private readonly ilPdfGenerator $pdf_generator, + ?ilCertificateUtilHelper $helper = null, + private readonly string $error_txt = '', + ?ilErrorHandling $error_handler = null ) { - if (null === $ilUtilHelper) { - $ilUtilHelper = new ilCertificateUtilHelper(); - } - $this->ilUtilHelper = $ilUtilHelper; + global $DIC; - if (null === $errorHandler) { - global $DIC; - $errorHandler = $DIC['ilErr']; - } - $this->errorHandler = $errorHandler; + $this->helper = $helper ?? new ilCertificateUtilHelper(); + $this->error_handler = $error_handler ?? $DIC['ilErr']; + } + + public function withLogger(ilLogger $logger): self + { + $clone = clone $this; + $clone->logger = $logger; + + return $clone; } public function createPDF(int $userId, int $objectId): string { - return $this->pdfGenerator->generateCurrentActiveCertificate($userId, $objectId); + return $this->pdf_generator->generateCurrentActiveCertificate($userId, $objectId); } public function downloadPdf(int $userId, int $objectId): string { try { - $pdfScalar = $this->createPDF($userId, $objectId); + $pdf_scalar = $this->createPDF($userId, $objectId); - $fileName = $this->pdfGenerator->generateFileName($userId, $objectId); + $filename = $this->pdf_generator->generateFileName($userId, $objectId); - $this->ilUtilHelper->deliverData( - $pdfScalar, - $fileName, + $this->helper->deliverData( + $pdf_scalar, + $filename, 'application/pdf' ); - } catch (ilException) { - $this->errorHandler->raiseError($this->translatedErrorText, $this->errorHandler->MESSAGE); + } catch (Throwable $e) { + $this->logger?->error( + 'Error while generating or downloading certificate PDF for user {user_id} and object {object_id}: {error}', + [ + 'user_id' => $userId, + 'object_id' => $objectId, + 'error' => $e->getMessage(), + 'exception' => $e + ] + ); + + $this->error_handler->raiseError($this->error_txt, $this->error_handler->MESSAGE); return ''; } - return $pdfScalar; + return $pdf_scalar; } } diff --git a/components/ILIAS/Certificate/classes/User/class.ilUserCertificateGUI.php b/components/ILIAS/Certificate/classes/User/class.ilUserCertificateGUI.php index 794f345a53f7..16b67dc20532 100755 --- a/components/ILIAS/Certificate/classes/User/class.ilUserCertificateGUI.php +++ b/components/ILIAS/Certificate/classes/User/class.ilUserCertificateGUI.php @@ -18,7 +18,6 @@ declare(strict_types=1); -use ILIAS\Filesystem\Filesystem; use ILIAS\UI\Factory; use ILIAS\UI\Renderer; use Psr\Http\Message\ServerRequestInterface; @@ -30,31 +29,31 @@ */ class ilUserCertificateGUI { - final public const SORTATION_SESSION_KEY = 'my_certificates_sorting'; + final public const string SORTATION_SESSION_KEY = 'my_certificates_sorting'; private readonly ilGlobalTemplateInterface $template; private readonly ilCtrlInterface $ctrl; private readonly ilLanguage $language; - private readonly ilUserCertificateRepository $userCertificateRepository; + private readonly ilUserCertificateRepository $user_certificate_repo; private readonly ilObjUser $user; private readonly ServerRequestInterface $request; - private readonly ilLogger $certificateLogger; - private readonly Factory $uiFactory; - private readonly Renderer $uiRenderer; + private readonly ilLogger $logger; + private readonly Factory $ui_factory; + private readonly Renderer $ui_renderer; private readonly ilAccessHandler $access; private readonly ilHelpGUI $help; private readonly ilDBInterface $db; /** - * @var array + * @var array{"title_ASC":string,"title_DESC":string,"date_ASC":string,"date_DESC":string} */ - protected array $sortationOptions = [ + protected array $sortation_options = [ 'title_ASC' => 'cert_sortable_by_title_asc', 'title_DESC' => 'cert_sortable_by_title_desc', 'date_ASC' => 'cert_sortable_by_issue_date_asc', 'date_DESC' => 'cert_sortable_by_issue_date_desc', ]; - protected string $defaultSorting = 'date_DESC'; + protected string $default_sorting = 'date_DESC'; public function __construct( ?ilGlobalTemplateInterface $template = null, @@ -79,11 +78,11 @@ public function __construct( $this->user = $user ?? $DIC->user(); $this->language = $language ?? $DIC->language(); $this->request = $request ?? $DIC->http()->request(); - $this->certificateLogger = $certificateLogger ?? $DIC->logger()->cert(); - $this->uiFactory = $uiFactory ?? $DIC->ui()->factory(); - $this->uiRenderer = $uiRenderer ?? $DIC->ui()->renderer(); + $this->logger = $certificateLogger ?? $DIC->logger()->cert(); + $this->ui_factory = $uiFactory ?? $DIC->ui()->factory(); + $this->ui_renderer = $uiRenderer ?? $DIC->ui()->renderer(); $this->access = $access ?? $DIC->access(); - $this->userCertificateRepository = $userCertificateRepository ?? new ilUserCertificateRepository(null, $this->certificateLogger); + $this->user_certificate_repo = $userCertificateRepository ?? new ilUserCertificateRepository(null, $this->logger); $this->help = $help ?? $DIC->help(); $this->db = $db ?? $DIC->database(); $this->irss = $irss ?? $DIC->resourceStorage(); @@ -129,7 +128,7 @@ public function listCertificates(): void $provider = new ilUserCertificateTableProvider( $this->db, - $this->certificateLogger, + $this->logger, $this->language->txt('certificate_no_object_title') ); @@ -150,11 +149,11 @@ public function listCertificates(): void $sortationOptions = []; $cards = []; - foreach ($this->sortationOptions as $fieldAndDirection => $lngVariable) { + foreach ($this->sortation_options as $fieldAndDirection => $lngVariable) { $sortationOptions[$fieldAndDirection] = $this->language->txt($lngVariable); } - $sortViewControl = $this->uiFactory + $sortViewControl = $this->ui_factory ->viewControl() ->sortation($sortationOptions, $sorting) ->withTargetURL($this->ctrl->getLinkTarget($this, 'applySortation'), 'sort_by'); @@ -173,7 +172,7 @@ public function listCertificates(): void $imagePath = ilUtil::getImagePath('standard/icon_cert.svg'); } - $cardImage = $this->uiFactory->image()->standard( + $cardImage = $this->ui_factory->image()->standard( $imagePath, $certificateData['title'] ); @@ -181,21 +180,21 @@ public function listCertificates(): void $sections = []; if ($certificateData['description'] !== '') { - $sections[] = $this->uiFactory->listing()->descriptive([ + $sections[] = $this->ui_factory->listing()->descriptive([ $this->language->txt('cert_description_label') => $certificateData['description'] ]); } $oldDatePresentationStatus = ilDatePresentation::useRelativeDates(); ilDatePresentation::setUseRelativeDates(true); - $sections[] = $this->uiFactory->listing()->descriptive([ + $sections[] = $this->ui_factory->listing()->descriptive([ $this->language->txt('cert_issued_on_label') => ilDatePresentation::formatDate( new ilDateTime($certificateData['date'], IL_CAL_UNIX) ) ]); ilDatePresentation::setUseRelativeDates($oldDatePresentationStatus); - $objectTypeIcon = $this->uiFactory + $objectTypeIcon = $this->ui_factory ->symbol() ->icon() ->standard($certificateData['obj_type'], $certificateData['obj_type']) @@ -205,18 +204,18 @@ public function listCertificates(): void $refIds = ilObject::_getAllReferences((int) $certificateData['obj_id']); foreach ($refIds as $refId) { if ($this->access->checkAccess('read', '', $refId)) { - $objectTitle = $this->uiRenderer->render( - $this->uiFactory->link()->standard($objectTitle, ilLink::_getLink($refId)) + $objectTitle = $this->ui_renderer->render( + $this->ui_factory->link()->standard($objectTitle, ilLink::_getLink($refId)) ); break; } } - $sections[] = $this->uiFactory->listing()->descriptive([$this->language->txt('cert_object_label') => implode( + $sections[] = $this->ui_factory->listing()->descriptive([$this->language->txt('cert_object_label') => implode( '', [ - $this->uiRenderer->render($objectTypeIcon), + $this->ui_renderer->render($objectTypeIcon), $objectTitle ] ) @@ -225,9 +224,9 @@ public function listCertificates(): void $this->ctrl->setParameter($this, 'certificate_id', $certificateData['id']); $downloadHref = $this->ctrl->getLinkTarget($this, 'download'); $this->ctrl->clearParameters($this); - $sections[] = $this->uiFactory->button()->standard('Download', $downloadHref); + $sections[] = $this->ui_factory->button()->standard('Download', $downloadHref); - $card = $this->uiFactory + $card = $this->ui_factory ->card() ->standard($certificateData['title'], $cardImage) ->withSections($sections) @@ -236,23 +235,23 @@ public function listCertificates(): void $cards[] = $card; } - $deck = $this->uiFactory->deck($cards)->withSmallCardsSize(); + $deck = $this->ui_factory->deck($cards)->withSmallCardsSize(); - $uiComponents[] = $this->uiFactory->divider()->horizontal(); + $uiComponents[] = $this->ui_factory->divider()->horizontal(); $uiComponents[] = $deck; } else { $this->template->setOnScreenMessage('info', $this->language->txt('cert_currently_no_certs')); } - $this->template->setContent($this->uiRenderer->render($uiComponents)); + $this->template->setContent($this->ui_renderer->render($uiComponents)); } protected function getCurrentSortation(): string { $sorting = ilSession::get(self::SORTATION_SESSION_KEY); - if (!array_key_exists($sorting, $this->sortationOptions)) { - $sorting = $this->defaultSorting; + if (!array_key_exists($sorting, $this->sortation_options)) { + $sorting = $this->default_sorting; } return $sorting; @@ -264,9 +263,9 @@ protected function getCurrentSortation(): string */ protected function applySortation(): void { - $sorting = $this->request->getQueryParams()['sort_by'] ?? $this->defaultSorting; - if (!array_key_exists($sorting, $this->sortationOptions)) { - $sorting = $this->defaultSorting; + $sorting = $this->request->getQueryParams()['sort_by'] ?? $this->default_sorting; + if (!array_key_exists($sorting, $this->sortation_options)) { + $sorting = $this->default_sorting; } ilSession::set(self::SORTATION_SESSION_KEY, $sorting); @@ -278,30 +277,29 @@ protected function applySortation(): void */ public function download(): void { - $pdfGenerator = new ilPdfGenerator($this->userCertificateRepository); - - $userCertificateId = (int) $this->request->getQueryParams()['certificate_id']; + $certificate_id = (int) $this->request->getQueryParams()['certificate_id']; try { - $userCertificate = $this->userCertificateRepository->fetchCertificate($userCertificateId); - if ($userCertificate->getUserId() !== $this->user->getId()) { - throw new ilException(sprintf('User "%s" tried to access certificate: "%s"', $this->user->getLogin(), $userCertificateId)); + $certificate = $this->user_certificate_repo->fetchCertificate($certificate_id); + if ($certificate->getUserId() !== $this->user->getId()) { + throw new ilException( + sprintf('User "%s" tried to access certificate: "%s"', $this->user->getLogin(), $certificate_id) + ); } } catch (ilException $exception) { - $this->certificateLogger->warning($exception->getMessage()); + $this->logger->warning($exception->getMessage()); $this->template->setOnScreenMessage('failure', $this->language->txt('cert_error_no_access')); $this->listCertificates(); return; } - $pdfAction = new ilCertificatePdfAction( - $pdfGenerator, + $action = (new ilCertificatePdfAction( + (new ilPdfGenerator($this->user_certificate_repo))->withLogger($this->logger), new ilCertificateUtilHelper(), $this->language->txt('error_creating_certificate_pdf') - ); - - $pdfAction->downloadPdf($userCertificate->getUserId(), $userCertificate->getObjId()); + ))->withLogger($this->logger); + $action->downloadPdf($certificate->getUserId(), $certificate->getObjId()); $this->listCertificates(); } diff --git a/components/ILIAS/Certificate/classes/User/class.ilUserCertificateRepository.php b/components/ILIAS/Certificate/classes/User/class.ilUserCertificateRepository.php index e0e23ac954ae..b922c87a6cfd 100755 --- a/components/ILIAS/Certificate/classes/User/class.ilUserCertificateRepository.php +++ b/components/ILIAS/Certificate/classes/User/class.ilUserCertificateRepository.php @@ -656,7 +656,7 @@ public function fetchCertificatesForOverview( $sql_filters = []; foreach ($filter as $key => $value) { - if ($value === null) { + if ($value === null || $value === '') { continue; } @@ -745,7 +745,7 @@ public function fetchCertificatesForOverviewCount(array $filter, ?Range $range = { $sql_filters = []; foreach ($filter as $key => $value) { - if ($value === null) { + if ($value === null || $value === '') { continue; } diff --git a/components/ILIAS/Certificate/classes/class.ilCertificateAppEventListener.php b/components/ILIAS/Certificate/classes/class.ilCertificateAppEventListener.php index 51576eb483b3..abaebd213d77 100755 --- a/components/ILIAS/Certificate/classes/class.ilCertificateAppEventListener.php +++ b/components/ILIAS/Certificate/classes/class.ilCertificateAppEventListener.php @@ -195,8 +195,9 @@ private function handleLPUpdate(): void $usr_id, $courseTemplate ); - } catch (ilException $e) { - $this->logger->warning($e->getMessage()); + } catch (Throwable $e) { + $this->logger->error($e->getMessage()); + $this->logger->error($e->getTraceAsString()); continue; } } diff --git a/components/ILIAS/Certificate/classes/class.ilObjCertificateSettings.php b/components/ILIAS/Certificate/classes/class.ilObjCertificateSettings.php index 5c63bec73acf..b87afd1710cf 100755 --- a/components/ILIAS/Certificate/classes/class.ilObjCertificateSettings.php +++ b/components/ILIAS/Certificate/classes/class.ilObjCertificateSettings.php @@ -36,6 +36,7 @@ class ilObjCertificateSettings extends ilObject private readonly ilSetting $certificate_settings; private readonly ResourceStorage $irss; private readonly ilCertificateTemplateStakeholder $stakeholder; + private readonly ilCertificateTemplateDatabaseRepository $certificate_repository; private readonly CertificateResourceHandler $resource_handler; public function __construct(int $a_id = 0, bool $a_reference = true) @@ -47,6 +48,7 @@ public function __construct(int $a_id = 0, bool $a_reference = true) $this->certificate_settings = new ilSetting('certificate'); $this->irss = $DIC->resourceStorage(); $this->stakeholder = new ilCertificateTemplateStakeholder(); + $this->certificate_repository = new ilCertificateTemplateDatabaseRepository($DIC->database()); $this->resource_handler = new CertificateResourceHandler( new ilUserCertificateRepository($DIC->database()), new ilCertificateTemplateDatabaseRepository($DIC->database()), @@ -66,11 +68,6 @@ public function getBackgroundImageIdentification(): ?ResourceIdentification return null; } - public function getBackgroundImageDefaultFolder(): string - { - return '/certificates/default/'; - } - /** * Uploads a background image for the certificate. Creates a new directory for the * certificate if needed. Removes an existing certificate image if necessary @@ -79,9 +76,18 @@ public function getBackgroundImageDefaultFolder(): string */ public function uploadBackgroundImage(UploadResult $upload_result): bool { + $old_identification = $this->getBackgroundImageIdentification(); $identification = $this->irss->manage()->upload($upload_result, $this->stakeholder); $this->certificate_settings->set('cert_bg_image', $identification->serialize()); + $this->certificate_repository->updateDefaultBackgroundImagePaths( + $identification, + $old_identification ?: '' + ); + if ($old_identification instanceof ResourceIdentification) { + $this->resource_handler->handleResourceChange($old_identification); + } + return $identification->serialize() !== ''; } @@ -90,6 +96,7 @@ public function deleteBackgroundImage(): bool $rid = $this->getBackgroundImageIdentification(); if ($rid instanceof ResourceIdentification) { $this->certificate_settings->set('cert_bg_image', ''); + $this->certificate_repository->updateDefaultBackgroundImagePaths('', $rid); $this->resource_handler->handleResourceChange($rid); return true; diff --git a/components/ILIAS/Certificate/classes/class.ilObjCertificateSettingsGUI.php b/components/ILIAS/Certificate/classes/class.ilObjCertificateSettingsGUI.php index f07d25a7b0ec..82f51ac7a054 100755 --- a/components/ILIAS/Certificate/classes/class.ilObjCertificateSettingsGUI.php +++ b/components/ILIAS/Certificate/classes/class.ilObjCertificateSettingsGUI.php @@ -277,10 +277,8 @@ public function certificatesOverview(): void public function downloadCertificate(): void { - if ( - !$this->certificate_active_validator->validate() || - !$this->rbac_system->checkAccess('read', $this->object->getRefId()) - ) { + if (!$this->certificate_active_validator->validate() || + !$this->rbac_system->checkAccess('read', $this->object->getRefId())) { $this->error->raiseError($this->lng->txt('permission_denied'), $this->error->WARNING); } @@ -300,26 +298,23 @@ public function downloadCertificate(): void $certificate_id = $certificate_id[array_key_first($certificate_id)]; try { - $user_certificate = $this->user_certificate_repo->fetchCertificate($certificate_id); - if (!$user_certificate->isCurrentlyActive()) { + $certificate = $this->user_certificate_repo->fetchCertificate($certificate_id); + if (!$certificate->isCurrentlyActive()) { throw new Exception('Certificate is not active'); } + + $pdf_action = (new ilCertificatePdfAction( + (new ilPdfGenerator($this->user_certificate_repo))->withLogger($this->logger), + new ilCertificateUtilHelper(), + $this->lng->txt('error_creating_certificate_pdf') + ))->withLogger($this->logger); + $pdf_action->downloadPdf($certificate->getUserId(), $certificate->getObjId()); + $this->ctrl->redirect($this, self::CMD_CERTIFICATES_OVERVIEW); } catch (Exception $ex) { $this->logger->error('Fetching user certificate for download failed. Ex.: ' . $ex->getMessage()); $this->tpl->setOnScreenMessage('failure', $this->lng->txt('error_creating_certificate_pdf'), true); $this->ctrl->redirect($this, self::CMD_CERTIFICATES_OVERVIEW); } - - $pdf_generator = new ilPdfGenerator($this->user_certificate_repo); - - $pdf_action = new ilCertificatePdfAction( - $pdf_generator, - new ilCertificateUtilHelper(), - $this->lng->txt('error_creating_certificate_pdf') - ); - - $pdf_action->downloadPdf($user_certificate->getUserId(), $user_certificate->getObjId()); - $this->ctrl->redirect($this, self::CMD_CERTIFICATES_OVERVIEW); } public function save(): void diff --git a/components/ILIAS/Certificate/phpunit.xml b/components/ILIAS/Certificate/phpunit.xml index 4b6a8ad79799..bba062f26b5e 100755 --- a/components/ILIAS/Certificate/phpunit.xml +++ b/components/ILIAS/Certificate/phpunit.xml @@ -10,6 +10,7 @@ displayDetailsOnTestsThatTriggerDeprecations="true" displayDetailsOnTestsThatTriggerNotices="true" displayDetailsOnSkippedTests="true" + displayDetailsOnPhpunitDeprecations="true" backupGlobals="false" bootstrap="./tests/bootstrap.php" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"> diff --git a/components/ILIAS/Certificate/src/StaticUrlHandler.php b/components/ILIAS/Certificate/src/StaticUrlHandler.php index 701105e1bf3a..47f77a2a00e0 100644 --- a/components/ILIAS/Certificate/src/StaticUrlHandler.php +++ b/components/ILIAS/Certificate/src/StaticUrlHandler.php @@ -21,7 +21,6 @@ namespace ILIAS\Certificate; use ilAchievementsGUI; -use ilCtrlInterface; use ilDashboardGUI; use ILIAS\StaticURL\Context; use ILIAS\StaticURL\Handler\BaseHandler; @@ -29,30 +28,11 @@ use ILIAS\StaticURL\Request\Request; use ILIAS\StaticURL\Response\Factory; use ILIAS\StaticURL\Response\Response; -use ilObjUser; use ilSetting; use ilUserCertificateGUI; class StaticUrlHandler extends BaseHandler implements Handler { - private readonly ilCtrlInterface $ctrl; - private readonly ilSetting $certificate_settings; - private readonly ilObjUser $user; - - public function __construct( - ?ilCtrlInterface $ctrl = null, - ?ilSetting $certificate_settings = null, - ?ilObjUser $user = null - ) { - global $DIC; - - $this->ctrl = $ctrl ?? $DIC->ctrl(); - $this->certificate_settings = $certificate_settings ?? new ilSetting('certificate'); - $this->user = $user ?? $DIC->user(); - - parent::__construct(); - } - public function getNamespace(): string { return 'cert'; @@ -60,26 +40,27 @@ public function getNamespace(): string public function handle(Request $request, Context $context, Factory $response_factory): Response { - if ($this->user->isAnonymous() || !$this->user->getId()) { + if (!$context->isUserLoggedIn()) { return $response_factory->loginFirst(); } - if (!$this->certificate_settings->get('active', '0')) { + $certificate_settings = new ilSetting('certificate'); + if (!$certificate_settings->get('active', '0')) { return $response_factory->cannot(); } $additional_params = implode('/', $request->getAdditionalParameters() ?? []); return match ($additional_params) { - 'list' => $response_factory->can($this->ctrl->getLinkTargetByClass( + 'list' => $response_factory->can($context->ctrl()->getLinkTargetByClass( [ ilDashboardGUI::class, ilAchievementsGUI::class, ilUserCertificateGUI::class, ], - "listCertificates", + 'listCertificates', )), - default => $response_factory->cannot(), + default => $response_factory->cannot() }; } } diff --git a/components/ILIAS/Certificate/tests/ilCertificateCloneActionTest.php b/components/ILIAS/Certificate/tests/ilCertificateCloneActionTest.php index e7ac2f372993..37a1526bbc86 100755 --- a/components/ILIAS/Certificate/tests/ilCertificateCloneActionTest.php +++ b/components/ILIAS/Certificate/tests/ilCertificateCloneActionTest.php @@ -98,6 +98,8 @@ public function testCloneCertificate(): void $objectHelper->method('lookupObjId') ->willReturn(1000); + $objectHelper->method('lookupType') + ->willReturn('crs'); $global_certificate_settings = $this->getMockBuilder(ilObjCertificateSettings::class) ->disableOriginalConstructor() diff --git a/components/ILIAS/Certificate/tests/ilPdfGeneratorTest.php b/components/ILIAS/Certificate/tests/ilPdfGeneratorTest.php index d09aec723720..19491aa0e049 100755 --- a/components/ILIAS/Certificate/tests/ilPdfGeneratorTest.php +++ b/components/ILIAS/Certificate/tests/ilPdfGeneratorTest.php @@ -20,7 +20,6 @@ use ILIAS\ResourceStorage\Services as IRSS; use ILIAS\Certificate\ValueObject\CertificateId; -use ILIAS\Filesystem\Filesystem; use PHPUnit\Framework\Attributes\DoesNotPerformAssertions; class ilPdfGeneratorTest extends ilCertificateBaseTestCase @@ -31,6 +30,7 @@ public function testGenerateSpecificCertificate(): void if (!defined('CLIENT_WEB_DIR')) { define('CLIENT_WEB_DIR', 'my/client/web/dir'); } + $certificate = new ilUserCertificate( 3, 20, @@ -50,54 +50,40 @@ public function testGenerateSpecificCertificate(): void 300 ); - $userCertificateRepository = $this->getMockBuilder(ilUserCertificateRepository::class) + $user_repo = $this->getMockBuilder(ilUserCertificateRepository::class) ->disableOriginalConstructor() ->getMock() ; + $user_repo->method('fetchCertificate') + ->willReturn($certificate); - $userCertificateRepository->method('fetchCertificate') - ->willReturn($certificate) - ; - - $rpcHelper = $this->getMockBuilder(ilCertificateRpcClientFactoryHelper::class) - ->getMock() - ; + $rpc = $this->getMockBuilder(ilCertificateRpcClientFactoryHelper::class) + ->getMock(); $pdf = new stdClass(); $pdf->scalar = ''; - $rpcHelper->method('ilFO2PDF') - ->willReturn($pdf) - ; + $rpc->method('ilFO2PDF')->willReturn($pdf); - $pdfFileNameFactory = $this->getMockBuilder(ilCertificatePdfFileNameFactory::class) + $filename_factory = $this->getMockBuilder(ilCertificatePdfFileNameFactory::class) ->disableOriginalConstructor() - ->getMock() - ; + ->getMock(); $language = $this->getMockBuilder(ilLanguage::class) ->disableOriginalConstructor() - ->getMock() - ; + ->getMock(); $irss = $this->getMockBuilder(IRSS::class) - ->disableOriginalConstructor() - ->getMock() - ; - - $filesystem = $this->getMockBuilder(Filesystem::class) ->disableOriginalConstructor() ->getMock(); - $pdfGenerator = new ilPdfGenerator( - $userCertificateRepository, + $pdf_generator = new ilPdfGenerator( + $user_repo, $irss, - $filesystem, - $rpcHelper, - $pdfFileNameFactory, + $rpc, + $filename_factory, $language ); - - $pdfGenerator->generate(100); + $pdf_generator->generate(100); } #[DoesNotPerformAssertions] @@ -106,6 +92,7 @@ public function testGenerateCurrentActiveCertificate(): void if (!defined('CLIENT_WEB_DIR')) { define('CLIENT_WEB_DIR', 'my/client/web/dir'); } + $certificate = new ilUserCertificate( 3, 20, @@ -125,53 +112,39 @@ public function testGenerateCurrentActiveCertificate(): void 300 ); - $userCertificateRepository = $this->getMockBuilder(ilUserCertificateRepository::class) + $user_repo = $this->getMockBuilder(ilUserCertificateRepository::class) ->disableOriginalConstructor() - ->getMock() - ; + ->getMock(); - $userCertificateRepository->method('fetchActiveCertificate') - ->willReturn($certificate) - ; + $user_repo->method('fetchActiveCertificate') + ->willReturn($certificate); - $rpcHelper = $this->getMockBuilder(ilCertificateRpcClientFactoryHelper::class) - ->getMock() - ; + $rpc = $this->getMockBuilder(ilCertificateRpcClientFactoryHelper::class) + ->getMock(); $pdf = new stdClass(); $pdf->scalar = ''; - $rpcHelper->method('ilFO2PDF') - ->willReturn($pdf) - ; + $rpc->method('ilFO2PDF')->willReturn($pdf); - $pdfFileNameFactory = $this->getMockBuilder(ilCertificatePdfFileNameFactory::class) + $filename_factory = $this->getMockBuilder(ilCertificatePdfFileNameFactory::class) ->disableOriginalConstructor() - ->getMock() - ; + ->getMock(); $language = $this->getMockBuilder(ilLanguage::class) ->disableOriginalConstructor() - ->getMock() - ; + ->getMock(); $irss = $this->getMockBuilder(IRSS::class) - ->disableOriginalConstructor() - ->getMock() - ; - - $filesystem = $this->getMockBuilder(Filesystem::class) ->disableOriginalConstructor() ->getMock(); - $pdfGenerator = new ilPdfGenerator( - $userCertificateRepository, + $pdf_generator = new ilPdfGenerator( + $user_repo, $irss, - $filesystem, - $rpcHelper, - $pdfFileNameFactory, + $rpc, + $filename_factory, $language ); - - $pdfGenerator->generateCurrentActiveCertificate(100, 200); + $pdf_generator->generateCurrentActiveCertificate(100, 200); } } diff --git a/components/ILIAS/Chatroom/chat/package-lock.json b/components/ILIAS/Chatroom/chat/package-lock.json index 528de1c8041c..6b797ec5c569 100644 --- a/components/ILIAS/Chatroom/chat/package-lock.json +++ b/components/ILIAS/Chatroom/chat/package-lock.json @@ -8,7 +8,7 @@ "name": "ILIAS-Chat", "version": "11.0.0", "dependencies": { - "express": "^5.0.1", + "express": "^5.2.1", "mariadb": "^3.4.0", "node-schedule": "^2.1.0", "socket.io": "^4.8.1", @@ -21,35 +21,38 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", + "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", "dependencies": { - "colorspace": "1.1.x", + "@so-ric/colorspace": "^1.1.6", "enabled": "2.0.x", "kuler": "^2.0.0" } }, + "node_modules/@so-ric/colorspace": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", + "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "dependencies": { + "color": "^5.0.2", + "text-hex": "1.0.x" + } + }, "node_modules/@socket.io/component-emitter": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" - }, "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", "dependencies": { "@types/node": "*" } @@ -57,39 +60,37 @@ "node_modules/@types/geojson": { "version": "7946.0.16", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", - "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", - "license": "MIT" + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==" }, "node_modules/@types/node": { - "version": "22.8.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.1.tgz", - "integrity": "sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==", + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dependencies": { - "undici-types": "~6.19.8" + "undici-types": "~7.16.0" } }, "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "license": "MIT" + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" }, "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" }, "node_modules/base64id": { "version": "2.0.0", @@ -100,95 +101,55 @@ } }, "node_modules/body-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.1.0.tgz", - "integrity": "sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==", - "license": "MIT", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", - "debug": "^4.4.0", + "debug": "^4.4.3", "http-errors": "^2.0.0", - "iconv-lite": "^0.5.2", + "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { "node": ">=18" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "license": "BSD-3-Clause", + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", + "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", "dependencies": { - "side-channel": "^1.1.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=0.6" + "node": ">=0.10.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -198,13 +159,12 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", - "license": "MIT", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -214,50 +174,51 @@ } }, "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/color/-/color-5.0.2.tgz", + "integrity": "sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA==", "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "color-convert": "^3.0.1", + "color-string": "^2.0.0" + }, + "engines": { + "node": ">=18" } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.2.tgz", + "integrity": "sha512-UNqkvCDXstVck3kdowtOTWROIJQwafjOfXSmddoDrXo4cewMKmusCeF22Q24zvjR8nwWib/3S/dfyzPItPEiJg==", "dependencies": { - "color-name": "1.1.3" + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=14.6" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", + "engines": { + "node": ">=12.20" } }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "node_modules/color-string": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.2.tgz", + "integrity": "sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA==", "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" } }, "node_modules/content-disposition": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", - "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -265,39 +226,18 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "engines": { "node": ">= 0.6" } @@ -306,7 +246,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", "engines": { "node": ">=6.6.0" } @@ -324,23 +263,22 @@ } }, "node_modules/cron-parser": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-3.5.0.tgz", - "integrity": "sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", "dependencies": { - "is-nan": "^1.3.2", - "luxon": "^1.26.0" + "luxon": "^3.2.1" }, "engines": { - "node": ">=0.8" + "node": ">=12.0.0" } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -351,43 +289,10 @@ } } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/denque": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", - "license": "Apache-2.0", "engines": { "node": ">=0.10" } @@ -396,26 +301,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -428,8 +321,7 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/enabled": { "version": "2.0.0", @@ -437,20 +329,18 @@ "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { "node": ">= 0.8" } }, "node_modules/engine.io": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", - "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", "dependencies": { - "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", @@ -469,7 +359,6 @@ "version": "6.6.3", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", - "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", @@ -478,23 +367,18 @@ "xmlhttprequest-ssl": "~2.1.1" } }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "engines": { + "node": ">=6.0" }, "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { + "supports-color": { "optional": true } } @@ -503,44 +387,69 @@ "version": "5.2.3", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", - "license": "MIT", "engines": { "node": ">=10.0.0" } }, - "node_modules/engine.io/node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "node_modules/engine.io/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, "engines": { "node": ">= 0.6" } }, - "node_modules/engine.io/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "engines": { - "node": ">=10.0.0" + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "engines": { + "node": ">=6.0" }, "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { + "supports-color": { "optional": true } } }, + "node_modules/engine.io/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -557,7 +466,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -568,187 +476,79 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/express": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.0.1.tgz", - "integrity": "sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==", - "license": "MIT", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.0.1", + "body-parser": "^2.2.1", "content-disposition": "^1.0.0", - "content-type": "~1.0.4", - "cookie": "0.7.1", + "content-type": "^1.0.5", + "cookie": "^0.7.1", "cookie-signature": "^1.2.1", - "debug": "4.3.6", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "^2.0.0", - "fresh": "2.0.0", - "http-errors": "2.0.0", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", - "methods": "~1.1.2", "mime-types": "^3.0.0", - "on-finished": "2.4.1", - "once": "1.4.0", - "parseurl": "~1.3.3", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "router": "^2.0.0", - "safe-buffer": "5.2.1", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", "send": "^1.1.0", - "serve-static": "^2.1.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "^2.0.0", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { "node": ">= 18" - } - }, - "node_modules/express/node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/express/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/mime-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", - "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.53.0" }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "license": "MIT" + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" }, "node_modules/finalhandler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.0.0.tgz", - "integrity": "sha512-MX6Zo2adDViYh+GcxxB1dpO43eypOGUOL12rLCOTMQv/DfIbpSJUy4oQIIZhVZkH9e+bZWKMon0XHFEju16tkQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", @@ -766,7 +566,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -780,17 +579,16 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", - "license": "MIT", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", + "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "get-proto": "^1.0.0", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", @@ -807,7 +605,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -820,7 +617,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -828,22 +624,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -863,28 +647,30 @@ } }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/iconv-lite": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz", - "integrity": "sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==", - "license": "MIT", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -903,31 +689,10 @@ "node": ">= 0.10" } }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-promise": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" }, "node_modules/is-stream": { "version": "2.0.1", @@ -949,7 +714,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "license": "MIT", "dependencies": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -970,50 +734,35 @@ "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/luxon": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.1.tgz", - "integrity": "sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", + "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/mariadb": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-3.4.0.tgz", - "integrity": "sha512-hdRPcAzs+MTxK5VG1thBW18gGTlw6yWBe9YnLB65GLo7q0fO5DWsgomIevV/pXSaWRmD3qi6ka4oSFRTExRiEQ==", - "license": "LGPL-2.1-or-later", - "dependencies": { - "@types/geojson": "^7946.0.14", - "@types/node": "^22.5.4", - "denque": "^2.1.0", - "iconv-lite": "^0.6.3", - "lru-cache": "^10.3.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/mariadb/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", + "node_modules/mariadb": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-3.4.5.tgz", + "integrity": "sha512-gThTYkhIS5rRqkVr+Y0cIdzr+GRqJ9sA2Q34e0yzmyhMCwyApf3OKAC1jnF23aSlIOqJuyaUFUcj7O1qZslmmQ==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@types/geojson": "^7946.0.16", + "@types/node": "^24.0.13", + "denque": "^2.1.0", + "iconv-lite": "^0.6.3", + "lru-cache": "^10.4.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -1022,7 +771,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1031,7 +779,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "license": "MIT", "engines": { "node": ">=18" }, @@ -1039,52 +786,44 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "engines": { "node": ">= 0.6" } }, "node_modules/node-schedule": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.0.tgz", - "integrity": "sha512-nl4JTiZ7ZQDc97MmpTq9BQjYhq7gOtoh7SiPH069gBFBj0PzD8HI7zyFs6rzqL8Y5tTiEEYLxgtbx034YPrbyQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz", + "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", "dependencies": { - "cron-parser": "^3.5.0", + "cron-parser": "^4.2.0", "long-timeout": "0.1.1", "sorted-array-functions": "^1.3.0" }, @@ -1104,7 +843,6 @@ "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1112,19 +850,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -1136,7 +865,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", "dependencies": { "wrappy": "1" } @@ -1153,18 +881,17 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "license": "MIT", - "engines": { - "node": ">=16" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/proxy-addr": { @@ -1180,12 +907,11 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -1198,44 +924,59 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", - "license": "MIT", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" } }, "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", + "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/router": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.1.0.tgz", - "integrity": "sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==", - "license": "MIT", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" @@ -1245,15 +986,28 @@ } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/safe-stable-stringify": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "license": "MIT", "engines": { "node": ">=10" } @@ -1261,23 +1015,20 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/send": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.1.0.tgz", - "integrity": "sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==", - "license": "MIT", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "dependencies": { "debug": "^4.3.5", - "destroy": "^1.2.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", - "fresh": "^0.5.2", + "fresh": "^2.0.0", "http-errors": "^2.0.0", - "mime-types": "^2.1.35", + "mime-types": "^3.0.1", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", @@ -1287,98 +1038,29 @@ "node": ">= 18" } }, - "node_modules/send/node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/send/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/serve-static": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.1.0.tgz", - "integrity": "sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==", - "license": "MIT", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", - "send": "^1.0.0" + "send": "^1.2.0" }, "engines": { "node": ">= 18" } }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -1397,7 +1079,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -1413,7 +1094,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -1431,7 +1111,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -1446,14 +1125,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, "node_modules/socket.io": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", @@ -1472,19 +1143,34 @@ } }, "node_modules/socket.io-adapter": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz", - "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "dependencies": { "debug": "~4.3.4", - "ws": "~8.11.0" + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/socket.io-client": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", - "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", @@ -1495,6 +1181,22 @@ "node": ">=10.0.0" } }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/socket.io-parser": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", @@ -1507,6 +1209,77 @@ "node": ">=10.0.0" } }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/socket.io/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/socket.io/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/sorted-array-functions": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", @@ -1521,20 +1294,19 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "engines": { "node": ">= 0.8" } }, "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "node_modules/text-hex": { @@ -1546,7 +1318,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", "engines": { "node": ">=0.6" } @@ -1555,16 +1326,14 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/type-is": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.0.tgz", - "integrity": "sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==", - "license": "MIT", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", @@ -1574,37 +1343,15 @@ "node": ">= 0.6" } }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.0.tgz", - "integrity": "sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==", - "license": "MIT", - "dependencies": { - "mime-db": "^1.53.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==" }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1614,14 +1361,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/uuid": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", @@ -1630,7 +1369,6 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], - "license": "MIT", "bin": { "uuid": "dist/esm/bin/uuid" } @@ -1644,13 +1382,12 @@ } }, "node_modules/winston": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", - "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", - "license": "MIT", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.18.3.tgz", + "integrity": "sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww==", "dependencies": { "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", + "@dabh/diagnostics": "^2.0.8", "async": "^3.2.3", "is-stream": "^2.0.0", "logform": "^2.7.0", @@ -1669,7 +1406,6 @@ "version": "4.9.0", "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "license": "MIT", "dependencies": { "logform": "^2.7.0", "readable-stream": "^3.6.2", @@ -1679,49 +1415,21 @@ "node": ">= 12.0.0" } }, - "node_modules/winston-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/winston/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { diff --git a/components/ILIAS/Chatroom/chat/package.json b/components/ILIAS/Chatroom/chat/package.json index becfc00f2aab..e13ced4c6e34 100755 --- a/components/ILIAS/Chatroom/chat/package.json +++ b/components/ILIAS/Chatroom/chat/package.json @@ -3,7 +3,7 @@ "description": "ILIAS CHAT", "version": "11.0.0", "dependencies": { - "express": "^5.0.1", + "express": "^5.2.1", "mariadb": "^3.4.0", "node-schedule": "^2.1.0", "socket.io": "^4.8.1", diff --git a/components/ILIAS/Chatroom/classes/Bans/BannedUsersTable.php b/components/ILIAS/Chatroom/classes/Bans/BannedUsersTable.php index f99e2b5a4742..da0b437f859a 100644 --- a/components/ILIAS/Chatroom/classes/Bans/BannedUsersTable.php +++ b/components/ILIAS/Chatroom/classes/Bans/BannedUsersTable.php @@ -30,6 +30,7 @@ use ilLanguage; use ilCtrlInterface; use ILIAS\HTTP\GlobalHttpState; +use ILIAS\Data\Range; class BannedUsersTable implements UI\Component\Table\DataRetrieval { @@ -62,8 +63,9 @@ public function getComponent(): UI\Component\Table\Data return $this->ui_factory ->table() ->data($this, $this->lng->txt('ban_table_title'), $columns) - ->withId(self::class . '_' . $this->room_id) + ->withId(str_replace('\\', '', self::class) . '_' . $this->room_id) ->withOrder(new \ILIAS\Data\Order('datetime', \ILIAS\Data\Order::DESC)) + ->withRange(new Range(0, 50)) ->withActions($actions) ->withRequest($this->request); } diff --git a/components/ILIAS/Chatroom/classes/admingui/class.ilChatroomAdminViewGUI.php b/components/ILIAS/Chatroom/classes/admingui/class.ilChatroomAdminViewGUI.php index 8d1a969f2cfa..382b21f855f5 100755 --- a/components/ILIAS/Chatroom/classes/admingui/class.ilChatroomAdminViewGUI.php +++ b/components/ILIAS/Chatroom/classes/admingui/class.ilChatroomAdminViewGUI.php @@ -150,7 +150,7 @@ public function saveClientSettings(): void public function deliverDocumentation(): never { - $this->redirectIfNoPermission(['visible','read']); + $this->redirectIfNoPermission(['read']); $this->file_delivery->delivery()->inline( ILIAS\Filesystem\Stream\Streams::ofResource( @@ -163,7 +163,7 @@ public function deliverDocumentation(): never public function clientsettings(?ilPropertyFormGUI $form = null): void { - $this->redirectIfNoPermission(['visible','read']); + $this->redirectIfNoPermission(['read']); $this->defaultActions(); $this->gui->switchToVisibleMode(); diff --git a/components/ILIAS/Chatroom/classes/class.ilChatroomXMLParser.php b/components/ILIAS/Chatroom/classes/class.ilChatroomXMLParser.php index dec2889a94e2..8e7756c299f0 100755 --- a/components/ILIAS/Chatroom/classes/class.ilChatroomXMLParser.php +++ b/components/ILIAS/Chatroom/classes/class.ilChatroomXMLParser.php @@ -72,6 +72,11 @@ public function setHandlers($a_xml_parser): void public function handlerBeginTag(XMLParser $a_xml_parser, string $a_name, array $a_attribs): void { switch ($a_name) { + case 'Body': + $this->timestamp = null; + $this->message = null; + break; + case 'Messages': $this->in_messages = true; break; @@ -130,9 +135,6 @@ public function handlerEndTag(XMLParser $a_xml_parser, string $a_name): void break; case 'Message': - break; - - case 'Messages': if ($this->isSameInstallation()) { $message = json_decode($this->message, true, 512, JSON_THROW_ON_ERROR); if (is_array($message)) { @@ -142,8 +144,9 @@ public function handlerEndTag(XMLParser $a_xml_parser, string $a_name): void $this->room->addHistoryEntry($message); } } + break; - $this->timestamp = 0; + case 'Messages': $this->in_messages = false; break; diff --git a/components/ILIAS/Chatroom/phpunit.xml b/components/ILIAS/Chatroom/phpunit.xml index dd3871d35d69..c4683eec1534 100755 --- a/components/ILIAS/Chatroom/phpunit.xml +++ b/components/ILIAS/Chatroom/phpunit.xml @@ -10,6 +10,7 @@ displayDetailsOnTestsThatTriggerDeprecations="true" displayDetailsOnTestsThatTriggerNotices="true" displayDetailsOnSkippedTests="true" + displayDetailsOnPhpunitDeprecations="true" backupGlobals="false" bootstrap="./tests/bootstrap.php" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"> diff --git a/components/ILIAS/Chatroom/src/UserSettings/AllowOnScreenChatConversations.php b/components/ILIAS/Chatroom/src/UserSettings/AllowOnScreenChatConversations.php index b943417c0618..77db76a2f30a 100644 --- a/components/ILIAS/Chatroom/src/UserSettings/AllowOnScreenChatConversations.php +++ b/components/ILIAS/Chatroom/src/UserSettings/AllowOnScreenChatConversations.php @@ -141,6 +141,10 @@ public function persistUserInput( return $user; } + if ($input === '1' || $input === '0') { + $input = $input === '1'; + } + if (\is_bool($input)) { $user->setPref($this->getIdentifier(), $input ? 'y' : 'n'); $this->updateChatServer($user->getId(), $input); diff --git a/components/ILIAS/Chatroom/templates/default/images/emoticons_trigger.png b/components/ILIAS/Chatroom/templates/default/images/emoticons_trigger.png deleted file mode 100755 index b2a8fb2c8192..000000000000 Binary files a/components/ILIAS/Chatroom/templates/default/images/emoticons_trigger.png and /dev/null differ diff --git a/components/ILIAS/Chatroom/templates/default/images/overlay.png b/components/ILIAS/Chatroom/templates/default/images/overlay.png deleted file mode 100755 index a4391396a9d6..000000000000 Binary files a/components/ILIAS/Chatroom/templates/default/images/overlay.png and /dev/null differ diff --git a/components/ILIAS/CmiXapi/classes/XapiProxy/XapiProxyRequest.php b/components/ILIAS/CmiXapi/classes/XapiProxy/XapiProxyRequest.php index 81bf22502cf4..4f31e4a27b17 100755 --- a/components/ILIAS/CmiXapi/classes/XapiProxy/XapiProxyRequest.php +++ b/components/ILIAS/CmiXapi/classes/XapiProxy/XapiProxyRequest.php @@ -23,6 +23,7 @@ use GuzzleHttp\Psr7\Request; use GuzzleHttp\Psr7\Uri; use ILIAS\DI\Container; +use GuzzleHttp\Psr7\Response; class XapiProxyRequest { @@ -250,13 +251,13 @@ private function handleProxy(\Psr\Http\Message\RequestInterface $request, $fakeP $body = $request->getBody()->getContents(); // Default request ausführen - $responseDefault = $this->sendCurlRequest($upstreamDefault, $authDefault, $request->getMethod(), $body); + $responseDefault = $this->sendCurlRequest($upstreamDefault, $authDefault, $request, $body); // Falls Fallback definiert, zweites Ziel testen $responseFallback = null; if ($hasFallback) { $upstreamFallback = $endpointFallback . $cmd; - $responseFallback = $this->sendCurlRequest($upstreamFallback, $authFallback, $request->getMethod(), $body); + $responseFallback = $this->sendCurlRequest($upstreamFallback, $authFallback, $request, $body); } // Reaktionen auswerten @@ -280,15 +281,43 @@ private function handleProxy(\Psr\Http\Message\RequestInterface $request, $fakeP } } - private function sendCurlRequest(string $url, string $authHeader, string $method, string $body = ''): \GuzzleHttp\Psr7\Response + private function sendCurlRequest(string $url, string $authHeader, \Psr\Http\Message\RequestInterface $request, string $body = ''): \GuzzleHttp\Psr7\Response { + $method = strtoupper($request->getMethod()); $ch = curl_init($url); $headers = [ "Authorization: $authHeader", - "X-Experience-API-Version: 1.0.3", - "Accept: application/json", - "Content-Type: application/json" +// "X-Experience-API-Version: 1.0.3", +// "Accept: application/json", +// "Content-Type: application/json", + "Cache-Control: no-cache, no-store, must-revalidate", + "Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With", + "Pragma: no-cache", ]; + if ($request->hasHeader('X-Experience-API-Version')) { + $headers[]= "X-Experience-API-Version: " . $request->getHeader('X-Experience-API-Version')[0]; + } + if ($request->hasHeader('Origin')) { + $headers[] = "Origin: " . $request->getHeader('Origin')[0]; + $headers[] = "Access-Control-Allow-Origin: " . $request->getHeader('Origin')[0]; + $headers[] = "Content-Security-Policy: frame-ancestors 'self' " . $request->getHeader('Origin')[0]; + } + if ($request->hasHeader('Referrer')) { + $headers[] = "Referrer: " . $request->getHeader('Referrer')[0]; + } + if ($request->hasHeader('Connection')) { + $headers[] = "Connection: " . $request->getHeader('Connection')[0]; + } +// if ($request->hasHeader('Content-Length')) { +// $contentLength = $request->getHeader('Content-Length'); +// if (is_array($contentLength) && $contentLength[0] != '') { +// $headers[] = "Content-Length: " . $contentLength[0]; +// } +// } + if ($request->hasHeader('Content-Type')) { + $headers[] = "Content-Type: " . $request->getHeader('Content-Type')[0]; + $headers[] = "Accept: application/json"; + } curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, @@ -297,6 +326,7 @@ private function sendCurlRequest(string $url, string $authHeader, string $method CURLOPT_TIMEOUT => 30, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_HTTPHEADER => $headers, +// CURLOPT_FAILONERROR => false, CURLOPT_CUSTOMREQUEST => strtoupper($method), ]); @@ -314,50 +344,92 @@ private function sendCurlRequest(string $url, string $authHeader, string $method $rawBody = ''; } - return new \GuzzleHttp\Psr7\Response($statusCode, [], $rawBody); - } - private function createProxyRequest(\Psr\Http\Message\RequestInterface $request, \GuzzleHttp\Psr7\Uri $uri, string $auth, string $body): \GuzzleHttp\Psr7\Request - { + //Headers to send to content $headers = array( 'Cache-Control' => 'no-cache, no-store, must-revalidate', - 'Authorization' => $auth + 'Content-Type' => "application/json", + 'Accept' => "application/json" ); if ($request->hasHeader('X-Experience-API-Version')) { $headers['X-Experience-API-Version'] = $request->getHeader('X-Experience-API-Version'); } - if ($request->hasHeader('Referrer')) { - $headers['Referrer'] = $request->getHeader('Referrer'); - } +// if ($request->hasHeader('Referrer')) { +// $headers['Referrer'] = $request->getHeader('Referrer'); +// } - if ($request->hasHeader('Content-Type')) { - $headers['Content-Type'] = $request->getHeader('Content-Type'); - } +// if ($request->hasHeader('Content-Type')) { +// $headers['Content-Type'] = $request->getHeader('Content-Type'); +// } if ($request->hasHeader('Origin')) { - $headers['Origin'] = $request->getHeader('Origin'); +// $headers['Origin'] = $request->getHeader('Origin'); + $headers['Access-Control-Allow-Origin'] = $request->getHeader('Origin'); + //$headers["Content-Security-Policy"] = "frame-ancestors 'self' " . $request->getHeader('Origin')[0]; } - if ($request->hasHeader('Content-Length')) { - $contentLength = $request->getHeader('Content-Length'); - if (is_array($contentLength) && $contentLength[0] === '') { - $contentLength = array(0); - } elseif ($contentLength === '') { - $contentLength = array(0); - } - $headers['Content-Length'] = $contentLength; - } +// if ($request->hasHeader('Content-Length')) { +// $contentLength = $request->getHeader('Content-Length'); +// if (is_array($contentLength) && $contentLength[0] === '') { +// $contentLength = array(0); +// } elseif ($contentLength === '') { +// $contentLength = array(0); +// } +// $headers['Content-Length'] = $contentLength; +// } - if ($request->hasHeader('Connection')) { - $headers['Connection'] = $request->getHeader('Connection'); - } +// if ($request->hasHeader('Connection')) { +// $headers['Connection'] = $request->getHeader('Connection'); +// } - //$this->xapiproxy->log()->debug($this->msg($body)); - $req = new Request(strtoupper($request->getMethod()), $uri, $headers, $body); - return $req; + return new \GuzzleHttp\Psr7\Response($statusCode, $headers, $rawBody); } + +// private function createProxyRequest(\Psr\Http\Message\RequestInterface $request, \GuzzleHttp\Psr7\Uri $uri, string $auth, string $body): \GuzzleHttp\Psr7\Request +// { +// $headers = array( +// 'Cache-Control' => 'no-cache, no-store, must-revalidate', +// 'Authorization' => $auth +// ); +// +// if ($request->hasHeader('X-Experience-API-Version')) { +// $headers['X-Experience-API-Version'] = $request->getHeader('X-Experience-API-Version'); +// } +// +// if ($request->hasHeader('Referrer')) { +// $headers['Referrer'] = $request->getHeader('Referrer'); +// } +// +// if ($request->hasHeader('Content-Type')) { +// $headers['Content-Type'] = $request->getHeader('Content-Type'); +// } +// +// if ($request->hasHeader('Origin')) { +// $headers['Origin'] = $request->getHeader('Origin'); +// } +// +// if ($request->hasHeader('Content-Length')) { +// $contentLength = $request->getHeader('Content-Length'); +// if (is_array($contentLength) && $contentLength[0] === '') { +// $contentLength = array(0); +// } elseif ($contentLength === '') { +// $contentLength = array(0); +// } +// $headers['Content-Length'] = $contentLength; +// } +// +// if ($request->hasHeader('Connection')) { +// $headers['Connection'] = $request->getHeader('Connection'); +// } +// +// //$this->xapiproxy->log()->debug($this->msg($body)); +// +// $req = new Request(strtoupper($request->getMethod()), $uri, $headers, $body); +// +// return $req; +// } } diff --git a/components/ILIAS/CmiXapi/classes/XapiProxy/XapiProxyResponse.php b/components/ILIAS/CmiXapi/classes/XapiProxy/XapiProxyResponse.php index 28236dc8da44..d228bc842646 100755 --- a/components/ILIAS/CmiXapi/classes/XapiProxy/XapiProxyResponse.php +++ b/components/ILIAS/CmiXapi/classes/XapiProxy/XapiProxyResponse.php @@ -39,20 +39,11 @@ public function __construct(XapiProxy $xapiproxy) public function checkResponse(\GuzzleHttp\Psr7\Response $response, string $endpoint): bool { - if ($response['state'] == 'fulfilled') { - $status = $response['value']->getStatusCode(); - if ($status === 200 || $status === 204 || $status === 404) { - return true; - } else { - $this->xapiproxy->log()->error("LRS error {$endpoint}: " . $response['value']->getBody()); - return false; - } + $status = $response->getStatusCode(); + if ($status === 200 || $status === 204 || $status === 404) { + return true; } else { - try { - $this->xapiproxy->log()->error("Connection error {$endpoint}: " . $response['reason']->getMessage()); - } catch (\Exception $e) { - $this->xapiproxy->log()->error("error {$endpoint}:" . $e->getMessage()); - } + $this->xapiproxy->log()->error("LRS error {$endpoint}: " . $response->getBody()); return false; } } diff --git a/components/ILIAS/CmiXapi/resources/xapiproxy.php b/components/ILIAS/CmiXapi/resources/xapiproxy.php index d86acf0a20c1..4ecba33a884f 100755 --- a/components/ILIAS/CmiXapi/resources/xapiproxy.php +++ b/components/ILIAS/CmiXapi/resources/xapiproxy.php @@ -61,6 +61,9 @@ require_once '../vendor/composer/vendor/autoload.php'; //instead of DataService \ilContext::init(\ilContext::CONTEXT_SCORM); +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); + ilInitialisation::initILIAS(); // DataService::initIlias($client); $dic = $GLOBALS['DIC']; diff --git a/components/ILIAS/Component/classes/Setup/class.ilComponentInfoDefinitionProcessor.php b/components/ILIAS/Component/classes/Setup/class.ilComponentInfoDefinitionProcessor.php index f8510d6d7186..36d80da29e9a 100755 --- a/components/ILIAS/Component/classes/Setup/class.ilComponentInfoDefinitionProcessor.php +++ b/components/ILIAS/Component/classes/Setup/class.ilComponentInfoDefinitionProcessor.php @@ -59,6 +59,8 @@ public function beginTag(string $name, array $attributes): void $type = "components/ILIAS"; } elseif ($name === "pluginslot") { $type = null; + } elseif ($name === "component") { + $type = $attributes["type"] ?? null; } else { return; } diff --git a/components/ILIAS/Component/classes/class.ilComponentDefinitionReader.php b/components/ILIAS/Component/classes/class.ilComponentDefinitionReader.php index a067cad4fe47..87322786a85f 100755 --- a/components/ILIAS/Component/classes/class.ilComponentDefinitionReader.php +++ b/components/ILIAS/Component/classes/class.ilComponentDefinitionReader.php @@ -112,11 +112,17 @@ public function endTag($_, string $name): void */ protected function getComponents(): \Iterator { - foreach ($this->getComponentInfo("components/ILIAS", "module.xml") as $i) { - yield $i; - } - foreach ($this->getComponentInfo("components/ILIAS", "service.xml") as $i) { - yield $i; + foreach (glob("components/*") as $component_namespace) { + $short_namespace = basename($component_namespace); + foreach ($this->getComponentInfo("components/" . $short_namespace, "module.xml") as $i) { + yield $i; + } + foreach ($this->getComponentInfo("components/" . $short_namespace, "service.xml") as $i) { + yield $i; + } + foreach ($this->getComponentInfo("components/" . $short_namespace, "component.xml") as $i) { + yield $i; + } } } diff --git a/components/ILIAS/Component/classes/class.ilComponentInfo.php b/components/ILIAS/Component/classes/class.ilComponentInfo.php index 766d82563865..9d21d3958f53 100755 --- a/components/ILIAS/Component/classes/class.ilComponentInfo.php +++ b/components/ILIAS/Component/classes/class.ilComponentInfo.php @@ -43,7 +43,7 @@ public function __construct( string $name, array &$pluginslots ) { - if (!in_array($type, self::TYPES)) { + if (!in_array($type, self::TYPES) && preg_match('/components\/(.+)/', $type) !== 1) { throw new \InvalidArgumentException( "Invalid component type: $type" ); diff --git a/components/ILIAS/Component/classes/class.ilPlugin.php b/components/ILIAS/Component/classes/class.ilPlugin.php index 6bad59bde508..c44dc9c177f9 100755 --- a/components/ILIAS/Component/classes/class.ilPlugin.php +++ b/components/ILIAS/Component/classes/class.ilPlugin.php @@ -114,15 +114,22 @@ public function getVersion(): string } /** - * Only very little classes seem to care about this: - * - Services/COPage/classes/class.ilPCPlugged.php - * - Modules/DataCollection/classes/Fields/class.ilDclFieldFactory.php + * @description Return the directory provided by ilPluginInfo, please note that this is a absolute path. */ public function getDirectory(): string { return $this->getPluginInfo()->getPath(); } + public function getRelativeDirectory(): string + { + return str_replace( + ILIAS_ABSOLUTE_PATH . "/public/", + "", + realpath($this->getPluginInfo()->getPath()) + ); + } + /** * Only very little classes seem to care about this: * - Services/Component/classes/class.ilObjComponentSettingsGUI.php diff --git a/components/ILIAS/Component/src/Resource/PublicAssetManager.php b/components/ILIAS/Component/src/Resource/PublicAssetManager.php index 4a071f96b646..168061518924 100644 --- a/components/ILIAS/Component/src/Resource/PublicAssetManager.php +++ b/components/ILIAS/Component/src/Resource/PublicAssetManager.php @@ -25,7 +25,7 @@ */ class PublicAssetManager { - public const REGEXP = '%^(/\w+|\w+[\-.]\w+)+$%'; + public const REGEXP = '%^/[A-Za-z0-9_]+(?:[.-][A-Za-z0-9_]+)*(?:/[A-Za-z0-9_]+(?:[.-][A-Za-z0-9_]+)*)*$%'; public const DONT_PURGE = ["data", "Customizing"]; @@ -69,6 +69,8 @@ protected function insertInto(array &$assets, array $path, PublicAsset $asset): ); } + + /** * @param string $ilias_base full path to ILIAS base folder * @param string $target full path to public folder @@ -86,7 +88,7 @@ public function buildPublicFolder(string $ilias_base, string $target): void ); } - $this->purge($target, array_map(fn($v) => $target . "/" . $v, self::DONT_PURGE)); + $this->purge($target, array_map(fn(string $v): string => $target . "/" . $v, self::DONT_PURGE)); $this->makeDir($target); $this->buildPublicFolderRecursivelyArray($ilias_base, $target, $this->assets); } diff --git a/components/ILIAS/Component/tests/Resource/PublicAssetManagerTest.php b/components/ILIAS/Component/tests/Resource/PublicAssetManagerTest.php index 5f0d6a6559a9..13894fa20239 100644 --- a/components/ILIAS/Component/tests/Resource/PublicAssetManagerTest.php +++ b/components/ILIAS/Component/tests/Resource/PublicAssetManagerTest.php @@ -20,15 +20,16 @@ namespace ILIAS\Component\Tests\Resource; +use ILIAS\Component\Resource\PublicAsset; use PHPUnit\Framework\TestCase; -use ILIAS\Component\Dependencies\Name; use ILIAS\Component\Resource as R; +use PHPUnit\Framework\Attributes\DataProvider; class PublicAssetManagerTest extends TestCase { protected R\PublicAssetManager $manager; - protected function newPublicAsset($source, $target) + protected function newPublicAsset($source, $target): PublicAsset { return new class ($source, $target) implements R\PublicAsset { public function __construct( @@ -74,7 +75,34 @@ protected function makeDir(string $path): void }; } - public function testTargetCanOnlyBeUsedOnce() + #[DataProvider('provideValidBasePathData')] + public function testDifferentBasePaths(string $base_path): void + { + $this->assertIsString($base_path); + $this->manager->buildPublicFolder($base_path, '/target'); + } + + public static function provideValidBasePathData(): \Iterator + { + yield ['/var/www/ilias']; + yield ['/var/www/html']; + yield ['/var/www/html/ilias']; + yield ['/srv/ilias']; + yield ['/srv/ilias10']; + yield ['/srv/ilias-10']; + yield ['/srv/ilias_10']; + yield ['/srv/ilias.10']; + yield ['/base']; + yield ['/base/path']; + yield ['/base-path']; + yield ['/base.path']; + yield ['/var/www/vhosts/bl-a.blubs/httpdoc']; + yield ['/var/www/v_hosts/bl-a.blubs/httpdoc']; + yield ['/var/www/v_hosts/bl-a.blubs_one/httpdoc']; + yield ['/srv/ilias-build/work/ilias-10.4.0']; + } + + public function testTargetCanOnlyBeUsedOnce(): void { $this->expectException(\LogicException::class); @@ -84,7 +112,7 @@ public function testTargetCanOnlyBeUsedOnce() $this->manager->addAssets($asset1, $asset2); } - public function testTargetCanNotBeWithinOtherTarget1() + public function testTargetCanNotBeWithinOtherTarget1(): void { $this->expectException(\LogicException::class); @@ -94,7 +122,7 @@ public function testTargetCanNotBeWithinOtherTarget1() $this->manager->addAssets($asset1, $asset2); } - public function testTargetCanNotBeWithinOtherTarget2() + public function testTargetCanNotBeWithinOtherTarget2(): void { $this->expectException(\LogicException::class); @@ -104,7 +132,7 @@ public function testTargetCanNotBeWithinOtherTarget2() $this->manager->addAssets($asset1, $asset2); } - public function testBuildAssetFolderEmpty() + public function testBuildAssetFolderEmpty(): void { $this->manager->buildPublicFolder("/base", "/target"); $this->assertEquals([], $this->manager->copied); @@ -112,7 +140,7 @@ public function testBuildAssetFolderEmpty() $this->assertEquals(["/target"], $this->manager->madeDir); } - public function testBuildAssetFolder() + public function testBuildAssetFolder(): void { $this->manager->addAssets( $this->newPublicAsset("source1", "target1"), @@ -123,7 +151,10 @@ public function testBuildAssetFolder() $this->assertEquals(["/public"], $this->manager->purged); $this->assertEquals(["/public", "/public/second"], $this->manager->madeDir); - $this->assertEquals([["/base/source1", "/public/target1"], ["/base/source2", "/public/second/target"]], $this->manager->copied); + $this->assertEquals( + [["/base/source1", "/public/target1"], ["/base/source2", "/public/second/target"]], + $this->manager->copied + ); } public function testValidFolderPaths(): void @@ -135,36 +166,34 @@ public function testValidFolderPaths(): void $this->manager->buildPublicFolder("/srv/demo10.ilias.de", "/public"); } - #[\PHPUnit\Framework\Attributes\DataProvider('provideInvalidFolderPathData')] + #[DataProvider('provideInvalidFolderPathData')] public function testInvalidFolderPaths(string $ilias_base, string $target): void { $this->expectException(\InvalidArgumentException::class); $this->manager->buildPublicFolder($ilias_base, $target); } - public static function provideInvalidFolderPathData(): array + public static function provideInvalidFolderPathData(): \Iterator { - return [ - 'base - missing leading slash' => ['base', '/public'], - 'base - extra trailing slash' => ['/base/', '/public'], - 'base - dot only' => ['.', '/public'], - 'base - dash only' => ['-', '/public'], - 'base - invalid trailing dash' => ['/base/demo-', '/public'], - 'base - invalid trailing dot' => ['/base/demo.', '/public'], - 'base - invalid leading dash' => ['/base/.demo', '/public'], - 'base - invalid leading dot' => ['/base/-demo', '/public'], - 'base - invalid dot sub directory' => ['/./test', '/public'], - 'base - invalid dash sub directory' => ['/-/test', '/public'], - 'target - missing leading slash' => ['/base', 'public'], - 'target - extra trailing slash' => ['/base', '/public/'], - 'target - dot only' => ['/base', '.'], - 'target - dash only' => ['/base', '-'], - 'target - invalid trailing dash' => ['/base', '/public.'], - 'target - invalid trailing dot' => ['/base', '/public-'], - 'target - invalid leading dash' => ['/base', '/.public'], - 'target - invalid leading dot' => ['/base', '/-public'], - 'target - invalid dot sub directory' => ['/base', '/./public'], - 'target - invalid dash sub directory' => ['/base', '/-/public'], - ]; + yield 'base - missing leading slash' => ['base', '/public']; + yield 'base - extra trailing slash' => ['/base/', '/public']; + yield 'base - dot only' => ['.', '/public']; + yield 'base - dash only' => ['-', '/public']; + yield 'base - invalid trailing dash' => ['/base/demo-', '/public']; + yield 'base - invalid trailing dot' => ['/base/demo.', '/public']; + yield 'base - invalid leading dash' => ['/base/.demo', '/public']; + yield 'base - invalid leading dot' => ['/base/-demo', '/public']; + yield 'base - invalid dot sub directory' => ['/./test', '/public']; + yield 'base - invalid dash sub directory' => ['/-/test', '/public']; + yield 'target - missing leading slash' => ['/base', 'public']; + yield 'target - extra trailing slash' => ['/base', '/public/']; + yield 'target - dot only' => ['/base', '.']; + yield 'target - dash only' => ['/base', '-']; + yield 'target - invalid trailing dash' => ['/base', '/public.']; + yield 'target - invalid trailing dot' => ['/base', '/public-']; + yield 'target - invalid leading dash' => ['/base', '/.public']; + yield 'target - invalid leading dot' => ['/base', '/-public']; + yield 'target - invalid dot sub directory' => ['/base', '/./public']; + yield 'target - invalid dash sub directory' => ['/base', '/-/public']; } } diff --git a/components/ILIAS/Conditions/classes/Export/class.ilConditionsImporter.php b/components/ILIAS/Conditions/classes/Export/class.ilConditionsImporter.php index 54a08c2469e0..366630f64886 100644 --- a/components/ILIAS/Conditions/classes/Export/class.ilConditionsImporter.php +++ b/components/ILIAS/Conditions/classes/Export/class.ilConditionsImporter.php @@ -59,9 +59,9 @@ public function importXmlRepresentation( protected function determineRootIdOfImportTree( ilImportMapping $mapping ): int { - // $root_id relies on the fact that the smallest obj_id belongs to the first imported + // $root_id relies on the fact that the first obj_id belongs to the first imported // object, wich is the root of the imported object tree - return (int) min(array_keys($mapping->getAllMappings()['components/ILIAS/Container']['objs'])); + return array_keys($mapping->getAllMappings()['components/ILIAS/Container']['objs'])[0]; } protected function updateInfosWithMapping( diff --git a/components/ILIAS/Conditions/classes/class.ilConditionHandler.php b/components/ILIAS/Conditions/classes/class.ilConditionHandler.php index 0cdac651201a..a2cbccb60b87 100755 --- a/components/ILIAS/Conditions/classes/class.ilConditionHandler.php +++ b/components/ILIAS/Conditions/classes/class.ilConditionHandler.php @@ -144,13 +144,10 @@ public static function _isReferenceHandlingOptional(string $a_type): bool return $a_type === 'st'; } - /** - * Lookup hidden status (also take container control into account) - */ - public static function lookupEffectiveHiddenStatusByTarget(int $a_target_ref_id): bool + + private static function getConditionController(int $a_target_ref_id): ?ilConditionControllerInterface { global $DIC; - $obj_definition = $DIC['objDefinition']; $tree = $DIC->repositoryTree(); @@ -162,15 +159,31 @@ public static function lookupEffectiveHiddenStatusByTarget(int $a_target_ref_id) $class = $obj_definition->getClassName($parent_type); $class_name = "il" . $class . "ConditionController"; $location = $obj_definition->getLocation($parent_type); + $path_to_controller = implode('/', [ + ILIAS_ABSOLUTE_PATH, + $location, + "class." . $class_name . ".php" + ]); // if yes, get from parent - if ($class !== "" && is_file($location . "/class." . $class_name . ".php")) { - /** @var ilConditionControllerInterface $controller */ + if ($class !== "" && is_file($path_to_controller)) { $controller = new $class_name(); if ($controller->isContainerConditionController($parent_ref_id)) { - return (bool) $controller->getConditionSetForRepositoryObject($a_target_ref_id)->getHiddenStatus(); + return $controller; } } + return null; + } + + /** + * Lookup hidden status (also take container control into account) + */ + public static function lookupEffectiveHiddenStatusByTarget(int $a_target_ref_id): bool + { + $controller = self::getConditionController($a_target_ref_id); + if ($controller !== null) { + return (bool) $controller->getConditionSetForRepositoryObject($a_target_ref_id)->getHiddenStatus(); + } return self::lookupPersistedHiddenStatusByTarget($a_target_ref_id); } @@ -427,7 +440,6 @@ public function getOperatorsByTriggerType(string $a_type): array } $class = $objDefinition->getClassName($a_type); - $location = $objDefinition->getLocation($a_type); $full_class = "ilObj" . $class . "Access"; $reflection = new ReflectionClass($full_class); if ($reflection->implementsInterface('ilConditionHandling')) { @@ -622,44 +634,16 @@ public static function _getEffectiveConditionsOfTarget( int $a_target_obj_id, string $a_target_type = "" ): array { - global $DIC; - - if ($a_target_ref_id === 0) { - return []; - } - - $obj_definition = $DIC["objDefinition"]; - $tree = $DIC->repositoryTree(); - - // get type if no type given - if ($a_target_type === "") { - $a_target_type = ilObject::_lookupType($a_target_obj_id); - } - - // check if parent takes over control of condition - $parent_ref_id = $tree->getParentId($a_target_ref_id); - $parent_obj_id = ilObject::_lookupObjId($parent_ref_id); - $parent_type = ilObject::_lookupType($parent_obj_id); - - $class = $obj_definition->getClassName($parent_type); - $class_name = "il" . $class . "ConditionController"; - $location = $obj_definition->getLocation($parent_type); - - // if yes, get from parent - if ($class !== "" && is_file($location . "/class." . $class_name . ".php") - && $a_target_type === ilObject::_lookupType($a_target_ref_id, true)) { - /** @var ilConditionControllerInterface $controller */ - $controller = new $class_name(); - if ($controller->isContainerConditionController($parent_ref_id)) { - /** @var ilConditionSet $set */ - $set = $controller->getConditionSetForRepositoryObject($a_target_ref_id); - - // convert to old structure - $cond = []; - foreach ($set->getConditions() as $c) { - $obligatory = $set->getAllObligatory() || $c->getObligatory(); - $trigger = $c->getTrigger(); - $cond[] = array( + $controller = self::getConditionController($a_target_ref_id); + if ($controller !== null) { + /** @var ilConditionSet $set */ + $set = $controller->getConditionSetForRepositoryObject($a_target_ref_id); + // convert to old structure + $cond = []; + foreach ($set->getConditions() as $c) { + $obligatory = $set->getAllObligatory() || $c->getObligatory(); + $trigger = $c->getTrigger(); + $cond[] = [ "target_ref_id" => $a_target_ref_id, "target_obj_id" => $a_target_obj_id, "target_type" => $a_target_type, @@ -672,10 +656,9 @@ public static function _getEffectiveConditionsOfTarget( "obligatory" => $obligatory, "num_obligatory" => $set->getNumObligatory(), "hidden_status" => $set->getHiddenStatus() - ); - } - return $cond; + ]; } + return $cond; } return self::_getPersistedConditionsOfTarget($a_target_ref_id, $a_target_obj_id, $a_target_type); @@ -849,7 +832,6 @@ public static function _checkCondition(array $condition, int $a_usr_id = 0): boo ); } $class = $objDefinition->getClassName($condition['trigger_type']); - $location = $objDefinition->getLocation($condition['trigger_type']); $full_class = "ilObj" . $class . "Access"; if (!(is_a($full_class, "ilConditionHandling", true))) { diff --git a/components/ILIAS/Conditions/classes/class.ilConditionHandlerGUI.php b/components/ILIAS/Conditions/classes/class.ilConditionHandlerGUI.php index 86fc1acde723..6f16750cb8ec 100755 --- a/components/ILIAS/Conditions/classes/class.ilConditionHandlerGUI.php +++ b/components/ILIAS/Conditions/classes/class.ilConditionHandlerGUI.php @@ -1190,7 +1190,7 @@ protected function initRangeConditionInputItem(int $trigger_ref_id, int $trigger )->withAdditionalTransformation( $this->refinery->custom()->constraint( function ($min_max) { - return $min_max['min'] < $min_max['max']; + return $min_max['min'] <= $min_max['max']; }, $this->lng->txt('precondition_operator_range_err_min_max') ) diff --git a/components/ILIAS/Contact/BuddySystem/classes/Tables/RelationsTable.php b/components/ILIAS/Contact/BuddySystem/classes/Tables/RelationsTable.php index 3dbf7cbad536..e814e2dcaa75 100644 --- a/components/ILIAS/Contact/BuddySystem/classes/Tables/RelationsTable.php +++ b/components/ILIAS/Contact/BuddySystem/classes/Tables/RelationsTable.php @@ -21,15 +21,11 @@ namespace ILIAS\Contact\BuddySystem\Tables; use ILIAS\Contact\TableRows; -use ILIAS\UI\Component\Table\DataRow; use ilBuddySystemArrayCollection; use ILIAS\UI\Component\Component; use ilBuddySystemRelationState; use ILIAS\UI\Component\Table\Action\Action; -use ilCtrlInterface; -use ILIAS\UI\Component\Table\DataRowBuilder; use ILIAS\Data\Range; -use ILIAS\Data\Order; use ilObjUser; use ilStr; use ilUserUtil; @@ -42,21 +38,34 @@ use ILIAS\UI\Component\Input\Container\Filter\Standard as Filter; use Closure; use ILIAS\HTTP\GlobalHttpState as Http; -use Generator; +/** + * @phpstan-type RelationRecord array{ + * user_id: int, + * public_name: string, + * login: string, + * state: ilBuddySystemRelationState, + * target_states: list, + * state_text: string + * } + */ class RelationsTable { + /** + * @param Closure(int, string): string $link_to_profile + */ public function __construct( private readonly UIFactory $create, private readonly ilLanguage $lng, private readonly ilUIService $ui_service, - private readonly Http $http + private readonly Http $http, + private readonly Closure $link_to_profile, ) { } /** * @param array{state?: string, name?: string} $filter - * @return array + * @return list */ public static function data(array $filter = []): array { @@ -80,7 +89,7 @@ public static function data(array $filter = []): array $logins = array_map(static function (string $value): string { $matches = null; preg_match_all('/\[([^\[]+?)\]/', $value, $matches); - return $matches[1][count($matches[1]) - 1] ?? ''; + return $matches[1][\count($matches[1]) - 1] ?? ''; }, $logins); $public_name_query = (string) ($filter['name'] ?? ''); @@ -96,8 +105,8 @@ public static function data(array $filter = []): array 'public_name' => $public_names[$user_id], 'login' => $logins[$user_id], 'state' => $relation->getState(), - 'points' => $relation->getCurrentPossibleTargetStates()->toArray(), - 'state-text' => $txt, + 'target_states' => $relation->getCurrentPossibleTargetStates()->toArray(), + 'state_text' => $txt, ]; } @@ -107,7 +116,7 @@ public static function data(array $filter = []): array /** * @param array $multi_actions * @param callable(string, string, string): Action $action - * @return Component[] + * @return list */ public function build(array $multi_actions, string $target_url, callable $action): array { @@ -115,23 +124,30 @@ public function build(array $multi_actions, string $target_url, callable $action $data = static::data($this->ui_service->filter()->getData($filter) ?: []); $single_actions = $this->actions($data, $action); - $rows = $this->rows($data, array_keys($single_actions)); - $return = []; - $return[] = $filter; - $return[] = $this->create->table()->data( - new TableRows($rows), - $this->lng->txt('buddy_tbl_title_relations'), - [ - 'public_name' => $this->create->table()->column()->text($this->lng->txt('name')), - 'login' => $this->create->table()->column()->text($this->lng->txt('login')), - 'state-text' => $this->create->table()->column() - ->text($this->lng->txt('buddy_tbl_state_actions_col_label')), - ] - )->withRequest($this->http->request())->withActions( - array_merge($single_actions, $multi_actions) - ); - - return $return; + $components = [ + $filter + ]; + $components[] = $this->create + ->table() + ->data( + new TableRows($data, array_keys($single_actions), $this->link_to_profile), + $this->lng->txt('buddy_tbl_title_relations'), + [ + 'public_name' => $this->create->table()->column()->text($this->lng->txt('name')), + 'login' => $this->create->table()->column()->text($this->lng->txt('login')), + 'state_text' => $this->create + ->table()->column() + ->text($this->lng->txt('buddy_tbl_state_actions_col_label')), + ] + ) + ->withId('buddy_relations_table') + ->withRequest($this->http->request()) + ->withRange(new Range(0, 50)) + ->withActions( + array_merge($single_actions, $multi_actions) + ); + + return $components; } /** @@ -143,11 +159,11 @@ public function build(array $multi_actions, string $target_url, callable $action */ private static function filter(string $public_name_query, ilBuddySystemArrayCollection $relations, array $public_names, array $logins): Closure { - $in_string = static fn(string $needle, string $haystack): bool => false !== ilStr::strpos( + $in_string = static fn(string $needle, string $haystack): bool => ilStr::strpos( ilStr::strtolower($haystack), ilStr::strtolower($needle), 0 - ); + ) !== false; return self::pipe($relations->getKey(...), static fn(int $user_id): bool => ( $in_string($public_name_query, $public_names[$user_id]) || @@ -161,7 +177,7 @@ private static function pipe(Closure $a, Closure $b): Closure } /** - * @param array $data + * @param list $data * @param callable(string, string, string): Action $action * * @return array @@ -170,11 +186,11 @@ private function actions(array $data, callable $action): array { $actions = []; foreach ($data as $row) { - foreach ($row['points'] as $point) { - $actions[$row['state'] . '->' . $point] = $action( + foreach ($row['target_states'] as $state) { + $actions[$row['state'] . '->' . $state] = $action( 'single', - 'buddy_bs_act_btn_txt_' . $row['state']->getSnakeName() . '_to_' . $point->getSnakeName(), - $point->getAction() + 'buddy_bs_act_btn_txt_' . $row['state']->getSnakeName() . '_to_' . $state->getSnakeName(), + $state->getAction() ); } } @@ -186,10 +202,10 @@ private function filterComponent(string $target_url): Filter { $state_factory = ilBuddySystemRelationStateFactory::getInstance(); $options = array_merge(...array_map( - fn($m): array => $m->optionsForState(), + static fn($m): array => $m->optionsForState(), array_map( $state_factory->getTableFilterStateMapper(...), - array_filter($state_factory->getValidStates(), fn($s): bool => !$s->isInitial()) + array_filter($state_factory->getValidStates(), static fn($s): bool => !$s->isInitial()) ) )); @@ -202,37 +218,9 @@ private function filterComponent(string $target_url): Filter 'contact-filter', $target_url, $fields, - array_map(fn(): bool => true, $fields), + array_map(static fn(): bool => true, $fields), true, true ); } - - /** - * @param array $data - * @param string[] $actions - */ - private function rows(array $data, array $actions): Closure - { - return static function ( - DataRowBuilder $row_builder, - array $visible_column_ids, - Range $range, - Order $order - ) use ($data, $actions): Generator { - $order = $order->get(); - $times = current($order) === 'ASC' ? 1 : -1; - usort($data, fn(array $a, array $b): int => $times * strcasecmp($a[key($order)], $b[key($order)])); - foreach ($data as $row) { - $transitions = array_map(fn($s): string => $row['state'] . '->' . $s, $row['points']); - yield array_reduce( - $actions, - fn(DataRow $row, string $action): DataRow => in_array($action, $transitions, true) ? - $row : - $row->withDisabledAction($action), - $row_builder->buildDataRow((string) $row['user_id'], $row) - ); - } - }; - } } diff --git a/components/ILIAS/Contact/BuddySystem/classes/class.ilBuddySystemNotification.php b/components/ILIAS/Contact/BuddySystem/classes/class.ilBuddySystemNotification.php index 2f16969498d5..493c17c34d5c 100755 --- a/components/ILIAS/Contact/BuddySystem/classes/class.ilBuddySystemNotification.php +++ b/components/ILIAS/Contact/BuddySystem/classes/class.ilBuddySystemNotification.php @@ -24,34 +24,31 @@ use ILIAS\Notifications\Model\ilNotificationParameter; use ILIAS\Contact\Provider\ContactNotificationProvider; -/** - * Class ilBuddyList - * @author Michael Jansen - */ class ilBuddySystemNotification { - public const CONTACT_REQUEST_KEY = 'contact_requested_by'; - /** @var int[] */ - protected array $recipientIds = []; + public const string CONTACT_REQUEST_KEY = 'contact_requested_by'; + + /** @var list */ + protected array $recipient_ids = []; public function __construct(protected ilObjUser $sender, protected ilSetting $settings) { } /** - * @return int[] + * @return list */ public function getRecipientIds(): array { - return $this->recipientIds; + return $this->recipient_ids; } /** - * @param int[] $recipientIds + * @param list $recipient_ids */ - public function setRecipientIds(array $recipientIds): void + public function setRecipientIds(array $recipient_ids): void { - $this->recipientIds = array_map('intval', $recipientIds); + $this->recipient_ids = array_map('\intval', $recipient_ids); } public function send(): void @@ -59,14 +56,17 @@ public function send(): void foreach ($this->getRecipientIds() as $usr_id) { $user = new ilObjUser($usr_id); - $recipientLanguage = ilLanguageFactory::_getLanguage($user->getLanguage()); - $recipientLanguage->loadLanguageModule('buddysystem'); + $recipient_language = ilLanguageFactory::_getLanguage($user->getLanguage()); + $recipient_language->loadLanguageModule('buddysystem'); $notification = new ilNotificationConfig(ContactNotificationProvider::NOTIFICATION_TYPE); - $personalProfileLink = $recipientLanguage->txt('buddy_noti_cr_profile_not_published'); + $approve_url = ilLink::_getLink($this->sender->getId(), 'contact', ['approve']); + $ignore_url = ilLink::_getLink($this->sender->getId(), 'contact', ['ignore']); + + $profile_url = $recipient_language->txt('buddy_noti_cr_profile_not_published'); if ($this->hasPublicProfile($this->sender->getId())) { - $personalProfileLink = ilLink::_getStaticLink($this->sender->getId(), 'usr', true); + $profile_url = ilLink::_getStaticLink($this->sender->getId(), 'usr', true); $links[] = new ilNotificationLink( new ilNotificationParameter( @@ -74,41 +74,31 @@ public function send(): void $this->sender->getLastname() . ' ' . $this->sender->getLogin() ), - $personalProfileLink + $profile_url ); } $links[] = new ilNotificationLink( new ilNotificationParameter('buddy_notification_contact_request_link_osd', [], 'buddysystem'), - ilLink::_getStaticLink( - $this->sender->getId(), - 'usr', - true, - '_contact_approved' - ) + $approve_url ); $links[] = new ilNotificationLink( new ilNotificationParameter('buddy_notification_contact_request_ignore_osd', [], 'buddysystem'), - ilLink::_getStaticLink( - $this->sender->getId(), - 'usr', - true, - '_contact_ignored' - ) + $ignore_url ); - $bodyParams = [ - 'SALUTATION' => ilMail::getSalutation($user->getId(), $recipientLanguage), + $body_params = [ + 'SALUTATION' => ilMail::getSalutation($user->getId(), $recipient_language), 'BR' => "\n", - 'APPROVE_REQUEST' => ilLink::_getStaticLink($this->sender->getId(), 'usr', true, '_contact_approved'), - 'APPROVE_REQUEST_TXT' => $recipientLanguage->txt('buddy_notification_contact_request_link'), - 'IGNORE_REQUEST' => ilLink::_getStaticLink($this->sender->getId(), 'usr', true, '_contact_ignored'), - 'IGNORE_REQUEST_TXT' => $recipientLanguage->txt('buddy_notification_contact_request_ignore'), + 'APPROVE_REQUEST' => $approve_url, + 'APPROVE_REQUEST_TXT' => $recipient_language->txt('buddy_notification_contact_request_link'), + 'IGNORE_REQUEST' => $ignore_url, + 'IGNORE_REQUEST_TXT' => $recipient_language->txt('buddy_notification_contact_request_ignore'), 'REQUESTING_USER' => ilUserUtil::getNamePresentation($this->sender->getId()), - 'PERSONAL_PROFILE_LINK' => $personalProfileLink, + 'PERSONAL_PROFILE_LINK' => $profile_url, ]; $notification->setTitleVar('buddy_notification_contact_request', [], 'buddysystem'); - $notification->setShortDescriptionVar('buddy_notification_contact_request_short', $bodyParams, 'buddysystem'); - $notification->setLongDescriptionVar('buddy_notification_contact_request_long', $bodyParams, 'buddysystem'); + $notification->setShortDescriptionVar('buddy_notification_contact_request_short', $body_params, 'buddysystem'); + $notification->setLongDescriptionVar('buddy_notification_contact_request_long', $body_params, 'buddysystem'); $notification->setLinks($links); $notification->setValidForSeconds(ilNotificationConfig::TTL_LONG); $notification->setVisibleForSeconds(ilNotificationConfig::DEFAULT_TTS); @@ -125,9 +115,9 @@ public function send(): void protected function hasPublicProfile(int $recipientUsrId): bool { - $portfolioId = ilObjPortfolio::getDefaultPortfolio($this->sender->getId()); - if (is_numeric($portfolioId) && $portfolioId > 0) { - return (new ilPortfolioAccessHandler())->checkAccessOfUser($recipientUsrId, 'read', '', $portfolioId); + $portfolio_id = ilObjPortfolio::getDefaultPortfolio($this->sender->getId()); + if (is_numeric($portfolio_id) && $portfolio_id > 0) { + return (new ilPortfolioAccessHandler())->checkAccessOfUser($recipientUsrId, 'read', '', $portfolio_id); } return ( diff --git a/components/ILIAS/Contact/classes/MailingLists/MailingListsMembersTable.php b/components/ILIAS/Contact/classes/MailingLists/MailingListsMembersTable.php index 5653756bfd44..6a0769fbb94a 100644 --- a/components/ILIAS/Contact/classes/MailingLists/MailingListsMembersTable.php +++ b/components/ILIAS/Contact/classes/MailingLists/MailingListsMembersTable.php @@ -28,6 +28,7 @@ use ilMailingListsGUI; use ilLanguage; use ilMailingList; +use ILIAS\Data\Range; class MailingListsMembersTable implements UI\Component\Table\DataRetrieval { @@ -62,8 +63,9 @@ public function getComponent(): UI\Component\Table\Data ), $columns, ) - ->withId(self::class . '_' . $this->mailing_list->getId()) + ->withId(str_replace('\\', '', self::class) . '_' . $this->mailing_list->getId()) ->withOrder(new \ILIAS\Data\Order('login', \ILIAS\Data\Order::ASC)) + ->withRange(new Range(0, 50)) ->withActions($actions) ->withRequest($this->request); } diff --git a/components/ILIAS/Contact/classes/MailingLists/MailingListsTable.php b/components/ILIAS/Contact/classes/MailingLists/MailingListsTable.php index cc91388e7892..fddeeac8b453 100644 --- a/components/ILIAS/Contact/classes/MailingLists/MailingListsTable.php +++ b/components/ILIAS/Contact/classes/MailingLists/MailingListsTable.php @@ -28,6 +28,7 @@ use ilMailingListsGUI; use ilLanguage; use ilMailingLists; +use ILIAS\Data\Range; class MailingListsTable implements UI\Component\Table\DataRetrieval { @@ -71,7 +72,8 @@ public function getComponent(): UI\Component\Table\Data $columns, ) ->withOrder(new \ILIAS\Data\Order('title', \ILIAS\Data\Order::ASC)) - ->withId(self::class) + ->withRange(new Range(0, 50)) + ->withId(str_replace('\\', '', self::class)) ->withActions($actions) ->withRequest($this->request); } diff --git a/components/ILIAS/Contact/classes/MemberSearch/MailMemberSearchTable.php b/components/ILIAS/Contact/classes/MemberSearch/MailMemberSearchTable.php index 5cfbd688ab96..1d099a2e1469 100644 --- a/components/ILIAS/Contact/classes/MemberSearch/MailMemberSearchTable.php +++ b/components/ILIAS/Contact/classes/MemberSearch/MailMemberSearchTable.php @@ -60,8 +60,9 @@ public function getComponent(): UI\Component\Table\Data $this->lng->txt('members'), $columns, ) - ->withId(self::class . '_' . $this->ref_id) + ->withId(str_replace('\\', '', self::class) . '_' . $this->ref_id) ->withOrder(new \ILIAS\Data\Order('login', \ILIAS\Data\Order::ASC)) + ->withRange(new \ILIAS\Data\Range(0, 50)) ->withActions($actions) ->withRequest($this->request); } diff --git a/components/ILIAS/Contact/classes/Provider/ContactNotificationProvider.php b/components/ILIAS/Contact/classes/Provider/ContactNotificationProvider.php index 67834dc964d2..655ae8844e7e 100755 --- a/components/ILIAS/Contact/classes/Provider/ContactNotificationProvider.php +++ b/components/ILIAS/Contact/classes/Provider/ContactNotificationProvider.php @@ -105,7 +105,7 @@ function (ilBuddySystemRelation $relation) use ($leftIntervalTimestamp, &$latest ->link() ->standard( $this->dic->language()->txt('nc_contact_requests_headline'), - $this->dic->ctrl()->getLinkTargetByClass([ilDashboardGUI::class, ilContactGUI::class], 'showContactRequests') + $this->dic->ctrl()->getLinkTargetByClass([ilDashboardGUI::class, ilContactGUI::class], 'showContacts') ); $description = sprintf( $this->dic->language()->txt( diff --git a/components/ILIAS/Contact/classes/TableRows.php b/components/ILIAS/Contact/classes/TableRows.php index c2450161b01b..1b2127709343 100644 --- a/components/ILIAS/Contact/classes/TableRows.php +++ b/components/ILIAS/Contact/classes/TableRows.php @@ -24,17 +24,24 @@ use ILIAS\Data\Range; use ILIAS\UI\Component\Table\DataRowBuilder; use ILIAS\UI\Component\Table\DataRetrieval; -use ILIAS\UI\Implementation\Component\Input\ViewControl\Pagination; use Generator; use Closure; +/** + * @phpstan-import-type RelationRecord from \ILIAS\Contact\BuddySystem\Tables\RelationsTable + */ class TableRows implements DataRetrieval { /** - * @param Closure(DataRowBuilder, string[], Range, Order, ?array, ?array): Generator $rows + * @param list $records + * @param list $sigle_actions + * @param Closure(int, string): string $link_to_profile */ - public function __construct(private readonly Closure $rows) - { + public function __construct( + private readonly array $records, + private readonly array $sigle_actions, + private readonly Closure $link_to_profile + ) { } public function getRows( @@ -46,7 +53,44 @@ public function getRows( mixed $filter_data, mixed $additional_parameters ): Generator { - return ($this->rows)(...func_get_args()); + [$order_field, $order_direction] = $order->join( + [], + fn($ret, $key, $value) => [$key, $value] + ); + + $records = $this->records; + + $times = $order_direction === 'ASC' ? 1 : -1; + usort( + $records, + static fn(array $a, array $b): int => $times * strcasecmp( + $a[$order_field], + $b[$order_field] + ) + ); + + if ($range) { + $records = \array_slice($records, $range->getStart(), $range->getLength()); + } + + foreach ($records as $row) { + $row['public_name'] = ($this->link_to_profile)($row['user_id'], $row['public_name']); + $row['login'] = ($this->link_to_profile)($row['user_id'], $row['login']); + + $transitions = array_map( + static fn($s): string => $row['state'] . '->' . $s, + $row['target_states'] + ); + + $data_row = $row_builder->buildDataRow((string) $row['user_id'], $row); + foreach ($this->sigle_actions as $action) { + if (!\in_array($action, $transitions, true)) { + $data_row = $data_row->withDisabledAction($action); + } + } + + yield $data_row; + } } public function getTotalRowCount( @@ -54,6 +98,6 @@ public function getTotalRowCount( mixed $filter_data, mixed $additional_parameters ): ?int { - return current(Pagination::DEFAULT_LIMITS) - 1; // Disable pagination controls. + return \count($this->records); } } diff --git a/components/ILIAS/Contact/classes/class.ilContactGUI.php b/components/ILIAS/Contact/classes/class.ilContactGUI.php index 58554bcaf411..ac7d882f92d0 100755 --- a/components/ILIAS/Contact/classes/class.ilContactGUI.php +++ b/components/ILIAS/Contact/classes/class.ilContactGUI.php @@ -29,7 +29,7 @@ /** * @author Jens Conze * @ingroup ServicesMail -* @ilCtrl_Calls ilContactGUI: ilMailSearchCoursesGUI, ilMailSearchGroupsGUI, ilMailSearchLearningSequenceGUI, ilMailingListsGUI +* @ilCtrl_Calls ilContactGUI: ilMailSearchCoursesGUI, ilMailSearchGroupsGUI, ilMailingListsGUI * @ilCtrl_Calls ilContactGUI: ilUsersGalleryGUI, ILIAS\User\Profile\PublicProfileGUI */ class ilContactGUI implements ilCtrlSecurityInterface @@ -86,7 +86,8 @@ public function __construct( $this->ui_factory, $this->lng, $DIC->uiService(), - $this->http + $this->http, + $this->linkToProfile(...) ); $this->lng->loadLanguageModule('buddysystem'); } @@ -638,4 +639,20 @@ private function contactAction(): Closure $token ); } + + private function linkToProfile(int $user, string $label): string + { + $public_profile = ilObjUser::_lookupPref($user, 'public_profile'); + if (($this->user->isAnonymous() || $public_profile !== 'y') && $public_profile !== 'g') { + return $label; + } + + $this->ctrl->setParameterByClass(PublicProfileGUI::class, 'user', (string) $user); + $profile_target = $this->ctrl->getLinkTargetByClass( + PublicProfileGUI::class, + 'getHTML' + ); + + return $this->ui_renderer->render($this->ui_factory->link()->standard($label, $profile_target)); + } } diff --git a/components/ILIAS/Contact/classes/class.ilMailSearchObjectGUI.php b/components/ILIAS/Contact/classes/class.ilMailSearchObjectGUI.php index 1651555694ab..df2d19c38bea 100755 --- a/components/ILIAS/Contact/classes/class.ilMailSearchObjectGUI.php +++ b/components/ILIAS/Contact/classes/class.ilMailSearchObjectGUI.php @@ -412,16 +412,14 @@ public function showMembers(): void } } + $this->lng->loadLanguageModule($this->getObjectType()); + $this->tpl->setTitle($this->lng->txt('mail_addressbook')); $this->ctrl->setParameter($this, 'view', $this->getObjectType() . '_members'); if ($obj_ids !== []) { $this->ctrl->setParameter($this, 'search_' . $this->getObjectType(), implode(',', $obj_ids)); } - $this->tpl->setVariable('ACTION', $this->ctrl->getFormAction($this)); - $this->ctrl->clearParameters($this); - - $this->lng->loadLanguageModule($this->getObjectType()); $context = $this->getContext(); @@ -436,7 +434,7 @@ public function showMembers(): void $searchTpl = new ilTemplate('tpl.mail_search_template.html', true, true, 'components/ILIAS/Contact'); foreach ($obj_ids as $obj_id) { $members_obj = ilParticipants::getInstanceByObjId($obj_id); - $usr_ids = array_map('intval', ilUtil::_sortIds($members_obj->getParticipants(), 'usr_data', 'lastname', 'usr_id')); + $usr_ids = array_map('\intval', ilUtil::_sortIds($members_obj->getParticipants(), 'usr_data', 'lastname', 'usr_id')); foreach ($usr_ids as $usr_id) { $user = new ilObjUser($usr_id); if (!$user->getActive()) { diff --git a/components/ILIAS/Contact/classes/class.ilMailingListsGUI.php b/components/ILIAS/Contact/classes/class.ilMailingListsGUI.php index ead8a9090ef6..c847f487cd8e 100755 --- a/components/ILIAS/Contact/classes/class.ilMailingListsGUI.php +++ b/components/ILIAS/Contact/classes/class.ilMailingListsGUI.php @@ -606,7 +606,7 @@ private function getAssignmentForm(): ?StandardForm $user_select = $this->ui_factory->input()->field()->select( $this->lng->txt('mail_entry_of_contacts'), $options - ); + )->withRequired(true); $this->ctrl->setParameter($this, 'ml_id', $this->mlists->getCurrentMailingList()->getId()); $form = $this->ui_factory->input()->container()->form()->standard( diff --git a/components/ILIAS/Contact/classes/class.ilObjContactAdministrationGUI.php b/components/ILIAS/Contact/classes/class.ilObjContactAdministrationGUI.php index 9f321df3d30d..c955ad9a2186 100755 --- a/components/ILIAS/Contact/classes/class.ilObjContactAdministrationGUI.php +++ b/components/ILIAS/Contact/classes/class.ilObjContactAdministrationGUI.php @@ -22,17 +22,19 @@ use ILIAS\UI\Component\Input\Container\Form\Standard as StandardForm; /** - * Class ilObjContactAdministrationGUI - * @author Michael Jansen * @ilCtrl_Calls ilObjContactAdministrationGUI: ilPermissionGUI * @ilCtrl_isCalledBy ilObjContactAdministrationGUI: ilAdministrationGUI */ class ilObjContactAdministrationGUI extends ilObject2GUI { + private readonly bool $has_write_access; + public function __construct(int $a_id = 0, int $a_id_type = self::REPOSITORY_NODE_ID, int $a_parent_node_id = 0) { parent::__construct($a_id, $a_id_type, $a_parent_node_id); $this->lng->loadLanguageModule('buddysystem'); + + $this->has_write_access = $this->checkPermissionBool('write'); } public function getType(): string @@ -84,53 +86,72 @@ public function executeCommand(): void protected function getConfigurationForm(): StandardForm { - $notification = $this->ui_factory->input()->field()->checkbox( - $this->lng->txt('buddy_use_osd'), - $this->lng->txt('buddy_use_osd_info') - ) - ->withDisabled(!$this->checkPermissionBool('write')); - - $contact_request_default = $this->ui_factory->input()->field()->select( - $this->lng->txt('buddy_allow_to_contact_me'), - [ - 'y' => $this->lng->txt('buddy_allow_to_contact_me_yes'), - 'n' => $this->lng->txt('buddy_allow_to_contact_me_no') - ], - $this->lng->txt('buddy_allow_to_contact_me_default_info') - ) + $notification = $this->ui_factory + ->input() + ->field() + ->checkbox( + $this->lng->txt('buddy_use_osd'), + $this->lng->txt('buddy_use_osd_info') + ) + ->withDisabled(!$this->has_write_access); + + $contact_request_default = $this->ui_factory + ->input() + ->field() + ->select( + $this->lng->txt('buddy_allow_to_contact_me'), + [ + 'y' => $this->lng->txt('buddy_allow_to_contact_me_yes'), + 'n' => $this->lng->txt('buddy_allow_to_contact_me_no') + ], + $this->lng->txt('buddy_allow_to_contact_me_default_info') + ) ->withRequired(true) - ->withDisabled(!$this->checkPermissionBool('write')); + ->withDisabled(!$this->has_write_access); $cfg = ilNotificationDatabaseHandler::loadUserConfig(-1); - $checkbox = $this->ui_factory->input()->field()->optionalGroup( - [ - 'use_osd' => $notification, - 'allow_contact_request_default' => $contact_request_default - ], - $this->lng->txt('buddy_enable'), - $this->lng->txt('buddy_enable_info') - ) + $checkbox = $this->ui_factory + ->input() + ->field() + ->optionalGroup( + [ + 'use_osd' => $notification, + 'allow_contact_request_default' => $contact_request_default + ], + $this->lng->txt('buddy_enable'), + $this->lng->txt('buddy_enable_info') + ) ->withValue( [ 'use_osd' => isset($cfg['buddysystem_request']) && in_array('osd', $cfg['buddysystem_request'], true), - 'allow_contact_request_default' => $this->settings->get('bs_allow_to_contact_me', 'n') + 'allow_contact_request_default' => $this->settings->get( + 'bs_allow_to_contact_me', + 'n' + ) ] ) - ->withDisabled(!$this->checkPermissionBool('write')); + ->withDisabled(!$this->has_write_access); if (ilBuddySystem::getInstance()->getSetting('enabled', '0') === '0') { $checkbox = $checkbox->withValue(null); } - return $this->ui_factory->input()->container()->form()->standard( - $this->ctrl->getFormAction($this, 'saveConfigurationForm'), - [ - 'enable' => $checkbox, - ] - )->withSubmitLabel( - $this->checkPermissionBool('write') ? $this->lng->txt('save') : $this->lng->txt('refresh') - ); + return $this->ui_factory + ->input() + ->container() + ->form() + ->standard( + $this->ctrl->getFormAction( + $this, + $this->has_write_access ? 'saveConfigurationForm' : 'showConfigurationForm' + ), + [ + 'enable' => $checkbox, + ] + )->withSubmitLabel( + $this->has_write_access ? $this->lng->txt('save') : $this->lng->txt('refresh') + ); } protected function showConfigurationForm(?StandardForm $form = null): void @@ -200,7 +221,11 @@ protected function saveConfigurationForm(): void ); } - $this->tpl->setOnScreenMessage('success', $this->lng->txt('saved_successfully'), true); + $this->tpl->setOnScreenMessage( + $this->tpl::MESSAGE_TYPE_SUCCESS, + $this->lng->txt('saved_successfully'), + true + ); $this->ctrl->redirect($this); } } diff --git a/components/ILIAS/Contact/phpunit.xml b/components/ILIAS/Contact/phpunit.xml index 49c84870454f..ed28564b412e 100755 --- a/components/ILIAS/Contact/phpunit.xml +++ b/components/ILIAS/Contact/phpunit.xml @@ -10,6 +10,7 @@ displayDetailsOnTestsThatTriggerDeprecations="true" displayDetailsOnTestsThatTriggerNotices="true" displayDetailsOnSkippedTests="true" + displayDetailsOnPhpunitDeprecations="true" backupGlobals="false" bootstrap="./tests/bootstrap.php" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"> diff --git a/components/ILIAS/Contact/resources/buddy_system.js b/components/ILIAS/Contact/resources/buddy_system.js index 6ee57a4236f3..9e2e02bc0ed2 100755 --- a/components/ILIAS/Contact/resources/buddy_system.js +++ b/components/ILIAS/Contact/resources/buddy_system.js @@ -59,12 +59,12 @@ }) .then((data) => processResponse(container, data)) .then(() => { - container.querySelector(toggleSelector).focus(); + container.querySelector(toggleSelector)?.focus(); }) .catch((error) => { console.error(error); enableButtons(container); - container.querySelector(toggleSelector).focus(); + container.querySelector(toggleSelector)?.focus(); }); }; @@ -108,18 +108,18 @@ buddyId: container.dataset.buddyId, newState: data.state, oldState: currentState, + })) + .then(() => triggerEvent('il.bs.stateChange.afterStateChangePerformed', { + buddyId: container.dataset.buddyId, + newState: container.dataset.currentState, + oldState: currentState, })); } } } return enableButtons(container) - .then(() => showPopover(container, data.message)) - .then(() => triggerEvent('il.bs.stateChange.afterStateChangePerformed', { - buddyId: container.dataset.buddyId, - newState: container.dataset.currentState, - oldState: currentState, - })); + .then(() => showPopover(container, data.message)); }; const updateContainers = (buddyId, newState, stateHtml) => new Promise((resolve) => { diff --git a/components/ILIAS/Contact/src/URL/StaticUrlHandler.php b/components/ILIAS/Contact/src/URL/StaticUrlHandler.php new file mode 100644 index 000000000000..b7e655418d4e --- /dev/null +++ b/components/ILIAS/Contact/src/URL/StaticUrlHandler.php @@ -0,0 +1,85 @@ +isUserLoggedIn()) { + return $response_factory->loginFirst(); + } + + if (!\ilBuddySystem::getInstance()->isEnabled()) { + return $response_factory->cannot(); + } + + $params = implode('/', $request->getAdditionalParameters() ?? []); + $path = parse_url($params, PHP_URL_PATH); + + return match ($path) { + 'approve' => $response_factory->can($this->buildProfileUrl( + $context->ctrl(), + $request->getReferenceId(), + 'approveContactRequest' + )), + 'ignore' => $response_factory->can($this->buildProfileUrl( + $context->ctrl(), + $request->getReferenceId(), + 'ignoreContactRequest' + )), + default => $response_factory->cannot(), + }; + } + + private function buildProfileUrl( + \ilCtrl $ctrl, + ?ReferenceId $target_user_id, + string $cmd + ): string { + if ($target_user_id === null) { + return $ctrl->getLinkTargetByClass( + [\ilDashboardGUI::class], + 'jumpToProfile' + ); + } + + $ctrl->setParameterByClass(PublicProfileGUI::class, 'user_id', $target_user_id->toInt()); + + return $ctrl->getLinkTargetByClass([\ilPublicProfileBaseClassGUI::class, PublicProfileGUI::class], $cmd); + } +} diff --git a/components/ILIAS/Contact/src/UserSettings/AllowContactRequest.php b/components/ILIAS/Contact/src/UserSettings/AllowContactRequest.php index 1ef96010142a..ec2f4289f3a4 100644 --- a/components/ILIAS/Contact/src/UserSettings/AllowContactRequest.php +++ b/components/ILIAS/Contact/src/UserSettings/AllowContactRequest.php @@ -101,7 +101,9 @@ public function hasUserPersonalizedSetting( \ilSetting $settings, \ilObjUser $user ): bool { - return $this->retrieveValueFromUser($user) !== $settings->get('bs_allow_to_contact_me'); + $user_value = $this->retrieveValueFromUser($user); + $settings_value = $settings->get('bs_allow_to_contact_me') === 'y'; + return $user_value !== null && $user_value !== $settings_value; } public function persistUserInput( diff --git a/components/ILIAS/Contact/tests/BuddySystem/Tables/RelationsTableTest.php b/components/ILIAS/Contact/tests/BuddySystem/Tables/RelationsTableTest.php deleted file mode 100644 index 47cc5996287a..000000000000 --- a/components/ILIAS/Contact/tests/BuddySystem/Tables/RelationsTableTest.php +++ /dev/null @@ -1,170 +0,0 @@ -assertInstanceOf(RelationsTable::class, new RelationsTable( - ...array_map($this->mock(...), [UIFactory::class, ilLanguage::class, ilUIService::class, Http::class]) - )); - } - - public function testData(): void - { - if (!defined('ANONYMOUS_USER_ID')) { - define('ANONYMOUS_USER_ID', 7); - } - $container = [ - 'ilDB' => $this->mockTree(ilDBInterface::class, ['in' => 'dummy', 'queryF' => []]), - 'lng' => $this->mock(ilLanguage::class), - 'ilCtrl' => $this->mock(ilCtrlInterface::class), - ]; - $original = $GLOBALS['DIC'] ?? null; - $GLOBALS['DIC'] = $this->mockTree(Container::class, ['user' => ['getId' => 12345]]); - $GLOBALS['DIC']->method('offsetGet')->willReturnCallback(fn($k) => $container[$k]); - $std_class = new stdClass(); - $std_class->usr_id = 12345; - $std_class->public_profile = false; - $std_class->login = 'dummy'; - $array = [null, $std_class, null, $std_class]; - $container['ilDB']->expects(self::exactly(4)) - ->method('fetchObject') - ->willReturnCallback(function () use (&$array) { - return next($array) ?: null; - }); - $relation = $this->mockTree(ilBuddySystemRelation::class, ['getState' => []]); - $relations = $this->mockTree(ilBuddySystemRelationCollection::class, ['toArray' => [12345 => $relation]]); - $relations->expects(self::once())->method('filter')->willReturnCallback(function ($f) use ($relations, $relation) { - $this->assertTrue($f($relation)); - return $relations; - }); - $mock = $this->mockTree(ilBuddyList::class, ['getRelations' => $relations]); - $mapper = $this->mockMethod(ilBuddySystemRelationStateTableFilterMapper::class, 'filterMatchesRelation', ['huhu'], true); - $mapper->expects(self::once())->method('text')->willReturn('foo'); - $factory = $this->mock(ilBuddySystemRelationStateFactory::class); - $factory->expects(self::exactly(2))->method('getTableFilterStateMapper')->with($relation->getState())->willReturn($mapper); - - $this->setBuddyList(12345, $mock); - $this->setStateFactory($factory); - - $this->assertEquals([[ - 'user_id' => 12345, - 'public_name' => '', - 'login' => 'dummy', - 'state' => $relation->getState(), - 'points' => [], - 'state-text' => 'foo', - ]], RelationsTable::data(['state' => 'huhu'])); - - $this->setStateFactory(null); - $this->setBuddyList(12345, null); - $GLOBALS['DIC'] = $original; - } - - public function testBuild(): void - { - $original = $GLOBALS['DIC'] ?? null; - $GLOBALS['DIC'] = $this->mockTree(Container::class, ['user' => []]); - $request = $this->mock(ServerRequestInterface::class); - $filter = $this->mock(Filter::class); - $single_action = $this->mock(Action::class); - $multi_actions = ['a' => $this->mock(Action::class), 'b' => $this->mock(Action::class)]; - $actions = array_merge($multi_actions, ['->' => $single_action]); - $data_table = $this->mock(Table::class); - $data_table->expects(self::once())->method('withRequest')->with($request)->willReturn($data_table); - $data_table->expects(self::once())->method('withActions')->with($actions)->willReturn($data_table); - - $table = new class ( - $this->mockTree(UIFactory::class, ['table' => ['data' => $data_table]]), - $this->mock(ilLanguage::class), - $this->mockTree(ilUIService::class, ['filter' => ['standard' => $filter]]), - $this->mockTree(Http::class, ['request' => $request]) - ) extends RelationsTable { - public static Closure $data; - public static function data(array $filter = []): array - { - return (self::$data)($filter); - } - }; - $table::$data = fn() => [ - [ - 'user_id' => 12345, - 'state' => $this->mock(State::class), - 'points' => [$this->mock(State::class), $this->mock(State::class)], - ], - ]; - - $this->setStateFactory($this->mock(ilBuddySystemRelationStateFactory::class)); - - $components = $table->build($multi_actions, '', fn() => $single_action); - $this->assertSame(2, count($components)); - $this->assertSame($filter, $components[0]); - $this->assertSame($data_table, $components[1]); - - $this->setStateFactory(null); - $GLOBALS['DIC'] = $original; - } - - private function setBuddyList(int $id, ?ilBuddyList $mock): void - { - $p = new ReflectionProperty(ilBuddyList::class, 'instances'); - $array = $p->getValue(); - $array[$id] = $mock; - $p->setValue(null, $array); - } - - private function setStateFactory(?ilBuddySystemRelationStateFactory $mock): void - { - $p = new ReflectionProperty(ilBuddySystemRelationStateFactory::class, 'instance'); - $p->setValue(null, $mock); - } -} diff --git a/components/ILIAS/Container/Block/Service/class.InternalService.php b/components/ILIAS/Container/Block/Service/class.InternalService.php index efc6d6152d64..70c9f2d221ec 100755 --- a/components/ILIAS/Container/Block/Service/class.InternalService.php +++ b/components/ILIAS/Container/Block/Service/class.InternalService.php @@ -22,54 +22,42 @@ use ILIAS\DI\Container; -/** - * Block internal service - * @author Alexander Killing - */ class InternalService { - protected InternalDataService $data; - protected InternalRepoService $repo; - protected InternalDomainService $domain; - protected InternalGUIService $gui; + protected array $instance = []; - public function __construct(Container $DIC) + public function __construct(protected Container $DIC) { - $this->data = new InternalDataService(); - - $this->repo = new InternalRepoService( - $this->data(), - $DIC->database() - ); - $this->domain = new InternalDomainService( - $DIC, - $this->repo, - $this->data - ); - $this->gui = new InternalGUIService( - $DIC, - $this->data, - $this->domain - ); } public function data(): InternalDataService { - return $this->data; + return $this->instance["data"] ??= new InternalDataService(); } public function repo(): InternalRepoService { - return $this->repo; + return $this->instance["repo"] ??= new InternalRepoService( + $this->data(), + $this->DIC->database() + ); } public function domain(): InternalDomainService { - return $this->domain; + return $this->instance["domain"] ??= new InternalDomainService( + $this->DIC, + $this->repo(), + $this->data() + ); } public function gui(): InternalGUIService { - return $this->gui; + return $this->instance["gui"] ??= new InternalGUIService( + $this->DIC, + $this->data(), + $this->domain() + ); } } diff --git a/components/ILIAS/Container/Container.php b/components/ILIAS/Container/Container.php index 1ec3ee99c8e4..8cf5aa09a323 100644 --- a/components/ILIAS/Container/Container.php +++ b/components/ILIAS/Container/Container.php @@ -32,6 +32,10 @@ public function init( array | \ArrayAccess &$pull, array | \ArrayAccess &$internal, ): void { + $contribute[\ILIAS\Setup\Agent::class] = static fn() => + new \ILIAS\Container\Setup\ContainerSetupAgent( + $pull[\ILIAS\Refinery\Factory::class] + ); $contribute[Component\Resource\PublicAsset::class] = fn() => new Component\Resource\ComponentJS($this, "Container.js"); $contribute[Component\Resource\PublicAsset::class] = fn() => diff --git a/components/ILIAS/Container/Content/Filter/class.FilterManager.php b/components/ILIAS/Container/Content/Filter/class.FilterManager.php index 004c516f1d32..b4fcbe1c2caf 100755 --- a/components/ILIAS/Container/Content/Filter/class.FilterManager.php +++ b/components/ILIAS/Container/Content/Filter/class.FilterManager.php @@ -253,7 +253,7 @@ protected function legacyOnlineFilter( break; case "spl": foreach ($lobj_ids as $lid) { - $status[$lid] = \ilObjSurveyQuestionPool::_lookupOnline($lid); + $status[$lid] = !\ilObjSurveyQuestionPoolAccess::_isOffline($lid); } break; } diff --git a/components/ILIAS/Container/Content/ItemBlock/class.ItemBlockSequenceGenerator.php b/components/ILIAS/Container/Content/ItemBlock/class.ItemBlockSequenceGenerator.php index 652a07b8140d..3e2900e19091 100755 --- a/components/ILIAS/Container/Content/ItemBlock/class.ItemBlockSequenceGenerator.php +++ b/components/ILIAS/Container/Content/ItemBlock/class.ItemBlockSequenceGenerator.php @@ -35,6 +35,7 @@ */ class ItemBlockSequenceGenerator { + protected array $omit_ref_ids = []; protected ?string $lang = null; protected ResourcesManager $copage_resources; protected bool $include_empty_blocks; @@ -66,7 +67,8 @@ public function __construct( BlockSequence $block_sequence, ItemSetManager $item_set_manager, bool $include_empty_blocks = true, - ?string $lang = null + ?string $lang = null, + array $omit_ref_ids = [] ) { $this->access = $domain_service->access(); $this->data_service = $data_service; @@ -83,6 +85,12 @@ public function __construct( $this->block_limit = (int) \ilContainer::_lookupContainerSetting($container->getId(), "block_limit"); } $this->test_assignments = \ilLOTestAssignments::getInstance($this->container->getId()); + $this->omit_ref_ids = $omit_ref_ids; + } + + public function setOmitRefIds(array $omit_ref_ids): void + { + $this->omit_ref_ids = $omit_ref_ids; } public function getSequence(): ItemBlockSequence @@ -323,7 +331,9 @@ protected function determineBlockItems( if ($this->block_limit > 0 && count($accessible_ref_ids) >= $this->block_limit) { $exhausted = true; } elseif (!$filter_session_and_item_group_items || !in_array($ref_id, $this->all_item_group_item_ref_ids)) { - $accessible_ref_ids[] = $ref_id; + if (!in_array($ref_id, $this->omit_ref_ids)) { + $accessible_ref_ids[] = $ref_id; + } } } } diff --git a/components/ILIAS/Container/Content/ObjectiveView/class.ObjectiveRenderer.php b/components/ILIAS/Container/Content/ObjectiveView/class.ObjectiveRenderer.php index 0618566c71b4..06c1597db6a2 100755 --- a/components/ILIAS/Container/Content/ObjectiveView/class.ObjectiveRenderer.php +++ b/components/ILIAS/Container/Content/ObjectiveView/class.ObjectiveRenderer.php @@ -467,7 +467,7 @@ protected function renderObjective( $has_sections = true; $title = $item['title'] . - " › " . \ilLMObject::_lookupTitle($chapter['obj_id']) . + " › " . \ilLMObject::_lookupTitle($chapter['obj_id']) . " (" . $lng->txt('obj_' . $chapter['type']) . ")"; $item_list_gui2->setDefaultCommandParameters(array( diff --git a/components/ILIAS/Container/Content/ObjectiveView/class.ilContainerObjectiveGUI.php b/components/ILIAS/Container/Content/ObjectiveView/class.ilContainerObjectiveGUI.php index c2cd20fb9a5d..311e6fad7a19 100755 --- a/components/ILIAS/Container/Content/ObjectiveView/class.ilContainerObjectiveGUI.php +++ b/components/ILIAS/Container/Content/ObjectiveView/class.ilContainerObjectiveGUI.php @@ -688,7 +688,7 @@ protected function renderObjective( $has_sections = true; $title = $item['title'] . - " › " . ilLMObject::_lookupTitle($chapter['obj_id']) . + " › " . ilLMObject::_lookupTitle($chapter['obj_id']) . " (" . $lng->txt('obj_' . $chapter['type']) . ")"; $item_list_gui2->setDefaultCommandParameters([ diff --git a/components/ILIAS/Container/Content/class.ItemPresentationManager.php b/components/ILIAS/Container/Content/class.ItemPresentationManager.php index b2c675d84332..78ba84146769 100755 --- a/components/ILIAS/Container/Content/class.ItemPresentationManager.php +++ b/components/ILIAS/Container/Content/class.ItemPresentationManager.php @@ -210,9 +210,11 @@ public function hasItems(): bool return $this->item_set->hasItems(); } - public function getItemBlockSequence(): ItemBlockSequence - { + public function getItemBlockSequence( + array $omit_ref_ids = [] + ): ItemBlockSequence { $this->init(); + $this->sequence_generator->setOmitRefIds($omit_ref_ids); return $this->sequence_generator->getSequence(); } diff --git a/components/ILIAS/Container/Content/class.ilContainerContentGUI.php b/components/ILIAS/Container/Content/class.ilContainerContentGUI.php index 7b65aaa7c327..bd29c63f8809 100755 --- a/components/ILIAS/Container/Content/class.ilContainerContentGUI.php +++ b/components/ILIAS/Container/Content/class.ilContainerContentGUI.php @@ -122,7 +122,6 @@ public function __construct( ->content() ->block(); $this->item_presentation = $item_presentation; - $this->block_limit = (int) ilContainer::_lookupContainerSetting($container_gui_obj->getObject()->getId(), "block_limit"); } @@ -710,48 +709,14 @@ public function getSingleTypeBlockAsynch( string $type ): string { $this->initRenderer(); - // get all sub items - $this->items = $this->getContainerObject()->getSubItems( - $this->getContainerGUI()->isActiveAdministrationPanel() - ); - - $exhausted = false; $ref_ids = $this->request->getAlreadyRenderedRefIds(); - // iterate all types - if (is_array($this->items[$type]) && - $this->renderer->addTypeBlock($type)) { - //$this->renderer->setBlockPosition($type, ++$pos); - - $position = 1; - $counter = 1; - foreach ($this->items[$type] as $item_data) { - $item_ref_id = $item_data["child"]; - - if (in_array($item_ref_id, $ref_ids)) { - continue; - } - if ($this->block_limit > 0 && $counter == $this->block_limit + 1) { - if ($counter == $this->block_limit + 1) { - // render more button - $this->renderer->addShowMoreButton($type); - $exhausted = true; - } - continue; - } - - if (!$this->renderer->hasItem($item_ref_id)) { - $html = $this->renderItem($item_data, $position++); - - if ($html != "") { - $counter++; - $this->renderer->addItemToBlock($type, $item_data["type"], $item_ref_id, $html); - } - } - } - } - - return $this->renderer->renderSingleTypeBlock($type, $exhausted); + return $this->renderer->renderSingleTypeBlockAsynch( + $this->item_presentation->getItemBlockSequence($ref_ids), + $type, + $ref_ids, + $this->block_limit + ); } /** diff --git a/components/ILIAS/Container/Content/class.ilContainerRenderer.php b/components/ILIAS/Container/Content/class.ilContainerRenderer.php index c81e89d74ce1..d11dd19b9120 100755 --- a/components/ILIAS/Container/Content/class.ilContainerRenderer.php +++ b/components/ILIAS/Container/Content/class.ilContainerRenderer.php @@ -16,6 +16,9 @@ * *********************************************************************/ +use ILIAS\Container\Content\ItemBlock\ItemBlockSequence; +use ILIAS\Container\Content\ItemBlock\ItemBlock; + /** * Class ilContainerRenderer * @@ -852,7 +855,7 @@ protected function getDetailsLevel(int $a_item_id): int } public function renderItemBlockSequence( - \ILIAS\Container\Content\ItemBlock\ItemBlockSequence $sequence + ItemBlockSequence $sequence ): string { $valid = false; @@ -1055,6 +1058,78 @@ public function renderItemBlockSequence( return $page_html; } + public function renderSingleTypeBlockAsynch( + ItemBlockSequence $sequence, + string $block_id, + array $already_rendered_items, + int $block_limit + ): string { + + $block = $this->getBlockById($sequence, $block_id); + // get all sub items + //$this->items = $this->getContainerObject()->getSubItems( + // $this->getContainerGUI()->isActiveAdministrationPanel() + //); + $exhausted = false; + $ref_ids = $already_rendered_items; + + // iterate all types + if (!is_null($block) && count($block->getItemRefIds()) > 0) { + + $this->addTypeBlock($block_id); + //$this->renderer->setBlockPosition($type, ++$pos); + + $position = 1; + $counter = 1; + foreach ($block->getItemRefIds() as $item_ref_id) { + $item_data = $this->item_presentation->getRawDataByRefId($item_ref_id); + if (in_array($item_ref_id, $ref_ids)) { + continue; + } + + $checkbox = \ILIAS\Containter\Content\ItemRenderer::CHECKBOX_NONE; + if ($this->container_gui->isActiveAdministrationPanel()) { + $checkbox = \ILIAS\Containter\Content\ItemRenderer::CHECKBOX_ADMIN; + } elseif ($this->container_gui->isMultiDownloadEnabled()) { + $checkbox = \ILIAS\Containter\Content\ItemRenderer::CHECKBOX_DOWNLOAD; + } + if (!$this->hasItem($item_ref_id)) { + $html = $this->item_renderer->renderItem( + $item_data, + $position++, + false, + "", + "", + $checkbox, + $this->item_presentation->isActiveItemOrdering($item_data["type"]), + ); + if ($html != "") { + $this->addItemToBlock($block_id, $item_data["type"], $item_ref_id, $html); + } + } + + if ($block_limit > 0 && $html != "" && $block->getLimitExhausted()) { + $this->addShowMoreButton($block_id); + $exhausted = true; + } + } + } + + return $this->renderSingleTypeBlock($block_id, $exhausted); + } + + public function getBlockById( + ItemBlockSequence $sequence, + string $block_id, + ): ?ItemBlock { + foreach ($sequence->getBlocks() as $block) { + if ($block->getId() === $block_id) { + return $block; + } + } + return null; + } + /** * replaces ilContainerContentGUI::renderItemGroup */ diff --git a/components/ILIAS/Container/Page/class.PageManager.php b/components/ILIAS/Container/Page/class.PageManager.php index 7b31f44d1902..4d19d02a04c2 100755 --- a/components/ILIAS/Container/Page/class.PageManager.php +++ b/components/ILIAS/Container/Page/class.PageManager.php @@ -103,4 +103,23 @@ public function getDom(): ?\DOMDocument return $page->getDomDoc(); } + public function getPage(): ?\ilContainerPage + { + $page = null; + if (\ilContainerPage::_exists( + "cont", + $this->container->getId() + )) { + $page = new \ilContainerPage($this->container->getId()); + } + return $page; + } + + public function deletePage(): void + { + if ($page = $this->getPage()) { + $page->delete(); + } + } + } diff --git a/components/ILIAS/Container/Setup/ContainerSetupAgent.php b/components/ILIAS/Container/Setup/ContainerSetupAgent.php new file mode 100644 index 000000000000..5743d576ff4f --- /dev/null +++ b/components/ILIAS/Container/Setup/ContainerSetupAgent.php @@ -0,0 +1,73 @@ +type = $type; + $this->ops_name = $ops_name; + } + + public function getHash(): string + { + return hash("sha256", self::class . $this->type . $this->ops_name); + } + + public function getLabel(): string + { + return "Delete webfeed creation permissions $this->type and name $this->ops_name"; + } + + public function isNotable(): bool + { + return true; + } + + public function getPreconditions(Environment $environment): array + { + return [ + new \ilDatabaseInitializedObjective() + ]; + } + + public function achieve(Environment $environment): Environment + { + $db = $environment->getResource(Environment::RESOURCE_DATABASE); + + $set = $db->queryF( + "SELECT * FROM rbac_operations " . + " WHERE operation = %s ", + ["text"], + [$this->ops_name] + ); + while ($rec = $db->fetchAssoc($set)) { + $this->ops_id = (int) $rec["ops_id"]; + if ($this->ops_id > 0) { + + $set2 = $db->query( + "SELECT obj_id FROM object_data" + . " WHERE type = 'typ'" + . " AND title = " . $db->quote($this->type, 'text') + ) + ; + if ($rec2 = $db->fetchAssoc($set2)) { + $type_id = (int) $rec2["obj_id"]; + if ($type_id > 0) { + + $sql = + "DELETE FROM rbac_ta" . PHP_EOL + . "WHERE typ_id = " . $db->quote($type_id, "integer") . PHP_EOL + . "AND ops_id = " . $db->quote($this->ops_id, "integer") . PHP_EOL + ; + + $db->manipulate($sql); + + $sql = + "DELETE FROM rbac_templates" . PHP_EOL + . " WHERE type = " . $db->quote($this->type, "text") . PHP_EOL + . " AND ops_id = " . $db->quote($this->ops_id, "integer") . PHP_EOL + ; + + $db->manipulate($sql); + } + } + } + } + return $environment; + } + +} diff --git a/components/ILIAS/Container/Skills/classes/class.ilContSkillAdminGUI.php b/components/ILIAS/Container/Skills/classes/class.ilContSkillAdminGUI.php index 71fa3e21fd2f..b473f9a37be6 100755 --- a/components/ILIAS/Container/Skills/classes/class.ilContSkillAdminGUI.php +++ b/components/ILIAS/Container/Skills/classes/class.ilContSkillAdminGUI.php @@ -481,8 +481,28 @@ public function listProfiles(): void $lng = $this->lng; $tabs->activateSubTab("profiles"); + // table + $table = $this->skills_gui->contProfileTableBuilder( + $this->skills_domain, + $this->profile_service, + $this->skmg_settings, + $this->ref_id, + $this->cont_member_role_id, + $this, + "listProfiles" + )->getTable(); + + if ($table->handleCommand()) { + return; + } + $this->buildProfileToolbar(); + $tpl->setContent($table->render()); + } + + protected function buildProfileToolbar(): void + { $options = []; - $options[0] = $lng->txt("please_select"); + $options[0] = $this->lng->txt("please_select"); $selectable_profiles = []; $all_profiles = $this->profile_service->getAllGlobalProfiles(); @@ -499,10 +519,10 @@ public function listProfiles(): void } if ($this->skmg_settings->getLocalAssignmentOfProfiles()) { - $select = new ilSelectInputGUI($lng->txt("skmg_profile"), "p_id"); + $select = new ilSelectInputGUI($this->lng->txt("skmg_profile"), "p_id"); $select->setOptions($options); $select->setValue(0); - $toolbar->addInputItem($select, true); + $this->toolbar->addInputItem($select, true); $this->gui->button( $this->lng->txt("cont_add_global_profile"), @@ -512,34 +532,17 @@ public function listProfiles(): void if ($this->skmg_settings->getLocalAssignmentOfProfiles() && $this->skmg_settings->getAllowLocalProfiles()) { - $toolbar->addSeparator(); + $this->toolbar->addSeparator(); } if ($this->skmg_settings->getAllowLocalProfiles()) { $this->gui->link( $this->lng->txt("cont_add_local_profile"), - $ctrl->getLinkTargetByClass("ilskillprofilegui", "createLocal") + $this->ctrl->getLinkTargetByClass("ilskillprofilegui", "createLocal") )->emphasised()->toToolbar(); } - $toolbar->setFormAction($ctrl->getFormAction($this)); - - // table - $table = $this->skills_gui->contProfileTableBuilder( - $this->skills_domain, - $this->profile_service, - $this->skmg_settings, - $this->ref_id, - $this->cont_member_role_id, - $this, - "listProfiles" - )->getTable(); - - if ($table->handleCommand()) { - return; - } - - $tpl->setContent($table->render()); + $this->toolbar->setFormAction($this->ctrl->getFormAction($this)); } public function saveSelectedProfile(): void diff --git a/components/ILIAS/Container/Sorting/class.ilContainerSorting.php b/components/ILIAS/Container/Sorting/class.ilContainerSorting.php index 92b92c2f9e0f..ca82fc6388d5 100755 --- a/components/ILIAS/Container/Sorting/class.ilContainerSorting.php +++ b/components/ILIAS/Container/Sorting/class.ilContainerSorting.php @@ -494,7 +494,7 @@ private function sortOrderDefault(array $items): array $no_position, 'title', ($this->getSortingSettings()->getSortDirection() === ilContainer::SORT_DIRECTION_ASC) ? 'asc' : 'desc', - true + false ); break; case ilContainer::SORT_NEW_ITEMS_ORDER_CREATION: diff --git a/components/ILIAS/Container/classes/class.StandardGUIRequest.php b/components/ILIAS/Container/classes/class.StandardGUIRequest.php index f9e19f546b80..f02ef1650c79 100755 --- a/components/ILIAS/Container/classes/class.StandardGUIRequest.php +++ b/components/ILIAS/Container/classes/class.StandardGUIRequest.php @@ -183,4 +183,9 @@ public function getCmdClass(): string { return $this->str("cmdClass"); } + + public function getDidacticTemplateId(): int + { + return $this->int('didactic_type'); + } } diff --git a/components/ILIAS/Container/classes/class.ilContainer.php b/components/ILIAS/Container/classes/class.ilContainer.php index 0fcdd9defc28..501536cf8c62 100755 --- a/components/ILIAS/Container/classes/class.ilContainer.php +++ b/components/ILIAS/Container/classes/class.ilContainer.php @@ -584,6 +584,9 @@ public function delete(): bool // delete translations $this->getObjectProperties()->deletePropertyTranslations(); + // delete content page + $this->domain->page($this)->deletePage(); + return true; } @@ -996,6 +999,13 @@ protected static function fixInternalLinksAfterCopy( $pg = new ilContainerPage($obj_id); $pg->handleRepositoryLinksOnCopy($mapping, $a_source_ref_id); $pg->update(true, true); + foreach (ilContainerPage::lookupTranslations("cont", $obj_id) as $trans) { + if ($trans !== "-" && ilContainerPage::_exists("cont", $obj_id, $trans, true)) { + $pg = new ilContainerPage($obj_id, 0, $trans); + $pg->handleRepositoryLinksOnCopy($mapping, $a_source_ref_id); + $pg->update(true, true); + } + } } foreach ($mapping as $old_ref_id => $new_ref_id) { diff --git a/components/ILIAS/Container/classes/class.ilContainerGUI.php b/components/ILIAS/Container/classes/class.ilContainerGUI.php index 2daf78f20497..7ded4fd98d14 100755 --- a/components/ILIAS/Container/classes/class.ilContainerGUI.php +++ b/components/ILIAS/Container/classes/class.ilContainerGUI.php @@ -206,6 +206,10 @@ protected function afterUpdate(): void parent::afterUpdate(); } + protected function getDidacticTemplateIdFromQuery(): int + { + return $this->std_request->getDidacticTemplateId(); + } public function forwardToPageObject(): string { @@ -1138,6 +1142,14 @@ public function downloadObject(): void } } + foreach ($ids as $ref_id) { + if (!in_array(ilObject::_lookupType($ref_id, true), ["crs", "grp", "fold", "file"])) { + $this->lng->loadLanguageModule("cont"); + $this->tpl->setOnScreenMessage('failure', $this->lng->txt("cont_only_crs_grp_fold_download"), true); + $this->ctrl->redirect($this, ""); + } + } + $download_job = new ilDownloadContainerFilesBackgroundTask( $GLOBALS['DIC']->user()->getId(), $ids, @@ -1419,6 +1431,9 @@ public function performPasteIntoMultipleObjectsObject(): void $rbacadmin->adjustMovedObjectPermissions($ref_id, $old_parent); ilConditionHandler::_adjustMovedObjectConditions($ref_id); + $availability = new ilObjectActivation(); + $availability->read($ref_id); + $availability->update($ref_id, $folder_ref_id); // BEGIN ChangeEvent: Record cut event. $node_data = $tree->getNodeData($ref_id); @@ -1735,6 +1750,9 @@ public function pasteObject(): void $rbacadmin->adjustMovedObjectPermissions($ref_id, $old_parent); ilConditionHandler::_adjustMovedObjectConditions($ref_id); + $availability = new ilObjectActivation(); + $availability->read($ref_id); + $availability->update($ref_id, $this->object->getRefId()); // BEGIN ChangeEvent: Record cut event. $node_data = $tree->getNodeData($ref_id); @@ -2696,12 +2714,13 @@ public function getAdminTabs(): void ); } - // Always show container trash - $this->tabs_gui->addTab( - 'trash', - $this->lng->txt('trash'), - $this->ctrl->getLinkTarget($this, 'trash') - ); + if ($this->checkPermissionBool("write")) { + $this->tabs_gui->addTab( + 'trash', + $this->lng->txt('trash'), + $this->ctrl->getLinkTarget($this, 'trash') + ); + } if ($this->checkPermissionBool("edit_permission")) { $this->tabs_gui->addTab( diff --git a/components/ILIAS/ContainerReference/classes/class.ilContainerReference.php b/components/ILIAS/ContainerReference/classes/class.ilContainerReference.php index 039875008ebf..78a83349c5d1 100755 --- a/components/ILIAS/ContainerReference/classes/class.ilContainerReference.php +++ b/components/ILIAS/ContainerReference/classes/class.ilContainerReference.php @@ -222,7 +222,7 @@ public function update(): bool $query = "INSERT INTO container_reference (obj_id, target_obj_id, title_type) " . "VALUES( " . $ilDB->quote($this->getId(), 'integer') . ", " . - $ilDB->quote($this->getTargetId(), 'integer') . ", " . + $ilDB->quote((int) $this->getTargetId(), 'integer') . ", " . $ilDB->quote($this->getTitleType(), 'integer') . ' ' . ")"; $ilDB->manipulate($query); diff --git a/components/ILIAS/ContentPage/classes/class.ilContentPageDataSet.php b/components/ILIAS/ContentPage/classes/class.ilContentPageDataSet.php index 15dacf3b0729..9f7ffe98f252 100755 --- a/components/ILIAS/ContentPage/classes/class.ilContentPageDataSet.php +++ b/components/ILIAS/ContentPage/classes/class.ilContentPageDataSet.php @@ -160,6 +160,12 @@ public function importRecord( $a_rec['id'] . ':0:' . self::OBJ_TYPE, $newObject->getId() . ':0:' . self::OBJ_TYPE ); + $a_mapping->addMapping( + "components/ILIAS/ILIASObject", + "obj", + $a_rec["id"], + (string) $newObject->getId() + ); break; } } @@ -171,7 +177,9 @@ public function getXmlRecord( ): array { if ($a_entity === self::OBJ_TYPE) { $style = $this->content_style_domain->styleForObjId((int) $a_set['id']); - $a_set['Style'] = $style->getStyleId(); + if ($style->getExportStyleId() > 0) { + $a_set['Style'] = $style->getExportStyleId(); + } return $a_set; } diff --git a/components/ILIAS/ContentPage/classes/class.ilContentPageExporter.php b/components/ILIAS/ContentPage/classes/class.ilContentPageExporter.php index 4af4193214a1..830ca53644c9 100755 --- a/components/ILIAS/ContentPage/classes/class.ilContentPageExporter.php +++ b/components/ILIAS/ContentPage/classes/class.ilContentPageExporter.php @@ -77,7 +77,7 @@ public function getXmlExportTailDependencies(string $a_entity, string $a_target_ $style_id = $this->content_style_domain ->styleForObjId($copa->getId()) - ->getStyleId(); + ->getExportStyleId(); if ($style_id > 0) { $styleIds[$style_id] = $style_id; } diff --git a/components/ILIAS/ContentPage/classes/class.ilObjContentPageGUI.php b/components/ILIAS/ContentPage/classes/class.ilObjContentPageGUI.php index 0284d9406f8d..92f7a881b0ec 100755 --- a/components/ILIAS/ContentPage/classes/class.ilObjContentPageGUI.php +++ b/components/ILIAS/ContentPage/classes/class.ilObjContentPageGUI.php @@ -74,6 +74,7 @@ public function __construct(int $a_id = 0, int $a_id_type = self::REPOSITORY_NOD $this->lng->loadLanguageModule('style'); $this->lng->loadLanguageModule('content'); $this->lng->loadLanguageModule('rep'); + $this->lng->loadLanguageModule('obj'); if ($this->object instanceof ilObjContentPage) { $this->infoScreenEnabled = (bool) ilContainer::_lookupContainerSetting( @@ -219,14 +220,6 @@ public function executeCommand(): void $this->addToNavigationHistory(); - if (!$this->in_page_editor_style_context && - strtolower($nextClass) !== strtolower(ilObjectContentStyleSettingsGUI::class) && - (strtolower($cmd) !== strtolower(self::UI_CMD_EDIT) || strtolower($nextClass) !== strtolower( - ilContentPagePageGUI::class - ))) { - $this->renderHeaderActions(); - } - switch (strtolower($nextClass)) { case strtolower(TranslationGUI::class): $this->checkPermission('write'); @@ -417,6 +410,15 @@ public function executeCommand(): void parent::executeCommand(); } + + if (!$this->in_page_editor_style_context && + strtolower($nextClass) !== strtolower(ilObjectContentStyleSettingsGUI::class) && + (strtolower($cmd) !== strtolower(self::UI_CMD_EDIT) || strtolower($nextClass) !== strtolower( + ilContentPagePageGUI::class + ))) { + $this->renderHeaderActions(); + } + } protected function addToDesk(): void diff --git a/components/ILIAS/ContentPage/phpunit.xml b/components/ILIAS/ContentPage/phpunit.xml index 5adf9789015b..f9050f389f82 100755 --- a/components/ILIAS/ContentPage/phpunit.xml +++ b/components/ILIAS/ContentPage/phpunit.xml @@ -10,6 +10,7 @@ displayDetailsOnTestsThatTriggerDeprecations="true" displayDetailsOnTestsThatTriggerNotices="true" displayDetailsOnSkippedTests="true" + displayDetailsOnPhpunitDeprecations="true" backupGlobals="false" bootstrap="./tests/bootstrap.php" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"> diff --git a/components/ILIAS/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php b/components/ILIAS/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php index 79ce2ab89472..2ea932f09c1b 100755 --- a/components/ILIAS/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php +++ b/components/ILIAS/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php @@ -1,4 +1,5 @@ setName((string) $row->field_name); $this->setType((int) $row->field_type); - $this->setValues(unserialize($row->field_values) ?: []); - $this->setValueOptions(unserialize($row->field_values_opt) ?: []); + $this->setValues($row->field_values === null ? [] : (unserialize($row->field_values) ?: [])); + $this->setValueOptions($row->field_values_opt === null ? [] : (unserialize($row->field_values_opt) ?: [])); $this->enableRequired((bool) $row->field_required); } } diff --git a/components/ILIAS/Course/classes/Grouping/Table/AssignmentRetrieval.php b/components/ILIAS/Course/classes/Grouping/Table/AssignmentRetrieval.php index c71f45b386de..522aa39aa1aa 100755 --- a/components/ILIAS/Course/classes/Grouping/Table/AssignmentRetrieval.php +++ b/components/ILIAS/Course/classes/Grouping/Table/AssignmentRetrieval.php @@ -137,7 +137,7 @@ protected function sortRecords(array $records, Order $order): array $ordering_callable_without_direction = match ($order_field) { AssignmentHandler::COL_TITLE, AssignmentHandler::COL_PATH => - fn($a, $b) => $a[$order_field] ?? '' <=> $b[$order_field] ?? '', + fn($a, $b) => ($a[$order_field] ?? '') <=> ($b[$order_field] ?? ''), AssignmentHandler::COL_ASSIGNED => fn($a, $b) => isset($a[$order_field]) <=> isset($b[$order_field]) }; diff --git a/components/ILIAS/Course/classes/Grouping/Table/GroupingRetrieval.php b/components/ILIAS/Course/classes/Grouping/Table/GroupingRetrieval.php index bbea0c1cb1ec..9febf2271eca 100755 --- a/components/ILIAS/Course/classes/Grouping/Table/GroupingRetrieval.php +++ b/components/ILIAS/Course/classes/Grouping/Table/GroupingRetrieval.php @@ -137,9 +137,9 @@ protected function sortRecords(array $records, Order $order): array $ordering_callable_without_direction = match ($order_field) { GroupingHandler::COL_TITLE, GroupingHandler::COL_DESCRIPTION, GroupingHandler::COL_UNIQUE_FIELD => - fn($a, $b) => $a[$order_field] ?? '' <=> $b[$order_field] ?? '', + fn($a, $b) => ($a[$order_field] ?? '') <=> ($b[$order_field] ?? ''), GroupingHandler::COL_SOURCE => - fn($a, $b) => $a[GroupingHandler::COL_SOURCE]?->getLabel() ?? '' <=> $b[GroupingHandler::COL_SOURCE]?->getLabel() ?? '', + fn($a, $b) => ($a[GroupingHandler::COL_SOURCE]?->getLabel() ?? '') <=> ($b[GroupingHandler::COL_SOURCE]?->getLabel() ?? ''), GroupingHandler::COL_ASSIGNED_OBJS => function ($a, $b) { $a_items = ($a[GroupingHandler::COL_ASSIGNED_OBJS] ?? null)?->getItems() ?? []; diff --git a/components/ILIAS/Course/classes/Grouping/class.ilObjCourseGroupingGUI.php b/components/ILIAS/Course/classes/Grouping/class.ilObjCourseGroupingGUI.php index c326f607b00b..34121a6c356b 100755 --- a/components/ILIAS/Course/classes/Grouping/class.ilObjCourseGroupingGUI.php +++ b/components/ILIAS/Course/classes/Grouping/class.ilObjCourseGroupingGUI.php @@ -323,7 +323,7 @@ public function update(): void $this->edit($form); } - public function selectCourse(): void + protected function showSelectCourse(): void { if (!$this->access->checkAccess('write', '', $this->content_obj->getRefId())) { $this->error->raiseError($this->lng->txt('permission_denied'), $this->error->MESSAGE); @@ -345,6 +345,16 @@ public function selectCourse(): void $this->tpl->setContent($this->ui_renderer->render($table)); } + public function selectCourse(): void + { + /* + * Since this is triggered from a form command button, + * the actual cmd in the URL is 'post', which is a problem + * for data table view control. This redirect solves this. + */ + $this->ctrl->redirect($this, 'showSelectCourse'); + } + public function handleAssignmentTableAction(): void { switch ($this->assignment_table_handler->getSelectedTableAction()) { diff --git a/components/ILIAS/Course/classes/Objectives/Setup/ilCourseCleanupActivationMigration.php b/components/ILIAS/Course/classes/Objectives/Setup/ilCourseCleanupActivationMigration.php new file mode 100644 index 000000000000..a96739a34021 --- /dev/null +++ b/components/ILIAS/Course/classes/Objectives/Setup/ilCourseCleanupActivationMigration.php @@ -0,0 +1,93 @@ +db = $environment->getResource(Environment::RESOURCE_DATABASE); + } + + public function step(Environment $environment): void + { + $activation_data = $this->db->fetchObject( + $this->db->query( + 'SELECT obj_id FROM crs_items' . PHP_EOL + . 'GROUP BY obj_id HAVING COUNT(*) > 1 LIMIT 1' + ) + ); + + if ($activation_data === null) { + return; + } + + $parent_data = $this->db->fetchObject( + $this->db->queryF( + 'SELECT parent FROM tree WHERE child=%s', + [ilDBConstants::T_INTEGER], + [$activation_data->obj_id] + ) + ); + + if ($parent_data === null) { + $this->db->manipulateF( + 'DELETE FROM crs_items WHERE obj_id = %s', + [ilDBConstants::T_INTEGER], + [$activation_data->obj_id] + ); + return; + } + + $this->db->manipulateF( + 'DELETE FROM crs_items WHERE obj_id = %s AND parent_id != %s', + [ilDBConstants::T_INTEGER, ilDBConstants::T_INTEGER], + [$activation_data->obj_id, $parent_data->parent] + ); + } + + public function getRemainingAmountOfSteps(): int + { + return $this->db->numRows( + $this->db->query( + 'SELECT obj_id, parent_id FROM crs_items GROUP BY obj_id HAVING COUNT(*) > 1' + ) + ); + } +} diff --git a/components/ILIAS/Course/classes/Objectives/Setup/ilCourseObjectiveSetupAgent.php b/components/ILIAS/Course/classes/Objectives/Setup/ilCourseObjectiveSetupAgent.php index 451846081a34..179eb81e7c98 100644 --- a/components/ILIAS/Course/classes/Objectives/Setup/ilCourseObjectiveSetupAgent.php +++ b/components/ILIAS/Course/classes/Objectives/Setup/ilCourseObjectiveSetupAgent.php @@ -22,11 +22,11 @@ use ILIAS\Setup\Config; use ILIAS\Setup\Metrics; use ILIAS\Setup\Objective; -use ILIAS\Setup\Agent\NullAgent; +use ILIAS\Setup\Agent; use ILIAS\Refinery\Transformation; use ILIAS\Setup\ObjectiveCollection; -class ilCourseObjectiveSetupAgent extends NullAgent +class ilCourseObjectiveSetupAgent implements Agent { use Setup\Agent\HasNoNamedObjective; @@ -62,4 +62,16 @@ public function getBuildObjective(): Objective { return new Objective\NullObjective(); } + + public function getMigrations(): array + { + return [ + new ilCourseCleanupActivationMigration() + ]; + } + + public function hasConfig(): bool + { + return false; + } } diff --git a/components/ILIAS/Course/classes/Objectives/class.ilLOEditorGUI.php b/components/ILIAS/Course/classes/Objectives/class.ilLOEditorGUI.php index f068d9c1b0e0..112e9dcc87a1 100755 --- a/components/ILIAS/Course/classes/Objectives/class.ilLOEditorGUI.php +++ b/components/ILIAS/Course/classes/Objectives/class.ilLOEditorGUI.php @@ -21,6 +21,7 @@ use ILIAS\Style\Content\Object\ObjectFacade; use ILIAS\HTTP\GlobalHttpState; use ILIAS\Refinery\Factory; +use ILIAS\DI\UIServices as ilUIServices; /** * Class ilLOEditorGUI @@ -31,12 +32,12 @@ */ class ilLOEditorGUI { - public const TEST_TYPE_UNDEFINED = 0; - public const TEST_TYPE_IT = 1; - public const TEST_TYPE_QT = 2; + public const int TEST_TYPE_UNDEFINED = 0; + public const int TEST_TYPE_IT = 1; + public const int TEST_TYPE_QT = 2; - public const TEST_NEW = 1; - public const TEST_ASSIGN = 2; + public const int TEST_NEW = 1; + public const int TEST_ASSIGN = 2; private ilLogger $logger; @@ -52,6 +53,8 @@ class ilLOEditorGUI private ObjectFacade $content_style_domain; protected GlobalHttpState $http; protected Factory $refinery; + protected ilUIServices $ui_services; + protected ilDBInterface $db; private int $test_type = self::TEST_TYPE_UNDEFINED; @@ -75,6 +78,8 @@ public function __construct(ilObjCourseGUI $parent_gui) $this->logger = $DIC->logger()->crs(); $this->http = $DIC->http(); $this->refinery = $DIC->refinery(); + $this->ui_services = $DIC->ui(); + $this->db = $DIC->database(); } public function executeCommand(): void @@ -82,6 +87,8 @@ public function executeCommand(): void $next_class = $this->ctrl->getNextClass($this); $cmd = $this->ctrl->getCmd(); + + $this->setTabs(); switch ($next_class) { case 'ilcourseobjectivesgui': @@ -519,17 +526,31 @@ protected function testsOverview(): void } try { - $table = new ilLOTestAssignmentTableGUI( - $this, - 'testsOverview', + $data_retrieval = new ilLOTestAssignmentTableDataRetrieval( + $this->lng, + $this->db, + $this->ui_services, + $this->ctrl, + ilLOTestAssignmentTableGUI::TYPE_MULTIPLE_ASSIGNMENTS + ); + $data_retrieval->parseMultipleAssignments( $this->getParentObject()->getId(), + $this->getTestType() + ); + $table = new ilLOTestAssignmentTableGUI( + ilLOTestAssignmentTableGUI::TYPE_MULTIPLE_ASSIGNMENTS, $this->getTestType(), - ilLOTestAssignmentTableGUI::TYPE_MULTIPLE_ASSIGNMENTS + $this->getParentObject()->getId(), + $this->lng, + $this->ui_services, + $this->http, + $data_retrieval, + $this->refinery, + $this->ctrl, + $this->getParentObject() ); - $table->init(); - $table->parseMultipleAssignments(); + $table->handleCommands(); $this->tpl->setContent($table->getHTML()); - $this->showStatus( ($this->getTestType() == ilLOEditorGUI::TEST_TYPE_IT) ? ilLOEditorStatus::SECTION_ITES : @@ -581,16 +602,30 @@ protected function testOverview(): void } try { + $data_retrieval = new ilLOTestAssignmentTableDataRetrieval( + $this->lng, + $this->db, + $this->ui_services, + $this->ctrl, + ilLOTestAssignmentTableGUI::TYPE_SINGLE_ASSIGNMENTS, + ); + $data_retrieval->parseSingleAssignment( + ilLOSettings::getInstanceByObjId($this->getParentObject()->getId())->getTestByType($this->getTestType()) + ); $table = new ilLOTestAssignmentTableGUI( - $this, - 'testOverview', + ilLOTestAssignmentTableGUI::TYPE_SINGLE_ASSIGNMENTS, + $this->getTestType(), $this->getParentObject()->getId(), - $this->getTestType() + $this->lng, + $this->ui_services, + $this->http, + $data_retrieval, + $this->refinery, + $this->ctrl, + $this->getParentObject() ); - $table->init(); - $table->parse(ilLOSettings::getInstanceByObjId($this->getParentObject()->getId())->getTestByType($this->getTestType())); + $table->handleCommands(); $this->tpl->setContent($table->getHTML()); - $this->showStatus( ($this->getTestType() == ilLOEditorGUI::TEST_TYPE_IT) ? ilLOEditorStatus::SECTION_ITES : @@ -614,207 +649,6 @@ protected function testOverviewQualified(): void $this->testOverview(); } - /** - * Show delete test confirmation - */ - protected function confirmDeleteTests(): void - { - $this->setTestType($this->initTestTypeFromQuery()); - $this->ctrl->setParameter($this, 'tt', $this->getTestType()); - - $settings = ilLOSettings::getInstanceByObjId($this->getParentObject()->getId()); - switch ($this->getTestType()) { - case ilLOSettings::TYPE_TEST_INITIAL: - $this->tabs->activateSubTab('itests'); - break; - - case ilLOSettings::TYPE_TEST_QUALIFIED: - $this->tabs->activateSubTab('qtests'); - break; - } - - $tests = []; - if ($this->http->wrapper()->post()->has('tst')) { - $tests = $this->http->wrapper()->post()->retrieve( - 'tst', - $this->refinery->kindlyTo()->listOf( - $this->refinery->kindlyTo()->int() - ) - ); - } - if (!count($tests)) { - $this->main_tpl->setOnScreenMessage('failure', $this->lng->txt('select_one'), true); - $this->ctrl->redirect($this, 'testsOverview'); - } - $confirm = new ilConfirmationGUI(); - $confirm->setHeaderText($this->lng->txt('crs_loc_confirm_delete_tst')); - $confirm->setFormAction($this->ctrl->getFormAction($this)); - $confirm->setConfirm($this->lng->txt('crs_loc_delete_assignment'), 'deleteTests'); - $confirm->setCancel($this->lng->txt('cancel'), 'testsOverview'); - foreach ($tests as $assign_id) { - $assignment = new ilLOTestAssignment($assign_id); - - $obj_id = ilObject::_lookupObjId($assignment->getTestRefId()); - $confirm->addItem('tst[]', (string) $assign_id, ilObject::_lookupTitle($obj_id)); - } - - $this->tpl->setContent($confirm->getHTML()); - - $this->showStatus( - ($this->getTestType() == ilLOSettings::TYPE_TEST_INITIAL) ? - ilLOEditorStatus::SECTION_ITES : - ilLOEditorStatus::SECTION_QTEST - ); - } - - /** - * Show delete confirmation screen - */ - protected function confirmDeleteTest(): void - { - $this->setTestType($this->initTestTypeFromQuery()); - $this->ctrl->setParameter($this, 'tt', $this->getTestType()); - - $settings = ilLOSettings::getInstanceByObjId($this->getParentObject()->getId()); - switch ($this->getTestType()) { - case ilLOSettings::TYPE_TEST_INITIAL: - $this->tabs->activateSubTab('itest'); - break; - - case ilLOSettings::TYPE_TEST_QUALIFIED: - $this->tabs->activateSubTab('qtest'); - break; - } - - $tests = []; - if ($this->http->wrapper()->post()->has('tst')) { - $tests = $this->http->wrapper()->post()->retrieve( - 'tst', - $this->refinery->kindlyTo()->listOf( - $this->refinery->kindlyTo()->int() - ) - ); - } - if (count($tests) === 0) { - $this->main_tpl->setOnScreenMessage('failure', $this->lng->txt('select_one'), true); - $this->ctrl->redirect($this, 'testOverview'); - } - - $confirm = new ilConfirmationGUI(); - $confirm->setHeaderText($this->lng->txt('crs_loc_confirm_delete_tst')); - $confirm->setFormAction($this->ctrl->getFormAction($this)); - $confirm->setConfirm($this->lng->txt('crs_loc_delete_assignment'), 'deleteTest'); - $confirm->setCancel($this->lng->txt('cancel'), 'testOverview'); - - foreach ($tests as $tst_id) { - $obj_id = ilObject::_lookupObjId($tst_id); - $confirm->addItem('tst[]', (string) $tst_id, ilObject::_lookupTitle($obj_id)); - } - $this->tpl->setContent($confirm->getHTML()); - - $this->showStatus( - ($this->getTestType() == ilLOEditorGUI::TEST_TYPE_IT) ? - ilLOEditorStatus::SECTION_ITES : - ilLOEditorStatus::SECTION_QTEST - ); - } - - protected function deleteTests(): void - { - $this->setTestType($this->initTestTypeFromQuery()); - $this->ctrl->setParameter($this, 'tt', $this->getTestType()); - - $settings = ilLOSettings::getInstanceByObjId($this->getParentObject()->getId()); - switch ($this->getTestType()) { - case ilLOSettings::TYPE_TEST_INITIAL: - $this->tabs->activateSubTab('itests'); - break; - - case ilLOSettings::TYPE_TEST_QUALIFIED: - $this->tabs->activateSubTab('qtests'); - break; - } - - $tests = []; - if ($this->http->wrapper()->post()->has('tst')) { - $tests = $this->http->wrapper()->post()->retrieve( - 'tst', - $this->refinery->kindlyTo()->listOf( - $this->refinery->kindlyTo()->int() - ) - ); - } - foreach ($tests as $assign_id) { - $assignment = new ilLOTestAssignment($assign_id); - $assignment->delete(); - - // finally delete start object assignment - $start = new ilContainerStartObjects( - $this->getParentObject()->getRefId(), - $this->getParentObject()->getId() - ); - $start->deleteItem($assignment->getTestRefId()); - - // ... and assigned questions - ilCourseObjectiveQuestion::deleteTest($assignment->getTestRefId()); - } - - $this->main_tpl->setOnScreenMessage('success', $this->lng->txt('settings_saved'), true); - $this->ctrl->redirect($this, 'testsOverview'); - } - - protected function deleteTest(): void - { - $this->setTestType($this->initTestTypeFromQuery()); - $this->ctrl->setParameter($this, 'tt', $this->getTestType()); - - $settings = ilLOSettings::getInstanceByObjId($this->getParentObject()->getId()); - switch ($this->getTestType()) { - case ilLOSettings::TYPE_TEST_INITIAL: - $this->tabs->activateSubTab('itest'); - break; - - case ilLOSettings::TYPE_TEST_QUALIFIED: - $this->tabs->activateSubTab('qtest'); - break; - } - - $tests = []; - if ($this->http->wrapper()->post()->has('tst')) { - $tests = $this->http->wrapper()->post()->retrieve( - 'tst', - $this->refinery->kindlyTo()->listOf( - $this->refinery->kindlyTo()->int() - ) - ); - } - foreach ($tests as $tst_id) { - switch ($this->getTestType()) { - case ilLOSettings::TYPE_TEST_INITIAL: - $settings->setInitialTest(0); - break; - - case ilLOSettings::TYPE_TEST_QUALIFIED: - $settings->setQualifiedTest(0); - break; - } - $settings->update(); - - // finally delete start object assignment - $start = new ilContainerStartObjects( - $this->getParentObject()->getRefId(), - $this->getParentObject()->getId() - ); - $start->deleteItem($tst_id); - - // ... and assigned questions - ilCourseObjectiveQuestion::deleteTest($tst_id); - } - - $this->main_tpl->setOnScreenMessage('success', $this->lng->txt('settings_saved'), true); - $this->ctrl->redirect($this, 'testOverview'); - } - protected function testAssignment(?ilPropertyFormGUI $form = null): void { if ($this->getTestType() === ilLOSettings::TYPE_TEST_UNDEFINED) { diff --git a/components/ILIAS/Course/classes/Objectives/class.ilLOTestAssignmentTableDataRetrieval.php b/components/ILIAS/Course/classes/Objectives/class.ilLOTestAssignmentTableDataRetrieval.php new file mode 100644 index 000000000000..9b0ddd477f12 --- /dev/null +++ b/components/ILIAS/Course/classes/Objectives/class.ilLOTestAssignmentTableDataRetrieval.php @@ -0,0 +1,197 @@ +join([], fn($ret, $key, $value) => [$key, $value]); + if ($column_name === ilLOTestAssignmentTableGUI::TABLE_COL_TITLE) { + uasort($this->data, function ($a, $b) { + return strcmp($a['title'], $b['title']); + }); + } + if ($direction === 'DESC') { + $rows = array_reverse($this->data); + } else { + $rows = $this->data; + } + foreach ($rows as $row) { + $id = $this->assignment_type === ilLOTestAssignmentTableGUI::TYPE_MULTIPLE_ASSIGNMENTS + ? $row['assignment_id'] + : $row['ref_id']; + $type = ''; + switch ($row['ttype']) { + case ilObjTest::QUESTION_SET_TYPE_FIXED: + $type = $this->lng->txt('tst_question_set_type_fixed'); + break; + + case ilObjTest::QUESTION_SET_TYPE_RANDOM: + $type = $this->lng->txt('tst_question_set_type_random'); + break; + } + $this->ctrl->setParameterByClass('ilobjtestgui', 'ref_id', $row['ref_id']); + $this->ctrl->setParameterByClass('ilobjtestgui', 'cmd', 'questionsTabGateway'); + $title_link = $this->ui_services->factory()->link()->standard($row['title'], $this->ctrl->getLinkTargetByClass('ilobjtestgui')); + $data = []; + $data[ilLOTestAssignmentTableGUI::TABLE_COL_TITLE] = $title_link; + if ($this->assignment_type === ilLOTestAssignmentTableGUI::TYPE_MULTIPLE_ASSIGNMENTS) { + $data[ilLOTestAssignmentTableGUI::TABLE_COL_COURSE_OBJECTIVES] = $row['objective']; + } + $data[ilLOTestAssignmentTableGUI::TABLE_COL_SELECTION_OF_TEST_QUESTIONS] = $type; + $data[ilLOTestAssignmentTableGUI::TABLE_COL_QESTIONS] = $row['qst_info']; + + if (isset($row['qpls']) && count($row['qpls']) > 0) { + $data[ilLOTestAssignmentTableGUI::TABLE_COL_QESTIONS] .= '
' . implode('
', $row['qpls']); + } + + yield $row_builder->buildDataRow( + $id . '', + $data + ); + } + } + + public function getTotalRowCount( + mixed $additional_viewcontrol_data, + mixed $filter_data, + mixed $additional_parameters + ): ?int { + return count($this->data); + } + + protected function doParse( + int $a_tst_ref_id, + int $a_objective_id = 0 + ): array { + $tst = ilObjectFactory::getInstanceByRefId($a_tst_ref_id, false); + if (!$tst instanceof ilObjTest) { + throw new ilLOInvalidConfigurationException('No valid test given'); + } + $tst_data['ref_id'] = $tst->getRefId(); + $tst_data['title'] = $tst->getTitle(); + $tst_data['description'] = $tst->getLongDescription(); + $tst_data['ttype'] = $tst->getQuestionSetType(); + if ($this->assignment_type == ilLOTestAssignmentTableGUI::TYPE_MULTIPLE_ASSIGNMENTS) { + $tst_data['objective'] = ilCourseObjective::lookupObjectiveTitle($a_objective_id); + } + switch ($tst->getQuestionSetType()) { + case ilObjTest::QUESTION_SET_TYPE_FIXED: + $tst_data['qst_info'] = $this->lng->txt('crs_loc_tst_num_qst'); + $tst_data['qst_info'] .= (' ' . count($tst->getAllQuestions())); + break; + default: + // get available assiged question pools + $list = new ilTestRandomQuestionSetSourcePoolDefinitionList( + $GLOBALS['DIC']['ilDB'], + $tst, + new ilTestRandomQuestionSetSourcePoolDefinitionFactory( + $GLOBALS['DIC']['ilDB'], + $tst + ) + ); + $list->loadDefinitions(); + // tax translations + $translator = new ilTestQuestionFilterLabelTranslator($this->db, $this->lng); + $translator->loadLabels($list); + $tst_data['qst_info'] = $this->lng->txt('crs_loc_tst_qpls'); + $num = 0; + foreach ($list as $definition) { + $title = $definition->getPoolTitle(); + $filterTitle = []; + $filterTitle[] = $translator->getTaxonomyFilterLabel($definition->getMappedTaxonomyFilter()); + $filterTitle[] = $translator->getTypeFilterLabel($definition->getTypeFilter()); + if (!empty($filterTitle)) { + $title .= ' -> ' . implode(' / ', $filterTitle); + } + $tst_data['qpls'][] = $title; + ++$num; + } + if ($num === 0) { + $tst_data['qst_info'] .= (' ' . 0); + } + break; + } + return $tst_data; + } + + public function parseSingleAssignment( + int $a_tst_ref_id, + int $a_objective_id = 0 + ): void { + $this->data = [$this->doParse($a_tst_ref_id, $a_objective_id)]; + } + + public function parseMultipleAssignments( + int $container_id, + int $test_type + ): void { + $assignments = ilLOTestAssignments::getInstance($container_id); + $available = $assignments->getAssignmentsByType($test_type); + $data = []; + foreach ($available as $assignment) { + try { + $tmp = $this->doParse($assignment->getTestRefId(), $assignment->getObjectiveId()); + } catch (ilLOInvalidConfigurationException $e) { + $assignment->delete(); + continue; + } + if ($tmp !== []) { + // add assignment id + $tmp['assignment_id'] = $assignment->getAssignmentId(); + $data[] = $tmp; + } + } + $this->data = $data; + } + + public function allIds(): array + { + $ids = []; + foreach ($this->data as $assignment) { + $id = $this->assignment_type === ilLOTestAssignmentTableGUI::TYPE_MULTIPLE_ASSIGNMENTS + ? $assignment['assignment_id'] + : $assignment['ref_id']; + $ids[] = $id; + } + return $ids; + } +} diff --git a/components/ILIAS/Course/classes/Objectives/class.ilLOTestAssignmentTableGUI.php b/components/ILIAS/Course/classes/Objectives/class.ilLOTestAssignmentTableGUI.php index e3fae886abd2..89a9cd6ebd08 100755 --- a/components/ILIAS/Course/classes/Objectives/class.ilLOTestAssignmentTableGUI.php +++ b/components/ILIAS/Course/classes/Objectives/class.ilLOTestAssignmentTableGUI.php @@ -17,251 +17,329 @@ *********************************************************************/ declare(strict_types=0); + +use ILIAS\Data\Factory as ilDataFactory; +use ILIAS\HTTP\Services as ilHTTPServices; +use ILIAS\Refinery\Factory as ilRefineryFactory; +use ILIAS\UI\Component\Table\Data as ilDataTable; +use ILIAS\UI\URLBuilder; +use ILIAS\DI\UIServices as ilUIServices; +use ILIAS\UI\URLBuilderToken as ilURLBuilderToken; +use JetBrains\PhpStorm\NoReturn; + /** * Class ilLOTestAssignmentTableGUI * @author Stefan Meyer */ -class ilLOTestAssignmentTableGUI extends ilTable2GUI +class ilLOTestAssignmentTableGUI { - public const TYPE_MULTIPLE_ASSIGNMENTS = 1; - public const TYPE_SINGLE_ASSIGNMENTS = 2; - - private int $test_type = 0; - private int $assignment_type = self::TYPE_SINGLE_ASSIGNMENTS; - private ilLOSettings $settings; - private int $container_id = 0; - - protected ilDBInterface $db; + public const int TYPE_MULTIPLE_ASSIGNMENTS = 1; + public const int TYPE_SINGLE_ASSIGNMENTS = 2; + public const string TABLE_COL_TITLE = 'title'; + public const string TABLE_COL_COURSE_OBJECTIVES = 'objective'; + public const string TABLE_COL_SELECTION_OF_TEST_QUESTIONS = 'ttype'; + public const string TABLE_COL_QESTIONS = 'qstqpl'; + protected const string ALL_OBJECTS = "ALL_OBJECTS"; + protected const string TABLE_ID = 'lotstasstbl'; + protected const string ROW_ID = 'row_ids'; + protected const string TABLE_ACTION_ID = 'table_action'; + protected const string TABLE_ACTION_CONFIRM_DELETE_TESTS = 'confirmDeleteTests'; + protected const string TABLE_ACTION_CONFIRM_DELETE_TEST = 'confirmDeleteTest'; + protected const string ACTION_CONFIRM_DELETE_TEST = "delete_selected_test"; + protected const string ACTION_CONFIRM_DELETE_TESTS = "delete_selected_tests"; + protected const string LNG_TABLE_COL_TITLE = 'title'; + protected const string LNG_TABLE_COL_COURSE_OBJECTIVES = 'crs_objectives'; + protected const string LNG_TABLE_COL_SELECTION_OF_TEST_QUESTIONS = 'crs_loc_tbl_tst_type'; + protected const string LNG_TABLE_COL_QESTIONS = 'crs_loc_tbl_tst_qst_qpl'; + protected const string LNG_TABLE_ACTION_CONFIRM_DELETE_TESTS = 'crs_loc_delete_assignment'; + protected const string LNG_TABLE_ACTION_CONFIRM_DELETE_TEST = 'crs_loc_delete_assignment'; + + protected URLBuilder $url_builder; + protected ilDataFactory $data_factory; + protected ilURLBuilderToken $action_parameter_token; + protected ilURLBuilderToken $row_id_token; + protected ilDataTable $table; + protected ilLOSettings $settings; public function __construct( - object $a_parent_obj, - string $a_parent_cmd, - int $a_container_id, - int $a_test_type, - int $a_assignment_type = self::TYPE_SINGLE_ASSIGNMENTS + protected int $assignment_type, + protected int $test_type, + protected int $container_id, + protected ilLanguage $lng, + protected ilUIServices $ui_services, + protected ilHTTPServices $http_services, + protected ilLOTestAssignmentTableDataRetrieval $data_retrieval, + protected ilRefineryFactory $refinery, + protected ilCtrl $ctrl, + protected object $parent_object ) { - global $DIC; - - $this->test_type = $a_test_type; - $this->assignment_type = $a_assignment_type; - $this->container_id = $a_container_id; - $this->db = $DIC->database(); + $this->data_factory = new ilDataFactory(); + $this->settings = ilLOSettings::getInstanceByObjId($container_id); + } - $this->setId('obj_loc_' . $a_container_id); - parent::__construct($a_parent_obj, $a_parent_cmd); + protected function getColumns(): array + { + $columns = []; + $columns[self::TABLE_COL_TITLE] = $this->ui_services->factory()->table()->column()->link( + $this->lng->txt(self::LNG_TABLE_COL_TITLE) + )->withIsSortable(true); + if ($this->getAssignmentType() == self::TYPE_MULTIPLE_ASSIGNMENTS) { + $columns[self::TABLE_COL_COURSE_OBJECTIVES] = $this->ui_services->factory()->table()->column()->text( + $this->lng->txt(self::LNG_TABLE_COL_COURSE_OBJECTIVES) + )->withIsSortable(false); + } + $columns[self::TABLE_COL_SELECTION_OF_TEST_QUESTIONS] = $this->ui_services->factory()->table()->column()->text( + $this->lng->txt(self::LNG_TABLE_COL_SELECTION_OF_TEST_QUESTIONS) + )->withIsSortable(false); + $columns[self::TABLE_COL_QESTIONS] = $this->ui_services->factory()->table()->column()->text( + $this->lng->txt(self::LNG_TABLE_COL_QESTIONS) + )->withIsSortable(false); + return $columns; + } - $this->settings = ilLOSettings::getInstanceByObjId($a_container_id); - $this->initTitle(); - $this->setTopCommands(false); + protected function getActions(): array + { + $this->url_builder = new URLBuilder($this->data_factory->uri($this->http_services->request()->getUri()->__toString())); + list($this->url_builder, $this->action_parameter_token, $this->row_id_token) = + $this->url_builder->acquireParameters( + ['datatable', self::TABLE_ID], + self::TABLE_ACTION_ID, + self::ROW_ID + ); + $actions = []; + if ($this->getAssignmentType() === self::TYPE_MULTIPLE_ASSIGNMENTS) { + $actions[self::TABLE_ACTION_CONFIRM_DELETE_TESTS] = $this->ui_services->factory()->table()->action()->multi( + $this->lng->txt(self::LNG_TABLE_ACTION_CONFIRM_DELETE_TESTS), + $this->url_builder->withParameter($this->action_parameter_token, self::TABLE_ACTION_CONFIRM_DELETE_TESTS), + $this->row_id_token, + )->withAsync(); + } + if ($this->getAssignmentType() !== self::TYPE_MULTIPLE_ASSIGNMENTS) { + $actions[self::TABLE_ACTION_CONFIRM_DELETE_TESTS] = $this->ui_services->factory()->table()->action()->multi( + $this->lng->txt(self::LNG_TABLE_ACTION_CONFIRM_DELETE_TEST), + $this->url_builder->withParameter($this->action_parameter_token, self::TABLE_ACTION_CONFIRM_DELETE_TEST), + $this->row_id_token, + )->withAsync(); + } + return $actions; } - public function initTitle(): void + protected function getTitleLangVar(): string { switch ($this->test_type) { case ilLOSettings::TYPE_TEST_INITIAL: - if ($this->getAssignmentType() == self::TYPE_SINGLE_ASSIGNMENTS) { - if ($this->getSettings()->isInitialTestQualifying()) { - $this->setTitle($this->lng->txt('crs_loc_settings_tbl_its_q_all')); - } else { - $this->setTitle($this->lng->txt('crs_loc_settings_tbl_its_nq_all')); - } - } elseif ($this->getSettings()->isInitialTestQualifying()) { - $this->setTitle($this->lng->txt('crs_loc_settings_tbl_it_q')); - } else { - $this->setTitle($this->lng->txt('crs_loc_settings_tbl_it_nq')); + if ( + $this->getAssignmentType() === self::TYPE_SINGLE_ASSIGNMENTS && + $this->getSettings()->isInitialTestQualifying() + ) { + return 'crs_loc_settings_tbl_its_q_all'; + } + if ( + $this->getAssignmentType() === self::TYPE_SINGLE_ASSIGNMENTS && + !$this->getSettings()->isInitialTestQualifying() + ) { + return 'crs_loc_settings_tbl_its_nq_all'; + } + if ($this->getSettings()->isInitialTestQualifying()) { + return 'crs_loc_settings_tbl_it_q'; + } + if (!$this->getSettings()->isInitialTestQualifying()) { + return 'crs_loc_settings_tbl_it_nq'; } break; case ilLOSettings::TYPE_TEST_QUALIFIED: - if ($this->getAssignmentType() == self::TYPE_SINGLE_ASSIGNMENTS) { - $this->setTitle($this->lng->txt('crs_loc_settings_tbl_qts_all')); - } else { - $this->setTitle($this->lng->txt('crs_loc_settings_tbl_qt')); + if ($this->getAssignmentType() === self::TYPE_SINGLE_ASSIGNMENTS) { + return 'crs_loc_settings_tbl_qts_all'; + } + if ($this->getAssignmentType() !== self::TYPE_SINGLE_ASSIGNMENTS) { + return 'crs_loc_settings_tbl_qt'; } break; } + return 'lng_title_missing'; } - public function getSettings(): ilLOSettings + protected function initTable(): void { - return $this->settings; + if (isset($this->table)) { + return; + } + $this->table = $this->ui_services->factory()->table()->data( + $this->data_retrieval, + $this->lng->txt($this->getTitleLangVar()), + $this->getColumns() + ) + ->withId(self::TABLE_ID) + ->withActions($this->getActions()) + ->withRequest($this->http_services->request()); } - public function getAssignmentType(): int + protected function allIds(): array { - return $this->assignment_type; + return $this->data_retrieval->allIds(); } - /** - * Init table - */ - public function init(): void + protected function readIdsFromQuery(): array { - $this->addColumn('', '', '20px'); - $this->addColumn($this->lng->txt('title'), 'title'); - - if ($this->getAssignmentType() == self::TYPE_MULTIPLE_ASSIGNMENTS) { - $this->addColumn($this->lng->txt('crs_objectives'), 'objective'); - } - - $this->addColumn($this->lng->txt('crs_loc_tbl_tst_type'), 'ttype'); - $this->addColumn($this->lng->txt('crs_loc_tbl_tst_qst_qpl'), 'qstqpl'); - - $this->setRowTemplate("tpl.crs_loc_tst_row.html", "components/ILIAS/Course"); - $this->setFormAction($GLOBALS['DIC']['ilCtrl']->getFormAction($this->getParentObject())); + $tokens = $this->http_services->wrapper()->query()->retrieve( + $this->row_id_token->getName(), + $this->refinery->custom()->transformation(fn($v) => $v) + ); + return is_null($tokens) + ? [] + : (is_array($tokens) ? $tokens : [$tokens]); + } - if ($this->getAssignmentType() == self::TYPE_MULTIPLE_ASSIGNMENTS) { - $this->addMultiCommand('confirmDeleteTests', $this->lng->txt('crs_loc_delete_assignment')); - $this->setDefaultOrderField('objective'); - $this->setDefaultOrderDirection('asc'); - } else { - $this->addMultiCommand('confirmDeleteTest', $this->lng->txt('crs_loc_delete_assignment')); - $this->setDefaultOrderField('title'); - $this->setDefaultOrderDirection('asc'); + #[NoReturn] protected function showDeleteModal( + array $id_map, + string $url_action + ): void { + $items = []; + foreach ($id_map as $id => $obj_id) { + $items[] = $this->ui_services->factory()->modal()->interruptiveItem()->standard( + $id, + ilObject::_lookupTitle($obj_id), + ); } + echo($this->ui_services->renderer()->renderAsync([ + $this->ui_services->factory()->modal()->interruptive( + $this->lng->txt('crs_loc_delete_assignment'), + $this->lng->txt('crs_loc_confirm_delete_tst'), + (string) $this->url_builder + ->withParameter( + $this->action_parameter_token, + $url_action + )->withParameter( + $this->row_id_token, + array_keys($id_map) + )->buildURI() + )->withAffectedItems($items) + ])); + exit(); } - protected function fillRow(array $a_set): void + protected function deleteTests(array $ids): void { - if ($this->getAssignmentType() == self::TYPE_MULTIPLE_ASSIGNMENTS) { - $this->tpl->setVariable('VAL_ID', $a_set['assignment_id']); - } else { - $this->tpl->setVariable('VAL_ID', $a_set['ref_id']); - } - $this->tpl->setVariable('VAL_TITLE', $a_set['title']); - - $this->ctrl->setParameterByClass('ilobjtestgui', 'ref_id', $a_set['ref_id']); - $this->ctrl->setParameterByClass('ilobjtestgui', 'cmd', 'questionsTabGateway'); - $this->tpl->setVariable( - 'TITLE_LINK', - $this->ctrl->getLinkTargetByClass('ilobjtestgui') - ); - - if ($this->getAssignmentType() == self::TYPE_MULTIPLE_ASSIGNMENTS) { - $this->tpl->setCurrentBlock('objectives'); - $this->tpl->setVariable('VAL_OBJECTIVE', (string) $a_set['objective']); - $this->tpl->parseCurrentBlock(); + foreach ($ids as $assign_id) { + $assignment = new ilLOTestAssignment($assign_id); + $assignment->delete(); + + // finally delete start object assignment + $start = new ilContainerStartObjects( + $this->getParentObject()->getRefId(), + $this->getParentObject()->getId() + ); + $start->deleteItem($assignment->getTestRefId()); + + // ... and assigned questions + ilCourseObjectiveQuestion::deleteTest($assignment->getTestRefId()); } + $this->ctrl->redirectByClass('ilLOEditorGUI', 'testOverview'); + } - if (strlen($a_set['description'])) { - $this->tpl->setVariable('VAL_DESC', $a_set['description']); - } + protected function deleteTest(array $ids): void + { + $settings = ilLOSettings::getInstanceByObjId($this->getParentObject()->getId()); + foreach ($ids as $tst_id) { + switch ($this->getTestType()) { + case ilLOSettings::TYPE_TEST_INITIAL: + $settings->setInitialTest(0); + break; + + case ilLOSettings::TYPE_TEST_QUALIFIED: + $settings->setQualifiedTest(0); + break; + } + $settings->update(); - $type = ''; - switch ($a_set['ttype']) { - case ilObjTest::QUESTION_SET_TYPE_FIXED: - $type = $this->lng->txt('tst_question_set_type_fixed'); - break; + // finally delete start object assignment + $start = new ilContainerStartObjects( + $this->getParentObject()->getRefId(), + $this->getParentObject()->getId() + ); + $start->deleteItem($tst_id); - case ilObjTest::QUESTION_SET_TYPE_RANDOM: - $type = $this->lng->txt('tst_question_set_type_random'); - break; + // ... and assigned questions + ilCourseObjectiveQuestion::deleteTest($tst_id); } + $this->ctrl->redirectByClass('ilLOEditorGUI', 'testOverview'); + } - $this->tpl->setVariable('VAL_TTYPE', $type); - $this->tpl->setVariable('VAL_QST_QPL', $a_set['qst_info']); - - if (isset($a_set['qpls']) && is_array($a_set['qpls']) && $a_set['qpls'] !== []) { - foreach ($a_set['qpls'] as $title) { - $this->tpl->setCurrentBlock('qpl'); - $this->tpl->setVariable('MAT_TITLE', $title); - $this->tpl->parseCurrentBlock(); - } - $this->tpl->touchBlock('ul_begin'); - $this->tpl->touchBlock('ul_end'); - } + public function getHTML(): string + { + $this->initTable(); + return $this->ui_services->renderer()->render([$this->table]); } - public function parseMultipleAssignments(): void + public function getAssignmentType(): int { - $assignments = ilLOTestAssignments::getInstance($this->container_id); - $available = $assignments->getAssignmentsByType($this->test_type); - $data = array(); - foreach ($available as $assignment) { - try { - $tmp = $this->doParse($assignment->getTestRefId(), $assignment->getObjectiveId()); - } catch (ilLOInvalidConfigurationException $e) { - $assignment->delete(); - continue; - } - if ($tmp !== []) { - // add assignment id - $tmp['assignment_id'] = $assignment->getAssignmentId(); - $data[] = $tmp; - } - } + return $this->assignment_type; + } - $this->setData($data); + public function getSettings(): ilLOSettings + { + return $this->settings; } - public function parse(int $a_tst_ref_id): void + public function getParentObject(): object { - $this->setData(array($this->doParse($a_tst_ref_id))); + return $this->parent_object; } - /** - * Parse test - * throws ilLOInvalidConfigurationException in case assigned test cannot be found. - */ - protected function doParse(int $a_tst_ref_id, int $a_objective_id = 0): array + public function getTestType(): int { - $tst = ilObjectFactory::getInstanceByRefId($a_tst_ref_id, false); + return $this->test_type; + } - if (!$tst instanceof ilObjTest) { - throw new ilLOInvalidConfigurationException('No valid test given'); + public function handleCommands(): void + { + $this->initTable(); + if (!$this->http_services->wrapper()->query()->has($this->action_parameter_token->getName())) { + return; } - $tst_data['ref_id'] = $tst->getRefId(); - $tst_data['title'] = $tst->getTitle(); - $tst_data['description'] = $tst->getLongDescription(); - $tst_data['ttype'] = $tst->getQuestionSetType(); - - if ($this->getAssignmentType() == self::TYPE_MULTIPLE_ASSIGNMENTS) { - $tst_data['objective'] = ilCourseObjective::lookupObjectiveTitle($a_objective_id); + $action = $this->http_services->wrapper()->query()->retrieve( + $this->action_parameter_token->getName(), + $this->refinery->to()->string() + ); + $tokens = $this->http_services->wrapper()->query()->retrieve( + $this->row_id_token->getName(), + $this->refinery->custom()->transformation(fn($v) => $v) + ); + $all_entries = ($tokens[0] ?? "") === self::ALL_OBJECTS; + $ids = []; + if ($all_entries) { + $ids = $this->allIds(); } - - switch ($tst->getQuestionSetType()) { - case ilObjTest::QUESTION_SET_TYPE_FIXED: - $tst_data['qst_info'] = $this->lng->txt('crs_loc_tst_num_qst'); - $tst_data['qst_info'] .= (' ' . count($tst->getAllQuestions())); - break; - - default: - // get available assiged question pools - - $list = new ilTestRandomQuestionSetSourcePoolDefinitionList( - $GLOBALS['DIC']['ilDB'], - $tst, - new ilTestRandomQuestionSetSourcePoolDefinitionFactory( - $GLOBALS['DIC']['ilDB'], - $tst - ) - ); - - $list->loadDefinitions(); - - // tax translations - $translator = new ilTestQuestionFilterLabelTranslator($this->db, $this->lng); - $translator->loadLabels($list); - - $tst_data['qst_info'] = $this->lng->txt('crs_loc_tst_qpls'); - $num = 0; - foreach ($list as $definition) { - /** @var ilTestRandomQuestionSetSourcePoolDefinition $definition */ - $title = $definition->getPoolTitle(); - $filterTitle = array(); - $filterTitle[] = $translator->getTaxonomyFilterLabel($definition->getMappedTaxonomyFilter()); - $filterTitle[] = $translator->getTypeFilterLabel($definition->getTypeFilter()); - if (!empty($filterTitle)) { - $title .= ' -> ' . implode(' / ', $filterTitle); - } - $tst_data['qpls'][] = $title; - ++$num; + if (!$all_entries) { + $ids = $this->readIdsFromQuery(); + } + if (is_null($ids[0]) || count($ids) === 0) { + return; + } + switch ($action) { + case self::TABLE_ACTION_CONFIRM_DELETE_TEST: + $id_map = []; + foreach ($ids as $id) { + $id_map[$id] = ilObject::_lookupObjId($id); + ; } - if ($num === 0) { - $tst_data['qst_info'] .= (' ' . 0); + $this->showDeleteModal($id_map, self::ACTION_CONFIRM_DELETE_TEST); + break; + case self::TABLE_ACTION_CONFIRM_DELETE_TESTS: + $id_map = []; + foreach ($ids as $id) { + $assignment = new ilLOTestAssignment($id); + $id_map[$id] = ilObject::_lookupObjId($assignment->getTestRefId()); } + $this->showDeleteModal($id_map, self::ACTION_CONFIRM_DELETE_TESTS); + break; + case self::ACTION_CONFIRM_DELETE_TEST: + $this->deleteTest($ids); + break; + case self::ACTION_CONFIRM_DELETE_TESTS: + $this->deleteTests($ids); break; } - return $tst_data; } } diff --git a/components/ILIAS/Course/classes/class.ilCourseMembershipGUI.php b/components/ILIAS/Course/classes/class.ilCourseMembershipGUI.php index 5d8877c1fe8e..02217f6f0136 100755 --- a/components/ILIAS/Course/classes/class.ilCourseMembershipGUI.php +++ b/components/ILIAS/Course/classes/class.ilCourseMembershipGUI.php @@ -379,7 +379,7 @@ protected function getPrintMemberData(array $a_members): array foreach ($a_members as $member_id) { // GET USER OBJ if ($tmp_obj = ilObjectFactory::getInstanceByObjId($member_id, false)) { - foreach ($udf_data->getAll() as $field) { + foreach ($udf_data as $field) { $print_member[$member_id]['udf_' . $field->getIdentifier()] = (string) $field->retrieveValueFromUser($tmp_obj); } diff --git a/components/ILIAS/Course/classes/class.ilCourseParticipantsGroupsTableDataRetrieval.php b/components/ILIAS/Course/classes/class.ilCourseParticipantsGroupsTableDataRetrieval.php index 766590d099ae..692687db7d1b 100644 --- a/components/ILIAS/Course/classes/class.ilCourseParticipantsGroupsTableDataRetrieval.php +++ b/components/ILIAS/Course/classes/class.ilCourseParticipantsGroupsTableDataRetrieval.php @@ -23,8 +23,9 @@ class ilCourseParticipantsGroupsTableDataRetrieval implements ilTableDataRetrievalInterface { - protected const TABLE_ACTION_CONFIRM_UNSUBSCRIBE_SUFFIX = '_confirm_unsubscribe'; - protected const TABLE_ACTION_UNSUBSCRIBE_SUFFIX = '_unsubscribe'; + protected const string TABLE_ACTION_CONFIRM_UNSUBSCRIBE_SUFFIX = '_confirm_unsubscribe'; + protected const string TABLE_ACTION_UNSUBSCRIBE_SUFFIX = '_unsubscribe'; + protected array $data; protected int $obj_id; @@ -43,7 +44,7 @@ protected function applyFilter( ?array $filter_data ): array { if (is_null($filter_data)) { - return $this->data['rows']; + return $this->data['rows'] ?? []; } /** * @var \ILIAS\UI\Component\Input\Field\Select $select @@ -55,7 +56,7 @@ protected function applyFilter( $group_ids = array_diff($group_ids, [0]); $name = $text->getValue() ?? ''; $rows = []; - foreach ($this->data['rows'] as $row) { + foreach ($this->data['rows'] ?? [] as $row) { $row_group_ids = []; foreach ($row['groups'] as $group) { $row_group_ids[] = $group['group_id']; @@ -104,7 +105,7 @@ public function getAllUserIds(): array { # TODO: Filter $ids = []; - foreach ($this->data['rows'] as $row) { + foreach ($this->data['rows'] ?? [] as $row) { $ids[] = (int) $row['usr_id']; } return $ids; @@ -113,7 +114,7 @@ public function getAllUserIds(): array public function getSelectableGroups(): array { $selectable_group_ids = []; - foreach ($this->data['groups'] as $ref_id => $something) { + foreach ($this->data['groups'] ?? [] as $ref_id => $something) { if ($this->data['groups_rights'][$ref_id]['manage_members']) { $selectable_group_ids[$ref_id] = $this->data['groups'][$ref_id]; } @@ -132,7 +133,7 @@ public function getRows( ): Generator { [$column_name, $direction] = $order->join([], fn($ret, $key, $value) => [$key, $value]); $rows = $this->applyFilter($filter_data); - $groups_rights = $this->data['groups_rights']; + $groups_rights = $this->data['groups_rights'] ?? []; $comparator = function (array $f1, array $f2) { return 0; }; switch ($column_name) { case ilCourseParticipantsGroupsTableGUI::TABLE_COL_NAME: diff --git a/components/ILIAS/Course/classes/class.ilCourseParticipantsTableGUI.php b/components/ILIAS/Course/classes/class.ilCourseParticipantsTableGUI.php index 8de4f5cbfcc8..47663169ca2e 100755 --- a/components/ILIAS/Course/classes/class.ilCourseParticipantsTableGUI.php +++ b/components/ILIAS/Course/classes/class.ilCourseParticipantsTableGUI.php @@ -113,7 +113,7 @@ public function __construct( $this->addColumn($this->lng->txt('crs_blocked'), 'blocked'); $this->addColumn($this->lng->txt('crs_notification_list_title'), 'notification'); - $this->addColumn($this->lng->txt('actions'), 'optional', '', false, 'ilMembershipRowActionsHeader'); + $this->addColumn($this->lng->txt('actions'), '', '', false, 'ilMembershipRowActionsHeader'); $this->setRowTemplate("tpl.show_participants_row.html", "components/ILIAS/Course"); @@ -235,7 +235,7 @@ protected function fillRow(array $a_set): void default: $this->tpl->setCurrentBlock('custom_fields'); - $this->tpl->setVariable('VAL_CUST', isset($a_set[$field]) ? (string) $a_set[$field] : ''); + $this->tpl->setVariable('VAL_CUST', is_array($a_set[$field] ?? '') ? implode(', ', $a_set[$field]) : (string) ($a_set[$field] ?? '')); $this->tpl->parseCurrentBlock(); break; } @@ -470,15 +470,16 @@ public function parse(): void // Custom user data fields if ($udf_ids !== []) { $a_user_data = array_reduce( - $this->profile->getDataForMultiple($usr_ids), - function (array $c, ProfileData $v): array { + iterator_to_array($this->profile->getDataForMultiple($usr_ids)), + function (array $c, ProfileData $v) use ($udf_ids): array { if (!$this->checkAcceptance($v->getId())) { return $c; } foreach ($udf_ids as $field_id) { - $c[$v->getId()]['udf_' . $field_id] = $v->getAdditionalFieldByIdentifier($field_id); + $c[$v->getId()]['udf_' . $field_id] = implode(', ', $v->getAdditionalFieldByIdentifier($field_id) ?? []); } + return $c; }, $a_user_data ); diff --git a/components/ILIAS/Course/classes/class.ilObjCourseGUI.php b/components/ILIAS/Course/classes/class.ilObjCourseGUI.php index e2cacfe91a6b..295579d86277 100755 --- a/components/ILIAS/Course/classes/class.ilObjCourseGUI.php +++ b/components/ILIAS/Course/classes/class.ilObjCourseGUI.php @@ -1414,7 +1414,7 @@ public function setSubTabs(string $a_tab): void switch ($a_tab) { case "properties": $this->tabs_gui->addSubTabTarget( - "crs_settings", + "general", $this->ctrl->getLinkTarget($this, 'edit'), "edit", get_class($this) @@ -2126,7 +2126,6 @@ public function executeCommand(): void break; case strtolower(PublicProfileGUI::class): - $this->tpl->enableDragDropFileUpload(null); $this->setSubTabs('members'); $this->tabs_gui->setTabActive('members'); @@ -2207,7 +2206,7 @@ public function executeCommand(): void case 'ildidactictemplategui': $this->ctrl->setReturn($this, 'edit'); - $did = new ilDidacticTemplateGUI($this); + $did = new ilDidacticTemplateGUI($this, $this->getDidacticTemplateIdFromQuery()); $this->ctrl->forwardCommand($did); break; diff --git a/components/ILIAS/CourseReference/ObjectProperties/CourseReferenceObjectProperties.php b/components/ILIAS/CourseReference/ObjectProperties/CourseReferenceObjectProperties.php new file mode 100644 index 000000000000..af778ea32c29 --- /dev/null +++ b/components/ILIAS/CourseReference/ObjectProperties/CourseReferenceObjectProperties.php @@ -0,0 +1,45 @@ +providers === null) { + $this->providers = new CourseReferenceObjectPropertiesProviders(); + } + return $this->providers; + } + + public function preload(array $object_ids): void + { + return; + } +} diff --git a/components/ILIAS/CourseReference/ObjectProperties/CourseReferenceObjectPropertiesProviders.php b/components/ILIAS/CourseReference/ObjectProperties/CourseReferenceObjectPropertiesProviders.php new file mode 100644 index 000000000000..d62775c69b76 --- /dev/null +++ b/components/ILIAS/CourseReference/ObjectProperties/CourseReferenceObjectPropertiesProviders.php @@ -0,0 +1,59 @@ +getObjectProperties()->getPropertyIcon()->getCustomIcon(); + if ($custom_icon?->exists()) { + return $icon_factory->custom( + $custom_icon->getFullPath(), + '' + ); + } + + return null; + } +} diff --git a/components/ILIAS/Cron/phpunit.xml b/components/ILIAS/Cron/phpunit.xml index ff0134aabb8e..46365f78cdc9 100755 --- a/components/ILIAS/Cron/phpunit.xml +++ b/components/ILIAS/Cron/phpunit.xml @@ -10,6 +10,7 @@ displayDetailsOnTestsThatTriggerDeprecations="true" displayDetailsOnTestsThatTriggerNotices="true" displayDetailsOnSkippedTests="true" + displayDetailsOnPhpunitDeprecations="true" backupGlobals="false" bootstrap="./tests/bootstrap.php" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"> diff --git a/components/ILIAS/Cron/src/CLI/StartUp.php b/components/ILIAS/Cron/src/CLI/StartUp.php index bffa3919175c..17785c1772e2 100644 --- a/components/ILIAS/Cron/src/CLI/StartUp.php +++ b/components/ILIAS/Cron/src/CLI/StartUp.php @@ -37,7 +37,9 @@ public function __construct( // TODO @see mantis 20371: To get rid of this, the authentication service has to provide a mechanism to pass the client_id $_GET['client_id'] = $this->client; - \ilInitialisation::initILIAS(); + + require_once __DIR__ . '/../../../../../artifacts/bootstrap_default.php'; + entry_point('ILIAS Legacy Initialisation Adapter'); if ($authSession === null) { global $DIC; diff --git a/components/ILIAS/Cron/src/Job/JobEntity.php b/components/ILIAS/Cron/src/Job/JobEntity.php index 5084f9c30dc5..d32847f4c491 100644 --- a/components/ILIAS/Cron/src/Job/JobEntity.php +++ b/components/ILIAS/Cron/src/Job/JobEntity.php @@ -27,7 +27,9 @@ class JobEntity private string $job_id; private string $component; private ?JobScheduleType $schedule_type; + private ?int $raw_schedule_type; private int $schedule_value; + private ?int $raw_schedule_value; private int $job_status; private int $job_status_usr_id; private int $job_status_type; @@ -65,7 +67,9 @@ private function mapRecord(array $record): void $this->schedule_type = is_numeric($record['schedule_type']) ? JobScheduleType::tryFrom( (int) $record['schedule_type'] ) : null; + $this->raw_schedule_type = $record['schedule_type']; $this->schedule_value = (int) $record['schedule_value']; + $this->raw_schedule_value = $record['schedule_value']; $this->job_status = (int) $record['job_status']; $this->job_status_usr_id = (int) $record['job_status_user_id']; $this->job_status_type = (int) $record['job_status_type']; @@ -113,11 +117,21 @@ public function getScheduleType(): ?JobScheduleType return $this->schedule_type; } + public function getRawScheduleType(): ?int + { + return $this->raw_schedule_type; + } + public function getScheduleValue(): int { return $this->schedule_value; } + public function getRawScheduleValue(): ?int + { + return $this->raw_schedule_value; + } + public function getJobStatus(): int { return $this->job_status; diff --git a/components/ILIAS/Cron/src/Job/JobRepository.php b/components/ILIAS/Cron/src/Job/JobRepository.php index 9a9d4fc66e09..ed83f47e20d5 100644 --- a/components/ILIAS/Cron/src/Job/JobRepository.php +++ b/components/ILIAS/Cron/src/Job/JobRepository.php @@ -83,4 +83,6 @@ public function deactivateJob( ): void; public function findAll(): JobCollection; + + public function getEntityById(string $id): ?JobEntity; } diff --git a/components/ILIAS/Cron/src/Job/Manager/UI/JobTable.php b/components/ILIAS/Cron/src/Job/Manager/UI/JobTable.php index 7297076b2083..f084aa92b2af 100644 --- a/components/ILIAS/Cron/src/Job/Manager/UI/JobTable.php +++ b/components/ILIAS/Cron/src/Job/Manager/UI/JobTable.php @@ -351,7 +351,7 @@ public function getColumns(): array ->column() ->text($this->lng->txt('cron_component')) ->withIsSortable(true) - ->withIsOptional(true, false), + ->withIsOptional(true, true), 'schedule' => $this->ui_factory ->table() ->column() @@ -441,8 +441,9 @@ public function getComponent(): \ILIAS\UI\Component\Table\Table ->table() ->data($this, $this->lng->txt('cron_jobs'), $this->getColumns()) ->withActions($this->getActions()) - ->withId(self::class) + ->withId(str_replace('\\', '', self::class)) ->withRequest($this->request) - ->withOrder(new \ILIAS\Data\Order('title', \ILIAS\Data\Order::ASC)); + ->withOrder(new \ILIAS\Data\Order('title', \ILIAS\Data\Order::ASC)) + ->withRange(new \ILIAS\Data\Range(0, 100)); } } diff --git a/components/ILIAS/Cron/src/Job/Repository/JobRepositoryImpl.php b/components/ILIAS/Cron/src/Job/Repository/JobRepositoryImpl.php index 8a133356b3d6..cab2cdde2176 100644 --- a/components/ILIAS/Cron/src/Job/Repository/JobRepositoryImpl.php +++ b/components/ILIAS/Cron/src/Job/Repository/JobRepositoryImpl.php @@ -410,4 +410,13 @@ public function findAll(): \ILIAS\Cron\Job\JobCollection return $collection; } + + public function getEntityById(string $id): ?\ILIAS\Cron\Job\JobEntity + { + $jobs = $this->findAll(); + + return $jobs->filter( + static fn(\ILIAS\Cron\Job\JobEntity $entity): bool => $entity->getEffectiveJobId() === $id + )->toArray()[0] ?? null; + } } diff --git a/components/ILIAS/Cron/src/class.ilObjCronGUI.php b/components/ILIAS/Cron/src/class.ilObjCronGUI.php index b387b6a88cb5..a90854e02eec 100644 --- a/components/ILIAS/Cron/src/class.ilObjCronGUI.php +++ b/components/ILIAS/Cron/src/class.ilObjCronGUI.php @@ -128,8 +128,8 @@ private function getTableActionParameterName(): string } /** - * @param list<\ILIAS\Component\Component> $components - * @return list<\ILIAS\Component\Component> + * @param list<\ILIAS\UI\Component\Component> $components + * @return list<\ILIAS\UI\Component\Component> */ private function addProblematicItemsInfo( \ILIAS\Cron\Job\JobCollection $filtered_jobs, @@ -224,9 +224,16 @@ public function executeCommand(): void switch (strtolower($class)) { case strtolower(ilPropertyFormGUI::class): $this->tabs_gui->activateTab(self::VIEW); - $job_id = $this->getRequestValue($this->getJobIdParameterName(), $this->refinery->kindlyTo()->string()); - $job = $this->cron_repository->getJobInstanceById(ilUtil::stripSlashes($job_id)); - $form = $this->initLegacyEditForm($job); + $entity = $this->cron_repository->getEntityById( + ilUtil::stripSlashes( + $this->getRequestValue($this->getJobIdParameterName(), $this->refinery->kindlyTo()->string()) + ) + ); + if ($entity === null) { + $this->ctrl->redirect($this, self::VIEW); + } + + $form = $this->initLegacyEditForm($entity); $this->ctrl->forwardCommand($form); return; @@ -331,13 +338,17 @@ public function edit(?ILIAS\UI\Component\Input\Container\Form\Form $form = null) } $job_id = current($job_ids); - $job = $this->cron_repository->getJobInstanceById($job_id); - if ($job && $job->usesLegacyForms()) { - $this->ctrl->setParameter($this, $this->getJobIdParameterName(), $job->getId()); + $entity = $this->cron_repository->getEntityById($job_id); + if ($entity === null) { + $this->ctrl->redirect($this, self::VIEW); + } + + if ($entity->getJob()->usesLegacyForms()) { + $this->ctrl->setParameter($this, $this->getJobIdParameterName(), $entity->getEffectiveJobId()); $this->ctrl->redirect($this, 'editLegacy'); } - $form = $this->buildForm($job); + $form = $this->buildForm($entity); } $this->tpl->setContent($this->ui_renderer->render($form)); @@ -356,8 +367,12 @@ public function editLegacy(?ilPropertyFormGUI $a_form = null): void } $job_id = current($job_ids); - $job = $this->cron_repository->getJobInstanceById($job_id); - $a_form = $this->initLegacyEditForm($job); + $entity = $this->cron_repository->getEntityById($job_id); + if ($entity === null) { + $this->ctrl->redirect($this, self::VIEW); + } + + $a_form = $this->initLegacyEditForm($entity); } $this->tpl->setContent($a_form->getHTML()); @@ -401,16 +416,11 @@ protected function hasScheduleValue(JobScheduleType $schedule_type): bool ], true); } - protected function buildForm(?CronJob $job): ILIAS\UI\Component\Input\Container\Form\Form + protected function buildForm(JobEntity $entity): ILIAS\UI\Component\Input\Container\Form\Form { - if (!($job instanceof CronJob)) { - $this->ctrl->redirect($this, self::VIEW); - } - - $this->ctrl->setParameter($this, $this->getJobIdParameterName(), $job->getId()); + $job = $entity->getJob(); - $jobs_data = $this->cron_repository->getCronJobData($job->getId()); - $job_data = $jobs_data[0]; + $this->ctrl->setParameter($this, $this->getJobIdParameterName(), $entity->getEffectiveJobId()); $section_inputs = []; if ($job->hasFlexibleSchedule()) { @@ -433,10 +443,10 @@ protected function buildForm(?CronJob $job): ILIAS\UI\Component\Input\Container\ ]) )->withRequired(true); - if (is_numeric($job_data['schedule_type']) && - JobScheduleType::tryFrom((int) $job_data['schedule_type']) === $schedule_type) { + if (is_numeric($entity->getRawScheduleType()) && + JobScheduleType::tryFrom((int) $entity->getRawScheduleType()) === $schedule_type) { $schedule_value_input = $schedule_value_input->withValue( - $job_data['schedule_value'] === null ? null : (int) $job_data['schedule_value'] + $entity->getRawScheduleValue() === null ? null : (int) $entity->getRawScheduleValue() ); } @@ -466,9 +476,9 @@ protected function buildForm(?CronJob $job): ILIAS\UI\Component\Input\Container\ ) ->withRequired(true) ->withValue( - $job_data['schedule_type'] === null ? + $entity->getRawScheduleType() === null ? self::FORM_PARAM_SCHEDULE_PREFIX . $default_schedule_type : - self::FORM_PARAM_SCHEDULE_PREFIX . $job_data['schedule_type'] + self::FORM_PARAM_SCHEDULE_PREFIX . $entity->getRawScheduleType() ); } @@ -507,16 +517,11 @@ protected function buildForm(?CronJob $job): ILIAS\UI\Component\Input\Container\ * @deprecated */ #[\Deprecated('Will be removed without any alternative, KS/UI forms will be expected', since: '13.0')] - protected function initLegacyEditForm(?CronJob $job): ilPropertyFormGUI + protected function initLegacyEditForm(JobEntity $entity): ilPropertyFormGUI { - if (!($job instanceof CronJob)) { - $this->ctrl->redirect($this, self::VIEW); - } + $job = $entity->getJob(); - $this->ctrl->setParameter($this, $this->getJobIdParameterName(), $job->getId()); - - $jobs_data = $this->cron_repository->getCronJobData($job->getId()); - $job_data = $jobs_data[0]; + $this->ctrl->setParameter($this, $this->getJobIdParameterName(), $entity->getEffectiveJobId()); $form = new ilPropertyFormGUI(); $form->setFormAction($this->ctrl->getFormAction($this, 'updateLegacy')); @@ -525,7 +530,9 @@ protected function initLegacyEditForm(?CronJob $job): ilPropertyFormGUI if ($job->hasFlexibleSchedule()) { $type = new ilRadioGroupInputGUI($this->lng->txt('cron_schedule_type'), 'type'); $type->setRequired(true); - $type->setValue($job_data['schedule_type'] === null ? null : (string) $job_data['schedule_type']); + $type->setValue( + $entity->getRawScheduleType() === null ? null : (string) $entity->getRawScheduleType() + ); foreach ($job->getAllScheduleTypes() as $schedule_type) { if (!in_array($schedule_type, $job->getValidScheduleTypes(), true)) { @@ -546,10 +553,10 @@ protected function initLegacyEditForm(?CronJob $job): ilPropertyFormGUI $scheduleValue->allowDecimals(false); $scheduleValue->setRequired(true); $scheduleValue->setSize(5); - if (is_numeric($job_data['schedule_type']) && - JobScheduleType::tryFrom((int) $job_data['schedule_type']) === $schedule_type) { + if (is_numeric($entity->getRawScheduleType()) && + JobScheduleType::tryFrom((int) $entity->getRawScheduleType()) === $schedule_type) { $scheduleValue->setValue( - $job_data['schedule_value'] === null ? null : (string) $job_data['schedule_value'] + $entity->getRawScheduleValue() === null ? null : (string) $entity->getRawScheduleValue() ); } $option->addSubItem($scheduleValue); @@ -580,8 +587,12 @@ public function update(): void $this->ctrl->redirect($this, self::VIEW); } - $job = $this->cron_repository->getJobInstanceById($job_id); - $form = $this->buildForm($job); + $entity = $this->cron_repository->getEntityById($job_id); + if ($entity === null) { + $this->ctrl->redirect($this, self::VIEW); + } + + $form = $this->buildForm($entity); $form_valid = false; $form_data = null; @@ -596,33 +607,30 @@ public function update(): void return; } - if ($job instanceof CronJob) { - if ($job->hasFlexibleSchedule()) { - $schedule_group = $form_data[self::FORM_PARAM_MAIN_SECTION][self::FORM_PARAM_GROUP_SCHEDULE]; + $job = $entity->getJob(); + if ($job->hasFlexibleSchedule()) { + $schedule_group = $form_data[self::FORM_PARAM_MAIN_SECTION][self::FORM_PARAM_GROUP_SCHEDULE]; - $type = JobScheduleType::from( - (int) ltrim($schedule_group[0], self::FORM_PARAM_SCHEDULE_PREFIX) - ); + $type = JobScheduleType::from( + (int) ltrim($schedule_group[0], self::FORM_PARAM_SCHEDULE_PREFIX) + ); - $value = match (true) { - $this->hasScheduleValue($type) => (int) $schedule_group[1][$this->getScheduleValueFormElementName( - $type - )], - default => null, - }; + $value = match (true) { + $this->hasScheduleValue($type) => (int) $schedule_group[1][$this->getScheduleValueFormElementName( + $type + )], + default => null, + }; - $this->cron_repository->updateJobSchedule($job, $type, $value); - } - - if ($job->hasCustomSettings()) { - $job->saveCustomConfiguration($form_data[self::FORM_PARAM_JOB_INPUT]); - } + $this->cron_repository->updateJobSchedule($job, $type, $value); + } - $this->tpl->setOnScreenMessage('success', $this->lng->txt('cron_action_edit_success'), true); - $this->ctrl->redirect($this, self::VIEW); + if ($job->hasCustomSettings()) { + $job->saveCustomConfiguration($form_data[self::FORM_PARAM_JOB_INPUT]); } - $this->edit($form); + $this->tpl->setOnScreenMessage('success', $this->lng->txt('cron_action_edit_success'), true); + $this->ctrl->redirect($this, self::VIEW); } /** @@ -640,10 +648,14 @@ public function updateLegacy(): void $this->ctrl->redirect($this, self::VIEW); } - $job = $this->cron_repository->getJobInstanceById($job_id); + $entity = $this->cron_repository->getEntityById($job_id); + if ($entity === null) { + $this->ctrl->redirect($this, self::VIEW); + } - $form = $this->initLegacyEditForm($job); - if ($job instanceof CronJob && $form->checkInput()) { + $form = $this->initLegacyEditForm($entity); + $job = $entity->getJob(); + if ($form->checkInput()) { $valid = true; if ($job->hasCustomSettings() && !$job->saveCustomSettings($form)) { $valid = false; diff --git a/components/ILIAS/Dashboard/Administration/classes/class.ilObjDashboardSettingsGUI.php b/components/ILIAS/Dashboard/Administration/classes/class.ilObjDashboardSettingsGUI.php index eb404a5fb1c4..962bbd0ae5c5 100755 --- a/components/ILIAS/Dashboard/Administration/classes/class.ilObjDashboardSettingsGUI.php +++ b/components/ILIAS/Dashboard/Administration/classes/class.ilObjDashboardSettingsGUI.php @@ -256,7 +256,7 @@ public function saveSettings(): void } else { $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_FAILURE, $this->lng->txt('no_permission'), true); } - $this->editSettings(); + $this->ctrl->redirect($this, 'editSettings'); } public function setSettingsSubTabs(string $a_active): void @@ -368,7 +368,7 @@ protected function savePresentation(): void } else { $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_FAILURE, $this->lng->txt('no_permission'), true); } - $this->editPresentation(); + $this->ctrl->redirect($this, 'editPresentation'); } public function saveSorting(): void @@ -391,11 +391,14 @@ public function saveSorting(): void } } $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('msg_obj_modified'), true); + } else { + $this->editSorting($form); + return; } } else { $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_FAILURE, $this->lng->txt('no_permission'), true); } - $this->editSorting($form); + $this->ctrl->redirect($this, 'editSorting'); } /** diff --git a/components/ILIAS/Dashboard/Block/classes/class.ilDashboardBlockGUI.php b/components/ILIAS/Dashboard/Block/classes/class.ilDashboardBlockGUI.php index 02a9916d19b6..8baf871a5d31 100755 --- a/components/ILIAS/Dashboard/Block/classes/class.ilDashboardBlockGUI.php +++ b/components/ILIAS/Dashboard/Block/classes/class.ilDashboardBlockGUI.php @@ -178,7 +178,6 @@ public function getViewSettings(): ilPDSelectedItemsBlockViewSettings public function init(): void { $this->lng->loadLanguageModule('dash'); - $this->lng->loadLanguageModule('rep'); $this->lng->loadLanguageModule('pd'); $this->initViewSettings(); $this->viewSettings->parse(); @@ -340,7 +339,6 @@ protected function groupItemsByLocation(): array } $grouped_items[$title][] = $item; } - ksort($grouped_items); $grouped_items = array_map($this->sortByTitle(...), $grouped_items); return $grouped_items; } @@ -403,7 +401,7 @@ public function addCommandActions(): void if ($this->removeMultipleEnabled()) { $this->addBlockCommand( $this->ctrl->getLinkTarget($this, 'manage'), - $this->getRemoveMultipleActionText(), + $this->lng->txt('dash_' . $this->getBlockType() . '_remove_multiple'), '', $this->getRemoveModal() ); @@ -414,27 +412,21 @@ public function getRemoveModal(): RoundTrip { $items = $this->getManageFields(); if ($items !== []) { - if ($this->viewSettings->isSelectedItemsViewActive()) { - $question = $this->lng->txt('dash_info_sure_remove_from_favs'); - } else { - $this->lng->loadLanguageModule('mmbr'); - $question = $this->lng->txt('mmbr_info_delete_sure_unsubscribe'); - } $modal = $this->ui->factory()->modal()->roundtrip( - $this->getRemoveMultipleActionText(), + $this->lng->txt('dash_' . $this->getBlockType() . '_remove_multiple'), [ - $this->ui->factory()->messageBox()->confirmation($question), + $this->ui->factory()->messageBox()->confirmation($this->lng->txt('dash_' . $this->getBlockType() . '_remove_info')), $this->ui->factory()->messageBox()->info($this->lng->txt('select_one')), ], $items, $this->ctrl->getLinkTargetByClass([ilDashboardGUI::class, $this::class], 'confirmedRemove') - )->withSubmitLabel($this->getRemoveMultipleActionText()); + )->withSubmitLabel($this->lng->txt('dash_' . $this->getBlockType() . '_remove')); $modal = $modal->withOnLoadCode(static fn($id) => "il.Dashboard.confirmModal($id)"); } else { $modal = $this->ui->factory()->modal()->roundtrip( - $this->getRemoveMultipleActionText(), - $this->ui->factory()->messageBox()->info($this->lng->txt('pd_no_items_to_manage')) + $this->lng->txt('dash_' . $this->getBlockType() . '_remove_multiple'), + $this->ui->factory()->messageBox()->info($this->lng->txt('dash_no_items_to_manage')) ); } @@ -598,13 +590,17 @@ public function getItemGroups(): array return ['' => $data]; case ilPDSelectedItemsBlockConstants::SORT_BY_START_DATE: return $this->groupItemsByStartDate(); - case ilPDSelectedItemsBlockConstants::SORT_BY_TYPE: - return $this->groupItemsByType(); case ilPDSelectedItemsBlockConstants::SORT_MANUALLY: return ['' => $this->sortManually($this->getData())]; + case ilPDSelectedItemsBlockConstants::SORT_BY_TYPE: + $groups = $this->groupItemsByType(); + ksort($groups, SORT_NATURAL); + return $groups; case ilPDSelectedItemsBlockConstants::SORT_BY_LOCATION: default: - return $this->groupItemsByLocation(); + $groups = $this->groupItemsByLocation(); + ksort($groups, SORT_NATURAL); + return $groups; } } @@ -622,9 +618,10 @@ public function removeFromDeskObject(): void $this->ctrl->redirectByClass(ilDashboardGUI::class, 'show'); } - abstract public function removeMultipleEnabled(): bool; - - abstract public function getRemoveMultipleActionText(): string; + public function removeMultipleEnabled(): bool + { + return false; + } /** * @param int[] $ids @@ -686,7 +683,7 @@ private function sortByTitle(array $data): array { usort( $data, - static fn(BlockDTO $left, BlockDTO $right): int => strcmp($left->getTitle(), $right->getTitle()) + static fn(BlockDTO $left, BlockDTO $right): int => strcasecmp($left->getTitle(), $right->getTitle()) ); return $data; } diff --git a/components/ILIAS/Dashboard/Block/classes/class.ilMembershipBlockGUI.php b/components/ILIAS/Dashboard/Block/classes/class.ilMembershipBlockGUI.php index 76326be4f0c4..91a28fa71138 100755 --- a/components/ILIAS/Dashboard/Block/classes/class.ilMembershipBlockGUI.php +++ b/components/ILIAS/Dashboard/Block/classes/class.ilMembershipBlockGUI.php @@ -66,7 +66,7 @@ public function initData(): void public function getBlockType(): string { - return 'pdmem'; + return 'dash_mem'; } public function confirmedRemove(array $ids): void @@ -114,9 +114,4 @@ public function removeMultipleEnabled(): bool { return true; } - - public function getRemoveMultipleActionText(): string - { - return $this->lng->txt('pd_unsubscribe_multiple_memberships'); - } } diff --git a/components/ILIAS/Dashboard/Block/classes/class.ilSelectedItemsBlockGUI.php b/components/ILIAS/Dashboard/Block/classes/class.ilSelectedItemsBlockGUI.php index 4253df5e8d2c..58f2dc02f232 100755 --- a/components/ILIAS/Dashboard/Block/classes/class.ilSelectedItemsBlockGUI.php +++ b/components/ILIAS/Dashboard/Block/classes/class.ilSelectedItemsBlockGUI.php @@ -84,7 +84,7 @@ public function initData(): void public function getBlockType(): string { - return 'pditems'; + return 'dash_fav'; } public function confirmedRemove(array $ids): void @@ -101,9 +101,4 @@ public function removeMultipleEnabled(): bool { return true; } - - public function getRemoveMultipleActionText(): string - { - return $this->lng->txt('pd_remove_multiple'); - } } diff --git a/components/ILIAS/Dashboard/Favourites/classes/class.ilFavouritesDBRepository.php b/components/ILIAS/Dashboard/Favourites/classes/class.ilFavouritesDBRepository.php index c6fea5123b76..b3b28a3fdde1 100644 --- a/components/ILIAS/Dashboard/Favourites/classes/class.ilFavouritesDBRepository.php +++ b/components/ILIAS/Dashboard/Favourites/classes/class.ilFavouritesDBRepository.php @@ -162,7 +162,6 @@ public function getFavouritesOfUser(int $user_id, ?array $a_types = null): array } } } - ksort($items); return $items; } diff --git a/components/ILIAS/Dashboard/ItemsBlock/classes/class.ilPDSelectedItemsBlockMembershipsProvider.php b/components/ILIAS/Dashboard/ItemsBlock/classes/class.ilPDSelectedItemsBlockMembershipsProvider.php index f1e176488cbe..d8f7e82a3b17 100755 --- a/components/ILIAS/Dashboard/ItemsBlock/classes/class.ilPDSelectedItemsBlockMembershipsProvider.php +++ b/components/ILIAS/Dashboard/ItemsBlock/classes/class.ilPDSelectedItemsBlockMembershipsProvider.php @@ -89,7 +89,6 @@ protected function getObjectsByMembership(array $objTypes = []): array 'end' => $periodEnd ]; } - ksort($references); return $references; } diff --git a/components/ILIAS/Data/src/Text/HTML.php b/components/ILIAS/Data/src/Text/HTML.php index f839b6f4dbef..a3bbbddae667 100644 --- a/components/ILIAS/Data/src/Text/HTML.php +++ b/components/ILIAS/Data/src/Text/HTML.php @@ -24,11 +24,15 @@ * This class currently is a stub only. It will need a proper implementation, just * like Text\Markdown has. */ -class HTML +class HTML implements \Stringable { public function __construct( protected string $html_text = "" ) { - $this->html_text = $html_text; + } + + public function __toString(): string + { + return $this->html_text; } } diff --git a/components/ILIAS/Data/src/Text/PlainText.php b/components/ILIAS/Data/src/Text/PlainText.php index e2bb2c29d325..c1447208f911 100644 --- a/components/ILIAS/Data/src/Text/PlainText.php +++ b/components/ILIAS/Data/src/Text/PlainText.php @@ -24,11 +24,15 @@ * This class currently is a stub only. It will need a proper implementation, just * like Text\Markdown has. */ -class PlainText +class PlainText implements \Stringable { public function __construct( protected string $plain_text = "" ) { - $this->plain_text = $plain_text; + } + + public function __toString(): string + { + return $this->plain_text; } } diff --git a/components/ILIAS/Data/src/Text/Text.php b/components/ILIAS/Data/src/Text/Text.php index 59e83e314e7f..59c5071c0e25 100644 --- a/components/ILIAS/Data/src/Text/Text.php +++ b/components/ILIAS/Data/src/Text/Text.php @@ -28,7 +28,7 @@ public function getMarkup(): Markup; * @return Structure[] */ public function getSupportedStructure(): array; - public function toHTML(): Text\HTML; - public function toPlainText(): Text\PlainText; + public function toHTML(): HTML; + public function toPlainText(): PlainText; public function getRawRepresentation(): string; } diff --git a/components/ILIAS/Data/src/Text/TextBase.php b/components/ILIAS/Data/src/Text/TextBase.php index ac4aa5efcda5..b421639a43e2 100644 --- a/components/ILIAS/Data/src/Text/TextBase.php +++ b/components/ILIAS/Data/src/Text/TextBase.php @@ -20,9 +20,6 @@ namespace ILIAS\Data\Text; -use ILIAS\Data\Text\Shape; -use ILIAS\Data\Text\Markup; - abstract class TextBase implements Text { public function __construct( @@ -52,12 +49,12 @@ public function getSupportedStructure(): array return $this->shape->getSupportedStructure(); } - public function toHTML(): Text\HTML + public function toHTML(): HTML { return $this->shape->toHTML($this); } - public function toPlainText(): Text\PlainText + public function toPlainText(): PlainText { return $this->shape->toPlainText($this); } diff --git a/components/ILIAS/DataCollection/ROADMAP.md b/components/ILIAS/DataCollection/ROADMAP.md index 55c4f2835c60..d46dc4f20181 100755 --- a/components/ILIAS/DataCollection/ROADMAP.md +++ b/components/ILIAS/DataCollection/ROADMAP.md @@ -36,6 +36,9 @@ This document is a roadmap for the ILIAS Object 'Data Collection'. It is a livin * Stack
We do not know if we really need the `\ILIAS\Modules\DataCollection\Fields\Formula\FormulaParser\Stack` or what is really the needed difference to a regular php-array. +* Toast Notification on XLSX export + Since the export success message was removed on the asycn XLSX export a toast should inform the user about the finish of it. + ## Mid Term * Removal of legacy user interface components and usage of the KitchenSink. @@ -43,4 +46,4 @@ This document is a roadmap for the ILIAS Object 'Data Collection'. It is a livin ## Long Term -* … \ No newline at end of file +* … diff --git a/components/ILIAS/DataCollection/classes/Content/class.ilDclContentExporter.php b/components/ILIAS/DataCollection/classes/Content/class.ilDclContentExporter.php index 8e021facc688..c0307b5ea756 100755 --- a/components/ILIAS/DataCollection/classes/Content/class.ilDclContentExporter.php +++ b/components/ILIAS/DataCollection/classes/Content/class.ilDclContentExporter.php @@ -18,32 +18,16 @@ declare(strict_types=1); -/** - * Hook-Class for exporting data-collections (used in SOAP-Class) - * This Class avoids duplicated code by routing the request to the right place - */ class ilDclContentExporter { public const SOAP_FUNCTION_NAME = 'exportDataCollectionContent'; public const EXPORT_EXCEL = 'xlsx'; public const IN_PROGRESS_POSTFIX = '.prog'; - /** - * Ref-ID of DataCollection - */ protected int $ref_id; - /** - * Table-Id for export - */ protected ?int $table_id; - /** - * Array with filters - */ protected array $filter; - protected ilObjDataCollection $dcl; - protected ilLanguage $lng; - protected ilDclTable $table; private ilGlobalTemplateInterface $main_tpl; protected array $tables; @@ -52,7 +36,7 @@ public function __construct(int $ref_id, ?int $table_id, array $filter = []) { global $DIC; $this->main_tpl = $DIC->ui()->mainTemplate(); - $lng = $DIC['lng']; + $lng = $DIC->language(); $this->ref_id = $ref_id; $this->table_id = $table_id; @@ -76,17 +60,11 @@ public function sanitizeFilename(string $filename): string return str_replace($dangerous_filename_characters, "_", iconv("utf-8", "ascii//TRANSLIT", $filename)); } - /** - * Return export path - */ public function getExportContentPath(string $format): string { return ilExport::_getExportDirectory($this->dcl->getId(), $format, 'dcl') . '/'; } - /** - * Fill a excel row - */ protected function fillRowExcel( ilDclTable $table, ilExcel $worksheet, @@ -101,9 +79,6 @@ protected function fillRowExcel( } } - /** - * Fill Excel header - */ protected function fillHeaderExcel(ilDclTable $table, ilExcel $worksheet, int $row): void { $col = 0; @@ -115,24 +90,12 @@ protected function fillHeaderExcel(ilDclTable $table, ilExcel $worksheet, int $r } } - /** - * Fill Excel meta-data - */ protected function fillMetaExcel(ilDclTable $table, ilExcel $worksheet, int $row): void { } - /** - * Creates an export of a specific data collection table - * @return bool|void - * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception|\PhpOffice\PhpSpreadsheet\Exception - */ - public function export(string $format = self::EXPORT_EXCEL, ?string $filepath = null, bool $send = false) + public function export(string $format = self::EXPORT_EXCEL, ?string $filepath = null, bool $send = false): bool { - if (count($this->tables) == 0) { - return; - } - if (empty($filepath)) { $filepath = $this->getExportContentPath($format); ilFileUtils::makeDirParents($filepath); @@ -159,20 +122,14 @@ public function export(string $format = self::EXPORT_EXCEL, ?string $filepath = $data_available = $data_available || ($list['total'] > 0); $fields_available = $fields_available || (count($table->getExportableFields()) > 0); if ($list['total'] > 0 && count($table->getExportableFields()) > 0) { - // only 31 character-long table-titles are allowed - $title = substr($table->getTitle(), 0, 31); - $adapter->addSheet($title); + $adapter->addSheet($table->getTitle()); $row = 1; - $this->fillMetaExcel($table, $adapter, $row); - - // #14813 $this->fillHeaderExcel($table, $adapter, $row); $row++; - foreach ($list['records'] as $set) { $this->fillRowExcel($table, $adapter, $set, $row); - $row++; // #14760 + $row++; } $data_available = true; @@ -189,7 +146,6 @@ public function export(string $format = self::EXPORT_EXCEL, ?string $filepath = return false; } - $this->main_tpl->setOnScreenMessage($this->main_tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('exp_file_created'), true); if ($send) { $adapter->sendToClient($filename); } else { @@ -201,30 +157,30 @@ public function export(string $format = self::EXPORT_EXCEL, ?string $filepath = public function exportAsync(string $format = self::EXPORT_EXCEL, ?string $filepath = null): mixed { global $DIC; - $ilLog = $DIC['ilLog']; $method = self::SOAP_FUNCTION_NAME; $soap_params = [$this->dcl->getRefId()]; array_push($soap_params, $this->table_id, $format, $filepath); - $new_session_id = ilSession::_duplicate($_COOKIE[session_name()]); - $client_id = $_COOKIE['ilClientId']; + $new_session_id = ilSession::_duplicate( + $DIC->http()->wrapper()->cookie()->retrieve(session_name(), $DIC->refinery()->kindlyTo()->string()) + ); + $client_id = $DIC->http()->wrapper()->cookie()->retrieve('ilClientId', $DIC->refinery()->kindlyTo()->string()); - // Start cloning process using soap call $soap_client = new ilSoapClient(); $soap_client->setResponseTimeout(5); $soap_client->enableWSDL(true); - $ilLog->write(__METHOD__ . ': Trying to call Soap client...'); + $DIC->logger()->root()->write(__METHOD__ . ': Trying to call Soap client...'); array_unshift($soap_params, $new_session_id . '::' . $client_id); if ($soap_client->init()) { - $ilLog->info('Calling soap ' . $method . ' method with params ' . print_r($soap_params, true)); + $DIC->logger()->root()->info('Calling soap ' . $method . ' method with params ' . print_r($soap_params, true)); $res = $soap_client->call($method, $soap_params); } else { - $ilLog->warning('SOAP clone call failed. Calling clone method manually'); + $DIC->logger()->root()->warning('SOAP clone call failed. Calling clone method manually'); if (method_exists('ilSoapFunctions', $method)) { $res = ilSoapFunctions::$method( $new_session_id . '::' . $client_id, diff --git a/components/ILIAS/DataCollection/classes/Content/class.ilDclRecordEditGUI.php b/components/ILIAS/DataCollection/classes/Content/class.ilDclRecordEditGUI.php index 4bf8b3149403..96eb83b7ca49 100755 --- a/components/ILIAS/DataCollection/classes/Content/class.ilDclRecordEditGUI.php +++ b/components/ILIAS/DataCollection/classes/Content/class.ilDclRecordEditGUI.php @@ -757,77 +757,6 @@ protected function sendFailure(string $message): void } } - /** - * This function is only used by the ajax request if searching for ILIAS references. It builds the html for the search results. - */ - public function searchObjects(): void - { - $search = $this->http->wrapper()->post()->retrieve('search_for', $this->refinery->kindlyTo()->string()); - $dest = $this->http->wrapper()->post()->retrieve('dest', $this->refinery->kindlyTo()->string()); - $html = ""; - $query_parser = new ilQueryParser($search); - $query_parser->setMinWordLength(1); - $query_parser->setCombination(ilQueryParser::QP_COMBINATION_AND); - $query_parser->parse(); - if (!$query_parser->validate()) { - $html .= $query_parser->getMessage() . "
"; - } - - // only like search since fulltext does not support search with less than 3 characters - $object_search = new ilLikeObjectSearch($query_parser); - $res = $object_search->performSearch(); - //$res->setRequiredPermission('copy'); - $res->filter(ROOT_FOLDER_ID, true); - - if (!count($results = $res->getResultsByObjId())) { - $html .= $this->lng->txt('dcl_no_search_results_found_for') . ' ' . $search . "
"; - } - $results = $this->parseSearchResults($results); - - foreach ($results as $entry) { - $tpl = new ilTemplate("tpl.dcl_tree.html", true, true, "components/ILIAS/DataCollection"); - foreach ((array) $entry['refs'] as $reference) { - $path = new ilPathGUI(); - $tpl->setCurrentBlock('result'); - $tpl->setVariable( - 'RESULT_PATH', - $path->getPath(ROOT_FOLDER_ID, (int) $reference) . " » " . $entry['title'] - ); - $tpl->setVariable('RESULT_REF', $reference); - $tpl->setVariable('FIELD_ID', $dest); - $tpl->parseCurrentBlock(); - } - $html .= $tpl->get(); - } - - echo $html; - exit; - } - - - /** - * Parse search results - * @param ilObject[] $a_res - * @return array - */ - protected function parseSearchResults(array $a_res): array - { - $rows = []; - foreach ($a_res as $obj_id => $references) { - $r = []; - $r['title'] = ilObject::_lookupTitle($obj_id); - $r['desc'] = ilObject::_lookupDescription($obj_id); - $r['obj_id'] = $obj_id; - $r['refs'] = $references; - $rows[] = $r; - } - - return $rows; - } - - /** - * Cleanup temp-files - */ protected function cleanupTempFiles(): void { $has_ilfilehash = $this->http->wrapper()->post()->has('ilfilehash'); diff --git a/components/ILIAS/DataCollection/classes/Content/class.ilDclRecordListGUI.php b/components/ILIAS/DataCollection/classes/Content/class.ilDclRecordListGUI.php index 058fd4f41ef9..d859943540ca 100755 --- a/components/ILIAS/DataCollection/classes/Content/class.ilDclRecordListGUI.php +++ b/components/ILIAS/DataCollection/classes/Content/class.ilDclRecordListGUI.php @@ -85,6 +85,7 @@ public function __construct(ilObjDataCollectionGUI $a_parent_obj, int $table_id, $this->ctrl->setParameterByClass(ilDclRecordEditGUI::class, self::GET_TABLE_ID, $this->table_id); $this->ctrl->setParameterByClass(ilDclRecordEditGUI::class, self::GET_TABLEVIEW_ID, $this->tableview_id); + $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, self::GET_TABLE_ID, $this->table_id); $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, self::GET_TABLEVIEW_ID, $this->tableview_id); $this->mode = self::MODE_VIEW; @@ -113,7 +114,7 @@ public function getObjId(): int */ public function executeCommand(): void { - if (!$this->checkAccess()) { + if (!ilObjDataCollectionAccess::hasAccessTo($this->getRefId(), $this->table_id, $this->tableview_id)) { $this->tpl->setOnScreenMessage('failure', $this->lng->txt('permission_denied'), true); return; } @@ -153,6 +154,9 @@ public function listRecords(): void $this->createSwitchers(); + $this->ctrl->setParameter($this, 'table_id', $this->table_id); + $this->ctrl->setParameter($this, 'tableview_id', $this->tableview_id); + $permission_to_add_or_import = ilObjDataCollectionAccess::hasPermissionToAddRecord( $this->parent_obj->getRefId(), $this->table_id @@ -467,6 +471,13 @@ private function recordBelongsToCollection(ilDclBaseRecordModel $record): bool protected function setSubTabs(string $active_mode = self::GET_MODE): void { $this->ctrl->setParameter($this, self::GET_MODE, self::MODE_VIEW); + if ($this->http->wrapper()->query()->has(self::GET_TABLEVIEW_ID)) { + $this->ctrl->setParameter( + $this, + self::GET_TABLEVIEW_ID, + $this->http->wrapper()->query()->retrieve(self::GET_TABLEVIEW_ID, $this->refinery->kindlyTo()->int()) + ); + } $this->tabs->addSubTab( self::MODE_VIEW, $this->lng->txt('view'), @@ -536,27 +547,16 @@ protected function createSwitchers(): void $switcher->addTableSwitcherToToolbar( $tables, self::class, - self::CMD_SHOW + self::CMD_SHOW, + $this->getTableId() ); $switcher->addViewSwitcherToToolbar( $this->table_obj->getVisibleTableViews(), $this->getTableId(), self::class, - self::CMD_SHOW - ); - } - - protected function checkAccess(): bool - { - if (null === $this->table_id || null === $this->tableview_id) { - return false; - } - - return ilObjDataCollectionAccess::hasAccessTo( - $this->parent_obj->getRefId(), - $this->table_id, - $this->tableview_id + self::CMD_SHOW, + $this->getTableviewId() ); } diff --git a/components/ILIAS/DataCollection/classes/Content/class.ilDclRecordListTableGUI.php b/components/ILIAS/DataCollection/classes/Content/class.ilDclRecordListTableGUI.php index 74c287b99b03..fd4f8fb9db7b 100755 --- a/components/ILIAS/DataCollection/classes/Content/class.ilDclRecordListTableGUI.php +++ b/components/ILIAS/DataCollection/classes/Content/class.ilDclRecordListTableGUI.php @@ -96,7 +96,6 @@ public function __construct( $this->setShowRowsSelector(true); $this->setEnableTitle(true); $this->setTitle($table->getTitle()); - $this->setDescription($this->tableview->getTitle()); $this->setDefaultOrderDirection($this->table->getDefaultSortFieldOrder()); // Set a default sorting? $default_sort_title = 'id'; @@ -180,11 +179,8 @@ private function buildData(): void } $this->ctrl->setParameterByClass(ilDclFieldEditGUI::class, "record_id", $record->getId()); - $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, "table_id", $record->getTableId()); $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, "record_id", $record->getId()); - $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, "tableview_id", $this->tableview->getId()); $this->ctrl->setParameterByClass(ilDclRecordEditGUI::class, "record_id", $record->getId()); - $this->ctrl->setParameterByClass(ilDclRecordEditGUI::class, "tableview_id", $this->tableview->getId()); $this->ctrl->setParameterByClass(ilDclRecordEditGUI::class, "mode", $this->mode); $action_links = []; @@ -192,7 +188,7 @@ private function buildData(): void if ($this->page_active) { $record_data["_front"] = $this->ctrl->getLinkTargetByClass(ilDclDetailedViewGUI::class, 'renderRecord'); $action_links[] = $this->ui->factory()->link()->standard( - $this->lng->txt('view'), + $this->lng->txt('dcl_detailed_view'), $this->ctrl->getLinkTargetByClass(ilDclDetailedViewGUI::class, 'renderRecord') ); } diff --git a/components/ILIAS/DataCollection/classes/DetailedView/class.ilDclDetailedViewGUI.php b/components/ILIAS/DataCollection/classes/DetailedView/class.ilDclDetailedViewGUI.php index 271c749bcbf0..c8b492ebb54a 100755 --- a/components/ILIAS/DataCollection/classes/DetailedView/class.ilDclDetailedViewGUI.php +++ b/components/ILIAS/DataCollection/classes/DetailedView/class.ilDclDetailedViewGUI.php @@ -124,6 +124,7 @@ public function __construct(ilObjDataCollectionGUI $a_dcl_object, int $tableview public function executeCommand(): void { + $this->ctrl->setParameter($this, 'table_id', $this->table->getId()); $this->ctrl->setParameter($this, 'tableview_id', $this->tableview_id); if (!$this->checkAccess()) { diff --git a/components/ILIAS/DataCollection/classes/Fields/Base/class.ilDclBaseFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/Base/class.ilDclBaseFieldModel.php index 545d06c16617..bcce34fa8a84 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Base/class.ilDclBaseFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/Base/class.ilDclBaseFieldModel.php @@ -43,8 +43,6 @@ class ilDclBaseFieldModel public const PROP_URL = "url"; public const PROP_REFERENCE_LINK = "reference_link"; public const PROP_UNIQUE = "unique"; - public const PROP_WIDTH = "width"; - public const PROP_HEIGHT = "height"; public const PROP_LEARNING_PROGRESS = "learning_progress"; public const PROP_ILIAS_REFERENCE_LINK = "ILIAS_reference_link"; public const PROP_N_REFERENCE = "multiple_selection"; diff --git a/components/ILIAS/DataCollection/classes/Fields/Base/class.ilDclBaseRecordFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/Base/class.ilDclBaseRecordFieldModel.php index 44cdffacff7d..7b0098a58d19 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Base/class.ilDclBaseRecordFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/Base/class.ilDclBaseRecordFieldModel.php @@ -53,6 +53,11 @@ public function __construct(ilDclBaseRecordModel $record, ilDclBaseFieldModel $f $this->doRead(); } + public function setUser(ilObjUser $user): void + { + $this->user = $user; + } + /** * Read object data from database */ @@ -246,7 +251,6 @@ public function getValueFromExcel(ilExcel $excel, int $row, int $col) /** * Function to parse incoming data from form input value $value. returns the string/number/etc. to store in the database. - * @param int|string $value * @return int|string|null */ public function parseValue($value) @@ -335,7 +339,7 @@ protected function loadValue(): void */ public function cloneStructure(ilDclBaseRecordFieldModel $old_record_field): void { - $this->setValue($old_record_field->getValue()); + $this->setValue($old_record_field->getValue(), true); $this->doUpdate(); } diff --git a/components/ILIAS/DataCollection/classes/Fields/Base/class.ilDclBaseRecordModel.php b/components/ILIAS/DataCollection/classes/Fields/Base/class.ilDclBaseRecordModel.php index bca118cfc3ca..8113d62ac214 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Base/class.ilDclBaseRecordModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/Base/class.ilDclBaseRecordModel.php @@ -311,16 +311,15 @@ public function getRecordFieldValues(): array * Get Field Value * @return int|string|array|null */ - public function getRecordFieldValue(?string $field_id) + public function getRecordFieldValue(?string $field_id): mixed { if ($field_id === null) { return null; } - $this->loadRecordFields(); if (ilDclStandardField::_isStandardField($field_id)) { return $this->getStandardField($field_id); } else { - return $this->recordfields[$field_id]->getValue(); + return ilDclCache::getRecordFieldCache($this, ilDclCache::getFieldCache((int) $field_id))->getValue(); } } @@ -404,7 +403,7 @@ public function getRecordFieldSingleHTML($field_id, array $options = []): string * @var $field ilDclBaseRecordFieldModel */ - $html = $field->getRecordRepresentation()->getSingleHTML($options, false); + $html = $field->getRecordRepresentation()->getSingleHTML($options); } return $html; @@ -567,10 +566,6 @@ public function doDelete(bool $omit_notification = false): void { $this->loadRecordFields(); foreach ($this->recordfields as $recordfield) { - if ($recordfield->getField()->getDatatypeId() == ilDclDatatype::INPUTFORMAT_MOB) { - $this->deleteMob((int) $recordfield->getValue()); - } - $recordfield->delete(); } @@ -625,14 +620,6 @@ public function deleteFile(int $obj_id): void } } - public function deleteMob(int $obj_id): void - { - if (ilObject2::_lookupObjId($obj_id)) { - $mob = new ilObjMediaObject($obj_id); - $mob->delete(); - } - } - public function hasPermissionToEdit(int $ref_id): bool { return $this->getTable()->hasPermissionToEditRecord($ref_id, $this); diff --git a/components/ILIAS/DataCollection/classes/Fields/Boolean/class.ilDclBooleanRecordFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/Boolean/class.ilDclBooleanRecordFieldModel.php index dbfd47601d6a..2761becff665 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Boolean/class.ilDclBooleanRecordFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/Boolean/class.ilDclBooleanRecordFieldModel.php @@ -21,19 +21,16 @@ class ilDclBooleanRecordFieldModel extends ilDclBaseRecordFieldModel { /** + * Function to parse incoming data from form input value $value. returns the string/number/etc. to store in the database. * @param int|string $value */ - public function parseValue($value): int + public function parseExportValue($value): int { return $value ? 1 : 0; } - /** - * Function to parse incoming data from form input value $value. returns the string/number/etc. to store in the database. - * @param int|string $value - */ - public function parseExportValue($value): int + public function getPlainText(): string { - return $value ? 1 : 0; + return $this->getValue() ? $this->lng->txt('yes') : $this->lng->txt('no'); } } diff --git a/components/ILIAS/DataCollection/classes/Fields/Copy/class.ilDclCopyRecordFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/Copy/class.ilDclCopyRecordFieldModel.php index 6aacc0c66478..494eb2b6330b 100644 --- a/components/ILIAS/DataCollection/classes/Fields/Copy/class.ilDclCopyRecordFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/Copy/class.ilDclCopyRecordFieldModel.php @@ -27,7 +27,7 @@ public function setValueFromForm(ilPropertyFormGUI $form): void { $value = $form->getInput('field_' . $this->getField()->getId()); if (is_array($value)) { - $value = implode('; ', $value); + $value = implode(' | ', $value); } $this->setValue($value); } diff --git a/components/ILIAS/DataCollection/classes/Fields/Date/class.ilDclDateRecordFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/Date/class.ilDclDateRecordFieldModel.php index f906f0c7a73f..d7bc09d9cb85 100644 --- a/components/ILIAS/DataCollection/classes/Fields/Date/class.ilDclDateRecordFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/Date/class.ilDclDateRecordFieldModel.php @@ -20,14 +20,6 @@ class ilDclDateRecordFieldModel extends ilDclBaseRecordFieldModel { - /** - * @param int|string|null $value - */ - public function parseValue($value): string - { - return (string) $value; - } - public function getValueFromExcel(ilExcel $excel, int $row, int $col): ?string { $value = parent::getValueFromExcel($excel, $row, $col); @@ -51,4 +43,9 @@ public function getFormulaValue(): string { return (string) strtotime($this->getValue() ?: ''); } + + public function getPlainText(): string + { + return $this->getValue() ? date($this->user->getDateFormat()->toString(), strtotime($this->getValue())) : ''; + } } diff --git a/components/ILIAS/DataCollection/classes/Fields/DateSelection/class.ilDclDateSelectionRecordFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/DateSelection/class.ilDclDateSelectionRecordFieldModel.php index 1104cbac471b..0875f78525b0 100755 --- a/components/ILIAS/DataCollection/classes/Fields/DateSelection/class.ilDclDateSelectionRecordFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/DateSelection/class.ilDclDateSelectionRecordFieldModel.php @@ -20,4 +20,8 @@ class ilDclDateSelectionRecordFieldModel extends ilDclSelectionRecordFieldModel { + protected function formatValue(string $value): string + { + return (strtotime($value) === false) ? $value : date($this->user->getDateFormat()->toString(), strtotime($value)); + } } diff --git a/components/ILIAS/DataCollection/classes/Fields/Datetime/class.ilDclDatetimeRecordFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/Datetime/class.ilDclDatetimeRecordFieldModel.php index b4fcf962ce40..b9f9d7c9077a 100644 --- a/components/ILIAS/DataCollection/classes/Fields/Datetime/class.ilDclDatetimeRecordFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/Datetime/class.ilDclDatetimeRecordFieldModel.php @@ -62,4 +62,10 @@ public function getFormulaValue(): string { return (string) strtotime($this->getValue() ?: ''); } + + + public function getPlainText(): string + { + return $this->getValue() ? date($this->user->getDateTimeFormat()->toString(), strtotime($this->getValue())) : ''; + } } diff --git a/components/ILIAS/DataCollection/classes/Fields/DatetimeSelection/class.ilDclDatetimeSelectionRecordFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/DatetimeSelection/class.ilDclDatetimeSelectionRecordFieldModel.php index 59d44bd817e7..958f86e0524d 100644 --- a/components/ILIAS/DataCollection/classes/Fields/DatetimeSelection/class.ilDclDatetimeSelectionRecordFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/DatetimeSelection/class.ilDclDatetimeSelectionRecordFieldModel.php @@ -20,4 +20,8 @@ class ilDclDatetimeSelectionRecordFieldModel extends ilDclSelectionRecordFieldModel { + protected function formatValue(string $value): string + { + return (strtotime($value) === false) ? $value : date($this->user->getDateTimeFormat()->toString(), strtotime($value)); + } } diff --git a/components/ILIAS/DataCollection/classes/Fields/File/class.ilDclFileFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/File/class.ilDclFileFieldModel.php index 193b4ea1e9c4..f35dafcdfd38 100755 --- a/components/ILIAS/DataCollection/classes/Fields/File/class.ilDclFileFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/File/class.ilDclFileFieldModel.php @@ -23,6 +23,15 @@ */ class ilDclFileFieldModel extends ilDclBaseFieldModel { + protected ilFileServicesSettings $file_settings; + + public function __construct(int $a_id = 0) + { + global $DIC; + $this->file_settings = $DIC->fileServiceSettings(); + parent::__construct($a_id); + } + public function allowFilterInListView(): bool { return false; @@ -35,23 +44,27 @@ public function getValidFieldProperties(): array public function getSupportedExtensions(): array { - if (!$this->hasProperty(ilDclBaseFieldModel::PROP_SUPPORTED_FILE_TYPES)) { - return []; - } + $file_types = []; - $file_types = $this->getProperty(ilDclBaseFieldModel::PROP_SUPPORTED_FILE_TYPES); + foreach ($this->getExtensions() as $i => $type) { + if ( + in_array($type, $this->file_settings->getWhiteListedSuffixes()) && + !in_array($type, $this->file_settings->getBlackListedSuffixes()) + ) { + $file_types[] = $type; + } + } - return $this->parseSupportedExtensions($file_types); + return $file_types; } - protected function parseSupportedExtensions(string $input_value): array + protected function getExtensions(): array { - $supported_extensions = explode(",", $input_value); - - $trim_function = function ($value) { - return trim(trim(strtolower($value)), "."); - }; - - return array_map($trim_function, $supported_extensions); + $types = $this->getProperty(ilDclBaseFieldModel::PROP_SUPPORTED_FILE_TYPES); + if ($types === null) { + return []; + } else { + return explode(',', str_replace(' ', '', $types)); + } } } diff --git a/components/ILIAS/DataCollection/classes/Fields/File/class.ilDclFileRecordFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/File/class.ilDclFileRecordFieldModel.php index 9837d2a14ef2..fd73d258487f 100755 --- a/components/ILIAS/DataCollection/classes/Fields/File/class.ilDclFileRecordFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/File/class.ilDclFileRecordFieldModel.php @@ -27,9 +27,9 @@ class ilDclFileRecordFieldModel extends ilDclBaseRecordFieldModel { use ilDclFileFieldHelper; - private const FILE_TMP_NAME = 'tmp_name'; - private const FILE_NAME = "name"; - private const FILE_TYPE = "type"; + protected const FILE_TMP_NAME = 'tmp_name'; + protected const FILE_NAME = "name"; + protected const FILE_TYPE = "type"; protected \ILIAS\ResourceStorage\Services $irss; protected ilDataCollectionStakeholder $stakeholder; @@ -46,79 +46,48 @@ public function __construct(ilDclBaseRecordModel $record, ilDclBaseFieldModel $f public function parseValue($value) { - $file = $value; - - // Some general Request Information $has_record_id = $this->http->wrapper()->query()->has('record_id'); $is_confirmed = $this->http->wrapper()->post()->has('save_confirmed'); $has_save_confirmation = ($this->getRecord()->getTable()->getSaveConfirmation() && !$has_record_id); - if ( - is_array($file) - && isset($file[self::FILE_TMP_NAME]) - && $file[self::FILE_TMP_NAME] !== "" - && (!$has_save_confirmation || $is_confirmed) - ) { - if ($has_save_confirmation) { - $ilfilehash = $this->http->wrapper()->post()->retrieve( - 'ilfilehash', - $this->refinery->kindlyTo()->string() - ); - - $move_file = ilDclPropertyFormGUI::getTempFilename( - $ilfilehash, - 'field_' . $this->getField()->getId(), - $file[self::FILE_NAME], - $file[self::FILE_TYPE] - ); - - $file_stream = ILIAS\Filesystem\Stream\Streams::ofResource(fopen($move_file, 'rb')); + if (($value[self::FILE_TMP_NAME] ?? '') !== '' && (!$has_save_confirmation || $is_confirmed)) { + return $this->handleFileUpload($value, $has_save_confirmation); + } else { + if (($value[self::FILE_TMP_NAME] ?? '') !== '') { + return $value; } else { - $move_file = $file[self::FILE_TMP_NAME]; + return $this->getValue(); + } + } + } - if (false === $this->upload->hasBeenProcessed()) { - $this->upload->process(); - } + protected function handleFileUpload(array $value, bool $has_save_confirmation): mixed + { + if ($has_save_confirmation) { + $move_file = ilDclPropertyFormGUI::getTempFilename( + $this->http->wrapper()->post()->retrieve('ilfilehash', $this->refinery->kindlyTo()->string()), + 'field_' . $this->getField()->getId(), + $value[self::FILE_NAME], + $value[self::FILE_TYPE] + ); + + $file_stream = ILIAS\Filesystem\Stream\Streams::ofResource(fopen($move_file, 'rb')); + } else { + $move_file = $value[self::FILE_TMP_NAME]; - if (false === $this->upload->hasUploads()) { - throw new ilException($this->lng->txt('upload_error_file_not_found')); - } + $file_stream = Streams::ofResource(fopen($move_file, 'rb')); + } - $file_stream = Streams::ofResource(fopen($move_file, 'rb')); - } + $file_title = $value[self::FILE_NAME] ?? basename($move_file); - $file_title = $file[self::FILE_NAME] ?? basename($move_file); - - // Storing the File to the IRSS - $existing_value = $this->getValue(); - if ( - is_string($existing_value) - && ($rid = $this->irss->manage()->find($existing_value)) !== null - ) { - // Append to existing RID - $this->irss->manage()->replaceWithStream( - $rid, - $file_stream, - $this->stakeholder, - $file_title - ); - } else { - // Create new RID - $rid = $this->irss->manage()->stream( - $file_stream, - $this->stakeholder, - $file_title - ); - } - - return $rid->serialize(); + $old = $this->getValue(); + if (is_string($old) && ($rid = $this->irss->manage()->find($old)) !== null) { + $this->irss->manage()->replaceWithStream($rid, $file_stream, $this->stakeholder, $file_title); } else { - // handover for save-confirmation - if (is_array($file) && isset($file[self::FILE_TMP_NAME]) && $file[self::FILE_TMP_NAME] != "") { - return $file; - } + $rid = $this->irss->manage()->stream($file_stream, $this->stakeholder, $file_title); } - return $this->getValue(); + + return $rid->serialize(); } public function setValueFromForm(ilPropertyFormGUI $form): void @@ -141,7 +110,9 @@ public function delete(): void protected function removeData(): void { - $this->irss->manage()->remove($this->irss->manage()->find($this->value), $this->stakeholder); + if (null !== $rid = $this->irss->manage()->find($this->getValue())) { + $this->irss->manage()->remove($rid, $this->stakeholder); + } } public function parseExportValue($value) @@ -156,17 +127,14 @@ public function parseSortingValue($value, bool $link = true) public function afterClone(): void { - $field = ilDclCache::getCloneOf((int) $this->getField()->getId(), ilDclCache::TYPE_FIELD); - $record = ilDclCache::getCloneOf($this->getRecord()->getId(), ilDclCache::TYPE_RECORD); - $record_field = ilDclCache::getRecordFieldCache($record, $field); - - if (!$record_field->getValue()) { - return; - } - $current = $this->valueToCurrentRevision($record_field->getValue()); - if ($current !== null) { - $new_rid = $this->irss->manage()->clone($current->getIdentification()); - $this->setValue($new_rid->serialize()); + if ($this->value !== null) { + $value = null; + $current = $this->valueToCurrentRevision($this->value); + if ($current !== null) { + $new_rid = $this->irss->manage()->clone($current->getIdentification()); + $value = $new_rid->serialize(); + } + $this->setValue($value, true); $this->doUpdate(); } } diff --git a/components/ILIAS/DataCollection/classes/Fields/IliasReference/class.ilDclIliasReferenceRecordRepresentation.php b/components/ILIAS/DataCollection/classes/Fields/IliasReference/class.ilDclIliasReferenceRecordRepresentation.php index 1497a5a347ab..2d941a99bb62 100755 --- a/components/ILIAS/DataCollection/classes/Fields/IliasReference/class.ilDclIliasReferenceRecordRepresentation.php +++ b/components/ILIAS/DataCollection/classes/Fields/IliasReference/class.ilDclIliasReferenceRecordRepresentation.php @@ -42,7 +42,10 @@ public function getHTML(bool $link = true, array $options = []): string return ''; } - $object = ilObjectFactory::getInstanceByRefId($ref_id); + $object = ilObjectFactory::getInstanceByRefId($ref_id, false); + if (null === $object || !$this->access->checkAccess('visible', '', $ref_id)) { + return ''; + } $html = $object->getTitle() . ' [' . $ref_id . ']'; $actions = []; diff --git a/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobFieldModel.php index af9190511a8d..732905ee1598 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobFieldModel.php @@ -18,19 +18,38 @@ declare(strict_types=1); +use ILIAS\Filesystem\Filesystem; + class ilDclMobFieldModel extends ilDclFileFieldModel { + private Filesystem $file_system; + + public function __construct(int $a_id = 0) + { + global $DIC; + $this->file_system = $DIC->filesystem()->web(); + parent::__construct($a_id); + } + public function getValidFieldProperties(): array { return [ - ilDclBaseFieldModel::PROP_WIDTH, - ilDclBaseFieldModel::PROP_HEIGHT, ilDclBaseFieldModel::PROP_LINK_DETAIL_PAGE_MOB ]; } - public function getSupportedExtensions(): array + public function getFileSystem(): Filesystem + { + return $this->file_system; + } + + public function filenameToAscii(string $filename): string + { + return (new ilFileServicesPolicy($this->file_settings))->ascii($filename); + } + + protected function getExtensions(): array { - return ['jpg', 'jpeg', 'gif', 'png', 'mp3', 'flx', 'mp4', 'm4v', 'mov', 'wmv']; + return ['jpg', 'jpeg', 'gif', 'png', 'mp3', 'mp4', 'm4v']; } } diff --git a/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobFieldRepresentation.php b/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobFieldRepresentation.php index 2250148164a0..ec55b91aeffd 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobFieldRepresentation.php +++ b/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobFieldRepresentation.php @@ -58,20 +58,6 @@ protected function buildFieldCreationInput(ilObjDataCollection $dcl, string $mod $opt->setInfo(sprintf($opt->getInfo(), implode(", ", $this->getField()->getSupportedExtensions()))); - $prop_width = new ilNumberInputGUI($this->lng->txt('dcl_width'), 'prop_' . ilDclBaseFieldModel::PROP_WIDTH); - $prop_width->setInfo($this->lng->txt('dcl_width_desc')); - $prop_width->setSize(5); - $prop_width->setMaxValue(4000); - - $opt->addSubItem($prop_width); - - $prop_height = new ilNumberInputGUI($this->lng->txt('dcl_height'), 'prop_' . ilDclBaseFieldModel::PROP_HEIGHT); - $prop_height->setInfo($this->lng->txt('dcl_height_desc')); - $prop_height->setSize(5); - $prop_height->setMaxValue(4000); - - $opt->addSubItem($prop_height); - $prop_page_details = new ilDclCheckboxInputGUI( $this->lng->txt('dcl_link_detail_page'), 'prop_' . ilDclBaseFieldModel::PROP_LINK_DETAIL_PAGE_MOB diff --git a/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobRecordFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobRecordFieldModel.php index fe9bf6585ca5..7792099dff93 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobRecordFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobRecordFieldModel.php @@ -18,95 +18,30 @@ declare(strict_types=1); +use ILIAS\FileUpload\Location; + class ilDclMobRecordFieldModel extends ilDclFileRecordFieldModel { - public function parseValue($value) + protected function handleFileUpload(array $value, bool $has_save_confirmation): int { - if ($value === -1) { - return null; - } - - $media = $value; - - $has_record_id = $this->http->wrapper()->query()->has('record_id'); - $is_confirmed = $this->http->wrapper()->post()->has('save_confirmed'); - $has_save_confirmation = ($this->getRecord()->getTable()->getSaveConfirmation() && !$has_record_id); - - if (($media['tmp_name'] ?? '') !== '' && (!$has_save_confirmation || $is_confirmed)) { - $mob = new ilObjMediaObject(); - $mob->setTitle($media['name']); - $mob->create(); - $mob_dir = ilObjMediaObject::_getDirectory($mob->getId()); - if (!is_dir($mob_dir)) { - $mob->createDirectory(); - } - $media_item = new ilMediaItem(); - $mob->addMediaItem($media_item); - $media_item->setPurpose('Standard'); - $file_name = ilFileUtils::getASCIIFilename($media['name']); - $file_name = str_replace(' ', '_', $file_name); - $target_file_path = $mob_dir . '/' . $file_name; - $location = $file_name; - - if ($has_save_confirmation) { - $ilfilehash = $this->http->wrapper()->post()->retrieve( - 'ilfilehash', - $this->refinery->kindlyTo()->string() - ); - - $move_file = ilDclPropertyFormGUI::getTempFilename( - $ilfilehash, - 'field_' . $this->getField()->getId(), - $media['name'], - $media['type'] - ); - } else { - if (!$this->upload->hasBeenProcessed()) { - $this->upload->process(); - } - - if (!$this->upload->hasUploads()) { - throw new ilException($this->lng->txt('upload_error_file_not_found')); - } - $move_file = $media['tmp_name']; - } - - ilFileUtils::rename($move_file, $target_file_path); - chmod($target_file_path, 0640); - ilFileUtils::renameExecutables($mob_dir); - - $format = ilObjMediaObject::getMimeType($target_file_path); - - ilObjMediaObject::_saveUsage( - $mob->getId(), - 'dcl:html', - $this->getRecord()->getTable()->getCollectionObject()->getId() - ); - $media_item->setFormat($format); - $media_item->setLocation($location); - $media_item->setLocationType('LocalFile'); - - if (ilFFmpeg::enabled() && ilFFmpeg::supportsImageExtraction($format)) { - $med = $mob->getMediaItem('Standard'); - $mob_file = ilObjMediaObject::_getDirectory($mob->getId()) . '/' . $med->getLocation(); - $a_target_dir = ilObjMediaObject::_getDirectory($mob->getId()); - ilFFmpeg::extractImage($mob_file, 'mob_vpreview.png', $a_target_dir); - } + $mob = new ilObjMediaObject(); + $mob->setTitle($value[self::FILE_NAME]); + $mob->create(); + + $mob->addMediaItemFromUpload( + 'Standard', + $this->upload->getResults()[$value[self::FILE_TMP_NAME]], + $this->http->wrapper()->post()->retrieve('ilfilehash', $this->refinery->kindlyTo()->string()) + ); + $mob->update(); - $mob->update(); - $return = $mob->getId(); - if ($this->value !== null) { - $this->removeData(); - } - } else { - if (($media['tmp_name'] ?? '') !== '') { - $return = $media; - } else { - $return = $this->getValue(); - } - } + ilObjMediaObject::_saveUsage( + $mob->getId(), + 'dcl:html', + $this->getRecord()->getTable()->getCollectionObject()->getId() + ); - return $return; + return $mob->getId(); } /** @@ -138,29 +73,23 @@ public function parseSortingValue($value, bool $link = true): string protected function removeData(): void { - $mob = new ilObjMediaObject($this->value); - ilObjMediaObject::_removeUsage( - $mob->getId(), - 'dcl:html', - $this->getRecord()->getTable()->getCollectionObject()->getId() - ); - $mob->delete(); + if (ilObjMediaObject::_exists($this->value)) { + $mob = new ilObjMediaObject($this->value); + $mob->delete(); + } } public function afterClone(): void { - $field = ilDclCache::getCloneOf((int) $this->getField()->getId(), ilDclCache::TYPE_FIELD); - $record = ilDclCache::getCloneOf($this->getRecord()->getId(), ilDclCache::TYPE_RECORD); - $record_field = ilDclCache::getRecordFieldCache($record, $field); - - if (!$record_field->getValue()) { - return; + if ($this->value !== null) { + $value = null; + if (ilObjMediaObject::_exists($this->value)) { + $origin = new ilObjMediaObject($this->value); + $new = $origin->duplicate(); + $value = $new->getId(); + } + $this->setValue($value, true); + $this->doUpdate(); } - - $mob_old = new ilObjMediaObject($record_field->getValue()); - $mob_new = $mob_old->duplicate(); - - $this->setValue($mob_new->getId(), true); - $this->doUpdate(); } } diff --git a/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobRecordRepresentation.php b/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobRecordRepresentation.php index cf44fced4251..b2907be7f41b 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobRecordRepresentation.php +++ b/components/ILIAS/DataCollection/classes/Fields/Mob/class.ilDclMobRecordRepresentation.php @@ -18,11 +18,10 @@ declare(strict_types=1); +use ILIAS\UI\Component\Image\Image; + class ilDclMobRecordRepresentation extends ilDclFileRecordRepresentation { - /** - * Outputs html of a certain field - */ public function getHTML(bool $link = true, array $options = []): string { $value = $this->getRecordField()->getValue(); @@ -31,95 +30,35 @@ public function getHTML(bool $link = true, array $options = []): string return ""; } - // the file is only temporary uploaded. Still need to be confirmed before stored - $has_ilfilehash = $this->http->wrapper()->post()->has('ilfilehash'); - if (is_array($value) && $has_ilfilehash) { - $ilfilehash = $this->http->wrapper()->post()->retrieve('ilfilehash', $this->refinery->kindlyTo()->string()); - - $this->ctrl->setParameterByClass(ilDclRecordListGUI::class, "ilfilehash", $ilfilehash); - $this->ctrl->setParameterByClass( - ilDclRecordListGUI::class, - "field_id", - $this->getRecordField()->getField()->getId() - ); - - return '' . $value['name'] . ''; - } - $mob = new ilObjMediaObject($value); - $med = $mob->getMediaItem('Standard'); - - if (!$med || $med->getLocation() === "") { - return ""; - } - - $field = $this->getRecordField()->getField(); - - $is_linked_field = $field->getProperty(ilDclBaseFieldModel::PROP_LINK_DETAIL_PAGE_MOB); - $has_view = false; - if ($this->http->wrapper()->query()->has("tableview_id")) { - $tableview_id = $this->http->wrapper()->query()->retrieve( - 'tableview_id', - $this->refinery->kindlyTo()->int() - ); - $page = new ilDclDetailedViewDefinitionGUI($tableview_id); - $has_view = $page->getPageObject()->isActive(); - } - - $components = []; - - if (in_array(strtolower($med->getSuffix()), ['jpg', 'jpeg', 'png', 'gif'])) { - // Image - $dir = ilObjMediaObject::_getDirectory($mob->getId()); - - $image = $this->factory->image()->responsive(ilWACSignedPath::signFile($dir . "/" . $med->getLocation()), ""); - - if ($is_linked_field && $has_view && $link) { - $this->ctrl->setParameterByClass( - 'ilDclDetailedViewGUI', - 'record_id', - $this->getRecordField()->getRecord()->getId() - ); - $image = $image->withAction($this->ctrl->getLinkTargetByClass("ilDclDetailedViewGUI", 'renderRecord')); - } - $components[] = $image; - } else { - $location = ilObjMediaObject::_getURL($mob->getId()) . "/" . $med->getLocation(); - if (strtolower($med->getSuffix()) == 'mp3') { - $components[] = $this->factory->player()->audio($location); + $item = $mob->getMediaItem('Standard'); + $component = match (explode('/', (string) $item?->getFormat())[0] ?? '') { + 'image' => $this->factory->image()->responsive($item->getLocationSrc(), $mob->getTitle()), + 'video' => $this->factory->player()->video($item->getLocationSrc()), + 'audio' => $this->factory->player()->audio($item->getLocationSrc()), + default => $this->factory->image()->responsive('', $mob->getTitle()), + }; + + if ($this->getField()->hasProperty(ilDclBaseFieldModel::PROP_LINK_DETAIL_PAGE_MOB) && $link) { + if ($this->http->wrapper()->query()->has('tableview_id')) { + $tableview_id = $this->http->wrapper()->query()->retrieve('tableview_id', $this->refinery->kindlyTo()->int()); } else { - $components[] = $this->factory->player()->video($location); + $tableview_id = $this->getRecord()->getTable()->getFirstTableViewId($this->user->getId()); } - - if ($is_linked_field && $has_view) { - $this->ctrl->setParameterByClass( - 'ilDclDetailedViewGUI', - 'record_id', - $this->getRecordField()->getRecord()->getId() - ); - $components[] = $this->factory->link()->standard( - $this->lng->txt('details'), - $this->ctrl->getLinkTargetByClass( - "ilDclDetailedViewGUI", - 'renderRecord' - ) - ); + $page = new ilDclDetailedViewDefinitionGUI($tableview_id); + if ($page->getPageObject()->isActive()) { + $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'record_id', $this->getRecord()->getId()); + $link = $this->ctrl->getLinkTargetByClass(ilDclDetailedViewGUI::class, 'renderRecord'); + $this->ctrl->clearParameterByClass(ilDclDetailedViewGUI::class, 'record_id'); + if ($component instanceof Image) { + $component = $component->withAction($link); + } else { + $component = [$component, $this->factory->link()->standard($this->lng->txt('details'), $link)]; + } } } - $width = "200px"; - $height = "auto"; - if ($field->getProperty(ilDclBaseFieldModel::PROP_WIDTH) > 0) { - $width = $field->getProperty(ilDclBaseFieldModel::PROP_WIDTH) . "px"; - } - if ($field->getProperty(ilDclBaseFieldModel::PROP_HEIGHT) > 0) { - $height = $field->getProperty(ilDclBaseFieldModel::PROP_HEIGHT) . "px"; - } - $content = $this->renderer->render($components); - return "
$content
"; + return $this->renderer->render($component); } public function parseFormInput($value) diff --git a/components/ILIAS/DataCollection/classes/Fields/Number/class.ilDclNumberRecordFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/Number/class.ilDclNumberRecordFieldModel.php index 7a6e18339452..41053e1c46cb 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Number/class.ilDclNumberRecordFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/Number/class.ilDclNumberRecordFieldModel.php @@ -20,8 +20,4 @@ class ilDclNumberRecordFieldModel extends ilDclBaseRecordFieldModel { - public function parseValue($value): ?float - { - return ($value == '') ? null : (float) $value; //SW, Ilias Mantis #0011799: Return null otherwise '' is casted to 0 in DB - } } diff --git a/components/ILIAS/DataCollection/classes/Fields/Reference/class.ilDclReferenceFieldRepresentation.php b/components/ILIAS/DataCollection/classes/Fields/Reference/class.ilDclReferenceFieldRepresentation.php index ec2aeb91164d..21bfc6e53088 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Reference/class.ilDclReferenceFieldRepresentation.php +++ b/components/ILIAS/DataCollection/classes/Fields/Reference/class.ilDclReferenceFieldRepresentation.php @@ -22,12 +22,7 @@ class ilDclReferenceFieldRepresentation extends ilDclBaseFieldRepresentation { public const REFERENCE_SEPARATOR = " -> "; - /** - * @param ilPropertyFormGUI $form - * @param int|null $record_id - * @return ilSelectInputGUI|ilMultiSelectInputGUI - */ - public function getInputField(ilPropertyFormGUI $form, ?int $record_id = null): ilFormPropertyGUI + public function getInputField(ilPropertyFormGUI $form, ?int $record_id = null): ilSelectInputGUI|ilMultiSelectInputGUI { if ($this->getField()->getProperty(ilDclBaseFieldModel::PROP_N_REFERENCE)) { $input = new ilMultiSelectInputGUI($this->getField()->getTitle(), 'field_' . $this->getField()->getId()); @@ -39,11 +34,50 @@ public function getInputField(ilPropertyFormGUI $form, ?int $record_id = null): $this->setupInputField($input, $this->getField()); - $options = []; + $options = $this->getSortedRecords(); if (!$this->getField()->getProperty(ilDclBaseFieldModel::PROP_N_REFERENCE)) { - $options[''] = $this->lng->txt('dcl_please_select'); + $options = ['' => $this->lng->txt('dcl_please_select')] + $options; + } + + $input->setOptions($options); + if ($input instanceof ilMultiSelectInputGUI) { + $input->setHeight(32 * min(5, max(1, count($options)))); + } + + $ref_id = $this->http->wrapper()->query()->retrieve('ref_id', $this->refinery->kindlyTo()->int()); + + $fieldref = (int) $this->getField()->getProperty(ilDclBaseFieldModel::PROP_REFERENCE); + $reffield = ilDclCache::getFieldCache($fieldref); + if (ilObjDataCollectionAccess::hasPermissionToAddRecord($ref_id, $reffield->getTableId())) { + $input->addCustomAttribute('data-ref="1"'); + $input->addCustomAttribute('data-ref-table-id="' . $reffield->getTableId() . '"'); + $input->addCustomAttribute('data-ref-field-id="' . $reffield->getId() . '"'); } + return $input; + } + + public function addFilterInputFieldToTable(ilTable2GUI $table): array|string|null + { + $input = $table->addFilterItemByMetaType( + "filter_" . $this->getField()->getId(), + ilTable2GUI::FILTER_SELECT, + false, + $this->getField()->getId() + ); + $options = ['' => $this->lng->txt('dcl_all_entries')] + + $this->getSortedRecords() + + ['none' => $this->lng->txt('dcl_no_entry')]; + $input->setOptions($options); + + $this->setupFilterInputField($input); + + return $this->getFilterInputFieldValue($input); + } + + protected function getSortedRecords(): array + { + $options = []; $fieldref = (int) $this->getField()->getProperty(ilDclBaseFieldModel::PROP_REFERENCE); $reffield = ilDclCache::getFieldCache($fieldref); $reftable = ilDclCache::getTableCache($reffield->getTableId()); @@ -61,8 +95,8 @@ public function getInputField(ilPropertyFormGUI $form, ?int $record_id = null): $options[$record->getId()] = $media_obj->getTitle(); break; case ilDclDatatype::INPUTFORMAT_DATE: - $options[$record->getId()] = strtotime($record->getRecordFieldSingleHTML($fieldref)); - $options2[$record->getId()] = $record->getRecordFieldSingleHTML($fieldref); + $options[$record->getId()] = strtotime($record->getRecordField($fieldref)->getPlainText()); + $options2[$record->getId()] = $record->getRecordField($fieldref)->getPlainText(); break; case ilDclDatatype::INPUTFORMAT_TEXT: $value = $record_field->getValue(); @@ -85,63 +119,15 @@ public function getInputField(ilPropertyFormGUI $form, ?int $record_id = null): } asort($options, SORT_NATURAL | SORT_FLAG_CASE); - // TT #0019091: restore the actual values after sorting with timestamp if ($reffield->getDatatypeId() === ilDclDatatype::INPUTFORMAT_DATE) { foreach ($options as $key => $opt) { if ($key != "" && isset($options2) && is_array($options2)) { $options[$key] = $options2[$key]; } } - // the option 'please select' messes with the order, therefore we reset it - unset($options[""]); - $options = ["" => $this->lng->txt('dcl_please_select')] + $options; - } - - $input->setOptions($options); - if ($input instanceof ilMultiSelectInputGUI) { - $input->setHeight(32 * min(5, max(1, count($options)))); - } - - - $ref_id = $this->http->wrapper()->query()->retrieve('ref_id', $this->refinery->kindlyTo()->int()); - - if (ilObjDataCollectionAccess::hasPermissionToAddRecord($ref_id, $reftable->getId())) { - $input->addCustomAttribute('data-ref="1"'); - $input->addCustomAttribute('data-ref-table-id="' . $reftable->getId() . '"'); - $input->addCustomAttribute('data-ref-field-id="' . $reffield->getId() . '"'); } - return $input; - } - - /** - * @return string|array|null - */ - public function addFilterInputFieldToTable(ilTable2GUI $table) - { - $input = $table->addFilterItemByMetaType( - "filter_" . $this->getField()->getId(), - ilTable2GUI::FILTER_SELECT, - false, - $this->getField()->getId() - ); - $ref_field_id = (int) $this->getField()->getProperty(ilDclBaseFieldModel::PROP_REFERENCE); - $ref_field = ilDclCache::getFieldCache($ref_field_id); - $ref_table = ilDclCache::getTableCache($ref_field->getTableId()); - $options = []; - foreach ($ref_table->getRecords() as $record) { - $options[$record->getId()] = $record->getRecordField($ref_field_id)->getPlainText(); - } - // Sort by values ASC - asort($options); - $options = ['' => $this->lng->txt('dcl_all_entries')] - + $options - + ['none' => $this->lng->txt('dcl_no_entry')]; - $input->setOptions($options); - - $this->setupFilterInputField($input); - - return $this->getFilterInputFieldValue($input); + return $options; } /** diff --git a/components/ILIAS/DataCollection/classes/Fields/Selection/class.ilDclSelectionRecordFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/Selection/class.ilDclSelectionRecordFieldModel.php index 55e8ace1806f..a17b724c7079 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Selection/class.ilDclSelectionRecordFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/Selection/class.ilDclSelectionRecordFieldModel.php @@ -109,4 +109,19 @@ protected function getValueFromString(string $string): ?int return null; } + + public function getPlainText(): string + { + $values = ilDclSelectionOption::getValues((int) $this->getField()->getId(), $this->getValue()); + foreach ($values as $i => $value) { + $values[$i] = $this->formatValue($value); + } + + return implode(' | ', $values); + } + + protected function formatValue(string $value): string + { + return $value; + } } diff --git a/components/ILIAS/DataCollection/classes/Fields/Text/class.ilDclTextFieldModel.php b/components/ILIAS/DataCollection/classes/Fields/Text/class.ilDclTextFieldModel.php index a4b992d1dd5e..9e0fd02ac6a1 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Text/class.ilDclTextFieldModel.php +++ b/components/ILIAS/DataCollection/classes/Fields/Text/class.ilDclTextFieldModel.php @@ -114,7 +114,7 @@ protected function checkRegexAndLength(string $value): void throw new ilDclInputException(ilDclInputException::REGEX_CONFIG_EXCEPTION); } - if ($preg_match === false) { + if ($preg_match !== 1) { throw new ilDclInputException(ilDclInputException::REGEX_EXCEPTION); } } diff --git a/components/ILIAS/DataCollection/classes/Fields/Text/class.ilDclTextRecordRepresentation.php b/components/ILIAS/DataCollection/classes/Fields/Text/class.ilDclTextRecordRepresentation.php index ade35f177028..e588aaf2ed5c 100755 --- a/components/ILIAS/DataCollection/classes/Fields/Text/class.ilDclTextRecordRepresentation.php +++ b/components/ILIAS/DataCollection/classes/Fields/Text/class.ilDclTextRecordRepresentation.php @@ -53,11 +53,9 @@ public function getHTML(bool $link = true, array $options = []): string ilDclDetailedViewDefinition::exists($tableview_id) && ilDclDetailedViewDefinition::_lookupActive($tableview_id, ilDclDetailedViewDefinition::PARENT_TYPE) ) { - $this->ctrl->clearParametersByClass("ilDclDetailedViewGUI"); - $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'table_id', $this->getRecord()->getTableId()); - $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'tableview_id', $tableview_id); $this->ctrl->setParameterByClass(ilDclDetailedViewGUI::class, 'record_id', $this->getRecord()->getId()); $links['dcl_open_detail_view'] = $this->ctrl->getLinkTargetByClass(ilDclDetailedViewGUI::class, 'renderRecord'); + $this->ctrl->clearParameterByClass(ilDclDetailedViewGUI::class, 'record_id'); } } @@ -67,11 +65,12 @@ public function getHTML(bool $link = true, array $options = []): string case 0: return $value; case 1: + $key = array_keys($links)[0]; return $this->renderer->render( $this->factory->link()->standard( $value, reset($links) - )->withOpenInNewViewport(true) + )->withOpenInNewViewport($key === 'dcl_open_url') ); case 2: default: @@ -80,7 +79,7 @@ public function getHTML(bool $link = true, array $options = []): string $ui_links[] = $this->factory->link()->standard( $this->lng->txt($key), $link - )->withOpenInNewViewport(true); + )->withOpenInNewViewport($key === 'dcl_open_url'); } return $this->renderer->render( $this->factory->dropdown()->standard( diff --git a/components/ILIAS/DataCollection/classes/Fields/class.ilDclFieldListGUI.php b/components/ILIAS/DataCollection/classes/Fields/class.ilDclFieldListGUI.php index 0fd845c5ddca..96ea027c8894 100755 --- a/components/ILIAS/DataCollection/classes/Fields/class.ilDclFieldListGUI.php +++ b/components/ILIAS/DataCollection/classes/Fields/class.ilDclFieldListGUI.php @@ -189,7 +189,8 @@ public function listFields(): void $switcher->addTableSwitcherToToolbar( $this->parent_obj->getDataCollectionObject()->getTables(), self::class, - 'listFields' + 'listFields', + $this->getTableId() ); //table gui diff --git a/components/ILIAS/DataCollection/classes/Helpers/class.ilDclSwitcher.php b/components/ILIAS/DataCollection/classes/Helpers/class.ilDclSwitcher.php index 250ff03158d5..db9ad1ce12b1 100755 --- a/components/ILIAS/DataCollection/classes/Helpers/class.ilDclSwitcher.php +++ b/components/ILIAS/DataCollection/classes/Helpers/class.ilDclSwitcher.php @@ -35,44 +35,47 @@ public function __construct(ilToolbarGUI $toolbar, \ILIAS\UI\Factory $ui_factory /** * @param ilDclTable[] $tables - * @param string $target_class - * @param string $target_cmd - * @return void - * @throws ilCtrlException */ - public function addTableSwitcherToToolbar(array $tables, string $target_class, string $target_cmd): void + public function addTableSwitcherToToolbar(array $tables, string $target_class, string $target_cmd, int $table_id = 0): void { + $this->ctrl->clearParameterByClass($target_class, 'tableview_id'); $links = []; - - $this->ctrl->clearParameterByClass(ilObjDataCollectionGUI::class, "tableview_id"); - $this->ctrl->clearParameterByClass($target_class, "tableview_id"); - + $current = ''; foreach ($tables as $table) { - $this->ctrl->setParameterByClass($target_class, "table_id", $table->getId()); - $links[] = $this->ui_factory->link()->standard($table->getTitle(), $this->ctrl->getLinkTargetByClass($target_class, $target_cmd)); + $title = $table->getTitle(); + if ($table->getId() == $table_id) { + $current = $title; + } + $title = ($current === $title ? '✓ ' : '⠀ ') . $title; + $this->ctrl->setParameterByClass($target_class, 'table_id', $table->getId()); + $links[] = $this->ui_factory->link()->standard($title, $this->ctrl->getLinkTargetByClass($target_class, $target_cmd)); } - $this->ctrl->clearParameterByClass($target_class, "table_id"); + $this->ctrl->clearParameterByClass($target_class, 'table_id'); - $this->addSwitcherToToolbar($links, $this->lng->txt('dcl_switch_table')); + $this->addSwitcherToToolbar($links, $this->lng->txt('dcl_table') . ': ' . $current); } /** * @param ilDclTableView[] $views - * @param int $table_id - * @param string $target_class - * @param string $target_cmd - * @return void - * @throws ilCtrlException */ - public function addViewSwitcherToToolbar(array $views, int $table_id, string $target_class, string $target_cmd): void + public function addViewSwitcherToToolbar(array $views, int $table_id, string $target_class, string $target_cmd, int $tableview_id = 0): void { + $this->ctrl->setParameterByClass($target_class, 'table_id', $table_id); $links = []; - $this->ctrl->setParameterByClass($target_class, "table_id", $table_id); + $current = ''; foreach ($views as $view) { - $this->ctrl->setParameterByClass($target_class, "tableview_id", $view->getId()); - $links[] = $this->ui_factory->link()->standard($view->getTitle(), $this->ctrl->getLinkTargetByClass($target_class, $target_cmd)); + $title = $view->getTitle(); + if ($view->getId() == $tableview_id) { + $current = $title; + } + $title = ($current === $title ? '✓⠀' : '⠀⠀') . $title; + $this->ctrl->setParameterByClass($target_class, 'tableview_id', $view->getId()); + $links[] = $this->ui_factory->link()->standard($title, $this->ctrl->getLinkTargetByClass($target_class, $target_cmd)); } - $this->addSwitcherToToolbar($links, $this->lng->txt('dcl_switch_view')); + $this->ctrl->clearParameterByClass($target_class, 'tableview_id'); + $this->ctrl->clearParameterByClass($target_class, 'table_id'); + + $this->addSwitcherToToolbar($links, $this->lng->txt('dcl_tableview') . ': ' . $current); } /** diff --git a/components/ILIAS/DataCollection/classes/Table/class.ilDclTable.php b/components/ILIAS/DataCollection/classes/Table/class.ilDclTable.php index d2d666e80a26..943bc8567ad2 100755 --- a/components/ILIAS/DataCollection/classes/Table/class.ilDclTable.php +++ b/components/ILIAS/DataCollection/classes/Table/class.ilDclTable.php @@ -333,6 +333,10 @@ public function deleteField(int $field_id): void } $field->doDelete(); + if ($this->getDefaultSortField() === $field->getId()) { + $this->setDefaultSortField(''); + $this->doUpdate(); + } } public function getField(string $field_id): ?ilDclBaseFieldModel @@ -420,31 +424,6 @@ public function getNewFieldOrder(): int return $place; } - /** - * @return int - */ - public function getNewTableviewOrder(): int - { - return (ilDclTableView::getCountForTableId($this->getId()) + 1) * 10; - } - - /** - * @param ilDclTableView[] $tableviews - */ - public function sortTableViews(?array $tableviews = null): void - { - if ($tableviews == null) { - $tableviews = $this->getTableViews(); - } - - $order = 10; - foreach ($tableviews as $tableview) { - $tableview->setTableviewOrder($order); - $tableview->update(); - $order += 10; - } - } - /** * Returns all fields of this table including the standard fields * @param bool $force_include_comments by default false, so comments will only load when enabled in tablesettings @@ -471,7 +450,7 @@ public function reloadFields(): void } /** - * @return ilDclTableView[] all tableviews ordered by tableview_order + * @return ilDclTableView[] */ public function getTableViews(): array { diff --git a/components/ILIAS/DataCollection/classes/Table/class.ilDclTableEditGUI.php b/components/ILIAS/DataCollection/classes/Table/class.ilDclTableEditGUI.php index 48dac4984a30..81f69997a128 100755 --- a/components/ILIAS/DataCollection/classes/Table/class.ilDclTableEditGUI.php +++ b/components/ILIAS/DataCollection/classes/Table/class.ilDclTableEditGUI.php @@ -260,6 +260,7 @@ public function save(bool $create = true): void if ($create) { $this->table->doCreate(); + $this->ctrl->setParameter($this, 'table_id', $this->table->getId()); $message = 'dcl_msg_table_created'; } else { $this->table->setDefaultSortField($data['table']['default_sort_field']); diff --git a/components/ILIAS/DataCollection/classes/TableView/class.ilDclTableView.php b/components/ILIAS/DataCollection/classes/TableView/class.ilDclTableView.php index d04d7ed38807..ccddb30639a3 100755 --- a/components/ILIAS/DataCollection/classes/TableView/class.ilDclTableView.php +++ b/components/ILIAS/DataCollection/classes/TableView/class.ilDclTableView.php @@ -68,13 +68,6 @@ class ilDclTableView extends ActiveRecord * @db_length 128 */ protected string $description = ''; - /** - * @var int - * @db_has_field true - * @db_fieldtype integer - * @db_length 8 - */ - protected int $tableview_order = 0; /** * @var ilDclBaseFieldModel[] */ @@ -119,16 +112,6 @@ public function setTitle(string $title): void $this->title = $title; } - public function getOrder(): int - { - return $this->tableview_order; - } - - public function setOrder(int $order): void - { - $this->tableview_order = $order; - } - public function getDescription(): string { return $this->description; @@ -139,16 +122,6 @@ public function setDescription(string $description): void $this->description = $description; } - public function getTableviewOrder(): int - { - return $this->tableview_order; - } - - public function setTableviewOrder(int $tableview_order): void - { - $this->tableview_order = $tableview_order; - } - public function getRoles(): array { return $this->roles; @@ -353,38 +326,31 @@ public function createFieldSetting($field_id): void } } - /** - * @param ilDclTableView $orig - * @param array $new_fields fields mapping - */ public function cloneStructure(ilDclTableView $orig, array $new_fields): void { global $DIC; - //clone structure - $this->setTitle($orig->getTitle() . ' ' . $DIC->language()->txt('copy_of_suffix')); - $this->setOrder($orig->getOrder()); + $title = $orig->getTitle(); + if ($orig->getTable()->getId() === $this->getTable()->getId()) { + $title .= ' ' . $DIC->language()->txt('copy_of_suffix'); + } + $this->setTitle($title); $this->setDescription($orig->getDescription()); $this->setRoles($orig->getRoles()); $this->setRoleLimitation($orig->getRoleLimitation()); - $this->create(false); //create default setting, adjust them later + $this->create(false); - //clone default values $f = new ilDclDefaultValueFactory(); - //clone fieldsettings foreach ($orig->getFieldSettings() as $orig_fieldsetting) { $new_fieldsetting = new ilDclTableViewFieldSetting(); $new_fieldsetting->setTableviewId($this->getId()); if ($new_fields[$orig_fieldsetting->getField()] ?? null) { - //normal fields $new_fieldsetting->setField($new_fields[$orig_fieldsetting->getField()]->getId()); } else { - //standard fields $new_fieldsetting->setField($orig_fieldsetting->getField()); } $new_field_id = $new_fieldsetting->cloneStructure($orig_fieldsetting); - //clone default value $datatype = $orig_fieldsetting->getFieldObject()->getDatatypeId(); $match = ilDclTableViewBaseDefaultValue::findSingle($datatype, $orig_fieldsetting->getId()); @@ -397,13 +363,11 @@ public function cloneStructure(ilDclTableView $orig, array $new_fields): void } $this->createFieldSetting('comments'); - //clone pageobject if (ilDclDetailedViewDefinition::exists($orig->getId())) { $orig_pageobject = new ilDclDetailedViewDefinition($orig->getId()); $orig_pageobject->copy($this->getId()); } - // mandatory for all cloning functions ilDclCache::setCloneOf($orig->getId(), $this->getId(), ilDclCache::TYPE_TABLEVIEW); } @@ -415,18 +379,13 @@ public static function getAllForTableId(int $table_id): array return self::where(['table_id' => $table_id])->orderBy('title')->get(); } - public static function getCountForTableId(int $table_id): int - { - return self::where(['table_id' => $table_id])->orderBy('tableview_order')->count(); - } - /** * @param $table_id * @return ilDclTableView|ActiveRecord */ public static function createOrGetStandardView(int $table_id): ActiveRecord { - if ($standardview = self::where(['table_id' => $table_id])->orderBy('tableview_order')->first()) { + if ($standardview = self::where(['table_id' => $table_id])->first()) { return $standardview; } @@ -461,8 +420,7 @@ public static function createOrGetStandardView(int $table_id): ActiveRecord $view->setTableId($table_id); // bugfix mantis 0023307 $lng = $DIC['lng']; - $view->setTitle($lng->txt('dcl_title_standardview')); - $view->setTableviewOrder(10); + $view->setTitle($lng->txt('dcl_title_standard')); $view->create(); return $view; diff --git a/components/ILIAS/DataCollection/classes/TableView/class.ilDclTableViewEditGUI.php b/components/ILIAS/DataCollection/classes/TableView/class.ilDclTableViewEditGUI.php index 4824c13a41ac..5caa56a8a428 100755 --- a/components/ILIAS/DataCollection/classes/TableView/class.ilDclTableViewEditGUI.php +++ b/components/ILIAS/DataCollection/classes/TableView/class.ilDclTableViewEditGUI.php @@ -160,8 +160,9 @@ public function executeCommand(): void default: if ($cmd === 'create' || $cmd === 'update') { $this->save($cmd === 'create'); + } else { + $this->$cmd(); } - $this->$cmd(); break; } break; @@ -182,7 +183,7 @@ protected function initForm(bool $create = false): Form ) ], $this->lng->txt('role_limitation') - ); + )->withValue(null); $inputs['settings'] = $this->ui_factory->input()->field()->section($settings, $this->lng->txt('general_settings')); @@ -246,7 +247,8 @@ protected function setTabs(string $active): void public function save(bool $create = false): void { - $data = $this->initForm()->withRequest($this->http->request())->getData(); + $form = $this->initForm($create)->withRequest($this->http->request()); + $data = $form->getData(); if ($data !== null) { $this->tableview->setTitle($data['settings']['title']); $this->tableview->setDescription($data['settings']['description']); @@ -254,15 +256,27 @@ public function save(bool $create = false): void $this->tableview->setRoles($data['settings']['role_limitation']['roles'] ?? []); if ($create) { $this->tableview->setTableId($this->table->getId()); - $this->tableview->setOrder($this->table->getNewTableviewOrder()); $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('dcl_msg_tableview_created'), true); $this->tableview->create(); + $this->ctrl->setParameter($this, 'tableview_id', $this->tableview->getId()); } else { $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('dcl_msg_tableview_updated'), true); $this->tableview->update(); } + $this->ctrl->redirect($this, 'editGeneralSettings'); + } + + if ($create) { + $this->help->setSubScreenId('create'); + $this->tpl->setContent($this->lng->txt('dcl_new_view') . $this->ui_renderer->render($form)); + } else { + $this->help->setSubScreenId('edit'); + $this->setTabs('general_settings'); + $this->tpl->setContent( + sprintf($this->lng->txt('dcl_edit_view'), $this->tableview->getTitle()) . + $this->ui_renderer->render($form) + ); } - $this->ctrl->redirect($this, 'editGeneralSettings'); } public function saveOverviewSettings(): void @@ -346,7 +360,6 @@ public function confirmDelete(): void protected function delete(): void { $this->tableview->delete(); - $this->table->sortTableViews(); $this->tpl->setOnScreenMessage('success', $this->lng->txt('dcl_msg_tableview_deleted'), true); $this->cancel(); } @@ -381,7 +394,6 @@ public function copy(): void $new_tableview = new ilDclTableView(); $new_tableview->setTableId($this->table->getId()); $new_tableview->cloneStructure($this->tableview, []); - $this->table->sortTableViews(); $this->tpl->setOnScreenMessage('success', $this->lng->txt("dcl_tableview_copy"), true); $this->cancel(); } diff --git a/components/ILIAS/DataCollection/classes/TableView/class.ilDclTableViewGUI.php b/components/ILIAS/DataCollection/classes/TableView/class.ilDclTableViewGUI.php index a0270a2ce16e..2d1f80c2e27a 100755 --- a/components/ILIAS/DataCollection/classes/TableView/class.ilDclTableViewGUI.php +++ b/components/ILIAS/DataCollection/classes/TableView/class.ilDclTableViewGUI.php @@ -137,7 +137,8 @@ public function show(): void $switcher->addTableSwitcherToToolbar( $this->parent_obj->getDataCollectionObject()->getTables(), self::class, - 'show' + 'show', + $this->table->getId() ); $this->tpl->setContent( @@ -204,23 +205,4 @@ public function checkViewsLeft(int $delete_count): void $this->ctrl->redirect($this, 'show'); } } - - /** - * invoked by ilDclTableViewTableGUI - */ - public function saveTableViewOrder(): void - { - $orders = $this->http->wrapper()->post()->retrieve( - 'order', - $this->refinery->kindlyTo()->dictOf($this->refinery->kindlyTo()->string()) - ); - asort($orders); - $tableviews = []; - foreach (array_keys($orders) as $tableview_id) { - $tableviews[] = ilDclTableView::find($tableview_id); - } - $this->table->sortTableViews($tableviews); - $this->tpl->setOnScreenMessage('success', $this->lng->txt('dcl_msg_tableviews_order_updated')); - $this->ctrl->redirect($this); - } } diff --git a/components/ILIAS/DataCollection/classes/class.ilDataCollectionDataSet.php b/components/ILIAS/DataCollection/classes/class.ilDataCollectionDataSet.php index eea4c255295c..5d8d091a772f 100755 --- a/components/ILIAS/DataCollection/classes/class.ilDataCollectionDataSet.php +++ b/components/ILIAS/DataCollection/classes/class.ilDataCollectionDataSet.php @@ -176,7 +176,6 @@ public function importRecord( $tableview->setTitle($a_rec['title']); $tableview->setTableId((int) $new_table_id); $tableview->setDescription($a_rec['description']); - $tableview->setTableviewOrder((int) $a_rec['tableview_order']); if (!is_array($a_rec['roles'])) { $a_rec['roles'] = json_decode($a_rec['roles']); } @@ -213,6 +212,9 @@ public function importRecord( $field->setTitle($a_rec['title']); $field->setDescription($a_rec['description']); $field->doCreate(); + if ($datatype_id === ilDclDatatype::INPUTFORMAT_TEXT) { + $field->setProperty(ilDclBaseFieldModel::PROP_LENGTH, 200)->store(); + } $a_mapping->addMapping('components/ILIAS/DataCollection', 'il_dcl_field', $a_rec['id'], $field->getId()); } } @@ -376,6 +378,14 @@ public function importRecord( $name = $properties[$a_rec['datatype_prop_id']]; } + if ($name === 'text_area' && $a_rec['value'] === '1') { + $field = ilDclCache::getFieldCache((int) $new_field_id); + if ($field instanceof ilDclTextFieldModel && !$field->hasProperty('length')) { + $field->setProperty(ilDclBaseFieldModel::PROP_LENGTH, 4000)->store(); + break; + } + } + $prop->setName($name); $prop->setValue($a_rec['value']); $prop->save(); @@ -419,12 +429,6 @@ public function importRecord( // Need to rewrite internal references and lookup new objects if MOB or File // For some fieldtypes it's better to reset the value, e.g. ILIAS_REF switch ($record_field->getField()->getDatatypeId()) { - case ilDclDatatype::INPUTFORMAT_MOB: - // Check if we got a mapping from old object - $new_mob_id = $a_mapping->getMapping('components/ILIAS/MediaObjects', 'mob', $a_rec['value']); - $value = ($new_mob_id) ? (int) $new_mob_id : null; - $this->import_temp_new_mob_ids[] = $new_mob_id; - break; case ilDclDatatype::INPUTFORMAT_FILEUPLOAD: $new_file_id = $a_mapping->getMapping('components/ILIAS/File', 'file', $a_rec['value']); $value = ($new_file_id) ? (int) $new_file_id : null; @@ -441,6 +445,8 @@ public function importRecord( $this->import_temp_refs[$new_record_field_id] = $value; } break; + case ilDclDatatype::INPUTFORMAT_MOB: + case ilDclDatatype::INPUTFORMAT_FILE: case ilDclDatatype::INPUTFORMAT_ILIAS_REF: $value = null; break; @@ -605,7 +611,6 @@ protected function getTypes(string $a_entity, string $a_version): array 'title' => 'text', 'roles' => 'text', 'description' => 'text', - 'tableview_order' => 'integer', ]; case 'il_dcl_field': return [ diff --git a/components/ILIAS/DataCollection/classes/class.ilDataCollectionGlobalTemplate.php b/components/ILIAS/DataCollection/classes/class.ilDataCollectionGlobalTemplate.php index 0f0a6a9bf9bb..e70fdcfc3aff 100755 --- a/components/ILIAS/DataCollection/classes/class.ilDataCollectionGlobalTemplate.php +++ b/components/ILIAS/DataCollection/classes/class.ilDataCollectionGlobalTemplate.php @@ -1005,9 +1005,6 @@ public function printToStdout( $this->http->sendResponse(); exit; default: - // include yahoo dom per default - ilYuiUtil::initDom(); - header('P3P: CP="CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa OUR BUS IND UNI COM NAV INT CNT STA PRE"'); header("Content-type: text/html; charset=UTF-8"); diff --git a/components/ILIAS/DataCollection/classes/class.ilDataCollectionMailNotification.php b/components/ILIAS/DataCollection/classes/class.ilDataCollectionMailNotification.php index b9ba28e10d20..512f10ee8476 100644 --- a/components/ILIAS/DataCollection/classes/class.ilDataCollectionMailNotification.php +++ b/components/ILIAS/DataCollection/classes/class.ilDataCollectionMailNotification.php @@ -83,6 +83,7 @@ public function send(): void if ($field->isStandardField()) { $value = $this->record->getStandardFieldPlainText($field->getId()); } elseif ($record_field = $this->record->getRecordField((int) $field->getId())) { + $record_field->setUser(new ilObjUser($user_id)); $value = $record_field->getPlainText(); } $message .= $field->getTitle() . ': ' . $value . "\n"; diff --git a/components/ILIAS/DataCollection/classes/class.ilObjDataCollection.php b/components/ILIAS/DataCollection/classes/class.ilObjDataCollection.php index fcaab51f78d1..44992399d302 100755 --- a/components/ILIAS/DataCollection/classes/class.ilObjDataCollection.php +++ b/components/ILIAS/DataCollection/classes/class.ilObjDataCollection.php @@ -56,7 +56,7 @@ protected function doCreate(bool $clone_mode = false): void if (!$clone_mode) { $main_table = ilDclCache::getTableCache(); $main_table->setObjId($this->getId()); - $main_table->setTitle($this->getTitle()); + $main_table->setTitle($this->lng->txt('dcl_title_standard')); $main_table->setAddPerm(true); $main_table->setEditPerm(true); $main_table->setDeletePerm(false); @@ -150,8 +150,8 @@ protected function doCloneObject(ilObject2 $new_obj, int $a_target_id, ?int $a_c $new_obj->setNotification($this->getNotification()); if (!(ilCopyWizardOptions::_getInstance($a_copy_id))->isRootNode($this->getRefId())) { $new_obj->setOnline($this->getOnline()); - $new_obj->update(); } + $new_obj->update(); $new_obj->cloneStructure($this->getRefId()); $this->cloneMetaData($new_obj); } diff --git a/components/ILIAS/DataCollection/classes/class.ilObjDataCollectionAccess.php b/components/ILIAS/DataCollection/classes/class.ilObjDataCollectionAccess.php index 34e13f7d02b8..07bde3a5e9fa 100755 --- a/components/ILIAS/DataCollection/classes/class.ilObjDataCollectionAccess.php +++ b/components/ILIAS/DataCollection/classes/class.ilObjDataCollectionAccess.php @@ -50,7 +50,7 @@ public static function _checkGoto(string $target): bool $ilAccess = $DIC['ilAccess']; $t_arr = explode("_", $target); - $ref_id = (int) $t_arr[1]; + $ref_id = (int) ($t_arr[1] ?? 0); if ($t_arr[0] != "dcl" || $ref_id <= 0) { return false; @@ -205,16 +205,10 @@ public static function hasWriteAccess(int $ref, ?int $user_id = 0): bool return $ilAccess->checkAccess("write", "", $ref); } - public static function hasEditAccess(int $ref, ?int $user_id = 0): bool + public static function hasEditAccess(int $ref, ?int $user_id = null): bool { global $DIC; - $ilAccess = $DIC['ilAccess']; - - if ($user_id) { - return $ilAccess->checkAccessOfUser($user_id, "write", "", $ref); - } - - return $ilAccess->checkAccess("edit_content", "", $ref); + return $DIC->access()->checkAccessOfUser($user_id ?? $DIC->user()->getId(), "edit_content", "", $ref); } /** diff --git a/components/ILIAS/DataCollection/classes/class.ilObjDataCollectionGUI.php b/components/ILIAS/DataCollection/classes/class.ilObjDataCollectionGUI.php index 5387a919921b..7eccf23d6671 100755 --- a/components/ILIAS/DataCollection/classes/class.ilObjDataCollectionGUI.php +++ b/components/ILIAS/DataCollection/classes/class.ilObjDataCollectionGUI.php @@ -55,6 +55,7 @@ class ilObjDataCollectionGUI extends ilObject2GUI protected ilLanguage $lng; protected ilTabsGUI $tabs; protected int $table_id; + protected int $tableview_id; private ilDclNotification $notification_settings; public function __construct(int $a_id = 0, int $a_id_type = self::REPOSITORY_NODE_ID, int $a_parent_node_id = 0) @@ -71,7 +72,7 @@ public function __construct(int $a_id = 0, int $a_id_type = self::REPOSITORY_NOD $this->lng->loadLanguageModule('obj'); $this->lng->loadLanguageModule('cntr'); - $this->setTableId($this->getRefId()); + $this->setTableData(); if (!$this->ctrl->isAsynch()) { $this->addJavaScript(); @@ -80,18 +81,56 @@ public function __construct(int $a_id = 0, int $a_id_type = self::REPOSITORY_NOD $this->ctrl->saveParameter($this, 'table_id'); } - private function setTableId(int $objectOrRefId = 0): void + private function setTableData(): void { - if ($this->http->wrapper()->query()->has('table_id')) { - $this->table_id = $this->http->wrapper()->query()->retrieve('table_id', $this->refinery->kindlyTo()->int()); - } elseif ($this->http->wrapper()->query()->has('tableview_id')) { - $this->table_id = ilDclTableView::find( - $this->http->wrapper()->query()->retrieve('tableview_id', $this->refinery->kindlyTo()->int()) - )->getTableId(); - } elseif ($objectOrRefId > 0) { - $tables = ilObjDataCollectionAccess::hasWriteAccess($this->ref_id) ? $this->object->getTables() : $this->object->getVisibleTables(); - if ($tables !== []) { - $this->table_id = array_shift($tables)->getId(); + if ($this->ref_id > 0) { + if ($this->http->wrapper()->post()->has('table_id')) { + $this->table_id = $this->http->wrapper()->post()->retrieve( + 'table_id', + $this->refinery->kindlyTo()->int() + ); + } elseif ($this->http->wrapper()->query()->has('table_id')) { + $this->table_id = $this->http->wrapper()->query()->retrieve( + 'table_id', + $this->refinery->kindlyTo()->int() + ); + } + + if (!isset($this->table_id) || !in_array($this->table_id, array_keys($this->object->getTables()))) { + if (isset($this->table_id)) { + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_FAILURE, $this->lng->txt('table_not_found'), true); + unset($this->table_id); + } + $tables = ilObjDataCollectionAccess::hasWriteAccess($this->ref_id) ? $this->object->getTables() : $this->object->getVisibleTables(); + if ($tables !== []) { + $this->table_id = array_shift($tables)->getId(); + $tableview = (ilDclCache::getTableCache($this->table_id))->getFirstTableViewId(); + if ($tableview !== null) { + $this->tableview_id = $tableview; + } + } + } else { + if ($this->http->wrapper()->post()->has('tableview_id')) { + $this->tableview_id = $this->http->wrapper()->post()->retrieve( + 'tableview_id', + $this->refinery->kindlyTo()->int() + ); + } elseif ($this->http->wrapper()->query()->has('tableview_id')) { + $this->tableview_id = $this->http->wrapper()->query()->retrieve( + 'tableview_id', + $this->refinery->kindlyTo()->int() + ); + } + + if (!isset($this->tableview_id) || !in_array($this->tableview_id, array_keys($this->object->getTableById($this->table_id)->getTableViews()))) { + if (isset($this->tableview_id)) { + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_FAILURE, $this->lng->txt('tableview_not_found'), true); + } + $tableview = (ilDclCache::getTableCache($this->table_id))->getFirstTableViewId(); + if ($tableview !== null) { + $this->tableview_id = $tableview; + } + } } } } @@ -171,18 +210,26 @@ public function executeCommand(): void $this->addHeaderAction(); $this->prepareOutput(); $this->tabs->activateTab(self::TAB_CONTENT); - try { - $recordlist_gui = new ilDclRecordListGUI($this, $this->table_id, $this->getTableViewId()); - $this->ctrl->forwardCommand($recordlist_gui); - } catch (ilDclNoTableviewException $e) { + if (!isset($this->table_id)) { + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_INFO, $this->lng->txt('dcl_no_table_found')); + } elseif (!isset($this->tableview_id)) { $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_INFO, $this->lng->txt('dcl_no_tableview_found')); + } else { + $recordlist_gui = new ilDclRecordListGUI($this, $this->table_id, $this->tableview_id); + $this->ctrl->forwardCommand($recordlist_gui); } break; case strtolower(ilDclRecordEditGUI::class): $this->prepareOutput(); $this->tabs->activateTab(self::TAB_CONTENT); - $recordedit_gui = new ilDclRecordEditGUI($this, $this->table_id, $this->getTableViewId()); - $this->ctrl->forwardCommand($recordedit_gui); + if (!isset($this->table_id)) { + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_INFO, $this->lng->txt('dcl_no_table_found')); + } elseif (!isset($this->tableview_id)) { + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_INFO, $this->lng->txt('dcl_no_tableview_found')); + } else { + $recordedit_gui = new ilDclRecordEditGUI($this, $this->table_id, $this->tableview_id); + $this->ctrl->forwardCommand($recordedit_gui); + } break; case strtolower(ilObjFileGUI::class): $this->prepareOutput(); @@ -218,33 +265,47 @@ public function executeCommand(): void break; case strtolower(ilDclDetailedViewGUI::class): $this->prepareOutput(); - $recordview_gui = new ilDclDetailedViewGUI($this, $this->getTableViewId()); - $this->ctrl->forwardCommand($recordview_gui); - $this->tabs->setBackTarget( - $this->lng->txt('back'), - $this->ctrl->getLinkTargetByClass( - ilDclRecordListGUI::class, - ilDclRecordListGUI::CMD_LIST_RECORDS - ) - ); + if (!isset($this->tableview_id)) { + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_INFO, $this->lng->txt('dcl_no_tableview_found')); + } else { + $recordview_gui = new ilDclDetailedViewGUI($this, $this->tableview_id); + $this->ctrl->forwardCommand($recordview_gui); + $this->tabs->setBackTarget( + $this->lng->txt('back'), + $this->ctrl->getLinkTargetByClass( + ilDclRecordListGUI::class, + ilDclRecordListGUI::CMD_LIST_RECORDS + ) + ); + } break; case strtolower(ilNoteGUI::class): $this->prepareOutput(); - $recordviewGui = new ilDclDetailedViewGUI($this, $this->getTableViewId()); - $this->ctrl->forwardCommand($recordviewGui); - $this->tabs->clearTargets(); - $this->tabs->setBackTarget($this->lng->txt('back'), $this->ctrl->getLinkTarget($this, '')); + if (!isset($this->tableview_id)) { + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_INFO, $this->lng->txt('dcl_no_tableview_found')); + } else { + $recordviewGui = new ilDclDetailedViewGUI($this, $this->tableview_id); + $this->ctrl->forwardCommand($recordviewGui); + $this->tabs->clearTargets(); + $this->tabs->setBackTarget($this->lng->txt('back'), $this->ctrl->getLinkTarget($this, '')); + } break; case strtolower(ilExportGUI::class): $this->prepareOutput(); $this->handleExport(); break; case strtolower(ilDclPropertyFormGUI::class): - $recordedit_gui = new ilDclRecordEditGUI($this, $this->table_id, $this->getTableViewId()); - $recordedit_gui->getRecord(); - $recordedit_gui->initForm(); - $form = $recordedit_gui->getForm(); - $this->ctrl->forwardCommand($form); + if (!isset($this->table_id)) { + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_INFO, $this->lng->txt('dcl_no_table_found')); + } elseif (!isset($this->tableview_id)) { + $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_INFO, $this->lng->txt('dcl_no_tableview_found')); + } else { + $recordedit_gui = new ilDclRecordEditGUI($this, $this->table_id, $this->tableview_id); + $recordedit_gui->getRecord(); + $recordedit_gui->initForm(); + $form = $recordedit_gui->getForm(); + $this->ctrl->forwardCommand($form); + } break; case strtolower(ilObjectMetaDataGUI::class): $this->checkPermission('write'); @@ -287,31 +348,6 @@ protected function handleExportAsync(): void $this->ctrl->redirect($exp_gui); } - protected function getTableViewId(): int - { - $tableview_id = null; - if ($this->http->wrapper()->query()->has('tableview_id')) { - $tableview_id = $this->http->wrapper()->query()->retrieve( - 'tableview_id', - $this->refinery->kindlyTo()->int() - ); - } - if ($this->http->wrapper()->post()->has('tableview_id')) { - $tableview_id = $this->http->wrapper()->post()->retrieve( - 'tableview_id', - $this->refinery->kindlyTo()->int() - ); - } - if (!$tableview_id) { - $table_obj = ilDclCache::getTableCache($this->table_id); - $tableview_id = $table_obj->getFirstTableViewId(); - } - if ($tableview_id === null) { - throw new ilDclNoTableviewException('No visible tableview configured!'); - } - return $tableview_id; - } - public function infoScreen(): void { $this->ctrl->redirectByClass(ilInfoScreenGUI::class, 'showSummary'); @@ -351,46 +387,28 @@ protected function addLocatorItems(): void public static function _goto(string $a_target): void { global $DIC; - $lng = $DIC->language(); - - $ctrl = $DIC->ctrl(); - $access = $DIC->access(); - $tpl = $DIC->ui()->mainTemplate(); $values = [self::GET_REF_ID, self::GET_TABLE_ID, self::GET_VIEW_ID, self::GET_RECORD_ID]; $values = array_combine($values, array_pad(explode('_', $a_target), count($values), 0)); $ref_id = (int) $values[self::GET_REF_ID]; - - if ($access->checkAccess('read', '', $ref_id)) { - $ctrl->setParameterByClass(ilRepositoryGUI::class, self::GET_REF_ID, $ref_id); - $object = new ilObjDataCollection($ref_id); + if ($ref_id !== 0) { + $DIC->ctrl()->setParameterByClass(ilRepositoryGUI::class, self::GET_REF_ID, $ref_id); $table_id = (int) $values[self::GET_TABLE_ID]; - if ($table_id !== 0 && isset($object->getVisibleTables()[$table_id])) { - $ctrl->setParameterByClass(ilObjDataCollectionGUI::class, self::GET_TABLE_ID, $table_id); - $table = $object->getVisibleTables()[$table_id]; + if ($table_id !== 0) { + $DIC->ctrl()->setParameterByClass(ilObjDataCollectionGUI::class, self::GET_TABLE_ID, $table_id); $view_id = (int) $values[self::GET_VIEW_ID]; - if ($view_id !== 0 && isset($table->getTableViews()[$view_id])) { - $ctrl->setParameterByClass(ilObjDataCollectionGUI::class, self::GET_VIEW_ID, $view_id); + if ($view_id !== 0) { + $DIC->ctrl()->setParameterByClass(ilObjDataCollectionGUI::class, self::GET_VIEW_ID, $view_id); } $record_id = (int) $values[self::GET_RECORD_ID]; - if ($record_id !== 0 && isset($table->getRecords()[$record_id])) { - $ctrl->setParameterByClass(ilDclDetailedViewGUI::class, self::GET_RECORD_ID, $record_id); - $ctrl->redirectByClass([ilRepositoryGUI::class, self::class, ilDclDetailedViewGUI::class], 'renderRecord'); + if ($record_id !== 0) { + $DIC->ctrl()->setParameterByClass(ilDclDetailedViewGUI::class, self::GET_RECORD_ID, $record_id); + $DIC->ctrl()->redirectByClass([ilRepositoryGUI::class, self::class, ilDclDetailedViewGUI::class], 'renderRecord'); } } - $ctrl->redirectByClass([ilRepositoryGUI::class, self::class, ilDclRecordListGUI::class], 'listRecords'); - } elseif ($access->checkAccess('visbile', '', $ref_id)) { - ilObjectGUI::_gotoRepositoryNode((int) $a_target, 'infoScreen'); - } else { - $message = sprintf( - $lng->txt('msg_no_perm_read_item'), - ilObject::_lookupTitle(ilObject::_lookupObjId((int) $a_target)) - ); - $tpl->setOnScreenMessage('failure', $message, true); - - ilObjectGUI::_gotoRepositoryRoot(); } + $DIC->ctrl()->redirectByClass([ilRepositoryGUI::class, self::class, ilDclRecordListGUI::class], 'listRecords'); } protected function afterSave(ilObject $new_object): void @@ -502,7 +520,7 @@ public function update(): void $this->tpl->setOnScreenMessage('success', $this->lng->txt('msg_obj_modified'), true); } - $this->tpl->setContent($this->ui_renderer->render($form)); + $this->ctrl->redirect($this, 'edit'); } protected function setEditTabs(): void diff --git a/components/ILIAS/DataCollection/exceptions/ilDclInputException.php b/components/ILIAS/DataCollection/exceptions/ilDclInputException.php index 0d9d0a814f38..fcd778517e01 100644 --- a/components/ILIAS/DataCollection/exceptions/ilDclInputException.php +++ b/components/ILIAS/DataCollection/exceptions/ilDclInputException.php @@ -25,70 +25,36 @@ class ilDclInputException extends ilException public const REGEX_EXCEPTION = 2; public const UNIQUE_EXCEPTION = 3; public const NOT_URL = 4; - public const NOT_IMAGE = 5; - public const WRONG_FILE_TYPE = 6; - public const CUSTOM_MESSAGE = 7; public const REGEX_CONFIG_EXCEPTION = 8; protected ilLanguage $lng; - protected int $exception_type; - protected string $additional_text; - /** - * @param string $exception_type - */ - public function __construct(int $exception_type, $additional_text = "") + public function __construct(int $exception_type) { global $DIC; $this->lng = $DIC->language(); $this->exception_type = $exception_type; - $this->additional_text = $additional_text; parent::__construct($this->__toString(), $exception_type); } - public function getExceptionType(): int - { - return $this->exception_type; - } - public function __toString(): string { switch ($this->exception_type) { case self::TYPE_EXCEPTION: - $message = $this->lng->txt('dcl_wrong_input_type'); - break; + return $this->lng->txt('dcl_wrong_input_type'); case self::LENGTH_EXCEPTION: - $message = $this->lng->txt('dcl_wrong_length'); - break; + return $this->lng->txt('dcl_wrong_length'); case self::REGEX_EXCEPTION: - $message = $this->lng->txt('dcl_wrong_regex'); - break; + return $this->lng->txt('dcl_wrong_regex'); case self::REGEX_CONFIG_EXCEPTION: - $message = $this->lng->txt('dcl_invalid_regex_config'); - break; + return $this->lng->txt('dcl_invalid_regex_config'); case self::UNIQUE_EXCEPTION: - $message = $this->lng->txt('dcl_unique_exception'); - break; + return $this->lng->txt('dcl_unique_exception'); case self::NOT_URL: - $message = $this->lng->txt('dcl_noturl_exception'); - break; - case self::NOT_IMAGE: - $message = $this->lng->txt('dcl_notimage_exception'); - break; - case self::WRONG_FILE_TYPE: - $message = $this->lng->txt('dcl_not_supported_file_type'); - break; - case self::CUSTOM_MESSAGE: - return $this->additional_text; + return $this->lng->txt('dcl_noturl_exception'); default: - $message = $this->lng->txt('dcl_unknown_exception'); + return $this->lng->txt('dcl_unknown_exception'); } - - if (strlen($this->additional_text) > 0) { - $message .= " " . $this->additional_text; - } - - return $message; } } diff --git a/components/ILIAS/DataProtection/classes/Consumer.php b/components/ILIAS/DataProtection/classes/Consumer.php index a11dcc15ccb2..1033c44cbdb3 100755 --- a/components/ILIAS/DataProtection/classes/Consumer.php +++ b/components/ILIAS/DataProtection/classes/Consumer.php @@ -22,7 +22,6 @@ use ilLink; use ILIAS\Data\URI; -use ILIAS\LegalDocuments\ConsumerToolbox\UI; use ILIAS\LegalDocuments\ConsumerToolbox\User; use ilDBConstants; use ilDBInterface; @@ -71,7 +70,8 @@ public function uses(UseSlot $slot, LazyProvide $provide): UseSlot ->hasPublicApi($public_api); if (!$is_active) { - return $slot->hasPublicPage($blocks->notAvailable(...), self::GOTO_NAME); + return $slot->hasPublicPage($blocks->notAvailable(...), self::GOTO_NAME) + ->showInFooter($blocks->slot()->dummyFooter(...)); } $user = $build_user($this->container->user()); @@ -82,7 +82,7 @@ public function uses(UseSlot $slot, LazyProvide $provide): UseSlot $constraint = $this->container->refinery()->custom()->constraint(...); if ($global_settings->noAcceptance()->value()) { - $slot = $slot->showInFooter($this->showMatchingDocument($user, $blocks->ui(), $provide)) + $slot = $slot->showInFooter($this->showMatchingDocument($user, $blocks, $provide)) ->hasPublicPage($agreement->showAgreement(...), self::GOTO_NAME); } else { $slot = $slot->canWithdraw($blocks->slot()->withdrawProcess($user, $global_settings, $this->userHasWithdrawn(...))) @@ -98,18 +98,18 @@ public function uses(UseSlot $slot, LazyProvide $provide): UseSlot return $slot; } - private function showMatchingDocument(User $user, UI $ui, Provide $legal_documents): Closure + private function showMatchingDocument(User $user, Blocks $blocks, Provide $legal_documents): Closure { - return function (Closure $footer) use ($user, $ui, $legal_documents) { - $in_footer = fn($v) => $footer('usr_agreement', $ui->txt('usr_agreement'), $v); + return function (Closure $footer) use ($user, $blocks, $legal_documents) { + $in_footer = fn($v) => $footer($this->id(), $blocks->ui()->txt('usr_agreement'), $v); if (!$user->isLoggedIn()) { return $in_footer(new URI(ilLink::_getLink(null, 'usr', [], self::GOTO_NAME))); } if ($user->cannotAgree()) { - return $footer; + return $blocks->slot()->dummyFooter($footer); } - $render = fn(Document $document): Closure => $in_footer($ui->create()->modal()->roundtrip( + $render = fn(Document $document): Closure => $in_footer($blocks->ui()->create()->modal()->roundtrip( $document->content()->title(), [$legal_documents->document()->contentAsComponent($document->content())] )); diff --git a/components/ILIAS/DataProtection/tests/ConsumerTest.php b/components/ILIAS/DataProtection/tests/ConsumerTest.php index 9d4aaf18287f..f988bc0a3bf4 100755 --- a/components/ILIAS/DataProtection/tests/ConsumerTest.php +++ b/components/ILIAS/DataProtection/tests/ConsumerTest.php @@ -63,6 +63,7 @@ public function testDisabledUses(): void $slot->expects(self::once())->method('hasHistory')->willReturn($slot); $slot->expects(self::once())->method('hasPublicApi')->willReturn($slot); $slot->expects(self::once())->method('hasPublicPage')->willReturn($slot); + $slot->expects(self::once())->method('showInFooter')->willReturn($slot); $instance = new Consumer($container); diff --git a/components/ILIAS/Database/classes/Setup/class.ilDatabaseSetupAgent.php b/components/ILIAS/Database/classes/Setup/class.ilDatabaseSetupAgent.php index c5eaea1db5e5..224931937d77 100755 --- a/components/ILIAS/Database/classes/Setup/class.ilDatabaseSetupAgent.php +++ b/components/ILIAS/Database/classes/Setup/class.ilDatabaseSetupAgent.php @@ -29,6 +29,7 @@ use ILIAS\Setup\ObjectiveConstructor; use ILIAS\Refinery\Factory as Refinery; use ILIAS\Refinery\Transformation; +use ILIAS\Setup\Objective\CalledFromRootObjective; class ilDatabaseSetupAgent implements Agent { @@ -80,6 +81,7 @@ public function getInstallObjective(?Config $config = null): Objective return new ObjectiveCollection( "Complete objectives from Services\Database", false, + new CalledFromRootObjective(), new ilDatabaseConfigStoredObjective($config), new ilDatabaseEnvironmentValidObjective(), new \ilDatabaseUpdatedObjective() @@ -92,6 +94,7 @@ public function getInstallObjective(?Config $config = null): Objective public function getUpdateObjective(?Config $config = null): Objective { $p = []; + $p[] = new CalledFromRootObjective(); $p[] = new \ilDatabaseUpdatedObjective(); $p[] = new ilDatabaseEnvironmentValidObjective(); return new ObjectiveCollection( diff --git a/components/ILIAS/DidacticTemplate/classes/Multilingualism/class.ilMultilingualismGUI.php b/components/ILIAS/DidacticTemplate/classes/Multilingualism/class.ilMultilingualismGUI.php index 536d4cdfce32..42585f5a16f2 100755 --- a/components/ILIAS/DidacticTemplate/classes/Multilingualism/class.ilMultilingualismGUI.php +++ b/components/ILIAS/DidacticTemplate/classes/Multilingualism/class.ilMultilingualismGUI.php @@ -52,7 +52,7 @@ public function __construct( $this->lom_services = $DIC->learningObjectMetadata(); $this->obj_trans = ilMultilingualism::getInstance($a_obj_id, $a_type); - $this->request = new \ILIAS\Multilingualism\StandardGUIRequest( + $this->request = new \ILIAS\DidacticTemplate\Multilingualism\StandardGUIRequest( $DIC->http(), $DIC->refinery() ); diff --git a/components/ILIAS/DidacticTemplate/classes/Setting/class.ilDidacticTemplateSettingsGUI.php b/components/ILIAS/DidacticTemplate/classes/Setting/class.ilDidacticTemplateSettingsGUI.php index c02dc74d5109..b3eee10d3251 100755 --- a/components/ILIAS/DidacticTemplate/classes/Setting/class.ilDidacticTemplateSettingsGUI.php +++ b/components/ILIAS/DidacticTemplate/classes/Setting/class.ilDidacticTemplateSettingsGUI.php @@ -792,9 +792,9 @@ public function editImportForm(): ilPropertyFormGUI public function editImport(ilDidacticTemplateSetting $a_settings): void { - ilDidacticTemplateObjSettings::transferAutoGenerateStatus($a_settings->getId(), $a_settings->getId()); - $assignments = ilDidacticTemplateObjSettings::getAssignmentsByTemplateID($a_settings->getId()); - $a_settings->delete(); + ilDidacticTemplateObjSettings::transferAutoGenerateStatus($this->setting->getId(), $a_settings->getId()); + $assignments = ilDidacticTemplateObjSettings::getAssignmentsByTemplateID($this->setting->getId()); + $this->setting->delete(); foreach ($assignments as $obj) { ilDidacticTemplateObjSettings::assignTemplate($obj["ref_id"], $obj["obj_id"], $a_settings->getId()); } diff --git a/components/ILIAS/DidacticTemplate/classes/Setting/class.ilDidacticTemplateSettingsTableDataRetrieval.php b/components/ILIAS/DidacticTemplate/classes/Setting/class.ilDidacticTemplateSettingsTableDataRetrieval.php index 4d8055fe8bcb..0fe63f943b97 100755 --- a/components/ILIAS/DidacticTemplate/classes/Setting/class.ilDidacticTemplateSettingsTableDataRetrieval.php +++ b/components/ILIAS/DidacticTemplate/classes/Setting/class.ilDidacticTemplateSettingsTableDataRetrieval.php @@ -129,12 +129,11 @@ protected function getRecords(Order $order, Range $range): array foreach ($tpl->getAssignments() as $obj_type) { $icon_label = $this->lng->txt('objs_' . $obj_type); } - if ($icon_path) { - $icon = $this->ui_factory->symbol()->icon()->custom( - $icon_path, - $icon_label - ); - } + + $icon = ($icon_path !== "") ? $this->ui_factory->symbol()->icon()->custom( + $icon_path, + $icon_label + ) : null; $icon_active = $this->ui_factory->symbol()->icon()->custom( $tpl->isEnabled() ? diff --git a/components/ILIAS/DidacticTemplate/classes/Setup/class.ilDidacticTemplateSetupAgent.php b/components/ILIAS/DidacticTemplate/classes/Setup/class.ilDidacticTemplateSetupAgent.php index 97493343f0c1..e4ded796791f 100755 --- a/components/ILIAS/DidacticTemplate/classes/Setup/class.ilDidacticTemplateSetupAgent.php +++ b/components/ILIAS/DidacticTemplate/classes/Setup/class.ilDidacticTemplateSetupAgent.php @@ -32,7 +32,7 @@ public function getUpdateObjective(?Config $config = null): Objective public function getStatusObjective(Metrics\Storage $storage): Objective { - return new \ilDatabaseUpdateStepsMetricsCollectedObjectiv( + return new \ilDatabaseUpdateStepsMetricsCollectedObjective( $storage, new ilDidacticTemplate11DBUpdateSteps() ); diff --git a/components/ILIAS/EmployeeTalk/README.md b/components/ILIAS/EmployeeTalk/README.md index 8d6f8b5e46e1..d990eca1dd32 100755 --- a/components/ILIAS/EmployeeTalk/README.md +++ b/components/ILIAS/EmployeeTalk/README.md @@ -152,7 +152,7 @@ over which they have authority. These permission are overwritten in some cases: users always have **Read** access to _Talks_ in which they are **Superior** or **Employee**, and can always edit _Talks_ in which they are **Superior**, but they can never edit _Talks_ -in which they are **Employee**. A _Talk_ can only be deleted by the -**Superior**, or an _Administrator_.
+in which they are **Employee**. A _Talk_ can only be deleted by an _Administrator_, +or the **Superior** if they have **Read** access to the _Talk Template_ administration.
To have access to **Organisation** and **Organisation** > **Talks**, a user -needs to have at least one of the three permissions above. \ No newline at end of file +needs to have at least one of the three permissions above. diff --git a/components/ILIAS/EmployeeTalk/classes/Notification/Calendar/VEvent.php b/components/ILIAS/EmployeeTalk/classes/Notification/Calendar/VEvent.php index f9ce6f941645..66109d8bb31e 100755 --- a/components/ILIAS/EmployeeTalk/classes/Notification/Calendar/VEvent.php +++ b/components/ILIAS/EmployeeTalk/classes/Notification/Calendar/VEvent.php @@ -78,8 +78,9 @@ protected function renderStartAndEndDates(): string $end = $end->setTimezone(new \DateTimeZone('Europe/Paris')); if ($this->all_day) { + // end date is exclusive, so has to be one day later! return 'DTSTART;TZID=Europe/Paris;VALUE=DATE:' . $start->format('Ymd') . "\r\n" . - 'DTEND;TZID=Europe/Paris;VALUE=DATE:' . $end->format('Ymd') . "\r\n" . + 'DTEND;TZID=Europe/Paris;VALUE=DATE:' . $end->add(new \DateInterval('P1D'))->format('Ymd') . "\r\n" . "X-MICROSOFT-CDO-ALLDAYEVENT: TRUE\r\n"; } else { return 'DTSTART;TZID=Europe/Paris:' . $start->format('Ymd\THis') . "\r\n" . diff --git a/components/ILIAS/EmployeeTalk/classes/Talk/class.ilObjEmployeeTalk.php b/components/ILIAS/EmployeeTalk/classes/Talk/class.ilObjEmployeeTalk.php index faaa12c6ee58..9d5db9f75556 100755 --- a/components/ILIAS/EmployeeTalk/classes/Talk/class.ilObjEmployeeTalk.php +++ b/components/ILIAS/EmployeeTalk/classes/Talk/class.ilObjEmployeeTalk.php @@ -26,24 +26,11 @@ final class ilObjEmployeeTalk extends ilObject { public const string TYPE = 'etal'; - /** - * @var int - */ private static int $root_ref_id = -1; - /** - * @var int - */ private static int $root_id = -1; - /** - * @var EmployeeTalkRepository $repository - */ - private $repository; - - /** - * @var EmployeeTalk $data - */ - private $data; + private EmployeeTalkRepository $repository; + private EmployeeTalk $data; /** * @param int $a_id @@ -119,6 +106,15 @@ public function update(): bool parent::update(); $this->repository->update($this->data); + if (!$this->getRefId()) { + /* + * During cloning, update is sometimes called before + * the newly created object has any references. In these + * cases we skip the updating the calendar. + */ + return true; + } + $app = new ilCalendarAppointmentTemplate($this->getParent()->getId()); $app->setTitle($this->getTitle()); $app->setSubtitle($this->getParent()->getTitle()); diff --git a/components/ILIAS/EmployeeTalk/classes/Talk/class.ilObjEmployeeTalkAccess.php b/components/ILIAS/EmployeeTalk/classes/Talk/class.ilObjEmployeeTalkAccess.php index 661c202e6f46..dfcc188faaae 100755 --- a/components/ILIAS/EmployeeTalk/classes/Talk/class.ilObjEmployeeTalkAccess.php +++ b/components/ILIAS/EmployeeTalk/classes/Talk/class.ilObjEmployeeTalkAccess.php @@ -201,7 +201,10 @@ public function canDelete(int $refId): bool { $talk = new ilObjEmployeeTalk($refId); $user = $this->getCurrentUsersId(); - if ($user === $talk->getOwner()) { + if ( + $user === $talk->getOwner() && + $this->container->access()->checkAccess('read', '', ilObjTalkTemplateAdministration::getRootRefId()) + ) { return true; } // global admins can delete diff --git a/components/ILIAS/EmployeeTalk/classes/Talk/class.ilObjEmployeeTalkGUI.php b/components/ILIAS/EmployeeTalk/classes/Talk/class.ilObjEmployeeTalkGUI.php index 2b51096bece2..96d014ec8df9 100755 --- a/components/ILIAS/EmployeeTalk/classes/Talk/class.ilObjEmployeeTalkGUI.php +++ b/components/ILIAS/EmployeeTalk/classes/Talk/class.ilObjEmployeeTalkGUI.php @@ -60,7 +60,7 @@ public function __construct() global $DIC; $this->refinery = $DIC->refinery(); - $refId = $this->http->wrapper()->query()->retrieve( + $refId = $DIC->http()->wrapper()->query()->retrieve( "ref_id", $this->refinery->kindlyTo()->int() ); diff --git a/components/ILIAS/Environment/phpunit.xml b/components/ILIAS/Environment/phpunit.xml index dd3871d35d69..c4683eec1534 100755 --- a/components/ILIAS/Environment/phpunit.xml +++ b/components/ILIAS/Environment/phpunit.xml @@ -10,6 +10,7 @@ displayDetailsOnTestsThatTriggerDeprecations="true" displayDetailsOnTestsThatTriggerNotices="true" displayDetailsOnSkippedTests="true" + displayDetailsOnPhpunitDeprecations="true" backupGlobals="false" bootstrap="./tests/bootstrap.php" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"> diff --git a/components/ILIAS/Excel/classes/class.ilExcel.php b/components/ILIAS/Excel/classes/class.ilExcel.php index c8528e7d223a..8d8e666d1fc6 100755 --- a/components/ILIAS/Excel/classes/class.ilExcel.php +++ b/components/ILIAS/Excel/classes/class.ilExcel.php @@ -226,15 +226,12 @@ protected function prepareBooleanValue(bool $a_value): string protected function prepareString( string $value, - bool $disable_strip_tags = false ): string { if (!mb_check_encoding($value, 'UTF-8')) { throw new InvalidArgumentException('Invalid UTF-8 passed.'); } - return $this->cleanupNonCharachters( - $disable_strip_tags ? $value : strip_tags($value) - ); // #14542 + return $this->cleanupNonCharachters(strip_tags($value)); } /** @@ -292,15 +289,14 @@ public function setCell( int $a_row, int $col, $value, - ?string $datatype = null, - bool $disable_strip_tags_for_strings = false + ?string $datatype = null ): void { $coordinate = $this->getCoordByColumnAndRow($col, $a_row); if ($datatype === DataType::TYPE_STRING) { $this->workbook->getActiveSheet()->setCellValueExplicit( $coordinate, - $this->prepareString($value, $disable_strip_tags_for_strings), + $this->prepareString($value), $datatype ); } elseif ($datatype !== null) { diff --git a/components/ILIAS/Exercise/Assignment/Mandatory/class.RandomAssignmentsDBRepository.php b/components/ILIAS/Exercise/Assignment/Mandatory/class.RandomAssignmentsDBRepository.php index e48511bc58f9..ae2c3e9c7052 100755 --- a/components/ILIAS/Exercise/Assignment/Mandatory/class.RandomAssignmentsDBRepository.php +++ b/components/ILIAS/Exercise/Assignment/Mandatory/class.RandomAssignmentsDBRepository.php @@ -98,4 +98,20 @@ public function saveAssignmentsOfUser( } } } + + public function deleteAssignmentsOfUser( + int $user_id, + int $exc_id + ): void { + $db = $this->db; + + $db->manipulateF( + "DELETE FROM exc_mandatory_random WHERE " . + " exc_id = %s" . + " AND usr_id = %s", + array("integer", "integer"), + array($exc_id, $user_id) + ); + } + } diff --git a/components/ILIAS/Exercise/Assignment/Mandatory/class.RandomAssignmentsManager.php b/components/ILIAS/Exercise/Assignment/Mandatory/class.RandomAssignmentsManager.php index 388633f0561f..a137785eea54 100755 --- a/components/ILIAS/Exercise/Assignment/Mandatory/class.RandomAssignmentsManager.php +++ b/components/ILIAS/Exercise/Assignment/Mandatory/class.RandomAssignmentsManager.php @@ -228,4 +228,10 @@ public function isAssignmentVisible( } return true; } + + public function deleteAssignmentsOfUser( + int $user_id + ): void { + $this->rand_ass_repo->deleteAssignmentsOfUser($user_id, $this->exc_id); + } } diff --git a/components/ILIAS/Exercise/Assignment/class.ilExAssignment.php b/components/ILIAS/Exercise/Assignment/class.ilExAssignment.php index e5d6bf62a9d5..45d6eb0be093 100755 --- a/components/ILIAS/Exercise/Assignment/class.ilExAssignment.php +++ b/components/ILIAS/Exercise/Assignment/class.ilExAssignment.php @@ -760,7 +760,8 @@ public function save(): void "max_char_limit" => array("integer", $this->getMaxCharLimit()), "relative_deadline" => array("integer", $this->getRelativeDeadline()), "rel_deadline_last_subm" => array("integer", $this->getRelDeadlineLastSubmission()), - "deadline_mode" => array("integer", $this->getDeadlineMode()) + "deadline_mode" => array("integer", $this->getDeadlineMode()), + "solution_rid" => array("text", ''), )); $this->setId($next_id); $exc = new ilObjExercise($this->getExerciseId(), false); @@ -1310,7 +1311,6 @@ public function getExerciseMemberAssignmentData( $data["mark"] = $rec["mark"]; $data["comment"] = $rec["u_comment"]; } - return $data; } @@ -1451,7 +1451,7 @@ public static function getPendingFeedbackNotifications(): array $log->debug("check assignment " . $row['id'] . ", fb_file " . $row["fb_file"]); if ($row['fb_date'] == self::FEEDBACK_DATE_DEADLINE) { $max = max($row['time_stamp'], $row['deadline2']); - if (trim($row["fb_file"]) && $max <= time()) { + if (trim((string) $row["fb_file"]) && $max <= time()) { $log->debug("...adding(1)"); $res[] = $row["id"]; } diff --git a/components/ILIAS/Exercise/Assignment/templates/default/tpl.panel_content.html b/components/ILIAS/Exercise/Assignment/templates/default/tpl.panel_content.html index 60c2bf9d06cf..862f46b08435 100755 --- a/components/ILIAS/Exercise/Assignment/templates/default/tpl.panel_content.html +++ b/components/ILIAS/Exercise/Assignment/templates/default/tpl.panel_content.html @@ -16,11 +16,11 @@
-

+

{BUTTON} -

+
diff --git a/components/ILIAS/Exercise/Certificate/ExercisePlaceholderDescription.php b/components/ILIAS/Exercise/Certificate/ExercisePlaceholderDescription.php index cf12757a789d..fab8b0510f82 100644 --- a/components/ILIAS/Exercise/Certificate/ExercisePlaceholderDescription.php +++ b/components/ILIAS/Exercise/Certificate/ExercisePlaceholderDescription.php @@ -43,6 +43,7 @@ public function __construct( ?ilUserDefinedFieldsPlaceholderDescription $userDefinedFieldPlaceHolderDescriptionObject = null, ?Profile $profile = null ) { + global $DIC; if (null === $language) { $language = $DIC->language(); $language->loadLanguageModule('certificate'); diff --git a/components/ILIAS/Exercise/Exercise.php b/components/ILIAS/Exercise/Exercise.php index e6dc61d77cd9..1328bafa06e7 100644 --- a/components/ILIAS/Exercise/Exercise.php +++ b/components/ILIAS/Exercise/Exercise.php @@ -42,5 +42,7 @@ public function init( new Component\Resource\ComponentJS($this, "ilExcPresentation.js"); $contribute[Component\Resource\PublicAsset::class] = fn() => new Component\Resource\ComponentJS($this, "ilExcPeerReview.js"); + $contribute[Component\Resource\PublicAsset::class] = fn() => + new Component\Resource\ComponentJS($this, "exc-text-more.js"); } } diff --git a/components/ILIAS/Exercise/Members/classes/class.ilExerciseMembers.php b/components/ILIAS/Exercise/Members/classes/class.ilExerciseMembers.php index 62cf81b11030..e2e013a2a558 100755 --- a/components/ILIAS/Exercise/Members/classes/class.ilExerciseMembers.php +++ b/components/ILIAS/Exercise/Members/classes/class.ilExerciseMembers.php @@ -25,6 +25,7 @@ */ class ilExerciseMembers { + protected \ILIAS\Exercise\InternalDomainService $domain; protected IndividualDeadlineManager $individual_deadlines; protected ilDBInterface $db; public int $ref_id; @@ -45,6 +46,7 @@ public function __construct(ilObjExercise $a_exc) $this->read(); $this->recommended_content_manager = new ilRecommendedContentManager(); $this->individual_deadlines = $DIC->exercise()->internal()->domain()->individualDeadline(); + $this->domain = $DIC->exercise()->internal()->domain(); } // Get exercise ref id @@ -160,6 +162,10 @@ public function deassignMember(int $a_usr_id): void $idl->delete(); } + // delete random assignments + $random = $this->domain->assignment()->randomAssignments($this->exc); + $random->deleteAssignmentsOfUser($a_usr_id); + // @todo: delete all assignment associations (and their files) } diff --git a/components/ILIAS/Exercise/Notification/class.ilExerciseMailNotification.php b/components/ILIAS/Exercise/Notification/class.ilExerciseMailNotification.php index ad823165cd0c..3d4eaf9d5783 100755 --- a/components/ILIAS/Exercise/Notification/class.ilExerciseMailNotification.php +++ b/components/ILIAS/Exercise/Notification/class.ilExerciseMailNotification.php @@ -24,7 +24,7 @@ class ilExerciseMailNotification extends ilMailNotification public const TYPE_FEEDBACK_FILE_ADDED = 20; public const TYPE_SUBMISSION_UPLOAD = 30; public const TYPE_FEEDBACK_TEXT_ADDED = 40; - public const TYPE_GRADING_DONE = 70; + public const TYPE_GRADING_DONE = 45; protected \ILIAS\Exercise\InternalDomainService $domain; public const TYPE_MESSAGE_FROM_PF_GIVER = 50; public const TYPE_MESSAGE_FROM_PF_RECIPIENT = 60; diff --git a/components/ILIAS/Exercise/PeerReview/class.ilExPeerReview.php b/components/ILIAS/Exercise/PeerReview/class.ilExPeerReview.php index a45b7d22b538..f40da7891dff 100755 --- a/components/ILIAS/Exercise/PeerReview/class.ilExPeerReview.php +++ b/components/ILIAS/Exercise/PeerReview/class.ilExPeerReview.php @@ -96,11 +96,12 @@ public function initPeerReviews(): bool foreach ($distribution->getPeersOfRater($rater_id) as $peer_id) { $next_id = $ilDB->nextId("exc_assignment_peer"); $ilDB->manipulate("INSERT INTO exc_assignment_peer" . - " (id, ass_id, giver_id, peer_id)" . + " (id, ass_id, giver_id, peer_id, migrated)" . " VALUES (" . $ilDB->quote($next_id, "integer") . ", " . $ilDB->quote($this->assignment_id, "integer") . ", " . $ilDB->quote($rater_id, "integer") . - ", " . $ilDB->quote($peer_id, "integer") . ")"); + ", " . $ilDB->quote($peer_id, "integer") . + ", " . $ilDB->quote(1, "integer") . ")"); } } } diff --git a/components/ILIAS/Exercise/PeerReview/class.ilExPeerReviewGUI.php b/components/ILIAS/Exercise/PeerReview/class.ilExPeerReviewGUI.php index bc902b78aba9..5bd5d2eaef2b 100755 --- a/components/ILIAS/Exercise/PeerReview/class.ilExPeerReviewGUI.php +++ b/components/ILIAS/Exercise/PeerReview/class.ilExPeerReviewGUI.php @@ -378,7 +378,7 @@ public function buildSubmissionPropertiesAndActions(\ILIAS\Exercise\Assignment\P else { $builder->addProperty( $builder::SEC_PEER_FEEDBACK, - $lng->txt("exc_received_peer_feedback"), + $lng->txt("exc_received_feedback"), $lng->txt("exc_peer_review_show_received_none") ); } diff --git a/components/ILIAS/Exercise/Service/classes/UIUtil.php b/components/ILIAS/Exercise/Service/classes/UIUtil.php new file mode 100644 index 000000000000..4d05f385b865 --- /dev/null +++ b/components/ILIAS/Exercise/Service/classes/UIUtil.php @@ -0,0 +1,44 @@ +")) { + $text = nl2br($text); + } + return $text; + } +} diff --git a/components/ILIAS/Exercise/Service/classes/class.InternalGUIService.php b/components/ILIAS/Exercise/Service/classes/class.InternalGUIService.php index fbcefdb631e5..e97831280667 100755 --- a/components/ILIAS/Exercise/Service/classes/class.InternalGUIService.php +++ b/components/ILIAS/Exercise/Service/classes/class.InternalGUIService.php @@ -183,4 +183,8 @@ public function settings( ); } + public function getUIUtil(): UIUtil + { + return new UIUtil(); + } } diff --git a/components/ILIAS/Exercise/Settings/SettingsDBRepository.php b/components/ILIAS/Exercise/Settings/SettingsDBRepository.php index 7f5b0eab843c..3ea68cd05397 100644 --- a/components/ILIAS/Exercise/Settings/SettingsDBRepository.php +++ b/components/ILIAS/Exercise/Settings/SettingsDBRepository.php @@ -93,9 +93,9 @@ protected function getSettingsFromRecord(array $rec): Settings { return $this->data->settings( (int) $rec['obj_id'], - $rec['instruction'], + (string) $rec['instruction'], (int) $rec['time_stamp'], - $rec['pass_mode'], + (string) $rec['pass_mode'], (int) $rec['nr_mandatory_random'], (int) $rec['pass_nr'], (bool) $rec['show_submissions'], diff --git a/components/ILIAS/Exercise/Submission/SubmissionManager.php b/components/ILIAS/Exercise/Submission/SubmissionManager.php index 1dcbaab4c6e1..d17a454deb79 100644 --- a/components/ILIAS/Exercise/Submission/SubmissionManager.php +++ b/components/ILIAS/Exercise/Submission/SubmissionManager.php @@ -434,6 +434,9 @@ public function deleteSubmissions(int $user_id, array $ids): void continue; } $s = $this->repo->getById($id); + if (is_null($s)) { // #45974 + continue; + } $this->repo->delete( $id, $this->stakeholder @@ -617,10 +620,12 @@ protected function copySubmissionFilesToDir( $dir = $to_path . DIRECTORY_SEPARATOR . $targetdir; \ilFileUtils::makeDirParents($dir); $file = $dir . DIRECTORY_SEPARATOR . $targetfile; - file_put_contents( - $file, - $stream->getContents() - ); + if (!is_null($stream)) { + file_put_contents( + $file, + $stream->getContents() + ); + } // unzip blog/portfolio diff --git a/components/ILIAS/Exercise/Submission/class.ilExSubmission.php b/components/ILIAS/Exercise/Submission/class.ilExSubmission.php index af3982376574..82329a2826a5 100755 --- a/components/ILIAS/Exercise/Submission/class.ilExSubmission.php +++ b/components/ILIAS/Exercise/Submission/class.ilExSubmission.php @@ -719,8 +719,8 @@ public function addResourceObject( $next_id = $ilDB->nextId("exc_returned"); $query = sprintf( "INSERT INTO exc_returned " . - "(returned_id, obj_id, user_id, filetitle, ass_id, ts, atext, late, team_id) " . - "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)", + "(returned_id, obj_id, user_id, filetitle, ass_id, ts, atext, late, team_id, rid) " . + "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", $ilDB->quote($next_id, "integer"), $ilDB->quote($this->assignment->getExerciseId(), "integer"), $ilDB->quote($user_id, "integer"), @@ -729,7 +729,8 @@ public function addResourceObject( $ilDB->quote(ilUtil::now(), "timestamp"), $ilDB->quote($a_text, "text"), $ilDB->quote($this->isLate(), "integer"), - $ilDB->quote($team_id, "integer") + $ilDB->quote($team_id, "integer"), + $ilDB->quote('', "text") ); $ilDB->manipulate($query); diff --git a/components/ILIAS/Exercise/Submission/class.ilExSubmissionTextGUI.php b/components/ILIAS/Exercise/Submission/class.ilExSubmissionTextGUI.php index 0244ddcfe396..3981d2545176 100755 --- a/components/ILIAS/Exercise/Submission/class.ilExSubmissionTextGUI.php +++ b/components/ILIAS/Exercise/Submission/class.ilExSubmissionTextGUI.php @@ -259,7 +259,7 @@ public function showAssignmentTextObject(): void $text = $a_form->getItemByPostVar("atxt"); // mob id to mob src - $val = nl2br(ilRTE::_replaceMediaObjectImageSrc($sub->getText(), 1)); + $val = $this->gui->getUIUtil()->formatTextInput($sub->getText()); $val = $this->gui->html()->escapeCurly($val); $text->setValue($val); } diff --git a/components/ILIAS/Exercise/Team/class.ilExAssignmentTeam.php b/components/ILIAS/Exercise/Team/class.ilExAssignmentTeam.php index 73fb9b6be9fb..79b319eb8a4d 100755 --- a/components/ILIAS/Exercise/Team/class.ilExAssignmentTeam.php +++ b/components/ILIAS/Exercise/Team/class.ilExAssignmentTeam.php @@ -276,7 +276,9 @@ public function writeLog( int $a_action, ?string $a_details = null ): void { - self::writeTeamLog($this->id, $a_action, $a_details); + if ($this->id) { + self::writeTeamLog($this->id, $a_action, $a_details); + } } /** diff --git a/components/ILIAS/Exercise/TutorFeedbackFile/TutorFeedbackFileRepository.php b/components/ILIAS/Exercise/TutorFeedbackFile/TutorFeedbackFileRepository.php index b294d1e4a60b..53db9beb92bc 100755 --- a/components/ILIAS/Exercise/TutorFeedbackFile/TutorFeedbackFileRepository.php +++ b/components/ILIAS/Exercise/TutorFeedbackFile/TutorFeedbackFileRepository.php @@ -59,6 +59,13 @@ public function createCollection(int $ass_id, int $user_id): void ); } + public function createCollectionIfMissing(int $ass_id, int $user_id): void + { + if (!$this->hasCollection($ass_id, $user_id)) { + $this->createCollection($ass_id, $user_id); + } + } + public function getIdStringForAssIdAndUserId(int $ass_id, int $user_id): string { $set = $this->db->queryF( diff --git a/components/ILIAS/Exercise/TutorFeedbackFile/class.ilExcTutorFeedbackFileStakeholder.php b/components/ILIAS/Exercise/TutorFeedbackFile/class.ilExcTutorFeedbackFileStakeholder.php index 6989c05bbb44..5fa12530b066 100755 --- a/components/ILIAS/Exercise/TutorFeedbackFile/class.ilExcTutorFeedbackFileStakeholder.php +++ b/components/ILIAS/Exercise/TutorFeedbackFile/class.ilExcTutorFeedbackFileStakeholder.php @@ -114,4 +114,10 @@ private function initDB(): void $this->database = $DIC->database(); } } + + public function getConsumerNameForPresentation(): string + { + return "ILIAS/Exercise/TutorFeedbackFile"; + } + } diff --git a/components/ILIAS/Exercise/TutorFeedbackFile/class.ilExcTutorFeedbackZipStakeholder.php b/components/ILIAS/Exercise/TutorFeedbackFile/class.ilExcTutorFeedbackZipStakeholder.php index 7ec35c633672..c22163667cb6 100755 --- a/components/ILIAS/Exercise/TutorFeedbackFile/class.ilExcTutorFeedbackZipStakeholder.php +++ b/components/ILIAS/Exercise/TutorFeedbackFile/class.ilExcTutorFeedbackZipStakeholder.php @@ -95,4 +95,10 @@ private function initDB(): void $this->database = $DIC->database(); } } + + public function getConsumerNameForPresentation(): string + { + return "ILIAS/Exercise/TutorFeedbackZip"; + } + } diff --git a/components/ILIAS/Exercise/classes/class.ilExerciseHandlerGUI.php b/components/ILIAS/Exercise/classes/class.ilExerciseHandlerGUI.php index 9c546f96a35e..41368471eff1 100755 --- a/components/ILIAS/Exercise/classes/class.ilExerciseHandlerGUI.php +++ b/components/ILIAS/Exercise/classes/class.ilExerciseHandlerGUI.php @@ -23,6 +23,7 @@ */ class ilExerciseHandlerGUI implements ilCtrlBaseClassInterface { + protected \ILIAS\GlobalScreen\Services $gs; protected ilCtrl $ctrl; protected ilLanguage $lng; protected ilAccessHandler $access; @@ -37,6 +38,7 @@ public function __construct() $request = $DIC->exercise()->internal()->gui()->request(); $this->requested_ref_id = $request->getRefId(); + $this->gs = $DIC->globalScreen(); $this->lng = $DIC->language(); $this->access = $DIC->access(); @@ -72,6 +74,7 @@ public function executeCommand(): void switch ($next_class) { case 'ilobjexercisegui': + $this->gs->tool()->context()->claim()->repository(); $ex_gui = new ilObjExerciseGUI("", $this->requested_ref_id, true); $this->ctrl->forwardCommand($ex_gui); break; diff --git a/components/ILIAS/Exercise/classes/class.ilExerciseManagementGUI.php b/components/ILIAS/Exercise/classes/class.ilExerciseManagementGUI.php index b7aeb8730ca7..6efee370e777 100755 --- a/components/ILIAS/Exercise/classes/class.ilExerciseManagementGUI.php +++ b/components/ILIAS/Exercise/classes/class.ilExerciseManagementGUI.php @@ -446,13 +446,17 @@ public function membersObject(): void } } elseif ($this->exercise->hasTutorFeedbackFile()) { if (!$this->assignment->getAssignmentType()->usesTeams()) { - // multi-feedback - $ilToolbar->addButton( - $this->lng->txt("exc_multi_feedback"), - $this->ctrl->getLinkTarget($this, "showMultiFeedback") - ); - $ilToolbar->addSeparator(); + $mem_data = $this->assignment->getMemberListData(); + if (count($mem_data) > 0) { + // multi-feedback + $ilToolbar->addButton( + $this->lng->txt("exc_multi_feedback"), + $this->ctrl->getLinkTarget($this, "showMultiFeedback") + ); + + $ilToolbar->addSeparator(); + } } } @@ -802,6 +806,8 @@ public function getReportPanel(array $a_data): string public function getEvaluationModal( array $a_data ): RoundTrip { + $more_id = $a_data['uid']; + $this->tpl->addJavaScript("assets/js/exc-text-more.js"); $modal_tpl = new ilTemplate("tpl.exc_report_evaluation_modal.html", true, true, "components/ILIAS/Exercise"); $modal_tpl->setVariable("USER_NAME", $a_data['uname']); @@ -809,19 +815,12 @@ public function getEvaluationModal( //TODO: CHECK ilias string utils. ilUtil shortenText with net blank. if ($this->exercise->hasTutorFeedbackText()) { $max_chars = 500; - - $u_text = strip_tags($a_data["utext"]); //otherwise will get open P - $text = $u_text; - //show more - if (strlen($u_text) > $max_chars) { - $text = ""; - $text .= "
"; - $text .= mb_substr($u_text, 0, $max_chars); - $text .= ""; - $text .= mb_substr($u_text, $max_chars); - $text .= "
"; - $text .= ""; - } + $more_button = $this->gui->ui()->factory()->button()->standard($this->lng->txt("exc_show_more"), "#"); + $text = "
"; + $text .= $a_data["utext"]; + $text .= "
"; + $text .= $this->gui->ui()->renderer()->render($more_button); + $text .= "
"; $modal_tpl->setVariable("USER_TEXT", $text); } @@ -840,6 +839,11 @@ public function getEvaluationModalForm( array $a_data ): ilPropertyFormGUI { $form = new ilPropertyFormGUI(); + $this->ctrl->setParameterByClass( + self::class, + "ass_id", + $this->assignment->getId() + ); $form->setFormAction($this->ctrl->getFormAction($this, "saveEvaluationFromModal")); $form->setId(uniqid('form')); @@ -894,7 +898,6 @@ public function saveEvaluationFromModalObject(): void $grade = trim($form->getInput('grade')); $mark = trim($form->getInput('mark')); } - if ($this->assignment->getId() && $user_id > 0) { $member_status = $this->assignment->getMemberStatus($user_id); $member_status->setComment(ilUtil::stripSlashes($comment)); @@ -1037,9 +1040,13 @@ public function showParticipantObject(): void $this->ctrl->setParameter($this, "vw", self::VIEW_PARTICIPANT); $this->ctrl->setParameter($this, "part_id", $current_participant); - $ilToolbar->addSeparator(); - $ilToolbar->setFormAction($ilCtrl->getFormAction($this)); - $ilToolbar->addFormButton($lng->txt("download_all_returned_files"), "downloadSubmissions"); + $ass = ilExAssignment::getInstancesByExercise($this->exercise->getId()); + + if (count($ass) > 0) { + $ilToolbar->addSeparator(); + $ilToolbar->setFormAction($ilCtrl->getFormAction($this)); + $ilToolbar->addFormButton($lng->txt("download_all_returned_files"), "downloadSubmissions"); + } $part_tab = new ilAssignmentsPerParticipantTableGUI( $this, @@ -2232,7 +2239,7 @@ public function collectFeedbackDataFromPeer( "uid" => $user_id, "uname" => $uname, "udate" => $ts, - "utext" => ilRTE::_replaceMediaObjectImageSrc($text, 1) // mob id to mob src + "utext" => $this->gui->getUIUtil()->formatTextInput($text) // mob id to mob src ); //get data peer and assign it diff --git a/components/ILIAS/Exercise/resources/exc-text-more.js b/components/ILIAS/Exercise/resources/exc-text-more.js new file mode 100644 index 000000000000..c1572dfae83d --- /dev/null +++ b/components/ILIAS/Exercise/resources/exc-text-more.js @@ -0,0 +1,55 @@ +(() => { + const MAX_HEIGHT = 100; + + function isClipped(el) { + // needs overflow hidden/auto/scroll to actually clip + // eslint-disable-next-line no-undef + const style = getComputedStyle(el); + const clips = (style.overflowY !== 'visible' || style.overflowX !== 'visible'); + if (!clips) return false; + // If content is bigger than the visible box, it's clipped + return el.scrollHeight > el.clientHeight + 1; // +1 to avoid rounding issues + } + + function checkInitialDisplay(button) { + const contentDiv = button.closest('[data-exc-show-more]').querySelector('div:first-child'); + if (!isClipped(contentDiv)) { + contentDiv.style.maxHeight = null; + button.style.display = 'none'; + } + } + + // eslint-disable-next-line no-undef + const io = new IntersectionObserver((entries) => { + // eslint-disable-next-line no-restricted-syntax + for (const e of entries) { + if (e.isIntersecting) { + // safe to measure heights, apply truncation, etc. + checkInitialDisplay(e.target); + } + } + }); + + function initContainer(container) { + const firstDiv = container.querySelector('div:first-child'); + firstDiv.style.maxHeight = `${MAX_HEIGHT}px`; + firstDiv.style.marginBottom = '10px'; + firstDiv.style.overflow = 'hidden'; + const firstButton = container.querySelector('button'); + firstButton.addEventListener('click', () => { + firstDiv.style.maxHeight = null; + firstButton.style.display = 'none'; + }); + io.observe(firstButton); + } + + function initAll() { + document.querySelectorAll('[data-exc-show-more]').forEach(initContainer); + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initAll); + } else { + initAll(); + } +})(); diff --git a/components/ILIAS/Export/xml/SchemaValidation/ilias_lso_9_0.xsd b/components/ILIAS/Export/xml/SchemaValidation/ilias_lso_9_0.xsd index 2016831b780b..b56a197e941a 100644 --- a/components/ILIAS/Export/xml/SchemaValidation/ilias_lso_9_0.xsd +++ b/components/ILIAS/Export/xml/SchemaValidation/ilias_lso_9_0.xsd @@ -39,6 +39,7 @@ + diff --git a/components/ILIAS/Export/xml/ilias_user_11.dtd b/components/ILIAS/Export/xml/ilias_user_11.dtd index 5f7fe5f4e245..14610759731c 100755 --- a/components/ILIAS/Export/xml/ilias_user_11.dtd +++ b/components/ILIAS/Export/xml/ilias_user_11.dtd @@ -144,7 +144,7 @@ public_phone_office: y,n public_profile: y,n public_street: y,n - public_upload: y,n + public_avatar: y,n public_zip: y,n send_info_mails: y,n show_users_online: y,n, associated diff --git a/components/ILIAS/Feeds/classes/class.ilUserFeedWriter.php b/components/ILIAS/Feeds/classes/class.ilUserFeedWriter.php index cba638cf5660..9feddb38efa4 100755 --- a/components/ILIAS/Feeds/classes/class.ilUserFeedWriter.php +++ b/components/ILIAS/Feeds/classes/class.ilUserFeedWriter.php @@ -16,6 +16,9 @@ * *********************************************************************/ +use ILIAS\News\Data\NewsCriteria; +use ILIAS\News\Data\NewsItem; + /** * Feed writer for personal user feeds. * @author Alexander Killing @@ -49,15 +52,13 @@ public function __construct( $hash = ilObjUser::_lookupFeedHash($a_user_id); - $rss_period = ilNewsItem::_lookupRSSPeriod(); - if ($a_hash == $hash) { - if ($privFeed) { - //ilNewsItem::setPrivateFeedId($a_user_id); - $items = ilNewsItem::_getNewsItemsOfUser($a_user_id, false, true, $rss_period); - } else { - $items = ilNewsItem::_getNewsItemsOfUser($a_user_id, true, true, $rss_period); - } + $rss_period = ilNewsItem::_lookupRSSPeriod(); + $items = $DIC->news()->internal()->domain()->collection()->getNewsForUser( + new ilObjUser($a_user_id), + new NewsCriteria(period: $rss_period, only_public: !$privFeed), + false + ); if ($ilSetting->get('short_inst_name') != "") { $this->setChannelTitle($ilSetting->get('short_inst_name')); @@ -68,29 +69,29 @@ public function __construct( $this->setChannelAbout(ILIAS_HTTP_PATH); $this->setChannelLink(ILIAS_HTTP_PATH); //$this->setChannelDescription("ILIAS Channel Description"); + + /** @var NewsItem $item */ foreach ($items as $item) { - $obj_id = ilObject::_lookupObjId($item["ref_id"]); - $obj_type = ilObject::_lookupType($obj_id); - $obj_title = ilObject::_lookupTitle($obj_id); + $obj_title = ilObject::_lookupTitle($item->getContextObjId()); // not nice, to do: general solution - if ($obj_type == "mcst") { - if (!ilObjMediaCastAccess::_lookupOnline($obj_id)) { + if ($item->getContextObjType() === 'mcst') { + if (!ilObjMediaCastAccess::_lookupOnline($item->getContextObjId())) { continue; } } $feed_item = new ilFeedItem(); $title = ilNewsItem::determineNewsTitle( - $item["context_obj_type"], - $item["title"], - (bool) $item["content_is_lang_var"], - (int) ($item["agg_ref_id"] ?? 0), - $item["aggregation"] ?? [] + $item->getContextObjType(), + $item->getTitle(), + $item->isContentIsLangVar(), + 0, + [] ); // path - $loc = $this->getContextPath($item["ref_id"]); + $loc = $this->getContextPath($item->getContextRefId()); // title if ($news_set->get("rss_title_format") == "news_obj") { @@ -105,40 +106,40 @@ public function __construct( // description $content = $this->prepareStr(nl2br( ilNewsItem::determineNewsContent( - $item["context_obj_type"], - $item["content"], - $item["content_text_is_lang_var"] + $item->getContextObjType(), + $item->getContent(), + $item->isContentTextIsLangVar(), ) )); $feed_item->setDescription($content); // lm page hack, not nice - if ($item["context_obj_type"] == "lm" && $item["context_sub_obj_type"] == "pg" - && $item["context_sub_obj_id"] > 0) { + if ($item->getContextObjType() == "lm" && $item->getContextSubObjType() == "pg" + && $item->getContextObjId() > 0) { $feed_item->setLink(ILIAS_HTTP_PATH . "/goto.php?client_id=" . CLIENT_ID . - "&target=pg_" . $item["context_sub_obj_id"] . "_" . $item["ref_id"]); - } elseif ($item["context_obj_type"] == "wiki" && $item["context_sub_obj_type"] == "wpg" - && $item["context_sub_obj_id"] > 0) { - $wptitle = ilWikiPage::lookupTitle($item["context_sub_obj_id"]); + "&target=pg_" . $item->getContextSubObjId() . "_" . $item->getContextRefId()); + } elseif ($item->getContextObjType() == "wiki" && $item->getContextSubObjType() == "wpg" + && $item->getContextSubObjId() > 0) { + $wptitle = ilWikiPage::lookupTitle($item->getContextSubObjId()); $feed_item->setLink(ILIAS_HTTP_PATH . "/goto.php?client_id=" . CLIENT_ID . - "&target=" . $item["context_obj_type"] . "_" . $item["ref_id"] . "_" . urlencode($wptitle)); // #14629 - } elseif ($item["context_obj_type"] == "frm" && $item["context_sub_obj_type"] == "pos" - && $item["context_sub_obj_id"] > 0) { + "&target=" . $item->getContextObjType() . "_" . $item->getContextRefId() . "_" . urlencode($wptitle)); // #14629 + } elseif ($item->getContextObjType() == "frm" && $item->getContextSubObjType() == "pos" + && $item->getContextSubObjId() > 0) { // frm hack, not nice - $thread_id = ilObjForumAccess::_getThreadForPosting($item["context_sub_obj_id"]); + $thread_id = ilObjForumAccess::_getThreadForPosting($item->getContextSubObjId()); if ($thread_id > 0) { $feed_item->setLink(ILIAS_HTTP_PATH . "/goto.php?client_id=" . CLIENT_ID . - "&target=" . $item["context_obj_type"] . "_" . $item["ref_id"] . "_" . $thread_id . "_" . $item["context_sub_obj_id"]); + "&target=" . $item->getContextObjType() . "_" . $item->getContextRefId() . "_" . $thread_id . "_" . $item->getContextSubObjId()); } else { $feed_item->setLink(ILIAS_HTTP_PATH . "/goto.php?client_id=" . CLIENT_ID . - "&target=" . $item["context_obj_type"] . "_" . $item["ref_id"]); + "&target=" . $item->getContextObjType() . "_" . $item->getContextRefId()); } } else { $feed_item->setLink(ILIAS_HTTP_PATH . "/goto.php?client_id=" . CLIENT_ID . - "&target=" . $item["context_obj_type"] . "_" . $item["ref_id"]); + "&target=" . $item->getContextObjType() . "_" . $item->getContextRefId()); } - $feed_item->setAbout($feed_item->getLink() . "&il_about_feed=" . $item["id"]); - $feed_item->setDate($item["creation_date"]); + $feed_item->setAbout($feed_item->getLink() . "&il_about_feed=" . $item->getId()); + $feed_item->setDate($item->getCreationDate()->format("yyyy-mm-dd hh:mm:ss")); $this->addItem($feed_item); } } diff --git a/components/ILIAS/File/classes/Capabilities/Permissions.php b/components/ILIAS/File/classes/Capabilities/Permissions.php index e5f3f6147fbf..b4b76d39f550 100644 --- a/components/ILIAS/File/classes/Capabilities/Permissions.php +++ b/components/ILIAS/File/classes/Capabilities/Permissions.php @@ -27,7 +27,7 @@ enum Permissions: string case NONE = 'none'; case VISIBLE = 'visible'; case READ = 'read'; - case VIEW_CONTENT = 'view_content'; + case VIEW_CONTENT = 'file_view_content'; case READ_LP = 'read_learning_progress'; case EDIT_LP = 'edit_learning_progress'; case EDIT_PERMISSIONS = 'edit_permission'; diff --git a/components/ILIAS/File/classes/Settings/Form.php b/components/ILIAS/File/classes/Settings/Form.php index 596be63b313e..a531c0bc703e 100755 --- a/components/ILIAS/File/classes/Settings/Form.php +++ b/components/ILIAS/File/classes/Settings/Form.php @@ -58,8 +58,9 @@ public function asFormGroup(): Group ->withValue($this->settings->getDownloadLimitinMB()) ->withRequired(true) ->withAdditionalTransformation( - $this->refinery->custom()->transformation(function ($value): void { + $this->refinery->custom()->transformation(function ($value) { $this->settings->setDownloadLimitInMB($value); + return $value; }) ); @@ -71,8 +72,9 @@ public function asFormGroup(): Group ) ->withValue($this->settings->getInlineFileExtensions()) ->withAdditionalTransformation( - $this->refinery->custom()->transformation(function ($value): void { + $this->refinery->custom()->transformation(function ($value) { $this->settings->setInlineFileExtensions($value); + return $value; }) ); @@ -84,8 +86,9 @@ public function asFormGroup(): Group ->withValue($this->settings->isShowAmountOfDownloads()) ->withAdditionalTransformation( $this->refinery->custom()->transformation( - function ($value): void { + function ($value) { $this->settings->setShowAmountOfDownloads($value); + return $value; } ) ); @@ -97,8 +100,9 @@ function ($value): void { ) ->withValue($this->settings->isDownloadWithAsciiFileName()) ->withAdditionalTransformation( - $this->refinery->custom()->transformation(function ($value): void { + $this->refinery->custom()->transformation(function ($value) { $this->settings->setDownloadWithAsciiFileName($value); + return $value; }) ); diff --git a/components/ILIAS/File/classes/Setup/Database/class.ilFileObjectRBACDatabase.php b/components/ILIAS/File/classes/Setup/Database/class.ilFileObjectRBACDatabase.php index 8322abf31f91..ed5ea80ca82a 100755 --- a/components/ILIAS/File/classes/Setup/Database/class.ilFileObjectRBACDatabase.php +++ b/components/ILIAS/File/classes/Setup/Database/class.ilFileObjectRBACDatabase.php @@ -45,13 +45,7 @@ public function getPreconditions(Environment $environment): array "object", 2001, ["file"] - ), - new AccessRBACOperationClonedObjective( - "file", - Permissions::READ->value, - Permissions::VIEW_CONTENT->value - ), - + ) ] ); } diff --git a/components/ILIAS/File/classes/Setup/Database/class.ilFileObjectRBACDatabaseSteps.php b/components/ILIAS/File/classes/Setup/Database/class.ilFileObjectRBACDatabaseSteps.php index 6e24cbda965c..714682e9bd07 100755 --- a/components/ILIAS/File/classes/Setup/Database/class.ilFileObjectRBACDatabaseSteps.php +++ b/components/ILIAS/File/classes/Setup/Database/class.ilFileObjectRBACDatabaseSteps.php @@ -132,4 +132,37 @@ public function step_3(): void ] ); } + + public function step_4(): void + { + // remove superfluous view_content operation + $view_content_operation = 'view_content'; + $ops_id = $this->database->queryF( + "SELECT ops_id FROM rbac_operations WHERE operation = %s", + ['text'], + [$view_content_operation] + )->fetchAssoc()['ops_id'] ?? null; + + if ($ops_id === null) { + return; + } + + $this->database->manipulateF( + 'DELETE FROM rbac_ta WHERE ops_id = %s', + ['integer'], + [$ops_id] + ); + + $this->database->manipulateF( + 'DELETE FROM rbac_templates WHERE ops_id = %s', + ['integer'], + [$ops_id] + ); + + $this->database->manipulateF( + 'DELETE FROM rbac_operations WHERE operation = %s', + ['text'], + [$view_content_operation] + ); + } } diff --git a/components/ILIAS/File/classes/class.ilFileXMLParser.php b/components/ILIAS/File/classes/class.ilFileXMLParser.php index aa9ace9ed082..44f6f10df3ad 100755 --- a/components/ILIAS/File/classes/class.ilFileXMLParser.php +++ b/components/ILIAS/File/classes/class.ilFileXMLParser.php @@ -225,6 +225,12 @@ public function handlerEndTag($a_xml_parser, string $a_name): void case 'Rating': $this->file->setRating((bool) $this->cdata); break; + case 'ImportantInformation': + $this->file->setImportantInfo((string) $this->cdata); + break; + case 'OnClickMode': + $this->file->setOnclickMode((int) $this->cdata); + break; case 'Content': // Old import files case 'Version': if ($a_name === "Version" && $this->version === null) { diff --git a/components/ILIAS/File/classes/class.ilFileXMLWriter.php b/components/ILIAS/File/classes/class.ilFileXMLWriter.php index 9e1623e77e43..17f4412091b6 100755 --- a/components/ILIAS/File/classes/class.ilFileXMLWriter.php +++ b/components/ILIAS/File/classes/class.ilFileXMLWriter.php @@ -147,6 +147,8 @@ public function start(): bool $this->xmlElement("Title", null, $this->file->getTitle()); $this->xmlElement("Description", null, $this->file->getDescription()); $this->xmlElement("Rating", null, (int) $this->file->hasRating()); + $this->xmlElement("ImportantInformation", null, (string) $this->file->getImportantInfo()); + $this->xmlElement("OnClickMode", null, (int) $this->file->getOnClickMode()); $versions = $this->file->getVersions(); diff --git a/components/ILIAS/File/classes/class.ilObjFileGUI.php b/components/ILIAS/File/classes/class.ilObjFileGUI.php index b0cc132697ed..de125b50a649 100755 --- a/components/ILIAS/File/classes/class.ilObjFileGUI.php +++ b/components/ILIAS/File/classes/class.ilObjFileGUI.php @@ -18,7 +18,6 @@ use ILIAS\UI\Component\Input\Container\Form\FormInput; use ILIAS\UI\Component\Input\Field\Section; -use ILIAS\HTTP\Wrapper\WrapperFactory; use ILIAS\UI\Renderer; use Psr\Http\Message\ServerRequestInterface; use ILIAS\Filesystem\Exception\FileNotFoundException; @@ -141,6 +140,18 @@ public function __construct(int $a_id = 0, int $a_id_type = self::REPOSITORY_NOD $this->capabilities = $capability_builder->get($capability_context); } + protected function recordReadEvent(): void + { + // Record read event and catchup with write events + ilChangeEvent::_recordReadEvent( + $this->object->getType(), + $this->object->getRefId(), + $this->object->getId(), + $this->user->getId() + ); + $this->updateLearningProgress(); + } + protected function updateLearningProgress(): void { if ($this->object->getLPMode() === ilLPObjSettings::LP_MODE_CONTENT_VISITED) { @@ -295,7 +306,7 @@ public function executeCommand(): void }; $this->tabs_gui->activateTab('content'); - $this->updateLearningProgress(); + $this->recordReadEvent(); if ($this->id_type === Context::CONTEXT_WORKSPACE) { $goto_link = ilWorkspaceAccessHandler::getGotoLink( @@ -735,13 +746,7 @@ public function sendFile(): bool if ($this->capabilities->get(Capabilities::DOWNLOAD)->isUnlocked()) { // Record read event and catchup with write events - ilChangeEvent::_recordReadEvent( - $this->object->getType(), - $this->object->getRefId(), - $this->object->getId(), - $this->user->getId() - ); - $this->updateLearningProgress(); + $this->recordReadEvent(); $this->object->sendFile($hist_entry_id); } else { diff --git a/components/ILIAS/File/classes/trait.ilObjFileInfoProvider.php b/components/ILIAS/File/classes/trait.ilObjFileInfoProvider.php index b6d92c289a9e..c059eb57f2c4 100755 --- a/components/ILIAS/File/classes/trait.ilObjFileInfoProvider.php +++ b/components/ILIAS/File/classes/trait.ilObjFileInfoProvider.php @@ -103,10 +103,18 @@ public function getFileInfoForAuthorsAndAdmins(): array $amount_of_downloads = null; if ($this->getGeneralSettings()->isShowAmountOfDownloads()) { - $amount_of_downloads = sprintf( + $create_date = ilDatePresentation::formatDate( + new ilDateTime( + $this->getFileObj()->getCreateDate(), + IL_CAL_DATETIME, + 'utc' // most likely the server timezone + ) + ); + + $amount_of_downloads = $this->safeSprintf( $this->getLanguage()->txt("amount_of_downloads_since"), $this->getFileObj()->getAmountOfDownloads(), - $this->getFileObj()->getCreateDate(), + $create_date, ); } @@ -169,4 +177,22 @@ abstract protected function getLanguage(): ilLanguage; abstract protected function getNodeID(): int; abstract protected function getUser(): ilObjUser; + + /** + * Robust sprintf: tolerates broken translation placeholders. + */ + private function safeSprintf(string $format, mixed ...$args): string + { + try { + return sprintf($format, ...$args); + } catch (\ValueError $e) { + $fixed = preg_replace('/%(?!([0-9]+\$)?[bcdeEfFgGosuxX%])/', '%%', $format); + try { + return sprintf($fixed, ...$args); + } catch (\ValueError $e2) { + return $format; + } + } + } + } diff --git a/components/ILIAS/FileDelivery/src/Setup/BuildStaticConfigStoredObjective.php b/components/ILIAS/FileDelivery/src/Setup/BuildStaticConfigStoredObjective.php index 52aea8d2c0de..5c343250eb35 100644 --- a/components/ILIAS/FileDelivery/src/Setup/BuildStaticConfigStoredObjective.php +++ b/components/ILIAS/FileDelivery/src/Setup/BuildStaticConfigStoredObjective.php @@ -61,7 +61,7 @@ public function getHash(): string public function getLabel(): string { - return 'Build ' . $this->getArtifactName() . ' Ststic Config'; + return 'Build ' . $this->getArtifactName() . ' Static Config'; } public function isNotable(): bool diff --git a/components/ILIAS/FileDelivery/src/Setup/KeyRotationObjective.php b/components/ILIAS/FileDelivery/src/Setup/KeyRotationObjective.php index ef92adb66864..e597f8755c38 100755 --- a/components/ILIAS/FileDelivery/src/Setup/KeyRotationObjective.php +++ b/components/ILIAS/FileDelivery/src/Setup/KeyRotationObjective.php @@ -28,7 +28,7 @@ */ class KeyRotationObjective extends BuildStaticConfigStoredObjective { - public const KEY_LENGTH = 32; + private const int KEY_LENGTH = 32; private const int NUMBER_OF_KEYS = 5; public function getArtifactName(): string @@ -38,25 +38,20 @@ public function getArtifactName(): string public function build(): Artifact { - $current_keys = null; + $current_keys = []; if (is_readable(self::PATH())) { /** @var array $current_keys */ $current_keys = require self::PATH(); } $new_keys = []; - - if (is_array($current_keys)) { - // drop the first key - $current_keys = array_slice($current_keys, 1); - $new_keys = $current_keys; - } - // $push a new key to the array at first position - while (count($new_keys) < self::NUMBER_OF_KEYS) { - $new_keys[] = $this->generateRandomString(self::KEY_LENGTH); + // push one new key to the beginning, drop the oldest key until we have 5 keys + for ($i = 0; $i < self::NUMBER_OF_KEYS - 1; $i++) { + if ($i === 0) { + $new_keys[] = $this->generateRandomString(self::KEY_LENGTH); + } + $new_keys[] = $current_keys[$i] ?? $this->generateRandomString(self::KEY_LENGTH); } - // keep only the first 5 keys - $new_keys = array_slice($new_keys, 0, self::NUMBER_OF_KEYS); return new ArrayArtifact($new_keys); } diff --git a/components/ILIAS/FileDelivery/src/Token/Signer/Payload/FilePayload.php b/components/ILIAS/FileDelivery/src/Token/Signer/Payload/FilePayload.php index 0b0d7ea98803..de67dc134763 100755 --- a/components/ILIAS/FileDelivery/src/Token/Signer/Payload/FilePayload.php +++ b/components/ILIAS/FileDelivery/src/Token/Signer/Payload/FilePayload.php @@ -32,12 +32,14 @@ public function __construct( private string $disposition, private int $user_id = 0 ) { + $modification_time = @filemtime($uri); parent::__construct([ 'p' => $uri, 'm' => $mime_type, 'n' => $file_name, 'd' => $disposition, 'u' => $user_id, + 'mt' => $modification_time, ]); } @@ -48,7 +50,8 @@ public static function fromArray(array $raw_payload): self $raw_payload['m'], $raw_payload['n'], $raw_payload['d'], - $raw_payload['u'] + $raw_payload['u'], + $raw_payload['mt'] ?? false ); } diff --git a/components/ILIAS/FileDelivery/src/Token/Signer/Payload/ShortFilePayload.php b/components/ILIAS/FileDelivery/src/Token/Signer/Payload/ShortFilePayload.php index 2e5b304a201f..337d9f9b7c7f 100644 --- a/components/ILIAS/FileDelivery/src/Token/Signer/Payload/ShortFilePayload.php +++ b/components/ILIAS/FileDelivery/src/Token/Signer/Payload/ShortFilePayload.php @@ -35,6 +35,7 @@ public function __construct( private string $uri, private string $file_name ) { + $modification_time = @filemtime($uri); // try to shorten uri $base = BaseDirObjective::get(); if ($base !== null) { @@ -43,7 +44,8 @@ public function __construct( parent::__construct([ 'p' => $uri, - 'n' => $file_name + 'n' => $file_name, + 'mt' => $modification_time, ]); } @@ -51,7 +53,8 @@ public static function fromArray(array $raw_payload): self { return new self( $raw_payload['p'], - $raw_payload['n'] + $raw_payload['n'], + $raw_payload['mt'] ?? false ); } diff --git a/components/ILIAS/FileUpload/src/MimeType.php b/components/ILIAS/FileUpload/src/MimeType.php index 5676871eff78..5c1e5c1b394b 100755 --- a/components/ILIAS/FileUpload/src/MimeType.php +++ b/components/ILIAS/FileUpload/src/MimeType.php @@ -341,6 +341,7 @@ class MimeType public const IMAGE__VND_RN_REALPIX = 'image/vnd.rn-realpix'; public const IMAGE__VND_WAP_WBMP = 'image/vnd.wap.wbmp'; public const IMAGE__VND_XIFF = 'image/vnd.xiff'; + public const IMAGE__WEBP = 'image/webp'; public const IMAGE__XBM = 'image/xbm'; public const IMAGE__XPM = 'image/xpm'; public const IMAGE__X_ADOBE_DNG = 'image/x-adobe-dng'; diff --git a/components/ILIAS/FileUpload/src/Processor/SVGBlacklistPreProcessor.php b/components/ILIAS/FileUpload/src/Processor/SVGBlacklistPreProcessor.php index 95e8cc844a2e..4f1d39173479 100755 --- a/components/ILIAS/FileUpload/src/Processor/SVGBlacklistPreProcessor.php +++ b/components/ILIAS/FileUpload/src/Processor/SVGBlacklistPreProcessor.php @@ -41,6 +41,10 @@ final class SVGBlacklistPreProcessor implements PreProcessor * @var string */ private const REGEX_SCRIPT = '/'; - //dump($output);exit(); return($output); } @@ -355,7 +364,7 @@ protected function getLaunchParameters(): array ); } - protected function getLaunchParametersLTI13(string $endpoint, string $clientId, int $deploymentId, string $nonce): ?array + protected function getLaunchParametersLTI13(string $endpoint, string $clientId, int $deploymentId, string $nonce, ?array $additionalArguments = null): ?array { $ilLTIConsumerLaunch = new ilLTIConsumerLaunch($this->object->getRefId()); $launchContext = $ilLTIConsumerLaunch->getContext(); @@ -369,6 +378,11 @@ protected function getLaunchParametersLTI13(string $endpoint, string $clientId, $this->object->getRefId(), $this->object->getId() ); + $returnUrl = !$this->object->isLaunchMethodOwnWin() ? '' : str_replace( + '&', + '&', + ilObjLTIConsumer::getIliasHttpPath() . "/" . $this->dic->ctrl()->getLinkTarget($this, "", "", false) + ); $cmixUser = $this->cmixUser; return $this->object->buildLaunchParametersLTI13( @@ -380,7 +394,9 @@ protected function getLaunchParametersLTI13(string $endpoint, string $clientId, $nonce, $launchContextType, $launchContextId, - $launchContextTitle + $launchContextTitle, + $returnUrl, + $additionalArguments ); } diff --git a/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerGradeSynchronizationTableGUI.php b/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerGradeSynchronizationTableGUI.php index 9d79bbe778f0..a9dcfa0d373b 100755 --- a/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerGradeSynchronizationTableGUI.php +++ b/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerGradeSynchronizationTableGUI.php @@ -93,7 +93,7 @@ public function setRecords(array $records): void public function getHTML(): string { $table = $this->ui_factory->table() - ->data("", $this->getColumns(), $this) + ->data($this, "", $this->getColumns()) ->withOrder(new Order("lti_timestamp", Order::DESC)) ->withRequest($this->request); diff --git a/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerProviderTableGUI.php b/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerProviderTableGUI.php index 59c271634417..66fa0ed999fa 100755 --- a/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerProviderTableGUI.php +++ b/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerProviderTableGUI.php @@ -149,7 +149,7 @@ public function setData(array $data): void public function getHTML(bool $hasWriteAccess = false): string { $table = $this->ui_factory->table() - ->data($this->lng->txt('tbl_provider_header'), $this->getColumns(), $this) + ->data($this, $this->lng->txt('tbl_provider_header'), $this->getColumns()) ->withOrder(new Order('title', Order::ASC)) ->withRequest($this->request); diff --git a/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerProviderUsageTableGUI.php b/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerProviderUsageTableGUI.php index aecb31b03679..8e81636a958f 100755 --- a/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerProviderUsageTableGUI.php +++ b/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerProviderUsageTableGUI.php @@ -101,7 +101,7 @@ public function setData(array $data): void public function getHTML(): string { $table = $this->ui_factory->table() - ->data($this->lng->txt('tbl_provider_usage_header'), $this->getColumns(), $this) + ->data($this, $this->lng->txt('tbl_provider_usage_header'), $this->getColumns()) ->withOrder(new Order('title', Order::ASC)) ->withRequest($this->request); diff --git a/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerResult.php b/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerResult.php index 4d2cff2f57eb..2fcb38d7105b 100755 --- a/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerResult.php +++ b/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerResult.php @@ -48,6 +48,11 @@ class ilLTIConsumerResult */ public ?float $result = null; + /** + * @var bool + */ + public bool $attended = false; + /** * Get a result by id */ @@ -110,6 +115,7 @@ protected function fillData(array $data): void $this->obj_id = (int) $data['obj_id']; $this->usr_id = (int) $data['usr_id']; $this->result = $data['result'] == null ? null : (float) $data['result']; + $this->attended = (bool) $data['attended']; } /** @@ -142,7 +148,8 @@ public function save(): bool array( 'obj_id' => array('integer', $this->obj_id), 'usr_id' => array('integer', $this->usr_id), - 'result' => array('float', $this->result) + 'result' => array('float', $this->result), + 'attended' => array('integer', $this->attended) ) ); return true; @@ -168,6 +175,16 @@ public function getResult(): ?float return $this->result; } + public function isAttended(): bool + { + return $this->attended; + } + + public function setAttended(bool $attended): void + { + $this->attended = $attended; + } + /** * @param $objId * @return ilLTIConsumerResult[] diff --git a/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerResultService.php b/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerResultService.php index bbcba21c0cf3..56e906ecfb53 100755 --- a/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerResultService.php +++ b/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerResultService.php @@ -21,6 +21,7 @@ use ceLTIc\LTI\OAuth\OAuthRequest; use ceLTIc\LTI\OAuth\OAuthServer; use ceLTIc\LTI\OAuth\OAuthSignatureMethod_HMAC_SHA1; +use ceLTIc\LTI\OAuth\OAuthUtil; use ceLTIc\LTI\OAuthDataStore; /** @@ -137,10 +138,12 @@ public function handleRequest(): void // Verify the signature $this->readFields($this->result->obj_id); - $result = $this->checkSignature($this->fields['KEY'], $this->fields['SECRET']); - if ($result instanceof Exception) { - $logger->error('LTI Consumer Result Service: Incoming request'); - $this->respondUnauthorized($result->getMessage()); + try { + $this->checkSignature($this->fields['KEY'], $this->fields['SECRET']); + } catch (Exception $e) { + $logger->error('LTI Consumer Result Service: Incoming request failed: ' . $e->getMessage()); + $logger->debug('Incoming request failed: ' . $e->getTraceAsString()); + $this->respondUnauthorized(); return; } @@ -206,12 +209,13 @@ protected function replaceResult(\SimpleXMLElement $request): void $description = "The result is out of range from 0 to 1."; } else { $this->result->result = (float) $result; + $this->result->setAttended(true); $this->result->save(); if ($result >= $this->getMasteryScore()) { $lp_status = ilLPStatus::LP_STATUS_COMPLETED_NUM; } else { - $lp_status = ilLPStatus::LP_STATUS_IN_PROGRESS_NUM; + $lp_status = ilLPStatus::LP_STATUS_FAILED_NUM; } $lp_percentage = (int) round(100 * $result); @@ -241,9 +245,10 @@ protected function replaceResult(\SimpleXMLElement $request): void protected function deleteResult(\SimpleXMLElement $request): void { $this->result->result = null; + $this->result->setAttended(false); $this->result->save(); - $lp_status = ilLPStatus::LP_STATUS_IN_PROGRESS_NUM; + $lp_status = ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM; $lp_percentage = 0; ilLPStatus::writeStatus($this->result->obj_id, $this->result->usr_id, $lp_status, $lp_percentage, true); @@ -363,7 +368,7 @@ private function readFields(int $a_obj_id): void $query = " SELECT lti_ext_provider.provider_key, lti_ext_provider.provider_secret, lti_consumer_settings.launch_key, lti_consumer_settings.launch_secret - FROM lti_ext_provider, lti_consumer_settings + FROM lti_ext_provider, lti_consumer_settings WHERE lti_ext_provider.id = lti_consumer_settings.provider_id AND lti_consumer_settings.obj_id = %s "; @@ -385,30 +390,34 @@ private function readFields(int $a_obj_id): void } /** - * Check the reqest signature - * @return bool Exception or true + * Check the request signature + * @throws Exception in case of failure */ - private function checkSignature(string $a_key, string $a_secret): bool + private function checkSignature(string $a_key, string $a_secret): void { + global $DIC; + $logger = $DIC->logger()->root(); $platform = new ilLTIPlatform(); $platform->setKey($a_key); $platform->setSecret($a_secret); + $platform->setRecordId($this->result->obj_id); $store = new OAuthDataStore($platform); $server = new OAuthServer($store); $method = new OAuthSignatureMethod_HMAC_SHA1(); - $server->add_signature_method($method); - $request = OAuthRequest::from_request(); + $server->add_signature_method($method); + $logger->info("s_key: " . $a_key . " s_secret: " . $a_secret . " platform key: " . $platform->getKey()); - try { - $server->verify_request($request); - } catch (Exception $e) { - return false; + $request_headers = OAuthUtil::get_headers(); + if (isset($request_headers['Authorization']) && str_starts_with($request_headers['Authorization'], 'OAuth ')) { + $parameters = OAuthUtil::split_header($request_headers['Authorization']); } - return true; + $request = OAuthRequest::from_request(null, null, $parameters ?? []); + $logger->info("Request: " . json_encode($request)); + $server->verify_request($request); } protected function updateLP(): void diff --git a/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerSettingsFormGUI.php b/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerSettingsFormGUI.php index 2bf406fc06b6..3bc7797ad092 100755 --- a/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerSettingsFormGUI.php +++ b/components/ILIAS/LTIConsumer/classes/class.ilLTIConsumerSettingsFormGUI.php @@ -143,7 +143,7 @@ protected function initForm(string $formaction, string $saveCommand, string $can $item->addOption($optEmbedded); $this->addItem($item); - $customParams = new ilTextAreaInputGUI($DIC->language()->txt('launch_custom_params'), 'custom_params'); + $customParams = new ilTextAreaInputGUI($DIC->language()->txt('lti_con_prov_custom_params'), 'custom_params'); $customParams->setRows(6); $customParams->setValue($this->object->getCustomParams()); $customParams->setInfo($DIC->language()->txt('lti_con_prov_custom_params_info')); diff --git a/components/ILIAS/LTIConsumer/classes/class.ilObjLTIConsumer.php b/components/ILIAS/LTIConsumer/classes/class.ilObjLTIConsumer.php index 081a00fd8643..e091a93ad815 100755 --- a/components/ILIAS/LTIConsumer/classes/class.ilObjLTIConsumer.php +++ b/components/ILIAS/LTIConsumer/classes/class.ilObjLTIConsumer.php @@ -106,6 +106,24 @@ public function __construct(int $a_id = 0, bool $a_reference = true) parent::__construct($a_id, $a_reference); } + public static function getRefIdOfConsumerByDeploymentId(string $dep_id): int + { + global $ilDB; + $refId = null; + $refIds = array(); + $query = /** @lang text */ + 'SELECT ref_id from lti_consumer_settings join object_reference on lti_consumer_settings.obj_id=object_reference.obj_id where provider_id = ' . $dep_id; + $res = $ilDB->query($query); + while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) { + $refIds[] = $row->ref_id; + } + + if (!empty($refIds)) { + $refId = $refIds[0]; + } + return $refId; + } + protected function initType(): void { $this->type = "lti"; @@ -749,7 +767,6 @@ public function buildLaunchParameters( "lis_person_name_full" => $nameFull, "lis_person_contact_email_primary" => $emailPrimary, "context_id" => $contextId, - "context_type" => $contextType, "context_title" => $contextTitle, "context_label" => $contextType . " " . $contextId, "launch_presentation_locale" => $this->lng->getLangKey(), @@ -772,8 +789,7 @@ public function buildLaunchParameters( "tool_consumer_info_version" => ILIAS_VERSION, "lis_result_sourcedid" => $token, "lis_outcome_service_url" => self::getIliasHttpPath( - ) . "/ltiresult.php?client_id=" . CLIENT_ID, - "role_scope_mentor" => "" + ) . "/ltiresult.php?client_id=" . CLIENT_ID ]; $OAuthParams = [ @@ -804,7 +820,8 @@ public function buildLaunchParametersLTI13( string $contextType, string $contextId, string $contextTitle, - ?string $returnUrl = '' + ?string $returnUrl = '', + ?array $additionalArguments = null ): ?array { global $DIC; /* @var \ILIAS\DI\Container $DIC */ @@ -865,7 +882,7 @@ public function buildLaunchParametersLTI13( } $toolConsumerInstanceGuid .= $parseIliasUrl["host"]; $launch_vars = [ - "lti_message_type" => "basic-lti-launch-request", + "lti_message_type" => "LtiResourceLinkRequest", "lti_version" => "1.3.0", "resource_link_id" => (string) $resource_link_id, "resource_link_title" => $this->getTitle(), @@ -898,11 +915,7 @@ public function buildLaunchParametersLTI13( "tool_consumer_instance_contact_email" => $DIC->settings()->get("admin_email"), "launch_presentation_css_url" => "", "tool_consumer_info_product_family_code" => "ilias", - "tool_consumer_info_version" => ILIAS_VERSION, - "lis_result_sourcedid" => $token, - "lis_outcome_service_url" => self::getIliasHttpPath( - ) . "/ltiresult.php?client_id=" . CLIENT_ID, - "role_scope_mentor" => "" + "tool_consumer_info_version" => ILIAS_VERSION ]; $provider_custom_params = self::getProviderCustomParamsArray($this->getProvider()); @@ -912,15 +925,16 @@ public function buildLaunchParametersLTI13( $launch_vars['custom_' . $key] = $value; } - if ($this->getProvider()->isGradeSynchronization()) { + if ($this->getProvider()->isGradeSynchronization() || $this->getProvider()->getHasOutcome()) { $gradeservice = new ilLTIConsumerGradeService(); $launch_vars['custom_lineitem_url'] = self::getIliasHttpPath( ) . "/ltiservices.php/gradeservice/" . $contextId . "/lineitems/" . $this->id . "/lineitem"; // ! Moodle as tool provider requires a custom_lineitems_url even though this should be optional in launch request, especially if only posting score scope is permitted by platform // http://www.imsglobal.org/spec/lti-ags/v2p0#example-link-has-a-single-line-item-tool-can-only-post-score - $launch_vars['custom_lineitems_url'] = self::getIliasHttpPath( - ) . "/ltiservices.php/gradeservice/" . $contextId . "/linetitems/"; + + $launch_vars['custom_lineitems_url'] = self::getIliasHttpPath() + . "/ltiservices.php/gradeservice/" . $contextId . "/lineitems/"; $launch_vars['custom_ags_scopes'] = implode(",", $gradeservice->getPermittedScopes()); } @@ -929,7 +943,7 @@ public function buildLaunchParametersLTI13( $DIC->ui()->mainTemplate()->setOnScreenMessage('failure', 'ERROR_OPEN_SSL_CONF', true); return null; } - return self::LTISignJWT($launch_vars, $endpoint, $clientId, $deploymentId, $nonce); + return self::LTISignJWT($launch_vars, $endpoint, $clientId, $deploymentId, $nonce, $additionalArguments); } /** @@ -1046,7 +1060,8 @@ public static function LTISignJWT( string $endpoint, string $oAuthConsumerKey, $typeId = 0, - string $nonce = '' + string $nonce = '', + ?array $additionalPayload = null, ): array { if (empty($typeId)) { $typeId = 0; @@ -1089,6 +1104,28 @@ public static function LTISignJWT( $payLoad[self::LTI_JWT_CLAIM_PREFIX . '/claim/target_link_uri'] = $endpoint; } + if (!empty($parms['custom_lineitem_url']) || !empty($parms['custom_lineitems_url']) || !empty($parms['custom_ags_scopes'])) { + $ags_claim = []; + + if (!empty($parms['custom_lineitem_url'])) { + $ags_claim['lineitem'] = $parms['custom_lineitem_url']; + } + if (!empty($parms['custom_lineitems_url'])) { + $ags_claim['lineitems'] = $parms['custom_lineitems_url']; + } + if (!empty($parms['custom_ags_scopes'])) { + // scopes are comma-separated in launch_vars + $ags_claim['scope'] = array_values(array_filter(array_map('trim', explode(',', $parms['custom_ags_scopes'])))); + } + + if (!empty($ags_claim)) { + $payLoad['https://purl.imsglobal.org/spec/lti-ags/claim/endpoint'] = $ags_claim; + } + + // prevent them from also being added to custom/claim/custom later + unset($parms['custom_lineitem_url'], $parms['custom_lineitems_url'], $parms['custom_ags_scopes']); + } + foreach ($parms as $key => $value) { $claim = self::LTI_JWT_CLAIM_PREFIX; if (array_key_exists($key, $claimMapping)) { @@ -1118,11 +1155,13 @@ public static function LTISignJWT( $payLoad["{$claim}/claim/ext"][substr($key, 4)] = $value; } } - //self::getLogger()->debug(json_encode($payLoad,JSON_PRETTY_PRINT)); if (!empty(self::verifyPrivateKey())) { throw new DomainException(self::ERROR_OPEN_SSL_CONF); } $privateKey = self::getPrivateKey(); + if (isset($additionalPayload)) { + $payLoad = array_merge($payLoad, $additionalPayload); + } $jwt = Firebase\JWT\JWT::encode($payLoad, $privateKey['key'], 'RS256', $privateKey['kid']); $newParms = array(); $newParms['id_token'] = $jwt; @@ -1321,7 +1360,11 @@ public static function registerClient(array $data, object $tokenObj): array $reponseData = $data; $provider = new ilLTIConsumeProvider(); $toolConfig = $data['https://purl.imsglobal.org/spec/lti-tool-configuration']; - $provider->setTitle(strip_tags($data['client_name'], ilObjectGUI::ALLOWED_TAGS_IN_TITLE_AND_DESCRIPTION)); + $provider->setTitle( + $DIC->refinery()->encode()->htmlSpecialCharsAsEntities()->transform( + $data['client_name'] + ) + ); $provider->setProviderUrl($toolConfig['target_link_uri']); $provider->setInitiateLogin($data['initiate_login_uri']); $provider->setRedirectionUris(implode(",", $data['redirect_uris'])); @@ -1403,7 +1446,7 @@ public static function getRawData(): ?string return file_get_contents('php://input'); } - public static function getTokenObject(string $token): ?object + public static function getTokenObject(string $token): ?stdClass { try { $keys = JWK::parseKeySet(self::getJwks()); @@ -1420,6 +1463,8 @@ public static function verifyToken(): ?object if (count($auth) < 1) { self::sendResponseError(405, "missing Authorization header"); } + $logger = $DIC->logger()->root(); + $logger->info("Verifying token: " . json_encode($auth) . " HEADER: " . json_encode($DIC->http()->request()->getHeaders()) . " REQUEST getParsedBody: " . json_encode($DIC->http()->request()->getParsedBody()) . " REQUEST getParsedBody" . json_encode($DIC->http()->request()->getQueryParams())); preg_match('/Bearer\s+(.+)$/i', $auth[0], $matches); if (count($matches) != 2) { self::sendResponseError(405, "missing required Authorization Baerer token"); diff --git a/components/ILIAS/LTIConsumer/classes/class.ilObjLTIConsumerGUI.php b/components/ILIAS/LTIConsumer/classes/class.ilObjLTIConsumerGUI.php index e96caf99bb53..9032f4e194f4 100755 --- a/components/ILIAS/LTIConsumer/classes/class.ilObjLTIConsumerGUI.php +++ b/components/ILIAS/LTIConsumer/classes/class.ilObjLTIConsumerGUI.php @@ -685,9 +685,7 @@ public function executeCommand(): void { global $DIC; /* @var \ILIAS\DI\Container $DIC */ - // TODO: general access checks (!) - if (!ilLTIConsumerContentGUI::isEmbeddedLaunchRequest()) { $this->prepareOutput(); $this->addHeaderAction(); diff --git a/components/ILIAS/LTIConsumer/resources/ltiauth.php b/components/ILIAS/LTIConsumer/resources/ltiauth.php index 5c15cf3ac0a1..b133b67928e7 100644 --- a/components/ILIAS/LTIConsumer/resources/ltiauth.php +++ b/components/ILIAS/LTIConsumer/resources/ltiauth.php @@ -18,14 +18,22 @@ declare(strict_types=1); -/** @noRector */ -require_once("../vendor/composer/vendor/autoload.php"); - /** * There is no way to process a $_GET Request with * a valid third-party client_id param in regular initILIAS */ + +function sanitizeJson(string $string) +{ + $string = preg_replace('/(\w+):(\w+)/', '"$1":"$2"', $string); + $string = str_replace("'", '"', $string); + $string = str_replace('{', '{', $string); + $string = str_replace('}', '}', $string); + return json_decode($string, true); +} + + if (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST') { $orig = new ArrayObject($_POST); $data = $orig->getArrayCopy(); @@ -43,48 +51,91 @@ exit; } -ilInitialisation::initILIAS(); +require_once '../vendor/composer/vendor/autoload.php'; +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); global $DIC; +$scope = $data['scope'] ?? ''; +$responseType = $data['response_type'] ?? ''; +$redirectUri = $data['redirect_uri'] ?? ''; +$clientId = $data['client_id'] ?? $data['id'] ?? ''; +$state = $data['state'] ?? ''; +$nonce = $data['nonce'] ?? ''; +$ltiMessageHint = $data['lti_message_hint'] ?? ''; +$loginHint = $data['login_hint'] ?? ''; + +$isDlMode = false; +$hint = null; +$deploymentId = null; +$provider_id = 0; +$childRefId = 0; +$refId = 0; + +if ( + $scope === 'openid' && + $responseType === 'id_token' && + $redirectUri !== '' && + $clientId !== '' +) { + $provider_id = ilLTIConsumeProvider::getProviderIdFromClientId($clientId); + $provider = ilLTIConsumeProvider::getInstance($provider_id); + + $hint = sanitizeJson($ltiMessageHint); + if ($provider->getContentItemUrl() == $redirectUri && isset($hint['deployment_id'])) { + + $isDlMode = true; + $deploymentId = (int) $hint['deployment_id']; + $ownerId = ilObjectFactory::getInstanceByRefId(224)->getOwner(); + $childRefId = ilObjLTIConsumer::getRefIdOfConsumerByDeploymentId((string) $deploymentId); + $refId = $DIC->repositoryTree()->getParentId($childRefId); + } + +} -$ltiMessageHint = $data['lti_message_hint']; if (empty($ltiMessageHint)) { $DIC->http()->saveResponse( - $DIC->http()->response() - ->withStatus(400) + $DIC->http()->response()->withStatus(400) ); - try { - $DIC->http()->sendResponse(); - $DIC->http()->close(); - } catch (\ILIAS\HTTP\Response\Sender\ResponseSendingException $e) { - $DIC->http()->close(); - } + $DIC->http()->sendResponse(); + $DIC->http()->close(); + exit; } -$mh = explode(":", $ltiMessageHint); + +$parts = explode(":", $ltiMessageHint); $isContentSelection = false; $ref_id = ''; -$client_id = ''; +$il_client_id = ''; $redirect_uri = ''; -if (count($mh) == 2) { // launch message auth - list($ref_id, $client_id) = explode(":", $ltiMessageHint); -} else { // contentSelection message auth +if (count($parts) === 2) { + [$ref_id, $il_client_id] = $parts; +} elseif (count($parts) === 3) { + [$first, $second, $third] = $parts; + $il_client_id = $third; + $ref_id = explode(",", $second)[0]; +} else { $isContentSelection = true; - list($ref_id, $client_id, $redirect_uri) = explode(":", $ltiMessageHint); + [$ref_id, $il_client_id, $redirect_uri] = $parts; } ilSession::set('lti13_login_data', $data); + if ($isContentSelection) { $url = "../../../" . base64_decode($redirect_uri); } else { - $url = "../../../goto.php?target=lti_" . $ref_id . "&client_id=" . $client_id; + $url = "../../../goto.php?target=lti_" . $ref_id . "&client_id=" . $il_client_id; +} +if (!$DIC->http()->wrapper()->query()->has("prompt")) { + dump("kjbvi"); + exit(); } - $DIC->http()->saveResponse( $DIC->http()->response() - ->withStatus(302) - ->withAddedHeader('Location', $url) + ->withStatus(302) + ->withAddedHeader('Location', $url) ); + try { $DIC->http()->sendResponse(); $DIC->http()->close(); diff --git a/components/ILIAS/LTIConsumer/resources/lticerts.php b/components/ILIAS/LTIConsumer/resources/lticerts.php index 17cf76bafa34..977dc98151aa 100644 --- a/components/ILIAS/LTIConsumer/resources/lticerts.php +++ b/components/ILIAS/LTIConsumer/resources/lticerts.php @@ -19,10 +19,11 @@ declare(strict_types=1); /** @noRector */ -require_once("../vendor/composer/vendor/autoload.php"); +require_once '../vendor/composer/vendor/autoload.php'; +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); ilContext::init(ilContext::CONTEXT_SCORM); -ilInitialisation::initILIAS(); if (!empty(ilObjLTIConsumer::verifyPrivateKey())) { echo "ERROR_OPEN_SSL_CONF"; diff --git a/components/ILIAS/LTIConsumer/resources/lticonfig.php b/components/ILIAS/LTIConsumer/resources/lticonfig.php index 2bdb922e95b0..8d48894d1d95 100644 --- a/components/ILIAS/LTIConsumer/resources/lticonfig.php +++ b/components/ILIAS/LTIConsumer/resources/lticonfig.php @@ -19,9 +19,11 @@ declare(strict_types=1); /** @noRector */ -require_once("../vendor/composer/vendor/autoload.php"); +require_once '../vendor/composer/vendor/autoload.php'; +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); ilContext::init(ilContext::CONTEXT_SCORM); -ilInitialisation::initILIAS(); + header('Content-Type: application/json; charset=utf-8'); echo json_encode(ilObjLTIConsumer::getOpenidConfig(), JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); diff --git a/components/ILIAS/LTIConsumer/resources/ltiregend.php b/components/ILIAS/LTIConsumer/resources/ltiregend.php index 4e35c59643be..cf45a3b90791 100644 --- a/components/ILIAS/LTIConsumer/resources/ltiregend.php +++ b/components/ILIAS/LTIConsumer/resources/ltiregend.php @@ -19,10 +19,10 @@ declare(strict_types=1); /** @noRector */ -require_once("../vendor/composer/vendor/autoload.php"); +require_once '../vendor/composer/vendor/autoload.php'; +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); - -ilInitialisation::initILIAS(); $clientId = (ilSession::has('lti_dynamic_registration_client_id')) ? (string) ilSession::get('lti_dynamic_registration_client_id') : ''; $response = []; if (empty($clientId)) { diff --git a/components/ILIAS/LTIConsumer/resources/ltiregistration.php b/components/ILIAS/LTIConsumer/resources/ltiregistration.php index b7400a8d4b05..89bd307360cb 100644 --- a/components/ILIAS/LTIConsumer/resources/ltiregistration.php +++ b/components/ILIAS/LTIConsumer/resources/ltiregistration.php @@ -19,10 +19,11 @@ declare(strict_types=1); /** @noRector */ -require_once("../vendor/composer/vendor/autoload.php"); +require_once '../vendor/composer/vendor/autoload.php'; +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); ilContext::init(ilContext::CONTEXT_SCORM); -ilInitialisation::initILIAS(); try { $token = ilObjLTIConsumer::verifyToken(); diff --git a/components/ILIAS/LTIConsumer/resources/ltiregstart.php b/components/ILIAS/LTIConsumer/resources/ltiregstart.php index 26bce8f9ab2b..e7cd895880ce 100644 --- a/components/ILIAS/LTIConsumer/resources/ltiregstart.php +++ b/components/ILIAS/LTIConsumer/resources/ltiregstart.php @@ -19,9 +19,10 @@ declare(strict_types=1); /** @noRector */ -require_once("../vendor/composer/vendor/autoload.php"); +require_once '../vendor/composer/vendor/autoload.php'; +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); -ilInitialisation::initILIAS(); global $DIC; if (!$DIC->user()->getId() || !ilLTIConsumerAccess::hasCustomProviderCreationAccess()) { diff --git a/components/ILIAS/LTIConsumer/resources/ltiresult.php b/components/ILIAS/LTIConsumer/resources/ltiresult.php index 46bda047fdd8..b03bc622434f 100644 --- a/components/ILIAS/LTIConsumer/resources/ltiresult.php +++ b/components/ILIAS/LTIConsumer/resources/ltiresult.php @@ -18,7 +18,9 @@ declare(strict_types=1); -require_once("../vendor/composer/vendor/autoload.php"); +require_once '../vendor/composer/vendor/autoload.php'; +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); if (!isset($_GET['client_id']) || !strlen($_GET['client_id'])) { $log = ilLoggerFactory::getLogger('lti'); @@ -28,7 +30,6 @@ } \ilContext::init(\ilContext::CONTEXT_SCORM); -\ilInitialisation::initILIAS(); $dic = $GLOBALS['DIC']; $log = ilLoggerFactory::getLogger('lti'); diff --git a/components/ILIAS/LTIConsumer/resources/ltiservices.php b/components/ILIAS/LTIConsumer/resources/ltiservices.php index 116a4ac29cbf..e6cf8113de42 100644 --- a/components/ILIAS/LTIConsumer/resources/ltiservices.php +++ b/components/ILIAS/LTIConsumer/resources/ltiservices.php @@ -20,10 +20,11 @@ /** @noRector */ -require_once("../vendor/composer/vendor/autoload.php"); +require_once '../vendor/composer/vendor/autoload.php'; +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); ilContext::init(ilContext::CONTEXT_SCORM); -ilInitialisation::initILIAS(); global $DIC; diff --git a/components/ILIAS/LTIConsumer/resources/ltitoken.php b/components/ILIAS/LTIConsumer/resources/ltitoken.php index 31dffb3083d0..aaccf034fa1a 100644 --- a/components/ILIAS/LTIConsumer/resources/ltitoken.php +++ b/components/ILIAS/LTIConsumer/resources/ltitoken.php @@ -23,10 +23,11 @@ use Firebase\JWT\JWT; use Firebase\JWT\JWK; -require_once("../vendor/composer/vendor/autoload.php"); +require_once '../vendor/composer/vendor/autoload.php'; +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); ilContext::init(ilContext::CONTEXT_SCORM); -ilInitialisation::initILIAS(); global $DIC; diff --git a/components/ILIAS/LTIProvider/classes/Consumer/class.ilObjectConsumerTableGUI.php b/components/ILIAS/LTIProvider/classes/Consumer/class.ilObjectConsumerTableGUI.php index 6703922c3358..fa2cf66a6ba7 100644 --- a/components/ILIAS/LTIProvider/classes/Consumer/class.ilObjectConsumerTableGUI.php +++ b/components/ILIAS/LTIProvider/classes/Consumer/class.ilObjectConsumerTableGUI.php @@ -218,7 +218,7 @@ public function getTotalRowCount( public function getHtml(): string { $table = $this->ui_factory->table() - ->data($this->lng->txt('lti_object_consumer'), $this->getColumns(), $this) + ->data($this, $this->lng->txt('lti_object_consumer'), $this->getColumns()) ->withOrder(new Order('title', Order::ASC)) ->withActions($this->getActions()) ->withRequest($this->request); diff --git a/components/ILIAS/LTIProvider/classes/InternalProvider/class.ilAuthProviderLTI.php b/components/ILIAS/LTIProvider/classes/InternalProvider/class.ilAuthProviderLTI.php index a823eab64dfd..90d81df38b71 100644 --- a/components/ILIAS/LTIProvider/classes/InternalProvider/class.ilAuthProviderLTI.php +++ b/components/ILIAS/LTIProvider/classes/InternalProvider/class.ilAuthProviderLTI.php @@ -83,7 +83,8 @@ public static function getActiveAuthModes(): array global $ilDB; // move to connector - $query = 'SELECT consumer_pk from lti2_consumer where enabled = ' . $ilDB->quote(1, 'integer'); + $query = /** @lang text */ + 'SELECT consumer_pk from lti2_consumer where enabled = ' . $ilDB->quote(1, 'integer'); $res = $ilDB->query($query); $sids = array(); @@ -101,7 +102,8 @@ public static function getAuthModes(): array global $ilDB; // move to connector - $query = 'SELECT distinct(consumer_pk) consumer_pk from lti2_consumer'; + $query = /** @lang text */ + 'SELECT distinct(consumer_pk) consumer_pk from lti2_consumer'; $res = $ilDB->query($query); $sids = array(); @@ -161,10 +163,11 @@ protected function findAuthKeyId(string $a_oauth_consumer_key): int { global $ilDB; - $query = 'SELECT consumer_pk from lti2_consumer where consumer_key = ' . $ilDB->quote( - $a_oauth_consumer_key, - 'text' - ); + $query = /** @lang text */ + 'SELECT consumer_pk from lti2_consumer where consumer_key = ' . $ilDB->quote( + $a_oauth_consumer_key, + 'text' + ); // $query = 'SELECT id from lti_ext_consumer where consumer_key = '.$ilDB->quote($a_oauth_consumer_key,'text'); $this->getLogger()->debug($query); $res = $ilDB->query($query); @@ -187,7 +190,8 @@ protected function findAuthPrefix(int $a_lti_id): string { global $ilDB; - $query = 'SELECT prefix from lti_ext_consumer where id = ' . $ilDB->quote($a_lti_id, 'integer'); + $query = /** @lang text */ + 'SELECT prefix from lti_ext_consumer where id = ' . $ilDB->quote($a_lti_id, 'integer'); $this->getLogger()->debug($query); $res = $ilDB->query($query); @@ -209,7 +213,8 @@ protected function findGlobalRole(int $a_lti_id): ?int { global $ilDB; - $query = 'SELECT role from lti_ext_consumer where id = ' . $ilDB->quote($a_lti_id, 'integer'); + $query = /** @lang text */ + 'SELECT role from lti_ext_consumer where id = ' . $ilDB->quote($a_lti_id, 'integer'); $this->getLogger()->debug($query); $res = $ilDB->query($query); @@ -240,6 +245,11 @@ public function doAuthentication(\ilAuthStatus $status): bool setcookie("launch_presentation_return_url", $this->launchReturnUrl, time() + 86400, "/", "", true, true); $this->logger->info("Setting launch_presentation_return_url in cookie storage " . $this->launchReturnUrl); } + $pk = ilObjLTIConsumer::getPrivateKey(); + + $lti_provider->rsaKey = $pk['key']; + $lti_provider->kid = $pk['kid']; + $lti_provider->signatureMethod = 'RS256'; $lti_provider->handleRequest(); $this->provider = $lti_provider; $this->messageParameters = $this->provider->getMessageParameters(); @@ -431,76 +441,31 @@ protected function createUser(ilLTIPlatform $consumer): int // } $userObj = new ilObjUser(); $local_user = ilAuthUtils::_generateLogin($consumer->getPrefix() . '_' . $this->getCredentials()->getUsername()); - - $newUser["login"] = $local_user; + $userObj->setLogin($local_user); if (isset($this->messageParameters['lis_person_name_given'])) { - $newUser["firstname"] = $this->messageParameters['lis_person_name_given']; + $userObj->setFirstname($this->messageParameters['lis_person_name_given']); } else { - $newUser["firstname"] = '-'; + $userObj->setFirstname('-'); } if (isset($this->messageParameters['lis_person_name_family'])) { - $newUser["lastname"] = $this->messageParameters['lis_person_name_family']; + $userObj->setLastname($this->messageParameters['lis_person_name_family']); } else { - $newUser["lastname"] = '-'; + $userObj->setLastname('-'); } - $newUser['email'] = $this->messageParameters['lis_person_contact_email_primary']; + $userObj->setEmail($this->messageParameters['lis_person_contact_email_primary']); // set "plain md5" password (= no valid password) // $newUser["passwd"] = ""; - $newUser["passwd_type"] = ilObjUser::PASSWD_CRYPTED; + $userObj->setPasswd(ilObjUser::PASSWD_CRYPTED); - $newUser["auth_mode"] = 'lti_' . $consumer->getExtConsumerId(); - $newUser['ext_account'] = $this->getCredentials()->getUsername(); - $newUser["profile_incomplete"] = 0; + $userObj->setAuthMode('lti_' . $consumer->getExtConsumerId()); + $userObj->setExternalAccount($this->getCredentials()->getUsername()); + $userObj->setProfileIncomplete(false); // ILIAS 8 //check - $newUser["gender"] = 'n'; - $newUser["title"] = null; - $newUser["birthday"] = null; - $newUser["institution"] = null; - $newUser["department"] = null; - $newUser["street"] = null; - $newUser["city"] = null; - $newUser["zipcode"] = null; - $newUser["country"] = null; - $newUser["sel_country"] = null; - $newUser["phone_office"] = null; - $newUser["phone_home"] = null; - $newUser["phone_mobile"] = null; - $newUser["fax"] = null; - $newUser["matriculation"] = null; - $newUser["second_email"] = null; - $newUser["hobby"] = null; - $newUser["client_ip"] = null; - $newUser["passwd_salt"] = null;//$newUser->getPasswordSalt(); - $newUser["latitude"] = null; - $newUser["longitude"] = null; - $newUser["loc_zoom"] = null; - $newUser["last_login"] = null; - $newUser["first_login"] = null; - $newUser["last_profile_prompt"] = null; - $newUser["last_update"] = ilUtil::now(); - $newUser["create_date"] = ilUtil::now(); - $newUser["referral_comment"] = null; - $newUser["approve_date"] = null; - $newUser["agree_date"] = null; - $newUser["inactivation_date"] = null; - $newUser["time_limit_from"] = null; - $newUser["time_limit_until"] = null; - $newUser["is_self_registered"] = null; - //end to check - - $newUser["passwd_enc_type"] = ""; - $newUser["active"] = true; - $newUser["time_limit_owner"] = 7; - $newUser["time_limit_unlimited"] = 0; - $newUser["time_limit_message"] = 0; - $newUser["passwd"] = " "; - // $newUser["last_update"] - - // system data - $userObj->assignData($newUser); + $userObj->setGender('n'); + $userObj->setTitle($userObj->getFullname()); $userObj->setDescription($userObj->getEmail()); @@ -511,11 +476,12 @@ protected function createUser(ilLTIPlatform $consumer): int $userObj->setTimeLimitOwner(7); $userObj->setTimeLimitUnlimited(false); $userObj->setTimeLimitFrom(time() - 5); - // todo ? $userObj->setTimeLimitUntil(time() + (int) $ilClientIniFile->readVariable("session", "expire")); // Create user in DB $userObj->setOwner(6); + $tmp_date = new ilDateTime(time(), IL_CAL_UNIX); + $userObj->setAgreeDate($tmp_date->get(IL_CAL_DATETIME)); $userObj->create(); $userObj->setActive(true); // $userObj->updateOwner(); diff --git a/components/ILIAS/LTIProvider/classes/InternalProvider/class.ilLTIProviderObjectSettingGUI.php b/components/ILIAS/LTIProvider/classes/InternalProvider/class.ilLTIProviderObjectSettingGUI.php index 206a516df1f3..f9ec653e3b41 100644 --- a/components/ILIAS/LTIProvider/classes/InternalProvider/class.ilLTIProviderObjectSettingGUI.php +++ b/components/ILIAS/LTIProvider/classes/InternalProvider/class.ilLTIProviderObjectSettingGUI.php @@ -153,7 +153,6 @@ protected function settings(?ilPropertyFormGUI $form = null): void $this->tpl->setContent($form->getHTML()); } - /** * Init object settings form */ @@ -226,8 +225,12 @@ protected function initObjectSettingsForm(): \ilPropertyFormGUI $sh->setValue($this->lng->txt("lti_13_step1_info")); $op1->addSubItem($sh); $url = new ilNonEditableValueGUI($this->lng->txt('lti_launch_url'), 'url'); - $url->setValue(ILIAS_HTTP_PATH . '/lti.php?client_id=' . CLIENT_ID); + $url->setValue(ILIAS_HTTP_PATH . '/lti.php'); $op1->addSubItem($url); + + $urlJwks = new ilNonEditableValueGUI($this->lng->txt('lti_con_key_type_jwk'), $this->lng->txt('lti_con_key_type_jwk')); + $urlJwks->setValue(ILIAS_HTTP_PATH . '/lticerts.php'); + $op1->addSubItem($urlJwks); // $url = new ilNonEditableValueGUI($this->lng->txt('lti_13_initiate_url'), 'url'); // $url->setValue(ILIAS_HTTP_PATH . '/lti.php?client_id=' . CLIENT_ID); // $version->addSubItem($url); diff --git a/components/ILIAS/LTIProvider/classes/InternalProvider/class.ilLTIProviderReleasedObjectsTableGUI.php b/components/ILIAS/LTIProvider/classes/InternalProvider/class.ilLTIProviderReleasedObjectsTableGUI.php index 12b0a2014130..769c0d3001b3 100644 --- a/components/ILIAS/LTIProvider/classes/InternalProvider/class.ilLTIProviderReleasedObjectsTableGUI.php +++ b/components/ILIAS/LTIProvider/classes/InternalProvider/class.ilLTIProviderReleasedObjectsTableGUI.php @@ -147,7 +147,7 @@ public function getTotalRowCount( public function getHtml(): string { $table = $this->ui_factory->table() - ->data($this->lng->txt('lti_released_objects'), $this->getColumns(), $this) + ->data($this, $this->lng->txt('lti_released_objects'), $this->getColumns()) ->withOrder(new Order('title', Order::ASC)) ->withRequest($this->request); diff --git a/components/ILIAS/LTIProvider/classes/class.ilLTIAppEventListener.php b/components/ILIAS/LTIProvider/classes/class.ilLTIAppEventListener.php index b967220925f1..db243bd20d61 100644 --- a/components/ILIAS/LTIProvider/classes/class.ilLTIAppEventListener.php +++ b/components/ILIAS/LTIProvider/classes/class.ilLTIAppEventListener.php @@ -21,18 +21,19 @@ use ceLTIc\LTI\Enum\ServiceAction; use ceLTIc\LTI\Outcome; use ceLTIc\LTI\ResourceLink; +use ceLTIc\LTI\Tool; use ceLTIc\LTI\UserResult; /** * Class ilLTIAppEventListener */ -class ilLTIAppEventListener implements \ilAppEventListener +class ilLTIAppEventListener { - private static ?\ilLTIAppEventListener $instance = null; + private static ?ilLTIAppEventListener $instance = null; - private ?\ilLogger $logger = null; + private ?ilLogger $logger = null; - private ?\ilLTIDataConnector $connector = null; + private ?ilLTIDataConnector $connector = null; /** @@ -41,14 +42,13 @@ class ilLTIAppEventListener implements \ilAppEventListener protected function __construct() { global $DIC; - - $this->logger = ilLoggerFactory::getLogger('ltis'); + $this->logger = $DIC->logger()->root(); $this->connector = new ilLTIDataConnector(); } - protected static function getInstance(): \ilLTIAppEventListener + protected static function getInstance(): ilLTIAppEventListener { - if (!self::$instance instanceof \ilLTIAppEventListener) { + if (!self::$instance instanceof ilLTIAppEventListener) { self::$instance = new self(); } return self::$instance; @@ -80,7 +80,7 @@ protected function handleUpdateStatus(int $a_obj_id, int $a_usr_id, int $a_statu ); $this->logger->debug('Resources for update:'); - $this->logger->dump($resources, ilLogLevel::DEBUG); + $this->logger->debug("resources: " . json_encode($resources)); foreach ($resources as $resource) { $this->tryOutcomeService((int) $resource, $ext_account, $a_status, $a_percentage); @@ -177,8 +177,26 @@ protected function tryOutcomeService(int $resource, string $ext_account, int $a_ $score = 0; } } + $platform = $resource_link->getPlatform(); + + $platform->accessTokenUrl = $platform->accessTokenUrl + ?: $platform->getSetting('custom_oauth2_access_token_url') + ?: \ilObjLTIConsumer::getAccessTokenUrl(); + + $priv = \ilObjLTIConsumer::getPrivateKey(); + + $tool = new Tool(); + $tool->rsaKey = $priv['key']; + $tool->kid = $priv['kid']; + $tool->jku = \ilObjLTIConsumer::getPublicKeysetUrl(); + $tool->requiredScopes = [ + "https://purl.imsglobal.org/spec/lti-ags/scope/score", + "https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly", + ]; + $tool->signatureMethod = $platform->signatureMethod; - $this->logger->info('Sending score: ' . (string) $score); + Tool::$defaultTool = $tool; + $tool->platform = $platform; $outcome = new Outcome((string) $score); @@ -192,13 +210,16 @@ protected function tryOutcomeService(int $resource, string $ext_account, int $a_ /** - * @inheritdoc + * Handle an event in a listener. + * @param string $a_component component, e.g. "components/ILIAS/Forum" or "components/ILIAS/User" + * @param string $a_event event e.g. "createUser", "updateUser", "deleteUser", ... + * @param array $a_parameter parameter array (assoc), array("name" => ..., "phone_office" => ...) */ public static function handleEvent(string $a_component, string $a_event, array $a_parameter): void { - $logger = ilLoggerFactory::getLogger('ltis'); + global $DIC; + $logger = $DIC->logger()->root(); $logger->info('Handling event: ' . $a_event . ' from ' . $a_component); - if ($a_component == 'components/ILIAS/Tracking') { if ($a_event == 'updateStatus') { $listener = self::getInstance(); diff --git a/components/ILIAS/LTIProvider/classes/class.ilLTICronOutcomeService.php b/components/ILIAS/LTIProvider/classes/class.ilLTICronOutcomeService.php index 0a67f37772b2..7c0d24b1fcd3 100644 --- a/components/ILIAS/LTIProvider/classes/class.ilLTICronOutcomeService.php +++ b/components/ILIAS/LTIProvider/classes/class.ilLTICronOutcomeService.php @@ -91,7 +91,7 @@ public function run(): JobResult $result = new \ILIAS\Cron\Job\JobResult(); $result->setStatus($status); - ilLTIAppEventListener::handleCronUpdate($since); + ilLTIProviderAppEventListener::handleCronUpdate($since); $result->setStatus(JobResult::STATUS_OK); return $result; diff --git a/components/ILIAS/LTIProvider/classes/class.ilLTIDataConnector.php b/components/ILIAS/LTIProvider/classes/class.ilLTIDataConnector.php index fee5f32e4dff..6aaf15c2bd8f 100644 --- a/components/ILIAS/LTIProvider/classes/class.ilLTIDataConnector.php +++ b/components/ILIAS/LTIProvider/classes/class.ilLTIDataConnector.php @@ -517,6 +517,7 @@ public function saveToolConsumerILIAS(ilLTIPlatform $platform): bool { $ilDB = $this->database; + $signatureMethod = \ceLTIc\LTI\Enum\LtiVersion::V1P3 === $platform->ltiVersion ? "RS256" : "HMAC-SHA1"; $id = $platform->getRecordId(); $key = $platform->getKey(); $protected = ($platform->protected) ? 1 : 0; @@ -551,57 +552,59 @@ public function saveToolConsumerILIAS(ilLTIPlatform $platform): bool // $query = "INSERT INTO {$this->dbTableNamePrefix}" . $this->CONSUMER_TABLE_NAME . ' (consumer_key256, consumer_key, name, ' . $query = 'INSERT INTO lti2_consumer (consumer_key, name, ' . 'secret, lti_version, consumer_name, consumer_version, consumer_guid, profile, tool_proxy, settings, protected, enabled, ' . - 'enable_from, enable_until, last_access, created, updated, consumer_pk, ext_consumer_id, ref_id, platform_id, client_id, deployment_id, public_key) ' . - 'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'; + 'enable_from, enable_until, last_access, created, updated, consumer_pk, ext_consumer_id, ref_id, platform_id, client_id, deployment_id, public_key, signature_method) ' . + 'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'; $types = array("text", - "text", - "text", - "text", - "text", - "text", - "text", - "text", - "text", - "text", - "integer", - "integer", - "timestamp", - "timestamp", - "timestamp", - "timestamp", - "timestamp", - "integer", - 'integer', - 'integer', - "text", - "text", - "text", - "text" + "text", + "text", + "text", + "text", + "text", + "text", + "text", + "text", + "text", + "integer", + "integer", + "timestamp", + "timestamp", + "timestamp", + "timestamp", + "timestamp", + "integer", + 'integer', + 'integer', + "text", + "text", + "text", + "text", + "text" ); $values = array($key, - $platform->name, - $platform->secret, - $platform->ltiVersion->value, - $platform->consumerName, - $platform->consumerVersion, - $platform->consumerGuid, - $profile, - $platform->toolProxy, - $settingsValue, - $protected, - $enabled, - $from, - $until, - $last, - $now, - $now, - $id, - $platform->getExtConsumerId(), - $platform->getRefId(), - (string) $platform->platformId, - $platform->clientId, - $platform->deploymentId, - $platform->rsaKey + $platform->name, + $platform->secret, + $platform->ltiVersion->value, + $platform->consumerName, + $platform->consumerVersion, + $platform->consumerGuid, + $profile, + $platform->toolProxy, + $settingsValue, + $protected, + $enabled, + $from, + $until, + $last, + $now, + $now, + $id, + $platform->getExtConsumerId(), + $platform->getRefId(), + (string) $platform->platformId, + $platform->clientId, + $platform->deploymentId, + $platform->rsaKey, + $signatureMethod ); $ilDB->manipulateF($query, $types, $values); } else { @@ -612,51 +615,55 @@ public function saveToolConsumerILIAS(ilLTIPlatform $platform): bool 'secret= %s, lti_version = %s, consumer_name = %s, consumer_version = %s, consumer_guid = %s, ' . 'profile = %s, tool_proxy = %s, settings = %s, protected = %s, enabled = %s, ' . 'enable_from = %s, enable_until = %s, last_access = %s, updated = %s, ' . - 'platform_id = %s, client_id = %s, deployment_id = %s, public_key = %s ' . + 'platform_id = %s, client_id = %s, deployment_id = %s, public_key = %s, signature_method = %s ' . 'WHERE consumer_pk = %s'; $types = array("text", - "text", - "text", - "text", - "text", - "text", - "text", - "text", - "text", - "text", - "integer", - "integer", - "timestamp", - "timestamp", - "timestamp", - "timestamp", - "text", - "text", - "text", - "text", - "integer" + "text", + "text", + "text", + "text", + "text", + "text", + "text", + "text", + "text", + "integer", + "integer", + "timestamp", + "timestamp", + "timestamp", + "timestamp", + "text", + "text", + "text", + "text", + "text", + "integer" + ); $values = array($key, - $platform->name, - $platform->secret, - $platform->ltiVersion->value, - $platform->consumerName, - $platform->consumerVersion, - $platform->consumerGuid, - $profile, - $platform->toolProxy, - $settingsValue, - $protected, - $enabled, - $from, - $until, - $last, - $now, - $platform->platformId, - $platform->clientId, - $platform->deploymentId, - $platform->rsaKey, - $id + $platform->name, + $platform->secret, + $platform->ltiVersion->value, + $platform->consumerName, + $platform->consumerVersion, + $platform->consumerGuid, + $profile, + $platform->toolProxy, + $settingsValue, + $protected, + $enabled, + $from, + $until, + $last, + $now, + $platform->platformId, + $platform->clientId, + $platform->deploymentId, + $platform->rsaKey, + $signatureMethod, + $id + ); $ilDB->manipulateF($query, $types, $values); } @@ -1214,24 +1221,24 @@ public function saveResourceLink(ResourceLink $resourceLink): bool 'lti_resource_link_id, settings, primary_resource_link_pk, share_approved, created, updated) ' . 'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)'; $types = array("integer", - "integer", - "integer", - "text", - "text", - "integer", - "integer", - "timestamp", - "timestamp" + "integer", + "integer", + "text", + "text", + "integer", + "integer", + "timestamp", + "timestamp" ); $values = array($id, - $platformId, - $contextId, - $resourceLink->getId(), - $settingsValue, - $primaryResourceLinkId, - $approved, - $now, - $now + $platformId, + $contextId, + $resourceLink->getId(), + $settingsValue, + $primaryResourceLinkId, + $approved, + $now, + $now ); } elseif (!is_null($contextId)) { $query = "UPDATE {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . ' SET ' . @@ -1240,13 +1247,13 @@ public function saveResourceLink(ResourceLink $resourceLink): bool 'WHERE (context_pk = %s) AND (resource_link_pk = %s)'; $types = array("integer", "text", "text", "integer", "integer", "timestamp", "integer", "integer"); $values = array($platformId, - $resourceLink->getId(), - $settingsValue, - $primaryResourceLinkId, - $approved, - $now, - $contextId, - $id + $resourceLink->getId(), + $settingsValue, + $primaryResourceLinkId, + $approved, + $now, + $contextId, + $id ); } else { $query = "UPDATE {$this->dbTableNamePrefix}" . DataConnector::RESOURCE_LINK_TABLE_NAME . ' SET ' . @@ -1255,13 +1262,13 @@ public function saveResourceLink(ResourceLink $resourceLink): bool 'WHERE (consumer_pk = %s) AND (resource_link_pk = %s)'; $types = array("integer", "text", "text", "integer", "integer", "timestamp", "integer", "integer"); $values = array($contextId, - $resourceLink->getId(), - $settingsValue, - $primaryResourceLinkId, - $approved, - $now, - $platformId, - $id + $resourceLink->getId(), + $settingsValue, + $primaryResourceLinkId, + $approved, + $now, + $platformId, + $id ); } $ok = (bool) $ilDB->manipulateF($query, $types, $values); diff --git a/components/ILIAS/LTIProvider/classes/class.ilLTIProviderAppEventListener.php b/components/ILIAS/LTIProvider/classes/class.ilLTIProviderAppEventListener.php new file mode 100644 index 000000000000..1c15904e8d27 --- /dev/null +++ b/components/ILIAS/LTIProvider/classes/class.ilLTIProviderAppEventListener.php @@ -0,0 +1,192 @@ +logger = $DIC->logger()->root(); + $this->connector = new ilLTIDataConnector(); + } + + public static function handleCronUpdate(ilDateTime $since): bool + { + $listener = self::getInstance(); + $listener->doCronUpdate($since); + return true; + } + + protected static function getInstance(): ilLTIProviderAppEventListener + { + if (!self::$instance instanceof ilLTIProviderAppEventListener) { + self::$instance = new self(); + } + return self::$instance; + } + + protected function doCronUpdate(ilDateTime $since): void + { + $this->logger->info('Starting cron update for lti outcome service'); + + $resources = $this->connector->lookupResourcesForAllUsersSinceDate($since); + foreach ($resources as $consumer_ext_account => $user_resources) { + list($consumer, $ext_account) = explode('__', $consumer_ext_account, 2); + + $login = ilObjUser::_checkExternalAuthAccount('lti_' . $consumer, $ext_account); + if (!$login) { + $this->logger->info('No user found for lti_' . $consumer . ' -> ' . $ext_account); + continue; + } + $usr_id = ilObjUser::_lookupId($login); + foreach ($user_resources as $resource_info) { + list($resource_id, $resource_ref_id) = explode('__', $resource_info); + $this->logger->info('Found resource: ' . $resource_info . " for user: " . $usr_id . " resource_id: " . $resource_id . " resource_ref_id: " . $resource_ref_id); + + // lookup lp status + $status = ilLPStatus::_lookupStatus( + ilObject::_lookupObjId((int) $resource_ref_id), + $usr_id + ); + $percentage = ilLPStatus::_lookupPercentage( + ilObject::_lookupObjId((int) $resource_ref_id), + $usr_id + ); + $percentage = $this->definePercentageByObjectId($status, $resource_ref_id, $percentage); + $this->tryOutcomeService((int) $resource_id, $ext_account, $status, $percentage); + } + } + } + + protected function definePercentageByObjectId(int|null $status, string $obj_id, int|null $percentage): int + { + global $DIC; + $logger = $DIC->logger()->root(); + $logger->debug('definePercentageByObjectId'); + $indentifier = ilObjectFactory::getInstanceByRefId((int) $obj_id)->getType(); + $logger->info('Object type: ' . $indentifier . " for object id: " . $obj_id); + if (in_array($indentifier, ['crs', 'grp'])) { + if ($status == ilLPStatus::LP_STATUS_COMPLETED_NUM || $status == ilLPStatus::LP_STATUS_FAILED_NUM) { + $percentage = 100; + } + } + return $percentage; + } + + public static function handleEvent(string $a_component, string $a_event, array $a_parameter): void + { + global $DIC; + $logger = $DIC->logger()->root(); + $logger->info('Handling event: ' . $a_event . ' from ' . $a_component); + $logger->info("public static function handleEvent --- ilLTIProviderAppEventListener " . $a_event . ' from ' . $a_component); + if ($a_component == 'components/ILIAS/Tracking') { + if ($a_event == 'updateStatus') { + $listener = self::getInstance(); + $listener->handleUpdateStatus( + $a_parameter['obj_id'], + $a_parameter['usr_id'], + $a_parameter['status'], + $a_parameter['percentage'] + ); + } + } + } + + protected function isLTIAuthMode(string $auth_mode): bool + { + return strpos($auth_mode, 'lti_') === 0; + } + + protected function handleUpdateStatus(int $a_obj_id, int $a_usr_id, int $a_status, int $a_percentage): void + { + global $DIC; + $logger = $DIC->logger()->root(); + $logger->info('Handle update status'); + $auth_mode = ilObjUser::_lookupAuthMode($a_usr_id); + if (!$this->isLTIAuthMode($auth_mode)) { + $this->logger->info('Ignoring update for non-LTI-user.'); + return; + } + $ext_account = ilObjUser::_lookupExternalAccount($a_usr_id); + list($lti, $consumer) = explode('_', $auth_mode); + + // iterate through all references + $refs = ilObject::_getAllReferences($a_obj_id); + $this->logger->info('Refs for : ' . $a_obj_id . ': ' . count($refs)); + foreach ((array) $refs as $ref_id) { + $resources = $this->connector->lookupResourcesForUserObjectRelation( + $ref_id, + $ext_account, + (int) $consumer + ); + + $this->logger->info('Resources for update:'); + $this->logger->info("resources: " . json_encode($resources)); + + foreach ($resources as $resource) { + $this->tryOutcomeService((int) $resource, $ext_account, $a_status, $a_percentage); + } + } + } + + protected function tryOutcomeService(int $resource, string $ext_account, int $a_status, int $a_percentage): void + { + $resource_link = ResourceLink::fromRecordId($resource, $this->connector); + if (!$resource_link->hasOutcomesService()) { + $this->logger->info('No outcome service available for resource id: ' . $resource); + return; + } + $this->logger->info('Trying outcome service with status ' . $a_status . ' and percentage ' . $a_percentage); + $user = UserResult::fromResourceLink($resource_link, $ext_account); + + if (!$a_percentage && $a_status != ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM) { + $score = 0; + } else { + if ($a_status == ilLPStatus::LP_STATUS_COMPLETED_NUM || $a_status == ilLPStatus::LP_STATUS_FAILED_NUM) { + $score = $a_percentage / 100; + } elseif ( + $a_status == ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM + ) { + $score = null; + } else { + $score = 0; + } + } + + $this->logger->info('Sending score: ' . (string) $score); + + $outcome = new Outcome((string) $score); + + $status = $resource_link->doOutcomesService( + ServiceAction::Write, + $outcome, + $user + ); + $this->logger->info('Outcome service request status: ' . $status); + } +} diff --git a/components/ILIAS/LTIProvider/resources/lti.php b/components/ILIAS/LTIProvider/resources/lti.php index ac09b6111538..25a5dbb502d5 100644 --- a/components/ILIAS/LTIProvider/resources/lti.php +++ b/components/ILIAS/LTIProvider/resources/lti.php @@ -18,15 +18,15 @@ declare(strict_types=1); -require_once("../vendor/composer/vendor/autoload.php"); -ilContext::init(ilContext::CONTEXT_LTI_PROVIDER); - -// This is done to replace the deprecated method $DIC->ctrl()->setCmd $_GET['cmd'] = 'post'; $_POST['cmd'] = 'doLTIAuthentication'; -ilInitialisation::initILIAS(); +require_once '../vendor/composer/vendor/autoload.php'; +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); + +ilContext::init(ilContext::CONTEXT_LTI_PROVIDER); global $DIC; diff --git a/components/ILIAS/Language/classes/Setup/class.ilSetupLanguage.php b/components/ILIAS/Language/classes/Setup/class.ilSetupLanguage.php index ee77f905e413..89b7e55efa37 100755 --- a/components/ILIAS/Language/classes/Setup/class.ilSetupLanguage.php +++ b/components/ILIAS/Language/classes/Setup/class.ilSetupLanguage.php @@ -519,6 +519,9 @@ protected function insertLanguage(string $lang_key, string $scope = ""): void " AND module = " . $ilDB->quote($module, "text"); $set = $ilDB->query($q); $row = $ilDB->fetchAssoc($set); + if ($row === null) { + continue; + } $arr2 = unserialize($row["lang_array"], ["allowed_classes" => false]); if (is_array($arr2)) { $lang_arr = array_merge($arr2, $lang_arr); diff --git a/components/ILIAS/Language/classes/class.ilLanguageFolderTable.php b/components/ILIAS/Language/classes/class.ilLanguageFolderTable.php index 0a6a2f85d112..544677f56c0f 100644 --- a/components/ILIAS/Language/classes/class.ilLanguageFolderTable.php +++ b/components/ILIAS/Language/classes/class.ilLanguageFolderTable.php @@ -167,7 +167,7 @@ public function getRows( foreach ($this->getItems($range, $order) as $idx => $record) { $obj_id = (string) $record['obj_id']; $language = $record['name']; - if ($record["status"]) { + if (array_key_exists('status', $record) and $record['status'] !== '') { $language .= ' (' . $this->lng->txt($record["status"]) . ')'; } $to_language = $this->url_builder diff --git a/components/ILIAS/Language/classes/class.ilLanguageStatisticsTable.php b/components/ILIAS/Language/classes/class.ilLanguageStatisticsTable.php index 32985784d380..5d98af6c60fe 100644 --- a/components/ILIAS/Language/classes/class.ilLanguageStatisticsTable.php +++ b/components/ILIAS/Language/classes/class.ilLanguageStatisticsTable.php @@ -82,7 +82,7 @@ public function getItems(?Range $range = null, ?Order $order = null): array $total["unchanged"] = $total["unchanged"]; array_unshift($data, $total); - if($order) { + if ($order) { list($order_field, $order_direction) = $order->join([], fn($ret, $key, $value) => [$key, $value]); usort( $data, diff --git a/components/ILIAS/Language/classes/class.ilObjLanguage.php b/components/ILIAS/Language/classes/class.ilObjLanguage.php index e7636f49a389..eaac24092f6b 100755 --- a/components/ILIAS/Language/classes/class.ilObjLanguage.php +++ b/components/ILIAS/Language/classes/class.ilObjLanguage.php @@ -86,6 +86,23 @@ public static function getInstalledLanguages(): array } + /** + * Return the language keys of the installed languages + * + * @return array + */ + public static function getLangKeysOfInstalledLanguages(): array + { + $lang_keys = []; + foreach (ilObject::_getObjectsByType("lng") as $lang) { + if ($lang['desc'] === 'installed') { + $lang_keys[] = $lang['title']; + } + } + return $lang_keys; + } + + /** * get language key * diff --git a/components/ILIAS/Language/classes/class.ilObjLanguageDBAccess.php b/components/ILIAS/Language/classes/class.ilObjLanguageDBAccess.php index a8f72b29bde4..f3a53f90daab 100755 --- a/components/ILIAS/Language/classes/class.ilObjLanguageDBAccess.php +++ b/components/ILIAS/Language/classes/class.ilObjLanguageDBAccess.php @@ -129,6 +129,9 @@ public function replaceLangModules(array $lang_array): void " AND module = " . $this->ilDB->quote($module, "text"); $set = $this->ilDB->query($q); $row = $this->ilDB->fetchAssoc($set); + if ($row === null) { + continue; + } $arr2 = unserialize($row["lang_array"], ["allowed_classes" => false]); if (is_array($arr2)) { $lang_arr = array_merge($arr2, $lang_arr); diff --git a/components/ILIAS/Language/classes/class.ilObjLanguageExtGUI.php b/components/ILIAS/Language/classes/class.ilObjLanguageExtGUI.php index 2881ad956a1f..dc5e5bac27dd 100755 --- a/components/ILIAS/Language/classes/class.ilObjLanguageExtGUI.php +++ b/components/ILIAS/Language/classes/class.ilObjLanguageExtGUI.php @@ -59,6 +59,8 @@ public function __construct($a_data, int $a_id = 0, bool $a_call_by_reference = $ilClientIniFile = $DIC->clientIni(); $ilCtrl = $DIC->ctrl(); $lng = $DIC->language(); + $this->http = $DIC['http']; + $this->refinery = $DIC['refinery']; // language maintenance strings are defined in administration $lng->loadLanguageModule("administration"); @@ -70,11 +72,13 @@ public function __construct($a_data, int $a_id = 0, bool $a_call_by_reference = // type and id of get the bound object $this->type = "lng"; $obj_id_get = 0; + if ($this->http->wrapper()->query()->has("obj_id")) { $obj_id_get = $this->http->wrapper()->query()->retrieve("obj_id", $this->refinery->kindlyTo()->int()); } elseif ($this->http->wrapper()->query()->has("language_folder_obj_ids")) { $obj_id_get = $this->http->wrapper()->query()->retrieve("language_folder_obj_ids", $this->refinery->kindlyTo()->int()); } + if (!$this->id = $obj_id_get) { $this->id = ilObjLanguageAccess::_lookupId($lng->getUserLanguage()); } diff --git a/components/ILIAS/Language/classes/class.ilObjLanguageFolderGUI.php b/components/ILIAS/Language/classes/class.ilObjLanguageFolderGUI.php index e511768e00fa..03a635cc0d19 100755 --- a/components/ILIAS/Language/classes/class.ilObjLanguageFolderGUI.php +++ b/components/ILIAS/Language/classes/class.ilObjLanguageFolderGUI.php @@ -525,7 +525,6 @@ public function executeCommand(): void switch ($next_class) { case "ilpermissiongui": - include_once "Services/AccessControl/classes/class.ilPermissionGUI.php"; $perm_gui = new ilPermissionGUI($this); $this->tabs_gui->activateTab("perm_settings"); $this->ctrl->forwardCommand($perm_gui); @@ -889,7 +888,7 @@ public function downloadDeprecatedObject(): void protected function getUrl(string $action, ?array $lang_ids = null): string { $url_builder = $this->url_builder->withParameter($this->action_token, $action); - if($lang_ids) { + if ($lang_ids) { $url_builder = $url_builder->withParameter($this->id_token, $lang_ids); } return $url_builder->buildURI()->__toString(); diff --git a/components/ILIAS/Language/classes/class.ilPluginLanguage.php b/components/ILIAS/Language/classes/class.ilPluginLanguage.php index bd81eda62dfb..277242f3d78c 100755 --- a/components/ILIAS/Language/classes/class.ilPluginLanguage.php +++ b/components/ILIAS/Language/classes/class.ilPluginLanguage.php @@ -92,12 +92,7 @@ public function updateLanguages(?array $a_lang_keys = null): void { // get the keys of all installed languages if keys are not provided if (!isset($a_lang_keys)) { - $a_lang_keys = []; - foreach (ilObjLanguage::getInstalledLanguages() as $langObj) { - if ($langObj->isInstalled()) { - $a_lang_keys[] = $langObj->getKey(); - } - } + $a_lang_keys = ilObjLanguage::getLangKeysOfInstalledLanguages(); } $langs = $this->getAvailableLangFiles(); diff --git a/components/ILIAS/LearningHistory/Administration/classes/class.ilObjLearningHistorySettingsGUI.php b/components/ILIAS/LearningHistory/Administration/classes/class.ilObjLearningHistorySettingsGUI.php index 3eee9495b07e..e05b96021518 100755 --- a/components/ILIAS/LearningHistory/Administration/classes/class.ilObjLearningHistorySettingsGUI.php +++ b/components/ILIAS/LearningHistory/Administration/classes/class.ilObjLearningHistorySettingsGUI.php @@ -137,6 +137,9 @@ public function initForm(): \ILIAS\UI\Component\Input\Container\Form\Standard ) ->withValue((bool) $setting->get("enable_learning_history")); + if (!$this->access->checkAccess("write", "", $this->object->getRefId())) { + $fields["enable_learning_history"] = $fields["enable_learning_history"]->withDisabled(true); + } // section $section1 = $f->input()->field()->section($fields, $lng->txt("settings")); @@ -147,19 +150,23 @@ public function initForm(): \ILIAS\UI\Component\Input\Container\Form\Standard public function saveSettings(): void { - $request = $this->request; - $form = $this->initForm(); - $lng = $this->lng; $ctrl = $this->ctrl; - $setting = $this->setting; - - if ($request->getMethod() === "POST") { - $form = $form->withRequest($request); - $data = $form->getData(); - if (is_array($data["sec"])) { - $setting->set("enable_learning_history", (int) ($data["sec"]["enable_learning_history"])); - $this->main_tpl->setOnScreenMessage('info', $lng->txt("msg_obj_modified"), true); + $lng = $this->lng; + if ($this->access->checkAccess("write", "", $this->object->getRefId())) { + $request = $this->request; + $form = $this->initForm(); + $setting = $this->setting; + + if ($request->getMethod() === "POST") { + $form = $form->withRequest($request); + $data = $form->getData(); + if (is_array($data["sec"])) { + $setting->set("enable_learning_history", (int) ($data["sec"]["enable_learning_history"])); + $this->main_tpl->setOnScreenMessage('info', $lng->txt("msg_obj_modified"), true); + } } + } else { + $this->main_tpl->setOnScreenMessage('failure', $lng->txt("no_permission"), true); } $ctrl->redirect($this, "editSettings"); } diff --git a/components/ILIAS/LearningModule/Editing/SubObjectRetrieval.php b/components/ILIAS/LearningModule/Editing/SubObjectRetrieval.php index 66c9327a4b02..0689727c6f11 100644 --- a/components/ILIAS/LearningModule/Editing/SubObjectRetrieval.php +++ b/components/ILIAS/LearningModule/Editing/SubObjectRetrieval.php @@ -95,6 +95,7 @@ public function getData( if (!in_array($this->transl, ["-", ""])) { $trans_title = $this->getChildTitle($child); } + yield [ "id" => $child["child"], "deactivated_elements" => $deactivated_elements, diff --git a/components/ILIAS/LearningModule/Editing/SubObjectTableBuilder.php b/components/ILIAS/LearningModule/Editing/SubObjectTableBuilder.php index 4944684c8640..4a20231dc1cb 100644 --- a/components/ILIAS/LearningModule/Editing/SubObjectTableBuilder.php +++ b/components/ILIAS/LearningModule/Editing/SubObjectTableBuilder.php @@ -75,6 +75,7 @@ protected function transformRow(array $data_row): array { $lng = $this->domain->lng(); $f = $this->gui->ui()->factory(); + $ctrl = $this->gui->ctrl(); if ($data_row["type"] === "pg") { $img_sc = $data_row["scheduled"] ? "_sc" @@ -96,10 +97,28 @@ protected function transformRow(array $data_row): array $img = "standard/icon_st.svg"; $alt = $lng->txt("st"); } + $target = "#"; + if ($data_row["type"] === "pg") { + $ctrl->setParameterByClass(\ilLMPageGUI::class, "obj_id", $data_row["id"]); + $target = $ctrl->getLinkTargetByClass([ + \ilObjLearningModuleGUI::class, + \ilLMPageObjectGUI::class, + \ilLMPageGUI::class + ], "edit"); + } elseif ($data_row["type"] === "st") { + $ctrl->setParameterByClass(\ilStructureObjectGUI::class, "obj_id", $data_row["id"]); + $target = $ctrl->getLinkTargetByClass([ + \ilObjLearningModuleGUI::class, + \ilStructureObjectGUI::class, + EditSubObjectsGUI::class + ], "editPages"); + } + + $title = $f->link()->standard($data_row["title"], $target); return [ "id" => $data_row["id"], "type" => $f->symbol()->icon()->custom(\ilUtil::getImagePath($img), $alt), - "title" => $data_row["title"], + "title" => $title, "trans_title" => $data_row["trans_title"], ]; } @@ -111,127 +130,95 @@ protected function build(TableAdapterGUI $table): TableAdapterGUI $transl = $this->gui->editing()->request()->getTranslation(); $table = $table ->iconColumn("type", $lng->txt("type")) - ->textColumn("title", $lng->txt("title")); + ->linkColumn("title", $lng->txt("title")); if (!in_array($transl, ["-", ""])) { $table = $table->textColumn("trans_title", $lng->txt("title") . " (" . $lng->txt("meta_l_" . $transl) . ")"); } if ($this->type === "st") { - $acts = [ - [ - "editPages", - $lng->txt("edit"), - [\ilObjLearningModuleGUI::class, \ilStructureObjectGUI::class, EditSubObjectsGUI::class], - "editPages", - "obj_id" - ], - [ - "insertChapterAfter", - $lng->txt("lm_insert_chapter_after"), - [EditSubObjectsGUI::class], - "insertChapterAfter", - "target_id" - ], - [ - "insertChapterBefore", - $lng->txt("lm_insert_chapter_before"), - [EditSubObjectsGUI::class], - "insertChapterBefore", - "target_id" - ] - ]; + $table = $table->singleRedirectAction( + "editPages", + $lng->txt("lm_list_pages"), + [\ilObjLearningModuleGUI::class, \ilStructureObjectGUI::class, EditSubObjectsGUI::class], + "editPages", + "obj_id" + ); + $table = $table->singleAction( + "editTitle", + $lng->txt("cont_edit_title"), + true + ); + $table = $table->singleAction( + "insertChapterAfter", + $lng->txt("lm_insert_chapter_after"), + true + ); + $table = $table->singleAction( + "insertChapterBefore", + $lng->txt("lm_insert_chapter_before"), + true + ); if ($user->clipboardHasObjectsOfType("st")) { - $acts[] = [ + $table = $table->singleRedirectAction( "insertChapterClipAfter", $lng->txt("lm_insert_chapter_clip_after"), [EditSubObjectsGUI::class], "insertChapterClipAfter", "target_id" - ]; - $acts[] = [ + ); + $table = $table->singleRedirectAction( "insertChapterClipBefore", $lng->txt("lm_insert_chapter_clip_before"), [EditSubObjectsGUI::class], "insertChapterClipBefore", "target_id" - ]; + ); } } else { - $acts = [ - [ - "editPage", - $lng->txt("edit"), - [\ilObjLearningModuleGUI::class, \ilLMPageObjectGUI::class], - "edit", - "obj_id" - ], - [ - "insertPageAfter", - $lng->txt("lm_insert_page_after"), - [EditSubObjectsGUI::class], - "insertPageAfter", - "target_id" - ], - [ - "insertPageBefore", - $lng->txt("lm_insert_page_before"), - [EditSubObjectsGUI::class], - "insertPageBefore", - "target_id" - ] - ]; + $table = $table->singleRedirectAction( + "editPage", + $lng->txt("lm_edit_content"), + [\ilObjLearningModuleGUI::class, \ilLMPageObjectGUI::class], + "edit", + "obj_id" + ); + $table = $table->singleAction( + "editTitle", + $lng->txt("cont_edit_title"), + true + ); + $table = $table->singleAction( + "insertPageAfter", + $lng->txt("lm_insert_page_after"), + true + ); + $table = $table->singleAction( + "insertPageBefore", + $lng->txt("lm_insert_page_before"), + true + ); if ($user->clipboardHasObjectsOfType("pg")) { - $acts[] = [ + $table = $table->singleRedirectAction( "insertPageClipAfter", $lng->txt("lm_insert_page_clip_after"), [EditSubObjectsGUI::class], "insertPageClipAfter", "target_id" - ]; - $acts[] = [ + ); + $table = $table->singleRedirectAction( "insertPageClipBefore", $lng->txt("lm_insert_page_clip_before"), [EditSubObjectsGUI::class], "insertPageClipBefore", "target_id" - ]; + ); } - if (count($this->page_layouts) > 0) { - $acts[] = [ - "insertLayoutAfter", - $lng->txt("lm_insert_layout_after"), - [EditSubObjectsGUI::class], - "insertLayoutAfter", - "target_id" - ]; - $acts[] = [ - "insertLayoutBefore", - $lng->txt("lm_insert_layout_before"), - [EditSubObjectsGUI::class], - "insertLayoutBefore", - "target_id" - ]; - } - } - foreach ($acts as $a) { - $table = $table->singleRedirectAction( - $a[0], - $a[1], - $a[2], - $a[3], - $a[4] - ); } $table = $table ->standardAction( "delete", $lng->txt("delete") ) - ->singleAction( - "editTitle", - $lng->txt("cont_edit_title"), - true - ) ->standardAction( "cutItems", $lng->txt("cut") diff --git a/components/ILIAS/LearningModule/Editing/class.EditSubObjectsGUI.php b/components/ILIAS/LearningModule/Editing/class.EditSubObjectsGUI.php index c430e529b3c1..0f3e0b3c07b1 100644 --- a/components/ILIAS/LearningModule/Editing/class.EditSubObjectsGUI.php +++ b/components/ILIAS/LearningModule/Editing/class.EditSubObjectsGUI.php @@ -74,7 +74,9 @@ public function executeCommand(): void "insertChapterClip", "insertChapterClipBefore", "insertChapterClipAfter", "activatePages", "insertLayoutBefore", "insertLayoutAfter", "insertPageFromLayout", - "switchToLanguage", "editMasterLanguage" + "switchToLanguage", "editMasterLanguage", + "savePageAfter", "savePageBefore", + "saveChapterAfter", "saveChapterBefore", ])) { $this->$cmd(); } @@ -133,29 +135,46 @@ protected function list(): void $ml_head = \ilObjLearningModuleGUI::getMultiLangHeader($this->lm_id, $this); - if ($retrieval->count() === 0) { - if ($this->sub_type === "st") { + if ($this->sub_type === "st") { + $modal = $this->gui->modal( + $lng->txt("lm_insert_chapter") + )->form($this->getAddPageForm("saveChapterAfter"))->getAsyncTriggerButtonComponents( + $lng->txt("lm_insert_chapter"), + $this->gui->ctrl()->getLinkTargetByClass(self::class, "insertChapterAfter"), + false + ); + $this->gui->toolbar()->addComponent($modal["button"]); + $this->gui->toolbar()->addComponent($modal["modal"]); + /* + $this->gui->button( + $lng->txt("lm_insert_chapter"), + $ctrl->getLinkTargetByClass(self::class, "insertFirstChapter") + )->toToolbar();*/ + if ($user->clipboardHasObjectsOfType("st")) { $this->gui->button( - $lng->txt("lm_insert_chapter"), - $ctrl->getLinkTargetByClass(self::class, "insertFirstChapter") + $lng->txt("lm_insert_chapter_clip"), + $ctrl->getLinkTargetByClass(self::class, "insertChapterClip") )->toToolbar(); - if ($user->clipboardHasObjectsOfType("st")) { - $this->gui->button( - $lng->txt("lm_insert_chapter_clip"), - $ctrl->getLinkTargetByClass(self::class, "insertChapterClip") - )->toToolbar(); - } - } else { + } + } else { + $modal = $this->gui->modal( + $lng->txt("lm_insert_page") + )->form($this->getAddPageForm("savePageAfter"))->getAsyncTriggerButtonComponents( + $lng->txt("lm_insert_page"), + $this->gui->ctrl()->getLinkTargetByClass(self::class, "insertPageAfter"), + false + ); + $this->gui->toolbar()->addComponent($modal["button"]); + $this->gui->toolbar()->addComponent($modal["modal"]); + /*$this->gui->button( + $lng->txt("lm_insert_page"), + $ctrl->getLinkTargetByClass(self::class, "insertFirstPage") + )->toToolbar();*/ + if ($user->clipboardHasObjectsOfType("pg")) { $this->gui->button( - $lng->txt("lm_insert_page"), - $ctrl->getLinkTargetByClass(self::class, "insertFirstPage") + $lng->txt("lm_insert_page_clip"), + $ctrl->getLinkTargetByClass(self::class, "insertPageClip") )->toToolbar(); - if ($user->clipboardHasObjectsOfType("pg")) { - $this->gui->button( - $lng->txt("lm_insert_page_clip"), - $ctrl->getLinkTargetByClass(self::class, "insertPageClip") - )->toToolbar(); - } } } $table = $this->getTable(); @@ -164,9 +183,18 @@ protected function list(): void $main_tpl->addOnloadCode("window.setTimeout(() => { il.repository.core.trigger('il-lm-editor-tree'); }, 500);"); } - public function insertChapterClipBefore(): void + protected function getCurrentParentId(): int { $parent = $this->sub_obj_id; + if ($parent === 0) { + $parent = $this->lm_tree->readRootId(); + } + return $parent; + } + + public function insertChapterClipBefore(): void + { + $parent = $this->getCurrentParentId(); $target_id = $this->request->getTargetId(); $before_target = \ilTree::POS_FIRST_NODE; foreach ($this->lm_tree->getChilds($parent) as $node) { @@ -287,17 +315,51 @@ public function insertFirstPage(): void $this->sub_obj_id ); } - public function insertPageAfter(): void + public function insertPageAfter(int $id = 0): void { + $lng = $this->domain->lng(); + $this->gui->ctrl()->setParameterByClass( + self::class, + "target_id", + $id + ); + $this->gui->clearAsnyOnloadCode(); + $modal = $this->gui->modal($lng->txt("lm_insert_page"))->form($this->getAddPageForm("savePageAfter")); + $modal->send(); + } + + public function savePageAfter(): void + { + $mt = $this->gui->ui()->mainTemplate(); + $lng = $this->domain->lng(); $target_id = $this->request->getTargetId(); $this->insertPage( $this->sub_obj_id, - $target_id + $target_id, + $this->getTitlesFromForm(), + $this->getLayoutIdFromForm() ); + $mt->setOnScreenMessage("success", $lng->txt("msg_obj_modified"), true); + $this->gui->ctrl()->redirect($this, "list"); } - public function insertPageBefore(): void + public function insertPageBefore(int $id): void { + $lng = $this->domain->lng(); + $this->gui->ctrl()->setParameterByClass( + self::class, + "target_id", + $id + ); + $this->gui->clearAsnyOnloadCode(); + $modal = $this->gui->modal($lng->txt("lm_insert_page"))->form($this->getAddPageForm("savePageBefore")); + $modal->send(); + } + + public function savePageBefore(): void + { + $mt = $this->gui->ui()->mainTemplate(); + $lng = $this->domain->lng(); $parent = $this->sub_obj_id; $target_id = $this->request->getTargetId(); $before_target = \ilTree::POS_FIRST_NODE; @@ -310,30 +372,44 @@ public function insertPageBefore(): void } $this->insertPage( $parent, - $before_target + $before_target, + $this->getTitlesFromForm(), + $this->getLayoutIdFromForm() ); + $mt->setOnScreenMessage("success", $lng->txt("msg_obj_modified"), true); + $this->gui->ctrl()->redirect($this, "list"); } protected function insertPage( int $parent_id = 0, - int $target = \ilTree::POS_LAST_NODE + int $target = 0, + array $titles = [], + int $layout_id = 0 ): void { $lng = $this->domain->lng(); $ctrl = $this->gui->ctrl(); - $chap = new \ilLMPageObject($this->lm); - $chap->setType("pg"); - $chap->setTitle($lng->txt("cont_new_page")); - $chap->setLMId($this->lm_id); - $chap->create(); - \ilLMObject::putInTree($chap, $parent_id, $target); + $page = new \ilLMPageObject($this->lm); + $page->setType("pg"); + $page->setTitle($lng->txt("cont_new_page")); + $page->setLMId($this->lm_id); + $page->create(false, false, $layout_id); + \ilLMObject::putInTree($page, $parent_id, $target); - /* - if ($parent_id === $this->lm_tree->readRootId()) { - $ctrl->setParameterByClass(static::class, "obj_id", 0); - } else { - $ctrl->setParameterByClass(static::class, "obj_id", $parent_id); - }*/ + if (count($titles) > 0) { + \ilLMObject::saveTitle($page->getId(), $titles["-"]); + + $ot = $this->domain->translation($this->lm->getId()); + if ($ot->getContentTranslationActivated()) { + foreach ($ot->getLanguages() as $lang) { + $code = $lang->getLanguageCode(); + if ($code === $ot->getBaseLanguage()) { + continue; + } + \ilLMObject::saveTitle($page->getId(), $titles[$code], $code); + } + } + } $ctrl->redirect($this, "list"); } @@ -344,21 +420,46 @@ public function insertFirstChapter(): void $this->sub_obj_id ); } - public function insertChapterAfter(): void + + public function insertChapterAfter(int $id = 0): void + { + $lng = $this->domain->lng(); + $this->gui->ctrl()->setParameterByClass( + self::class, + "target_id", + $id + ); + $this->gui->clearAsnyOnloadCode(); + $modal = $this->gui->modal($lng->txt("lm_insert_chapter"))->form($this->getEditTitleForm(0, "saveChapterAfter")); + $modal->send(); + } + + public function saveChapterAfter(): void { $target_id = $this->request->getTargetId(); $this->insertChapter( $this->sub_obj_id, - $target_id + $target_id, + $this->getTitlesFromForm() ); } - public function insertChapterBefore(): void + public function insertChapterBefore(int $id): void { - $parent = $this->sub_obj_id; - if ($parent === 0) { - $parent = $this->lm_tree->getRootId(); - } + $lng = $this->domain->lng(); + $this->gui->ctrl()->setParameterByClass( + self::class, + "target_id", + $id + ); + $this->gui->clearAsnyOnloadCode(); + $modal = $this->gui->modal($lng->txt("lm_insert_chapter"))->form($this->getEditTitleForm(0, "saveChapterBefore")); + $modal->send(); + } + + public function saveChapterBefore(): void + { + $parent = $this->getCurrentParentId(); $target_id = $this->request->getTargetId(); $before_target = \ilTree::POS_FIRST_NODE; foreach ($this->lm_tree->getChilds($parent) as $node) { @@ -370,13 +471,15 @@ public function insertChapterBefore(): void } $this->insertChapter( $parent, - $before_target + $before_target, + $this->getTitlesFromForm() ); } protected function insertChapter( int $parent_id = 0, - int $target = \ilTree::POS_LAST_NODE + int $target = \ilTree::POS_LAST_NODE, + array $titles = [] ): void { $lng = $this->domain->lng(); $ctrl = $this->gui->ctrl(); @@ -387,21 +490,42 @@ protected function insertChapter( $chap->create(); \ilLMObject::putInTree($chap, $parent_id, $target); - /* - if ($parent_id === $this->lm_tree->readRootId()) { - $ctrl->setParameterByClass(static::class, "obj_id", 0); - } else { - $ctrl->setParameterByClass(static::class, "obj_id", $parent_id); - }*/ + if (count($titles) > 0) { + \ilLMObject::saveTitle($chap->getId(), $titles["-"]); + + $ot = $this->domain->translation($this->lm->getId()); + if ($ot->getContentTranslationActivated()) { + foreach ($ot->getLanguages() as $lang) { + $code = $lang->getLanguageCode(); + if ($code === $ot->getBaseLanguage()) { + continue; + } + \ilLMObject::saveTitle($chap->getId(), $titles[$code], $code); + } + } + } $ctrl->redirect($this, "list"); } - protected function getEditTitleForm(int $id): FormAdapterGUI + protected function getAddPageForm($cmd): FormAdapterGUI + { + $this->domain->lng()->loadLanguageModule("copg"); + $form = $this->getEditTitleForm(0, $cmd); + $arr_templates = \ilPageLayout::activeLayouts(\ilPageLayout::MODULE_LM); + if (count($arr_templates) > 0) { + $form = $form->optional("use_template", $this->domain->lng()->txt("copg_use_template")); + $form = \ilPageLayoutGUI::addTemplateSelection((string) \ilPageLayout::MODULE_LM, $form); + $form = $form->end(); + } + return $form; + } + + protected function getEditTitleForm(int $id, $cmd = "saveTitle"): FormAdapterGUI { $lng = $this->domain->lng(); $this->gui->ctrl()->setParameterByClass(self::class, "edit_id", $id); - $ot = (new TranslationsRepository($this->domain->database()))->getFor($this->lm->getId()); + $ot = $this->domain->translation($this->lm->getId()); $ml = ""; if ($ot->getContentTranslationActivated()) { $ml = " (" . $lng->txt("meta_l_" . $ot->getBaseLanguage()) . ")"; @@ -409,8 +533,8 @@ protected function getEditTitleForm(int $id): FormAdapterGUI $form = $this ->gui - ->form([self::class], "saveTitle") - ->text("title", $lng->txt('title') . $ml, "", ilLMObject::_lookupTitle($id)); + ->form([self::class], $cmd) + ->text("title", $lng->txt('title') . $ml, "", ilLMObject::_lookupTitle($id), 200); if ($ot->getContentTranslationActivated()) { foreach ($ot->getLanguages() as $lang) { $code = $lang->getLanguageCode(); @@ -423,7 +547,8 @@ protected function getEditTitleForm(int $id): FormAdapterGUI "title_" . $code, $lng->txt('title') . " (" . $lng->txt("meta_l_" . $code) . ")", "", - $title + $title, + 200 ); } } @@ -432,11 +557,44 @@ protected function getEditTitleForm(int $id): FormAdapterGUI public function editTitle(int $id): void { + $lng = $this->domain->lng(); $this->gui->clearAsnyOnloadCode(); - $modal = $this->gui->modal()->form($this->getEditTitleForm($id)); + $modal = $this->gui->modal($lng->txt("cont_edit_title"))->form($this->getEditTitleForm($id)); $modal->send(); } + public function getTitlesFromForm(): array + { + $titles = []; + $form = $this->getEditTitleForm($this->request->getEditId()); + if ($form->isValid()) { + $titles["-"] = $form->getData("title"); + + $ot = $this->domain->translation($this->lm->getId()); + if ($ot->getContentTranslationActivated()) { + foreach ($ot->getLanguages() as $lang) { + $code = $lang->getLanguageCode(); + if ($code === $ot->getBaseLanguage()) { + continue; + } + $titles[$code] = $form->getData("title_" . $code); + } + } + } + return $titles; + } + + public function getLayoutIdFromForm(): int + { + $form = $this->getAddPageForm(""); + if ($form->isValid()) { + if ($form->getData("use_template")) { + return (int) $form->getData("template_id"); + } + } + return 0; + } + public function saveTitle(): void { $mt = $this->gui->mainTemplate(); @@ -456,7 +614,7 @@ public function saveTitle(): void } } } - $mt->setContent("success", $lng->txt("msg_obj_modified"), true); + $mt->setOnScreenMessage("success", $lng->txt("msg_obj_modified"), true); $this->gui->ctrl()->redirect($this, "list"); } @@ -710,6 +868,8 @@ public function activatePages(array $ids): void $ctrl->redirect($this, "list"); } + /* + public function insertLayoutBefore(): void { $this->insertLayout(true); @@ -797,4 +957,6 @@ public function insertPageFromLayout(): void $ctrl->redirect($this, "list"); } + + */ } diff --git a/components/ILIAS/LearningModule/Export/class.LMHtmlExport.php b/components/ILIAS/LearningModule/Export/class.LMHtmlExport.php index 130b3b714221..405a336196d0 100755 --- a/components/ILIAS/LearningModule/Export/class.LMHtmlExport.php +++ b/components/ILIAS/LearningModule/Export/class.LMHtmlExport.php @@ -268,15 +268,6 @@ protected function addSupplyingExportFiles(): void protected function getSupplyingExportFiles(string $a_target_dir = "."): array { $scripts = array( - array("source" => \ilYuiUtil::getLocalPath('yahoo/yahoo-min.js'), - "target" => $a_target_dir . '/js/yahoo/yahoo-min.js', - "type" => "js"), - array("source" => \ilYuiUtil::getLocalPath('yahoo-dom-event/yahoo-dom-event.js'), - "target" => $a_target_dir . '/js/yahoo/yahoo-dom-event.js', - "type" => "js"), - array("source" => \ilYuiUtil::getLocalPath('animation/animation-min.js'), - "target" => $a_target_dir . '/js/yahoo/animation-min.js', - "type" => "js"), array("source" => './components/ILIAS/Accordion/js/accordion.js', "target" => $a_target_dir . '/js/accordion.js', "type" => "js"), diff --git a/components/ILIAS/LearningModule/Presentation/class.PresentationGUIRequest.php b/components/ILIAS/LearningModule/Presentation/class.PresentationGUIRequest.php index 1eb897ebebb0..1868e423c77a 100755 --- a/components/ILIAS/LearningModule/Presentation/class.PresentationGUIRequest.php +++ b/components/ILIAS/LearningModule/Presentation/class.PresentationGUIRequest.php @@ -148,7 +148,7 @@ public function getSelectedType(): string public function getSelectedObjIds(): array { - return $this->intArray("obj_id"); + return $this->intArray("sel_obj_id"); } public function getQuestionPageId(): int diff --git a/components/ILIAS/LearningModule/Presentation/class.ilLMNavigationRendererGUI.php b/components/ILIAS/LearningModule/Presentation/class.ilLMNavigationRendererGUI.php index e2441a0037bf..55238ad1d05e 100755 --- a/components/ILIAS/LearningModule/Presentation/class.ilLMNavigationRendererGUI.php +++ b/components/ILIAS/LearningModule/Presentation/class.ilLMNavigationRendererGUI.php @@ -89,6 +89,8 @@ public function renderBottom(): string protected function render(bool $top = true): string { + $this->toolbar->setStickyItems([]); + $page_id = $this->current_page; $tpl = new ilTemplate("tpl.lm_navigation.html", true, true, "components/ILIAS/LearningModule/Presentation"); @@ -269,6 +271,8 @@ protected function addDropdown(): void $nodes = $this->lm_tree->getSubTree($this->lm_tree->getNodeData($this->lm_tree->getRootId())); //$nodes = $this->filterNonAccessibleNode($nodes); + $actions = []; + foreach ($nodes as $node) { $disabled = false; @@ -349,13 +353,18 @@ protected function addDropdown(): void } } $text = str_pad("", ($node["depth"] - 1) * 12, " ") . $text; - $actions[] = $this->ui->factory()->button()->shy( + $button = $this->ui->factory()->button()->shy( $text, $href ); + if ($disabled) { + $button = $button->withUnavailableAction(); + } + $actions[] = $button; } } + $title = ""; if ($this->lm->getTOCMode() === "pages") { $title = ilLMPageObject::_getPresentationTitle( $this->current_page, @@ -385,7 +394,6 @@ protected function addDropdown(): void $title = "" . $title . ""; - $this->toolbar->addStickyItem( $this->ui->factory()->dropdown()->standard($actions)->withLabel($title) ); diff --git a/components/ILIAS/LearningModule/Presentation/class.ilLMNavigationStatus.php b/components/ILIAS/LearningModule/Presentation/class.ilLMNavigationStatus.php index 368181fde544..def7acd44100 100755 --- a/components/ILIAS/LearningModule/Presentation/class.ilLMNavigationStatus.php +++ b/components/ILIAS/LearningModule/Presentation/class.ilLMNavigationStatus.php @@ -108,7 +108,7 @@ protected function determineStatus(): void $active = ilLMPage::_lookupActive( $obj_id, $this->lm->getType(), - $this->lm_set->get("time_scheduled_page_activation") + (bool) $this->lm_set->get("time_scheduled_page_activation") ); if (!$active && @@ -149,7 +149,7 @@ protected function determineStatus(): void $active = ilLMPage::_lookupActive( $page_id, $this->lm->getType(), - $this->lm_set->get("time_scheduled_page_activation") + (bool) $this->lm_set->get("time_scheduled_page_activation") ); if (!$active) { // look, whether activation data should be shown @@ -227,7 +227,7 @@ public function getSuccessorPageId(): int $active = ilLMPage::_lookupActive( $c_id, $this->lm->getType(), - $this->lm_set->get("time_scheduled_page_activation") + (bool) $this->lm_set->get("time_scheduled_page_activation") ); } if (is_array($succ_node) && $succ_node["obj_id"] > 0 && !$active) { diff --git a/components/ILIAS/LearningModule/Presentation/class.ilLMPresentationGUI.php b/components/ILIAS/LearningModule/Presentation/class.ilLMPresentationGUI.php index 5f62ddc732b0..e91b51a3d43d 100755 --- a/components/ILIAS/LearningModule/Presentation/class.ilLMPresentationGUI.php +++ b/components/ILIAS/LearningModule/Presentation/class.ilLMPresentationGUI.php @@ -650,7 +650,6 @@ protected function addResourceFiles(): void // from main menu // $this->tpl->addJavascript("assets/js/Basic.js"); - ilYuiUtil::initConnection($this->tpl); } } @@ -1017,12 +1016,7 @@ public function ilLocator(): void } if (!$this->offlineMode()) { - // LTI - if ($ltiview->isActive()) { - // Do nothing, its complicated... - } else { - $ilLocator->addRepositoryItems(); - } + $ilLocator->addRepositoryItems(); } else { $ilLocator->setOffline(true); } @@ -1034,25 +1028,21 @@ public function ilLocator(): void if ($row["type"] != "pg") { if ($row["child"] != $this->lm_tree->getRootId()) { $ilLocator->addItem( - ilStr::shortenTextExtended( - ilStructureObject::_getPresentationTitle( - $row["child"], - ilLMObject::CHAPTER_TITLE, - $this->lm->isActiveNumbering(), - (bool) $this->lm_set->get("time_scheduled_page_activation"), - false, - 0, - $this->lang - ), - 50, - true + ilStructureObject::_getPresentationTitle( + $row["child"], + ilLMObject::CHAPTER_TITLE, + $this->lm->isActiveNumbering(), + (bool) $this->lm_set->get("time_scheduled_page_activation"), + false, + 0, + $this->lang ), $this->linker->getLink("layout", $row["child"], $frame_param, "StructureObject"), $frame_target ); } else { $ilLocator->addItem( - ilStr::shortenTextExtended($this->getLMPresentationTitle(), 50, true), + $this->getLMPresentationTitle(), $this->linker->getLink("layout", 0, $frame_param), $frame_target, $this->requested_ref_id @@ -1615,7 +1605,7 @@ public function initPrintViewSelectionForm(): void $op3 = new ilRadioOption($lng->txt("cont_selected_pg_chap"), "selection"); $radg->addOption($op3); - $nl = new ilNestedListInputGUI("", "obj_id"); + $nl = new ilNestedListInputGUI("", "sel_obj_id"); $this->nl = $nl; $op3->addSubItem($nl); @@ -1754,9 +1744,9 @@ public function showPrintView(): void // print all subchapters/subpages if higher chapter // has been selected - if ($node["depth"] <= $act_level) { + if (($node["depth"] ?? 0) <= $act_level) { if (in_array($node["obj_id"], $sel_obj_ids)) { - $act_level = $node["depth"]; + $act_level = $node["depth"] ?? 0; $activated = true; } else { $act_level = 99999; diff --git a/components/ILIAS/LearningModule/Presentation/class.ilLMPresentationLinker.php b/components/ILIAS/LearningModule/Presentation/class.ilLMPresentationLinker.php index 2411b21bb1d0..0d7ad28141fd 100755 --- a/components/ILIAS/LearningModule/Presentation/class.ilLMPresentationLinker.php +++ b/components/ILIAS/LearningModule/Presentation/class.ilLMPresentationLinker.php @@ -41,6 +41,7 @@ class ilLMPresentationLinker implements \ILIAS\COPage\PageLinker protected bool $export_all_languages; protected string $lang; protected string $export_format; + protected \ILIAS\StaticURL\Services $static_url; public function __construct( ilObjLearningModule $lm, @@ -77,6 +78,7 @@ public function __construct( $this->embed_mode = $embed_mode; $this->frame = $frame; $this->obj_id = $obj_id; + $this->static_url = $DIC["static_url"]; } public function setOffline( @@ -384,18 +386,18 @@ public function getLinkXML( $ltarget = "_blank"; } } else { - if (!$this->offline) { - if ($type == "PageObject") { - $href = "./goto.php?target=pg_" . $target_id . $anc_add; - } else { - $href = "./goto.php?target=st_" . $target_id; - } + if ($type == "PageObject") { + $href = (string) $this->static_url->builder()->build( + "pg", + null, + [$target_id] + ) . $anc_add; } else { - if ($type == "PageObject") { - $href = ILIAS_HTTP_PATH . "/goto.php?target=pg_" . $target_id . $anc_add . "&client_id=" . CLIENT_ID; - } else { - $href = ILIAS_HTTP_PATH . "/goto.php?target=st_" . $target_id . "&client_id=" . CLIENT_ID; - } + $href = (string) $this->static_url->builder()->build( + "st", + null, + [$target_id] + ) . $anc_add; } $ltarget = ""; if ($targetframe == "New" || $this->embed_mode) { @@ -446,11 +448,13 @@ public function getLinkXML( case "RepositoryItem": $obj_type = ilObject::_lookupType((int) $target_id, true); - $obj_id = ilObject::_lookupObjId((int) $target_id); - if (!$this->offline) { - $href = "./goto.php?target=" . $obj_type . "_" . $target_id; + if ((int) $target_id > 0) { + $href = (string) $this->static_url->builder()->build( + $obj_type, + new \ILIAS\Data\ReferenceId($target_id) + ); } else { - $href = ILIAS_HTTP_PATH . "/goto.php?target=" . $obj_type . "_" . $target_id . "&client_id=" . CLIENT_ID; + $href = "#"; } if ($this->embed_mode) { $ltarget = "_blank"; @@ -507,7 +511,7 @@ public function getLinkXML( $href = ""; if (ilUserUtil::hasPublicProfile($target_id)) { $href = $this->ctrl->getLinkTargetByClass( - PublicProfileGUI::class, + [ilPublicProfileBaseClassGUI::class, PublicProfileGUI::class], "getHTML", "", false, diff --git a/components/ILIAS/LearningModule/Service/class.InternalDomainService.php b/components/ILIAS/LearningModule/Service/class.InternalDomainService.php index 4c697ab07622..34463b00b4d7 100755 --- a/components/ILIAS/LearningModule/Service/class.InternalDomainService.php +++ b/components/ILIAS/LearningModule/Service/class.InternalDomainService.php @@ -22,6 +22,8 @@ use ILIAS\DI\Container; use ILIAS\Repository\GlobalDICDomainServices; +use ILIAS\ILIASObject\Properties\Translations\CachedRepository; +use ILIAS\ILIASObject\Properties\Translations\Translations; class InternalDomainService { @@ -57,4 +59,9 @@ public function subObjectRetrieval( ); } + public function translation(int $lm_id): Translations + { + return (new CachedRepository($this->database()))->getFor($lm_id); + } + } diff --git a/components/ILIAS/LearningModule/Service/class.InternalService.php b/components/ILIAS/LearningModule/Service/class.InternalService.php index a7ff057ecef5..14976426a42b 100755 --- a/components/ILIAS/LearningModule/Service/class.InternalService.php +++ b/components/ILIAS/LearningModule/Service/class.InternalService.php @@ -22,54 +22,42 @@ use ILIAS\DI\Container; -/** - * Learning modules internal service - * @author Alexander Killing - */ class InternalService { - protected InternalDataService $data; - protected InternalRepoService $repo; - protected InternalDomainService $domain; - protected InternalGUIService $gui; + protected array $instance = []; - public function __construct(Container $DIC) + public function __construct(protected Container $DIC) { - $this->data = new InternalDataService(); - - $this->repo = new InternalRepoService( - $this->data(), - $DIC->database() - ); - $this->domain = new InternalDomainService( - $DIC, - $this->repo, - $this->data - ); - $this->gui = new InternalGUIService( - $DIC, - $this->data, - $this->domain - ); } public function data(): InternalDataService { - return $this->data; + return $this->instance["data"] ??= new InternalDataService(); } public function repo(): InternalRepoService { - return $this->repo; + return $this->instance["repo"] ??= new InternalRepoService( + $this->data(), + $this->DIC->database() + ); } public function domain(): InternalDomainService { - return $this->domain; + return $this->instance["domain"] ??= new InternalDomainService( + $this->DIC, + $this->repo(), + $this->data() + ); } public function gui(): InternalGUIService { - return $this->gui; + return $this->instance["gui"] ??= new InternalGUIService( + $this->DIC, + $this->data(), + $this->domain() + ); } } diff --git a/components/ILIAS/LearningModule/classes/class.ilLMMenuGUI.php b/components/ILIAS/LearningModule/classes/class.ilLMMenuGUI.php index 76f2a72cd7b5..6d03e3918386 100755 --- a/components/ILIAS/LearningModule/classes/class.ilLMMenuGUI.php +++ b/components/ILIAS/LearningModule/classes/class.ilLMMenuGUI.php @@ -97,9 +97,10 @@ public function getEntries(): array $entry["link"] = "https://" . $entry["link"]; } + /* see #46818 if (!strstr($entry["link"], 'mailto:')) { $entry["link"] = \ilUtil::appendUrlParameterString($entry["link"], "ref_id=" . $this->lm->getRefId()); - } + }*/ $signal = $generator->create(); diff --git a/components/ILIAS/LearningModule/classes/class.ilLMObjTranslation.php b/components/ILIAS/LearningModule/classes/class.ilLMObjTranslation.php index 71a833fc32e5..d3233ac3ab5b 100755 --- a/components/ILIAS/LearningModule/classes/class.ilLMObjTranslation.php +++ b/components/ILIAS/LearningModule/classes/class.ilLMObjTranslation.php @@ -115,12 +115,13 @@ public function save(): void { $ilDB = $this->db; + $title = ilStr::substr($this->getTitle(), 0, 200); if (!self::exists($this->getId(), $this->getLang())) { $ilDB->manipulate("INSERT INTO lm_data_transl " . "(id, lang, title, short_title, create_date, last_update) VALUES (" . $ilDB->quote($this->getId(), "integer") . "," . $ilDB->quote($this->getLang(), "text") . "," . - $ilDB->quote($this->getTitle(), "text") . "," . + $ilDB->quote($title, "text") . "," . $ilDB->quote($this->getShortTitle(), "text") . "," . $ilDB->now() . "," . $ilDB->now() . @@ -128,7 +129,7 @@ public function save(): void } else { $ilDB->manipulate( "UPDATE lm_data_transl SET " . - " title = " . $ilDB->quote($this->getTitle(), "text") . "," . + " title = " . $ilDB->quote($title, "text") . "," . " short_title = " . $ilDB->quote($this->getShortTitle(), "text") . "," . " last_update = " . $ilDB->now() . " WHERE id = " . $ilDB->quote($this->getId(), "integer") . diff --git a/components/ILIAS/LearningModule/classes/class.ilLMObject.php b/components/ILIAS/LearningModule/classes/class.ilLMObject.php index 32fb3d523c8a..0ee5f0abad44 100755 --- a/components/ILIAS/LearningModule/classes/class.ilLMObject.php +++ b/components/ILIAS/LearningModule/classes/class.ilLMObject.php @@ -275,6 +275,8 @@ public static function _writeTitle(int $a_obj_id, string $a_title): void $ilDB = $DIC->database(); + $a_title = ilStr::substr($a_title, 0, 200); + $query = "UPDATE lm_data SET " . " title = " . $ilDB->quote($a_title, "text") . " WHERE obj_id = " . $ilDB->quote($a_obj_id, "integer"); @@ -852,11 +854,14 @@ public static function saveTitle(int $id, string $title, string $lang = "-"): vo $lm_id = self::_lookupContObjID($id); $type = self::_lookupType($id); if ($type !== "" && $lm_id > 0) { - $lom_services->manipulate($lm_id, $id, $type) - ->prepareCreateOrUpdate( - $lom_services->paths()->title(), - $title - )->execute(); + try { + $lom_services->manipulate($lm_id, $id, $type) + ->prepareCreateOrUpdate( + $lom_services->paths()->title(), + $title + )->execute(); + } catch (Exception $e) { + } self::_writeTitle($id, $title); } } else { diff --git a/components/ILIAS/LearningModule/classes/class.ilLMPageObjectGUI.php b/components/ILIAS/LearningModule/classes/class.ilLMPageObjectGUI.php index fd9c2c3f3e26..81a308fd3c8b 100755 --- a/components/ILIAS/LearningModule/classes/class.ilLMPageObjectGUI.php +++ b/components/ILIAS/LearningModule/classes/class.ilLMPageObjectGUI.php @@ -308,7 +308,7 @@ public function getLinkXML(array $a_int_links): string $href = ""; if (ilUserUtil::hasPublicProfile($target_id)) { $href = $this->ctrl->getLinkTargetByClass( - PublicProfileGUI::class, + [ilPublicProfileBaseClassGUI::class, PublicProfileGUI::class], "getHTML", "", false, @@ -543,7 +543,7 @@ public function initNewPageForm(): Form\Standard $fields["description"] = $f->input()->field()->textarea($lng->txt("description")); - $ts = ilPageLayoutGUI::getTemplateSelection(ilPageLayout::MODULE_LM); + $ts = ilPageLayoutGUI::getTemplateSelection(ilPageLayout::MODULE_LM, true); if (!is_null($ts)) { $fields["layout_id"] = $ts; } diff --git a/components/ILIAS/LearningModule/classes/class.ilLearningModuleDataSet.php b/components/ILIAS/LearningModule/classes/class.ilLearningModuleDataSet.php index dd584ae7dfb2..5ddfe9523207 100755 --- a/components/ILIAS/LearningModule/classes/class.ilLearningModuleDataSet.php +++ b/components/ILIAS/LearningModule/classes/class.ilLearningModuleDataSet.php @@ -586,7 +586,7 @@ public function importRecord( } $a_mapping->addMapping("components/ILIAS/LearningModule", "lm", $a_rec["Id"], $newObj->getId()); - $a_mapping->addMapping("components/ILIAS/LearningModule", "lm_style", $newObj->getId(), $a_rec["StyleId"]); + $a_mapping->addMapping("components/ILIAS/LearningModule", "lm_style", $newObj->getId(), $a_rec["StyleId"] ?? ""); $a_mapping->addMapping("components/ILIAS/ILIASObject", "obj", $a_rec["Id"], $newObj->getId()); $a_mapping->addMapping( "components/ILIAS/MetaData", diff --git a/components/ILIAS/LearningModule/classes/class.ilLearningModuleImporter.php b/components/ILIAS/LearningModule/classes/class.ilLearningModuleImporter.php index a3c520b71d54..1c63bad94649 100755 --- a/components/ILIAS/LearningModule/classes/class.ilLearningModuleImporter.php +++ b/components/ILIAS/LearningModule/classes/class.ilLearningModuleImporter.php @@ -178,16 +178,15 @@ public function finalProcessing(ilImportMapping $a_mapping): void } } - // assign style - /* + // assign style (old values ilias 7) $alls_map = $a_mapping->getMappingsOfEntity("components/ILIAS/LearningModule", "lm_style"); foreach ($alls_map as $new_lm_id => $old_style_id) { $new_style_id = (int) $a_mapping->getMapping("components/ILIAS/Style", "sty", $old_style_id); if ($new_lm_id > 0 && $new_style_id > 0) { - $lm = new ilObjLearningModule($new_lm_id, false); - $lm->writeStyleSheetId($new_style_id); + ilObjStyleSheet::writeStyleUsage($new_lm_id, $new_style_id); + ilObjStyleSheet::writeOwner($new_lm_id, $new_style_id); } - }*/ + } // menu item ref ids $ref_mapping = $a_mapping->getMappingsOfEntity('components/ILIAS/Container', 'refs'); diff --git a/components/ILIAS/LearningModule/classes/class.ilLearningModuleNotification.php b/components/ILIAS/LearningModule/classes/class.ilLearningModuleNotification.php index 0d1e8a9f43fb..ee135bcbeebd 100755 --- a/components/ILIAS/LearningModule/classes/class.ilLearningModuleNotification.php +++ b/components/ILIAS/LearningModule/classes/class.ilLearningModuleNotification.php @@ -132,7 +132,7 @@ protected function getPageTitle(): string $this->page_id, $this->learning_module->getPageHeader(), $this->learning_module->isActiveNumbering(), - $this->lm_set->get("time_scheduled_page_activation"), + (bool) $this->lm_set->get("time_scheduled_page_activation"), false, 0, $this->lng->getLangKey() diff --git a/components/ILIAS/LearningModule/classes/class.ilObjLearningModuleAccess.php b/components/ILIAS/LearningModule/classes/class.ilObjLearningModuleAccess.php index 1230c9702d8e..2267035c00d5 100755 --- a/components/ILIAS/LearningModule/classes/class.ilObjLearningModuleAccess.php +++ b/components/ILIAS/LearningModule/classes/class.ilObjLearningModuleAccess.php @@ -85,7 +85,7 @@ public function canBeDelivered(ilWACPath $ilWACPath): bool * @var $ilAccess ilAccessHandler */ preg_match("/lm_data\\/lm_([0-9]*)\\//ui", $ilWACPath->getPath(), $results); - foreach (ilObject2::_getAllReferences($results[1]) as $ref_id) { + foreach (ilObject2::_getAllReferences((int) ($results[1] ?? 0)) as $ref_id) { if ($ilAccess->checkAccess('read', '', $ref_id)) { return true; } diff --git a/components/ILIAS/LearningSequence/classes/Content/class.ilObjLearningSequenceContentTableGUI.php b/components/ILIAS/LearningSequence/classes/Content/class.ilObjLearningSequenceContentTableGUI.php index 3e13eb0c5d61..c84f86974e5c 100644 --- a/components/ILIAS/LearningSequence/classes/Content/class.ilObjLearningSequenceContentTableGUI.php +++ b/components/ILIAS/LearningSequence/classes/Content/class.ilObjLearningSequenceContentTableGUI.php @@ -194,7 +194,7 @@ protected function getEditLink(int $ref_id, string $type, array $action_items): break; case $this->ls_item_online_status::S_TEST: - $prop_for_type = 'ilObjTestSettingsMainGUI::showForm'; + $prop_for_type = 'ILIAS\Test\Settings\MainSettings\SettingsMainGUI::showForm'; break; case $this->ls_item_online_status::S_IND_ASSESSMENT: diff --git a/components/ILIAS/LearningSequence/classes/Export/class.ilLearningSequenceXMLParser.php b/components/ILIAS/LearningSequence/classes/Export/class.ilLearningSequenceXMLParser.php index f8872d1e5d2c..61ce8b9ed344 100644 --- a/components/ILIAS/LearningSequence/classes/Export/class.ilLearningSequenceXMLParser.php +++ b/components/ILIAS/LearningSequence/classes/Export/class.ilLearningSequenceXMLParser.php @@ -104,6 +104,9 @@ public function handleBeginTag( case Writer::TAG_LSITEM: $this->counter = (int) $attributes["ref_id"]; $this->ls_item_data[$this->counter]["ref_id"] = $attributes["ref_id"]; + if (isset($attributes["position"])) { + $this->ls_item_data[$this->counter]["position"] = $attributes["position"]; + } break; case Writer::TAG_CONDITION: diff --git a/components/ILIAS/LearningSequence/classes/Export/class.ilLearningSequenceXMLWriter.php b/components/ILIAS/LearningSequence/classes/Export/class.ilLearningSequenceXMLWriter.php index 3ee5cbf2cf0a..f6b80405a5f9 100644 --- a/components/ILIAS/LearningSequence/classes/Export/class.ilLearningSequenceXMLWriter.php +++ b/components/ILIAS/LearningSequence/classes/Export/class.ilLearningSequenceXMLWriter.php @@ -115,7 +115,6 @@ protected function writeLPSettings(): void protected function writeLSItems(): void { $this->xmlStartTag(self::TAG_LSITEMS); - $ls_items = $this->ls_object->getLSItems(); foreach ($ls_items as $ls_item) { $post_condition = $ls_item->getPostCondition(); @@ -124,7 +123,8 @@ protected function writeLSItems(): void self::TAG_LSITEM, [ 'obj_id' => \ilObject::_lookupObjectId($ls_item->getRefId()), - 'ref_id' => $ls_item->getRefId() + 'ref_id' => $ls_item->getRefId(), + 'position' => $ls_item->getOrderNumber() ] ); diff --git a/components/ILIAS/LearningSequence/classes/PageEditor/class.ilLearningSequencePageObjectGUI.php b/components/ILIAS/LearningSequence/classes/PageEditor/class.ilLearningSequencePageObjectGUI.php index fbd63aaef723..c998215fa5ab 100755 --- a/components/ILIAS/LearningSequence/classes/PageEditor/class.ilLearningSequencePageObjectGUI.php +++ b/components/ILIAS/LearningSequence/classes/PageEditor/class.ilLearningSequencePageObjectGUI.php @@ -33,6 +33,7 @@ public function getPageConfig(): ilPageConfig { $this->page_config->setEnablePCType(ilPCCurriculum::PCELEMENT, true); $this->page_config->setEnablePCType(ilPCLauncher::PCELEMENT, true); + $this->page_config->setEnableInternalLinks(true); return $this->page_config; } } diff --git a/components/ILIAS/LearningSequence/classes/Player/class.ilKioskPageRenderer.php b/components/ILIAS/LearningSequence/classes/Player/class.ilKioskPageRenderer.php index 4ed8924a6d26..ab314a621b32 100755 --- a/components/ILIAS/LearningSequence/classes/Player/class.ilKioskPageRenderer.php +++ b/components/ILIAS/LearningSequence/classes/Player/class.ilKioskPageRenderer.php @@ -63,7 +63,7 @@ public function buildCurriculumSlate(Workflow $curriculum): Slate return $this->ui_factory->maincontrols()->slate()->legacy( $this->lng->txt('lso_mainbar_button_label_curriculum'), $f->symbol()->icon()->standard("lso", "Learning Sequence"), - $this->ui_factory->legacy( + $this->ui_factory->legacy()->content( $this->ui_renderer->render($curriculum) ) ); diff --git a/components/ILIAS/LearningSequence/classes/class.ilDashboardLearningSequenceGUI.php b/components/ILIAS/LearningSequence/classes/class.ilDashboardLearningSequenceGUI.php index 38b55a719fd2..9f08958426fb 100755 --- a/components/ILIAS/LearningSequence/classes/class.ilDashboardLearningSequenceGUI.php +++ b/components/ILIAS/LearningSequence/classes/class.ilDashboardLearningSequenceGUI.php @@ -66,7 +66,7 @@ public function initData(): void continue; } - if (!$this->isRelevantLso($lso_obj)) { + if (!(ilLPStatus::_lookupStatus($lso_obj->getId(), $this->user->getId()) === ilLPStatus::LP_STATUS_IN_PROGRESS_NUM)) { continue; } @@ -86,25 +86,9 @@ public function initData(): void $this->setData(['' => $data]); } - protected function isRelevantLso(ilObjLearningSequence $obj): bool - { - $ls_lp_items = $obj->getLSLearnerItems($this->user->getId()); - if ($ls_lp_items === []) { - return false; - } - - foreach ($ls_lp_items as $item) { - if ($item->getLearningProgressStatus() === ilLPStatus::LP_STATUS_IN_PROGRESS_NUM) { - return true; - } - } - - return false; - } - public function getBlockType(): string { - return 'pdlern'; + return 'dash_ls'; } public function confirmedRemove(array $ids): void @@ -130,9 +114,4 @@ public function removeMultipleEnabled(): bool { return true; } - - public function getRemoveMultipleActionText(): string - { - return $this->lng->txt('pd_unsubscribe_multiple_memberships'); - } } diff --git a/components/ILIAS/LearningSequence/classes/class.ilLearningSequenceImporter.php b/components/ILIAS/LearningSequence/classes/class.ilLearningSequenceImporter.php index ee7e0eda2fc5..fdadca6e450c 100755 --- a/components/ILIAS/LearningSequence/classes/class.ilLearningSequenceImporter.php +++ b/components/ILIAS/LearningSequence/classes/class.ilLearningSequenceImporter.php @@ -109,22 +109,26 @@ protected function buildLSItems(array $ls_data, ilImportMapping $mapping): void $mapped[$new_ref_id] = $data; } - $ls_items = $this->obj->getLSItems($this->obj->getRefId()); + $ls_items = $this->obj->getLSItems(); $updated = []; foreach ($ls_items as $item) { $item_ref_id = $item->getRefId(); - if(array_key_exists($item_ref_id, $mapped)) { + if (array_key_exists($item_ref_id, $mapped)) { $item_data = $mapped[$item_ref_id]; $post_condition = new ilLSPostCondition( $item_ref_id, $item_data["condition_type"], $item_data["condition_value"] ); - $updated[] = $item->withPostCondition($post_condition); + $item = $item->withPostCondition($post_condition); + if (isset($item_data["position"])) { + $item = $item->withOrderNumber((int) $item_data["position"]); + } + $updated[] = $item; } } - if($updated) { + if ($updated) { $this->obj->storeLSItems($updated); } } diff --git a/components/ILIAS/LearningSequence/classes/class.ilObjLearningSequenceAdminGUI.php b/components/ILIAS/LearningSequence/classes/class.ilObjLearningSequenceAdminGUI.php index 582cbcd217bf..bf3cc48e2bdb 100755 --- a/components/ILIAS/LearningSequence/classes/class.ilObjLearningSequenceAdminGUI.php +++ b/components/ILIAS/LearningSequence/classes/class.ilObjLearningSequenceAdminGUI.php @@ -104,9 +104,12 @@ protected function getForm(array $values = []): Input\Container\Form\Form ) ->withAdditionalTransformation( $this->refinery->custom()->transformation( - fn ($v) => (float) $v + fn($v) => (float) $v ) ); + if (!$this->_checkPermission('edit_permission')) { + $poll_interval = $poll_interval->withDisabled(true); + } if (isset($values[self::F_POLL_INTERVAL])) { $poll_interval = $poll_interval->withValue($values[self::F_POLL_INTERVAL]); @@ -122,7 +125,7 @@ protected function getForm(array $values = []): Input\Container\Form\Form ->standard($target, [$section]) ->withAdditionalTransformation( $this->refinery->custom()->transformation( - fn ($data) => array_shift($data) + fn($data) => array_shift($data) ) ); } @@ -145,6 +148,11 @@ protected function edit(): void protected function save(): void { + if (!$this->_checkPermission('edit_permission')) { + $this->tpl->setOnScreenMessage('failure', $this->lng->txt('no_permission')); + $this->edit(); + return; + } $form = $this->getForm()->withRequest($this->request); $data = $form->getData(); if ($data) { @@ -155,4 +163,8 @@ protected function save(): void } $this->show($form); } + public function _checkPermission(string $permission): bool + { + return $this->rbac_system->checkAccess($permission, $this->object->getRefId()); + } } diff --git a/components/ILIAS/LegalDocuments/classes/Administration.php b/components/ILIAS/LegalDocuments/classes/Administration.php index 9be381ec8504..0c649e62b7b1 100755 --- a/components/ILIAS/LegalDocuments/classes/Administration.php +++ b/components/ILIAS/LegalDocuments/classes/Administration.php @@ -48,6 +48,8 @@ use ilObjUserFolderGUI; use ILIAS\LegalDocuments\Value\DocumentContent; use ILIAS\UI\Component\Input\Container\Form\Form; +use ILIAS\User\Settings\Administration\SettingsGUI; +use ilAdministrationGUI; class Administration { @@ -323,6 +325,11 @@ public function criterionForm(string $url, Document $document, ?CriterionContent $group = $group->withValue($value); } + $this->ui->mainTemplate()->setOnScreenMessage( + $this->ui->mainTemplate()::MESSAGE_TYPE_INFO, + $this->ui->txt('form_criterion_standard_fields_info_text') + ); + $title = $this->ui->create()->input()->field()->text($this->ui->txt('form_document'))->withValue($document->content()->title())->withDisabled(true); $section = $this->ui->create()->input()->field()->section([ @@ -429,12 +436,15 @@ public function resetButton(string $confirm_reset_link): Button */ public function documentForm(Closure $link, string $title, Closure $document_content, bool $may_be_new): Form { + $field = $this->ui->create()->input()->field(); $edit_link = $link('editDocument'); $content_title = $may_be_new ? 'form_document' : 'form_document_new'; - $section = $this->ui->create()->input()->field()->section([ - 'title' => $this->ui->create()->input()->field()->text($this->ui->txt('title'))->withRequired(true)->withValue($title), - 'content' => $this->ui->create()->input()->field()->file(new UploadHandler($link, $document_content, $this->ui->txt(...)), $this->ui->txt($content_title))->withAcceptedMimeTypes([ + $require = $this->container->refinery()->custom()->constraint(fn($x) => (bool) $x, $this->ui->txt('title_required')); + + $section = $field->section([ + 'title' => $field->text($this->ui->txt('title'))->withRequired(true, $require)->withValue($title), + 'content' => $field->file(new UploadHandler($link, $document_content, $this->ui->txt(...)), $this->ui->txt($content_title))->withAcceptedMimeTypes([ 'text/html', 'text/plain', ])->withRequired($may_be_new), @@ -527,10 +537,13 @@ public function externalSettingsMessage(bool $enabled): Component return $message_box; } + $this->container->language()->loadLanguageModule('administration'); + + $this->container->ctrl()->setParameterByClass(SettingsGUI::class, 'ref_id', (string) USER_FOLDER_ID); return $message_box->withLinks([ $this->ui->create()->link()->standard( $this->ui->txt('adm_external_setting_edit'), - $this->willLinkWith(ilObjUserFolderGUI::class, ['ref_id' => (string) USER_FOLDER_ID])('generalSettings') + $this->container->ctrl()->getLinkTargetByClass([ilAdministrationGUI::class, ilObjUserFolderGUI::class, SettingsGUI::class], 'show') ) ]); } diff --git a/components/ILIAS/LegalDocuments/classes/ConsumerToolbox/ConsumerSlots/ModifyFooter.php b/components/ILIAS/LegalDocuments/classes/ConsumerToolbox/ConsumerSlots/ModifyFooter.php index 7199875fb941..4682d6c71120 100755 --- a/components/ILIAS/LegalDocuments/classes/ConsumerToolbox/ConsumerSlots/ModifyFooter.php +++ b/components/ILIAS/LegalDocuments/classes/ConsumerToolbox/ConsumerSlots/ModifyFooter.php @@ -20,6 +20,7 @@ namespace ILIAS\LegalDocuments\ConsumerToolbox\ConsumerSlots; +use ILIAS\Data\URI; use ilLink; use ILIAS\LegalDocuments\Value\DocumentContent; use ILIAS\UI\Component\Component; @@ -55,7 +56,7 @@ public function __invoke(Closure $footer): Closure )->except( fn() => new Ok( !$this->goto_link || $this->user->isLoggedIn() ? - $footer : + $this->footer($footer, null) : $this->footer($footer, ($this->goto_link)()) ) )->value(); @@ -88,9 +89,9 @@ public function withdrawalButton(): Component } /** - * @param URI|Modal $value + * @param URI|Modal|null $value */ - private function footer(Closure $footer, object $value): Closure + private function footer(Closure $footer, ?object $value): Closure { return $footer($this->legal_documents->id(), $this->ui->txt('usr_agreement'), $value); } diff --git a/components/ILIAS/LegalDocuments/classes/ConsumerToolbox/Slot.php b/components/ILIAS/LegalDocuments/classes/ConsumerToolbox/Slot.php index a95b2b11fcf5..b284faaa7016 100755 --- a/components/ILIAS/LegalDocuments/classes/ConsumerToolbox/Slot.php +++ b/components/ILIAS/LegalDocuments/classes/ConsumerToolbox/Slot.php @@ -20,6 +20,8 @@ namespace ILIAS\LegalDocuments\ConsumerToolbox; +use ILIAS\Refinery\Encode\Transformation\URL; +use ILIAS\UI\Component\Modal\Modal; use ILIAS\Data\URI; use ilLink; use ILIAS\Refinery\Constraint; @@ -74,7 +76,19 @@ public function agreement(User $user): Agreement public function modifyFooter(User $user, ?string $goto_target = null): ModifyFooter { $link = $goto_target ? static fn() => new URI(ilLink::_getLink(null, 'usr', [], $goto_target)) : null; - return new ModifyFooter($this->blocks->ui(), $user, $this->provide, fn($arg) => $this->container->ui()->renderer()->render($arg), $this->template(...), $link); + return new ModifyFooter( + $this->blocks->ui(), + $user, + $this->provide, + fn($arg) => $this->container->ui()->renderer()->render($arg), + $this->template(...), + $link + ); + } + + public function dummyFooter(Closure $footer): Closure + { + return $footer($this->provide->id(), $this->blocks->ui()->txt('usr_agreement'), null); } /** diff --git a/components/ILIAS/LegalDocuments/classes/GlobalScreen/FooterProvider.php b/components/ILIAS/LegalDocuments/classes/GlobalScreen/FooterProvider.php index 85e55866dad3..72aac0d042ad 100644 --- a/components/ILIAS/LegalDocuments/classes/GlobalScreen/FooterProvider.php +++ b/components/ILIAS/LegalDocuments/classes/GlobalScreen/FooterProvider.php @@ -20,6 +20,7 @@ namespace ILIAS\LegalDocuments\GlobalScreen; +use ILIAS\Data\URI; use ILIAS\LegalDocuments\Conductor; use ILIAS\DI\Container; use ILIAS\GlobalScreen\Scope\MetaBar\Provider\AbstractStaticFooterProvider; @@ -66,12 +67,19 @@ private function collect(array $items): Closure }; } - private function item(string $id, string $title, object $obj): isItem + private function item(string $id, string $title, ?object $obj): isItem { + $false = fn() => false; $id = $this->id_factory->identifier($id); - $item = $obj instanceof Modal ? - $this->item_factory->modal($id, $title, $obj) : - $this->item_factory->link($id, $title)->withAction($obj); + + $item = match (true) { + $obj === null => $this->item_factory->link($id, $title) + ->withAction(new URI(ILIAS_HTTP_PATH)) + ->withAvailableCallable($false) + ->withVisibilityCallable($false), + $obj instanceof Modal => $this->item_factory->modal($id, $title, $obj), + default => $this->item_factory->link($id, $title)->withAction($obj), + }; return $item->withParent($this->parent_id); } diff --git a/components/ILIAS/LegalDocuments/classes/Legacy/Table.php b/components/ILIAS/LegalDocuments/classes/Legacy/Table.php index 13d945cdaab5..2f24070b8d10 100644 --- a/components/ILIAS/LegalDocuments/classes/Legacy/Table.php +++ b/components/ILIAS/LegalDocuments/classes/Legacy/Table.php @@ -20,7 +20,6 @@ namespace ILIAS\LegalDocuments\Legacy; -use ilYuiUtil; use iljQueryUtil; use Closure; use ILIAS\LegalDocuments\Table as TableInterface; @@ -60,8 +59,6 @@ public function __construct(?object $gui, string $command, TableInterface $table $this->setExternalSorting(true); $this->setExternalSegmentation(true); iljQueryUtil::initjQuery($DIC->ui()->mainTemplate()); - ilYuiUtil::initPanel(false, $DIC->ui()->mainTemplate()); - ilYuiUtil::initOverlay($DIC->ui()->mainTemplate()); $DIC->ui()->mainTemplate()->addJavaScript('assets/js/Form.js'); $this->determineOffsetAndOrder(); $this->setData($table->rows($this)); diff --git a/components/ILIAS/LegalDocuments/classes/Repository/DatabaseDocumentRepository.php b/components/ILIAS/LegalDocuments/classes/Repository/DatabaseDocumentRepository.php index c6670e1848b5..d0d6653682e9 100755 --- a/components/ILIAS/LegalDocuments/classes/Repository/DatabaseDocumentRepository.php +++ b/components/ILIAS/LegalDocuments/classes/Repository/DatabaseDocumentRepository.php @@ -242,6 +242,8 @@ private function lazyDocFields(array $fields_and_values, string $hash, bool $sil 'id' => $this->database->nextId($this->documentTable()), 'creation_ts' => $modification->time(), 'owner_usr_id' => $modification->user(), + 'modification_ts' => $modification->time(), + 'last_modified_usr_id' => $modification->user(), 'sorting' => $this->nextSorting(), 'provider' => $this->id, 'title' => 'Unnamed document', diff --git a/components/ILIAS/LegalDocuments/classes/Repository/DatabaseHistoryRepository.php b/components/ILIAS/LegalDocuments/classes/Repository/DatabaseHistoryRepository.php index e41639f62d48..0f4006c21c64 100755 --- a/components/ILIAS/LegalDocuments/classes/Repository/DatabaseHistoryRepository.php +++ b/components/ILIAS/LegalDocuments/classes/Repository/DatabaseHistoryRepository.php @@ -145,8 +145,8 @@ public function countAll(array $filter = []): int [$filter, $join] = $this->filterAndJoin($filter); return (int) $this->database->fetchAssoc($this->database->query( - "SELECT COUNT(1) as count FROM $tracking INNER JOIN $version ON $tracking.tosv_id = $version.id INNER JOIN $documents ON $version.doc_id = $documents.id AND $version.provider = $provider " . - "$join WHERE $filter" + "SELECT COUNT(1) as count FROM $tracking INNER JOIN $version ON $tracking.tosv_id = $version.id LEFT JOIN $documents ON $version.doc_id = $documents.id " . + "$join WHERE $version.provider = $provider AND $filter" ))['count']; } diff --git a/components/ILIAS/LegalDocuments/classes/Table/DocumentModal.php b/components/ILIAS/LegalDocuments/classes/Table/DocumentModal.php index af7f28bcd3fa..f4172f50bb30 100755 --- a/components/ILIAS/LegalDocuments/classes/Table/DocumentModal.php +++ b/components/ILIAS/LegalDocuments/classes/Table/DocumentModal.php @@ -27,6 +27,11 @@ class DocumentModal { + /** + * @var Component[] + */ + private array $components = []; + /** * @param Closure(DocumentContent): Component $content_as_component */ @@ -52,6 +57,18 @@ public function create(DocumentContent $content): array $modal->getShowSignal() ); - return [$link, $modal]; + $this->components[] = $modal; + + return [$link]; + } + + /** + * @return Component[] + */ + public function popComponents(): array + { + $c = $this->components; + $this->components = []; + return $c; } } diff --git a/components/ILIAS/LegalDocuments/classes/Table/DocumentTable.php b/components/ILIAS/LegalDocuments/classes/Table/DocumentTable.php index 4351407908b8..cd20ef5cd88c 100644 --- a/components/ILIAS/LegalDocuments/classes/Table/DocumentTable.php +++ b/components/ILIAS/LegalDocuments/classes/Table/DocumentTable.php @@ -57,8 +57,11 @@ class DocumentTable implements OrderingRetrieval private readonly ilCtrlInterface $ctrl; private readonly Ordering $table; private readonly Renderer $ui_renderer; - private ilObjUser $user; - private \DateTimeZone $usr_timezone; + private readonly ilObjUser $user; + private readonly \DateTimeZone $usr_timezone; + + /** @var Component[] */ + private array $modals = []; public function __construct( private readonly Closure $criterion_as_component, @@ -149,7 +152,7 @@ private function buildTableRow(OrderingRowBuilder $row_builder, Document $docume )->withOnClick($delete_modal->getShowSignal()) ]); - $criterion_components[] = $delete_modal; + $this->modals[] = $delete_modal; $criterion_components[] = $dropdown; } @@ -181,7 +184,11 @@ public function getTotalRowCount( public function render(): string { - return $this->ui_renderer->render($this->table); + // This MUST be rendered BEFORE $this->modal->components(), + // because the components are filled within the rendering process. + $html = $this->ui_renderer->render($this->table); + + return $html . $this->ui_renderer->render([...$this->modal->popComponents(), ...$this->modals]); } /** diff --git a/components/ILIAS/LegalDocuments/classes/Table/HistoryTable.php b/components/ILIAS/LegalDocuments/classes/Table/HistoryTable.php index c1c46cb15756..1e1f0c7aaa18 100755 --- a/components/ILIAS/LegalDocuments/classes/Table/HistoryTable.php +++ b/components/ILIAS/LegalDocuments/classes/Table/HistoryTable.php @@ -43,7 +43,8 @@ class HistoryTable implements Table private readonly Closure $format_date; /** - * @param Closure(class-string, ... $constructor_args): object $create + * @template C + * @param Closure(class-string, mixed...): C $create * @param null|Closure(DateTimeImmutable): string $format_date */ public function __construct( @@ -114,7 +115,7 @@ private function row(History $record): array 'login' => $user?->getLogin() ?? $this->ui->txt('deleted'), 'firstname' => $user?->getFirstname() ?? '-', 'lastname' => $user?->getLastname() ?? '-', - 'document' => $this->modal->create($record->documentContent()), + 'document' => [...$this->modal->create($record->documentContent()), ...$this->modal->popComponents()], 'criteria' => $this->showCriteria($record), ]; } diff --git a/components/ILIAS/LegalDocuments/classes/UseSlot.php b/components/ILIAS/LegalDocuments/classes/UseSlot.php index cd48a85e6e89..59a73e8238ef 100755 --- a/components/ILIAS/LegalDocuments/classes/UseSlot.php +++ b/components/ILIAS/LegalDocuments/classes/UseSlot.php @@ -20,13 +20,13 @@ namespace ILIAS\LegalDocuments; +use Closure; use ILIAS\LegalDocuments\ConsumerSlots\Agreement; use ILIAS\LegalDocuments\ConsumerSlots\CriterionToCondition; use ILIAS\LegalDocuments\ConsumerSlots\SelfRegistration; use ILIAS\LegalDocuments\ConsumerSlots\WithdrawProcess; use ILIAS\LegalDocuments\ConsumerSlots\PublicApi; use ILIAS\Refinery\Constraint; -use ILIAS\UI\Component\MainControls\Footer; use ilObjUser; use ilNonEditableValueGUI; use ILIAS\UI\Component\Component; @@ -40,7 +40,7 @@ interface UseSlot public function afterLogin(callable $after_login): self; /** - * @param callable(Footer): Footer $show + * @param callable(Closure): Closure $show */ public function showInFooter(callable $show): self; diff --git a/components/ILIAS/LegalDocuments/tests/Table/DocumentModalTest.php b/components/ILIAS/LegalDocuments/tests/Table/DocumentModalTest.php index 67577d315f7a..83da89a7bf9a 100755 --- a/components/ILIAS/LegalDocuments/tests/Table/DocumentModalTest.php +++ b/components/ILIAS/LegalDocuments/tests/Table/DocumentModalTest.php @@ -71,6 +71,8 @@ public function testCreate(): void return $component; }); - $this->assertSame([$button_component, $modal_component], $instance->create($content)); + $this->assertSame([$button_component], $instance->create($content)); + $this->assertSame([$modal_component], $instance->popComponents()); + $this->assertSame([], $instance->popComponents()); } } diff --git a/components/ILIAS/Link/resources/ilExtLink.js b/components/ILIAS/Link/resources/ilExtLink.js index 503586c6ec31..0c95f557c54d 100644 --- a/components/ILIAS/Link/resources/ilExtLink.js +++ b/components/ILIAS/Link/resources/ilExtLink.js @@ -28,7 +28,9 @@ il.ExtLink = { validate: { url: (val) => /^https?:\/\//.test(val), // only allow URLs that begin with a protocol email: false // don't linkify emails - } + }, + target: '_blank', + rel: 'noopener noreferrer', }; $(selector).each(function () { linkifyElement(this, options); diff --git a/components/ILIAS/Mail/README.md b/components/ILIAS/Mail/README.md index dc22bdbbcde8..19ef32b49910 100755 --- a/components/ILIAS/Mail/README.md +++ b/components/ILIAS/Mail/README.md @@ -119,7 +119,7 @@ This feature does not apply for ILIAS-internal messages at all. some kind of reduced and **medium level** notification system dealing only with internal and external emails. It does neither care about low-level transport of messages -(e.g. like sending external emails via SMTP), nor does it +(e.g., like sending external emails via SMTP), nor does it act like a centralized notification system dealing with any kind/type of notification in ILIAS. @@ -287,19 +287,69 @@ The consumer MUST ensure that the message does not contain any HTML. Line breaks MUST be provided by a line feed (LF) character. Violations against this rule may raise exceptions in -future ILIAS releases. - -Currently the mail system tries to magically detect -whether or not the message body passed by consumers +future ILIAS releases or lead to undesired and undefined behavior. + +Starting with ILIAS 11, the message body is always +interpreted as Markdown when using `ilMail` or the facades +of it (see: [ilMailNotification](#ilmailnotification) +and [ilSystemNotification](#ilsystemnotification)). + +This means, that if a message body is passed to `ilMail`, +it is unconditionally processed by the Markdown parser +(`ILIAS\Refinery\String\MarkdownFormattingToHTML`) when +presenting it in ILIAS views, or if activated in the global +administration, it is used within the HTML frame of an external +email (see: [External Emails: HTML Frame](#external-emails-html-frame)). + +This has several important implications: + +* Markdown syntax is supported + Consumers may use standard Markdown features such as + paragraphs, lists, emphasis, etc.. This also means, + consumers must be aware that certain character sequences + (e.g. *, _, #, or indentation) may be interpreted as Markdown + and can therefore affect the resulting HTML output. + Input should be authored or validated accordingly to avoid + unintended formatting. +* Raw HTML is not supported + As outlined above, HTML tags contained in the message body + are not supported and stripped during Markdown processing + for security reasons. This behavior is intentional and + enforced by the Markdown parser configuration. +* No additional escaping is performed + Message bodies are not escaped using `htmlencodePlainString` + anymore when presenting them in ILIAS. Instead, all escaping is + delegated to the Markdown parser. +* Consistent rendering in the UI + When displaying messages in ILIAS, the stored message body + is rendered from its Markdown representation, ensuring + consistent formatting and security guarantees across all mail views. + +Summary: + +* Always assume that the message body will be + parsed/presented as Markdown. +* Do not rely on embedded HTML for formatting. + The rule is: You MUST NOT pass any HTML +* Provide Markdown-compatible plain text input. + +When directly sending external emails by using the +low-level [ilMimeMail](#ilmimemail) class, consumers have to +manually prepare the HTML body if Markdown/HTML formatting is +desired. + +`ilMimeMail` still tries to magically detect +whether the message body passed by consumers contains any HTML when sending **external** -[emails with an HTML frame and a plain/text alternative](#external-emails:-html-frame). -This is done in `\ilMimeMail::buildBodyParts`. -If no HTML is included at all, or only a few inline -elements (\, \, \, \) are given, a -[`nl2br()`](http://php.net/manual/en/function.nl2br.php) -is applied on the body and used for the HTML version -of the email. The originally passed body is used as -plain/text alternative. +[emails with an HTML frame and a plain/text alternative](#external-emails-html-frame). +This is done in `\ilMimeMail::buildBodyMultiParts`. +If `ilMimeMail` detects HTML block elements or line breaks +typically supported by Markdown, it treats the message body +as HTML and strips all HTML tags for the plain/text alternative. +If only a few inline elements (\, \, \, \) are +given, a [`nl2br()`](http://php.net/manual/en/function.nl2br.php) is applied to a copy of the message +body, which is then used for the HTML version of the email. +The originally passed body is used as plain/text alternative. If HTML is detected in the body string passed by the consumer, the original body is used for the HTML email. For the plain/text alternative, `
` elements are replaced @@ -307,13 +357,6 @@ with a `\n` (LF) character and [`strip_tags'](http://php.net/manual/en/function.strip-tags.php) is applied afterwards on the originally passed message body. -This behaviour is not specified at all and also tries -to handle/fix misusage by consumers. -The rule is: You MUST NOT pass any HTML. - -For **internal** messages HTML is completely escaped -on the UI endpoint via `\ilUtil::htmlencodePlainString`. - ### Attachments The `$attachments` can be passed as an array of file names. @@ -876,11 +919,13 @@ For **system mails**: For each recipient account, delivery is decided as follows: - **Not active OR expired** - → Mail is sent **internally only** (no external). + → Mail is sent **internally only** (no external), even if the check + in [paragraph 1](#1-internal-mail-eligibility) evaluates to `false`. - **Active AND not expired** - **Has not accepted all legal documents** - → Mail is always sent **externally**, optionally **internally**. + → Mail is always sent **externally**, optionally **internally** (even if + the check in [paragraph 1](#1-internal-mail-eligibility) evaluates to `false`). - **Wants both internal and external** → Mail is sent **internally and externally**. - **Configured for external only** diff --git a/components/ILIAS/Mail/classes/Attachments/MailAttachmentTableGUI.php b/components/ILIAS/Mail/classes/Attachments/MailAttachmentTableGUI.php index 5b8338756480..95513b69b037 100644 --- a/components/ILIAS/Mail/classes/Attachments/MailAttachmentTableGUI.php +++ b/components/ILIAS/Mail/classes/Attachments/MailAttachmentTableGUI.php @@ -73,8 +73,9 @@ public function get(): \ILIAS\UI\Component\Table\Data $this->lng->txt('attachment'), $this->getColumnDefinition(), ) - ->withId(self::class . '_' . $this->mode->name) + ->withId(str_replace('\\', '', self::class) . '_' . $this->mode->name) ->withOrder(new \ILIAS\Data\Order('filename', \ILIAS\Data\Order::ASC)) + ->withRange(new \ILIAS\Data\Range(0, 50)) ->withActions($this->getActions()) ->withRequest($this->http_request); } @@ -118,7 +119,7 @@ private function getActions(): array if ($this->mode === AttachmentManagement::CONSUME) { $actions['saveAttachments'] = $this->ui_factory->table()->action()->multi( - $this->lng->txt('adopt'), + $this->lng->txt('mail_adopt_selected_attachements'), $this->url_builder->withParameter( $this->action_parameter_token, self::TABLE_ACTION_SAVE_ATTACHMENTS diff --git a/components/ILIAS/Mail/classes/Folder/MailFolderTableUI.php b/components/ILIAS/Mail/classes/Folder/MailFolderTableUI.php index 4bc48820b113..bcacaefca867 100644 --- a/components/ILIAS/Mail/classes/Folder/MailFolderTableUI.php +++ b/components/ILIAS/Mail/classes/Folder/MailFolderTableUI.php @@ -95,8 +95,9 @@ public function getComponent(): DataTable $this->getTableTitle(), $this->getColumnDefinition(), ) - ->withId(self::class) + ->withId(str_replace('\\', '', self::class)) ->withOrder(new Order('date', Order::DESC)) + ->withRange(new Range(0, 50)) ->withActions($this->getActions()) ->withRequest($this->http_request); } diff --git a/components/ILIAS/Mail/classes/Form/class.ilIncomingMailInputGUI.php b/components/ILIAS/Mail/classes/Form/class.ilIncomingMailInputGUI.php index 5ff71cc3bcc0..3e5b5a91c50e 100755 --- a/components/ILIAS/Mail/classes/Form/class.ilIncomingMailInputGUI.php +++ b/components/ILIAS/Mail/classes/Form/class.ilIncomingMailInputGUI.php @@ -18,12 +18,11 @@ declare(strict_types=1); -use ILIAS\Mail\UserSettings\IncomingMail; - class ilIncomingMailInputGUI extends ilRadioGroupInputGUI { - protected bool $free_option_choice = true; - protected bool $options_initialized = false; + private bool $free_option_choice = true; + private bool $options_initialized = false; + private ?ilObjUser $user = null; public function __construct(string $title = '', string $post_var = '', bool $free_option_choice = true) { @@ -85,13 +84,15 @@ public function setFreeOptionChoice(bool $free_option_choice): void $this->free_option_choice = $free_option_choice; } + public function setUser(?ilObjUser $user): void + { + $this->user = $user; + } + private function addSubOptions(): void { global $DIC; - $incoming_mail_changable_by_user = $DIC['user']->getSettings() - ->getSettingByDefinitionClass(IncomingMail::class)->isChangeableByUser(); - $incoming_local = new ilRadioOption( $DIC->language()->txt('mail_incoming_local'), (string) ilMailOptions::INCOMING_LOCAL @@ -169,13 +170,16 @@ private function addSubOptions(): void $this->setDisabled(true); } - if ($DIC->user()->getEmail() === '') { + $email = $this->user !== null + ? $this->user->getEmail() + : $DIC->user()->getEmail(); + if (empty($email)) { $sub_mail_opt1->setInfo($DIC->language()->txt('first_email_missing_info')); $sub_mail_opt3->setInfo($DIC->language()->txt('first_email_missing_info')); $sub_both_opt1->setInfo($DIC->language()->txt('first_email_missing_info')); $sub_both_opt3->setInfo($DIC->language()->txt('first_email_missing_info')); } else { - $email_info[] = $DIC->user()->getEmail(); + $email_info[] = $email; } if ($DIC->settings()->get('usr_settings_disable_mail_incoming_mail') === '1') { $sub_mail_opt1->setDisabled(true); @@ -184,13 +188,16 @@ private function addSubOptions(): void $sub_both_opt3->setDisabled(true); } - if ($DIC->user()->getSecondEmail() === '') { + $second_email = $this->user !== null + ? $this->user->getSecondEmail() + : $DIC->user()->getSecondEmail(); + if (empty($second_email)) { $sub_mail_opt2->setInfo($DIC->language()->txt('second_email_missing_info')); $sub_mail_opt3->setInfo($DIC->language()->txt('second_email_missing_info')); $sub_both_opt2->setInfo($DIC->language()->txt('second_email_missing_info')); $sub_both_opt3->setInfo($DIC->language()->txt('second_email_missing_info')); } else { - $email_info[] = $DIC->user()->getSecondEmail(); + $email_info[] = $second_email; } if ($DIC->settings()->get('usr_settings_disable_mail_incoming_mail') === '1') { $sub_mail_opt2->setDisabled(true); diff --git a/components/ILIAS/Mail/classes/Form/class.ilMailTemplateSelectInputGUI.php b/components/ILIAS/Mail/classes/Form/class.ilMailTemplateSelectInputGUI.php deleted file mode 100755 index e9278c69c317..000000000000 --- a/components/ILIAS/Mail/classes/Form/class.ilMailTemplateSelectInputGUI.php +++ /dev/null @@ -1,45 +0,0 @@ -setVariable('CONTENT', $html); - $tpl->setVariable('FIELDS', json_encode($this->fields, JSON_THROW_ON_ERROR)); - $tpl->setVariable('URL', $this->url); - $tpl->setVariable('ID', $this->getFieldId()); - - return $tpl->get(); - } -} diff --git a/components/ILIAS/Mail/classes/Message/MailBoxQuery.php b/components/ILIAS/Mail/classes/Message/MailBoxQuery.php index e62eea73dacb..b8a8ba9feeb5 100755 --- a/components/ILIAS/Mail/classes/Message/MailBoxQuery.php +++ b/components/ILIAS/Mail/classes/Message/MailBoxQuery.php @@ -26,6 +26,7 @@ use DateTimeZone; use ILIAS\Data\Order; use ilUserSearchOptions; +use ILIAS\ResourceStorage\Identification\ResourceCollectionIdentification; class MailBoxQuery { @@ -277,6 +278,15 @@ public function query($short): array $set = []; while ($row = $this->db->fetchAssoc($res)) { + if (isset($row['attachments']) && \is_string($row['attachments']) && str_contains($row['attachments'], '{')) { + $unserialized_attachments = unserialize($row['attachments'], ['allowed_classes' => false]); + $row['attachments'] = \is_array($unserialized_attachments) ? $unserialized_attachments : null; + } elseif (isset($row['attachments']) && \is_string($row['attachments']) && $row['attachments'] !== '') { + $row['attachments'] = new ResourceCollectionIdentification($row['attachments']); + } else { + $row['attachments'] = null; + } + $set[] = new MailRecordData( isset($row['mail_id']) ? (int) $row['mail_id'] : 0, isset($row['user_id']) ? (int) $row['user_id'] : 0, @@ -291,10 +301,7 @@ public function query($short): array isset($row['rcp_to']) ? (string) $row['rcp_to'] : null, isset($row['rcp_cc']) ? (string) $row['rcp_cc'] : null, isset($row['rcp_bcc']) ? (string) $row['rcp_bcc'] : null, - isset($row['attachments']) ? (array) unserialize( - stripslashes($row['attachments']), - ['allowed_classes' => false] - ) : [], + $row['attachments'], isset($row['tpl_ctx_id']) ? (string) $row['tpl_ctx_id'] : null, isset($row['tpl_ctx_params']) ? (string) $row['tpl_ctx_params'] : null ); diff --git a/components/ILIAS/Mail/classes/Message/MailRecordData.php b/components/ILIAS/Mail/classes/Message/MailRecordData.php index c5225962babd..53bc3feb3e64 100644 --- a/components/ILIAS/Mail/classes/Message/MailRecordData.php +++ b/components/ILIAS/Mail/classes/Message/MailRecordData.php @@ -21,12 +21,16 @@ namespace ILIAS\Mail\Message; use DateTimeImmutable; +use ILIAS\ResourceStorage\Identification\ResourceCollectionIdentification; class MailRecordData { public const string STATUS_READ = 'read'; public const string STATUS_UNREAD = 'unread'; + /** + * @param null|non-empty-list|ResourceCollectionIdentification $attachments + */ public function __construct( private readonly int $mail_id, private readonly int $user_id, @@ -41,7 +45,7 @@ public function __construct( private readonly ?string $rcp_to = null, private readonly ?string $rcp_cc = null, private readonly ?string $rcp_bc = null, - private readonly ?array $attachments = [], + private readonly null|array|ResourceCollectionIdentification $attachments = null, private readonly ?string $tpl_ctx_id = null, private readonly ?string $tpl_ctx_params = null ) { @@ -113,9 +117,9 @@ public function getRcpBc(): ?string } /** - * @return string[]|null + * @return null|non-empty-list|ResourceCollectionIdentification */ - public function getAttachments(): ?array + public function getAttachments(): null|array|ResourceCollectionIdentification { return $this->attachments; } diff --git a/components/ILIAS/Mail/classes/Provider/MailGlobalScreenToolProvider.php b/components/ILIAS/Mail/classes/Provider/MailGlobalScreenToolProvider.php index 5e3e35cd7e7e..68d8f7989954 100755 --- a/components/ILIAS/Mail/classes/Provider/MailGlobalScreenToolProvider.php +++ b/components/ILIAS/Mail/classes/Provider/MailGlobalScreenToolProvider.php @@ -122,15 +122,15 @@ public function getToolsForContextStack(CalledContexts $called_contexts): array ...$this->buildSubItems(), $this->buildItem( $this->lng->txt('mail_attachments'), - 'fils', + 'attach', $this->buildFolderLink($current_folder_id, [ilMailGUI::class, ilMailAttachmentGUI::class]) ) ]; if ($this->dic->settings()->get('show_mail_settings', '0')) { $sub_items[] = $this->buildItem( - $this->lng->txt("mail_options"), - "adm", + $this->lng->txt('mail_options'), + 'adm', $this->buildFolderLink($current_folder_id, ilMailOptionsGUI::class) ); } @@ -170,7 +170,7 @@ private function buildSubItems(): array $folder->getTitle(), [ $this->buildItem( - $this->lng->txt("mail_main_folder"), + $this->lng->txt('mail_main_folder'), $icon_name, $this->buildFolderLink($folder->getFolderId(), ilMailFolderGUI::class) ), diff --git a/components/ILIAS/Mail/classes/class.ilFileDataMail.php b/components/ILIAS/Mail/classes/class.ilFileDataMail.php index a37c751d6e07..075606b12b29 100755 --- a/components/ILIAS/Mail/classes/class.ilFileDataMail.php +++ b/components/ILIAS/Mail/classes/class.ilFileDataMail.php @@ -253,7 +253,7 @@ public function storeAsAttachment(string $a_filename, string $a_content): string /** * @param array{name:string, tmp_name:string} $file */ - public function storeUploadedFile(array $file): void + public function storeUploadedFile(array $file): string { $file['name'] = ilFileUtils::_sanitizeFilemame($file['name']); @@ -264,6 +264,8 @@ public function storeUploadedFile(array $file): void $file['name'], $this->getMailPath() . '/' . $this->user_id . '_' . $file['name'] ); + + return $file['name']; } public function copyAttachmentFile(string $a_abs_path, string $a_new_name): bool diff --git a/components/ILIAS/Mail/classes/class.ilMail.php b/components/ILIAS/Mail/classes/class.ilMail.php index c9684754c0e8..3c25186d1bfc 100755 --- a/components/ILIAS/Mail/classes/class.ilMail.php +++ b/components/ILIAS/Mail/classes/class.ilMail.php @@ -400,7 +400,8 @@ public function fetchMailData(?array $row): ?array } if (isset($row['attachments']) && is_string($row['attachments']) && str_contains($row['attachments'], '{')) { - $row['attachments'] = unserialize($row['attachments']); + $unserialized_attachments = unserialize($row['attachments'], ['allowed_classes' => false]); + $row['attachments'] = is_array($unserialized_attachments) ? $unserialized_attachments : null; } elseif (isset($row['attachments']) && is_string($row['attachments']) && $row['attachments'] !== '') { $row['attachments'] = new ResourceCollectionIdentification($row['attachments']); } else { @@ -567,7 +568,8 @@ private function sendInternalMail( if ($use_placeholders) { $message = $this->replacePlaceholders($message, $usr_id); } - $message = $this->formatLinebreakMessage($this->refinery->string()->markdown()->toHTML()->transform($message) ?? ''); + + $message = str_ireplace(['
', '
', '
'], "\n", $message); $next_id = $this->db->nextId($this->table_mail); $this->db->insert($this->table_mail, [ @@ -1044,9 +1046,9 @@ public function enqueue( ): array { global $DIC; - $sanitizeMb4Encoding = new Utf8Mb4Sanitizer(); - $a_m_subject = $sanitizeMb4Encoding->transform($a_m_subject); - $a_m_message = $sanitizeMb4Encoding->transform($a_m_message); + $sanitizer = new Utf8Mb4Sanitizer(); + $a_m_subject = $sanitizer->transform($a_m_subject); + $a_m_message = $sanitizer->transform($a_m_message); $this->logger->info( 'New mail system task:' . @@ -1511,11 +1513,6 @@ public function setMailOptionsByUserIdMap(array $mail_options_by_usr_id_map): vo $this->mail_options_by_usr_id_map = $mail_options_by_usr_id_map; } - public function formatLinebreakMessage(string $message): string - { - return $message; - } - private function createRecipient(int $user_id): Recipient { return new Recipient( diff --git a/components/ILIAS/Mail/classes/class.ilMailAttachmentGUI.php b/components/ILIAS/Mail/classes/class.ilMailAttachmentGUI.php index 7cb37a7ca9c2..fcecc2d65943 100644 --- a/components/ILIAS/Mail/classes/class.ilMailAttachmentGUI.php +++ b/components/ILIAS/Mail/classes/class.ilMailAttachmentGUI.php @@ -38,7 +38,7 @@ class ilMailAttachmentGUI extends AbstractCtrlAwareUploadHandler implements private readonly ilLanguage $lng; private readonly ilObjUser $user; private readonly ilFormatMail $umail; - private readonly ilFileDataMail $mfile; + private readonly ilFileDataMail $fdm; private readonly Refinery $refinery; private readonly \ILIAS\UI\Factory $ui_factory; private readonly \ILIAS\UI\Renderer $ui_renderer; @@ -63,7 +63,7 @@ public function __construct() $this->ctrl->saveParameter($this, 'mobj_id'); $this->umail = new ilFormatMail($DIC->user()->getId()); - $this->mfile = new ilFileDataMail($DIC->user()->getId()); + $this->fdm = new ilFileDataMail($DIC->user()->getId()); } public function getUnsafeGetCommands(): array @@ -127,26 +127,26 @@ private function saveAttachments(): void ); if ($files_of_request !== [] && $files_of_request[0] === 'ALL_OBJECTS') { - $files_of_request = array_map(static fn(array $file): string => $file['name'], $this->mfile->getUserFilesData()); + $files_of_request = array_map(static fn(array $file): string => $file['name'], $this->fdm->getUserFilesData()); } foreach ($files_of_request as $file) { - if (is_file($this->mfile->getMailPath() . '/' . basename($this->user->getId() . '_' . urldecode((string) $file)))) { + if (is_file($this->fdm->getMailPath() . '/' . basename($this->user->getId() . '_' . urldecode((string) $file)))) { $files[] = urldecode((string) $file); $size_of_affected_files += filesize( - $this->mfile->getMailPath() . '/' . + $this->fdm->getMailPath() . '/' . basename($this->user->getId() . '_' . urldecode((string) $file)) ); } } if ($files !== [] && - $this->mfile->getAttachmentsTotalSizeLimit() !== null && - $size_of_affected_files > $this->mfile->getAttachmentsTotalSizeLimit()) { + $this->fdm->getAttachmentsTotalSizeLimit() !== null && + $size_of_affected_files > $this->fdm->getAttachmentsTotalSizeLimit()) { $this->tpl->setOnScreenMessage( $this->tpl::MESSAGE_TYPE_FAILURE, $this->lng->txt('mail_max_size_attachments_total_error') . ' ' . - ilUtil::formatSize((int) $this->mfile->getAttachmentsTotalSizeLimit()) + ilUtil::formatSize((int) $this->fdm->getAttachmentsTotalSizeLimit()) ); $this->showAttachmentsCommand(); return; @@ -175,7 +175,7 @@ private function confirmDeleteAttachments(): void ); if ($files !== [] && $files[0] === 'ALL_OBJECTS') { - $files = array_map(static fn(array $file): string => $file['name'], $this->mfile->getUserFilesData()); + $files = array_map(static fn(array $file): string => $file['name'], $this->fdm->getUserFilesData()); } if ($files === []) { @@ -224,7 +224,7 @@ private function deleteAttachmentsCommand(): void $decoded_files[] = urldecode((string) $value); } - $error = $this->mfile->unlinkFiles($decoded_files); + $error = $this->fdm->unlinkFiles($decoded_files); if ($error !== '') { $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('mail_error_delete_file') . ' ' . $error, true); } else { @@ -280,7 +280,7 @@ private function showAttachmentsCommand(): void ->withBulky(true) ->withUploadButton( $this->ui_factory->button()->shy( - $this->lng->txt('upload'), + $this->lng->txt('select_files_from_computer'), '#' ) ); @@ -288,7 +288,7 @@ private function showAttachmentsCommand(): void } $mail_data = $this->umail->retrieveFromStage(); - $files = $this->mfile->getUserFilesData(); + $files = $this->fdm->getUserFilesData(); $records = []; $checked_items = []; foreach ($files as $file) { @@ -358,7 +358,7 @@ protected function getUploadResult(): HandlerResult $result = end($array); if ($result instanceof UploadResult && $result->isOK()) { - $identifier = $this->mfile->storeUploadedFile($result); + $identifier = $this->fdm->storeUploadedFile($result); $status = HandlerResult::STATUS_OK; $message = $this->lng->txt('saved_successfully'); $this->tpl->setOnScreenMessage($this->tpl::MESSAGE_TYPE_SUCCESS, $this->lng->txt('saved_successfully'), true); diff --git a/components/ILIAS/Mail/classes/class.ilMailFolderGUI.php b/components/ILIAS/Mail/classes/class.ilMailFolderGUI.php index 91acad72a644..fcf15c2a0ed1 100755 --- a/components/ILIAS/Mail/classes/class.ilMailFolderGUI.php +++ b/components/ILIAS/Mail/classes/class.ilMailFolderGUI.php @@ -32,7 +32,7 @@ use ILIAS\User\Profile\PublicProfileGUI; /** - * @ilCtrl_Calls ilMailFolderGUI: + * @ilCtrl_Calls ilMailFolderGUI: ILIAS\User\Profile\PublicProfileGUI */ class ilMailFolderGUI implements ilCtrlSecurityInterface { @@ -919,7 +919,11 @@ protected function showMail(): void str_replace( ['{', '}'], ['{', '}'], - html_entity_decode($this->refinery->string()->markdown()->toHTML()->transform($mail_data['m_message']) ?? '') + $this->refinery->string()->makeClickable()->transform( + html_entity_decode( + $this->refinery->string()->markdown()->toHTML()->transform($mail_data['m_message']) ?? '' + ) + ) ) ); diff --git a/components/ILIAS/Mail/classes/class.ilMailFormGUI.php b/components/ILIAS/Mail/classes/class.ilMailFormGUI.php index e6e359d13ecc..28906f0a760d 100755 --- a/components/ILIAS/Mail/classes/class.ilMailFormGUI.php +++ b/components/ILIAS/Mail/classes/class.ilMailFormGUI.php @@ -35,6 +35,8 @@ use ILIAS\Data\Clock\ClockFactory; use ILIAS\Data\Factory as DataFactory; use ILIAS\Mail\Folder\MailScheduleData; +use ILIAS\UI\URLBuilder; +use ILIAS\Data\URI; /** * @ilCtrl_Calls ilMailFormGUI: ilMailAttachmentGUI, ilMailSearchGUI, ilMailSearchCoursesGUI, ilMailSearchGroupsGUI, ilMailingListsGUI, ilMailFormUploadHandlerGUI @@ -53,6 +55,8 @@ class ilMailFormGUI final public const string MAIL_FORM_TYPE_FORWARD = 'forward'; final public const string MAIL_FORM_TYPE_DRAFT = 'draft'; final public const string MAIL_FORM_TYPE_OUTBOX = 'outbox'; + final public const string MAIL_FORM_MODE_REGULAR_MAIL = 'regular_mail'; + final public const string MAIL_FORM_MODE_SERIAL_LETTER = 'serial_letter'; private readonly ilGlobalTemplateInterface $tpl; private readonly ilCtrlInterface $ctrl; @@ -226,8 +230,8 @@ protected function decodeAttachmentFiles(array $files): array public function saveMessageToOutbox(array $form_values, Form $form): void { $files = []; - if (count($form_values["attachments"]) > 0) { - $files = $this->handleAttachments($form_values["attachments"]); + if (count($form_values['attachments']) > 0) { + $files = $this->handleAttachments($form_values['attachments']); } $rcp_to = ''; @@ -315,17 +319,15 @@ public function sendMessage(): void $value = $result->value()[0]; $schedule_date = $value['use_schedule']['m_schedule'] ?? null; - if ( - $schedule_date instanceof DateTimeImmutable && - $schedule_date > $this->clock->local(new DateTimeZone($this->user->getTimeZone()))->now() - ) { + if ($schedule_date instanceof DateTimeImmutable && + $schedule_date > $this->clock->local(new DateTimeZone($this->user->getTimeZone()))->now()) { $this->saveMessageToOutbox($value, $form); return; } $files = []; - if (count($value["attachments"]) > 0) { - $files = $this->handleAttachments($value["attachments"]); + if (count($value['attachments']) > 0) { + $files = $this->handleAttachments($value['attachments']); } $mailer = $this->umail @@ -339,14 +341,14 @@ public function sendMessage(): void $rcp_to = ''; $rcp_cc = ''; $rcp_bcc = ''; - if ($value['rcp_to'] != []) { - $rcp_to = $value['rcp_to'][0]; + if (!empty($value['rcp_to'])) { + $rcp_to = implode(',', $value['rcp_to']); } - if ($value['rcp_cc'] != []) { - $rcp_cc = $value['rcp_cc'][0]; + if (!empty($value['rcp_cc'])) { + $rcp_cc = implode(',', $value['rcp_cc']); } - if ($value['rcp_bcc'] != []) { - $rcp_bcc = $value['rcp_bcc'][0]; + if (!empty($value['rcp_bcc'])) { + $rcp_bcc = implode(',', $value['rcp_bcc']); } if ($errors = $mailer->enqueue( @@ -354,13 +356,15 @@ public function sendMessage(): void $rcp_cc, $rcp_bcc, ilUtil::securePlainString($value['m_subject']), - $value['m_message'], + (new ilMailBody($value['m_message'], $this->purifier))->getContent(), $files, $value['use_placeholders'] - ) - ) { + )) { + $mailer->autoresponder()->disableAutoresponder(); + $this->showSubmissionErrors($errors); $this->showForm($form); + $this->http->close(); } else { $mailer->autoresponder()->disableAutoresponder(); @@ -418,21 +422,17 @@ public function saveDraft(): void $value['m_subject'] = $this->lng->txt('mail_no_subject'); } $files = []; - if (count($value["attachments"]) > 0) { - $files = $this->handleAttachments($value["attachments"]); + if (count($value['attachments']) > 0) { + $files = $this->handleAttachments($value['attachments']); } $draft_folder_id = $this->mbox->getDraftsFolder(); - $rcp_to = ilUtil::securePlainString($this->getBodyParam('rcp_to', $this->refinery->kindlyTo()->string(), '')); - $rcp_cc = ilUtil::securePlainString($this->getBodyParam('rcp_cc', $this->refinery->kindlyTo()->string(), '')); - $rcp_bcc = ilUtil::securePlainString($this->getBodyParam('rcp_bcc', $this->refinery->kindlyTo()->string(), '')); + $rcp_to = !empty($value['rcp_to']) ? implode(',', $value['rcp_to']) : ''; + $rcp_cc = !empty($value['rcp_cc']) ? implode(',', $value['rcp_cc']) : ''; + $rcp_bcc = !empty($value['rcp_bcc']) ? implode(',', $value['rcp_bcc']) : ''; - if ($errors = $this->umail->validateRecipients( - $rcp_to, - $rcp_cc, - $rcp_bcc, - )) { + if ($errors = $this->umail->validateRecipients($rcp_to, $rcp_cc, $rcp_bcc)) { $this->request_attachments = $files; $this->showSubmissionErrors($errors); $this->showForm($form); @@ -449,9 +449,9 @@ public function saveDraft(): void $this->umail->updateDraft( $draft_folder_id, $files, - implode(',', $value['rcp_to']), - implode(',', $value['rcp_cc']), - implode(',', $value['rcp_bcc']), + $rcp_to, + $rcp_cc, + $rcp_bcc, ilUtil::securePlainString($value['m_subject']), $value['m_message'], $draft_id, @@ -655,8 +655,8 @@ public function showForm(?Form $form = null): void $mail_data['rcp_cc'] = ''; $mail_data['rcp_bcc'] = ''; $mail_data['attachments'] = []; - $mail_data["m_subject"] = ''; - $mail_data["m_message"] = ''; + $mail_data['m_subject'] = ''; + $mail_data['m_message'] = ''; $mail_id = $this->getQueryParam('mail_id', $this->refinery->kindlyTo()->int(), 0); $type = $this->getQueryParam('type', $this->refinery->kindlyTo()->string(), ''); @@ -850,10 +850,10 @@ public function showForm(?Form $form = null): void } $this->tpl->parseCurrentBlock(); - $this->addToolbarButtons(); - if ($form === null) { - $form = $this->buildForm($mail_data); - } + + $form ??= $this->buildForm($mail_data); + $this->addToolbarButtons($form); + $this->tpl->setVariable('FORM', $this->ui_renderer->render($form)); $this->tpl->addJavaScript('assets/js/ilMailComposeFunctions.js'); $this->tpl->printToStdout(); @@ -909,21 +909,27 @@ public function cancelMail(): void $this->showForm(); } - protected function saveMailBeforeSearch(): void + /** + * @param array|null $input_results + */ + private function saveMailBeforeSearch(?array $input_results = null): void { - $form = $this->buildForm()->withRequest($this->request); - $result = $form->getInputGroup()->getInputs()[0]->getInputs(); + if (empty($input_results)) { + $form = $this->buildForm()->withRequest($this->request); + $result = $form->getInputGroup()->getInputs()[0]->getInputs(); + } else { + $result = $input_results; + } $resource_collection_id = null; - $attachments = $result['attachments']->getValue(); - if (count($attachments) > 0) { + if (!empty($result['attachments']->getValue())) { $files = $this->handleAttachments($result['attachments']->getValue()); $resource_collection_id = $this->getIdforCollection($files); } - $rcp_to = implode(",", $result['rcp_to']->getValue() ?? []); - $rcp_cc = implode(",", $result['rcp_cc']->getValue() ?? []); - $rcp_bcc = implode(",", $result['rcp_bcc']->getValue() ?? []); + $rcp_to = implode(',', $result['rcp_to']->getValue() ?? []); + $rcp_cc = implode(',', $result['rcp_cc']->getValue() ?? []); + $rcp_bcc = implode(',', $result['rcp_bcc']->getValue() ?? []); $this->umail->persistToStage( $this->user->getId(), @@ -968,8 +974,7 @@ protected function buildForm(?array $mail_data = null): Form )->withAdditionalFormAction( $this->ctrl->getFormAction($this, 'saveDraft'), $this->lng->txt('save_message') - )->withSubmitLabel($this->lng->txt('send_mail')) - ; + )->withSubmitLabel($this->lng->txt('send_mail')); } private function getUserSearchConfigurator(): \ILIAS\User\Search\EndpointConfigurator @@ -984,7 +989,12 @@ protected function buildFormElements(?array $mail_data): array $rcp_to = $this->user_search->getInput( $this->lng->txt('mail_to'), $this->getUserSearchConfigurator() - )->withRequired(true); + )->withRequired(true, $this->refinery->logical()->sequential([ + $this->refinery->logical()->not($this->refinery->null()), + $this->refinery->string()->hasMinLength(1) + ])->withProblemBuilder(function ($txt) { + return $txt('mail_add_recipient'); + })); $rcp_cc = $this->user_search->getInput( $this->lng->txt('mail_cc'), $this->getUserSearchConfigurator() @@ -1006,29 +1016,32 @@ protected function buildFormElements(?array $mail_data): array } } - $has_files = !empty($mail_data["attachments"]); + $has_files = !empty($mail_data['attachments']); $attachments = $ff->file( $this->upload_handler, $this->lng->txt('attachments') )->withMaxFiles(10); - if (isset($mail_data["attachments"]) && $has_files) { + if (isset($mail_data['attachments']) && $has_files) { if ($mail_data['attachments'] instanceof \ILIAS\ResourceStorage\Identification\ResourceCollectionIdentification) { $mail_data['attachments'] = $this->FilesFromIRSSToLegacy($mail_data['attachments']); } - $attachments = $attachments->withValue($mail_data["attachments"] ?? []); + $attachments = $attachments->withValue($mail_data['attachments'] ?? []); } $template_chb = null; $signal = null; + $use_placeholder_value = false; + $context = new ilMailTemplateGenericContext(); if (ilMailFormCall::getContextId()) { $context_id = ilMailFormCall::getContextId(); try { $context = ilMailTemplateContextService::getTemplateContextById($context_id); + $use_placeholder_value = true; $templates = $this->template_service->loadTemplatesForContextId($context->getId()); - if (count($templates) > 0) { + if (!empty($templates)) { $options = []; $tmpl_value = ''; @@ -1041,8 +1054,8 @@ protected function buildFormElements(?array $mail_data): array if (!isset($mail_data['template_id']) && $template->isDefault()) { $tmpl_value = $template->getTplId(); - $mail_data["m_subject"] = $template->getSubject(); - $mail_data["m_message"] = $this->umail->appendSignature($template->getMessage()); + $mail_data['m_subject'] = $template->getSubject(); + $mail_data['m_message'] = $this->umail->appendSignature($template->getMessage()); } } if (isset($mail_data['template_id'])) { @@ -1050,15 +1063,16 @@ protected function buildFormElements(?array $mail_data): array } asort($options); - $template_chb = $ff->select( - $this->lng->txt('mail_template_client'), - $options, - $this->lng->txt('mail_template_client_info') - ) - ->withValue($tmpl_value) - ->withOnUpdate($signal); + $template_chb = $ff + ->select( + $this->lng->txt('mail_template_client'), + $options, + $this->lng->txt('mail_template_client_info') + ) + ->withValue($tmpl_value) + ->withOnUpdate($signal); } - } catch (Exception $e) { + } catch (Exception) { ilLoggerFactory::getLogger('mail')->error(sprintf( '%s has been called with invalid context id: %s.', __METHOD__, @@ -1066,35 +1080,47 @@ protected function buildFormElements(?array $mail_data): array )); } } else { - $context = new ilMailTemplateGenericContext(); + $use_placeholder_value = $mail_data['use_placeholders'] ?? false; } - $m_subject = $ff->text($this->lng->txt('subject')) - ->withRequired(true) - ->withMaxLength(200) - ->withValue($mail_data["m_subject"] ?? ''); + $m_subject = $ff + ->text($this->lng->txt('subject')) + ->withRequired( + true, + $this->refinery->logical()->sequential([ + $this->refinery->logical()->not($this->refinery->null()), + $this->refinery->string()->hasMinLength(1) + ])->withProblemBuilder(function ($txt) { + return $txt('mail_add_subject'); + }) + ) + ->withMaxLength(200) + ->withValue($mail_data['m_subject'] ?? ''); $m_message = $ff->markdown( new ilUIMarkdownPreviewGUI(), $this->lng->txt('message_content') - ) - ->withValue($mail_data["m_message"] ?? ''); + )->withValue($mail_data['m_message'] ?? ''); + + $use_placeholders = $ff->hidden()->withValue($use_placeholder_value ? '1' : '0'); - $use_placeholders = $ff->hidden()->withValue('0'); $placeholders = []; - foreach ($context->getPlaceholders() as $key => $value) { - $placeholders[$value['placeholder']] = $value['label']; - } - if (count($placeholders) > 0) { - $m_message = $m_message - ->withMustacheVariables( - $placeholders, - $this->lng->txt('mail_nacc_use_placeholder') . '
' - . sprintf($this->lng->txt('placeholders_advise'), '
') - ) - ; - $use_placeholders = $use_placeholders->withValue('1'); + $mode = $use_placeholder_value ? self::MAIL_FORM_MODE_SERIAL_LETTER : self::MAIL_FORM_MODE_REGULAR_MAIL; + if ($mode === self::MAIL_FORM_MODE_SERIAL_LETTER && $context) { + foreach ($context->getPlaceholders() as $value) { + $placeholders[$value['placeholder']] = $value['label']; + } + if (!empty($placeholders)) { + $m_message = $m_message + ->withMustacheVariables( + $placeholders, + $this->lng->txt('mail_nacc_use_placeholder') . '
' + . sprintf($this->lng->txt('placeholders_advise'), '
') + ) + ; + } } + $use_placeholders = $use_placeholders->withAdditionalTransformation( $this->refinery->kindlyTo()->bool() ); @@ -1124,7 +1150,7 @@ function ($id) use ($signal) { let triggerer = signalData.triggerer[0]; let tplId = triggerer.querySelector('select').value; if (tplId != '') { - message.value = decodeURIComponent(signalData.options[tplId + '_message'].replace(/\+/g, ' ')); + child.value = decodeURIComponent(signalData.options[tplId + '_message'].replace(/\+/g, ' ')); } }); "; @@ -1146,22 +1172,18 @@ function ($id) use ($signal) { $schedule_date_time_value = null; $current_time = $this->clock->local(new DateTimeZone($this->user->getTimeZone()))->now(); - $schedule_date_time_input = $ff->dateTime('') - ->withUseTime(true) - ->withTimezone($this->user->getTimezone()) - ->withAdditionalTransformation( - $this->refinery->custom()->constraint( - function (DateTimeImmutable $v) use ($current_time) { - return $v > $current_time; - }, - $this->lng->txt('mail_schedule_error_past_datetime') - ) - ); - - $title_validation_constraint = $this->refinery->custom()->constraint( - fn(string $v): bool => preg_match('/^il_.*$/', $v) ? false : true, - $this->lng->txt('msg_role_reserved_prefix') - ); + $schedule_date_time_input = $ff + ->dateTime($this->lng->txt('mail_schedule_scheduled_datetime')) + ->withUseTime(true) + ->withTimezone($this->user->getTimezone()) + ->withAdditionalTransformation( + $this->refinery->custom()->constraint( + function (DateTimeImmutable $v) use ($current_time) { + return $v > $current_time; + }, + $this->lng->txt('mail_schedule_error_past_datetime') + ) + ); if (isset($mail_data['schedule_datetime'])) { $schedule_time = new DateTimeImmutable( @@ -1190,8 +1212,8 @@ function (?array $v) { } $elements['use_schedule'] = $use_schedule_input; - $elements['use_placeholders'] = $use_placeholders; + $section = $ff->section( $elements, $this->lng->txt('compose') @@ -1202,10 +1224,61 @@ function (?array $v) { ]; } - protected function addToolbarButtons(): void + protected function addToolbarButtons(Form $form): void { $bf = $this->ui_factory->button(); + $result = $form->getInputGroup()->getInputs()[0]->getInputs(); + $use_placeholders = (bool) $result['use_placeholders']->getValue(); + $action = $this->ctrl->getFormAction($this, 'toggleMailMode'); + $url_builder = new UrlBuilder(new URI(ILIAS_HTTP_PATH . '/' . $action)); + [$url_builder, $mail_mode_parameter] = $url_builder->acquireParameter(['mail', 'form'], 'mail_mode'); + + $btn = $this->ui_factory->viewControl()->mode( + [ + $this->lng->txt(self::MAIL_FORM_MODE_REGULAR_MAIL) => (string) $url_builder->withParameter( + $mail_mode_parameter, + self::MAIL_FORM_MODE_REGULAR_MAIL + )->buildURI(), + $this->lng->txt(self::MAIL_FORM_MODE_SERIAL_LETTER) => (string) $url_builder->withParameter( + $mail_mode_parameter, + self::MAIL_FORM_MODE_SERIAL_LETTER + )->buildURI(), + ], + 'mail_mode_switch_label' + )->withActive( + $this->lng->txt($use_placeholders ? self::MAIL_FORM_MODE_SERIAL_LETTER : self::MAIL_FORM_MODE_REGULAR_MAIL) + ); + + $this->toolbar->addComponent($btn); + $this->toolbar->addSeparator(); + + $this->tpl->addOnLoadCode( + "document.getElementById('{$this->toolbar->getId()}') + .querySelector('div[aria-label=\"" . $this->lng->txt('mail_mode_switch_label') . "\"]') + .querySelectorAll('button[data-action]').forEach(function(button) { + button.addEventListener('click', function(event) { + event.preventDefault(); + event.stopPropagation(); + event.stopImmediatePropagation(); + + let mailform = document.querySelector('form.c-form'); + let action = button.getAttribute('data-action'); + if (action && mailform) { + let submitBtn = mailform.querySelector('button[type=\"submit\"]'); + if (submitBtn) { + submitBtn.formAction = action; + mailform.requestSubmit(btn); + } else { + mailform.action = action; + mailform.submit(); + } + } + return false; + }, true); + });" + ); + $action = $this->ctrl->getFormAction($this, 'searchUsers'); $btn = $bf->standard( $this->lng->txt('search_recipients'), @@ -1273,6 +1346,8 @@ function ($id) use ($action) { $this->toolbar->addComponent($btn); } + $this->toolbar->addSeparator(); + $action = $this->ctrl->getFormAction($this, 'editAttachments'); $btn = $bf->standard( $this->lng->txt('edit_attachments'), @@ -1289,4 +1364,40 @@ function ($id) use ($action) { ); $this->toolbar->addComponent($btn); } + + private function toggleMailMode(): never + { + $form = $this->buildForm()->withRequest($this->request); + + $mode = $this->getQueryParam( + 'mail_form_mail_mode', + $this->refinery->kindlyTo()->string(), + self::MAIL_FORM_MODE_REGULAR_MAIL + ); + + $result = null; + if (!ilMailFormCall::getContextId() && in_array( + $mode, + [self::MAIL_FORM_MODE_REGULAR_MAIL, self::MAIL_FORM_MODE_SERIAL_LETTER], + true + )) { + $result = $form->getInputGroup()->getInputs()[0]->getInputs(); + $result['use_placeholders'] = $result['use_placeholders']->withValue( + $mode === self::MAIL_FORM_MODE_SERIAL_LETTER ? '1' : '0' + ); + } elseif ($mode === self::MAIL_FORM_MODE_REGULAR_MAIL && ilMailFormCall::getContextId()) { + $this->tpl->setOnScreenMessage( + $this->tpl::MESSAGE_TYPE_INFO, + sprintf( + $this->lng->txt('mail_mode_switch_locked'), + $this->lng->txt('regular_mail') + ), + true + ); + } + + $this->saveMailBeforeSearch($result ?? null); + + $this->ctrl->redirect($this, 'searchResults'); + } } diff --git a/components/ILIAS/Mail/classes/class.ilMailGUI.php b/components/ILIAS/Mail/classes/class.ilMailGUI.php index b8a711f2a895..5aa9d55d3554 100755 --- a/components/ILIAS/Mail/classes/class.ilMailGUI.php +++ b/components/ILIAS/Mail/classes/class.ilMailGUI.php @@ -24,7 +24,8 @@ use ILIAS\Mail\Provider\MailGlobalScreenToolProvider; /** - * @ilCtrl_Calls ilMailGUI: ilMailFolderGUI, ilMailFormGUI, ilContactGUI, ilMailOptionsGUI, ilMailAttachmentGUI, ilMailSearchGUI, ilObjUserGUI + * @ilCtrl_Calls ilMailGUI: ilMailFolderGUI, ilMailFormGUI, ilContactGUI, ilMailOptionsGUI, ilMailAttachmentGUI, ilMailSearchGUI + * @ilCtrl_Calls ilMailGUI: ILIAS\User\Settings\PersonalSettingsGUI, ilObjUserGUI */ class ilMailGUI implements ilCtrlBaseClassInterface { diff --git a/components/ILIAS/Mail/classes/class.ilMailNotification.php b/components/ILIAS/Mail/classes/class.ilMailNotification.php index 89aa9d8564ba..0b79f5d3313d 100755 --- a/components/ILIAS/Mail/classes/class.ilMailNotification.php +++ b/components/ILIAS/Mail/classes/class.ilMailNotification.php @@ -311,6 +311,7 @@ protected function isRefIdAccessible(int $a_user_id, int $a_ref_id, string $a_pe public function getBlockBorder(): string { - return "----------------------------------------\n"; + // Hyphen-only lines were interpreted as Setext-style headings by the Markdown mail renderer, resulting in unintended

output. + return "\n---\n"; } } diff --git a/components/ILIAS/Mail/classes/class.ilMailOptions.php b/components/ILIAS/Mail/classes/class.ilMailOptions.php index c94871c24c4f..bebb75d1e0b6 100755 --- a/components/ILIAS/Mail/classes/class.ilMailOptions.php +++ b/components/ILIAS/Mail/classes/class.ilMailOptions.php @@ -128,7 +128,7 @@ public function mayModifyNewMailNotificationSetting(): bool public function mayManageInvididualSettings(): bool { - return $this->settings->get('show_mail_settings') === '1'; + return $this->settings->get('show_mail_settings', '0') === '1'; } protected function read(): void diff --git a/components/ILIAS/Mail/classes/class.ilMailOptionsGUI.php b/components/ILIAS/Mail/classes/class.ilMailOptionsGUI.php index 2c222f9ac666..2ca87d7ab0cf 100755 --- a/components/ILIAS/Mail/classes/class.ilMailOptionsGUI.php +++ b/components/ILIAS/Mail/classes/class.ilMailOptionsGUI.php @@ -66,7 +66,7 @@ public function executeCommand(): void $this->refinery->kindlyTo()->string() ); } - if (strtolower(ilPersonalSettingsGUI::class) === strtolower($referrer)) { + if (strtolower(PersonalSettingsGUI::class) === strtolower($referrer)) { $this->ctrl->redirectByClass(PersonalSettingsGUI::class); } $this->ctrl->redirectByClass(ilMailGUI::class); diff --git a/components/ILIAS/Mail/classes/class.ilMailTemplateTable.php b/components/ILIAS/Mail/classes/class.ilMailTemplateTable.php index fe246bab0310..28ba3725b111 100644 --- a/components/ILIAS/Mail/classes/class.ilMailTemplateTable.php +++ b/components/ILIAS/Mail/classes/class.ilMailTemplateTable.php @@ -108,6 +108,7 @@ public function getComponent(): DataTable 'mail_man_tpl' ) ->withOrder(new Order('title', Order::ASC)) + ->withRange(new Range(0, 100)) ->withRequest($this->http_request); } diff --git a/components/ILIAS/Mail/classes/class.ilMailUserCache.php b/components/ILIAS/Mail/classes/class.ilMailUserCache.php index 0efbd7f3faa0..ce41099f7df9 100755 --- a/components/ILIAS/Mail/classes/class.ilMailUserCache.php +++ b/components/ILIAS/Mail/classes/class.ilMailUserCache.php @@ -41,8 +41,8 @@ public static function preloadUserObjects(array $usr_ids): void if ($usr_ids_to_request !== []) { $in = $DIC->database()->in('ud.usr_id', $usr_ids_to_request, false, 'integer'); $query = " - SELECT ud.usr_id, login, firstname, lastname, title, gender, - pprof.value public_profile,pup.value public_upload, pupgen.value public_gender + SELECT ud.usr_id, login, firstname, lastname, title, gender, + pprof.value public_profile,pup.value public_avatar, pupgen.value public_gender FROM usr_data ud LEFT JOIN usr_pref pprof ON pprof.usr_id = ud.usr_id AND pprof.keyword = %s LEFT JOIN usr_pref pupgen ON pupgen.usr_id = ud.usr_id AND pupgen.keyword = %s @@ -53,7 +53,7 @@ public static function preloadUserObjects(array $usr_ids): void $res = $DIC->database()->queryF( $query, ['text', 'text', 'text'], - ['public_profile', 'public_gender', 'public_upload'] + ['public_profile', 'public_gender', 'public_avatar'] ); while ($row = $DIC->database()->fetchAssoc($res)) { @@ -65,7 +65,7 @@ public static function preloadUserObjects(array $usr_ids): void $user->setFirstname((string) $row['firstname']); $user->setLastname((string) $row['lastname']); $user->setPref('public_profile', $row['public_profile']); - $user->setPref('public_upload', $row['public_upload']); + $user->setPref('public_avatar', $row['public_avatar']); $user->setPref('public_gender', $row['public_gender']); self::$user_instances[(int) $row['usr_id']] = $user; diff --git a/components/ILIAS/Mail/classes/class.ilMimeMail.php b/components/ILIAS/Mail/classes/class.ilMimeMail.php index 8e37b768841d..fc392c1905e6 100755 --- a/components/ILIAS/Mail/classes/class.ilMimeMail.php +++ b/components/ILIAS/Mail/classes/class.ilMimeMail.php @@ -241,11 +241,11 @@ protected function build(): void $this->buildBodyMultiParts($skin, $style); $this->buildHtmlInlineImages($skin, $style); } else { - $this->final_body = $this->removeHTMLTags($this->body); + $this->final_body = $this->removeHtmlTags($this->body); } } - private function removeHTMLTags(string $maybe_html): string + private function removeHtmlTags(string $maybe_html): string { $maybe_html = str_ireplace(['
', '
', '
'], "\n", $maybe_html); @@ -258,18 +258,36 @@ protected function buildBodyMultiParts(string $skin, string $style): void $this->body = ' '; } - if (strip_tags($this->body, '') === $this->body) { - // Let's assume(!) that there is no HTML - // (except certain tags, e.g. used for object title formatting, where the consumer is not aware of this), - // so convert "\n" to "
" - $this->final_body_alt = strip_tags($this->body); - $this->body = $this->refinery->string()->makeClickable()->transform(nl2br($this->body)); + $contains_html = $this->containsHtmlBlockElementsOrLineBreaks($this->body); + if ($contains_html) { + $this->final_body_alt = strip_tags(str_ireplace(['
', '
', '
'], "\n", $this->body)); } else { - // if there is HTML, convert "
" to "\n" and strip tags for plain text alternative - $this->final_body_alt = strip_tags(str_ireplace(["
", "
", "
"], "\n", $this->body)); + $this->final_body_alt = strip_tags($this->body); + $this->body = nl2br($this->body); + } + + $body_with_clickable_urls = $this->refinery->string()->makeClickable()->transform($this->body); + + $this->final_body = str_replace( + '{PLACEHOLDER}', + $body_with_clickable_urls, + $this->getHtmlEnvelope($skin, $style) + ); + } + + private function containsHtmlBlockElementsOrLineBreaks(string $email_body): bool + { + if (str_contains($email_body, '<') === false || str_contains($email_body, '>') === false) { + return false; + } + + // Detect common HTML tags produced by Markdown rendering. + $pattern = '~final_body = str_replace('{PLACEHOLDER}', $this->body, $this->getHtmlEnvelope($skin, $style)); + return strip_tags($email_body, '
') !== $email_body; } private function getPathToRootDirectory(): string diff --git a/components/ILIAS/Mail/classes/class.ilObjMailGUI.php b/components/ILIAS/Mail/classes/class.ilObjMailGUI.php index 50a8207bc521..d39f6d9645a4 100755 --- a/components/ILIAS/Mail/classes/class.ilObjMailGUI.php +++ b/components/ILIAS/Mail/classes/class.ilObjMailGUI.php @@ -277,7 +277,7 @@ protected function populateGeneralSettingsForm(ilPropertyFormGUI $form): void 'mail_address_option_both' => $this->settings->get('mail_address_option', '') !== '' ? $this->settings->get('mail_address_option') : (string) ilMailOptions::FIRST_EMAIL, - 'show_mail_settings' => (bool) $this->settings->get('show_mail_settings', '1'), + 'show_mail_settings' => (bool) $this->settings->get('show_mail_settings', '0'), 'mail_maxsize_attach' => $this->settings->get('mail_maxsize_attach', ''), 'mail_notification' => $this->settings->get('mail_notification', ''), 'mail_auto_responder_idle_time' => is_numeric($this->settings->get('mail_auto_responder_idle_time', (string) AutoresponderService::AUTO_RESPONDER_DEFAULT_IDLE_TIME)) ? diff --git a/components/ILIAS/Mail/phpunit.xml b/components/ILIAS/Mail/phpunit.xml index 897b86690056..2a3541fe8617 100755 --- a/components/ILIAS/Mail/phpunit.xml +++ b/components/ILIAS/Mail/phpunit.xml @@ -10,6 +10,7 @@ displayDetailsOnTestsThatTriggerDeprecations="true" displayDetailsOnTestsThatTriggerNotices="true" displayDetailsOnSkippedTests="true" + displayDetailsOnPhpunitDeprecations="true" backupGlobals="false" bootstrap="./tests/bootstrap.php" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"> diff --git a/components/ILIAS/Mail/src/Cron/ScheduledMailsCron.php b/components/ILIAS/Mail/src/Cron/ScheduledMailsCron.php index e4604336a0bf..e503c99d2ad0 100644 --- a/components/ILIAS/Mail/src/Cron/ScheduledMailsCron.php +++ b/components/ILIAS/Mail/src/Cron/ScheduledMailsCron.php @@ -150,12 +150,14 @@ public function run(): JobResult 'Error sending scheduled mail with id ' . ((string) ($mail->getInternalMailId() ?? 'unknown')) . ': ' . $e->getMessage() . '\n' . $e->getTraceAsString() ); - $job_result->setMessage(substr($e->getMessage() . ' ' . $e->getTraceAsString(), 0, 4000)); + $job_result->setMessage(mb_substr($e->getMessage() . ' ' . $e->getTraceAsString(), 0, 4000)); return $job_result; + } finally { + $mailer->autoresponder()->disableAutoresponder(); + $this->mail->deleteMails($sent_mail_ids); } } - $this->mail->deleteMails($sent_mail_ids); ilLoggerFactory::getLogger('mail')->info( 'Sent ' . count($sent_mail_ids) . ' scheduled mails and removed them from outbox.' ); diff --git a/components/ILIAS/Mail/src/UserSettings/IncomingMail.php b/components/ILIAS/Mail/src/UserSettings/IncomingMail.php index c184fe05e6d2..02f72cb3454b 100644 --- a/components/ILIAS/Mail/src/UserSettings/IncomingMail.php +++ b/components/ILIAS/Mail/src/UserSettings/IncomingMail.php @@ -41,7 +41,7 @@ public function getIdentifier(): string public function isAvailable(): bool { - return (new \ilSetting())->get('show_mail_settings') === '1'; + return (new \ilSetting())->get('show_mail_settings', '0') === '1'; } public function getLabel(Language $lng): string @@ -78,8 +78,8 @@ public function getInput( $lng->txt('mail_incoming_smtp') )->withDisabled( $user === null || ( - $user->getEmail() === '' && - $user->getSecondEmail() === '' + empty($user->getEmail()) && + empty($user->getSecondEmail()) ) ), \ilMailOptions::INCOMING_BOTH => $field_factory->group( @@ -87,8 +87,8 @@ public function getInput( $lng->txt('mail_incoming_both') )->withDisabled( $user === null || ( - $user->getEmail() === '' && - $user->getSecondEmail() === '' + empty($user->getEmail()) && + empty($user->getSecondEmail()) ) ) ], @@ -109,6 +109,7 @@ public function getLegacyInput( $input = new \ilIncomingMailInputGUI($lng->txt('mail_incoming'), 'incoming_mail'); $input->setFreeOptionChoice(false); + $input->setUser($user); $input->setValueByArray( $user !== null ? $this->retrieveValueFromUser($user) @@ -216,9 +217,9 @@ private function buildTransformation( function (array $v) use ($refinery, $user): array { $email_address_option = $v[1]['mail_address_option'] ?? null; if ($user !== null) { - if ($user->getEmail() !== '' && $user->getSecondEmail() === '') { + if (!empty($user->getEmail()) && empty($user->getSecondEmail())) { $email_address_option = \ilMailOptions::FIRST_EMAIL; - } elseif ($user->getSecondEmail() !== '' && $user->getEmail() === '') { + } elseif (!empty($user->getSecondEmail()) && empty($user->getEmail())) { $email_address_option = \ilMailOptions::SECOND_EMAIL; } } @@ -253,7 +254,7 @@ private function buildValueSetterArray( ]; if ($value['incoming_mail'] === \ilMailOptions::INCOMING_LOCAL || - ($user->getEmail() === '' && $user->getSecondEmail() === '')) { + (empty($user->getEmail()) && empty($user->getSecondEmail()))) { return $value['incoming_mail']; } @@ -270,7 +271,7 @@ private function buildEmailInputs( FieldFactory $field_factory, ?\ilObjUser $user ): array { - if ($user === null || ($user->getEmail() === '' && $user->getSecondEmail() === '')) { + if ($user === null || (empty($user->getEmail()) && empty($user->getSecondEmail()))) { return []; } @@ -289,7 +290,7 @@ private function buildEmailInputs( ->withOption( (string) \ilMailOptions::SECOND_EMAIL, $lng->txt('mail_second_email'), - $user->getSecondEmail() === '' + empty($user->getSecondEmail()) ? $lng->txt('second_email_missing_info') : $user->getSecondEmail() ) diff --git a/components/ILIAS/Mail/src/UserSettings/NewMailNotification.php b/components/ILIAS/Mail/src/UserSettings/NewMailNotification.php index f01ae9d0713a..7317dc2fc907 100644 --- a/components/ILIAS/Mail/src/UserSettings/NewMailNotification.php +++ b/components/ILIAS/Mail/src/UserSettings/NewMailNotification.php @@ -44,7 +44,7 @@ public function isAvailable(): bool return $settings->get('mail_notification') === '1' && - $settings->get('show_mail_settings') === '1'; + $settings->get('show_mail_settings', '0') === '1'; } public function getLabel(Language $lng): string diff --git a/components/ILIAS/Mail/templates/default/tpl.mail_new.html b/components/ILIAS/Mail/templates/default/tpl.mail_new.html index 8160e818fc50..b46a8b1b5fa5 100755 --- a/components/ILIAS/Mail/templates/default/tpl.mail_new.html +++ b/components/ILIAS/Mail/templates/default/tpl.mail_new.html @@ -2,6 +2,13 @@ \ No newline at end of file diff --git a/components/ILIAS/Mail/tests/gui/ilMailOptionsGUITest.php b/components/ILIAS/Mail/tests/gui/ilMailOptionsGUITest.php index 3dd72058fdd1..04d2e945f3cf 100755 --- a/components/ILIAS/Mail/tests/gui/ilMailOptionsGUITest.php +++ b/components/ILIAS/Mail/tests/gui/ilMailOptionsGUITest.php @@ -150,7 +150,7 @@ public function testMailOptionsAreNotAccessibleIfGlobalAccessIsDeniedAndUserWill $request = $this->getMockBuilder(ServerRequestInterface::class)->disableOriginalConstructor()->getMock(); $request->method('getQueryParams')->willReturn([ - 'referrer' => ilPersonalSettingsGUI::class, + 'referrer' => PersonalSettingsGUI::class, ]); $wrapper = new WrapperFactory($request); diff --git a/components/ILIAS/MainMenu/classes/Administration/SubItems/class.ilMMSubItemGUI.php b/components/ILIAS/MainMenu/classes/Administration/SubItems/class.ilMMSubItemGUI.php index c56e82774d09..737288c8654b 100755 --- a/components/ILIAS/MainMenu/classes/Administration/SubItems/class.ilMMSubItemGUI.php +++ b/components/ILIAS/MainMenu/classes/Administration/SubItems/class.ilMMSubItemGUI.php @@ -35,16 +35,21 @@ class ilMMSubItemGUI extends ilMMBaseGUI private TokenContainer $sub_token; private TokenContainer $top_token; - private ilMMItemFacadeInterface $parent_item; + private ?ilMMItemFacadeInterface $parent_item = null; public function __construct(Pons $pons) { parent::__construct($pons); $this->sub_token = $this->pons->in()->buildToken('sub', 'id'); $this->top_token = $this->pons->in()->buildToken('top', 'id'); - $this->parent_item = $this->repository->getItemFacadeForIdentificationString( - $this->pons->in()->getFirstFromRequest($this->top_token->token()) - ); + $identification = $this->pons->in()->getFirstFromRequest($this->top_token->token()); + if ($identification === 'lost_items' || $identification === null) { + $this->parent_item = null; + } else { + $this->parent_item = $this->repository->getItemFacadeForIdentificationString( + $identification + ); + } } #[\Override] @@ -117,9 +122,15 @@ protected function form(bool $save = false): void $form = $this->buildForm(); - if ($save && $form->save()) { - $this->pons->out()->success($this->lng->t('item_updated'), true); - $this->pons->flow()->redirect(self::CMD_DEFAULT); + if ($save) { + if ($form->save()) { + $this->pons->out()->success($this->lng->t('item_updated'), true); + $this->pons->flow()->redirect(self::CMD_DEFAULT); + } else { + $this->pons->in()->keep($this->sub_token->token()); + $this->pons->out()->out($form->get()); + return; + } } $this->pons->out()->outAsyncAsModal( @@ -132,7 +143,7 @@ protected function form(bool $save = false): void protected function index(): void { $write_access = $this->access->hasUserPermissionTo('write'); - if ($write_access) { + if ($write_access && $this->parent_item !== null) { // ADD NEW $form = $this->buildForm(); $add_modal = $this->ui->factory()->modal()->roundtrip( diff --git a/components/ILIAS/MainMenu/classes/Administration/SubItems/class.ilMMSubItemTableComponent.php b/components/ILIAS/MainMenu/classes/Administration/SubItems/class.ilMMSubItemTableComponent.php index 407c3a855859..6eb7a3e69229 100755 --- a/components/ILIAS/MainMenu/classes/Administration/SubItems/class.ilMMSubItemTableComponent.php +++ b/components/ILIAS/MainMenu/classes/Administration/SubItems/class.ilMMSubItemTableComponent.php @@ -71,7 +71,7 @@ public function __construct( private Pons $pons, TokenContainer $token_container, private ilMMItemRepository $repository, - private ilMMItemFacadeInterface $parent_item, + private ?ilMMItemFacadeInterface $parent_item, private bool $write_access ) { $this->ui_factory = $this->pons->out()->ui()->factory(); @@ -82,15 +82,21 @@ public function __construct( public function getRows(OrderingRowBuilder $row_builder, array $visible_column_ids): Generator { - foreach ($this->repository->getSubItemsForTable($this->parent_item) as $top_item) { - $id = $top_item['identification']; + if ($this->parent_item === null) { + $items = $this->repository->getLostItems(); + } else { + $items = $this->repository->getSubItemsForTable($this->parent_item); + } + + foreach ($items as $sub_item) { + $id = $sub_item['identification']; $item = $this->repository->getItemFacade( $this->repository->resolveIdentificationFromString($id) ); $remark = $item->getStatus() !== null ? $this->ui_renderer->render($item->getStatus()) : ''; - if (preg_match('/^-[a-zA-Z0-9_]+-$/', $remark)) { + if (preg_match('/^-\w+-$/', $remark)) { // this is a language variable, translate it $remark = $this->pons->i18n()->t(substr($remark, 1, -1)); } @@ -131,77 +137,86 @@ public function getRows(OrderingRowBuilder $row_builder, array $visible_column_i public function get(): Component|array { - return [ - $this->ui_factory->table()->ordering( - $this, - $this->pons->flow()->getHereAsURI(ilMMSubItemGUI::CMD_SAVE_ORDER), - $this->parent_item->getDefaultTitle(), - [ - 'title' => $this->ui_factory->table()->column()->text( - $this->pons->i18n()->t('title', 'sub'), + if ($this->write_access) { + $actions = [ + self::ACTION_EDIT => $this->ui_factory->table()->action()->single( + $this->pons->i18n()->t('edit'), + $this->url_builder->withURI( + $this->pons->flow()->getHereAsURI(ilMMSubItemGUI::CMD_EDIT) ), - 'active' => $this->ui_factory->table()->column()->boolean( - $this->pons->i18n()->t('active', 'sub'), - $this->pons->out()->ok(), - $this->pons->out()->nok(), + $this->token + )->withAsync(true), + self::ACTION_TRANSLATE => $this->ui_factory->table()->action()->single( + $this->pons->i18n()->t('translate'), + $this->url_builder->withURI( + $this->pons->flow()->getTranslationAsURI() ), - 'status' => $this->ui_factory->table()->column()->text( - $this->pons->i18n()->t('status', 'sub'), + $this->token + )->withAsync(true), + self::ACTION_ACTIVATE => $this->ui_factory->table()->action()->standard( + $this->pons->i18n()->t('activate'), + $this->url_builder->withURI( + $this->pons->flow()->getHereAsURI(ilMMSubItemGUI::CMD_ACTIVATE) ), - 'type' => $this->ui_factory->table()->column()->text( - $this->pons->i18n()->t('type', 'topitem'), + $this->token + ), + self::ACTION_DEACTIVATE => $this->ui_factory->table()->action()->standard( + $this->pons->i18n()->t('deactivate'), + $this->url_builder->withURI( + $this->pons->flow()->getHereAsURI(ilMMSubItemGUI::CMD_DEACTIVATE) ), - 'provider' => $this->ui_factory->table()->column()->text( - $this->pons->i18n()->t('provider', 'topitem'), + $this->token + ), + self::ACTION_MOVE => $this->ui_factory->table()->action()->standard( + $this->pons->i18n()->t('move'), + $this->url_builder->withURI( + $this->pons->flow()->getHereAsURI(ilMMSubItemGUI::CMD_CONFIRM_MOVE) ), - ] - )->withRequest($this->pons->in()->request()) - ->withActions( - [ - self::ACTION_EDIT => $this->ui_factory->table()->action()->single( - $this->pons->i18n()->t('edit'), - $this->url_builder->withURI( - $this->pons->flow()->getHereAsURI(ilMMSubItemGUI::CMD_EDIT) - ), - $this->token - )->withAsync(true), - self::ACTION_TRANSLATE => $this->ui_factory->table()->action()->single( - $this->pons->i18n()->t('translate'), - $this->url_builder->withURI( - $this->pons->flow()->getTranslationAsURI() - ), - $this->token - )->withAsync(true), - self::ACTION_ACTIVATE => $this->ui_factory->table()->action()->standard( - $this->pons->i18n()->t('activate'), - $this->url_builder->withURI( - $this->pons->flow()->getHereAsURI(ilMMSubItemGUI::CMD_ACTIVATE) - ), - $this->token - ), - self::ACTION_DEACTIVATE => $this->ui_factory->table()->action()->standard( - $this->pons->i18n()->t('deactivate'), - $this->url_builder->withURI( - $this->pons->flow()->getHereAsURI(ilMMSubItemGUI::CMD_DEACTIVATE) - ), - $this->token - ), - self::ACTION_MOVE => $this->ui_factory->table()->action()->standard( - $this->pons->i18n()->t('move'), - $this->url_builder->withURI( - $this->pons->flow()->getHereAsURI(ilMMSubItemGUI::CMD_CONFIRM_MOVE) - ), - $this->token - )->withAsync(true), - self::ACTION_DELETE => $this->ui_factory->table()->action()->standard( - $this->pons->i18n()->t('delete'), - $this->url_builder->withURI( - $this->pons->flow()->getHereAsURI(ilMMSubItemGUI::CMD_CONFIRM_DELETE) - ), - $this->token - )->withAsync(true), - ] - ) + $this->token + )->withAsync(true), + self::ACTION_DELETE => $this->ui_factory->table()->action()->standard( + $this->pons->i18n()->t('delete'), + $this->url_builder->withURI( + $this->pons->flow()->getHereAsURI(ilMMSubItemGUI::CMD_CONFIRM_DELETE) + ), + $this->token + )->withAsync(true), + ]; + } else { + $actions = []; + } + return [ + $this + ->ui_factory + ->table() + ->ordering( + $this, + $this->pons->flow()->getHereAsURI(ilMMSubItemGUI::CMD_SAVE_ORDER), + $this->parent_item?->getDefaultTitle() ?? $this->pons->i18n()->t('mme_lost_items'), + [ + 'title' => $this->ui_factory->table()->column()->text( + $this->pons->i18n()->t('title', 'sub'), + ), + 'active' => $this->ui_factory->table()->column()->boolean( + $this->pons->i18n()->t('active', 'sub'), + $this->pons->out()->ok(), + $this->pons->out()->nok(), + ), + 'status' => $this->ui_factory->table()->column()->text( + $this->pons->i18n()->t('status', 'sub'), + ), + 'type' => $this->ui_factory->table()->column()->text( + $this->pons->i18n()->t('type', 'topitem'), + ), + 'provider' => $this->ui_factory->table()->column()->text( + $this->pons->i18n()->t('provider', 'topitem'), + ), + ] + )->withRequest( + $this->pons->in()->request() + ) + ->withOrderingDisabled(!$this->write_access) + ->withActions($actions) ]; } } diff --git a/components/ILIAS/MainMenu/classes/Administration/TopItems/class.ilMMTopItemGUI.php b/components/ILIAS/MainMenu/classes/Administration/TopItems/class.ilMMTopItemGUI.php index ae0c10f45622..303a24ccfbac 100755 --- a/components/ILIAS/MainMenu/classes/Administration/TopItems/class.ilMMTopItemGUI.php +++ b/components/ILIAS/MainMenu/classes/Administration/TopItems/class.ilMMTopItemGUI.php @@ -35,6 +35,7 @@ class ilMMTopItemGUI extends ilMMBaseGUI public const CMD_RESTORE = 'restore'; public const CMD_SELECT_PARENT = 'selectParent'; public const CMD_MOVE = 'move'; + public const string CMD_FLUSH = 'flush'; private TokenContainer $top_token; @@ -112,9 +113,15 @@ protected function form(bool $save = false): void $form = $this->buildForm(); - if ($save && $form->save()) { - $this->pons->out()->success($this->lng->t('item_updated'), true); - $this->pons->flow()->redirect(self::CMD_DEFAULT); + if ($save) { + if ($form->save()) { + $this->pons->out()->success($this->lng->t('item_updated'), true); + $this->pons->flow()->redirect(self::CMD_DEFAULT); + } else { + $this->pons->in()->keep($this->top_token->token()); + $this->pons->out()->out($form->get()); + return; + } } $this->pons->out()->outAsyncAsModal( @@ -161,7 +168,7 @@ protected function index(): void $this->toolbar->addComponent($restoration_modal); // REMOVE LOST ITEMS - if ($this->repository->hasLostItems()) { + if ($this->repository->hasLostItems() && method_exists($this, self::CMD_FLUSH)) { $btn_flush = $this->ui->factory()->button()->standard( $this->lng->txt(self::CMD_FLUSH), $this->flow->getLinkTarget($this, self::CMD_FLUSH) @@ -195,22 +202,22 @@ private function selectParent(): string #[Command('write')] private function move(): void { - $item = $this->getCurrentItem(); - $data = $this->getMoveForm() ->withRequest($this->pons->in()->request()) ->getData(); - if (isset($data[0]) && $item->isInterchangeable()) { - $f = $this->repository->getItemFacadeForIdentificationString($data[0]); - $item->setParent($data[0]); - $this->repository->updateItem($item); - $this->pons->out()->success($this->lng->txt('msg_moved'), true); - } else { - $this->pons->out()->error($this->lng->txt('msg_not_moved'), true); - } + foreach ($this->getMutlipleItems() as $item) { + if (isset($data[0]) && $item->isInterchangeable()) { + $f = $this->repository->getItemFacadeForIdentificationString($data[0]); + $item->setParent($data[0]); + $this->repository->updateItem($item); + $this->pons->out()->success($this->lng->txt('msg_moved'), true); + } else { + $this->pons->out()->error($this->lng->txt('msg_not_moved'), true); + } - $this->pons->flow()->redirect(self::CMD_DEFAULT); + $this->pons->flow()->redirect(self::CMD_DEFAULT); + } } private function getMoveForm(): Standard diff --git a/components/ILIAS/MainMenu/classes/Administration/TopItems/class.ilMMTopItemTableComponent.php b/components/ILIAS/MainMenu/classes/Administration/TopItems/class.ilMMTopItemTableComponent.php index 8eeaf6fc5f2a..a01cb2a89b2c 100755 --- a/components/ILIAS/MainMenu/classes/Administration/TopItems/class.ilMMTopItemTableComponent.php +++ b/components/ILIAS/MainMenu/classes/Administration/TopItems/class.ilMMTopItemTableComponent.php @@ -146,10 +146,113 @@ public function getRows(OrderingRowBuilder $row_builder, array $visible_column_i !$item->canBeDeactivated(), ); } + + // Lost Items + if ($this->repository->hasLostItems()) { + yield $row_builder->buildOrderingRow( + $this->hash('lost_items'), + [ + 'title' => $this->ui_factory->link()->standard( + $this->pons->i18n()->t('mme_lost_items'), + (string) $this->url_builder + ->withURI( + $this->pons->flow()->getTargetURI(ilMMSubItemGUI::class, ilMMSubItemGUI::CMD_DEFAULT) + ) + ->withParameter($this->token, $this->hash('lost_items')) + ->buildURI() + ), + 'active' => false, + 'status' => '', + 'sub_items' => '-', + 'css_id' => "mm_lost_items", + 'type' => '-', + 'provider' => '-', + ] + )->withDisabledAction( + self::ACTION_EDIT, + true + )->withDisabledAction( + self::ACTION_TRANSLATE, + true + )->withDisabledAction( + self::ACTION_ACTIVATE, + true + )->withDisabledAction( + self::ACTION_DEACTIVATE, + true, + )->withDisabledAction( + self::ACTION_MOVE, + true + )->withDisabledAction( + self::ACTION_DELETE, + true + )->withDisabledAction( + self::ACTION_EDIT_SUB_TEMS, + true + ); + + } + } public function get(): Component|array { + $actions = [ + self::ACTION_EDIT_SUB_TEMS => $this->ui_factory->table()->action()->single( + $this->pons->i18n()->t('edit_sub_tems'), + $this->url_builder->withURI( + $this->pons->flow()->getTargetURI(ilMMSubItemGUI::class, ilMMSubItemGUI::CMD_DEFAULT) + ), + $this->token + ), + ]; + if ($this->write_access) { + $actions = array_merge($actions, [ + self::ACTION_EDIT => $this->ui_factory->table()->action()->single( + $this->pons->i18n()->t('edit'), + $this->url_builder->withURI( + $this->pons->flow()->getHereAsURI(ilMMTopItemGUI::CMD_EDIT) + ), + $this->token + )->withAsync(true), + self::ACTION_TRANSLATE => $this->ui_factory->table()->action()->single( + $this->pons->i18n()->t('translate'), + $this->url_builder->withURI( + $this->pons->flow()->getTranslationAsURI() + ), + $this->token + )->withAsync(true), + self::ACTION_ACTIVATE => $this->ui_factory->table()->action()->standard( + $this->pons->i18n()->t('activate'), + $this->url_builder->withURI( + $this->pons->flow()->getHereAsURI(ilMMTopItemGUI::CMD_ACTIVATE) + ), + $this->token + ), + self::ACTION_DEACTIVATE => $this->ui_factory->table()->action()->standard( + $this->pons->i18n()->t('deactivate'), + $this->url_builder->withURI( + $this->pons->flow()->getHereAsURI(ilMMTopItemGUI::CMD_DEACTIVATE) + ), + $this->token + ), + self::ACTION_MOVE => $this->ui_factory->table()->action()->standard( + $this->pons->i18n()->t('move'), + $this->url_builder->withURI( + $this->pons->flow()->getHereAsURI(ilMMTopItemGUI::CMD_SELECT_PARENT) + ), + $this->token + )->withAsync(true), + self::ACTION_DELETE => $this->ui_factory->table()->action()->standard( + $this->pons->i18n()->t('delete'), + $this->url_builder->withURI( + $this->pons->flow()->getHereAsURI(ilMMTopItemGUI::CMD_CONFIRM_DELETE) + ), + $this->token + )->withAsync(true), + ]); + } + return [ $this->ui_factory ->table() @@ -180,59 +283,10 @@ public function get(): Component|array ), ] ) + ->withOrderingDisabled(!$this->write_access) ->withRequest($this->pons->in()->request()) ->withActions( - [ - self::ACTION_EDIT_SUB_TEMS => $this->ui_factory->table()->action()->single( - $this->pons->i18n()->t('edit_sub_tems'), - $this->url_builder->withURI( - $this->pons->flow()->getTargetURI(ilMMSubItemGUI::class, ilMMSubItemGUI::CMD_DEFAULT) - ), - $this->token - ), - self::ACTION_EDIT => $this->ui_factory->table()->action()->single( - $this->pons->i18n()->t('edit'), - $this->url_builder->withURI( - $this->pons->flow()->getHereAsURI(ilMMTopItemGUI::CMD_EDIT) - ), - $this->token - )->withAsync(true), - self::ACTION_TRANSLATE => $this->ui_factory->table()->action()->single( - $this->pons->i18n()->t('translate'), - $this->url_builder->withURI( - $this->pons->flow()->getTranslationAsURI() - ), - $this->token - )->withAsync(true), - self::ACTION_ACTIVATE => $this->ui_factory->table()->action()->standard( - $this->pons->i18n()->t('activate'), - $this->url_builder->withURI( - $this->pons->flow()->getHereAsURI(ilMMTopItemGUI::CMD_ACTIVATE) - ), - $this->token - ), - self::ACTION_DEACTIVATE => $this->ui_factory->table()->action()->standard( - $this->pons->i18n()->t('deactivate'), - $this->url_builder->withURI( - $this->pons->flow()->getHereAsURI(ilMMTopItemGUI::CMD_DEACTIVATE) - ), - $this->token - ), - self::ACTION_MOVE => $this->ui_factory->table()->action()->standard( - $this->pons->i18n()->t('move'), - $this->url_builder->withURI( - $this->pons->flow()->getHereAsURI(ilMMTopItemGUI::CMD_SELECT_PARENT) - ), - $this->token - )->withAsync(true), - self::ACTION_DELETE => $this->ui_factory->table()->action()->standard( - $this->pons->i18n()->t('delete'), - $this->url_builder->withURI( - $this->pons->flow()->getHereAsURI(ilMMTopItemGUI::CMD_CONFIRM_DELETE) - ), - $this->token - )->withAsync(true), - ] + $actions ) ]; } diff --git a/components/ILIAS/MainMenu/classes/Items/class.ilMMItemRepository.php b/components/ILIAS/MainMenu/classes/Items/class.ilMMItemRepository.php index 136037eb8d0e..3ff80fe2c452 100755 --- a/components/ILIAS/MainMenu/classes/Items/class.ilMMItemRepository.php +++ b/components/ILIAS/MainMenu/classes/Items/class.ilMMItemRepository.php @@ -25,7 +25,6 @@ use ILIAS\GlobalScreen\Identification\NullPluginIdentification; use ILIAS\GlobalScreen\Scope\MainMenu\Collector\Handler\TypeHandler; use ILIAS\GlobalScreen\Scope\MainMenu\Factory\isItem; -use ILIAS\GlobalScreen\Scope\MainMenu\Factory\Item\Lost; use ILIAS\GlobalScreen\Scope\MainMenu\Factory\TopItem\TopLinkItem; use ILIAS\GlobalScreen\Scope\MainMenu\Factory\TopItem\TopParentItem; use ILIAS\MainMenu\Provider\CustomMainBarProvider; @@ -110,6 +109,25 @@ public function getTopItems(): array )->getArray(); } + public function getLostItems(): array + { + $q = "SELECT sub_items.* " . + "FROM il_mm_items AS sub_items " . + "LEFT JOIN il_mm_items AS top_items ON top_items.identification = sub_items.parent_identification " . + "WHERE sub_items.parent_identification != '' AND sub_items.parent_identification IS NOT NULL " . + "AND (top_items.identification IS NULL OR top_items.identification = '') " . + "ORDER BY top_items.position, parent_identification, sub_items.position ASC"; + + $r = $this->db->query($q); + $return = []; + while ($data = $this->db->fetchAssoc($r)) { + $return[] = $data; + } + + return $return; + } + + public function getSubItemsForTable(?ilMMItemFacadeInterface $parent = null): array { if ($parent !== null) { @@ -141,45 +159,17 @@ public function getSubItemsForTable(?ilMMItemFacadeInterface $parent = null): ar public function flushLostItems(): void { - foreach ($this->getTopItems() as $item) { - $item_facade = $this->getItemFacade( - $this->services->identification()->fromSerializedIdentification($item['identification']) - ); - if (Lost::class === $item_facade->getType()) { - $item_facade->delete(); - } - } - - foreach ($this->getSubItemsForTable() as $item) { + foreach ($this->getLostItems() as $item) { $item_facade = $this->getItemFacade( $this->services->identification()->fromSerializedIdentification($item['identification']) ); - if (Lost::class === $item_facade->getType()) { - $item_facade->delete(); - } + $item_facade->delete(); } } public function hasLostItems(): bool { - foreach ($this->getTopItems() as $item) { - $item_facade = $this->getItemFacade( - $this->services->identification()->fromSerializedIdentification($item['identification']) - ); - if (Lost::class === $item_facade->getType()) { - return true; - } - } - - foreach ($this->getSubItemsForTable() as $item) { - $item_facade = $this->getItemFacade( - $this->services->identification()->fromSerializedIdentification($item['identification']) - ); - if (Lost::class === $item_facade->getType()) { - return true; - } - } - return false; + return count($this->getLostItems()) > 0; } /** diff --git a/components/ILIAS/MainMenu/classes/TypeHandler/class.ilMMTypeHandlerRepositoryLink.php b/components/ILIAS/MainMenu/classes/TypeHandler/class.ilMMTypeHandlerRepositoryLink.php index 3e671db260cd..7caf0b06e00c 100755 --- a/components/ILIAS/MainMenu/classes/TypeHandler/class.ilMMTypeHandlerRepositoryLink.php +++ b/components/ILIAS/MainMenu/classes/TypeHandler/class.ilMMTypeHandlerRepositoryLink.php @@ -51,8 +51,10 @@ public function enrichItem(isItem $item): isItem ->withVisibilityCallable( function () use ($DIC, $ref_id, $item): bool { $is_visible_parent = $item->isVisible(); - $has_access = $DIC->access()->checkAccess('join', '', $ref_id) - || $DIC->access()->checkAccess('read', '', $ref_id); + $has_access = $DIC->access()->checkAccess('visible', '', $ref_id) && ( + $DIC->access()->checkAccess('join', '', $ref_id) || + $DIC->access()->checkAccess('read', '', $ref_id) + ); return $is_visible_parent && $has_access; diff --git a/components/ILIAS/Maps/js/src/ServiceOpenLayers.js b/components/ILIAS/Maps/js/src/ServiceOpenLayers.js index 1bcdfc534e71..ce4d138ba26d 100755 --- a/components/ILIAS/Maps/js/src/ServiceOpenLayers.js +++ b/components/ILIAS/Maps/js/src/ServiceOpenLayers.js @@ -14,7 +14,7 @@ */ import View from 'ol/View'; -import Map from 'ol/Map'; +import OLMap from 'ol/Map'; import TileLayer from 'ol/layer/Tile'; import OSM from 'ol/source/OSM'; import {defaults as control} from 'ol/control'; @@ -95,7 +95,7 @@ export default class ServiceOpenLayers { * @return {void} */ initMap(id, replace_marker) { - this.map = new Map({ + this.map = new OLMap({ layers: [ new TileLayer({ preload: 4, @@ -373,4 +373,4 @@ export default class ServiceOpenLayers { $("#" + id + "_lng").val(human_pos[0]); $("#" + id + "_lat").val(human_pos[1]); } -} \ No newline at end of file +} diff --git a/components/ILIAS/Maps/resources/ServiceOpenLayers.js b/components/ILIAS/Maps/resources/ServiceOpenLayers.js index ae516d91b858..3fc8e3b49233 100644 --- a/components/ILIAS/Maps/resources/ServiceOpenLayers.js +++ b/components/ILIAS/Maps/resources/ServiceOpenLayers.js @@ -4835,7 +4835,7 @@ var LinearRing = /** @class */ (function (_super) { */ _this.maxDeltaRevision_ = -1; if (opt_layout !== undefined && !Array.isArray(coordinates[0])) { - _this.setFlatCoordinates(opt_layout, + _this.setFlatCoordinates(opt_layout, /** @type {Array} */ (coordinates)); } else { @@ -5052,7 +5052,7 @@ var Point = /** @class */ (function (_super) { * @return {boolean} Contains extent. */ function linearRingContainsExtent(flatCoordinates, offset, end, stride, extent) { - var outside = forEachCorner(extent, + var outside = forEachCorner(extent, /** * @param {import("../../coordinate.js").Coordinate} coordinate Coordinate. * @return {boolean} Contains (x, y). @@ -5249,7 +5249,7 @@ function intersectsLineString(flatCoordinates, offset, end, stride, extent) { if (coordinatesExtent[1] >= extent[1] && coordinatesExtent[3] <= extent[3]) { return true; } - return forEach(flatCoordinates, offset, end, stride, + return forEach(flatCoordinates, offset, end, stride, /** * @param {import("../../coordinate.js").Coordinate} point1 Start point. * @param {import("../../coordinate.js").Coordinate} point2 End point. @@ -5491,7 +5491,7 @@ var Polygon = /** @class */ (function (_super) { */ _this.orientedFlatCoordinates_ = null; if (opt_layout !== undefined && opt_ends) { - _this.setFlatCoordinates(opt_layout, + _this.setFlatCoordinates(opt_layout, /** @type {Array} */ (coordinates)); _this.ends_ = opt_ends; } @@ -9898,7 +9898,7 @@ var MapBrowserEventHandler = /** @class */ (function (_super) { this.down_ = pointerEvent; if (this.dragListenerKeys_.length === 0) { var doc = this.map_.getOwnerDocument(); - this.dragListenerKeys_.push(listen(doc, MapBrowserEventType.POINTERMOVE, this.handlePointerMove_, this), listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this), + this.dragListenerKeys_.push(listen(doc, MapBrowserEventType.POINTERMOVE, this.handlePointerMove_, this), listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this), /* Note that the listener for `pointercancel is set up on * `pointerEventHandler_` and not `documentPointerEventHandler_` like * the `pointerup` and `pointermove` listeners. @@ -10312,14 +10312,14 @@ var TileQueue = /** @class */ (function (_super) { * @param {function(): ?} tileChangeCallback Function called on each tile change event. */ function TileQueue(tilePriorityFunction, tileChangeCallback) { - var _this = _super.call(this, + var _this = _super.call(this, /** * @param {Array} element Element. * @return {number} Priority. */ function (element) { return tilePriorityFunction.apply(null, element); - }, + }, /** * @param {Array} element Element. * @return {string} Key. @@ -10785,14 +10785,14 @@ var PluggableMap = /** @class */ (function (_super) { function (control) { control.setMap(this); }.bind(_this)); - _this.controls.addEventListener(CollectionEventType.ADD, + _this.controls.addEventListener(CollectionEventType.ADD, /** * @param {import("./Collection.js").CollectionEvent} event CollectionEvent. */ function (event) { event.element.setMap(this); }.bind(_this)); - _this.controls.addEventListener(CollectionEventType.REMOVE, + _this.controls.addEventListener(CollectionEventType.REMOVE, /** * @param {import("./Collection.js").CollectionEvent} event CollectionEvent. */ @@ -10807,14 +10807,14 @@ var PluggableMap = /** @class */ (function (_super) { function (interaction) { interaction.setMap(this); }.bind(_this)); - _this.interactions.addEventListener(CollectionEventType.ADD, + _this.interactions.addEventListener(CollectionEventType.ADD, /** * @param {import("./Collection.js").CollectionEvent} event CollectionEvent. */ function (event) { event.element.setMap(this); }.bind(_this)); - _this.interactions.addEventListener(CollectionEventType.REMOVE, + _this.interactions.addEventListener(CollectionEventType.REMOVE, /** * @param {import("./Collection.js").CollectionEvent} event CollectionEvent. */ @@ -10822,7 +10822,7 @@ var PluggableMap = /** @class */ (function (_super) { event.element.setMap(null); }.bind(_this)); _this.overlays_.forEach(_this.addOverlayInternal_.bind(_this)); - _this.overlays_.addEventListener(CollectionEventType.ADD, + _this.overlays_.addEventListener(CollectionEventType.ADD, /** * @param {import("./Collection.js").CollectionEvent} event CollectionEvent. */ @@ -10830,7 +10830,7 @@ var PluggableMap = /** @class */ (function (_super) { this.addOverlayInternal_( /** @type {import("./Overlay.js").default} */ (event.element)); }.bind(_this)); - _this.overlays_.addEventListener(CollectionEventType.REMOVE, + _this.overlays_.addEventListener(CollectionEventType.REMOVE, /** * @param {import("./Collection.js").CollectionEvent} event CollectionEvent. */ @@ -11028,7 +11028,7 @@ var PluggableMap = /** @class */ (function (_super) { */ PluggableMap.prototype.getEventPixel = function (event) { var viewportPosition = this.viewport_.getBoundingClientRect(); - var eventPosition = + var eventPosition = //FIXME Are we really calling this with a TouchEvent anywhere? 'changedTouches' in event ? /** @type {TouchEvent} */ (event).changedTouches[0] @@ -13725,7 +13725,7 @@ var PointerInteraction = /** @class */ (function (_super) { function PointerInteraction(opt_options) { var _this = this; var options = opt_options ? opt_options : {}; - _this = _super.call(this, + _this = _super.call(this, /** @type {import("./Interaction.js").InteractionOptions} */ (options)) || this; if (options.handleDownEvent) { _this.handleDownEvent = options.handleDownEvent; @@ -15169,7 +15169,7 @@ var MouseWheelZoom = /** @class */ (function (_super) { function MouseWheelZoom(opt_options) { var _this = this; var options = opt_options ? opt_options : {}; - _this = _super.call(this, + _this = _super.call(this, /** @type {import("./Interaction.js").InteractionOptions} */ (options)) || this; /** * @private @@ -16733,12 +16733,12 @@ var __extends$M = (undefined && undefined.__extends) || (function () { * * @api */ -var Map = /** @class */ (function (_super) { - __extends$M(Map, _super); +var OLMap = /** @class */ (function (_super) { + __extends$M(OLMap, _super); /** * @param {import("./PluggableMap.js").MapOptions} options Map options. */ - function Map(options) { + function OLMap(options) { var _this = this; options = assign({}, options); if (!options.controls) { @@ -16752,10 +16752,10 @@ var Map = /** @class */ (function (_super) { _this = _super.call(this, options) || this; return _this; } - Map.prototype.createRenderer = function () { + OLMap.prototype.createRenderer = function () { return new CompositeMapRenderer(this); }; - return Map; + return OLMap; }(PluggableMap)); /** @@ -21277,7 +21277,7 @@ class ServiceOpenLayers { * @return {void} */ initMap(id, replace_marker) { - this.map = new Map({ + this.map = new OLMap({ layers: [ new TileLayer({ preload: 4, diff --git a/components/ILIAS/Maps/templates/default/tpl.openlayers_map.js b/components/ILIAS/Maps/templates/default/tpl.openlayers_map.js index 2fad41c68bcf..bb9efbf4fa49 100755 --- a/components/ILIAS/Maps/templates/default/tpl.openlayers_map.js +++ b/components/ILIAS/Maps/templates/default/tpl.openlayers_map.js @@ -13,7 +13,6 @@ let ilOLMapData = { ] }; - ilOLUserMarkers["{UMAP_ID}"][{CNT}] = new Array({ULONG}, {ULAT}, "{USER_INFO}<\/span>"); @@ -23,12 +22,43 @@ let openLayer = initIlOpenLayerMaps(jQuery, ilOLInvalidAddress, ilOLMapData, ilO openLayer.forceResize(jQuery); openLayer.init(ilOLMapData); -ilLookupAddress = function(id, address) { - return openLayer.jumpToAddress(id, address); +/* + * Multi-map support: + * This template runs once per map. On pages with multiple maps, global functions + * would otherwise be overwritten by the last rendered map. + * + * Store each map instance by its MAP_ID and dispatch calls by id. + */ +window.ilOLMapInstances = window.ilOLMapInstances || {}; +window.ilOLMapInstances["{MAP_ID}"] = { + openLayer: openLayer, + mapData: ilOLMapData +}; + +/* Define the global API only once; later template runs must not overwrite it. */ +window.ilLookupAddress = window.ilLookupAddress || function(id, address) { + const inst = window.ilOLMapInstances && window.ilOLMapInstances[id]; + if (!inst) { + console.warn("ilLookupAddress: unknown map id", id); + return; + } + return inst.openLayer.jumpToAddress(id, address); }; -ilUpdateMap = function (id) { - return openLayer.updateMap(id); + +window.ilUpdateMap = window.ilUpdateMap || function(id) { + const inst = window.ilOLMapInstances && window.ilOLMapInstances[id]; + if (!inst) { + console.warn("ilUpdateMap: unknown map id", id); + return; + } + return inst.openLayer.updateMap(id); +}; + +window.ilShowUserMarker = window.ilShowUserMarker || function(id, counter) { + const inst = window.ilOLMapInstances && window.ilOLMapInstances[id]; + if (!inst) { + console.warn("ilShowUserMarker: unknown map id", id); + return; + } + return inst.openLayer.moveToUserMarkerAndOpen(id, counter); }; -ilShowUserMarker = function(id, counter) { - return openLayer.moveToUserMarkerAndOpen(id, counter); -}; \ No newline at end of file diff --git a/components/ILIAS/MediaCast/Presentation/class.McstImageGalleryGUI.php b/components/ILIAS/MediaCast/Presentation/class.McstImageGalleryGUI.php index 0aec8d0af8f9..5608667c29b7 100755 --- a/components/ILIAS/MediaCast/Presentation/class.McstImageGalleryGUI.php +++ b/components/ILIAS/MediaCast/Presentation/class.McstImageGalleryGUI.php @@ -146,7 +146,7 @@ public function getHTML(): string $preview_resource = $resource; if ($mob->getVideoPreviewPic() != "") { - // $preview_resource = $mob->getVideoPreviewPic(); + $preview_resource = $mob->getVideoPreviewPic(); } diff --git a/components/ILIAS/MediaCast/Presentation/class.VideoViewGUI.php b/components/ILIAS/MediaCast/Presentation/class.VideoViewGUI.php index b26ccbf7d2e0..9a383a9aa9ce 100755 --- a/components/ILIAS/MediaCast/Presentation/class.VideoViewGUI.php +++ b/components/ILIAS/MediaCast/Presentation/class.VideoViewGUI.php @@ -39,7 +39,6 @@ class VideoViewGUI protected \ilLanguage $lng; protected \ilObjUser $user; protected string $completed_callback = ""; - protected string $autoplay_callback = ""; protected VideoSequence $video_sequence; protected string $video_wrapper_id = "mcst_video"; @@ -70,11 +69,6 @@ public function setCompletedCallback(string $completed_callback): void $this->completed_callback = $completed_callback; } - public function setAutoplayCallback(string $autoplay_callback): void - { - $this->autoplay_callback = $autoplay_callback; - } - /** * @throws \ilTemplateException */ @@ -98,8 +92,6 @@ public function renderToolbar(): void $mcst_settings = \ilMediaCastSettings::_getInstance(); - $autoplay = $this->getAutoplay(); - $factory = $this->ui->factory(); $renderer = $this->ui->renderer(); @@ -131,23 +123,6 @@ public function renderToolbar(): void $toolbar->addStickyItem($next); } - // autoplay - if ($this->media_cast->getAutoplayMode() !== \ilObjMediaCast::AUTOPLAY_NO && $video_cnt > 1) { - $toolbar->addSeparator(); - $s = new SignalGenerator(); - $autoplay_on = $s->create(); - $autoplay_off = $s->create(); - $button = $factory->button()->toggle($lng->txt("mcst_autoplay"), $autoplay_on, $autoplay_off, $autoplay); - $toolbar->addStickyItem($button); - $this->main_tpl->addOnLoadCode(" - $(document).on('" . $autoplay_on . "', function (event, signalData) { - il.VideoPlaylist.autoplay('mcst_playlist', true); - }); - $(document).on('" . $autoplay_off . "', function (event, signalData) { - il.VideoPlaylist.autoplay('mcst_playlist', false); - });"); - } - if ($video_cnt > 0 && $this->rss_link !== "") { $f = $this->ui->factory(); $actions = [ @@ -160,20 +135,6 @@ public function renderToolbar(): void } } - protected function getAutoplay(): bool - { - $video_cnt = count($this->video_sequence->getVideos()); - if ($video_cnt <= 1) { - return false; - } - $autoplay = (bool) ($this->user->getPref("mcst_autoplay") ?? - ($this->media_cast->getAutoplayMode() == \ilObjMediaCast::AUTOPLAY_ACT)); - if ($this->media_cast->getAutoplayMode() == \ilObjMediaCast::AUTOPLAY_NO) { - $autoplay = false; - } - return $autoplay; - } - protected function getDropdown(): ?\ILIAS\UI\Component\Dropdown\Standard { @@ -196,8 +157,6 @@ public function renderSideColumn(): string { $mcst_settings = \ilMediaCastSettings::_getInstance(); - $autoplay = $this->getAutoplay(); - $lng = $this->lng; $tpl = new \ilTemplate("tpl.video_cast_side.html", true, true, "components/ILIAS/MediaCast/Presentation"); @@ -236,6 +195,13 @@ public function renderSideColumn(): string "mob_id", $video->getId() ); + $download_url = ""; + if ($video->isLocal() && $this->media_cast->getDownloadable()) { + $this->ctrl->setParameterByClass("ilobjmediacastgui", "purpose", "Standard"); + $this->ctrl->setParameterByClass("ilobjmediacastgui", "item_id", $video->getNewsId()); + $download_url = $this->ctrl->getLinkTargetByClass("ilobjmediacastgui", "downloadItem"); + } + $items[] = [ "id" => $video->getId(), "resource" => $video->getResource(), @@ -251,7 +217,8 @@ public function renderSideColumn(): string "renderUrl" => $this->ctrl->getLinkTargetByClass( \ilObjMediaCastGUI::class, "renderVideo" - ) + ), + "download_url" => $download_url ]; } @@ -310,8 +277,8 @@ function ($id) { $this->tpl->addOnLoadCode( "il.VideoPlaylist.init('mcst_playlist', 'mcst_video', " . json_encode( $items - ) . ", '$item_content', " . ($autoplay ? "true" : "false") . ", " . - (int) $init_videos . ", '" . $this->completed_callback . "', '" . $this->autoplay_callback . "', " . ((int) $mcst_settings->getVideoCompletionThreshold()) . ");" + ) . ", '$item_content', false, " . + (int) $init_videos . ", '" . $this->completed_callback . "', '', " . ((int) $mcst_settings->getVideoCompletionThreshold()) . ");" ); if (count($items) === 1) { diff --git a/components/ILIAS/MediaCast/Service/class.InternalDataService.php b/components/ILIAS/MediaCast/Service/class.InternalDataService.php index 7cdabf61b0cb..0d39f6cb0ebe 100755 --- a/components/ILIAS/MediaCast/Service/class.InternalDataService.php +++ b/components/ILIAS/MediaCast/Service/class.InternalDataService.php @@ -35,7 +35,6 @@ public function settings( int $default_access, int $sort_mode, string $view_mode, - bool $autoplay_mode, int $nr_initial_videos, bool $new_items_in_lp ): Settings { @@ -46,7 +45,6 @@ public function settings( $default_access, $sort_mode, $view_mode, - $autoplay_mode, $nr_initial_videos, $new_items_in_lp ); diff --git a/components/ILIAS/MediaCast/Service/class.InternalService.php b/components/ILIAS/MediaCast/Service/class.InternalService.php index 563acd979d8f..2471569d8743 100755 --- a/components/ILIAS/MediaCast/Service/class.InternalService.php +++ b/components/ILIAS/MediaCast/Service/class.InternalService.php @@ -22,53 +22,42 @@ use ILIAS\DI\Container; -/** - * @author Alexander Killing - */ class InternalService { - protected InternalDataService $data; - protected InternalRepoService $repo; - protected InternalDomainService $domain; - protected InternalGUIService $gui; + protected array $instance = []; - public function __construct(Container $DIC) + public function __construct(protected Container $DIC) { - $this->data = new InternalDataService(); - - $this->repo = new InternalRepoService( - $this->data(), - $DIC->database() - ); - $this->domain = new InternalDomainService( - $DIC, - $this->repo, - $this->data - ); - $this->gui = new InternalGUIService( - $DIC, - $this->data, - $this->domain - ); } public function data(): InternalDataService { - return $this->data; + return $this->instance["data"] ??= new InternalDataService(); } public function repo(): InternalRepoService { - return $this->repo; + return $this->instance["repo"] ??= new InternalRepoService( + $this->data(), + $this->DIC->database() + ); } public function domain(): InternalDomainService { - return $this->domain; + return $this->instance["domain"] ??= new InternalDomainService( + $this->DIC, + $this->repo(), + $this->data() + ); } public function gui(): InternalGUIService { - return $this->gui; + return $this->instance["gui"] ??= new InternalGUIService( + $this->DIC, + $this->data(), + $this->domain() + ); } } diff --git a/components/ILIAS/MediaCast/Settings/Settings.php b/components/ILIAS/MediaCast/Settings/Settings.php index 147a1d5215e5..f1c4509abffb 100644 --- a/components/ILIAS/MediaCast/Settings/Settings.php +++ b/components/ILIAS/MediaCast/Settings/Settings.php @@ -29,7 +29,6 @@ public function __construct( protected int $default_access, protected int $sort_mode, protected string $view_mode, - protected bool $autoplay_mode, protected int $nr_initial_videos, protected bool $new_items_in_lp ) { @@ -65,11 +64,6 @@ public function getViewMode(): string return $this->view_mode; } - public function getAutoplayMode(): bool - { - return $this->autoplay_mode; - } - public function getNumberInitialVideos(): int { return $this->nr_initial_videos; diff --git a/components/ILIAS/MediaCast/Settings/SettingsDBRepository.php b/components/ILIAS/MediaCast/Settings/SettingsDBRepository.php index 340e6be5c798..341202fb51ce 100644 --- a/components/ILIAS/MediaCast/Settings/SettingsDBRepository.php +++ b/components/ILIAS/MediaCast/Settings/SettingsDBRepository.php @@ -52,7 +52,7 @@ public function update(Settings $settings): void 'def_access' => ['integer', $settings->getDefaultAccess()], 'sortmode' => ['integer', $settings->getSortMode()], 'viewmode' => ['text', $settings->getViewMode()], - 'autoplaymode' => ['integer', (int) $settings->getAutoplayMode()], + 'autoplaymode' => ['integer', 0], 'nr_initial_videos' => ['integer', $settings->getNumberInitialVideos()], 'new_items_in_lp' => ['integer', (int) $settings->getNewItemsInLearningProgress()], ], [ @@ -69,7 +69,7 @@ public function create(Settings $settings): void 'def_access' => ['integer', $settings->getDefaultAccess()], 'sortmode' => ['integer', $settings->getSortMode()], 'viewmode' => ['text', $settings->getViewMode()], - 'autoplaymode' => ['integer', (int) $settings->getAutoplayMode()], + 'autoplaymode' => ['integer', 0], 'nr_initial_videos' => ['integer', $settings->getNumberInitialVideos()], 'new_items_in_lp' => ['integer', (int) $settings->getNewItemsInLearningProgress()], ]); @@ -93,7 +93,6 @@ protected function getSettingsFromRecord(array $record): Settings (int) $record['def_access'], (int) $record['sortmode'], (string) $record['viewmode'], - (bool) $record['autoplaymode'], (int) $record['nr_initial_videos'], (bool) $record['new_items_in_lp'] ); diff --git a/components/ILIAS/MediaCast/Settings/class.SettingsGUI.php b/components/ILIAS/MediaCast/Settings/class.SettingsGUI.php index 1a0d64fc1388..9a85c61de70b 100644 --- a/components/ILIAS/MediaCast/Settings/class.SettingsGUI.php +++ b/components/ILIAS/MediaCast/Settings/class.SettingsGUI.php @@ -93,17 +93,6 @@ protected function getEditForm(): FormAdapterGUI ->group(\ilObjMediaCast::VIEW_IMG_GALLERY, $lng->txt("mcst_img_gallery")) ->group(\ilObjMediaCast::VIEW_PODCAST, $lng->txt("mcst_podcast")) ->group(\ilObjMediaCast::VIEW_VCAST, $lng->txt("mcst_video_cast")) - ->select( - "autoplaymode", - $lng->txt("mcst_autoplay"), - [ - \ilObjMediaCast::AUTOPLAY_NO => $lng->txt("mcst_no_autoplay"), - \ilObjMediaCast::AUTOPLAY_ACT => $lng->txt("mcst_autoplay_active"), - \ilObjMediaCast::AUTOPLAY_INACT => $lng->txt("mcst_autoplay_inactive") - ], - "", - (string) $settings->getAutoplayMode() - ) ->number( "nr_videos", $lng->txt("mcst_nr_videos"), @@ -221,7 +210,6 @@ protected function save(): void (int) $form->getData("defaultaccess"), (int) $form->getData("order"), (string) $form->getData("viewmode"), - (bool) $form->getData("autoplaymode"), (int) $form->getData("nr_videos"), \ilLearningProgressAccess::checkAccess($this->ref_id) && (bool) $form->getData("auto_det_lp") ); diff --git a/components/ILIAS/MediaCast/Video/class.VideoItem.php b/components/ILIAS/MediaCast/Video/class.VideoItem.php index 2cf3f4e8343a..431d0316169a 100755 --- a/components/ILIAS/MediaCast/Video/class.VideoItem.php +++ b/components/ILIAS/MediaCast/Video/class.VideoItem.php @@ -32,6 +32,8 @@ class VideoItem protected string $description = ""; protected string $playing_time = ""; protected int $duration = 0; + protected int $news_id = 0; + protected bool $is_local = false; public function __construct( string $id, @@ -42,12 +44,16 @@ public function __construct( string $preview_pic, string $description = "", string $playing_time = "", - int $duration = 0 + int $duration = 0, + bool $is_local = false, + int $news_id = 0, ) { $this->id = $id; $this->title = $title; $this->time = $time; $this->mime = $mime; + $this->is_local = $is_local; + $this->news_id = $news_id; $this->resource = $resource; $this->preview_pic = $preview_pic; if ($this->preview_pic == "") { @@ -102,4 +108,14 @@ public function getDuration(): int { return $this->duration; } + + public function isLocal(): bool + { + return $this->is_local; + } + + public function getNewsId(): int + { + return $this->news_id; + } } diff --git a/components/ILIAS/MediaCast/Video/class.VideoSequence.php b/components/ILIAS/MediaCast/Video/class.VideoSequence.php index 17847ed7ea51..20daf4efea8c 100755 --- a/components/ILIAS/MediaCast/Video/class.VideoSequence.php +++ b/components/ILIAS/MediaCast/Video/class.VideoSequence.php @@ -58,9 +58,12 @@ protected function init(): void $mime = ''; $resource = ''; - + $local = false; if (is_object($med)) { $resource = $mob->getStandardSrc(); + if ($med->getLocationType() !== "Reference") { + $local = true; + } $mime = $med->getFormat(); } if (in_array($mime, iterator_to_array($this->media_types->getAllowedVideoMimeTypes()), true)) { @@ -73,7 +76,9 @@ protected function init(): void $preview_pic, (string) $item["content"], (string) $item["playtime"], - $med->getDuration() + $med->getDuration(), + $local, + $item["id"] ); } } diff --git a/components/ILIAS/MediaCast/Video/class.VideoWidgetGUI.php b/components/ILIAS/MediaCast/Video/class.VideoWidgetGUI.php index 9cbf72b12e29..47156e09bdb9 100755 --- a/components/ILIAS/MediaCast/Video/class.VideoWidgetGUI.php +++ b/components/ILIAS/MediaCast/Video/class.VideoWidgetGUI.php @@ -84,6 +84,9 @@ public function render(): string } $item = $f->item()->standard('#title#') + ->withMainAction( + $f->link()->standard('#download#', "#") + ) ->withDescription('#description#'); $item_html = $ui->renderer()->render($item); $item_html = str_replace( @@ -91,6 +94,13 @@ public function render(): string '', $item_html ); + $item_html = str_replace( + "#download#", + '' . + $this->lng->txt("download") . + '', + $item_html + ); $item_html = str_replace( "#description#", '', @@ -98,35 +108,6 @@ public function render(): string ); $tpl->setVariable("ITEM", $item_html); - - /* - $back = $f->button()->standard("", "") - ->withOnLoadCode(function ($id) { - return - "$(\"#$id\").click(function() { il.VideoWidget.previous(\"".$this->dom_wrapper_id."\"); return false;});"; - }); - $next = $f->button()->standard("", "") - ->withOnLoadCode(function ($id) { - return - "$(\"#$id\").click(function() { il.VideoWidget.next(\"".$this->dom_wrapper_id."\"); return false;});"; - });*/ - - - /* - $description_link = $f->button()->shy($this->lng->txt("mcst_show_description"), "")->withOnLoadCode(function ($id) { - return - "$(\"#$id\").click(function() { $(document).find(\"[data-elementtype='description']\").removeClass('ilNoDisplay'); $(document).find(\"[data-elementtype='description-trigger']\").addClass('ilNoDisplay'); return false;});"; - }); - $tpl->setVariable("DESCRIPTION_LINK", $ui->renderer()->render($description_link));*/ - - //$tpl->setVariable("VIEWCONTROL", $ui->renderer()->render([$back,$next])); - - /* - $tpl->setCurrentBlock("autoplay"); - $tpl->setVariable("TXT_AUTOPLAY", - $this->lng->txt("mcst_autoplay")); - $tpl->parseCurrentBlock();*/ - return $tpl->get(); } } diff --git a/components/ILIAS/MediaCast/classes/class.ilMediaCastDataSet.php b/components/ILIAS/MediaCast/classes/class.ilMediaCastDataSet.php index 63eac600820b..5e4030394b06 100755 --- a/components/ILIAS/MediaCast/classes/class.ilMediaCastDataSet.php +++ b/components/ILIAS/MediaCast/classes/class.ilMediaCastDataSet.php @@ -225,7 +225,6 @@ public function importRecord( ); } if (in_array($a_schema_version, ["8.0"])) { - $newObj->setAutoplayMode((int) ($a_rec["Autoplaymode"] ?? 0)); $newObj->setNumberInitialVideos((int) ($a_rec["NrInitialVideos"] ?? 0)); $newObj->setNewItemsInLearningProgress((bool) (int) ($a_rec["NewItemsInLp"] ?? false)); } diff --git a/components/ILIAS/MediaCast/classes/class.ilObjMediaCast.php b/components/ILIAS/MediaCast/classes/class.ilObjMediaCast.php index a9cd052a3088..c68f7889be68 100755 --- a/components/ILIAS/MediaCast/classes/class.ilObjMediaCast.php +++ b/components/ILIAS/MediaCast/classes/class.ilObjMediaCast.php @@ -31,9 +31,6 @@ class ilObjMediaCast extends ilObject public const VIEW_IMG_GALLERY = "img_gallery"; public const VIEW_PODCAST = "podcast"; public const VIEW_VCAST = "video"; - public const AUTOPLAY_NO = 0; - public const AUTOPLAY_ACT = 1; - public const AUTOPLAY_INACT = 2; protected bool $comments = false; protected \ILIAS\Notes\Service $notes; protected \ILIAS\MediaCast\InternalDomainService $domain; @@ -51,7 +48,6 @@ class ilObjMediaCast extends ilObject protected array $mob_mapping = []; protected int $nr_initial_videos = 5; protected bool $new_items_in_lp = true; - protected int $autoplay_mode = self::AUTOPLAY_ACT; public function __construct( int $a_id = 0, @@ -123,16 +119,6 @@ public function getItemsArray(): array return $this->itemsarray; } - public function setAutoplayMode(int $a_val): void - { - $this->autoplay_mode = $a_val; - } - - public function getAutoplayMode(): int - { - return $this->autoplay_mode; - } - public function setNumberInitialVideos(int $a_val): void { $this->nr_initial_videos = $a_val; @@ -250,7 +236,7 @@ public function create(): int . "," . $ilDB->quote((int) $this->getDefaultAccess(), "integer") . "," . $ilDB->quote((int) $this->getOrder(), "integer") . "," . $ilDB->quote($this->getViewMode(), "text") - . "," . $ilDB->quote((int) $this->getAutoplayMode(), "integer") + . "," . $ilDB->quote(0, "integer") . "," . $ilDB->quote((int) $this->getNumberInitialVideos(), "integer") . "," . $ilDB->quote((int) $this->getNewItemsInLearningProgress(), "integer") . ")"; @@ -276,7 +262,7 @@ public function update(): bool ", def_access = " . $ilDB->quote($this->getDefaultAccess(), "integer") . ", sortmode = " . $ilDB->quote($this->getOrder(), "integer") . ", viewmode = " . $ilDB->quote($this->getViewMode(), "text") . - ", autoplaymode = " . $ilDB->quote($this->getAutoplayMode(), "integer") . + ", autoplaymode = " . $ilDB->quote(0, "integer") . ", nr_initial_videos = " . $ilDB->quote($this->getNumberInitialVideos(), "integer") . ", new_items_in_lp = " . $ilDB->quote($this->getNewItemsInLearningProgress(), "integer") . " WHERE id = " . $ilDB->quote($this->getId(), "integer"); @@ -306,7 +292,6 @@ public function read(): void $this->setDefaultAccess((int) $rec["def_access"]); $this->setOrder((int) $rec["sortmode"]); $this->setViewMode((string) $rec["viewmode"]); - $this->setAutoplayMode((int) $rec["autoplaymode"]); $this->setNumberInitialVideos((int) $rec["nr_initial_videos"]); $this->setNewItemsInLearningProgress((bool) $rec["new_items_in_lp"]); @@ -437,7 +422,6 @@ public function cloneObject(int $a_target_id, int $a_copy_id = 0, bool $a_omit_t $new_obj->setDefaultAccess($this->getDefaultAccess()); $new_obj->setOrder($this->getOrder()); $new_obj->setViewMode($this->getViewMode()); - $new_obj->setAutoplayMode($this->getAutoplayMode()); $new_obj->setNumberInitialVideos($this->getNumberInitialVideos()); $new_obj->setNewItemsInLearningProgress($this->getNewItemsInLearningProgress()); diff --git a/components/ILIAS/MediaCast/classes/class.ilObjMediaCastGUI.php b/components/ILIAS/MediaCast/classes/class.ilObjMediaCastGUI.php index aabf80aa9a2c..64c1940d9087 100755 --- a/components/ILIAS/MediaCast/classes/class.ilObjMediaCastGUI.php +++ b/components/ILIAS/MediaCast/classes/class.ilObjMediaCastGUI.php @@ -35,6 +35,7 @@ */ class ilObjMediaCastGUI extends ilObjectGUI { + protected \ILIAS\MediaObjects\MediaObjectManager $mob_manager; protected \ILIAS\MediaObjects\Player\GUIService $mob_player_gui; protected \ILIAS\MediaObjects\MediaType\MediaTypeManager $media_type; protected \ILIAS\MediaCast\InternalGUIService $gui; @@ -96,6 +97,7 @@ public function __construct( $this->media_type = $DIC->mediaObjects()->internal()->domain()->mediaType(); $this->video_gui = $DIC->mediaObjects()->internal()->gui()->video(); $this->mob_player_gui = $DIC->mediaObjects()->internal()->gui()->player(); + $this->mob_manager = $DIC->mediaObjects()->internal()->domain()->mediaObject(); } public function executeCommand(): void @@ -699,50 +701,37 @@ private function updateMediaItem( $title = basename($file); $location = $this->form_gui->getInput("url_" . $purpose); $locationType = "Reference"; - } elseif ($file_gui["size"] > 0) { - // lokal - // determine and create mob directory, move uploaded file to directory - $mob_dir = ilObjMediaObject::_getDirectory($mob->getId()); - if (!is_dir($mob_dir)) { - $mob->createDirectory(); - } else { - $dir = LegacyPathHelper::createRelativePath($mob_dir); - $old_files = $this->filesystem->finder()->in([$dir])->exclude([$dir . '/mob_vpreview.png'])->files(); - foreach ($old_files as $file) { - $this->filesystem->delete($file->getPath()); - } - } - - $file_name = ilFileUtils::getASCIIFilename($_FILES['file_' . $purpose]['name']); - $file_name = str_replace(" ", "_", $file_name); - - $file = $mob_dir . "/" . $file_name; - $title = $file_name; - $locationType = "LocalFile"; - $location = $title; - ilFileUtils::moveUploadedFile($_FILES['file_' . $purpose]['tmp_name'], $file_name, $file); - ilFileUtils::renameExecutables($mob_dir); - } - - // check if not automatic mimetype detection - $format = ilObjMediaObject::getMimeType($mediaItem->getLocation(), ($locationType === "Reference")); - $mediaItem->setFormat($format); + $mediaItem->setLocation($location); + $mediaItem->setLocationType($locationType); - if ($file != "") { - // get mime type, if not already set! + // check if not automatic mimetype detection + $format = ilObjMediaObject::getMimeType($mediaItem->getLocation(), ($locationType === "Reference")); + $mediaItem->setFormat($format); if ($format === "") { $format = ilObjMediaObject::getMimeType($file, ($locationType === "Reference")); } // set real meta and object data $mediaItem->setFormat($format); - $mediaItem->setLocation($location); - $mediaItem->setLocationType($locationType); $mediaItem->setHAlign("Left"); $mediaItem->setHeight(self::isAudio($format) ? 0 : 180); $mob->generatePreviewPic(320, 240); + + } elseif ($file_gui["size"] > 0) { + + $file_name = ilFileUtils::getASCIIFilename($_FILES['file_' . $purpose]['name']); + $file_name = str_replace(" ", "_", $file_name); + $mob->removeMediaItem("Standard"); + $this->mob_manager->addFileFromLegacyUpload($mob->getId(), $_FILES['file_' . $purpose]['tmp_name']); + $media_item = $mob->addMediaItemFromLegacyUpload( + "Standard", + $_FILES['file_' . $purpose]['tmp_name'], + $file_name + ); + $title = $file_name; } + if (($purpose === "Standard") && isset($title)) { $mob->setTitle($title); } @@ -1345,13 +1334,6 @@ public function showContentObject(): void true, false )); - $view->setAutoplayCallback($this->ctrl->getLinkTarget( - $this, - "handleAutoplayTrigger", - "", - true, - false - )); $view->show(); } else { $this->listItemsObject(true); @@ -1445,15 +1427,6 @@ protected function afterPoolInsert(array $mob_ids): void $this->addMobsToCast($mob_ids, "", true, true); } - protected function handleAutoplayTriggerObject(): void - { - $this->user->writePref( - "mcst_autoplay", - $this->mc_request->getAutoplay() - ); - exit; - } - protected function getCommentGUI(): ilCommentGUI { return $this->gui->comments()->commentGUI( diff --git a/components/ILIAS/MediaCast/resources/video_widget.js b/components/ILIAS/MediaCast/resources/video_widget.js index f9d43ae2f98d..292a3e8bccd3 100644 --- a/components/ILIAS/MediaCast/resources/video_widget.js +++ b/components/ILIAS/MediaCast/resources/video_widget.js @@ -119,7 +119,7 @@ il.VideoWidget = il.VideoWidget || {}; t.wrapper_ids.push(wrapper_id); }; - const setMeta = (wrapper_id, title, description) => { + const setMeta = (wrapper_id, title, description, downloadUrl) => { const $wrap = $(`#${wrapper_id}`); $wrap.parent().find("[data-elementtype='title']").html(title); if (description !== '') { @@ -131,6 +131,14 @@ il.VideoWidget = il.VideoWidget || {}; $wrap.parent().find("[data-elementtype='description']").html(''); // $wrap.parent().find("[data-elementtype='description-wrapper']").addClass("ilNoDisplay"); } + const downEl = $wrap.parent().find("[data-elementtype='download']"); + if (downloadUrl !== '') { + downEl.closest('a').removeClass('ilNoDisplay'); + downEl.closest('a').attr('href', downloadUrl); + } else { + downEl.closest('a').addClass('ilNoDisplay'); + downEl.closest('a').attr('href', '#'); + } }; // load file into player and show it @@ -172,7 +180,12 @@ il.VideoWidget = il.VideoWidget || {}; }, ); - setMeta(wrapper_id, video_data.title, video_data.description); + setMeta( + wrapper_id, + video_data.title, + video_data.description, + video_data.download_url + ); t.widget[wrapper_id].progress_cb = progress_cb; }; @@ -403,21 +416,10 @@ il.VideoPlaylist = il.VideoPlaylist || {}; } } } - - // check if we should play the next item - if (t.playlist[list_wrapper].autoplay) { - if (ended || (v.mime === 'video/vimeo' && v.duration <= Math.ceil(current_time))) { - autoplayNext(list_wrapper); - } - } } }); } } - - // console.log("duration " + duration); - // console.log("current time " + current_time); - // console.log("ended " + ended); }; const refreshNavigation = (list_wrapper) => { @@ -467,45 +469,6 @@ il.VideoPlaylist = il.VideoPlaylist || {}; }); }; - /** - * @param list_wrapper - */ - const autoplayNext = (list_wrapper) => { - const current = t.current_item[t.playlist[list_wrapper].player_wrapper]; - let found = false; - let nextItem = 0; - - t.playlist[list_wrapper].items.forEach((v, i, a) => { - if (nextItem === 0 && found) { - if (v.hidden === true) { - nextItems(list_wrapper); - } - nextItem = v.id; - } - if (v.id === current) { - found = true; - } - }); - if (nextItem > 0) { - loadItem(list_wrapper, nextItem, true); - } - }; - - const toggleItem = (list_wrapper, id) => { - const current = t.current_item[t.playlist[list_wrapper].player_wrapper]; - - //const player = il.VideoWidget.player(t.playlist[list_wrapper].player_wrapper); - - // const isVideoPlaying = video => !!(video.currentTime > 0 && !video.paused && !video.ended && video.readyState > 2); - /*if (current !== id) { - loadItem(list_wrapper, id, true); - }*/ /*else if (player.domNode.paused) { - player.play(); - } else { - player.pause(); - }*/ - }; - /** * Load item from playlist * @param list_wrapper @@ -527,6 +490,13 @@ il.VideoPlaylist = il.VideoPlaylist || {}; refreshNavigation(list_wrapper); }; + const toggleItem = (listWrapper, id) => { + const current = t.current_item[t.playlist[listWrapper].player_wrapper]; + if (current !== id) { + loadItem(listWrapper, id, true); + } + }; + /** * Load item from playlist * @param list_wrapper @@ -601,13 +571,6 @@ il.VideoPlaylist = il.VideoPlaylist || {}; loadFirst(list_wrapper, false); }; - const autoplay = (list_wrapper, active) => { - t.playlist[list_wrapper].autoplay = active; - $.ajax({ - type: 'GET', - url: `${t.playlist[list_wrapper].autoplay_cb}&autoplay=${active ? '1' : '0'}`, - }); - }; const loadComments = (id) => { const el = document.querySelector('[data-mcst-comments]'); @@ -625,7 +588,6 @@ il.VideoPlaylist = il.VideoPlaylist || {}; init, loadItem, toggleItem, - autoplay, nextItems, previousItems, }; diff --git a/components/ILIAS/MediaObjects/Creation/class.ilMediaCreationGUI.php b/components/ILIAS/MediaObjects/Creation/class.ilMediaCreationGUI.php index 7141d5766799..2e18477fb7e3 100755 --- a/components/ILIAS/MediaObjects/Creation/class.ilMediaCreationGUI.php +++ b/components/ILIAS/MediaObjects/Creation/class.ilMediaCreationGUI.php @@ -170,7 +170,7 @@ protected function getMimeTypes($local_only = false): array { $mimes = []; if (in_array(self::TYPE_ALL, $this->accept_types)) { - $mimes = iterator_to_array($this->type_manager->getAllowedMimeTypes()); + $mimes = iterator_to_array($this->type_manager->getAllowedMimeTypes($local_only)); } if (in_array(self::TYPE_VIDEO, $this->accept_types)) { $mimes = array_merge($mimes, iterator_to_array($this->type_manager->getAllowedVideoMimeTypes($local_only))); @@ -287,7 +287,7 @@ public function initUrlForm(): ilPropertyFormGUI // $ti = new \ilTextInputGUI($lng->txt("mob_url"), "url"); $info = $lng->txt("mob_url_info1") . " " . implode(", ", $this->getSuffixes()) . "."; - if (in_array(self::TYPE_VIDEO, $this->accept_types)) { + if (in_array(self::TYPE_VIDEO, $this->accept_types) || in_array(self::TYPE_ALL, $this->accept_types)) { $info .= " " . $lng->txt("mob_url_info_video"); } $ti->setInfo($info); diff --git a/components/ILIAS/MediaObjects/ImageMap/class.ilImageMapEditorGUI.php b/components/ILIAS/MediaObjects/ImageMap/class.ilImageMapEditorGUI.php index a49c30ab101c..349569918d2b 100755 --- a/components/ILIAS/MediaObjects/ImageMap/class.ilImageMapEditorGUI.php +++ b/components/ILIAS/MediaObjects/ImageMap/class.ilImageMapEditorGUI.php @@ -616,36 +616,52 @@ public function getMapAreaLinkString( } switch ($a_type) { case "StructureObject": - $title = ilLMObject::_lookupTitle($t_arr[count($t_arr) - 1]); - $link_str = $lng->txt("chapter") . - ": " . $title . " [" . $t_arr[count($t_arr) - 1] . "]" . $frame_str; + $id = (int) $t_arr[count($t_arr) - 1]; + if (ilLMObject::_exists($id)) { + $title = ilLMObject::_lookupTitle($id); + $link_str = $lng->txt("chapter") . + ": " . $title . " [" . $t_arr[count($t_arr) - 1] . "]" . $frame_str; + } break; case "PageObject": - $title = ilLMObject::_lookupTitle($t_arr[count($t_arr) - 1]); - $link_str = $lng->txt("page") . - ": " . $title . " [" . $t_arr[count($t_arr) - 1] . "]" . $frame_str; + $id = (int) $t_arr[count($t_arr) - 1]; + if (ilLMObject::_exists($id)) { + $title = ilLMObject::_lookupTitle($id); + $link_str = $lng->txt("page") . + ": " . $title . " [" . $t_arr[count($t_arr) - 1] . "]" . $frame_str; + } break; case "GlossaryItem": - $term = new ilGlossaryTerm($t_arr[count($t_arr) - 1]); - $link_str = $lng->txt("term") . - ": " . $term->getTerm() . " [" . $t_arr[count($t_arr) - 1] . "]" . $frame_str; + $id = (int) $t_arr[count($t_arr) - 1]; + if (ilGlossaryTerm::_exists($id)) { + $term = new ilGlossaryTerm($id); + $link_str = $lng->txt("term") . + ": " . $term->getTerm() . " [" . $t_arr[count($t_arr) - 1] . "]" . $frame_str; + } break; case "MediaObject": - $mob = new ilObjMediaObject($t_arr[count($t_arr) - 1]); - $link_str = $lng->txt("mob") . - ": " . $mob->getTitle() . " [" . $t_arr[count($t_arr) - 1] . "]" . $frame_str; + $id = (int) $t_arr[count($t_arr) - 1]; + if (ilObjMediaObject::_exists($id)) { + $mob = new ilObjMediaObject($id); + $link_str = $lng->txt("mob") . + ": " . $mob->getTitle() . " [" . $t_arr[count($t_arr) - 1] . "]" . $frame_str; + } break; case "RepositoryItem": if (trim($a_target) !== "") { - $title = ilObject::_lookupTitle( - ilObject::_lookupObjId((int) $t_arr[count($t_arr) - 1]) - ); - $link_str = $lng->txt("obj_" . $t_arr[count($t_arr) - 2]) . - ": " . $title . " [" . $t_arr[count($t_arr) - 1] . "]" . $frame_str; + $id = (int) $t_arr[count($t_arr) - 1]; + $obj_id = ilObject::_lookupObjId($id); + if (ilObject::_exists($obj_id)) { + $title = ilObject::_lookupTitle( + $obj_id + ); + $link_str = $lng->txt("obj_" . $t_arr[count($t_arr) - 2]) . + ": " . $title . " [" . $t_arr[count($t_arr) - 1] . "]" . $frame_str; + } } else { $title = ""; $link_str = ""; @@ -653,9 +669,12 @@ public function getMapAreaLinkString( break; case "WikiPage": - $wpg = new ilWikiPage($t_arr[count($t_arr) - 1]); - $link_str = $lng->txt("cont_wiki_page") . - ": " . $wpg->getTitle() . " [" . $t_arr[count($t_arr) - 1] . "]" . $frame_str; + $id = (int) $t_arr[count($t_arr) - 1]; + if (ilWikiPage::_exists("wpg", $id)) { + $wpg = new ilWikiPage($id); + $link_str = $lng->txt("cont_wiki_page") . + ": " . $wpg->getTitle() . " [" . $t_arr[count($t_arr) - 1] . "]" . $frame_str; + } break; } diff --git a/components/ILIAS/MediaObjects/ImageMap/class.ilMapArea.php b/components/ILIAS/MediaObjects/ImageMap/class.ilMapArea.php index b6de1e8a5854..ddeb132ecf70 100755 --- a/components/ILIAS/MediaObjects/ImageMap/class.ilMapArea.php +++ b/components/ILIAS/MediaObjects/ImageMap/class.ilMapArea.php @@ -227,7 +227,7 @@ public static function _getIntLinks( $type = $area_rec["type"]; $targetframe = $area_rec["target_frame"]; - if (($area_rec["link_type"] == IL_INT_LINK) && (is_int(strpos($target, "__")))) { + if (($area_rec["link_type"] == IL_INT_LINK) && (is_int(strpos($target ?? "", "__")))) { $links[$target . ":" . $type . ":" . $targetframe] = array("Target" => $target, "Type" => $type, "TargetFrame" => $targetframe); @@ -562,37 +562,37 @@ public function drawRect( $this->drawLine( $im, - $coord[0] / $a_x_ratio, - $coord[1] / $a_y_ratio, - $coord[0] / $a_x_ratio, - $coord[3] / $a_y_ratio, + (int) ($coord[0] / $a_x_ratio), + (int) ($coord[1] / $a_y_ratio), + (int) ($coord[0] / $a_x_ratio), + (int) ($coord[3] / $a_y_ratio), $c1, $c2 ); $this->drawLine( $im, - $coord[0] / $a_x_ratio, - $coord[3] / $a_y_ratio, - $coord[2] / $a_x_ratio, - $coord[3] / $a_y_ratio, + (int) ($coord[0] / $a_x_ratio), + (int) ($coord[3] / $a_y_ratio), + (int) ($coord[2] / $a_x_ratio), + (int) ($coord[3] / $a_y_ratio), $c1, $c2 ); $this->drawLine( $im, - $coord[2] / $a_x_ratio, - $coord[3] / $a_y_ratio, - $coord[2] / $a_x_ratio, - $coord[1] / $a_y_ratio, + (int) ($coord[2] / $a_x_ratio), + (int) ($coord[3] / $a_y_ratio), + (int) ($coord[2] / $a_x_ratio), + (int) ($coord[1] / $a_y_ratio), $c1, $c2 ); $this->drawLine( $im, - $coord[2] / $a_x_ratio, - $coord[1] / $a_y_ratio, - $coord[0] / $a_x_ratio, - $coord[1] / $a_y_ratio, + (int) ($coord[2] / $a_x_ratio), + (int) ($coord[1] / $a_y_ratio), + (int) ($coord[0] / $a_x_ratio), + (int) ($coord[1] / $a_y_ratio), $c1, $c2 ); @@ -634,10 +634,10 @@ public function drawPoly( for ($i = 0; $i < $anz - $p; $i++) { $this->drawLine( $im, - $c[$i * 2] / $a_x_ratio, - $c[$i * 2 + 1] / $a_y_ratio, - $c[($i * 2 + 2) % (2 * $anz)] / $a_x_ratio, - $c[($i * 2 + 3) % (2 * $anz)] / $a_y_ratio, + (int) ($c[$i * 2] / $a_x_ratio), + (int) ($c[$i * 2 + 1] / $a_y_ratio), + (int) ($c[($i * 2 + 2) % (2 * $anz)] / $a_x_ratio), + (int) ($c[($i * 2 + 3) % (2 * $anz)] / $a_y_ratio), $c1, $c2 ); @@ -664,30 +664,30 @@ public function drawCircle( $c = explode(",", $coords); imagearc( $im, - $c[0] / $a_x_ratio, - $c[1] / $a_y_ratio, - ($c[2] + 1) * 2 / $a_x_ratio, - ($c[2] + 1) * 2 / $a_y_ratio, + (int) ($c[0] / $a_x_ratio), + (int) ($c[1] / $a_y_ratio), + (int) (($c[2] + 1) * 2 / $a_x_ratio), + (int) (($c[2] + 1) * 2 / $a_y_ratio), 1, 360, $c1 ); imagearc( $im, - $c[0] / $a_x_ratio, - $c[1] / $a_y_ratio, - ($c[2] - 1) * 2 / $a_x_ratio, - ($c[2] - 1) * 2 / $a_y_ratio, + (int) ($c[0] / $a_x_ratio), + (int) ($c[1] / $a_y_ratio), + (int) (($c[2] - 1) * 2 / $a_x_ratio), + (int) (($c[2] - 1) * 2 / $a_y_ratio), 1, 360, $c1 ); imagearc( $im, - $c[0] / $a_x_ratio, - $c[1] / $a_y_ratio, - $c[2] * 2 / $a_x_ratio, - $c[2] * 2 / $a_y_ratio, + (int) ($c[0] / $a_x_ratio), + (int) ($c[1] / $a_y_ratio), + (int) ($c[2] * 2 / $a_x_ratio), + (int) ($c[2] * 2 / $a_y_ratio), 1, 360, $c2 diff --git a/components/ILIAS/MediaObjects/MediaObject/MediaObjectManager.php b/components/ILIAS/MediaObjects/MediaObject/MediaObjectManager.php index 9248bb38aa7e..e87969366feb 100644 --- a/components/ILIAS/MediaObjects/MediaObject/MediaObjectManager.php +++ b/components/ILIAS/MediaObjects/MediaObject/MediaObjectManager.php @@ -98,6 +98,13 @@ public function getLocationStream( return $this->repo->getLocationStream($mob_id, $location); } + public function getLocationContent( + int $mob_id, + string $location + ): string { + return $this->repo->getLocationContent($mob_id, $location); + } + public function addStream( int $mob_id, string $location, @@ -224,6 +231,53 @@ public function generatePreview( } } + public function resizeImage( + int $mob_id, + string $location, + string $format, + int $width, + int $height, + bool $a_constrain_prop = false + ): string { + + if (!is_int(strpos($format, "image/"))) { + return ""; + } + + $file_path = pathinfo($location); + $new_location = substr($file_path["basename"], 0, strlen($file_path["basename"]) - + strlen($file_path["extension"]) - 1) . "_" . + $width . "_" . + $height . "." . $file_path["extension"]; + + + $image_quality = 60; + + // the zip stream is not seekable, which is needed by Imagick + // so we create a seekable stream first + $tempStream = fopen('php://temp', 'w+'); + stream_copy_to_stream($this->repo->getLocationStream($mob_id, $location)->detach(), $tempStream); + rewind($tempStream); + $stream = new Stream($tempStream); + + $converter = $this->image_converters->resizeToFixedSize( + $stream, + $width, + $height, + false, + $this->output_options + //->withQuality($image_quality) + //->withFormat(ImageOutputOptions::FORMAT_PNG) + ); + $this->repo->addStream( + $mob_id, + $new_location, + $converter->getStream() + ); + fclose($tempStream); + return $new_location; + } + public function addPreviewFromUrl( int $mob_id, string $url, diff --git a/components/ILIAS/MediaObjects/MediaObject/MediaObjectRepository.php b/components/ILIAS/MediaObjects/MediaObject/MediaObjectRepository.php index b932655fa443..a21c3a387853 100644 --- a/components/ILIAS/MediaObjects/MediaObject/MediaObjectRepository.php +++ b/components/ILIAS/MediaObjects/MediaObject/MediaObjectRepository.php @@ -42,10 +42,14 @@ public function create( \ilMobStakeholder $stakeholder, int $from_mob_id = 0 ): void { + $rid = ""; if ($from_mob_id > 0) { $from_rid = $this->getRidForMobId($from_mob_id); - $rid = $this->irss->cloneContainer($from_rid); - } else { + if ($from_rid !== "") { + $rid = $this->irss->cloneContainer($from_rid); + } + } + if ($rid === "") { $rid = $this->irss->createContainer( $stakeholder, "mob.zip" @@ -175,12 +179,20 @@ public function addLocalDirectory(int $mob_id, string $dir): void public function getLocalSrc(int $mob_id, string $location): string { - return $this->irss->getContainerUri($this->getRidForMobId($mob_id), $location); + $rid = $this->getRidForMobId($mob_id); + if ($rid === "") { + return ""; + } + return $this->irss->getContainerUri($rid, $location); } public function hasLocalFile(int $mob_id, string $location): bool { - return $this->irss->hasContainerEntry($this->getRidForMobId($mob_id), $location); + $rid = $this->getRidForMobId($mob_id); + if ($rid === "") { + return false; + } + return $this->irss->hasContainerEntry($rid, $location); } public function getLocationStream( @@ -193,6 +205,20 @@ public function getLocationStream( ); } + public function getLocationContent( + int $mob_id, + string $location + ): string { + $content = ""; + if (str_starts_with($location, "/")) { + $location = substr($location, 1); + } + if ($this->irss->hasContainerEntry($this->getRidForMobId($mob_id), $location)) { + $content = stream_get_contents($this->getLocationStream($mob_id, $location)->detach()); + } + return $content; + } + public function getInfoOfEntry( int $mob_id, string $path diff --git a/components/ILIAS/MediaObjects/MediaObject/class.ilObjMediaObject.php b/components/ILIAS/MediaObjects/MediaObject/class.ilObjMediaObject.php index cecaa649cf03..b94868ad4d09 100755 --- a/components/ILIAS/MediaObjects/MediaObject/class.ilObjMediaObject.php +++ b/components/ILIAS/MediaObjects/MediaObject/class.ilObjMediaObject.php @@ -35,7 +35,8 @@ */ class ilObjMediaObject extends ilObject { - public const DEFAULT_PREVIEW_SIZE = 80; + public const DEFAULT_THUMB_SIZE = 80; + public const DEFAULT_PREVIEW_SIZE = 400; protected ThumbsManager $thumbs; protected MediaObjectManager $manager; protected InternalDomainService $domain; @@ -605,12 +606,15 @@ public function getXML( $ilUser->getLanguage() == $srt["language"]) { $def = ' Default="true" '; } - $xml .= "getId() . $srt["full_path"] + : $srt["src"]; + $xml .= ""; } } - if ($this->getVideoPreviewPic(true)) { - $xml .= "getVideoPreviewPic(true) . + if ($this->getVideoPreviewPic(false)) { + $xml .= "getVideoPreviewPic(false) . "\" />"; } if ($item->getLocationType() == "LocalFile") { @@ -812,7 +816,7 @@ public static function _deleteAllUsages( public static function _getMobsOfObject( string $a_type, int $a_id, - int $a_usage_hist_nr = 0, + int|false $a_usage_hist_nr = 0, string $a_lang = "-" ): array { global $DIC; @@ -824,7 +828,7 @@ public static function _getMobsOfObject( $lstr = " AND usage_lang = " . $ilDB->quote($a_lang, "text"); } $hist_str = ""; - if ($a_usage_hist_nr > 0) { + if ($a_usage_hist_nr !== false) { // see #45933, restore ILIAS 7 behaviour $hist_str = " AND usage_hist_nr = " . $ilDB->quote($a_usage_hist_nr, "integer"); } @@ -1193,41 +1197,6 @@ public static function getParentObjectIdForUsage( return $obj_id; } - /** - * Resize image and return new image file ("_width_height" string appended) - */ - public static function _resizeImage( - string $a_file, - int $a_width, - int $a_height, - bool $a_constrain_prop = false - ): string { - global $DIC; - $file_path = pathinfo($a_file); - $location = substr($file_path["basename"], 0, strlen($file_path["basename"]) - - strlen($file_path["extension"]) - 1) . "_" . - $a_width . "_" . - $a_height . "." . $file_path["extension"]; - $target_file = $file_path["dirname"] . "/" . - $location; - - $returned_target_file = $DIC->fileConverters() - ->legacyImages() - ->resizeToFixedSize( - $a_file, - $target_file, - $a_width, - $a_height, - $a_constrain_prop - ); - - if ($returned_target_file !== $target_file) { - throw new RuntimeException('Could not resize image'); - } - - return $location; - } - /** * get mime type for file */ @@ -1585,7 +1554,7 @@ public function makeThumbnail( string $thumbname, ): void { $format = self::getMimeType($source, true); - $this->manager->generatePreview( + $this->thumbs->createPreview( $this->getId(), $source, true, @@ -1703,8 +1672,7 @@ public function generatePreviewPic( $logger->debug("Generate preview pic..."); $logger->debug("..." . $item->getFormat()); - - $this->manager->generatePreview( + $this->thumbs->createPreview( $this->getId(), $item->getLocation(), $item->getLocationType() === "LocalFile", diff --git a/components/ILIAS/MediaObjects/MediaObject/class.ilObjMediaObjectGUI.php b/components/ILIAS/MediaObjects/MediaObject/class.ilObjMediaObjectGUI.php index b47be8eb7e55..147e557387e0 100755 --- a/components/ILIAS/MediaObjects/MediaObject/class.ilObjMediaObjectGUI.php +++ b/components/ILIAS/MediaObjects/MediaObject/class.ilObjMediaObjectGUI.php @@ -796,8 +796,10 @@ public function setObjectPerCreationForm( is_int(strpos($format, "image"))) ) { $full_wh_input = $form->getInput("full_width_height"); - $location = ilObjMediaObject::_resizeImage( - $file, + $location = $this->media_manager->resizeImage( + $this->object->getId(), + $full_file_name, + $format, (int) $full_wh_input["width"], (int) $full_wh_input["height"], (bool) ($full_wh_input["constr_prop"] ?? false) @@ -891,17 +893,15 @@ public function extractPreviewImageObject(): void */ public function resizeImagesObject(): void { - // directory - $mob_dir = ilObjMediaObject::_getDirectory($this->object->getId()); - // standard item $std_item = $this->object->getMediaItem("Standard"); if ($std_item->getLocationType() == "LocalFile" && is_int(strpos($std_item->getFormat(), "image")) ) { - $file = $mob_dir . "/" . $std_item->getLocation(); - $location = ilObjMediaObject::_resizeImage( - $file, + $location = $this->media_manager->resizeImage( + $this->object->getId(), + $std_item->getLocation(), + $std_item->getFormat(), $std_item->getWidth(), $std_item->getHeight() ); @@ -915,9 +915,10 @@ public function resizeImagesObject(): void if ($full_item->getLocationType() == "LocalFile" && is_int(strpos($full_item->getFormat(), "image")) ) { - $file = $mob_dir . "/" . $full_item->getLocation(); - $location = ilObjMediaObject::_resizeImage( - $file, + $location = $this->media_manager->resizeImage( + $this->object->getId(), + $full_item->getLocation(), + $full_item->getFormat(), $full_item->getWidth(), $full_item->getHeight() ); @@ -1018,8 +1019,10 @@ public function savePropertiesObject(): void if ($form->getInput("standard_size") != "original" && is_int(strpos($format, "image"))) { $wh_input = $form->getInput("standard_width_height"); - $location = ilObjMediaObject::_resizeImage( - $file, + $location = $this->media_manager->resizeImage( + $this->object->getId(), + $location, + $format, (int) $wh_input["width"], (int) $wh_input["height"], (bool) ($wh_input["constr_prop"] ?? false) @@ -1095,19 +1098,17 @@ public function savePropertiesObject(): void if ($form->getInput("full_type") == "File") { $resize = false; if ($_FILES['full_file']['name'] != "") { - //$full_file_name = ilObjMediaObject::fixFilename($_FILES['full_file']['name']); $full_file_name = $_FILES['full_file']['name']; $this->media_manager->addFileFromLegacyUpload( $this->object->getId(), $_FILES['full_file']['tmp_name'] ); - $format = ilObjMediaObject::getMimeType($file); + $format = ilObjMediaObject::getMimeType($full_file_name); $location = $full_file_name; $resize = true; } elseif ($form->getInput("full_resize")) { - $file = $mob_dir . "/" . $location; $resize = true; } @@ -1116,8 +1117,10 @@ public function savePropertiesObject(): void if ($form->getInput("full_size") != "original" && is_int(strpos($format, "image"))) { $wh_input = $form->getInput("full_width_height"); - $location = ilObjMediaObject::_resizeImage( - $file, + $location = $this->media_manager->resizeImage( + $this->object->getId(), + $location, + $format, (int) $wh_input["width"], (int) $wh_input["height"], (bool) ($wh_input["constr_prop"] ?? false) @@ -1144,10 +1147,11 @@ public function savePropertiesObject(): void if ($form->getInput("full_size") != "original" && is_int(strpos($format, "image")) && $full_item->getLocationType() == "LocalFile") { - $file = $mob_dir . "/" . $location; $wh_input = $form->getInput("full_width_height"); - $location = ilObjMediaObject::_resizeImage( - $file, + $location = $this->media_manager->resizeImage( + $this->object->getId(), + $location, + $format, (int) $wh_input["width"], (int) $wh_input["height"], (bool) ($wh_input["constr_prop"] ?? false) @@ -1192,11 +1196,6 @@ public function savePropertiesObject(): void } } - /* - ilObjMediaObject::renameExecutables(ilObjMediaObject::_getDirectory($this->object->getId())); - ilMediaSvgSanitizer::sanitizeDir(ilObjMediaObject::_getDirectory($this->object->getId())); - */ // see #20339 - $this->object->update(); $this->tpl->setOnScreenMessage('success', $lng->txt("msg_obj_modified"), true); $this->ctrl->redirect($this, "edit"); @@ -1206,116 +1205,6 @@ public function savePropertiesObject(): void } } - /** - * assign file to standard view - */ - public function assignStandardObject( - string $a_file - ): void { - // determine directory - $cur_subdir = dirname($a_file); - $mob_dir = ilFileUtils::getWebspaceDir() . "/mobs/mm_" . $this->object->getId(); - $cur_dir = (!empty($cur_subdir)) - ? $mob_dir . "/" . $cur_subdir - : $mob_dir; - $file = $cur_dir . "/" . basename($a_file); - $location = $a_file; - - if (!is_file($file)) { - $this->ilias->raiseError($this->lng->txt("cont_select_file"), $this->ilias->error_obj->MESSAGE); - } - - $std_item = $this->object->getMediaItem("Standard"); - $std_item->setLocationType("LocalFile"); - $std_item->setLocation($location); - $format = ilObjMediaObject::getMimeType($file); - $std_item->setFormat($format); - $this->object->update(); - // $this->ctrl->saveParameter($this, "cdir"); - $this->ctrl->redirectByClass(ilContainerResourceGUI::class, "listFiles"); - } - - - /** - * assign file to fullscreen view - */ - public function assignFullscreenObject( - string $a_file - ): void { - // determine directory - $cur_subdir = dirname($a_file); - $mob_dir = ilFileUtils::getWebspaceDir() . "/mobs/mm_" . $this->object->getId(); - $cur_dir = (!empty($cur_subdir)) - ? $mob_dir . "/" . $cur_subdir - : $mob_dir; - $file = $cur_dir . "/" . basename($a_file); - $location = $a_file; - - if (!is_file($file)) { - $this->ilias->raiseError($this->lng->txt("cont_select_file"), $this->ilias->error_obj->MESSAGE); - } - - if (!$this->object->hasFullscreenItem()) { // create new fullscreen item - $std_item = $this->object->getMediaItem("Standard"); - $mob_dir = ilFileUtils::getWebspaceDir() . "/mobs/mm_" . $this->object->getId(); - $file = $mob_dir . "/" . $location; - $full_item = new ilMediaItem(); - $full_item->setMobId($std_item->getMobId()); - $full_item->setLocation($location); - $full_item->setLocationType("LocalFile"); - $full_item->setFormat(ilObjMediaObject::getMimeType($file)); - $full_item->setPurpose("Fullscreen"); - $this->object->addMediaItem($full_item); - } else { // alter existing fullscreen item - $full_item = $this->object->getMediaItem("Fullscreen"); - - $full_item->setLocationType("LocalFile"); - $full_item->setLocation($location); - $format = ilObjMediaObject::getMimeType($file); - $full_item->setFormat($format); - } - $this->object->update(); - // $this->ctrl->saveParameter($this, "cdir"); - $this->ctrl->redirectByClass(ilContainerResourceGUI::class, "listFiles"); - } - - - /** - * remove fullscreen view - */ - public function removeFullscreenObject(): void - { - $this->object->removeMediaItem("Fullscreen"); - $this->object->update(); - - $this->ctrl->redirect($this, "edit"); - } - - /** - * add fullscreen view - */ - public function addFullscreenObject(): void - { - if (!$this->object->hasFullscreenItem()) { - $std_item = $this->object->getMediaItem("Standard"); - $full_item = new ilMediaItem(); - $full_item->setMobId($std_item->getMobId()); - $full_item->setLocation($std_item->getLocation()); - $full_item->setLocationType($std_item->getLocationType()); - $full_item->setFormat($std_item->getFormat()); - $full_item->setWidth($std_item->getWidth()); - $full_item->setHeight($std_item->getHeight()); - $full_item->setCaption($std_item->getCaption()); - $full_item->setTextRepresentation($std_item->getTextRepresentation()); - $full_item->setPurpose("Fullscreen"); - $this->object->addMediaItem($full_item); - - $this->object->update(); - } - - $this->ctrl->redirect($this, "edit"); - } - /** * Show all media object usages (incl history) */ diff --git a/components/ILIAS/MediaObjects/MediaType/class.MediaTypeManager.php b/components/ILIAS/MediaObjects/MediaType/class.MediaTypeManager.php index 0c5914549ab8..3bf78e2c7c99 100755 --- a/components/ILIAS/MediaObjects/MediaType/class.MediaTypeManager.php +++ b/components/ILIAS/MediaObjects/MediaType/class.MediaTypeManager.php @@ -220,9 +220,13 @@ public function getMimeTypes(): \Iterator } } - public function getAllowedMimeTypes(): \Iterator + public function getAllowedMimeTypes(bool $local_only = false): \Iterator { - return $this->getAllowedSubset($this->getMimeTypes()); + foreach ($this->getAllowedSubset($this->getMimeTypes()) as $mime) { + if (!$local_only || !in_array($mime, ["video/vimeo", "video/youtube"])) { + yield $mime; + } + } } public function getVideoMimeTypes(bool $local_only = false): \Iterator diff --git a/components/ILIAS/MediaObjects/Service/class.InternalDomainService.php b/components/ILIAS/MediaObjects/Service/class.InternalDomainService.php index 784a623d9feb..e3ff4f5d3890 100755 --- a/components/ILIAS/MediaObjects/Service/class.InternalDomainService.php +++ b/components/ILIAS/MediaObjects/Service/class.InternalDomainService.php @@ -83,6 +83,7 @@ public function thumbs(): ThumbsManager { return new ThumbsManager( $this->data_service, + $this->repo_service, $this ); } diff --git a/components/ILIAS/MediaObjects/SubTitles/class.ilMobMultiSrtConfirmationTable2GUI.php b/components/ILIAS/MediaObjects/SubTitles/class.ilMobMultiSrtConfirmationTable2GUI.php index e9009d66e54a..1357c6902eac 100755 --- a/components/ILIAS/MediaObjects/SubTitles/class.ilMobMultiSrtConfirmationTable2GUI.php +++ b/components/ILIAS/MediaObjects/SubTitles/class.ilMobMultiSrtConfirmationTable2GUI.php @@ -65,7 +65,7 @@ protected function fillRow(array $a_set): void $language = $lng->txt("meta_l_" . $a_set["lang"]); $this->tpl->setVariable("LANGUAGE", $language); } - if ($a_set["mob"] != "") { + if (isset($a_set['mob']) && $a_set['mob'] !== '') { $this->tpl->setVariable("MEDIA_OBJECT", $a_set["mob_title"]); } else { $this->tpl->setVariable("MEDIA_OBJECT", "-"); diff --git a/components/ILIAS/MediaObjects/SubTitles/class.ilMobMultiSrtUpload.php b/components/ILIAS/MediaObjects/SubTitles/class.ilMobMultiSrtUpload.php index b68a5c66ea1f..c5e35d5a55cc 100755 --- a/components/ILIAS/MediaObjects/SubTitles/class.ilMobMultiSrtUpload.php +++ b/components/ILIAS/MediaObjects/SubTitles/class.ilMobMultiSrtUpload.php @@ -145,7 +145,7 @@ public function moveMultiSrtFiles(): int $items = $this->getMultiSrtFiles(); $cnt = 0; foreach ($items as $i) { - if ($i["mob"] > 0 && $i["lang"] != "") { + if (isset($i["mob"]) && $i["mob"] > 0 && $i["lang"] !== "") { $mob = new ilObjMediaObject($i["mob"]); $mob->uploadSrtFile($this->getMultiSrtUploadDir() . "/" . $i["filename"], $i["lang"], "rename"); $cnt++; diff --git a/components/ILIAS/MediaObjects/Thumbs/ThumbsManager.php b/components/ILIAS/MediaObjects/Thumbs/ThumbsManager.php index 70f6444c2987..4087649991b4 100644 --- a/components/ILIAS/MediaObjects/Thumbs/ThumbsManager.php +++ b/components/ILIAS/MediaObjects/Thumbs/ThumbsManager.php @@ -26,20 +26,26 @@ use ILIAS\Filesystem\Util\Convert\ImageOutputOptions; use ILIAS\Filesystem\Util\Convert\Images; use ILIAS\MediaObjects\InternalGUIService; +use ILIAS\Filesystem\Util\Convert\ImageConverter; +use ILIAS\Filesystem\Util\Convert\ImageConversionOptions; +use ILIAS\MediaObjects\InternalRepoService; class ThumbsManager { + protected \ILIAS\MediaObjects\MediaObjectRepository $repo; protected \ILIAS\MediaObjects\MediaObjectManager $media_manager; protected ImageOutputOptions $output_options; protected Images $image_converters; public function __construct( protected InternalDataService $data, + InternalRepoService $repo, protected InternalDomainService $domain ) { $this->media_manager = $this->domain->mediaObject(); $this->image_converters = new Images(true); $this->output_options = new ImageOutputOptions(); + $this->repo = $repo->mediaObject(); } protected function getThumbPath(): string @@ -106,7 +112,7 @@ protected function createThumb( if (!$this->media_manager->hasLocalFile($mob_id, $location)) { return; } - $width = $height = \ilObjMediaObject::DEFAULT_PREVIEW_SIZE; + $width = $height = \ilObjMediaObject::DEFAULT_THUMB_SIZE; $image_quality = 90; // the zip stream is not seekable, which is needed by Imagick @@ -116,7 +122,7 @@ protected function createThumb( rewind($tempStream); $stream = new Stream($tempStream); - $converter = $this->image_converters->resizeToFixedSize( + $converter = $this->resizeToFixedSize( $stream, $width, $height, @@ -134,11 +140,102 @@ protected function createThumb( } } + public function createPreview( + int $mob_id, + string $location, + bool $local, + string $format, + int $sec = 1, + string $target_location = "mob_vpreview.png" + ): void { + + $is_image = is_int(strpos($format, "image/")); + $is_video = in_array($format, ["video/mp4", "video/webm"]); + + if ($local) { + if ($is_image) { + $width = $height = \ilObjMediaObject::DEFAULT_PREVIEW_SIZE; + $image_quality = 60; + + // the zip stream is not seekable, which is needed by Imagick + // so we create a seekable stream first + $tempStream = fopen('php://temp', 'w+'); + stream_copy_to_stream($this->repo->getLocationStream($mob_id, $location)->detach(), $tempStream); + rewind($tempStream); + $stream = new Stream($tempStream); + + $converter = $this->resizeToFixedSize( + $stream, + $width, + $height, + true, + $this->output_options + ->withQuality($image_quality) + ->withFormat(ImageOutputOptions::FORMAT_PNG) + ); + $this->repo->addStream( + $mob_id, + $target_location, + $converter->getStream() + ); + fclose($tempStream); + } + if ($is_video) { + $zip_uri = $this->repo->getContainerPath($mob_id); + $image_str = \ilFFmpeg::extractPNGFromVideoInZip( + $zip_uri, + $location, + $sec + ); + $png_res = fopen('php://memory', 'r+'); + fwrite($png_res, $image_str); + rewind($png_res); + $png_stream = new Stream($png_res); + $this->repo->addStream( + $mob_id, + $target_location, + $png_stream + ); + } + } + } + + + protected function resizeToFixedSize( + Stream $stream, + int $width, + int $height, + bool $crop_if_true_and_resize_if_false, + ImageOutputOptions $output_options + ): ImageConverter { + $conversion_options = (new ImageConversionOptions()) + ->withMakeTemporaryFiles(false) + ->withThrowOnError(false) + ->withBackgroundColor('#FFFFFF'); + + return new ImageConverter( + $conversion_options + ->withWidth($width) + ->withHeight($height) + ->withCrop($crop_if_true_and_resize_if_false) + ->withKeepAspectRatio(true), + $output_options, + $stream + ); + } + + /** * For use in browser src of images */ public function getPreviewSrc(int $mob_id): string { + $mob = new \ilObjMediaObject($mob_id); + $item = $mob->getMediaItem("Standard"); + if ($item?->getLocationType() === "Reference" && str_starts_with($item?->getFormat(), "image/")) { + return $item?->getLocation(); + } + $ppics = array( "mob_vpreview.png", "mob_vpreview.jpg", diff --git a/components/ILIAS/MediaObjects/classes/class.ilFFmpeg.php b/components/ILIAS/MediaObjects/classes/class.ilFFmpeg.php index 6e650089d27a..4e26dca94cad 100755 --- a/components/ILIAS/MediaObjects/classes/class.ilFFmpeg.php +++ b/components/ILIAS/MediaObjects/classes/class.ilFFmpeg.php @@ -189,7 +189,7 @@ public static function extractPNGFromVideoInZip( $command1 = "unzip -p $zip $path > $tmp_file"; shell_exec($command1); - $command2 = "ffmpeg -i $tmp_file -f image2 -vframes 1 -ss $sec -vcodec png pipe:1"; + $command2 = self::getCmd() . " -i $tmp_file -f image2 -vframes 1 -ss $sec -vcodec png pipe:1"; $ret = (string) shell_exec($command2); unlink($tfile); diff --git a/components/ILIAS/MediaObjects/classes/class.ilMediaObjectUsagesTableGUI.php b/components/ILIAS/MediaObjects/classes/class.ilMediaObjectUsagesTableGUI.php index 1894efaf35ab..372d132d90cc 100755 --- a/components/ILIAS/MediaObjects/classes/class.ilMediaObjectUsagesTableGUI.php +++ b/components/ILIAS/MediaObjects/classes/class.ilMediaObjectUsagesTableGUI.php @@ -246,7 +246,7 @@ protected function fillRow(array $a_set): void } // show versions - if (is_array($usage["versions"]) && is_object($usage["page"] ?? null)) { + if (is_array($usage["versions"] ?? false) && is_object($usage["page"] ?? null)) { $ver = $sep = ""; if (count($usage["versions"]) > 5) { diff --git a/components/ILIAS/MediaPool/Clipboard/class.ilClipboardTableGUI.php b/components/ILIAS/MediaPool/Clipboard/class.ilClipboardTableGUI.php index 409ce883a368..a7e91d6ad326 100755 --- a/components/ILIAS/MediaPool/Clipboard/class.ilClipboardTableGUI.php +++ b/components/ILIAS/MediaPool/Clipboard/class.ilClipboardTableGUI.php @@ -88,6 +88,7 @@ protected function fillRow(array $a_set): void $mob = null; if ($a_set["type"] === "mob") { + $mob = new ilObjMediaObject($a_set["id"]); $this->tpl->setVariable( "IMG", $this->thumbs_gui->getThumbHtml((int) $a_set["id"]) diff --git a/components/ILIAS/MediaPool/Clipboard/class.ilEditClipboardGUI.php b/components/ILIAS/MediaPool/Clipboard/class.ilEditClipboardGUI.php index 40ba1b92d81d..b94440f28708 100755 --- a/components/ILIAS/MediaPool/Clipboard/class.ilEditClipboardGUI.php +++ b/components/ILIAS/MediaPool/Clipboard/class.ilEditClipboardGUI.php @@ -159,6 +159,9 @@ public function view(): void $tpl = $this->tpl; $ilToolbar = $this->toolbar; + $this->lng->loadLanguageModule("mep"); + $tpl->setOnScreenMessage("info", $this->lng->txt("mep_clipboard_info")); + $this->gui->button( $this->lng->txt("cont_create_mob"), $ilCtrl->getLinkTargetByClass("ilobjmediaobjectgui", "create") diff --git a/components/ILIAS/MediaPool/PermanentLink/PermanentLinkManager.php b/components/ILIAS/MediaPool/PermanentLink/PermanentLinkManager.php new file mode 100755 index 000000000000..7b50d38b6e4c --- /dev/null +++ b/components/ILIAS/MediaPool/PermanentLink/PermanentLinkManager.php @@ -0,0 +1,53 @@ +ref_id = $this->gui->standardRequest()->getRefId(); + } + + public function getPermanentLink( + ): string { + $id = $this->ref_id; + $uri = $this->static_url->builder()->build( + 'mep', // namespace + $id > 0 ? new ReferenceId($id) : null + ); + return (string) $uri; + } + + public function setPermanentLink( + ): void { + $uri = $this->getPermanentLink(); + PageContentProvider::setPermaLink($uri); + } +} diff --git a/components/ILIAS/MediaPool/Service/class.InternalGUIService.php b/components/ILIAS/MediaPool/Service/class.InternalGUIService.php index bc8159a4bbdf..718cd2e7c2fd 100755 --- a/components/ILIAS/MediaPool/Service/class.InternalGUIService.php +++ b/components/ILIAS/MediaPool/Service/class.InternalGUIService.php @@ -23,6 +23,7 @@ use ILIAS\DI\Container; use ILIAS\Repository\GlobalDICGUIServices; use ILIAS\MediaPool\Clipboard\GUIService; +use ILIAS\MediaPool\PermanentLink\PermanentLinkManager; class InternalGUIService { @@ -62,4 +63,14 @@ public function settings( ); } + public function permanentLink( + int $ref_id = 0 + ): PermanentLinkManager { + return new PermanentLinkManager( + $this->domain_service->staticUrl(), + $this, + $ref_id + ); + } + } diff --git a/components/ILIAS/MediaPool/classes/class.ilMediaPoolItem.php b/components/ILIAS/MediaPool/classes/class.ilMediaPoolItem.php index 8eb096394a5c..2eb33dea589a 100755 --- a/components/ILIAS/MediaPool/classes/class.ilMediaPoolItem.php +++ b/components/ILIAS/MediaPool/classes/class.ilMediaPoolItem.php @@ -191,9 +191,9 @@ public static function updateObjectTitle(int $a_obj): void global $DIC; $ilDB = $DIC->database(); - if (ilObject::_lookupType($a_obj) === "mob") { - $title = ilObject::_lookupTitle($a_obj); + $media_object = new ilObjMediaObject($a_obj); + $title = $media_object->getTitle(); $ilDB->manipulate( "UPDATE mep_item SET " . " title = " . $ilDB->quote($title, "text") . diff --git a/components/ILIAS/MediaPool/classes/class.ilMediaPoolPageGUI.php b/components/ILIAS/MediaPool/classes/class.ilMediaPoolPageGUI.php index 25f4541be203..78406701b078 100755 --- a/components/ILIAS/MediaPool/classes/class.ilMediaPoolPageGUI.php +++ b/components/ILIAS/MediaPool/classes/class.ilMediaPoolPageGUI.php @@ -347,19 +347,6 @@ public function getAdditionalPageActions(): array { $tabs = []; - $mdgui = new ilObjectMetaDataGUI( - $this->meta_data_rep_obj, - $this->meta_data_type, - $this->meta_data_sub_obj_id - ); - $mdtab = $mdgui->getTab(); - if ($mdtab) { - $tabs[] = $this->ui->factory()->link()->standard( - $this->lng->txt('meta_data'), - $mdtab - ); - } - $tabs[] = $this->ui->factory()->link()->standard( $this->lng->txt('cont_usage'), diff --git a/components/ILIAS/MediaPool/classes/class.ilMediaPoolPageUsagesTableGUI.php b/components/ILIAS/MediaPool/classes/class.ilMediaPoolPageUsagesTableGUI.php index fe74ac727b63..4a1086965c6d 100755 --- a/components/ILIAS/MediaPool/classes/class.ilMediaPoolPageUsagesTableGUI.php +++ b/components/ILIAS/MediaPool/classes/class.ilMediaPoolPageUsagesTableGUI.php @@ -56,7 +56,6 @@ public function __construct( public function getItems(): void { $usages = $this->page->getUsages($this->incl_hist); - $clip_cnt = 0; $agg_usages = array(); foreach ($usages as $k => $usage) { @@ -158,6 +157,15 @@ protected function fillRow(array $a_set): void break; case "cont": + $type = ilObject::_lookupType($page_obj->getId()); + $item["obj_type_txt"] = $this->lng->txt("obj_" . $type); + $item["obj_title"] = ilObject::_lookupTitle($page_obj->getId()); + $ref_id = $this->getFirstWritableRefId($page_obj->getId()); + if ($ref_id > 0) { + $item["obj_link"] = ilLink::_getStaticLink($ref_id, $type); + } + break; + case "copa": $item["obj_type_txt"] = $this->lng->txt("obj_" . $cont_type); $item["obj_title"] = ilObject::_lookupTitle($page_obj->getId()); diff --git a/components/ILIAS/MediaPool/classes/class.ilMediaPoolPresentationGUI.php b/components/ILIAS/MediaPool/classes/class.ilMediaPoolPresentationGUI.php index 3995f09fb26c..40eb35f1cd84 100755 --- a/components/ILIAS/MediaPool/classes/class.ilMediaPoolPresentationGUI.php +++ b/components/ILIAS/MediaPool/classes/class.ilMediaPoolPresentationGUI.php @@ -23,6 +23,7 @@ */ class ilMediaPoolPresentationGUI implements ilCtrlBaseClassInterface { + protected \ILIAS\MediaPool\InternalGUIService $gui; protected \ILIAS\MediaPool\StandardGUIRequest $request; protected ilCtrl $ctrl; protected ilAccessHandler $access; @@ -49,6 +50,7 @@ public function __construct() $this->tpl = $tpl; $this->lng = $lng; $this->objDefinition = $objDefinition; + $this->gui = $DIC->mediaPool()->internal()->gui(); $DIC->globalScreen()->tool()->context()->claim()->repository(); $DIC->globalScreen()->tool()->context()->current()->addAdditionalData(ilMediaPoolGSToolProvider::SHOW_FOLDERS_TOOL, true); @@ -77,6 +79,7 @@ public function executeCommand(): void switch ($next_class) { case "ilobjmediapoolgui": + $this->gui->permanentLink($this->request->getRefId())->setPermanentLink(); $mep_gui = new ilObjMediaPoolGUI($this->request->getRefId()); $ilCtrl->forwardCommand($mep_gui); break; diff --git a/components/ILIAS/MediaPool/classes/class.ilObjMediaPoolGUI.php b/components/ILIAS/MediaPool/classes/class.ilObjMediaPoolGUI.php index efc48d2c0947..1d8ba42e3e76 100755 --- a/components/ILIAS/MediaPool/classes/class.ilObjMediaPoolGUI.php +++ b/components/ILIAS/MediaPool/classes/class.ilObjMediaPoolGUI.php @@ -391,6 +391,7 @@ public function executeCommand(): void break; case "ilcommonactiondispatchergui": + $this->prepareOutput(); $gui = ilCommonActionDispatcherGUI::getInstanceFromAjaxCall(); $this->ctrl->forwardCommand($gui); break; diff --git a/components/ILIAS/Membership/classes/Export/class.ilMemberExport.php b/components/ILIAS/Membership/classes/Export/class.ilMemberExport.php index b3e4397cd350..fe7c285006da 100755 --- a/components/ILIAS/Membership/classes/Export/class.ilMemberExport.php +++ b/components/ILIAS/Membership/classes/Export/class.ilMemberExport.php @@ -502,7 +502,7 @@ private function addUserDefinedField(ProfileData $udf_data, string $a_field, int ) { $field_info = explode('_', $a_field); $field_id = $field_info[1]; - $value = $udf_data->getAdditionalFieldByIdentifier($field_id); + $value = implode(', ', $udf_data->getAdditionalFieldByIdentifier($field_id) ?? []); $this->addCol($value, $row, $col); return true; } diff --git a/components/ILIAS/Membership/classes/Export/class.ilMemberExportSettingsGUI.php b/components/ILIAS/Membership/classes/Export/class.ilMemberExportSettingsGUI.php index a8bf1e119764..b23c14ba123f 100755 --- a/components/ILIAS/Membership/classes/Export/class.ilMemberExportSettingsGUI.php +++ b/components/ILIAS/Membership/classes/Export/class.ilMemberExportSettingsGUI.php @@ -116,7 +116,7 @@ protected function initForm(string $a_type): ilPropertyFormGUI } // udf - $exportable = $this->profile->getVisibleUserDefinedFields(Context::buildFromObjectType($this->type)); + $exportable = $this->profile->getVisibleUserDefinedFields(Context::buildFromObjectType($this->parent_type)); foreach ($exportable as $field) { $fields['udf_' . $field->getIdentifier()] = $field->getLabel($this->lng); } diff --git a/components/ILIAS/Membership/classes/class.ilAttendanceList.php b/components/ILIAS/Membership/classes/class.ilAttendanceList.php index 8c19bfab35ea..08b02216a4fb 100755 --- a/components/ILIAS/Membership/classes/class.ilAttendanceList.php +++ b/components/ILIAS/Membership/classes/class.ilAttendanceList.php @@ -37,6 +37,7 @@ class ilAttendanceList protected ilObject $parent_obj; protected ?ilParticipants $participants; protected ?ilWaitingList $waiting_list; + protected ilTree $tree; /** * @var ?callable */ @@ -67,7 +68,7 @@ public function __construct( $this->ctrl = $DIC->ctrl(); $this->tpl = $DIC->ui()->mainTemplate(); $this->profile = $DIC['user']->getProfile(); - + $this->tree = $DIC->repositoryTree(); $this->parent_gui = $a_parent_gui; $this->parent_obj = $a_parent_obj; $this->participants = $a_participants_object; @@ -137,12 +138,16 @@ protected function readOrderedExportableFields(): bool ); } + $parent_obj_type = $this->tree->checkForParentType($this->parent_obj->getRefId(), 'crs') ? 'crs' : ''; + $parent_obj_type = $this->tree->checkForParentType($this->parent_obj->getRefId(), 'grp') ? 'grp' : $parent_obj_type; + $user_defined_fields = $parent_obj_type === '' + ? $this->profile->getAllUserDefinedFields() + : $this->profile->getVisibleUserDefinedFields(Context::buildFromObjectType($parent_obj_type)); + // add udf fields - foreach ($this->profile->getVisibleUserDefinedFields( - Context::buildFromObjectType($this->parent_obj->getType()) - ) as $field) { + foreach ($user_defined_fields as $field) { $this->presets['udf_' . $field->getIdentifier()] = array( - $field->getLabel(), + $field->getLabel($this->lng), false ); } @@ -225,7 +230,7 @@ public function getNonMemberUserData(array &$a_res): void foreach ($this->profile->getVisibleUserDefinedFields( Context::buildFromObjectType($this->parent_obj->getType()) ) as $field) { - $profile_data = $this->profile->getDataForMultiple([$user_id]); + $profile_data = $this->profile->getDataForMultiple($user_ids); foreach ($profile_data as $user_id => $field) { $a_res[$user_id]['udf_' . $field->getIdentifier()] = $profile_data->getAdditionalFieldByIdentifier( $field->getIdentifier() diff --git a/components/ILIAS/Membership/classes/class.ilMembershipAdministrationGUI.php b/components/ILIAS/Membership/classes/class.ilMembershipAdministrationGUI.php index 7f79c8e73ec1..7cb1621932d6 100755 --- a/components/ILIAS/Membership/classes/class.ilMembershipAdministrationGUI.php +++ b/components/ILIAS/Membership/classes/class.ilMembershipAdministrationGUI.php @@ -25,8 +25,8 @@ */ abstract class ilMembershipAdministrationGUI extends ilObjectGUI { - protected const SUB_TAB_GENERAL_SETTINGS = 'settings'; - protected const SUB_TAB_PRINT_VIEW = 'print_view'; + protected const string SUB_TAB_GENERAL_SETTINGS = 'settings'; + protected const string SUB_TAB_PRINT_VIEW = 'print_view'; public function __construct($a_data, int $a_id, bool $a_call_by_reference = true, bool $a_prepare_output = true) { @@ -56,7 +56,7 @@ public function executeCommand(): void $this->prepareOutput(); - if (!$this->rbac_system->checkAccess("visible,read", $this->object->getRefId())) { + if (!$this->rbac_system->checkAccess("read", $this->object->getRefId())) { $this->error->raiseError($this->lng->txt("no_permission"), $this->error->WARNING); } @@ -91,7 +91,7 @@ public function executeCommand(): void public function getAdminTabs(): void { - if ($this->rbac_system->checkAccess("visible,read", $this->object->getRefId())) { + if ($this->rbac_system->checkAccess("read", $this->object->getRefId())) { $this->tabs_gui->addTarget( "settings", $this->ctrl->getLinkTarget($this, "editSettings"), diff --git a/components/ILIAS/Membership/classes/class.ilMembershipGUI.php b/components/ILIAS/Membership/classes/class.ilMembershipGUI.php index 4d0b6609128a..e4022452aa3a 100755 --- a/components/ILIAS/Membership/classes/class.ilMembershipGUI.php +++ b/components/ILIAS/Membership/classes/class.ilMembershipGUI.php @@ -61,6 +61,7 @@ public function __construct(ilObjectGUI $repository_gui, ilObject $repository_ob $this->tpl = $DIC->ui()->mainTemplate(); $this->ctrl = $DIC->ctrl(); $this->lng->loadLanguageModule('trac'); + $this->lng->loadLanguageModule('mmbr'); $this->logger = $DIC->logger()->mmbr(); $this->access = $DIC->access(); $this->user = $DIC->user(); @@ -575,8 +576,13 @@ public function updateParticipants(): void $post_roles[$usr_id][] = $adminRoleId; } + if (!isset($post_roles[$usr_id]) || empty($post_roles[$usr_id])) { + $this->tpl->setOnScreenMessage('failure', $this->lng->txt('mmbr_role_error'), true); + $this->ctrl->redirect($this, 'participants'); + } + // Validate the role ids in the post data - foreach ((array) $post_roles[$usr_id] as $role_id) { + foreach ((array) ($post_roles[$usr_id] ?? []) as $role_id) { if (!array_key_exists($role_id, $assignableLocalRoles)) { $this->tpl->setOnScreenMessage('failure', $this->lng->txt('msg_no_perm_perm'), true); $this->ctrl->redirect($this, 'participants'); @@ -618,7 +624,7 @@ public function updateParticipants(): void } foreach ($participants as $usr_id) { - $this->getMembersObject()->updateRoleAssignments($usr_id, (array) $post_roles[$usr_id]); + $this->getMembersObject()->updateRoleAssignments($usr_id, (array) ($post_roles[$usr_id] ?? [])); // Disable notification for all of them $this->getMembersObject()->updateNotification($usr_id, false); @@ -1186,7 +1192,6 @@ public function confirmRefuseSubscribers(): void $this->tpl->setOnScreenMessage('failure', $this->lng->txt("crs_no_subscribers_selected"), true); $this->ctrl->redirect($this, 'participants'); } - $this->lng->loadLanguageModule('mmbr'); $c_gui = new ilConfirmationGUI(); // set confirm/cancel commands $c_gui->setFormAction($this->ctrl->getFormAction($this, "refuseSubscribers")); @@ -1419,7 +1424,6 @@ public function confirmRefuseFromList(): void $this->tpl->setOnScreenMessage('failure', $this->lng->txt("no_checkbox"), true); $this->ctrl->redirect($this, 'participants'); } - $this->lng->loadLanguageModule('mmbr'); $c_gui = new ilConfirmationGUI(); // set confirm/cancel commands diff --git a/components/ILIAS/Membership/classes/class.ilSubscriberTableGUI.php b/components/ILIAS/Membership/classes/class.ilSubscriberTableGUI.php index 60483a889e25..471ed6334c3e 100755 --- a/components/ILIAS/Membership/classes/class.ilSubscriberTableGUI.php +++ b/components/ILIAS/Membership/classes/class.ilSubscriberTableGUI.php @@ -315,15 +315,16 @@ public function readSubscriberData(array $a_subscriber_ids): void // Custom user data fields if (is_array($udf_ids)) { $a_user_data = array_reduce( - $this->profile->getDataForMultiple($usr_ids), + iterator_to_array($this->profile->getDataForMultiple($usr_ids)), function (array $c, ProfileData $v) use ($udf_ids): array { if (!$this->checkAcceptance($v->getId())) { return $c; } foreach ($udf_ids as $field_id) { - $c[$v->getId()]['udf_' . $field_id] = $v->getAdditionalFieldByIdentifier($field_id); + $c[$v->getId()]['udf_' . $field_id] = implode(', ', $v->getAdditionalFieldByIdentifier($field_id) ?? []); } + return $c; }, $a_user_data ); diff --git a/components/ILIAS/MetaData/classes/Settings/Copyright/Usage/class.ilMDCopyrightUsageTableGUI.php b/components/ILIAS/MetaData/classes/Settings/Copyright/Usage/class.ilMDCopyrightUsageTableGUI.php index e7f1e0a83633..3a74fb1c6856 100755 --- a/components/ILIAS/MetaData/classes/Settings/Copyright/Usage/class.ilMDCopyrightUsageTableGUI.php +++ b/components/ILIAS/MetaData/classes/Settings/Copyright/Usage/class.ilMDCopyrightUsageTableGUI.php @@ -207,10 +207,7 @@ public function collectData(array $filters): array public function getObjTypesAvailable(): array { $query = "SELECT DISTINCT obj_type FROM il_meta_rights " . - "WHERE description = " . $this->db->quote( - 'il_copyright_entry__' . IL_INST_ID . '__' . $this->copyright_id, - 'text' - ) . + "WHERE description = " . $this->db->quote($this->getCopyrightIdentifier(), ilDBConstants::T_TEXT) . " AND rbac_id = obj_id"; $result = $this->db->query($query); $data = array(); @@ -226,10 +223,7 @@ public function getObjTypesAvailable(): array public function getDataFromDB(): array { $query = "SELECT rbac_id, obj_id, obj_type FROM il_meta_rights " . - "WHERE description = " . $this->db->quote( - 'il_copyright_entry__' . IL_INST_ID . '__' . $this->copyright_id, - 'text' - ) . + "WHERE description = " . $this->db->quote($this->getCopyrightIdentifier(), ilDBConstants::T_TEXT) . ' AND rbac_id != ' . $this->db->quote(0, 'integer') . " GROUP BY rbac_id"; @@ -248,7 +242,8 @@ public function getCountSubItemsFromDB(int $a_rbac_id): int { $query = "SELECT count(rbac_id) total FROM il_meta_rights " . "WHERE rbac_id = " . $this->db->quote($a_rbac_id, ilDBConstants::T_INTEGER) . - " AND rbac_id != obj_id"; + " AND rbac_id != obj_id" . + " AND description = " . $this->db->quote($this->getCopyrightIdentifier(), ilDBConstants::T_TEXT); $result = $this->db->query($query); while ($row = $result->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) { @@ -256,4 +251,9 @@ public function getCountSubItemsFromDB(int $a_rbac_id): int } return 0; } + + protected function getCopyrightIdentifier(): string + { + return 'il_copyright_entry__' . IL_INST_ID . '__' . $this->copyright_id; + } } diff --git a/components/ILIAS/MetaData/classes/Settings/Copyright/class.ilMDCopyrightConfigurationGUI.php b/components/ILIAS/MetaData/classes/Settings/Copyright/class.ilMDCopyrightConfigurationGUI.php index d28cb24d37bb..d5c0954f006e 100755 --- a/components/ILIAS/MetaData/classes/Settings/Copyright/class.ilMDCopyrightConfigurationGUI.php +++ b/components/ILIAS/MetaData/classes/Settings/Copyright/class.ilMDCopyrightConfigurationGUI.php @@ -86,10 +86,7 @@ public function executeCommand(): void $next_class = $this->ctrl->getNextClass($this); $cmd = $this->ctrl->getCmd(); - if ( - !$this->access_service->hasCurrentUserVisibleAccess() || - !$this->access_service->hasCurrentUserReadAccess() - ) { + if (!$this->access_service->hasCurrentUserReadAccess()) { throw new ilPermissionException($this->lng->txt('no_permission')); } diff --git a/components/ILIAS/MetaData/classes/Settings/OER/class.ilMDOERSettingsGUI.php b/components/ILIAS/MetaData/classes/Settings/OER/class.ilMDOERSettingsGUI.php index fa6e0f53d53e..977d9cc4abe7 100644 --- a/components/ILIAS/MetaData/classes/Settings/OER/class.ilMDOERSettingsGUI.php +++ b/components/ILIAS/MetaData/classes/Settings/OER/class.ilMDOERSettingsGUI.php @@ -50,10 +50,7 @@ public function executeCommand(): void $next_class = $this->ctrl->getNextClass($this); $cmd = $this->ctrl->getCmd(); - if ( - !$this->access_service->hasCurrentUserVisibleAccess() || - !$this->access_service->hasCurrentUserReadAccess() - ) { + if (!$this->access_service->hasCurrentUserReadAccess()) { throw new ilPermissionException($this->lng->txt('no_permission')); } diff --git a/components/ILIAS/MetaData/classes/Settings/Service/class.ilMDSettingsAccessService.php b/components/ILIAS/MetaData/classes/Settings/Service/class.ilMDSettingsAccessService.php index 9332e42776c2..19ff4cc2d3f9 100755 --- a/components/ILIAS/MetaData/classes/Settings/Service/class.ilMDSettingsAccessService.php +++ b/components/ILIAS/MetaData/classes/Settings/Service/class.ilMDSettingsAccessService.php @@ -20,7 +20,6 @@ class ilMDSettingsAccessService { - protected const string VISIBLE = 'visible'; protected const string READ = 'read'; protected const string WRITE = 'write'; protected const string EDIT_PERMISSION = 'edit_permission'; @@ -34,11 +33,6 @@ public function __construct(int $ref_id, ilAccess $access) $this->access = $access; } - public function hasCurrentUserVisibleAccess(): bool - { - return $this->hasCurrentUserAccess(self::VISIBLE); - } - public function hasCurrentUserReadAccess(): bool { return $this->hasCurrentUserAccess(self::READ); diff --git a/components/ILIAS/MetaData/classes/Settings/Vocabularies/class.ilMDVocabulariesGUI.php b/components/ILIAS/MetaData/classes/Settings/Vocabularies/class.ilMDVocabulariesGUI.php index 99d2679e2d3a..6c030f1d2080 100644 --- a/components/ILIAS/MetaData/classes/Settings/Vocabularies/class.ilMDVocabulariesGUI.php +++ b/components/ILIAS/MetaData/classes/Settings/Vocabularies/class.ilMDVocabulariesGUI.php @@ -107,10 +107,7 @@ public function executeCommand(): void $next_class = $this->ctrl->getNextClass($this); $cmd = $this->ctrl->getCmd(); - if ( - !$this->access_service->hasCurrentUserVisibleAccess() || - !$this->access_service->hasCurrentUserReadAccess() - ) { + if (!$this->access_service->hasCurrentUserReadAccess()) { throw new ilPermissionException($this->lng->txt('no_permission')); } diff --git a/components/ILIAS/MetaData/classes/Settings/class.ilMDSettingsControllerGUI.php b/components/ILIAS/MetaData/classes/Settings/class.ilMDSettingsControllerGUI.php index 0d1f5a94e923..0927252d5e89 100644 --- a/components/ILIAS/MetaData/classes/Settings/class.ilMDSettingsControllerGUI.php +++ b/components/ILIAS/MetaData/classes/Settings/class.ilMDSettingsControllerGUI.php @@ -57,10 +57,7 @@ public function executeCommand(): void $this->setTabs(); - if ( - !$this->access_service->hasCurrentUserVisibleAccess() || - !$this->access_service->hasCurrentUserReadAccess() - ) { + if (!$this->access_service->hasCurrentUserReadAccess()) { throw new ilPermissionException($this->lng->txt('no_permission')); } @@ -95,10 +92,7 @@ public function executeCommand(): void protected function setTabs(): void { - if ( - !$this->access_service->hasCurrentUserVisibleAccess() || - !$this->access_service->hasCurrentUserReadAccess() - ) { + if (!$this->access_service->hasCurrentUserReadAccess()) { return; } diff --git a/components/ILIAS/MyStaff/classes/ListCourses/class.ilMStListCourses.php b/components/ILIAS/MyStaff/classes/ListCourses/class.ilMStListCourses.php index 365863374f4b..e0a58268dcba 100755 --- a/components/ILIAS/MyStaff/classes/ListCourses/class.ilMStListCourses.php +++ b/components/ILIAS/MyStaff/classes/ListCourses/class.ilMStListCourses.php @@ -1,4 +1,5 @@ $users) { $obj_ids = ilMyStaffAccess::getInstance()->getIdsForUserAndOperation( $this->dic->user()->getId(), diff --git a/components/ILIAS/MyStaff/classes/ListUsers/class.ilMStListUser.php b/components/ILIAS/MyStaff/classes/ListUsers/class.ilMStListUser.php index 549ceebc5090..65505241962c 100755 --- a/components/ILIAS/MyStaff/classes/ListUsers/class.ilMStListUser.php +++ b/components/ILIAS/MyStaff/classes/ListUsers/class.ilMStListUser.php @@ -1,4 +1,5 @@ country = $country; } - public function getSelCountry(): string - { - return $this->sel_country; - } - - public function setSelCountry(string $sel_country): void - { - $this->sel_country = $sel_country; - } - public function getMatriculation(): string { return $this->matriculation; diff --git a/components/ILIAS/MyStaff/classes/ListUsers/class.ilMStListUsers.php b/components/ILIAS/MyStaff/classes/ListUsers/class.ilMStListUsers.php index c79c60b21aa8..fbd737ab9f99 100755 --- a/components/ILIAS/MyStaff/classes/ListUsers/class.ilMStListUsers.php +++ b/components/ILIAS/MyStaff/classes/ListUsers/class.ilMStListUsers.php @@ -1,4 +1,5 @@ setZipcode($user['zipcode'] ?? ""); $list_user->setCity($user['city'] ?? ""); $list_user->setCountry($user['country'] ?? ""); - $list_user->setSelCountry($user['sel_country'] ?? ""); $list_user->setHobby($user['hobby'] ?? ""); $list_user->setMatriculation($user['matriculation'] ?? ""); $list_user->setActive(intval($user['active'])); diff --git a/components/ILIAS/MyStaff/classes/ListUsers/class.ilMStListUsersTableGUI.php b/components/ILIAS/MyStaff/classes/ListUsers/class.ilMStListUsersTableGUI.php index b137f87b1650..704adf3e4deb 100755 --- a/components/ILIAS/MyStaff/classes/ListUsers/class.ilMStListUsersTableGUI.php +++ b/components/ILIAS/MyStaff/classes/ListUsers/class.ilMStListUsersTableGUI.php @@ -48,6 +48,7 @@ public function __construct(\ilMStListUsersGUI $parent_obj, $parent_cmd = \ilMSt global $DIC; $this->access = ilMyStaffAccess::getInstance(); + $this->profile = $DIC['user']->getProfile(); $this->setPrefix('myst_lu'); $this->setFormName('myst_lu'); @@ -58,7 +59,6 @@ public function __construct(\ilMStListUsersGUI $parent_obj, $parent_cmd = \ilMSt $this->uiFactory = $DIC->ui()->factory(); $this->uiRenderer = $DIC->ui()->renderer(); $this->language = $DIC->language(); - $this->profile = $DIC['user']->getProfile(); $this->setRowTemplate('tpl.list_users_row.html', "components/ILIAS/MyStaff"); $this->setFormAction($DIC->ctrl()->getFormAction($parent_obj)); diff --git a/components/ILIAS/MyStaff/classes/ShowUser/class.ilMStShowUserGUI.php b/components/ILIAS/MyStaff/classes/ShowUser/class.ilMStShowUserGUI.php index 5d968ccc456d..0338678b11dd 100755 --- a/components/ILIAS/MyStaff/classes/ShowUser/class.ilMStShowUserGUI.php +++ b/components/ILIAS/MyStaff/classes/ShowUser/class.ilMStShowUserGUI.php @@ -25,6 +25,7 @@ * @author Martin Studer * @ilCtrl_IsCalledBy ilMStShowUserGUI: ilMyStaffGUI * @ilCtrl_Calls ilMStShowUserGUI: ilUserCertificateGUI + * @ilCtrl_Calls ilMStShowUserGUI: ILIAS\User\Profile\PublicProfileGUI */ class ilMStShowUserGUI { diff --git a/components/ILIAS/MyStaff/classes/class.ilMyStaffAccess.php b/components/ILIAS/MyStaff/classes/class.ilMyStaffAccess.php index 23b5f3944801..129407689b49 100755 --- a/components/ILIAS/MyStaff/classes/class.ilMyStaffAccess.php +++ b/components/ILIAS/MyStaff/classes/class.ilMyStaffAccess.php @@ -366,8 +366,7 @@ public function countOrgusOfUserWithOperationAndContext( $user_id, 'integer' ) . " AND perm.operations REGEXP '[\\\[,]\"?" - . $operation->getOperationId() . "\"?[\],]' - WHERE perm.parent_id = -1"; + . $operation->getOperationId() . "\"?[\],]'"; $set = $DIC->database()->query($q); $rec = $DIC->database()->fetchAssoc($set); diff --git a/components/ILIAS/MyStaff/classes/class.ilMyStaffGUI.php b/components/ILIAS/MyStaff/classes/class.ilMyStaffGUI.php index 9b80b28cd06e..f53689ccc58b 100755 --- a/components/ILIAS/MyStaff/classes/class.ilMyStaffGUI.php +++ b/components/ILIAS/MyStaff/classes/class.ilMyStaffGUI.php @@ -18,6 +18,7 @@ use ILIAS\MyStaff\ilMyStaffAccess; use ILIAS\MyStaff\ListCourses\ilMStListCourse; +use ILIAS\User\Profile\PublicProfileGUI; /** * Class ilMyStaffGUI @@ -108,11 +109,6 @@ final public static function extendActionMenuWithUserActions( */ switch ($action->getType()) { case "profile": //personal profile - $actions[] = $ui_fac->link()->standard( - $action->getText(), - $action->getHref() . "&back_url=" . $return_url - ); - break; case "compose": //mail case "invite": //public chat case "invite_osd": //direct chat (start conversation) diff --git a/components/ILIAS/News/Dashboard/class.DashboardNewsManager.php b/components/ILIAS/News/Dashboard/class.DashboardNewsManager.php index a10fc72c9ee1..cfbfce82b0a9 100755 --- a/components/ILIAS/News/Dashboard/class.DashboardNewsManager.php +++ b/components/ILIAS/News/Dashboard/class.DashboardNewsManager.php @@ -20,6 +20,7 @@ namespace ILIAS\News\Dashboard; +use ILIAS\News\Data\NewsCriteria; use ILIAS\News\InternalRepoService; use ILIAS\News\InternalDataService; use ILIAS\News\InternalDomainService; @@ -30,23 +31,14 @@ class DashboardNewsManager { protected DashboardSessionRepository $session_repo; - protected InternalRepoService $repo; - protected InternalDataService $data; - protected InternalDomainService $domain; protected \ilFavouritesManager $fav_manager; - /** - * @var ?int[] - */ - protected static ?array $user_object_ref_ids = null; public function __construct( - InternalDataService $data, - InternalRepoService $repo, - InternalDomainService $domain + protected InternalDataService $data, + protected InternalRepoService $repo, + protected InternalDomainService $domain ) { $this->session_repo = $repo->dashboard(); - $this->data = $data; - $this->domain = $domain; $this->fav_manager = new \ilFavouritesManager(); } @@ -118,107 +110,19 @@ public function getPeriodOptions(): array */ public function getContextOptions(): array { - $lng = $this->domain->lng(); - $user = $this->domain->user(); - $period = $this->getDashboardNewsPeriod(); - - $cnt = []; - \ilNewsItem::_getNewsItemsOfUser( - $user->getId(), - false, - true, - $period, - $cnt + $context_count = $this->repo->news()->countByContextsBatch( + $this->domain->resolver()->getAccessibleContexts( + $this->domain->user(), + new NewsCriteria(period: $this->getDashboardNewsPeriod(), only_public: false) + ) ); - $ref_ids = $this->getUserNewsObjectRefIds(); - - // related objects (contexts) of news - $contexts[0] = $lng->txt("news_all_items"); - - $conts = []; - foreach ($ref_ids as $ref_id) { - $obj_id = \ilObject::_lookupObjId($ref_id); - $title = \ilObject::_lookupTitle($obj_id); - $conts[$ref_id] = $title; - } - - asort($conts); - foreach ($conts as $ref_id => $title) { - $contexts[$ref_id] = $title . " (" . (int) ($cnt[$ref_id] ?? 0) . ")"; - } - - return $contexts; - } - - /** - * User news on the daashboard/news overview are presented for - * all favourites and all memberships of the user. - * @return int[] - */ - protected function getUserNewsObjectRefIds(): array - { - if (is_null(self::$user_object_ref_ids)) { - $ref_ids = []; - $user = $this->domain->user(); - $user_id = $user->getId(); - - // get all items of the personal desktop - $fav_items = $this->fav_manager->getFavouritesOfUser($user_id); - foreach ($fav_items as $item) { - if (!in_array($item["ref_id"], $ref_ids)) { - $ref_ids[] = (int) $item["ref_id"]; - } - } - - // get all memberships - $crs_mbs = \ilParticipants::_getMembershipByType($user_id, ['crs']); - $grp_mbs = \ilParticipants::_getMembershipByType($user_id, ['grp']); - $items = array_merge($crs_mbs, $grp_mbs); - foreach ($items as $i) { - $item_references = \ilObject::_getAllReferences($i); - $ref_ids = array_unique(array_merge($ref_ids, $item_references)); - } - self::$user_object_ref_ids = $ref_ids; + $options = []; + foreach ($context_count as [$context, $count]) { + $options[$context->getRefId()] = \ilObject::_lookupTitle($context->getObjId()) . " ({$count})"; } - return self::$user_object_ref_ids; - } + asort($options); - protected function getNewsForOverview( - int $ref_id, - int $period, - bool $include_auto_entries, - int $items_per_load - ): array { - $user = $this->domain->user(); - $news_item = new \ilNewsItem(); - //$news_item->setContextObjId($this->ctrl->getContextObjId()); - //$news_item->setContextObjType($this->ctrl->getContextObjType()); - - if ($ref_id > 0) { - $news_data = $news_item->getNewsForRefId( - $ref_id, - false, - false, - $period, - true, - false, - !$include_auto_entries, - false, - null, - $items_per_load - ); - } else { - $cnt = []; - $news_data = \ilNewsItem::_getNewsItemsOfUser( - $user->getId(), - false, - true, - $period, - $cnt, - !$include_auto_entries - ); - } - return $news_data; + return [0 => $this->domain->lng()->txt('news_all_items')] + $options; } } diff --git a/components/ILIAS/News/Service/class.InternalDataService.php b/components/ILIAS/News/Service/class.InternalDataService.php index 306968008495..be7a88275f6d 100755 --- a/components/ILIAS/News/Service/class.InternalDataService.php +++ b/components/ILIAS/News/Service/class.InternalDataService.php @@ -20,14 +20,16 @@ namespace ILIAS\News; +use ILIAS\News\Data\Factory; + /** * Repository internal data service * @author Alexander Killing */ class InternalDataService { - public function __construct() + public function factory(): Factory { - //$this->..._factory = new ...\DataFactory(); + return new Factory(); } } diff --git a/components/ILIAS/News/Service/class.InternalDomainService.php b/components/ILIAS/News/Service/class.InternalDomainService.php index a2af13d0fa28..e9e537f86e12 100755 --- a/components/ILIAS/News/Service/class.InternalDomainService.php +++ b/components/ILIAS/News/Service/class.InternalDomainService.php @@ -21,6 +21,8 @@ namespace ILIAS\News; use ILIAS\DI\Container; +use ILIAS\News\Domain\NewsCollectionService; +use ILIAS\News\Domain\UserContextResolver; use ILIAS\Repository\GlobalDICDomainServices; use ILIAS\News\Dashboard\DashboardNewsManager; use ILIAS\News\Timeline\TimelineManager; @@ -32,19 +34,35 @@ class InternalDomainService { use GlobalDICDomainServices; - protected InternalRepoService $repo_service; - protected InternalDataService $data_service; - public function __construct( Container $DIC, - InternalRepoService $repo_service, - InternalDataService $data_service + protected InternalRepoService $repo_service, + protected InternalDataService $data_service ) { - $this->repo_service = $repo_service; - $this->data_service = $data_service; $this->initDomainServices($DIC); } + public function resolver(): UserContextResolver + { + return new UserContextResolver( + new \ilFavouritesDBRepository($this->DIC->database(), $this->repositoryTree()), + $this->access(), + $this->repositoryTree(), + $this->repo_service->cache() + ); + } + + public function collection(): NewsCollectionService + { + return new NewsCollectionService( + $this->repo_service->news(), + $this->repo_service->cache(), + $this->resolver(), + $this->objectDataCache(), + $this->DIC->rbac()->system() + ); + } + public function dashboard(): DashboardNewsManager { return new DashboardNewsManager( diff --git a/components/ILIAS/News/Service/class.InternalRepoService.php b/components/ILIAS/News/Service/class.InternalRepoService.php index 5421d0fb7b17..a0f2e82f39f5 100755 --- a/components/ILIAS/News/Service/class.InternalRepoService.php +++ b/components/ILIAS/News/Service/class.InternalRepoService.php @@ -21,6 +21,8 @@ namespace ILIAS\News; use ILIAS\News\Dashboard\DashboardSessionRepository; +use ILIAS\News\Persistence\NewsCache; +use ILIAS\News\Persistence\NewsRepository; /** * Notes internal repo service @@ -28,18 +30,25 @@ */ class InternalRepoService { - protected InternalDataService $data; - protected \ilDBInterface $db; + protected NewsCache $cache; - public function __construct(InternalDataService $data, \ilDBInterface $db) + public function __construct(protected InternalDataService $data, protected \ilDBInterface $db) { - $this->data = $data; - $this->db = $db; + $this->cache = new NewsCache(); + } + + public function cache(): NewsCache + { + return $this->cache; + } + + public function news(): NewsRepository + { + return new NewsRepository($this->db, $this->data->factory()); } public function dashboard(): DashboardSessionRepository { - return new DashboardSessionRepository( - ); + return new DashboardSessionRepository(); } } diff --git a/components/ILIAS/News/Timeline/class.TimelineManager.php b/components/ILIAS/News/Timeline/class.TimelineManager.php index 8802a7c88a93..376332f799e0 100755 --- a/components/ILIAS/News/Timeline/class.TimelineManager.php +++ b/components/ILIAS/News/Timeline/class.TimelineManager.php @@ -20,6 +20,9 @@ namespace ILIAS\News\Timeline; +use ILIAS\News\Data\NewsCollection; +use ILIAS\News\Data\NewsCriteria; +use ILIAS\News\Data\NewsItem; use ILIAS\News\InternalRepoService; use ILIAS\News\InternalDataService; use ILIAS\News\InternalDomainService; @@ -29,17 +32,11 @@ */ class TimelineManager { - protected InternalRepoService $repo; - protected InternalDataService $data; - protected InternalDomainService $domain; - public function __construct( - InternalDataService $data, - InternalRepoService $repo, - InternalDomainService $domain + protected InternalDataService $data, + protected InternalRepoService $repo, + protected InternalDomainService $domain ) { - $this->data = $data; - $this->domain = $domain; } public function getNewsData( @@ -50,39 +47,33 @@ public function getNewsData( bool $include_auto_entries, int $items_per_load, array $excluded - ): array { - $user = $this->domain->user(); - $news_item = new \ilNewsItem(); - $news_item->setContextObjId($context_obj_id); - $news_item->setContextObjType($context_type); + ): NewsCollection { + $criteria = new NewsCriteria( + period: $period, + limit: $items_per_load, + no_auto_generated: !$include_auto_entries, + excluded_news_ids: $excluded, + read_user_id: $this->domain->user()->getId() + ); if ($ref_id > 0) { - $news_data = $news_item->getNewsForRefId( + return $this->domain->collection()->getNewsForContainer( $ref_id, - false, - false, - $period, - true, - false, - !$include_auto_entries, - false, - null, - $items_per_load, - $excluded + $context_obj_id, + $context_type, + $criteria, + $this->domain->user()->getId() ); } else { - $cnt = []; - $news_data = \ilNewsItem::_getNewsItemsOfUser( - $user->getId(), - false, - true, - $period, - $cnt, - !$include_auto_entries, - $excluded, - $items_per_load + return $this->domain->collection()->getNewsForUser( + $this->domain->user(), + $criteria ); } - return $news_data; + } + + public function getNewsItem(int $news_id): ?NewsItem + { + return $this->repo->news()->findById($news_id); } } diff --git a/components/ILIAS/News/classes/Setup/class.ilNewsDBUpdateSteps.php b/components/ILIAS/News/classes/Setup/class.ilNewsDBUpdateSteps.php new file mode 100644 index 000000000000..a6574d277d96 --- /dev/null +++ b/components/ILIAS/News/classes/Setup/class.ilNewsDBUpdateSteps.php @@ -0,0 +1,36 @@ +db = $db; + } + + public function step_1(): void + { + if (!$this->db->indexExistsByFields('il_news_item', ['context_obj_type'])) { + $this->db->addIndex('il_news_item', ['context_obj_type'], 'i3'); + } + } +} diff --git a/components/ILIAS/Notifications/UserSettings/Settings.php b/components/ILIAS/News/classes/Setup/class.ilNewsSetupAgent.php similarity index 62% rename from components/ILIAS/Notifications/UserSettings/Settings.php rename to components/ILIAS/News/classes/Setup/class.ilNewsSetupAgent.php index df6b2230e946..04bb4f9183e7 100644 --- a/components/ILIAS/Notifications/UserSettings/Settings.php +++ b/components/ILIAS/News/classes/Setup/class.ilNewsSetupAgent.php @@ -18,16 +18,16 @@ declare(strict_types=1); -namespace ILIAS\Notifications\UserSettings; +use ILIAS\Setup\Agent\HasNoNamedObjective; +use ILIAS\Setup\Agent\NullAgent; +use ILIAS\Setup\Objective; -use ILIAS\User\Settings\UserSettings; - -class Settings implements UserSettings +class ilNewsSetupAgent extends NullAgent { - public function getSettingConfigurations(): array + use HasNoNamedObjective; + + public function getUpdateObjective(ILIAS\Setup\Config $config = null): Objective { - return [ - PushNotification::class - ]; + return new ilDatabaseUpdateStepsExecutedObjective(new ilNewsDBUpdateSteps()); } } diff --git a/components/ILIAS/News/classes/class.ilNewsCache.php b/components/ILIAS/News/classes/class.ilNewsCache.php index 68987003615b..7aa7d74ed91b 100755 --- a/components/ILIAS/News/classes/class.ilNewsCache.php +++ b/components/ILIAS/News/classes/class.ilNewsCache.php @@ -20,6 +20,8 @@ * News cache * * @author Alexander Killing + * + * @deprecated Use \ILIAS\News\Persistence\NewsCache instead */ class ilNewsCache extends ilCache { diff --git a/components/ILIAS/News/classes/class.ilNewsForContextBlockGUI.php b/components/ILIAS/News/classes/class.ilNewsForContextBlockGUI.php index d738732e0ef1..d172f046c15a 100755 --- a/components/ILIAS/News/classes/class.ilNewsForContextBlockGUI.php +++ b/components/ILIAS/News/classes/class.ilNewsForContextBlockGUI.php @@ -16,8 +16,13 @@ * *********************************************************************/ -use ILIAS\News\StandardGUIRequest; use ILIAS\News\Access\NewsAccess; +use ILIAS\News\Data\NewsCollection; +use ILIAS\News\Data\NewsCriteria; +use ILIAS\News\Data\NewsItem; +use ILIAS\News\InternalDomainService; +use ILIAS\News\InternalGUIService; +use ILIAS\News\StandardGUIRequest; /** * BlockGUI class for block NewsForContext @@ -32,11 +37,9 @@ class ilNewsForContextBlockGUI extends ilBlockGUI * object type names with settings->news settings subtab */ public const OBJECTS_WITH_NEWS_SUBTAB = ["category", "course", "group", "forum"]; - protected \ILIAS\News\InternalGUIService $gui; + public static string $block_type = "news"; protected NewsAccess $news_access; - protected bool $cache_hit = false; protected bool $dynamic = false; - protected ilNewsCache $acache; protected bool $show_view_selection; /** @@ -47,118 +50,166 @@ class ilNewsForContextBlockGUI extends ilBlockGUI protected ilHelpGUI $help; protected ilSetting $settings; protected ilTabsGUI $tabs; - public static string $block_type = "news"; - public static array $st_data; - protected ilObjectDefinition $obj_definition; + protected StandardGUIRequest $std_request; + protected InternalDomainService $domain; + protected InternalGUIService $gui; + + protected bool $prevent_initial_loading = false; + protected NewsCollection $collection; public function __construct() { global $DIC; - $this->ctrl = $DIC->ctrl(); - $this->lng = $DIC->language(); - $this->user = $DIC->user(); + + parent::__construct(); + $this->help = $DIC["ilHelp"]; - $this->access = $DIC->access(); $this->settings = $DIC->settings(); $this->tabs = $DIC->tabs(); - $this->obj_definition = $DIC["objDefinition"]; - $this->std_request = $DIC->news() - ->internal() - ->gui() - ->standardRequest(); + $locator = $DIC->news()->internal(); + $this->std_request = $locator->gui()->standardRequest(); + $this->domain = $locator->domain(); + $this->gui = $locator->gui(); $this->news_access = new NewsAccess($this->std_request->getRefId()); - $ilCtrl = $DIC->ctrl(); - $lng = $DIC->language(); - $ilUser = $DIC->user(); - $ilHelp = $DIC["ilHelp"]; - - parent::__construct(); - - $lng->loadLanguageModule("news"); - $ilHelp->addHelpSection("news_block"); + $this->lng->loadLanguageModule("news"); + $DIC->help()->addHelpSection("news_block"); - $this->setBlockId((string) $ilCtrl->getContextObjId()); + $this->setBlockId((string) $this->ctrl->getContextObjId()); $this->setLimit(5); $this->setEnableNumInfo(true); - $this->dynamic = false; - $this->acache = new ilNewsCache(); - $cres = unserialize( - (string) $this->acache->getEntry($ilUser->getId() . ":" . $this->std_request->getRefId()), - ["allowed_classes" => false] - ); - $this->cache_hit = false; - - if ($this->acache->getLastAccessStatus() === "hit" && is_array($cres)) { - self::$st_data = ilNewsItem::prepareNewsDataFromCache($cres); - $this->cache_hit = true; - } - if (!empty(self::$st_data)) { - $data = self::$st_data; - } else { - $data = $this->getNewsData(); - self::$st_data = $data; + if (!$this->prevent_initial_loading) { + $this->loadNewsData(); } - $this->setTitle($lng->txt("news_internal_news")); + $this->setTitle($this->lng->txt("news_internal_news")); $this->setRowTemplate("tpl.block_row_news_for_context.html", "components/ILIAS/News"); - $this->setData($data); $this->allow_moving = false; $this->handleView(); $this->setPresentation(self::PRES_SEC_LIST); - $this->gui = $DIC->news()->internal()->gui(); } - public function getNewsData(): array + private function loadNewsData(): void { - $ilCtrl = $this->ctrl; - $ilUser = $this->user; - - $this->acache = new ilNewsCache(); - /* $cres = $this->acache->getEntry($ilUser->getId().":".$_GET["ref_id"]); - if ($this->acache->getLastAccessStatus() == "hit" && false) - { - $news_data = unserialize($cres); - } - else - {*/ - $news_item = new ilNewsItem(); - $news_item->setContextObjId($ilCtrl->getContextObjId()); - $news_item->setContextObjType($ilCtrl->getContextObjType()); - - // workaround, better: reduce constructor and introduce - //$prevent_aggregation = $this->getProperty("prevent_aggregation"); - $prevent_aggregation = true; - if ($ilCtrl->getContextObjType() !== "frm") { - $forum_grouping = true; - } else { - $forum_grouping = false; + if ($this->std_request->getRefId() === 0) { + $this->initData(new NewsCollection()); + return; } - - $news_data = $news_item->getNewsForRefId( + $collection = $this->domain->collection()->getNewsForContainer( $this->std_request->getRefId(), - false, - false, - 0, - $prevent_aggregation, - $forum_grouping + $this->ctrl->getContextObjId(), + $this->ctrl->getContextObjType(), + new NewsCriteria(read_user_id: $this->user->getId()), + $this->user->getId(), + true ); - $this->acache->storeEntry( - $ilUser->getId() . ":" . $this->std_request->getRefId(), - serialize($news_data) + if ($this->ctrl->getContextObjType() !== 'frm') { + $collection = $collection->groupForums(true); + } + $this->initData($collection->groupFiles()); + } + + protected function initData(NewsCollection $collection): void + { + $this->collection = $collection; + $this->data = $collection->pluck('id', true); + } + + /** + * Method will be called before rendering the block. It lazily loads the required news items. + */ + protected function preloadData(array $data): void + { + parent::preloadData($data); + $this->collection->load(array_column($data, 0)); + } + + protected function getListItemForData(array $data): ?\ILIAS\UI\Component\Item\Item + { + try { + $info = $this->getNewsForId($data[0]); + } catch (\Exception $e) { + $this->logger->error($e->getMessage()); + return $this->ui->factory()->item()->standard($this->lng->txt('news_not_available')) + ->withDescription($this->lng->txt('news_sorry_not_accessible_anymore')); + } + + + $props = [ + $this->lng->txt('date') => $info['creation_date'] ?? '' + ]; + + $item = $this->ui->factory()->item()->standard( + $this->ui->factory()->link()->standard($info['news_title'] ?? '', $info['url'] ?? '') + )->withProperties($props); + + if ($info['ref_id'] > 0) { + $item = $item->withDescription($info['type_txt'] . ': ' . $info['obj_title']); + } + return $item; + } + + private function getNewsForId(int $news_id): array + { + $item = $this->collection->getById($news_id); + if ($item === null) { + throw new \InvalidArgumentException("News item with id {$news_id} not found."); + } + + $grouping = $this->collection->getGroupingFor($item); + + $creation_date = new ilDateTime($item->getCreationDate()->format('c'), IL_CAL_DATETIME); + $title = ilStr::shortenWords( + ilNewsItem::determineNewsTitle( + $item->getContextObjType(), + $item->getTitle(), + $item->isContentIsLangVar(), + $grouping ? $grouping['agg_ref_id'] : 0, + $grouping ? $grouping['aggregation'] : [], + ) ); - // } - //var_dump($news_data); - return $news_data; + $info = [ + 'ref_id' => $item->getContextRefId(), + 'creation_date' => ilDatePresentation::formatDate($creation_date), + 'news_title' => $title, + ]; + + // title image type + if ($item->getContextRefId() > 0) { + $obj_id = $item->getContextObjId(); + $type = $item->getContextObjType(); + + $lang_type = in_array($type, ['sahs', 'lm', 'htlm']) ? 'lres' : 'obj_' . $type; + + $type_txt = ($this->obj_def->isPlugin($item->getContextObjType())) + ? ilObjectPlugin::lookupTxtById($item->getContextObjType(), $lang_type) + : $this->lng->txt($lang_type); + + $info['type_txt'] = $type_txt; + $info['type_icon'] = ilObject::_getIcon($obj_id, 'tiny', $type); + $info['obj_title'] = ilStr::shortenWords(ilObject::_lookupTitle($obj_id)); + $info['user_read'] = $this->collection->isReadByUser($this->user->getId(), $news_id); + + $this->ctrl->setParameter($this, 'news_context', $item->getContextRefId()); + } else { + $this->ctrl->setParameter($this, 'news_context', ''); + } + + $this->ctrl->setParameter($this, 'news_id', $item->getId()); + $info['url'] = $this->ctrl->getLinkTarget($this, 'showNews'); + $this->ctrl->clearParameters($this); + + return $info; } + public function getBlockType(): string { return self::$block_type; @@ -322,7 +373,9 @@ public function getHTML(): string */ public function handleView(): void { - $ilUser = $this->user; + // it seems like this method does not change any state, so it may be removed in the future + + /*$ilUser = $this->user; $this->view = (string) ilBlockSetting::_lookup( $this->getBlockType(), @@ -347,71 +400,7 @@ public function handleView(): void $this->show_view_selection = true; } elseif ($got_notices) { $this->view = ""; - } - } - - public function getInfoForData(array $news): array - { - $ilCtrl = $this->ctrl; - $lng = $this->lng; - $obj_definition = $this->obj_definition; - - $info = []; - - $info["ref_id"] = $news["ref_id"] ?? 0; - $info["creation_date"] = - ilDatePresentation::formatDate(new ilDateTime($news["creation_date"], IL_CAL_DATETIME)); - - // title image type - if (($news["ref_id"] ?? 0) > 0) { - if (isset($news["agg_ref_id"]) && $news["agg_ref_id"] > 0) { - $obj_id = ilObject::_lookupObjId($news["agg_ref_id"]); - $type = ilObject::_lookupType($obj_id); - $context_ref = $news["agg_ref_id"]; - } else { - $obj_id = $news["context_obj_id"]; - $type = $news["context_obj_type"]; - $context_ref = $news["ref_id"]; - } - - $lang_type = in_array($type, ["sahs", "lm", "htlm"]) - ? "lres" - : "obj_" . $type; - - $type_txt = ($obj_definition->isPlugin($news["context_obj_type"])) - ? ilObjectPlugin::lookupTxtById($news["context_obj_type"], $lang_type) - : $lng->txt($lang_type); - - - $info["type_txt"] = $type_txt; - $info["type_icon"] = ilObject::_getIcon($obj_id, "tiny", $type); - $info["obj_title"] = ilStr::shortenWords(ilObject::_lookupTitle($obj_id)); - $info["user_read"] = $news["user_read"]; - - $ilCtrl->setParameter($this, "news_context", $context_ref); - } else { - $ilCtrl->setParameter($this, "news_context", ""); - } - - // title - $info["news_title"] = - ilStr::shortenWords( - ilNewsItem::determineNewsTitle( - $news["context_obj_type"] ?? "", - $news["title"] ?? "", - $news["content_is_lang_var"] ?? false, - $news["agg_ref_id"] ?? 0, - $news["aggregation"] ?? [] - ) - ); - - - $ilCtrl->setParameter($this, "news_id", $news["id"]); - $info["url"] = - $ilCtrl->getLinkTarget($this, "showNews"); - $ilCtrl->clearParameters($this); - - return $info; + }*/ } public function getOverview(): string @@ -423,157 +412,58 @@ public function getOverview(): string public function showNews(): string { - $lng = $this->lng; - $ilCtrl = $this->ctrl; - $ilUser = $this->user; - $ilAccess = $this->access; - - // workaround for dynamic mode (if cache is disabled, showNews has no data) - if (empty(self::$st_data)) { - $this->setData($this->getNewsData()); - } - - $news_set = new ilSetting("news"); - $enable_internal_rss = $news_set->get("enable_rss_for_internal"); - + $ui_renderer = $this->ui->renderer(); + $ui_factory = $this->ui->factory(); $tpl = new ilTemplate("tpl.show_news.html", true, true, "components/ILIAS/News"); - - // get current item in data set - $previous = ""; - reset($this->data); - $c = current($this->data); - $curr_cnt = 1; + $setting = new ilSetting("news"); + $enable_internal_rss = $setting->get("enable_rss_for_internal"); if ($this->std_request->getNewsId() > 0) { - $news = new ilNewsItem($this->std_request->getNewsId()); - $news_context = $this->std_request->getNewsContext(); - while ($c["id"] > 0 && (int) $c["id"] !== $this->std_request->getNewsId()) { - $previous = $c; - $c = next($this->data); - $curr_cnt++; - } + $current_item = $this->collection->getById($this->std_request->getNewsId()); + $news_context = (int) $this->std_request->getNewsContext(); } else { - $news_page = $this->std_request->getNewsPage(); - $news_context = 0; - while ($curr_cnt - 1 < $news_page) { - $previous = $c; - $c = next($this->data); - if ($curr_cnt - 1 === $news_page) { - } - $curr_cnt++; - } - $news = new ilNewsItem($c["id"] ?? 0); - if (($c["ref_id"] ?? 0) > 0) { - $news_context = (int) $c["ref_id"]; - } + $current_item = $this->collection->pick($this->std_request->getNewsPage()); + $news_context = $current_item->getContextRefId(); } - - if (!is_array($c) && is_object($news) && $news->getId() > 0 - && ilNewsItem::_lookupContextObjId($news->getId()) !== $ilCtrl->getContextObjId()) { - throw new ilException("News ID does not match object context."); + if ($current_item === null) { + return ''; } - - // collect news items to show - $news_list = []; - if (isset($c["aggregation"]) && is_array($c["aggregation"])) { // we have an aggregation - $news_list[] = [ - "ref_id" => $c["agg_ref_id"], - "agg_ref_id" => $c["agg_ref_id"], - "aggregation" => $c["aggregation"], - "user_id" => "", - "content_type" => "text", - "mob_id" => 0, - "visibility" => "", - "content" => "", - "content_long" => "", - "update_date" => $news->getUpdateDate(), - "creation_date" => "", - "content_is_lang_var" => false, - "loc_context" => $news_context, - "context_obj_type" => $news->getContextObjType(), - "title" => "" - ]; - - foreach ($c["aggregation"] as $c_item) { - ilNewsItem::_setRead($ilUser->getId(), $c_item["id"]); - $c_item["loc_context"] = $c_item["ref_id"]; - $c_item["loc_stop"] = $news_context; - $news_list[] = $c_item; - } - } else { // no aggregation, simple news item - $news_list[] = [ - "id" => $news->getId(), - "ref_id" => $news_context, - "user_id" => $news->getUserId(), - "content_type" => $news->getContentType(), - "mob_id" => $news->getMobId(), - "visibility" => $news->getVisibility(), - "priority" => $news->getPriority(), - "content" => $news->getContent(), - "content_long" => $news->getContentLong(), - "update_date" => $news->getUpdateDate(), - "creation_date" => $news->getCreationDate(), - "context_sub_obj_type" => $news->getContextSubObjType(), - "context_obj_type" => $news->getContextObjType(), - "context_sub_obj_id" => $news->getContextSubObjId(), - "content_is_lang_var" => $news->getContentIsLangVar(), - "content_text_is_lang_var" => $news->getContentTextIsLangVar(), - "loc_context" => $news_context, - "title" => $news->getTitle() - ]; - ilNewsItem::_setRead($ilUser->getId(), $this->std_request->getNewsId()); + if ($grouping = $this->collection->getGroupingFor($current_item)) { + $news_list = $grouping['aggregation']; + } else { + $news_list = [$current_item]; } - $row_css = ""; - $cache_deleted = false; - foreach ($news_list as $item) { - $row_css = ($row_css !== "tblrow1") - ? "tblrow1" - : "tblrow2"; + for ($i = 0; $i < count($news_list); $i++) { + /** @var NewsItem $item */ + $item = $news_list[$i]; + $item = $item->withContextRefId($news_context); - if ($item["ref_id"] > 0 && !$ilAccess->checkAccess("read", "", $item["ref_id"])) { - $tpl->setCurrentBlock("content"); - $tpl->setVariable("VAL_CONTENT", $lng->txt("news_sorry_not_accessible_anymore")); - $tpl->parseCurrentBlock(); - $tpl->setCurrentBlock("item"); - $tpl->setVariable("ITEM_ROW_CSS", $row_css); - $tpl->parseCurrentBlock(); - if (!$cache_deleted) { - $this->acache->deleteEntry($ilUser->getId() . ":" . $this->std_request->getRefId()); - $cache_deleted = true; - } - continue; - } + ilNewsItem::_setRead($this->user->getId(), $this->std_request->getNewsId()); - // user - if ($item["user_id"] > 0 && - \ilObjUser::userExists([$item["user_id"]]) - ) { - // get login - if (ilObjUser::_exists($item["user_id"])) { - $user = new ilObjUser($item["user_id"]); - $displayname = $user->getLogin(); - } else { - // this should actually not happen, since news entries - // should be deleted when the user is going to be removed - $displayname = "<" . strtolower($lng->txt("deleted")) . ">"; - } + $is_grouped_item = $i > 0; + $legacy_news = $item->toLegacy(); - $tpl->setCurrentBlock("user_info"); - $tpl->setVariable("VAL_AUTHOR", $displayname); - $tpl->setVariable("TXT_AUTHOR", $lng->txt("author")); - $tpl->parseCurrentBlock(); + // author + if (\ilObjUser::userExists([$item->getUserId()])) { + $user = new ilObjUser($item->getUserId()); + $display_name = $user->getLogin(); + } else { + // this should actually not happen, since news entries + // should be deleted when the user is going to be removed + $display_name = "<" . strtolower($this->lng->txt("deleted")) . ">"; } + $tpl->setCurrentBlock("user_info"); + $tpl->setVariable("VAL_AUTHOR", $display_name); + $tpl->setVariable("TXT_AUTHOR", $this->lng->txt("author")); + $tpl->parseCurrentBlock(); // media player - $ui_renderer = $this->ui->renderer(); - $ui_factory = $this->ui->factory(); - - if ($item["mob_id"] > 0 && ilObject::_exists((int) $item["mob_id"])) { - $media_path = $this->getMediaPath((int) $item["mob_id"]); + if ($item->getMobId() > 0 && ilObject::_exists($item->getMobId())) { + $media_path = $this->getMediaPath($item->getMobId()); $mime = ilObjMediaObject::getMimeType($media_path); if (in_array($mime, ["image/jpeg", "image/svg+xml", "image/gif", "image/png"])) { $title = basename($media_path); @@ -585,7 +475,7 @@ public function showNews(): string $audio = $ui_factory->player()->audio($media_path); $html = $ui_renderer->render($audio); } elseif (in_array($mime, ["application/pdf"])) { - $this->ctrl->setParameter($this, "news_id", $item["id"]); + $this->ctrl->setParameter($this, "news_id", $item->getId()); $link = $ui_factory->link()->standard( basename($media_path), $this->ctrl->getLinkTarget($this, "downloadMob") @@ -597,78 +487,70 @@ public function showNews(): string $html = $mime; } - $tpl->setCurrentBlock("player"); - $tpl->setVariable( - "PLAYER", - $html - ); + $tpl->setVariable("PLAYER", $html); $tpl->parseCurrentBlock(); } // access - if ($enable_internal_rss && $item["visibility"] != "") { - $obj_id = ilObject::_lookupObjId($item["ref_id"]); + if ($enable_internal_rss && $item->getVisibility() !== '') { $tpl->setCurrentBlock("access"); - $tpl->setVariable("TXT_ACCESS", $lng->txt("news_news_item_visibility")); - if ($item["visibility"] === NEWS_PUBLIC || - ((int) $item["priority"] === 0 && - ilBlockSetting::_lookup( - "news", - "public_notifications", - 0, - $obj_id - ))) { - $tpl->setVariable("VAL_ACCESS", $lng->txt("news_visibility_public")); + $tpl->setVariable("TXT_ACCESS", $this->lng->txt("news_news_item_visibility")); + if ($item->getVisibility() === NEWS_PUBLIC || + ($item->getPriority() === 0 && + ilBlockSetting::_lookup( + "news", + "public_notifications", + 0, + $item->getContextObjId() + ))) { + $tpl->setVariable("VAL_ACCESS", $this->lng->txt("news_visibility_public")); } else { - $tpl->setVariable("VAL_ACCESS", $lng->txt("news_visibility_users")); + $tpl->setVariable("VAL_ACCESS", $this->lng->txt("news_visibility_users")); } $tpl->parseCurrentBlock(); } // content - $renderer = ilNewsRendererFactory::getRenderer($item["context_obj_type"]); - if (trim($item["content"]) != "") { // content - $it = new ilNewsItem($item["id"]); - $renderer->setNewsItem($it, $item["ref_id"]); + $renderer = ilNewsRendererFactory::getRenderer($item->getContextObjType()); + if (trim($item->getContent()) !== '') { + $renderer->setNewsItem($legacy_news, $item->getContextRefId()); $tpl->setCurrentBlock("content"); $tpl->setVariable("VAL_CONTENT", $renderer->getDetailContent()); $tpl->parseCurrentBlock(); } - if ($item["update_date"] != $item["creation_date"]) { // update date + + // update date + if ($item->getUpdateDate() !== $item->getCreationDate()) { $tpl->setCurrentBlock("ni_update"); - $tpl->setVariable("TXT_LAST_UPDATE", $lng->txt("last_update")); + $tpl->setVariable("TXT_LAST_UPDATE", $this->lng->txt("last_update")); $tpl->setVariable( "VAL_LAST_UPDATE", - ilDatePresentation::formatDate(new ilDateTime($item["update_date"], IL_CAL_DATETIME)) + ilDatePresentation::formatDate(new ilDateTime($legacy_news->getUpdateDate(), IL_CAL_DATETIME)) ); $tpl->parseCurrentBlock(); } // creation date - if ($item["creation_date"] != "") { + if ($item->getCreationDate()->getTimestamp() !== 0) { $tpl->setCurrentBlock("ni_update"); $tpl->setVariable( "VAL_CREATION_DATE", - ilDatePresentation::formatDate(new ilDateTime($item["creation_date"], IL_CAL_DATETIME)) + ilDatePresentation::formatDate(new ilDateTime($legacy_news->getCreationDate(), IL_CAL_DATETIME)) ); - $tpl->setVariable("TXT_CREATED", $lng->txt("created")); + $tpl->setVariable("TXT_CREATED", $this->lng->txt("created")); $tpl->parseCurrentBlock(); } - // context / title if ($news_context > 0) { - //$obj_id = ilObject::_lookupObjId($_GET["news_context"]); - $obj_id = ilObject::_lookupObjId($item["ref_id"]); - $obj_type = ilObject::_lookupType($obj_id); - $obj_title = ilObject::_lookupTitle($obj_id); + $obj_title = ilObject::_lookupTitle($item->getContextObjId()); // file hack, not nice - if ($obj_type === "file") { - $ilCtrl->setParameterByClass(ilRepositoryGUI::class, "ref_id", $item["ref_id"]); - $url = $ilCtrl->getLinkTargetByClass(ilRepositoryGUI::class, "sendfile"); - $ilCtrl->setParameterByClass(ilRepositoryGUI::class, "ref_id", $this->std_request->getRefId()); + if ($item->getContextObjType() === "file") { + $this->ctrl->setParameterByClass(ilRepositoryGUI::class, "ref_id", $item->getContextRefId()); + $url = $this->ctrl->getLinkTargetByClass(ilRepositoryGUI::class, "sendfile"); + $this->ctrl->setParameterByClass(ilRepositoryGUI::class, "ref_id", $this->std_request->getRefId()); $button = $this->gui->button( $this->lng->txt("download"), @@ -682,9 +564,11 @@ public function showNews(): string // forum hack, not nice $add = ""; - if ($obj_type === "frm" && ($item["context_sub_obj_type"] ?? "") === "pos" - && $item["context_sub_obj_id"] > 0) { - $pos = $item["context_sub_obj_id"]; + if ($item->getContextObjType() === "frm" && + $item->getContextSubObjType() === "pos" && + $item->getContextSubObjId() > 0 + ) { + $pos = $item->getContextSubObjId(); $thread = ilObjForumAccess::_getThreadForPosting($pos); if ($thread > 0) { $add = "_" . $thread . "_" . $pos; @@ -692,54 +576,59 @@ public function showNews(): string } // wiki hack, not nice - if ($obj_type === "wiki" && $item["context_sub_obj_type"] === "wpg" - && $item["context_sub_obj_id"] > 0) { - $wptitle = ilWikiPage::lookupTitle($item["context_sub_obj_id"]); + if ($item->getContextObjType() === "wiki" && + $item->getContextSubObjType() === "wpg" && + $item->getContextSubObjId() > 0 + ) { + $wptitle = ilWikiPage::lookupTitle($item->getContextSubObjId()); if ($wptitle != "") { $add = "_" . ilWikiUtil::makeUrlTitle($wptitle); } } $url_target = "./goto.php?client_id=" . rawurlencode(CLIENT_ID) . "&target=" . - $obj_type . "_" . $item["ref_id"] . $add; + $item->getContextObjType() . "_" . $item->getContextRefId() . $add; // lm page hack, not nice - if ( - ($item["context_sub_obj_type"] ?? "") === "pg" && - $item["context_sub_obj_id"] > 0 && - in_array($obj_type, ["lm"], true)) { + if ($item->getContextObjType() === "lm" && + $item->getContextSubObjType() === "pg" && + $item->getContextSubObjId() > 0 + ) { $url_target = "./goto.php?client_id=" . rawurlencode(CLIENT_ID) . "&target=" . - "pg_" . $item["context_sub_obj_id"] . "_" . $item["ref_id"]; + "pg_" . $item->getContextSubObjId() . "_" . $item->getContextRefId(); } // blog posting hack, not nice - if ($obj_type === "blog" && ($item["context_sub_obj_type"] ?? "") === "blp" - && $item["context_sub_obj_id"] > 0) { + if ($item->getContextObjType() === "blog" && + $item->getContextSubObjType() === "blp" && + $item->getContextSubObjId() > 0 + ) { $url_target = "./goto.php?client_id=" . rawurlencode(CLIENT_ID) . "&target=" . - "blog_" . $item["ref_id"] . "_" . $item["context_sub_obj_id"]; + "blog_" . $item->getContextRefId() . "_" . $item->getContextSubObjId(); } $context_opened = false; - $loc_stop = $item["loc_stop"] ?? ""; - if ($item["loc_context"] != null && - $item["loc_context"] != $loc_stop - ) { + $loc_context = $is_grouped_item ? $current_item->getContextRefId() : $news_context; + $loc_stop = $is_grouped_item ? $news_context : null; + if ($loc_context !== 0 && $loc_context !== $loc_stop) { $tpl->setCurrentBlock("context"); $context_opened = true; $cont_loc = new ilLocatorGUI(); - $cont_loc->addContextItems($item["loc_context"], true, (int) $loc_stop); + $cont_loc->addContextItems($loc_context, true, (int) $loc_stop); $tpl->setVariable("CONTEXT_LOCATOR", $cont_loc->getHTML()); } - //var_dump($item); - $no_context_title = $item["no_context_title"] ?? false; + $no_context_title = $grouping['no_context_title'] ?? false; if ($no_context_title !== true) { if (!$context_opened) { $tpl->setCurrentBlock("context"); } $tpl->setVariable("HREF_CONTEXT_TITLE", $url_target); $tpl->setVariable("CONTEXT_TITLE", $obj_title); - $tpl->setVariable("IMG_CONTEXT_TITLE", ilObject::_getIcon($obj_id, "big", $obj_type)); + $tpl->setVariable( + "IMG_CONTEXT_TITLE", + ilObject::_getIcon($item->getContextObjId(), "big", $item->getContextObjType()) + ); } if ($context_opened) { $tpl->parseCurrentBlock(); @@ -752,39 +641,32 @@ public function showNews(): string $tpl->setVariable( "VAL_TITLE", ilNewsItem::determineNewsTitle( - $item["context_obj_type"] ?? "", - $item["title"] ?? "", - $item["content_is_lang_var"] ?? false, - $item["agg_ref_id"] ?? 0, - $item["aggregation"] ?? [] + $item->getContextObjType(), + $item->getTitle(), + $item->isContentIsLangVar(), + (!$is_grouped_item && $grouping) ? $grouping['agg_ref_id'] : 0, + (!$is_grouped_item && $grouping) ? $grouping['aggregation'] : [], ) ); - $tpl->setCurrentBlock("item"); - $tpl->setVariable("ITEM_ROW_CSS", $row_css); + $tpl->setVariable("ITEM_ROW_CSS", $i % 2 === 0 ? "tblrow1" : "tblrow2"); $tpl->parseCurrentBlock(); } $content = $tpl->get(); - if ($this->getProperty("title") != "") { - $title = $this->getProperty("title"); - } else { - $title = $lng->txt("news_internal_news"); - } - $panel = $this->ui->factory()->panel()->standard($title, $this->ui->factory()->legacy()->content($content)); + $title = $this->getProperty('title') ?? $this->lng->txt("news_internal_news"); + $panel = $ui_factory->panel()->standard($title, $ui_factory->legacy()->content($content)); - $parameter_name = 'news_page'; - - $pagination = $this->ui->factory()->viewControl()->pagination() - ->withTargetURL($ilCtrl->getLinkTarget($this, "showNews"), "news_page") + $pagination = $ui_factory->viewControl()->pagination() + ->withTargetURL($this->ctrl->getLinkTarget($this, "showNews"), "news_page") ->withTotalEntries(count($this->getData())) ->withPageSize(1) ->withMaxPaginationButtons(10) - ->withCurrentPage($curr_cnt - 1); + ->withCurrentPage($this->collection->getPageFor($current_item->getId())); $panel = $panel->withViewControls([$pagination]); - return $this->ui->renderer()->render($panel); + return $ui_renderer->render($panel); } protected function getMediaPath(int $mob_id): string @@ -822,8 +704,7 @@ public function showNotifications(): void ); // reload data - $data = $this->getNewsData(); - $this->setData($data); + $this->loadNewsData(); $this->handleView(); if ($ilCtrl->isAsynch()) { @@ -847,8 +728,7 @@ public function hideNotifications(): void ); // reload data - $data = $this->getNewsData(); - $this->setData($data); + $this->loadNewsData(); $this->handleView(); if ($ilCtrl->isAsynch()) { @@ -1073,7 +953,6 @@ public function cancelSettings(): void public function saveSettings(): string { $ilCtrl = $this->ctrl; - $ilUser = $this->user; $this->initSettingsForm(); $form = $this->settings_form; @@ -1143,8 +1022,7 @@ public function saveSettings(): string } } - $cache = new ilNewsCache(); - $cache->deleteEntry($ilUser->getId() . ":" . $this->std_request->getRefId()); + $this->domain->collection()->invalidateCache($this->user->getId()); $ilCtrl->returnToParent($this); } else { @@ -1257,26 +1135,6 @@ public function enableJS(): void $this->send($this->getHTML()); } - protected function getListItemForData(array $data): ?\ILIAS\UI\Component\Item\Item - { - if ((int) ($data["id"] ?? 0) === 0) { - return null; - } - $info = $this->getInfoForData($data); - - $props = [ - $this->lng->txt("date") => $info["creation_date"] ?? "" - ]; - - $factory = $this->ui->factory(); - $item = $factory->item()->standard($factory->link()->standard($info["news_title"] ?? "", $info["url"] ?? "")) - ->withProperties($props); - if (($info["ref_id"] ?? 0) > 0) { - $item = $item->withDescription($info["type_txt"] . ": " . $info["obj_title"]); - } - return $item; - } - public function getNoItemFoundContent(): string { return $this->lng->txt("news_no_news_items"); diff --git a/components/ILIAS/News/classes/class.ilNewsItem.php b/components/ILIAS/News/classes/class.ilNewsItem.php index 5cf92c067290..717e7d657eb1 100755 --- a/components/ILIAS/News/classes/class.ilNewsItem.php +++ b/components/ILIAS/News/classes/class.ilNewsItem.php @@ -17,6 +17,7 @@ *********************************************************************/ use ILIAS\MediaObjects\MediaObjectManager; +use ILIAS\News\Data\NewsItem; const NEWS_NOTICE = 0; const NEWS_MESSAGE = 1; @@ -495,119 +496,14 @@ public function update(bool $a_as_new = false): void ]); } - - /** - * Get all news items for a user. - * @deprecated (will migrate to ilNewsData) - */ - public static function _getNewsItemsOfUser( - int $a_user_id, - bool $a_only_public = false, - bool $a_prevent_aggregation = false, - int $a_per = 0, - array &$a_cnt = [], - bool $no_auto_generated = false, - array $excluded = [], - int $a_limit = 0 - ): array { - global $DIC; - - $ilAccess = $DIC->access(); - $fav_rep = new ilFavouritesDBRepository(); - - $news_item = new ilNewsItem(); - - $per = $a_per; - - // this is currently not used - $ref_ids = []; - - if (ilObjUser::_lookupPref($a_user_id, "pd_items_news") !== "n") { - // get all items of the personal desktop - $pd_items = $fav_rep->getFavouritesOfUser($a_user_id); - foreach ($pd_items as $item) { - if (!in_array($item["ref_id"], $ref_ids)) { - $ref_ids[] = (int) $item["ref_id"]; - } - } - - // get all memberships - $crs_mbs = ilParticipants::_getMembershipByType($a_user_id, ['crs']); - $grp_mbs = ilParticipants::_getMembershipByType($a_user_id, ['grp']); - $items = array_merge($crs_mbs, $grp_mbs); - foreach ($items as $i) { - $item_references = ilObject::_getAllReferences($i); - if (is_array($item_references) && count($item_references)) { - foreach ($item_references as $ref_id) { - if (!in_array($ref_id, $ref_ids)) { - $ref_ids[] = $ref_id; - } - } - } - } - } - - $data = []; - - foreach ($ref_ids as $ref_id) { - if (!$a_only_public) { - // this loop should not cost too much performance - $acc = $ilAccess->checkAccessOfUser($a_user_id, "read", "", $ref_id); - - if (!$acc) { - continue; - } - } - if (self::getPrivateFeedId() > 0) { - global $DIC; - - $rbacsystem = $DIC->rbac()->system(); - $acc = $rbacsystem->checkAccessOfUser(self::getPrivateFeedId(), "read", $ref_id); - - if (!$acc) { - continue; - } - } - - $obj_id = ilObject::_lookupObjId($ref_id); - $obj_type = ilObject::_lookupType($obj_id); - $news = $news_item->getNewsForRefId( - $ref_id, - $a_only_public, - false, - $per, - $a_prevent_aggregation, - false, - $no_auto_generated, - false, - $a_user_id, - 0, - $excluded - ); - - // counter - if (!is_null($a_cnt)) { - $a_cnt[$ref_id] = count($news); - } - - $data = self::mergeNews($data, $news); - } - - $data = ilArrayUtil::sortArray($data, "creation_date", "desc", false, true); - - if ($a_limit > 0) { - array_splice($data, $a_limit); - } - return $data; - } - /** * Get News For Ref Id. * - * @deprecated (will migrate to ilNewsData) * @param string|int $a_time_period * @param int $a_limit currently only supported for groups and courses * @param int[] $a_excluded currently only supported for groups and courses (news ids) + * + * @deprecated Use \ILIAS\News\Domain\NewsCollectionService::getNewsForContext instead */ public function getNewsForRefId( int $a_ref_id, @@ -729,10 +625,11 @@ public function getNewsForRefId( /** * Get news aggregation (e.g. for courses, groups) - * @deprecated (will migrate to ilNewsData) * @param string|int $a_time_period + * + * @deprecated will be removed after migrating `getNewsForRefId` */ - public function getAggregatedNewsData( + protected function getAggregatedNewsData( int $a_ref_id, bool $a_only_public = false, $a_time_period = 0, @@ -837,7 +734,7 @@ public function getAggregatedNewsData( } /** - * @deprecated will move to ilNewsData + * @deprecated will be removed after migrating `getNewsForRefId` */ protected function aggregateForums( array $news, @@ -885,7 +782,7 @@ protected function aggregateForums( } /** - * @deprecated will move to ilNewsData + * @deprecated will be removed after migrating `getNewsForRefId` */ protected function aggregateFiles( array $news, @@ -917,7 +814,8 @@ protected function aggregateFiles( /** * Get news aggregation for child objects (e.g. for categories) - * @deprecated will move to ilNewsData + * + * @deprecated will be removed after migrating `getNewsForRefId` */ protected function getAggregatedChildNewsData( int $a_ref_id, @@ -1039,8 +937,9 @@ protected static function handleTimePeriod($a_time_period): string /** * Query news for a context - * @deprecated will move to ilNewsData * @param string|int $a_time_period + * + * @deprecated will be removed after migrating `getNewsForRefId` */ public function queryNewsForContext( bool $a_for_rss_use = false, @@ -1210,10 +1109,11 @@ public function checkNewsExistsForObjects( } /** - * @deprecated will move to ilNewsData * @param string|int $a_time_period + * + * @deprecated will be removed after migrating `getNewsForRefId` */ - public function queryNewsForMultipleContexts( + private function queryNewsForMultipleContexts( array $a_contexts, bool $a_for_rss_use = false, $a_time_period = 0, @@ -1659,7 +1559,8 @@ public static function determineNewsTitle( // files $up_cnt = $cr_cnt = 0; foreach ($a_aggregation as $item) { - if ($item["title"] === "file_updated") { + $title = $item instanceof NewsItem ? $item->getTitle() : $item['title']; + if ($title === 'file_updated') { $up_cnt++; } else { $cr_cnt++; @@ -1916,7 +1817,6 @@ public function deliverMobFile( $mob = $this->getMobId(); $mob = new ilObjMediaObject($mob); $mob_dir = ilObjMediaObject::_getDirectory($mob->getId()); - // check purpose if (!$mob->hasPurposeItem($a_purpose)) { return false; @@ -1976,33 +1876,4 @@ public function increasePlayCounter(): void " WHERE id = " . $ilDB->quote($this->getId(), "integer") ); } - - /** - * Prepare news data from cache - * @deprecated will move to data - */ - public static function prepareNewsDataFromCache(array $a_cres): array - { - global $DIC; - - $ilDB = $DIC->database(); - - $data = $a_cres; - $news_ids = array_keys($data); - $set = $ilDB->query("SELECT id FROM il_news_item " . - " WHERE " . $ilDB->in("id", $news_ids, false, "integer")); - $existing_ids = []; - while ($rec = $ilDB->fetchAssoc($set)) { - $existing_ids[] = (int) $rec["id"]; - } - //var_dump($existing_ids); - $existing_news = []; - foreach ($data as $k => $v) { - if (in_array($k, $existing_ids)) { - $existing_news[$k] = $v; - } - } - - return $existing_news; - } } diff --git a/components/ILIAS/News/classes/class.ilNewsRendererFactory.php b/components/ILIAS/News/classes/class.ilNewsRendererFactory.php index 3cfd4ae0400f..f703059c1e77 100755 --- a/components/ILIAS/News/classes/class.ilNewsRendererFactory.php +++ b/components/ILIAS/News/classes/class.ilNewsRendererFactory.php @@ -30,19 +30,10 @@ public static function getRenderer(string $a_context_obj_type): ilNewsRendererGU global $DIC; if (!isset(self::$renderer[$a_context_obj_type])) { - $obj_def = $DIC["objDefinition"]; + $class_name = $DIC['objDefinition']->getClassName($a_context_obj_type); + $class = "il{$class_name}NewsRendererGUI"; - $comp = $obj_def->getComponentForType($a_context_obj_type); - $class = $obj_def->getClassName($a_context_obj_type); - - $class = "il" . $class . "NewsRendererGUI"; - $type_renderer_path = "./" . $comp . "/classes/class." . $class . ".php"; - if (is_file($type_renderer_path)) { - $rend = new $class(); - } else { - $rend = new ilNewsDefaultRendererGUI(); - } - self::$renderer[$a_context_obj_type] = $rend; + self::$renderer[$a_context_obj_type] = class_exists($class) ? new $class() : new ilNewsDefaultRendererGUI(); } return self::$renderer[$a_context_obj_type]; diff --git a/components/ILIAS/News/classes/class.ilNewsTimelineGUI.php b/components/ILIAS/News/classes/class.ilNewsTimelineGUI.php index f6e993dcc122..aec8b675410b 100755 --- a/components/ILIAS/News/classes/class.ilNewsTimelineGUI.php +++ b/components/ILIAS/News/classes/class.ilNewsTimelineGUI.php @@ -16,6 +16,8 @@ * *********************************************************************/ +use ILIAS\News\Data\NewsCollection; +use ILIAS\News\Data\NewsItem; use ILIAS\News\StandardGUIRequest; use ILIAS\Filesystem\Stream\Streams; use ILIAS\HTTP\Response\Sender\ResponseSendingException; @@ -47,7 +49,7 @@ class ilNewsTimelineGUI protected bool $user_edit_all = false; protected StandardGUIRequest $std_request; protected bool $enable_add_news = true; - protected ?array $news_data = null; + protected NewsCollection $news_collection; protected function __construct( int $a_ref_id, @@ -136,31 +138,31 @@ public function executeCommand(): void switch ($next_class) { case "illikegui": - $i = new ilNewsItem($this->news_id); + $item = $this->manager->getNewsItem($this->news_id); $likef = new ilLikeFactoryGUI(); - $like_gui = $likef->widget([$i->getContextObjId()]); + $like_gui = $likef->widget([$item->getContextObjId()]); $ctrl->saveParameter($this, "news_id"); $like_gui->setObject( - $i->getContextObjId(), - $i->getContextObjType(), - $i->getContextSubObjId(), - $i->getContextSubObjType(), + $item->getContextObjId(), + $item->getContextObjType(), + $item->getContextSubObjId(), + (string) $item->getContextSubObjType(), $this->news_id ); $ret = $ctrl->forwardCommand($like_gui); break; case strtolower(ilCommentGUI::class): - $i = new ilNewsItem($this->news_id); + $item = $this->manager->getNewsItem($this->news_id); $ctrl->saveParameter($this, "news_id"); - $notes_obj_type = ($i->getContextSubObjType() == "") - ? $i->getContextObjType() - : $i->getContextSubObjType(); + $notes_obj_type = ($item->getContextSubObjType() === null) + ? $item->getContextObjType() + : $item->getContextSubObjType(); $comment_gui = $this->notes->gui()->getCommentsGUI( - $i->getContextObjId(), - $i->getContextSubObjId(), + $item->getContextObjId(), + $item->getContextSubObjId(), $notes_obj_type, - $i->getId() + $item->getId() ); $comment_gui->setShowHeader(false); $ret = $ctrl->forwardCommand($comment_gui); @@ -180,7 +182,7 @@ public function show(?ilPropertyFormGUI $form = null): void protected function readNewsData($excluded = []): void { - $this->news_data = $this->manager->getNewsData( + $this->news_collection = $this->manager->getNewsData( $this->ref_id, $this->ctrl->getContextObjId(), $this->ctrl->getContextObjType(), @@ -207,35 +209,34 @@ public function getHTML(?ilPropertyFormGUI $form = null): string $timeline = ilTimelineGUI::getInstance(); // get like widget - $obj_ids = array_unique(array_map(static function (array $a): int { - return (int) $a["context_obj_id"]; - }, $this->news_data)); + $obj_ids = array_unique($this->news_collection->pluck('context_obj_id')); $likef = new ilLikeFactoryGUI(); $like_gui = $likef->widget($obj_ids); $js_items = []; - foreach ($this->news_data as $d) { - $news_item = new ilNewsItem((int) $d["id"]); - $item = ilNewsTimelineItemGUI::getInstance($news_item, (int) $d["ref_id"], $like_gui); + + /** @var NewsItem $news_item */ + foreach ($this->news_collection as $news_item) { + $item = ilNewsTimelineItemGUI::getInstance($news_item, $like_gui); $item->setUserEditAll($this->getUserEditAll()); $timeline->addItem($item); - $js_items[$d["id"]] = [ - "id" => $d["id"], - "user_id" => $d["user_id"], - "title" => $d["title"], - "content" => $d["content"] . $d["content_long"], - "content_long" => "", - "priority" => $d["priority"], - "visibility" => $d["visibility"], - "content_type" => $d["content_type"], - "mob_id" => $d["mob_id"] + $js_items[$news_item->getId()] = [ + "id" => $news_item->getId(), + "user_id" => $news_item->getUserId(), + "title" => $news_item->getTitle(), + "content" => $news_item->getContent() . $news_item->getContentLong(), + "content_long" => '', + "priority" => $news_item->getPriority(), + "visibility" => $news_item->getVisibility(), + "content_type" => $news_item->getContentType(), + "mob_id" => $news_item->getMobId() ]; } $this->tpl->addOnLoadCode("il.News.setItems(" . json_encode($js_items, JSON_THROW_ON_ERROR) . ");"); $this->tpl->addOnLoadCode("il.News.setAjaxUrl('" . $this->ctrl->getLinkTarget($this, "", "", true) . "');"); - if (count($this->news_data) > 0) { + if (!$this->news_collection->isEmpty()) { $ttpl = new ilTemplate("tpl.news_timeline.html", true, true, "components/ILIAS/News"); $ttpl->setVariable("NEWS", $timeline->render()); $this->renderDeleteModal($ttpl); @@ -286,28 +287,27 @@ public function loadMore(): void $timeline = ilTimelineGUI::getInstance(); // get like widget - $obj_ids = array_unique(array_map(static function ($a): int { - return (int) $a["context_obj_id"]; - }, $this->news_data)); + $obj_ids = array_unique($this->news_collection->pluck('context_obj_id')); $likef = new ilLikeFactoryGUI(); $like_gui = $likef->widget($obj_ids); $js_items = []; - foreach ($this->news_data as $d) { - $news_item = new ilNewsItem((int) $d["id"]); - $item = ilNewsTimelineItemGUI::getInstance($news_item, (int) $d["ref_id"], $like_gui); + + /** @var NewsItem $news_item */ + foreach ($this->news_collection as $news_item) { + $item = ilNewsTimelineItemGUI::getInstance($news_item, $like_gui); $item->setUserEditAll($this->getUserEditAll()); $timeline->addItem($item); - $js_items[$d["id"]] = [ - "id" => $d["id"], - "user_id" => $d["user_id"], - "title" => $d["title"], - "content" => $d["content"] . $d["content_long"], - "content_long" => "", - "priority" => $d["priority"], - "visibility" => $d["visibility"], - "content_type" => $d["content_type"], - "mob_id" => $d["mob_id"] + $js_items[$news_item->getId()] = [ + "id" => $news_item->getId(), + "user_id" => $news_item->getUserId(), + "title" => $news_item->getTitle(), + "content" => $news_item->getContent() . $news_item->getContentLong(), + "content_long" => '', + "priority" => $news_item->getPriority(), + "visibility" => $news_item->getVisibility(), + "content_type" => $news_item->getContentType(), + "mob_id" => $news_item->getMobId() ]; } diff --git a/components/ILIAS/News/classes/class.ilNewsTimelineItemGUI.php b/components/ILIAS/News/classes/class.ilNewsTimelineItemGUI.php index 096031b14448..67f6b3e7aaac 100755 --- a/components/ILIAS/News/classes/class.ilNewsTimelineItemGUI.php +++ b/components/ILIAS/News/classes/class.ilNewsTimelineItemGUI.php @@ -16,6 +16,7 @@ * *********************************************************************/ +use ILIAS\News\Data\NewsItem; use ILIAS\News\StandardGUIRequest; /** @@ -27,14 +28,11 @@ class ilNewsTimelineItemGUI implements ilTimelineItemInt protected \ILIAS\News\InternalGUIService $gui; protected \ILIAS\Notes\Service $notes; protected ilLanguage $lng; - protected ilNewsItem $news_item; protected ilObjectDefinition $obj_def; protected ilObjUser $user; protected bool $user_edit_all; - protected int $news_item_ref_id; protected int $ref_id; protected ilCtrl $ctrl; - protected ilLikeGUI $like_gui; protected StandardGUIRequest $std_request; /** * @var array @@ -46,19 +44,15 @@ class ilNewsTimelineItemGUI implements ilTimelineItemInt protected array $item_modal = []; protected function __construct( - ilNewsItem $a_news_item, - int $a_news_ref_id, - ilLikeGUI $a_like_gui + protected readonly NewsItem $news_item, + protected readonly ilLikeGUI $like_gui ) { global $DIC; - $this->like_gui = $a_like_gui; $this->lng = $DIC->language(); $this->ctrl = $DIC->ctrl(); - $this->setNewsItem($a_news_item); $this->user = $DIC->user(); $this->obj_def = $DIC["objDefinition"]; - $this->news_item_ref_id = $a_news_ref_id; $this->std_request = $DIC->news() ->internal() @@ -72,21 +66,10 @@ protected function __construct( } public static function getInstance( - ilNewsItem $a_news_item, - int $a_news_ref_id, - ilLikeGUI $a_like_gui + NewsItem $news_item, + ilLikeGUI $like_gui ): self { - return new self($a_news_item, $a_news_ref_id, $a_like_gui); - } - - public function setNewsItem(ilNewsItem $a_val): void - { - $this->news_item = $a_val; - } - - public function getNewsItem(): ilNewsItem - { - return $this->news_item; + return new self($news_item, $like_gui); } /** @@ -107,31 +90,32 @@ public function getUserEditAll(): bool public function getDateTime(): ilDateTime { - $i = $this->getNewsItem(); - return new ilDateTime($i->getCreationDate(), IL_CAL_DATETIME); + return new ilDateTime($this->news_item->getCreationDate()->format('c'), IL_CAL_DATETIME); } public function render(): string { - $i = $this->getNewsItem(); $tpl = new ilTemplate("tpl.timeline_item.html", true, true, "components/ILIAS/News"); $ui_factory = $this->gui->ui()->factory(); $ui_renderer = $this->gui->ui()->renderer(); - $news_renderer = ilNewsRendererFactory::getRenderer($i->getContextObjType()); + $news_renderer = ilNewsRendererFactory::getRenderer($this->news_item->getContextObjType()); $news_renderer->setLanguage($this->lng->getLangKey()); - $news_renderer->setNewsItem($i, $this->news_item_ref_id); + $news_renderer->setNewsItem($this->news_item->toLegacy(), $this->news_item->getContextRefId()); - $obj_id = $i->getContextObjId(); + $obj_id = $this->news_item->getContextObjId(); // edited? - if ($i->getCreationDate() !== $i->getUpdateDate()) { + if ($this->news_item->getCreationDate() !== $this->news_item->getUpdateDate()) { $tpl->setCurrentBlock("edited"); - $update_date = new ilDateTime($i->getUpdateDate(), IL_CAL_DATETIME); + $update_date = new ilDateTime($this->news_item->getUpdateDate()->format('c'), IL_CAL_DATETIME); $tpl->setVariable("TXT_EDITED", $this->lng->txt("cont_news_edited")); - if ($i->getUpdateUserId() > 0 && ($i->getUpdateUserId() !== $i->getUserId())) { + if ( + $this->news_item->getUpdateUserId() > 0 && + ($this->news_item->getUpdateUserId() !== $this->news_item->getUserId()) + ) { $tpl->setVariable("TXT_USR_EDITED", ilUserUtil::getNamePresentation( - $i->getUpdateUserId(), + $this->news_item->getUpdateUserId(), false, true, $this->ctrl->getLinkTargetByClass(ilNewsTimelineGUI::class) @@ -142,7 +126,7 @@ public function render(): string } // context object link - if ($this->news_item_ref_id > 0 && $this->ref_id !== $this->news_item_ref_id) { + if ($this->news_item->getContextRefId() > 0 && $this->ref_id !== $this->news_item->getContextRefId()) { $tpl->setCurrentBlock("object"); $tpl->setVariable("OBJ_TITLE", ilObject::_lookupTitle($obj_id)); $tpl->setVariable("OBJ_IMG", ilObject::_getIcon($obj_id)); @@ -151,8 +135,8 @@ public function render(): string } // media - if ($i->getMobId() > 0 && ilObject::_exists($i->getMobId())) { - $media = $this->renderMedia($i); + if ($this->news_item->getMobId() > 0 && ilObject::_exists($this->news_item->getMobId())) { + $media = $this->renderMedia($this->news_item); $tpl->setCurrentBlock("player"); $tpl->setVariable("PLAYER", $media); $tpl->parseCurrentBlock(); @@ -160,18 +144,22 @@ public function render(): string $p = $this->gui->profile(); $tpl->setVariable("USER_AVATAR", $this->gui->ui()->renderer()->render( - $p->getAvatar($i->getUserId()) + $p->getAvatar($this->news_item->getUserId()) )); $tpl->setVariable( "TITLE", - ilNewsItem::determineNewsTitle($i->getContextObjType(), $i->getTitle(), $i->getContentIsLangVar()) + ilNewsItem::determineNewsTitle( + $this->news_item->getContextObjType(), + $this->news_item->getTitle(), + $this->news_item->isContentIsLangVar() + ) ); // content $tpl->setVariable("CONTENT", $news_renderer->getTimelineContent()); $tpl->setVariable("TXT_USR", $p->getNamePresentation( - $i->getUserId(), + $this->news_item->getUserId(), true, $this->ctrl->getLinkTargetByClass(ilNewsTimelineGUI::class) )); @@ -181,8 +169,12 @@ public function render(): string // actions $actions = []; - if ($i->getPriority() === 1 && ($i->getUserId() === $this->user->getId() || $this->getUserEditAll())) { + if ( + $this->news_item->getPriority() === 1 && + ($this->news_item->getUserId() === $this->user->getId() || $this->getUserEditAll()) + ) { if (!$news_renderer->preventEditing()) { + $i = $this->news_item; $actions[] = $ui_factory->button()->shy( $this->lng->txt("edit"), "" @@ -206,7 +198,7 @@ public function render(): string return $tpl->get(); } - protected function renderMedia(ilNewsItem $i): string + protected function renderMedia(NewsItem $i): string { $media_path = $this->getMediaPath($i); $mime = ilObjMediaObject::getMimeType($media_path); @@ -247,7 +239,7 @@ protected function renderMedia(ilNewsItem $i): string return $html; } - protected function renderMediaModal(ilNewsItem $i): string + protected function renderMediaModal(NewsItem $i): string { $ui_factory = $this->gui->ui()->factory(); $ui_renderer = $this->gui->ui()->renderer(); @@ -277,28 +269,26 @@ protected function renderMediaModal(ilNewsItem $i): string public function renderFooter(): string { - $i = $this->getNewsItem(); - // like - $this->ctrl->setParameterByClass(ilNewsTimelineGUI::class, "news_id", $i->getId()); + $this->ctrl->setParameterByClass(ilNewsTimelineGUI::class, "news_id", $this->news_item->getId()); $this->like_gui->setObject( - $i->getContextObjId(), - $i->getContextObjType(), - $i->getContextSubObjId(), - (string) $i->getContextSubObjType(), - $i->getId() + $this->news_item->getContextObjId(), + $this->news_item->getContextObjType(), + $this->news_item->getContextSubObjId(), + (string) $this->news_item->getContextSubObjType(), + $this->news_item->getId() ); $html = $this->ctrl->getHTML($this->like_gui); // comments - $notes_obj_type = ($i->getContextSubObjType() == "") - ? $i->getContextObjType() - : $i->getContextSubObjType(); + $notes_obj_type = ($this->news_item->getContextSubObjType() === null) + ? $this->news_item->getContextObjType() + : $this->news_item->getContextSubObjType(); $comments_gui = $this->notes->gui()->getCommentsGUI( - $i->getContextObjId(), - $i->getContextSubObjId(), + $this->news_item->getContextObjId(), + $this->news_item->getContextSubObjId(), $notes_obj_type, - $i->getId() + $this->news_item->getId() ); $comments_gui->setDefaultCommand("getWidget"); $comments_gui->setShowEmptyListMessage(false); @@ -308,10 +298,10 @@ public function renderFooter(): string $this->ctrl->setParameterByClass(ilNewsTimelineGUI::class, "news_id", $this->std_request->getNewsId()); - return $html . $this->renderMediaModal($i); + return $html . $this->renderMediaModal($this->news_item); } - protected function getMediaPath(ilNewsItem $i): string + protected function getMediaPath(NewsItem $i): string { $media_path = ""; if ($i->getMobId() > 0) { diff --git a/components/ILIAS/News/classes/class.ilObjNewsSettingsGUI.php b/components/ILIAS/News/classes/class.ilObjNewsSettingsGUI.php index f3914884f371..0885b34a03c9 100755 --- a/components/ILIAS/News/classes/class.ilObjNewsSettingsGUI.php +++ b/components/ILIAS/News/classes/class.ilObjNewsSettingsGUI.php @@ -16,6 +16,8 @@ * *********************************************************************/ +use ILIAS\News\Persistence\NewsCache; + /** * News Settings. * @@ -24,10 +26,13 @@ */ class ilObjNewsSettingsGUI extends ilObjectGUI { - protected ilNewsCache $acache; + protected readonly NewsCache $cache; public function __construct($a_data, $a_id, $a_call_by_reference = true, $a_prepare_output = true) { + global $DIC; + $this->cache = $DIC->news()->internal()->repo()->cache(); + $this->type = 'nwss'; parent::__construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output); @@ -272,8 +277,7 @@ public function saveSettings(): void } // empty news cache - $this->acache = new ilNewsCache(); - $this->acache->deleteAllEntries(); + $this->cache->flush(); $news_set = new ilSetting("news"); $feed_set = new ilSetting("feed"); diff --git a/components/ILIAS/News/classes/class.ilPDNewsBlockGUI.php b/components/ILIAS/News/classes/class.ilPDNewsBlockGUI.php index 6e7623bf49a2..baaf12076660 100755 --- a/components/ILIAS/News/classes/class.ilPDNewsBlockGUI.php +++ b/components/ILIAS/News/classes/class.ilPDNewsBlockGUI.php @@ -16,7 +16,7 @@ * *********************************************************************/ -use ILIAS\News\StandardGUIRequest; +use ILIAS\News\Data\NewsCriteria; use ILIAS\Authentication\Password\LocalUserPasswordManager; /** @@ -28,82 +28,31 @@ class ilPDNewsBlockGUI extends ilNewsForContextBlockGUI { public static string $block_type = "pdnews"; - protected bool $cache_hit = false; - protected ilNewsCache $acache; - protected bool $dynamic = false; - protected bool $acc_results = false; - protected StandardGUIRequest $std_request; public function __construct() { - global $DIC; - + $this->prevent_initial_loading = true; // prevents loading in the parent constructor! parent::__construct(); - $lng = $DIC->language(); - $ilAccess = $DIC->access(); - $this->obj_definition = $DIC["objDefinition"]; - - // NOT ilNewsForContextBlockGUI::__construct() ! - ilBlockGUI::__construct(); - - $lng->loadLanguageModule("news"); - $this->setLimit(5); - $this->dynamic = false; - - $this->std_request = $DIC->news() - ->internal() - ->gui() - ->standardRequest(); - - $this->acache = new ilNewsCache(); - $cres = unserialize((string) $this->acache->getEntry($this->user->getId() . ":0"), ["allowed_classes" => false]); - $this->cache_hit = false; - if (is_array($cres) && $this->acache->getLastAccessStatus() === "hit") { - self::$st_data = ilNewsItem::prepareNewsDataFromCache($cres); - $this->cache_hit = true; - } - - - if (empty(self::$st_data)) { - self::$st_data = $this->getNewsData(); - } - $data = self::$st_data; - - $this->setTitle($lng->txt("news_internal_news")); + $this->setLimit(5); + $this->setTitle($this->lng->txt("news_internal_news")); $this->setRowTemplate("tpl.block_row_news_for_context.html", "components/ILIAS/News"); - $this->setData($data); - + $this->loadNewsData(); $this->handleView(); - - // reset access check results - $ilAccess->setResults((array) $this->acc_results); - $this->setPresentation(self::PRES_SEC_LIST); } - public function getNewsData(): array + private function loadNewsData(): void { - $ilUser = $this->user; - - $this->acache = new ilNewsCache(); - - $per = ilNewsItem::_lookupUserPDPeriod($ilUser->getId()); - $data = ilNewsItem::_getNewsItemsOfUser( - $ilUser->getId(), - false, - false, - $per - ); - - $this->acache->storeEntry( - $ilUser->getId() . ":0", - serialize($data) + $news_period = ilNewsItem::_lookupUserPDPeriod($this->user->getId()); + $collection = $this->domain->collection()->getNewsForUser( + $this->user, + new NewsCriteria(period: $news_period, only_public: false), + true ); - - return $data; + $this->initData($collection->groupFiles()->groupForums(false)); } public function getBlockType(): string @@ -131,15 +80,8 @@ public static function getScreenMode(): string public function executeCommand() { - $ilCtrl = $this->ctrl; - - $next_class = $ilCtrl->getNextClass(); - $cmd = $ilCtrl->getCmd("getHTML"); - - switch ($next_class) { - default: - return $this->$cmd(); - } + $cmd = $this->ctrl->getCmd(); + return $this->$cmd(); } public function getHTML(): string @@ -355,8 +297,7 @@ public function saveSettings(): string 0 ); - $cache = new ilNewsCache(); - $cache->deleteEntry($ilUser->getId() . ":0"); + $this->domain->collection()->invalidateCache($this->user->getId()); $ilCtrl->returnToParent($this); return ""; diff --git a/components/ILIAS/YUI/tests/YUITest.php b/components/ILIAS/News/src/Aggregation/CategoryAggregationStrategy.php old mode 100755 new mode 100644 similarity index 57% rename from components/ILIAS/YUI/tests/YUITest.php rename to components/ILIAS/News/src/Aggregation/CategoryAggregationStrategy.php index 9933f5020650..728d8983b81d --- a/components/ILIAS/YUI/tests/YUITest.php +++ b/components/ILIAS/News/src/Aggregation/CategoryAggregationStrategy.php @@ -16,28 +16,24 @@ * *********************************************************************/ -use PHPUnit\Framework\TestCase; +declare(strict_types=1); + +namespace ILIAS\News\Aggregation; + +use ILIAS\News\Data\NewsContext; /** - * Test session repository - * - * @author Alexander Killing + * Category Aggregation Strategy aggregates related contexts for a category context */ -class YUITest extends TestCase +class CategoryAggregationStrategy extends SubtreeAggregationStrategy implements NewsAggregationStrategy { - protected function tearDown(): void + public function shouldSkip(NewsContext $context): bool { + return false; } - /** - * Test sort - */ - public function testPath(): void + public function isRecursive(): bool { - $path = ilYuiUtil::getLocalPath("test.js"); - $this->assertEquals( - "./node_modules/yui2/build/test.js", - $path - ); + return true; } } diff --git a/components/ILIAS/News/src/Aggregation/NewsAggregationStrategy.php b/components/ILIAS/News/src/Aggregation/NewsAggregationStrategy.php new file mode 100644 index 000000000000..65250d752f2e --- /dev/null +++ b/components/ILIAS/News/src/Aggregation/NewsAggregationStrategy.php @@ -0,0 +1,47 @@ + */ + protected array $strategies = []; + protected \ilTree $tree; + + public function __construct() + { + global $DIC; + + $this->tree = $DIC->repositoryTree(); + $this->initializeStrategies(); + } + + /** + * @param NewsContext[] $contexts + * @return NewsContext[] aggregated contexts + */ + public function aggregate(array $contexts): array + { + /** @var SplQueue $frontier */ + $frontier = new SplQueue(); + $result = []; + + // Prepare queue + foreach ($contexts as $context) { + $frontier->enqueue($context); + } + + while (!$frontier->isEmpty()) { + $current = $frontier->dequeue(); + + // Ensure each context is only visited once + if (array_key_exists($current->getObjId(), $result)) { + continue; + } + $result[$current->getObjId()] = $current; + + // Skip if no processing necessary + $strategy = $this->getStrategy($current->getObjType()); + if ($strategy === null || $strategy->shouldSkip($current)) { + continue; + } + + $children = $strategy->aggregate($current); + foreach ($children as $child) { + if ($strategy->isRecursive()) { + // Recursive items will be added directly + $result[$child->getObjId()] = $child; + } else { + // Iterative items will be queued for further processing + $frontier->enqueue($child); + } + } + } + + return array_values($result); + } + + protected function getStrategy(string $object_type): ?NewsAggregationStrategy + { + return $this->strategies[$object_type] ?? null; + } + + protected function initializeStrategies(): void + { + $subtree_strategy = new SubtreeAggregationStrategy($this->tree); + + $this->strategies['cat'] = new CategoryAggregationStrategy($this->tree); + $this->strategies['crs'] = $subtree_strategy; + $this->strategies['grp'] = $subtree_strategy; + $this->strategies['fold'] = $subtree_strategy; + } +} diff --git a/components/ILIAS/News/src/Aggregation/SubtreeAggregationStrategy.php b/components/ILIAS/News/src/Aggregation/SubtreeAggregationStrategy.php new file mode 100644 index 000000000000..cd7778eb5d51 --- /dev/null +++ b/components/ILIAS/News/src/Aggregation/SubtreeAggregationStrategy.php @@ -0,0 +1,70 @@ +tree->getChilds($base_context->getRefId()) as $node) { + $aggregated[] = new NewsContext( + $node['child'], + $node['obj_id'], + $node['type'], + $base_context->getRefId(), + $base_context->getLevel() + 1 + ); + } + + return $aggregated; + } + + public function isRecursive(): bool + { + return false; + } + + public function shouldSkip(NewsContext $context): bool + { + if (in_array($context->getObjType(), ['crs', 'grp', 'cat'])) { + // see #31471, #30687, and ilMembershipNotification + return !\ilContainer::_lookupContainerSetting($context->getObjId(), 'cont_use_news', '1') + || (!\ilContainer::_lookupContainerSetting($context->getObjId(), 'cont_show_news', '1') + && !\ilContainer::_lookupContainerSetting($context->getObjId(), 'news_timeline')); + } + + return false; + } +} diff --git a/components/ILIAS/News/src/Data/Factory.php b/components/ILIAS/News/src/Data/Factory.php new file mode 100644 index 000000000000..accfae121fef --- /dev/null +++ b/components/ILIAS/News/src/Data/Factory.php @@ -0,0 +1,65 @@ +db_timezone = new \DateTimeZone('UTC'); + } + + public function newsItem(array $row): NewsItem + { + return new NewsItem( + id: (int) $row['id'], + title: (string) $row['title'], + content: (string) $row['content'], + context_obj_id: (int) $row['context_obj_id'], + context_obj_type: (string) $row['context_obj_type'], + context_sub_obj_id: (int) $row['context_sub_obj_id'], + context_sub_obj_type: $row['context_sub_obj_type'] ?? null, + content_type: (string) $row['content_type'], + creation_date: new DateTimeImmutable($row['creation_date']), // currently date is stored in server tz, not UTC + update_date: new DateTimeImmutable($row['update_date']), + user_id: (int) $row['user_id'], + update_user_id: (int) $row['update_user_id'], + visibility: (string) $row['visibility'], + content_long: (string) $row['content_long'], + priority: (int) $row['priority'], + content_is_lang_var: (bool) $row['content_is_lang_var'], + content_text_is_lang_var: (bool) $row['content_text_is_lang_var'], + mob_id: (int) $row['mob_id'], + playtime: (string) $row['playtime'], + mob_cnt_play: (int) $row['mob_cnt_play'], + mob_cnt_download: (int) $row['mob_cnt_download'], + content_html: (bool) $row['content_html'], + context_ref_id: (int) ($row['ref_id'] ?? 0) + ); + } +} diff --git a/components/ILIAS/News/src/Data/LazyNewsCollection.php b/components/ILIAS/News/src/Data/LazyNewsCollection.php new file mode 100644 index 000000000000..a87b9ef2f795 --- /dev/null +++ b/components/ILIAS/News/src/Data/LazyNewsCollection.php @@ -0,0 +1,251 @@ +news_items[$news_id] = null; + } + } + + /** + * @param null|\Closure(int[], string[]): NewsItem[] $callback + */ + public function withFetchCallback(?\Closure $callback): static + { + $clone = clone $this; + $clone->fetch_callback = $callback; + return $clone; + } + + public function addNewsItems(array $news_items): static + { + foreach ($news_items as $id => $item) { + if ($item !== null) { + $this->addNewsItem($item); + } else { + $this->news_items[$id] = null; + } + + } + return $this; + } + + /** + * This method loads the provided NewsItems from the database. If an empty array is provided, it will load + * all missing NewsItems. It will also load the dependencies of the NewsItems if grouping is enabled. + * + * @param int[] $news_ids + */ + public function load(array $news_ids = []): static + { + if ($this->fetch_callback === null) { + throw new \RuntimeException('No fetch callback provided'); + } + + if (empty($news_ids)) { + $news_ids = array_keys(array_filter($this->news_items, fn($item) => $item === null)); + } else { + $news_ids = array_intersect($news_ids, array_keys($this->news_items)); + } + + if (empty($news_ids)) { + return $this; + } + + // Check if grouping was requested + $context_types = []; + if ($this->group_files === true) { + $context_types[] = 'file'; + } + if ($this->group_forums > 0) { + $context_types[] = 'frm'; + } + + // Load items from a repository + $items = call_user_func($this->fetch_callback, $news_ids, $context_types); + $this->addNewsItems($items); + + // Perform re-grouping if necessary + $this->regroup($items); + + return $this; + } + + /* + Grouping + */ + + public function groupFiles(): static + { + $this->group_files = true; + return $this; + } + + public function groupForums(bool $group_posting_sequence): static + { + $this->group_forums = $group_posting_sequence ? 2 : 1; + return $this; + } + + private function regroup(array $items): void + { + // Check if re-grouping is required + $needs_file_grouping = false; + $needs_forum_grouping = false; + foreach ($items as $item) { + if ($this->group_files === true && $item->getContextObjType() === 'file') { + $needs_file_grouping = true; + } + if ($this->group_forums > 0 && $item->getContextObjType() === 'frm') { + $needs_forum_grouping = true; + } + } + + // Perform re-grouping + if ($needs_file_grouping) { + parent::groupFiles(); + } + if ($needs_forum_grouping) { + parent::groupForums($this->group_forums === 2); + } + } + + /* + Access & Lazy Loading + */ + + /** + * This method returns `true` if the NewsItem exists in this collection. It does not provide any + * information about whether the NewsItem has been loaded or not. + */ + public function contains(int $news_id): bool + { + return array_key_exists($news_id, $this->news_items); + } + + /** + * This method returns `true` if the NewsItem exists in this collection and has been loaded. + */ + public function has(int $news_id): bool + { + return isset($this->news_items[$news_id]); + } + + /** + * This method returns the NewsItem with the given id or null if it does not exist. If the + * NewsItem was not loaded, it will be loaded from the database. + * + * WARNING: this may cause N+1 queries when using this method in a loop. Use `load` instead, + * to batch load NewsItems. + */ + public function getById(int $news_id): ?NewsItem + { + if (!$this->has($news_id)) { + $this->load([$news_id]); + } + + return $this->news_items[$news_id] ?? null; + } + + /** + * This method returns the NewsItem of the given offset of the collection. If the NewsItem + * was not loaded, it will be loaded from the database. + * + * WARNING: this may cause N+1 queries when using this method in a loop. Use `load` instead, + * to batch load NewsItems. + */ + public function pick(int $offset): ?NewsItem + { + $index = max(0, $offset); + $news_id = array_keys($this->news_items)[$index] ?? null; + + return $news_id !== null ? $this->getById($news_id) : null; + } + + /** + * INFO: This method will load all NewsItems into the collection. + */ + public function pluck(string $key, bool $wrap = false): array + { + if ($key === 'id') { + return $wrap ? array_map(fn($item) => [$item], array_keys($this->news_items)) : array_keys($this->news_items); + } + + $this->load(); + return parent::pluck($key, $wrap); + } + + /** + * INFO: This method will load all NewsItems into the collection. + */ + public function toArray(): array + { + $this->load(); + return parent::toArray(); + } + + /** + * INFO: This method will load all NewsItems into the collection. + */ + public function getAggregatedNews( + bool $aggregate_files = false, + bool $aggregate_forums = false, + bool $group_posting_sequence = false + ): array { + $this->load(); + return parent::getAggregatedNews($aggregate_files, $aggregate_forums, $group_posting_sequence); + } + + public function merge(NewsCollection $other): static + { + return parent::merge($other)->withFetchCallback($this->fetch_callback); + } + + public function exclude(array $news_ids): static + { + return parent::exclude($news_ids)->withFetchCallback($this->fetch_callback); + } + + public function limit(?int $limit): static + { + return parent::limit($limit)->withFetchCallback($this->fetch_callback); + } +} diff --git a/components/ILIAS/News/src/Data/NewsCollection.php b/components/ILIAS/News/src/Data/NewsCollection.php new file mode 100644 index 000000000000..e05fe0415f61 --- /dev/null +++ b/components/ILIAS/News/src/Data/NewsCollection.php @@ -0,0 +1,439 @@ + */ + protected array $news_items = []; + + /** @var array */ + protected array $context_map = []; + + /** @var array */ + protected array $type_map = []; + + /** @var array */ + protected array $user_read_status = []; + /** @var array */ + protected array $grouped_items_map = []; + + public function __construct(array $news_items = []) + { + $this->addNewsItems($news_items); + } + + /** + * Add multiple news items efficiently + */ + public function addNewsItems(array $news_items): static + { + foreach ($news_items as $item) { + $this->addNewsItem($item); + } + return $this; + } + + /** + * Add a single news item with indexing + */ + public function addNewsItem(NewsItem $item): static + { + $id = $item->getId(); + $this->news_items[$id] = $item; + + // Build context index for fast context-based lookups + $context_key = $item->getContextObjId() . '_' . $item->getContextObjType(); + $this->context_map[$context_key][] = $id; + + // Build type index for fast type-based filtering + $this->type_map[$item->getContextObjType()][] = $id; + + return $this; + } + + public function getNewsItems(): array + { + return $this->news_items; + } + + public function getNewsForContext(int $context_obj_id, string $context_obj_type): array + { + $context_key = $context_obj_id . '_' . $context_obj_type; + + if (!isset($this->context_map[$context_key])) { + return []; + } + + return array_map( + fn($id) => $this->news_items[$id], + $this->context_map[$context_key] + ); + } + + public function getNewsByType(string $obj_type): array + { + if (!isset($this->type_map[$obj_type])) { + return []; + } + + return array_map( + fn($id) => $this->news_items[$id], + $this->type_map[$obj_type] + ); + } + + /** + * @param array $read_news_ids + */ + public function setUserReadStatus(int $user_id, array $read_news_ids): static + { + $this->user_read_status[$user_id] = array_filter($read_news_ids); + return $this; + } + + public function isReadByUser(int $user_id, int $news_id): bool + { + return isset($this->user_read_status[$user_id][$news_id]); + } + + /** + * @return array + */ + public function getUserReadStatus(int $user_id): array + { + $result = []; + foreach (array_keys($this->news_items) as $news_id) { + $result[$news_id] = $this->isReadByUser($user_id, $news_id); + } + return $result; + } + + /* + Grouping + */ + + public function groupFiles(): static + { + foreach (array_filter($this->news_items) as $item) { + if ($item->getContextObjType() === 'file') { + if (isset($this->grouped_items_map[$item->getContextObjId()])) { + $this->grouped_items_map[$item->getContextObjId()]['aggregation'][] = $item->getId(); + } else { + $this->grouped_items_map[$item->getContextObjId()] = [ + 'first' => $item->getId(), + 'aggregation' => [] + ]; + } + } + } + return $this; + } + + public function groupForums(bool $group_posting_sequence): static + { + $last_forum = 0; + + foreach (array_filter($this->news_items) as $item) { + // If we are grouping by sequence, we need to reset the entry in the aggregation map when switching + if ($group_posting_sequence && $last_forum !== $item->getContextObjType() && $last_forum !== 0) { + $this->grouped_items_map[$last_forum] = null; + } + + if ($item->getContextObjType() === 'frm') { + if (isset($this->grouped_items_map[$item->getContextObjId()])) { + $this->grouped_items_map[$item->getContextObjId()]['aggregation'][] = $item->getId(); + } else { + $this->grouped_items_map[$item->getContextObjId()] = [ + 'first' => $item->getId(), + 'aggregation' => [] + ]; + $last_forum = $item->getContextObjId(); + } + } + } + + return $this; + } + + /** + * Returns the grouping for a given news item. It will return an array with the grouped items + * if the provided item is the first in the group. + * + * @return array{parent: NewsItem, aggregation: NewsItem[], agg_ref_id: int, no_context_title: bool}|null + */ + public function getGroupingFor(NewsItem $item): ?array + { + if (!isset($this->grouped_items_map[$item->getContextObjId()])) { + return null; + } + + $aggregation = $this->grouped_items_map[$item->getContextObjId()]; + if ($aggregation['first'] !== $item->getId()) { + return null; + } + + if ($item->getContextObjType() === 'frm') { + $item = $item->withContent('')->withContentLong(''); + } + + return [ + 'parent' => $item, + 'aggregation' => [$item, ...array_map(fn($id) => $this->news_items[$id], $aggregation['aggregation'])], + 'agg_ref_id' => $item->getContextRefId(), + 'no_context_title' => $item->getContextObjType() === 'frm' + ]; + } + + /* + Legacy Adapter + */ + + /** + * Get news items in a format compatible with the legacy rendering implementation. + * This should never be introduced in new code and will be removed in the future. + * + * @deprecated + * + * @return array> + */ + public function getAggregatedNews( + bool $aggregate_files = false, + bool $aggregate_forums = false, + bool $group_posting_sequence = false + ): array { + $items = []; + $file_aggregation_map = []; + $forum_aggregation_map = []; + $last_forum = 0; + + foreach ($this->news_items as $item) { + $entry = [ + 'id' => $item->getId(), + 'priority' => $item->getPriority(), + 'title' => $item->getTitle(), + 'content' => $item->getContent(), + 'context_obj_id' => $item->getContextObjId(), + 'context_obj_type' => $item->getContextObjType(), + 'context_sub_obj_id' => $item->getContextSubObjId(), + 'context_sub_obj_type' => $item->getContextSubObjType(), + 'content_type' => $item->getContentType(), + 'creation_date' => $item->getCreationDate()->format('Y-m-d H:i:s'), + 'user_id' => $item->getUserId(), + 'visibility' => $item->getVisibility(), + 'content_long' => $item->getContentLong(), + 'content_is_lang_var' => $item->isContentIsLangVar(), + 'mob_id' => $item->getMobId(), + 'playtime' => $item->getPlaytime(), + 'start_date' => null, //it seems like this is not used anymore + 'end_date' => null, //it seems like this is not used anymore + 'content_text_is_lang_var' => $item->isContentTextIsLangVar(), + 'mob_cnt_download' => $item->getMobCntDownload(), + 'mob_cnt_play' => $item->getMobCntPlay(), + 'content_html' => $item->isContentHtml(), + 'update_user_id' => $item->getUpdateUserId(), + 'user_read' => (int) $this->isReadByUser($item->getUserId(), $item->getId()), + 'ref_id' => $item->getContextRefId() + ]; + + if ($aggregate_files && $item->getContextObjType() === 'file') { + if (isset($file_aggregation_map[$item->getContextObjId()])) { + // If this file already has an aggregation entry, add it there and prevent adding it to the main list + $idx = $file_aggregation_map[$item->getContextObjId()]; + $items[$idx]['aggregation'][$item->getId()] = $entry; + continue; + } + + // If this is the first news for this file, set the aggregation array + $entry['aggregation'] = []; + $entry['agg_ref_id'] = $item->getContextRefId(); + $file_aggregation_map[$item->getContextObjId()] = $item->getId(); + + } + + if ($aggregate_forums) { + // If we are grouping by sequence, we need to reset the entry in the aggregation map when switching + if ($group_posting_sequence && $last_forum !== 0 && $last_forum !== $item->getContextObjType()) { + $forum_aggregation_map[$last_forum] = null; + } + + if ($item->getContextObjType() === 'frm') { + $entry['no_context_title'] = true; + + if (isset($forum_aggregation_map[$item->getContextObjId()])) { + // If this form already has an aggregation entry, add it there and prevent adding it to the main list + $idx = $forum_aggregation_map[$item->getContextObjId()]; + $items[$idx]['aggregation'][$item->getId()] = $entry; + continue; + } + + // If this is the first news for this forum, set the aggregation array + $entry['agg_ref_id'] = $item->getContextRefId(); + $entry['content'] = ''; + $entry['content_long'] = ''; + + $forum_aggregation_map[$item->getContextObjId()] = $item->getId(); + $last_forum = $item->getContextObjType(); + + } + } + + $items[$item->getId()] = $entry; + } + return $items; + } + + /* + Interface Methods & Additional Accessors + */ + + public function jsonSerialize(): array + { + return array_values($this->news_items); + } + + public function getIterator(): ArrayIterator + { + return new ArrayIterator($this->news_items); + } + + public function count(): int + { + return count($this->news_items); + } + + public function isEmpty(): bool + { + return empty($this->news_items); + } + + public function first(): ?NewsItem + { + return reset($this->news_items) ?: null; + } + + public function last(): ?NewsItem + { + return end($this->news_items) ?: null; + } + + public function contains(int $news_id): bool + { + return isset($this->news_items[$news_id]); + } + + public function getById(int $news_id): ?NewsItem + { + return $this->news_items[$news_id] ?? null; + } + + public function getPageFor(int $news_id): int + { + $pages = array_keys($this->news_items); + return (int) array_search($news_id, $pages); + } + + public function pick(int $offset): ?NewsItem + { + $index = max(0, $offset); + return array_values($this->news_items)[$index] ?? null; + } + + public function pluck(string $key, bool $wrap = false): array + { + $arr = array_column($this->toArray(), $key); + return $wrap ? array_map(fn($item) => [$item], $arr) : $arr; + } + + /** + * @return array + */ + public function toArray(): array + { + return array_map(fn($item) => $item->toArray(), $this->news_items); + } + + + /** + * Merge with another collection and returns it as a new collection + */ + public function merge(NewsCollection $other): static + { + $merged = new static(); + $merged->addNewsItems($this->news_items); + $merged->addNewsItems($other->getNewsItems()); + + // Merge user read status + foreach ($other->user_read_status as $user_id => $read_ids) { + $merged->user_read_status[$user_id] = isset($this->user_read_status[$user_id]) + ? array_merge($this->user_read_status[$user_id], $read_ids) + : $read_ids; + } + + return $merged; + } + + /** + * Limit the number of news items and returns it as a new collection + */ + public function limit(?int $limit): static + { + if ($limit === null || $limit >= count($this->news_items)) { + return $this; + } + + $limited = new static(); + $items = array_slice($this->news_items, 0, $limit, true); + $limited->addNewsItems($items); + + return $limited; + } + + /** + * Returns a new collection with only the news items that are not in the provided list + * + * @param int[] $news_ids + */ + public function exclude(array $news_ids): static + { + if (empty($news_ids)) { + return $this; + } + + $filtered = new static(); + $filtered->addNewsItems(array_filter( + $this->news_items, + fn($item) => !in_array($item->getId(), $news_ids) + )); + return $filtered; + } + + public function load(array $news_ids = []): static + { + return $this; + } +} diff --git a/components/ILIAS/News/src/Data/NewsContext.php b/components/ILIAS/News/src/Data/NewsContext.php new file mode 100644 index 000000000000..47cda31c8466 --- /dev/null +++ b/components/ILIAS/News/src/Data/NewsContext.php @@ -0,0 +1,155 @@ +ref_id; + } + + public function getObjId(): ?int + { + return $this->obj_id; + } + + public function getObjType(): ?string + { + return $this->obj_type; + } + + public function getParentRefId(): ?int + { + return $this->parent_ref_id; + } + + public function setObjId(int $obj_id): self + { + $this->obj_id = $obj_id; + return $this; + } + + public function setObjType(string $obj_type): self + { + $this->obj_type = $obj_type; + return $this; + } + + public function setParentRefId(?int $parent_ref_id): self + { + $this->parent_ref_id = $parent_ref_id; + return $this; + } + + public function setLevel(int $level): self + { + $this->level = $level; + return $this; + } + + /** + * @return int The level of this context in the hierarchy of contexts. This is different + * from the depth in the ilias tree because it will be considered relative. + */ + public function getLevel(): int + { + return $this->level; + } + + /* + Accessor Methods + */ + + /** + * Check if this context is a child of another context + */ + public function isChildOf(NewsContext $parent_context): bool + { + return $this->parent_ref_id === $parent_context->getRefId(); + } + + /** + * Check if this context is a parent of another context + */ + public function isParentOf(NewsContext $child_context): bool + { + return $child_context->getParentRefId() === $this->ref_id; + } + + /** + * Check if this context is at the root level + */ + public function isRoot(): bool + { + return $this->parent_ref_id === null; + } + + /* + Optimized Serializing + */ + + /** + * Transform this object into array representation and keep only properties which are not default values. + * + * @return array + */ + public function normalize(): array + { + $vars = get_object_vars($this); + return array_filter($vars); + } + + /** + * Create new object from reduced array representation. + * + * @param array $raw + * @return self + */ + public static function denormalize(array $raw): self + { + return new self( + $raw['ref_id'], + $raw['obj_id'] ?? null, + $raw['obj_type'] ?? null, + $raw['parent_ref_id'] ?? null, + $raw['level'] ?? 0, + ); + } +} diff --git a/components/ILIAS/News/src/Data/NewsCriteria.php b/components/ILIAS/News/src/Data/NewsCriteria.php new file mode 100644 index 000000000000..4fd7298a4816 --- /dev/null +++ b/components/ILIAS/News/src/Data/NewsCriteria.php @@ -0,0 +1,230 @@ +include_read_status = $this->include_read_status ?? !$this->only_public; + } + + /* + Getters and Setters + */ + + public function getStartDate(): ?DateTimeImmutable + { + return $this->start_date; + } + + public function getPeriod(): ?int + { + return $this->period; + } + + public function isOnlyPublic(): bool + { + return $this->only_public; + } + + public function getMinPriority(): ?int + { + return $this->min_priority; + } + + public function getMaxPriority(): ?int + { + return $this->max_priority; + } + + public function getLimit(): ?int + { + return $this->limit; + } + + public function isPreventNesting(): bool + { + return $this->prevent_nesting; + } + + public function isNoAutoGenerated(): bool + { + return $this->no_auto_generated; + } + + public function getExcludedNewsIds(): array + { + return $this->excluded_news_ids; + } + + public function isIncludeReadStatus(): bool + { + return $this->include_read_status ?? false; + } + + public function getReadUserId(): ?int + { + return $this->read_user_id; + } + + public function withStartDate(?DateTimeImmutable $start_date): self + { + $new = clone $this; + $new->start_date = $start_date; + return $new; + } + + public function withPeriod(?int $period): self + { + $new = clone $this; + $new->period = $period; + return $new; + } + + public function withOnlyPublic(bool $only_public): self + { + $new = clone $this; + $new->only_public = $only_public; + return $new; + } + + public function withMinPriority(?int $min_priority): self + { + $new = clone $this; + $new->min_priority = $min_priority; + return $new; + } + + public function withMaxPriority(?int $max_priority): self + { + $new = clone $this; + $new->max_priority = $max_priority; + return $new; + } + + public function withLimit(?int $limit): self + { + $new = clone $this; + $new->limit = $limit; + return $new; + } + + public function withPreventNesting(bool $stop_nesting): self + { + $new = clone $this; + $new->prevent_nesting = $stop_nesting; + return $new; + } + + public function withNoAutoGenerated(bool $no_auto_generated): self + { + $new = clone $this; + $new->no_auto_generated = $no_auto_generated; + return $new; + } + + public function withExcludedNewsIds(array $excluded_news_ids): self + { + $new = clone $this; + $new->excluded_news_ids = array_map('intval', $excluded_news_ids); + return $new; + } + + public function withIncludeReadStatus(bool $include_read_status): self + { + $new = clone $this; + $new->include_read_status = $include_read_status; + return $new; + } + + public function withReadUserId(?int $read_user_id): self + { + $new = clone $this; + $new->read_user_id = $read_user_id; + return $new; + } + + /* + Public Methods + */ + + public function jsonSerialize(): array + { + return $this->toArray(); + } + + public function toArray(): array + { + return [ + 'start_date' => $this->start_date?->format('Y-m-d H:i:s'), + 'period' => $this->period, + 'only_public' => $this->only_public, + 'min_priority' => $this->min_priority, + 'max_priority' => $this->max_priority, + 'limit' => $this->limit, + 'stop_nesting' => $this->prevent_nesting, + 'no_auto_generated' => $this->no_auto_generated, + 'excluded_news_ids' => $this->excluded_news_ids, + 'include_read_status' => $this->include_read_status, + 'read_user_id' => $this->read_user_id, + ]; + } + + /** + * Check if criteria has priority filters + */ + public function hasPriorityFilters(): bool + { + return $this->min_priority !== null || $this->max_priority !== null; + } + + /** + * Validate criteria parameters + */ + public function validate(): void + { + if ($this->min_priority !== null && $this->max_priority !== null && $this->min_priority > $this->max_priority) { + throw new \InvalidArgumentException('Min priority cannot be greater than max priority'); + } + + if ($this->limit !== null && $this->limit < 0) { + throw new \InvalidArgumentException('Limit cannot be negative'); + } + } +} diff --git a/components/ILIAS/News/src/Data/NewsItem.php b/components/ILIAS/News/src/Data/NewsItem.php new file mode 100644 index 000000000000..a0cda78646e7 --- /dev/null +++ b/components/ILIAS/News/src/Data/NewsItem.php @@ -0,0 +1,250 @@ +id; + } + + public function isContentTextIsLangVar(): bool + { + return $this->content_text_is_lang_var; + } + + public function getTitle(): string + { + return $this->title; + } + + public function getContent(): string + { + return $this->content; + } + + public function getContextObjId(): int + { + return $this->context_obj_id; + } + + public function getContextRefId(): int + { + return $this->context_ref_id; + } + + public function getContextObjType(): string + { + return $this->context_obj_type; + } + + public function getContextSubObjId(): int + { + return $this->context_sub_obj_id; + } + + public function getContextSubObjType(): ?string + { + return $this->context_sub_obj_type; + } + + public function getContentType(): string + { + return $this->content_type; + } + + public function getCreationDate(): DateTimeImmutable + { + return $this->creation_date; + } + + public function getUpdateDate(): DateTimeImmutable + { + return $this->update_date; + } + + public function getUserId(): int + { + return $this->user_id; + } + + public function getUpdateUserId(): int + { + return $this->update_user_id; + } + + public function getVisibility(): string + { + return $this->visibility; + } + + public function getContentLong(): string + { + return $this->content_long; + } + + public function getPriority(): int + { + return $this->priority; + } + + public function isContentIsLangVar(): bool + { + return $this->content_is_lang_var; + } + + public function getMobId(): int + { + return $this->mob_id; + } + + public function getPlaytime(): string + { + return $this->playtime; + } + + public function getMobCntPlay(): int + { + return $this->mob_cnt_play; + } + + public function getMobCntDownload(): int + { + return $this->mob_cnt_download; + } + + public function isContentHtml(): bool + { + return $this->content_html; + } + + + public function withContextRefId(int $context_ref_id): NewsItem + { + $clone = clone $this; + $clone->context_ref_id = $context_ref_id; + return $clone; + } + + public function withContent(string $content): NewsItem + { + $clone = clone $this; + $clone->content = $content; + return $clone; + } + + public function withContentLong(string $content_long): NewsItem + { + $clone = clone $this; + $clone->content_long = $content_long; + return $clone; + } + + + public function toArray(): array + { + return [ + 'id' => $this->id, + 'title' => $this->title, + 'content' => $this->content, + 'context_obj_id' => $this->context_obj_id, + 'context_obj_type' => $this->context_obj_type, + 'context_sub_obj_id' => $this->context_sub_obj_id, + 'context_sub_obj_type' => $this->context_sub_obj_type, + 'content_type' => $this->content_type, + 'creation_date' => $this->creation_date->format('Y-m-d H:i:s'), + 'update_date' => $this->update_date->format('Y-m-d H:i:s'), + 'user_id' => $this->user_id, + 'update_user_id' => $this->update_user_id, + 'visibility' => $this->visibility, + 'content_long' => $this->content_long, + 'priority' => $this->priority, + 'content_is_lang_var' => $this->content_is_lang_var, + 'content_text_is_lang_var' => $this->content_text_is_lang_var, + 'mob_id' => $this->mob_id, + 'playtime' => $this->playtime, + 'mob_cnt_play' => $this->mob_cnt_play, + 'mob_cnt_download' => $this->mob_cnt_download, + 'content_html' => $this->content_html + ]; + } + + public function toLegacy(): \ilNewsItem + { + $item = new \ilNewsItem(0); //prevent database loading + $item->setId($this->id); + $item->setTitle($this->title); + $item->setContent($this->content); + $item->setContextObjId($this->context_obj_id); + $item->setContextObjType($this->context_obj_type); + $item->setContextSubObjId($this->context_sub_obj_id); + $item->setContextSubObjType($this->context_sub_obj_type); + $item->setContentType($this->content_type); + $item->setCreationDate($this->creation_date->format('Y-m-d H:i:s')); + $item->setUpdateDate($this->update_date->format('Y-m-d H:i:s')); + $item->setUserId($this->user_id); + $item->setUpdateUserId($this->update_user_id); + $item->setVisibility($this->visibility); + $item->setContentLong($this->content_long); + $item->setPriority($this->priority); + $item->setContentIsLangVar($this->content_is_lang_var); + $item->setContentTextIsLangVar($this->content_text_is_lang_var); + $item->setMobId($this->mob_id); + $item->setPlaytime($this->playtime); + $item->setMobPlayCounter($this->mob_cnt_play); + $item->setMobDownloadCounter($this->mob_cnt_download); + $item->setContentHtml($this->content_html); + return $item; + } +} diff --git a/components/ILIAS/News/src/Domain/NewsCollectionService.php b/components/ILIAS/News/src/Domain/NewsCollectionService.php new file mode 100644 index 000000000000..c3984d57073b --- /dev/null +++ b/components/ILIAS/News/src/Domain/NewsCollectionService.php @@ -0,0 +1,235 @@ +cache->getNewsForUser($user->getId(), $criteria); + if ($cached_news !== null) { + // Transform the lazy collection to a normal collection if needed + if (!$lazy) { + $news_collection = new NewsCollection($this->repository->findByIds($cached_news->pluck('id'))); + } else { + $news_collection = $cached_news->withFetchCallback( + fn(...$args) => $this->repository->loadLazyItems(...$args) + ); + } + + // Apply request-specific filtering [DPL 5] + return $this->applyFinalProcessing($news_collection, $criteria); + } + + // 2. Add missing criteria and validate it + if ($criteria->isIncludeReadStatus() && $criteria->getReadUserId() === null) { + $criteria = $criteria->withReadUserId($user->getId()); + } + $criteria->validate(); + + // 3. Get user accessible contexts [DPL 1] + $user_contexts = $this->user_context_resolver->getAccessibleContexts($user, $criteria); + if (empty($user_contexts)) { + return new NewsCollection(); + } + + // 4. Query news for resolved contexts [DPL 2-4] + $news_collection = $this->getNewsForContexts($user_contexts, $criteria, $user->getId(), $lazy); + + // 5. Store in cache + $this->cache->storeNewsForUser($user->getId(), $criteria, $news_collection); + + // 6. Apply request-specific filtering [DPL 5] + return $this->applyFinalProcessing($news_collection, $criteria); + } + + public function getNewsForContext( + NewsContext $context, + NewsCriteria $criteria, + int $user_id, + bool $lazy = false + ): NewsCollection { + return $this->applyFinalProcessing($this->getNewsForContexts([$context], $criteria, $user_id, $lazy), $criteria); + } + + public function getNewsForContainer( + int $ref_id, + int $context_obj_id, + string $context_type, + NewsCriteria $criteria, + int $user_id, + bool $lazy = false + ): NewsCollection { + if (in_array($context_type, ['grp', 'crs'])) { + // see #31471, #30687, and ilMembershipNotification + if (!\ilContainer::_lookupContainerSetting($context_obj_id, 'cont_use_news', '1') + || ( + !\ilContainer::_lookupContainerSetting($context_obj_id, 'cont_use_news', '1') + && !\ilContainer::_lookupContainerSetting($context_obj_id, 'news_timeline') + )) { + return new NewsCollection(); + } + + if (\ilBlockSetting::_lookup('news', 'hide_news_per_date', 0, $context_obj_id)) { + $hide_date = \ilBlockSetting::_lookup('news', 'hide_news_date', 0, $context_obj_id); + if (!empty($hide_date)) { + $criteria = $criteria->withStartDate(new \DateTimeImmutable($hide_date)); + } + } + } + + $context = new NewsContext($ref_id, $context_obj_id, $context_type); + return $this->applyFinalProcessing($this->getNewsForContexts([$context], $criteria, $user_id, $lazy), $criteria); + } + + public function invalidateCache(int $user_id): void + { + $this->cache->invalidateNewsForUser($user_id, new NewsCriteria()); + } + + /** + * @param NewsContext[] $contexts + */ + private function getNewsForContexts(array $contexts, NewsCriteria $criteria, int $user_id, bool $lazy): NewsCollection + { + // 1. Try context cache first (L1) + $cached = $this->cache->getAggregatedContexts($contexts); + $hits = $cached['hit']; + + if (!empty($cached['missing'])) { + // 2. Batch load missing context object information [DPL 2] + $remaining = $this->fetchContextData($cached['missing']); + + // 3. Perform aggregation [DPL 3] + if (!$criteria->isPreventNesting()) { + $aggregated = (new NewsAggregator())->aggregate($remaining); + $this->cache->storeAggregatedContexts($remaining, $aggregated); + $hits = array_merge($hits, $aggregated); + } else { + $hits = array_merge($hits, $remaining); + } + } + + // 4. Perform access checks [DPL 3] + $aggregated = $this->filterByAccess($hits, $criteria, $user_id); + + // 5. Batch load news from the database [DPL 4] + return $lazy + ? $this->repository->findByContextsBatchLazy($aggregated, $criteria) + : $this->repository->findByContextsBatch($aggregated, $criteria); + } + + /** + * @param NewsContext[] $contexts + * @return NewsContext[] + */ + private function fetchContextData(array $contexts): array + { + // Batch loads object_data and object_references using preloading + $obj_ids = array_filter(array_map(fn($context) => $context->getObjId(), $contexts)); + $this->object_data->preloadObjectCache($obj_ids); + + for ($i = 0; $i < count($contexts); $i++) { + $context = $contexts[$i]; + + if ($context->getObjId() === null) { + $context->setObjId($this->object_data->lookupObjId($context->getRefId())); + } + + if ($context->getObjType() === null) { + $context->setObjType($this->object_data->lookupType($context->getObjId())); + } + + $contexts[$i] = $context; + } + + return $contexts; + } + + /** + * @param NewsContext[] $contexts + * @return NewsContext[] + */ + private function filterByAccess(array $contexts, NewsCriteria $criteria, int $user_id): array + { + if ($criteria->isOnlyPublic()) { + return $contexts; + } + + // Remove contexts without news items or outside the criteria + $contexts = $this->repository->filterContext($contexts, $criteria); + + // Preload rbac cache + $this->rbac->preloadRbacPaCache(array_map(fn($context) => $context->getRefId(), $contexts), $user_id); + + // Order contexts by level to keep tree hierarchy + usort($contexts, fn($a, $b) => $a->getLevel() <=> $b->getLevel()); + $filtered = []; + $ac_result = []; + + foreach ($contexts as $context) { + // Filter object and skip access check if the parent object was denied + if (isset($ac_result[$context->getParentRefId()]) && !$ac_result[$context->getParentRefId()]) { + continue; + } + + $ac_result[$context->getRefId()] = $this->rbac->checkAccess( + 'read', + $context->getRefId(), + $context->getObjType(), + ); + + if ($ac_result[$context->getRefId()]) { + $filtered[] = $context; + } + } + return $filtered; + } + + /** + * Apply the last steps of the news collection processing pipeline: Exclude, Limit + */ + private function applyFinalProcessing(NewsCollection $collection, NewsCriteria $criteria): NewsCollection + { + return $collection->exclude($criteria->getExcludedNewsIds())->limit($criteria->getLimit()); + } +} diff --git a/components/ILIAS/News/src/Domain/UserContextResolver.php b/components/ILIAS/News/src/Domain/UserContextResolver.php new file mode 100644 index 000000000000..95f1bcd12fe6 --- /dev/null +++ b/components/ILIAS/News/src/Domain/UserContextResolver.php @@ -0,0 +1,142 @@ +cache->getUserContextAccess($user->getId(), $criteria); + if ($cached_contexts !== null) { + return $cached_contexts; + } + + // 2. Resolve contexts + $contexts = $this->resolveUserContexts($user, $criteria); + + // 3. Cache the result + $this->cache->storeUserContextAccess($user->getId(), $criteria, $contexts); + + return $contexts; + } + + /** + * @return NewsContext[] + */ + private function resolveUserContexts(\ilObjUser $user, NewsCriteria $criteria): array + { + $contexts = []; + + // Get user's personal desktop items + if ($this->shouldIncludePersonalDesktop($user)) { + $contexts = array_merge($contexts, $this->getPersonalDesktopContexts($user)); + } + + // Get user's memberships + $contexts = array_merge($contexts, $this->getMembershipContexts($user)); + + // Remove duplicates and filter by access + return $this->filterContexts($user, $contexts, $criteria); + } + + private function shouldIncludePersonalDesktop(\ilObjUser $user): bool + { + return $user->getPref('pd_items_news') !== 'n'; + } + + /** + * @return NewsContext[] + */ + private function getPersonalDesktopContexts(\ilObjUser $user): array + { + $contexts = []; + + foreach ($this->favourites_repository->getFavouritesOfUser($user->getId()) as $item) { + $contexts[] = new NewsContext($item['ref_id'], $item['obj_id'], $item['type']); + } + return $contexts; + } + + /** + * @return NewsContext[] + */ + private function getMembershipContexts(\ilObjUser $user): array + { + $contexts = []; + $memberships = \ilParticipants::_getMembershipByType($user->getId(), ['crs', 'grp']); + + foreach ($memberships as $obj_id) { + $contexts = array_merge( + $contexts, + array_map(fn($ref_id) => new NewsContext($ref_id, $obj_id), \ilObject::_getAllReferences($obj_id)), + ); + } + return $contexts; + } + + /** + * Deduplicate and filter contexts by access + * + * @param NewsContext[] $contexts + * @return NewsContext[] + */ + private function filterContexts(\ilObjUser $user, array $contexts, NewsCriteria $criteria): array + { + $unique_contexts = []; + + foreach ($contexts as $context) { + if (isset($unique_contexts[$context->getRefId()])) { + continue; + } + + if ( + !$criteria->isOnlyPublic() && + !$this->access->checkAccessOfUser($user->getId(), 'read', '', $context->getRefId()) + ) { + continue; + } + + $unique_contexts[$context->getRefId()] = $context; + } + + return array_values($unique_contexts); + } +} diff --git a/components/ILIAS/News/src/Persistence/NewsCache.php b/components/ILIAS/News/src/Persistence/NewsCache.php new file mode 100644 index 000000000000..8cc6aa4efa1c --- /dev/null +++ b/components/ILIAS/News/src/Persistence/NewsCache.php @@ -0,0 +1,229 @@ +cache_ttl = (int) $settings->get('acc_cache_mins'); + $this->enabled = $this->cache_ttl !== 0; + + $this->il_cache = new \ilCache('ServicesNews', 'NewsMultiLevel', true); + $this->il_cache->setExpiresAfter($this->cache_ttl * 60); + } + + /** + * Level-1 Cache stores a collection of the aggregated contexts for the provided base context. + * This method uses a greedy algorithm to collect subset matches in the cache and return both + * cache hits (as complete NewsContexts objects) and missing contexts. + * + * @param NewsContext[] $contexts + * @return array{hit: NewsContext[], missing: NewsContext[]} + */ + public function getAggregatedContexts(array $contexts): array + { + if (!$this->enabled || empty($contexts)) { + return ['hit' => [], 'missing' => $contexts]; + } + + $context_ids = array_map(fn($context) => $context->getRefId(), $contexts); + sort($context_ids, SORT_NUMERIC); + + if ($entry = $this->il_cache->getEntry($this->generateL1Key($context_ids))) { + $contexts = array_map(fn($raw) => NewsContext::denormalize($raw), unserialize($entry)); + return ['hit' => $contexts, 'missing' => []]; + } + + return ['hit' => [], 'missing' => $contexts]; + } + + protected function generateL1Key(string|array $contexts): string + { + return 'agg:' . md5(is_array($contexts) ? implode(',', $contexts) : $contexts); + } + + /** + * @param NewsContext[] $contexts + * @param NewsContext[] $aggregated + */ + public function storeAggregatedContexts(array $contexts, array $aggregated): void + { + if (!$this->enabled || empty($contexts)) { + return; + } + + $context_ids = array_map(fn($context) => $context->getRefId(), $contexts); + sort($context_ids, SORT_NUMERIC); + $key = implode(',', $context_ids); + + $payload = array_map(fn($context) => $context->normalize(), $aggregated); + $this->il_cache->storeEntry($this->generateL1Key($key), serialize($payload)); + } + + /** + * @param NewsContext[] $contexts + */ + public function invalidateAggregatedContexts(array $contexts): void + { + if (!$this->enabled || empty($contexts)) { + return; + } + + $context_ids = array_map(fn($context) => $context->getRefId(), $contexts); + sort($context_ids, SORT_NUMERIC); + $key = implode(',', $context_ids); + + // Delete cache entry + $this->il_cache->deleteEntry($this->generateL1Key($key)); + } + + + /** + * Level-2 Cache stores a collection of the base news contexts for a specific user. It returns a list of the + * NewsContexts (ref_id only) or null on cache miss. + * + * @return NewsContext[]|null + */ + public function getUserContextAccess(int $user_id, NewsCriteria $criteria): ?array + { + if (!$this->enabled) { + return null; + } + + $entry = $this->il_cache->getEntry("access:{$user_id}"); + if (!$entry) { + return null; + } + + // Check if the stored payload matches the criteria + $payload = unserialize($entry); + if ($payload['only_public'] !== $criteria->isOnlyPublic()) { + $this->invalidateUserContextAccess($user_id); + return null; + } + + return array_map(fn($ref_id) => new NewsContext($ref_id), $payload['contexts']); + } + + /** + * @param NewsContext[] $contexts + */ + public function storeUserContextAccess(int $user_id, NewsCriteria $criteria, array $contexts): void + { + if (!$this->enabled) { + return; + } + + $contexts = array_map(fn($context) => $context->getRefId(), $contexts); + $payload = ['contexts' => $contexts, 'only_public' => $criteria->isOnlyPublic()]; + $this->il_cache->storeEntry("access:{$user_id}", serialize($payload)); + } + + public function invalidateUserContextAccess(int $user_id): void + { + if ($this->enabled) { + $this->il_cache->deleteEntry("access:{$user_id}"); + } + } + + + /** + * Level-3 Cache stores a collection of the news items for a specific user. It returns a + * LazyNewsCollection or null on cache miss. + */ + public function getNewsForUser(int $user_id, NewsCriteria $criteria): ?LazyNewsCollection + { + if (!$this->enabled) { + return null; + } + + $entry = $this->il_cache->getEntry($this->generateL3Key($user_id, $criteria)); + if (!$entry) { + return null; + } + + $payload = unserialize($entry); + return (new LazyNewsCollection(array_keys($payload))) + ->setUserReadStatus($user_id, $payload); + } + + public function storeNewsForUser(int $user_id, NewsCriteria $criteria, NewsCollection $news): void + { + if (!$this->enabled) { + return; + } + + $this->il_cache->storeEntry( + $this->generateL3Key($user_id, $criteria), + serialize($news->getUserReadStatus($user_id)) + ); + } + + public function invalidateNewsForUser(int $user_id, NewsCriteria $criteria): void + { + $this->il_cache->deleteEntry($this->generateL3Key($user_id, $criteria)); + } + + protected function generateL3Key(int $user_id, NewsCriteria $criteria): string + { + $payload = [ + 'start_date' => $criteria->getStartDate(), + 'min_priority' => $criteria->getMinPriority(), + 'max_priority' => $criteria->getMaxPriority(), + 'no_auto_generated' => $criteria->isNoAutoGenerated(), + 'only_public' => $criteria->isOnlyPublic() + ]; + + // The Period of entries only needs to be considered if cache entries are stored for longer periods + $period_minutes = ($criteria->getPeriod() ?? 0) * 1440; + if ($period_minutes <= $this->cache_ttl) { + $payload['period'] = $criteria->getPeriod(); + } + + return "user:{$user_id}:" . md5(serialize($payload)); + } + + + public function flush(): void + { + $this->il_cache->deleteAllEntries(); + } +} diff --git a/components/ILIAS/News/src/Persistence/NewsRepository.php b/components/ILIAS/News/src/Persistence/NewsRepository.php new file mode 100644 index 000000000000..2f9390dd02b8 --- /dev/null +++ b/components/ILIAS/News/src/Persistence/NewsRepository.php @@ -0,0 +1,314 @@ +db->queryF($query, [\ilDBConstants::T_INTEGER], [$news_id]); + + return $result->numRows() + ? $this->factory->newsItem($this->db->fetchAssoc($result)) + : null; + } + + /** + * @param int[] $news_ids + * @return NewsItem[] + */ + public function findByIds(array $news_ids): array + { + if (empty($news_ids)) { + return []; + } + + $result = $this->db->query($this->buildFindQuery($news_ids)); + return array_map(fn($row) => $this->factory->newsItem($row), $this->db->fetchAll($result)); + } + + /** + * @param NewsContext[] $contexts + * @return NewsContext[] + */ + public function filterContext(array $contexts, NewsCriteria $criteria): array + { + $obj_ids = array_map(fn($context) => $context->getObjId(), $contexts); + + $values = []; + $types = []; + $query = "SELECT DISTINCT (context_obj_id) AS obj_id FROM il_news_item WHERE "; + $query .= $this->db->in('context_obj_id', $obj_ids, false, \ilDBConstants::T_INTEGER); + + if ($criteria->getPeriod() > 0) { + $query .= " AND creation_date >= %s"; + $values[] = self::parseTimePeriod($criteria->getPeriod()); + $types[] = ilDBConstants::T_TIMESTAMP; + } + + if ($criteria->getStartDate()) { + $query .= " AND creation_date >= %s"; + $values[] = $criteria->getStartDate()->format('Y-m-d H:i:s'); + $types[] = ilDBConstants::T_TIMESTAMP; + } + + $result = $this->db->queryF($query, $types, $values); + $needed_obj_ids = array_column($this->db->fetchAll($result), 'obj_id', 'obj_id'); + + return array_filter($contexts, fn($context) => isset($needed_obj_ids[$context->getObjId()])); + } + + + /** + * @param int[] $news_ids + * @param string[] $group_context_types + * @return NewsItem[] + */ + public function loadLazyItems(array $news_ids, array $group_context_types): array + { + if (empty($news_ids)) { + return []; + } + + $result = $this->db->query($this->buildFindQuery($news_ids)); + $news_items = []; + $additional_obj_ids = []; + + foreach ($this->db->fetchAll($result) as $row) { + $news_item = $this->factory->newsItem($row); + + if (in_array($news_item->getContextObjType(), $group_context_types)) { + $additional_obj_ids[] = $news_item->getContextObjId(); + } + + $news_items[] = $news_item; + } + + if (empty($additional_obj_ids)) { + return $news_items; + } + + // Fetch all additional items with same context_obj_id for grouping + $query = $this->buildFindQuery() + . " WHERE " . $this->db->in('context_obj_id', $additional_obj_ids, false, \ilDBConstants::T_INTEGER) + . " AND " . $this->db->in('id', $news_ids, true, \ilDBConstants::T_INTEGER); + $result = $this->db->query($query); + + return array_merge( + $news_items, + array_map(fn($row) => $this->factory->newsItem($row), $this->db->fetchAll($result)) + ); + } + + private function buildFindQuery(?array $news_ids = null): string + { + $query = " + SELECT il_news_item.*, + COALESCE( + (SELECT ref_id FROM object_reference WHERE object_reference.obj_id = il_news_item.context_obj_id LIMIT 1), + 0 + ) AS ref_id + FROM il_news_item "; + + if ($news_ids !== null) { + $query .= "WHERE " . $this->db->in('id', $news_ids, false, \ilDBConstants::T_INTEGER); + } + + return $query; + } + + /** + * @param NewsContext[] $contexts + */ + public function findByContextsBatch(array $contexts, NewsCriteria $criteria): NewsCollection + { + if (empty($contexts)) { + return new NewsCollection(); + } + + $obj_ids = array_map(fn($context) => $context->getObjId(), $contexts); + $result = $this->db->queryF(...$this->buildBatchQuery($obj_ids, $criteria)); + + $items = []; + $user_read = []; + + while ($row = $this->db->fetchAssoc($result)) { + $items[] = $this->factory->newsItem($row); + $user_read[$row['id']] = isset($row['user_read']) && $row['user_read'] !== 0; + } + + $collection = new NewsCollection($items); + if ($criteria->isIncludeReadStatus()) { + $collection->setUserReadStatus($criteria->getReadUserId(), $user_read); + } + + return $collection; + } + + /** + * @param NewsContext[] $contexts + */ + public function findByContextsBatchLazy(array $contexts, NewsCriteria $criteria): NewsCollection + { + if (empty($contexts)) { + return new NewsCollection(); + } + + $obj_ids = array_map(fn($context) => $context->getObjId(), $contexts); + $result = $this->db->queryF(...$this->buildBatchQuery($obj_ids, $criteria, true)); + + $items = []; + $user_read = []; + while ($row = $this->db->fetchAssoc($result)) { + $items[] = $row['id']; + $user_read[$row['id']] = isset($row['user_read']) && $row['user_read'] !== 0; + } + + $collection = new LazyNewsCollection($items, fn(...$args) => $this->loadLazyItems(...$args)); + if ($criteria->isIncludeReadStatus()) { + $collection->setUserReadStatus($criteria->getReadUserId(), $user_read); + } + + return $collection; + } + + /** + * @param NewsContext[] $contexts + * @return array{0: NewsContext, 1: int}[] + */ + public function countByContextsBatch(array $contexts): array + { + $context_map = []; + foreach ($contexts as $context) { + $context_map[$context->getObjId()] = $context; + } + + $in_clause = $this->db->in('context_obj_id', array_keys($context_map), false, ilDBConstants::T_INTEGER); + $query = "SELECT context_obj_id, count(context_obj_id) as count FROM il_news_item WHERE {$in_clause} GROUP BY context_obj_id"; + $result = $this->db->query($query); + + $count = []; + foreach ($this->db->fetchAll($result) as $row) { + $count[] = [ + $context_map[$row['context_obj_id']], + $row['count'] + ]; + } + + return $count; + } + + private function buildBatchQuery(array $obj_ids, NewsCriteria $criteria, bool $only_id = false): array + { + $values = []; + $types = []; + $joins = ''; + + if ($only_id) { + $columns = ['il_news_item.id']; + } else { + $columns = [ + 'il_news_item.*', + 'COALESCE((SELECT ref_id FROM object_reference WHERE object_reference.obj_id = il_news_item.context_obj_id LIMIT 1), 0) AS ref_id' + ]; + } + + if ($criteria->isIncludeReadStatus()) { + if ($criteria->getReadUserId() === null) { + throw new \InvalidArgumentException("Read user id is required for read status"); + } + + $columns[] = 'il_news_read.user_id AS user_read'; + $joins .= 'LEFT JOIN il_news_read ON il_news_item.id = il_news_read.news_id AND il_news_read.user_id = %s '; + + $values[] = $criteria->getReadUserId(); + $types[] = ilDBConstants::T_INTEGER; + } + + $query = "SELECT " . join(', ', $columns) . " FROM il_news_item {$joins} WHERE " + . $this->db->in('context_obj_id', $obj_ids, false, ilDBConstants::T_INTEGER); + + if ($criteria->getPeriod() > 0) { + $query .= " AND creation_date >= %s"; + $values[] = self::parseTimePeriod($criteria->getPeriod()); + $types[] = ilDBConstants::T_TIMESTAMP; + } + + if ($criteria->getStartDate()) { + $query .= " AND creation_date >= %s"; + $values[] = $criteria->getStartDate()->format('Y-m-d H:i:s'); + $types[] = ilDBConstants::T_TIMESTAMP; + } + + if ($criteria->isNoAutoGenerated()) { + $query .= " AND priority = 1 AND content_type = 'text'"; + } + + if ($criteria->getMinPriority() !== null || $criteria->getMaxPriority() !== null) { + $operator = $criteria->getMinPriority() !== null ? '>=' : '<='; + $query .= " AND n.priority {$operator} %s"; + $values[] = $criteria->getMinPriority(); + $types[] = ilDBConstants::T_INTEGER; + } + + if ($criteria->isOnlyPublic()) { + $query .= " AND visibility = '" . NEWS_PUBLIC . "'"; + } + + $query .= " ORDER BY creation_date DESC"; + + return [$query, $types, $values]; + } + + private static function parseTimePeriod(string|int $time_period): string + { + // time period is a number of days + if (is_numeric($time_period) && $time_period > 0) { + return date('Y-m-d H:i:s', time() - ($time_period * 24 * 60 * 60)); + } + + // time period is datetime (string) + if (preg_match("/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/", $time_period)) { + return $time_period; + } + + return ''; + } +} diff --git a/components/ILIAS/Notes/Administration/classes/class.ilObjCommentsSettingsGUI.php b/components/ILIAS/Notes/Administration/classes/class.ilObjCommentsSettingsGUI.php index 7e1c3307873b..2ba5f635372a 100755 --- a/components/ILIAS/Notes/Administration/classes/class.ilObjCommentsSettingsGUI.php +++ b/components/ILIAS/Notes/Administration/classes/class.ilObjCommentsSettingsGUI.php @@ -171,6 +171,15 @@ public function initForm(): \ILIAS\UI\Component\Input\Container\Form\Standard $fields["enable_comments"] = $fields["enable_comments"]->withValue(null); } + if (!$this->access->checkAccess("write", "", $this->object->getRefId())) { + foreach ($fields as $k => $field) { + $fields[$k] = $field->withDisabled(true); + } + foreach ($subfields as $k => $subfield) { + $subfields[$k] = $subfield->withDisabled(true); + } + } + // section $section1 = $f->input()->field()->section($fields, $lng->txt("settings")); @@ -186,24 +195,28 @@ public function saveSettings(): void $ctrl = $this->ctrl; $setting = $this->setting; - if ($request->getMethod() === "POST") { - $form = $form->withRequest($request); - $data = $form->getData(); - if (isset($data["sec"])) { - $data = $data["sec"]["enable_comments"]; - $disable_comments = (bool) (is_array($data) ? 0 : 1); - $setting->set("disable_comments", (is_array($data) ? 0 : 1)); - if (!$disable_comments) { - $setting->set("comments_del_user", ($data["comm_del_user"] ? 1 : 0)); - $setting->set("comments_del_tutor", ($data["comm_del_tutor"] ? 1 : 0)); - $setting->set("comments_noti_recip", $data["comments_noti_recip"]); - - $privacy = ilPrivacySettings::getInstance(); - $privacy->enableCommentsExport((bool) $data['enable_comments_export']); - $privacy->save(); + if ($this->access->checkAccess("write", "", $this->object->getRefId())) { + if ($request->getMethod() === "POST") { + $form = $form->withRequest($request); + $data = $form->getData(); + if (isset($data["sec"])) { + $data = $data["sec"]["enable_comments"]; + $disable_comments = (bool) (is_array($data) ? 0 : 1); + $setting->set("disable_comments", (is_array($data) ? 0 : 1)); + if (!$disable_comments) { + $setting->set("comments_del_user", ($data["comm_del_user"] ? 1 : 0)); + $setting->set("comments_del_tutor", ($data["comm_del_tutor"] ? 1 : 0)); + $setting->set("comments_noti_recip", $data["comments_noti_recip"]); + + $privacy = ilPrivacySettings::getInstance(); + $privacy->enableCommentsExport((bool) $data['enable_comments_export']); + $privacy->save(); + } + $this->main_tpl->setOnScreenMessage('info', $lng->txt("msg_obj_modified"), true); } - $this->main_tpl->setOnScreenMessage('info', $lng->txt("msg_obj_modified"), true); } + } else { + $this->main_tpl->setOnScreenMessage('failure', $lng->txt("no_permission"), true); } $ctrl->redirect($this, "editSettings"); } diff --git a/components/ILIAS/Notes/Administration/classes/class.ilObjNotesSettingsGUI.php b/components/ILIAS/Notes/Administration/classes/class.ilObjNotesSettingsGUI.php index 5085c1c9f1ac..4b0e5c4d27ff 100755 --- a/components/ILIAS/Notes/Administration/classes/class.ilObjNotesSettingsGUI.php +++ b/components/ILIAS/Notes/Administration/classes/class.ilObjNotesSettingsGUI.php @@ -142,6 +142,10 @@ public function initForm(): Standard $fields["enable_notes"] = $f->input()->field()->checkbox($lng->txt("note_enable_notes")) ->withValue(!($setting->get("disable_notes"))); + if (!$this->access->checkAccess("write", "", $this->object->getRefId())) { + $fields["enable_notes"] = $fields["enable_notes"]->withDisabled(true); + } + // section $section1 = $f->input()->field()->section($fields, $lng->txt("settings")); @@ -157,14 +161,19 @@ public function saveSettings(): void $ctrl = $this->ctrl; $setting = $this->setting; - if ($request->getMethod() === "POST") { - $form = $form->withRequest($request); - $data = $form->getData(); - if (is_array($data["sec"])) { - $setting->set("disable_notes", $data["sec"]["enable_notes"] ? 0 : 1); - $this->main_tpl->setOnScreenMessage('info', $lng->txt("msg_obj_modified"), true); + if ($this->access->checkAccess("write", "", $this->object->getRefId())) { + if ($request->getMethod() === "POST") { + $form = $form->withRequest($request); + $data = $form->getData(); + if (is_array($data["sec"])) { + $setting->set("disable_notes", $data["sec"]["enable_notes"] ? 0 : 1); + $this->main_tpl->setOnScreenMessage('info', $lng->txt("msg_obj_modified"), true); + } } + } else { + $this->main_tpl->setOnScreenMessage('failure', $lng->txt("no_permission"), true); } + $ctrl->redirect($this, "editSettings"); } } diff --git a/components/ILIAS/Notes/Note/class.ilNoteGUI.php b/components/ILIAS/Notes/Note/class.ilNoteGUI.php index 98801fe0b51f..4b34c1257a04 100755 --- a/components/ILIAS/Notes/Note/class.ilNoteGUI.php +++ b/components/ILIAS/Notes/Note/class.ilNoteGUI.php @@ -19,12 +19,14 @@ use ILIAS\Notes\NotesManager; use ILIAS\Notes\StandardGUIRequest; use ILIAS\Notes\Note; +use ILIAS\Data\ReferenceId; /** * @ilCtrl_Calls ilNoteGUI: ilCommentGUI */ class ilNoteGUI { + protected \ILIAS\Notes\InternalDomainService $domain; /** * @var Note[] */ @@ -125,6 +127,7 @@ public function __construct( ->gui() ->standardRequest(); $this->data = $ns->data(); + $this->domain = $ns->domain(); $this->gui = $ns->gui(); $this->notes_access = $ns->domain()->noteAccess(); @@ -282,11 +285,6 @@ public function getNotesHTML(): string public function getListHTML(bool $a_init_form = true): string { - $ilUser = $this->user; - $lng = $this->lng; - $ilCtrl = $this->ctrl; - $ilSetting = $this->settings; - $content = $this->getNoteListHTML($a_init_form); return $this->renderContent($content); } @@ -918,7 +916,11 @@ public function getTarget( } $this->item_list_gui[$type]->initItem($vis_ref_id, $context->getObjId(), $title, $a_obj_type); $link = $this->item_list_gui[$type]->getCommandLink("infoScreen"); - $link = $this->item_list_gui[$type]->appendRepositoryFrameParameter($link) . "#note_" . $a_note_id; + if ($link === "") { + $link = (string) $this->domain->staticUrl()->builder()->build($type, new ReferenceId($vis_ref_id)); + } else { + $link = $this->item_list_gui[$type]->appendRepositoryFrameParameter($link) . "#note_" . $a_note_id; + } } else { $title = ilObject::_lookupTitle($context->getObjId()); $link = "goto.php?target=pg_" . $a_obj_id . "_" . $vis_ref_id; diff --git a/components/ILIAS/Notifications/Notifications.php b/components/ILIAS/Notifications/Notifications.php index 6f15a8212dfa..b1119e2e2b94 100644 --- a/components/ILIAS/Notifications/Notifications.php +++ b/components/ILIAS/Notifications/Notifications.php @@ -49,7 +49,5 @@ public function init( new Component\Resource\OfComponent($this, "receive.mp3", "assets/sounds"); $contribute[Component\Resource\PublicAsset::class] = fn() => new Component\Resource\OfComponent($this, "receive.ogg", "assets/sounds"); - $contribute[User\Settings\UserSettings::class] = fn() => - new Notifications\UserSettings\Settings(); } } diff --git a/components/ILIAS/Notifications/UserSettings/PushNotification.php b/components/ILIAS/Notifications/UserSettings/PushNotification.php deleted file mode 100644 index fc9ff73b0575..000000000000 --- a/components/ILIAS/Notifications/UserSettings/PushNotification.php +++ /dev/null @@ -1,125 +0,0 @@ -get('enable_push') === '1' && count(require PushNotificationObjective::PATH()) > 0; - } - - public function getLabel(Language $lng): string - { - $lng->loadLanguageModule('notifications'); - return $lng->txt($this->getIdentifier()); - } - - public function getSettingsPage(): AvailablePages - { - return AvailablePages::MainSettings; - } - - public function getSection(): AvailableSections - { - return AvailableSections::Communication; - } - - public function getInput( - FieldFactory $field_factory, - Language $lng, - Refinery $refinery, - ilSetting $settings, - ?ilObjUser $user = null - ): Input { - $lng->loadLanguageModule('notifications_adm'); - - $pref = $user ? $this->retrieveValueFromUser($user) : []; - $provider = []; - - foreach (require PushNotificationObjective::PATH() as $class) { - $obj = new $class(); - $provider[$obj->getIdentifier()] = $field_factory->checkbox( - $obj->getName($lng), - $obj->getDescription($lng), - )->withValue(in_array($obj->getIdentifier(), $pref)); - } - - return $field_factory->section( - $provider, - $lng->txt('push_settings') - ); - } - - public function getLegacyInput(Language $lng, ilSetting $settings, ?ilObjUser $user = null): ilFormPropertyGUI - { - throw new Exception('This Setting does not provide an legacy Input.'); - } - - public function getDefaultValueForDisplay(Language $lng, ilSetting $settings): string - { - return $lng->txt('none'); - } - - public function hasUserPersonalizedSetting(ilSetting $settings, ilObjUser $user): bool - { - return $user->getPref('push_notification_provider') !== null; - } - - public function persistUserInput(ilObjUser $user, mixed $input): ilObjUser - { - $active = []; - foreach ($input ?? [] as $key => $value) { - if ($value === true) { - $active[] = $key; - } - } - $user->setPref('push_notification_provider', json_encode($active)); - $user->update(); - return $user; - } - - public function retrieveValueFromUser(ilObjUser $user): ?array - { - return json_decode($user->getPref('push_notification_provider') ?? '[]'); - } -} diff --git a/components/ILIAS/Notifications/classes/class.ilPersonalNotificationsSettingsGUI.php b/components/ILIAS/Notifications/classes/class.ilPersonalNotificationsSettingsGUI.php index 87e2583fa050..8d2fc52976ee 100644 --- a/components/ILIAS/Notifications/classes/class.ilPersonalNotificationsSettingsGUI.php +++ b/components/ILIAS/Notifications/classes/class.ilPersonalNotificationsSettingsGUI.php @@ -21,11 +21,13 @@ use ILIAS\DI\Container; use ILIAS\Notifications\ilNotificationPushHandler; use ILIAS\Notifications\Interfaces\InternalPushProvider; +use ILIAS\Notifications\Interfaces\PushProviderInterface; use ILIAS\Notifications\Model\ilNotificationConfig; use ILIAS\Notifications\Model\ilNotificationObject; use ILIAS\Notifications\Model\Push\PushSubscription; use ILIAS\Notifications\Provider\NotificationsPushProvider; use ILIAS\Notifications\Repository\PushRepository; +use ILIAS\UI\Component\Input\Container\Form\Form; /** * @ilCtrl_IsCalledBy ilPersonalNotificationsSettingsGUI: ilNotificationGUI @@ -34,6 +36,8 @@ { protected Container $dic; protected PushRepository $repo; + /** @var PushProviderInterface[] */ + protected array $pushProvider; public function __construct(?Container $dic = null) { @@ -43,28 +47,76 @@ public function __construct(?Container $dic = null) } $this->dic = $dic; $this->repo = new PushRepository($this->dic->database(), $this->dic->user()); + $provider = []; + foreach (require PushNotificationObjective::PATH() as $class) { + $provider[] = new $class(); + } + $this->pushProvider = $provider; } public function executeCommand(): void { - $this->dic->language()->loadLanguageModule('notifications_adm'); + if ((new ilSetting('notifications'))->get('enable_push') !== '1') { + $this->dic->ui()->mainTemplate()->setOnScreenMessage( + $this->dic->ui()->mainTemplate()::MESSAGE_TYPE_FAILURE, + $this->dic->language()->txt('permission_denied') + ); + $this->dic->ui()->mainTemplate()->printToStdout(); + return; + } + $this->dic->language()->loadLanguageModule('notifications_adm'); $this->dic->ui()->mainTemplate()->setTitle($this->dic->language()->txt('push_settings')); $this->dic->ui()->mainTemplate()->setTitleIcon(ilUtil::getImagePath('standard/icon_nota.svg')); + $this->dic->tabs()->addTab('client', $this->dic->language()->txt('client_settings'), $this->dic->ctrl()->getLinkTargetByClass(self::class, 'showClientSettings')); + if ($this->pushProvider !== []) { + $this->dic->tabs()->addTab('user', $this->dic->language()->txt('user_settings'), $this->dic->ctrl()->getLinkTargetByClass(self::class, 'showUserSettings')); + } switch ($this->dic->ctrl()->getCmd()) { + case 'showUserSettings': + $this->dic->tabs()->activateTab('user'); + if ($this->pushProvider !== []) { + $this->dic->ui()->mainTemplate()->setContent($this->dic->ui()->renderer()->render($this->getForm())); + $this->dic->ui()->mainTemplate()->printToStdout(); + } else { + $this->dic->ctrl()->redirectByClass(self::class, 'showClientSettings'); + } + break; + case 'saveUserSettings': + $this->dic->tabs()->activateTab('user'); + $form = $this->getForm()->withRequest($this->dic->http()->request()); + $data = $form->getData(); + if ($data !== null) { + $active = []; + foreach ($data['provider'] ?? [] as $key => $value) { + if ($value === true) { + $active[] = $key; + } + } + $this->dic->user()->setPref('push_notification_provider', json_encode($active)); + $this->dic->user()->update(); + $this->dic->ui()->mainTemplate()->setOnScreenMessage( + $this->dic->ui()->mainTemplate()::MESSAGE_TYPE_SUCCESS, + $this->dic->language()->txt('saved_successfully') + ); + } + $this->dic->ui()->mainTemplate()->setContent($this->dic->ui()->renderer()->render($form)); + $this->dic->ui()->mainTemplate()->printToStdout(); + break; case 'addSubscription': $this->addSubscription(); break; case 'removeSubscription': $this->removeSubscription(); break; - case 'showSettings': + case 'showClientSettings': default: + $this->dic->tabs()->activateTab('client'); if (!($this->dic->http()->wrapper()->post()->has('auth') && $this->dic->http()->wrapper()->post()->has('perm'))) { $this->fetchClientData(); } - $this->showSettings(); + $this->showClientSettings(); } } @@ -113,7 +165,7 @@ protected function removeSubscription(): void } } - protected function showSettings(): void + protected function showClientSettings(): void { $this->dic->ui()->mainTemplate()->addJavaScript('assets/js/push-subscription.js'); @@ -163,7 +215,7 @@ protected function showSettings(): void */ protected function fetchClientData(): never { - $target = ILIAS_HTTP_PATH . '/' . $this->dic->ctrl()->getLinkTargetByClass(self::class, 'showSettings'); + $target = ILIAS_HTTP_PATH . '/' . $this->dic->ctrl()->getLinkTargetByClass(self::class, 'showClientSettings'); $this->dic->ui()->mainTemplate()->setContent($this->dic->ui()->renderer()->render( $this->dic->ui()->factory()->legacy()->content('')->withOnLoadCode( @@ -191,4 +243,26 @@ protected function fetchClientData(): never $this->dic->ui()->mainTemplate()->printToStdout(); $this->dic->http()->close(); } + + public function getForm(): Form + { + $provider = []; + $prefs = json_decode($this->dic->user()->getPref('push_notification_provider') ?? '[]'); + foreach ($this->pushProvider as $p) { + $provider[$p->getIdentifier()] = $this->dic->ui()->factory()->input()->field()->checkbox( + $p->getName($this->dic->language()), + $p->getDescription($this->dic->language()), + )->withValue(in_array($p->getIdentifier(), $prefs)); + } + + return $this->dic->ui()->factory()->input()->container()->form()->standard( + $this->dic->ctrl()->getLinkTargetByClass(self::class, 'saveUserSettings'), + [ + 'provider' => $this->dic->ui()->factory()->input()->field()->section( + $provider, + $this->dic->language()->txt('available_providers'), + ) + ] + ); + } } diff --git a/components/ILIAS/OnScreenChat/classes/class.ilOnScreenChatGUI.php b/components/ILIAS/OnScreenChat/classes/class.ilOnScreenChatGUI.php index 3db6445a9538..27164a96e7ea 100755 --- a/components/ILIAS/OnScreenChat/classes/class.ilOnScreenChatGUI.php +++ b/components/ILIAS/OnScreenChat/classes/class.ilOnScreenChatGUI.php @@ -311,7 +311,6 @@ public static function initializeFrontend(ilGlobalTemplateInterface $page): void $page->addJavaScript('assets/js/modal.min.js'); $page->addJavaScript('assets/js/socket.io.min.js'); $page->addJavaScript('assets/js/Chatroom.min.js'); - $page->addJavaScript('assets/js/moment-with-locales.min.js'); $page->addJavaScript('assets/js/BrowserNotifications.min.js'); $page->addJavaScript('assets/js/onscreenchat-notifications.js'); $page->addJavaScript('assets/js/moment.js'); diff --git a/components/ILIAS/OnScreenChat/phpunit.xml b/components/ILIAS/OnScreenChat/phpunit.xml index dd3871d35d69..c4683eec1534 100755 --- a/components/ILIAS/OnScreenChat/phpunit.xml +++ b/components/ILIAS/OnScreenChat/phpunit.xml @@ -10,6 +10,7 @@ displayDetailsOnTestsThatTriggerDeprecations="true" displayDetailsOnTestsThatTriggerNotices="true" displayDetailsOnSkippedTests="true" + displayDetailsOnPhpunitDeprecations="true" backupGlobals="false" bootstrap="./tests/bootstrap.php" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"> diff --git a/components/ILIAS/OnScreenChat/resources/onscreenchat.js b/components/ILIAS/OnScreenChat/resources/onscreenchat.js index 23c5c936bb6f..9dd6a4b72bef 100644 --- a/components/ILIAS/OnScreenChat/resources/onscreenchat.js +++ b/components/ILIAS/OnScreenChat/resources/onscreenchat.js @@ -17,6 +17,14 @@ (function(triggerSignal, $scope, $chat, dateTimeFormatter){ 'use strict'; + // Ensure historyRequested is always set when calling getHistory, but + // don't pollute external prototype chain of $chat, keep it inside a local object. + $chat = Object.create($chat); + $chat.getHistory = (original => (conversationId, oldestMessageTimestamp, reverseSorting = false) => { + getModule().historyRequested = {conversationId, oldestMessageTimestamp, reverseSorting}; + return original.call($chat, conversationId, oldestMessageTimestamp, reverseSorting); + })($chat.getHistory); + const TYPE_CONSTANT = 'osc'; const PREFIX_CONSTANT = TYPE_CONSTANT + '_'; const ACTION_SHOW_CONV = 'show'; @@ -101,6 +109,7 @@ storage: undefined, user: undefined, historyBlocked: false, + historyRequested: null, inputHeight: undefined, historyTimestamps: {}, printedMessages: {}, @@ -301,7 +310,7 @@ if (conversation == null) { let participant = { id: this.getAttribute('data-onscreenchat-userid'), - name: link.getAttribute('data-onscreenchat-username') + name: this.getAttribute('data-onscreenchat-username') }; if (typeof participant.id !== "undefined" && participant.id.length > 0) { @@ -758,7 +767,8 @@ const img = new Image(); img.src = item.profile_image; getModule().participantsImages[id] = img; - document.querySelector('[data-onscreenchat-avatar="'+id+'"]').setAttribute('src', img.src); + const node = document.querySelector('[data-onscreenchat-avatar="'+id+'"]'); + node && node.setAttribute('src', img.src); }); dfd.resolve(); @@ -874,6 +884,7 @@ }, onHistory: function (conversation) { + getModule().historyRequested = null; const container = document.querySelector('[data-onscreenchat-window="' + conversation.id + '"]'); const messages = Object.values(conversation.messages); const messagesHeight = container.querySelector('[data-onscreenchat-body]').getBoundingClientRect().height; @@ -978,6 +989,10 @@ return false; } + if((getModule().historyRequested || {}).oldestMessageTimestamp === null){ + return false; + } + if (!getModule().printedMessages.hasOwnProperty(conversation.id)) { getModule().printedMessages[conversation.id] = {}; } diff --git a/components/ILIAS/OpenIdConnect/classes/class.ilAuthProviderOpenIdConnect.php b/components/ILIAS/OpenIdConnect/classes/class.ilAuthProviderOpenIdConnect.php index 8aba3b2b070d..59400714c05f 100755 --- a/components/ILIAS/OpenIdConnect/classes/class.ilAuthProviderOpenIdConnect.php +++ b/components/ILIAS/OpenIdConnect/classes/class.ilAuthProviderOpenIdConnect.php @@ -24,6 +24,9 @@ class ilAuthProviderOpenIdConnect extends ilAuthProvider { private const OIDC_AUTH_IDTOKEN = 'oidc_auth_idtoken'; + private const ERR_AUTH_FAILED = 'auth_oidc_failed'; + private const ERR_AUTH_WRONG_LOGIN = 'err_wrong_login'; + private readonly ilOpenIdConnectSettings $settings; /** @var array $body */ private readonly ilLogger $logger; @@ -65,6 +68,13 @@ public function handleLogout(): void public function doAuthentication(ilAuthStatus $status): bool { + if (!$this->settings->getActive()) { + $status->setStatus(ilAuthStatus::STATUS_AUTHENTICATION_FAILED); + $status->setTranslatedReason($this->lng->txt(self::ERR_AUTH_FAILED)); + $this->logger->info('Authentication aborted, OIDC authentication is disabled'); + return false; + } + try { $oidc = $this->initClient(); $oidc->setRedirectURL(ILIAS_HTTP_PATH . '/openidconnect.php'); @@ -107,7 +117,7 @@ public function doAuthentication(ilAuthStatus $status): bool $this->logger->warning($e->getMessage()); $this->logger->warning((string) $e->getCode()); $status->setStatus(ilAuthStatus::STATUS_AUTHENTICATION_FAILED); - $status->setTranslatedReason($this->lng->txt('auth_oidc_failed')); + $status->setTranslatedReason($this->lng->txt(self::ERR_AUTH_FAILED)); return false; } } @@ -121,7 +131,7 @@ private function handleUpdate(ilAuthStatus $status, $user_info): ilAuthStatus $this->logger->error('Received invalid user credentials: '); $this->logger->dump($user_info, ilLogLevel::ERROR); $status->setStatus(ilAuthStatus::STATUS_AUTHENTICATION_FAILED); - $status->setReason('err_wrong_login'); + $status->setReason(self::ERR_AUTH_WRONG_LOGIN); return $status; } @@ -132,7 +142,7 @@ private function handleUpdate(ilAuthStatus $status, $user_info): ilAuthStatus $this->logger->error('Could not determine valid external account, value is empty or not a string.'); $this->logger->dump($user_info, ilLogLevel::ERROR); $status->setStatus(ilAuthStatus::STATUS_AUTHENTICATION_FAILED); - $status->setReason('err_wrong_login'); + $status->setReason(self::ERR_AUTH_WRONG_LOGIN); return $status; } @@ -156,7 +166,7 @@ private function handleUpdate(ilAuthStatus $status, $user_info): ilAuthStatus //$_GET['target'] = $this->getCredentials()->getRedirectionTarget();// TODO PHP8-REVIEW Please eliminate this. Mutating the request is not allowed and will not work in ILIAS 8. } catch (ilOpenIdConnectSyncForbiddenException) { $status->setStatus(ilAuthStatus::STATUS_AUTHENTICATION_FAILED); - $status->setReason('err_wrong_login'); + $status->setReason(self::ERR_AUTH_WRONG_LOGIN); } return $status; diff --git a/components/ILIAS/OpenIdConnect/classes/class.ilOpenIdConnectSettingsGUI.php b/components/ILIAS/OpenIdConnect/classes/class.ilOpenIdConnectSettingsGUI.php index 0fc0e0c19744..f2713078f5dc 100755 --- a/components/ILIAS/OpenIdConnect/classes/class.ilOpenIdConnectSettingsGUI.php +++ b/components/ILIAS/OpenIdConnect/classes/class.ilOpenIdConnectSettingsGUI.php @@ -61,7 +61,7 @@ class ilOpenIdConnectSettingsGUI private readonly Profile $profile; private ilToolbarGUI $toolbar; /** - * @var array|null + * @var array|null */ private ?array $user_defined_fields = null; private ilGlobalTemplateInterface $tpl; @@ -334,6 +334,16 @@ private function initSettingsForm(): ilPropertyFormGUI $user_attr->setRequired(true); $form->addItem($user_attr); + if (!$this->checkAccessBool('write')) { + foreach ($form->getItems() as $item) { + if ($item instanceof ilFormSectionHeaderGUI) { + continue; + } + + $item->setDisabled(true); + } + } + return $form; } @@ -444,7 +454,7 @@ private function scopes(): void $this->setSubTabs(self::STAB_SCOPES); $url = $this->settings->getProvider(); - if ($url !== '') { + if ($url !== '' && $this->checkAccessBool('write')) { $this->toolbar->setFormAction($this->ctrl->getFormAction($this)); $this->toolbar->addFormButton($this->lng->txt('auth_oidc_discover_scopes'), 'discoverScopesFromServer'); } @@ -458,14 +468,19 @@ private function initScopesForm(): Form $this->checkAccess('read'); $ui_container = []; - $ui_container = $this->buildScopeSelection($ui_container); + $has_write_access = $this->checkAccessBool('write'); + $ui_container = $this->buildScopeSelection($ui_container, $has_write_access); /** @var Form $form */ $form = $this->ui->input()->container()->form()->standard( - $this->ctrl->getFormAction($this, 'saveScopes'), + $has_write_access ? $this->ctrl->getFormAction($this, 'saveScopes') : $this->ctrl->getFormAction($this, 'scopes'), $ui_container )->withAdditionalTransformation($this->saniziteArrayElementsTrafo()); + if (!$has_write_access) { + $form = $form->withSubmitLabel($this->lng->txt('refresh')); + } + return $form; } @@ -493,7 +508,7 @@ private function discoverScopesFromServer(): void * @param list $ui_container * @return list */ - private function buildScopeSelection(array $ui_container): array + private function buildScopeSelection(array $ui_container, bool $has_write_access): array { $disabled_input = $this->ui ->input() @@ -551,6 +566,12 @@ private function buildScopeSelection(array $ui_container): array ); $ui_container[] = $group; + if (!$has_write_access) { + foreach ($ui_container as $key => $item) { + $ui_container[$key] = $item->withDisabled(true); + } + } + return $ui_container; } @@ -689,8 +710,7 @@ private function saveProfileMapping(): void } foreach ($this->user_defined_fields as $field) { - $field = self::UDF_STRING . $field->getIdentifier(); - $this->updateProfileMappingFieldValue($field->getIdentifier()); + $this->updateProfileMappingFieldValue(self::UDF_STRING . $field->getIdentifier()); } } @@ -767,6 +787,14 @@ private function initRolesForm(): ilPropertyFormGUI if ($this->checkAccessBool('write')) { $form->addCommandButton('saveRoles', $this->lng->txt('save')); + } else { + foreach ($form->getItems() as $item) { + if ($item instanceof ilFormSectionHeaderGUI) { + continue; + } + + $item->setDisabled(true); + } } return $form; @@ -926,6 +954,13 @@ private function initUserMappingForm(): Form $ui_container = $this->buildUserMappingInputFormUDF($field, $ui_container); } + $has_write_access = $this->checkAccessBool('write'); + if (!$has_write_access) { + foreach ($ui_container as $key => $item) { + $ui_container[$key] = $item->withDisabled(true); + } + } + $this->ctrl->setParameter( $this, 'opic', @@ -938,27 +973,32 @@ private function initUserMappingForm(): Form ->container() ->form() ->standard( - $this->ctrl->getFormAction($this, 'saveProfileMapping'), + $has_write_access ? $this->ctrl->getFormAction($this, 'saveProfileMapping') : $this->ctrl->getFormAction($this, 'profile'), $ui_container )->withAdditionalTransformation($this->saniziteArrayElementsTrafo()); + if (!$has_write_access) { + $form = $form->withSubmitLabel($this->lng->txt('refresh')); + } + return $form; } /** - * @param array{"field_id": int, "field_name": string} $definition - * @param list $ui_container + * @param list $ui_container * @return list */ - private function buildUserMappingInputFormUDF($definition, array $ui_container): array - { + private function buildUserMappingInputFormUDF( + ILIAS\User\Profile\Fields\Field $definition, + array $ui_container + ): array { $value = $this->settings->getProfileMappingFieldValue(self::UDF_STRING . $definition->getIdentifier()); $update = $this->settings->getProfileMappingFieldUpdate(self::UDF_STRING . $definition->getIdentifier()); $text_input = $this->ui ->input() ->field() - ->text($definition->getLabel(), '') + ->text($definition->getLabel($this->lng), '') ->withAdditionalTransformation($this->trimIfStringTrafo()) ->withValue($value) ->withDedicatedName(self::UDF_STRING . $definition->getIdentifier() . self::VALUE_STRING); diff --git a/components/ILIAS/OpenIdConnect/resources/openidconnect.php b/components/ILIAS/OpenIdConnect/resources/openidconnect.php index 422ad8cfca45..962410ec3eaa 100644 --- a/components/ILIAS/OpenIdConnect/resources/openidconnect.php +++ b/components/ILIAS/OpenIdConnect/resources/openidconnect.php @@ -23,12 +23,11 @@ } require_once '../vendor/composer/vendor/autoload.php'; +ilContext::init(ilContext::CONTEXT_SHIBBOLETH); + require_once __DIR__ . '/../artifacts/bootstrap_default.php'; entry_point('ILIAS Legacy Initialisation Adapter'); -ilContext::init(ilContext::CONTEXT_SHIBBOLETH); -ilInitialisation::initILIAS(); - global $DIC; ilStartUpGUI::setForcedCommand('doOpenIdConnectAuthentication'); diff --git a/components/ILIAS/OrgUnit/classes/Positions/Authorities/class.ilOrgUnitGenericMultiInputGUI.php b/components/ILIAS/OrgUnit/classes/Positions/Authorities/class.ilOrgUnitGenericMultiInputGUI.php index a40f34836326..5b69a40715b5 100755 --- a/components/ILIAS/OrgUnit/classes/Positions/Authorities/class.ilOrgUnitGenericMultiInputGUI.php +++ b/components/ILIAS/OrgUnit/classes/Positions/Authorities/class.ilOrgUnitGenericMultiInputGUI.php @@ -20,12 +20,12 @@ use ILIAS\UI\Factory as UIFactory; use ILIAS\UI\Renderer as UIRenderer; -use ILIAS\UI\Implementation\Render\Loader as UIRendererLoader; +use ILIAS\UI\Component\Symbol\Glyph\Glyph; /** - * Class ilDclGenericMultiInputGUI - * @author Michael Herren - * @author Theodor Truffer + * @author Michael Herren + * @author Theodor Truffer + * @deprecated This implementation MUST be replaced with a UI-components based one. */ class ilOrgUnitGenericMultiInputGUI extends ilFormPropertyGUI { @@ -48,14 +48,12 @@ class ilOrgUnitGenericMultiInputGUI extends ilFormPropertyGUI protected bool $show_label = false; protected bool $show_label_once = false; protected array $hidden_inputs = []; - protected bool $position_movable = false; protected int $counter = 0; protected bool $show_info = false; protected bool $render_one_for_empty_value = true; protected UIFactory $ui_factory; protected UIRenderer $ui_renderer; - protected UIRendererLoader $renderer_loader; public function __construct(string $a_title = "", string $a_postvar = "") { @@ -67,20 +65,14 @@ public function __construct(string $a_title = "", string $a_postvar = "") global $DIC; $this->ui_factory = $DIC['ui.factory']; $this->ui_renderer = $DIC['ui.renderer']; - $this->renderer_loader = $DIC["ui.component_renderer_loader"]; - } public function getHook(string $key) { - if (isset($this->hooks[$key])) { - return $this->hooks[$key]; - } - - return false; + return $this->hooks[$key] ?? false; } - public function addHook(string $key, array $options) + public function addHook(string $key, array $options): void { $this->hooks[$key] = $options; } @@ -108,7 +100,7 @@ public function getTemplateDir(): string return $this->template_dir; } - public function setTemplateDir(string $template_dir) + public function setTemplateDir(string $template_dir): void { $this->template_dir = $template_dir; } @@ -118,7 +110,7 @@ public function isShowLabel(): bool return $this->show_label; } - public function setShowLabel(bool $show_label) + public function setShowLabel(bool $show_label): void { $this->show_label = $show_label; } @@ -132,22 +124,21 @@ public function getInputs(): array return $this->inputs; } + #[\Override] public function setMulti(bool $a_multi, bool $a_sortable = false, bool $a_addremove = true): void { $this->multi = $a_multi; } - public function setValue(array $value) + public function setValue(array $value): void { $this->value = $value; foreach ($this->inputs as $key => $item) { if ($item instanceof \ilDateTimeInputGUI) { $item->setDate(new \ilDate($value[$key]['date'], IL_CAL_DATE)); - } else { - if (array_key_exists($key, $value)) { - $item->setValue((string) $value[$key]); - } + } elseif (array_key_exists($key, $value)) { + $item->setValue((string) $value[$key]); } } } @@ -176,9 +167,9 @@ public function setValueByArray(array $a_values): void * Check input, strip slashes etc. set alert, if input is not ok. * @return bool Input ok, true/false */ + #[\Override] public function checkInput(): bool { - $internal_fields = array_keys($this->inputs); $key = $this->getPostVar(); $post = $this->raw($key); @@ -188,8 +179,8 @@ public function checkInput(): bool array_key_exists(self::MULTI_FIELD_ID, $authority) && array_key_exists(self::MULTI_FIELD_OVER, $authority) && array_key_exists(self::MULTI_FIELD_SCOPE, $authority) && - trim($authority[self::MULTI_FIELD_OVER]) !== '' && - trim($authority[self::MULTI_FIELD_SCOPE]) !== '' + trim((string) $authority[self::MULTI_FIELD_OVER]) !== '' && + trim((string) $authority[self::MULTI_FIELD_SCOPE]) !== '' )) { $this->setAlert($this->lng->txt("msg_input_is_required")); return false; @@ -211,19 +202,17 @@ public function addCustomAttribute(string $key, string $value, bool $override = public function getCustomAttributes(): array { - return (array) $this->cust_attr; + return $this->cust_attr; } private function createInputPostVar(string $iterator_id, \ilFormPropertyGUI $input): string { if ($this->getMulti()) { return $this->getPostVar() . '[' . $iterator_id . '][' . $input->getPostVar() . ']'; - } else { - return $this->getPostVar() . '[' . $input->getPostVar() . ']'; } + return $this->getPostVar() . '[' . $input->getPostVar() . ']'; } - public function render(int|string $iterator_id = 0, bool $clean_render = false): string { $first_label = true; @@ -251,8 +240,10 @@ public function render(int|string $iterator_id = 0, bool $clean_render = false): $is_ta = true; break; default: - throw new \ilException("Method " . get_class($input) - . "::render() does not exists! You cannot use this input-type in ilMultiLineInputGUI"); + throw new \ilException( + "Method " . $input::class + . "::render() does not exists! You cannot use this input-type in ilMultiLineInputGUI" + ); } } @@ -327,19 +318,12 @@ public function render(int|string $iterator_id = 0, bool $clean_render = false): $tpl->setVariable('IMAGE_PLUS', $this->getGlyph('add')); $tpl->setVariable('IMAGE_MINUS', $this->getGlyph('remove')); $tpl->parseCurrentBlock(); - - if ($this->isPositionMovable()) { - $tpl->setCurrentBlock('multi_icons_move'); - $tpl->setVariable('IMAGE_UP', $this->getGlyph('up')); - $tpl->setVariable('IMAGE_DOWN', $this->getGlyph('down')); - $tpl->parseCurrentBlock(); - } } return $tpl->get(); } - public function initCSSandJS() + public function initCSSandJS(): void { $this->global_tpl->addJavascript('assets/js/generic_multi_line_input.js'); } @@ -361,25 +345,22 @@ public function insert(\ilTemplate $a_tpl): void $tpl->setVariable('IMAGE_MINUS', $this->getGlyph('remove')); $tpl->parseCurrentBlock(); $output .= $tpl->get(); - foreach ($this->line_values as $run => $data) { $object = $this; $object->setValue($data); $output .= $object->render($run); } + } elseif ($this->render_one_for_empty_value) { + $output .= $this->render(0, true); } else { - if ($this->render_one_for_empty_value) { - $output .= $this->render(0, true); - } else { - $tpl = new ilTemplate("tpl.prop_generic_multi_line.html", true, true, 'components/ILIAS/OrgUnit'); - $tpl->setVariable('ADDITIONAL_ATTRS', "id='multi_line_add_button'"); - $tpl->setCurrentBlock('multi_icons'); - $tpl->setVariable('IMAGE_PLUS', $this->getGlyph('add')); - $tpl->setVariable('IMAGE_MINUS', $this->getGlyph('remove')); - - $tpl->parseCurrentBlock(); - $output .= $tpl->get(); - } + $tpl = new ilTemplate("tpl.prop_generic_multi_line.html", true, true, 'components/ILIAS/OrgUnit'); + $tpl->setVariable('ADDITIONAL_ATTRS', "id='multi_line_add_button'"); + $tpl->setCurrentBlock('multi_icons'); + $tpl->setVariable('IMAGE_PLUS', $this->getGlyph('add')); + $tpl->setVariable('IMAGE_MINUS', $this->getGlyph('remove')); + + $tpl->parseCurrentBlock(); + $output .= $tpl->get(); } if ($this->getMulti()) { $output = "
{$output}
"; @@ -390,10 +371,12 @@ public function insert(\ilTemplate $a_tpl): void 'locale' => $this->lng->getLangKey() ]); global $tpl; - $tpl->addOnLoadCode(" + $tpl->addOnLoadCode( + " il.DataCollection.genericMultiLineInit('{$this->getFieldId()}',$config,$options); document.body.querySelector('#{$this->getFieldId()}').removeAttribute('style'); - "); + " + ); } $a_tpl->setCurrentBlock("prop_generic"); @@ -417,16 +400,6 @@ public function getToolbarHTML(): string return $this->render("toolbar"); } - public function isPositionMovable(): bool - { - return $this->position_movable; - } - - public function setPositionMovable(bool $position_movable): void - { - $this->position_movable = $position_movable; - } - public function isShowLabelOnce(): bool { return $this->show_label_once; @@ -461,14 +434,13 @@ public function setRenderOneForEmptyValue(bool $render_one_for_empty_value): voi private function getGlyph(string $which): string { $symbol = $this->ui_factory->symbol()->glyph()->$which(); - /** - * do not render an a-tag around the glyph. - * should be outdated and removed when Glyphs loose their Clickable - */ - $renderer = $this->renderer_loader->getRendererFor( - $symbol, - [$this->ui_factory->button()->bulky($symbol, '', '')] - ); - return $renderer->render($symbol, $this->ui_renderer); + + /** @var Glyph $symbol */ + $symbol = $symbol + ->withAdditionalOnLoadCode( + fn($id): string => "document.getElementById('" . $id . "').classList.add('{$which}_button');" + ); + + return $this->ui_renderer->render($symbol); } } diff --git a/components/ILIAS/OrgUnit/templates/default/tpl.prop_generic_multi_line.html b/components/ILIAS/OrgUnit/templates/default/tpl.prop_generic_multi_line.html index 43a581a61c8a..cbf6fb83f7c5 100755 --- a/components/ILIAS/OrgUnit/templates/default/tpl.prop_generic_multi_line.html +++ b/components/ILIAS/OrgUnit/templates/default/tpl.prop_generic_multi_line.html @@ -22,12 +22,12 @@
- {IMAGE_PLUS} - {IMAGE_MINUS} + {IMAGE_PLUS} + {IMAGE_MINUS} - {IMAGE_UP} - {IMAGE_DOWN} + {IMAGE_UP} + {IMAGE_DOWN}
-

\ No newline at end of file + diff --git a/components/ILIAS/Password/phpunit.xml b/components/ILIAS/Password/phpunit.xml index 897b86690056..2a3541fe8617 100755 --- a/components/ILIAS/Password/phpunit.xml +++ b/components/ILIAS/Password/phpunit.xml @@ -10,6 +10,7 @@ displayDetailsOnTestsThatTriggerDeprecations="true" displayDetailsOnTestsThatTriggerNotices="true" displayDetailsOnSkippedTests="true" + displayDetailsOnPhpunitDeprecations="true" backupGlobals="false" bootstrap="./tests/bootstrap.php" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"> diff --git a/components/ILIAS/PersonalWorkspace/classes/class.ilSingleUserShareGUI.php b/components/ILIAS/PersonalWorkspace/classes/class.ilSingleUserShareGUI.php index 8d989cb5d2e6..fc7e87106443 100755 --- a/components/ILIAS/PersonalWorkspace/classes/class.ilSingleUserShareGUI.php +++ b/components/ILIAS/PersonalWorkspace/classes/class.ilSingleUserShareGUI.php @@ -99,7 +99,7 @@ protected function saveShare(): void } $this->ctrl->returnToParent($this); } else { - $this->tpl->setOnScreenMessage('failure', $this->lng->txt('search_no_match'), true); + $this->tpl->setOnScreenMessage('failure', $this->lng->txt('wsp_search_no_match'), true); } } $this->ctrl->redirect($this); diff --git a/components/ILIAS/Poll/classes/class.ilObjPollGUI.php b/components/ILIAS/Poll/classes/class.ilObjPollGUI.php index 183c52b993c0..486177e82fef 100755 --- a/components/ILIAS/Poll/classes/class.ilObjPollGUI.php +++ b/components/ILIAS/Poll/classes/class.ilObjPollGUI.php @@ -274,7 +274,7 @@ public function executeCommand(): void // add entry to navigation history if (!$this->getCreationMode() && $this->getAccessHandler()->checkAccess("read", "", $this->node_id)) { - $link = $this->ctrl->getLinkTargetByClass("ilrepositorygui", "frameset"); + $link = $this->ctrl->getLinkTargetByClass("ilrepositorygui"); $this->nav_history->addItem($this->node_id, $link, "poll"); } diff --git a/components/ILIAS/Portfolio/Template/class.ilObjPortfolioTemplate.php b/components/ILIAS/Portfolio/Template/class.ilObjPortfolioTemplate.php index 49934f3c0c60..6070d2f502e8 100755 --- a/components/ILIAS/Portfolio/Template/class.ilObjPortfolioTemplate.php +++ b/components/ILIAS/Portfolio/Template/class.ilObjPortfolioTemplate.php @@ -81,9 +81,10 @@ protected function doCloneObject(ilObject2 $new_obj, int $a_target_id, ?int $a_c //copy online status if object is not the root copy object $cp_options = ilCopyWizardOptions::_getInstance($a_copy_id); + /* should be handled by object if (!$cp_options->isRootNode($this->getRefId())) { $new_obj->setOnline($this->isOnline()); - } + }*/ self::cloneBasics($this, $new_obj); diff --git a/components/ILIAS/Portfolio/Template/class.ilObjPortfolioTemplateGUI.php b/components/ILIAS/Portfolio/Template/class.ilObjPortfolioTemplateGUI.php index 92fda400c13b..08b9902c89a0 100755 --- a/components/ILIAS/Portfolio/Template/class.ilObjPortfolioTemplateGUI.php +++ b/components/ILIAS/Portfolio/Template/class.ilObjPortfolioTemplateGUI.php @@ -311,6 +311,7 @@ public function edit(): void $this->ctrl->redirectByClass(SettingsGUI::class); } + /* protected function getEditFormCustomValues(array &$a_values): void { $a_values["online"] = $this->object->isOnline(); @@ -329,8 +330,9 @@ protected function getEditFormCustomValues(array &$a_values): void ); parent::getEditFormCustomValues($a_values); - } + }*/ + /* protected function updateCustom(ilPropertyFormGUI $form): void { $obj_service = $this->object_service; @@ -360,7 +362,7 @@ protected function updateCustom(ilPropertyFormGUI $form): void ) ); } - + */ // // PAGES diff --git a/components/ILIAS/Portfolio/classes/Setup/class.ilPortfolioDBUpdateSteps.php b/components/ILIAS/Portfolio/classes/Setup/class.ilPortfolioDBUpdateSteps.php index 97abb03c3b09..f3c6e8478011 100755 --- a/components/ILIAS/Portfolio/classes/Setup/class.ilPortfolioDBUpdateSteps.php +++ b/components/ILIAS/Portfolio/classes/Setup/class.ilPortfolioDBUpdateSteps.php @@ -63,4 +63,26 @@ public function step_2(): void [2] ); } + + public function step_3(): void + { + $db = $this->db; + + $set = $db->query("SELECT * FROM usr_portfolio"); + while ($rec = $db->fetchAssoc($set)) { + $offline = ($rec["is_online"] == 1) ? 0 : 1; + $db->update( + "object_data", + [ + "offline" => ["integer", $offline] + ], + [ + "obj_id" => ["integer", $rec["id"]], + "type" => ["text", "prtf"] + ] + ); + + } + } + } diff --git a/components/ILIAS/Portfolio/classes/class.ilObjPortfolio.php b/components/ILIAS/Portfolio/classes/class.ilObjPortfolio.php index cb2cf65dfa99..1d7f99bdc8d2 100755 --- a/components/ILIAS/Portfolio/classes/class.ilObjPortfolio.php +++ b/components/ILIAS/Portfolio/classes/class.ilObjPortfolio.php @@ -67,6 +67,7 @@ public static function getPortfoliosOfUser( " ORDER BY od.title"); $res = array(); while ($rec = $ilDB->fetchAssoc($set)) { + $rec["is_online"] = !ilObject::lookupOfflineStatus($rec["id"]); $res[] = $rec; } return $res; diff --git a/components/ILIAS/Portfolio/classes/class.ilObjPortfolioBase.php b/components/ILIAS/Portfolio/classes/class.ilObjPortfolioBase.php index 515f77479166..1f9ab7e07a92 100755 --- a/components/ILIAS/Portfolio/classes/class.ilObjPortfolioBase.php +++ b/components/ILIAS/Portfolio/classes/class.ilObjPortfolioBase.php @@ -25,7 +25,6 @@ abstract class ilObjPortfolioBase extends ilObject2 { protected \ILIAS\Notes\Service $notes; protected ilSetting $setting; - protected bool $online = false; protected bool $comments = false; protected string $bg_color = ""; protected string $font_color = ""; @@ -53,28 +52,12 @@ public function __construct( // PROPERTIES // + /* public function setOnline(bool $a_value): void { $this->online = $a_value; - } - - public function isOnline(): bool - { - return $this->online; - } - - public static function lookupOnline(int $a_id): bool - { - global $DIC; - - $ilDB = $DIC->database(); + }*/ - $set = $ilDB->query("SELECT is_online" . - " FROM usr_portfolio" . - " WHERE id = " . $ilDB->quote($a_id, "integer")); - $row = $ilDB->fetchAssoc($set); - return (bool) $row["is_online"]; - } public function setPublicComments(bool $a_value): void { @@ -137,7 +120,6 @@ protected function doRead(): void " WHERE id = " . $ilDB->quote($this->id, "integer")); $row = $ilDB->fetchAssoc($set); - $this->setOnline((bool) $row["is_online"]); $this->setProfilePicture((bool) $row["ppic"]); $this->setBackgroundColor((string) $row["bg_color"]); $this->setFontColor((string) $row["font_color"]); @@ -159,9 +141,8 @@ protected function doCreate(bool $clone_mode = false): void { $ilDB = $this->db; - $ilDB->manipulate("INSERT INTO usr_portfolio (id,is_online)" . - " VALUES (" . $ilDB->quote($this->id, "integer") . "," . - $ilDB->quote(0, "integer") . ")"); + $ilDB->manipulate("INSERT INTO usr_portfolio (id)" . + " VALUES (" . $ilDB->quote($this->id, "integer") . ")"); } protected function doUpdate(): void @@ -169,7 +150,6 @@ protected function doUpdate(): void $ilDB = $this->db; $fields = array( - "is_online" => array("integer", $this->isOnline()), "ppic" => array("integer", $this->hasProfilePicture()), "bg_color" => array("text", $this->getBackgroundColor()), "font_color" => array("text", $this->getFontColor()) diff --git a/components/ILIAS/Portfolio/classes/class.ilObjPortfolioGUI.php b/components/ILIAS/Portfolio/classes/class.ilObjPortfolioGUI.php index da7b9fe9bc69..9449c09e883e 100755 --- a/components/ILIAS/Portfolio/classes/class.ilObjPortfolioGUI.php +++ b/components/ILIAS/Portfolio/classes/class.ilObjPortfolioGUI.php @@ -245,7 +245,7 @@ protected function setTitleAndDescription(): void ); if ($this->object && - !$this->object->isOnline()) { + $this->object->getOfflineStatus()) { $this->tpl->setAlertProperties(array( array("alert" => true, "property" => $this->lng->txt("status"), @@ -417,52 +417,6 @@ protected function toRepository(): void $this->ctrl->redirectByClass("ilportfoliorepositorygui", "show"); } - protected function initEditForm(): ilPropertyFormGUI - { - $form = new ilPropertyFormGUI(); - $form->setFormAction($this->ctrl->getFormAction($this)); - - // title - $ti = new ilTextInputGUI($this->lng->txt("title"), "title"); - $ti->setSize(min(40, ilObject::TITLE_LENGTH)); - $ti->setMaxLength(ilObject::TITLE_LENGTH); - $ti->setRequired(true); - $ti->setValue($this->object->getTitle()); - $form->addItem($ti); - - // :TODO: online - $online = new ilCheckboxInputGUI($this->lng->txt("online"), "online"); - $online->setChecked($this->object->isOnline()); - $form->addItem($online); - - $this->initEditCustomForm($form); - - $form->setTitle($this->lng->txt("prtf_edit_portfolio")); - $form->addCommandButton("update", $this->lng->txt("save")); - $form->addCommandButton("view", $this->lng->txt("cancel")); - - return $form; - } - - protected function getEditFormCustomValues(array &$a_values): void - { - $a_values["online"] = $this->object->isOnline(); - - parent::getEditFormCustomValues($a_values); - } - - protected function updateCustom(ilPropertyFormGUI $form): void - { - $this->object->setOnline($form->getInput("online")); - - // if portfolio is not online, it cannot be default - if (!$form->getInput("online")) { - ilObjPortfolio::setUserDefault($this->user_id, 0); - } - - parent::updateCustom($form); - } - // // PAGES @@ -874,7 +828,7 @@ protected function getOfflineMessage(): string $lng = $this->lng; $ctrl = $this->ctrl; - if (!$this->object->isOnline()) { + if ($this->object->getOfflineStatus()) { $f = $ui->factory(); $renderer = $ui->renderer(); @@ -898,7 +852,7 @@ protected function setOnlineAndShare(): void $lng = $this->lng; if (ilObjPortfolio::_lookupOwner($this->object->getId()) === $this->user_id) { - $this->object->setOnline(true); + $this->object->setOfflineStatus(false); $this->object->update(); $this->tpl->setOnScreenMessage('success', $lng->txt("prtf_has_been_set_online"), true); } diff --git a/components/ILIAS/Portfolio/classes/class.ilPortfolioAccessHandler.php b/components/ILIAS/Portfolio/classes/class.ilPortfolioAccessHandler.php index 84f2223b7466..d569175484d2 100755 --- a/components/ILIAS/Portfolio/classes/class.ilPortfolioAccessHandler.php +++ b/components/ILIAS/Portfolio/classes/class.ilPortfolioAccessHandler.php @@ -102,7 +102,7 @@ public function checkAccessOfUser( } // #11921 - if (!$pf->isOnline()) { + if ($pf->getOfflineStatus()) { return false; } diff --git a/components/ILIAS/Portfolio/classes/class.ilPortfolioRepositoryGUI.php b/components/ILIAS/Portfolio/classes/class.ilPortfolioRepositoryGUI.php index 88ddd7304f59..123506bd85df 100755 --- a/components/ILIAS/Portfolio/classes/class.ilPortfolioRepositoryGUI.php +++ b/components/ILIAS/Portfolio/classes/class.ilPortfolioRepositoryGUI.php @@ -330,7 +330,7 @@ protected function setOnline(): void $prt_id = $this->port_request->getPortfolioId(); if (ilObjPortfolio::_lookupOwner($prt_id) === $this->user_id) { $portfolio = new ilObjPortfolio($prt_id, false); - $portfolio->setOnline(true); + $portfolio->setOfflineStatus(false); $portfolio->update(); $this->tpl->setOnScreenMessage('success', $lng->txt("saved_successfully"), true); $ilCtrl->redirect($this, "show"); @@ -346,7 +346,7 @@ protected function setOffline(): void $prt_id = $this->port_request->getPortfolioId(); if (ilObjPortfolio::_lookupOwner($prt_id) === $this->user_id) { $portfolio = new ilObjPortfolio($prt_id, false); - $portfolio->setOnline(false); + $portfolio->setOfflineStatus(true); $portfolio->update(); $this->tpl->setOnScreenMessage('success', $lng->txt("saved_successfully"), true); $ilCtrl->redirect($this, "show"); @@ -368,9 +368,9 @@ protected function saveTitles(): void $portfolio->setTitle(ilUtil::stripSlashes($title)); if (in_array($id, $online)) { - $portfolio->setOnline(true); + $portfolio->setOfflineStatus(false); } else { - $portfolio->setOnline(false); + $portfolio->setOfflineStatus(true); } $portfolio->update(); diff --git a/components/ILIAS/PrivacySecurity/classes/class.ilSecuritySettingsChecker.php b/components/ILIAS/PrivacySecurity/classes/class.ilSecuritySettingsChecker.php index f4f740bd08f9..278d702a95b4 100755 --- a/components/ILIAS/PrivacySecurity/classes/class.ilSecuritySettingsChecker.php +++ b/components/ILIAS/PrivacySecurity/classes/class.ilSecuritySettingsChecker.php @@ -255,9 +255,9 @@ public static function generatePasswords(int $a_number): array ? max($security->getPasswordMaxLength(), $min) : max($min, 10); - $random = new ilRandom(); - $length = $random->int($min, $max); - $next = $random->int(1, 2); + $random = new \Random\Randomizer(); + $length = $random->getInt($min, $max); + $next = $random->getInt(1, 2); $vowels = "aeiou"; $vowels_uc = strtoupper($vowels); $consonants = "bcdfghjklmnpqrstvwxyz"; diff --git a/components/ILIAS/RTE/classes/class.ilRTEGlobalTemplate.php b/components/ILIAS/RTE/classes/class.ilRTEGlobalTemplate.php index 6b693382961b..cf48c9fd8143 100755 --- a/components/ILIAS/RTE/classes/class.ilRTEGlobalTemplate.php +++ b/components/ILIAS/RTE/classes/class.ilRTEGlobalTemplate.php @@ -283,8 +283,6 @@ public function printToStdout( $http = $DIC->http(); switch ($http->request()->getHeaderLine('Accept')) { default: - ilYuiUtil::initDom(); - header('P3P: CP="CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa OUR BUS IND UNI COM NAV INT CNT STA PRE"'); header('Content-type: text/html; charset=UTF-8'); diff --git a/components/ILIAS/Rating/classes/class.ilRating.php b/components/ILIAS/Rating/classes/class.ilRating.php index fea43048e838..a66bf33b55a1 100755 --- a/components/ILIAS/Rating/classes/class.ilRating.php +++ b/components/ILIAS/Rating/classes/class.ilRating.php @@ -162,6 +162,40 @@ public static function getRatingForUserAndObject( return (float) $rec["av"]; } + public static function getNumberOfFinishedCategoryRatingsForWikis( + int $a_obj_id, + int $sub_obj_id, + string $sub_obj_type, + array $all_category_ids + ): int { + global $DIC; + + $ilDB = $DIC->database(); + if (empty($all_category_ids)) { + return 0; + } + $category_count = count($all_category_ids); + $category_ids_csv = implode(",", array_map("intval", $all_category_ids)); + + $query = " + SELECT COUNT(*) cnt FROM ( + SELECT user_id + FROM il_rating + WHERE obj_id = " . $ilDB->quote($a_obj_id, ilDBConstants::T_INTEGER) . " + AND obj_type = " . $ilDB->quote("wiki", ilDBConstants::T_TEXT) . " + AND sub_obj_id = " . $ilDB->quote($sub_obj_id, ilDBConstants::T_INTEGER) . " + AND sub_obj_type = " . $ilDB->quote($sub_obj_type, ilDBConstants::T_TEXT) . " + AND category_id IN (" . $category_ids_csv . ") + GROUP BY user_id + HAVING count(DISTINCT category_id) = " . $ilDB->quote($category_count, "integer") . " + ) full_users + "; + + $set = $ilDB->query($query); + $rec = $ilDB->fetchAssoc($set); + return (int) ($rec["cnt"] ?? 0); + } + /** * Get overall rating for an object. * diff --git a/components/ILIAS/Rating/classes/class.ilRatingGUI.php b/components/ILIAS/Rating/classes/class.ilRatingGUI.php index b3800bb7d313..bf2a9aae83d9 100755 --- a/components/ILIAS/Rating/classes/class.ilRatingGUI.php +++ b/components/ILIAS/Rating/classes/class.ilRatingGUI.php @@ -333,6 +333,16 @@ protected function renderDetails( "avg" => 0, "cnt" => 0 ]; + + // Collect all category IDs + $category_ids = array_column($a_categories, "id"); + $overall_count = ilRating::getNumberOfFinishedCategoryRatingsForWikis( + $this->obj_id, + $this->sub_obj_id, + $this->sub_obj_type, + $category_ids + ); + foreach ($a_categories as $category) { $user_rating = round(ilRating::getRatingForUserAndObject( $this->obj_id, @@ -434,9 +444,9 @@ protected function renderDetails( $ttpl->parseCurrentBlock(); } - if ($overall_rating["cnt"] > 0) { + if ($overall_count > 0) { $ttpl->setCurrentBlock("votes_number_bl"); - $ttpl->setVariable("NUMBER_VOTES", sprintf($lng->txt("rating_number_votes"), $overall_rating["cnt"])); + $ttpl->setVariable("NUMBER_VOTES", sprintf($lng->txt("rating_number_votes"), $overall_count)); $ttpl->parseCurrentBlock(); } diff --git a/components/ILIAS/Registration/classes/class.ilAccountRegistrationGUI.php b/components/ILIAS/Registration/classes/class.ilAccountRegistrationGUI.php index 29de1ef475e9..20e24abe8582 100755 --- a/components/ILIAS/Registration/classes/class.ilAccountRegistrationGUI.php +++ b/components/ILIAS/Registration/classes/class.ilAccountRegistrationGUI.php @@ -96,7 +96,7 @@ public function __construct() public function executeCommand(): void { if ($this->registration_settings->getRegistrationType() === ilRegistrationSettings::IL_REG_DISABLED) { - $this->error->raiseError($this->lng->txt('reg_disabled'), $this->error->FATAL); + $this->error->raiseError($this->lng->txt('reg_disabled'), $this->error->MESSAGE); } $cmd = $this->ctrl->getCmd(); @@ -172,10 +172,12 @@ protected function initForm(): void // add information to role selection (if not hidden) $role = $this->buildRolesInput(); - if ($this->code_enabled) { - $role->setInfo($this->lng->txt('registration_code_role_info')); + if ($role !== null) { + if ($this->code_enabled) { + $role->setInfo($this->lng->txt('registration_code_role_info')); + } + $this->form->addItem($role); } - $this->form->addItem($role); // #11407 $domains = []; @@ -185,7 +187,7 @@ protected function initForm(): void } } if (count($domains)) { - $mail_obj = $this->form->getItemByPostVar('usr_email'); + $mail_obj = $this->form->getItemByPostVar('email'); $mail_obj->setInfo(sprintf( $this->lng->txt('reg_email_domains'), implode(', ', $domains) @@ -195,7 +197,7 @@ protected function initForm(): void // #14272 if ($this->registration_settings->getRegistrationType() === ilRegistrationSettings::IL_REG_ACTIVATION) { - $mail_obj = $this->form->getItemByPostVar('usr_email'); + $mail_obj = $this->form->getItemByPostVar('email'); if ($mail_obj) { // #16087 $mail_obj->setRequired(true); } @@ -243,7 +245,7 @@ public function saveForm(): ilGlobalTemplateInterface // valid codes override email domain check if (!$valid_code) { // validate email against restricted domains - $email = $this->form->getInput('usr_email'); + $email = $this->form->getInput('email'); if ($email) { // #10366 $domains = []; @@ -264,7 +266,7 @@ public function saveForm(): ilGlobalTemplateInterface } } if (!$mail_valid) { - $mail_obj = $this->form->getItemByPostVar('usr_email'); + $mail_obj = $this->form->getItemByPostVar('email'); $mail_obj->setAlert(sprintf( $this->lng->txt('reg_email_domains'), implode(', ', $domains) @@ -303,7 +305,7 @@ public function saveForm(): ilGlobalTemplateInterface } // assign by email else { $registration_role_assignments = new ilRegistrationRoleAssignments(); - $valid_role = $registration_role_assignments->getRoleByEmail($this->form->getInput('usr_email')); + $valid_role = $registration_role_assignments->getRoleByEmail($this->form->getInput('email')); } } @@ -644,6 +646,10 @@ protected function addLoginSectionToForm(): void protected function buildRolesInput(): ?ilFormPropertyGUI { + if (!$this->registration_settings->roleSelectionEnabled()) { + return null; + } + $options = []; foreach (ilObjRole::_lookupRegisterAllowed() as $role) { $options[$role['id']] = $role['title']; diff --git a/components/ILIAS/Registration/classes/class.ilRegistrationSettingsGUI.php b/components/ILIAS/Registration/classes/class.ilRegistrationSettingsGUI.php index cc95cb2b53ff..ae8e3b9112a6 100755 --- a/components/ILIAS/Registration/classes/class.ilRegistrationSettingsGUI.php +++ b/components/ILIAS/Registration/classes/class.ilRegistrationSettingsGUI.php @@ -255,6 +255,14 @@ public function initForm(): ilPropertyFormGUI if ($this->rbacsystem->checkAccess("write", $this->ref_id)) { $form_gui->addCommandButton('save', $this->lng->txt('save')); + } else { + foreach ($form_gui->getItems() as $item) { + if ($item instanceof ilFormSectionHeaderGUI) { + continue; + } + + $item->setDisabled(true); + } } return $form_gui; } @@ -294,7 +302,7 @@ public function initFormValues(ilPropertyFormGUI $formGUI): void public function view(): void { - $this->checkAccess('visible,read'); + $this->checkAccess('read'); $this->setSubTabs(); // edit new accout mail @@ -809,7 +817,7 @@ private function initRoleAccessLimitations(): void public function listCodes(): void { - $this->checkAccess('visible,read'); + $this->checkAccess('read'); $this->setSubTabs('registration_codes'); if ($this->checkAccessBool('write')) { $this->toolbar->addButton( diff --git a/components/ILIAS/Registration/src/RegistrationCodesTable.php b/components/ILIAS/Registration/src/RegistrationCodesTable.php index 5094dd5d82f9..eb94690c3b8a 100644 --- a/components/ILIAS/Registration/src/RegistrationCodesTable.php +++ b/components/ILIAS/Registration/src/RegistrationCodesTable.php @@ -97,6 +97,7 @@ public function getTableComponent(RegistrationFilterComponent $filter): DataTabl ) ->withFilter($filter->getFilterData()->getData()) ->withOrder(new Order('generated', Order::DESC)) + ->withRange(new Range(0, 100)) ->withRequest($this->http_request) ->withActions($this->getActions($url_builder, $action_parameter_token, $row_id_token)); } @@ -212,11 +213,15 @@ private function getRecords(Range $range, Order $order, ?array $filter_data): ar break; case 'absolute': - $result[$k]['alimit'] = $this->lng->txt('reg_access_limitation_mode_absolute_target') . - ': ' . - $date_format->applyTo( - (new DateTimeImmutable('@' . $code['alimitdt']))->setTimezone( - new DateTimeZone($this->actor->getTimeZone()) + $result[$k]['alimit'] = $this->lng->txt('reg_access_limitation_mode_absolute_target') + . ': ' + . ( + $code['alimitdt'] === null + ? '-' + : $this->actor->getDateFormat()->applyTo( + (new DateTimeImmutable($code['alimitdt']))->setTimezone( + new DateTimeZone($this->actor->getTimeZone()) + ) ) ); break; diff --git a/components/ILIAS/RemoteCourse/classes/class.ilObjRemoteCourse.php b/components/ILIAS/RemoteCourse/classes/class.ilObjRemoteCourse.php index 14de96b4a905..45dc053c0f4a 100755 --- a/components/ILIAS/RemoteCourse/classes/class.ilObjRemoteCourse.php +++ b/components/ILIAS/RemoteCourse/classes/class.ilObjRemoteCourse.php @@ -136,7 +136,8 @@ public static function _lookupOnline($a_obj_id) return false; case self::ACTIVATION_LIMITED: - return time() > $row->r_start && time < $row->r_end; + $now = time(); + return $now > $row->r_start && $now < $row->r_end; default: return false; @@ -183,7 +184,7 @@ protected function updateCustomFromECSContent(ilECSSetting $a_server, $a_ecs_con ); $import = new ilECSImport($a_server->getServerId(), $this->getId()); - $import->setContentId($a_ecs_content->courseID); + $import->setContentId($a_ecs_content->courseID ?? $a_ecs_content->id); $import->save(); } } diff --git a/components/ILIAS/RemoteGroup/classes/class.ilObjRemoteGroup.php b/components/ILIAS/RemoteGroup/classes/class.ilObjRemoteGroup.php index 0d54fd0bb946..ca941911791f 100755 --- a/components/ILIAS/RemoteGroup/classes/class.ilObjRemoteGroup.php +++ b/components/ILIAS/RemoteGroup/classes/class.ilObjRemoteGroup.php @@ -137,7 +137,8 @@ public static function _lookupOnline($a_obj_id) return false; case self::ACTIVATION_LIMITED: - return time() > $row->r_start && time < $row->r_end; + $now = time(); + return $now > $row->r_start && $now < $row->r_end; default: return false; diff --git a/components/ILIAS/Repository/Deletion/PermissionStandardAdapter.php b/components/ILIAS/Repository/Deletion/PermissionStandardAdapter.php index 48ca541020e7..fa3592095d3a 100644 --- a/components/ILIAS/Repository/Deletion/PermissionStandardAdapter.php +++ b/components/ILIAS/Repository/Deletion/PermissionStandardAdapter.php @@ -42,19 +42,22 @@ public function getRefIdsWithoutDeletePermission(array $ids): array $not_deletable[] = (int) $id; } - $node_data = $this->tree->getNodeData($id); - $subtree_nodes = $this->tree->getSubTree($node_data); + if ($this->tree->isInTree($id)) { + $node_data = $this->tree->getNodeData($id); + $subtree_nodes = $this->tree->getSubTree($node_data); - foreach ($subtree_nodes as $node) { - if ($node['type'] === 'rolf') { - continue; - } - if (!$this->access->checkAccess('delete', "", $node["child"])) { - $not_deletable[] = (int) $node["child"]; + foreach ($subtree_nodes as $node) { + if ($node['type'] === 'rolf') { + continue; + } + if (!$this->access->checkAccess('delete', "", $node["child"])) { + $not_deletable[] = (int) $node["child"]; + } } } } - return $not_deletable; + + return array_unique($not_deletable); } public function revokePermission(int $ref_id): void diff --git a/components/ILIAS/Repository/Deletion/TreeDBRepo.php b/components/ILIAS/Repository/Deletion/TreeDBRepo.php index c92457930cbc..1b5781afa371 100644 --- a/components/ILIAS/Repository/Deletion/TreeDBRepo.php +++ b/components/ILIAS/Repository/Deletion/TreeDBRepo.php @@ -42,7 +42,7 @@ public function getTrashedSubtrees(int $ref_id): array $tree_ids = []; while ($row = $db->fetchObject($r)) { - $tree_ids = (int) $row->tree; + $tree_ids[] = (int) $row->tree; } return $tree_ids; } diff --git a/components/ILIAS/Repository/Deletion/TreeInterface.php b/components/ILIAS/Repository/Deletion/TreeInterface.php index 1b11070339ad..6ccc5ef12375 100644 --- a/components/ILIAS/Repository/Deletion/TreeInterface.php +++ b/components/ILIAS/Repository/Deletion/TreeInterface.php @@ -46,4 +46,6 @@ public function moveToTrash(int $ref_id): bool; */ public function getTrashedSubtrees(int $ref_id): array; + public function isInTree(int $id): bool; + } diff --git a/components/ILIAS/Repository/Deletion/TreeStandardAdapter.php b/components/ILIAS/Repository/Deletion/TreeStandardAdapter.php index 5bcdc5c55988..cc46f1204883 100644 --- a/components/ILIAS/Repository/Deletion/TreeStandardAdapter.php +++ b/components/ILIAS/Repository/Deletion/TreeStandardAdapter.php @@ -42,6 +42,10 @@ public function getNodeData(int $id): array { return $this->tree->getNodeData($id); } + public function isInTree(int $id): bool + { + return $this->tree->isInTree($id); + } public function getSubTree(array $node): array { return $this->tree->getSubTree($node); @@ -68,7 +72,11 @@ public function getDeletedTreeNodeIds(array $ids): array public function getTree(int $tree_id): TreeInterface { - return new self(new \ilTree($tree_id), $this->user_id); + return new self( + $this->repo, + new \ilTree($tree_id), + $this->user_id + ); } public function getTrashTree(int $ref_id): TreeInterface @@ -80,7 +88,11 @@ public function getTrashTree(int $ref_id): TreeInterface if ($tree_id >= 0) { throw new NotInTrashException('Trying to delete node from trash, but node is not in trash: ' . $ref_id); } - return new self(new \ilTree($tree_id), $this->user_id); + return new self( + $this->repo, + new \ilTree($tree_id), + $this->user_id + ); } throw new NotInTrashException('Trying to delete node from trash, but no valid tree id found for node id: ' . $ref_id); } diff --git a/components/ILIAS/Repository/LastVisited/class.ilNavigationHistory.php b/components/ILIAS/Repository/LastVisited/class.ilNavigationHistory.php index bf84062c4a68..e4275596e755 100755 --- a/components/ILIAS/Repository/LastVisited/class.ilNavigationHistory.php +++ b/components/ILIAS/Repository/LastVisited/class.ilNavigationHistory.php @@ -100,15 +100,8 @@ public function addItem( return; } - // update entries in db - $ilDB->update( - "usr_data", - array( - "last_visited" => array("clob", serialize($this->getItems()))), - array( - "usr_id" => array("integer", $ilUser->getId())) - ); + $ilUser->updateLastVisited($this->getItems()); } /** @@ -140,47 +133,40 @@ public function getItems(): array } // less than 10? -> get items from db if (count($items) < 10 && $ilUser->getId() !== ANONYMOUS_USER_ID) { - $set = $ilDB->query( - "SELECT last_visited FROM usr_data " . - " WHERE usr_id = " . $ilDB->quote($ilUser->getId(), "integer") - ); - $rec = $ilDB->fetchAssoc($set); - $db_entries = unserialize((string) $rec["last_visited"], ["allowed_classes" => false]); + $db_entries = $ilUser->getLastVisited(); $cnt = count($items); - if (is_array($db_entries)) { - foreach ($db_entries as $rec) { - if ( - $cnt <= 10 && - !isset($items[$rec["ref_id"] . ":" . $rec["sub_obj_id"]]) && - $tree->isInTree((int) $rec["ref_id"]) && + foreach ($db_entries as $rec) { + if ( + $cnt <= 10 && + !isset($items[$rec["ref_id"] . ":" . $rec["sub_obj_id"]]) && + $tree->isInTree((int) $rec["ref_id"]) && + ( + !$objDefinition->isPluginTypeName($rec["type"]) || ( - !$objDefinition->isPluginTypeName($rec["type"]) || - ( - $component_repository->hasPluginId($rec["type"]) && - $component_repository->getPluginById($rec["type"])->isActive() - ) + $component_repository->hasPluginId($rec["type"]) && + $component_repository->getPluginById($rec["type"])->isActive() ) - ) { - $link = ($rec["goto_link"] != "") - ? $rec["goto_link"] - : ilLink::_getLink((int) $rec["ref_id"]); - if ($rec["sub_obj_id"] != "") { - $title = $rec["title"]; - } elseif ($rec["type"] === "sess") { - try { - $sess = new ilObjSession((int) $rec["ref_id"]); - $title = $sess->getPresentationTitle(); - } catch (ilObjectTypeMismatchException) { - $title = ilObject::_lookupTitle(ilObject::_lookupObjId((int) $rec["ref_id"])); - } - } else { + ) + ) { + $link = ($rec["goto_link"] != "") + ? $rec["goto_link"] + : ilLink::_getLink((int) $rec["ref_id"]); + if ($rec["sub_obj_id"] != "") { + $title = $rec["title"]; + } elseif ($rec["type"] === "sess") { + try { + $sess = new ilObjSession((int) $rec["ref_id"]); + $title = $sess->getPresentationTitle(); + } catch (ilObjectTypeMismatchException) { $title = ilObject::_lookupTitle(ilObject::_lookupObjId((int) $rec["ref_id"])); } - $items[$rec["ref_id"] . ":" . $rec["sub_obj_id"]] = array("id" => $rec["ref_id"] . ":" . $rec["sub_obj_id"], - "ref_id" => $rec["ref_id"], "link" => $link, "title" => $title, - "type" => $rec["type"], "sub_obj_id" => $rec["sub_obj_id"], "goto_link" => $rec["goto_link"]); - $cnt++; + } else { + $title = ilObject::_lookupTitle(ilObject::_lookupObjId((int) $rec["ref_id"])); } + $items[$rec["ref_id"] . ":" . $rec["sub_obj_id"]] = array("id" => $rec["ref_id"] . ":" . $rec["sub_obj_id"], + "ref_id" => $rec["ref_id"], "link" => $link, "title" => $title, + "type" => $rec["type"], "sub_obj_id" => $rec["sub_obj_id"], "goto_link" => $rec["goto_link"]); + $cnt++; } } } diff --git a/components/ILIAS/Repository/PluginSlot/class.ilRepositoryObjectPlugin.php b/components/ILIAS/Repository/PluginSlot/class.ilRepositoryObjectPlugin.php index af66890529c0..126fd4b72bff 100755 --- a/components/ILIAS/Repository/PluginSlot/class.ilRepositoryObjectPlugin.php +++ b/components/ILIAS/Repository/PluginSlot/class.ilRepositoryObjectPlugin.php @@ -48,18 +48,19 @@ public static function _getImagePath(string $a_ctype, string $a_cname, string $a } $component_repository = $DIC["component.repository"]; + $component_fac = $DIC["component.factory"]; - $plugin = $component_repository->getPluginByName($a_pname); + $plugin_info = $component_repository->getPluginByName($a_pname); $component = $component_repository->getComponentByTypeAndName($a_ctype, $a_cname); - $d2 = $component->getId() . "_" . $a_slot_id . "_" . $plugin->getId(); - + $d2 = $component->getId() . "_" . $a_slot_id . "_" . $plugin_info->getId(); $img = ilUtil::getImagePath($d2 . "/" . $a_img); if (is_int(strpos($img, "Customizing"))) { return $img; } - $d = $plugin->getPath(); + $plugin = $component_fac->getPlugin($plugin_info->getId()); + $d = $plugin->getRelativeDirectory(); return $d . "/templates/images/" . $a_img; } diff --git a/components/ILIAS/Repository/RecommendedContent/classes/class.ilDashboardRecommendedContentGUI.php b/components/ILIAS/Repository/RecommendedContent/classes/class.ilDashboardRecommendedContentGUI.php index 88fd7b8d50de..ed25b7a3799b 100755 --- a/components/ILIAS/Repository/RecommendedContent/classes/class.ilDashboardRecommendedContentGUI.php +++ b/components/ILIAS/Repository/RecommendedContent/classes/class.ilDashboardRecommendedContentGUI.php @@ -102,7 +102,7 @@ public function initData(): void public function getBlockType(): string { - return 'pdrecc'; + return 'dash_rc'; } public function addCustomCommandsToActionMenu(ilObjectListGUI $itemListGui, int $ref_id): void @@ -128,9 +128,4 @@ public function removeMultipleEnabled(): bool { return true; } - - public function getRemoveMultipleActionText(): string - { - return $this->lng->txt('pd_remove_multiple'); - } } diff --git a/components/ILIAS/Repository/Service/Form/class.FormAdapterGUI.php b/components/ILIAS/Repository/Service/Form/class.FormAdapterGUI.php index 10ba7eccbd04..872b23019d71 100755 --- a/components/ILIAS/Repository/Service/Form/class.FormAdapterGUI.php +++ b/components/ILIAS/Repository/Service/Form/class.FormAdapterGUI.php @@ -175,10 +175,14 @@ public function text( string $key, string $title, string $description = "", - ?string $value = null + ?string $value = null, + int $max_length = 0 ): self { $this->values[$key] = $value; $field = $this->ui->factory()->input()->field()->text($title, $description); + if ($max_length > 0) { + $field = $field->withMaxLength($max_length); + } if (!is_null($value)) { $field = $field->withValue($value); } @@ -406,10 +410,6 @@ public function radio( ): self { $this->values[$key] = $value; $field = $this->ui->factory()->input()->field()->radio($title, $description); - if (!is_null($value)) { - $field = $field->withOption($value, ""); // dummy to prevent exception, will be overwritten by radioOption - $field = $field->withValue($value); - } $this->addField( $key, $field @@ -421,6 +421,9 @@ public function radioOption(string $value, string $title, string $description = { if ($field = $this->getLastField()) { $field = $field->withOption($value, $title, $description); + if (($this->values[$this->last_key] ?? null) === $value) { + $field = $field->withValue($value); + } $this->replaceLastField($field); } return $this; @@ -659,6 +662,10 @@ protected function replaceLastField(FormInput $field): void if ($this->last_key !== "") { $this->fields[$this->last_key] = $field; } + // also replace the field in current optional, if it's in it + if (!is_null($this->current_optional) && isset($this->current_optional["fields"][$this->last_key])) { + $this->current_optional["fields"][$this->last_key] = $field; + } } public function getForm(): Form\Standard diff --git a/components/ILIAS/Repository/Service/IRSS/CollectionWrapperGUI.php b/components/ILIAS/Repository/Service/IRSS/CollectionWrapperGUI.php index 4ebe3b780a08..f1e68d09e6b8 100755 --- a/components/ILIAS/Repository/Service/IRSS/CollectionWrapperGUI.php +++ b/components/ILIAS/Repository/Service/IRSS/CollectionWrapperGUI.php @@ -52,7 +52,8 @@ public function getResourceCollectionGUI( Mode::DATA_TABLE, 100, $write, - $write + $write, + true ) ); } diff --git a/components/ILIAS/Repository/Service/IRSS/IRSSWrapper.php b/components/ILIAS/Repository/Service/IRSS/IRSSWrapper.php index 3a615267e41e..5401bc3beffe 100755 --- a/components/ILIAS/Repository/Service/IRSS/IRSSWrapper.php +++ b/components/ILIAS/Repository/Service/IRSS/IRSSWrapper.php @@ -451,7 +451,13 @@ public function hasContainerEntry( string $rid, string $entry ): bool { + if ($rid === "") { + return false; + } $zip_path = $this->stream($rid)?->getMetadata("uri"); + if (is_null($zip_path)) { + return false; + } try { $stream = Streams::ofFileInsideZIP( $zip_path, @@ -511,8 +517,12 @@ public function getContainerPaths( public function getContainerEntries( string $container_id ): array { + $rid = $this->getResourceIdForIdString($container_id); + if (is_null($rid)) { + return []; + } $reader = new ZipReader( - $this->irss->consume()->stream($this->getResourceIdForIdString($container_id))->getStream() + $this->irss->consume()->stream($rid)->getStream() ); return $reader->getStructure(); } @@ -521,8 +531,12 @@ public function getContainerEntriesOfPath( string $container_id, string $dir_path ): array { + $rid = $this->getResourceIdForIdString($container_id); + if (is_null($rid)) { + return []; + } $reader = new ZipReader( - $this->irss->consume()->stream($this->getResourceIdForIdString($container_id))->getStream() + $this->irss->consume()->stream($rid)->getStream() ); $entries = []; foreach ($reader->getStructure() as $path => $entry) { diff --git a/components/ILIAS/Repository/Service/Table/TableAdapterGUI.php b/components/ILIAS/Repository/Service/Table/TableAdapterGUI.php index 6d4495a57ef5..c42e5d20d4cf 100755 --- a/components/ILIAS/Repository/Service/Table/TableAdapterGUI.php +++ b/components/ILIAS/Repository/Service/Table/TableAdapterGUI.php @@ -156,9 +156,10 @@ public function singleRedirectAction( string $title, array $class_path, string $cmd = "", - string $id_param = "" + string $id_param = "", + bool $async = false ): self { - $this->addAction(self::SINGLE, $action, $title); + $this->addAction(self::SINGLE, $action, $title, $async); $act = $this->actions[$this->last_action_key] ?? false; if ($act && $act["type"] === self::SINGLE) { $act["redirect_class_path"] = $class_path; diff --git a/components/ILIAS/Repository/Service/class.InternalService.php b/components/ILIAS/Repository/Service/class.InternalService.php index f26ab2595715..d1dbe166a94c 100755 --- a/components/ILIAS/Repository/Service/class.InternalService.php +++ b/components/ILIAS/Repository/Service/class.InternalService.php @@ -22,54 +22,43 @@ use ILIAS\DI\Container; -/** - * Repository internal service - * @author Alexander Killing - */ class InternalService { - protected InternalDataService $data; - protected InternalRepoService $repo; - protected InternalDomainService $domain; - protected InternalGUIService $gui; + protected array $instance = []; - public function __construct(Container $DIC) + public function __construct( + protected Container $DIC) { - $this->data = new InternalDataService(); - - $this->repo = new InternalRepoService( - $this->data(), - $DIC->database() - ); - $this->domain = new InternalDomainService( - $DIC, - $this->repo, - $this->data - ); - $this->gui = new InternalGUIService( - $DIC, - $this->data, - $this->domain - ); } public function data(): InternalDataService { - return $this->data; + return $this->instance["data"] ??= new InternalDataService(); } public function repo(): InternalRepoService { - return $this->repo; + return $this->instance["repo"] ??= new InternalRepoService( + $this->data(), + $this->DIC->database() + ); } public function domain(): InternalDomainService { - return $this->domain; + return $this->instance["domain"] ??= new InternalDomainService( + $this->DIC, + $this->repo(), + $this->data() + ); } public function gui(): InternalGUIService { - return $this->gui; + return $this->instance["gui"] ??= new InternalGUIService( + $this->DIC, + $this->data(), + $this->domain() + ); } } diff --git a/components/ILIAS/Repository/Trash/class.ilRepUtil.php b/components/ILIAS/Repository/Trash/class.ilRepUtil.php index d01ac66dee5c..a2cf45bad260 100755 --- a/components/ILIAS/Repository/Trash/class.ilRepUtil.php +++ b/components/ILIAS/Repository/Trash/class.ilRepUtil.php @@ -90,7 +90,11 @@ public static function removeObjectsFromSystem( $node_data = $saved_tree->getNodeData($id); $subtree_nodes = $saved_tree->getSubTree($node_data); } else { - throw new ilRepositoryException('No valid tree id found for node id: ' . $id); + if (isset($affected_ids[$id])) { // see #43992 + continue; + } else { + throw new ilRepositoryException('No valid tree id found for node id: ' . $id); + } } } else { $node_data = $tree->getNodeData($id); diff --git a/components/ILIAS/Repository/classes/class.ilRepositoryGUI.php b/components/ILIAS/Repository/classes/class.ilRepositoryGUI.php index 8fdc66ff78c8..b69c69f693a1 100755 --- a/components/ILIAS/Repository/classes/class.ilRepositoryGUI.php +++ b/components/ILIAS/Repository/classes/class.ilRepositoryGUI.php @@ -134,14 +134,13 @@ public function executeCommand(): void ) { $this->ctrl->redirectToURL('./login.php?cmd=force_login'); } - $this->tool_context->claim()->repository(); // check creation mode // determined by "new_type" parameter $new_type = $this->request->getNewType(); - if ($new_type !== "" && $new_type !== "sty") { + if ($new_type !== "" && $new_type !== "sty" && $new_type !== "tax") { $this->creation_mode = true; $ilHelp->setScreenIdComponent($new_type); $ilHelp->setDefaultScreenId(ilHelpGUI::ID_PART_SCREEN, "create"); @@ -194,7 +193,6 @@ public function executeCommand(): void if ($cmd === "showRepTree") { $next_class = ""; } - switch ($next_class) { // forward asynchronous file uploads to the upload handler. // possible via dropzones in list guis or global template @@ -223,7 +221,6 @@ public function executeCommand(): void } $this->gui_obj->setCreationMode($this->creation_mode); $this->ctrl->setReturn($this, "return"); - $this->show(); } else { // $cmd = (string) $this->ctrl->getCmd(""); diff --git a/components/ILIAS/Repository/resources/repository.js b/components/ILIAS/Repository/resources/repository.js index 03a95a3c0b26..270f0eb74d88 100755 --- a/components/ILIAS/Repository/resources/repository.js +++ b/components/ILIAS/Repository/resources/repository.js @@ -58,7 +58,13 @@ il.repository.ui = (function (il, $) { const initModal = function (id) { const modal = document.getElementById(id); const buttons = modal.querySelectorAll('.modal-footer button'); - if (buttons.length >= 2) { + + // remove "save" button that has been added by the ks modal component + // since inputs have been added to the modal in getModalWithContent. + // this standard button is missing features like sending async requests + // and replacing the modal (which the adapter save button does) + const form = modal.querySelector('form'); + if (form && buttons.length > 2) { const penultimate = buttons[buttons.length - 2]; penultimate.remove(); } diff --git a/components/ILIAS/ResourceStorage/classes/Collections/View/Configuration.php b/components/ILIAS/ResourceStorage/classes/Collections/View/Configuration.php index f3eb86f091db..fe8d979cad08 100755 --- a/components/ILIAS/ResourceStorage/classes/Collections/View/Configuration.php +++ b/components/ILIAS/ResourceStorage/classes/Collections/View/Configuration.php @@ -36,6 +36,7 @@ public function __construct( private int $items_per_page = 100, private bool $user_can_upload = false, private bool $user_can_administrate = false, + private bool $append_duplicate_filenames_as_revision = false ) { } @@ -78,4 +79,9 @@ public function canUserAdministrate(): bool { return $this->user_can_administrate; } + + public function preventDuplicates(): bool + { + return $this->append_duplicate_filenames_as_revision; + } } diff --git a/components/ILIAS/ResourceStorage/classes/Collections/View/Request.php b/components/ILIAS/ResourceStorage/classes/Collections/View/Request.php index 28c7ea73a4f0..ddc3cdb2144a 100755 --- a/components/ILIAS/ResourceStorage/classes/Collections/View/Request.php +++ b/components/ILIAS/ResourceStorage/classes/Collections/View/Request.php @@ -197,4 +197,9 @@ public function canUserAdministrate(): bool { return $this->view_configuration->canUserAdministrate(); } + + public function preventDuplicates(): bool + { + return $this->view_configuration->preventDuplicates(); + } } diff --git a/components/ILIAS/ResourceStorage/classes/Collections/View/RequestToDataTable.php b/components/ILIAS/ResourceStorage/classes/Collections/View/RequestToDataTable.php index 6e6dbe49cea9..756bdecd58b2 100755 --- a/components/ILIAS/ResourceStorage/classes/Collections/View/RequestToDataTable.php +++ b/components/ILIAS/ResourceStorage/classes/Collections/View/RequestToDataTable.php @@ -145,7 +145,7 @@ private function initSortingAndOrdering(Range $range, Order $order): void $start = $range->getStart(); $length = $range->getLength(); - $this->data_provider->getViewRequest()->setPage((int) round($start / $length, 0, \RoundingMode::HalfTowardsZero)); + $this->data_provider->getViewRequest()->setPage((int) round($start / $length, 0, PHP_ROUND_HALF_DOWN)); $this->data_provider->getViewRequest()->setItemsPerPage($length); switch ($sort_field . '_' . $sort_direction) { diff --git a/components/ILIAS/ResourceStorage/classes/Collections/class.ilResourceCollectionGUI.php b/components/ILIAS/ResourceStorage/classes/Collections/class.ilResourceCollectionGUI.php index f6411c3bdd38..3d5afb0d39a1 100755 --- a/components/ILIAS/ResourceStorage/classes/Collections/class.ilResourceCollectionGUI.php +++ b/components/ILIAS/ResourceStorage/classes/Collections/class.ilResourceCollectionGUI.php @@ -229,7 +229,22 @@ public function upload(): void if (!$result->isOK()) { continue; } - $rid = $this->irss->manage()->upload( + // if activated, prevent duplicate files by checking filenames. in thjis case a new revision gets appended + if ($this->view_request->preventDuplicates()) { + $existing_rid = $this->irss->collection()->findIdentificationByNameIn( + $this->view_request->getCollection(), + $result->getName() + ); + if ($existing_rid !== null) { + $this->irss->manage()->appendNewRevision( + $existing_rid, + $upload_result, + $this->view_configuration->getStakeholder() + ); + } + } + + $rid = $existing_rid ?? $this->irss->manage()->upload( $result, $this->view_configuration->getStakeholder() ); diff --git a/components/ILIAS/ResourceStorage/classes/Container/DataProvider/TableDataProvider.php b/components/ILIAS/ResourceStorage/classes/Container/DataProvider/TableDataProvider.php index 688ef11da557..aa716c79ef1f 100755 --- a/components/ILIAS/ResourceStorage/classes/Container/DataProvider/TableDataProvider.php +++ b/components/ILIAS/ResourceStorage/classes/Container/DataProvider/TableDataProvider.php @@ -20,7 +20,6 @@ namespace ILIAS\components\ResourceStorage\Container\DataProvider; -use ILIAS\ResourceStorage\Services; use ILIAS\components\ResourceStorage\Container\View\Request; use ILIAS\components\ResourceStorage\Container\Wrapper\Dir; use ILIAS\components\ResourceStorage\Container\Wrapper\File; @@ -30,13 +29,10 @@ */ final class TableDataProvider { - private Services $irss; - public function __construct( private Request $view_request, ) { global $DIC; - $this->irss = $DIC->resourceStorage(); } public function getViewRequest(): Request @@ -72,7 +68,7 @@ public function getEntries(): array $type_a = $a instanceof Dir ? '' : $a->getMimeType(); $type_b = $b instanceof Dir ? '' : $b->getMimeType(); return match ($this->view_request->getSortation()) { - Request::BY_CREATION_DATE_DESC => $b->getModificationDate()->getTimestamp() <=> $a->getModificationDate()->getTimestamp(), + Request::BY_CREATION_DATE_DESC => $a->getModificationDate()->getTimestamp() <=> $b->getModificationDate()->getTimestamp(), Request::BY_CREATION_DATE_ASC => $b->getModificationDate()->getTimestamp() <=> $a->getModificationDate()->getTimestamp(), Request::BY_SIZE_DESC => $size_a - $size_b, Request::BY_SIZE_ASC => $size_b - $size_a, diff --git a/components/ILIAS/DataCollection/exceptions/ilDclNoTableviewException.php b/components/ILIAS/ResourceStorage/classes/Container/PathStatusInfo.php old mode 100644 new mode 100755 similarity index 73% rename from components/ILIAS/DataCollection/exceptions/ilDclNoTableviewException.php rename to components/ILIAS/ResourceStorage/classes/Container/PathStatusInfo.php index f626edbe6946..6ff53bc45137 --- a/components/ILIAS/DataCollection/exceptions/ilDclNoTableviewException.php +++ b/components/ILIAS/ResourceStorage/classes/Container/PathStatusInfo.php @@ -18,6 +18,13 @@ declare(strict_types=1); -class ilDclNoTableviewException extends ilException +namespace ILIAS\components\ResourceStorage\Container\View; + +/** + * @author Fabian Schmid + */ +interface PathStatusInfo { + public function statusTextForPath(string $path): ?string; + } diff --git a/components/ILIAS/ResourceStorage/classes/Container/View/Configuration.php b/components/ILIAS/ResourceStorage/classes/Container/View/Configuration.php index 0bcc3ae3343b..4ec1a59fb45e 100755 --- a/components/ILIAS/ResourceStorage/classes/Container/View/Configuration.php +++ b/components/ILIAS/ResourceStorage/classes/Container/View/Configuration.php @@ -22,7 +22,6 @@ use ILIAS\ResourceStorage\Stakeholder\ResourceStakeholder; use ILIAS\ResourceStorage\Resource\StorableContainerResource; -use ILIAS\Data\URI; use ILIAS\components\ResourceStorage\Container\View\ActionBuilder\ExternalSingleAction; use ILIAS\components\ResourceStorage\Container\View\ActionBuilder\TopAction; use ILIAS\UI\Component\Modal\RoundTrip; @@ -33,8 +32,8 @@ final class Configuration { private ExternalActionProvider $action_provider; - private ExternalActionProvider $top_action_provider; - private \ilCtrlInterface $ctrl; + + private ?PathStatusInfo $path_status_info = null; public function __construct( private StorableContainerResource $container, @@ -46,10 +45,20 @@ public function __construct( private bool $user_can_administrate = false, ) { global $DIC; - $this->ctrl = $DIC->ctrl(); $this->action_provider = new ExternalActionProvider(); } + public function withPathStatusInfo(PathStatusInfo $path_status_info): self + { + $this->path_status_info = $path_status_info; + return $this; + } + + public function getPathStatusInfo(): ?PathStatusInfo + { + return $this->path_status_info; + } + public function withExternalAction( string $label, string $target_gui, @@ -124,18 +133,6 @@ public function canUserAdministrate(): bool return $this->user_can_administrate; } - private function retrieveURI( - string $class, - string $command - ): URI { - return new URI( - ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTargetByClass( - $class, - $command - ) - ); - } - public function getActionProvider(): ExternalActionProvider { return $this->action_provider; diff --git a/components/ILIAS/ResourceStorage/classes/Container/View/Request.php b/components/ILIAS/ResourceStorage/classes/Container/View/Request.php index a42bf0c2e78c..599941fae6aa 100755 --- a/components/ILIAS/ResourceStorage/classes/Container/View/Request.php +++ b/components/ILIAS/ResourceStorage/classes/Container/View/Request.php @@ -110,6 +110,7 @@ final class Request private int $items_per_page = 20; private string $path = self::BASE; private ContainerWrapper $wrapper; + private ?PathStatusInfo $path_status_info; public function __construct( private \ilCtrlInterface $ctrl, @@ -117,7 +118,7 @@ public function __construct( private Configuration $view_configuration, ) { global $DIC; - $irss = $DIC->resourceStorage(); + $DIC->resourceStorage(); $this->ctrl = $DIC->ctrl(); $this->refinery = $DIC->refinery(); @@ -131,6 +132,7 @@ public function __construct( $view_configuration->getContainer()->getIdentification(), $this->path ); + $this->path_status_info = $view_configuration->getPathStatusInfo(); } public function init( @@ -142,7 +144,7 @@ public function init( $this->ctrl->saveParameter($container_resource_gui, self::P_PATH); } - public function buildURI(string $cmd): void + public function buildURI(): void { } @@ -185,7 +187,7 @@ public function setItemsPerPage(int $items_per_page): void $this->items_per_page = $items_per_page; } - public function getTitle(): ?string + public function getTitle(): string { return $this->view_configuration->getTitle(); } @@ -243,4 +245,9 @@ public function canUserAdministrate(): bool { return $this->view_configuration->canUserAdministrate(); } + + public function getPathStatusInfo(): ?PathStatusInfo + { + return $this->path_status_info; + } } diff --git a/components/ILIAS/ResourceStorage/classes/Container/View/RequestToDataTable.php b/components/ILIAS/ResourceStorage/classes/Container/View/RequestToDataTable.php index a7b4504b2b16..1afc8d7ebfc7 100755 --- a/components/ILIAS/ResourceStorage/classes/Container/View/RequestToDataTable.php +++ b/components/ILIAS/ResourceStorage/classes/Container/View/RequestToDataTable.php @@ -42,12 +42,13 @@ class RequestToDataTable implements RequestToComponents, DataRetrieval use Formatter; use URLSerializer; - public const F_TITLE = 'title'; - public const F_SIZE = 'size'; - public const F_TYPE = 'type'; - public const F_MODIFICATION_DATE = 'create_date'; - public const FIELD_TITLE = 'title'; - public const HOME = 'HOME'; + public const string F_TITLE = 'title'; + public const string F_SIZE = 'size'; + public const string F_TYPE = 'type'; + public const string F_STATUS = 'status'; + public const string F_MODIFICATION_DATE = 'create_date'; + public const string FIELD_TITLE = 'title'; + public const string HOME = 'HOME'; private \ILIAS\Data\Factory $data_factory; private \ILIAS\ResourceStorage\Services $irss; private Renderer $ui_renderer; @@ -159,29 +160,37 @@ public function getComponents(): \Generator yield $this->buildTable(); } - /** - * @return Data - */ protected function buildTable(): Data { + $columns = []; + + $columns[self::F_TITLE] = $this->ui_factory->table()->column()->text( + $this->language->txt(self::F_TITLE) + )->withIsSortable(true); + + if ($this->request->getPathStatusInfo() instanceof PathStatusInfo) { + $columns[self::F_STATUS] = $this->ui_factory->table()->column()->text( + $this->language->txt(self::F_STATUS) + )->withIsSortable(false); + } + + $columns[self::F_SIZE] = $this->ui_factory->table()->column()->text( + $this->language->txt(self::F_SIZE) + )->withIsSortable(true); + + $columns[self::F_MODIFICATION_DATE] = $this->ui_factory->table()->column()->date( + $this->language->txt(self::F_MODIFICATION_DATE), + $this->data_factory->dateFormat()->germanLong() + )->withIsSortable(true); + + $columns[self::F_TYPE] = $this->ui_factory->table()->column()->text( + $this->language->txt(self::F_TYPE) + )->withIsSortable(true); + return $this->ui_factory->table()->data( $this, $this->request->getTitle(), // we already have the title in the panel - [ - self::F_TITLE => $this->ui_factory->table()->column()->text( - $this->language->txt(self::F_TITLE) - )->withIsSortable(true), - self::F_SIZE => $this->ui_factory->table()->column()->text( - $this->language->txt(self::F_SIZE) - )->withIsSortable(true), - self::F_MODIFICATION_DATE => $this->ui_factory->table()->column()->date( - $this->language->txt(self::F_MODIFICATION_DATE), - $this->data_factory->dateFormat()->germanLong() - )->withIsSortable(true), - self::F_TYPE => $this->ui_factory->table()->column()->text( - $this->language->txt(self::F_TYPE) - )->withIsSortable(true), - ], + $columns, )->withRequest( $this->http->request() )->withActions( @@ -240,6 +249,9 @@ public function getRows( $this->hash($entry->getPathInsideZIP()), [ self::F_TITLE => $title, + self::F_STATUS => $this->request->getPathStatusInfo()?->statusTextForPath( + $entry->getPathInsideZIP() + ), self::F_SIZE => $is_dir ? '' : $this->formatSize($entry->getSize()), self::F_TYPE => $is_dir ? '' : $entry->getMimeType(), self::F_MODIFICATION_DATE => $entry->getModificationDate(), @@ -282,7 +294,7 @@ private function initSortingAndOrdering(Range $range, Order $order): void $start = $range->getStart(); $length = $range->getLength(); - $this->data_provider->getViewRequest()->setPage((int) round($start / $length, 0, \RoundingMode::HalfTowardsZero)); + $this->data_provider->getViewRequest()->setPage((int) round($start / $length, 0, PHP_ROUND_HALF_DOWN)); $this->data_provider->getViewRequest()->setItemsPerPage($length); switch ($sort_field . '_' . $sort_direction) { diff --git a/components/ILIAS/ResourceStorage/classes/Container/class.ilContainerResourceGUI.php b/components/ILIAS/ResourceStorage/classes/Container/class.ilContainerResourceGUI.php index a830c9cd2fa3..c4d1a5c03e9a 100755 --- a/components/ILIAS/ResourceStorage/classes/Container/class.ilContainerResourceGUI.php +++ b/components/ILIAS/ResourceStorage/classes/Container/class.ilContainerResourceGUI.php @@ -25,7 +25,6 @@ use ILIAS\UI\Component\Modal\InterruptiveItem\Standard; use ILIAS\FileUpload\Handler\BasicHandlerResult; use ILIAS\Filesystem\Stream\Streams; -use ILIAS\ResourceStorage\Identification\ResourceIdentification; use ILIAS\UI\Component\Input\Field\UploadHandler; use ILIAS\FileUpload\Handler\FileInfoResult; use ILIAS\components\ResourceStorage\Container\View\Configuration; @@ -37,7 +36,6 @@ use ILIAS\components\ResourceStorage\Container\View\ViewControlBuilder; use ILIAS\components\ResourceStorage\Container\View\UploadBuilder; use ILIAS\components\ResourceStorage\Container\View\PreviewDefinition; -use ILIAS\Refinery\ConstraintViolationException; use ILIAS\components\ResourceStorage\Container\View\StandardActionProvider; use ILIAS\components\ResourceStorage\Container\View\CombinedActionProvider; @@ -73,6 +71,8 @@ final class ilContainerResourceGUI implements UploadHandler * @var string */ public const CMD_POST_UPLOAD = 'postUpload'; + + /** * @var string */ @@ -183,7 +183,7 @@ final public function __construct( // CMD CLASS - protected function abortWithPermissionDenied(): void + private function abortWithPermissionDenied(): void { $this->main_tpl->setOnScreenMessage('failure', $this->language->txt('msg_no_perm_read'), true); $this->ctrl->redirect($this, self::CMD_INDEX); @@ -193,9 +193,7 @@ public function executeCommand(): void { if ($this->view_request->handleViewTitle()) { $title = $this->view_request->getTitle(); - if ($title !== null) { - $this->main_tpl->setTitle($title); - } + $this->main_tpl->setTitle($title); $description = $this->view_request->getDescription(); if ($description !== null) { $this->main_tpl->setDescription($description); @@ -357,7 +355,7 @@ private function download(): never ); } - protected function getPathsFromRequest(): array + private function getPathsFromRequest(): array { $unhash = fn(string $path): string => $this->unhash($path); $unhash_array = static fn(array $paths): array => array_map( @@ -403,7 +401,8 @@ private function unzip(): void $paths ); - $this->postUpload(); + $this->main_tpl->setOnScreenMessage('success', $this->language->txt('rids_appended'), true); + $this->ctrl->redirect($this, self::CMD_INDEX); } private function renderConfirmRemove(): void @@ -458,59 +457,6 @@ private function remove(): void $this->ctrl->redirect($this, self::CMD_INDEX); } - // REQUEST HELPERS - - /** - * @return ResourceIdentification[] - */ - private function getResourceIdsFromRequest(): array - { - $token = $this->action_builder->getUrlToken(); - $wrapper = $this->http->wrapper(); - $to_string = $this->refinery->kindlyTo()->string(); - $to_array_of_string = $this->refinery->to()->listOf($to_string); - $rid_string = null; - - if ($wrapper->query()->has($token->getName())) { - try { - $rid_string = $wrapper->query()->retrieve( - $token->getName(), - $to_string - ); - $rid_strings = explode(',', (string) $rid_string); - } catch (ConstraintViolationException) { - $rid_strings = $wrapper->query()->retrieve( - $token->getName(), - $to_array_of_string - ); - } - } - - if ($wrapper->post()->has('interruptive_items')) { - $rid_strings = $wrapper->post()->retrieve( - 'interruptive_items', - $to_array_of_string - ); - } - - if ($rid_strings[0] === 'ALL_OBJECTS') { - return $this->view_request->getWrapper()->getResourceIdentifications(); - } - - if ($rid_strings === []) { - return []; - } - $resource_identifications = []; - foreach ($rid_strings as $rid_string) { - $resource_identification = $this->irss->manage()->find($this->unhash($rid_string)); - if ($resource_identification === null) { - continue; - } - $resource_identifications[] = $resource_identification; - } - return $resource_identifications; - } - // UPLOAD HANDLER public function getFileIdentifierParameterName(): string diff --git a/components/ILIAS/ResourceStorage/src/Collection/Collections.php b/components/ILIAS/ResourceStorage/src/Collection/Collections.php index 7a4ea78091ca..391cd0ed8ee0 100755 --- a/components/ILIAS/ResourceStorage/src/Collection/Collections.php +++ b/components/ILIAS/ResourceStorage/src/Collection/Collections.php @@ -48,7 +48,7 @@ public function __construct(private ResourceBuilder $resource_builder, private C /** * @param string|null $collection_identification an existing collection identification or null for a new - * @param int|null $owner if this colletion is owned by a users, you must prvide it's owner ID + * @param int|null $owner if this colletion is owned by a users, you must prvide it's owner ID */ public function id( ?string $collection_identification = null, @@ -116,6 +116,17 @@ public function get( return $this->cache[$rcid] = $collection; } + public function findIdentificationByNameIn(ResourceCollection $collection, string $name): ?ResourceIdentification + { + foreach ($collection->getResourceIdentifications() as $identification) { + $resource = $this->resource_builder->get($identification); + if ($resource->getCurrentRevisionIncludingDraft()->getTitle() === $name) { + return $identification; + } + } + return null; + } + public function store(ResourceCollection $collection): bool { $this->cache[$collection->getIdentification()->serialize()] = $collection; diff --git a/components/ILIAS/ResourceStorage/src/Flavour/FlavourBuilder.php b/components/ILIAS/ResourceStorage/src/Flavour/FlavourBuilder.php index 4347622fee36..ce6f558a7ca8 100755 --- a/components/ILIAS/ResourceStorage/src/Flavour/FlavourBuilder.php +++ b/components/ILIAS/ResourceStorage/src/Flavour/FlavourBuilder.php @@ -251,7 +251,7 @@ protected function runMachine( try { $stream = $this->resource_builder->extractStream($revision); $stream->rewind(); - } catch (\Throwable) { + } catch (\Throwable $t) { // error while reading file stream, cannot process $this->events->notify(Event::FLAVOUR_BUILD_FAILED, new FlavourData($rid, $definition, $flavour, $t)); return $flavour; diff --git a/components/ILIAS/Saml/README.md b/components/ILIAS/Saml/README.md index 0785bad546f6..19dfac14e8e6 100755 --- a/components/ILIAS/Saml/README.md +++ b/components/ILIAS/Saml/README.md @@ -77,7 +77,7 @@ See: ## ILIAS Configuration Please change your ILIAS configuration according to the `Superglobal` behaviour described in -the [`HTTP README`](../../src/HTTP/README.md#dropinreplacements) +the [`HTTP README`](../HTTP/README.md#dropinreplacements) ## Config Changes in ILIAS 9 diff --git a/components/ILIAS/Saml/classes/class.ilAuthProviderSaml.php b/components/ILIAS/Saml/classes/class.ilAuthProviderSaml.php index 7ad59282fe7e..81afe48f9496 100755 --- a/components/ILIAS/Saml/classes/class.ilAuthProviderSaml.php +++ b/components/ILIAS/Saml/classes/class.ilAuthProviderSaml.php @@ -25,6 +25,7 @@ class ilAuthProviderSaml extends ilAuthProvider implements ilAuthProviderAccount private const string LOG_COMPONENT = 'auth'; private const string ERR_WRONG_LOGIN = 'err_wrong_login'; + private const string ERR_PROVIDER_INACTIVE = 'auth_saml_idp_deactivated_auth_failed'; private const string SESSION_TMP_ATTRIBUTES = 'tmp_attributes'; private const string SESSION_TMP_RETURN_TO = 'tmp_return_to'; @@ -83,6 +84,16 @@ private function determineUidFromAttributes(): void public function doAuthentication(ilAuthStatus $status): bool { + if (!$this->idp->isActive()) { + $this->getLogger()->info( + 'SAML IdP with id {idp_id} is not active.', + ['idp_id' => $this->idp->getIdpId()] + ); + $status->setStatus(ilAuthStatus::STATUS_AUTHENTICATION_FAILED); + $status->setTranslatedReason($this->lng->txt(self::ERR_PROVIDER_INACTIVE)); + return false; + } + if ([] === $this->attributes) { $this->getLogger()->warning('Could not parse any attributes from SAML response.'); $this->handleAuthenticationFail($status, self::ERR_WRONG_LOGIN); diff --git a/components/ILIAS/Saml/classes/class.ilSamlAppEventListener.php b/components/ILIAS/Saml/classes/class.ilSamlAppEventListener.php index 07deccb87dbb..8bc8c965b566 100755 --- a/components/ILIAS/Saml/classes/class.ilSamlAppEventListener.php +++ b/components/ILIAS/Saml/classes/class.ilSamlAppEventListener.php @@ -29,7 +29,7 @@ public static function handleEvent(string $a_component, string $a_event, array $ isset($a_parameter['used_external_auth_mode']) && $a_parameter['used_external_auth_mode']) { if ((int) $a_parameter['used_external_auth_mode'] === ilAuthUtils::AUTH_SAML) { $url = $a_parameter['logout_target'] ?? ILIAS_HTTP_PATH . '/login.php'; - $DIC->ctrl()->redirectToURL('saml.php?action=logout&logout_url=' . urlencode($url)); + $DIC->ctrl()->redirectToURL('saml.php?action=logout&logout_url=' . urlencode((string) $url)); } } } diff --git a/components/ILIAS/Saml/classes/class.ilSamlIdp.php b/components/ILIAS/Saml/classes/class.ilSamlIdp.php index 10f953b7066d..3b53f7dac410 100755 --- a/components/ILIAS/Saml/classes/class.ilSamlIdp.php +++ b/components/ILIAS/Saml/classes/class.ilSamlIdp.php @@ -166,8 +166,8 @@ public function bindDbRecord(array $record): void public function bindForm(StandardForm $form): void { $data = $form->getData(); - $this->setUidClaim((string) ($data[self::PROP_UID_CLAIM] ?? '')); - $this->setEntityId((string) ($data[self::PROP_ENTITY_ID] ?? '')); + $this->setUidClaim((string) ($data[self::PROP_UID_CLAIM] ?? $this->getUidClaim())); + $this->setEntityId((string) ($data[self::PROP_ENTITY_ID] ?? $this->getEntityId())); $this->setLocalLocalAuthenticationStatus((bool) ($data[self::PROP_ALLOW_LOCAL_AUTH] ?? false)); $this->setSynchronizationStatus(($data[self::PROP_SYNC_STATUS] ?? null) !== null); diff --git a/components/ILIAS/Saml/classes/class.ilSamlIdpTableGUI.php b/components/ILIAS/Saml/classes/class.ilSamlIdpTableGUI.php index 489fc6394a0d..c049f083d97c 100755 --- a/components/ILIAS/Saml/classes/class.ilSamlIdpTableGUI.php +++ b/components/ILIAS/Saml/classes/class.ilSamlIdpTableGUI.php @@ -64,8 +64,9 @@ public function get(): \ILIAS\UI\Component\Table\Data $this->lng->txt('auth_saml_idps'), $this->getColumnDefinition(), ) - ->withId(self::class) + ->withId(str_replace('\\', '', self::class)) ->withOrder(new \ILIAS\Data\Order('title', \ILIAS\Data\Order::ASC)) + ->withRange(new \ILIAS\Data\Range(0, 100)) ->withActions($this->getActions()) ->withRequest($this->http_request); } diff --git a/components/ILIAS/Saml/phpunit.xml b/components/ILIAS/Saml/phpunit.xml index 897b86690056..2a3541fe8617 100755 --- a/components/ILIAS/Saml/phpunit.xml +++ b/components/ILIAS/Saml/phpunit.xml @@ -10,6 +10,7 @@ displayDetailsOnTestsThatTriggerDeprecations="true" displayDetailsOnTestsThatTriggerNotices="true" displayDetailsOnSkippedTests="true" + displayDetailsOnPhpunitDeprecations="true" backupGlobals="false" bootstrap="./tests/bootstrap.php" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd"> diff --git a/components/ILIAS/Saml/resources/metadata.php b/components/ILIAS/Saml/resources/metadata.php index cca7d073754d..29a94db21827 100755 --- a/components/ILIAS/Saml/resources/metadata.php +++ b/components/ILIAS/Saml/resources/metadata.php @@ -23,10 +23,9 @@ } require_once '../vendor/composer/vendor/autoload.php'; +ilContext::init(ilContext::CONTEXT_SAML); + require_once __DIR__ . '/../artifacts/bootstrap_default.php'; entry_point('ILIAS Legacy Initialisation Adapter'); -ilContext::init(ilContext::CONTEXT_SAML); -ilInitialisation::initILIAS(); - \ILIAS\Saml\Module::metadata(); diff --git a/components/ILIAS/Saml/resources/module.php b/components/ILIAS/Saml/resources/module.php index ce57c8612ecd..1e4a29235edd 100644 --- a/components/ILIAS/Saml/resources/module.php +++ b/components/ILIAS/Saml/resources/module.php @@ -27,10 +27,9 @@ define('IL_COOKIE_PATH', $cookie_path); require_once '../vendor/composer/vendor/autoload.php'; +ilContext::init(ilContext::CONTEXT_SAML); + require_once __DIR__ . '/../artifacts/bootstrap_default.php'; entry_point('ILIAS Legacy Initialisation Adapter'); -ilContext::init(ilContext::CONTEXT_SAML); -ilInitialisation::initILIAS(); - \ILIAS\Saml\Module::run(); diff --git a/components/ILIAS/Saml/resources/saml.php b/components/ILIAS/Saml/resources/saml.php index 6a2d4c38e0bf..f5937d5a1f2a 100644 --- a/components/ILIAS/Saml/resources/saml.php +++ b/components/ILIAS/Saml/resources/saml.php @@ -23,12 +23,10 @@ } require_once '../vendor/composer/vendor/autoload.php'; -require_once __DIR__ . '/../artifacts/bootstrap_default.php'; -entry_point('ILIAS Legacy Initialisation Adapter'); - ilContext::init(ilContext::CONTEXT_SAML); -ilInitialisation::initILIAS(); +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); /** @var ILIAS\DI\Container $DIC */ $DIC->ctrl()->setTargetScript('ilias.php'); diff --git a/components/ILIAS/Scorm2004/Scorm2004.php b/components/ILIAS/Scorm2004/Scorm2004.php index 9a947ce303d9..6eec7d5acd15 100644 --- a/components/ILIAS/Scorm2004/Scorm2004.php +++ b/components/ILIAS/Scorm2004/Scorm2004.php @@ -87,5 +87,16 @@ public function getTarget(): string return "components/ILIAS/Scorm2004/templates/default/player.css"; } }; + + $contribute[Component\Resource\PublicAsset::class] = static fn() => new class () implements Component\Resource\PublicAsset { + public function getSource(): string + { + return "components/ILIAS/Scorm2004/templates/default/session_timeout.html"; + } + public function getTarget(): string + { + return "components/ILIAS/Scorm2004/templates/default/session_timeout.html"; + } + }; } } diff --git a/components/ILIAS/Scorm2004/classes/Setup/class.ilScorm2004DatabaseUpdateSteps.php b/components/ILIAS/Scorm2004/classes/Setup/class.ilScorm2004DatabaseUpdateSteps.php index 144a3f16cd1f..6e0b2ed6b640 100644 --- a/components/ILIAS/Scorm2004/classes/Setup/class.ilScorm2004DatabaseUpdateSteps.php +++ b/components/ILIAS/Scorm2004/classes/Setup/class.ilScorm2004DatabaseUpdateSteps.php @@ -1,7 +1,5 @@ db->modifyTableColumn("cp_dependency", "resourceid", array("type" => "text", "length" => 200, "notnull" => false, 'default' => null)); } + public function step_3(): void + { + if (!$this->db->indexExistsByFields('sahs_user', ['user_id'])) { + $this->db->addIndex('sahs_user', ['user_id'], 'i1'); + } + } } diff --git a/components/ILIAS/Scorm2004/classes/adlparser/SeqTreeBuilder.php b/components/ILIAS/Scorm2004/classes/adlparser/SeqTreeBuilder.php index e320a998b1ae..5c6ea5c34783 100755 --- a/components/ILIAS/Scorm2004/classes/adlparser/SeqTreeBuilder.php +++ b/components/ILIAS/Scorm2004/classes/adlparser/SeqTreeBuilder.php @@ -168,8 +168,8 @@ private function buildNode(object $node, ?object $seq, object $doc): SeqActivity } elseif ($curNode->localName === "completionThreshold") { $tempVal = $curNode->getAttribute("minProgressMeasure"); - if ($tempVal) { - $act->setCompletionThreshold($tempVal); + if ($tempVal != null && $tempVal != '') { + $act->setCompletionThreshold((float) $tempVal); } elseif ($curNode->nodeValue != null && $curNode->nodeValue != '') { $act->setCompletionThreshold((float) $curNode->nodeValue); } diff --git a/components/ILIAS/Scorm2004/classes/class.ilObjSCORM2004LearningModuleGUI.php b/components/ILIAS/Scorm2004/classes/class.ilObjSCORM2004LearningModuleGUI.php index cd9860e236fb..6f4c3cf9a7ef 100755 --- a/components/ILIAS/Scorm2004/classes/class.ilObjSCORM2004LearningModuleGUI.php +++ b/components/ILIAS/Scorm2004/classes/class.ilObjSCORM2004LearningModuleGUI.php @@ -27,11 +27,11 @@ * @author Uwe Kohnle * * @ilCtrl_Calls ilObjSCORM2004LearningModuleGUI: ilFileSystemGUI, ilObjectMetaDataGUI, ilPermissionGUI, ilLearningProgressGUI - * @ilCtrl_Calls ilObjSCORM2004LearningModuleGUI: ilInfoScreenGUI, ilSCORM2004ChapterGUI, ilSCORM2004SeqChapterGUI, ilSCORM2004PageNodeGUI, ilSCORM2004ScoGUI - * @ilCtrl_Calls ilObjSCORM2004LearningModuleGUI: ilCertificateGUI, ilObjStyleSheetGUI, ilNoteGUI, ilSCORM2004AssetGUI + * @ilCtrl_Calls ilObjSCORM2004LearningModuleGUI: ilInfoScreenGUI + * @ilCtrl_Calls ilObjSCORM2004LearningModuleGUI: ilObjStyleSheetGUI, ilNoteGUI * @ilCtrl_Calls ilObjSCORM2004LearningModuleGUI: ilCommonActionDispatcherGUI * @ilCtrl_Calls ilObjSCORM2004LearningModuleGUI: ilSCORM2004TrackingItemsPerScoFilterGUI, ilSCORM2004TrackingItemsPerUserFilterGUI, ilSCORM2004TrackingItemsTableGUI - * @ilCtrl_Calls ilObjSCORM2004LearningModuleGUI: ilLTIProviderObjectSettingGUI + * @ilCtrl_Calls ilObjSCORM2004LearningModuleGUI: ilLTIProviderObjectSettingGUI, ilCertificateGUI */ class ilObjSCORM2004LearningModuleGUI extends ilObjSCORMLearningModuleGUI { diff --git a/components/ILIAS/Scorm2004/classes/class.ilSCORM13PlayerGUI.php b/components/ILIAS/Scorm2004/classes/class.ilSCORM13PlayerGUI.php index 4b3c51858ebb..5e0162e0ab98 100755 --- a/components/ILIAS/Scorm2004/classes/class.ilSCORM13PlayerGUI.php +++ b/components/ILIAS/Scorm2004/classes/class.ilSCORM13PlayerGUI.php @@ -39,99 +39,99 @@ class ilSCORM13PlayerGUI * @var array>> */ private static array $schema = array // order of entries matters! - ( - 'package' => array( - 'user_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'user_id'), - 'learner_name' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'learner_name'), - 'slm_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'slm_id'), - 'mode' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'c_mode'), - 'credit' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'credit'), - ), - 'node' => array( - 'accesscount' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'accesscount'), - 'accessduration' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'accessduration'), - 'accessed' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'accessed'), - 'activityAbsoluteDuration' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'activityabsduration'), - 'activityAttemptCount' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'activityattemptcount'), - 'activityExperiencedDuration' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'activityexpduration'), - 'activityProgressStatus' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'activityprogstatus'), - 'attemptAbsoluteDuration' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'attemptabsduration'), - 'attemptCompletionAmount' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'attemptcomplamount'), - 'attemptCompletionStatus' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'attemptcomplstatus'), - 'attemptExperiencedDuration' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'attemptexpduration'), - 'attemptProgressStatus' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'attemptprogstatus'), - 'audio_captioning' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'audio_captioning'), - 'audio_level' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'audio_level'), - 'availableChildren' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'availablechildren'), - 'cmi_node_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_node_id'), - 'completion' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'completion'), - 'completion_status' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'completion_status'), - 'completion_threshold' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'completion_threshold'), - 'cp_node_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cp_node_id'), - 'created' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'created'), - 'credit' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'credit'), - 'delivery_speed' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'delivery_speed'), - 'entry' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_entry'), - 'exit' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_exit'), - 'language' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_language'), - 'launch_data' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'launch_data'), - 'learner_name' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'learner_name'), - 'location' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'location'), - 'max' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_max'), - 'min' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_min'), - 'mode' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_mode'), - 'modified' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'modified'), - 'progress_measure' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'progress_measure'), - 'raw' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_raw'), - 'scaled' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'scaled'), - 'scaled_passing_score' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'scaled_passing_score'), - 'session_time' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'session_time'), - 'success_status' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'success_status'), - 'suspend_data' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'suspend_data'), - 'total_time' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'total_time'), - 'user_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'user_id'), - ), - 'comment' => array( - 'cmi_comment_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_comment_id'), - 'cmi_node_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_node_id'), - 'comment' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_comment'), - 'timestamp' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_timestamp'), - 'location' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'location'), - 'sourceIsLMS' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'sourceislms'), - ), - 'correct_response' => array( - 'cmi_correct_response_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_correct_resp_id'), - 'cmi_interaction_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_interaction_id'), - 'pattern' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'pattern'), - ), - 'interaction' => array( - 'cmi_interaction_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_interaction_id'), - 'cmi_node_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_node_id'), - 'description' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'description'), - 'id' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'id'), - 'latency' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'latency'), - 'learner_response' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'learner_response'), - 'result' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'result'), - 'timestamp' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_timestamp'), - 'type' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_type'), - 'weighting' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'weighting'), - ), - 'objective' => array( - 'cmi_interaction_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_interaction_id'), - 'cmi_node_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_node_id'), - 'cmi_objective_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_objective_id'), - 'completion_status' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'completion_status'), - 'description' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'description'), - 'id' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'id'), - 'max' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_max'), - 'min' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_min'), - 'raw' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_raw'), - 'scaled' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'scaled'), - 'progress_measure' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'progress_measure'), - 'success_status' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'success_status'), - 'scope' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'scope'), - ), - ); + ( + 'package' => array( + 'user_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'user_id'), + 'learner_name' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'learner_name'), + 'slm_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'slm_id'), + 'mode' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'c_mode'), + 'credit' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'credit'), + ), + 'node' => array( + 'accesscount' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'accesscount'), + 'accessduration' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'accessduration'), + 'accessed' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'accessed'), + 'activityAbsoluteDuration' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'activityabsduration'), + 'activityAttemptCount' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'activityattemptcount'), + 'activityExperiencedDuration' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'activityexpduration'), + 'activityProgressStatus' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'activityprogstatus'), + 'attemptAbsoluteDuration' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'attemptabsduration'), + 'attemptCompletionAmount' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'attemptcomplamount'), + 'attemptCompletionStatus' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'attemptcomplstatus'), + 'attemptExperiencedDuration' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'attemptexpduration'), + 'attemptProgressStatus' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'attemptprogstatus'), + 'audio_captioning' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'audio_captioning'), + 'audio_level' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'audio_level'), + 'availableChildren' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'availablechildren'), + 'cmi_node_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_node_id'), + 'completion' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'completion'), + 'completion_status' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'completion_status'), + 'completion_threshold' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'completion_threshold'), + 'cp_node_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cp_node_id'), + 'created' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'created'), + 'credit' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'credit'), + 'delivery_speed' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'delivery_speed'), + 'entry' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_entry'), + 'exit' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_exit'), + 'language' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_language'), + 'launch_data' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'launch_data'), + 'learner_name' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'learner_name'), + 'location' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'location'), + 'max' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_max'), + 'min' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_min'), + 'mode' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_mode'), + 'modified' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'modified'), + 'progress_measure' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'progress_measure'), + 'raw' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_raw'), + 'scaled' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'scaled'), + 'scaled_passing_score' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'scaled_passing_score'), + 'session_time' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'session_time'), + 'success_status' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'success_status'), + 'suspend_data' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'suspend_data'), + 'total_time' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'total_time'), + 'user_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'user_id'), + ), + 'comment' => array( + 'cmi_comment_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_comment_id'), + 'cmi_node_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_node_id'), + 'comment' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_comment'), + 'timestamp' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_timestamp'), + 'location' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'location'), + 'sourceIsLMS' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'sourceislms'), + ), + 'correct_response' => array( + 'cmi_correct_response_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_correct_resp_id'), + 'cmi_interaction_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_interaction_id'), + 'pattern' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'pattern'), + ), + 'interaction' => array( + 'cmi_interaction_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_interaction_id'), + 'cmi_node_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_node_id'), + 'description' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'description'), + 'id' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'id'), + 'latency' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'latency'), + 'learner_response' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'learner_response'), + 'result' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'result'), + 'timestamp' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_timestamp'), + 'type' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_type'), + 'weighting' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'weighting'), + ), + 'objective' => array( + 'cmi_interaction_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_interaction_id'), + 'cmi_node_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_node_id'), + 'cmi_objective_id' => array('pattern' => null, 'permission' => self::NONE, 'default' => null, 'dbfield' => 'cmi_objective_id'), + 'completion_status' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'completion_status'), + 'description' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'description'), + 'id' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'id'), + 'max' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_max'), + 'min' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_min'), + 'raw' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'c_raw'), + 'scaled' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'scaled'), + 'progress_measure' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'progress_measure'), + 'success_status' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'success_status'), + 'scope' => array('pattern' => null, 'permission' => self::READWRITE, 'default' => null, 'dbfield' => 'scope'), + ), + ); private int $userId; private array $flat_structure; @@ -464,8 +464,6 @@ public function getPlayer(): void $this->tpl->setVariable('JSON_LANGSTRINGS', json_encode($langstrings)); - // include_once("../components/ILIAS/YUI/classes/class.ilYuiUtil.php"); - // $this->tpl->setVariable('YUI_PATH', ilYuiUtil::getLocalPath()); // $this->tpl->setVariable('TREE_JS', "../components/ILIAS/UIComponent/NestedList/js/ilNestedList.js"); $this->tpl->setVariable('TREE_JS', "components/ILIAS/Scorm2004/scripts/ilNestedList.js"); foreach ($langstrings as $key => $value) { @@ -904,7 +902,9 @@ public function writeSharedData(int $sco_node_id): void $ilUser = $DIC->user(); $g_data = json_decode(file_get_contents('php://input')); - if ($g_data == null) return; + if ($g_data == null) { + return; + } //Step 1: Get the writeable stores for this SCO that already have values $query = 'SELECT dm.target_id, sd.store ' @@ -1697,7 +1697,6 @@ public function debugGUI(): void $logfile = $this->logFileName() . ".html"; $this->tpl->setVariable('LOGFILE', $this->logFileName() . ".html"); $this->tpl->setVariable('FILES_DATA', json_encode($this->getLogFileList($lng->txt("debugwindow_delete"), $lng->txt("debugwindow_download"), $lng->txt("debugwindow_open")))); - $this->tpl->setVariable('PATH_YUI', ilYuiUtil::getLocalPath()); //} echo $this->tpl->get("DEFAULT", true); } diff --git a/components/ILIAS/Scorm2004/classes/ilSCORM13Package.php b/components/ILIAS/Scorm2004/classes/ilSCORM13Package.php index e5cf0313bf34..f71526e1f9a7 100755 --- a/components/ILIAS/Scorm2004/classes/ilSCORM13Package.php +++ b/components/ILIAS/Scorm2004/classes/ilSCORM13Package.php @@ -341,11 +341,10 @@ public function dbImport(object $node, ?int &$lft = 1, ?int $depth = 1, ?int $pa break; case 'language': $names[] = 'c_language'; break; - // case 'condition': $names[] = 'c_condition'; - // break; + case 'condition': $names[] = 'c_condition'; + break; case 'operator': $names[] = 'c_operator'; break; - // case 'condition': $names[] = 'c_condition';break; case 'readnormalizedmeasure': $names[] = 'readnormalmeasure'; break; case 'writenormalizedmeasure': $names[] = 'writenormalmeasure'; @@ -354,7 +353,6 @@ public function dbImport(object $node, ?int &$lft = 1, ?int $depth = 1, ?int $pa break; case 'primary': $names[] = 'c_primary'; break; - // case 'minnormalizedmeasure': $names[] = 'minnormalmeasure';break; case 'persistpreviousattempts': $names[] = 'persistprevattempts'; break; case 'identifier': $names[] = 'c_identifier'; diff --git a/components/ILIAS/Scorm2004/data/.htaccess b/components/ILIAS/Scorm2004/data/.htaccess deleted file mode 100755 index 3a4288278871..000000000000 --- a/components/ILIAS/Scorm2004/data/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/components/ILIAS/Scorm2004/data/db-schema.xml b/components/ILIAS/Scorm2004/data/db-schema.xml deleted file mode 100755 index 8c111282cb1d..000000000000 --- a/components/ILIAS/Scorm2004/data/db-schema.xml +++ /dev/null @@ -1,581 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - -
- - - - - - - - - -
- - - - - - - - - - - - - - - -
- - - - - - - - - - - - -
- - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - -
- - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -
-
diff --git a/components/ILIAS/Scorm2004/data/db.xsl b/components/ILIAS/Scorm2004/data/db.xsl deleted file mode 100755 index ac16fcd80f68..000000000000 --- a/components/ILIAS/Scorm2004/data/db.xsl +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - CREATE TABLE ( - ); - - - - - - - `` - - - - INTEGER - - - - VARCHAR() - - - - TEXT - - - - TINYINT - - - - REAL - - - VARCHAR(20) - - - - BLOB - - - - PRIMARY KEY AUTO_INCREMENT - - - DEFAULT '' - - - - , - - - - - - - - ALTER TABLE ADD PRIMARY KEY(); - - - - - - CREATE INDEX ON ( ); - - - diff --git a/components/ILIAS/Scorm2004/data/empty.sql b/components/ILIAS/Scorm2004/data/empty.sql deleted file mode 100755 index 4b1e79811ebb..000000000000 --- a/components/ILIAS/Scorm2004/data/empty.sql +++ /dev/null @@ -1,22 +0,0 @@ -DELETE FROM cmi_comment ; -DELETE FROM cmi_correct_response ; -DELETE FROM cmi_interaction ; -DELETE FROM cmi_node ; -DELETE FROM cmi_objective ; -DELETE FROM cp_auxilaryResource ; -DELETE FROM cp_condition ; -DELETE FROM cp_dependency ; -DELETE FROM cp_file ; -DELETE FROM cp_hideLMSUI ; -DELETE FROM cp_item ; -DELETE FROM cp_manifest ; -DELETE FROM cp_mapinfo ; -DELETE FROM cp_node ; -DELETE FROM cp_objective ; -DELETE FROM cp_organization ; -DELETE FROM cp_package ; -DELETE FROM cp_resource ; -DELETE FROM cp_rule ; -DELETE FROM cp_sequencing ; -DELETE FROM cp_tree ; -VACUUM ; diff --git a/components/ILIAS/Scorm2004/data/mysql_schema.sql b/components/ILIAS/Scorm2004/data/mysql_schema.sql deleted file mode 100755 index 032a367a07d1..000000000000 --- a/components/ILIAS/Scorm2004/data/mysql_schema.sql +++ /dev/null @@ -1,133 +0,0 @@ - -CREATE TABLE cmi_comment(`cmi_comment_id` INTEGER PRIMARY KEY AUTO_INCREMENT, `cmi_node_id` INTEGER, `comment` TEXT, `timestamp` VARCHAR(20), `location` VARCHAR(255), `sourceIsLMS` TINYINT ); -CREATE INDEX cmi_comment_id ON cmi_comment(cmi_comment_id); - -CREATE INDEX cmi_id ON cmi_comment(cmi_node_id); - -CREATE TABLE cmi_correct_response(`cmi_correct_response_id` INTEGER PRIMARY KEY AUTO_INCREMENT, `cmi_interaction_id` INTEGER, `pattern` VARCHAR(255) ); -CREATE INDEX cmi_correct_response_id ON cmi_correct_response(cmi_correct_response_id); - -CREATE INDEX cmi_correct_responsecmi_interaction_id ON cmi_correct_response(cmi_interaction_id); - -CREATE TABLE cmi_interaction(`cmi_interaction_id` INTEGER PRIMARY KEY AUTO_INCREMENT, `cmi_node_id` INTEGER, `description` TEXT, `id` VARCHAR(255), `latency` VARCHAR(20), `learner_response` TEXT, `result` TEXT, `timestamp` VARCHAR(20), `type` VARCHAR(32), `weighting` REAL ); -CREATE INDEX cmi_interaction_id ON cmi_interaction(cmi_interaction_id); - -CREATE INDEX id ON cmi_interaction(id); - -CREATE INDEX type ON cmi_interaction(type); - -CREATE TABLE cmi_node(`accesscount` INTEGER, `accessduration` VARCHAR(20), `accessed` VARCHAR(20), `activityAbsoluteDuration` VARCHAR(20), `activityAttemptCount` INTEGER, `activityExperiencedDuration` VARCHAR(20), `activityProgressStatus` TINYINT, `attemptAbsoluteDuration` VARCHAR(20), `attemptCompletionAmount` REAL, `attemptCompletionStatus` TINYINT, `attemptExperiencedDuration` VARCHAR(20), `attemptProgressStatus` TINYINT, `audio_captioning` INTEGER, `audio_level` REAL, `availableChildren` VARCHAR(255), `cmi_node_id` INTEGER PRIMARY KEY AUTO_INCREMENT, `completion` REAL, `completion_status` VARCHAR(32), `completion_threshold` VARCHAR(32), `cp_node_id` INTEGER, `created` VARCHAR(20), `credit` VARCHAR(32), `delivery_speed` REAL, `exit` VARCHAR(255), `language` VARCHAR(5), `launch_data` TEXT, `learner_name` VARCHAR(255), `location` VARCHAR(255), `max` REAL, `min` REAL, `mode` VARCHAR(20), `modified` VARCHAR(20), `progress_measure` REAL, `raw` REAL, `scaled` REAL, `scaled_passing_score` REAL, `session_time` VARCHAR(20), `success_status` VARCHAR(255), `suspend_data` TEXT, `total_time` VARCHAR(20), `user_id` INTEGER ); -CREATE INDEX cmi_itemcp_id ON cmi_node(cp_node_id); - -CREATE INDEX completion_status ON cmi_node(completion_status); - -CREATE INDEX credit ON cmi_node(credit); - -CREATE INDEX id ON cmi_node(cmi_node_id); - -CREATE INDEX user_id ON cmi_node(user_id); - -CREATE TABLE cmi_objective(`cmi_interaction_id` INTEGER, `cmi_node_id` INTEGER, `cmi_objective_id` INTEGER PRIMARY KEY AUTO_INCREMENT, `completion_status` VARCHAR(32), `description` TEXT, `id` VARCHAR(255), `max` REAL, `min` REAL, `raw` REAL, `scaled` REAL, `progress_measure` REAL, `success_status` VARCHAR(32), `scope` VARCHAR(16) ); -CREATE INDEX cmi_objective_id ON cmi_objective(cmi_objective_id); - -CREATE INDEX cmi_objectivecmi_interaction_id ON cmi_objective(cmi_interaction_id); - -CREATE INDEX id ON cmi_objective(id); - -CREATE INDEX success_status ON cmi_objective(success_status); - -CREATE TABLE cp_auxilaryResource(`auxiliaryResourceID` VARCHAR(255), `cp_node_id` INTEGER, `purpose` VARCHAR(255) ); -ALTER TABLE cp_auxilaryResource ADD PRIMARY KEY(cp_node_id); - -CREATE TABLE cp_condition(`condition` VARCHAR(50), `cp_node_id` INTEGER, `measureThreshold` VARCHAR(50), `operator` VARCHAR(50), `referencedObjective` VARCHAR(50) ); -ALTER TABLE cp_condition ADD PRIMARY KEY(cp_node_id); - -CREATE TABLE cp_dependency(`cp_node_id` INTEGER, `resourceId` VARCHAR(50) ); -ALTER TABLE cp_dependency ADD PRIMARY KEY(cp_node_id); - -CREATE INDEX cp_id ON cp_dependency(cp_node_id); - -CREATE INDEX identifierref ON cp_dependency(resourceId); - -CREATE TABLE cp_file(`cp_node_id` INTEGER, `href` VARCHAR(50) ); -ALTER TABLE cp_file ADD PRIMARY KEY(cp_node_id); - -CREATE INDEX cp_id ON cp_file(cp_node_id); - -CREATE TABLE cp_hideLMSUI(`cp_node_id` INTEGER, `value` VARCHAR(50) ); -ALTER TABLE cp_hideLMSUI ADD PRIMARY KEY(cp_node_id); - -CREATE INDEX ss_sequencing_id ON cp_hideLMSUI(value); - -CREATE TABLE cp_item(`completionThreshold` VARCHAR(50), `cp_node_id` INTEGER, `dataFromLMS` VARCHAR(255), `id` VARCHAR(200), `isvisible` VARCHAR(32), `parameters` VARCHAR(255), `resourceId` VARCHAR(200), `sequencingId` VARCHAR(50), `timeLimitAction` VARCHAR(30), `title` VARCHAR(255) ); -ALTER TABLE cp_item ADD PRIMARY KEY(cp_node_id); - -CREATE INDEX cp_itemidentifier ON cp_item(id); - -CREATE INDEX ss_sequencing_id ON cp_item(sequencingId); - -CREATE TABLE cp_manifest(`base` VARCHAR(200), `cp_node_id` INTEGER, `defaultOrganization` VARCHAR(50), `id` VARCHAR(200), `title` VARCHAR(255), `uri` VARCHAR(255), `version` VARCHAR(200) ); -ALTER TABLE cp_manifest ADD PRIMARY KEY(cp_node_id); - -CREATE INDEX identifier ON cp_manifest(id); - -CREATE TABLE cp_mapinfo(`cp_node_id` INTEGER, `readNormalizedMeasure` TINYINT, `readSatisfiedStatus` TINYINT, `targetObjectiveID` VARCHAR(50), `writeNormalizedMeasure` TINYINT, `writeSatisfiedStatus` TINYINT ); -ALTER TABLE cp_mapinfo ADD PRIMARY KEY(cp_node_id); - -CREATE INDEX targetObjectiveId ON cp_mapinfo(targetObjectiveID); - -CREATE TABLE cp_node(`cp_node_id` INTEGER PRIMARY KEY AUTO_INCREMENT, `nodeName` VARCHAR(50), `slm_id` INTEGER ); -CREATE INDEX cp_id ON cp_node(cp_node_id); - -CREATE INDEX nodeName ON cp_node(nodeName); - -CREATE TABLE cp_objective(`cp_node_id` INTEGER, `minNormalizedMeasure` VARCHAR(50), `objectiveID` VARCHAR(200), `primary` TINYINT, `satisfiedByMeasure` TINYINT ); -ALTER TABLE cp_objective ADD PRIMARY KEY(cp_node_id); - -CREATE TABLE cp_organization(`cp_node_id` INTEGER, `id` VARCHAR(200), `objectivesGlobalToSystem` TINYINT, `sequencingId` VARCHAR(50), `structure` VARCHAR(200), `title` VARCHAR(255) ); -ALTER TABLE cp_organization ADD PRIMARY KEY(cp_node_id); - -CREATE INDEX cp_organizationid ON cp_organization(id); - -CREATE INDEX ss_sequencing_id ON cp_organization(sequencingId); - -CREATE TABLE cp_package(`created` VARCHAR(20), `identifier` VARCHAR(255), `jsdata` TEXT, `modified` VARCHAR(20), `obj_id` INTEGER, `persistPreviousAttempts` INTEGER, `settings` VARCHAR(255), `xmldata` TEXT ); -ALTER TABLE cp_package ADD PRIMARY KEY(obj_id); - -CREATE INDEX identifier ON cp_package(identifier); - -CREATE TABLE cp_resource(`base` VARCHAR(200), `cp_node_id` INTEGER, `href` VARCHAR(250), `id` VARCHAR(200), `scormType` VARCHAR(32), `type` VARCHAR(30) ); -ALTER TABLE cp_resource ADD PRIMARY KEY(cp_node_id); - -CREATE INDEX import_id ON cp_resource(id); - -CREATE TABLE cp_rule(`action` VARCHAR(50), `childActivitySet` VARCHAR(50), `conditionCombination` VARCHAR(50), `cp_node_id` INTEGER, `minimumCount` INTEGER, `minimumPercent` VARCHAR(50), `type` VARCHAR(50) ); -ALTER TABLE cp_rule ADD PRIMARY KEY(cp_node_id); - -CREATE TABLE cp_sequencing(`activityAbsoluteDurationLimit` VARCHAR(20), `activityExperiencedDurationLimit` VARCHAR(20), `attemptAbsoluteDurationLimit` VARCHAR(20), `attemptExperiencedDurationLimit` VARCHAR(20), `attemptLimit` INTEGER, `beginTimeLimit` VARCHAR(20), `choice` TINYINT, `choiceExit` TINYINT, `completionSetByContent` TINYINT, `constrainChoice` TINYINT, `cp_node_id` INTEGER, `endTimeLimit` VARCHAR(20), `flow` TINYINT, `forwardOnly` TINYINT, `id` VARCHAR(200), `measureSatisfactionIfActive` TINYINT, `objectiveMeasureWeight` REAL, `objectiveSetByContent` TINYINT, `preventActivation` TINYINT, `randomizationTiming` VARCHAR(50), `reorderChildren` TINYINT, `requiredForCompleted` VARCHAR(50), `requiredForIncomplete` VARCHAR(50), `requiredForNotSatisfied` VARCHAR(50), `requiredForSatisfied` VARCHAR(50), `rollupObjectiveSatisfied` TINYINT, `rollupProgressCompletion` TINYINT, `selectCount` INTEGER, `selectionTiming` VARCHAR(50), `sequencingId` VARCHAR(50), `tracked` TINYINT, `useCurrentAttemptObjectiveInfo` TINYINT, `useCurrentAttemptProgressInfo` TINYINT ); -ALTER TABLE cp_sequencing ADD PRIMARY KEY(cp_node_id); - -CREATE INDEX cp_sequencingid ON cp_sequencing(id); - -CREATE TABLE cp_tree(`child` INTEGER, `depth` INTEGER, `lft` INTEGER, `obj_id` INTEGER, `parent` INTEGER, `rgt` INTEGER ); -CREATE INDEX child ON cp_tree(child); - -CREATE INDEX cp_treeobj_id ON cp_tree(obj_id); - -CREATE INDEX parent ON cp_tree(parent); - -CREATE TABLE object_data(`create_date` VARCHAR(20), `description` VARCHAR(128), `import_id` VARCHAR(50), `last_update` VARCHAR(20), `obj_id` INTEGER PRIMARY KEY AUTO_INCREMENT, `owner` INTEGER, `title` VARCHAR(70), `type` VARCHAR(4) ); -CREATE TABLE object_reference(`obj_id` INTEGER, `ref_id` INTEGER PRIMARY KEY AUTO_INCREMENT ); -CREATE INDEX object_referenceobj_id ON object_reference(obj_id); - -CREATE TABLE sahs_lm(`api_adapter` VARCHAR(80), `api_func_prefix` VARCHAR(20), `auto_review` VARCHAR(1), `credit` VARCHAR(32), `default_lesson_mode` VARCHAR(32), `id` INTEGER, `online` VARCHAR(1), `type` VARCHAR(32) ); -ALTER TABLE sahs_lm ADD PRIMARY KEY(id); - -CREATE TABLE usr_data(`email` VARCHAR(80), `firstname` VARCHAR(32), `lastname` VARCHAR(32), `login` VARCHAR(80), `matriculation` VARCHAR(50), `passwd` VARCHAR(32), `title` VARCHAR(32), `usr_id` INTEGER PRIMARY KEY AUTO_INCREMENT ); -CREATE TABLE lng_data(`module` VARCHAR(30), `identifier` VARCHAR(50), `lang_key` VARCHAR(2), `value` BLOB ); -ALTER TABLE lng_data ADD PRIMARY KEY(module); - -CREATE INDEX lng_data_module ON lng_data(module); - -CREATE INDEX lng_data_lang_key ON lng_data(lang_key); - diff --git a/components/ILIAS/Scorm2004/data/sampledata/adl_testcases.sql b/components/ILIAS/Scorm2004/data/sampledata/adl_testcases.sql deleted file mode 100755 index 39836dc1b140..000000000000 --- a/components/ILIAS/Scorm2004/data/sampledata/adl_testcases.sql +++ /dev/null @@ -1,25586 +0,0 @@ -INSERT INTO cp_condition VALUES ('satisfied', '152', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '198', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '247', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '248', '', 'not', ''); -INSERT INTO cp_condition VALUES ('attempted', '251', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '252', '', 'not', ''); -INSERT INTO cp_condition VALUES ('attempted', '255', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '256', '', 'not', ''); -INSERT INTO cp_condition VALUES ('attempted', '320', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '321', '', 'not', ''); -INSERT INTO cp_condition VALUES ('attempted', '324', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '325', '', 'not', ''); -INSERT INTO cp_condition VALUES ('attempted', '328', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '329', '', 'not', ''); -INSERT INTO cp_condition VALUES ('attempted', '440', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '513', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '718', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '725', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '781', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '786', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '790', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '793', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '841', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '845', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '851', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '932', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '963', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '991', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '1199', '0.4', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '1249', '0.6', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '1299', '0.5', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '1333', '0.25', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1366', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1368', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1417', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1419', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1468', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1470', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1472', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1514', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '1557', '0.75', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1600', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1644', '', 'not', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '1680', '0.25', '', 'obj1'); -INSERT INTO cp_condition VALUES ('satisfied', '1786', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1791', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1796', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1801', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1806', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '1865', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1870', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1875', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1880', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1885', '', 'not', ''); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '1886', '', 'not', 'obj1'); -INSERT INTO cp_condition VALUES ('completed', '1958', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '1960', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '2005', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '2010', '', 'not', ''); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '2057', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '2062', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '2105', '', 'not', ''); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '2157', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '2158', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '2160', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '2161', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '2204', '', '', 'obj1'); -INSERT INTO cp_condition VALUES ('satisfied', '2205', '', 'not', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '2252', '0.75', '', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '2303', '0.0', '', ''); -INSERT INTO cp_condition VALUES ('always', '2305', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '2310', '0.5', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '2311', '0.5', '', ''); -INSERT INTO cp_condition VALUES ('always', '2313', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '2318', '1.0', '', ''); -INSERT INTO cp_condition VALUES ('always', '2320', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '2367', '0.0', '', ''); -INSERT INTO cp_condition VALUES ('always', '2369', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '2374', '0.5', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '2375', '0.5', '', ''); -INSERT INTO cp_condition VALUES ('always', '2377', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '2382', '1.0', '', ''); -INSERT INTO cp_condition VALUES ('always', '2384', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '2424', '', '', 'obj1'); -INSERT INTO cp_condition VALUES ('satisfied', '2429', '', '', 'obj2'); -INSERT INTO cp_condition VALUES ('completed', '2440', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '2442', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '2479', '', '', 'obj1'); -INSERT INTO cp_condition VALUES ('satisfied', '2484', '', '', 'obj2'); -INSERT INTO cp_condition VALUES ('completed', '2495', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '2497', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '2528', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '2574', '0.70', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '2621', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '2670', '0.70', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '2717', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '2768', '0.70', '', ''); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '2813', '', '', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '2814', '', 'not', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '2854', '', 'not', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '2855', '', '', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '2895', '', '', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '2896', '', '', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '2944', '', '', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '2945', '', 'not', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '2994', '', 'not', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '2995', '', '', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '3044', '', '', 'obj1'); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '3045', '', '', 'obj1'); -INSERT INTO cp_condition VALUES ('activityProgressKnown', '3243', '', 'not', ''); -INSERT INTO cp_condition VALUES ('completed', '3255', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3257', '', '', ''); -INSERT INTO cp_condition VALUES ('activityProgressKnown', '3260', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3262', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3311', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3313', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3360', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3362', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3394', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3396', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3443', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3445', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3492', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3494', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3496', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3543', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3545', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3547', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3594', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3596', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '3598', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3599', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3646', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3648', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '3650', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3651', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3698', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3700', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3702', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '3703', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3750', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3752', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3754', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '3755', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3802', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3804', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3806', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '3807', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3854', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3856', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3858', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '3859', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3891', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3893', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3895', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '3896', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3943', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3945', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3947', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '3948', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3995', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '3997', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '3999', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4046', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4048', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4050', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4093', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4095', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4138', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4140', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4142', '', '', ''); -INSERT INTO cp_condition VALUES ('attemptLimitExceeded', '4189', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '4192', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4195', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4197', '', 'not', ''); -INSERT INTO cp_condition VALUES ('attemptLimitExceeded', '4244', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '4247', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4250', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4252', '', 'not', ''); -INSERT INTO cp_condition VALUES ('attemptLimitExceeded', '4299', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4303', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4305', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4356', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4358', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '4360', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '4361', '', '', ''); -INSERT INTO cp_condition VALUES ('activityProgressKnown', '4362', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '4364', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4368', '', '', ''); -INSERT INTO cp_condition VALUES ('activityProgressKnown', '4370', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4371', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4426', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4428', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '4430', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureKnown', '4431', '', '', ''); -INSERT INTO cp_condition VALUES ('activityProgressKnown', '4432', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '4434', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4437', '', '', ''); -INSERT INTO cp_condition VALUES ('activityProgressKnown', '4439', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4440', '', 'not', ''); -INSERT INTO cp_condition VALUES ('attemptLimitExceeded', '4487', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4490', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4492', '', 'not', ''); -INSERT INTO cp_condition VALUES ('completed', '4494', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4541', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4543', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4545', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4596', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4598', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '4600', '', 'not', ''); -INSERT INTO cp_condition VALUES ('always', '4639', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveStatusKnown', '4641', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4643', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4645', '', 'not', ''); -INSERT INTO cp_condition VALUES ('always', '4684', '', '', ''); -INSERT INTO cp_condition VALUES ('activityProgressKnown', '4686', '', 'not', ''); -INSERT INTO cp_condition VALUES ('completed', '4688', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4690', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4722', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4724', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4726', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4784', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4786', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4788', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4826', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4866', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '4867', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4924', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4929', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4934', '', '', 'obj-SX05-3a'); -INSERT INTO cp_condition VALUES ('satisfied', '4940', '', '', 'obj-SX05-3b'); -INSERT INTO cp_condition VALUES ('satisfied', '4942', '', 'not', 'obj-SX05-3a'); -INSERT INTO cp_condition VALUES ('satisfied', '4943', '', 'not', 'obj-SX05-3b'); -INSERT INTO cp_condition VALUES ('satisfied', '4952', '', '', 'obj-SX05-4a'); -INSERT INTO cp_condition VALUES ('satisfied', '4958', '', '', 'obj-SX05-4b'); -INSERT INTO cp_condition VALUES ('satisfied', '4960', '', 'not', 'obj-SX05-4a'); -INSERT INTO cp_condition VALUES ('satisfied', '4961', '', 'not', 'obj-SX05-4b'); -INSERT INTO cp_condition VALUES ('always', '4970', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '4984', '', 'not', 'obj-SX05-5'); -INSERT INTO cp_condition VALUES ('completed', '5025', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '5027', '', 'not', ''); -INSERT INTO cp_condition VALUES ('completed', '5070', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5110', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5150', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '5153', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '5155', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5206', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '5210', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5213', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5265', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5268', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '5272', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '5456', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '5458', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '5469', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5471', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5474', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '5476', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5479', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5482', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '5484', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '5487', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '5679', '', '', ''); -INSERT INTO cp_condition VALUES ('always', '5681', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '5692', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5694', '', 'not', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5697', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '5699', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5702', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '5705', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '5707', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '5710', '', '', ''); -INSERT INTO cp_condition VALUES ('attempted', '6365', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '6369', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '6371', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '6373', '', 'not', ''); -INSERT INTO cp_condition VALUES ('attempted', '6593', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '6597', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '6599', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '6601', '', 'not', ''); -INSERT INTO cp_condition VALUES ('attempted', '6821', '', '', ''); -INSERT INTO cp_condition VALUES ('completed', '6825', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '6827', '', '', ''); -INSERT INTO cp_condition VALUES ('satisfied', '6829', '', 'not', ''); -INSERT INTO cp_condition VALUES ('always', '6902', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '6905', '0.66', '', '201c0fcdbe99495ebabe81ec93e19736'); -INSERT INTO cp_condition VALUES ('always', '6908', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '6911', '0.75', 'not', 'b75d9d2755344021b906853aea56f52f'); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '6914', '0.5', 'not', '1d622cc0b1a547019354abfbef60c303'); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '6915', '0.5', 'not', '1d622cc0b1a547019354abfbef60c303'); -INSERT INTO cp_condition VALUES ('always', '6918', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '6921', '1', 'not', '1d622cc0b1a547019354abfbef60c303'); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '6922', '1', 'not', '1d622cc0b1a547019354abfbef60c303'); -INSERT INTO cp_condition VALUES ('always', '7003', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '7006', '0.66', '', '201c0fcdbe99495ebabe81ec93e19736'); -INSERT INTO cp_condition VALUES ('always', '7009', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '7012', '0.75', 'not', 'b75d9d2755344021b906853aea56f52f'); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '7015', '0.5', 'not', '1d622cc0b1a547019354abfbef60c303'); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '7016', '0.5', 'not', '1d622cc0b1a547019354abfbef60c303'); -INSERT INTO cp_condition VALUES ('always', '7019', '', '', ''); -INSERT INTO cp_condition VALUES ('objectiveMeasureGreaterThan', '7022', '1', 'not', '1d622cc0b1a547019354abfbef60c303'); -INSERT INTO cp_condition VALUES ('objectiveMeasureLessThan', '7023', '1', 'not', '1d622cc0b1a547019354abfbef60c303'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_dependency -# -INSERT INTO cp_dependency VALUES ('11', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('12', 'JAR01'); -INSERT INTO cp_dependency VALUES ('13', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('14', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('15', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('18', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('19', 'JAR01'); -INSERT INTO cp_dependency VALUES ('20', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('21', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('22', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('25', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('26', 'JAR01'); -INSERT INTO cp_dependency VALUES ('27', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('28', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('29', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('36', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('53', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('54', 'JAR01'); -INSERT INTO cp_dependency VALUES ('55', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('56', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('57', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('60', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('61', 'JAR01'); -INSERT INTO cp_dependency VALUES ('62', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('63', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('64', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('67', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('68', 'JAR01'); -INSERT INTO cp_dependency VALUES ('69', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('70', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('71', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('78', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('101', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('102', 'JAR01'); -INSERT INTO cp_dependency VALUES ('103', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('104', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('105', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('114', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('132', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('133', 'JAR01'); -INSERT INTO cp_dependency VALUES ('134', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('135', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('136', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('145', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('173', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('174', 'JAR01'); -INSERT INTO cp_dependency VALUES ('175', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('176', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('177', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('186', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('217', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('218', 'JAR01'); -INSERT INTO cp_dependency VALUES ('219', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('220', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('221', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('230', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('289', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('290', 'JAR01'); -INSERT INTO cp_dependency VALUES ('291', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('292', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('293', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('302', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('381', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('382', 'JAR01'); -INSERT INTO cp_dependency VALUES ('383', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('384', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('385', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('394', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('419', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('420', 'JAR01'); -INSERT INTO cp_dependency VALUES ('421', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('422', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('423', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('432', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('492', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('493', 'JAR01'); -INSERT INTO cp_dependency VALUES ('494', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('495', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('496', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('505', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('564', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('565', 'JAR01'); -INSERT INTO cp_dependency VALUES ('566', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('567', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('568', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('577', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('617', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('618', 'JAR01'); -INSERT INTO cp_dependency VALUES ('619', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('620', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('621', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('630', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('654', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('655', 'JAR01'); -INSERT INTO cp_dependency VALUES ('656', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('657', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('658', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('667', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('691', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('692', 'JAR01'); -INSERT INTO cp_dependency VALUES ('693', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('694', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('695', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('698', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('699', 'JAR01'); -INSERT INTO cp_dependency VALUES ('700', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('701', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('702', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('711', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('754', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('755', 'JAR01'); -INSERT INTO cp_dependency VALUES ('756', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('757', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('758', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('761', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('762', 'JAR01'); -INSERT INTO cp_dependency VALUES ('763', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('764', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('765', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('774', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('819', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('820', 'JAR01'); -INSERT INTO cp_dependency VALUES ('821', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('822', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('823', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('832', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('876', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('877', 'JAR01'); -INSERT INTO cp_dependency VALUES ('878', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('879', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('880', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('889', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('912', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('913', 'JAR01'); -INSERT INTO cp_dependency VALUES ('914', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('915', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('916', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('925', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('943', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('944', 'JAR01'); -INSERT INTO cp_dependency VALUES ('945', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('946', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('947', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('956', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('971', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('972', 'JAR01'); -INSERT INTO cp_dependency VALUES ('973', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('974', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('975', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('984', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1016', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1017', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1018', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1019', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1020', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1023', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1024', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1025', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1026', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1027', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1030', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1031', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1032', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1033', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1034', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1037', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1038', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1039', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1040', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1041', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1044', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1045', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1046', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1047', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1048', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1051', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1052', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1053', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1054', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1055', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1058', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1059', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1060', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1061', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1062', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1065', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1066', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1067', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1068', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1069', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1072', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1073', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1074', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1075', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1076', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1085', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1114', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1115', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1116', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1117', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1118', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1121', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1122', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1123', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1124', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1125', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1128', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1129', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1130', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1131', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1132', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1135', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1136', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1137', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1138', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1139', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1148', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1178', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1179', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1180', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1181', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1182', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1191', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1226', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1227', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1228', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1229', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1230', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1239', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1276', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1277', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1278', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1279', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1280', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1289', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1311', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1312', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1313', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1314', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1315', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1324', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1345', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1346', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1347', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1348', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1349', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1358', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1396', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1397', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1398', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1399', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1400', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1409', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1447', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1448', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1449', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1450', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1451', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1460', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1491', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1492', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1493', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1494', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1495', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1504', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1534', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1535', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1536', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1537', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1538', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1547', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1577', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1578', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1579', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1580', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1581', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1590', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1620', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1621', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1622', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1623', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1624', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1633', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1656', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1657', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1658', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1659', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1660', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1669', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1701', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1702', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1703', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1704', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1705', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1714', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1766', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1767', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1768', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1769', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1770', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1779', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1845', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1846', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1847', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1848', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1849', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1858', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1922', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1923', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1924', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1925', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1926', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1935', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('1982', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('1983', 'JAR01'); -INSERT INTO cp_dependency VALUES ('1984', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('1985', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('1986', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('1995', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2034', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2035', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2036', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2037', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2038', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2047', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2082', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2083', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2084', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2085', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2086', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2095', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2134', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2135', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2136', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2137', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2138', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2147', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2181', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2182', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2183', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2184', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2185', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2194', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2229', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2230', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2231', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2232', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2233', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2242', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2280', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2281', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2282', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2283', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2284', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2293', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2344', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2345', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2346', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2347', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2348', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2357', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2404', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2405', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2406', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2407', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2408', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2417', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2459', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2460', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2461', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2462', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2463', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2472', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2505', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2506', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2507', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2508', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2509', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2518', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2551', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2552', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2553', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2554', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2555', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2564', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2597', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2598', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2599', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2600', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2601', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2610', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2644', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2645', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2646', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2647', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2648', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2657', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2693', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2694', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2695', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2696', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2697', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2706', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2742', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2743', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2744', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2745', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2746', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2755', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2793', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2794', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2795', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2796', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2797', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2806', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2834', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2835', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2836', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2837', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2838', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2847', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2875', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2876', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2877', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2878', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2879', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2888', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2920', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2921', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2922', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2923', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2924', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2933', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('2970', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('2971', 'JAR01'); -INSERT INTO cp_dependency VALUES ('2972', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('2973', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('2974', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('2983', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3020', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3021', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3022', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3023', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3024', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3033', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3066', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3067', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3068', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3069', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3070', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3079', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3139', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3140', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3141', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3142', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3143', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3152', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3223', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3224', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3225', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3226', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3227', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3236', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3291', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3292', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3293', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3294', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3295', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3304', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3340', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3341', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3342', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3343', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3344', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3353', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3374', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3375', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3376', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3377', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3378', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3387', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3423', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3424', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3425', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3426', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3427', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3436', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3472', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3473', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3474', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3475', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3476', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3485', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3523', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3524', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3525', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3526', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3527', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3536', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3574', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3575', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3576', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3577', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3578', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3587', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3626', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3627', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3628', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3629', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3630', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3639', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3678', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3679', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3680', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3681', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3682', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3691', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3730', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3731', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3732', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3733', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3734', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3743', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3782', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3783', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3784', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3785', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3786', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3795', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3834', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3835', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3836', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3837', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3838', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3847', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3871', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3872', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3873', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3874', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3875', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3884', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3923', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3924', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3925', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3926', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3927', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3936', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('3975', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('3976', 'JAR01'); -INSERT INTO cp_dependency VALUES ('3977', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('3978', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('3979', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('3988', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4026', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4027', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4028', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4029', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4030', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4039', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4073', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4074', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4075', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4076', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4077', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4086', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4118', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4119', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4120', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4121', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4122', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4131', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4169', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4170', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4171', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4172', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4173', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4182', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4224', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4225', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4226', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4227', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4228', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4237', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4279', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4280', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4281', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4282', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4283', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4292', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4336', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4337', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4338', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4339', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4340', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4349', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4403', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4404', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4405', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4406', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4407', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4416', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4467', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4468', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4469', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4470', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4471', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4480', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4521', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4522', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4523', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4524', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4525', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4534', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4572', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4573', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4574', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4575', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4576', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4585', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4619', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4620', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4621', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4622', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4623', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4632', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4664', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4665', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4666', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4667', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4668', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4677', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4702', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4703', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4704', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4705', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4706', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4715', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4753', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4754', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4755', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4756', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4757', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4766', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4806', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4807', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4808', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4809', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4810', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4819', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4846', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4847', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4848', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4849', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4850', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4859', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('4904', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('4905', 'JAR01'); -INSERT INTO cp_dependency VALUES ('4906', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('4907', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('4908', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('4917', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('5005', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('5006', 'JAR01'); -INSERT INTO cp_dependency VALUES ('5007', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('5008', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('5009', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('5018', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('5050', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('5051', 'JAR01'); -INSERT INTO cp_dependency VALUES ('5052', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('5053', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('5054', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('5063', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('5090', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('5091', 'JAR01'); -INSERT INTO cp_dependency VALUES ('5092', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('5093', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('5094', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('5103', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('5130', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('5131', 'JAR01'); -INSERT INTO cp_dependency VALUES ('5132', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('5133', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('5134', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('5143', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('5186', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('5187', 'JAR01'); -INSERT INTO cp_dependency VALUES ('5188', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('5189', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('5190', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('5199', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('5245', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('5246', 'JAR01'); -INSERT INTO cp_dependency VALUES ('5247', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('5248', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('5249', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('5258', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('5408', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('5409', 'JAR01'); -INSERT INTO cp_dependency VALUES ('5410', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('5411', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('5412', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('5421', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('5621', 'LMSFNCTS01'); -INSERT INTO cp_dependency VALUES ('5622', 'JAR01'); -INSERT INTO cp_dependency VALUES ('5623', 'ABOUT01'); -INSERT INTO cp_dependency VALUES ('5624', 'EMULATION01'); -INSERT INTO cp_dependency VALUES ('5625', 'LMSINCLUDE'); -INSERT INTO cp_dependency VALUES ('5634', 'BROWSERDETECT01'); -INSERT INTO cp_dependency VALUES ('5720', 'SCO1ITSELF'); -INSERT INTO cp_dependency VALUES ('5721', 'SCO1P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('5722', 'SCO1RESOURCES'); -INSERT INTO cp_dependency VALUES ('5723', 'SCO1FLAVOUR'); -INSERT INTO cp_dependency VALUES ('5725', 'SCO2ITSELF'); -INSERT INTO cp_dependency VALUES ('5726', 'SCO2P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('5727', 'SCO2RESOURCES'); -INSERT INTO cp_dependency VALUES ('5728', 'SCO2FLAVOUR'); -INSERT INTO cp_dependency VALUES ('5730', 'SCO3ITSELF'); -INSERT INTO cp_dependency VALUES ('5731', 'SCO3P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('5732', 'SCO3RESOURCES'); -INSERT INTO cp_dependency VALUES ('5733', 'SCO3FLAVOUR'); -INSERT INTO cp_dependency VALUES ('5735', 'SCO4ITSELF'); -INSERT INTO cp_dependency VALUES ('5736', 'SCO4P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('5737', 'SCO4RESOURCES'); -INSERT INTO cp_dependency VALUES ('5738', 'SCO4FLAVOUR'); -INSERT INTO cp_dependency VALUES ('5740', 'SCO5ITSELF'); -INSERT INTO cp_dependency VALUES ('5741', 'SCO5P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('5742', 'SCO5RESOURCES'); -INSERT INTO cp_dependency VALUES ('5743', 'SCO5FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7043', 'SCO1ITSELF'); -INSERT INTO cp_dependency VALUES ('7044', 'SCO1P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7045', 'SCO1RESOURCES'); -INSERT INTO cp_dependency VALUES ('7046', 'SCO1FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7048', 'SCO2ITSELF'); -INSERT INTO cp_dependency VALUES ('7049', 'SCO2P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7050', 'SCO2RESOURCES'); -INSERT INTO cp_dependency VALUES ('7051', 'SCO2FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7053', 'SCO3ITSELF'); -INSERT INTO cp_dependency VALUES ('7054', 'SCO3P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7055', 'SCO3RESOURCES'); -INSERT INTO cp_dependency VALUES ('7056', 'SCO3FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7058', 'SCO4ITSELF'); -INSERT INTO cp_dependency VALUES ('7059', 'SCO4P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7060', 'SCO4RESOURCES'); -INSERT INTO cp_dependency VALUES ('7061', 'SCO4FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7063', 'SCO5ITSELF'); -INSERT INTO cp_dependency VALUES ('7064', 'SCO5P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7065', 'SCO5RESOURCES'); -INSERT INTO cp_dependency VALUES ('7066', 'SCO5FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7068', 'SCO6ITSELF'); -INSERT INTO cp_dependency VALUES ('7069', 'SCO6P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7070', 'SCO6RESOURCES'); -INSERT INTO cp_dependency VALUES ('7071', 'SCO6FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7073', 'SCO7ITSELF'); -INSERT INTO cp_dependency VALUES ('7074', 'SCO7P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7075', 'SCO7RESOURCES'); -INSERT INTO cp_dependency VALUES ('7076', 'SCO7FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7703', 'SCO1ITSELF'); -INSERT INTO cp_dependency VALUES ('7704', 'SCO1P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7705', 'SCO1RESOURCES'); -INSERT INTO cp_dependency VALUES ('7706', 'SCO1FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7708', 'SCO2ITSELF'); -INSERT INTO cp_dependency VALUES ('7709', 'SCO2P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7710', 'SCO2RESOURCES'); -INSERT INTO cp_dependency VALUES ('7711', 'SCO2FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7713', 'SCO3ITSELF'); -INSERT INTO cp_dependency VALUES ('7714', 'SCO3P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7715', 'SCO3RESOURCES'); -INSERT INTO cp_dependency VALUES ('7716', 'SCO3FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7718', 'SCO4ITSELF'); -INSERT INTO cp_dependency VALUES ('7719', 'SCO4P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7720', 'SCO4RESOURCES'); -INSERT INTO cp_dependency VALUES ('7721', 'SCO4FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7723', 'SCO5ITSELF'); -INSERT INTO cp_dependency VALUES ('7724', 'SCO5P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7725', 'SCO5RESOURCES'); -INSERT INTO cp_dependency VALUES ('7726', 'SCO5FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7728', 'SCO6ITSELF'); -INSERT INTO cp_dependency VALUES ('7729', 'SCO6P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7730', 'SCO6RESOURCES'); -INSERT INTO cp_dependency VALUES ('7731', 'SCO6FLAVOUR'); -INSERT INTO cp_dependency VALUES ('7733', 'SCO7ITSELF'); -INSERT INTO cp_dependency VALUES ('7734', 'SCO7P2OBJECTS'); -INSERT INTO cp_dependency VALUES ('7735', 'SCO7RESOURCES'); -INSERT INTO cp_dependency VALUES ('7736', 'SCO7FLAVOUR'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_file -# -INSERT INTO cp_file VALUES ('10', 'AssetLaunchTest.htm'); -INSERT INTO cp_file VALUES ('17', 'APIRTETest1.htm'); -INSERT INTO cp_file VALUES ('24', 'APIRTETest2.htm'); -INSERT INTO cp_file VALUES ('31', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('33', 'common/About.js'); -INSERT INTO cp_file VALUES ('35', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('38', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('40', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('42', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('52', 'AssetLaunchTest.htm'); -INSERT INTO cp_file VALUES ('59', 'APIRTETest1.htm'); -INSERT INTO cp_file VALUES ('66', 'APIRTETest2.htm'); -INSERT INTO cp_file VALUES ('73', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('75', 'common/About.js'); -INSERT INTO cp_file VALUES ('77', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('80', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('82', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('84', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('100', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('107', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('109', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('111', 'common/About.js'); -INSERT INTO cp_file VALUES ('113', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('116', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('118', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('131', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('138', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('140', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('142', 'common/About.js'); -INSERT INTO cp_file VALUES ('144', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('147', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('149', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('172', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('179', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('181', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('183', 'common/About.js'); -INSERT INTO cp_file VALUES ('185', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('188', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('190', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('216', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('223', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('225', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('227', 'common/About.js'); -INSERT INTO cp_file VALUES ('229', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('232', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('234', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('288', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('295', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('297', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('299', 'common/About.js'); -INSERT INTO cp_file VALUES ('301', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('304', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('306', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('380', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('387', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('389', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('391', 'common/About.js'); -INSERT INTO cp_file VALUES ('393', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('396', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('398', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('418', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('425', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('427', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('429', 'common/About.js'); -INSERT INTO cp_file VALUES ('431', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('434', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('436', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('491', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('498', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('500', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('502', 'common/About.js'); -INSERT INTO cp_file VALUES ('504', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('507', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('509', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('563', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('570', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('572', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('574', 'common/About.js'); -INSERT INTO cp_file VALUES ('576', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('579', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('581', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('616', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('623', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('625', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('627', 'common/About.js'); -INSERT INTO cp_file VALUES ('629', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('632', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('634', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('653', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('660', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('662', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('664', 'common/About.js'); -INSERT INTO cp_file VALUES ('666', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('669', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('671', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('690', 'SequencingTestFail.htm'); -INSERT INTO cp_file VALUES ('697', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('704', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('706', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('708', 'common/About.js'); -INSERT INTO cp_file VALUES ('710', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('713', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('715', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('753', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('760', 'SequencingTestFail.htm'); -INSERT INTO cp_file VALUES ('767', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('769', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('771', 'common/About.js'); -INSERT INTO cp_file VALUES ('773', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('776', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('778', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('818', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('825', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('827', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('829', 'common/About.js'); -INSERT INTO cp_file VALUES ('831', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('834', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('836', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('875', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('882', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('884', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('886', 'common/About.js'); -INSERT INTO cp_file VALUES ('888', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('891', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('893', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('911', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('918', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('920', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('922', 'common/About.js'); -INSERT INTO cp_file VALUES ('924', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('927', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('929', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('942', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('949', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('951', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('953', 'common/About.js'); -INSERT INTO cp_file VALUES ('955', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('958', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('960', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('970', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('977', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('979', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('981', 'common/About.js'); -INSERT INTO cp_file VALUES ('983', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('986', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('988', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1015', 'DMBehaviorTest1.htm'); -INSERT INTO cp_file VALUES ('1022', 'DMBehaviorTest2.htm'); -INSERT INTO cp_file VALUES ('1029', 'DMBehaviorTest3.htm'); -INSERT INTO cp_file VALUES ('1036', 'DMBehaviorTest4.htm'); -INSERT INTO cp_file VALUES ('1043', 'DMBehaviorTest5.htm'); -INSERT INTO cp_file VALUES ('1050', 'DMBehaviorTest6.htm'); -INSERT INTO cp_file VALUES ('1057', 'DMBehaviorTest7.htm'); -INSERT INTO cp_file VALUES ('1064', 'DMBehaviorTest8.htm'); -INSERT INTO cp_file VALUES ('1071', 'DMBehaviorTest9.htm'); -INSERT INTO cp_file VALUES ('1078', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1080', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1082', 'common/About.js'); -INSERT INTO cp_file VALUES ('1084', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1087', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1089', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1113', 'DMImplementationTest1.htm'); -INSERT INTO cp_file VALUES ('1120', 'DMImplementationTest2.htm'); -INSERT INTO cp_file VALUES ('1127', 'DMImplementationTest3.htm'); -INSERT INTO cp_file VALUES ('1134', 'DMImplementationTest4.htm'); -INSERT INTO cp_file VALUES ('1141', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1143', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1145', 'common/About.js'); -INSERT INTO cp_file VALUES ('1147', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1150', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1152', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1177', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1184', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1186', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1188', 'common/About.js'); -INSERT INTO cp_file VALUES ('1190', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1193', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1195', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1225', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1232', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1234', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1236', 'common/About.js'); -INSERT INTO cp_file VALUES ('1238', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1241', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1243', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1275', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1282', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1284', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1286', 'common/About.js'); -INSERT INTO cp_file VALUES ('1288', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1291', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1293', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1310', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1317', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1319', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1321', 'common/About.js'); -INSERT INTO cp_file VALUES ('1323', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1326', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1328', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1344', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1351', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1353', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1355', 'common/About.js'); -INSERT INTO cp_file VALUES ('1357', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1360', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1362', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1395', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1402', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1404', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1406', 'common/About.js'); -INSERT INTO cp_file VALUES ('1408', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1411', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1413', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1446', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1453', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1455', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1457', 'common/About.js'); -INSERT INTO cp_file VALUES ('1459', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1462', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1464', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1490', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1497', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1499', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1501', 'common/About.js'); -INSERT INTO cp_file VALUES ('1503', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1506', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1508', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1533', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1540', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1542', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1544', 'common/About.js'); -INSERT INTO cp_file VALUES ('1546', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1549', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1551', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1576', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1583', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1585', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1587', 'common/About.js'); -INSERT INTO cp_file VALUES ('1589', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1592', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1594', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1619', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1626', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1628', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1630', 'common/About.js'); -INSERT INTO cp_file VALUES ('1632', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1635', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1637', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1655', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1662', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1664', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1666', 'common/About.js'); -INSERT INTO cp_file VALUES ('1668', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1671', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1673', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1700', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1707', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1709', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1711', 'common/About.js'); -INSERT INTO cp_file VALUES ('1713', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1716', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1718', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1765', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1772', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1774', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1776', 'common/About.js'); -INSERT INTO cp_file VALUES ('1778', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1781', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1783', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1844', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1851', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1853', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1855', 'common/About.js'); -INSERT INTO cp_file VALUES ('1857', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1860', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1862', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1921', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1928', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1930', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1932', 'common/About.js'); -INSERT INTO cp_file VALUES ('1934', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1937', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1939', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('1981', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('1988', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('1990', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('1992', 'common/About.js'); -INSERT INTO cp_file VALUES ('1994', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('1997', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('1999', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2033', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2040', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2042', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2044', 'common/About.js'); -INSERT INTO cp_file VALUES ('2046', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2049', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2051', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2081', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2088', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2090', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2092', 'common/About.js'); -INSERT INTO cp_file VALUES ('2094', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2097', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2099', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2133', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2140', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2142', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2144', 'common/About.js'); -INSERT INTO cp_file VALUES ('2146', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2149', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2151', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2180', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2187', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2189', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2191', 'common/About.js'); -INSERT INTO cp_file VALUES ('2193', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2196', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2198', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2228', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2235', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2237', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2239', 'common/About.js'); -INSERT INTO cp_file VALUES ('2241', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2244', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2246', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2279', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2286', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2288', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2290', 'common/About.js'); -INSERT INTO cp_file VALUES ('2292', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2295', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2297', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2343', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2350', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2352', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2354', 'common/About.js'); -INSERT INTO cp_file VALUES ('2356', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2359', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2361', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2403', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2410', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2412', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2414', 'common/About.js'); -INSERT INTO cp_file VALUES ('2416', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2419', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2421', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2458', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2465', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2467', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2469', 'common/About.js'); -INSERT INTO cp_file VALUES ('2471', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2474', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2476', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2504', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2511', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2513', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2515', 'common/About.js'); -INSERT INTO cp_file VALUES ('2517', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2520', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2522', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2550', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2557', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2559', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2561', 'common/About.js'); -INSERT INTO cp_file VALUES ('2563', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2566', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2568', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2596', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2603', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2605', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2607', 'common/About.js'); -INSERT INTO cp_file VALUES ('2609', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2612', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2614', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2643', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2650', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2652', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2654', 'common/About.js'); -INSERT INTO cp_file VALUES ('2656', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2659', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2661', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2692', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2699', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2701', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2703', 'common/About.js'); -INSERT INTO cp_file VALUES ('2705', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2708', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2710', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2741', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2748', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2750', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2752', 'common/About.js'); -INSERT INTO cp_file VALUES ('2754', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2757', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2759', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2792', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2799', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2801', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2803', 'common/About.js'); -INSERT INTO cp_file VALUES ('2805', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2808', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2810', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2833', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2840', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2842', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2844', 'common/About.js'); -INSERT INTO cp_file VALUES ('2846', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2849', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2851', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2874', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2881', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2883', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2885', 'common/About.js'); -INSERT INTO cp_file VALUES ('2887', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2890', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2892', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2919', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2926', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2928', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2930', 'common/About.js'); -INSERT INTO cp_file VALUES ('2932', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2935', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2937', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('2969', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('2976', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('2978', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('2980', 'common/About.js'); -INSERT INTO cp_file VALUES ('2982', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('2985', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('2987', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3019', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3026', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3028', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3030', 'common/About.js'); -INSERT INTO cp_file VALUES ('3032', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3035', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3037', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3065', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3072', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3074', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3076', 'common/About.js'); -INSERT INTO cp_file VALUES ('3078', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3081', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3083', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3138', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3145', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3147', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3149', 'common/About.js'); -INSERT INTO cp_file VALUES ('3151', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3154', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3156', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3222', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3229', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3231', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3233', 'common/About.js'); -INSERT INTO cp_file VALUES ('3235', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3238', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3240', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3290', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3297', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3299', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3301', 'common/About.js'); -INSERT INTO cp_file VALUES ('3303', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3306', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3308', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3339', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3346', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3348', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3350', 'common/About.js'); -INSERT INTO cp_file VALUES ('3352', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3355', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3357', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3373', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3380', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3382', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3384', 'common/About.js'); -INSERT INTO cp_file VALUES ('3386', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3389', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3391', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3422', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3429', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3431', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3433', 'common/About.js'); -INSERT INTO cp_file VALUES ('3435', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3438', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3440', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3471', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3478', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3480', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3482', 'common/About.js'); -INSERT INTO cp_file VALUES ('3484', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3487', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3489', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3522', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3529', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3531', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3533', 'common/About.js'); -INSERT INTO cp_file VALUES ('3535', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3538', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3540', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3573', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3580', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3582', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3584', 'common/About.js'); -INSERT INTO cp_file VALUES ('3586', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3589', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3591', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3625', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3632', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3634', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3636', 'common/About.js'); -INSERT INTO cp_file VALUES ('3638', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3641', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3643', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3677', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3684', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3686', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3688', 'common/About.js'); -INSERT INTO cp_file VALUES ('3690', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3693', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3695', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3729', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3736', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3738', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3740', 'common/About.js'); -INSERT INTO cp_file VALUES ('3742', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3745', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3747', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3781', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3788', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3790', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3792', 'common/About.js'); -INSERT INTO cp_file VALUES ('3794', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3797', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3799', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3833', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3840', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3842', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3844', 'common/About.js'); -INSERT INTO cp_file VALUES ('3846', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3849', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3851', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3870', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3877', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3879', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3881', 'common/About.js'); -INSERT INTO cp_file VALUES ('3883', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3886', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3888', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3922', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3929', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3931', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3933', 'common/About.js'); -INSERT INTO cp_file VALUES ('3935', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3938', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3940', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('3974', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('3981', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('3983', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('3985', 'common/About.js'); -INSERT INTO cp_file VALUES ('3987', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('3990', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('3992', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4025', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4032', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4034', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4036', 'common/About.js'); -INSERT INTO cp_file VALUES ('4038', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4041', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4043', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4072', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4079', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4081', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4083', 'common/About.js'); -INSERT INTO cp_file VALUES ('4085', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4088', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4090', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4117', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4124', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4126', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4128', 'common/About.js'); -INSERT INTO cp_file VALUES ('4130', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4133', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4135', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4168', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4175', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4177', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4179', 'common/About.js'); -INSERT INTO cp_file VALUES ('4181', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4184', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4186', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4223', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4230', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4232', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4234', 'common/About.js'); -INSERT INTO cp_file VALUES ('4236', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4239', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4241', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4278', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4285', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4287', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4289', 'common/About.js'); -INSERT INTO cp_file VALUES ('4291', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4294', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4296', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4335', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4342', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4344', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4346', 'common/About.js'); -INSERT INTO cp_file VALUES ('4348', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4351', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4353', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4402', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4409', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4411', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4413', 'common/About.js'); -INSERT INTO cp_file VALUES ('4415', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4418', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4420', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4466', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4473', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4475', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4477', 'common/About.js'); -INSERT INTO cp_file VALUES ('4479', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4482', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4484', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4520', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4527', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4529', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4531', 'common/About.js'); -INSERT INTO cp_file VALUES ('4533', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4536', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4538', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4571', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4578', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4580', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4582', 'common/About.js'); -INSERT INTO cp_file VALUES ('4584', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4587', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4589', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4618', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4625', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4627', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4629', 'common/About.js'); -INSERT INTO cp_file VALUES ('4631', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4634', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4636', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4663', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4670', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4672', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4674', 'common/About.js'); -INSERT INTO cp_file VALUES ('4676', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4679', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4681', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4701', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4708', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4710', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4712', 'common/About.js'); -INSERT INTO cp_file VALUES ('4714', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4717', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4719', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4752', 'resources/SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4759', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4761', 'common/LMSTest.jar'); -INSERT INTO cp_file VALUES ('4763', 'common/About.js'); -INSERT INTO cp_file VALUES ('4765', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4768', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4770', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4805', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4812', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4814', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4816', 'common/About.js'); -INSERT INTO cp_file VALUES ('4818', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4821', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4823', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4845', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4852', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4854', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4856', 'common/About.js'); -INSERT INTO cp_file VALUES ('4858', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4861', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4863', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('4903', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('4910', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('4912', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('4914', 'common/About.js'); -INSERT INTO cp_file VALUES ('4916', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('4919', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('4921', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('5004', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('5011', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('5013', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('5015', 'common/About.js'); -INSERT INTO cp_file VALUES ('5017', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('5020', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('5022', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('5049', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('5056', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('5058', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('5060', 'common/About.js'); -INSERT INTO cp_file VALUES ('5062', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('5065', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('5067', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('5089', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('5096', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('5098', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('5100', 'common/About.js'); -INSERT INTO cp_file VALUES ('5102', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('5105', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('5107', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('5129', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('5136', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('5138', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('5140', 'common/About.js'); -INSERT INTO cp_file VALUES ('5142', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('5145', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('5147', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('5185', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('5192', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('5194', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('5196', 'common/About.js'); -INSERT INTO cp_file VALUES ('5198', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('5201', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('5203', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('5244', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('5251', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('5253', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('5255', 'common/About.js'); -INSERT INTO cp_file VALUES ('5257', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('5260', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('5262', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('5407', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('5414', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('5416', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('5418', 'common/About.js'); -INSERT INTO cp_file VALUES ('5420', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('5423', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('5425', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('5620', 'SequencingTest.htm'); -INSERT INTO cp_file VALUES ('5627', 'common/lmsrtefunctions.js'); -INSERT INTO cp_file VALUES ('5629', 'LMSTest.jar'); -INSERT INTO cp_file VALUES ('5631', 'common/About.js'); -INSERT INTO cp_file VALUES ('5633', 'common/EmulationCode.js'); -INSERT INTO cp_file VALUES ('5636', 'common/BrowserDetect.js'); -INSERT INTO cp_file VALUES ('5638', 'includes/LMSTestContentPackages_style.css'); -INSERT INTO cp_file VALUES ('5745', './scos/1/index.xml'); -INSERT INTO cp_file VALUES ('5746', './scos/1/p2sco.xsd'); -INSERT INTO cp_file VALUES ('5747', './scos/1/index.html'); -INSERT INTO cp_file VALUES ('5749', './scos/1/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('5750', './scos/1/pictures/0.png'); -INSERT INTO cp_file VALUES ('5751', './scos/1/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('5752', './scos/1/pictures/1.png'); -INSERT INTO cp_file VALUES ('5755', './scos/1/custom.xsl'); -INSERT INTO cp_file VALUES ('5756', './scos/1/css/custom.css'); -INSERT INTO cp_file VALUES ('5757', './scos/1/js/custom.js'); -INSERT INTO cp_file VALUES ('5758', './scos/1/js/x/x.js'); -INSERT INTO cp_file VALUES ('5759', './scos/1/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('5760', './scos/1/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('5761', './scos/1/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('5762', './scos/1/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('5763', './scos/1/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('5764', './scos/1/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('5765', './scos/1/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('5766', './scos/1/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('5767', './scos/1/css/lightbox.css'); -INSERT INTO cp_file VALUES ('5768', './scos/1/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('5769', './scos/1/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('5770', './scos/1/icons/gdict.png'); -INSERT INTO cp_file VALUES ('5771', './scos/1/icons/html.png'); -INSERT INTO cp_file VALUES ('5772', './scos/1/icons/n_link.png'); -INSERT INTO cp_file VALUES ('5773', './scos/1/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('5774', './scos/1/icons/audio.png'); -INSERT INTO cp_file VALUES ('5775', './scos/1/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('5776', './scos/1/icons/file.png'); -INSERT INTO cp_file VALUES ('5777', './scos/1/icons/likert.png'); -INSERT INTO cp_file VALUES ('5778', './scos/1/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('5779', './scos/1/icons/word.png'); -INSERT INTO cp_file VALUES ('5780', './scos/1/icons/pixel.png'); -INSERT INTO cp_file VALUES ('5781', './scos/1/icons/hint.png'); -INSERT INTO cp_file VALUES ('5782', './scos/1/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('5783', './scos/1/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('5784', './scos/1/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('5785', './scos/1/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('5786', './scos/1/icons/pdf.png'); -INSERT INTO cp_file VALUES ('5787', './scos/1/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('5788', './scos/1/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('5789', './scos/1/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('5790', './scos/1/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('5791', './scos/1/icons/like.png'); -INSERT INTO cp_file VALUES ('5792', './scos/1/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('5793', './scos/1/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('5794', './scos/1/images/blank.gif'); -INSERT INTO cp_file VALUES ('5795', './scos/1/images/yes.png'); -INSERT INTO cp_file VALUES ('5796', './scos/1/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('5797', './scos/1/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('5798', './scos/1/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('5799', './scos/1/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('5800', './scos/1/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('5801', './scos/1/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('5802', './scos/1/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('5803', './scos/1/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('5804', './scos/1/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('5805', './scos/1/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('5806', './scos/1/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('5807', './scos/1/images/core.png'); -INSERT INTO cp_file VALUES ('5808', './scos/1/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('5809', './scos/1/images/pixel.png'); -INSERT INTO cp_file VALUES ('5810', './scos/1/images/no.png'); -INSERT INTO cp_file VALUES ('5811', './scos/1/images/on.png'); -INSERT INTO cp_file VALUES ('5812', './scos/1/images/off.png'); -INSERT INTO cp_file VALUES ('5813', './scos/1/images/prev.gif'); -INSERT INTO cp_file VALUES ('5814', './scos/1/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('5815', './scos/1/images/yesno.png'); -INSERT INTO cp_file VALUES ('5816', './scos/1/images/n_no.gif'); -INSERT INTO cp_file VALUES ('5817', './scos/1/images/n_selected.png'); -INSERT INTO cp_file VALUES ('5818', './scos/1/images/next.gif'); -INSERT INTO cp_file VALUES ('5819', './scos/1/images/close.gif'); -INSERT INTO cp_file VALUES ('5820', './scos/1/images/loading.gif'); -INSERT INTO cp_file VALUES ('5821', './scos/1/images/like.png'); -INSERT INTO cp_file VALUES ('5822', './scos/1/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('5824', './scos/2/index.xml'); -INSERT INTO cp_file VALUES ('5825', './scos/2/p2sco.xsd'); -INSERT INTO cp_file VALUES ('5826', './scos/2/index.html'); -INSERT INTO cp_file VALUES ('5828', './scos/2/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('5829', './scos/2/pictures/0.png'); -INSERT INTO cp_file VALUES ('5830', './scos/2/files/0.mp4'); -INSERT INTO cp_file VALUES ('5831', './scos/2/files/1.mp4'); -INSERT INTO cp_file VALUES ('5832', './scos/2/files/2.gif'); -INSERT INTO cp_file VALUES ('5833', './scos/2/files/3.swf'); -INSERT INTO cp_file VALUES ('5834', './scos/2/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('5835', './scos/2/pictures/1.png'); -INSERT INTO cp_file VALUES ('5838', './scos/2/custom.xsl'); -INSERT INTO cp_file VALUES ('5839', './scos/2/css/custom.css'); -INSERT INTO cp_file VALUES ('5840', './scos/2/js/custom.js'); -INSERT INTO cp_file VALUES ('5841', './scos/2/js/x/x.js'); -INSERT INTO cp_file VALUES ('5842', './scos/2/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('5843', './scos/2/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('5844', './scos/2/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('5845', './scos/2/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('5846', './scos/2/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('5847', './scos/2/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('5848', './scos/2/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('5849', './scos/2/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('5850', './scos/2/css/lightbox.css'); -INSERT INTO cp_file VALUES ('5851', './scos/2/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('5852', './scos/2/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('5853', './scos/2/icons/gdict.png'); -INSERT INTO cp_file VALUES ('5854', './scos/2/icons/html.png'); -INSERT INTO cp_file VALUES ('5855', './scos/2/icons/n_link.png'); -INSERT INTO cp_file VALUES ('5856', './scos/2/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('5857', './scos/2/icons/audio.png'); -INSERT INTO cp_file VALUES ('5858', './scos/2/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('5859', './scos/2/icons/file.png'); -INSERT INTO cp_file VALUES ('5860', './scos/2/icons/likert.png'); -INSERT INTO cp_file VALUES ('5861', './scos/2/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('5862', './scos/2/icons/word.png'); -INSERT INTO cp_file VALUES ('5863', './scos/2/icons/pixel.png'); -INSERT INTO cp_file VALUES ('5864', './scos/2/icons/hint.png'); -INSERT INTO cp_file VALUES ('5865', './scos/2/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('5866', './scos/2/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('5867', './scos/2/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('5868', './scos/2/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('5869', './scos/2/icons/pdf.png'); -INSERT INTO cp_file VALUES ('5870', './scos/2/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('5871', './scos/2/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('5872', './scos/2/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('5873', './scos/2/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('5874', './scos/2/icons/like.png'); -INSERT INTO cp_file VALUES ('5875', './scos/2/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('5876', './scos/2/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('5877', './scos/2/images/blank.gif'); -INSERT INTO cp_file VALUES ('5878', './scos/2/images/yes.png'); -INSERT INTO cp_file VALUES ('5879', './scos/2/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('5880', './scos/2/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('5881', './scos/2/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('5882', './scos/2/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('5883', './scos/2/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('5884', './scos/2/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('5885', './scos/2/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('5886', './scos/2/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('5887', './scos/2/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('5888', './scos/2/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('5889', './scos/2/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('5890', './scos/2/images/core.png'); -INSERT INTO cp_file VALUES ('5891', './scos/2/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('5892', './scos/2/images/pixel.png'); -INSERT INTO cp_file VALUES ('5893', './scos/2/images/no.png'); -INSERT INTO cp_file VALUES ('5894', './scos/2/images/on.png'); -INSERT INTO cp_file VALUES ('5895', './scos/2/images/off.png'); -INSERT INTO cp_file VALUES ('5896', './scos/2/images/prev.gif'); -INSERT INTO cp_file VALUES ('5897', './scos/2/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('5898', './scos/2/images/yesno.png'); -INSERT INTO cp_file VALUES ('5899', './scos/2/images/n_no.gif'); -INSERT INTO cp_file VALUES ('5900', './scos/2/images/n_selected.png'); -INSERT INTO cp_file VALUES ('5901', './scos/2/images/next.gif'); -INSERT INTO cp_file VALUES ('5902', './scos/2/images/close.gif'); -INSERT INTO cp_file VALUES ('5903', './scos/2/images/loading.gif'); -INSERT INTO cp_file VALUES ('5904', './scos/2/images/like.png'); -INSERT INTO cp_file VALUES ('5905', './scos/2/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('5907', './scos/3/index.xml'); -INSERT INTO cp_file VALUES ('5908', './scos/3/p2sco.xsd'); -INSERT INTO cp_file VALUES ('5909', './scos/3/index.html'); -INSERT INTO cp_file VALUES ('5911', './scos/3/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('5912', './scos/3/pictures/0.png'); -INSERT INTO cp_file VALUES ('5913', './scos/3/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('5914', './scos/3/pictures/1.png'); -INSERT INTO cp_file VALUES ('5915', './scos/3/pictures/thumbnail-2.png'); -INSERT INTO cp_file VALUES ('5916', './scos/3/pictures/2.png'); -INSERT INTO cp_file VALUES ('5917', './scos/3/pictures/thumbnail-3.png'); -INSERT INTO cp_file VALUES ('5918', './scos/3/pictures/3.png'); -INSERT INTO cp_file VALUES ('5919', './scos/3/pictures/thumbnail-4.png'); -INSERT INTO cp_file VALUES ('5920', './scos/3/pictures/4.png'); -INSERT INTO cp_file VALUES ('5921', './scos/3/pictures/thumbnail-5.png'); -INSERT INTO cp_file VALUES ('5922', './scos/3/pictures/5.png'); -INSERT INTO cp_file VALUES ('5925', './scos/3/custom.xsl'); -INSERT INTO cp_file VALUES ('5926', './scos/3/css/custom.css'); -INSERT INTO cp_file VALUES ('5927', './scos/3/js/custom.js'); -INSERT INTO cp_file VALUES ('5928', './scos/3/js/x/x.js'); -INSERT INTO cp_file VALUES ('5929', './scos/3/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('5930', './scos/3/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('5931', './scos/3/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('5932', './scos/3/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('5933', './scos/3/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('5934', './scos/3/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('5935', './scos/3/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('5936', './scos/3/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('5937', './scos/3/css/lightbox.css'); -INSERT INTO cp_file VALUES ('5938', './scos/3/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('5939', './scos/3/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('5940', './scos/3/icons/gdict.png'); -INSERT INTO cp_file VALUES ('5941', './scos/3/icons/html.png'); -INSERT INTO cp_file VALUES ('5942', './scos/3/icons/n_link.png'); -INSERT INTO cp_file VALUES ('5943', './scos/3/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('5944', './scos/3/icons/audio.png'); -INSERT INTO cp_file VALUES ('5945', './scos/3/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('5946', './scos/3/icons/file.png'); -INSERT INTO cp_file VALUES ('5947', './scos/3/icons/likert.png'); -INSERT INTO cp_file VALUES ('5948', './scos/3/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('5949', './scos/3/icons/word.png'); -INSERT INTO cp_file VALUES ('5950', './scos/3/icons/pixel.png'); -INSERT INTO cp_file VALUES ('5951', './scos/3/icons/hint.png'); -INSERT INTO cp_file VALUES ('5952', './scos/3/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('5953', './scos/3/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('5954', './scos/3/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('5955', './scos/3/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('5956', './scos/3/icons/pdf.png'); -INSERT INTO cp_file VALUES ('5957', './scos/3/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('5958', './scos/3/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('5959', './scos/3/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('5960', './scos/3/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('5961', './scos/3/icons/like.png'); -INSERT INTO cp_file VALUES ('5962', './scos/3/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('5963', './scos/3/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('5964', './scos/3/images/blank.gif'); -INSERT INTO cp_file VALUES ('5965', './scos/3/images/yes.png'); -INSERT INTO cp_file VALUES ('5966', './scos/3/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('5967', './scos/3/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('5968', './scos/3/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('5969', './scos/3/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('5970', './scos/3/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('5971', './scos/3/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('5972', './scos/3/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('5973', './scos/3/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('5974', './scos/3/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('5975', './scos/3/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('5976', './scos/3/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('5977', './scos/3/images/core.png'); -INSERT INTO cp_file VALUES ('5978', './scos/3/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('5979', './scos/3/images/pixel.png'); -INSERT INTO cp_file VALUES ('5980', './scos/3/images/no.png'); -INSERT INTO cp_file VALUES ('5981', './scos/3/images/on.png'); -INSERT INTO cp_file VALUES ('5982', './scos/3/images/off.png'); -INSERT INTO cp_file VALUES ('5983', './scos/3/images/prev.gif'); -INSERT INTO cp_file VALUES ('5984', './scos/3/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('5985', './scos/3/images/yesno.png'); -INSERT INTO cp_file VALUES ('5986', './scos/3/images/n_no.gif'); -INSERT INTO cp_file VALUES ('5987', './scos/3/images/n_selected.png'); -INSERT INTO cp_file VALUES ('5988', './scos/3/images/next.gif'); -INSERT INTO cp_file VALUES ('5989', './scos/3/images/close.gif'); -INSERT INTO cp_file VALUES ('5990', './scos/3/images/loading.gif'); -INSERT INTO cp_file VALUES ('5991', './scos/3/images/like.png'); -INSERT INTO cp_file VALUES ('5992', './scos/3/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('5994', './scos/4/index.xml'); -INSERT INTO cp_file VALUES ('5995', './scos/4/p2sco.xsd'); -INSERT INTO cp_file VALUES ('5996', './scos/4/index.html'); -INSERT INTO cp_file VALUES ('5998', './scos/4/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('5999', './scos/4/pictures/0.png'); -INSERT INTO cp_file VALUES ('6000', './scos/4/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('6001', './scos/4/pictures/1.png'); -INSERT INTO cp_file VALUES ('6002', './scos/4/pictures/thumbnail-2.png'); -INSERT INTO cp_file VALUES ('6003', './scos/4/pictures/2.png'); -INSERT INTO cp_file VALUES ('6004', './scos/4/pictures/thumbnail-3.png'); -INSERT INTO cp_file VALUES ('6005', './scos/4/pictures/3.png'); -INSERT INTO cp_file VALUES ('6008', './scos/4/custom.xsl'); -INSERT INTO cp_file VALUES ('6009', './scos/4/css/custom.css'); -INSERT INTO cp_file VALUES ('6010', './scos/4/js/custom.js'); -INSERT INTO cp_file VALUES ('6011', './scos/4/js/x/x.js'); -INSERT INTO cp_file VALUES ('6012', './scos/4/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('6013', './scos/4/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('6014', './scos/4/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('6015', './scos/4/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('6016', './scos/4/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('6017', './scos/4/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('6018', './scos/4/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('6019', './scos/4/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('6020', './scos/4/css/lightbox.css'); -INSERT INTO cp_file VALUES ('6021', './scos/4/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('6022', './scos/4/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('6023', './scos/4/icons/gdict.png'); -INSERT INTO cp_file VALUES ('6024', './scos/4/icons/html.png'); -INSERT INTO cp_file VALUES ('6025', './scos/4/icons/n_link.png'); -INSERT INTO cp_file VALUES ('6026', './scos/4/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('6027', './scos/4/icons/audio.png'); -INSERT INTO cp_file VALUES ('6028', './scos/4/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('6029', './scos/4/icons/file.png'); -INSERT INTO cp_file VALUES ('6030', './scos/4/icons/likert.png'); -INSERT INTO cp_file VALUES ('6031', './scos/4/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('6032', './scos/4/icons/word.png'); -INSERT INTO cp_file VALUES ('6033', './scos/4/icons/pixel.png'); -INSERT INTO cp_file VALUES ('6034', './scos/4/icons/hint.png'); -INSERT INTO cp_file VALUES ('6035', './scos/4/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('6036', './scos/4/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('6037', './scos/4/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('6038', './scos/4/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('6039', './scos/4/icons/pdf.png'); -INSERT INTO cp_file VALUES ('6040', './scos/4/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('6041', './scos/4/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('6042', './scos/4/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('6043', './scos/4/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('6044', './scos/4/icons/like.png'); -INSERT INTO cp_file VALUES ('6045', './scos/4/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('6046', './scos/4/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('6047', './scos/4/images/blank.gif'); -INSERT INTO cp_file VALUES ('6048', './scos/4/images/yes.png'); -INSERT INTO cp_file VALUES ('6049', './scos/4/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('6050', './scos/4/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('6051', './scos/4/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('6052', './scos/4/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('6053', './scos/4/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('6054', './scos/4/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('6055', './scos/4/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('6056', './scos/4/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('6057', './scos/4/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('6058', './scos/4/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('6059', './scos/4/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('6060', './scos/4/images/core.png'); -INSERT INTO cp_file VALUES ('6061', './scos/4/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('6062', './scos/4/images/pixel.png'); -INSERT INTO cp_file VALUES ('6063', './scos/4/images/no.png'); -INSERT INTO cp_file VALUES ('6064', './scos/4/images/on.png'); -INSERT INTO cp_file VALUES ('6065', './scos/4/images/off.png'); -INSERT INTO cp_file VALUES ('6066', './scos/4/images/prev.gif'); -INSERT INTO cp_file VALUES ('6067', './scos/4/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('6068', './scos/4/images/yesno.png'); -INSERT INTO cp_file VALUES ('6069', './scos/4/images/n_no.gif'); -INSERT INTO cp_file VALUES ('6070', './scos/4/images/n_selected.png'); -INSERT INTO cp_file VALUES ('6071', './scos/4/images/next.gif'); -INSERT INTO cp_file VALUES ('6072', './scos/4/images/close.gif'); -INSERT INTO cp_file VALUES ('6073', './scos/4/images/loading.gif'); -INSERT INTO cp_file VALUES ('6074', './scos/4/images/like.png'); -INSERT INTO cp_file VALUES ('6075', './scos/4/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('6077', './scos/5/index.xml'); -INSERT INTO cp_file VALUES ('6078', './scos/5/p2sco.xsd'); -INSERT INTO cp_file VALUES ('6079', './scos/5/index.html'); -INSERT INTO cp_file VALUES ('6081', './scos/5/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('6082', './scos/5/pictures/0.png'); -INSERT INTO cp_file VALUES ('6083', './scos/5/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('6084', './scos/5/pictures/1.png'); -INSERT INTO cp_file VALUES ('6087', './scos/5/custom.xsl'); -INSERT INTO cp_file VALUES ('6088', './scos/5/css/custom.css'); -INSERT INTO cp_file VALUES ('6089', './scos/5/js/custom.js'); -INSERT INTO cp_file VALUES ('6090', './scos/5/js/x/x.js'); -INSERT INTO cp_file VALUES ('6091', './scos/5/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('6092', './scos/5/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('6093', './scos/5/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('6094', './scos/5/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('6095', './scos/5/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('6096', './scos/5/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('6097', './scos/5/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('6098', './scos/5/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('6099', './scos/5/css/lightbox.css'); -INSERT INTO cp_file VALUES ('6100', './scos/5/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('6101', './scos/5/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('6102', './scos/5/icons/gdict.png'); -INSERT INTO cp_file VALUES ('6103', './scos/5/icons/html.png'); -INSERT INTO cp_file VALUES ('6104', './scos/5/icons/n_link.png'); -INSERT INTO cp_file VALUES ('6105', './scos/5/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('6106', './scos/5/icons/audio.png'); -INSERT INTO cp_file VALUES ('6107', './scos/5/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('6108', './scos/5/icons/file.png'); -INSERT INTO cp_file VALUES ('6109', './scos/5/icons/likert.png'); -INSERT INTO cp_file VALUES ('6110', './scos/5/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('6111', './scos/5/icons/word.png'); -INSERT INTO cp_file VALUES ('6112', './scos/5/icons/pixel.png'); -INSERT INTO cp_file VALUES ('6113', './scos/5/icons/hint.png'); -INSERT INTO cp_file VALUES ('6114', './scos/5/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('6115', './scos/5/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('6116', './scos/5/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('6117', './scos/5/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('6118', './scos/5/icons/pdf.png'); -INSERT INTO cp_file VALUES ('6119', './scos/5/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('6120', './scos/5/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('6121', './scos/5/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('6122', './scos/5/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('6123', './scos/5/icons/like.png'); -INSERT INTO cp_file VALUES ('6124', './scos/5/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('6125', './scos/5/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('6126', './scos/5/images/blank.gif'); -INSERT INTO cp_file VALUES ('6127', './scos/5/images/yes.png'); -INSERT INTO cp_file VALUES ('6128', './scos/5/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('6129', './scos/5/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('6130', './scos/5/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('6131', './scos/5/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('6132', './scos/5/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('6133', './scos/5/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('6134', './scos/5/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('6135', './scos/5/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('6136', './scos/5/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('6137', './scos/5/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('6138', './scos/5/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('6139', './scos/5/images/core.png'); -INSERT INTO cp_file VALUES ('6140', './scos/5/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('6141', './scos/5/images/pixel.png'); -INSERT INTO cp_file VALUES ('6142', './scos/5/images/no.png'); -INSERT INTO cp_file VALUES ('6143', './scos/5/images/on.png'); -INSERT INTO cp_file VALUES ('6144', './scos/5/images/off.png'); -INSERT INTO cp_file VALUES ('6145', './scos/5/images/prev.gif'); -INSERT INTO cp_file VALUES ('6146', './scos/5/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('6147', './scos/5/images/yesno.png'); -INSERT INTO cp_file VALUES ('6148', './scos/5/images/n_no.gif'); -INSERT INTO cp_file VALUES ('6149', './scos/5/images/n_selected.png'); -INSERT INTO cp_file VALUES ('6150', './scos/5/images/next.gif'); -INSERT INTO cp_file VALUES ('6151', './scos/5/images/close.gif'); -INSERT INTO cp_file VALUES ('6152', './scos/5/images/loading.gif'); -INSERT INTO cp_file VALUES ('6153', './scos/5/images/like.png'); -INSERT INTO cp_file VALUES ('6154', './scos/5/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('6156', 'adlcp_v1p3.xsd'); -INSERT INTO cp_file VALUES ('6157', 'adlseq_v1p3.xsd'); -INSERT INTO cp_file VALUES ('6158', 'imsss_v1p0.xsd'); -INSERT INTO cp_file VALUES ('6159', 'adlnav_v1p3.xsd'); -INSERT INTO cp_file VALUES ('6160', 'imscp_v1p1.xsd'); -INSERT INTO cp_file VALUES ('6161', 'imsmanifest.xml'); -INSERT INTO cp_file VALUES ('6162', 'imsss_v1p0auxresource.xsd'); -INSERT INTO cp_file VALUES ('6163', 'imsss_v1p0control.xsd'); -INSERT INTO cp_file VALUES ('6164', 'imsss_v1p0delivery.xsd'); -INSERT INTO cp_file VALUES ('6165', 'imsss_v1p0limit.xsd'); -INSERT INTO cp_file VALUES ('6166', 'imsss_v1p0objective.xsd'); -INSERT INTO cp_file VALUES ('6167', 'imsss_v1p0random.xsd'); -INSERT INTO cp_file VALUES ('6168', 'imsss_v1p0rollup.xsd'); -INSERT INTO cp_file VALUES ('6169', 'imsss_v1p0seqrule.xsd'); -INSERT INTO cp_file VALUES ('6170', 'imsss_v1p0util.xsd'); -INSERT INTO cp_file VALUES ('6171', 'xml.xsd'); -INSERT INTO cp_file VALUES ('6172', 'index.html'); -INSERT INTO cp_file VALUES ('6199', 'intro.htm'); -INSERT INTO cp_file VALUES ('6200', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6201', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6202', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6204', 'Lesson1.htm'); -INSERT INTO cp_file VALUES ('6205', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6206', 'images/LessonTitle1.gif'); -INSERT INTO cp_file VALUES ('6207', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6208', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6209', 'images/interfacesmall.jpg'); -INSERT INTO cp_file VALUES ('6210', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6212', 'Lesson2.htm'); -INSERT INTO cp_file VALUES ('6213', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6214', 'images/HandTool.gif'); -INSERT INTO cp_file VALUES ('6215', 'images/LessonTitle2.gif'); -INSERT INTO cp_file VALUES ('6216', 'images/ZoomToolIcon.gif'); -INSERT INTO cp_file VALUES ('6217', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6218', 'images/colorselect.gif'); -INSERT INTO cp_file VALUES ('6219', 'images/enhancementtools.gif'); -INSERT INTO cp_file VALUES ('6220', 'images/eyedroppertool.gif'); -INSERT INTO cp_file VALUES ('6221', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6222', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6223', 'images/navagationtools.gif'); -INSERT INTO cp_file VALUES ('6224', 'images/objecttools.gif'); -INSERT INTO cp_file VALUES ('6225', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6226', 'images/selectiontools.gif'); -INSERT INTO cp_file VALUES ('6227', 'images/toolbox.gif'); -INSERT INTO cp_file VALUES ('6229', 'Lesson3.htm'); -INSERT INTO cp_file VALUES ('6230', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6231', 'images/LessonTitle3.gif'); -INSERT INTO cp_file VALUES ('6232', 'images/defaultpalettes.gif'); -INSERT INTO cp_file VALUES ('6233', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6234', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6235', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6237', 'Lesson4.htm'); -INSERT INTO cp_file VALUES ('6238', 'images/37.gif'); -INSERT INTO cp_file VALUES ('6239', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6240', 'images/LessonTitle4.gif'); -INSERT INTO cp_file VALUES ('6241', 'images/eyeicon.gif'); -INSERT INTO cp_file VALUES ('6242', 'images/flatlayers.gif'); -INSERT INTO cp_file VALUES ('6243', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6244', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6245', 'images/layerarrows.gif'); -INSERT INTO cp_file VALUES ('6246', 'images/layers.gif'); -INSERT INTO cp_file VALUES ('6247', 'images/linkicon.gif'); -INSERT INTO cp_file VALUES ('6248', 'images/newlayericon.gif'); -INSERT INTO cp_file VALUES ('6249', 'images/paintbrush.gif'); -INSERT INTO cp_file VALUES ('6250', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6252', 'Lesson5.htm'); -INSERT INTO cp_file VALUES ('6253', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6254', 'images/LessonTitle5.gif'); -INSERT INTO cp_file VALUES ('6255', 'images/Tree-and-DragonsGreen.jpg'); -INSERT INTO cp_file VALUES ('6256', 'images/Tree-and-Dragonsnot-Green.jpg'); -INSERT INTO cp_file VALUES ('6257', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6258', 'images/colorbalancebox.gif'); -INSERT INTO cp_file VALUES ('6259', 'images/colorbalancemenu2.gif'); -INSERT INTO cp_file VALUES ('6260', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6261', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6262', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6264', 'Lesson6.htm'); -INSERT INTO cp_file VALUES ('6265', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6266', 'images/Jar-GateDark.jpg'); -INSERT INTO cp_file VALUES ('6267', 'images/Jar-GateLight.jpg'); -INSERT INTO cp_file VALUES ('6268', 'images/LessonTitle6.gif'); -INSERT INTO cp_file VALUES ('6269', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6270', 'images/brightnesscontrastbox.gif'); -INSERT INTO cp_file VALUES ('6271', 'images/brightnesscontrastmenu.gif'); -INSERT INTO cp_file VALUES ('6272', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6273', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6274', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6276', 'Lesson7.htm'); -INSERT INTO cp_file VALUES ('6277', 'images/Circular-GateDark.jpg'); -INSERT INTO cp_file VALUES ('6278', 'images/Circular-GateLight.jpg'); -INSERT INTO cp_file VALUES ('6279', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6280', 'images/LessonTitle7.gif'); -INSERT INTO cp_file VALUES ('6281', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6282', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6283', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6284', 'images/huesaturationbox.gif'); -INSERT INTO cp_file VALUES ('6285', 'images/huesaturationmenu.gif'); -INSERT INTO cp_file VALUES ('6286', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6288', 'Lesson8.htm'); -INSERT INTO cp_file VALUES ('6289', 'images/Addition.gif'); -INSERT INTO cp_file VALUES ('6290', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6291', 'images/IntersectionIcon.gif'); -INSERT INTO cp_file VALUES ('6292', 'images/LessonTitle8.gif'); -INSERT INTO cp_file VALUES ('6293', 'images/MagicWandBar.gif'); -INSERT INTO cp_file VALUES ('6294', 'images/MagicWandIcon.gif'); -INSERT INTO cp_file VALUES ('6295', 'images/Selection.gif'); -INSERT INTO cp_file VALUES ('6296', 'images/SubtractionIcon.gif'); -INSERT INTO cp_file VALUES ('6297', 'images/addtosubtractfromselection.gif'); -INSERT INTO cp_file VALUES ('6298', 'images/dafbackground.jpg'); -INSERT INTO cp_file VALUES ('6299', 'images/dafmagicselect.jpg'); -INSERT INTO cp_file VALUES ('6300', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6301', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6302', 'images/lassotools.gif'); -INSERT INTO cp_file VALUES ('6303', 'images/marqueetools.gif'); -INSERT INTO cp_file VALUES ('6304', 'images/originaldaf.jpg'); -INSERT INTO cp_file VALUES ('6305', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6306', 'images/selectiontools.gif'); -INSERT INTO cp_file VALUES ('6307', 'images/singledafselection.jpg'); -INSERT INTO cp_file VALUES ('6309', 'Lesson9.htm'); -INSERT INTO cp_file VALUES ('6310', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6311', 'images/LessonTitle9.gif'); -INSERT INTO cp_file VALUES ('6312', 'images/TransformFlyout.gif'); -INSERT INTO cp_file VALUES ('6313', 'images/birdfeeder.jpg'); -INSERT INTO cp_file VALUES ('6314', 'images/birdfeederdistort.gif'); -INSERT INTO cp_file VALUES ('6315', 'images/birdfeederflip.gif'); -INSERT INTO cp_file VALUES ('6316', 'images/birdfeederperspective.gif'); -INSERT INTO cp_file VALUES ('6317', 'images/birdfeederrotated.jpg'); -INSERT INTO cp_file VALUES ('6318', 'images/birdfeederscaled.jpg'); -INSERT INTO cp_file VALUES ('6319', 'images/birdfeederskewed.gif'); -INSERT INTO cp_file VALUES ('6320', 'images/box-distort.gif'); -INSERT INTO cp_file VALUES ('6321', 'images/box-flip.gif'); -INSERT INTO cp_file VALUES ('6322', 'images/box-perspective.gif'); -INSERT INTO cp_file VALUES ('6323', 'images/box-rotate.gif'); -INSERT INTO cp_file VALUES ('6324', 'images/box-scale.gif'); -INSERT INTO cp_file VALUES ('6325', 'images/box-skew.gif'); -INSERT INTO cp_file VALUES ('6326', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6327', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6328', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6329', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6330', 'images/transformCheck.gif'); -INSERT INTO cp_file VALUES ('6331', 'images/transformX.gif'); -INSERT INTO cp_file VALUES ('6333', 'Question1.htm'); -INSERT INTO cp_file VALUES ('6334', 'util/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6336', 'Question2.htm'); -INSERT INTO cp_file VALUES ('6337', 'util/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6339', 'Question3.htm'); -INSERT INTO cp_file VALUES ('6340', 'util/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6342', 'Question4.htm'); -INSERT INTO cp_file VALUES ('6343', 'util/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6345', 'Question5.htm'); -INSERT INTO cp_file VALUES ('6346', 'util/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6348', 'Question6.htm'); -INSERT INTO cp_file VALUES ('6349', 'util/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6351', 'Question7.htm'); -INSERT INTO cp_file VALUES ('6352', 'util/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6354', 'Question8.htm'); -INSERT INTO cp_file VALUES ('6355', 'util/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6357', 'Question9.htm'); -INSERT INTO cp_file VALUES ('6358', 'util/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6416', 'intro.htm'); -INSERT INTO cp_file VALUES ('6417', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6418', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6419', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6420', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6421', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6423', 'Lesson1.htm'); -INSERT INTO cp_file VALUES ('6424', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6425', 'images/LessonTitle1.gif'); -INSERT INTO cp_file VALUES ('6426', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6427', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6428', 'images/interfacesmall.jpg'); -INSERT INTO cp_file VALUES ('6429', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6430', 'Lesson2.htm'); -INSERT INTO cp_file VALUES ('6431', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6432', 'images/HandTool.gif'); -INSERT INTO cp_file VALUES ('6433', 'images/LessonTitle2.gif'); -INSERT INTO cp_file VALUES ('6434', 'images/ZoomToolIcon.gif'); -INSERT INTO cp_file VALUES ('6435', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6436', 'images/colorselect.gif'); -INSERT INTO cp_file VALUES ('6437', 'images/enhancementtools.gif'); -INSERT INTO cp_file VALUES ('6438', 'images/eyedroppertool.gif'); -INSERT INTO cp_file VALUES ('6439', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6440', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6441', 'images/navagationtools.gif'); -INSERT INTO cp_file VALUES ('6442', 'images/objecttools.gif'); -INSERT INTO cp_file VALUES ('6443', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6444', 'images/selectiontools.gif'); -INSERT INTO cp_file VALUES ('6445', 'images/toolbox.gif'); -INSERT INTO cp_file VALUES ('6446', 'Lesson3.htm'); -INSERT INTO cp_file VALUES ('6447', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6448', 'images/LessonTitle3.gif'); -INSERT INTO cp_file VALUES ('6449', 'images/defaultpalettes.gif'); -INSERT INTO cp_file VALUES ('6450', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6451', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6452', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6453', 'Lesson4.htm'); -INSERT INTO cp_file VALUES ('6454', 'images/37.gif'); -INSERT INTO cp_file VALUES ('6455', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6456', 'images/LessonTitle4.gif'); -INSERT INTO cp_file VALUES ('6457', 'images/eyeicon.gif'); -INSERT INTO cp_file VALUES ('6458', 'images/flatlayers.gif'); -INSERT INTO cp_file VALUES ('6459', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6460', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6461', 'images/layerarrows.gif'); -INSERT INTO cp_file VALUES ('6462', 'images/layers.gif'); -INSERT INTO cp_file VALUES ('6463', 'images/linkicon.gif'); -INSERT INTO cp_file VALUES ('6464', 'images/newlayericon.gif'); -INSERT INTO cp_file VALUES ('6465', 'images/paintbrush.gif'); -INSERT INTO cp_file VALUES ('6466', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6467', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6468', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6470', 'Lesson5.htm'); -INSERT INTO cp_file VALUES ('6471', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6472', 'images/LessonTitle5.gif'); -INSERT INTO cp_file VALUES ('6473', 'images/Tree-and-DragonsGreen.jpg'); -INSERT INTO cp_file VALUES ('6474', 'images/Tree-and-Dragonsnot-Green.jpg'); -INSERT INTO cp_file VALUES ('6475', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6476', 'images/colorbalancebox.gif'); -INSERT INTO cp_file VALUES ('6477', 'images/colorbalancemenu2.gif'); -INSERT INTO cp_file VALUES ('6478', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6479', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6480', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6481', 'Lesson6.htm'); -INSERT INTO cp_file VALUES ('6482', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6483', 'images/Jar-GateDark.jpg'); -INSERT INTO cp_file VALUES ('6484', 'images/Jar-GateLight.jpg'); -INSERT INTO cp_file VALUES ('6485', 'images/LessonTitle6.gif'); -INSERT INTO cp_file VALUES ('6486', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6487', 'images/brightnesscontrastbox.gif'); -INSERT INTO cp_file VALUES ('6488', 'images/brightnesscontrastmenu.gif'); -INSERT INTO cp_file VALUES ('6489', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6490', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6491', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6492', 'Lesson7.htm'); -INSERT INTO cp_file VALUES ('6493', 'images/Circular-GateDark.jpg'); -INSERT INTO cp_file VALUES ('6494', 'images/Circular-GateLight.jpg'); -INSERT INTO cp_file VALUES ('6495', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6496', 'images/LessonTitle7.gif'); -INSERT INTO cp_file VALUES ('6497', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6498', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6499', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6500', 'images/huesaturationbox.gif'); -INSERT INTO cp_file VALUES ('6501', 'images/huesaturationmenu.gif'); -INSERT INTO cp_file VALUES ('6502', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6503', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6504', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6506', 'Lesson8.htm'); -INSERT INTO cp_file VALUES ('6507', 'images/Addition.gif'); -INSERT INTO cp_file VALUES ('6508', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6509', 'images/IntersectionIcon.gif'); -INSERT INTO cp_file VALUES ('6510', 'images/LessonTitle8.gif'); -INSERT INTO cp_file VALUES ('6511', 'images/MagicWandBar.gif'); -INSERT INTO cp_file VALUES ('6512', 'images/MagicWandIcon.gif'); -INSERT INTO cp_file VALUES ('6513', 'images/Selection.gif'); -INSERT INTO cp_file VALUES ('6514', 'images/SubtractionIcon.gif'); -INSERT INTO cp_file VALUES ('6515', 'images/addtosubtractfromselection.gif'); -INSERT INTO cp_file VALUES ('6516', 'images/dafbackground.jpg'); -INSERT INTO cp_file VALUES ('6517', 'images/dafmagicselect.jpg'); -INSERT INTO cp_file VALUES ('6518', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6519', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6520', 'images/lassotools.gif'); -INSERT INTO cp_file VALUES ('6521', 'images/marqueetools.gif'); -INSERT INTO cp_file VALUES ('6522', 'images/originaldaf.jpg'); -INSERT INTO cp_file VALUES ('6523', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6524', 'images/selectiontools.gif'); -INSERT INTO cp_file VALUES ('6525', 'images/singledafselection.jpg'); -INSERT INTO cp_file VALUES ('6526', 'Lesson9.htm'); -INSERT INTO cp_file VALUES ('6527', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6528', 'images/LessonTitle9.gif'); -INSERT INTO cp_file VALUES ('6529', 'images/TransformFlyout.gif'); -INSERT INTO cp_file VALUES ('6530', 'images/birdfeeder.jpg'); -INSERT INTO cp_file VALUES ('6531', 'images/birdfeederdistort.gif'); -INSERT INTO cp_file VALUES ('6532', 'images/birdfeederflip.gif'); -INSERT INTO cp_file VALUES ('6533', 'images/birdfeederperspective.gif'); -INSERT INTO cp_file VALUES ('6534', 'images/birdfeederrotated.jpg'); -INSERT INTO cp_file VALUES ('6535', 'images/birdfeederscaled.jpg'); -INSERT INTO cp_file VALUES ('6536', 'images/birdfeederskewed.gif'); -INSERT INTO cp_file VALUES ('6537', 'images/box-distort.gif'); -INSERT INTO cp_file VALUES ('6538', 'images/box-flip.gif'); -INSERT INTO cp_file VALUES ('6539', 'images/box-perspective.gif'); -INSERT INTO cp_file VALUES ('6540', 'images/box-rotate.gif'); -INSERT INTO cp_file VALUES ('6541', 'images/box-scale.gif'); -INSERT INTO cp_file VALUES ('6542', 'images/box-skew.gif'); -INSERT INTO cp_file VALUES ('6543', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6544', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6545', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6546', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6547', 'images/transformCheck.gif'); -INSERT INTO cp_file VALUES ('6548', 'images/transformX.gif'); -INSERT INTO cp_file VALUES ('6549', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6550', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6552', 'Question1.htm'); -INSERT INTO cp_file VALUES ('6553', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6554', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6556', 'Question2.htm'); -INSERT INTO cp_file VALUES ('6557', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6558', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6560', 'Question3.htm'); -INSERT INTO cp_file VALUES ('6561', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6562', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6564', 'Question4.htm'); -INSERT INTO cp_file VALUES ('6565', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6566', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6568', 'Question5.htm'); -INSERT INTO cp_file VALUES ('6569', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6570', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6572', 'Question6.htm'); -INSERT INTO cp_file VALUES ('6573', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6574', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6576', 'Question7.htm'); -INSERT INTO cp_file VALUES ('6577', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6578', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6580', 'Question8.htm'); -INSERT INTO cp_file VALUES ('6581', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6582', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6584', 'Question9.htm'); -INSERT INTO cp_file VALUES ('6585', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6586', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6644', 'intro.htm'); -INSERT INTO cp_file VALUES ('6645', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6646', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6647', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6648', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6649', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6651', 'Lesson1.htm'); -INSERT INTO cp_file VALUES ('6652', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6653', 'images/LessonTitle1.gif'); -INSERT INTO cp_file VALUES ('6654', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6655', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6656', 'images/interfacesmall.jpg'); -INSERT INTO cp_file VALUES ('6657', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6658', 'Lesson2.htm'); -INSERT INTO cp_file VALUES ('6659', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6660', 'images/HandTool.gif'); -INSERT INTO cp_file VALUES ('6661', 'images/LessonTitle2.gif'); -INSERT INTO cp_file VALUES ('6662', 'images/ZoomToolIcon.gif'); -INSERT INTO cp_file VALUES ('6663', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6664', 'images/colorselect.gif'); -INSERT INTO cp_file VALUES ('6665', 'images/enhancementtools.gif'); -INSERT INTO cp_file VALUES ('6666', 'images/eyedroppertool.gif'); -INSERT INTO cp_file VALUES ('6667', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6668', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6669', 'images/navagationtools.gif'); -INSERT INTO cp_file VALUES ('6670', 'images/objecttools.gif'); -INSERT INTO cp_file VALUES ('6671', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6672', 'images/selectiontools.gif'); -INSERT INTO cp_file VALUES ('6673', 'images/toolbox.gif'); -INSERT INTO cp_file VALUES ('6674', 'Lesson3.htm'); -INSERT INTO cp_file VALUES ('6675', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6676', 'images/LessonTitle3.gif'); -INSERT INTO cp_file VALUES ('6677', 'images/defaultpalettes.gif'); -INSERT INTO cp_file VALUES ('6678', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6679', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6680', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6681', 'Lesson4.htm'); -INSERT INTO cp_file VALUES ('6682', 'images/37.gif'); -INSERT INTO cp_file VALUES ('6683', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6684', 'images/LessonTitle4.gif'); -INSERT INTO cp_file VALUES ('6685', 'images/eyeicon.gif'); -INSERT INTO cp_file VALUES ('6686', 'images/flatlayers.gif'); -INSERT INTO cp_file VALUES ('6687', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6688', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6689', 'images/layerarrows.gif'); -INSERT INTO cp_file VALUES ('6690', 'images/layers.gif'); -INSERT INTO cp_file VALUES ('6691', 'images/linkicon.gif'); -INSERT INTO cp_file VALUES ('6692', 'images/newlayericon.gif'); -INSERT INTO cp_file VALUES ('6693', 'images/paintbrush.gif'); -INSERT INTO cp_file VALUES ('6694', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6695', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6696', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6698', 'Lesson5.htm'); -INSERT INTO cp_file VALUES ('6699', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6700', 'images/LessonTitle5.gif'); -INSERT INTO cp_file VALUES ('6701', 'images/Tree-and-DragonsGreen.jpg'); -INSERT INTO cp_file VALUES ('6702', 'images/Tree-and-Dragonsnot-Green.jpg'); -INSERT INTO cp_file VALUES ('6703', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6704', 'images/colorbalancebox.gif'); -INSERT INTO cp_file VALUES ('6705', 'images/colorbalancemenu2.gif'); -INSERT INTO cp_file VALUES ('6706', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6707', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6708', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6709', 'Lesson6.htm'); -INSERT INTO cp_file VALUES ('6710', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6711', 'images/Jar-GateDark.jpg'); -INSERT INTO cp_file VALUES ('6712', 'images/Jar-GateLight.jpg'); -INSERT INTO cp_file VALUES ('6713', 'images/LessonTitle6.gif'); -INSERT INTO cp_file VALUES ('6714', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6715', 'images/brightnesscontrastbox.gif'); -INSERT INTO cp_file VALUES ('6716', 'images/brightnesscontrastmenu.gif'); -INSERT INTO cp_file VALUES ('6717', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6718', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6719', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6720', 'Lesson7.htm'); -INSERT INTO cp_file VALUES ('6721', 'images/Circular-GateDark.jpg'); -INSERT INTO cp_file VALUES ('6722', 'images/Circular-GateLight.jpg'); -INSERT INTO cp_file VALUES ('6723', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6724', 'images/LessonTitle7.gif'); -INSERT INTO cp_file VALUES ('6725', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6726', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6727', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6728', 'images/huesaturationbox.gif'); -INSERT INTO cp_file VALUES ('6729', 'images/huesaturationmenu.gif'); -INSERT INTO cp_file VALUES ('6730', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6731', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6732', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6734', 'Lesson8.htm'); -INSERT INTO cp_file VALUES ('6735', 'images/Addition.gif'); -INSERT INTO cp_file VALUES ('6736', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6737', 'images/IntersectionIcon.gif'); -INSERT INTO cp_file VALUES ('6738', 'images/LessonTitle8.gif'); -INSERT INTO cp_file VALUES ('6739', 'images/MagicWandBar.gif'); -INSERT INTO cp_file VALUES ('6740', 'images/MagicWandIcon.gif'); -INSERT INTO cp_file VALUES ('6741', 'images/Selection.gif'); -INSERT INTO cp_file VALUES ('6742', 'images/SubtractionIcon.gif'); -INSERT INTO cp_file VALUES ('6743', 'images/addtosubtractfromselection.gif'); -INSERT INTO cp_file VALUES ('6744', 'images/dafbackground.jpg'); -INSERT INTO cp_file VALUES ('6745', 'images/dafmagicselect.jpg'); -INSERT INTO cp_file VALUES ('6746', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6747', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6748', 'images/lassotools.gif'); -INSERT INTO cp_file VALUES ('6749', 'images/marqueetools.gif'); -INSERT INTO cp_file VALUES ('6750', 'images/originaldaf.jpg'); -INSERT INTO cp_file VALUES ('6751', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6752', 'images/selectiontools.gif'); -INSERT INTO cp_file VALUES ('6753', 'images/singledafselection.jpg'); -INSERT INTO cp_file VALUES ('6754', 'Lesson9.htm'); -INSERT INTO cp_file VALUES ('6755', 'images/EndOfLesson.gif'); -INSERT INTO cp_file VALUES ('6756', 'images/LessonTitle9.gif'); -INSERT INTO cp_file VALUES ('6757', 'images/TransformFlyout.gif'); -INSERT INTO cp_file VALUES ('6758', 'images/birdfeeder.jpg'); -INSERT INTO cp_file VALUES ('6759', 'images/birdfeederdistort.gif'); -INSERT INTO cp_file VALUES ('6760', 'images/birdfeederflip.gif'); -INSERT INTO cp_file VALUES ('6761', 'images/birdfeederperspective.gif'); -INSERT INTO cp_file VALUES ('6762', 'images/birdfeederrotated.jpg'); -INSERT INTO cp_file VALUES ('6763', 'images/birdfeederscaled.jpg'); -INSERT INTO cp_file VALUES ('6764', 'images/birdfeederskewed.gif'); -INSERT INTO cp_file VALUES ('6765', 'images/box-distort.gif'); -INSERT INTO cp_file VALUES ('6766', 'images/box-flip.gif'); -INSERT INTO cp_file VALUES ('6767', 'images/box-perspective.gif'); -INSERT INTO cp_file VALUES ('6768', 'images/box-rotate.gif'); -INSERT INTO cp_file VALUES ('6769', 'images/box-scale.gif'); -INSERT INTO cp_file VALUES ('6770', 'images/box-skew.gif'); -INSERT INTO cp_file VALUES ('6771', 'images/box.gif'); -INSERT INTO cp_file VALUES ('6772', 'images/headerside.gif'); -INSERT INTO cp_file VALUES ('6773', 'images/headertop.gif'); -INSERT INTO cp_file VALUES ('6774', 'images/pssidebar.gif'); -INSERT INTO cp_file VALUES ('6775', 'images/transformCheck.gif'); -INSERT INTO cp_file VALUES ('6776', 'images/transformX.gif'); -INSERT INTO cp_file VALUES ('6777', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6778', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6780', 'Question1.htm'); -INSERT INTO cp_file VALUES ('6781', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6782', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6784', 'Question2.htm'); -INSERT INTO cp_file VALUES ('6785', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6786', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6788', 'Question3.htm'); -INSERT INTO cp_file VALUES ('6789', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6790', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6792', 'Question4.htm'); -INSERT INTO cp_file VALUES ('6793', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6794', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6796', 'Question5.htm'); -INSERT INTO cp_file VALUES ('6797', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6798', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6800', 'Question6.htm'); -INSERT INTO cp_file VALUES ('6801', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6802', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6804', 'Question7.htm'); -INSERT INTO cp_file VALUES ('6805', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6806', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6808', 'Question8.htm'); -INSERT INTO cp_file VALUES ('6809', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6810', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6812', 'Question9.htm'); -INSERT INTO cp_file VALUES ('6813', 'util/Photoshop_APIWrapper.js'); -INSERT INTO cp_file VALUES ('6814', 'util/Photoshop_SCOFunctions.js'); -INSERT INTO cp_file VALUES ('6846', 'SequenceCap.html'); -INSERT INTO cp_file VALUES ('6848', 'e78a86fa23ee48f7a94b940d215c2d61.scorm.html'); -INSERT INTO cp_file VALUES ('6849', 'e78a86fa23ee48f7a94b940d215c2d61.html'); -INSERT INTO cp_file VALUES ('6850', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6851', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6852', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6853', 'res/ISAssessment-model.js'); -INSERT INTO cp_file VALUES ('6854', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6856', '02d2c79bc48441859c3f00f5ec2540c5.scorm.html'); -INSERT INTO cp_file VALUES ('6857', '02d2c79bc48441859c3f00f5ec2540c5.html'); -INSERT INTO cp_file VALUES ('6858', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6859', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6860', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6861', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6863', 'f5390ebc083c438fb67aa56b67780cff.scorm.html'); -INSERT INTO cp_file VALUES ('6864', 'f5390ebc083c438fb67aa56b67780cff.html'); -INSERT INTO cp_file VALUES ('6865', '3352883595.jpg'); -INSERT INTO cp_file VALUES ('6866', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6867', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6868', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6869', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6871', 'c69a680963fd4ba9803d03b60fa363e8.scorm.html'); -INSERT INTO cp_file VALUES ('6872', 'c69a680963fd4ba9803d03b60fa363e8.html'); -INSERT INTO cp_file VALUES ('6873', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6874', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6875', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6876', 'res/ISAssessment-model.js'); -INSERT INTO cp_file VALUES ('6877', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6879', '1b175b9aa5b441f7ad4a06cb9e989a76.scorm.html'); -INSERT INTO cp_file VALUES ('6880', '1b175b9aa5b441f7ad4a06cb9e989a76.html'); -INSERT INTO cp_file VALUES ('6881', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6882', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6883', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6884', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6886', '776fec1461844972b0ee5615f86b479b.scorm.html'); -INSERT INTO cp_file VALUES ('6887', '776fec1461844972b0ee5615f86b479b.html'); -INSERT INTO cp_file VALUES ('6888', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6889', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6890', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6891', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6893', '5de0f6934391493f859f0323f21e6fb3.scorm.html'); -INSERT INTO cp_file VALUES ('6894', '5de0f6934391493f859f0323f21e6fb3.html'); -INSERT INTO cp_file VALUES ('6895', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6896', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6897', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6898', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6947', 'SequenceCap.html'); -INSERT INTO cp_file VALUES ('6949', 'e78a86fa23ee48f7a94b940d215c2d61.scorm.html'); -INSERT INTO cp_file VALUES ('6950', 'e78a86fa23ee48f7a94b940d215c2d61.html'); -INSERT INTO cp_file VALUES ('6951', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6952', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6953', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6954', 'res/ISAssessment-model.js'); -INSERT INTO cp_file VALUES ('6955', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6957', '02d2c79bc48441859c3f00f5ec2540c5.scorm.html'); -INSERT INTO cp_file VALUES ('6958', '02d2c79bc48441859c3f00f5ec2540c5.html'); -INSERT INTO cp_file VALUES ('6959', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6960', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6961', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6962', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6964', 'f5390ebc083c438fb67aa56b67780cff.scorm.html'); -INSERT INTO cp_file VALUES ('6965', 'f5390ebc083c438fb67aa56b67780cff.html'); -INSERT INTO cp_file VALUES ('6966', '3352883595.jpg'); -INSERT INTO cp_file VALUES ('6967', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6968', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6969', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6970', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6972', 'c69a680963fd4ba9803d03b60fa363e8.scorm.html'); -INSERT INTO cp_file VALUES ('6973', 'c69a680963fd4ba9803d03b60fa363e8.html'); -INSERT INTO cp_file VALUES ('6974', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6975', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6976', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6977', 'res/ISAssessment-model.js'); -INSERT INTO cp_file VALUES ('6978', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6980', '1b175b9aa5b441f7ad4a06cb9e989a76.scorm.html'); -INSERT INTO cp_file VALUES ('6981', '1b175b9aa5b441f7ad4a06cb9e989a76.html'); -INSERT INTO cp_file VALUES ('6982', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6983', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6984', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6985', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6987', '776fec1461844972b0ee5615f86b479b.scorm.html'); -INSERT INTO cp_file VALUES ('6988', '776fec1461844972b0ee5615f86b479b.html'); -INSERT INTO cp_file VALUES ('6989', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6990', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6991', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6992', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('6994', '5de0f6934391493f859f0323f21e6fb3.scorm.html'); -INSERT INTO cp_file VALUES ('6995', '5de0f6934391493f859f0323f21e6fb3.html'); -INSERT INTO cp_file VALUES ('6996', 'res/PageSound.js'); -INSERT INTO cp_file VALUES ('6997', 'res/SkinSound.js'); -INSERT INTO cp_file VALUES ('6998', 'res/skinStyles.css'); -INSERT INTO cp_file VALUES ('6999', 'res/APIWrapper.js'); -INSERT INTO cp_file VALUES ('7078', './scos/1/index.xml'); -INSERT INTO cp_file VALUES ('7079', './scos/1/p2sco.xsd'); -INSERT INTO cp_file VALUES ('7080', './scos/1/index.html'); -INSERT INTO cp_file VALUES ('7082', './scos/1/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('7083', './scos/1/pictures/0.png'); -INSERT INTO cp_file VALUES ('7084', './scos/1/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('7085', './scos/1/pictures/1.png'); -INSERT INTO cp_file VALUES ('7086', './scos/1/pictures/thumbnail-2.png'); -INSERT INTO cp_file VALUES ('7087', './scos/1/pictures/2.png'); -INSERT INTO cp_file VALUES ('7088', './scos/1/files/0.mpg'); -INSERT INTO cp_file VALUES ('7089', './scos/1/pictures/thumbnail-3.png'); -INSERT INTO cp_file VALUES ('7090', './scos/1/pictures/3.png'); -INSERT INTO cp_file VALUES ('7091', './scos/1/pictures/thumbnail-4.png'); -INSERT INTO cp_file VALUES ('7092', './scos/1/pictures/4.png'); -INSERT INTO cp_file VALUES ('7094', './scos/1/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('7096', './scos/1/custom.xsl'); -INSERT INTO cp_file VALUES ('7097', './scos/1/css/custom.css'); -INSERT INTO cp_file VALUES ('7098', './scos/1/js/custom.js'); -INSERT INTO cp_file VALUES ('7099', './scos/1/js/x/x.js'); -INSERT INTO cp_file VALUES ('7100', './scos/1/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('7101', './scos/1/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('7102', './scos/1/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('7103', './scos/1/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('7104', './scos/1/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('7105', './scos/1/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('7106', './scos/1/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('7107', './scos/1/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('7108', './scos/1/css/lightbox.css'); -INSERT INTO cp_file VALUES ('7109', './scos/1/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('7110', './scos/1/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('7111', './scos/1/icons/gdict.png'); -INSERT INTO cp_file VALUES ('7112', './scos/1/icons/html.png'); -INSERT INTO cp_file VALUES ('7113', './scos/1/icons/n_link.png'); -INSERT INTO cp_file VALUES ('7114', './scos/1/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('7115', './scos/1/icons/audio.png'); -INSERT INTO cp_file VALUES ('7116', './scos/1/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('7117', './scos/1/icons/file.png'); -INSERT INTO cp_file VALUES ('7118', './scos/1/icons/likert.png'); -INSERT INTO cp_file VALUES ('7119', './scos/1/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('7120', './scos/1/icons/word.png'); -INSERT INTO cp_file VALUES ('7121', './scos/1/icons/pixel.png'); -INSERT INTO cp_file VALUES ('7122', './scos/1/icons/hint.png'); -INSERT INTO cp_file VALUES ('7123', './scos/1/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('7124', './scos/1/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('7125', './scos/1/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('7126', './scos/1/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('7127', './scos/1/icons/pdf.png'); -INSERT INTO cp_file VALUES ('7128', './scos/1/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('7129', './scos/1/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('7130', './scos/1/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('7131', './scos/1/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('7132', './scos/1/icons/like.png'); -INSERT INTO cp_file VALUES ('7133', './scos/1/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('7134', './scos/1/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('7135', './scos/1/images/blank.gif'); -INSERT INTO cp_file VALUES ('7136', './scos/1/images/yes.png'); -INSERT INTO cp_file VALUES ('7137', './scos/1/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('7138', './scos/1/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('7139', './scos/1/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('7140', './scos/1/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('7141', './scos/1/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('7142', './scos/1/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('7143', './scos/1/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('7144', './scos/1/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('7145', './scos/1/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('7146', './scos/1/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('7147', './scos/1/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('7148', './scos/1/images/core.png'); -INSERT INTO cp_file VALUES ('7149', './scos/1/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('7150', './scos/1/images/pixel.png'); -INSERT INTO cp_file VALUES ('7151', './scos/1/images/no.png'); -INSERT INTO cp_file VALUES ('7152', './scos/1/images/on.png'); -INSERT INTO cp_file VALUES ('7153', './scos/1/images/off.png'); -INSERT INTO cp_file VALUES ('7154', './scos/1/images/prev.gif'); -INSERT INTO cp_file VALUES ('7155', './scos/1/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('7156', './scos/1/images/yesno.png'); -INSERT INTO cp_file VALUES ('7157', './scos/1/images/n_no.gif'); -INSERT INTO cp_file VALUES ('7158', './scos/1/images/n_selected.png'); -INSERT INTO cp_file VALUES ('7159', './scos/1/images/next.gif'); -INSERT INTO cp_file VALUES ('7160', './scos/1/images/close.gif'); -INSERT INTO cp_file VALUES ('7161', './scos/1/images/loading.gif'); -INSERT INTO cp_file VALUES ('7162', './scos/1/images/like.png'); -INSERT INTO cp_file VALUES ('7163', './scos/1/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('7165', './scos/2/index.xml'); -INSERT INTO cp_file VALUES ('7166', './scos/2/p2sco.xsd'); -INSERT INTO cp_file VALUES ('7167', './scos/2/index.html'); -INSERT INTO cp_file VALUES ('7169', './scos/2/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('7170', './scos/2/pictures/0.png'); -INSERT INTO cp_file VALUES ('7171', './scos/2/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('7172', './scos/2/pictures/1.png'); -INSERT INTO cp_file VALUES ('7173', './scos/2/documents/0.pdf'); -INSERT INTO cp_file VALUES ('7174', './scos/2/documents/1.pdf'); -INSERT INTO cp_file VALUES ('7176', './scos/2/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('7178', './scos/2/custom.xsl'); -INSERT INTO cp_file VALUES ('7179', './scos/2/css/custom.css'); -INSERT INTO cp_file VALUES ('7180', './scos/2/js/custom.js'); -INSERT INTO cp_file VALUES ('7181', './scos/2/js/x/x.js'); -INSERT INTO cp_file VALUES ('7182', './scos/2/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('7183', './scos/2/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('7184', './scos/2/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('7185', './scos/2/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('7186', './scos/2/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('7187', './scos/2/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('7188', './scos/2/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('7189', './scos/2/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('7190', './scos/2/css/lightbox.css'); -INSERT INTO cp_file VALUES ('7191', './scos/2/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('7192', './scos/2/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('7193', './scos/2/icons/gdict.png'); -INSERT INTO cp_file VALUES ('7194', './scos/2/icons/html.png'); -INSERT INTO cp_file VALUES ('7195', './scos/2/icons/n_link.png'); -INSERT INTO cp_file VALUES ('7196', './scos/2/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('7197', './scos/2/icons/audio.png'); -INSERT INTO cp_file VALUES ('7198', './scos/2/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('7199', './scos/2/icons/file.png'); -INSERT INTO cp_file VALUES ('7200', './scos/2/icons/likert.png'); -INSERT INTO cp_file VALUES ('7201', './scos/2/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('7202', './scos/2/icons/word.png'); -INSERT INTO cp_file VALUES ('7203', './scos/2/icons/pixel.png'); -INSERT INTO cp_file VALUES ('7204', './scos/2/icons/hint.png'); -INSERT INTO cp_file VALUES ('7205', './scos/2/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('7206', './scos/2/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('7207', './scos/2/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('7208', './scos/2/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('7209', './scos/2/icons/pdf.png'); -INSERT INTO cp_file VALUES ('7210', './scos/2/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('7211', './scos/2/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('7212', './scos/2/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('7213', './scos/2/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('7214', './scos/2/icons/like.png'); -INSERT INTO cp_file VALUES ('7215', './scos/2/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('7216', './scos/2/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('7217', './scos/2/images/blank.gif'); -INSERT INTO cp_file VALUES ('7218', './scos/2/images/yes.png'); -INSERT INTO cp_file VALUES ('7219', './scos/2/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('7220', './scos/2/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('7221', './scos/2/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('7222', './scos/2/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('7223', './scos/2/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('7224', './scos/2/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('7225', './scos/2/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('7226', './scos/2/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('7227', './scos/2/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('7228', './scos/2/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('7229', './scos/2/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('7230', './scos/2/images/core.png'); -INSERT INTO cp_file VALUES ('7231', './scos/2/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('7232', './scos/2/images/pixel.png'); -INSERT INTO cp_file VALUES ('7233', './scos/2/images/no.png'); -INSERT INTO cp_file VALUES ('7234', './scos/2/images/on.png'); -INSERT INTO cp_file VALUES ('7235', './scos/2/images/off.png'); -INSERT INTO cp_file VALUES ('7236', './scos/2/images/prev.gif'); -INSERT INTO cp_file VALUES ('7237', './scos/2/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('7238', './scos/2/images/yesno.png'); -INSERT INTO cp_file VALUES ('7239', './scos/2/images/n_no.gif'); -INSERT INTO cp_file VALUES ('7240', './scos/2/images/n_selected.png'); -INSERT INTO cp_file VALUES ('7241', './scos/2/images/next.gif'); -INSERT INTO cp_file VALUES ('7242', './scos/2/images/close.gif'); -INSERT INTO cp_file VALUES ('7243', './scos/2/images/loading.gif'); -INSERT INTO cp_file VALUES ('7244', './scos/2/images/like.png'); -INSERT INTO cp_file VALUES ('7245', './scos/2/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('7247', './scos/3/index.xml'); -INSERT INTO cp_file VALUES ('7248', './scos/3/p2sco.xsd'); -INSERT INTO cp_file VALUES ('7249', './scos/3/index.html'); -INSERT INTO cp_file VALUES ('7251', './scos/3/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('7252', './scos/3/pictures/0.png'); -INSERT INTO cp_file VALUES ('7253', './scos/3/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('7254', './scos/3/pictures/1.png'); -INSERT INTO cp_file VALUES ('7255', './scos/3/pictures/thumbnail-2.png'); -INSERT INTO cp_file VALUES ('7256', './scos/3/pictures/2.png'); -INSERT INTO cp_file VALUES ('7258', './scos/3/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('7260', './scos/3/custom.xsl'); -INSERT INTO cp_file VALUES ('7261', './scos/3/css/custom.css'); -INSERT INTO cp_file VALUES ('7262', './scos/3/js/custom.js'); -INSERT INTO cp_file VALUES ('7263', './scos/3/js/x/x.js'); -INSERT INTO cp_file VALUES ('7264', './scos/3/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('7265', './scos/3/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('7266', './scos/3/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('7267', './scos/3/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('7268', './scos/3/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('7269', './scos/3/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('7270', './scos/3/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('7271', './scos/3/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('7272', './scos/3/css/lightbox.css'); -INSERT INTO cp_file VALUES ('7273', './scos/3/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('7274', './scos/3/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('7275', './scos/3/icons/gdict.png'); -INSERT INTO cp_file VALUES ('7276', './scos/3/icons/html.png'); -INSERT INTO cp_file VALUES ('7277', './scos/3/icons/n_link.png'); -INSERT INTO cp_file VALUES ('7278', './scos/3/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('7279', './scos/3/icons/audio.png'); -INSERT INTO cp_file VALUES ('7280', './scos/3/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('7281', './scos/3/icons/file.png'); -INSERT INTO cp_file VALUES ('7282', './scos/3/icons/likert.png'); -INSERT INTO cp_file VALUES ('7283', './scos/3/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('7284', './scos/3/icons/word.png'); -INSERT INTO cp_file VALUES ('7285', './scos/3/icons/pixel.png'); -INSERT INTO cp_file VALUES ('7286', './scos/3/icons/hint.png'); -INSERT INTO cp_file VALUES ('7287', './scos/3/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('7288', './scos/3/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('7289', './scos/3/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('7290', './scos/3/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('7291', './scos/3/icons/pdf.png'); -INSERT INTO cp_file VALUES ('7292', './scos/3/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('7293', './scos/3/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('7294', './scos/3/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('7295', './scos/3/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('7296', './scos/3/icons/like.png'); -INSERT INTO cp_file VALUES ('7297', './scos/3/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('7298', './scos/3/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('7299', './scos/3/images/blank.gif'); -INSERT INTO cp_file VALUES ('7300', './scos/3/images/yes.png'); -INSERT INTO cp_file VALUES ('7301', './scos/3/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('7302', './scos/3/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('7303', './scos/3/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('7304', './scos/3/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('7305', './scos/3/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('7306', './scos/3/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('7307', './scos/3/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('7308', './scos/3/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('7309', './scos/3/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('7310', './scos/3/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('7311', './scos/3/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('7312', './scos/3/images/core.png'); -INSERT INTO cp_file VALUES ('7313', './scos/3/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('7314', './scos/3/images/pixel.png'); -INSERT INTO cp_file VALUES ('7315', './scos/3/images/no.png'); -INSERT INTO cp_file VALUES ('7316', './scos/3/images/on.png'); -INSERT INTO cp_file VALUES ('7317', './scos/3/images/off.png'); -INSERT INTO cp_file VALUES ('7318', './scos/3/images/prev.gif'); -INSERT INTO cp_file VALUES ('7319', './scos/3/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('7320', './scos/3/images/yesno.png'); -INSERT INTO cp_file VALUES ('7321', './scos/3/images/n_no.gif'); -INSERT INTO cp_file VALUES ('7322', './scos/3/images/n_selected.png'); -INSERT INTO cp_file VALUES ('7323', './scos/3/images/next.gif'); -INSERT INTO cp_file VALUES ('7324', './scos/3/images/close.gif'); -INSERT INTO cp_file VALUES ('7325', './scos/3/images/loading.gif'); -INSERT INTO cp_file VALUES ('7326', './scos/3/images/like.png'); -INSERT INTO cp_file VALUES ('7327', './scos/3/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('7329', './scos/4/index.xml'); -INSERT INTO cp_file VALUES ('7330', './scos/4/p2sco.xsd'); -INSERT INTO cp_file VALUES ('7331', './scos/4/index.html'); -INSERT INTO cp_file VALUES ('7333', './scos/4/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('7334', './scos/4/pictures/0.png'); -INSERT INTO cp_file VALUES ('7335', './scos/4/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('7336', './scos/4/pictures/1.png'); -INSERT INTO cp_file VALUES ('7338', './scos/4/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('7340', './scos/4/custom.xsl'); -INSERT INTO cp_file VALUES ('7341', './scos/4/css/custom.css'); -INSERT INTO cp_file VALUES ('7342', './scos/4/js/custom.js'); -INSERT INTO cp_file VALUES ('7343', './scos/4/js/x/x.js'); -INSERT INTO cp_file VALUES ('7344', './scos/4/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('7345', './scos/4/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('7346', './scos/4/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('7347', './scos/4/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('7348', './scos/4/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('7349', './scos/4/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('7350', './scos/4/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('7351', './scos/4/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('7352', './scos/4/css/lightbox.css'); -INSERT INTO cp_file VALUES ('7353', './scos/4/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('7354', './scos/4/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('7355', './scos/4/icons/gdict.png'); -INSERT INTO cp_file VALUES ('7356', './scos/4/icons/html.png'); -INSERT INTO cp_file VALUES ('7357', './scos/4/icons/n_link.png'); -INSERT INTO cp_file VALUES ('7358', './scos/4/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('7359', './scos/4/icons/audio.png'); -INSERT INTO cp_file VALUES ('7360', './scos/4/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('7361', './scos/4/icons/file.png'); -INSERT INTO cp_file VALUES ('7362', './scos/4/icons/likert.png'); -INSERT INTO cp_file VALUES ('7363', './scos/4/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('7364', './scos/4/icons/word.png'); -INSERT INTO cp_file VALUES ('7365', './scos/4/icons/pixel.png'); -INSERT INTO cp_file VALUES ('7366', './scos/4/icons/hint.png'); -INSERT INTO cp_file VALUES ('7367', './scos/4/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('7368', './scos/4/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('7369', './scos/4/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('7370', './scos/4/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('7371', './scos/4/icons/pdf.png'); -INSERT INTO cp_file VALUES ('7372', './scos/4/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('7373', './scos/4/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('7374', './scos/4/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('7375', './scos/4/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('7376', './scos/4/icons/like.png'); -INSERT INTO cp_file VALUES ('7377', './scos/4/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('7378', './scos/4/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('7379', './scos/4/images/blank.gif'); -INSERT INTO cp_file VALUES ('7380', './scos/4/images/yes.png'); -INSERT INTO cp_file VALUES ('7381', './scos/4/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('7382', './scos/4/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('7383', './scos/4/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('7384', './scos/4/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('7385', './scos/4/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('7386', './scos/4/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('7387', './scos/4/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('7388', './scos/4/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('7389', './scos/4/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('7390', './scos/4/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('7391', './scos/4/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('7392', './scos/4/images/core.png'); -INSERT INTO cp_file VALUES ('7393', './scos/4/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('7394', './scos/4/images/pixel.png'); -INSERT INTO cp_file VALUES ('7395', './scos/4/images/no.png'); -INSERT INTO cp_file VALUES ('7396', './scos/4/images/on.png'); -INSERT INTO cp_file VALUES ('7397', './scos/4/images/off.png'); -INSERT INTO cp_file VALUES ('7398', './scos/4/images/prev.gif'); -INSERT INTO cp_file VALUES ('7399', './scos/4/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('7400', './scos/4/images/yesno.png'); -INSERT INTO cp_file VALUES ('7401', './scos/4/images/n_no.gif'); -INSERT INTO cp_file VALUES ('7402', './scos/4/images/n_selected.png'); -INSERT INTO cp_file VALUES ('7403', './scos/4/images/next.gif'); -INSERT INTO cp_file VALUES ('7404', './scos/4/images/close.gif'); -INSERT INTO cp_file VALUES ('7405', './scos/4/images/loading.gif'); -INSERT INTO cp_file VALUES ('7406', './scos/4/images/like.png'); -INSERT INTO cp_file VALUES ('7407', './scos/4/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('7409', './scos/5/index.xml'); -INSERT INTO cp_file VALUES ('7410', './scos/5/p2sco.xsd'); -INSERT INTO cp_file VALUES ('7411', './scos/5/index.html'); -INSERT INTO cp_file VALUES ('7413', './scos/5/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('7414', './scos/5/pictures/0.png'); -INSERT INTO cp_file VALUES ('7415', './scos/5/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('7416', './scos/5/pictures/1.png'); -INSERT INTO cp_file VALUES ('7417', './scos/5/documents/0.pdf'); -INSERT INTO cp_file VALUES ('7418', './scos/5/pictures/thumbnail-2.png'); -INSERT INTO cp_file VALUES ('7419', './scos/5/pictures/2.png'); -INSERT INTO cp_file VALUES ('7420', './scos/5/pictures/thumbnail-3.png'); -INSERT INTO cp_file VALUES ('7421', './scos/5/pictures/3.png'); -INSERT INTO cp_file VALUES ('7422', './scos/5/pictures/thumbnail-4.png'); -INSERT INTO cp_file VALUES ('7423', './scos/5/pictures/4.png'); -INSERT INTO cp_file VALUES ('7425', './scos/5/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('7427', './scos/5/custom.xsl'); -INSERT INTO cp_file VALUES ('7428', './scos/5/css/custom.css'); -INSERT INTO cp_file VALUES ('7429', './scos/5/js/custom.js'); -INSERT INTO cp_file VALUES ('7430', './scos/5/js/x/x.js'); -INSERT INTO cp_file VALUES ('7431', './scos/5/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('7432', './scos/5/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('7433', './scos/5/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('7434', './scos/5/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('7435', './scos/5/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('7436', './scos/5/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('7437', './scos/5/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('7438', './scos/5/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('7439', './scos/5/css/lightbox.css'); -INSERT INTO cp_file VALUES ('7440', './scos/5/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('7441', './scos/5/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('7442', './scos/5/icons/gdict.png'); -INSERT INTO cp_file VALUES ('7443', './scos/5/icons/html.png'); -INSERT INTO cp_file VALUES ('7444', './scos/5/icons/n_link.png'); -INSERT INTO cp_file VALUES ('7445', './scos/5/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('7446', './scos/5/icons/audio.png'); -INSERT INTO cp_file VALUES ('7447', './scos/5/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('7448', './scos/5/icons/file.png'); -INSERT INTO cp_file VALUES ('7449', './scos/5/icons/likert.png'); -INSERT INTO cp_file VALUES ('7450', './scos/5/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('7451', './scos/5/icons/word.png'); -INSERT INTO cp_file VALUES ('7452', './scos/5/icons/pixel.png'); -INSERT INTO cp_file VALUES ('7453', './scos/5/icons/hint.png'); -INSERT INTO cp_file VALUES ('7454', './scos/5/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('7455', './scos/5/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('7456', './scos/5/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('7457', './scos/5/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('7458', './scos/5/icons/pdf.png'); -INSERT INTO cp_file VALUES ('7459', './scos/5/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('7460', './scos/5/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('7461', './scos/5/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('7462', './scos/5/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('7463', './scos/5/icons/like.png'); -INSERT INTO cp_file VALUES ('7464', './scos/5/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('7465', './scos/5/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('7466', './scos/5/images/blank.gif'); -INSERT INTO cp_file VALUES ('7467', './scos/5/images/yes.png'); -INSERT INTO cp_file VALUES ('7468', './scos/5/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('7469', './scos/5/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('7470', './scos/5/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('7471', './scos/5/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('7472', './scos/5/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('7473', './scos/5/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('7474', './scos/5/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('7475', './scos/5/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('7476', './scos/5/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('7477', './scos/5/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('7478', './scos/5/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('7479', './scos/5/images/core.png'); -INSERT INTO cp_file VALUES ('7480', './scos/5/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('7481', './scos/5/images/pixel.png'); -INSERT INTO cp_file VALUES ('7482', './scos/5/images/no.png'); -INSERT INTO cp_file VALUES ('7483', './scos/5/images/on.png'); -INSERT INTO cp_file VALUES ('7484', './scos/5/images/off.png'); -INSERT INTO cp_file VALUES ('7485', './scos/5/images/prev.gif'); -INSERT INTO cp_file VALUES ('7486', './scos/5/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('7487', './scos/5/images/yesno.png'); -INSERT INTO cp_file VALUES ('7488', './scos/5/images/n_no.gif'); -INSERT INTO cp_file VALUES ('7489', './scos/5/images/n_selected.png'); -INSERT INTO cp_file VALUES ('7490', './scos/5/images/next.gif'); -INSERT INTO cp_file VALUES ('7491', './scos/5/images/close.gif'); -INSERT INTO cp_file VALUES ('7492', './scos/5/images/loading.gif'); -INSERT INTO cp_file VALUES ('7493', './scos/5/images/like.png'); -INSERT INTO cp_file VALUES ('7494', './scos/5/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('7496', './scos/6/index.xml'); -INSERT INTO cp_file VALUES ('7497', './scos/6/p2sco.xsd'); -INSERT INTO cp_file VALUES ('7498', './scos/6/index.html'); -INSERT INTO cp_file VALUES ('7500', './scos/6/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('7501', './scos/6/pictures/0.png'); -INSERT INTO cp_file VALUES ('7502', './scos/6/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('7503', './scos/6/pictures/1.png'); -INSERT INTO cp_file VALUES ('7504', './scos/6/pictures/thumbnail-2.png'); -INSERT INTO cp_file VALUES ('7505', './scos/6/pictures/2.png'); -INSERT INTO cp_file VALUES ('7506', './scos/6/pictures/thumbnail-3.png'); -INSERT INTO cp_file VALUES ('7507', './scos/6/pictures/3.png'); -INSERT INTO cp_file VALUES ('7509', './scos/6/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('7511', './scos/6/custom.xsl'); -INSERT INTO cp_file VALUES ('7512', './scos/6/css/custom.css'); -INSERT INTO cp_file VALUES ('7513', './scos/6/js/custom.js'); -INSERT INTO cp_file VALUES ('7514', './scos/6/js/x/x.js'); -INSERT INTO cp_file VALUES ('7515', './scos/6/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('7516', './scos/6/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('7517', './scos/6/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('7518', './scos/6/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('7519', './scos/6/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('7520', './scos/6/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('7521', './scos/6/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('7522', './scos/6/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('7523', './scos/6/css/lightbox.css'); -INSERT INTO cp_file VALUES ('7524', './scos/6/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('7525', './scos/6/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('7526', './scos/6/icons/gdict.png'); -INSERT INTO cp_file VALUES ('7527', './scos/6/icons/html.png'); -INSERT INTO cp_file VALUES ('7528', './scos/6/icons/n_link.png'); -INSERT INTO cp_file VALUES ('7529', './scos/6/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('7530', './scos/6/icons/audio.png'); -INSERT INTO cp_file VALUES ('7531', './scos/6/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('7532', './scos/6/icons/file.png'); -INSERT INTO cp_file VALUES ('7533', './scos/6/icons/likert.png'); -INSERT INTO cp_file VALUES ('7534', './scos/6/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('7535', './scos/6/icons/word.png'); -INSERT INTO cp_file VALUES ('7536', './scos/6/icons/pixel.png'); -INSERT INTO cp_file VALUES ('7537', './scos/6/icons/hint.png'); -INSERT INTO cp_file VALUES ('7538', './scos/6/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('7539', './scos/6/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('7540', './scos/6/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('7541', './scos/6/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('7542', './scos/6/icons/pdf.png'); -INSERT INTO cp_file VALUES ('7543', './scos/6/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('7544', './scos/6/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('7545', './scos/6/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('7546', './scos/6/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('7547', './scos/6/icons/like.png'); -INSERT INTO cp_file VALUES ('7548', './scos/6/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('7549', './scos/6/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('7550', './scos/6/images/blank.gif'); -INSERT INTO cp_file VALUES ('7551', './scos/6/images/yes.png'); -INSERT INTO cp_file VALUES ('7552', './scos/6/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('7553', './scos/6/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('7554', './scos/6/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('7555', './scos/6/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('7556', './scos/6/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('7557', './scos/6/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('7558', './scos/6/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('7559', './scos/6/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('7560', './scos/6/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('7561', './scos/6/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('7562', './scos/6/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('7563', './scos/6/images/core.png'); -INSERT INTO cp_file VALUES ('7564', './scos/6/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('7565', './scos/6/images/pixel.png'); -INSERT INTO cp_file VALUES ('7566', './scos/6/images/no.png'); -INSERT INTO cp_file VALUES ('7567', './scos/6/images/on.png'); -INSERT INTO cp_file VALUES ('7568', './scos/6/images/off.png'); -INSERT INTO cp_file VALUES ('7569', './scos/6/images/prev.gif'); -INSERT INTO cp_file VALUES ('7570', './scos/6/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('7571', './scos/6/images/yesno.png'); -INSERT INTO cp_file VALUES ('7572', './scos/6/images/n_no.gif'); -INSERT INTO cp_file VALUES ('7573', './scos/6/images/n_selected.png'); -INSERT INTO cp_file VALUES ('7574', './scos/6/images/next.gif'); -INSERT INTO cp_file VALUES ('7575', './scos/6/images/close.gif'); -INSERT INTO cp_file VALUES ('7576', './scos/6/images/loading.gif'); -INSERT INTO cp_file VALUES ('7577', './scos/6/images/like.png'); -INSERT INTO cp_file VALUES ('7578', './scos/6/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('7580', './scos/7/index.xml'); -INSERT INTO cp_file VALUES ('7581', './scos/7/p2sco.xsd'); -INSERT INTO cp_file VALUES ('7582', './scos/7/index.html'); -INSERT INTO cp_file VALUES ('7584', './scos/7/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('7585', './scos/7/pictures/0.png'); -INSERT INTO cp_file VALUES ('7586', './scos/7/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('7587', './scos/7/pictures/1.png'); -INSERT INTO cp_file VALUES ('7589', './scos/7/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('7591', './scos/7/custom.xsl'); -INSERT INTO cp_file VALUES ('7592', './scos/7/css/custom.css'); -INSERT INTO cp_file VALUES ('7593', './scos/7/js/custom.js'); -INSERT INTO cp_file VALUES ('7594', './scos/7/js/x/x.js'); -INSERT INTO cp_file VALUES ('7595', './scos/7/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('7596', './scos/7/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('7597', './scos/7/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('7598', './scos/7/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('7599', './scos/7/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('7600', './scos/7/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('7601', './scos/7/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('7602', './scos/7/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('7603', './scos/7/css/lightbox.css'); -INSERT INTO cp_file VALUES ('7604', './scos/7/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('7605', './scos/7/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('7606', './scos/7/icons/gdict.png'); -INSERT INTO cp_file VALUES ('7607', './scos/7/icons/html.png'); -INSERT INTO cp_file VALUES ('7608', './scos/7/icons/n_link.png'); -INSERT INTO cp_file VALUES ('7609', './scos/7/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('7610', './scos/7/icons/audio.png'); -INSERT INTO cp_file VALUES ('7611', './scos/7/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('7612', './scos/7/icons/file.png'); -INSERT INTO cp_file VALUES ('7613', './scos/7/icons/likert.png'); -INSERT INTO cp_file VALUES ('7614', './scos/7/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('7615', './scos/7/icons/word.png'); -INSERT INTO cp_file VALUES ('7616', './scos/7/icons/pixel.png'); -INSERT INTO cp_file VALUES ('7617', './scos/7/icons/hint.png'); -INSERT INTO cp_file VALUES ('7618', './scos/7/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('7619', './scos/7/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('7620', './scos/7/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('7621', './scos/7/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('7622', './scos/7/icons/pdf.png'); -INSERT INTO cp_file VALUES ('7623', './scos/7/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('7624', './scos/7/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('7625', './scos/7/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('7626', './scos/7/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('7627', './scos/7/icons/like.png'); -INSERT INTO cp_file VALUES ('7628', './scos/7/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('7629', './scos/7/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('7630', './scos/7/images/blank.gif'); -INSERT INTO cp_file VALUES ('7631', './scos/7/images/yes.png'); -INSERT INTO cp_file VALUES ('7632', './scos/7/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('7633', './scos/7/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('7634', './scos/7/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('7635', './scos/7/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('7636', './scos/7/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('7637', './scos/7/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('7638', './scos/7/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('7639', './scos/7/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('7640', './scos/7/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('7641', './scos/7/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('7642', './scos/7/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('7643', './scos/7/images/core.png'); -INSERT INTO cp_file VALUES ('7644', './scos/7/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('7645', './scos/7/images/pixel.png'); -INSERT INTO cp_file VALUES ('7646', './scos/7/images/no.png'); -INSERT INTO cp_file VALUES ('7647', './scos/7/images/on.png'); -INSERT INTO cp_file VALUES ('7648', './scos/7/images/off.png'); -INSERT INTO cp_file VALUES ('7649', './scos/7/images/prev.gif'); -INSERT INTO cp_file VALUES ('7650', './scos/7/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('7651', './scos/7/images/yesno.png'); -INSERT INTO cp_file VALUES ('7652', './scos/7/images/n_no.gif'); -INSERT INTO cp_file VALUES ('7653', './scos/7/images/n_selected.png'); -INSERT INTO cp_file VALUES ('7654', './scos/7/images/next.gif'); -INSERT INTO cp_file VALUES ('7655', './scos/7/images/close.gif'); -INSERT INTO cp_file VALUES ('7656', './scos/7/images/loading.gif'); -INSERT INTO cp_file VALUES ('7657', './scos/7/images/like.png'); -INSERT INTO cp_file VALUES ('7658', './scos/7/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('7660', 'adlcp_v1p3.xsd'); -INSERT INTO cp_file VALUES ('7661', 'adlseq_v1p3.xsd'); -INSERT INTO cp_file VALUES ('7662', 'imsss_v1p0.xsd'); -INSERT INTO cp_file VALUES ('7663', 'adlnav_v1p3.xsd'); -INSERT INTO cp_file VALUES ('7664', 'imscp_v1p1.xsd'); -INSERT INTO cp_file VALUES ('7665', 'imsmanifest.xml'); -INSERT INTO cp_file VALUES ('7666', 'imsss_v1p0auxresource.xsd'); -INSERT INTO cp_file VALUES ('7667', 'imsss_v1p0control.xsd'); -INSERT INTO cp_file VALUES ('7668', 'imsss_v1p0delivery.xsd'); -INSERT INTO cp_file VALUES ('7669', 'imsss_v1p0limit.xsd'); -INSERT INTO cp_file VALUES ('7670', 'imsss_v1p0objective.xsd'); -INSERT INTO cp_file VALUES ('7671', 'imsss_v1p0random.xsd'); -INSERT INTO cp_file VALUES ('7672', 'imsss_v1p0rollup.xsd'); -INSERT INTO cp_file VALUES ('7673', 'imsss_v1p0seqrule.xsd'); -INSERT INTO cp_file VALUES ('7674', 'imsss_v1p0util.xsd'); -INSERT INTO cp_file VALUES ('7675', 'xml.xsd'); -INSERT INTO cp_file VALUES ('7676', 'index.html'); -INSERT INTO cp_file VALUES ('7738', './scos/1/index.xml'); -INSERT INTO cp_file VALUES ('7739', './scos/1/p2sco.xsd'); -INSERT INTO cp_file VALUES ('7740', './scos/1/index.html'); -INSERT INTO cp_file VALUES ('7742', './scos/1/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('7743', './scos/1/pictures/0.png'); -INSERT INTO cp_file VALUES ('7744', './scos/1/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('7745', './scos/1/pictures/1.png'); -INSERT INTO cp_file VALUES ('7746', './scos/1/pictures/thumbnail-2.png'); -INSERT INTO cp_file VALUES ('7747', './scos/1/pictures/2.png'); -INSERT INTO cp_file VALUES ('7748', './scos/1/files/0.mpg'); -INSERT INTO cp_file VALUES ('7749', './scos/1/pictures/thumbnail-3.png'); -INSERT INTO cp_file VALUES ('7750', './scos/1/pictures/3.png'); -INSERT INTO cp_file VALUES ('7751', './scos/1/pictures/thumbnail-4.png'); -INSERT INTO cp_file VALUES ('7752', './scos/1/pictures/4.png'); -INSERT INTO cp_file VALUES ('7754', './scos/1/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('7756', './scos/1/custom.xsl'); -INSERT INTO cp_file VALUES ('7757', './scos/1/css/custom.css'); -INSERT INTO cp_file VALUES ('7758', './scos/1/js/custom.js'); -INSERT INTO cp_file VALUES ('7759', './scos/1/js/x/x.js'); -INSERT INTO cp_file VALUES ('7760', './scos/1/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('7761', './scos/1/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('7762', './scos/1/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('7763', './scos/1/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('7764', './scos/1/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('7765', './scos/1/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('7766', './scos/1/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('7767', './scos/1/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('7768', './scos/1/css/lightbox.css'); -INSERT INTO cp_file VALUES ('7769', './scos/1/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('7770', './scos/1/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('7771', './scos/1/icons/gdict.png'); -INSERT INTO cp_file VALUES ('7772', './scos/1/icons/html.png'); -INSERT INTO cp_file VALUES ('7773', './scos/1/icons/n_link.png'); -INSERT INTO cp_file VALUES ('7774', './scos/1/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('7775', './scos/1/icons/audio.png'); -INSERT INTO cp_file VALUES ('7776', './scos/1/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('7777', './scos/1/icons/file.png'); -INSERT INTO cp_file VALUES ('7778', './scos/1/icons/likert.png'); -INSERT INTO cp_file VALUES ('7779', './scos/1/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('7780', './scos/1/icons/word.png'); -INSERT INTO cp_file VALUES ('7781', './scos/1/icons/pixel.png'); -INSERT INTO cp_file VALUES ('7782', './scos/1/icons/hint.png'); -INSERT INTO cp_file VALUES ('7783', './scos/1/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('7784', './scos/1/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('7785', './scos/1/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('7786', './scos/1/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('7787', './scos/1/icons/pdf.png'); -INSERT INTO cp_file VALUES ('7788', './scos/1/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('7789', './scos/1/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('7790', './scos/1/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('7791', './scos/1/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('7792', './scos/1/icons/like.png'); -INSERT INTO cp_file VALUES ('7793', './scos/1/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('7794', './scos/1/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('7795', './scos/1/images/blank.gif'); -INSERT INTO cp_file VALUES ('7796', './scos/1/images/yes.png'); -INSERT INTO cp_file VALUES ('7797', './scos/1/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('7798', './scos/1/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('7799', './scos/1/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('7800', './scos/1/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('7801', './scos/1/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('7802', './scos/1/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('7803', './scos/1/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('7804', './scos/1/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('7805', './scos/1/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('7806', './scos/1/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('7807', './scos/1/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('7808', './scos/1/images/core.png'); -INSERT INTO cp_file VALUES ('7809', './scos/1/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('7810', './scos/1/images/pixel.png'); -INSERT INTO cp_file VALUES ('7811', './scos/1/images/no.png'); -INSERT INTO cp_file VALUES ('7812', './scos/1/images/on.png'); -INSERT INTO cp_file VALUES ('7813', './scos/1/images/off.png'); -INSERT INTO cp_file VALUES ('7814', './scos/1/images/prev.gif'); -INSERT INTO cp_file VALUES ('7815', './scos/1/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('7816', './scos/1/images/yesno.png'); -INSERT INTO cp_file VALUES ('7817', './scos/1/images/n_no.gif'); -INSERT INTO cp_file VALUES ('7818', './scos/1/images/n_selected.png'); -INSERT INTO cp_file VALUES ('7819', './scos/1/images/next.gif'); -INSERT INTO cp_file VALUES ('7820', './scos/1/images/close.gif'); -INSERT INTO cp_file VALUES ('7821', './scos/1/images/loading.gif'); -INSERT INTO cp_file VALUES ('7822', './scos/1/images/like.png'); -INSERT INTO cp_file VALUES ('7823', './scos/1/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('7825', './scos/2/index.xml'); -INSERT INTO cp_file VALUES ('7826', './scos/2/p2sco.xsd'); -INSERT INTO cp_file VALUES ('7827', './scos/2/index.html'); -INSERT INTO cp_file VALUES ('7829', './scos/2/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('7830', './scos/2/pictures/0.png'); -INSERT INTO cp_file VALUES ('7831', './scos/2/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('7832', './scos/2/pictures/1.png'); -INSERT INTO cp_file VALUES ('7833', './scos/2/documents/0.pdf'); -INSERT INTO cp_file VALUES ('7834', './scos/2/documents/1.pdf'); -INSERT INTO cp_file VALUES ('7836', './scos/2/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('7838', './scos/2/custom.xsl'); -INSERT INTO cp_file VALUES ('7839', './scos/2/css/custom.css'); -INSERT INTO cp_file VALUES ('7840', './scos/2/js/custom.js'); -INSERT INTO cp_file VALUES ('7841', './scos/2/js/x/x.js'); -INSERT INTO cp_file VALUES ('7842', './scos/2/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('7843', './scos/2/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('7844', './scos/2/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('7845', './scos/2/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('7846', './scos/2/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('7847', './scos/2/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('7848', './scos/2/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('7849', './scos/2/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('7850', './scos/2/css/lightbox.css'); -INSERT INTO cp_file VALUES ('7851', './scos/2/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('7852', './scos/2/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('7853', './scos/2/icons/gdict.png'); -INSERT INTO cp_file VALUES ('7854', './scos/2/icons/html.png'); -INSERT INTO cp_file VALUES ('7855', './scos/2/icons/n_link.png'); -INSERT INTO cp_file VALUES ('7856', './scos/2/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('7857', './scos/2/icons/audio.png'); -INSERT INTO cp_file VALUES ('7858', './scos/2/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('7859', './scos/2/icons/file.png'); -INSERT INTO cp_file VALUES ('7860', './scos/2/icons/likert.png'); -INSERT INTO cp_file VALUES ('7861', './scos/2/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('7862', './scos/2/icons/word.png'); -INSERT INTO cp_file VALUES ('7863', './scos/2/icons/pixel.png'); -INSERT INTO cp_file VALUES ('7864', './scos/2/icons/hint.png'); -INSERT INTO cp_file VALUES ('7865', './scos/2/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('7866', './scos/2/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('7867', './scos/2/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('7868', './scos/2/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('7869', './scos/2/icons/pdf.png'); -INSERT INTO cp_file VALUES ('7870', './scos/2/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('7871', './scos/2/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('7872', './scos/2/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('7873', './scos/2/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('7874', './scos/2/icons/like.png'); -INSERT INTO cp_file VALUES ('7875', './scos/2/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('7876', './scos/2/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('7877', './scos/2/images/blank.gif'); -INSERT INTO cp_file VALUES ('7878', './scos/2/images/yes.png'); -INSERT INTO cp_file VALUES ('7879', './scos/2/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('7880', './scos/2/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('7881', './scos/2/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('7882', './scos/2/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('7883', './scos/2/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('7884', './scos/2/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('7885', './scos/2/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('7886', './scos/2/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('7887', './scos/2/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('7888', './scos/2/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('7889', './scos/2/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('7890', './scos/2/images/core.png'); -INSERT INTO cp_file VALUES ('7891', './scos/2/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('7892', './scos/2/images/pixel.png'); -INSERT INTO cp_file VALUES ('7893', './scos/2/images/no.png'); -INSERT INTO cp_file VALUES ('7894', './scos/2/images/on.png'); -INSERT INTO cp_file VALUES ('7895', './scos/2/images/off.png'); -INSERT INTO cp_file VALUES ('7896', './scos/2/images/prev.gif'); -INSERT INTO cp_file VALUES ('7897', './scos/2/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('7898', './scos/2/images/yesno.png'); -INSERT INTO cp_file VALUES ('7899', './scos/2/images/n_no.gif'); -INSERT INTO cp_file VALUES ('7900', './scos/2/images/n_selected.png'); -INSERT INTO cp_file VALUES ('7901', './scos/2/images/next.gif'); -INSERT INTO cp_file VALUES ('7902', './scos/2/images/close.gif'); -INSERT INTO cp_file VALUES ('7903', './scos/2/images/loading.gif'); -INSERT INTO cp_file VALUES ('7904', './scos/2/images/like.png'); -INSERT INTO cp_file VALUES ('7905', './scos/2/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('7907', './scos/3/index.xml'); -INSERT INTO cp_file VALUES ('7908', './scos/3/p2sco.xsd'); -INSERT INTO cp_file VALUES ('7909', './scos/3/index.html'); -INSERT INTO cp_file VALUES ('7911', './scos/3/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('7912', './scos/3/pictures/0.png'); -INSERT INTO cp_file VALUES ('7913', './scos/3/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('7914', './scos/3/pictures/1.png'); -INSERT INTO cp_file VALUES ('7915', './scos/3/pictures/thumbnail-2.png'); -INSERT INTO cp_file VALUES ('7916', './scos/3/pictures/2.png'); -INSERT INTO cp_file VALUES ('7918', './scos/3/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('7920', './scos/3/custom.xsl'); -INSERT INTO cp_file VALUES ('7921', './scos/3/css/custom.css'); -INSERT INTO cp_file VALUES ('7922', './scos/3/js/custom.js'); -INSERT INTO cp_file VALUES ('7923', './scos/3/js/x/x.js'); -INSERT INTO cp_file VALUES ('7924', './scos/3/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('7925', './scos/3/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('7926', './scos/3/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('7927', './scos/3/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('7928', './scos/3/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('7929', './scos/3/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('7930', './scos/3/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('7931', './scos/3/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('7932', './scos/3/css/lightbox.css'); -INSERT INTO cp_file VALUES ('7933', './scos/3/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('7934', './scos/3/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('7935', './scos/3/icons/gdict.png'); -INSERT INTO cp_file VALUES ('7936', './scos/3/icons/html.png'); -INSERT INTO cp_file VALUES ('7937', './scos/3/icons/n_link.png'); -INSERT INTO cp_file VALUES ('7938', './scos/3/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('7939', './scos/3/icons/audio.png'); -INSERT INTO cp_file VALUES ('7940', './scos/3/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('7941', './scos/3/icons/file.png'); -INSERT INTO cp_file VALUES ('7942', './scos/3/icons/likert.png'); -INSERT INTO cp_file VALUES ('7943', './scos/3/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('7944', './scos/3/icons/word.png'); -INSERT INTO cp_file VALUES ('7945', './scos/3/icons/pixel.png'); -INSERT INTO cp_file VALUES ('7946', './scos/3/icons/hint.png'); -INSERT INTO cp_file VALUES ('7947', './scos/3/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('7948', './scos/3/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('7949', './scos/3/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('7950', './scos/3/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('7951', './scos/3/icons/pdf.png'); -INSERT INTO cp_file VALUES ('7952', './scos/3/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('7953', './scos/3/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('7954', './scos/3/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('7955', './scos/3/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('7956', './scos/3/icons/like.png'); -INSERT INTO cp_file VALUES ('7957', './scos/3/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('7958', './scos/3/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('7959', './scos/3/images/blank.gif'); -INSERT INTO cp_file VALUES ('7960', './scos/3/images/yes.png'); -INSERT INTO cp_file VALUES ('7961', './scos/3/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('7962', './scos/3/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('7963', './scos/3/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('7964', './scos/3/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('7965', './scos/3/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('7966', './scos/3/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('7967', './scos/3/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('7968', './scos/3/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('7969', './scos/3/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('7970', './scos/3/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('7971', './scos/3/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('7972', './scos/3/images/core.png'); -INSERT INTO cp_file VALUES ('7973', './scos/3/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('7974', './scos/3/images/pixel.png'); -INSERT INTO cp_file VALUES ('7975', './scos/3/images/no.png'); -INSERT INTO cp_file VALUES ('7976', './scos/3/images/on.png'); -INSERT INTO cp_file VALUES ('7977', './scos/3/images/off.png'); -INSERT INTO cp_file VALUES ('7978', './scos/3/images/prev.gif'); -INSERT INTO cp_file VALUES ('7979', './scos/3/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('7980', './scos/3/images/yesno.png'); -INSERT INTO cp_file VALUES ('7981', './scos/3/images/n_no.gif'); -INSERT INTO cp_file VALUES ('7982', './scos/3/images/n_selected.png'); -INSERT INTO cp_file VALUES ('7983', './scos/3/images/next.gif'); -INSERT INTO cp_file VALUES ('7984', './scos/3/images/close.gif'); -INSERT INTO cp_file VALUES ('7985', './scos/3/images/loading.gif'); -INSERT INTO cp_file VALUES ('7986', './scos/3/images/like.png'); -INSERT INTO cp_file VALUES ('7987', './scos/3/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('7989', './scos/4/index.xml'); -INSERT INTO cp_file VALUES ('7990', './scos/4/p2sco.xsd'); -INSERT INTO cp_file VALUES ('7991', './scos/4/index.html'); -INSERT INTO cp_file VALUES ('7993', './scos/4/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('7994', './scos/4/pictures/0.png'); -INSERT INTO cp_file VALUES ('7995', './scos/4/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('7996', './scos/4/pictures/1.png'); -INSERT INTO cp_file VALUES ('7998', './scos/4/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('8000', './scos/4/custom.xsl'); -INSERT INTO cp_file VALUES ('8001', './scos/4/css/custom.css'); -INSERT INTO cp_file VALUES ('8002', './scos/4/js/custom.js'); -INSERT INTO cp_file VALUES ('8003', './scos/4/js/x/x.js'); -INSERT INTO cp_file VALUES ('8004', './scos/4/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('8005', './scos/4/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('8006', './scos/4/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('8007', './scos/4/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('8008', './scos/4/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('8009', './scos/4/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('8010', './scos/4/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('8011', './scos/4/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('8012', './scos/4/css/lightbox.css'); -INSERT INTO cp_file VALUES ('8013', './scos/4/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('8014', './scos/4/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('8015', './scos/4/icons/gdict.png'); -INSERT INTO cp_file VALUES ('8016', './scos/4/icons/html.png'); -INSERT INTO cp_file VALUES ('8017', './scos/4/icons/n_link.png'); -INSERT INTO cp_file VALUES ('8018', './scos/4/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('8019', './scos/4/icons/audio.png'); -INSERT INTO cp_file VALUES ('8020', './scos/4/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('8021', './scos/4/icons/file.png'); -INSERT INTO cp_file VALUES ('8022', './scos/4/icons/likert.png'); -INSERT INTO cp_file VALUES ('8023', './scos/4/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('8024', './scos/4/icons/word.png'); -INSERT INTO cp_file VALUES ('8025', './scos/4/icons/pixel.png'); -INSERT INTO cp_file VALUES ('8026', './scos/4/icons/hint.png'); -INSERT INTO cp_file VALUES ('8027', './scos/4/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('8028', './scos/4/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('8029', './scos/4/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('8030', './scos/4/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('8031', './scos/4/icons/pdf.png'); -INSERT INTO cp_file VALUES ('8032', './scos/4/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('8033', './scos/4/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('8034', './scos/4/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('8035', './scos/4/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('8036', './scos/4/icons/like.png'); -INSERT INTO cp_file VALUES ('8037', './scos/4/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('8038', './scos/4/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('8039', './scos/4/images/blank.gif'); -INSERT INTO cp_file VALUES ('8040', './scos/4/images/yes.png'); -INSERT INTO cp_file VALUES ('8041', './scos/4/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('8042', './scos/4/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('8043', './scos/4/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('8044', './scos/4/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('8045', './scos/4/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('8046', './scos/4/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('8047', './scos/4/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('8048', './scos/4/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('8049', './scos/4/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('8050', './scos/4/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('8051', './scos/4/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('8052', './scos/4/images/core.png'); -INSERT INTO cp_file VALUES ('8053', './scos/4/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('8054', './scos/4/images/pixel.png'); -INSERT INTO cp_file VALUES ('8055', './scos/4/images/no.png'); -INSERT INTO cp_file VALUES ('8056', './scos/4/images/on.png'); -INSERT INTO cp_file VALUES ('8057', './scos/4/images/off.png'); -INSERT INTO cp_file VALUES ('8058', './scos/4/images/prev.gif'); -INSERT INTO cp_file VALUES ('8059', './scos/4/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('8060', './scos/4/images/yesno.png'); -INSERT INTO cp_file VALUES ('8061', './scos/4/images/n_no.gif'); -INSERT INTO cp_file VALUES ('8062', './scos/4/images/n_selected.png'); -INSERT INTO cp_file VALUES ('8063', './scos/4/images/next.gif'); -INSERT INTO cp_file VALUES ('8064', './scos/4/images/close.gif'); -INSERT INTO cp_file VALUES ('8065', './scos/4/images/loading.gif'); -INSERT INTO cp_file VALUES ('8066', './scos/4/images/like.png'); -INSERT INTO cp_file VALUES ('8067', './scos/4/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('8069', './scos/5/index.xml'); -INSERT INTO cp_file VALUES ('8070', './scos/5/p2sco.xsd'); -INSERT INTO cp_file VALUES ('8071', './scos/5/index.html'); -INSERT INTO cp_file VALUES ('8073', './scos/5/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('8074', './scos/5/pictures/0.png'); -INSERT INTO cp_file VALUES ('8075', './scos/5/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('8076', './scos/5/pictures/1.png'); -INSERT INTO cp_file VALUES ('8077', './scos/5/documents/0.pdf'); -INSERT INTO cp_file VALUES ('8078', './scos/5/pictures/thumbnail-2.png'); -INSERT INTO cp_file VALUES ('8079', './scos/5/pictures/2.png'); -INSERT INTO cp_file VALUES ('8080', './scos/5/pictures/thumbnail-3.png'); -INSERT INTO cp_file VALUES ('8081', './scos/5/pictures/3.png'); -INSERT INTO cp_file VALUES ('8082', './scos/5/pictures/thumbnail-4.png'); -INSERT INTO cp_file VALUES ('8083', './scos/5/pictures/4.png'); -INSERT INTO cp_file VALUES ('8085', './scos/5/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('8087', './scos/5/custom.xsl'); -INSERT INTO cp_file VALUES ('8088', './scos/5/css/custom.css'); -INSERT INTO cp_file VALUES ('8089', './scos/5/js/custom.js'); -INSERT INTO cp_file VALUES ('8090', './scos/5/js/x/x.js'); -INSERT INTO cp_file VALUES ('8091', './scos/5/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('8092', './scos/5/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('8093', './scos/5/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('8094', './scos/5/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('8095', './scos/5/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('8096', './scos/5/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('8097', './scos/5/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('8098', './scos/5/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('8099', './scos/5/css/lightbox.css'); -INSERT INTO cp_file VALUES ('8100', './scos/5/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('8101', './scos/5/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('8102', './scos/5/icons/gdict.png'); -INSERT INTO cp_file VALUES ('8103', './scos/5/icons/html.png'); -INSERT INTO cp_file VALUES ('8104', './scos/5/icons/n_link.png'); -INSERT INTO cp_file VALUES ('8105', './scos/5/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('8106', './scos/5/icons/audio.png'); -INSERT INTO cp_file VALUES ('8107', './scos/5/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('8108', './scos/5/icons/file.png'); -INSERT INTO cp_file VALUES ('8109', './scos/5/icons/likert.png'); -INSERT INTO cp_file VALUES ('8110', './scos/5/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('8111', './scos/5/icons/word.png'); -INSERT INTO cp_file VALUES ('8112', './scos/5/icons/pixel.png'); -INSERT INTO cp_file VALUES ('8113', './scos/5/icons/hint.png'); -INSERT INTO cp_file VALUES ('8114', './scos/5/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('8115', './scos/5/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('8116', './scos/5/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('8117', './scos/5/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('8118', './scos/5/icons/pdf.png'); -INSERT INTO cp_file VALUES ('8119', './scos/5/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('8120', './scos/5/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('8121', './scos/5/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('8122', './scos/5/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('8123', './scos/5/icons/like.png'); -INSERT INTO cp_file VALUES ('8124', './scos/5/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('8125', './scos/5/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('8126', './scos/5/images/blank.gif'); -INSERT INTO cp_file VALUES ('8127', './scos/5/images/yes.png'); -INSERT INTO cp_file VALUES ('8128', './scos/5/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('8129', './scos/5/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('8130', './scos/5/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('8131', './scos/5/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('8132', './scos/5/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('8133', './scos/5/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('8134', './scos/5/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('8135', './scos/5/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('8136', './scos/5/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('8137', './scos/5/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('8138', './scos/5/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('8139', './scos/5/images/core.png'); -INSERT INTO cp_file VALUES ('8140', './scos/5/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('8141', './scos/5/images/pixel.png'); -INSERT INTO cp_file VALUES ('8142', './scos/5/images/no.png'); -INSERT INTO cp_file VALUES ('8143', './scos/5/images/on.png'); -INSERT INTO cp_file VALUES ('8144', './scos/5/images/off.png'); -INSERT INTO cp_file VALUES ('8145', './scos/5/images/prev.gif'); -INSERT INTO cp_file VALUES ('8146', './scos/5/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('8147', './scos/5/images/yesno.png'); -INSERT INTO cp_file VALUES ('8148', './scos/5/images/n_no.gif'); -INSERT INTO cp_file VALUES ('8149', './scos/5/images/n_selected.png'); -INSERT INTO cp_file VALUES ('8150', './scos/5/images/next.gif'); -INSERT INTO cp_file VALUES ('8151', './scos/5/images/close.gif'); -INSERT INTO cp_file VALUES ('8152', './scos/5/images/loading.gif'); -INSERT INTO cp_file VALUES ('8153', './scos/5/images/like.png'); -INSERT INTO cp_file VALUES ('8154', './scos/5/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('8156', './scos/6/index.xml'); -INSERT INTO cp_file VALUES ('8157', './scos/6/p2sco.xsd'); -INSERT INTO cp_file VALUES ('8158', './scos/6/index.html'); -INSERT INTO cp_file VALUES ('8160', './scos/6/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('8161', './scos/6/pictures/0.png'); -INSERT INTO cp_file VALUES ('8162', './scos/6/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('8163', './scos/6/pictures/1.png'); -INSERT INTO cp_file VALUES ('8164', './scos/6/pictures/thumbnail-2.png'); -INSERT INTO cp_file VALUES ('8165', './scos/6/pictures/2.png'); -INSERT INTO cp_file VALUES ('8166', './scos/6/pictures/thumbnail-3.png'); -INSERT INTO cp_file VALUES ('8167', './scos/6/pictures/3.png'); -INSERT INTO cp_file VALUES ('8169', './scos/6/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('8171', './scos/6/custom.xsl'); -INSERT INTO cp_file VALUES ('8172', './scos/6/css/custom.css'); -INSERT INTO cp_file VALUES ('8173', './scos/6/js/custom.js'); -INSERT INTO cp_file VALUES ('8174', './scos/6/js/x/x.js'); -INSERT INTO cp_file VALUES ('8175', './scos/6/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('8176', './scos/6/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('8177', './scos/6/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('8178', './scos/6/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('8179', './scos/6/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('8180', './scos/6/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('8181', './scos/6/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('8182', './scos/6/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('8183', './scos/6/css/lightbox.css'); -INSERT INTO cp_file VALUES ('8184', './scos/6/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('8185', './scos/6/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('8186', './scos/6/icons/gdict.png'); -INSERT INTO cp_file VALUES ('8187', './scos/6/icons/html.png'); -INSERT INTO cp_file VALUES ('8188', './scos/6/icons/n_link.png'); -INSERT INTO cp_file VALUES ('8189', './scos/6/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('8190', './scos/6/icons/audio.png'); -INSERT INTO cp_file VALUES ('8191', './scos/6/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('8192', './scos/6/icons/file.png'); -INSERT INTO cp_file VALUES ('8193', './scos/6/icons/likert.png'); -INSERT INTO cp_file VALUES ('8194', './scos/6/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('8195', './scos/6/icons/word.png'); -INSERT INTO cp_file VALUES ('8196', './scos/6/icons/pixel.png'); -INSERT INTO cp_file VALUES ('8197', './scos/6/icons/hint.png'); -INSERT INTO cp_file VALUES ('8198', './scos/6/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('8199', './scos/6/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('8200', './scos/6/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('8201', './scos/6/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('8202', './scos/6/icons/pdf.png'); -INSERT INTO cp_file VALUES ('8203', './scos/6/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('8204', './scos/6/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('8205', './scos/6/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('8206', './scos/6/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('8207', './scos/6/icons/like.png'); -INSERT INTO cp_file VALUES ('8208', './scos/6/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('8209', './scos/6/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('8210', './scos/6/images/blank.gif'); -INSERT INTO cp_file VALUES ('8211', './scos/6/images/yes.png'); -INSERT INTO cp_file VALUES ('8212', './scos/6/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('8213', './scos/6/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('8214', './scos/6/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('8215', './scos/6/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('8216', './scos/6/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('8217', './scos/6/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('8218', './scos/6/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('8219', './scos/6/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('8220', './scos/6/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('8221', './scos/6/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('8222', './scos/6/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('8223', './scos/6/images/core.png'); -INSERT INTO cp_file VALUES ('8224', './scos/6/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('8225', './scos/6/images/pixel.png'); -INSERT INTO cp_file VALUES ('8226', './scos/6/images/no.png'); -INSERT INTO cp_file VALUES ('8227', './scos/6/images/on.png'); -INSERT INTO cp_file VALUES ('8228', './scos/6/images/off.png'); -INSERT INTO cp_file VALUES ('8229', './scos/6/images/prev.gif'); -INSERT INTO cp_file VALUES ('8230', './scos/6/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('8231', './scos/6/images/yesno.png'); -INSERT INTO cp_file VALUES ('8232', './scos/6/images/n_no.gif'); -INSERT INTO cp_file VALUES ('8233', './scos/6/images/n_selected.png'); -INSERT INTO cp_file VALUES ('8234', './scos/6/images/next.gif'); -INSERT INTO cp_file VALUES ('8235', './scos/6/images/close.gif'); -INSERT INTO cp_file VALUES ('8236', './scos/6/images/loading.gif'); -INSERT INTO cp_file VALUES ('8237', './scos/6/images/like.png'); -INSERT INTO cp_file VALUES ('8238', './scos/6/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('8240', './scos/7/index.xml'); -INSERT INTO cp_file VALUES ('8241', './scos/7/p2sco.xsd'); -INSERT INTO cp_file VALUES ('8242', './scos/7/index.html'); -INSERT INTO cp_file VALUES ('8244', './scos/7/pictures/thumbnail-0.png'); -INSERT INTO cp_file VALUES ('8245', './scos/7/pictures/0.png'); -INSERT INTO cp_file VALUES ('8246', './scos/7/pictures/thumbnail-1.png'); -INSERT INTO cp_file VALUES ('8247', './scos/7/pictures/1.png'); -INSERT INTO cp_file VALUES ('8249', './scos/7/resources/images/n_instruction.png'); -INSERT INTO cp_file VALUES ('8251', './scos/7/custom.xsl'); -INSERT INTO cp_file VALUES ('8252', './scos/7/css/custom.css'); -INSERT INTO cp_file VALUES ('8253', './scos/7/js/custom.js'); -INSERT INTO cp_file VALUES ('8254', './scos/7/js/x/x.js'); -INSERT INTO cp_file VALUES ('8255', './scos/7/js/overlib_mini.js'); -INSERT INTO cp_file VALUES ('8256', './scos/7/js/overlib_cssstyle.js'); -INSERT INTO cp_file VALUES ('8257', './scos/7/js/x/x_drag.js'); -INSERT INTO cp_file VALUES ('8258', './scos/7/js/x/x_timer.js'); -INSERT INTO cp_file VALUES ('8259', './scos/7/js/lightbox/effects.js'); -INSERT INTO cp_file VALUES ('8260', './scos/7/js/lightbox/lightbox.js'); -INSERT INTO cp_file VALUES ('8261', './scos/7/js/lightbox/prototype.js'); -INSERT INTO cp_file VALUES ('8262', './scos/7/js/lightbox/scriptaculous.js'); -INSERT INTO cp_file VALUES ('8263', './scos/7/css/lightbox.css'); -INSERT INTO cp_file VALUES ('8264', './scos/7/icons/n_pdf.png'); -INSERT INTO cp_file VALUES ('8265', './scos/7/icons/n_pollOLD.png'); -INSERT INTO cp_file VALUES ('8266', './scos/7/icons/gdict.png'); -INSERT INTO cp_file VALUES ('8267', './scos/7/icons/html.png'); -INSERT INTO cp_file VALUES ('8268', './scos/7/icons/n_link.png'); -INSERT INTO cp_file VALUES ('8269', './scos/7/icons/n_linkOLD.png'); -INSERT INTO cp_file VALUES ('8270', './scos/7/icons/audio.png'); -INSERT INTO cp_file VALUES ('8271', './scos/7/icons/n_shortAnswer.png'); -INSERT INTO cp_file VALUES ('8272', './scos/7/icons/file.png'); -INSERT INTO cp_file VALUES ('8273', './scos/7/icons/likert.png'); -INSERT INTO cp_file VALUES ('8274', './scos/7/icons/n_attention.png'); -INSERT INTO cp_file VALUES ('8275', './scos/7/icons/word.png'); -INSERT INTO cp_file VALUES ('8276', './scos/7/icons/pixel.png'); -INSERT INTO cp_file VALUES ('8277', './scos/7/icons/hint.png'); -INSERT INTO cp_file VALUES ('8278', './scos/7/icons/n_poll.png'); -INSERT INTO cp_file VALUES ('8279', './scos/7/icons/n_audio.png'); -INSERT INTO cp_file VALUES ('8280', './scos/7/icons/n_instruction.png'); -INSERT INTO cp_file VALUES ('8281', './scos/7/icons/n_selected.png'); -INSERT INTO cp_file VALUES ('8282', './scos/7/icons/pdf.png'); -INSERT INTO cp_file VALUES ('8283', './scos/7/icons/n_anyFile.png'); -INSERT INTO cp_file VALUES ('8284', './scos/7/icons/n_bibliography.png'); -INSERT INTO cp_file VALUES ('8285', './scos/7/icons/pdfnew.png'); -INSERT INTO cp_file VALUES ('8286', './scos/7/icons/n_hint.png'); -INSERT INTO cp_file VALUES ('8287', './scos/7/icons/like.png'); -INSERT INTO cp_file VALUES ('8288', './scos/7/images/n_descriptionList.gif'); -INSERT INTO cp_file VALUES ('8289', './scos/7/images/nextlabel.gif'); -INSERT INTO cp_file VALUES ('8290', './scos/7/images/blank.gif'); -INSERT INTO cp_file VALUES ('8291', './scos/7/images/yes.png'); -INSERT INTO cp_file VALUES ('8292', './scos/7/images/n_TESTbullet2.gif'); -INSERT INTO cp_file VALUES ('8293', './scos/7/images/n_TESTbullet3.gif'); -INSERT INTO cp_file VALUES ('8294', './scos/7/images/n_TESTbullet4.gif'); -INSERT INTO cp_file VALUES ('8295', './scos/7/images/n_TESTbullet5.gif'); -INSERT INTO cp_file VALUES ('8296', './scos/7/images/n_blank.gif'); -INSERT INTO cp_file VALUES ('8297', './scos/7/images/n_arrowBlack.png'); -INSERT INTO cp_file VALUES ('8298', './scos/7/images/closelabel.gif'); -INSERT INTO cp_file VALUES ('8299', './scos/7/images/n_yes.gif'); -INSERT INTO cp_file VALUES ('8300', './scos/7/images/n_quote_L.gif'); -INSERT INTO cp_file VALUES ('8301', './scos/7/images/n_TESTbullet.gif'); -INSERT INTO cp_file VALUES ('8302', './scos/7/images/n_quote_R.gif'); -INSERT INTO cp_file VALUES ('8303', './scos/7/images/core.png'); -INSERT INTO cp_file VALUES ('8304', './scos/7/images/n_quote_L_yellow.gif'); -INSERT INTO cp_file VALUES ('8305', './scos/7/images/pixel.png'); -INSERT INTO cp_file VALUES ('8306', './scos/7/images/no.png'); -INSERT INTO cp_file VALUES ('8307', './scos/7/images/on.png'); -INSERT INTO cp_file VALUES ('8308', './scos/7/images/off.png'); -INSERT INTO cp_file VALUES ('8309', './scos/7/images/prev.gif'); -INSERT INTO cp_file VALUES ('8310', './scos/7/images/n_quote_R_yellow.gif'); -INSERT INTO cp_file VALUES ('8311', './scos/7/images/yesno.png'); -INSERT INTO cp_file VALUES ('8312', './scos/7/images/n_no.gif'); -INSERT INTO cp_file VALUES ('8313', './scos/7/images/n_selected.png'); -INSERT INTO cp_file VALUES ('8314', './scos/7/images/next.gif'); -INSERT INTO cp_file VALUES ('8315', './scos/7/images/close.gif'); -INSERT INTO cp_file VALUES ('8316', './scos/7/images/loading.gif'); -INSERT INTO cp_file VALUES ('8317', './scos/7/images/like.png'); -INSERT INTO cp_file VALUES ('8318', './scos/7/images/prevlabel.gif'); -INSERT INTO cp_file VALUES ('8320', 'adlcp_v1p3.xsd'); -INSERT INTO cp_file VALUES ('8321', 'adlseq_v1p3.xsd'); -INSERT INTO cp_file VALUES ('8322', 'imsss_v1p0.xsd'); -INSERT INTO cp_file VALUES ('8323', 'adlnav_v1p3.xsd'); -INSERT INTO cp_file VALUES ('8324', 'imscp_v1p1.xsd'); -INSERT INTO cp_file VALUES ('8325', 'imsmanifest.xml'); -INSERT INTO cp_file VALUES ('8326', 'imsss_v1p0auxresource.xsd'); -INSERT INTO cp_file VALUES ('8327', 'imsss_v1p0control.xsd'); -INSERT INTO cp_file VALUES ('8328', 'imsss_v1p0delivery.xsd'); -INSERT INTO cp_file VALUES ('8329', 'imsss_v1p0limit.xsd'); -INSERT INTO cp_file VALUES ('8330', 'imsss_v1p0objective.xsd'); -INSERT INTO cp_file VALUES ('8331', 'imsss_v1p0random.xsd'); -INSERT INTO cp_file VALUES ('8332', 'imsss_v1p0rollup.xsd'); -INSERT INTO cp_file VALUES ('8333', 'imsss_v1p0seqrule.xsd'); -INSERT INTO cp_file VALUES ('8334', 'imsss_v1p0util.xsd'); -INSERT INTO cp_file VALUES ('8335', 'xml.xsd'); -INSERT INTO cp_file VALUES ('8336', 'index.html'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_hideLMSUI -# -INSERT INTO cp_hideLMSUI VALUES ('4', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('6', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('8', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('46', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('48', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('50', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('88', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('89', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('90', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('92', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('93', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('94', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('96', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('97', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('98', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('160', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('161', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('162', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('164', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('165', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('166', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('168', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('169', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('170', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('263', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('264', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('265', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('267', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('268', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('269', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('272', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('273', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('274', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('276', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('277', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('278', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('280', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('281', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('282', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('284', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('285', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('286', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('336', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('337', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('338', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('340', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('341', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('342', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('345', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('346', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('347', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('349', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('350', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('351', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('353', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('354', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('355', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('358', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('359', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('360', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('364', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('365', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('366', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('368', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('369', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('370', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('372', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('373', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('374', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('376', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('377', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('378', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('447', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('448', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('449', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('451', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('452', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('453', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('456', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('457', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('458', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('460', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('461', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('462', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('464', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('465', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('466', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('469', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('470', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('471', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('475', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('476', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('477', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('479', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('480', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('481', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('483', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('484', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('485', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('487', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('488', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('489', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('519', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('520', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('521', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('523', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('524', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('525', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('528', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('529', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('530', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('532', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('533', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('534', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('536', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('537', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('538', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('541', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('542', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('543', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('547', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('548', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('549', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('551', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('552', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('553', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('555', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('556', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('557', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('559', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('560', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('561', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('586', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('587', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('588', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('592', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('593', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('594', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('596', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('597', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('598', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('600', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('601', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('602', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('604', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('605', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('606', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('608', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('609', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('610', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('612', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('613', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('614', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('641', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('642', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('643', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('645', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('646', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('647', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('649', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('650', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('651', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('997', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('999', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1001', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1003', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1005', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1007', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1009', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1011', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1013', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1105', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1107', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1109', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1111', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1156', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1157', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1158', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1161', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1162', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1163', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1165', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1166', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1167', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1169', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1170', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1171', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1173', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1174', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1175', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1204', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1205', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1206', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1209', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1210', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1211', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1213', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1214', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1215', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1217', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1218', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1219', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1221', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1222', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1223', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1254', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1255', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1256', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1259', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1260', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1261', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1263', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1264', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1265', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1267', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1268', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1269', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1271', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1272', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1273', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1374', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1375', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1376', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1379', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1380', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1381', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1383', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1384', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1385', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1387', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1388', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1389', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1391', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1392', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1393', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1425', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1426', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1427', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1430', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1431', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1432', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1434', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1435', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1436', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1438', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1439', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1440', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1442', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1443', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1444', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1478', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1479', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1480', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1482', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1483', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1484', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1486', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1487', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1488', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1521', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1522', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1523', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1525', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1526', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1527', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1529', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1530', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1531', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1564', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1565', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1566', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1568', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1569', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1570', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1572', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1573', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1574', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1607', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1608', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1609', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1611', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1612', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1613', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1615', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1616', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1617', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1688', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1689', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1690', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1692', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1693', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1694', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1696', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1697', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1698', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1735', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1736', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1737', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1741', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1742', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1743', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1745', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1746', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1747', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1749', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1750', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1751', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1753', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1754', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1755', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1757', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1758', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1759', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1761', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1762', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1763', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1814', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1815', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1816', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1820', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1821', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1822', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1824', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1825', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1826', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1828', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1829', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1830', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1832', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1833', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1834', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1836', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1837', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1838', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1840', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1841', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1842', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1896', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1897', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1898', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1900', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1901', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1902', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1905', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1906', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1907', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1909', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1910', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1911', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1913', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1914', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1915', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1917', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1918', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1919', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1965', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1966', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1967', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1969', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1970', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1971', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1973', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1974', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1975', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('1977', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('1978', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('1979', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2017', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2018', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2019', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2021', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2022', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2023', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2025', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2026', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2027', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2029', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2030', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2031', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2069', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2070', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2071', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2073', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2074', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2075', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2077', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2078', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2079', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2112', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2113', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2114', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2117', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2118', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2119', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2121', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2122', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2123', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2125', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2126', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2127', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2129', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2130', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2131', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2168', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2169', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2170', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2172', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2173', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2174', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2176', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2177', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2178', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2216', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2217', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2218', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2220', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2221', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2222', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2224', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2225', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2226', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2263', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2264', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2265', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2267', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2268', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2269', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2271', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2272', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2273', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2275', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2276', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2277', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2327', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2328', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2329', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2331', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2332', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2333', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2335', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2336', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2337', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2339', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2340', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2341', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2391', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2392', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2393', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2395', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2396', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2397', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2399', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2400', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2401', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2446', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2447', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2448', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2450', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2451', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2452', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2454', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2455', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2456', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2538', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2539', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2540', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2542', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2543', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2544', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2546', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2547', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2548', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2584', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2585', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2586', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2588', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2589', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2590', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2592', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2593', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2594', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2631', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2632', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2633', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2635', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2636', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2637', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2639', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2640', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2641', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2680', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2681', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2682', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2684', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2685', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2686', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2688', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2689', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2690', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2729', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2730', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2731', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2733', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2734', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2735', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2737', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2738', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2739', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2780', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2781', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2782', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2784', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2785', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2786', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2788', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2789', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2790', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2821', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2822', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2823', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2825', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2826', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2827', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2829', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2830', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2831', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2862', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2863', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2864', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2866', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2867', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2868', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2870', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2871', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2872', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2903', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2904', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2905', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2907', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2908', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2909', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2911', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2912', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2913', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2915', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2916', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2917', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2953', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2954', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2955', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2957', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2958', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2959', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2961', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2962', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2963', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('2965', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('2966', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('2967', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3003', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3004', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3005', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3007', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3008', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3009', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3011', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3012', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3013', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3015', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3016', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3017', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3053', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3054', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3055', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3057', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3058', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3059', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3061', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3062', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3063', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3122', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3123', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3124', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3126', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3127', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3128', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3130', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3131', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3132', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3134', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3135', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3136', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3197', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3198', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3199', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3201', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3202', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3203', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3206', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3207', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3208', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3210', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3211', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3212', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3214', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3215', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3216', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3218', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3219', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3220', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3269', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3270', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3271', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3274', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3275', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3276', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3278', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3279', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3280', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3282', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3283', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3284', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3286', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3287', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3288', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3318', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3319', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3320', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3323', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3324', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3325', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3327', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3328', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3329', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3331', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3332', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3333', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3335', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3336', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3337', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3401', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3402', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3403', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3406', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3407', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3408', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3410', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3411', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3412', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3414', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3415', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3416', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3418', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3419', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3420', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3450', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3451', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3452', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3455', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3456', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3457', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3459', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3460', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3461', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3463', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3464', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3465', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3467', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3468', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3469', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3501', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3502', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3503', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3506', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3507', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3508', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3510', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3511', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3512', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3514', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3515', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3516', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3518', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3519', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3520', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3552', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3553', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3554', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3557', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3558', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3559', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3561', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3562', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3563', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3565', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3566', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3567', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3569', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3570', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3571', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3604', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3605', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3606', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3609', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3610', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3611', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3613', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3614', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3615', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3617', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3618', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3619', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3621', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3622', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3623', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3656', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3657', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3658', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3661', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3662', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3663', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3665', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3666', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3667', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3669', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3670', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3671', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3673', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3674', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3675', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3708', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3709', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3710', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3713', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3714', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3715', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3717', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3718', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3719', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3721', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3722', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3723', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3725', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3726', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3727', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3760', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3761', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3762', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3765', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3766', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3767', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3769', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3770', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3771', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3773', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3774', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3775', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3777', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3778', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3779', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3812', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3813', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3814', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3817', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3818', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3819', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3821', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3822', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3823', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3825', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3826', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3827', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3829', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3830', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3831', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3901', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3902', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3903', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3906', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3907', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3908', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3910', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3911', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3912', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3914', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3915', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3916', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3918', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3919', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3920', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3953', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3954', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3955', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3958', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3959', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3960', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3962', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3963', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3964', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3966', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3967', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3968', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('3970', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('3971', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('3972', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4004', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4005', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4006', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4009', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4010', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4011', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4013', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4014', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4015', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4017', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4018', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4019', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4021', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4022', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4023', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4056', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4057', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4058', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4060', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4061', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4062', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4064', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4065', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4066', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4068', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4069', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4070', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4101', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4102', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4103', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4105', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4106', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4107', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4109', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4110', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4111', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4113', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4114', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4115', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4147', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4148', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4149', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4152', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4153', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4154', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4156', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4157', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4158', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4160', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4161', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4162', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4164', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4165', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4166', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4202', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4203', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4204', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4207', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4208', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4209', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4211', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4212', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4213', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4215', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4216', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4217', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4219', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4220', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4221', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4258', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4259', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4260', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4262', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4263', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4264', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4266', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4267', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4268', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4270', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4271', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4272', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4274', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4275', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4276', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4309', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4310', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4311', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4315', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4316', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4317', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4319', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4320', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4321', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4323', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4324', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4325', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4327', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4328', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4329', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4331', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4332', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4333', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4376', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4377', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4378', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4382', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4383', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4384', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4386', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4387', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4388', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4390', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4391', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4392', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4394', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4395', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4396', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4398', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4399', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4400', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4445', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4446', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4447', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4450', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4451', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4452', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4454', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4455', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4456', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4458', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4459', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4460', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4462', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4463', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4464', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4499', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4500', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4501', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4504', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4505', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4506', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4508', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4509', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4510', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4512', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4513', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4514', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4516', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4517', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4518', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4550', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4551', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4552', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4555', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4556', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4557', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4559', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4560', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4561', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4563', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4564', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4565', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4567', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4568', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4569', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4605', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4606', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4607', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4610', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4611', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4612', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4614', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4615', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4616', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4650', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4651', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4652', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4655', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4656', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4657', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4659', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4660', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4661', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4731', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4732', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4733', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4736', ' - continue - '); -INSERT INTO cp_hideLMSUI VALUES ('4737', ' - previous - '); -INSERT INTO cp_hideLMSUI VALUES ('4738', ' - suspendAll - '); -INSERT INTO cp_hideLMSUI VALUES ('4740', ' - continue - '); -INSERT INTO cp_hideLMSUI VALUES ('4741', ' - previous - '); -INSERT INTO cp_hideLMSUI VALUES ('4742', ' - suspendAll - '); -INSERT INTO cp_hideLMSUI VALUES ('4744', ' - continue - '); -INSERT INTO cp_hideLMSUI VALUES ('4745', ' - previous - '); -INSERT INTO cp_hideLMSUI VALUES ('4746', ' - suspendAll - '); -INSERT INTO cp_hideLMSUI VALUES ('4748', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4749', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4750', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4793', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4794', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4795', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4797', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4798', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4799', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4801', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4802', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4803', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4833', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4834', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4835', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4837', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4838', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4839', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4841', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4842', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4843', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4872', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4873', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4874', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4876', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4877', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4878', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4882', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4883', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4884', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4886', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4887', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4888', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4891', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4892', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4893', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4895', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4896', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4897', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4899', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4900', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4901', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4992', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4993', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4994', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('4996', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('4997', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('4998', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5000', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5001', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5002', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5033', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5034', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5035', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5037', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5038', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5039', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5041', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5042', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5043', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5045', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5046', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5047', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5077', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5078', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5079', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5081', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5082', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5083', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5085', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5086', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5087', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5117', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5118', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5119', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5121', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5122', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5123', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5125', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5126', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5127', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5160', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5161', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5162', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5165', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5166', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5167', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5169', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5170', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5171', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5173', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5174', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5175', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5177', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5178', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5179', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5181', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5182', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5183', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5219', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5220', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5221', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5224', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5225', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5226', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5228', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5229', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5230', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5232', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5233', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5234', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5236', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5237', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5238', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5240', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5241', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5242', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5278', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5279', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5280', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5285', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5286', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5287', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5289', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5290', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5291', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5293', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5294', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5295', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5298', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5299', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5300', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5302', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5303', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5304', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5306', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5307', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5308', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5311', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5312', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5313', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5315', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5316', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5317', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5319', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5320', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5321', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5325', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5326', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5327', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5329', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5330', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5331', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5333', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5334', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5335', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5338', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5339', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5340', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5342', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5343', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5344', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5346', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5347', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5348', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5351', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5352', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5353', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5355', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5356', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5357', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5359', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5360', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5361', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5365', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5366', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5367', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5369', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5370', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5371', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5373', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5374', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5375', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5378', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5379', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5380', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5382', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5383', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5384', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5386', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5387', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5388', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5391', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5392', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5393', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5395', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5396', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5397', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5399', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5400', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5401', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5403', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5404', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5405', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5491', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5492', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5493', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5498', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5499', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5500', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5502', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5503', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5504', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5506', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5507', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5508', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5511', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5512', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5513', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5515', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5516', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5517', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5519', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5520', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5521', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5524', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5525', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5526', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5528', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5529', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5530', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5532', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5533', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5534', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5538', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5539', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5540', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5542', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5543', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5544', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5546', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5547', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5548', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5551', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5552', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5553', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5555', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5556', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5557', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5559', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5560', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5561', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5564', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5565', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5566', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5568', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5569', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5570', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5572', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5573', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5574', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5578', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5579', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5580', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5582', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5583', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5584', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5586', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5587', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5588', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5591', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5592', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5593', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5595', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5596', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5597', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5599', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5600', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5601', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5604', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5605', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5606', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5608', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5609', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5610', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5612', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5613', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5614', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('5616', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('5617', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('5618', 'suspendAll'); -INSERT INTO cp_hideLMSUI VALUES ('6377', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6379', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6380', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6382', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6383', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6385', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6386', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6389', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6390', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6392', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6393', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6395', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6396', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6398', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6399', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6401', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6402', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6404', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6405', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6407', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6408', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6410', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6411', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6413', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6414', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6605', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6607', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6608', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6610', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6611', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6613', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6614', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6617', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6618', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6620', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6621', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6623', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6624', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6626', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6627', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6629', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6630', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6632', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6633', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6635', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6636', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6638', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6639', 'continue'); -INSERT INTO cp_hideLMSUI VALUES ('6641', 'previous'); -INSERT INTO cp_hideLMSUI VALUES ('6642', 'continue'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_item -# -INSERT INTO cp_item VALUES ('', '3', '', 'activity_1', '', 'tc=API&act=1', 'ASSETLAUNCH01', '', '', 'Asset Launch Test'); -INSERT INTO cp_item VALUES ('', '5', '', 'activity_2', '', 'tc=API&act=2', 'APIRTE01', '', '', 'API Implementation Test 1'); -INSERT INTO cp_item VALUES ('', '7', '', 'activity_3', '', 'tc=API&act=3', 'APIRTE02', '', '', 'API Implementation Test 2'); -INSERT INTO cp_item VALUES ('', '45', '', 'activity_1', '', 'tc=API&act=1', 'ASSETLAUNCH01', '', '', 'Asset Launch Test'); -INSERT INTO cp_item VALUES ('', '47', '', 'activity_2', '', 'tc=API&act=2', 'APIRTE01', '', '', 'API Implementation Test 1'); -INSERT INTO cp_item VALUES ('', '49', '', 'activity_3', '', 'tc=API&act=3', 'APIRTE02', '', '', 'API Implementation Test 2'); -INSERT INTO cp_item VALUES ('', '87', '', 'activity_1', '', 'tc=CM-01&act=1', 'SEQ01', 'id3004973', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '91', '', 'activity_2', '', 'tc=CM-01&act=2', 'SEQ01', 'id3000020', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '95', '', 'activity_3', '', 'tc=CM-01&act=3', 'SEQ01', 'id2784313', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '127', '', 'activity_1', '', 'tc=CM-02a&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '128', '', 'activity_2', '', 'tc=CM-02a&act=2', 'SEQ01', 'id2681375', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '129', '', 'activity_3', '', 'tc=CM-02a&act=3', 'SEQ01', 'id2681311', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '159', '', 'activity_1', '', 'tc=CM-02b&act=1', 'SEQ01', 'id2688724', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '163', '', 'activity_2', '', 'tc=CM-02b&act=2', 'SEQ01', 'id2688740', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '167', '', 'activity_3', '', 'tc=CM-02b&act=3', 'SEQ01', 'id2688775', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '207', '', 'activity_1', '', '', '', 'id2813287', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '208', '', 'activity_2', '', 'tc=CM-03a&act=2', 'SEQ01', 'id2813310', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '209', '', 'activity_3', '', 'tc=CM-03a&act=3', 'SEQ01', 'id2835189', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '210', '', 'activity_4', '', '', '', 'id2835331', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '211', '', 'activity_5', '', 'tc=CM-03a&act=5', 'SEQ01', 'id2813412', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '212', '', 'activity_6', '', 'tc=CM-03a&act=6', 'SEQ01', 'id2813486', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '213', '', 'activity_7', '', 'tc=CM-03a&act=7', 'SEQ01', 'id2819729', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '214', '', 'activity_8', '', 'tc=CM-03a&act=8', 'SEQ01', '', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '261', '', 'activity_1', '', '', '', 'id2683920', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '262', '', 'activity_2', '', 'tc=CM-03b&act=2', 'SEQ01', 'id2684104', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '266', '', 'activity_3', '', 'tc=CM-03b&act=3', 'SEQ01', 'id2683998', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '270', '', 'activity_4', '', '', '', 'id2683484', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '271', '', 'activity_5', '', 'tc=CM-03b&act=5', 'SEQ01', 'id2683813', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '275', '', 'activity_6', '', 'tc=CM-03b&act=6', 'SEQ01', 'id2683695', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '279', '', 'activity_7', '', 'tc=CM-03b&act=7', 'SEQ01', 'id2683563', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '283', '', 'activity_8', '', 'tc=CM-03b&act=8', 'SEQ01', '', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '334', '', 'activity_1', '', '', '', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '335', '', 'activity_2', '', 'tc=CM-04a&act=2', 'SEQ01', '', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '339', '', '__CM-04a.Activity.3__', '', 'tc=CM-04a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '343', '', 'activity_4', '', '', '', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '344', '', 'activity_5', '', 'tc=CM-04a&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '348', '', 'activity_6', '', 'tc=CM-04a&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '352', '', 'activity_7', '', 'tc=CM-04a&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '356', '', 'activity_8', '', '', '', '', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '357', '', '_9_', '', 'tc=CM-04a&act=9', 'SEQ01', '', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '361', '', 'activity_10', '', '', '', '', '', 'Activity 10'); -INSERT INTO cp_item VALUES ('', '362', '', '_.activity.11', '', '', '', 'id2784280', '', 'Activity 11'); -INSERT INTO cp_item VALUES ('', '363', '', 'activity_12', '', 'tc=CM-04a&act=12', 'SEQ01', '', '', 'Activity 12'); -INSERT INTO cp_item VALUES ('', '367', '', 'activity_13', '', 'tc=CM-04a&act=13', 'SEQ01', '', '', 'Activity 13'); -INSERT INTO cp_item VALUES ('', '371', '', 'Activity.14_LEAF', '', 'tc=CM-04a&act=14', 'SEQ01', '', '', 'Activity 14'); -INSERT INTO cp_item VALUES ('', '375', '', 'Activity-15', '', 'tc=CM-04a&act=15', 'SEQ01', '', '', 'Activity 15'); -INSERT INTO cp_item VALUES ('', '402', '', 'activity_1', '', '', '', 'id2688676', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '403', '', 'activity_2', '', 'tc=CM-04b&act=2', 'SEQ01', '', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '404', '', 'activity_3', '', 'tc=CM-04b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '405', '', 'activity_4', '', '', '', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '406', '', 'activity_5', '', 'tc=CM-04b&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '407', '', 'activity_6', '', 'tc=CM-04b&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '408', '', 'activity_7', '', 'tc=CM-04b&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '409', '', 'activity_8', '', '', '', '', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '410', '', 'activity_9', '', 'tc=CM-04b&act=9', 'SEQ01', '', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '411', '', 'activity_10', '', '', '', 'id2690845', '', 'Activity 10'); -INSERT INTO cp_item VALUES ('', '412', '', 'activity_11', '', '', '', 'id2688662', '', 'Activity 11'); -INSERT INTO cp_item VALUES ('', '413', '', 'activity_12', '', 'tc=CM-04b&act=12', 'SEQ01', '', '', 'Activity 12'); -INSERT INTO cp_item VALUES ('', '414', '', 'activity_13', '', 'tc=CM-04b&act=13', 'SEQ01', '', '', 'Activity 13'); -INSERT INTO cp_item VALUES ('', '415', '', 'activity_14', '', 'tc=CM-04b&act=14', 'SEQ01', '', '', 'Activity 14'); -INSERT INTO cp_item VALUES ('', '416', '', 'activity_15', '', 'tc=CM-04b&act=15', 'SEQ01', '', '', 'Activity 15'); -INSERT INTO cp_item VALUES ('', '445', '', 'activity_1', '', '', '', 'id2684529', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '446', '', 'activity_2', '', 'tc=CM-04c&act=2', 'SEQ01', '', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '450', '', 'activity_3', '', 'tc=CM-04c&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '454', '', 'activity_4', '', '', '', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '455', '', 'activity_5', '', 'tc=CM-04c&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '459', '', 'activity_6', '', 'tc=CM-04c&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '463', '', 'activity_7', '', 'tc=CM-04c&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '467', '', 'activity_8', '', '', '', '', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '468', '', 'activity_9', '', 'tc=CM-04c&act=9', 'SEQ01', '', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '472', '', 'activity_10', '', '', '', 'id2683882', '', 'Activity 10'); -INSERT INTO cp_item VALUES ('', '473', '', 'activity_11', '', '', '', 'id2684033', '', 'Activity 11'); -INSERT INTO cp_item VALUES ('', '474', '', 'activity_12', '', 'tc=CM-04c&act=12', 'SEQ01', '', '', 'Activity 12'); -INSERT INTO cp_item VALUES ('', '478', '', 'activity_13', '', 'tc=CM-04c&act=13', 'SEQ01', '', '', 'Activity 13'); -INSERT INTO cp_item VALUES ('', '482', '', 'activity_14', '', 'tc=CM-04c&act=14', 'SEQ01', '', '', 'Activity 14'); -INSERT INTO cp_item VALUES ('', '486', '', 'activity_15', '', 'tc=CM-04c&act=15', 'SEQ01', '', '', 'Activity 15'); -INSERT INTO cp_item VALUES ('', '517', '', 'activity_1', '', '', '', 'id2829866', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '518', '', 'activity_2', '', 'tc=CM-04d&act=2', 'SEQ01', '', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '522', '', 'activity_3', 'false', 'tc=CM-04d&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '526', '', 'activity_4', '', '', '', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '527', '', 'activity_5', '', 'tc=CM-04d&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '531', '', '_6Sample-act', 'false', 'tc=CM-04d&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '535', '', 'activity_7', '', 'tc=CM-04d&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '539', '', 'activity_8', '', '', '', '', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '540', '', 'activity_9', '', 'tc=CM-04d&act=9', 'SEQ01', '', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '544', '', 'activity_10', '', '', '', '', '', 'Activity 10'); -INSERT INTO cp_item VALUES ('', '545', '', 'activity_11', '', '', '', '', '', 'Activity 11'); -INSERT INTO cp_item VALUES ('', '546', '', 'activity_12', '', 'tc=CM-04d&act=12', 'SEQ01', '', '', 'Activity 12'); -INSERT INTO cp_item VALUES ('', '550', '', 'Sample-act-13', '', 'tc=CM-04d&act=13', 'SEQ01', '', '', 'Activity 13'); -INSERT INTO cp_item VALUES ('', '554', '', 'activity_14', 'false', 'tc=CM-04d&act=14', 'SEQ01', '', '', 'Activity 14'); -INSERT INTO cp_item VALUES ('', '558', '', 'Sample15', 'false', 'tc=CM-04d&act=15', 'SEQ01', '', '', 'Activity 15'); -INSERT INTO cp_item VALUES ('', '585', '', 'activity_1', '', 'tc=CM-05&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '589', '', 'activity_2', '', '', '', 'id3022102', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '590', '', 'activity_3', '', '', '', 'id3028815', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '591', '', 'activity_4', '', 'tc=CM-05&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '595', '', 'activity_5', '', 'tc=CM-05&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '599', '', 'activity_6', '', 'tc=CM-05&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '603', '', 'activity_7', '', 'tc=CM-05&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '607', '', 'activity_8', '', 'tc=CM-05&act=8', 'SEQ01', '', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '611', '', 'activity_9', '', 'tc=CM-05&act=9', 'SEQ01', '', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '640', '', 'activity_1', '', 'tc=CM-06&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '644', '', 'activity_2', '', 'tc=CM-06&act=2', 'SEQ01', '', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '648', '', 'activity_3', '', 'tc=CM-06&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '675', '', 'activity_1', '', '', '', 'id2837640', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '676', '', 'activity_2', '', '', '', 'id2815570', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '677', '', 'activity_3', '', 'tc=CM-07a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '678', '', 'activity_4', '', 'tc=CM-07a&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '679', '', 'activity_5', '', 'tc=CM-07a&act=5', 'Seq01', 'id2813725', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '680', '', 'activity_6', '', 'tc=CM-07a&act=6', 'SEQ01', 'id2832153', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '681', '', 'activity_7', '', 'tc=CM-07a&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '682', '', 'activity_8', '', '', '', 'id2813947', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '683', '', 'activity_9', '', 'tc=CM-07a&act=9', 'SEQ01', '', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '684', '', 'activity_10', '', 'tc=CM-07a&act=10', 'SEQ01', 'id2837777', '', 'Activity 10'); -INSERT INTO cp_item VALUES ('', '685', '', 'activity_11', '', '', '', 'id2813936', '', 'Activity 11'); -INSERT INTO cp_item VALUES ('', '686', '', 'activity_12', '', 'tc=CM-07a&act=12', 'SEQ01', '', '', 'Activity 12'); -INSERT INTO cp_item VALUES ('', '687', '', 'activity_13', '', 'tc=CM-07a&act=13', 'SEQ01', '', '', 'Activity 13'); -INSERT INTO cp_item VALUES ('', '688', '', 'activity_14', '', 'tc=CM-07a&act=14', 'SEQ01', 'id2837306', '', 'Activity 14'); -INSERT INTO cp_item VALUES ('', '731', '', 'activity_1', '', '', '', 'id3020067', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '732', '', 'activity_2', '', 'tc=CM-07b&act=2', 'SEQ01', 'id3024937', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '733', '', 'activity_3', '', 'tc=CM-07b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '734', '', 'activity_4', '', '', '', 'id3022124', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '735', '', 'activity_5', '', '', '', 'id3028800', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '736', '', 'activity_6', '', 'tc=CM-07b&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '737', '', 'activity_7', '', 'tc=CM-07b&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '738', '', 'activity_8', '', 'tc=CM-07b&act=8', 'SEQ01', '', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '739', '', 'activity_9', '', '', '', 'id3020956', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '740', '', 'activity_10', '', '', '', 'id3020285', '', 'Activity 10'); -INSERT INTO cp_item VALUES ('', '741', '', 'activity_11', '', 'tc=CM-07b&act=11', 'SEQ01', '', '', 'Activity 11'); -INSERT INTO cp_item VALUES ('', '742', '', 'activity_12', '', 'tc=CM-07b&act=12', 'Seq01', '', '', 'Activity 12'); -INSERT INTO cp_item VALUES ('', '743', '', 'activity_13', '', '', '', 'id3020988', '', 'Activity 13'); -INSERT INTO cp_item VALUES ('', '744', '', 'activity_14', '', '', '', 'id3024549', '', 'Activity 14'); -INSERT INTO cp_item VALUES ('', '745', '', 'activity_15', '', 'tc=CM-07b&act=15', 'SEQ01', 'id3020228', '', 'Activity 15'); -INSERT INTO cp_item VALUES ('', '746', '', 'activity_16', '', 'tc=CM-07b&act=16', 'SEQ01', 'id3024605', '', 'Activity 16'); -INSERT INTO cp_item VALUES ('', '747', '', 'activity_17', '', 'tc=CM-07b&act=17', 'SEQ01', '', '', 'Activity 17'); -INSERT INTO cp_item VALUES ('', '748', '', 'activity_18', '', '', '', '', '', 'Activity 18'); -INSERT INTO cp_item VALUES ('', '749', '', 'activity_19', '', 'tc=CM-07b&act=19', 'SEQ01', '', '', 'Activity 19'); -INSERT INTO cp_item VALUES ('', '750', '', 'activity_20', '', 'tc=CM-07b&act=20', 'SEQ01', '', '', 'Activity 20'); -INSERT INTO cp_item VALUES ('', '751', '', 'activity_21', '', 'tc=CM-07b&act=21', 'SEQ01', '', '', 'Activity 21'); -INSERT INTO cp_item VALUES ('', '799', '', 'activity_1', '', '', '', 'id2621923', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '800', '', 'activity_2', '', 'tc=CM-07c&act=2', 'SEQ01', 'id2621964', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '801', '', 'activity_3', '', 'tc=CM-07c&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '802', '', 'activity_4', '', '', '', 'id2621616', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '803', '', 'activity_5', '', '', '', 'id2621754', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '804', '', 'activity_6', '', 'tc=CM-07c&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '805', '', 'activity_7', '', 'tc=CM-07c&act=7', 'SEQ01', 'id2621788', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '806', '', 'activity_8', '', 'tc=CM-07c&act=8', 'SEQ01', '', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '807', '', 'activity_9', '', '', '', 'id2621419', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '808', '', 'activity_10', 'false', 'tc=CM-07c&act=10', 'SEQ01', '', '', 'Activity 10'); -INSERT INTO cp_item VALUES ('', '809', '', 'activity_11', '', '', '', 'id2621435', '', 'Activity 11'); -INSERT INTO cp_item VALUES ('', '810', '', 'activity_12', '', '', '', 'id2621504', '', 'Activity 12'); -INSERT INTO cp_item VALUES ('', '811', '', 'activity_13', '', 'tc=CM-07c&act=13', 'SEQ01', '', '', 'Activity 13'); -INSERT INTO cp_item VALUES ('', '812', '', 'activity_14', '', 'tc=CM-07c&act=14', 'SEQ01', '', '', 'Activity 14'); -INSERT INTO cp_item VALUES ('', '813', '', 'activity_15', '', 'tc=CM-07c&act=15', 'SEQ01', '', '', 'Activity 15'); -INSERT INTO cp_item VALUES ('', '814', '', 'activity_16', '', '', '', 'id2621296', '', 'Activity 16'); -INSERT INTO cp_item VALUES ('', '815', '', 'activity_17', '', 'tc=CM-07c&act=17', 'SEQ01', '', '', 'Activity 17'); -INSERT INTO cp_item VALUES ('', '816', '', 'activity_18', '', 'tc=CM-07c&act=18', 'SEQ01', 'id2621312', '', 'Activity 18'); -INSERT INTO cp_item VALUES ('', '856', '', 'activity_1', '', '', '', 'id2676334', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '857', '', 'activity_2', '', 'tc=CM-07d&act=2', 'SEQ01', '', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '858', '', 'activity_3', '', 'tc=CM-07d&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '859', '', 'activity_4', '', '', '', 'id2676165', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '860', '', 'activity_5', '', '', '', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '861', '', 'activity_6', '', 'tc=CM-07d&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '862', '', 'activity_7', '', 'tc=CM-07d&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '863', '', 'activity_8', '', 'tc=CM-07d&act=8', 'SEQ01', '', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '864', '', 'activity_9', '', '', '', 'id2675940', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '865', '', 'activity_10', '', 'tc=CM-07d&act=10', 'SEQ01', '', '', 'Activity 10'); -INSERT INTO cp_item VALUES ('', '866', '', 'activity_11', '', '', '', 'id2675982', '', 'Activity 11'); -INSERT INTO cp_item VALUES ('', '867', '', 'activity_12', '', '', '', 'id2676043', '', 'Activity 12'); -INSERT INTO cp_item VALUES ('', '868', '', 'activity_13', '', 'tc=CM-07d&act=13', 'SEQ01', 'id2676063', '', 'Activity 13'); -INSERT INTO cp_item VALUES ('', '869', '', 'activity_14', '', 'tc=CM-07d&act=14', 'SEQ01', '', '', 'Activity 14'); -INSERT INTO cp_item VALUES ('', '870', '', 'activity_15', '', 'tc=CM-07d&act=15', 'SEQ01', '', '', 'Activity 15'); -INSERT INTO cp_item VALUES ('', '871', '', 'activity_16', '', '', '', 'id2675857', '', 'Activity 16'); -INSERT INTO cp_item VALUES ('', '872', '', 'activity_17', '', 'tc=CM-07d&act=17', 'SEQ01', '', '', 'Activity 17'); -INSERT INTO cp_item VALUES ('', '873', '', 'activity_18', '', 'tc=CM-07d&act=18', 'SEQ01', '', '', 'Activity 18'); -INSERT INTO cp_item VALUES ('', '904', '', 'activity_1', '', 'tc=CM-07e&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '905', '', 'activity_2', '', '', '', 'id2619344', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '906', '', 'CaseTest', '', 'tc=CM-07e&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '907', '', 'activity_4', '', '', '', 'id2618515', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '908', '', 'activity_5', '', 'tc=CM-07e&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '909', '', 'activity_6', '', 'tc=CM-07e&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '937', '', 'activity_1', '', 'tc=CM-07f&act=1', 'SEQ01', 'id2680596', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '938', '', 'activity_2', '', 'tc=CM-07f&act=2', 'SEQ01', '', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '939', '', 'activity_3', '', 'tc=CM-07f&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '940', '', 'activity_4', '', 'tc=CM-07f&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '967', '', 'activity_1', '', 'tc=CM-08&act=1', 'SEQ01', 'id2682236', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '968', '', 'activity_2', '', 'tc=CM-08&act=2', 'SEQ01', 'id2681702', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '996', '', 'activity_1', '', 'tc=DMB&act=1', 'DMBEHAVIOR01', '', '', 'Data Model Behavior Test 1'); -INSERT INTO cp_item VALUES ('0.8', '998', '', 'activity_2', '', 'tc=DMB&act=2', 'DMBEHAVIOR02', '', '', 'Data Model Behavior Test 2'); -INSERT INTO cp_item VALUES ('', '1000', '', 'activity_3', '', 'tc=DMB&act=3', 'DMBEHAVIOR03', 'id2624021', '', 'Data Model Behavior Test 3'); -INSERT INTO cp_item VALUES ('', '1002', '', 'activity_4', '', 'tc=DMB&act=4', 'DMBEHAVIOR04', 'id2623911', '', 'Data Model Behavior Test 4'); -INSERT INTO cp_item VALUES ('', '1004', '', 'activity_5', '', 'tc=DMB&act=5', 'DMBEHAVIOR05', 'id2623838', '', 'Data Model Behavior Test 5'); -INSERT INTO cp_item VALUES ('0.6', '1006', '', 'activity_6', '', 'tc=DMB&act=6', 'DMBEHAVIOR06', 'id2623724', '', 'Data Model Behavior Test 6'); -INSERT INTO cp_item VALUES ('', '1008', '', 'activity_7', '', 'tc=DMB&act=7', 'DMBEHAVIOR07', 'id2623628', '', 'Data Model Behavior Test 7'); -INSERT INTO cp_item VALUES ('', '1010', '', 'activity_8', '', 'tc=DMB&act=8', 'DMBEHAVIOR08', 'id2623522', '', 'Data Model Behavior Test 8'); -INSERT INTO cp_item VALUES ('', '1012', '', 'activity_9', '', 'tc=DMB&act=9', 'DMBEHAVIOR09', '', '', 'Data Model Behavior Test 9'); -INSERT INTO cp_item VALUES ('0.8', '1104', 'Launch Data Test', 'activity_1', '', 'tc=DMI&act=1', 'DMIMPLEMENTATION01', '', 'continue,message', 'Data Model Implementation Test 1'); -INSERT INTO cp_item VALUES ('', '1106', 'thisstringislength20qwertyuiop0123456789thisstringislength60qwertyuiop0123456789thisstringislengt100thisstringislengt120qwertyuiop0123456789thisstringislengt160qwertyuiop0123456789thisstringislengt200thisstringislengt220qwertyuiop0123456789thisstringislengt260qwertyuiop0123456789thisstringislengt300thisstringislengt320qwertyuiop0123456789thisstringislengt360qwertyuiop0123456789thisstringislengt400thisstringislengt420qwertyuiop0123456789thisstringislengt460qwertyuiop0123456789thisstringislengt500thisstringislengt520qwertyuiop0123456789thisstringislengt560qwertyuiop0123456789thisstringislengt600thisstringislengt620qwertyuiop0123456789thisstringislengt660qwertyuiop0123456789thisstringislengt700thisstringislengt720qwertyuiop0123456789thisstringislengt760qwertyuiop0123456789thisstringislengt800thisstringislengt820qwertyuiop0123456789thisstringislengt860qwertyuiop0123456789thisstringislengt900thisstringislengt920qwertyuiop0123456789thisstringislengt960qwertyuiop0123456789thisstringisleng1000thisstringisleng1020qwertyuiop0123456789thisstringisleng1060qwertyuiop0123456789thisstringisleng1100thisstringisleng1120qwertyuiop0123456789thisstringisleng1160qwertyuiop0123456789thisstringisleng1200thisstringisleng1220qwertyuiop0123456789thisstringisleng1260qwertyuiop0123456789thisstringisleng1300thisstringisleng1320qwertyuiop0123456789thisstringisleng1360qwertyuiop0123456789thisstringisleng1400thisstringisleng1420qwertyuiop0123456789thisstringisleng1460qwertyuiop0123456789thisstringisleng1500thisstringisleng1520qwertyuiop0123456789thisstringisleng1560qwertyuiop0123456789thisstringisleng1600thisstringisleng1620qwertyuiop0123456789thisstringisleng1660qwertyuiop0123456789thisstringisleng1700thisstringisleng1720qwertyuiop0123456789thisstringisleng1760qwertyuiop0123456789thisstringisleng1800thisstringisleng1820qwertyuiop0123456789thisstringisleng1860qwertyuiop0123456789thisstringisleng1900thisstringisleng1920qwertyuiop0123456789thisstringisleng1960qwertyuiop0123456789thisstringisleng2000thisstringisleng2020qwertyuiop0123456789thisstringisleng2060qwertyuiop0123456789thisstringisleng2100thisstringisleng2120qwertyuiop0123456789thisstringisleng2160qwertyuiop0123456789thisstringisleng2200thisstringisleng2220qwertyuiop0123456789thisstringisleng2260qwertyuiop0123456789thisstringisleng2300thisstringisleng2320qwertyuiop0123456789thisstringisleng2360qwertyuiop0123456789thisstringisleng2400thisstringisleng2420qwertyuiop0123456789thisstringisleng2460qwertyuiop0123456789thisstringisleng2500thisstringisleng2520qwertyuiop0123456789thisstringisleng2560qwertyuiop0123456789thisstringisleng2600thisstringisleng2620qwertyuiop0123456789thisstringisleng2660qwertyuiop0123456789thisstringisleng2700thisstringisleng2720qwertyuiop0123456789thisstringisleng2760qwertyuiop0123456789thisstringisleng2800thisstringisleng2820qwertyuiop0123456789thisstringisleng2860qwertyuiop0123456789thisstringisleng2900thisstringisleng2920qwertyuiop0123456789thisstringisleng2960qwertyuiop0123456789thisstringisleng2000thisstringisleng3020qwertyuiop0123456789thisstringisleng3060qwertyuiop0123456789thisstringisleng3100thisstringisleng3120qwertyuiop0123456789thisstringisleng3160qwertyuiop0123456789thisstringisleng3200thisstringisleng3220qwertyuiop0123456789thisstringisleng3260qwertyuiop0123456789thisstringisleng3300thisstringisleng3320qwertyuiop0123456789thisstringisleng3360qwertyuiop0123456789thisstringisleng3400thisstringisleng3420qwertyuiop0123456789thisstringisleng3460qwertyuiop0123456789thisstringisleng3500thisstringisleng3520qwertyuiop0123456789thisstringisleng3560qwertyuiop0123456789thisstringisleng3600thisstringisleng3620qwertyuiop0123456789thisstringisleng3660qwertyuiop0123456789thisstringisleng3700thisstringisleng3720qwertyuiop0123456789thisstringisleng3760qwertyuiop0123456789thisstringisleng3800thisstringisleng3820qwertyuiop0123456789thisstringisleng3860qwertyuiop0123456789thisstringisleng3900thisstringisleng3920qwertyuiop0123456789thisstringisleng3960qwertyuiop0123456789thisstringisleng4000', 'activity_2', '', 'tc=DMI&act=2', 'DMIMPLEMENTATION02', '', '', 'Data Model Implementation Test 2'); -INSERT INTO cp_item VALUES ('', '1108', '', 'activity_3', '', 'tc=DMI&act=3', 'DMIMPLEMENTATION03', '', '', 'Data Model Implementation Test 3'); -INSERT INTO cp_item VALUES ('', '1110', '', 'activity_4', '', 'tc=DMI&act=4', 'DMIMPLEMENTATION04', '', '', 'Data Model Implementation Test 4'); -INSERT INTO cp_item VALUES ('', '1155', '', 'activity_1', '', 'tc=MS-01&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1159', '', 'activity_2', '', '', '', 'id2623509', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1160', '', 'activity_3', '', 'tc=MS-01&act=3', 'SEQ01', 'id2623667', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1164', '', 'activity_4', '', 'tc=MS-01&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '1168', '', 'activity_5', '', 'tc=MS-01&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '1172', '', 'activity_6', '', 'tc=MS-01&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '1203', '', 'activity_1', '', 'tc=MS-02&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1207', '', 'activity_2', '', '', '', 'id2630752', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1208', '', 'activity_3', '', 'tc=MS-02&act=3', 'SEQ01', 'id2631163', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1212', '', 'activity_4', '', 'tc=MS-02&act=4', 'SEQ01', 'id2625279', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '1216', '', 'activity_5', '', 'tc=MS-02&act=5', 'SEQ01', 'id2630740', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '1220', '', 'activity_6', '', 'tc=MS-02&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '1253', '', 'activity_1', '', 'tc=MS-03&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1257', '', 'activity_2', '', '', '', 'id3111817', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1258', '', 'activity_3', '', 'tc=MS-03&act=3', 'SEQ01', 'id3078556', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1262', '', 'activity_4', '', 'tc=MS-03&act=4', 'SEQ01', 'id3078599', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '1266', '', 'activity_5', '', 'tc=MS-03&act=5', 'SEQ01', 'id3111807', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '1270', '', 'activity_6', '', 'tc=MS-03&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '1303', '', 'activity_1', '', 'tc=MS-04&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1304', '', 'activity_2', '', '', '', 'id2836564', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1305', '', 'activity_3', '', 'tc=MS-04&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1306', '', 'activity_4', '', 'tc=MS-04&act=4', 'SEQ01', 'id2836477', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '1307', '', 'activity_5', '', 'tc=MS-04&act=5', 'SEQ01', 'id2838200', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '1308', '', 'activity_6', '', 'tc=MS-04&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '1337', '', 'activity_1', '', 'tc=MS-05a&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1338', '', 'activity_2', '', '', '', 'id2832248', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1339', '', 'activity_3', '', 'tc=MS-05a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1340', '', 'activity_4', '', 'tc=MS-05a&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '1341', '', 'activity_5', '', 'tc=MS-05a&act=5', 'SEQ01', 'id2821682', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '1342', '', 'activity_6', '', 'tc=MS-05a&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '1373', '', 'activity_1', '', 'tc=MS-05b&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1377', '', 'activity_2', '', '', '', 'id2689660', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1378', '', 'activity_3', '', 'tc=MS-05b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1382', '', 'activity_4', '', 'tc=MS-05b&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '1386', '', 'activity_5', '', 'tc=MS-05b&act=5', 'SEQ01', 'id2689649', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '1390', '', 'activity_6', '', 'tc=MS-05b&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '1424', '', 'activity_1', '', 'tc=MS-06&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1428', '', 'activity_2', '', '', '', 'id2684182', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1429', '', 'activity_3', '', 'tc=MS-06&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1433', '', 'activity_4', '', 'tc=MS-06&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '1437', '', 'activity_5', '', 'tc=MS-06&act=5', 'SEQ01', 'id2692447', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '1441', '', 'activity_6', '', 'tc=MS-06&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '1477', '', 'activity_1', '', 'tc=OB-01a&act=1', 'SEQ01', 'id2684515', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1481', '', 'activity_2', '', 'tc=OB-01a&act=2', 'SEQ01', 'id2684181', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1485', '', 'activity_3', '', 'tc=OB-01a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1520', '', 'activity_1', '', 'tc=OB-01b&act=1', 'SEQ01', 'id2835613', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1524', '', 'activity_2', '', 'tc=OB-01b&act=2', 'SEQ01', 'id2834911', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1528', '', 'activity_3', '', 'tc=OB-01b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1563', '', 'activity_1', '', 'tc=OB-01c&act=1', 'SEQ01', 'id2680072', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1567', '', 'activity_2', '', 'tc=OB-01c&act=2', 'SEQ01', 'id2682456', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1571', '', 'activity_3', '', 'tc=OB-01c&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1606', '', 'activity_1', '', 'tc=OB-02a&act=1', 'SEQ01', 'id2680029', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1610', '', 'activity_2', '', 'tc=OB-02a&act=2', 'SEQ01', 'id2680065', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1614', '', 'activity_3', '', 'tc=OB-02a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1651', '', 'activity_1', '', 'tc=OB-02b&act=1', 'SEQ01', 'id2678657', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1652', '', 'activity_2', '', 'tc=OB-02b&act=2', 'SEQ01', 'id2678572', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1653', '', 'activity_3', '', 'tc=OB-02b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1687', '', 'activity_1', '', 'tc=OB-03a&act=1', 'SEQ01', 'id2836190', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1691', '', 'activity_2', '', 'tc=OB-03a&act=2', 'SEQ01', 'id2832296', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1695', '', 'activity_3', '', 'tc=OB-03a&act=3', 'SEQ01', 'id2821209', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1734', '', 'activity_1', '', 'tc=OB-03b&act=1', 'SEQ01', 'id3020934', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1738', '', 'activity_2', '', '', '', 'id3022408', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1739', '', 'activity_3', '', '', '', 'id3074114', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1740', '', 'activity_4', '', 'tc=OB-03b&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '1744', '', 'activity_5', '', 'tc=OB-03b&act=5', 'SEQ01', 'id3028833', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '1748', '', 'activity_6', '', 'tc=OB-03b&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '1752', '', 'activity_7', '', 'tc=OB-03b&act=7', 'SEQ01', 'id3041086', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '1756', '', 'activity_8', '', 'tc=OB-03b&act=8', 'SEQ01', 'id3094598', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '1760', '', 'activity_9', '', 'tc=OB-03b&act=9', 'SEQ01', '', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '1813', '', 'activity_1', '', 'tc=OB-03c&act=1', 'SEQ01', 'id2619264', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1817', '', 'activity_2', '', '', '', 'id2618402', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1818', '', 'activity_3', '', '', '', 'id2618856', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1819', '', 'activity_4', '', 'tc=OB-03c&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '1823', '', 'activity_5', '', 'tc=OB-03c&act=5', 'SEQ01', 'id2619009', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '1827', '', 'activity_6', '', 'tc=OB-03c&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '1831', '', 'activity_7', '', 'tc=OB-03c&act=7', 'SEQ01', 'id2618648', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '1835', '', 'activity_8', '', 'tc=OB-03c&act=8', 'SEQ01', 'id2618531', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '1839', '', 'activity_9', '', 'tc=OB-03c&act=9', 'SEQ01', '', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '1895', '', 'activity_1', '', 'tc=OB-04&act=1', 'SEQ01', 'id2691977', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1899', '', 'activity_2', '', 'tc=OB-04&act=2', 'SEQ01', 'id2834923', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1903', '', 'activity_3', '', '', '', 'id2813658', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1904', '', 'activity_4', '', 'tc=OB-04&act=4', 'SEQ01', 'id2849373', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '1908', '', 'activity_5', '', 'tc=OB-04&act=5', 'SEQ01', 'id2843005', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '1912', '', 'activity_6', '', 'tc=OB-04&act=6', 'SEQ01', 'id2813760', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '1916', '', 'activity_7', '', 'tc=OB-04&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '1964', '', 'activity_1', '', 'tc=OB-05a&act=1', 'SEQ01', 'id2836202', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '1968', '', 'activity_2', '', 'tc=OB-05a&act=2', 'SEQ01', 'id2834977', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '1972', '', 'activity_3', '', 'tc=OB-05a&act=3', 'SEQ01', 'id2835142', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '1976', '', 'activity_4', '', 'tc=OB-05a&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '2016', '', 'activity_1', '', 'tc=OB-05b&act=1', 'SEQ01', 'id3024654', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2020', '', 'activity_2', '', 'tc=OB-05b&act=2', 'SEQ01', 'id3074260', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2024', '', 'activity_3', '', 'tc=OB-05b&act=3', 'SEQ01', 'id3041974', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2028', '', 'activity_4', '', 'tc=OB-05b&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '2068', '', 'activity_1', '', 'tc=OB-05c&act=1', 'SEQ01', 'id2676157', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2072', '', 'activity_2', '', 'tc=OB-05c&act=2', 'SEQ01', 'id2676107', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2076', '', 'activity_3', '', 'tc=OB-05c&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2111', '', 'activity_1', '', 'tc=OB-06&act=1', 'SEQ01', 'id3025741', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2115', '', 'activity_2', '', '', '', 'id3082989', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2116', '', 'activity_3', '', 'tc=OB-06&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2120', '', 'activity_4', '', 'tc=OB-06&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '2124', '', 'activity_5', '', 'tc=OB-06&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '2128', '', 'activity_6', '', 'tc=OB-06&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '2167', '', 'activity_1', '', 'tc=OB-07a&act=1', 'SEQ01', 'id2685266', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2171', '', 'activity_2', '', 'tc=OB-07a&act=2', 'SEQ01', 'id2685192', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2175', '', 'activity_3', '', 'tc=OB-07a&act=3', 'SEQ01', 'id2681135', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2215', '', 'activity_1', '', 'tc=OB-07b&act=1', 'SEQ01', 'id3082998', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2219', '', 'activity_2', '', 'tc=OB-07b&act=2', 'SEQ01', 'id3020248', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2223', '', 'activity_3', '', 'tc=OB-07b&act=3', 'SEQ01', 'id3024613', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2262', '', 'activity_1', '', 'tc=OB-08a&act=1', 'SEQ01', 'id3059082', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2266', '', 'activity_2', '', 'tc=OB-08a&act=2', 'SEQ01', 'id3024255', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2270', '', 'activity_3', '', 'tc=OB-08a&act=3', 'SEQ01', 'id3027207', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2274', '', 'activity_4', '', 'tc=OB-08a&act=4', 'SEQ01', 'id3024933', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '2326', '', 'activity_1', '', 'tc=OB-08b&act=1', 'SEQ01', 'id2813980', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2330', '', 'activity_2', '', 'tc=OB-08b&act=2', 'SEQ01', 'id2836377', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2334', '', 'activity_3', '', 'tc=OB-08b&act=3', 'SEQ01', 'id2821677', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2338', '', 'activity_4', '', 'tc=OB-08b&act=4', 'SEQ01', 'id2847475', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '2390', '', 'activity_1', '', 'tc=OB-09a&act=1', 'SEQ01', 'id2833749', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2394', '', 'activity_2', '', 'tc=OB-09a&act=2', 'SEQ01', 'id2836002', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2398', '', 'activity_3', '', 'tc=OB-09a&act=3', 'SEQ01', 'id2836376', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2445', '', 'activity_1', '', 'tc=OB-09b&act=1', 'SEQ01', 'id2684985', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2449', '', 'activity_2', '', 'tc=OB-09b&act=2', 'SEQ01', 'id2690601', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2453', '', 'activity_3', '', 'tc=OB-09b&act=3', 'SEQ01', 'id2689989', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2500', '', 'activity_1', '', 'tc=OB-10a&act=1', 'SEQ01', 'id2623602', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2501', '', 'activity_2', '', 'tc=OB-10a&act=2', 'SEQ01', 'id2623520', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2502', '', 'activity_3', '', 'tc=OB-10a&act=3', 'SEQ01', 'id2623422', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2537', '', 'activity_1', '', 'tc=OB-10b&act=1', 'SEQ01', 'id3085765', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2541', '', 'activity_2', '', 'tc=OB-10b&act=2', 'SEQ01', 'id3022395', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2545', '', 'activity_3', '', 'tc=OB-10b&act=3', 'SEQ01', 'id3022470', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2583', '', 'activity_1', '', 'tc=OB-10c&act=1', 'SEQ01', 'id3021295', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2587', '', 'activity_2', '', 'tc=OB-10c&act=2', 'SEQ01', 'id3020449', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2591', '', 'activity_3', '', 'tc=OB-10c&act=3', 'SEQ01', 'id3020211', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2630', '', 'activity_1', '', 'tc=OB-10d&act=1', 'SEQ01', 'id3021031', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2634', '', 'activity_2', '', 'tc=OB-10d&act=2', 'SEQ01', 'id3024205', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2638', '', 'activity_3', '', 'tc=OB-10d&act=3', 'SEQ01', 'id3020790', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2679', '', 'activity_1', '', 'tc=OB-11a&act=1', 'SEQ01', 'id3085660', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2683', '', 'activity_2', '', 'tc=OB-11a&act=2', 'SEQ01', 'id3024627', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2687', '', 'activity_3', '', 'tc=OB-11a&act=3', 'SEQ01', 'id3024005', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2728', '', 'activity_1', '', 'tc=OB-11b&act=1', 'SEQ01', 'id2684186', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2732', '', 'activity_2', '', 'tc=OB-11b&act=2', 'SEQ01', 'id2623396', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2736', '', 'activity_3', '', 'tc=OB-11b&act=3', 'SEQ01', 'id2623266', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2779', '', 'activity_1', '', 'tc=OB-12a&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2783', '', 'activity_2', '', 'tc=OB-12a&act=2', 'SEQ01', 'id3036015', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2787', '', 'activity_3', '', 'tc=OB-12a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2820', '', 'activity_1', '', 'tc=OB-12b&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2824', '', 'activity_2', '', 'tc=OB-12b&act=2', 'SEQ01', 'id3020214', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2828', '', 'activity_3', '', 'tc=OB-12b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2861', '', 'activity_1', '', 'tc=OB-12c&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2865', '', 'activity_2', '', 'tc=OB-12c&act=2', 'SEQ01', 'id2691063', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2869', '', 'activity_3', '', 'tc=OB-12c&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2902', '', 'activity_1', '', 'tc=OB-13a&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2906', '', 'activity_2', '', 'tc=OB-13a&act=2', 'SEQ01', 'id2686031', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2910', '', 'activity_3', '', 'tc=OB-13a&act=3', 'SEQ01', 'id2687289', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2914', '', 'activity_4', '', 'tc=OB-13a&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '2952', '', 'activity_1', '', 'tc=OB-13b&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '2956', '', 'activity_2', '', 'tc=OB-13b&act=2', 'SEQ01', 'id2821445', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '2960', '', 'activity_3', '', 'tc=OB-13b&act=3', 'SEQ01', 'id2835105', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '2964', '', 'activity_4', '', 'tc=OB-13b&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3002', '', 'activity_1', '', 'tc=OB-13c&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3006', '', 'activity_2', '', 'tc=OB-13c&act=2', 'SEQ01', 'id2678375', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3010', '', 'activity_3', '', 'tc=OB-13c&act=3', 'SEQ01', 'id2678294', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3014', '', 'activity_4', '', 'tc=OB-13c&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3052', '', 'activity_1', '', 'tc=OB-14a&act=1', 'SEQ01', 'id2843381', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3056', '', 'activity_2', '', 'tc=OB-14a&act=2', 'SEQ01', 'id2834918', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3060', '', 'activity_3', '', 'tc=OB-14a&act=3', 'SEQ01', 'id2836192', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3121', '', 'activity_1', '', 'tc=OB-14b&act=1', 'SEQ01', 'id2835369', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3125', '', 'activity_2', '', 'tc=OB-14b&act=2', 'SEQ01', 'id2836423', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3129', '', 'activity_3', '', 'tc=OB-14b&act=3', 'SEQ01', 'id2843361', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3133', '', 'activity_4', '', 'tc=OB-14b&act=4', 'SEQ01', 'id2835730', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3196', '', 'activity_1', '', 'tc=OB-15&act=1', 'SEQ01', 'id2620143', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3200', '', 'activity_2', '', 'tc=OB-15&act=2', 'SEQ01', 'id2620044', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3204', '', 'activity_3', '', '', '', 'id2619736', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3205', '', 'activity_4', '', 'tc=OB-15&act=4', 'SEQ01', 'id2619908', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3209', '', 'activity_5', '', 'tc=OB-15&act=5', 'SEQ01', 'id2619802', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3213', '', 'activity_6', '', 'tc=OB-15&act=6', 'SEQ01', 'id2619599', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3217', '', 'activity_7', '', 'tc=OB-15&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '3268', '', 'activity_1', '', 'tc=RU-01aa&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3272', '', 'activity_2', '', '', '', 'id3020417', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3273', '', 'activity_3', '', 'tc=RU-01aa&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3277', '', 'activity_4', '', 'tc=RU-01aa&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3281', '', 'activity_5', '', 'tc=RU-01aa&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3285', '', 'activity_6', '', 'tc=RU-01aa&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3317', '', 'activity_1', '', 'tc=RU-01ab&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3321', '', 'activity_2', '', '', '', 'id2676129', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3322', '', 'activity_3', '', 'tc=RU-01ab&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3326', '', 'activity_4', '', 'tc=RU-01ab&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3330', '', 'activity_5', '', 'tc=RU-01ab&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3334', '', 'activity_6', '', 'tc=RU-01ab&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3366', '', 'activity_1', '', 'tc=RU-01ba&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3367', '', 'activity_2', '', '', '', 'id2834929', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3368', '', 'activity_3', '', 'tc=RU-01ba&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3369', '', 'activity_4', '', 'tc=RU-01ba&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3370', '', 'activity_5', '', 'tc=RU-01ba&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3371', '', 'activity_6', '', 'tc=RU-01ba&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3400', '', 'activity_1', '', 'tc=RU-01bb&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3404', '', 'activity_2', '', '', '', 'id2676502', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3405', '', 'activity_3', '', 'tc=RU-01bb&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3409', '', 'activity_4', '', 'tc=RU-01bb&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3413', '', 'activity_5', '', 'tc=RU-01bb&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3417', '', 'activity_6', '', 'tc=RU-01bb&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3449', '', 'activity_1', '', 'tc=RU-02a&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3453', '', 'activity_2', '', '', '', 'id2686379', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3454', '', 'activity_3', '', 'tc=RU-02a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3458', '', 'activity_4', '', 'tc=RU-02a&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3462', '', 'activity_5', '', 'tc=RU-02a&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3466', '', 'activity_6', '', 'tc=RU-02a&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3500', '', 'activity_1', '', 'tc=RU-02b&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3504', '', 'activity_2', '', '', '', 'id2835303', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3505', '', 'activity_3', '', 'tc=RU-02b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3509', '', 'activity_4', '', 'tc=RU-02b&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3513', '', 'activity_5', '', 'tc=RU-02b&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3517', '', 'activity_6', '', 'tc=RU-02b&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3551', '', 'activity_1', '', 'tc=RU-03a&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3555', '', 'activity_2', '', '', '', 'id2836314', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3556', '', 'activity_3', '', 'tc=RU-03a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3560', '', 'activity_4', '', 'tc=RU-03a&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3564', '', 'activity_5', '', 'tc=RU-03a&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3568', '', 'activity_6', '', 'tc=RU-03a&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3603', '', 'activity_1', '', 'tc=RU-03b&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3607', '', 'activity_2', '', '', '', 'id2686169', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3608', '', 'activity_3', '', 'tc=RU-03b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3612', '', 'activity_4', '', 'tc=RU-03b&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3616', '', 'activity_5', '', 'tc=RU-03b&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3620', '', 'activity_6', '', 'tc=RU-03b&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3655', '', 'activity_1', '', 'tc=RU-04aa&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3659', '', 'activity_2', '', '', '', 'id2697094', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3660', '', 'activity_3', '', 'tc=RU-04aa&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3664', '', 'activity_4', '', 'tc=RU-04aa&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3668', '', 'activity_5', '', 'tc=RU-04aa&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3672', '', 'activity_6', '', 'tc=RU-04aa&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3707', '', 'activity_1', '', 'tc=RU-04ab&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3711', '', 'activity_2', '', '', '', 'id2997725', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3712', '', 'activity_3', '', 'tc=RU-04ab&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3716', '', 'activity_4', '', 'tc=RU-04ab&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3720', '', 'activity_5', '', 'tc=RU-04ab&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3724', '', 'activity_6', '', 'tc=RU-04ab&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3759', '', 'activity_1', '', 'tc=RU-04ba&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3763', '', 'activity_2', '', '', '', 'id2999935', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3764', '', 'activity_3', '', 'tc=RU-04ba&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3768', '', 'activity_4', '', 'tc=RU-04ba&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3772', '', 'activity_5', '', 'tc=RU-04ba&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3776', '', 'activity_6', '', 'tc=RU-04ba&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3811', '', 'activity_1', '', 'tc=RU-04bb&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3815', '', 'activity_2', '', '', '', 'id2706518', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3816', '', 'activity_3', '', 'tc=RU-04bb&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3820', '', 'activity_4', '', 'tc=RU-04bb&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3824', '', 'activity_5', '', 'tc=RU-04bb&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3828', '', 'activity_6', '', 'tc=RU-04bb&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3863', '', 'activity_1', '', 'tc=RU-04bc&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3864', '', 'activity_2', '', '', '', 'id2694654', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3865', '', 'activity_3', '', 'tc=RU-04bc&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3866', '', 'activity_4', '', 'tc=RU-04bc&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3867', '', 'activity_5', '', 'tc=RU-04bc&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3868', '', 'activity_6', '', 'tc=RU-04bc&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3900', '', 'activity_1', '', 'tc=RU-04bd&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3904', '', 'activity_2', '', '', '', 'id2820463', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3905', '', 'activity_3', '', 'tc=RU-04bd&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3909', '', 'activity_4', '', 'tc=RU-04bd&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3913', '', 'activity_5', '', 'tc=RU-04bd&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3917', '', 'activity_6', '', 'tc=RU-04bd&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '3952', '', 'activity_1', '', 'tc=RU-05a&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '3956', '', 'activity_2', '', '', '', 'id3021205', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '3957', '', 'activity_3', '', 'tc=RU-05a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '3961', '', 'activity_4', '', 'tc=RU-05a&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '3965', '', 'activity_5', '', 'tc=RU-05a&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '3969', '', 'activity_6', '', 'tc=RU-05a&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4003', '', 'activity_1', '', 'tc=RU-05b&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4007', '', 'activity_2', '', '', '', 'id2836321', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4008', '', 'activity_3', '', 'tc=RU-05b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4012', '', 'activity_4', '', 'tc=RU-05b&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4016', '', 'activity_5', '', 'tc=RU-05b&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4020', '', 'activity_6', '', 'tc=RU-05b&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4054', '', 'activity_1', '', '', '', 'id2835665', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4055', '', 'activity_2', '', 'tc=RU-06a&act=2', 'SEQ01', '', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4059', '', 'activity_3', '', 'tc=RU-06a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4063', '', 'activity_4', '', 'tc=RU-06a&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4067', '', 'activity_5', '', 'tc=RU-06a&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4099', '', 'activity_1', '', '', '', 'id2820358', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4100', '', 'activity_2', '', 'tc=RU-06b&act=2', 'SEQ01', '', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4104', '', 'activity_3', '', 'tc=RU-06b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4108', '', 'activity_4', '', 'tc=RU-06b&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4112', '', 'activity_5', '', 'tc=RU-06b&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4146', '', 'activity_1', '', 'tc=RU-07a&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4150', '', 'activity_2', '', '', '', 'id2836245', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4151', '', 'activity_3', '', 'tc=RU-07a&act=3', 'SEQ01', 'id2832236', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4155', '', 'activity_4', '', 'tc=RU-07a&act=4', 'SEQ01', 'id2850277', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4159', '', 'activity_5', '', 'tc=RU-07a&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4163', '', 'activity_6', '', 'tc=RU-07a&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4201', '', 'activity_1', '', 'tc=RU-07b&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4205', '', 'activity_2', '', '', '', 'id2853206', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4206', '', 'activity_3', '', 'tc=RU-07b&act=3', 'SEQ01', 'id2835912', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4210', '', 'activity_4', '', 'tc=RU-07b&act=4', 'SEQ01', 'id2815734', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4214', '', 'activity_5', '', 'tc=RU-07b&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4218', '', 'activity_6', '', 'tc=RU-07b&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4256', '', 'activity_1', '', '', '', 'id2849899', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4257', '', 'activity_2', '', 'tc=RU-07c&act=2', 'SEQ01', '', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4261', '', 'activity_3', '', 'tc=RU-07c&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4265', '', 'activity_4', '', 'tc=RU-07c&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4269', '', 'activity_5', '', 'tc=RU-07c&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4273', '', 'activity_6', '', 'tc=RU-07c&act=6', 'SEQ01', 'id2859301', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4308', '', 'activity_1', '', 'tc=RU-08a&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4312', '', 'activity_2', '', '', '', 'id3093412', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4313', '', 'activity_3', '', '', '', 'id3099562', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4314', '', 'activity_4', '', 'tc=RU-08a&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4318', '', 'activity_5', '', 'tc=RU-08a&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4322', '', 'activity_6', '', 'tc=RU-08a&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4326', '', 'activity_7', '', 'tc=RU-08a&act=7', 'SEQ01', 'id3112339', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '4330', '', 'activity_8', '', 'tc=RU-08a&act=8', 'SEQ01', '', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '4375', '', 'activity_1', '', 'tc=RU-08b&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4379', '', 'activity_2', '', '', '', 'id2835519', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4380', '', 'activity_3', '', '', '', 'id2857593', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4381', '', 'activity_4', '', 'tc=RU-08b&act=4', 'SEQ01', 'id2835367', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4385', '', 'activity_5', '', 'tc=RU-08b&act=5', 'SEQ01', 'id2835628', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4389', '', 'activity_6', '', 'tc=RU-08b&act=6', 'SEQ01', 'id2832247', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4393', '', 'activity_7', '', 'tc=RU-08b&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '4397', '', 'activity_8', '', 'tc=RU-08b&act=8', 'SEQ01', '', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '4444', '', 'activity_1', '', 'tc=RU-09&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4448', '', 'activity_2', '', '', '', 'id2623166', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4449', '', 'activity_3', '', 'tc=RU-09&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4453', '', 'activity_4', '', 'tc=RU-09&act=4', 'SEQ01', 'id2623309', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4457', '', 'activity_5', '', 'tc=RU-09&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4461', '', 'activity_6', '', 'tc=RU-09&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4498', '', 'activity_1', '', 'tc=RU-10&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4502', '', 'activity_2', '', '', '', 'id2693746', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4503', '', 'activity_3', '', 'tc=RU-10&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4507', '', 'activity_4', '', 'tc=RU-10&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4511', '', 'activity_5', '', 'tc=RU-10&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4515', '', 'activity_6', '', 'tc=RU-10&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4549', '', 'activity_1', '', 'tc=RU-11&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4553', '', 'activity_2', '', '', '', 'id2817761', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4554', '', 'activity_3', '', 'tc=RU-11&act=3', 'SEQ01', 'id2835269', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4558', '', 'activity_4', '', 'tc=RU-11&act=4', 'SEQ01', 'id2835169', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4562', '', 'activity_5', '', 'tc=RU-11&act=5', 'SEQ01', 'id2817750', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4566', '', 'activity_6', '', 'tc=RU-11&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4604', '', 'activity_1', '', 'tc=RU-12a&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4608', '', 'activity_2', '', '', '', 'id2621117', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4609', '', 'activity_3', '', 'tc=RU-12a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4613', '', 'activity_4', '', 'tc=RU-12a&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4649', '', 'activity_1', '', 'tc=RU-12b&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4653', '', 'activity_2', '', '', '', 'id2681832', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4654', '', 'activity_3', '', 'tc=RU-12b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4658', '', 'activity_4', '', 'tc=RU-12b&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4694', '', 'activity_1', '', 'tc=SX-02&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4695', '', 'activity_2', '', '', '', 'id2836148', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('0.5', '4696', '', 'activity_3', '', 'tc=SX-02&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4697', '', 'activity_4', '', 'tc=SX-02&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('0.75', '4698', '', 'activity_5', '', 'tc=SX-02&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4699', '', 'activity_6', '', 'tc=SX-02&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4730', '', 'activity_1', '', 'tc=SX-03&act=1', 'SEQ01', 'id2699284', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4734', '', 'activity_2', '', '', '', 'id2699004', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4735', '', 'activity_3', '', 'tc=SX-03&act=3', 'SEQ01', 'id2698909', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4739', '', 'activity_4', '', 'tc=SX-03&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4743', '', 'activity_5', '', 'tc=SX-03&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4747', '', 'activity_6', '', 'tc=SX-03&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4792', '', 'activity_1', '', 'tc=SX-04a&act=1', 'SEQ01', 'id2624783', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4796', '', 'activity_2', '', 'tc=SX-04a&act=2', 'SEQ01', '', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4800', '', 'activity_3', '', 'tc=SX-04a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4832', '', 'activity_1', '', 'tc=SX-04b&act=1', 'SEQ01', 'id3000006', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4836', '', 'activity_2', '', 'tc=SX-04b&act=2', 'SEQ01', '', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4840', '', 'activity_3', '', 'tc=SX-04b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4871', '', 'activity_1', '', 'tc=SX-05&act=1', 'SEQ01', 'id2686705', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4875', '', 'activity_2', '', 'tc=SX-05&act=2', 'SEQ01', 'id2687557', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4879', '', 'activity_3', '', '', '', 'id2698812', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '4880', '', 'activity_4', '', '', '', 'id2699280', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '4881', '', 'activity_5', '', 'tc=SX-05&act=5', 'SEQ01', 'id2699316', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '4885', '', 'activity_6', '', 'tc=SX-05&act=6', 'SEQ01', 'id2696380', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '4889', '', 'activity_7', '', '', '', 'id2696287', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '4890', '', 'activity_8', '', 'tc=SX-05&act=8', 'SEQ01', 'id2686689', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '4894', '', 'activity_9', '', 'tc=SX-05&act=9', 'SEQ01', 'id2699208', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '4898', '', 'activity_10', '', 'tc=SX-05&act=10', 'SEQ01', 'id2681469', '', 'Activity 10'); -INSERT INTO cp_item VALUES ('', '4991', '', 'activity_1', '', 'tc=SX-06&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '4995', '', 'activity_2', '', 'tc=SX-06&act=2', 'SEQ01', 'id3095010', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '4999', '', 'activity_3', '', 'tc=SX-06&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '5031', '', 'activity_1', '', '', '', 'id2837196', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '5032', '', 'activity_2', '', 'tc=SX-07a&act=2', 'SEQ01', 'id2837123', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '5036', '', 'activity_3', '', 'tc=SX-07a&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '5040', '', 'activity_4', '', 'tc=SX-07a&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '5044', '', 'activity_5', '', 'tc=SX-07a&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '5075', '', 'activity_1', '', '', '', 'id2836154', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '5076', '', 'activity_2', '', 'tc=SX-07b&act=2', 'SEQ01', 'id2837340', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '5080', '', 'activity_3', '', 'tc=SX-07b&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '5084', '', 'activity_4', '', 'tc=SX-07b&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '5115', '', 'activity_1', '', '', '', 'id2861852', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '5116', '', 'activity_2', '', 'tc=SX-07c&act=2', 'SEQ01', 'id2837019', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '5120', '', 'activity_3', '', 'tc=SX-07c&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '5124', '', 'activity_4', '', 'tc=SX-07c&act=4', 'SEQ01', '', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '5159', '', 'activity_1', '', 'tc=SX-07d&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '5163', '', 'activity_2', '', '', '', 'id2813984', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '5164', '', 'activity_3', '', 'tc=SX-07d&act=3', 'SEQ01', 'id2862147', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '5168', '', 'activity_4', '', 'tc=SX-07d&act=4', 'SEQ01', 'id2812723', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '5172', '', 'activity_5', '', 'tc=SX-07d&act=5', 'SEQ01', 'id2837145', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '5176', '', 'activity_6', '', 'tc=SX-07d&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '5180', '', 'activity_7', '', 'tc=SX-07d&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '5218', '', 'activity_1', '', 'tc=SX-07e&act=1', 'SEQ01', '', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '5222', '', 'activity_2', '', '', '', 'id2818780', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '5223', '', 'activity_3', '', 'tc=SX-07e&act=3', 'SEQ01', '', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '5227', '', 'activity_4', '', 'tc=SX-07e&act=4', 'SEQ01', 'id2834249', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '5231', '', 'activity_5', '', 'tc=SX-07e&act=5', 'SEQ01', 'id2836098', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '5235', '', 'activity_6', '', 'tc=SX-07e&act=6', 'SEQ01', 'id2835895', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '5239', '', 'activity_7', '', 'tc=SX-07e&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '5277', '', 'activity_1', '', 'tc=T-01a&act=1', 'SEQ01', 'id2675739', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '5281', '', 'activity_2', '', '', '', 'id2675998', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '5282', '', 'activity_3', '', '', '', 'module', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '5283', '', 'activity_4', '', '', '', 'id2675451', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '5284', '', 'activity_5', '', 'tc=T-01a&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '5288', '', 'activity_6', '', 'tc=T-01a&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '5292', '', 'activity_7', '', 'tc=T-01a&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '5296', '', 'activity_8', '', '', '', 'id2675173', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '5297', '', 'activity_9', '', 'tc=T-01a&act=9', 'SEQ01', '', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '5301', '', 'activity_10', '', 'tc=T-01a&act=10', 'SEQ01', '', '', 'Activity 10'); -INSERT INTO cp_item VALUES ('', '5305', '', 'activity_11', '', 'tc=T-01a&act=11', 'SEQ01', '', '', 'Activity 11'); -INSERT INTO cp_item VALUES ('', '5309', '', 'activity_12', '', '', '', 'id2674918', '', 'Activity 12'); -INSERT INTO cp_item VALUES ('', '5310', '', 'activity_13', '', 'tc=T-01a&act=13', 'SEQ01', '', '', 'Activity 13'); -INSERT INTO cp_item VALUES ('', '5314', '', 'activity_14', '', 'tc=T-01a&act=14', 'SEQ01', '', '', 'Activity 14'); -INSERT INTO cp_item VALUES ('', '5318', '', 'activity_15', '', 'tc=T-01a&act=15', 'SEQ01', '', '', 'Activity 15'); -INSERT INTO cp_item VALUES ('', '5322', '', 'activity_16', '', '', '', 'module', '', 'Activity 16'); -INSERT INTO cp_item VALUES ('', '5323', '', 'activity_17', '', '', '', 'id2674604', '', 'Activty 17'); -INSERT INTO cp_item VALUES ('', '5324', '', 'activity_18', '', 'tc=T-01a&act=18', 'SEQ01', '', '', 'Activity 18'); -INSERT INTO cp_item VALUES ('', '5328', '', 'activity_19', '', 'tc=T-01a&act=19', 'SEQ01', '', '', 'Activity 19'); -INSERT INTO cp_item VALUES ('', '5332', '', 'activity_20', '', 'tc=T-01a&act=20', 'SEQ01', '', '', 'Activity 20'); -INSERT INTO cp_item VALUES ('', '5336', '', 'activity_21', '', '', '', 'id2674322', '', 'Activity 21'); -INSERT INTO cp_item VALUES ('', '5337', '', 'activity_22', '', 'tc=T-01a&act=22', 'SEQ01', '', '', 'Activity 22'); -INSERT INTO cp_item VALUES ('', '5341', '', 'activity_23', '', 'tc=T-01a&act=23', 'SEQ01', '', '', 'Activity 23'); -INSERT INTO cp_item VALUES ('', '5345', '', 'activity_24', '', 'tc=T-01a&act=24', 'SEQ01', '', '', 'Activity 24'); -INSERT INTO cp_item VALUES ('', '5349', '', 'activity_25', '', '', '', 'id2668217', '', 'Activity 25'); -INSERT INTO cp_item VALUES ('', '5350', '', 'activity_26', '', 'tc=T-01a&act=26', 'SEQ01', '', '', 'Activity 26'); -INSERT INTO cp_item VALUES ('', '5354', '', 'activity_27', '', 'tc=T-01a&act=27', 'SEQ01', '', '', 'Activity 27'); -INSERT INTO cp_item VALUES ('', '5358', '', 'activity_28', '', 'tc=T-01a&act=28', 'SEQ01', '', '', 'Activity 28'); -INSERT INTO cp_item VALUES ('', '5362', '', 'activity_29', '', '', '', 'module', '', 'Activity 29'); -INSERT INTO cp_item VALUES ('', '5363', '', 'activity_30', '', '', '', 'id2668137', '', 'Activity 30'); -INSERT INTO cp_item VALUES ('', '5364', '', 'activity_31', '', 'tc=T-01a&act=31', 'SEQ01', '', '', 'Activity 31'); -INSERT INTO cp_item VALUES ('', '5368', '', 'activity_32', '', 'tc=T-01a&act=32', 'SEQ01', '', '', 'Activity 32'); -INSERT INTO cp_item VALUES ('', '5372', '', 'activity_33', '', 'tc=T-01a&act=33', 'SEQ01', '', '', 'Activity 33'); -INSERT INTO cp_item VALUES ('', '5376', '', 'activity_34', '', '', '', 'id2678102', '', 'Activity 34'); -INSERT INTO cp_item VALUES ('', '5377', '', 'activity_35', '', 'tc=T-01a&act=35', 'SEQ01', '', '', 'Activity 35'); -INSERT INTO cp_item VALUES ('', '5381', '', 'activity_36', '', 'tc=T-01a&act=36', 'SEQ01', '', '', 'Activity 36'); -INSERT INTO cp_item VALUES ('', '5385', '', 'activity_37', '', 'tc=T-01a&act=37', 'SEQ01', '', '', 'Activity 37'); -INSERT INTO cp_item VALUES ('', '5389', '', 'activity_38', '', '', '', 'id2618945', '', 'Activity 38'); -INSERT INTO cp_item VALUES ('', '5390', '', 'activity_39', '', 'tc=T-01a&act=39', 'SEQ01', '', '', 'Activity 39'); -INSERT INTO cp_item VALUES ('', '5394', '', 'activity_40', '', 'tc=T-01a&act=40', 'SEQ01', '', '', 'Activity 40'); -INSERT INTO cp_item VALUES ('', '5398', '', 'activity_41', '', 'tc=T-01a&act=41', 'SEQ01', '', '', 'Activity 41'); -INSERT INTO cp_item VALUES ('', '5402', '', 'activity_42', '', 'tc=T-01a&act=42', 'SEQ01', 'id2678246', '', 'Activity 42'); -INSERT INTO cp_item VALUES ('', '5490', '', 'activity_1', '', 'tc=T-01b&act=1', 'SEQ01', 'id2820366', '', 'Activity 1'); -INSERT INTO cp_item VALUES ('', '5494', '', 'activity_2', '', '', '', 'id2837025', '', 'Activity 2'); -INSERT INTO cp_item VALUES ('', '5495', '', 'activity_3', '', '', '', 'module', '', 'Activity 3'); -INSERT INTO cp_item VALUES ('', '5496', '', 'activity_4', '', '', '', 'id2820213', '', 'Activity 4'); -INSERT INTO cp_item VALUES ('', '5497', '', 'activity_5', '', 'tc=T-01b&act=5', 'SEQ01', '', '', 'Activity 5'); -INSERT INTO cp_item VALUES ('', '5501', '', 'activity_6', '', 'tc=T-01b&act=6', 'SEQ01', '', '', 'Activity 6'); -INSERT INTO cp_item VALUES ('', '5505', '', 'activity_7', '', 'tc=T-01b&act=7', 'SEQ01', '', '', 'Activity 7'); -INSERT INTO cp_item VALUES ('', '5509', '', 'activity_8', '', '', '', 'id2837293', '', 'Activity 8'); -INSERT INTO cp_item VALUES ('', '5510', '', 'activity_9', '', 'tc=T-01b&act=9', 'SEQ01', 'id2843255', '', 'Activity 9'); -INSERT INTO cp_item VALUES ('', '5514', '', 'activity_10', '', 'tc=T-01b&act=10', 'SEQ01', 'id2820281', '', 'Activity 10'); -INSERT INTO cp_item VALUES ('', '5518', '', 'activity_11', '', 'tc=T-01b&act=11', 'SEQ01', '', '', 'Activity 11'); -INSERT INTO cp_item VALUES ('', '5522', '', 'activity_12', '', '', '', 'id2820160', '', 'Activity 12'); -INSERT INTO cp_item VALUES ('', '5523', '', 'activity_13', '', 'tc=T-01b&act=13', 'SEQ01', '', '', 'Activity 13'); -INSERT INTO cp_item VALUES ('', '5527', '', 'activity_14', '', 'tc=T-01b&act=14', 'SEQ01', '', '', 'Activity 14'); -INSERT INTO cp_item VALUES ('', '5531', '', 'activity_15', '', 'tc=T-01b&act=15', 'SEQ01', '', '', 'Activity 15'); -INSERT INTO cp_item VALUES ('', '5535', '', 'activity_16', '', '', '', 'module', '', 'Activity 16'); -INSERT INTO cp_item VALUES ('', '5536', '', 'activity_17', '', '', '', 'id2850173', '', 'Activty 17'); -INSERT INTO cp_item VALUES ('', '5537', '', 'activity_18', '', 'tc=T-01b&act=18', 'SEQ01', '', '', 'Activity 18'); -INSERT INTO cp_item VALUES ('', '5541', '', 'activity_19', '', 'tc=T-01b&act=19', 'SEQ01', '', '', 'Activity 19'); -INSERT INTO cp_item VALUES ('', '5545', '', 'activity_20', '', 'tc=T-01b&act=20', 'SEQ01', '', '', 'Activity 20'); -INSERT INTO cp_item VALUES ('', '5549', '', 'activity_21', '', '', '', 'id2820322', '', 'Activity 21'); -INSERT INTO cp_item VALUES ('', '5550', '', 'activity_22', '', 'tc=T-01b&act=22', 'SEQ01', '', '', 'Activity 22'); -INSERT INTO cp_item VALUES ('', '5554', '', 'activity_23', '', 'tc=T-01b&act=23', 'SEQ01', '', '', 'Activity 23'); -INSERT INTO cp_item VALUES ('', '5558', '', 'activity_24', '', 'tc=T-01b&act=24', 'SEQ01', '', '', 'Activity 24'); -INSERT INTO cp_item VALUES ('', '5562', '', 'activity_25', '', '', '', 'id2843649', '', 'Activity 25'); -INSERT INTO cp_item VALUES ('', '5563', '', 'activity_26', '', 'tc=T-01b&act=26', 'SEQ01', '', '', 'Activity 26'); -INSERT INTO cp_item VALUES ('', '5567', '', 'activity_27', '', 'tc=T-01b&act=27', 'SEQ01', '', '', 'Activity 27'); -INSERT INTO cp_item VALUES ('', '5571', '', 'activity_28', '', 'tc=T-01b&act=28', 'SEQ01', '', '', 'Activity 28'); -INSERT INTO cp_item VALUES ('', '5575', '', 'activity_29', '', '', '', 'module', '', 'Activity 29'); -INSERT INTO cp_item VALUES ('', '5576', '', 'activity_30', '', '', '', 'id2837175', '', 'Activity 30'); -INSERT INTO cp_item VALUES ('', '5577', '', 'activity_31', '', 'tc=T-01b&act=31', 'SEQ01', '', '', 'Activity 31'); -INSERT INTO cp_item VALUES ('', '5581', '', 'activity_32', '', 'tc=T-01b&act=32', 'SEQ01', '', '', 'Activity 32'); -INSERT INTO cp_item VALUES ('', '5585', '', 'activity_33', '', 'tc=T-01b&act=33', 'SEQ01', '', '', 'Activity 33'); -INSERT INTO cp_item VALUES ('', '5589', '', 'activity_34', '', '', '', 'id2820477', '', 'Activity 34'); -INSERT INTO cp_item VALUES ('', '5590', '', 'activity_35', '', 'tc=T-01b&act=35', 'SEQ01', '', '', 'Activity 35'); -INSERT INTO cp_item VALUES ('', '5594', '', 'activity_36', '', 'tc=T-01b&act=36', 'SEQ01', '', '', 'Activity 36'); -INSERT INTO cp_item VALUES ('', '5598', '', 'activity_37', '', 'tc=T-01b&act=37', 'SEQ01', '', '', 'Activity 37'); -INSERT INTO cp_item VALUES ('', '5602', '', 'activity_38', '', '', '', 'id2843571', '', 'Activity 38'); -INSERT INTO cp_item VALUES ('', '5603', '', 'activity_39', '', 'tc=T-01b&act=39', 'SEQ01', '', '', 'Activity 39'); -INSERT INTO cp_item VALUES ('', '5607', '', 'activity_40', '', 'tc=T-01b&act=40', 'SEQ01', '', '', 'Activity 40'); -INSERT INTO cp_item VALUES ('', '5611', '', 'activity_41', '', 'tc=T-01b&act=41', 'SEQ01', '', '', 'Activity 41'); -INSERT INTO cp_item VALUES ('', '5615', '', 'activity_42', '', 'tc=T-01b&act=42', 'SEQ01', 'id2837119', '', 'Activity 42'); -INSERT INTO cp_item VALUES ('', '5713', '', 'u1', '', '', '', '', '', 'Combating Trafficking in Human Beings'); -INSERT INTO cp_item VALUES ('', '5714', '', 'OSCO1', '', '', 'SCO1', '', '', 'NATO Policy on Combating Trafficking in Human Beings'); -INSERT INTO cp_item VALUES ('', '5715', '', 'OSCO2', '', '', 'SCO2', '', '', 'What is Trafficking in Human Beings?'); -INSERT INTO cp_item VALUES ('', '5716', '', 'OSCO3', '', '', 'SCO3', '', '', 'Trafficking in Human Beings: Victims and Perpetrators'); -INSERT INTO cp_item VALUES ('', '5717', '', 'OSCO4', '', '', 'SCO4', '', '', 'Impact of Trafficking in Human Beings on NATO-led operations'); -INSERT INTO cp_item VALUES ('', '5718', '', 'OSCO5', '', '', 'SCO5', '', '', 'Duties of NATO-led Forces in Preventing Trafficking in Human Beings'); -INSERT INTO cp_item VALUES ('', '6175', '', 'INTRO', '', '', 'RESOURCE_INTRO', 'id382584', '', 'Introduction'); -INSERT INTO cp_item VALUES ('', '6176', '', 'MODULE1', '', '', '', 'id382558', '', 'Module 1 -- Basics'); -INSERT INTO cp_item VALUES ('', '6177', '', 'LESSON1', '', '', 'RESOURCE_LESSON1', '', '', 'Lesson 1 -- Interface'); -INSERT INTO cp_item VALUES ('', '6178', '', 'LESSON2', '', '', 'RESOURCE_LESSON2', '', '', 'Lesson 2 -- Toolbox'); -INSERT INTO cp_item VALUES ('', '6179', '', 'LESSON3', '', '', 'RESOURCE_LESSON3', '', '', 'Lesson 3 -- Palettes'); -INSERT INTO cp_item VALUES ('', '6180', '', 'LESSON4', '', '', 'RESOURCE_LESSON4', '', '', 'Lesson 4 -- Layers'); -INSERT INTO cp_item VALUES ('', '6181', '', 'MODULE2', '', '', '', 'id382538', '', 'Module 2 -- Enhancing Images'); -INSERT INTO cp_item VALUES ('', '6182', '', 'LESSON5', '', '', 'RESOURCE_LESSON5', '', '', 'Lesson 5 -- Color Balance'); -INSERT INTO cp_item VALUES ('', '6183', '', 'LESSON6', '', '', 'RESOURCE_LESSON6', '', '', 'Lesson 6 -- Brightness and Contrast'); -INSERT INTO cp_item VALUES ('', '6184', '', 'LESSON7', '', '', 'RESOURCE_LESSON7', '', '', 'Lesson 7 -- Hue and Saturation'); -INSERT INTO cp_item VALUES ('', '6185', '', 'MODULE3', '', '', '', 'id382425', '', 'Module 3 -- Blending Images'); -INSERT INTO cp_item VALUES ('', '6186', '', 'LESSON8', '', '', 'RESOURCE_LESSON8', '', '', 'Lesson 8 -- Selection Tools'); -INSERT INTO cp_item VALUES ('', '6187', '', 'LESSON9', '', '', 'RESOURCE_LESSON9', '', '', 'Lesson 9 -- Transform'); -INSERT INTO cp_item VALUES ('', '6188', '', 'EXAM', '', '', '', 'id382240', '', 'Exam'); -INSERT INTO cp_item VALUES ('', '6189', '', 'QUESTION1', '', 'main=Exam&sub=Question 1', 'RESOURCE_QUESTION1', '', '', 'QUESTION 1'); -INSERT INTO cp_item VALUES ('', '6190', '', 'QUESTION2', '', 'main=Exam&sub=Question 2', 'RESOURCE_QUESTION2', '', '', 'QUESTION 2'); -INSERT INTO cp_item VALUES ('', '6191', '', 'QUESTION3', '', 'main=Exam&sub=Question 3', 'RESOURCE_QUESTION3', '', '', 'QUESTION 3'); -INSERT INTO cp_item VALUES ('', '6192', '', 'QUESTION4', '', 'main=Exam&sub=Question 4', 'RESOURCE_QUESTION4', '', '', 'QUESTION 4'); -INSERT INTO cp_item VALUES ('', '6193', '', 'QUESTION5', '', 'main=Exam&sub=Question 5', 'RESOURCE_QUESTION5', '', '', 'QUESTION 5'); -INSERT INTO cp_item VALUES ('', '6194', '', 'QUESTION6', '', 'main=Exam&sub=Question 6', 'RESOURCE_QUESTION6', '', '', 'QUESTION 6'); -INSERT INTO cp_item VALUES ('', '6195', '', 'QUESTION7', '', 'main=Exam&sub=Question 7', 'RESOURCE_QUESTION7', '', '', 'QUESTION 7'); -INSERT INTO cp_item VALUES ('', '6196', '', 'QUESTION8', '', 'main=Exam&sub=Question 8', 'RESOURCE_QUESTION8', '', '', 'QUESTION 8'); -INSERT INTO cp_item VALUES ('', '6197', '', 'QUESTION9', '', 'main=Exam&sub=Question 9', 'RESOURCE_QUESTION9', '', '', 'QUESTION 9'); -INSERT INTO cp_item VALUES ('', '6376', '', 'INTRO', '', '', 'RESOURCE_INTRO', 'id384142', '', 'Introduction'); -INSERT INTO cp_item VALUES ('', '6378', '', 'MODULE1', '', '', 'RESOURCE_LESSON1', 'id383693', '', 'Module 1 -- Basics'); -INSERT INTO cp_item VALUES ('', '6381', '', 'MODULE2', '', '', 'RESOURCE_LESSON2', 'id383741', '', 'Module 2 -- Enhancing Images'); -INSERT INTO cp_item VALUES ('', '6384', '', 'MODULE3', '', '', 'RESOURCE_LESSON3', 'id383789', '', 'Module 3 -- Blending Images'); -INSERT INTO cp_item VALUES ('', '6387', '', 'EXAM', '', '', '', 'id383606', '', 'Exam'); -INSERT INTO cp_item VALUES ('', '6388', '', 'QUESTION1', '', 'main=Exam&sub=Question 1', 'RESOURCE_QUESTION1', '', '', 'QUESTION 1'); -INSERT INTO cp_item VALUES ('', '6391', '', 'QUESTION2', '', 'main=Exam&sub=Question 2', 'RESOURCE_QUESTION2', '', '', 'QUESTION 2'); -INSERT INTO cp_item VALUES ('', '6394', '', 'QUESTION3', '', 'main=Exam&sub=Question 3', 'RESOURCE_QUESTION3', '', '', 'QUESTION 3'); -INSERT INTO cp_item VALUES ('', '6397', '', 'QUESTION4', '', 'main=Exam&sub=Question 4', 'RESOURCE_QUESTION4', '', '', 'QUESTION 4'); -INSERT INTO cp_item VALUES ('', '6400', '', 'QUESTION5', '', 'main=Exam&sub=Question 5', 'RESOURCE_QUESTION5', '', '', 'QUESTION 5'); -INSERT INTO cp_item VALUES ('', '6403', '', 'QUESTION6', '', 'main=Exam&sub=Question 6', 'RESOURCE_QUESTION6', '', '', 'QUESTION 6'); -INSERT INTO cp_item VALUES ('', '6406', '', 'QUESTION7', '', 'main=Exam&sub=Question 7', 'RESOURCE_QUESTION7', '', '', 'QUESTION 7'); -INSERT INTO cp_item VALUES ('', '6409', '', 'QUESTION8', '', 'main=Exam&sub=Question 8', 'RESOURCE_QUESTION8', '', '', 'QUESTION 8'); -INSERT INTO cp_item VALUES ('', '6412', '', 'QUESTION9', '', 'main=Exam&sub=Question 9', 'RESOURCE_QUESTION9', '', '', 'QUESTION 9'); -INSERT INTO cp_item VALUES ('', '6604', '', 'INTRO', '', '', 'RESOURCE_INTRO', 'id384077', '', 'Introduction'); -INSERT INTO cp_item VALUES ('', '6606', '', 'MODULE1', '', '', 'RESOURCE_LESSON1', 'id384117', '', 'Module 1 -- Basics'); -INSERT INTO cp_item VALUES ('', '6609', '', 'MODULE2', '', '', 'RESOURCE_LESSON2', 'id383992', '', 'Module 2 -- Enhancing Images'); -INSERT INTO cp_item VALUES ('', '6612', '', 'MODULE3', '', '', 'RESOURCE_LESSON3', 'id384048', '', 'Module 3 -- Blending Images'); -INSERT INTO cp_item VALUES ('', '6615', '', 'EXAM', '', '', '', 'id383725', '', 'Exam'); -INSERT INTO cp_item VALUES ('', '6616', '', 'QUESTION1', '', 'main=Exam&sub=Question 1', 'RESOURCE_QUESTION1', '', '', 'QUESTION 1'); -INSERT INTO cp_item VALUES ('', '6619', '', 'QUESTION2', '', 'main=Exam&sub=Question 2', 'RESOURCE_QUESTION2', '', '', 'QUESTION 2'); -INSERT INTO cp_item VALUES ('', '6622', '', 'QUESTION3', '', 'main=Exam&sub=Question 3', 'RESOURCE_QUESTION3', '', '', 'QUESTION 3'); -INSERT INTO cp_item VALUES ('', '6625', '', 'QUESTION4', '', 'main=Exam&sub=Question 4', 'RESOURCE_QUESTION4', '', '', 'QUESTION 4'); -INSERT INTO cp_item VALUES ('', '6628', '', 'QUESTION5', '', 'main=Exam&sub=Question 5', 'RESOURCE_QUESTION5', '', '', 'QUESTION 5'); -INSERT INTO cp_item VALUES ('', '6631', '', 'QUESTION6', '', 'main=Exam&sub=Question 6', 'RESOURCE_QUESTION6', '', '', 'QUESTION 6'); -INSERT INTO cp_item VALUES ('', '6634', '', 'QUESTION7', '', 'main=Exam&sub=Question 7', 'RESOURCE_QUESTION7', '', '', 'QUESTION 7'); -INSERT INTO cp_item VALUES ('', '6637', '', 'QUESTION8', '', 'main=Exam&sub=Question 8', 'RESOURCE_QUESTION8', '', '', 'QUESTION 8'); -INSERT INTO cp_item VALUES ('', '6640', '', 'QUESTION9', '', 'main=Exam&sub=Question 9', 'RESOURCE_QUESTION9', '', '', 'QUESTION 9'); -INSERT INTO cp_item VALUES ('', '6832', '', 'item_8017380e67384e13b735d16511a6c149', '', '', 'resource_74da3c38d35c47d5b42da9d6c0f255bb', 'id381365', '', 'Vorabtest'); -INSERT INTO cp_item VALUES ('', '6833', '', 'item_e4a9c7851c114760b2a3f03e892b5427', '', '', '', 'id381502', '', 'Authentifizierung'); -INSERT INTO cp_item VALUES ('', '6834', '', 'item_df1cb952695841938519b1b77d7fc5b6', 'false', '', '', 'id380310', '', 'Hidden Cluster Item'); -INSERT INTO cp_item VALUES ('', '6835', '', 'item_8ebe0745ffe24bffa2ceba3682c6f7ec', '', '', 'resource_0c47e4ac023a4a819fdbb28146b7b7a2', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', '', 'Authentifizierung 1 '); -INSERT INTO cp_item VALUES ('', '6836', '', 'item_3bf16927a417469293bd176b23bf5cb4', '', '', 'resource_eb239f75804641ab8932982a13e7db54', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', '', 'Authentifizerung 2 '); -INSERT INTO cp_item VALUES ('', '6837', '', 'item_366683108e61443b911f86a36cfd3ce6', '', '', 'resource_e5c297d67e284e82b1d3517d6fbe49d2', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', '', 'Authentifizierung Nachtest'); -INSERT INTO cp_item VALUES ('', '6838', '', 'item_a0dc6a3eb9714bb2bd7e322087a41b12', 'false', '', 'resource_f9bf818889944a0f9b87ade4807e0570', 'id380281', '', 'Sequence Cap'); -INSERT INTO cp_item VALUES ('', '6839', '', 'item_1ff77533d4084fb9aebf21d3a2154492', 'false', '', 'resource_f9bf818889944a0f9b87ade4807e0570', 'id381473', '', 'Sequence Cap'); -INSERT INTO cp_item VALUES ('', '6840', '', 'item_f321b6f642f04739ae001cb659321fd8', '', '', '', 'id381269', '', 'Deployment'); -INSERT INTO cp_item VALUES ('', '6841', '', 'item_55d6e1ad8c0a44f3b27f6bb825f30c61', '', '', 'resource_fc6d353a91074b368b6e67f9792be8a9', 'id381312', '', 'Nachhilfe zum Deployment'); -INSERT INTO cp_item VALUES ('', '6842', '', 'item_6da130defc4a403b8176bcdeb495a3ac', '', '', 'resource_de5e74877b524f77a97a5b0e93d8c7e1', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', '', 'Deployment I '); -INSERT INTO cp_item VALUES ('', '6843', '', 'item_c792f8ad0c0e45bb855c3887e5720565', 'false', '', 'resource_f9bf818889944a0f9b87ade4807e0570', 'id381240', '', 'Sequence Cap'); -INSERT INTO cp_item VALUES ('', '6844', '', 'item_8c3a716431ce4514b7ba93400f9f61e6', '', '', 'resource_9c7707d6d3da41629b647c3a0c9d6063', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', '', 'Ende'); -INSERT INTO cp_item VALUES ('', '6933', '', 'item_8017380e67384e13b735d16511a6c149', '', '', 'resource_74da3c38d35c47d5b42da9d6c0f255bb', 'id382028', '', 'Vorabtest'); -INSERT INTO cp_item VALUES ('', '6934', '', 'item_e4a9c7851c114760b2a3f03e892b5427', '', '', '', 'id381884', '', 'Authentifizierung'); -INSERT INTO cp_item VALUES ('', '6935', '', 'item_df1cb952695841938519b1b77d7fc5b6', 'false', '', '', 'id382072', '', 'Hidden Cluster Item'); -INSERT INTO cp_item VALUES ('', '6936', '', 'item_8ebe0745ffe24bffa2ceba3682c6f7ec', '', '', 'resource_0c47e4ac023a4a819fdbb28146b7b7a2', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', '', 'Authentifizierung 1 '); -INSERT INTO cp_item VALUES ('', '6937', '', 'item_3bf16927a417469293bd176b23bf5cb4', '', '', 'resource_eb239f75804641ab8932982a13e7db54', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', '', 'Authentifizerung 2 '); -INSERT INTO cp_item VALUES ('', '6938', '', 'item_366683108e61443b911f86a36cfd3ce6', '', '', 'resource_e5c297d67e284e82b1d3517d6fbe49d2', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', '', 'Authentifizierung Nachtest'); -INSERT INTO cp_item VALUES ('', '6939', '', 'item_a0dc6a3eb9714bb2bd7e322087a41b12', 'false', '', 'resource_f9bf818889944a0f9b87ade4807e0570', 'id382139', '', 'Sequence Cap'); -INSERT INTO cp_item VALUES ('', '6940', '', 'item_1ff77533d4084fb9aebf21d3a2154492', 'false', '', 'resource_f9bf818889944a0f9b87ade4807e0570', 'id381856', '', 'Sequence Cap'); -INSERT INTO cp_item VALUES ('', '6941', '', 'item_f321b6f642f04739ae001cb659321fd8', '', '', '', 'id381696', '', 'Deployment'); -INSERT INTO cp_item VALUES ('', '6942', '', 'item_55d6e1ad8c0a44f3b27f6bb825f30c61', '', '', 'resource_fc6d353a91074b368b6e67f9792be8a9', 'id381946', '', 'Nachhilfe zum Deployment'); -INSERT INTO cp_item VALUES ('', '6943', '', 'item_6da130defc4a403b8176bcdeb495a3ac', '', '', 'resource_de5e74877b524f77a97a5b0e93d8c7e1', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', '', 'Deployment I '); -INSERT INTO cp_item VALUES ('', '6944', '', 'item_c792f8ad0c0e45bb855c3887e5720565', 'false', '', 'resource_f9bf818889944a0f9b87ade4807e0570', 'id381668', '', 'Sequence Cap'); -INSERT INTO cp_item VALUES ('', '6945', '', 'item_8c3a716431ce4514b7ba93400f9f61e6', '', '', 'resource_9c7707d6d3da41629b647c3a0c9d6063', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', '', 'Ende'); -INSERT INTO cp_item VALUES ('', '7034', '', 'u1', '', '', '', '', '', 'Learning Objects'); -INSERT INTO cp_item VALUES ('', '7035', '', 'OSCO1', '', '', 'SCO1', '', '', 'Types of Human Trafficking'); -INSERT INTO cp_item VALUES ('', '7036', '', 'OSCO2', '', '', 'SCO2', '', '', 'The History of Human Trafficking'); -INSERT INTO cp_item VALUES ('', '7037', '', 'OSCO3', '', '', 'SCO3', '', '', 'Causes of Human Trafficking'); -INSERT INTO cp_item VALUES ('', '7038', '', 'OSCO4', '', '', 'SCO4', '', '', 'Consequences of Human Trafficking'); -INSERT INTO cp_item VALUES ('', '7039', '', 'OSCO5', '', '', 'SCO5', '', '', 'Strategies against Human Trafficking'); -INSERT INTO cp_item VALUES ('', '7040', '', 'OSCO6', '', '', 'SCO6', '', '', 'Challenges to Counter-Trafficking Efforts'); -INSERT INTO cp_item VALUES ('', '7041', '', 'OSCO7', '', '', 'SCO7', '', '', 'Human Trafficking: Causes, Consequences, and Counter-Strategies'); -INSERT INTO cp_item VALUES ('', '7679', '', 'ITEM-A0584416-40BD-5359-361E-EA8C65CF1931', '', '', 'cam.html', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '7680', '', 'ITEM-8003C0B7-59CA-87E9-7080-38F0B5744C65', '', '', 'cam.html', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '7681', '', 'ITEM-4218CB3B-2767-1405-B60E-683FD8B446F0', '', '', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '7682', '', 'ITEM-68636AC0-9174-5BA6-F2D7-723D75038477', '', '', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '7683', '', 'ITEM-A398A9B3-8834-BC2C-7248-74F403D6B0B2', '', '', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '7684', '', 'ITEM-A255830A-6D26-C1D0-05E5-F41BBF4EF59E', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '7685', '', 'ITEM-1C992844-FD6C-F690-E59C-3E24B4D81771', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '7686', '', 'ITEM-BFAA6BE7-54E8-E64E-C843-7E9FB8414008', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '7687', '', 'ITEM-AACF750F-4446-263F-B582-66AC9DD5794A', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '7688', '', 'ITEM-BAFBDB54-1B6D-88E7-4BAB-368C4A7A0EEE', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '7689', '', 'ITEM-CE1A7F27-3460-8F09-3ADC-3ED5C9EAD410', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '7694', '', 'u1', '', '', '', '', '', 'Learning Objects'); -INSERT INTO cp_item VALUES ('', '7695', '', 'OSCO1', '', '', 'SCO1', '', '', 'Types of Human Trafficking'); -INSERT INTO cp_item VALUES ('', '7696', '', 'OSCO2', '', '', 'SCO2', '', '', 'The History of Human Trafficking'); -INSERT INTO cp_item VALUES ('', '7697', '', 'OSCO3', '', '', 'SCO3', '', '', 'Causes of Human Trafficking'); -INSERT INTO cp_item VALUES ('', '7698', '', 'OSCO4', '', '', 'SCO4', '', '', 'Consequences of Human Trafficking'); -INSERT INTO cp_item VALUES ('', '7699', '', 'OSCO5', '', '', 'SCO5', '', '', 'Strategies against Human Trafficking'); -INSERT INTO cp_item VALUES ('', '7700', '', 'OSCO6', '', '', 'SCO6', '', '', 'Challenges to Counter-Trafficking Efforts'); -INSERT INTO cp_item VALUES ('', '7701', '', 'OSCO7', '', '', 'SCO7', '', '', 'Human Trafficking: Causes, Consequences, and Counter-Strategies'); -INSERT INTO cp_item VALUES ('', '8339', '', 'ITEM-A0584416-40BD-5359-361E-EA8C65CF1931', '', '', 'cam.html', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8340', '', 'ITEM-8003C0B7-59CA-87E9-7080-38F0B5744C65', '', '', 'cam.html', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8341', '', 'ITEM-4218CB3B-2767-1405-B60E-683FD8B446F0', '', '', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8342', '', 'ITEM-68636AC0-9174-5BA6-F2D7-723D75038477', '', '', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8343', '', 'ITEM-A398A9B3-8834-BC2C-7248-74F403D6B0B2', '', '', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8344', '', 'ITEM-A255830A-6D26-C1D0-05E5-F41BBF4EF59E', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8345', '', 'ITEM-1C992844-FD6C-F690-E59C-3E24B4D81771', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8346', '', 'ITEM-BFAA6BE7-54E8-E64E-C843-7E9FB8414008', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8347', '', 'ITEM-AACF750F-4446-263F-B582-66AC9DD5794A', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8348', '', 'ITEM-BAFBDB54-1B6D-88E7-4BAB-368C4A7A0EEE', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8349', '', 'ITEM-CE1A7F27-3460-8F09-3ADC-3ED5C9EAD410', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8354', '', 'ITEM-A0584416-40BD-5359-361E-EA8C65CF1931', '', '', 'cam.html', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8355', '', 'ITEM-8003C0B7-59CA-87E9-7080-38F0B5744C65', '', '', 'cam.html', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8356', '', 'ITEM-4218CB3B-2767-1405-B60E-683FD8B446F0', '', '', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8357', '', 'ITEM-68636AC0-9174-5BA6-F2D7-723D75038477', '', '', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8358', '', 'ITEM-A398A9B3-8834-BC2C-7248-74F403D6B0B2', '', '', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8359', '', 'ITEM-A255830A-6D26-C1D0-05E5-F41BBF4EF59E', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8360', '', 'ITEM-1C992844-FD6C-F690-E59C-3E24B4D81771', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8361', '', 'ITEM-BFAA6BE7-54E8-E64E-C843-7E9FB8414008', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8362', '', 'ITEM-AACF750F-4446-263F-B582-66AC9DD5794A', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8363', '', 'ITEM-BAFBDB54-1B6D-88E7-4BAB-368C4A7A0EEE', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8364', '', 'ITEM-CE1A7F27-3460-8F09-3ADC-3ED5C9EAD410', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8369', '', 'ITEM-A0584416-40BD-5359-361E-EA8C65CF1931', '', '', 'cam.html', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8370', '', 'ITEM-8003C0B7-59CA-87E9-7080-38F0B5744C65', '', '', 'cam.html', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8371', '', 'ITEM-4218CB3B-2767-1405-B60E-683FD8B446F0', '', '', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8372', '', 'ITEM-68636AC0-9174-5BA6-F2D7-723D75038477', '', '', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8373', '', 'ITEM-A398A9B3-8834-BC2C-7248-74F403D6B0B2', '', '', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8374', '', 'ITEM-A255830A-6D26-C1D0-05E5-F41BBF4EF59E', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8375', '', 'ITEM-1C992844-FD6C-F690-E59C-3E24B4D81771', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8376', '', 'ITEM-BFAA6BE7-54E8-E64E-C843-7E9FB8414008', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8377', '', 'ITEM-AACF750F-4446-263F-B582-66AC9DD5794A', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8378', '', 'ITEM-BAFBDB54-1B6D-88E7-4BAB-368C4A7A0EEE', '', '', '', '', '', 'Item'); -INSERT INTO cp_item VALUES ('', '8379', '', 'ITEM-CE1A7F27-3460-8F09-3ADC-3ED5C9EAD410', '', '', '', '', '', 'Item'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_manifest -# -INSERT INTO cp_manifest VALUES ('', '1', 'API', 'LMSTestPackage_API', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '43', 'API', 'LMSTestPackage_API', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '85', 'CM-01', 'LMSTestPackage_CM-01', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '125', 'CM-02a', 'LMSTestPackage_CM-02a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '157', 'CM-02b', 'LMSTestPackage_CM-02b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '205', 'CM-03a', 'LMSTestPackage_CM-03a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '259', 'CM-03b', 'LMSTestPackage_CM-03b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '332', 'CM-04a', 'LMSTestPackage_CM-04a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '400', 'CM-04b', 'LMSTestPackage_CM-04b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '443', 'CM-04c', 'LMSTestPackage_CM-04c', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '515', 'CM-04d', 'LMSTestPackage_CM-04d', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '583', 'CM-05', 'LMSTestPackage_CM-05', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '638', 'CM-06', 'LMSTestPackage_CM-06', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '673', 'CM-07a', 'LMSTestPackage_CM-07a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '729', 'CM-07b', 'LMSTestPackage_CM-07b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '797', 'CM-07c', 'LMSTestPackage_CM-07c', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '854', 'CM-07d', 'LMSTestPackage_CM-07d', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '902', 'CASETEST', 'LMSTestPackage_CM-07e', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '935', 'CM-07f', 'LMSTestPackage_CM-07f', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '965', 'CM-08', 'LMSTestPackage_CM-08', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '994', 'DMB', 'LMSTestPackage_DMB', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1102', 'DMI', 'LMSTestPackage_DMI', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1153', 'MS-01', 'LMSTestPackage_MS-01', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1201', 'MS-02', 'LMSTestPackage_MS-02', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1251', 'MS-03', 'LMSTestPackage_MS-03', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1301', 'MS-04', 'LMSTestPackage_MS-04', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1335', 'MS-05a', 'LMSTestPackage_MS-05a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1371', 'MS-05b', 'LMSTestPackage_MS-05b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1422', 'MS-06', 'LMSTestPackage_MS-06', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1475', 'OB-01a', 'LMSTestPackage_OB-01a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1518', 'OB-01b', 'LMSTestPackage_OB-01b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1561', 'OB-01c', 'LMSTestPackage_OB-01c', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1604', 'OB-02a', 'LMSTestPackage_OB-02a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1649', 'OB-02b', 'LMSTestPackage_OB-02b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1685', 'OB-03a', 'LMSTestPackage_OB-03a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1732', 'OB-03b', 'LMSTestPackage_OB-03b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1811', 'OB-03c', 'LMSTestPackage_OB-03c', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1893', 'OB-04', 'LMSTestPackage_OB-04', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '1962', 'OB-05a', 'LMSTestPackage_OB-05a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2014', 'OB-05b', 'LMSTestPackage_OB-05b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2066', 'OB-05c', 'LMSTestPackage_OB-05c', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2109', 'OB-06', 'LMSTestPackage_OB-06', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2165', 'OB-07a', 'LMSTestPackage_OB-07a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2213', 'OB-07b', 'LMSTestPackage_OB-07b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2260', 'OB-08a', 'LMSTestPackage_OB-08a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2324', 'OB-08b', 'LMSTestPackage_OB-08b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2388', 'OB-09a', 'LMSTestPackage_OB-09a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2443', 'OB-09b', 'LMSTestPackage_OB-09b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2498', 'OB-10a', 'LMSTestPackage_OB-10a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2535', 'OB-10b', 'LMSTestPackage_OB-10b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2581', 'OB-10c', 'LMSTestPackage_OB-10c', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2628', 'OB-10d', 'LMSTestPackage_OB-10d', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2677', 'OB-11a', 'LMSTestPackage_OB-11a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2726', 'OB-11b', 'LMSTestPackage_OB-11b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2777', 'OB-12a', 'LMSTestPackage_OB-12a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2818', 'OB-12b', 'LMSTestPackage_OB-12b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2859', 'OB-12c', 'LMSTestPackage_OB-12c', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2900', 'OB-13a', 'LMSTestPackage_OB-13a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '2950', 'OB-13b', 'LMSTestPackage_OB-13b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3000', 'OB-13c', 'LMSTestPackage_OB-13c', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3050', 'OB-14a', 'LMSTestPackage_OB-14a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3119', 'OB-14b', 'LMSTestPackage_OB-14b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3194', 'OB-15', 'LMSTestPackage_OB-15', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3266', 'RU-01aa', 'LMSTestPackage_RU-01aa', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3315', 'RU-01ab', 'LMSTestPackage_RU-01ab', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3364', 'RU-01ba', 'LMSTestPackage_RU-01ba', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3398', 'RU-01bb', 'LMSTestPackage_RU-01bb', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3447', 'RU-02a', 'LMSTestPackage_RU-02a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3498', 'RU-02b', 'LMSTestPackage_RU-02b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3549', 'RU-03a', 'LMSTestPackage_RU-03a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3601', 'RU-03b', 'LMSTestPackage_RU-03b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3653', 'RU-04aa', 'LMSTestPackage_RU-04aa', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3705', 'RU-04ab', 'LMSTestPackage_RU-04ab', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3757', 'RU-04ba', 'LMSTestPackage_RU-04ba', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3809', 'RU-04bb', 'LMSTestPackage_RU-04bb', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3861', 'RU-04bc', 'LMSTestPackage_RU-04bc', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3898', 'RU-04bd', 'LMSTestPackage_RU-04bd', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '3950', 'RU-05a', 'LMSTestPackage_RU-05a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4001', 'RU-05b', 'LMSTestPackage_RU-05b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4052', 'RU-06a', 'LMSTestPackage_RU-06a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4097', 'RU-06b', 'LMSTestPackage_RU-06b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4144', 'RU-07a', 'LMSTestPackage_RU-07a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4199', 'RU-07b', 'LMSTestPackage_RU-07b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4254', 'RU-07c', 'LMSTestPackage_RU-07c', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4306', 'RU-08a', 'LMSTestPackage_RU-08a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4373', 'RU-08b', 'LMSTestPackage_RU-08b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4442', 'RU-09', 'LMSTestPackage_RU-09', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4496', 'RU-10', 'LMSTestPackage_RU-10', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4547', 'RU-11', 'LMSTestPackage_RU-11', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4602', 'RU-12a', 'LMSTestPackage_RU-12a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4647', 'RU-12b', 'LMSTestPackage_RU-12b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4692', 'SX-02', 'LMSTestPackage_SX-02', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4728', 'SX-03', 'LMSTestPackage_SX-03', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4790', 'SX-04a', 'LMSTestPackage_SX-04a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4830', 'SX-04b', 'LMSTestPackage_SX-04b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4869', 'SX-05', 'SeqConTest_SX-05', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '4989', 'SX-06', 'LMSTestPackage_SX-06', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '5029', 'SX-07a', 'LMSTestPackage_SX-07a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '5073', 'SX-07b', 'LMSTestPackage_SX-07b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '5113', 'SX-07c', 'LMSTestPackage_SX-07c', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '5157', 'SX-07d', 'LMSTestPackage_SX-07d', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '5216', 'SX-07e', 'LMSTestPackage_SX-07e', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '5275', 'T-01a', 'LMSTestPackage_T-01a', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '5488', 'T-01b', 'LMSTestPackage_T-01b', '', 'md5:', '1.0.1'); -INSERT INTO cp_manifest VALUES ('', '5711', 'blabla', 'pfplms-42285', '', 'md5:', '2004 3rd Edition'); -INSERT INTO cp_manifest VALUES ('', '6173', 'TOC1', 'photo-MANIFEST-linear', '', 'md5:', '1.3'); -INSERT INTO cp_manifest VALUES ('', '6374', 'TOC1', 'photo-MANIFEST-linear-controls', '', 'md5:', '1.3'); -INSERT INTO cp_manifest VALUES ('', '6602', 'TOC1', 'photo-MANIFEST-linear-controls', '', 'md5:', '1.3'); -INSERT INTO cp_manifest VALUES ('', '6830', 'organization_294673fbf63c4815b45af1651480864c', 'manifest_5fdcd2e25838459c9bc3cee758cf4e5c', '', 'md5:', '2004 3rd Edition'); -INSERT INTO cp_manifest VALUES ('', '6931', 'organization_294673fbf63c4815b45af1651480864c', 'manifest_5fdcd2e25838459c9bc3cee758cf4e5c', '', 'md5:', '2004 3rd Edition'); -INSERT INTO cp_manifest VALUES ('', '7032', 'blabla', 'pfplms-70633', '', 'md5:', '2004 3rd Edition'); -INSERT INTO cp_manifest VALUES ('', '7677', 'ORG-5EA524CA-76F2-4829-DBD5-AC3CEF8A0153', 'MANIFEST-54F1704C-B5BA-B7A2-A13E-7BE4F0B9BEB1', '', 'md5:', ''); -INSERT INTO cp_manifest VALUES ('', '7692', 'blabla', 'pfplms-70633', '', 'md5:', '2004 3rd Edition'); -INSERT INTO cp_manifest VALUES ('', '8337', 'ORG-5EA524CA-76F2-4829-DBD5-AC3CEF8A0153', 'MANIFEST-54F1704C-B5BA-B7A2-A13E-7BE4F0B9BEB1', '', 'md5:', ''); -INSERT INTO cp_manifest VALUES ('', '8352', 'ORG-5EA524CA-76F2-4829-DBD5-AC3CEF8A0153', 'MANIFEST-54F1704C-B5BA-B7A2-A13E-7BE4F0B9BEB1', '', 'md5:', ''); -INSERT INTO cp_manifest VALUES ('', '8367', 'ORG-5EA524CA-76F2-4829-DBD5-AC3CEF8A0153', 'MANIFEST-54F1704C-B5BA-B7A2-A13E-7BE4F0B9BEB1', '', 'md5:', ''); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_mapinfo -# -INSERT INTO cp_mapinfo VALUES ('1511', 'false', 'false', 'gObj-OB01a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('1516', 'false', 'false', 'gObj-OB01a', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1554', 'false', 'false', 'gObj-OB01b', 'true', 'false'); -INSERT INTO cp_mapinfo VALUES ('1559', 'false', 'false', 'gObj-OB01b', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1597', 'false', 'false', 'gObj-OB01c', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('1602', 'false', 'false', 'gObj-OB01c', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1641', 'false', 'false', 'gObj-OB02a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('1647', 'false', 'false', 'gObj-OB02a', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1677', 'false', 'false', 'gObj-OB02b', 'true', 'false'); -INSERT INTO cp_mapinfo VALUES ('1683', 'false', 'false', 'gObj-OB02b', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1722', 'false', 'false', 'gObj-OB03-1', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('1726', 'false', 'false', 'gObj-OB03-2', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('1730', 'false', 'false', 'gObj-OB03-3', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('1788', 'false', 'false', 'gObj-OB03-2', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1793', 'false', 'false', 'gObj-OB03-1', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1798', 'false', 'false', 'gObj-OB03-3', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('1803', 'false', 'false', 'gObj-OB03-3', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1808', 'false', 'false', 'gObj-OB03-3', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1867', 'false', 'false', 'gObj-OB03-3', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1872', 'false', 'false', 'gObj-OB03-1', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1877', 'false', 'false', 'gObj-OB03-3', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('1882', 'false', 'false', 'gObj-OB03-2', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1888', 'false', 'false', 'gObj-OB03-2', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1890', 'false', 'false', 'gObj-OB03-3', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1942', 'false', 'false', 'gObj-OB04-1', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('1943', 'false', 'false', 'gObj-OB04-3', 'true', 'false'); -INSERT INTO cp_mapinfo VALUES ('1946', 'false', 'false', 'gObj-OB04-2', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('1949', 'false', 'false', 'gObj-OB04-1', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1952', 'false', 'false', 'gObj-OB04-2', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('1955', 'false', 'false', 'gObj-OB04-3', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2002', 'false', 'false', 'gObj-OB05a', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('2007', 'false', 'false', 'gObj-OB05a', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2012', 'false', 'false', 'gObj-OB05a', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2054', 'false', 'false', 'gObj-OB05b', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('2059', 'false', 'false', 'gObj-OB05b', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2064', 'false', 'false', 'gObj-OB05b', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2102', 'false', 'false', 'gObj-OB05c', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('2107', 'false', 'false', 'gObj-OB05c', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2154', 'false', 'false', 'gObj-OB06', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('2163', 'false', 'false', 'gObj-OB06', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2201', 'false', 'false', 'gObj-OB07a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('2207', 'false', 'false', 'gObj-OB07a', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2211', 'false', 'false', 'gObj-OB07a', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2249', 'false', 'false', 'gObj-OB07b', 'true', 'false'); -INSERT INTO cp_mapinfo VALUES ('2254', 'false', 'false', 'gObj-OB07b', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2258', 'false', 'false', 'gObj-OB07b', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2300', 'false', 'false', 'gObj-OB08', 'true', 'false'); -INSERT INTO cp_mapinfo VALUES ('2307', 'false', 'false', 'gObj-OB08', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2315', 'false', 'false', 'gObj-OB08', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2322', 'false', 'false', 'gObj-OB08', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2364', 'false', 'false', 'gObj-OB08', 'true', 'false'); -INSERT INTO cp_mapinfo VALUES ('2371', 'false', 'false', 'gObj-OB08', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2379', 'false', 'false', 'gObj-OB08', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2386', 'false', 'false', 'gObj-OB08', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2426', 'false', 'false', 'gObj-OB09-obj1', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2431', 'false', 'false', 'gObj-OB09-obj2', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2435', 'false', 'false', 'gObj-OB09-obj1', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('2437', 'false', 'false', 'gObj-OB09-obj2', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('2481', 'false', 'false', 'gObj-OB09-obj1', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2486', 'false', 'false', 'gObj-OB09-obj2', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2490', 'false', 'false', 'gObj-OB09-obj1', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('2492', 'false', 'false', 'gObj-OB09-obj2', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('2525', 'false', 'false', 'gObj-OB10a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('2530', 'false', 'false', 'gObj-OB10a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('2533', 'false', 'false', 'gObj-OB10a', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2571', 'false', 'false', 'gObj-OB10b', 'true', 'false'); -INSERT INTO cp_mapinfo VALUES ('2576', 'false', 'false', 'gObj-OB10b', 'true', 'false'); -INSERT INTO cp_mapinfo VALUES ('2579', 'false', 'false', 'gObj-OB10b', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2617', 'false', 'false', 'gObj-OB10c', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('2623', 'false', 'false', 'gObj-OB10c', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('2626', 'false', 'false', 'gObj-OB10c', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2664', 'false', 'false', 'gObj-OB10d', 'true', 'false'); -INSERT INTO cp_mapinfo VALUES ('2672', 'false', 'false', 'gObj-OB10d', 'true', 'false'); -INSERT INTO cp_mapinfo VALUES ('2675', 'false', 'false', 'gObj-OB10d', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2714', 'false', 'false', 'gObj-OB11a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('2720', 'false', 'false', 'gObj-OB11a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('2724', 'false', 'false', 'gObj-OB11a', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2763', 'false', 'false', 'gObj-OB11b', 'true', 'false'); -INSERT INTO cp_mapinfo VALUES ('2771', 'false', 'false', 'gObj-OB11b', 'true', 'false'); -INSERT INTO cp_mapinfo VALUES ('2775', 'false', 'false', 'gObj-OB11b', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2941', 'false', 'false', 'gObj-OB13a', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('2948', 'false', 'false', 'gObj-OB13a', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('2991', 'false', 'false', 'gObj-OB13b', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('2998', 'false', 'false', 'gObj-OB13b', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('3041', 'false', 'false', 'gObj-OB13c', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3048', 'false', 'false', 'gObj-OB13c', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('3087', 'false', 'false', 'gObj-OB14a-2', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3089', 'false', 'false', 'gObj-OB14a-3', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3091', 'false', 'false', 'gObj-OB14a-4', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3093', 'false', 'false', 'gObj-OB14a-1', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3097', 'false', 'false', 'gObj-OB14a-3', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3099', 'false', 'false', 'gObj-OB14a-3', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('3101', 'false', 'false', 'gObj-OB14a-1', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3103', 'false', 'false', 'gObj-OB14a-4', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3105', 'false', 'false', 'gObj-OB14a-2', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3109', 'false', 'false', 'gObj-OB14a-4', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3111', 'false', 'false', 'gObj-OB14a-1', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3113', 'false', 'false', 'gObj-OB14a-2', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3115', 'false', 'false', 'gObj-OB14a-3', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3117', 'false', 'false', 'gObj-OB14a-3', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('3164', 'false', 'false', 'gObj-OB14b-1', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3166', 'false', 'false', 'obj1', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3169', 'false', 'false', 'gObj-OB14b-2', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3174', 'false', 'false', 'gObj-OB14b-3', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3180', 'false', 'false', 'gObj-OB14b-1', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3182', 'false', 'false', 'gObj-OB14b-2', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('3184', 'false', 'false', 'gObj-OB14b-3', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('3189', 'false', 'false', 'gObj-OB14b-3', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('3190', 'false', 'false', 'gObj-OB14b-1', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('3192', 'false', 'false', 'gObj-OB14b-2', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('3246', 'false', 'false', 'gObj-OB15', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('3249', 'false', 'false', 'gObj-OB15', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('3252', 'false', 'false', 'gObj-OB15', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('3264', 'false', 'false', 'gObj-OB15', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('4774', 'false', 'false', 'gObj-SX03-1', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('4776', 'false', 'false', 'gObj-SX03-2', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('4778', 'false', 'false', 'gObj-SX03-3', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('4781', 'false', 'false', 'gObj-SX03-1', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('4828', 'false', 'false', 'gObj-SX04a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4926', 'false', 'false', 'gObj-SX05-1', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4931', 'false', 'false', 'gObj-SX05-2', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4937', 'false', 'false', 'gObj-SX05-3a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4946', 'false', 'false', 'gObj-SX05-3a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4948', 'false', 'false', 'gObj-SX05-3b', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4955', 'false', 'false', 'gObj-SX05-4a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4964', 'false', 'false', 'gObj-SX05-4a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4966', 'false', 'false', 'gObj-SX05-4b', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4973', 'false', 'false', 'gObj-SX05-5', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4975', 'false', 'false', 'gObj-SX05-3a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4977', 'false', 'false', 'gObj-SX05-3b', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4979', 'false', 'false', 'gObj-SX05-4a', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4981', 'false', 'false', 'gObj-SX05-4b', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('4987', 'false', 'false', 'gObj-SX05-5', 'false', 'true'); -INSERT INTO cp_mapinfo VALUES ('5429', 'false', 'false', 'gObj-T01a-1', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('5432', 'false', 'false', 'gObj-T01a-1', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('5435', 'false', 'false', 'gObj-T01a-1', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('5438', 'false', 'false', 'gObj-T01a-2', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('5441', 'false', 'false', 'gObj-T01a-2', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('5444', 'false', 'false', 'gObj-T01a-2', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('5447', 'false', 'false', 'gObj-T01a-3', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('5450', 'false', 'false', 'gObj-T01a-3', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('5453', 'false', 'false', 'gObj-T01a-3', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('5462', 'false', 'false', 'gObj-T01a-1', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('5464', 'false', 'false', 'gObj-T01a-2', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('5466', 'false', 'false', 'gObj-T01a-3', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('5642', 'false', 'false', 'gObj-T01b-1', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('5655', 'false', 'false', 'gObj-T01b-1', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('5658', 'false', 'false', 'gObj-T01b-1', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('5661', 'false', 'false', 'gObj-T01b-2', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('5664', 'false', 'false', 'gObj-T01b-2', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('5667', 'false', 'false', 'gObj-T01b-2', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('5670', 'false', 'false', 'gObj-T01b-3', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('5673', 'false', 'false', 'gObj-T01b-3', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('5676', 'false', 'false', 'gObj-T01b-3', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('5685', 'false', 'false', 'gObj-T01b-1', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('5687', 'false', 'false', 'gObj-T01b-2', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('5689', 'false', 'false', 'gObj-T01b-3', 'false', 'false'); -INSERT INTO cp_mapinfo VALUES ('6926', 'false', 'false', 'b75d9d2755344021b906853aea56f52f', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('6928', 'false', 'false', '1d622cc0b1a547019354abfbef60c303', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('6930', 'false', 'false', '201c0fcdbe99495ebabe81ec93e19736', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('7027', 'false', 'false', 'b75d9d2755344021b906853aea56f52f', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('7029', 'false', 'false', '1d622cc0b1a547019354abfbef60c303', 'true', 'true'); -INSERT INTO cp_mapinfo VALUES ('7031', 'false', 'false', '201c0fcdbe99495ebabe81ec93e19736', 'true', 'true'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_node -# -INSERT INTO cp_node VALUES ('1', 'manifest', '146'); -INSERT INTO cp_node VALUES ('2', 'organization', '146'); -INSERT INTO cp_node VALUES ('3', 'item', '146'); -INSERT INTO cp_node VALUES ('4', 'hideLMSUI', '146'); -INSERT INTO cp_node VALUES ('5', 'item', '146'); -INSERT INTO cp_node VALUES ('6', 'hideLMSUI', '146'); -INSERT INTO cp_node VALUES ('7', 'item', '146'); -INSERT INTO cp_node VALUES ('8', 'hideLMSUI', '146'); -INSERT INTO cp_node VALUES ('9', 'resource', '146'); -INSERT INTO cp_node VALUES ('10', 'file', '146'); -INSERT INTO cp_node VALUES ('11', 'dependency', '146'); -INSERT INTO cp_node VALUES ('12', 'dependency', '146'); -INSERT INTO cp_node VALUES ('13', 'dependency', '146'); -INSERT INTO cp_node VALUES ('14', 'dependency', '146'); -INSERT INTO cp_node VALUES ('15', 'dependency', '146'); -INSERT INTO cp_node VALUES ('16', 'resource', '146'); -INSERT INTO cp_node VALUES ('17', 'file', '146'); -INSERT INTO cp_node VALUES ('18', 'dependency', '146'); -INSERT INTO cp_node VALUES ('19', 'dependency', '146'); -INSERT INTO cp_node VALUES ('20', 'dependency', '146'); -INSERT INTO cp_node VALUES ('21', 'dependency', '146'); -INSERT INTO cp_node VALUES ('22', 'dependency', '146'); -INSERT INTO cp_node VALUES ('23', 'resource', '146'); -INSERT INTO cp_node VALUES ('24', 'file', '146'); -INSERT INTO cp_node VALUES ('25', 'dependency', '146'); -INSERT INTO cp_node VALUES ('26', 'dependency', '146'); -INSERT INTO cp_node VALUES ('27', 'dependency', '146'); -INSERT INTO cp_node VALUES ('28', 'dependency', '146'); -INSERT INTO cp_node VALUES ('29', 'dependency', '146'); -INSERT INTO cp_node VALUES ('30', 'resource', '146'); -INSERT INTO cp_node VALUES ('31', 'file', '146'); -INSERT INTO cp_node VALUES ('32', 'resource', '146'); -INSERT INTO cp_node VALUES ('33', 'file', '146'); -INSERT INTO cp_node VALUES ('34', 'resource', '146'); -INSERT INTO cp_node VALUES ('35', 'file', '146'); -INSERT INTO cp_node VALUES ('36', 'dependency', '146'); -INSERT INTO cp_node VALUES ('37', 'resource', '146'); -INSERT INTO cp_node VALUES ('38', 'file', '146'); -INSERT INTO cp_node VALUES ('39', 'resource', '146'); -INSERT INTO cp_node VALUES ('40', 'file', '146'); -INSERT INTO cp_node VALUES ('41', 'resource', '146'); -INSERT INTO cp_node VALUES ('42', 'file', '146'); -INSERT INTO cp_node VALUES ('43', 'manifest', '147'); -INSERT INTO cp_node VALUES ('44', 'organization', '147'); -INSERT INTO cp_node VALUES ('45', 'item', '147'); -INSERT INTO cp_node VALUES ('46', 'hideLMSUI', '147'); -INSERT INTO cp_node VALUES ('47', 'item', '147'); -INSERT INTO cp_node VALUES ('48', 'hideLMSUI', '147'); -INSERT INTO cp_node VALUES ('49', 'item', '147'); -INSERT INTO cp_node VALUES ('50', 'hideLMSUI', '147'); -INSERT INTO cp_node VALUES ('51', 'resource', '147'); -INSERT INTO cp_node VALUES ('52', 'file', '147'); -INSERT INTO cp_node VALUES ('53', 'dependency', '147'); -INSERT INTO cp_node VALUES ('54', 'dependency', '147'); -INSERT INTO cp_node VALUES ('55', 'dependency', '147'); -INSERT INTO cp_node VALUES ('56', 'dependency', '147'); -INSERT INTO cp_node VALUES ('57', 'dependency', '147'); -INSERT INTO cp_node VALUES ('58', 'resource', '147'); -INSERT INTO cp_node VALUES ('59', 'file', '147'); -INSERT INTO cp_node VALUES ('60', 'dependency', '147'); -INSERT INTO cp_node VALUES ('61', 'dependency', '147'); -INSERT INTO cp_node VALUES ('62', 'dependency', '147'); -INSERT INTO cp_node VALUES ('63', 'dependency', '147'); -INSERT INTO cp_node VALUES ('64', 'dependency', '147'); -INSERT INTO cp_node VALUES ('65', 'resource', '147'); -INSERT INTO cp_node VALUES ('66', 'file', '147'); -INSERT INTO cp_node VALUES ('67', 'dependency', '147'); -INSERT INTO cp_node VALUES ('68', 'dependency', '147'); -INSERT INTO cp_node VALUES ('69', 'dependency', '147'); -INSERT INTO cp_node VALUES ('70', 'dependency', '147'); -INSERT INTO cp_node VALUES ('71', 'dependency', '147'); -INSERT INTO cp_node VALUES ('72', 'resource', '147'); -INSERT INTO cp_node VALUES ('73', 'file', '147'); -INSERT INTO cp_node VALUES ('74', 'resource', '147'); -INSERT INTO cp_node VALUES ('75', 'file', '147'); -INSERT INTO cp_node VALUES ('76', 'resource', '147'); -INSERT INTO cp_node VALUES ('77', 'file', '147'); -INSERT INTO cp_node VALUES ('78', 'dependency', '147'); -INSERT INTO cp_node VALUES ('79', 'resource', '147'); -INSERT INTO cp_node VALUES ('80', 'file', '147'); -INSERT INTO cp_node VALUES ('81', 'resource', '147'); -INSERT INTO cp_node VALUES ('82', 'file', '147'); -INSERT INTO cp_node VALUES ('83', 'resource', '147'); -INSERT INTO cp_node VALUES ('84', 'file', '147'); -INSERT INTO cp_node VALUES ('85', 'manifest', '148'); -INSERT INTO cp_node VALUES ('86', 'organization', '148'); -INSERT INTO cp_node VALUES ('87', 'item', '148'); -INSERT INTO cp_node VALUES ('88', 'hideLMSUI', '148'); -INSERT INTO cp_node VALUES ('89', 'hideLMSUI', '148'); -INSERT INTO cp_node VALUES ('90', 'hideLMSUI', '148'); -INSERT INTO cp_node VALUES ('91', 'item', '148'); -INSERT INTO cp_node VALUES ('92', 'hideLMSUI', '148'); -INSERT INTO cp_node VALUES ('93', 'hideLMSUI', '148'); -INSERT INTO cp_node VALUES ('94', 'hideLMSUI', '148'); -INSERT INTO cp_node VALUES ('95', 'item', '148'); -INSERT INTO cp_node VALUES ('96', 'hideLMSUI', '148'); -INSERT INTO cp_node VALUES ('97', 'hideLMSUI', '148'); -INSERT INTO cp_node VALUES ('98', 'hideLMSUI', '148'); -INSERT INTO cp_node VALUES ('99', 'resource', '148'); -INSERT INTO cp_node VALUES ('100', 'file', '148'); -INSERT INTO cp_node VALUES ('101', 'dependency', '148'); -INSERT INTO cp_node VALUES ('102', 'dependency', '148'); -INSERT INTO cp_node VALUES ('103', 'dependency', '148'); -INSERT INTO cp_node VALUES ('104', 'dependency', '148'); -INSERT INTO cp_node VALUES ('105', 'dependency', '148'); -INSERT INTO cp_node VALUES ('106', 'resource', '148'); -INSERT INTO cp_node VALUES ('107', 'file', '148'); -INSERT INTO cp_node VALUES ('108', 'resource', '148'); -INSERT INTO cp_node VALUES ('109', 'file', '148'); -INSERT INTO cp_node VALUES ('110', 'resource', '148'); -INSERT INTO cp_node VALUES ('111', 'file', '148'); -INSERT INTO cp_node VALUES ('112', 'resource', '148'); -INSERT INTO cp_node VALUES ('113', 'file', '148'); -INSERT INTO cp_node VALUES ('114', 'dependency', '148'); -INSERT INTO cp_node VALUES ('115', 'resource', '148'); -INSERT INTO cp_node VALUES ('116', 'file', '148'); -INSERT INTO cp_node VALUES ('117', 'resource', '148'); -INSERT INTO cp_node VALUES ('118', 'file', '148'); -INSERT INTO cp_node VALUES ('119', 'sequencing', '148'); -INSERT INTO cp_node VALUES ('120', 'sequencing', '148'); -INSERT INTO cp_node VALUES ('121', 'objective', '148'); -INSERT INTO cp_node VALUES ('122', 'sequencing', '148'); -INSERT INTO cp_node VALUES ('123', 'objective', '148'); -INSERT INTO cp_node VALUES ('124', 'sequencing', '148'); -INSERT INTO cp_node VALUES ('125', 'manifest', '149'); -INSERT INTO cp_node VALUES ('126', 'organization', '149'); -INSERT INTO cp_node VALUES ('127', 'item', '149'); -INSERT INTO cp_node VALUES ('128', 'item', '149'); -INSERT INTO cp_node VALUES ('129', 'item', '149'); -INSERT INTO cp_node VALUES ('130', 'resource', '149'); -INSERT INTO cp_node VALUES ('131', 'file', '149'); -INSERT INTO cp_node VALUES ('132', 'dependency', '149'); -INSERT INTO cp_node VALUES ('133', 'dependency', '149'); -INSERT INTO cp_node VALUES ('134', 'dependency', '149'); -INSERT INTO cp_node VALUES ('135', 'dependency', '149'); -INSERT INTO cp_node VALUES ('136', 'dependency', '149'); -INSERT INTO cp_node VALUES ('137', 'resource', '149'); -INSERT INTO cp_node VALUES ('138', 'file', '149'); -INSERT INTO cp_node VALUES ('139', 'resource', '149'); -INSERT INTO cp_node VALUES ('140', 'file', '149'); -INSERT INTO cp_node VALUES ('141', 'resource', '149'); -INSERT INTO cp_node VALUES ('142', 'file', '149'); -INSERT INTO cp_node VALUES ('143', 'resource', '149'); -INSERT INTO cp_node VALUES ('144', 'file', '149'); -INSERT INTO cp_node VALUES ('145', 'dependency', '149'); -INSERT INTO cp_node VALUES ('146', 'resource', '149'); -INSERT INTO cp_node VALUES ('147', 'file', '149'); -INSERT INTO cp_node VALUES ('148', 'resource', '149'); -INSERT INTO cp_node VALUES ('149', 'file', '149'); -INSERT INTO cp_node VALUES ('150', 'sequencing', '149'); -INSERT INTO cp_node VALUES ('151', 'rule', '149'); -INSERT INTO cp_node VALUES ('152', 'condition', '149'); -INSERT INTO cp_node VALUES ('153', 'objective', '149'); -INSERT INTO cp_node VALUES ('154', 'sequencing', '149'); -INSERT INTO cp_node VALUES ('155', 'objective', '149'); -INSERT INTO cp_node VALUES ('156', 'sequencing', '149'); -INSERT INTO cp_node VALUES ('157', 'manifest', '150'); -INSERT INTO cp_node VALUES ('158', 'organization', '150'); -INSERT INTO cp_node VALUES ('159', 'item', '150'); -INSERT INTO cp_node VALUES ('160', 'hideLMSUI', '150'); -INSERT INTO cp_node VALUES ('161', 'hideLMSUI', '150'); -INSERT INTO cp_node VALUES ('162', 'hideLMSUI', '150'); -INSERT INTO cp_node VALUES ('163', 'item', '150'); -INSERT INTO cp_node VALUES ('164', 'hideLMSUI', '150'); -INSERT INTO cp_node VALUES ('165', 'hideLMSUI', '150'); -INSERT INTO cp_node VALUES ('166', 'hideLMSUI', '150'); -INSERT INTO cp_node VALUES ('167', 'item', '150'); -INSERT INTO cp_node VALUES ('168', 'hideLMSUI', '150'); -INSERT INTO cp_node VALUES ('169', 'hideLMSUI', '150'); -INSERT INTO cp_node VALUES ('170', 'hideLMSUI', '150'); -INSERT INTO cp_node VALUES ('171', 'resource', '150'); -INSERT INTO cp_node VALUES ('172', 'file', '150'); -INSERT INTO cp_node VALUES ('173', 'dependency', '150'); -INSERT INTO cp_node VALUES ('174', 'dependency', '150'); -INSERT INTO cp_node VALUES ('175', 'dependency', '150'); -INSERT INTO cp_node VALUES ('176', 'dependency', '150'); -INSERT INTO cp_node VALUES ('177', 'dependency', '150'); -INSERT INTO cp_node VALUES ('178', 'resource', '150'); -INSERT INTO cp_node VALUES ('179', 'file', '150'); -INSERT INTO cp_node VALUES ('180', 'resource', '150'); -INSERT INTO cp_node VALUES ('181', 'file', '150'); -INSERT INTO cp_node VALUES ('182', 'resource', '150'); -INSERT INTO cp_node VALUES ('183', 'file', '150'); -INSERT INTO cp_node VALUES ('184', 'resource', '150'); -INSERT INTO cp_node VALUES ('185', 'file', '150'); -INSERT INTO cp_node VALUES ('186', 'dependency', '150'); -INSERT INTO cp_node VALUES ('187', 'resource', '150'); -INSERT INTO cp_node VALUES ('188', 'file', '150'); -INSERT INTO cp_node VALUES ('189', 'resource', '150'); -INSERT INTO cp_node VALUES ('190', 'file', '150'); -INSERT INTO cp_node VALUES ('191', 'sequencing', '150'); -INSERT INTO cp_node VALUES ('192', 'objective', '150'); -INSERT INTO cp_node VALUES ('193', 'objective', '150'); -INSERT INTO cp_node VALUES ('194', 'objective', '150'); -INSERT INTO cp_node VALUES ('195', 'objective', '150'); -INSERT INTO cp_node VALUES ('196', 'sequencing', '150'); -INSERT INTO cp_node VALUES ('197', 'rule', '150'); -INSERT INTO cp_node VALUES ('198', 'condition', '150'); -INSERT INTO cp_node VALUES ('199', 'objective', '150'); -INSERT INTO cp_node VALUES ('200', 'objective', '150'); -INSERT INTO cp_node VALUES ('201', 'sequencing', '150'); -INSERT INTO cp_node VALUES ('202', 'objective', '150'); -INSERT INTO cp_node VALUES ('203', 'objective', '150'); -INSERT INTO cp_node VALUES ('204', 'sequencing', '150'); -INSERT INTO cp_node VALUES ('205', 'manifest', '151'); -INSERT INTO cp_node VALUES ('206', 'organization', '151'); -INSERT INTO cp_node VALUES ('207', 'item', '151'); -INSERT INTO cp_node VALUES ('208', 'item', '151'); -INSERT INTO cp_node VALUES ('209', 'item', '151'); -INSERT INTO cp_node VALUES ('210', 'item', '151'); -INSERT INTO cp_node VALUES ('211', 'item', '151'); -INSERT INTO cp_node VALUES ('212', 'item', '151'); -INSERT INTO cp_node VALUES ('213', 'item', '151'); -INSERT INTO cp_node VALUES ('214', 'item', '151'); -INSERT INTO cp_node VALUES ('215', 'resource', '151'); -INSERT INTO cp_node VALUES ('216', 'file', '151'); -INSERT INTO cp_node VALUES ('217', 'dependency', '151'); -INSERT INTO cp_node VALUES ('218', 'dependency', '151'); -INSERT INTO cp_node VALUES ('219', 'dependency', '151'); -INSERT INTO cp_node VALUES ('220', 'dependency', '151'); -INSERT INTO cp_node VALUES ('221', 'dependency', '151'); -INSERT INTO cp_node VALUES ('222', 'resource', '151'); -INSERT INTO cp_node VALUES ('223', 'file', '151'); -INSERT INTO cp_node VALUES ('224', 'resource', '151'); -INSERT INTO cp_node VALUES ('225', 'file', '151'); -INSERT INTO cp_node VALUES ('226', 'resource', '151'); -INSERT INTO cp_node VALUES ('227', 'file', '151'); -INSERT INTO cp_node VALUES ('228', 'resource', '151'); -INSERT INTO cp_node VALUES ('229', 'file', '151'); -INSERT INTO cp_node VALUES ('230', 'dependency', '151'); -INSERT INTO cp_node VALUES ('231', 'resource', '151'); -INSERT INTO cp_node VALUES ('232', 'file', '151'); -INSERT INTO cp_node VALUES ('233', 'resource', '151'); -INSERT INTO cp_node VALUES ('234', 'file', '151'); -INSERT INTO cp_node VALUES ('235', 'sequencing', '151'); -INSERT INTO cp_node VALUES ('236', 'objective', '151'); -INSERT INTO cp_node VALUES ('237', 'objective', '151'); -INSERT INTO cp_node VALUES ('238', 'sequencing', '151'); -INSERT INTO cp_node VALUES ('239', 'objective', '151'); -INSERT INTO cp_node VALUES ('240', 'objective', '151'); -INSERT INTO cp_node VALUES ('241', 'objective', '151'); -INSERT INTO cp_node VALUES ('242', 'objective', '151'); -INSERT INTO cp_node VALUES ('243', 'objective', '151'); -INSERT INTO cp_node VALUES ('244', 'sequencing', '151'); -INSERT INTO cp_node VALUES ('245', 'sequencing', '151'); -INSERT INTO cp_node VALUES ('246', 'rule', '151'); -INSERT INTO cp_node VALUES ('247', 'condition', '151'); -INSERT INTO cp_node VALUES ('248', 'condition', '151'); -INSERT INTO cp_node VALUES ('249', 'sequencing', '151'); -INSERT INTO cp_node VALUES ('250', 'rule', '151'); -INSERT INTO cp_node VALUES ('251', 'condition', '151'); -INSERT INTO cp_node VALUES ('252', 'condition', '151'); -INSERT INTO cp_node VALUES ('253', 'sequencing', '151'); -INSERT INTO cp_node VALUES ('254', 'rule', '151'); -INSERT INTO cp_node VALUES ('255', 'condition', '151'); -INSERT INTO cp_node VALUES ('256', 'condition', '151'); -INSERT INTO cp_node VALUES ('257', 'sequencing', '151'); -INSERT INTO cp_node VALUES ('258', 'sequencing', '151'); -INSERT INTO cp_node VALUES ('259', 'manifest', '152'); -INSERT INTO cp_node VALUES ('260', 'organization', '152'); -INSERT INTO cp_node VALUES ('261', 'item', '152'); -INSERT INTO cp_node VALUES ('262', 'item', '152'); -INSERT INTO cp_node VALUES ('263', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('264', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('265', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('266', 'item', '152'); -INSERT INTO cp_node VALUES ('267', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('268', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('269', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('270', 'item', '152'); -INSERT INTO cp_node VALUES ('271', 'item', '152'); -INSERT INTO cp_node VALUES ('272', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('273', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('274', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('275', 'item', '152'); -INSERT INTO cp_node VALUES ('276', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('277', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('278', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('279', 'item', '152'); -INSERT INTO cp_node VALUES ('280', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('281', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('282', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('283', 'item', '152'); -INSERT INTO cp_node VALUES ('284', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('285', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('286', 'hideLMSUI', '152'); -INSERT INTO cp_node VALUES ('287', 'resource', '152'); -INSERT INTO cp_node VALUES ('288', 'file', '152'); -INSERT INTO cp_node VALUES ('289', 'dependency', '152'); -INSERT INTO cp_node VALUES ('290', 'dependency', '152'); -INSERT INTO cp_node VALUES ('291', 'dependency', '152'); -INSERT INTO cp_node VALUES ('292', 'dependency', '152'); -INSERT INTO cp_node VALUES ('293', 'dependency', '152'); -INSERT INTO cp_node VALUES ('294', 'resource', '152'); -INSERT INTO cp_node VALUES ('295', 'file', '152'); -INSERT INTO cp_node VALUES ('296', 'resource', '152'); -INSERT INTO cp_node VALUES ('297', 'file', '152'); -INSERT INTO cp_node VALUES ('298', 'resource', '152'); -INSERT INTO cp_node VALUES ('299', 'file', '152'); -INSERT INTO cp_node VALUES ('300', 'resource', '152'); -INSERT INTO cp_node VALUES ('301', 'file', '152'); -INSERT INTO cp_node VALUES ('302', 'dependency', '152'); -INSERT INTO cp_node VALUES ('303', 'resource', '152'); -INSERT INTO cp_node VALUES ('304', 'file', '152'); -INSERT INTO cp_node VALUES ('305', 'resource', '152'); -INSERT INTO cp_node VALUES ('306', 'file', '152'); -INSERT INTO cp_node VALUES ('307', 'sequencing', '152'); -INSERT INTO cp_node VALUES ('308', 'objective', '152'); -INSERT INTO cp_node VALUES ('309', 'objective', '152'); -INSERT INTO cp_node VALUES ('310', 'sequencing', '152'); -INSERT INTO cp_node VALUES ('311', 'objective', '152'); -INSERT INTO cp_node VALUES ('312', 'objective', '152'); -INSERT INTO cp_node VALUES ('313', 'objective', '152'); -INSERT INTO cp_node VALUES ('314', 'objective', '152'); -INSERT INTO cp_node VALUES ('315', 'objective', '152'); -INSERT INTO cp_node VALUES ('316', 'objective', '152'); -INSERT INTO cp_node VALUES ('317', 'sequencing', '152'); -INSERT INTO cp_node VALUES ('318', 'sequencing', '152'); -INSERT INTO cp_node VALUES ('319', 'rule', '152'); -INSERT INTO cp_node VALUES ('320', 'condition', '152'); -INSERT INTO cp_node VALUES ('321', 'condition', '152'); -INSERT INTO cp_node VALUES ('322', 'sequencing', '152'); -INSERT INTO cp_node VALUES ('323', 'rule', '152'); -INSERT INTO cp_node VALUES ('324', 'condition', '152'); -INSERT INTO cp_node VALUES ('325', 'condition', '152'); -INSERT INTO cp_node VALUES ('326', 'sequencing', '152'); -INSERT INTO cp_node VALUES ('327', 'rule', '152'); -INSERT INTO cp_node VALUES ('328', 'condition', '152'); -INSERT INTO cp_node VALUES ('329', 'condition', '152'); -INSERT INTO cp_node VALUES ('330', 'sequencing', '152'); -INSERT INTO cp_node VALUES ('331', 'sequencing', '152'); -INSERT INTO cp_node VALUES ('332', 'manifest', '153'); -INSERT INTO cp_node VALUES ('333', 'organization', '153'); -INSERT INTO cp_node VALUES ('334', 'item', '153'); -INSERT INTO cp_node VALUES ('335', 'item', '153'); -INSERT INTO cp_node VALUES ('336', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('337', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('338', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('339', 'item', '153'); -INSERT INTO cp_node VALUES ('340', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('341', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('342', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('343', 'item', '153'); -INSERT INTO cp_node VALUES ('344', 'item', '153'); -INSERT INTO cp_node VALUES ('345', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('346', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('347', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('348', 'item', '153'); -INSERT INTO cp_node VALUES ('349', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('350', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('351', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('352', 'item', '153'); -INSERT INTO cp_node VALUES ('353', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('354', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('355', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('356', 'item', '153'); -INSERT INTO cp_node VALUES ('357', 'item', '153'); -INSERT INTO cp_node VALUES ('358', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('359', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('360', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('361', 'item', '153'); -INSERT INTO cp_node VALUES ('362', 'item', '153'); -INSERT INTO cp_node VALUES ('363', 'item', '153'); -INSERT INTO cp_node VALUES ('364', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('365', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('366', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('367', 'item', '153'); -INSERT INTO cp_node VALUES ('368', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('369', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('370', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('371', 'item', '153'); -INSERT INTO cp_node VALUES ('372', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('373', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('374', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('375', 'item', '153'); -INSERT INTO cp_node VALUES ('376', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('377', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('378', 'hideLMSUI', '153'); -INSERT INTO cp_node VALUES ('379', 'resource', '153'); -INSERT INTO cp_node VALUES ('380', 'file', '153'); -INSERT INTO cp_node VALUES ('381', 'dependency', '153'); -INSERT INTO cp_node VALUES ('382', 'dependency', '153'); -INSERT INTO cp_node VALUES ('383', 'dependency', '153'); -INSERT INTO cp_node VALUES ('384', 'dependency', '153'); -INSERT INTO cp_node VALUES ('385', 'dependency', '153'); -INSERT INTO cp_node VALUES ('386', 'resource', '153'); -INSERT INTO cp_node VALUES ('387', 'file', '153'); -INSERT INTO cp_node VALUES ('388', 'resource', '153'); -INSERT INTO cp_node VALUES ('389', 'file', '153'); -INSERT INTO cp_node VALUES ('390', 'resource', '153'); -INSERT INTO cp_node VALUES ('391', 'file', '153'); -INSERT INTO cp_node VALUES ('392', 'resource', '153'); -INSERT INTO cp_node VALUES ('393', 'file', '153'); -INSERT INTO cp_node VALUES ('394', 'dependency', '153'); -INSERT INTO cp_node VALUES ('395', 'resource', '153'); -INSERT INTO cp_node VALUES ('396', 'file', '153'); -INSERT INTO cp_node VALUES ('397', 'resource', '153'); -INSERT INTO cp_node VALUES ('398', 'file', '153'); -INSERT INTO cp_node VALUES ('399', 'sequencing', '153'); -INSERT INTO cp_node VALUES ('400', 'manifest', '154'); -INSERT INTO cp_node VALUES ('401', 'organization', '154'); -INSERT INTO cp_node VALUES ('402', 'item', '154'); -INSERT INTO cp_node VALUES ('403', 'item', '154'); -INSERT INTO cp_node VALUES ('404', 'item', '154'); -INSERT INTO cp_node VALUES ('405', 'item', '154'); -INSERT INTO cp_node VALUES ('406', 'item', '154'); -INSERT INTO cp_node VALUES ('407', 'item', '154'); -INSERT INTO cp_node VALUES ('408', 'item', '154'); -INSERT INTO cp_node VALUES ('409', 'item', '154'); -INSERT INTO cp_node VALUES ('410', 'item', '154'); -INSERT INTO cp_node VALUES ('411', 'item', '154'); -INSERT INTO cp_node VALUES ('412', 'item', '154'); -INSERT INTO cp_node VALUES ('413', 'item', '154'); -INSERT INTO cp_node VALUES ('414', 'item', '154'); -INSERT INTO cp_node VALUES ('415', 'item', '154'); -INSERT INTO cp_node VALUES ('416', 'item', '154'); -INSERT INTO cp_node VALUES ('417', 'resource', '154'); -INSERT INTO cp_node VALUES ('418', 'file', '154'); -INSERT INTO cp_node VALUES ('419', 'dependency', '154'); -INSERT INTO cp_node VALUES ('420', 'dependency', '154'); -INSERT INTO cp_node VALUES ('421', 'dependency', '154'); -INSERT INTO cp_node VALUES ('422', 'dependency', '154'); -INSERT INTO cp_node VALUES ('423', 'dependency', '154'); -INSERT INTO cp_node VALUES ('424', 'resource', '154'); -INSERT INTO cp_node VALUES ('425', 'file', '154'); -INSERT INTO cp_node VALUES ('426', 'resource', '154'); -INSERT INTO cp_node VALUES ('427', 'file', '154'); -INSERT INTO cp_node VALUES ('428', 'resource', '154'); -INSERT INTO cp_node VALUES ('429', 'file', '154'); -INSERT INTO cp_node VALUES ('430', 'resource', '154'); -INSERT INTO cp_node VALUES ('431', 'file', '154'); -INSERT INTO cp_node VALUES ('432', 'dependency', '154'); -INSERT INTO cp_node VALUES ('433', 'resource', '154'); -INSERT INTO cp_node VALUES ('434', 'file', '154'); -INSERT INTO cp_node VALUES ('435', 'resource', '154'); -INSERT INTO cp_node VALUES ('436', 'file', '154'); -INSERT INTO cp_node VALUES ('437', 'sequencing', '154'); -INSERT INTO cp_node VALUES ('438', 'sequencing', '154'); -INSERT INTO cp_node VALUES ('439', 'rule', '154'); -INSERT INTO cp_node VALUES ('440', 'condition', '154'); -INSERT INTO cp_node VALUES ('441', 'sequencing', '154'); -INSERT INTO cp_node VALUES ('442', 'sequencing', '154'); -INSERT INTO cp_node VALUES ('443', 'manifest', '155'); -INSERT INTO cp_node VALUES ('444', 'organization', '155'); -INSERT INTO cp_node VALUES ('445', 'item', '155'); -INSERT INTO cp_node VALUES ('446', 'item', '155'); -INSERT INTO cp_node VALUES ('447', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('448', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('449', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('450', 'item', '155'); -INSERT INTO cp_node VALUES ('451', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('452', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('453', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('454', 'item', '155'); -INSERT INTO cp_node VALUES ('455', 'item', '155'); -INSERT INTO cp_node VALUES ('456', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('457', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('458', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('459', 'item', '155'); -INSERT INTO cp_node VALUES ('460', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('461', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('462', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('463', 'item', '155'); -INSERT INTO cp_node VALUES ('464', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('465', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('466', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('467', 'item', '155'); -INSERT INTO cp_node VALUES ('468', 'item', '155'); -INSERT INTO cp_node VALUES ('469', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('470', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('471', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('472', 'item', '155'); -INSERT INTO cp_node VALUES ('473', 'item', '155'); -INSERT INTO cp_node VALUES ('474', 'item', '155'); -INSERT INTO cp_node VALUES ('475', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('476', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('477', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('478', 'item', '155'); -INSERT INTO cp_node VALUES ('479', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('480', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('481', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('482', 'item', '155'); -INSERT INTO cp_node VALUES ('483', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('484', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('485', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('486', 'item', '155'); -INSERT INTO cp_node VALUES ('487', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('488', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('489', 'hideLMSUI', '155'); -INSERT INTO cp_node VALUES ('490', 'resource', '155'); -INSERT INTO cp_node VALUES ('491', 'file', '155'); -INSERT INTO cp_node VALUES ('492', 'dependency', '155'); -INSERT INTO cp_node VALUES ('493', 'dependency', '155'); -INSERT INTO cp_node VALUES ('494', 'dependency', '155'); -INSERT INTO cp_node VALUES ('495', 'dependency', '155'); -INSERT INTO cp_node VALUES ('496', 'dependency', '155'); -INSERT INTO cp_node VALUES ('497', 'resource', '155'); -INSERT INTO cp_node VALUES ('498', 'file', '155'); -INSERT INTO cp_node VALUES ('499', 'resource', '155'); -INSERT INTO cp_node VALUES ('500', 'file', '155'); -INSERT INTO cp_node VALUES ('501', 'resource', '155'); -INSERT INTO cp_node VALUES ('502', 'file', '155'); -INSERT INTO cp_node VALUES ('503', 'resource', '155'); -INSERT INTO cp_node VALUES ('504', 'file', '155'); -INSERT INTO cp_node VALUES ('505', 'dependency', '155'); -INSERT INTO cp_node VALUES ('506', 'resource', '155'); -INSERT INTO cp_node VALUES ('507', 'file', '155'); -INSERT INTO cp_node VALUES ('508', 'resource', '155'); -INSERT INTO cp_node VALUES ('509', 'file', '155'); -INSERT INTO cp_node VALUES ('510', 'sequencing', '155'); -INSERT INTO cp_node VALUES ('511', 'sequencing', '155'); -INSERT INTO cp_node VALUES ('512', 'rule', '155'); -INSERT INTO cp_node VALUES ('513', 'condition', '155'); -INSERT INTO cp_node VALUES ('514', 'sequencing', '155'); -INSERT INTO cp_node VALUES ('515', 'manifest', '156'); -INSERT INTO cp_node VALUES ('516', 'organization', '156'); -INSERT INTO cp_node VALUES ('517', 'item', '156'); -INSERT INTO cp_node VALUES ('518', 'item', '156'); -INSERT INTO cp_node VALUES ('519', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('520', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('521', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('522', 'item', '156'); -INSERT INTO cp_node VALUES ('523', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('524', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('525', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('526', 'item', '156'); -INSERT INTO cp_node VALUES ('527', 'item', '156'); -INSERT INTO cp_node VALUES ('528', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('529', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('530', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('531', 'item', '156'); -INSERT INTO cp_node VALUES ('532', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('533', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('534', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('535', 'item', '156'); -INSERT INTO cp_node VALUES ('536', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('537', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('538', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('539', 'item', '156'); -INSERT INTO cp_node VALUES ('540', 'item', '156'); -INSERT INTO cp_node VALUES ('541', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('542', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('543', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('544', 'item', '156'); -INSERT INTO cp_node VALUES ('545', 'item', '156'); -INSERT INTO cp_node VALUES ('546', 'item', '156'); -INSERT INTO cp_node VALUES ('547', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('548', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('549', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('550', 'item', '156'); -INSERT INTO cp_node VALUES ('551', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('552', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('553', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('554', 'item', '156'); -INSERT INTO cp_node VALUES ('555', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('556', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('557', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('558', 'item', '156'); -INSERT INTO cp_node VALUES ('559', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('560', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('561', 'hideLMSUI', '156'); -INSERT INTO cp_node VALUES ('562', 'resource', '156'); -INSERT INTO cp_node VALUES ('563', 'file', '156'); -INSERT INTO cp_node VALUES ('564', 'dependency', '156'); -INSERT INTO cp_node VALUES ('565', 'dependency', '156'); -INSERT INTO cp_node VALUES ('566', 'dependency', '156'); -INSERT INTO cp_node VALUES ('567', 'dependency', '156'); -INSERT INTO cp_node VALUES ('568', 'dependency', '156'); -INSERT INTO cp_node VALUES ('569', 'resource', '156'); -INSERT INTO cp_node VALUES ('570', 'file', '156'); -INSERT INTO cp_node VALUES ('571', 'resource', '156'); -INSERT INTO cp_node VALUES ('572', 'file', '156'); -INSERT INTO cp_node VALUES ('573', 'resource', '156'); -INSERT INTO cp_node VALUES ('574', 'file', '156'); -INSERT INTO cp_node VALUES ('575', 'resource', '156'); -INSERT INTO cp_node VALUES ('576', 'file', '156'); -INSERT INTO cp_node VALUES ('577', 'dependency', '156'); -INSERT INTO cp_node VALUES ('578', 'resource', '156'); -INSERT INTO cp_node VALUES ('579', 'file', '156'); -INSERT INTO cp_node VALUES ('580', 'resource', '156'); -INSERT INTO cp_node VALUES ('581', 'file', '156'); -INSERT INTO cp_node VALUES ('582', 'sequencing', '156'); -INSERT INTO cp_node VALUES ('583', 'manifest', '157'); -INSERT INTO cp_node VALUES ('584', 'organization', '157'); -INSERT INTO cp_node VALUES ('585', 'item', '157'); -INSERT INTO cp_node VALUES ('586', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('587', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('588', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('589', 'item', '157'); -INSERT INTO cp_node VALUES ('590', 'item', '157'); -INSERT INTO cp_node VALUES ('591', 'item', '157'); -INSERT INTO cp_node VALUES ('592', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('593', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('594', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('595', 'item', '157'); -INSERT INTO cp_node VALUES ('596', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('597', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('598', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('599', 'item', '157'); -INSERT INTO cp_node VALUES ('600', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('601', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('602', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('603', 'item', '157'); -INSERT INTO cp_node VALUES ('604', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('605', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('606', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('607', 'item', '157'); -INSERT INTO cp_node VALUES ('608', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('609', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('610', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('611', 'item', '157'); -INSERT INTO cp_node VALUES ('612', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('613', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('614', 'hideLMSUI', '157'); -INSERT INTO cp_node VALUES ('615', 'resource', '157'); -INSERT INTO cp_node VALUES ('616', 'file', '157'); -INSERT INTO cp_node VALUES ('617', 'dependency', '157'); -INSERT INTO cp_node VALUES ('618', 'dependency', '157'); -INSERT INTO cp_node VALUES ('619', 'dependency', '157'); -INSERT INTO cp_node VALUES ('620', 'dependency', '157'); -INSERT INTO cp_node VALUES ('621', 'dependency', '157'); -INSERT INTO cp_node VALUES ('622', 'resource', '157'); -INSERT INTO cp_node VALUES ('623', 'file', '157'); -INSERT INTO cp_node VALUES ('624', 'resource', '157'); -INSERT INTO cp_node VALUES ('625', 'file', '157'); -INSERT INTO cp_node VALUES ('626', 'resource', '157'); -INSERT INTO cp_node VALUES ('627', 'file', '157'); -INSERT INTO cp_node VALUES ('628', 'resource', '157'); -INSERT INTO cp_node VALUES ('629', 'file', '157'); -INSERT INTO cp_node VALUES ('630', 'dependency', '157'); -INSERT INTO cp_node VALUES ('631', 'resource', '157'); -INSERT INTO cp_node VALUES ('632', 'file', '157'); -INSERT INTO cp_node VALUES ('633', 'resource', '157'); -INSERT INTO cp_node VALUES ('634', 'file', '157'); -INSERT INTO cp_node VALUES ('635', 'sequencing', '157'); -INSERT INTO cp_node VALUES ('636', 'sequencing', '157'); -INSERT INTO cp_node VALUES ('637', 'sequencing', '157'); -INSERT INTO cp_node VALUES ('638', 'manifest', '158'); -INSERT INTO cp_node VALUES ('639', 'organization', '158'); -INSERT INTO cp_node VALUES ('640', 'item', '158'); -INSERT INTO cp_node VALUES ('641', 'hideLMSUI', '158'); -INSERT INTO cp_node VALUES ('642', 'hideLMSUI', '158'); -INSERT INTO cp_node VALUES ('643', 'hideLMSUI', '158'); -INSERT INTO cp_node VALUES ('644', 'item', '158'); -INSERT INTO cp_node VALUES ('645', 'hideLMSUI', '158'); -INSERT INTO cp_node VALUES ('646', 'hideLMSUI', '158'); -INSERT INTO cp_node VALUES ('647', 'hideLMSUI', '158'); -INSERT INTO cp_node VALUES ('648', 'item', '158'); -INSERT INTO cp_node VALUES ('649', 'hideLMSUI', '158'); -INSERT INTO cp_node VALUES ('650', 'hideLMSUI', '158'); -INSERT INTO cp_node VALUES ('651', 'hideLMSUI', '158'); -INSERT INTO cp_node VALUES ('652', 'resource', '158'); -INSERT INTO cp_node VALUES ('653', 'file', '158'); -INSERT INTO cp_node VALUES ('654', 'dependency', '158'); -INSERT INTO cp_node VALUES ('655', 'dependency', '158'); -INSERT INTO cp_node VALUES ('656', 'dependency', '158'); -INSERT INTO cp_node VALUES ('657', 'dependency', '158'); -INSERT INTO cp_node VALUES ('658', 'dependency', '158'); -INSERT INTO cp_node VALUES ('659', 'resource', '158'); -INSERT INTO cp_node VALUES ('660', 'file', '158'); -INSERT INTO cp_node VALUES ('661', 'resource', '158'); -INSERT INTO cp_node VALUES ('662', 'file', '158'); -INSERT INTO cp_node VALUES ('663', 'resource', '158'); -INSERT INTO cp_node VALUES ('664', 'file', '158'); -INSERT INTO cp_node VALUES ('665', 'resource', '158'); -INSERT INTO cp_node VALUES ('666', 'file', '158'); -INSERT INTO cp_node VALUES ('667', 'dependency', '158'); -INSERT INTO cp_node VALUES ('668', 'resource', '158'); -INSERT INTO cp_node VALUES ('669', 'file', '158'); -INSERT INTO cp_node VALUES ('670', 'resource', '158'); -INSERT INTO cp_node VALUES ('671', 'file', '158'); -INSERT INTO cp_node VALUES ('672', 'sequencing', '158'); -INSERT INTO cp_node VALUES ('673', 'manifest', '159'); -INSERT INTO cp_node VALUES ('674', 'organization', '159'); -INSERT INTO cp_node VALUES ('675', 'item', '159'); -INSERT INTO cp_node VALUES ('676', 'item', '159'); -INSERT INTO cp_node VALUES ('677', 'item', '159'); -INSERT INTO cp_node VALUES ('678', 'item', '159'); -INSERT INTO cp_node VALUES ('679', 'item', '159'); -INSERT INTO cp_node VALUES ('680', 'item', '159'); -INSERT INTO cp_node VALUES ('681', 'item', '159'); -INSERT INTO cp_node VALUES ('682', 'item', '159'); -INSERT INTO cp_node VALUES ('683', 'item', '159'); -INSERT INTO cp_node VALUES ('684', 'item', '159'); -INSERT INTO cp_node VALUES ('685', 'item', '159'); -INSERT INTO cp_node VALUES ('686', 'item', '159'); -INSERT INTO cp_node VALUES ('687', 'item', '159'); -INSERT INTO cp_node VALUES ('688', 'item', '159'); -INSERT INTO cp_node VALUES ('689', 'resource', '159'); -INSERT INTO cp_node VALUES ('690', 'file', '159'); -INSERT INTO cp_node VALUES ('691', 'dependency', '159'); -INSERT INTO cp_node VALUES ('692', 'dependency', '159'); -INSERT INTO cp_node VALUES ('693', 'dependency', '159'); -INSERT INTO cp_node VALUES ('694', 'dependency', '159'); -INSERT INTO cp_node VALUES ('695', 'dependency', '159'); -INSERT INTO cp_node VALUES ('696', 'resource', '159'); -INSERT INTO cp_node VALUES ('697', 'file', '159'); -INSERT INTO cp_node VALUES ('698', 'dependency', '159'); -INSERT INTO cp_node VALUES ('699', 'dependency', '159'); -INSERT INTO cp_node VALUES ('700', 'dependency', '159'); -INSERT INTO cp_node VALUES ('701', 'dependency', '159'); -INSERT INTO cp_node VALUES ('702', 'dependency', '159'); -INSERT INTO cp_node VALUES ('703', 'resource', '159'); -INSERT INTO cp_node VALUES ('704', 'file', '159'); -INSERT INTO cp_node VALUES ('705', 'resource', '159'); -INSERT INTO cp_node VALUES ('706', 'file', '159'); -INSERT INTO cp_node VALUES ('707', 'resource', '159'); -INSERT INTO cp_node VALUES ('708', 'file', '159'); -INSERT INTO cp_node VALUES ('709', 'resource', '159'); -INSERT INTO cp_node VALUES ('710', 'file', '159'); -INSERT INTO cp_node VALUES ('711', 'dependency', '159'); -INSERT INTO cp_node VALUES ('712', 'resource', '159'); -INSERT INTO cp_node VALUES ('713', 'file', '159'); -INSERT INTO cp_node VALUES ('714', 'resource', '159'); -INSERT INTO cp_node VALUES ('715', 'file', '159'); -INSERT INTO cp_node VALUES ('716', 'sequencing', '159'); -INSERT INTO cp_node VALUES ('717', 'rule', '159'); -INSERT INTO cp_node VALUES ('718', 'condition', '159'); -INSERT INTO cp_node VALUES ('719', 'sequencing', '159'); -INSERT INTO cp_node VALUES ('720', 'sequencing', '159'); -INSERT INTO cp_node VALUES ('721', 'sequencing', '159'); -INSERT INTO cp_node VALUES ('722', 'sequencing', '159'); -INSERT INTO cp_node VALUES ('723', 'sequencing', '159'); -INSERT INTO cp_node VALUES ('724', 'rule', '159'); -INSERT INTO cp_node VALUES ('725', 'condition', '159'); -INSERT INTO cp_node VALUES ('726', 'sequencing', '159'); -INSERT INTO cp_node VALUES ('727', 'sequencing', '159'); -INSERT INTO cp_node VALUES ('728', 'sequencing', '159'); -INSERT INTO cp_node VALUES ('729', 'manifest', '160'); -INSERT INTO cp_node VALUES ('730', 'organization', '160'); -INSERT INTO cp_node VALUES ('731', 'item', '160'); -INSERT INTO cp_node VALUES ('732', 'item', '160'); -INSERT INTO cp_node VALUES ('733', 'item', '160'); -INSERT INTO cp_node VALUES ('734', 'item', '160'); -INSERT INTO cp_node VALUES ('735', 'item', '160'); -INSERT INTO cp_node VALUES ('736', 'item', '160'); -INSERT INTO cp_node VALUES ('737', 'item', '160'); -INSERT INTO cp_node VALUES ('738', 'item', '160'); -INSERT INTO cp_node VALUES ('739', 'item', '160'); -INSERT INTO cp_node VALUES ('740', 'item', '160'); -INSERT INTO cp_node VALUES ('741', 'item', '160'); -INSERT INTO cp_node VALUES ('742', 'item', '160'); -INSERT INTO cp_node VALUES ('743', 'item', '160'); -INSERT INTO cp_node VALUES ('744', 'item', '160'); -INSERT INTO cp_node VALUES ('745', 'item', '160'); -INSERT INTO cp_node VALUES ('746', 'item', '160'); -INSERT INTO cp_node VALUES ('747', 'item', '160'); -INSERT INTO cp_node VALUES ('748', 'item', '160'); -INSERT INTO cp_node VALUES ('749', 'item', '160'); -INSERT INTO cp_node VALUES ('750', 'item', '160'); -INSERT INTO cp_node VALUES ('751', 'item', '160'); -INSERT INTO cp_node VALUES ('752', 'resource', '160'); -INSERT INTO cp_node VALUES ('753', 'file', '160'); -INSERT INTO cp_node VALUES ('754', 'dependency', '160'); -INSERT INTO cp_node VALUES ('755', 'dependency', '160'); -INSERT INTO cp_node VALUES ('756', 'dependency', '160'); -INSERT INTO cp_node VALUES ('757', 'dependency', '160'); -INSERT INTO cp_node VALUES ('758', 'dependency', '160'); -INSERT INTO cp_node VALUES ('759', 'resource', '160'); -INSERT INTO cp_node VALUES ('760', 'file', '160'); -INSERT INTO cp_node VALUES ('761', 'dependency', '160'); -INSERT INTO cp_node VALUES ('762', 'dependency', '160'); -INSERT INTO cp_node VALUES ('763', 'dependency', '160'); -INSERT INTO cp_node VALUES ('764', 'dependency', '160'); -INSERT INTO cp_node VALUES ('765', 'dependency', '160'); -INSERT INTO cp_node VALUES ('766', 'resource', '160'); -INSERT INTO cp_node VALUES ('767', 'file', '160'); -INSERT INTO cp_node VALUES ('768', 'resource', '160'); -INSERT INTO cp_node VALUES ('769', 'file', '160'); -INSERT INTO cp_node VALUES ('770', 'resource', '160'); -INSERT INTO cp_node VALUES ('771', 'file', '160'); -INSERT INTO cp_node VALUES ('772', 'resource', '160'); -INSERT INTO cp_node VALUES ('773', 'file', '160'); -INSERT INTO cp_node VALUES ('774', 'dependency', '160'); -INSERT INTO cp_node VALUES ('775', 'resource', '160'); -INSERT INTO cp_node VALUES ('776', 'file', '160'); -INSERT INTO cp_node VALUES ('777', 'resource', '160'); -INSERT INTO cp_node VALUES ('778', 'file', '160'); -INSERT INTO cp_node VALUES ('779', 'sequencing', '160'); -INSERT INTO cp_node VALUES ('780', 'rule', '160'); -INSERT INTO cp_node VALUES ('781', 'condition', '160'); -INSERT INTO cp_node VALUES ('782', 'sequencing', '160'); -INSERT INTO cp_node VALUES ('783', 'sequencing', '160'); -INSERT INTO cp_node VALUES ('784', 'sequencing', '160'); -INSERT INTO cp_node VALUES ('785', 'rule', '160'); -INSERT INTO cp_node VALUES ('786', 'condition', '160'); -INSERT INTO cp_node VALUES ('787', 'sequencing', '160'); -INSERT INTO cp_node VALUES ('788', 'sequencing', '160'); -INSERT INTO cp_node VALUES ('789', 'rule', '160'); -INSERT INTO cp_node VALUES ('790', 'condition', '160'); -INSERT INTO cp_node VALUES ('791', 'sequencing', '160'); -INSERT INTO cp_node VALUES ('792', 'rule', '160'); -INSERT INTO cp_node VALUES ('793', 'condition', '160'); -INSERT INTO cp_node VALUES ('794', 'sequencing', '160'); -INSERT INTO cp_node VALUES ('795', 'sequencing', '160'); -INSERT INTO cp_node VALUES ('796', 'sequencing', '160'); -INSERT INTO cp_node VALUES ('797', 'manifest', '161'); -INSERT INTO cp_node VALUES ('798', 'organization', '161'); -INSERT INTO cp_node VALUES ('799', 'item', '161'); -INSERT INTO cp_node VALUES ('800', 'item', '161'); -INSERT INTO cp_node VALUES ('801', 'item', '161'); -INSERT INTO cp_node VALUES ('802', 'item', '161'); -INSERT INTO cp_node VALUES ('803', 'item', '161'); -INSERT INTO cp_node VALUES ('804', 'item', '161'); -INSERT INTO cp_node VALUES ('805', 'item', '161'); -INSERT INTO cp_node VALUES ('806', 'item', '161'); -INSERT INTO cp_node VALUES ('807', 'item', '161'); -INSERT INTO cp_node VALUES ('808', 'item', '161'); -INSERT INTO cp_node VALUES ('809', 'item', '161'); -INSERT INTO cp_node VALUES ('810', 'item', '161'); -INSERT INTO cp_node VALUES ('811', 'item', '161'); -INSERT INTO cp_node VALUES ('812', 'item', '161'); -INSERT INTO cp_node VALUES ('813', 'item', '161'); -INSERT INTO cp_node VALUES ('814', 'item', '161'); -INSERT INTO cp_node VALUES ('815', 'item', '161'); -INSERT INTO cp_node VALUES ('816', 'item', '161'); -INSERT INTO cp_node VALUES ('817', 'resource', '161'); -INSERT INTO cp_node VALUES ('818', 'file', '161'); -INSERT INTO cp_node VALUES ('819', 'dependency', '161'); -INSERT INTO cp_node VALUES ('820', 'dependency', '161'); -INSERT INTO cp_node VALUES ('821', 'dependency', '161'); -INSERT INTO cp_node VALUES ('822', 'dependency', '161'); -INSERT INTO cp_node VALUES ('823', 'dependency', '161'); -INSERT INTO cp_node VALUES ('824', 'resource', '161'); -INSERT INTO cp_node VALUES ('825', 'file', '161'); -INSERT INTO cp_node VALUES ('826', 'resource', '161'); -INSERT INTO cp_node VALUES ('827', 'file', '161'); -INSERT INTO cp_node VALUES ('828', 'resource', '161'); -INSERT INTO cp_node VALUES ('829', 'file', '161'); -INSERT INTO cp_node VALUES ('830', 'resource', '161'); -INSERT INTO cp_node VALUES ('831', 'file', '161'); -INSERT INTO cp_node VALUES ('832', 'dependency', '161'); -INSERT INTO cp_node VALUES ('833', 'resource', '161'); -INSERT INTO cp_node VALUES ('834', 'file', '161'); -INSERT INTO cp_node VALUES ('835', 'resource', '161'); -INSERT INTO cp_node VALUES ('836', 'file', '161'); -INSERT INTO cp_node VALUES ('837', 'sequencing', '161'); -INSERT INTO cp_node VALUES ('838', 'sequencing', '161'); -INSERT INTO cp_node VALUES ('839', 'sequencing', '161'); -INSERT INTO cp_node VALUES ('840', 'rule', '161'); -INSERT INTO cp_node VALUES ('841', 'condition', '161'); -INSERT INTO cp_node VALUES ('842', 'sequencing', '161'); -INSERT INTO cp_node VALUES ('843', 'sequencing', '161'); -INSERT INTO cp_node VALUES ('844', 'rule', '161'); -INSERT INTO cp_node VALUES ('845', 'condition', '161'); -INSERT INTO cp_node VALUES ('846', 'sequencing', '161'); -INSERT INTO cp_node VALUES ('847', 'sequencing', '161'); -INSERT INTO cp_node VALUES ('848', 'sequencing', '161'); -INSERT INTO cp_node VALUES ('849', 'sequencing', '161'); -INSERT INTO cp_node VALUES ('850', 'rule', '161'); -INSERT INTO cp_node VALUES ('851', 'condition', '161'); -INSERT INTO cp_node VALUES ('852', 'sequencing', '161'); -INSERT INTO cp_node VALUES ('853', 'sequencing', '161'); -INSERT INTO cp_node VALUES ('854', 'manifest', '162'); -INSERT INTO cp_node VALUES ('855', 'organization', '162'); -INSERT INTO cp_node VALUES ('856', 'item', '162'); -INSERT INTO cp_node VALUES ('857', 'item', '162'); -INSERT INTO cp_node VALUES ('858', 'item', '162'); -INSERT INTO cp_node VALUES ('859', 'item', '162'); -INSERT INTO cp_node VALUES ('860', 'item', '162'); -INSERT INTO cp_node VALUES ('861', 'item', '162'); -INSERT INTO cp_node VALUES ('862', 'item', '162'); -INSERT INTO cp_node VALUES ('863', 'item', '162'); -INSERT INTO cp_node VALUES ('864', 'item', '162'); -INSERT INTO cp_node VALUES ('865', 'item', '162'); -INSERT INTO cp_node VALUES ('866', 'item', '162'); -INSERT INTO cp_node VALUES ('867', 'item', '162'); -INSERT INTO cp_node VALUES ('868', 'item', '162'); -INSERT INTO cp_node VALUES ('869', 'item', '162'); -INSERT INTO cp_node VALUES ('870', 'item', '162'); -INSERT INTO cp_node VALUES ('871', 'item', '162'); -INSERT INTO cp_node VALUES ('872', 'item', '162'); -INSERT INTO cp_node VALUES ('873', 'item', '162'); -INSERT INTO cp_node VALUES ('874', 'resource', '162'); -INSERT INTO cp_node VALUES ('875', 'file', '162'); -INSERT INTO cp_node VALUES ('876', 'dependency', '162'); -INSERT INTO cp_node VALUES ('877', 'dependency', '162'); -INSERT INTO cp_node VALUES ('878', 'dependency', '162'); -INSERT INTO cp_node VALUES ('879', 'dependency', '162'); -INSERT INTO cp_node VALUES ('880', 'dependency', '162'); -INSERT INTO cp_node VALUES ('881', 'resource', '162'); -INSERT INTO cp_node VALUES ('882', 'file', '162'); -INSERT INTO cp_node VALUES ('883', 'resource', '162'); -INSERT INTO cp_node VALUES ('884', 'file', '162'); -INSERT INTO cp_node VALUES ('885', 'resource', '162'); -INSERT INTO cp_node VALUES ('886', 'file', '162'); -INSERT INTO cp_node VALUES ('887', 'resource', '162'); -INSERT INTO cp_node VALUES ('888', 'file', '162'); -INSERT INTO cp_node VALUES ('889', 'dependency', '162'); -INSERT INTO cp_node VALUES ('890', 'resource', '162'); -INSERT INTO cp_node VALUES ('891', 'file', '162'); -INSERT INTO cp_node VALUES ('892', 'resource', '162'); -INSERT INTO cp_node VALUES ('893', 'file', '162'); -INSERT INTO cp_node VALUES ('894', 'sequencing', '162'); -INSERT INTO cp_node VALUES ('895', 'sequencing', '162'); -INSERT INTO cp_node VALUES ('896', 'sequencing', '162'); -INSERT INTO cp_node VALUES ('897', 'sequencing', '162'); -INSERT INTO cp_node VALUES ('898', 'sequencing', '162'); -INSERT INTO cp_node VALUES ('899', 'sequencing', '162'); -INSERT INTO cp_node VALUES ('900', 'sequencing', '162'); -INSERT INTO cp_node VALUES ('901', 'sequencing', '162'); -INSERT INTO cp_node VALUES ('902', 'manifest', '163'); -INSERT INTO cp_node VALUES ('903', 'organization', '163'); -INSERT INTO cp_node VALUES ('904', 'item', '163'); -INSERT INTO cp_node VALUES ('905', 'item', '163'); -INSERT INTO cp_node VALUES ('906', 'item', '163'); -INSERT INTO cp_node VALUES ('907', 'item', '163'); -INSERT INTO cp_node VALUES ('908', 'item', '163'); -INSERT INTO cp_node VALUES ('909', 'item', '163'); -INSERT INTO cp_node VALUES ('910', 'resource', '163'); -INSERT INTO cp_node VALUES ('911', 'file', '163'); -INSERT INTO cp_node VALUES ('912', 'dependency', '163'); -INSERT INTO cp_node VALUES ('913', 'dependency', '163'); -INSERT INTO cp_node VALUES ('914', 'dependency', '163'); -INSERT INTO cp_node VALUES ('915', 'dependency', '163'); -INSERT INTO cp_node VALUES ('916', 'dependency', '163'); -INSERT INTO cp_node VALUES ('917', 'resource', '163'); -INSERT INTO cp_node VALUES ('918', 'file', '163'); -INSERT INTO cp_node VALUES ('919', 'resource', '163'); -INSERT INTO cp_node VALUES ('920', 'file', '163'); -INSERT INTO cp_node VALUES ('921', 'resource', '163'); -INSERT INTO cp_node VALUES ('922', 'file', '163'); -INSERT INTO cp_node VALUES ('923', 'resource', '163'); -INSERT INTO cp_node VALUES ('924', 'file', '163'); -INSERT INTO cp_node VALUES ('925', 'dependency', '163'); -INSERT INTO cp_node VALUES ('926', 'resource', '163'); -INSERT INTO cp_node VALUES ('927', 'file', '163'); -INSERT INTO cp_node VALUES ('928', 'resource', '163'); -INSERT INTO cp_node VALUES ('929', 'file', '163'); -INSERT INTO cp_node VALUES ('930', 'sequencing', '163'); -INSERT INTO cp_node VALUES ('931', 'rule', '163'); -INSERT INTO cp_node VALUES ('932', 'condition', '163'); -INSERT INTO cp_node VALUES ('933', 'sequencing', '163'); -INSERT INTO cp_node VALUES ('934', 'sequencing', '163'); -INSERT INTO cp_node VALUES ('935', 'manifest', '164'); -INSERT INTO cp_node VALUES ('936', 'organization', '164'); -INSERT INTO cp_node VALUES ('937', 'item', '164'); -INSERT INTO cp_node VALUES ('938', 'item', '164'); -INSERT INTO cp_node VALUES ('939', 'item', '164'); -INSERT INTO cp_node VALUES ('940', 'item', '164'); -INSERT INTO cp_node VALUES ('941', 'resource', '164'); -INSERT INTO cp_node VALUES ('942', 'file', '164'); -INSERT INTO cp_node VALUES ('943', 'dependency', '164'); -INSERT INTO cp_node VALUES ('944', 'dependency', '164'); -INSERT INTO cp_node VALUES ('945', 'dependency', '164'); -INSERT INTO cp_node VALUES ('946', 'dependency', '164'); -INSERT INTO cp_node VALUES ('947', 'dependency', '164'); -INSERT INTO cp_node VALUES ('948', 'resource', '164'); -INSERT INTO cp_node VALUES ('949', 'file', '164'); -INSERT INTO cp_node VALUES ('950', 'resource', '164'); -INSERT INTO cp_node VALUES ('951', 'file', '164'); -INSERT INTO cp_node VALUES ('952', 'resource', '164'); -INSERT INTO cp_node VALUES ('953', 'file', '164'); -INSERT INTO cp_node VALUES ('954', 'resource', '164'); -INSERT INTO cp_node VALUES ('955', 'file', '164'); -INSERT INTO cp_node VALUES ('956', 'dependency', '164'); -INSERT INTO cp_node VALUES ('957', 'resource', '164'); -INSERT INTO cp_node VALUES ('958', 'file', '164'); -INSERT INTO cp_node VALUES ('959', 'resource', '164'); -INSERT INTO cp_node VALUES ('960', 'file', '164'); -INSERT INTO cp_node VALUES ('961', 'sequencing', '164'); -INSERT INTO cp_node VALUES ('962', 'rule', '164'); -INSERT INTO cp_node VALUES ('963', 'condition', '164'); -INSERT INTO cp_node VALUES ('964', 'sequencing', '164'); -INSERT INTO cp_node VALUES ('965', 'manifest', '165'); -INSERT INTO cp_node VALUES ('966', 'organization', '165'); -INSERT INTO cp_node VALUES ('967', 'item', '165'); -INSERT INTO cp_node VALUES ('968', 'item', '165'); -INSERT INTO cp_node VALUES ('969', 'resource', '165'); -INSERT INTO cp_node VALUES ('970', 'file', '165'); -INSERT INTO cp_node VALUES ('971', 'dependency', '165'); -INSERT INTO cp_node VALUES ('972', 'dependency', '165'); -INSERT INTO cp_node VALUES ('973', 'dependency', '165'); -INSERT INTO cp_node VALUES ('974', 'dependency', '165'); -INSERT INTO cp_node VALUES ('975', 'dependency', '165'); -INSERT INTO cp_node VALUES ('976', 'resource', '165'); -INSERT INTO cp_node VALUES ('977', 'file', '165'); -INSERT INTO cp_node VALUES ('978', 'resource', '165'); -INSERT INTO cp_node VALUES ('979', 'file', '165'); -INSERT INTO cp_node VALUES ('980', 'resource', '165'); -INSERT INTO cp_node VALUES ('981', 'file', '165'); -INSERT INTO cp_node VALUES ('982', 'resource', '165'); -INSERT INTO cp_node VALUES ('983', 'file', '165'); -INSERT INTO cp_node VALUES ('984', 'dependency', '165'); -INSERT INTO cp_node VALUES ('985', 'resource', '165'); -INSERT INTO cp_node VALUES ('986', 'file', '165'); -INSERT INTO cp_node VALUES ('987', 'resource', '165'); -INSERT INTO cp_node VALUES ('988', 'file', '165'); -INSERT INTO cp_node VALUES ('989', 'sequencing', '165'); -INSERT INTO cp_node VALUES ('990', 'rule', '165'); -INSERT INTO cp_node VALUES ('991', 'condition', '165'); -INSERT INTO cp_node VALUES ('992', 'sequencing', '165'); -INSERT INTO cp_node VALUES ('993', 'sequencing', '165'); -INSERT INTO cp_node VALUES ('994', 'manifest', '166'); -INSERT INTO cp_node VALUES ('995', 'organization', '166'); -INSERT INTO cp_node VALUES ('996', 'item', '166'); -INSERT INTO cp_node VALUES ('997', 'hideLMSUI', '166'); -INSERT INTO cp_node VALUES ('998', 'item', '166'); -INSERT INTO cp_node VALUES ('999', 'hideLMSUI', '166'); -INSERT INTO cp_node VALUES ('1000', 'item', '166'); -INSERT INTO cp_node VALUES ('1001', 'hideLMSUI', '166'); -INSERT INTO cp_node VALUES ('1002', 'item', '166'); -INSERT INTO cp_node VALUES ('1003', 'hideLMSUI', '166'); -INSERT INTO cp_node VALUES ('1004', 'item', '166'); -INSERT INTO cp_node VALUES ('1005', 'hideLMSUI', '166'); -INSERT INTO cp_node VALUES ('1006', 'item', '166'); -INSERT INTO cp_node VALUES ('1007', 'hideLMSUI', '166'); -INSERT INTO cp_node VALUES ('1008', 'item', '166'); -INSERT INTO cp_node VALUES ('1009', 'hideLMSUI', '166'); -INSERT INTO cp_node VALUES ('1010', 'item', '166'); -INSERT INTO cp_node VALUES ('1011', 'hideLMSUI', '166'); -INSERT INTO cp_node VALUES ('1012', 'item', '166'); -INSERT INTO cp_node VALUES ('1013', 'hideLMSUI', '166'); -INSERT INTO cp_node VALUES ('1014', 'resource', '166'); -INSERT INTO cp_node VALUES ('1015', 'file', '166'); -INSERT INTO cp_node VALUES ('1016', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1017', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1018', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1019', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1020', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1021', 'resource', '166'); -INSERT INTO cp_node VALUES ('1022', 'file', '166'); -INSERT INTO cp_node VALUES ('1023', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1024', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1025', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1026', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1027', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1028', 'resource', '166'); -INSERT INTO cp_node VALUES ('1029', 'file', '166'); -INSERT INTO cp_node VALUES ('1030', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1031', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1032', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1033', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1034', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1035', 'resource', '166'); -INSERT INTO cp_node VALUES ('1036', 'file', '166'); -INSERT INTO cp_node VALUES ('1037', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1038', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1039', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1040', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1041', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1042', 'resource', '166'); -INSERT INTO cp_node VALUES ('1043', 'file', '166'); -INSERT INTO cp_node VALUES ('1044', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1045', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1046', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1047', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1048', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1049', 'resource', '166'); -INSERT INTO cp_node VALUES ('1050', 'file', '166'); -INSERT INTO cp_node VALUES ('1051', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1052', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1053', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1054', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1055', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1056', 'resource', '166'); -INSERT INTO cp_node VALUES ('1057', 'file', '166'); -INSERT INTO cp_node VALUES ('1058', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1059', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1060', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1061', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1062', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1063', 'resource', '166'); -INSERT INTO cp_node VALUES ('1064', 'file', '166'); -INSERT INTO cp_node VALUES ('1065', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1066', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1067', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1068', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1069', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1070', 'resource', '166'); -INSERT INTO cp_node VALUES ('1071', 'file', '166'); -INSERT INTO cp_node VALUES ('1072', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1073', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1074', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1075', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1076', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1077', 'resource', '166'); -INSERT INTO cp_node VALUES ('1078', 'file', '166'); -INSERT INTO cp_node VALUES ('1079', 'resource', '166'); -INSERT INTO cp_node VALUES ('1080', 'file', '166'); -INSERT INTO cp_node VALUES ('1081', 'resource', '166'); -INSERT INTO cp_node VALUES ('1082', 'file', '166'); -INSERT INTO cp_node VALUES ('1083', 'resource', '166'); -INSERT INTO cp_node VALUES ('1084', 'file', '166'); -INSERT INTO cp_node VALUES ('1085', 'dependency', '166'); -INSERT INTO cp_node VALUES ('1086', 'resource', '166'); -INSERT INTO cp_node VALUES ('1087', 'file', '166'); -INSERT INTO cp_node VALUES ('1088', 'resource', '166'); -INSERT INTO cp_node VALUES ('1089', 'file', '166'); -INSERT INTO cp_node VALUES ('1090', 'sequencing', '166'); -INSERT INTO cp_node VALUES ('1091', 'objective', '166'); -INSERT INTO cp_node VALUES ('1092', 'sequencing', '166'); -INSERT INTO cp_node VALUES ('1093', 'objective', '166'); -INSERT INTO cp_node VALUES ('1094', 'sequencing', '166'); -INSERT INTO cp_node VALUES ('1095', 'objective', '166'); -INSERT INTO cp_node VALUES ('1096', 'sequencing', '166'); -INSERT INTO cp_node VALUES ('1097', 'objective', '166'); -INSERT INTO cp_node VALUES ('1098', 'sequencing', '166'); -INSERT INTO cp_node VALUES ('1099', 'objective', '166'); -INSERT INTO cp_node VALUES ('1100', 'sequencing', '166'); -INSERT INTO cp_node VALUES ('1101', 'objective', '166'); -INSERT INTO cp_node VALUES ('1102', 'manifest', '167'); -INSERT INTO cp_node VALUES ('1103', 'organization', '167'); -INSERT INTO cp_node VALUES ('1104', 'item', '167'); -INSERT INTO cp_node VALUES ('1105', 'hideLMSUI', '167'); -INSERT INTO cp_node VALUES ('1106', 'item', '167'); -INSERT INTO cp_node VALUES ('1107', 'hideLMSUI', '167'); -INSERT INTO cp_node VALUES ('1108', 'item', '167'); -INSERT INTO cp_node VALUES ('1109', 'hideLMSUI', '167'); -INSERT INTO cp_node VALUES ('1110', 'item', '167'); -INSERT INTO cp_node VALUES ('1111', 'hideLMSUI', '167'); -INSERT INTO cp_node VALUES ('1112', 'resource', '167'); -INSERT INTO cp_node VALUES ('1113', 'file', '167'); -INSERT INTO cp_node VALUES ('1114', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1115', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1116', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1117', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1118', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1119', 'resource', '167'); -INSERT INTO cp_node VALUES ('1120', 'file', '167'); -INSERT INTO cp_node VALUES ('1121', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1122', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1123', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1124', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1125', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1126', 'resource', '167'); -INSERT INTO cp_node VALUES ('1127', 'file', '167'); -INSERT INTO cp_node VALUES ('1128', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1129', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1130', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1131', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1132', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1133', 'resource', '167'); -INSERT INTO cp_node VALUES ('1134', 'file', '167'); -INSERT INTO cp_node VALUES ('1135', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1136', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1137', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1138', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1139', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1140', 'resource', '167'); -INSERT INTO cp_node VALUES ('1141', 'file', '167'); -INSERT INTO cp_node VALUES ('1142', 'resource', '167'); -INSERT INTO cp_node VALUES ('1143', 'file', '167'); -INSERT INTO cp_node VALUES ('1144', 'resource', '167'); -INSERT INTO cp_node VALUES ('1145', 'file', '167'); -INSERT INTO cp_node VALUES ('1146', 'resource', '167'); -INSERT INTO cp_node VALUES ('1147', 'file', '167'); -INSERT INTO cp_node VALUES ('1148', 'dependency', '167'); -INSERT INTO cp_node VALUES ('1149', 'resource', '167'); -INSERT INTO cp_node VALUES ('1150', 'file', '167'); -INSERT INTO cp_node VALUES ('1151', 'resource', '167'); -INSERT INTO cp_node VALUES ('1152', 'file', '167'); -INSERT INTO cp_node VALUES ('1153', 'manifest', '168'); -INSERT INTO cp_node VALUES ('1154', 'organization', '168'); -INSERT INTO cp_node VALUES ('1155', 'item', '168'); -INSERT INTO cp_node VALUES ('1156', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1157', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1158', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1159', 'item', '168'); -INSERT INTO cp_node VALUES ('1160', 'item', '168'); -INSERT INTO cp_node VALUES ('1161', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1162', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1163', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1164', 'item', '168'); -INSERT INTO cp_node VALUES ('1165', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1166', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1167', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1168', 'item', '168'); -INSERT INTO cp_node VALUES ('1169', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1170', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1171', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1172', 'item', '168'); -INSERT INTO cp_node VALUES ('1173', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1174', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1175', 'hideLMSUI', '168'); -INSERT INTO cp_node VALUES ('1176', 'resource', '168'); -INSERT INTO cp_node VALUES ('1177', 'file', '168'); -INSERT INTO cp_node VALUES ('1178', 'dependency', '168'); -INSERT INTO cp_node VALUES ('1179', 'dependency', '168'); -INSERT INTO cp_node VALUES ('1180', 'dependency', '168'); -INSERT INTO cp_node VALUES ('1181', 'dependency', '168'); -INSERT INTO cp_node VALUES ('1182', 'dependency', '168'); -INSERT INTO cp_node VALUES ('1183', 'resource', '168'); -INSERT INTO cp_node VALUES ('1184', 'file', '168'); -INSERT INTO cp_node VALUES ('1185', 'resource', '168'); -INSERT INTO cp_node VALUES ('1186', 'file', '168'); -INSERT INTO cp_node VALUES ('1187', 'resource', '168'); -INSERT INTO cp_node VALUES ('1188', 'file', '168'); -INSERT INTO cp_node VALUES ('1189', 'resource', '168'); -INSERT INTO cp_node VALUES ('1190', 'file', '168'); -INSERT INTO cp_node VALUES ('1191', 'dependency', '168'); -INSERT INTO cp_node VALUES ('1192', 'resource', '168'); -INSERT INTO cp_node VALUES ('1193', 'file', '168'); -INSERT INTO cp_node VALUES ('1194', 'resource', '168'); -INSERT INTO cp_node VALUES ('1195', 'file', '168'); -INSERT INTO cp_node VALUES ('1196', 'sequencing', '168'); -INSERT INTO cp_node VALUES ('1197', 'sequencing', '168'); -INSERT INTO cp_node VALUES ('1198', 'rule', '168'); -INSERT INTO cp_node VALUES ('1199', 'condition', '168'); -INSERT INTO cp_node VALUES ('1200', 'sequencing', '168'); -INSERT INTO cp_node VALUES ('1201', 'manifest', '169'); -INSERT INTO cp_node VALUES ('1202', 'organization', '169'); -INSERT INTO cp_node VALUES ('1203', 'item', '169'); -INSERT INTO cp_node VALUES ('1204', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1205', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1206', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1207', 'item', '169'); -INSERT INTO cp_node VALUES ('1208', 'item', '169'); -INSERT INTO cp_node VALUES ('1209', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1210', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1211', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1212', 'item', '169'); -INSERT INTO cp_node VALUES ('1213', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1214', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1215', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1216', 'item', '169'); -INSERT INTO cp_node VALUES ('1217', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1218', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1219', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1220', 'item', '169'); -INSERT INTO cp_node VALUES ('1221', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1222', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1223', 'hideLMSUI', '169'); -INSERT INTO cp_node VALUES ('1224', 'resource', '169'); -INSERT INTO cp_node VALUES ('1225', 'file', '169'); -INSERT INTO cp_node VALUES ('1226', 'dependency', '169'); -INSERT INTO cp_node VALUES ('1227', 'dependency', '169'); -INSERT INTO cp_node VALUES ('1228', 'dependency', '169'); -INSERT INTO cp_node VALUES ('1229', 'dependency', '169'); -INSERT INTO cp_node VALUES ('1230', 'dependency', '169'); -INSERT INTO cp_node VALUES ('1231', 'resource', '169'); -INSERT INTO cp_node VALUES ('1232', 'file', '169'); -INSERT INTO cp_node VALUES ('1233', 'resource', '169'); -INSERT INTO cp_node VALUES ('1234', 'file', '169'); -INSERT INTO cp_node VALUES ('1235', 'resource', '169'); -INSERT INTO cp_node VALUES ('1236', 'file', '169'); -INSERT INTO cp_node VALUES ('1237', 'resource', '169'); -INSERT INTO cp_node VALUES ('1238', 'file', '169'); -INSERT INTO cp_node VALUES ('1239', 'dependency', '169'); -INSERT INTO cp_node VALUES ('1240', 'resource', '169'); -INSERT INTO cp_node VALUES ('1241', 'file', '169'); -INSERT INTO cp_node VALUES ('1242', 'resource', '169'); -INSERT INTO cp_node VALUES ('1243', 'file', '169'); -INSERT INTO cp_node VALUES ('1244', 'sequencing', '169'); -INSERT INTO cp_node VALUES ('1245', 'sequencing', '169'); -INSERT INTO cp_node VALUES ('1246', 'sequencing', '169'); -INSERT INTO cp_node VALUES ('1247', 'sequencing', '169'); -INSERT INTO cp_node VALUES ('1248', 'rule', '169'); -INSERT INTO cp_node VALUES ('1249', 'condition', '169'); -INSERT INTO cp_node VALUES ('1250', 'sequencing', '169'); -INSERT INTO cp_node VALUES ('1251', 'manifest', '170'); -INSERT INTO cp_node VALUES ('1252', 'organization', '170'); -INSERT INTO cp_node VALUES ('1253', 'item', '170'); -INSERT INTO cp_node VALUES ('1254', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1255', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1256', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1257', 'item', '170'); -INSERT INTO cp_node VALUES ('1258', 'item', '170'); -INSERT INTO cp_node VALUES ('1259', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1260', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1261', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1262', 'item', '170'); -INSERT INTO cp_node VALUES ('1263', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1264', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1265', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1266', 'item', '170'); -INSERT INTO cp_node VALUES ('1267', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1268', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1269', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1270', 'item', '170'); -INSERT INTO cp_node VALUES ('1271', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1272', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1273', 'hideLMSUI', '170'); -INSERT INTO cp_node VALUES ('1274', 'resource', '170'); -INSERT INTO cp_node VALUES ('1275', 'file', '170'); -INSERT INTO cp_node VALUES ('1276', 'dependency', '170'); -INSERT INTO cp_node VALUES ('1277', 'dependency', '170'); -INSERT INTO cp_node VALUES ('1278', 'dependency', '170'); -INSERT INTO cp_node VALUES ('1279', 'dependency', '170'); -INSERT INTO cp_node VALUES ('1280', 'dependency', '170'); -INSERT INTO cp_node VALUES ('1281', 'resource', '170'); -INSERT INTO cp_node VALUES ('1282', 'file', '170'); -INSERT INTO cp_node VALUES ('1283', 'resource', '170'); -INSERT INTO cp_node VALUES ('1284', 'file', '170'); -INSERT INTO cp_node VALUES ('1285', 'resource', '170'); -INSERT INTO cp_node VALUES ('1286', 'file', '170'); -INSERT INTO cp_node VALUES ('1287', 'resource', '170'); -INSERT INTO cp_node VALUES ('1288', 'file', '170'); -INSERT INTO cp_node VALUES ('1289', 'dependency', '170'); -INSERT INTO cp_node VALUES ('1290', 'resource', '170'); -INSERT INTO cp_node VALUES ('1291', 'file', '170'); -INSERT INTO cp_node VALUES ('1292', 'resource', '170'); -INSERT INTO cp_node VALUES ('1293', 'file', '170'); -INSERT INTO cp_node VALUES ('1294', 'sequencing', '170'); -INSERT INTO cp_node VALUES ('1295', 'sequencing', '170'); -INSERT INTO cp_node VALUES ('1296', 'sequencing', '170'); -INSERT INTO cp_node VALUES ('1297', 'sequencing', '170'); -INSERT INTO cp_node VALUES ('1298', 'rule', '170'); -INSERT INTO cp_node VALUES ('1299', 'condition', '170'); -INSERT INTO cp_node VALUES ('1300', 'sequencing', '170'); -INSERT INTO cp_node VALUES ('1301', 'manifest', '171'); -INSERT INTO cp_node VALUES ('1302', 'organization', '171'); -INSERT INTO cp_node VALUES ('1303', 'item', '171'); -INSERT INTO cp_node VALUES ('1304', 'item', '171'); -INSERT INTO cp_node VALUES ('1305', 'item', '171'); -INSERT INTO cp_node VALUES ('1306', 'item', '171'); -INSERT INTO cp_node VALUES ('1307', 'item', '171'); -INSERT INTO cp_node VALUES ('1308', 'item', '171'); -INSERT INTO cp_node VALUES ('1309', 'resource', '171'); -INSERT INTO cp_node VALUES ('1310', 'file', '171'); -INSERT INTO cp_node VALUES ('1311', 'dependency', '171'); -INSERT INTO cp_node VALUES ('1312', 'dependency', '171'); -INSERT INTO cp_node VALUES ('1313', 'dependency', '171'); -INSERT INTO cp_node VALUES ('1314', 'dependency', '171'); -INSERT INTO cp_node VALUES ('1315', 'dependency', '171'); -INSERT INTO cp_node VALUES ('1316', 'resource', '171'); -INSERT INTO cp_node VALUES ('1317', 'file', '171'); -INSERT INTO cp_node VALUES ('1318', 'resource', '171'); -INSERT INTO cp_node VALUES ('1319', 'file', '171'); -INSERT INTO cp_node VALUES ('1320', 'resource', '171'); -INSERT INTO cp_node VALUES ('1321', 'file', '171'); -INSERT INTO cp_node VALUES ('1322', 'resource', '171'); -INSERT INTO cp_node VALUES ('1323', 'file', '171'); -INSERT INTO cp_node VALUES ('1324', 'dependency', '171'); -INSERT INTO cp_node VALUES ('1325', 'resource', '171'); -INSERT INTO cp_node VALUES ('1326', 'file', '171'); -INSERT INTO cp_node VALUES ('1327', 'resource', '171'); -INSERT INTO cp_node VALUES ('1328', 'file', '171'); -INSERT INTO cp_node VALUES ('1329', 'sequencing', '171'); -INSERT INTO cp_node VALUES ('1330', 'sequencing', '171'); -INSERT INTO cp_node VALUES ('1331', 'sequencing', '171'); -INSERT INTO cp_node VALUES ('1332', 'rule', '171'); -INSERT INTO cp_node VALUES ('1333', 'condition', '171'); -INSERT INTO cp_node VALUES ('1334', 'sequencing', '171'); -INSERT INTO cp_node VALUES ('1335', 'manifest', '172'); -INSERT INTO cp_node VALUES ('1336', 'organization', '172'); -INSERT INTO cp_node VALUES ('1337', 'item', '172'); -INSERT INTO cp_node VALUES ('1338', 'item', '172'); -INSERT INTO cp_node VALUES ('1339', 'item', '172'); -INSERT INTO cp_node VALUES ('1340', 'item', '172'); -INSERT INTO cp_node VALUES ('1341', 'item', '172'); -INSERT INTO cp_node VALUES ('1342', 'item', '172'); -INSERT INTO cp_node VALUES ('1343', 'resource', '172'); -INSERT INTO cp_node VALUES ('1344', 'file', '172'); -INSERT INTO cp_node VALUES ('1345', 'dependency', '172'); -INSERT INTO cp_node VALUES ('1346', 'dependency', '172'); -INSERT INTO cp_node VALUES ('1347', 'dependency', '172'); -INSERT INTO cp_node VALUES ('1348', 'dependency', '172'); -INSERT INTO cp_node VALUES ('1349', 'dependency', '172'); -INSERT INTO cp_node VALUES ('1350', 'resource', '172'); -INSERT INTO cp_node VALUES ('1351', 'file', '172'); -INSERT INTO cp_node VALUES ('1352', 'resource', '172'); -INSERT INTO cp_node VALUES ('1353', 'file', '172'); -INSERT INTO cp_node VALUES ('1354', 'resource', '172'); -INSERT INTO cp_node VALUES ('1355', 'file', '172'); -INSERT INTO cp_node VALUES ('1356', 'resource', '172'); -INSERT INTO cp_node VALUES ('1357', 'file', '172'); -INSERT INTO cp_node VALUES ('1358', 'dependency', '172'); -INSERT INTO cp_node VALUES ('1359', 'resource', '172'); -INSERT INTO cp_node VALUES ('1360', 'file', '172'); -INSERT INTO cp_node VALUES ('1361', 'resource', '172'); -INSERT INTO cp_node VALUES ('1362', 'file', '172'); -INSERT INTO cp_node VALUES ('1363', 'sequencing', '172'); -INSERT INTO cp_node VALUES ('1364', 'sequencing', '172'); -INSERT INTO cp_node VALUES ('1365', 'rule', '172'); -INSERT INTO cp_node VALUES ('1366', 'condition', '172'); -INSERT INTO cp_node VALUES ('1367', 'rule', '172'); -INSERT INTO cp_node VALUES ('1368', 'condition', '172'); -INSERT INTO cp_node VALUES ('1369', 'objective', '172'); -INSERT INTO cp_node VALUES ('1370', 'sequencing', '172'); -INSERT INTO cp_node VALUES ('1371', 'manifest', '173'); -INSERT INTO cp_node VALUES ('1372', 'organization', '173'); -INSERT INTO cp_node VALUES ('1373', 'item', '173'); -INSERT INTO cp_node VALUES ('1374', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1375', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1376', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1377', 'item', '173'); -INSERT INTO cp_node VALUES ('1378', 'item', '173'); -INSERT INTO cp_node VALUES ('1379', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1380', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1381', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1382', 'item', '173'); -INSERT INTO cp_node VALUES ('1383', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1384', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1385', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1386', 'item', '173'); -INSERT INTO cp_node VALUES ('1387', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1388', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1389', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1390', 'item', '173'); -INSERT INTO cp_node VALUES ('1391', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1392', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1393', 'hideLMSUI', '173'); -INSERT INTO cp_node VALUES ('1394', 'resource', '173'); -INSERT INTO cp_node VALUES ('1395', 'file', '173'); -INSERT INTO cp_node VALUES ('1396', 'dependency', '173'); -INSERT INTO cp_node VALUES ('1397', 'dependency', '173'); -INSERT INTO cp_node VALUES ('1398', 'dependency', '173'); -INSERT INTO cp_node VALUES ('1399', 'dependency', '173'); -INSERT INTO cp_node VALUES ('1400', 'dependency', '173'); -INSERT INTO cp_node VALUES ('1401', 'resource', '173'); -INSERT INTO cp_node VALUES ('1402', 'file', '173'); -INSERT INTO cp_node VALUES ('1403', 'resource', '173'); -INSERT INTO cp_node VALUES ('1404', 'file', '173'); -INSERT INTO cp_node VALUES ('1405', 'resource', '173'); -INSERT INTO cp_node VALUES ('1406', 'file', '173'); -INSERT INTO cp_node VALUES ('1407', 'resource', '173'); -INSERT INTO cp_node VALUES ('1408', 'file', '173'); -INSERT INTO cp_node VALUES ('1409', 'dependency', '173'); -INSERT INTO cp_node VALUES ('1410', 'resource', '173'); -INSERT INTO cp_node VALUES ('1411', 'file', '173'); -INSERT INTO cp_node VALUES ('1412', 'resource', '173'); -INSERT INTO cp_node VALUES ('1413', 'file', '173'); -INSERT INTO cp_node VALUES ('1414', 'sequencing', '173'); -INSERT INTO cp_node VALUES ('1415', 'sequencing', '173'); -INSERT INTO cp_node VALUES ('1416', 'rule', '173'); -INSERT INTO cp_node VALUES ('1417', 'condition', '173'); -INSERT INTO cp_node VALUES ('1418', 'rule', '173'); -INSERT INTO cp_node VALUES ('1419', 'condition', '173'); -INSERT INTO cp_node VALUES ('1420', 'objective', '173'); -INSERT INTO cp_node VALUES ('1421', 'sequencing', '173'); -INSERT INTO cp_node VALUES ('1422', 'manifest', '174'); -INSERT INTO cp_node VALUES ('1423', 'organization', '174'); -INSERT INTO cp_node VALUES ('1424', 'item', '174'); -INSERT INTO cp_node VALUES ('1425', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1426', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1427', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1428', 'item', '174'); -INSERT INTO cp_node VALUES ('1429', 'item', '174'); -INSERT INTO cp_node VALUES ('1430', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1431', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1432', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1433', 'item', '174'); -INSERT INTO cp_node VALUES ('1434', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1435', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1436', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1437', 'item', '174'); -INSERT INTO cp_node VALUES ('1438', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1439', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1440', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1441', 'item', '174'); -INSERT INTO cp_node VALUES ('1442', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1443', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1444', 'hideLMSUI', '174'); -INSERT INTO cp_node VALUES ('1445', 'resource', '174'); -INSERT INTO cp_node VALUES ('1446', 'file', '174'); -INSERT INTO cp_node VALUES ('1447', 'dependency', '174'); -INSERT INTO cp_node VALUES ('1448', 'dependency', '174'); -INSERT INTO cp_node VALUES ('1449', 'dependency', '174'); -INSERT INTO cp_node VALUES ('1450', 'dependency', '174'); -INSERT INTO cp_node VALUES ('1451', 'dependency', '174'); -INSERT INTO cp_node VALUES ('1452', 'resource', '174'); -INSERT INTO cp_node VALUES ('1453', 'file', '174'); -INSERT INTO cp_node VALUES ('1454', 'resource', '174'); -INSERT INTO cp_node VALUES ('1455', 'file', '174'); -INSERT INTO cp_node VALUES ('1456', 'resource', '174'); -INSERT INTO cp_node VALUES ('1457', 'file', '174'); -INSERT INTO cp_node VALUES ('1458', 'resource', '174'); -INSERT INTO cp_node VALUES ('1459', 'file', '174'); -INSERT INTO cp_node VALUES ('1460', 'dependency', '174'); -INSERT INTO cp_node VALUES ('1461', 'resource', '174'); -INSERT INTO cp_node VALUES ('1462', 'file', '174'); -INSERT INTO cp_node VALUES ('1463', 'resource', '174'); -INSERT INTO cp_node VALUES ('1464', 'file', '174'); -INSERT INTO cp_node VALUES ('1465', 'sequencing', '174'); -INSERT INTO cp_node VALUES ('1466', 'sequencing', '174'); -INSERT INTO cp_node VALUES ('1467', 'rule', '174'); -INSERT INTO cp_node VALUES ('1468', 'condition', '174'); -INSERT INTO cp_node VALUES ('1469', 'rule', '174'); -INSERT INTO cp_node VALUES ('1470', 'condition', '174'); -INSERT INTO cp_node VALUES ('1471', 'rule', '174'); -INSERT INTO cp_node VALUES ('1472', 'condition', '174'); -INSERT INTO cp_node VALUES ('1473', 'objective', '174'); -INSERT INTO cp_node VALUES ('1474', 'sequencing', '174'); -INSERT INTO cp_node VALUES ('1475', 'manifest', '175'); -INSERT INTO cp_node VALUES ('1476', 'organization', '175'); -INSERT INTO cp_node VALUES ('1477', 'item', '175'); -INSERT INTO cp_node VALUES ('1478', 'hideLMSUI', '175'); -INSERT INTO cp_node VALUES ('1479', 'hideLMSUI', '175'); -INSERT INTO cp_node VALUES ('1480', 'hideLMSUI', '175'); -INSERT INTO cp_node VALUES ('1481', 'item', '175'); -INSERT INTO cp_node VALUES ('1482', 'hideLMSUI', '175'); -INSERT INTO cp_node VALUES ('1483', 'hideLMSUI', '175'); -INSERT INTO cp_node VALUES ('1484', 'hideLMSUI', '175'); -INSERT INTO cp_node VALUES ('1485', 'item', '175'); -INSERT INTO cp_node VALUES ('1486', 'hideLMSUI', '175'); -INSERT INTO cp_node VALUES ('1487', 'hideLMSUI', '175'); -INSERT INTO cp_node VALUES ('1488', 'hideLMSUI', '175'); -INSERT INTO cp_node VALUES ('1489', 'resource', '175'); -INSERT INTO cp_node VALUES ('1490', 'file', '175'); -INSERT INTO cp_node VALUES ('1491', 'dependency', '175'); -INSERT INTO cp_node VALUES ('1492', 'dependency', '175'); -INSERT INTO cp_node VALUES ('1493', 'dependency', '175'); -INSERT INTO cp_node VALUES ('1494', 'dependency', '175'); -INSERT INTO cp_node VALUES ('1495', 'dependency', '175'); -INSERT INTO cp_node VALUES ('1496', 'resource', '175'); -INSERT INTO cp_node VALUES ('1497', 'file', '175'); -INSERT INTO cp_node VALUES ('1498', 'resource', '175'); -INSERT INTO cp_node VALUES ('1499', 'file', '175'); -INSERT INTO cp_node VALUES ('1500', 'resource', '175'); -INSERT INTO cp_node VALUES ('1501', 'file', '175'); -INSERT INTO cp_node VALUES ('1502', 'resource', '175'); -INSERT INTO cp_node VALUES ('1503', 'file', '175'); -INSERT INTO cp_node VALUES ('1504', 'dependency', '175'); -INSERT INTO cp_node VALUES ('1505', 'resource', '175'); -INSERT INTO cp_node VALUES ('1506', 'file', '175'); -INSERT INTO cp_node VALUES ('1507', 'resource', '175'); -INSERT INTO cp_node VALUES ('1508', 'file', '175'); -INSERT INTO cp_node VALUES ('1509', 'sequencing', '175'); -INSERT INTO cp_node VALUES ('1510', 'objective', '175'); -INSERT INTO cp_node VALUES ('1511', 'mapInfo', '175'); -INSERT INTO cp_node VALUES ('1512', 'sequencing', '175'); -INSERT INTO cp_node VALUES ('1513', 'rule', '175'); -INSERT INTO cp_node VALUES ('1514', 'condition', '175'); -INSERT INTO cp_node VALUES ('1515', 'objective', '175'); -INSERT INTO cp_node VALUES ('1516', 'mapInfo', '175'); -INSERT INTO cp_node VALUES ('1517', 'sequencing', '175'); -INSERT INTO cp_node VALUES ('1518', 'manifest', '176'); -INSERT INTO cp_node VALUES ('1519', 'organization', '176'); -INSERT INTO cp_node VALUES ('1520', 'item', '176'); -INSERT INTO cp_node VALUES ('1521', 'hideLMSUI', '176'); -INSERT INTO cp_node VALUES ('1522', 'hideLMSUI', '176'); -INSERT INTO cp_node VALUES ('1523', 'hideLMSUI', '176'); -INSERT INTO cp_node VALUES ('1524', 'item', '176'); -INSERT INTO cp_node VALUES ('1525', 'hideLMSUI', '176'); -INSERT INTO cp_node VALUES ('1526', 'hideLMSUI', '176'); -INSERT INTO cp_node VALUES ('1527', 'hideLMSUI', '176'); -INSERT INTO cp_node VALUES ('1528', 'item', '176'); -INSERT INTO cp_node VALUES ('1529', 'hideLMSUI', '176'); -INSERT INTO cp_node VALUES ('1530', 'hideLMSUI', '176'); -INSERT INTO cp_node VALUES ('1531', 'hideLMSUI', '176'); -INSERT INTO cp_node VALUES ('1532', 'resource', '176'); -INSERT INTO cp_node VALUES ('1533', 'file', '176'); -INSERT INTO cp_node VALUES ('1534', 'dependency', '176'); -INSERT INTO cp_node VALUES ('1535', 'dependency', '176'); -INSERT INTO cp_node VALUES ('1536', 'dependency', '176'); -INSERT INTO cp_node VALUES ('1537', 'dependency', '176'); -INSERT INTO cp_node VALUES ('1538', 'dependency', '176'); -INSERT INTO cp_node VALUES ('1539', 'resource', '176'); -INSERT INTO cp_node VALUES ('1540', 'file', '176'); -INSERT INTO cp_node VALUES ('1541', 'resource', '176'); -INSERT INTO cp_node VALUES ('1542', 'file', '176'); -INSERT INTO cp_node VALUES ('1543', 'resource', '176'); -INSERT INTO cp_node VALUES ('1544', 'file', '176'); -INSERT INTO cp_node VALUES ('1545', 'resource', '176'); -INSERT INTO cp_node VALUES ('1546', 'file', '176'); -INSERT INTO cp_node VALUES ('1547', 'dependency', '176'); -INSERT INTO cp_node VALUES ('1548', 'resource', '176'); -INSERT INTO cp_node VALUES ('1549', 'file', '176'); -INSERT INTO cp_node VALUES ('1550', 'resource', '176'); -INSERT INTO cp_node VALUES ('1551', 'file', '176'); -INSERT INTO cp_node VALUES ('1552', 'sequencing', '176'); -INSERT INTO cp_node VALUES ('1553', 'objective', '176'); -INSERT INTO cp_node VALUES ('1554', 'mapInfo', '176'); -INSERT INTO cp_node VALUES ('1555', 'sequencing', '176'); -INSERT INTO cp_node VALUES ('1556', 'rule', '176'); -INSERT INTO cp_node VALUES ('1557', 'condition', '176'); -INSERT INTO cp_node VALUES ('1558', 'objective', '176'); -INSERT INTO cp_node VALUES ('1559', 'mapInfo', '176'); -INSERT INTO cp_node VALUES ('1560', 'sequencing', '176'); -INSERT INTO cp_node VALUES ('1561', 'manifest', '177'); -INSERT INTO cp_node VALUES ('1562', 'organization', '177'); -INSERT INTO cp_node VALUES ('1563', 'item', '177'); -INSERT INTO cp_node VALUES ('1564', 'hideLMSUI', '177'); -INSERT INTO cp_node VALUES ('1565', 'hideLMSUI', '177'); -INSERT INTO cp_node VALUES ('1566', 'hideLMSUI', '177'); -INSERT INTO cp_node VALUES ('1567', 'item', '177'); -INSERT INTO cp_node VALUES ('1568', 'hideLMSUI', '177'); -INSERT INTO cp_node VALUES ('1569', 'hideLMSUI', '177'); -INSERT INTO cp_node VALUES ('1570', 'hideLMSUI', '177'); -INSERT INTO cp_node VALUES ('1571', 'item', '177'); -INSERT INTO cp_node VALUES ('1572', 'hideLMSUI', '177'); -INSERT INTO cp_node VALUES ('1573', 'hideLMSUI', '177'); -INSERT INTO cp_node VALUES ('1574', 'hideLMSUI', '177'); -INSERT INTO cp_node VALUES ('1575', 'resource', '177'); -INSERT INTO cp_node VALUES ('1576', 'file', '177'); -INSERT INTO cp_node VALUES ('1577', 'dependency', '177'); -INSERT INTO cp_node VALUES ('1578', 'dependency', '177'); -INSERT INTO cp_node VALUES ('1579', 'dependency', '177'); -INSERT INTO cp_node VALUES ('1580', 'dependency', '177'); -INSERT INTO cp_node VALUES ('1581', 'dependency', '177'); -INSERT INTO cp_node VALUES ('1582', 'resource', '177'); -INSERT INTO cp_node VALUES ('1583', 'file', '177'); -INSERT INTO cp_node VALUES ('1584', 'resource', '177'); -INSERT INTO cp_node VALUES ('1585', 'file', '177'); -INSERT INTO cp_node VALUES ('1586', 'resource', '177'); -INSERT INTO cp_node VALUES ('1587', 'file', '177'); -INSERT INTO cp_node VALUES ('1588', 'resource', '177'); -INSERT INTO cp_node VALUES ('1589', 'file', '177'); -INSERT INTO cp_node VALUES ('1590', 'dependency', '177'); -INSERT INTO cp_node VALUES ('1591', 'resource', '177'); -INSERT INTO cp_node VALUES ('1592', 'file', '177'); -INSERT INTO cp_node VALUES ('1593', 'resource', '177'); -INSERT INTO cp_node VALUES ('1594', 'file', '177'); -INSERT INTO cp_node VALUES ('1595', 'sequencing', '177'); -INSERT INTO cp_node VALUES ('1596', 'objective', '177'); -INSERT INTO cp_node VALUES ('1597', 'mapInfo', '177'); -INSERT INTO cp_node VALUES ('1598', 'sequencing', '177'); -INSERT INTO cp_node VALUES ('1599', 'rule', '177'); -INSERT INTO cp_node VALUES ('1600', 'condition', '177'); -INSERT INTO cp_node VALUES ('1601', 'objective', '177'); -INSERT INTO cp_node VALUES ('1602', 'mapInfo', '177'); -INSERT INTO cp_node VALUES ('1603', 'sequencing', '177'); -INSERT INTO cp_node VALUES ('1604', 'manifest', '178'); -INSERT INTO cp_node VALUES ('1605', 'organization', '178'); -INSERT INTO cp_node VALUES ('1606', 'item', '178'); -INSERT INTO cp_node VALUES ('1607', 'hideLMSUI', '178'); -INSERT INTO cp_node VALUES ('1608', 'hideLMSUI', '178'); -INSERT INTO cp_node VALUES ('1609', 'hideLMSUI', '178'); -INSERT INTO cp_node VALUES ('1610', 'item', '178'); -INSERT INTO cp_node VALUES ('1611', 'hideLMSUI', '178'); -INSERT INTO cp_node VALUES ('1612', 'hideLMSUI', '178'); -INSERT INTO cp_node VALUES ('1613', 'hideLMSUI', '178'); -INSERT INTO cp_node VALUES ('1614', 'item', '178'); -INSERT INTO cp_node VALUES ('1615', 'hideLMSUI', '178'); -INSERT INTO cp_node VALUES ('1616', 'hideLMSUI', '178'); -INSERT INTO cp_node VALUES ('1617', 'hideLMSUI', '178'); -INSERT INTO cp_node VALUES ('1618', 'resource', '178'); -INSERT INTO cp_node VALUES ('1619', 'file', '178'); -INSERT INTO cp_node VALUES ('1620', 'dependency', '178'); -INSERT INTO cp_node VALUES ('1621', 'dependency', '178'); -INSERT INTO cp_node VALUES ('1622', 'dependency', '178'); -INSERT INTO cp_node VALUES ('1623', 'dependency', '178'); -INSERT INTO cp_node VALUES ('1624', 'dependency', '178'); -INSERT INTO cp_node VALUES ('1625', 'resource', '178'); -INSERT INTO cp_node VALUES ('1626', 'file', '178'); -INSERT INTO cp_node VALUES ('1627', 'resource', '178'); -INSERT INTO cp_node VALUES ('1628', 'file', '178'); -INSERT INTO cp_node VALUES ('1629', 'resource', '178'); -INSERT INTO cp_node VALUES ('1630', 'file', '178'); -INSERT INTO cp_node VALUES ('1631', 'resource', '178'); -INSERT INTO cp_node VALUES ('1632', 'file', '178'); -INSERT INTO cp_node VALUES ('1633', 'dependency', '178'); -INSERT INTO cp_node VALUES ('1634', 'resource', '178'); -INSERT INTO cp_node VALUES ('1635', 'file', '178'); -INSERT INTO cp_node VALUES ('1636', 'resource', '178'); -INSERT INTO cp_node VALUES ('1637', 'file', '178'); -INSERT INTO cp_node VALUES ('1638', 'sequencing', '178'); -INSERT INTO cp_node VALUES ('1639', 'objective', '178'); -INSERT INTO cp_node VALUES ('1640', 'objective', '178'); -INSERT INTO cp_node VALUES ('1641', 'mapInfo', '178'); -INSERT INTO cp_node VALUES ('1642', 'sequencing', '178'); -INSERT INTO cp_node VALUES ('1643', 'rule', '178'); -INSERT INTO cp_node VALUES ('1644', 'condition', '178'); -INSERT INTO cp_node VALUES ('1645', 'objective', '178'); -INSERT INTO cp_node VALUES ('1646', 'objective', '178'); -INSERT INTO cp_node VALUES ('1647', 'mapInfo', '178'); -INSERT INTO cp_node VALUES ('1648', 'sequencing', '178'); -INSERT INTO cp_node VALUES ('1649', 'manifest', '179'); -INSERT INTO cp_node VALUES ('1650', 'organization', '179'); -INSERT INTO cp_node VALUES ('1651', 'item', '179'); -INSERT INTO cp_node VALUES ('1652', 'item', '179'); -INSERT INTO cp_node VALUES ('1653', 'item', '179'); -INSERT INTO cp_node VALUES ('1654', 'resource', '179'); -INSERT INTO cp_node VALUES ('1655', 'file', '179'); -INSERT INTO cp_node VALUES ('1656', 'dependency', '179'); -INSERT INTO cp_node VALUES ('1657', 'dependency', '179'); -INSERT INTO cp_node VALUES ('1658', 'dependency', '179'); -INSERT INTO cp_node VALUES ('1659', 'dependency', '179'); -INSERT INTO cp_node VALUES ('1660', 'dependency', '179'); -INSERT INTO cp_node VALUES ('1661', 'resource', '179'); -INSERT INTO cp_node VALUES ('1662', 'file', '179'); -INSERT INTO cp_node VALUES ('1663', 'resource', '179'); -INSERT INTO cp_node VALUES ('1664', 'file', '179'); -INSERT INTO cp_node VALUES ('1665', 'resource', '179'); -INSERT INTO cp_node VALUES ('1666', 'file', '179'); -INSERT INTO cp_node VALUES ('1667', 'resource', '179'); -INSERT INTO cp_node VALUES ('1668', 'file', '179'); -INSERT INTO cp_node VALUES ('1669', 'dependency', '179'); -INSERT INTO cp_node VALUES ('1670', 'resource', '179'); -INSERT INTO cp_node VALUES ('1671', 'file', '179'); -INSERT INTO cp_node VALUES ('1672', 'resource', '179'); -INSERT INTO cp_node VALUES ('1673', 'file', '179'); -INSERT INTO cp_node VALUES ('1674', 'sequencing', '179'); -INSERT INTO cp_node VALUES ('1675', 'objective', '179'); -INSERT INTO cp_node VALUES ('1676', 'objective', '179'); -INSERT INTO cp_node VALUES ('1677', 'mapInfo', '179'); -INSERT INTO cp_node VALUES ('1678', 'sequencing', '179'); -INSERT INTO cp_node VALUES ('1679', 'rule', '179'); -INSERT INTO cp_node VALUES ('1680', 'condition', '179'); -INSERT INTO cp_node VALUES ('1681', 'objective', '179'); -INSERT INTO cp_node VALUES ('1682', 'objective', '179'); -INSERT INTO cp_node VALUES ('1683', 'mapInfo', '179'); -INSERT INTO cp_node VALUES ('1684', 'sequencing', '179'); -INSERT INTO cp_node VALUES ('1685', 'manifest', '180'); -INSERT INTO cp_node VALUES ('1686', 'organization', '180'); -INSERT INTO cp_node VALUES ('1687', 'item', '180'); -INSERT INTO cp_node VALUES ('1688', 'hideLMSUI', '180'); -INSERT INTO cp_node VALUES ('1689', 'hideLMSUI', '180'); -INSERT INTO cp_node VALUES ('1690', 'hideLMSUI', '180'); -INSERT INTO cp_node VALUES ('1691', 'item', '180'); -INSERT INTO cp_node VALUES ('1692', 'hideLMSUI', '180'); -INSERT INTO cp_node VALUES ('1693', 'hideLMSUI', '180'); -INSERT INTO cp_node VALUES ('1694', 'hideLMSUI', '180'); -INSERT INTO cp_node VALUES ('1695', 'item', '180'); -INSERT INTO cp_node VALUES ('1696', 'hideLMSUI', '180'); -INSERT INTO cp_node VALUES ('1697', 'hideLMSUI', '180'); -INSERT INTO cp_node VALUES ('1698', 'hideLMSUI', '180'); -INSERT INTO cp_node VALUES ('1699', 'resource', '180'); -INSERT INTO cp_node VALUES ('1700', 'file', '180'); -INSERT INTO cp_node VALUES ('1701', 'dependency', '180'); -INSERT INTO cp_node VALUES ('1702', 'dependency', '180'); -INSERT INTO cp_node VALUES ('1703', 'dependency', '180'); -INSERT INTO cp_node VALUES ('1704', 'dependency', '180'); -INSERT INTO cp_node VALUES ('1705', 'dependency', '180'); -INSERT INTO cp_node VALUES ('1706', 'resource', '180'); -INSERT INTO cp_node VALUES ('1707', 'file', '180'); -INSERT INTO cp_node VALUES ('1708', 'resource', '180'); -INSERT INTO cp_node VALUES ('1709', 'file', '180'); -INSERT INTO cp_node VALUES ('1710', 'resource', '180'); -INSERT INTO cp_node VALUES ('1711', 'file', '180'); -INSERT INTO cp_node VALUES ('1712', 'resource', '180'); -INSERT INTO cp_node VALUES ('1713', 'file', '180'); -INSERT INTO cp_node VALUES ('1714', 'dependency', '180'); -INSERT INTO cp_node VALUES ('1715', 'resource', '180'); -INSERT INTO cp_node VALUES ('1716', 'file', '180'); -INSERT INTO cp_node VALUES ('1717', 'resource', '180'); -INSERT INTO cp_node VALUES ('1718', 'file', '180'); -INSERT INTO cp_node VALUES ('1719', 'sequencing', '180'); -INSERT INTO cp_node VALUES ('1720', 'objective', '180'); -INSERT INTO cp_node VALUES ('1721', 'objective', '180'); -INSERT INTO cp_node VALUES ('1722', 'mapInfo', '180'); -INSERT INTO cp_node VALUES ('1723', 'sequencing', '180'); -INSERT INTO cp_node VALUES ('1724', 'objective', '180'); -INSERT INTO cp_node VALUES ('1725', 'objective', '180'); -INSERT INTO cp_node VALUES ('1726', 'mapInfo', '180'); -INSERT INTO cp_node VALUES ('1727', 'sequencing', '180'); -INSERT INTO cp_node VALUES ('1728', 'objective', '180'); -INSERT INTO cp_node VALUES ('1729', 'objective', '180'); -INSERT INTO cp_node VALUES ('1730', 'mapInfo', '180'); -INSERT INTO cp_node VALUES ('1731', 'sequencing', '180'); -INSERT INTO cp_node VALUES ('1732', 'manifest', '181'); -INSERT INTO cp_node VALUES ('1733', 'organization', '181'); -INSERT INTO cp_node VALUES ('1734', 'item', '181'); -INSERT INTO cp_node VALUES ('1735', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1736', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1737', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1738', 'item', '181'); -INSERT INTO cp_node VALUES ('1739', 'item', '181'); -INSERT INTO cp_node VALUES ('1740', 'item', '181'); -INSERT INTO cp_node VALUES ('1741', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1742', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1743', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1744', 'item', '181'); -INSERT INTO cp_node VALUES ('1745', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1746', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1747', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1748', 'item', '181'); -INSERT INTO cp_node VALUES ('1749', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1750', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1751', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1752', 'item', '181'); -INSERT INTO cp_node VALUES ('1753', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1754', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1755', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1756', 'item', '181'); -INSERT INTO cp_node VALUES ('1757', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1758', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1759', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1760', 'item', '181'); -INSERT INTO cp_node VALUES ('1761', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1762', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1763', 'hideLMSUI', '181'); -INSERT INTO cp_node VALUES ('1764', 'resource', '181'); -INSERT INTO cp_node VALUES ('1765', 'file', '181'); -INSERT INTO cp_node VALUES ('1766', 'dependency', '181'); -INSERT INTO cp_node VALUES ('1767', 'dependency', '181'); -INSERT INTO cp_node VALUES ('1768', 'dependency', '181'); -INSERT INTO cp_node VALUES ('1769', 'dependency', '181'); -INSERT INTO cp_node VALUES ('1770', 'dependency', '181'); -INSERT INTO cp_node VALUES ('1771', 'resource', '181'); -INSERT INTO cp_node VALUES ('1772', 'file', '181'); -INSERT INTO cp_node VALUES ('1773', 'resource', '181'); -INSERT INTO cp_node VALUES ('1774', 'file', '181'); -INSERT INTO cp_node VALUES ('1775', 'resource', '181'); -INSERT INTO cp_node VALUES ('1776', 'file', '181'); -INSERT INTO cp_node VALUES ('1777', 'resource', '181'); -INSERT INTO cp_node VALUES ('1778', 'file', '181'); -INSERT INTO cp_node VALUES ('1779', 'dependency', '181'); -INSERT INTO cp_node VALUES ('1780', 'resource', '181'); -INSERT INTO cp_node VALUES ('1781', 'file', '181'); -INSERT INTO cp_node VALUES ('1782', 'resource', '181'); -INSERT INTO cp_node VALUES ('1783', 'file', '181'); -INSERT INTO cp_node VALUES ('1784', 'sequencing', '181'); -INSERT INTO cp_node VALUES ('1785', 'rule', '181'); -INSERT INTO cp_node VALUES ('1786', 'condition', '181'); -INSERT INTO cp_node VALUES ('1787', 'objective', '181'); -INSERT INTO cp_node VALUES ('1788', 'mapInfo', '181'); -INSERT INTO cp_node VALUES ('1789', 'sequencing', '181'); -INSERT INTO cp_node VALUES ('1790', 'rule', '181'); -INSERT INTO cp_node VALUES ('1791', 'condition', '181'); -INSERT INTO cp_node VALUES ('1792', 'objective', '181'); -INSERT INTO cp_node VALUES ('1793', 'mapInfo', '181'); -INSERT INTO cp_node VALUES ('1794', 'sequencing', '181'); -INSERT INTO cp_node VALUES ('1795', 'rule', '181'); -INSERT INTO cp_node VALUES ('1796', 'condition', '181'); -INSERT INTO cp_node VALUES ('1797', 'objective', '181'); -INSERT INTO cp_node VALUES ('1798', 'mapInfo', '181'); -INSERT INTO cp_node VALUES ('1799', 'sequencing', '181'); -INSERT INTO cp_node VALUES ('1800', 'rule', '181'); -INSERT INTO cp_node VALUES ('1801', 'condition', '181'); -INSERT INTO cp_node VALUES ('1802', 'objective', '181'); -INSERT INTO cp_node VALUES ('1803', 'mapInfo', '181'); -INSERT INTO cp_node VALUES ('1804', 'sequencing', '181'); -INSERT INTO cp_node VALUES ('1805', 'rule', '181'); -INSERT INTO cp_node VALUES ('1806', 'condition', '181'); -INSERT INTO cp_node VALUES ('1807', 'objective', '181'); -INSERT INTO cp_node VALUES ('1808', 'mapInfo', '181'); -INSERT INTO cp_node VALUES ('1809', 'sequencing', '181'); -INSERT INTO cp_node VALUES ('1810', 'sequencing', '181'); -INSERT INTO cp_node VALUES ('1811', 'manifest', '182'); -INSERT INTO cp_node VALUES ('1812', 'organization', '182'); -INSERT INTO cp_node VALUES ('1813', 'item', '182'); -INSERT INTO cp_node VALUES ('1814', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1815', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1816', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1817', 'item', '182'); -INSERT INTO cp_node VALUES ('1818', 'item', '182'); -INSERT INTO cp_node VALUES ('1819', 'item', '182'); -INSERT INTO cp_node VALUES ('1820', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1821', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1822', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1823', 'item', '182'); -INSERT INTO cp_node VALUES ('1824', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1825', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1826', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1827', 'item', '182'); -INSERT INTO cp_node VALUES ('1828', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1829', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1830', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1831', 'item', '182'); -INSERT INTO cp_node VALUES ('1832', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1833', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1834', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1835', 'item', '182'); -INSERT INTO cp_node VALUES ('1836', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1837', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1838', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1839', 'item', '182'); -INSERT INTO cp_node VALUES ('1840', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1841', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1842', 'hideLMSUI', '182'); -INSERT INTO cp_node VALUES ('1843', 'resource', '182'); -INSERT INTO cp_node VALUES ('1844', 'file', '182'); -INSERT INTO cp_node VALUES ('1845', 'dependency', '182'); -INSERT INTO cp_node VALUES ('1846', 'dependency', '182'); -INSERT INTO cp_node VALUES ('1847', 'dependency', '182'); -INSERT INTO cp_node VALUES ('1848', 'dependency', '182'); -INSERT INTO cp_node VALUES ('1849', 'dependency', '182'); -INSERT INTO cp_node VALUES ('1850', 'resource', '182'); -INSERT INTO cp_node VALUES ('1851', 'file', '182'); -INSERT INTO cp_node VALUES ('1852', 'resource', '182'); -INSERT INTO cp_node VALUES ('1853', 'file', '182'); -INSERT INTO cp_node VALUES ('1854', 'resource', '182'); -INSERT INTO cp_node VALUES ('1855', 'file', '182'); -INSERT INTO cp_node VALUES ('1856', 'resource', '182'); -INSERT INTO cp_node VALUES ('1857', 'file', '182'); -INSERT INTO cp_node VALUES ('1858', 'dependency', '182'); -INSERT INTO cp_node VALUES ('1859', 'resource', '182'); -INSERT INTO cp_node VALUES ('1860', 'file', '182'); -INSERT INTO cp_node VALUES ('1861', 'resource', '182'); -INSERT INTO cp_node VALUES ('1862', 'file', '182'); -INSERT INTO cp_node VALUES ('1863', 'sequencing', '182'); -INSERT INTO cp_node VALUES ('1864', 'rule', '182'); -INSERT INTO cp_node VALUES ('1865', 'condition', '182'); -INSERT INTO cp_node VALUES ('1866', 'objective', '182'); -INSERT INTO cp_node VALUES ('1867', 'mapInfo', '182'); -INSERT INTO cp_node VALUES ('1868', 'sequencing', '182'); -INSERT INTO cp_node VALUES ('1869', 'rule', '182'); -INSERT INTO cp_node VALUES ('1870', 'condition', '182'); -INSERT INTO cp_node VALUES ('1871', 'objective', '182'); -INSERT INTO cp_node VALUES ('1872', 'mapInfo', '182'); -INSERT INTO cp_node VALUES ('1873', 'sequencing', '182'); -INSERT INTO cp_node VALUES ('1874', 'rule', '182'); -INSERT INTO cp_node VALUES ('1875', 'condition', '182'); -INSERT INTO cp_node VALUES ('1876', 'objective', '182'); -INSERT INTO cp_node VALUES ('1877', 'mapInfo', '182'); -INSERT INTO cp_node VALUES ('1878', 'sequencing', '182'); -INSERT INTO cp_node VALUES ('1879', 'rule', '182'); -INSERT INTO cp_node VALUES ('1880', 'condition', '182'); -INSERT INTO cp_node VALUES ('1881', 'objective', '182'); -INSERT INTO cp_node VALUES ('1882', 'mapInfo', '182'); -INSERT INTO cp_node VALUES ('1883', 'sequencing', '182'); -INSERT INTO cp_node VALUES ('1884', 'rule', '182'); -INSERT INTO cp_node VALUES ('1885', 'condition', '182'); -INSERT INTO cp_node VALUES ('1886', 'condition', '182'); -INSERT INTO cp_node VALUES ('1887', 'objective', '182'); -INSERT INTO cp_node VALUES ('1888', 'mapInfo', '182'); -INSERT INTO cp_node VALUES ('1889', 'objective', '182'); -INSERT INTO cp_node VALUES ('1890', 'mapInfo', '182'); -INSERT INTO cp_node VALUES ('1891', 'sequencing', '182'); -INSERT INTO cp_node VALUES ('1892', 'sequencing', '182'); -INSERT INTO cp_node VALUES ('1893', 'manifest', '183'); -INSERT INTO cp_node VALUES ('1894', 'organization', '183'); -INSERT INTO cp_node VALUES ('1895', 'item', '183'); -INSERT INTO cp_node VALUES ('1896', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1897', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1898', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1899', 'item', '183'); -INSERT INTO cp_node VALUES ('1900', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1901', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1902', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1903', 'item', '183'); -INSERT INTO cp_node VALUES ('1904', 'item', '183'); -INSERT INTO cp_node VALUES ('1905', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1906', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1907', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1908', 'item', '183'); -INSERT INTO cp_node VALUES ('1909', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1910', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1911', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1912', 'item', '183'); -INSERT INTO cp_node VALUES ('1913', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1914', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1915', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1916', 'item', '183'); -INSERT INTO cp_node VALUES ('1917', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1918', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1919', 'hideLMSUI', '183'); -INSERT INTO cp_node VALUES ('1920', 'resource', '183'); -INSERT INTO cp_node VALUES ('1921', 'file', '183'); -INSERT INTO cp_node VALUES ('1922', 'dependency', '183'); -INSERT INTO cp_node VALUES ('1923', 'dependency', '183'); -INSERT INTO cp_node VALUES ('1924', 'dependency', '183'); -INSERT INTO cp_node VALUES ('1925', 'dependency', '183'); -INSERT INTO cp_node VALUES ('1926', 'dependency', '183'); -INSERT INTO cp_node VALUES ('1927', 'resource', '183'); -INSERT INTO cp_node VALUES ('1928', 'file', '183'); -INSERT INTO cp_node VALUES ('1929', 'resource', '183'); -INSERT INTO cp_node VALUES ('1930', 'file', '183'); -INSERT INTO cp_node VALUES ('1931', 'resource', '183'); -INSERT INTO cp_node VALUES ('1932', 'file', '183'); -INSERT INTO cp_node VALUES ('1933', 'resource', '183'); -INSERT INTO cp_node VALUES ('1934', 'file', '183'); -INSERT INTO cp_node VALUES ('1935', 'dependency', '183'); -INSERT INTO cp_node VALUES ('1936', 'resource', '183'); -INSERT INTO cp_node VALUES ('1937', 'file', '183'); -INSERT INTO cp_node VALUES ('1938', 'resource', '183'); -INSERT INTO cp_node VALUES ('1939', 'file', '183'); -INSERT INTO cp_node VALUES ('1940', 'sequencing', '183'); -INSERT INTO cp_node VALUES ('1941', 'objective', '183'); -INSERT INTO cp_node VALUES ('1942', 'mapInfo', '183'); -INSERT INTO cp_node VALUES ('1943', 'mapInfo', '183'); -INSERT INTO cp_node VALUES ('1944', 'sequencing', '183'); -INSERT INTO cp_node VALUES ('1945', 'objective', '183'); -INSERT INTO cp_node VALUES ('1946', 'mapInfo', '183'); -INSERT INTO cp_node VALUES ('1947', 'sequencing', '183'); -INSERT INTO cp_node VALUES ('1948', 'objective', '183'); -INSERT INTO cp_node VALUES ('1949', 'mapInfo', '183'); -INSERT INTO cp_node VALUES ('1950', 'sequencing', '183'); -INSERT INTO cp_node VALUES ('1951', 'objective', '183'); -INSERT INTO cp_node VALUES ('1952', 'mapInfo', '183'); -INSERT INTO cp_node VALUES ('1953', 'sequencing', '183'); -INSERT INTO cp_node VALUES ('1954', 'objective', '183'); -INSERT INTO cp_node VALUES ('1955', 'mapInfo', '183'); -INSERT INTO cp_node VALUES ('1956', 'sequencing', '183'); -INSERT INTO cp_node VALUES ('1957', 'rule', '183'); -INSERT INTO cp_node VALUES ('1958', 'condition', '183'); -INSERT INTO cp_node VALUES ('1959', 'rule', '183'); -INSERT INTO cp_node VALUES ('1960', 'condition', '183'); -INSERT INTO cp_node VALUES ('1961', 'sequencing', '183'); -INSERT INTO cp_node VALUES ('1962', 'manifest', '184'); -INSERT INTO cp_node VALUES ('1963', 'organization', '184'); -INSERT INTO cp_node VALUES ('1964', 'item', '184'); -INSERT INTO cp_node VALUES ('1965', 'hideLMSUI', '184'); -INSERT INTO cp_node VALUES ('1966', 'hideLMSUI', '184'); -INSERT INTO cp_node VALUES ('1967', 'hideLMSUI', '184'); -INSERT INTO cp_node VALUES ('1968', 'item', '184'); -INSERT INTO cp_node VALUES ('1969', 'hideLMSUI', '184'); -INSERT INTO cp_node VALUES ('1970', 'hideLMSUI', '184'); -INSERT INTO cp_node VALUES ('1971', 'hideLMSUI', '184'); -INSERT INTO cp_node VALUES ('1972', 'item', '184'); -INSERT INTO cp_node VALUES ('1973', 'hideLMSUI', '184'); -INSERT INTO cp_node VALUES ('1974', 'hideLMSUI', '184'); -INSERT INTO cp_node VALUES ('1975', 'hideLMSUI', '184'); -INSERT INTO cp_node VALUES ('1976', 'item', '184'); -INSERT INTO cp_node VALUES ('1977', 'hideLMSUI', '184'); -INSERT INTO cp_node VALUES ('1978', 'hideLMSUI', '184'); -INSERT INTO cp_node VALUES ('1979', 'hideLMSUI', '184'); -INSERT INTO cp_node VALUES ('1980', 'resource', '184'); -INSERT INTO cp_node VALUES ('1981', 'file', '184'); -INSERT INTO cp_node VALUES ('1982', 'dependency', '184'); -INSERT INTO cp_node VALUES ('1983', 'dependency', '184'); -INSERT INTO cp_node VALUES ('1984', 'dependency', '184'); -INSERT INTO cp_node VALUES ('1985', 'dependency', '184'); -INSERT INTO cp_node VALUES ('1986', 'dependency', '184'); -INSERT INTO cp_node VALUES ('1987', 'resource', '184'); -INSERT INTO cp_node VALUES ('1988', 'file', '184'); -INSERT INTO cp_node VALUES ('1989', 'resource', '184'); -INSERT INTO cp_node VALUES ('1990', 'file', '184'); -INSERT INTO cp_node VALUES ('1991', 'resource', '184'); -INSERT INTO cp_node VALUES ('1992', 'file', '184'); -INSERT INTO cp_node VALUES ('1993', 'resource', '184'); -INSERT INTO cp_node VALUES ('1994', 'file', '184'); -INSERT INTO cp_node VALUES ('1995', 'dependency', '184'); -INSERT INTO cp_node VALUES ('1996', 'resource', '184'); -INSERT INTO cp_node VALUES ('1997', 'file', '184'); -INSERT INTO cp_node VALUES ('1998', 'resource', '184'); -INSERT INTO cp_node VALUES ('1999', 'file', '184'); -INSERT INTO cp_node VALUES ('2000', 'sequencing', '184'); -INSERT INTO cp_node VALUES ('2001', 'objective', '184'); -INSERT INTO cp_node VALUES ('2002', 'mapInfo', '184'); -INSERT INTO cp_node VALUES ('2003', 'sequencing', '184'); -INSERT INTO cp_node VALUES ('2004', 'rule', '184'); -INSERT INTO cp_node VALUES ('2005', 'condition', '184'); -INSERT INTO cp_node VALUES ('2006', 'objective', '184'); -INSERT INTO cp_node VALUES ('2007', 'mapInfo', '184'); -INSERT INTO cp_node VALUES ('2008', 'sequencing', '184'); -INSERT INTO cp_node VALUES ('2009', 'rule', '184'); -INSERT INTO cp_node VALUES ('2010', 'condition', '184'); -INSERT INTO cp_node VALUES ('2011', 'objective', '184'); -INSERT INTO cp_node VALUES ('2012', 'mapInfo', '184'); -INSERT INTO cp_node VALUES ('2013', 'sequencing', '184'); -INSERT INTO cp_node VALUES ('2014', 'manifest', '185'); -INSERT INTO cp_node VALUES ('2015', 'organization', '185'); -INSERT INTO cp_node VALUES ('2016', 'item', '185'); -INSERT INTO cp_node VALUES ('2017', 'hideLMSUI', '185'); -INSERT INTO cp_node VALUES ('2018', 'hideLMSUI', '185'); -INSERT INTO cp_node VALUES ('2019', 'hideLMSUI', '185'); -INSERT INTO cp_node VALUES ('2020', 'item', '185'); -INSERT INTO cp_node VALUES ('2021', 'hideLMSUI', '185'); -INSERT INTO cp_node VALUES ('2022', 'hideLMSUI', '185'); -INSERT INTO cp_node VALUES ('2023', 'hideLMSUI', '185'); -INSERT INTO cp_node VALUES ('2024', 'item', '185'); -INSERT INTO cp_node VALUES ('2025', 'hideLMSUI', '185'); -INSERT INTO cp_node VALUES ('2026', 'hideLMSUI', '185'); -INSERT INTO cp_node VALUES ('2027', 'hideLMSUI', '185'); -INSERT INTO cp_node VALUES ('2028', 'item', '185'); -INSERT INTO cp_node VALUES ('2029', 'hideLMSUI', '185'); -INSERT INTO cp_node VALUES ('2030', 'hideLMSUI', '185'); -INSERT INTO cp_node VALUES ('2031', 'hideLMSUI', '185'); -INSERT INTO cp_node VALUES ('2032', 'resource', '185'); -INSERT INTO cp_node VALUES ('2033', 'file', '185'); -INSERT INTO cp_node VALUES ('2034', 'dependency', '185'); -INSERT INTO cp_node VALUES ('2035', 'dependency', '185'); -INSERT INTO cp_node VALUES ('2036', 'dependency', '185'); -INSERT INTO cp_node VALUES ('2037', 'dependency', '185'); -INSERT INTO cp_node VALUES ('2038', 'dependency', '185'); -INSERT INTO cp_node VALUES ('2039', 'resource', '185'); -INSERT INTO cp_node VALUES ('2040', 'file', '185'); -INSERT INTO cp_node VALUES ('2041', 'resource', '185'); -INSERT INTO cp_node VALUES ('2042', 'file', '185'); -INSERT INTO cp_node VALUES ('2043', 'resource', '185'); -INSERT INTO cp_node VALUES ('2044', 'file', '185'); -INSERT INTO cp_node VALUES ('2045', 'resource', '185'); -INSERT INTO cp_node VALUES ('2046', 'file', '185'); -INSERT INTO cp_node VALUES ('2047', 'dependency', '185'); -INSERT INTO cp_node VALUES ('2048', 'resource', '185'); -INSERT INTO cp_node VALUES ('2049', 'file', '185'); -INSERT INTO cp_node VALUES ('2050', 'resource', '185'); -INSERT INTO cp_node VALUES ('2051', 'file', '185'); -INSERT INTO cp_node VALUES ('2052', 'sequencing', '185'); -INSERT INTO cp_node VALUES ('2053', 'objective', '185'); -INSERT INTO cp_node VALUES ('2054', 'mapInfo', '185'); -INSERT INTO cp_node VALUES ('2055', 'sequencing', '185'); -INSERT INTO cp_node VALUES ('2056', 'rule', '185'); -INSERT INTO cp_node VALUES ('2057', 'condition', '185'); -INSERT INTO cp_node VALUES ('2058', 'objective', '185'); -INSERT INTO cp_node VALUES ('2059', 'mapInfo', '185'); -INSERT INTO cp_node VALUES ('2060', 'sequencing', '185'); -INSERT INTO cp_node VALUES ('2061', 'rule', '185'); -INSERT INTO cp_node VALUES ('2062', 'condition', '185'); -INSERT INTO cp_node VALUES ('2063', 'objective', '185'); -INSERT INTO cp_node VALUES ('2064', 'mapInfo', '185'); -INSERT INTO cp_node VALUES ('2065', 'sequencing', '185'); -INSERT INTO cp_node VALUES ('2066', 'manifest', '186'); -INSERT INTO cp_node VALUES ('2067', 'organization', '186'); -INSERT INTO cp_node VALUES ('2068', 'item', '186'); -INSERT INTO cp_node VALUES ('2069', 'hideLMSUI', '186'); -INSERT INTO cp_node VALUES ('2070', 'hideLMSUI', '186'); -INSERT INTO cp_node VALUES ('2071', 'hideLMSUI', '186'); -INSERT INTO cp_node VALUES ('2072', 'item', '186'); -INSERT INTO cp_node VALUES ('2073', 'hideLMSUI', '186'); -INSERT INTO cp_node VALUES ('2074', 'hideLMSUI', '186'); -INSERT INTO cp_node VALUES ('2075', 'hideLMSUI', '186'); -INSERT INTO cp_node VALUES ('2076', 'item', '186'); -INSERT INTO cp_node VALUES ('2077', 'hideLMSUI', '186'); -INSERT INTO cp_node VALUES ('2078', 'hideLMSUI', '186'); -INSERT INTO cp_node VALUES ('2079', 'hideLMSUI', '186'); -INSERT INTO cp_node VALUES ('2080', 'resource', '186'); -INSERT INTO cp_node VALUES ('2081', 'file', '186'); -INSERT INTO cp_node VALUES ('2082', 'dependency', '186'); -INSERT INTO cp_node VALUES ('2083', 'dependency', '186'); -INSERT INTO cp_node VALUES ('2084', 'dependency', '186'); -INSERT INTO cp_node VALUES ('2085', 'dependency', '186'); -INSERT INTO cp_node VALUES ('2086', 'dependency', '186'); -INSERT INTO cp_node VALUES ('2087', 'resource', '186'); -INSERT INTO cp_node VALUES ('2088', 'file', '186'); -INSERT INTO cp_node VALUES ('2089', 'resource', '186'); -INSERT INTO cp_node VALUES ('2090', 'file', '186'); -INSERT INTO cp_node VALUES ('2091', 'resource', '186'); -INSERT INTO cp_node VALUES ('2092', 'file', '186'); -INSERT INTO cp_node VALUES ('2093', 'resource', '186'); -INSERT INTO cp_node VALUES ('2094', 'file', '186'); -INSERT INTO cp_node VALUES ('2095', 'dependency', '186'); -INSERT INTO cp_node VALUES ('2096', 'resource', '186'); -INSERT INTO cp_node VALUES ('2097', 'file', '186'); -INSERT INTO cp_node VALUES ('2098', 'resource', '186'); -INSERT INTO cp_node VALUES ('2099', 'file', '186'); -INSERT INTO cp_node VALUES ('2100', 'sequencing', '186'); -INSERT INTO cp_node VALUES ('2101', 'objective', '186'); -INSERT INTO cp_node VALUES ('2102', 'mapInfo', '186'); -INSERT INTO cp_node VALUES ('2103', 'sequencing', '186'); -INSERT INTO cp_node VALUES ('2104', 'rule', '186'); -INSERT INTO cp_node VALUES ('2105', 'condition', '186'); -INSERT INTO cp_node VALUES ('2106', 'objective', '186'); -INSERT INTO cp_node VALUES ('2107', 'mapInfo', '186'); -INSERT INTO cp_node VALUES ('2108', 'sequencing', '186'); -INSERT INTO cp_node VALUES ('2109', 'manifest', '187'); -INSERT INTO cp_node VALUES ('2110', 'organization', '187'); -INSERT INTO cp_node VALUES ('2111', 'item', '187'); -INSERT INTO cp_node VALUES ('2112', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2113', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2114', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2115', 'item', '187'); -INSERT INTO cp_node VALUES ('2116', 'item', '187'); -INSERT INTO cp_node VALUES ('2117', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2118', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2119', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2120', 'item', '187'); -INSERT INTO cp_node VALUES ('2121', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2122', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2123', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2124', 'item', '187'); -INSERT INTO cp_node VALUES ('2125', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2126', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2127', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2128', 'item', '187'); -INSERT INTO cp_node VALUES ('2129', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2130', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2131', 'hideLMSUI', '187'); -INSERT INTO cp_node VALUES ('2132', 'resource', '187'); -INSERT INTO cp_node VALUES ('2133', 'file', '187'); -INSERT INTO cp_node VALUES ('2134', 'dependency', '187'); -INSERT INTO cp_node VALUES ('2135', 'dependency', '187'); -INSERT INTO cp_node VALUES ('2136', 'dependency', '187'); -INSERT INTO cp_node VALUES ('2137', 'dependency', '187'); -INSERT INTO cp_node VALUES ('2138', 'dependency', '187'); -INSERT INTO cp_node VALUES ('2139', 'resource', '187'); -INSERT INTO cp_node VALUES ('2140', 'file', '187'); -INSERT INTO cp_node VALUES ('2141', 'resource', '187'); -INSERT INTO cp_node VALUES ('2142', 'file', '187'); -INSERT INTO cp_node VALUES ('2143', 'resource', '187'); -INSERT INTO cp_node VALUES ('2144', 'file', '187'); -INSERT INTO cp_node VALUES ('2145', 'resource', '187'); -INSERT INTO cp_node VALUES ('2146', 'file', '187'); -INSERT INTO cp_node VALUES ('2147', 'dependency', '187'); -INSERT INTO cp_node VALUES ('2148', 'resource', '187'); -INSERT INTO cp_node VALUES ('2149', 'file', '187'); -INSERT INTO cp_node VALUES ('2150', 'resource', '187'); -INSERT INTO cp_node VALUES ('2151', 'file', '187'); -INSERT INTO cp_node VALUES ('2152', 'sequencing', '187'); -INSERT INTO cp_node VALUES ('2153', 'objective', '187'); -INSERT INTO cp_node VALUES ('2154', 'mapInfo', '187'); -INSERT INTO cp_node VALUES ('2155', 'sequencing', '187'); -INSERT INTO cp_node VALUES ('2156', 'rule', '187'); -INSERT INTO cp_node VALUES ('2157', 'condition', '187'); -INSERT INTO cp_node VALUES ('2158', 'condition', '187'); -INSERT INTO cp_node VALUES ('2159', 'rule', '187'); -INSERT INTO cp_node VALUES ('2160', 'condition', '187'); -INSERT INTO cp_node VALUES ('2161', 'condition', '187'); -INSERT INTO cp_node VALUES ('2162', 'objective', '187'); -INSERT INTO cp_node VALUES ('2163', 'mapInfo', '187'); -INSERT INTO cp_node VALUES ('2164', 'sequencing', '187'); -INSERT INTO cp_node VALUES ('2165', 'manifest', '188'); -INSERT INTO cp_node VALUES ('2166', 'organization', '188'); -INSERT INTO cp_node VALUES ('2167', 'item', '188'); -INSERT INTO cp_node VALUES ('2168', 'hideLMSUI', '188'); -INSERT INTO cp_node VALUES ('2169', 'hideLMSUI', '188'); -INSERT INTO cp_node VALUES ('2170', 'hideLMSUI', '188'); -INSERT INTO cp_node VALUES ('2171', 'item', '188'); -INSERT INTO cp_node VALUES ('2172', 'hideLMSUI', '188'); -INSERT INTO cp_node VALUES ('2173', 'hideLMSUI', '188'); -INSERT INTO cp_node VALUES ('2174', 'hideLMSUI', '188'); -INSERT INTO cp_node VALUES ('2175', 'item', '188'); -INSERT INTO cp_node VALUES ('2176', 'hideLMSUI', '188'); -INSERT INTO cp_node VALUES ('2177', 'hideLMSUI', '188'); -INSERT INTO cp_node VALUES ('2178', 'hideLMSUI', '188'); -INSERT INTO cp_node VALUES ('2179', 'resource', '188'); -INSERT INTO cp_node VALUES ('2180', 'file', '188'); -INSERT INTO cp_node VALUES ('2181', 'dependency', '188'); -INSERT INTO cp_node VALUES ('2182', 'dependency', '188'); -INSERT INTO cp_node VALUES ('2183', 'dependency', '188'); -INSERT INTO cp_node VALUES ('2184', 'dependency', '188'); -INSERT INTO cp_node VALUES ('2185', 'dependency', '188'); -INSERT INTO cp_node VALUES ('2186', 'resource', '188'); -INSERT INTO cp_node VALUES ('2187', 'file', '188'); -INSERT INTO cp_node VALUES ('2188', 'resource', '188'); -INSERT INTO cp_node VALUES ('2189', 'file', '188'); -INSERT INTO cp_node VALUES ('2190', 'resource', '188'); -INSERT INTO cp_node VALUES ('2191', 'file', '188'); -INSERT INTO cp_node VALUES ('2192', 'resource', '188'); -INSERT INTO cp_node VALUES ('2193', 'file', '188'); -INSERT INTO cp_node VALUES ('2194', 'dependency', '188'); -INSERT INTO cp_node VALUES ('2195', 'resource', '188'); -INSERT INTO cp_node VALUES ('2196', 'file', '188'); -INSERT INTO cp_node VALUES ('2197', 'resource', '188'); -INSERT INTO cp_node VALUES ('2198', 'file', '188'); -INSERT INTO cp_node VALUES ('2199', 'sequencing', '188'); -INSERT INTO cp_node VALUES ('2200', 'objective', '188'); -INSERT INTO cp_node VALUES ('2201', 'mapInfo', '188'); -INSERT INTO cp_node VALUES ('2202', 'sequencing', '188'); -INSERT INTO cp_node VALUES ('2203', 'rule', '188'); -INSERT INTO cp_node VALUES ('2204', 'condition', '188'); -INSERT INTO cp_node VALUES ('2205', 'condition', '188'); -INSERT INTO cp_node VALUES ('2206', 'objective', '188'); -INSERT INTO cp_node VALUES ('2207', 'mapInfo', '188'); -INSERT INTO cp_node VALUES ('2208', 'sequencing', '188'); -INSERT INTO cp_node VALUES ('2209', 'objective', '188'); -INSERT INTO cp_node VALUES ('2210', 'objective', '188'); -INSERT INTO cp_node VALUES ('2211', 'mapInfo', '188'); -INSERT INTO cp_node VALUES ('2212', 'sequencing', '188'); -INSERT INTO cp_node VALUES ('2213', 'manifest', '189'); -INSERT INTO cp_node VALUES ('2214', 'organization', '189'); -INSERT INTO cp_node VALUES ('2215', 'item', '189'); -INSERT INTO cp_node VALUES ('2216', 'hideLMSUI', '189'); -INSERT INTO cp_node VALUES ('2217', 'hideLMSUI', '189'); -INSERT INTO cp_node VALUES ('2218', 'hideLMSUI', '189'); -INSERT INTO cp_node VALUES ('2219', 'item', '189'); -INSERT INTO cp_node VALUES ('2220', 'hideLMSUI', '189'); -INSERT INTO cp_node VALUES ('2221', 'hideLMSUI', '189'); -INSERT INTO cp_node VALUES ('2222', 'hideLMSUI', '189'); -INSERT INTO cp_node VALUES ('2223', 'item', '189'); -INSERT INTO cp_node VALUES ('2224', 'hideLMSUI', '189'); -INSERT INTO cp_node VALUES ('2225', 'hideLMSUI', '189'); -INSERT INTO cp_node VALUES ('2226', 'hideLMSUI', '189'); -INSERT INTO cp_node VALUES ('2227', 'resource', '189'); -INSERT INTO cp_node VALUES ('2228', 'file', '189'); -INSERT INTO cp_node VALUES ('2229', 'dependency', '189'); -INSERT INTO cp_node VALUES ('2230', 'dependency', '189'); -INSERT INTO cp_node VALUES ('2231', 'dependency', '189'); -INSERT INTO cp_node VALUES ('2232', 'dependency', '189'); -INSERT INTO cp_node VALUES ('2233', 'dependency', '189'); -INSERT INTO cp_node VALUES ('2234', 'resource', '189'); -INSERT INTO cp_node VALUES ('2235', 'file', '189'); -INSERT INTO cp_node VALUES ('2236', 'resource', '189'); -INSERT INTO cp_node VALUES ('2237', 'file', '189'); -INSERT INTO cp_node VALUES ('2238', 'resource', '189'); -INSERT INTO cp_node VALUES ('2239', 'file', '189'); -INSERT INTO cp_node VALUES ('2240', 'resource', '189'); -INSERT INTO cp_node VALUES ('2241', 'file', '189'); -INSERT INTO cp_node VALUES ('2242', 'dependency', '189'); -INSERT INTO cp_node VALUES ('2243', 'resource', '189'); -INSERT INTO cp_node VALUES ('2244', 'file', '189'); -INSERT INTO cp_node VALUES ('2245', 'resource', '189'); -INSERT INTO cp_node VALUES ('2246', 'file', '189'); -INSERT INTO cp_node VALUES ('2247', 'sequencing', '189'); -INSERT INTO cp_node VALUES ('2248', 'objective', '189'); -INSERT INTO cp_node VALUES ('2249', 'mapInfo', '189'); -INSERT INTO cp_node VALUES ('2250', 'sequencing', '189'); -INSERT INTO cp_node VALUES ('2251', 'rule', '189'); -INSERT INTO cp_node VALUES ('2252', 'condition', '189'); -INSERT INTO cp_node VALUES ('2253', 'objective', '189'); -INSERT INTO cp_node VALUES ('2254', 'mapInfo', '189'); -INSERT INTO cp_node VALUES ('2255', 'sequencing', '189'); -INSERT INTO cp_node VALUES ('2256', 'objective', '189'); -INSERT INTO cp_node VALUES ('2257', 'objective', '189'); -INSERT INTO cp_node VALUES ('2258', 'mapInfo', '189'); -INSERT INTO cp_node VALUES ('2259', 'sequencing', '189'); -INSERT INTO cp_node VALUES ('2260', 'manifest', '190'); -INSERT INTO cp_node VALUES ('2261', 'organization', '190'); -INSERT INTO cp_node VALUES ('2262', 'item', '190'); -INSERT INTO cp_node VALUES ('2263', 'hideLMSUI', '190'); -INSERT INTO cp_node VALUES ('2264', 'hideLMSUI', '190'); -INSERT INTO cp_node VALUES ('2265', 'hideLMSUI', '190'); -INSERT INTO cp_node VALUES ('2266', 'item', '190'); -INSERT INTO cp_node VALUES ('2267', 'hideLMSUI', '190'); -INSERT INTO cp_node VALUES ('2268', 'hideLMSUI', '190'); -INSERT INTO cp_node VALUES ('2269', 'hideLMSUI', '190'); -INSERT INTO cp_node VALUES ('2270', 'item', '190'); -INSERT INTO cp_node VALUES ('2271', 'hideLMSUI', '190'); -INSERT INTO cp_node VALUES ('2272', 'hideLMSUI', '190'); -INSERT INTO cp_node VALUES ('2273', 'hideLMSUI', '190'); -INSERT INTO cp_node VALUES ('2274', 'item', '190'); -INSERT INTO cp_node VALUES ('2275', 'hideLMSUI', '190'); -INSERT INTO cp_node VALUES ('2276', 'hideLMSUI', '190'); -INSERT INTO cp_node VALUES ('2277', 'hideLMSUI', '190'); -INSERT INTO cp_node VALUES ('2278', 'resource', '190'); -INSERT INTO cp_node VALUES ('2279', 'file', '190'); -INSERT INTO cp_node VALUES ('2280', 'dependency', '190'); -INSERT INTO cp_node VALUES ('2281', 'dependency', '190'); -INSERT INTO cp_node VALUES ('2282', 'dependency', '190'); -INSERT INTO cp_node VALUES ('2283', 'dependency', '190'); -INSERT INTO cp_node VALUES ('2284', 'dependency', '190'); -INSERT INTO cp_node VALUES ('2285', 'resource', '190'); -INSERT INTO cp_node VALUES ('2286', 'file', '190'); -INSERT INTO cp_node VALUES ('2287', 'resource', '190'); -INSERT INTO cp_node VALUES ('2288', 'file', '190'); -INSERT INTO cp_node VALUES ('2289', 'resource', '190'); -INSERT INTO cp_node VALUES ('2290', 'file', '190'); -INSERT INTO cp_node VALUES ('2291', 'resource', '190'); -INSERT INTO cp_node VALUES ('2292', 'file', '190'); -INSERT INTO cp_node VALUES ('2293', 'dependency', '190'); -INSERT INTO cp_node VALUES ('2294', 'resource', '190'); -INSERT INTO cp_node VALUES ('2295', 'file', '190'); -INSERT INTO cp_node VALUES ('2296', 'resource', '190'); -INSERT INTO cp_node VALUES ('2297', 'file', '190'); -INSERT INTO cp_node VALUES ('2298', 'sequencing', '190'); -INSERT INTO cp_node VALUES ('2299', 'objective', '190'); -INSERT INTO cp_node VALUES ('2300', 'mapInfo', '190'); -INSERT INTO cp_node VALUES ('2301', 'sequencing', '190'); -INSERT INTO cp_node VALUES ('2302', 'rule', '190'); -INSERT INTO cp_node VALUES ('2303', 'condition', '190'); -INSERT INTO cp_node VALUES ('2304', 'rule', '190'); -INSERT INTO cp_node VALUES ('2305', 'condition', '190'); -INSERT INTO cp_node VALUES ('2306', 'objective', '190'); -INSERT INTO cp_node VALUES ('2307', 'mapInfo', '190'); -INSERT INTO cp_node VALUES ('2308', 'sequencing', '190'); -INSERT INTO cp_node VALUES ('2309', 'rule', '190'); -INSERT INTO cp_node VALUES ('2310', 'condition', '190'); -INSERT INTO cp_node VALUES ('2311', 'condition', '190'); -INSERT INTO cp_node VALUES ('2312', 'rule', '190'); -INSERT INTO cp_node VALUES ('2313', 'condition', '190'); -INSERT INTO cp_node VALUES ('2314', 'objective', '190'); -INSERT INTO cp_node VALUES ('2315', 'mapInfo', '190'); -INSERT INTO cp_node VALUES ('2316', 'sequencing', '190'); -INSERT INTO cp_node VALUES ('2317', 'rule', '190'); -INSERT INTO cp_node VALUES ('2318', 'condition', '190'); -INSERT INTO cp_node VALUES ('2319', 'rule', '190'); -INSERT INTO cp_node VALUES ('2320', 'condition', '190'); -INSERT INTO cp_node VALUES ('2321', 'objective', '190'); -INSERT INTO cp_node VALUES ('2322', 'mapInfo', '190'); -INSERT INTO cp_node VALUES ('2323', 'sequencing', '190'); -INSERT INTO cp_node VALUES ('2324', 'manifest', '191'); -INSERT INTO cp_node VALUES ('2325', 'organization', '191'); -INSERT INTO cp_node VALUES ('2326', 'item', '191'); -INSERT INTO cp_node VALUES ('2327', 'hideLMSUI', '191'); -INSERT INTO cp_node VALUES ('2328', 'hideLMSUI', '191'); -INSERT INTO cp_node VALUES ('2329', 'hideLMSUI', '191'); -INSERT INTO cp_node VALUES ('2330', 'item', '191'); -INSERT INTO cp_node VALUES ('2331', 'hideLMSUI', '191'); -INSERT INTO cp_node VALUES ('2332', 'hideLMSUI', '191'); -INSERT INTO cp_node VALUES ('2333', 'hideLMSUI', '191'); -INSERT INTO cp_node VALUES ('2334', 'item', '191'); -INSERT INTO cp_node VALUES ('2335', 'hideLMSUI', '191'); -INSERT INTO cp_node VALUES ('2336', 'hideLMSUI', '191'); -INSERT INTO cp_node VALUES ('2337', 'hideLMSUI', '191'); -INSERT INTO cp_node VALUES ('2338', 'item', '191'); -INSERT INTO cp_node VALUES ('2339', 'hideLMSUI', '191'); -INSERT INTO cp_node VALUES ('2340', 'hideLMSUI', '191'); -INSERT INTO cp_node VALUES ('2341', 'hideLMSUI', '191'); -INSERT INTO cp_node VALUES ('2342', 'resource', '191'); -INSERT INTO cp_node VALUES ('2343', 'file', '191'); -INSERT INTO cp_node VALUES ('2344', 'dependency', '191'); -INSERT INTO cp_node VALUES ('2345', 'dependency', '191'); -INSERT INTO cp_node VALUES ('2346', 'dependency', '191'); -INSERT INTO cp_node VALUES ('2347', 'dependency', '191'); -INSERT INTO cp_node VALUES ('2348', 'dependency', '191'); -INSERT INTO cp_node VALUES ('2349', 'resource', '191'); -INSERT INTO cp_node VALUES ('2350', 'file', '191'); -INSERT INTO cp_node VALUES ('2351', 'resource', '191'); -INSERT INTO cp_node VALUES ('2352', 'file', '191'); -INSERT INTO cp_node VALUES ('2353', 'resource', '191'); -INSERT INTO cp_node VALUES ('2354', 'file', '191'); -INSERT INTO cp_node VALUES ('2355', 'resource', '191'); -INSERT INTO cp_node VALUES ('2356', 'file', '191'); -INSERT INTO cp_node VALUES ('2357', 'dependency', '191'); -INSERT INTO cp_node VALUES ('2358', 'resource', '191'); -INSERT INTO cp_node VALUES ('2359', 'file', '191'); -INSERT INTO cp_node VALUES ('2360', 'resource', '191'); -INSERT INTO cp_node VALUES ('2361', 'file', '191'); -INSERT INTO cp_node VALUES ('2362', 'sequencing', '191'); -INSERT INTO cp_node VALUES ('2363', 'objective', '191'); -INSERT INTO cp_node VALUES ('2364', 'mapInfo', '191'); -INSERT INTO cp_node VALUES ('2365', 'sequencing', '191'); -INSERT INTO cp_node VALUES ('2366', 'rule', '191'); -INSERT INTO cp_node VALUES ('2367', 'condition', '191'); -INSERT INTO cp_node VALUES ('2368', 'rule', '191'); -INSERT INTO cp_node VALUES ('2369', 'condition', '191'); -INSERT INTO cp_node VALUES ('2370', 'objective', '191'); -INSERT INTO cp_node VALUES ('2371', 'mapInfo', '191'); -INSERT INTO cp_node VALUES ('2372', 'sequencing', '191'); -INSERT INTO cp_node VALUES ('2373', 'rule', '191'); -INSERT INTO cp_node VALUES ('2374', 'condition', '191'); -INSERT INTO cp_node VALUES ('2375', 'condition', '191'); -INSERT INTO cp_node VALUES ('2376', 'rule', '191'); -INSERT INTO cp_node VALUES ('2377', 'condition', '191'); -INSERT INTO cp_node VALUES ('2378', 'objective', '191'); -INSERT INTO cp_node VALUES ('2379', 'mapInfo', '191'); -INSERT INTO cp_node VALUES ('2380', 'sequencing', '191'); -INSERT INTO cp_node VALUES ('2381', 'rule', '191'); -INSERT INTO cp_node VALUES ('2382', 'condition', '191'); -INSERT INTO cp_node VALUES ('2383', 'rule', '191'); -INSERT INTO cp_node VALUES ('2384', 'condition', '191'); -INSERT INTO cp_node VALUES ('2385', 'objective', '191'); -INSERT INTO cp_node VALUES ('2386', 'mapInfo', '191'); -INSERT INTO cp_node VALUES ('2387', 'sequencing', '191'); -INSERT INTO cp_node VALUES ('2388', 'manifest', '192'); -INSERT INTO cp_node VALUES ('2389', 'organization', '192'); -INSERT INTO cp_node VALUES ('2390', 'item', '192'); -INSERT INTO cp_node VALUES ('2391', 'hideLMSUI', '192'); -INSERT INTO cp_node VALUES ('2392', 'hideLMSUI', '192'); -INSERT INTO cp_node VALUES ('2393', 'hideLMSUI', '192'); -INSERT INTO cp_node VALUES ('2394', 'item', '192'); -INSERT INTO cp_node VALUES ('2395', 'hideLMSUI', '192'); -INSERT INTO cp_node VALUES ('2396', 'hideLMSUI', '192'); -INSERT INTO cp_node VALUES ('2397', 'hideLMSUI', '192'); -INSERT INTO cp_node VALUES ('2398', 'item', '192'); -INSERT INTO cp_node VALUES ('2399', 'hideLMSUI', '192'); -INSERT INTO cp_node VALUES ('2400', 'hideLMSUI', '192'); -INSERT INTO cp_node VALUES ('2401', 'hideLMSUI', '192'); -INSERT INTO cp_node VALUES ('2402', 'resource', '192'); -INSERT INTO cp_node VALUES ('2403', 'file', '192'); -INSERT INTO cp_node VALUES ('2404', 'dependency', '192'); -INSERT INTO cp_node VALUES ('2405', 'dependency', '192'); -INSERT INTO cp_node VALUES ('2406', 'dependency', '192'); -INSERT INTO cp_node VALUES ('2407', 'dependency', '192'); -INSERT INTO cp_node VALUES ('2408', 'dependency', '192'); -INSERT INTO cp_node VALUES ('2409', 'resource', '192'); -INSERT INTO cp_node VALUES ('2410', 'file', '192'); -INSERT INTO cp_node VALUES ('2411', 'resource', '192'); -INSERT INTO cp_node VALUES ('2412', 'file', '192'); -INSERT INTO cp_node VALUES ('2413', 'resource', '192'); -INSERT INTO cp_node VALUES ('2414', 'file', '192'); -INSERT INTO cp_node VALUES ('2415', 'resource', '192'); -INSERT INTO cp_node VALUES ('2416', 'file', '192'); -INSERT INTO cp_node VALUES ('2417', 'dependency', '192'); -INSERT INTO cp_node VALUES ('2418', 'resource', '192'); -INSERT INTO cp_node VALUES ('2419', 'file', '192'); -INSERT INTO cp_node VALUES ('2420', 'resource', '192'); -INSERT INTO cp_node VALUES ('2421', 'file', '192'); -INSERT INTO cp_node VALUES ('2422', 'sequencing', '192'); -INSERT INTO cp_node VALUES ('2423', 'rule', '192'); -INSERT INTO cp_node VALUES ('2424', 'condition', '192'); -INSERT INTO cp_node VALUES ('2425', 'objective', '192'); -INSERT INTO cp_node VALUES ('2426', 'mapInfo', '192'); -INSERT INTO cp_node VALUES ('2427', 'sequencing', '192'); -INSERT INTO cp_node VALUES ('2428', 'rule', '192'); -INSERT INTO cp_node VALUES ('2429', 'condition', '192'); -INSERT INTO cp_node VALUES ('2430', 'objective', '192'); -INSERT INTO cp_node VALUES ('2431', 'mapInfo', '192'); -INSERT INTO cp_node VALUES ('2432', 'sequencing', '192'); -INSERT INTO cp_node VALUES ('2433', 'objective', '192'); -INSERT INTO cp_node VALUES ('2434', 'objective', '192'); -INSERT INTO cp_node VALUES ('2435', 'mapInfo', '192'); -INSERT INTO cp_node VALUES ('2436', 'objective', '192'); -INSERT INTO cp_node VALUES ('2437', 'mapInfo', '192'); -INSERT INTO cp_node VALUES ('2438', 'sequencing', '192'); -INSERT INTO cp_node VALUES ('2439', 'rule', '192'); -INSERT INTO cp_node VALUES ('2440', 'condition', '192'); -INSERT INTO cp_node VALUES ('2441', 'rule', '192'); -INSERT INTO cp_node VALUES ('2442', 'condition', '192'); -INSERT INTO cp_node VALUES ('2443', 'manifest', '193'); -INSERT INTO cp_node VALUES ('2444', 'organization', '193'); -INSERT INTO cp_node VALUES ('2445', 'item', '193'); -INSERT INTO cp_node VALUES ('2446', 'hideLMSUI', '193'); -INSERT INTO cp_node VALUES ('2447', 'hideLMSUI', '193'); -INSERT INTO cp_node VALUES ('2448', 'hideLMSUI', '193'); -INSERT INTO cp_node VALUES ('2449', 'item', '193'); -INSERT INTO cp_node VALUES ('2450', 'hideLMSUI', '193'); -INSERT INTO cp_node VALUES ('2451', 'hideLMSUI', '193'); -INSERT INTO cp_node VALUES ('2452', 'hideLMSUI', '193'); -INSERT INTO cp_node VALUES ('2453', 'item', '193'); -INSERT INTO cp_node VALUES ('2454', 'hideLMSUI', '193'); -INSERT INTO cp_node VALUES ('2455', 'hideLMSUI', '193'); -INSERT INTO cp_node VALUES ('2456', 'hideLMSUI', '193'); -INSERT INTO cp_node VALUES ('2457', 'resource', '193'); -INSERT INTO cp_node VALUES ('2458', 'file', '193'); -INSERT INTO cp_node VALUES ('2459', 'dependency', '193'); -INSERT INTO cp_node VALUES ('2460', 'dependency', '193'); -INSERT INTO cp_node VALUES ('2461', 'dependency', '193'); -INSERT INTO cp_node VALUES ('2462', 'dependency', '193'); -INSERT INTO cp_node VALUES ('2463', 'dependency', '193'); -INSERT INTO cp_node VALUES ('2464', 'resource', '193'); -INSERT INTO cp_node VALUES ('2465', 'file', '193'); -INSERT INTO cp_node VALUES ('2466', 'resource', '193'); -INSERT INTO cp_node VALUES ('2467', 'file', '193'); -INSERT INTO cp_node VALUES ('2468', 'resource', '193'); -INSERT INTO cp_node VALUES ('2469', 'file', '193'); -INSERT INTO cp_node VALUES ('2470', 'resource', '193'); -INSERT INTO cp_node VALUES ('2471', 'file', '193'); -INSERT INTO cp_node VALUES ('2472', 'dependency', '193'); -INSERT INTO cp_node VALUES ('2473', 'resource', '193'); -INSERT INTO cp_node VALUES ('2474', 'file', '193'); -INSERT INTO cp_node VALUES ('2475', 'resource', '193'); -INSERT INTO cp_node VALUES ('2476', 'file', '193'); -INSERT INTO cp_node VALUES ('2477', 'sequencing', '193'); -INSERT INTO cp_node VALUES ('2478', 'rule', '193'); -INSERT INTO cp_node VALUES ('2479', 'condition', '193'); -INSERT INTO cp_node VALUES ('2480', 'objective', '193'); -INSERT INTO cp_node VALUES ('2481', 'mapInfo', '193'); -INSERT INTO cp_node VALUES ('2482', 'sequencing', '193'); -INSERT INTO cp_node VALUES ('2483', 'rule', '193'); -INSERT INTO cp_node VALUES ('2484', 'condition', '193'); -INSERT INTO cp_node VALUES ('2485', 'objective', '193'); -INSERT INTO cp_node VALUES ('2486', 'mapInfo', '193'); -INSERT INTO cp_node VALUES ('2487', 'sequencing', '193'); -INSERT INTO cp_node VALUES ('2488', 'objective', '193'); -INSERT INTO cp_node VALUES ('2489', 'objective', '193'); -INSERT INTO cp_node VALUES ('2490', 'mapInfo', '193'); -INSERT INTO cp_node VALUES ('2491', 'objective', '193'); -INSERT INTO cp_node VALUES ('2492', 'mapInfo', '193'); -INSERT INTO cp_node VALUES ('2493', 'sequencing', '193'); -INSERT INTO cp_node VALUES ('2494', 'rule', '193'); -INSERT INTO cp_node VALUES ('2495', 'condition', '193'); -INSERT INTO cp_node VALUES ('2496', 'rule', '193'); -INSERT INTO cp_node VALUES ('2497', 'condition', '193'); -INSERT INTO cp_node VALUES ('2498', 'manifest', '194'); -INSERT INTO cp_node VALUES ('2499', 'organization', '194'); -INSERT INTO cp_node VALUES ('2500', 'item', '194'); -INSERT INTO cp_node VALUES ('2501', 'item', '194'); -INSERT INTO cp_node VALUES ('2502', 'item', '194'); -INSERT INTO cp_node VALUES ('2503', 'resource', '194'); -INSERT INTO cp_node VALUES ('2504', 'file', '194'); -INSERT INTO cp_node VALUES ('2505', 'dependency', '194'); -INSERT INTO cp_node VALUES ('2506', 'dependency', '194'); -INSERT INTO cp_node VALUES ('2507', 'dependency', '194'); -INSERT INTO cp_node VALUES ('2508', 'dependency', '194'); -INSERT INTO cp_node VALUES ('2509', 'dependency', '194'); -INSERT INTO cp_node VALUES ('2510', 'resource', '194'); -INSERT INTO cp_node VALUES ('2511', 'file', '194'); -INSERT INTO cp_node VALUES ('2512', 'resource', '194'); -INSERT INTO cp_node VALUES ('2513', 'file', '194'); -INSERT INTO cp_node VALUES ('2514', 'resource', '194'); -INSERT INTO cp_node VALUES ('2515', 'file', '194'); -INSERT INTO cp_node VALUES ('2516', 'resource', '194'); -INSERT INTO cp_node VALUES ('2517', 'file', '194'); -INSERT INTO cp_node VALUES ('2518', 'dependency', '194'); -INSERT INTO cp_node VALUES ('2519', 'resource', '194'); -INSERT INTO cp_node VALUES ('2520', 'file', '194'); -INSERT INTO cp_node VALUES ('2521', 'resource', '194'); -INSERT INTO cp_node VALUES ('2522', 'file', '194'); -INSERT INTO cp_node VALUES ('2523', 'sequencing', '194'); -INSERT INTO cp_node VALUES ('2524', 'objective', '194'); -INSERT INTO cp_node VALUES ('2525', 'mapInfo', '194'); -INSERT INTO cp_node VALUES ('2526', 'sequencing', '194'); -INSERT INTO cp_node VALUES ('2527', 'rule', '194'); -INSERT INTO cp_node VALUES ('2528', 'condition', '194'); -INSERT INTO cp_node VALUES ('2529', 'objective', '194'); -INSERT INTO cp_node VALUES ('2530', 'mapInfo', '194'); -INSERT INTO cp_node VALUES ('2531', 'sequencing', '194'); -INSERT INTO cp_node VALUES ('2532', 'objective', '194'); -INSERT INTO cp_node VALUES ('2533', 'mapInfo', '194'); -INSERT INTO cp_node VALUES ('2534', 'sequencing', '194'); -INSERT INTO cp_node VALUES ('2535', 'manifest', '195'); -INSERT INTO cp_node VALUES ('2536', 'organization', '195'); -INSERT INTO cp_node VALUES ('2537', 'item', '195'); -INSERT INTO cp_node VALUES ('2538', 'hideLMSUI', '195'); -INSERT INTO cp_node VALUES ('2539', 'hideLMSUI', '195'); -INSERT INTO cp_node VALUES ('2540', 'hideLMSUI', '195'); -INSERT INTO cp_node VALUES ('2541', 'item', '195'); -INSERT INTO cp_node VALUES ('2542', 'hideLMSUI', '195'); -INSERT INTO cp_node VALUES ('2543', 'hideLMSUI', '195'); -INSERT INTO cp_node VALUES ('2544', 'hideLMSUI', '195'); -INSERT INTO cp_node VALUES ('2545', 'item', '195'); -INSERT INTO cp_node VALUES ('2546', 'hideLMSUI', '195'); -INSERT INTO cp_node VALUES ('2547', 'hideLMSUI', '195'); -INSERT INTO cp_node VALUES ('2548', 'hideLMSUI', '195'); -INSERT INTO cp_node VALUES ('2549', 'resource', '195'); -INSERT INTO cp_node VALUES ('2550', 'file', '195'); -INSERT INTO cp_node VALUES ('2551', 'dependency', '195'); -INSERT INTO cp_node VALUES ('2552', 'dependency', '195'); -INSERT INTO cp_node VALUES ('2553', 'dependency', '195'); -INSERT INTO cp_node VALUES ('2554', 'dependency', '195'); -INSERT INTO cp_node VALUES ('2555', 'dependency', '195'); -INSERT INTO cp_node VALUES ('2556', 'resource', '195'); -INSERT INTO cp_node VALUES ('2557', 'file', '195'); -INSERT INTO cp_node VALUES ('2558', 'resource', '195'); -INSERT INTO cp_node VALUES ('2559', 'file', '195'); -INSERT INTO cp_node VALUES ('2560', 'resource', '195'); -INSERT INTO cp_node VALUES ('2561', 'file', '195'); -INSERT INTO cp_node VALUES ('2562', 'resource', '195'); -INSERT INTO cp_node VALUES ('2563', 'file', '195'); -INSERT INTO cp_node VALUES ('2564', 'dependency', '195'); -INSERT INTO cp_node VALUES ('2565', 'resource', '195'); -INSERT INTO cp_node VALUES ('2566', 'file', '195'); -INSERT INTO cp_node VALUES ('2567', 'resource', '195'); -INSERT INTO cp_node VALUES ('2568', 'file', '195'); -INSERT INTO cp_node VALUES ('2569', 'sequencing', '195'); -INSERT INTO cp_node VALUES ('2570', 'objective', '195'); -INSERT INTO cp_node VALUES ('2571', 'mapInfo', '195'); -INSERT INTO cp_node VALUES ('2572', 'sequencing', '195'); -INSERT INTO cp_node VALUES ('2573', 'rule', '195'); -INSERT INTO cp_node VALUES ('2574', 'condition', '195'); -INSERT INTO cp_node VALUES ('2575', 'objective', '195'); -INSERT INTO cp_node VALUES ('2576', 'mapInfo', '195'); -INSERT INTO cp_node VALUES ('2577', 'sequencing', '195'); -INSERT INTO cp_node VALUES ('2578', 'objective', '195'); -INSERT INTO cp_node VALUES ('2579', 'mapInfo', '195'); -INSERT INTO cp_node VALUES ('2580', 'sequencing', '195'); -INSERT INTO cp_node VALUES ('2581', 'manifest', '196'); -INSERT INTO cp_node VALUES ('2582', 'organization', '196'); -INSERT INTO cp_node VALUES ('2583', 'item', '196'); -INSERT INTO cp_node VALUES ('2584', 'hideLMSUI', '196'); -INSERT INTO cp_node VALUES ('2585', 'hideLMSUI', '196'); -INSERT INTO cp_node VALUES ('2586', 'hideLMSUI', '196'); -INSERT INTO cp_node VALUES ('2587', 'item', '196'); -INSERT INTO cp_node VALUES ('2588', 'hideLMSUI', '196'); -INSERT INTO cp_node VALUES ('2589', 'hideLMSUI', '196'); -INSERT INTO cp_node VALUES ('2590', 'hideLMSUI', '196'); -INSERT INTO cp_node VALUES ('2591', 'item', '196'); -INSERT INTO cp_node VALUES ('2592', 'hideLMSUI', '196'); -INSERT INTO cp_node VALUES ('2593', 'hideLMSUI', '196'); -INSERT INTO cp_node VALUES ('2594', 'hideLMSUI', '196'); -INSERT INTO cp_node VALUES ('2595', 'resource', '196'); -INSERT INTO cp_node VALUES ('2596', 'file', '196'); -INSERT INTO cp_node VALUES ('2597', 'dependency', '196'); -INSERT INTO cp_node VALUES ('2598', 'dependency', '196'); -INSERT INTO cp_node VALUES ('2599', 'dependency', '196'); -INSERT INTO cp_node VALUES ('2600', 'dependency', '196'); -INSERT INTO cp_node VALUES ('2601', 'dependency', '196'); -INSERT INTO cp_node VALUES ('2602', 'resource', '196'); -INSERT INTO cp_node VALUES ('2603', 'file', '196'); -INSERT INTO cp_node VALUES ('2604', 'resource', '196'); -INSERT INTO cp_node VALUES ('2605', 'file', '196'); -INSERT INTO cp_node VALUES ('2606', 'resource', '196'); -INSERT INTO cp_node VALUES ('2607', 'file', '196'); -INSERT INTO cp_node VALUES ('2608', 'resource', '196'); -INSERT INTO cp_node VALUES ('2609', 'file', '196'); -INSERT INTO cp_node VALUES ('2610', 'dependency', '196'); -INSERT INTO cp_node VALUES ('2611', 'resource', '196'); -INSERT INTO cp_node VALUES ('2612', 'file', '196'); -INSERT INTO cp_node VALUES ('2613', 'resource', '196'); -INSERT INTO cp_node VALUES ('2614', 'file', '196'); -INSERT INTO cp_node VALUES ('2615', 'sequencing', '196'); -INSERT INTO cp_node VALUES ('2616', 'objective', '196'); -INSERT INTO cp_node VALUES ('2617', 'mapInfo', '196'); -INSERT INTO cp_node VALUES ('2618', 'objective', '196'); -INSERT INTO cp_node VALUES ('2619', 'sequencing', '196'); -INSERT INTO cp_node VALUES ('2620', 'rule', '196'); -INSERT INTO cp_node VALUES ('2621', 'condition', '196'); -INSERT INTO cp_node VALUES ('2622', 'objective', '196'); -INSERT INTO cp_node VALUES ('2623', 'mapInfo', '196'); -INSERT INTO cp_node VALUES ('2624', 'sequencing', '196'); -INSERT INTO cp_node VALUES ('2625', 'objective', '196'); -INSERT INTO cp_node VALUES ('2626', 'mapInfo', '196'); -INSERT INTO cp_node VALUES ('2627', 'sequencing', '196'); -INSERT INTO cp_node VALUES ('2628', 'manifest', '197'); -INSERT INTO cp_node VALUES ('2629', 'organization', '197'); -INSERT INTO cp_node VALUES ('2630', 'item', '197'); -INSERT INTO cp_node VALUES ('2631', 'hideLMSUI', '197'); -INSERT INTO cp_node VALUES ('2632', 'hideLMSUI', '197'); -INSERT INTO cp_node VALUES ('2633', 'hideLMSUI', '197'); -INSERT INTO cp_node VALUES ('2634', 'item', '197'); -INSERT INTO cp_node VALUES ('2635', 'hideLMSUI', '197'); -INSERT INTO cp_node VALUES ('2636', 'hideLMSUI', '197'); -INSERT INTO cp_node VALUES ('2637', 'hideLMSUI', '197'); -INSERT INTO cp_node VALUES ('2638', 'item', '197'); -INSERT INTO cp_node VALUES ('2639', 'hideLMSUI', '197'); -INSERT INTO cp_node VALUES ('2640', 'hideLMSUI', '197'); -INSERT INTO cp_node VALUES ('2641', 'hideLMSUI', '197'); -INSERT INTO cp_node VALUES ('2642', 'resource', '197'); -INSERT INTO cp_node VALUES ('2643', 'file', '197'); -INSERT INTO cp_node VALUES ('2644', 'dependency', '197'); -INSERT INTO cp_node VALUES ('2645', 'dependency', '197'); -INSERT INTO cp_node VALUES ('2646', 'dependency', '197'); -INSERT INTO cp_node VALUES ('2647', 'dependency', '197'); -INSERT INTO cp_node VALUES ('2648', 'dependency', '197'); -INSERT INTO cp_node VALUES ('2649', 'resource', '197'); -INSERT INTO cp_node VALUES ('2650', 'file', '197'); -INSERT INTO cp_node VALUES ('2651', 'resource', '197'); -INSERT INTO cp_node VALUES ('2652', 'file', '197'); -INSERT INTO cp_node VALUES ('2653', 'resource', '197'); -INSERT INTO cp_node VALUES ('2654', 'file', '197'); -INSERT INTO cp_node VALUES ('2655', 'resource', '197'); -INSERT INTO cp_node VALUES ('2656', 'file', '197'); -INSERT INTO cp_node VALUES ('2657', 'dependency', '197'); -INSERT INTO cp_node VALUES ('2658', 'resource', '197'); -INSERT INTO cp_node VALUES ('2659', 'file', '197'); -INSERT INTO cp_node VALUES ('2660', 'resource', '197'); -INSERT INTO cp_node VALUES ('2661', 'file', '197'); -INSERT INTO cp_node VALUES ('2662', 'sequencing', '197'); -INSERT INTO cp_node VALUES ('2663', 'objective', '197'); -INSERT INTO cp_node VALUES ('2664', 'mapInfo', '197'); -INSERT INTO cp_node VALUES ('2665', 'objective', '197'); -INSERT INTO cp_node VALUES ('2666', 'objective', '197'); -INSERT INTO cp_node VALUES ('2667', 'objective', '197'); -INSERT INTO cp_node VALUES ('2668', 'sequencing', '197'); -INSERT INTO cp_node VALUES ('2669', 'rule', '197'); -INSERT INTO cp_node VALUES ('2670', 'condition', '197'); -INSERT INTO cp_node VALUES ('2671', 'objective', '197'); -INSERT INTO cp_node VALUES ('2672', 'mapInfo', '197'); -INSERT INTO cp_node VALUES ('2673', 'sequencing', '197'); -INSERT INTO cp_node VALUES ('2674', 'objective', '197'); -INSERT INTO cp_node VALUES ('2675', 'mapInfo', '197'); -INSERT INTO cp_node VALUES ('2676', 'sequencing', '197'); -INSERT INTO cp_node VALUES ('2677', 'manifest', '198'); -INSERT INTO cp_node VALUES ('2678', 'organization', '198'); -INSERT INTO cp_node VALUES ('2679', 'item', '198'); -INSERT INTO cp_node VALUES ('2680', 'hideLMSUI', '198'); -INSERT INTO cp_node VALUES ('2681', 'hideLMSUI', '198'); -INSERT INTO cp_node VALUES ('2682', 'hideLMSUI', '198'); -INSERT INTO cp_node VALUES ('2683', 'item', '198'); -INSERT INTO cp_node VALUES ('2684', 'hideLMSUI', '198'); -INSERT INTO cp_node VALUES ('2685', 'hideLMSUI', '198'); -INSERT INTO cp_node VALUES ('2686', 'hideLMSUI', '198'); -INSERT INTO cp_node VALUES ('2687', 'item', '198'); -INSERT INTO cp_node VALUES ('2688', 'hideLMSUI', '198'); -INSERT INTO cp_node VALUES ('2689', 'hideLMSUI', '198'); -INSERT INTO cp_node VALUES ('2690', 'hideLMSUI', '198'); -INSERT INTO cp_node VALUES ('2691', 'resource', '198'); -INSERT INTO cp_node VALUES ('2692', 'file', '198'); -INSERT INTO cp_node VALUES ('2693', 'dependency', '198'); -INSERT INTO cp_node VALUES ('2694', 'dependency', '198'); -INSERT INTO cp_node VALUES ('2695', 'dependency', '198'); -INSERT INTO cp_node VALUES ('2696', 'dependency', '198'); -INSERT INTO cp_node VALUES ('2697', 'dependency', '198'); -INSERT INTO cp_node VALUES ('2698', 'resource', '198'); -INSERT INTO cp_node VALUES ('2699', 'file', '198'); -INSERT INTO cp_node VALUES ('2700', 'resource', '198'); -INSERT INTO cp_node VALUES ('2701', 'file', '198'); -INSERT INTO cp_node VALUES ('2702', 'resource', '198'); -INSERT INTO cp_node VALUES ('2703', 'file', '198'); -INSERT INTO cp_node VALUES ('2704', 'resource', '198'); -INSERT INTO cp_node VALUES ('2705', 'file', '198'); -INSERT INTO cp_node VALUES ('2706', 'dependency', '198'); -INSERT INTO cp_node VALUES ('2707', 'resource', '198'); -INSERT INTO cp_node VALUES ('2708', 'file', '198'); -INSERT INTO cp_node VALUES ('2709', 'resource', '198'); -INSERT INTO cp_node VALUES ('2710', 'file', '198'); -INSERT INTO cp_node VALUES ('2711', 'sequencing', '198'); -INSERT INTO cp_node VALUES ('2712', 'objective', '198'); -INSERT INTO cp_node VALUES ('2713', 'objective', '198'); -INSERT INTO cp_node VALUES ('2714', 'mapInfo', '198'); -INSERT INTO cp_node VALUES ('2715', 'sequencing', '198'); -INSERT INTO cp_node VALUES ('2716', 'rule', '198'); -INSERT INTO cp_node VALUES ('2717', 'condition', '198'); -INSERT INTO cp_node VALUES ('2718', 'objective', '198'); -INSERT INTO cp_node VALUES ('2719', 'objective', '198'); -INSERT INTO cp_node VALUES ('2720', 'mapInfo', '198'); -INSERT INTO cp_node VALUES ('2721', 'sequencing', '198'); -INSERT INTO cp_node VALUES ('2722', 'objective', '198'); -INSERT INTO cp_node VALUES ('2723', 'objective', '198'); -INSERT INTO cp_node VALUES ('2724', 'mapInfo', '198'); -INSERT INTO cp_node VALUES ('2725', 'sequencing', '198'); -INSERT INTO cp_node VALUES ('2726', 'manifest', '199'); -INSERT INTO cp_node VALUES ('2727', 'organization', '199'); -INSERT INTO cp_node VALUES ('2728', 'item', '199'); -INSERT INTO cp_node VALUES ('2729', 'hideLMSUI', '199'); -INSERT INTO cp_node VALUES ('2730', 'hideLMSUI', '199'); -INSERT INTO cp_node VALUES ('2731', 'hideLMSUI', '199'); -INSERT INTO cp_node VALUES ('2732', 'item', '199'); -INSERT INTO cp_node VALUES ('2733', 'hideLMSUI', '199'); -INSERT INTO cp_node VALUES ('2734', 'hideLMSUI', '199'); -INSERT INTO cp_node VALUES ('2735', 'hideLMSUI', '199'); -INSERT INTO cp_node VALUES ('2736', 'item', '199'); -INSERT INTO cp_node VALUES ('2737', 'hideLMSUI', '199'); -INSERT INTO cp_node VALUES ('2738', 'hideLMSUI', '199'); -INSERT INTO cp_node VALUES ('2739', 'hideLMSUI', '199'); -INSERT INTO cp_node VALUES ('2740', 'resource', '199'); -INSERT INTO cp_node VALUES ('2741', 'file', '199'); -INSERT INTO cp_node VALUES ('2742', 'dependency', '199'); -INSERT INTO cp_node VALUES ('2743', 'dependency', '199'); -INSERT INTO cp_node VALUES ('2744', 'dependency', '199'); -INSERT INTO cp_node VALUES ('2745', 'dependency', '199'); -INSERT INTO cp_node VALUES ('2746', 'dependency', '199'); -INSERT INTO cp_node VALUES ('2747', 'resource', '199'); -INSERT INTO cp_node VALUES ('2748', 'file', '199'); -INSERT INTO cp_node VALUES ('2749', 'resource', '199'); -INSERT INTO cp_node VALUES ('2750', 'file', '199'); -INSERT INTO cp_node VALUES ('2751', 'resource', '199'); -INSERT INTO cp_node VALUES ('2752', 'file', '199'); -INSERT INTO cp_node VALUES ('2753', 'resource', '199'); -INSERT INTO cp_node VALUES ('2754', 'file', '199'); -INSERT INTO cp_node VALUES ('2755', 'dependency', '199'); -INSERT INTO cp_node VALUES ('2756', 'resource', '199'); -INSERT INTO cp_node VALUES ('2757', 'file', '199'); -INSERT INTO cp_node VALUES ('2758', 'resource', '199'); -INSERT INTO cp_node VALUES ('2759', 'file', '199'); -INSERT INTO cp_node VALUES ('2760', 'sequencing', '199'); -INSERT INTO cp_node VALUES ('2761', 'objective', '199'); -INSERT INTO cp_node VALUES ('2762', 'objective', '199'); -INSERT INTO cp_node VALUES ('2763', 'mapInfo', '199'); -INSERT INTO cp_node VALUES ('2764', 'objective', '199'); -INSERT INTO cp_node VALUES ('2765', 'objective', '199'); -INSERT INTO cp_node VALUES ('2766', 'sequencing', '199'); -INSERT INTO cp_node VALUES ('2767', 'rule', '199'); -INSERT INTO cp_node VALUES ('2768', 'condition', '199'); -INSERT INTO cp_node VALUES ('2769', 'objective', '199'); -INSERT INTO cp_node VALUES ('2770', 'objective', '199'); -INSERT INTO cp_node VALUES ('2771', 'mapInfo', '199'); -INSERT INTO cp_node VALUES ('2772', 'sequencing', '199'); -INSERT INTO cp_node VALUES ('2773', 'objective', '199'); -INSERT INTO cp_node VALUES ('2774', 'objective', '199'); -INSERT INTO cp_node VALUES ('2775', 'mapInfo', '199'); -INSERT INTO cp_node VALUES ('2776', 'sequencing', '199'); -INSERT INTO cp_node VALUES ('2777', 'manifest', '200'); -INSERT INTO cp_node VALUES ('2778', 'organization', '200'); -INSERT INTO cp_node VALUES ('2779', 'item', '200'); -INSERT INTO cp_node VALUES ('2780', 'hideLMSUI', '200'); -INSERT INTO cp_node VALUES ('2781', 'hideLMSUI', '200'); -INSERT INTO cp_node VALUES ('2782', 'hideLMSUI', '200'); -INSERT INTO cp_node VALUES ('2783', 'item', '200'); -INSERT INTO cp_node VALUES ('2784', 'hideLMSUI', '200'); -INSERT INTO cp_node VALUES ('2785', 'hideLMSUI', '200'); -INSERT INTO cp_node VALUES ('2786', 'hideLMSUI', '200'); -INSERT INTO cp_node VALUES ('2787', 'item', '200'); -INSERT INTO cp_node VALUES ('2788', 'hideLMSUI', '200'); -INSERT INTO cp_node VALUES ('2789', 'hideLMSUI', '200'); -INSERT INTO cp_node VALUES ('2790', 'hideLMSUI', '200'); -INSERT INTO cp_node VALUES ('2791', 'resource', '200'); -INSERT INTO cp_node VALUES ('2792', 'file', '200'); -INSERT INTO cp_node VALUES ('2793', 'dependency', '200'); -INSERT INTO cp_node VALUES ('2794', 'dependency', '200'); -INSERT INTO cp_node VALUES ('2795', 'dependency', '200'); -INSERT INTO cp_node VALUES ('2796', 'dependency', '200'); -INSERT INTO cp_node VALUES ('2797', 'dependency', '200'); -INSERT INTO cp_node VALUES ('2798', 'resource', '200'); -INSERT INTO cp_node VALUES ('2799', 'file', '200'); -INSERT INTO cp_node VALUES ('2800', 'resource', '200'); -INSERT INTO cp_node VALUES ('2801', 'file', '200'); -INSERT INTO cp_node VALUES ('2802', 'resource', '200'); -INSERT INTO cp_node VALUES ('2803', 'file', '200'); -INSERT INTO cp_node VALUES ('2804', 'resource', '200'); -INSERT INTO cp_node VALUES ('2805', 'file', '200'); -INSERT INTO cp_node VALUES ('2806', 'dependency', '200'); -INSERT INTO cp_node VALUES ('2807', 'resource', '200'); -INSERT INTO cp_node VALUES ('2808', 'file', '200'); -INSERT INTO cp_node VALUES ('2809', 'resource', '200'); -INSERT INTO cp_node VALUES ('2810', 'file', '200'); -INSERT INTO cp_node VALUES ('2811', 'sequencing', '200'); -INSERT INTO cp_node VALUES ('2812', 'rule', '200'); -INSERT INTO cp_node VALUES ('2813', 'condition', '200'); -INSERT INTO cp_node VALUES ('2814', 'condition', '200'); -INSERT INTO cp_node VALUES ('2815', 'objective', '200'); -INSERT INTO cp_node VALUES ('2816', 'objective', '200'); -INSERT INTO cp_node VALUES ('2817', 'sequencing', '200'); -INSERT INTO cp_node VALUES ('2818', 'manifest', '201'); -INSERT INTO cp_node VALUES ('2819', 'organization', '201'); -INSERT INTO cp_node VALUES ('2820', 'item', '201'); -INSERT INTO cp_node VALUES ('2821', 'hideLMSUI', '201'); -INSERT INTO cp_node VALUES ('2822', 'hideLMSUI', '201'); -INSERT INTO cp_node VALUES ('2823', 'hideLMSUI', '201'); -INSERT INTO cp_node VALUES ('2824', 'item', '201'); -INSERT INTO cp_node VALUES ('2825', 'hideLMSUI', '201'); -INSERT INTO cp_node VALUES ('2826', 'hideLMSUI', '201'); -INSERT INTO cp_node VALUES ('2827', 'hideLMSUI', '201'); -INSERT INTO cp_node VALUES ('2828', 'item', '201'); -INSERT INTO cp_node VALUES ('2829', 'hideLMSUI', '201'); -INSERT INTO cp_node VALUES ('2830', 'hideLMSUI', '201'); -INSERT INTO cp_node VALUES ('2831', 'hideLMSUI', '201'); -INSERT INTO cp_node VALUES ('2832', 'resource', '201'); -INSERT INTO cp_node VALUES ('2833', 'file', '201'); -INSERT INTO cp_node VALUES ('2834', 'dependency', '201'); -INSERT INTO cp_node VALUES ('2835', 'dependency', '201'); -INSERT INTO cp_node VALUES ('2836', 'dependency', '201'); -INSERT INTO cp_node VALUES ('2837', 'dependency', '201'); -INSERT INTO cp_node VALUES ('2838', 'dependency', '201'); -INSERT INTO cp_node VALUES ('2839', 'resource', '201'); -INSERT INTO cp_node VALUES ('2840', 'file', '201'); -INSERT INTO cp_node VALUES ('2841', 'resource', '201'); -INSERT INTO cp_node VALUES ('2842', 'file', '201'); -INSERT INTO cp_node VALUES ('2843', 'resource', '201'); -INSERT INTO cp_node VALUES ('2844', 'file', '201'); -INSERT INTO cp_node VALUES ('2845', 'resource', '201'); -INSERT INTO cp_node VALUES ('2846', 'file', '201'); -INSERT INTO cp_node VALUES ('2847', 'dependency', '201'); -INSERT INTO cp_node VALUES ('2848', 'resource', '201'); -INSERT INTO cp_node VALUES ('2849', 'file', '201'); -INSERT INTO cp_node VALUES ('2850', 'resource', '201'); -INSERT INTO cp_node VALUES ('2851', 'file', '201'); -INSERT INTO cp_node VALUES ('2852', 'sequencing', '201'); -INSERT INTO cp_node VALUES ('2853', 'rule', '201'); -INSERT INTO cp_node VALUES ('2854', 'condition', '201'); -INSERT INTO cp_node VALUES ('2855', 'condition', '201'); -INSERT INTO cp_node VALUES ('2856', 'objective', '201'); -INSERT INTO cp_node VALUES ('2857', 'objective', '201'); -INSERT INTO cp_node VALUES ('2858', 'sequencing', '201'); -INSERT INTO cp_node VALUES ('2859', 'manifest', '202'); -INSERT INTO cp_node VALUES ('2860', 'organization', '202'); -INSERT INTO cp_node VALUES ('2861', 'item', '202'); -INSERT INTO cp_node VALUES ('2862', 'hideLMSUI', '202'); -INSERT INTO cp_node VALUES ('2863', 'hideLMSUI', '202'); -INSERT INTO cp_node VALUES ('2864', 'hideLMSUI', '202'); -INSERT INTO cp_node VALUES ('2865', 'item', '202'); -INSERT INTO cp_node VALUES ('2866', 'hideLMSUI', '202'); -INSERT INTO cp_node VALUES ('2867', 'hideLMSUI', '202'); -INSERT INTO cp_node VALUES ('2868', 'hideLMSUI', '202'); -INSERT INTO cp_node VALUES ('2869', 'item', '202'); -INSERT INTO cp_node VALUES ('2870', 'hideLMSUI', '202'); -INSERT INTO cp_node VALUES ('2871', 'hideLMSUI', '202'); -INSERT INTO cp_node VALUES ('2872', 'hideLMSUI', '202'); -INSERT INTO cp_node VALUES ('2873', 'resource', '202'); -INSERT INTO cp_node VALUES ('2874', 'file', '202'); -INSERT INTO cp_node VALUES ('2875', 'dependency', '202'); -INSERT INTO cp_node VALUES ('2876', 'dependency', '202'); -INSERT INTO cp_node VALUES ('2877', 'dependency', '202'); -INSERT INTO cp_node VALUES ('2878', 'dependency', '202'); -INSERT INTO cp_node VALUES ('2879', 'dependency', '202'); -INSERT INTO cp_node VALUES ('2880', 'resource', '202'); -INSERT INTO cp_node VALUES ('2881', 'file', '202'); -INSERT INTO cp_node VALUES ('2882', 'resource', '202'); -INSERT INTO cp_node VALUES ('2883', 'file', '202'); -INSERT INTO cp_node VALUES ('2884', 'resource', '202'); -INSERT INTO cp_node VALUES ('2885', 'file', '202'); -INSERT INTO cp_node VALUES ('2886', 'resource', '202'); -INSERT INTO cp_node VALUES ('2887', 'file', '202'); -INSERT INTO cp_node VALUES ('2888', 'dependency', '202'); -INSERT INTO cp_node VALUES ('2889', 'resource', '202'); -INSERT INTO cp_node VALUES ('2890', 'file', '202'); -INSERT INTO cp_node VALUES ('2891', 'resource', '202'); -INSERT INTO cp_node VALUES ('2892', 'file', '202'); -INSERT INTO cp_node VALUES ('2893', 'sequencing', '202'); -INSERT INTO cp_node VALUES ('2894', 'rule', '202'); -INSERT INTO cp_node VALUES ('2895', 'condition', '202'); -INSERT INTO cp_node VALUES ('2896', 'condition', '202'); -INSERT INTO cp_node VALUES ('2897', 'objective', '202'); -INSERT INTO cp_node VALUES ('2898', 'objective', '202'); -INSERT INTO cp_node VALUES ('2899', 'sequencing', '202'); -INSERT INTO cp_node VALUES ('2900', 'manifest', '203'); -INSERT INTO cp_node VALUES ('2901', 'organization', '203'); -INSERT INTO cp_node VALUES ('2902', 'item', '203'); -INSERT INTO cp_node VALUES ('2903', 'hideLMSUI', '203'); -INSERT INTO cp_node VALUES ('2904', 'hideLMSUI', '203'); -INSERT INTO cp_node VALUES ('2905', 'hideLMSUI', '203'); -INSERT INTO cp_node VALUES ('2906', 'item', '203'); -INSERT INTO cp_node VALUES ('2907', 'hideLMSUI', '203'); -INSERT INTO cp_node VALUES ('2908', 'hideLMSUI', '203'); -INSERT INTO cp_node VALUES ('2909', 'hideLMSUI', '203'); -INSERT INTO cp_node VALUES ('2910', 'item', '203'); -INSERT INTO cp_node VALUES ('2911', 'hideLMSUI', '203'); -INSERT INTO cp_node VALUES ('2912', 'hideLMSUI', '203'); -INSERT INTO cp_node VALUES ('2913', 'hideLMSUI', '203'); -INSERT INTO cp_node VALUES ('2914', 'item', '203'); -INSERT INTO cp_node VALUES ('2915', 'hideLMSUI', '203'); -INSERT INTO cp_node VALUES ('2916', 'hideLMSUI', '203'); -INSERT INTO cp_node VALUES ('2917', 'hideLMSUI', '203'); -INSERT INTO cp_node VALUES ('2918', 'resource', '203'); -INSERT INTO cp_node VALUES ('2919', 'file', '203'); -INSERT INTO cp_node VALUES ('2920', 'dependency', '203'); -INSERT INTO cp_node VALUES ('2921', 'dependency', '203'); -INSERT INTO cp_node VALUES ('2922', 'dependency', '203'); -INSERT INTO cp_node VALUES ('2923', 'dependency', '203'); -INSERT INTO cp_node VALUES ('2924', 'dependency', '203'); -INSERT INTO cp_node VALUES ('2925', 'resource', '203'); -INSERT INTO cp_node VALUES ('2926', 'file', '203'); -INSERT INTO cp_node VALUES ('2927', 'resource', '203'); -INSERT INTO cp_node VALUES ('2928', 'file', '203'); -INSERT INTO cp_node VALUES ('2929', 'resource', '203'); -INSERT INTO cp_node VALUES ('2930', 'file', '203'); -INSERT INTO cp_node VALUES ('2931', 'resource', '203'); -INSERT INTO cp_node VALUES ('2932', 'file', '203'); -INSERT INTO cp_node VALUES ('2933', 'dependency', '203'); -INSERT INTO cp_node VALUES ('2934', 'resource', '203'); -INSERT INTO cp_node VALUES ('2935', 'file', '203'); -INSERT INTO cp_node VALUES ('2936', 'resource', '203'); -INSERT INTO cp_node VALUES ('2937', 'file', '203'); -INSERT INTO cp_node VALUES ('2938', 'sequencing', '203'); -INSERT INTO cp_node VALUES ('2939', 'objective', '203'); -INSERT INTO cp_node VALUES ('2940', 'objective', '203'); -INSERT INTO cp_node VALUES ('2941', 'mapInfo', '203'); -INSERT INTO cp_node VALUES ('2942', 'sequencing', '203'); -INSERT INTO cp_node VALUES ('2943', 'rule', '203'); -INSERT INTO cp_node VALUES ('2944', 'condition', '203'); -INSERT INTO cp_node VALUES ('2945', 'condition', '203'); -INSERT INTO cp_node VALUES ('2946', 'objective', '203'); -INSERT INTO cp_node VALUES ('2947', 'objective', '203'); -INSERT INTO cp_node VALUES ('2948', 'mapInfo', '203'); -INSERT INTO cp_node VALUES ('2949', 'sequencing', '203'); -INSERT INTO cp_node VALUES ('2950', 'manifest', '204'); -INSERT INTO cp_node VALUES ('2951', 'organization', '204'); -INSERT INTO cp_node VALUES ('2952', 'item', '204'); -INSERT INTO cp_node VALUES ('2953', 'hideLMSUI', '204'); -INSERT INTO cp_node VALUES ('2954', 'hideLMSUI', '204'); -INSERT INTO cp_node VALUES ('2955', 'hideLMSUI', '204'); -INSERT INTO cp_node VALUES ('2956', 'item', '204'); -INSERT INTO cp_node VALUES ('2957', 'hideLMSUI', '204'); -INSERT INTO cp_node VALUES ('2958', 'hideLMSUI', '204'); -INSERT INTO cp_node VALUES ('2959', 'hideLMSUI', '204'); -INSERT INTO cp_node VALUES ('2960', 'item', '204'); -INSERT INTO cp_node VALUES ('2961', 'hideLMSUI', '204'); -INSERT INTO cp_node VALUES ('2962', 'hideLMSUI', '204'); -INSERT INTO cp_node VALUES ('2963', 'hideLMSUI', '204'); -INSERT INTO cp_node VALUES ('2964', 'item', '204'); -INSERT INTO cp_node VALUES ('2965', 'hideLMSUI', '204'); -INSERT INTO cp_node VALUES ('2966', 'hideLMSUI', '204'); -INSERT INTO cp_node VALUES ('2967', 'hideLMSUI', '204'); -INSERT INTO cp_node VALUES ('2968', 'resource', '204'); -INSERT INTO cp_node VALUES ('2969', 'file', '204'); -INSERT INTO cp_node VALUES ('2970', 'dependency', '204'); -INSERT INTO cp_node VALUES ('2971', 'dependency', '204'); -INSERT INTO cp_node VALUES ('2972', 'dependency', '204'); -INSERT INTO cp_node VALUES ('2973', 'dependency', '204'); -INSERT INTO cp_node VALUES ('2974', 'dependency', '204'); -INSERT INTO cp_node VALUES ('2975', 'resource', '204'); -INSERT INTO cp_node VALUES ('2976', 'file', '204'); -INSERT INTO cp_node VALUES ('2977', 'resource', '204'); -INSERT INTO cp_node VALUES ('2978', 'file', '204'); -INSERT INTO cp_node VALUES ('2979', 'resource', '204'); -INSERT INTO cp_node VALUES ('2980', 'file', '204'); -INSERT INTO cp_node VALUES ('2981', 'resource', '204'); -INSERT INTO cp_node VALUES ('2982', 'file', '204'); -INSERT INTO cp_node VALUES ('2983', 'dependency', '204'); -INSERT INTO cp_node VALUES ('2984', 'resource', '204'); -INSERT INTO cp_node VALUES ('2985', 'file', '204'); -INSERT INTO cp_node VALUES ('2986', 'resource', '204'); -INSERT INTO cp_node VALUES ('2987', 'file', '204'); -INSERT INTO cp_node VALUES ('2988', 'sequencing', '204'); -INSERT INTO cp_node VALUES ('2989', 'objective', '204'); -INSERT INTO cp_node VALUES ('2990', 'objective', '204'); -INSERT INTO cp_node VALUES ('2991', 'mapInfo', '204'); -INSERT INTO cp_node VALUES ('2992', 'sequencing', '204'); -INSERT INTO cp_node VALUES ('2993', 'rule', '204'); -INSERT INTO cp_node VALUES ('2994', 'condition', '204'); -INSERT INTO cp_node VALUES ('2995', 'condition', '204'); -INSERT INTO cp_node VALUES ('2996', 'objective', '204'); -INSERT INTO cp_node VALUES ('2997', 'objective', '204'); -INSERT INTO cp_node VALUES ('2998', 'mapInfo', '204'); -INSERT INTO cp_node VALUES ('2999', 'sequencing', '204'); -INSERT INTO cp_node VALUES ('3000', 'manifest', '205'); -INSERT INTO cp_node VALUES ('3001', 'organization', '205'); -INSERT INTO cp_node VALUES ('3002', 'item', '205'); -INSERT INTO cp_node VALUES ('3003', 'hideLMSUI', '205'); -INSERT INTO cp_node VALUES ('3004', 'hideLMSUI', '205'); -INSERT INTO cp_node VALUES ('3005', 'hideLMSUI', '205'); -INSERT INTO cp_node VALUES ('3006', 'item', '205'); -INSERT INTO cp_node VALUES ('3007', 'hideLMSUI', '205'); -INSERT INTO cp_node VALUES ('3008', 'hideLMSUI', '205'); -INSERT INTO cp_node VALUES ('3009', 'hideLMSUI', '205'); -INSERT INTO cp_node VALUES ('3010', 'item', '205'); -INSERT INTO cp_node VALUES ('3011', 'hideLMSUI', '205'); -INSERT INTO cp_node VALUES ('3012', 'hideLMSUI', '205'); -INSERT INTO cp_node VALUES ('3013', 'hideLMSUI', '205'); -INSERT INTO cp_node VALUES ('3014', 'item', '205'); -INSERT INTO cp_node VALUES ('3015', 'hideLMSUI', '205'); -INSERT INTO cp_node VALUES ('3016', 'hideLMSUI', '205'); -INSERT INTO cp_node VALUES ('3017', 'hideLMSUI', '205'); -INSERT INTO cp_node VALUES ('3018', 'resource', '205'); -INSERT INTO cp_node VALUES ('3019', 'file', '205'); -INSERT INTO cp_node VALUES ('3020', 'dependency', '205'); -INSERT INTO cp_node VALUES ('3021', 'dependency', '205'); -INSERT INTO cp_node VALUES ('3022', 'dependency', '205'); -INSERT INTO cp_node VALUES ('3023', 'dependency', '205'); -INSERT INTO cp_node VALUES ('3024', 'dependency', '205'); -INSERT INTO cp_node VALUES ('3025', 'resource', '205'); -INSERT INTO cp_node VALUES ('3026', 'file', '205'); -INSERT INTO cp_node VALUES ('3027', 'resource', '205'); -INSERT INTO cp_node VALUES ('3028', 'file', '205'); -INSERT INTO cp_node VALUES ('3029', 'resource', '205'); -INSERT INTO cp_node VALUES ('3030', 'file', '205'); -INSERT INTO cp_node VALUES ('3031', 'resource', '205'); -INSERT INTO cp_node VALUES ('3032', 'file', '205'); -INSERT INTO cp_node VALUES ('3033', 'dependency', '205'); -INSERT INTO cp_node VALUES ('3034', 'resource', '205'); -INSERT INTO cp_node VALUES ('3035', 'file', '205'); -INSERT INTO cp_node VALUES ('3036', 'resource', '205'); -INSERT INTO cp_node VALUES ('3037', 'file', '205'); -INSERT INTO cp_node VALUES ('3038', 'sequencing', '205'); -INSERT INTO cp_node VALUES ('3039', 'objective', '205'); -INSERT INTO cp_node VALUES ('3040', 'objective', '205'); -INSERT INTO cp_node VALUES ('3041', 'mapInfo', '205'); -INSERT INTO cp_node VALUES ('3042', 'sequencing', '205'); -INSERT INTO cp_node VALUES ('3043', 'rule', '205'); -INSERT INTO cp_node VALUES ('3044', 'condition', '205'); -INSERT INTO cp_node VALUES ('3045', 'condition', '205'); -INSERT INTO cp_node VALUES ('3046', 'objective', '205'); -INSERT INTO cp_node VALUES ('3047', 'objective', '205'); -INSERT INTO cp_node VALUES ('3048', 'mapInfo', '205'); -INSERT INTO cp_node VALUES ('3049', 'sequencing', '205'); -INSERT INTO cp_node VALUES ('3050', 'manifest', '206'); -INSERT INTO cp_node VALUES ('3051', 'organization', '206'); -INSERT INTO cp_node VALUES ('3052', 'item', '206'); -INSERT INTO cp_node VALUES ('3053', 'hideLMSUI', '206'); -INSERT INTO cp_node VALUES ('3054', 'hideLMSUI', '206'); -INSERT INTO cp_node VALUES ('3055', 'hideLMSUI', '206'); -INSERT INTO cp_node VALUES ('3056', 'item', '206'); -INSERT INTO cp_node VALUES ('3057', 'hideLMSUI', '206'); -INSERT INTO cp_node VALUES ('3058', 'hideLMSUI', '206'); -INSERT INTO cp_node VALUES ('3059', 'hideLMSUI', '206'); -INSERT INTO cp_node VALUES ('3060', 'item', '206'); -INSERT INTO cp_node VALUES ('3061', 'hideLMSUI', '206'); -INSERT INTO cp_node VALUES ('3062', 'hideLMSUI', '206'); -INSERT INTO cp_node VALUES ('3063', 'hideLMSUI', '206'); -INSERT INTO cp_node VALUES ('3064', 'resource', '206'); -INSERT INTO cp_node VALUES ('3065', 'file', '206'); -INSERT INTO cp_node VALUES ('3066', 'dependency', '206'); -INSERT INTO cp_node VALUES ('3067', 'dependency', '206'); -INSERT INTO cp_node VALUES ('3068', 'dependency', '206'); -INSERT INTO cp_node VALUES ('3069', 'dependency', '206'); -INSERT INTO cp_node VALUES ('3070', 'dependency', '206'); -INSERT INTO cp_node VALUES ('3071', 'resource', '206'); -INSERT INTO cp_node VALUES ('3072', 'file', '206'); -INSERT INTO cp_node VALUES ('3073', 'resource', '206'); -INSERT INTO cp_node VALUES ('3074', 'file', '206'); -INSERT INTO cp_node VALUES ('3075', 'resource', '206'); -INSERT INTO cp_node VALUES ('3076', 'file', '206'); -INSERT INTO cp_node VALUES ('3077', 'resource', '206'); -INSERT INTO cp_node VALUES ('3078', 'file', '206'); -INSERT INTO cp_node VALUES ('3079', 'dependency', '206'); -INSERT INTO cp_node VALUES ('3080', 'resource', '206'); -INSERT INTO cp_node VALUES ('3081', 'file', '206'); -INSERT INTO cp_node VALUES ('3082', 'resource', '206'); -INSERT INTO cp_node VALUES ('3083', 'file', '206'); -INSERT INTO cp_node VALUES ('3084', 'sequencing', '206'); -INSERT INTO cp_node VALUES ('3085', 'objective', '206'); -INSERT INTO cp_node VALUES ('3086', 'objective', '206'); -INSERT INTO cp_node VALUES ('3087', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3088', 'objective', '206'); -INSERT INTO cp_node VALUES ('3089', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3090', 'objective', '206'); -INSERT INTO cp_node VALUES ('3091', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3092', 'objective', '206'); -INSERT INTO cp_node VALUES ('3093', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3094', 'sequencing', '206'); -INSERT INTO cp_node VALUES ('3095', 'objective', '206'); -INSERT INTO cp_node VALUES ('3096', 'objective', '206'); -INSERT INTO cp_node VALUES ('3097', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3098', 'objective', '206'); -INSERT INTO cp_node VALUES ('3099', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3100', 'objective', '206'); -INSERT INTO cp_node VALUES ('3101', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3102', 'objective', '206'); -INSERT INTO cp_node VALUES ('3103', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3104', 'objective', '206'); -INSERT INTO cp_node VALUES ('3105', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3106', 'sequencing', '206'); -INSERT INTO cp_node VALUES ('3107', 'objective', '206'); -INSERT INTO cp_node VALUES ('3108', 'objective', '206'); -INSERT INTO cp_node VALUES ('3109', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3110', 'objective', '206'); -INSERT INTO cp_node VALUES ('3111', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3112', 'objective', '206'); -INSERT INTO cp_node VALUES ('3113', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3114', 'objective', '206'); -INSERT INTO cp_node VALUES ('3115', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3116', 'objective', '206'); -INSERT INTO cp_node VALUES ('3117', 'mapInfo', '206'); -INSERT INTO cp_node VALUES ('3118', 'sequencing', '206'); -INSERT INTO cp_node VALUES ('3119', 'manifest', '207'); -INSERT INTO cp_node VALUES ('3120', 'organization', '207'); -INSERT INTO cp_node VALUES ('3121', 'item', '207'); -INSERT INTO cp_node VALUES ('3122', 'hideLMSUI', '207'); -INSERT INTO cp_node VALUES ('3123', 'hideLMSUI', '207'); -INSERT INTO cp_node VALUES ('3124', 'hideLMSUI', '207'); -INSERT INTO cp_node VALUES ('3125', 'item', '207'); -INSERT INTO cp_node VALUES ('3126', 'hideLMSUI', '207'); -INSERT INTO cp_node VALUES ('3127', 'hideLMSUI', '207'); -INSERT INTO cp_node VALUES ('3128', 'hideLMSUI', '207'); -INSERT INTO cp_node VALUES ('3129', 'item', '207'); -INSERT INTO cp_node VALUES ('3130', 'hideLMSUI', '207'); -INSERT INTO cp_node VALUES ('3131', 'hideLMSUI', '207'); -INSERT INTO cp_node VALUES ('3132', 'hideLMSUI', '207'); -INSERT INTO cp_node VALUES ('3133', 'item', '207'); -INSERT INTO cp_node VALUES ('3134', 'hideLMSUI', '207'); -INSERT INTO cp_node VALUES ('3135', 'hideLMSUI', '207'); -INSERT INTO cp_node VALUES ('3136', 'hideLMSUI', '207'); -INSERT INTO cp_node VALUES ('3137', 'resource', '207'); -INSERT INTO cp_node VALUES ('3138', 'file', '207'); -INSERT INTO cp_node VALUES ('3139', 'dependency', '207'); -INSERT INTO cp_node VALUES ('3140', 'dependency', '207'); -INSERT INTO cp_node VALUES ('3141', 'dependency', '207'); -INSERT INTO cp_node VALUES ('3142', 'dependency', '207'); -INSERT INTO cp_node VALUES ('3143', 'dependency', '207'); -INSERT INTO cp_node VALUES ('3144', 'resource', '207'); -INSERT INTO cp_node VALUES ('3145', 'file', '207'); -INSERT INTO cp_node VALUES ('3146', 'resource', '207'); -INSERT INTO cp_node VALUES ('3147', 'file', '207'); -INSERT INTO cp_node VALUES ('3148', 'resource', '207'); -INSERT INTO cp_node VALUES ('3149', 'file', '207'); -INSERT INTO cp_node VALUES ('3150', 'resource', '207'); -INSERT INTO cp_node VALUES ('3151', 'file', '207'); -INSERT INTO cp_node VALUES ('3152', 'dependency', '207'); -INSERT INTO cp_node VALUES ('3153', 'resource', '207'); -INSERT INTO cp_node VALUES ('3154', 'file', '207'); -INSERT INTO cp_node VALUES ('3155', 'resource', '207'); -INSERT INTO cp_node VALUES ('3156', 'file', '207'); -INSERT INTO cp_node VALUES ('3157', 'sequencing', '207'); -INSERT INTO cp_node VALUES ('3158', 'objective', '207'); -INSERT INTO cp_node VALUES ('3159', 'objective', '207'); -INSERT INTO cp_node VALUES ('3160', 'objective', '207'); -INSERT INTO cp_node VALUES ('3161', 'objective', '207'); -INSERT INTO cp_node VALUES ('3162', 'objective', '207'); -INSERT INTO cp_node VALUES ('3163', 'objective', '207'); -INSERT INTO cp_node VALUES ('3164', 'mapInfo', '207'); -INSERT INTO cp_node VALUES ('3165', 'objective', '207'); -INSERT INTO cp_node VALUES ('3166', 'mapInfo', '207'); -INSERT INTO cp_node VALUES ('3167', 'sequencing', '207'); -INSERT INTO cp_node VALUES ('3168', 'objective', '207'); -INSERT INTO cp_node VALUES ('3169', 'mapInfo', '207'); -INSERT INTO cp_node VALUES ('3170', 'objective', '207'); -INSERT INTO cp_node VALUES ('3171', 'objective', '207'); -INSERT INTO cp_node VALUES ('3172', 'objective', '207'); -INSERT INTO cp_node VALUES ('3173', 'objective', '207'); -INSERT INTO cp_node VALUES ('3174', 'mapInfo', '207'); -INSERT INTO cp_node VALUES ('3175', 'objective', '207'); -INSERT INTO cp_node VALUES ('3176', 'sequencing', '207'); -INSERT INTO cp_node VALUES ('3177', 'objective', '207'); -INSERT INTO cp_node VALUES ('3178', 'objective', '207'); -INSERT INTO cp_node VALUES ('3179', 'objective', '207'); -INSERT INTO cp_node VALUES ('3180', 'mapInfo', '207'); -INSERT INTO cp_node VALUES ('3181', 'objective', '207'); -INSERT INTO cp_node VALUES ('3182', 'mapInfo', '207'); -INSERT INTO cp_node VALUES ('3183', 'objective', '207'); -INSERT INTO cp_node VALUES ('3184', 'mapInfo', '207'); -INSERT INTO cp_node VALUES ('3185', 'objective', '207'); -INSERT INTO cp_node VALUES ('3186', 'sequencing', '207'); -INSERT INTO cp_node VALUES ('3187', 'objective', '207'); -INSERT INTO cp_node VALUES ('3188', 'objective', '207'); -INSERT INTO cp_node VALUES ('3189', 'mapInfo', '207'); -INSERT INTO cp_node VALUES ('3190', 'mapInfo', '207'); -INSERT INTO cp_node VALUES ('3191', 'objective', '207'); -INSERT INTO cp_node VALUES ('3192', 'mapInfo', '207'); -INSERT INTO cp_node VALUES ('3193', 'sequencing', '207'); -INSERT INTO cp_node VALUES ('3194', 'manifest', '208'); -INSERT INTO cp_node VALUES ('3195', 'organization', '208'); -INSERT INTO cp_node VALUES ('3196', 'item', '208'); -INSERT INTO cp_node VALUES ('3197', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3198', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3199', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3200', 'item', '208'); -INSERT INTO cp_node VALUES ('3201', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3202', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3203', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3204', 'item', '208'); -INSERT INTO cp_node VALUES ('3205', 'item', '208'); -INSERT INTO cp_node VALUES ('3206', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3207', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3208', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3209', 'item', '208'); -INSERT INTO cp_node VALUES ('3210', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3211', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3212', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3213', 'item', '208'); -INSERT INTO cp_node VALUES ('3214', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3215', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3216', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3217', 'item', '208'); -INSERT INTO cp_node VALUES ('3218', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3219', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3220', 'hideLMSUI', '208'); -INSERT INTO cp_node VALUES ('3221', 'resource', '208'); -INSERT INTO cp_node VALUES ('3222', 'file', '208'); -INSERT INTO cp_node VALUES ('3223', 'dependency', '208'); -INSERT INTO cp_node VALUES ('3224', 'dependency', '208'); -INSERT INTO cp_node VALUES ('3225', 'dependency', '208'); -INSERT INTO cp_node VALUES ('3226', 'dependency', '208'); -INSERT INTO cp_node VALUES ('3227', 'dependency', '208'); -INSERT INTO cp_node VALUES ('3228', 'resource', '208'); -INSERT INTO cp_node VALUES ('3229', 'file', '208'); -INSERT INTO cp_node VALUES ('3230', 'resource', '208'); -INSERT INTO cp_node VALUES ('3231', 'file', '208'); -INSERT INTO cp_node VALUES ('3232', 'resource', '208'); -INSERT INTO cp_node VALUES ('3233', 'file', '208'); -INSERT INTO cp_node VALUES ('3234', 'resource', '208'); -INSERT INTO cp_node VALUES ('3235', 'file', '208'); -INSERT INTO cp_node VALUES ('3236', 'dependency', '208'); -INSERT INTO cp_node VALUES ('3237', 'resource', '208'); -INSERT INTO cp_node VALUES ('3238', 'file', '208'); -INSERT INTO cp_node VALUES ('3239', 'resource', '208'); -INSERT INTO cp_node VALUES ('3240', 'file', '208'); -INSERT INTO cp_node VALUES ('3241', 'sequencing', '208'); -INSERT INTO cp_node VALUES ('3242', 'rule', '208'); -INSERT INTO cp_node VALUES ('3243', 'condition', '208'); -INSERT INTO cp_node VALUES ('3244', 'sequencing', '208'); -INSERT INTO cp_node VALUES ('3245', 'objective', '208'); -INSERT INTO cp_node VALUES ('3246', 'mapInfo', '208'); -INSERT INTO cp_node VALUES ('3247', 'sequencing', '208'); -INSERT INTO cp_node VALUES ('3248', 'objective', '208'); -INSERT INTO cp_node VALUES ('3249', 'mapInfo', '208'); -INSERT INTO cp_node VALUES ('3250', 'sequencing', '208'); -INSERT INTO cp_node VALUES ('3251', 'objective', '208'); -INSERT INTO cp_node VALUES ('3252', 'mapInfo', '208'); -INSERT INTO cp_node VALUES ('3253', 'sequencing', '208'); -INSERT INTO cp_node VALUES ('3254', 'rule', '208'); -INSERT INTO cp_node VALUES ('3255', 'condition', '208'); -INSERT INTO cp_node VALUES ('3256', 'rule', '208'); -INSERT INTO cp_node VALUES ('3257', 'condition', '208'); -INSERT INTO cp_node VALUES ('3258', 'sequencing', '208'); -INSERT INTO cp_node VALUES ('3259', 'rule', '208'); -INSERT INTO cp_node VALUES ('3260', 'condition', '208'); -INSERT INTO cp_node VALUES ('3261', 'rule', '208'); -INSERT INTO cp_node VALUES ('3262', 'condition', '208'); -INSERT INTO cp_node VALUES ('3263', 'objective', '208'); -INSERT INTO cp_node VALUES ('3264', 'mapInfo', '208'); -INSERT INTO cp_node VALUES ('3265', 'sequencing', '208'); -INSERT INTO cp_node VALUES ('3266', 'manifest', '209'); -INSERT INTO cp_node VALUES ('3267', 'organization', '209'); -INSERT INTO cp_node VALUES ('3268', 'item', '209'); -INSERT INTO cp_node VALUES ('3269', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3270', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3271', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3272', 'item', '209'); -INSERT INTO cp_node VALUES ('3273', 'item', '209'); -INSERT INTO cp_node VALUES ('3274', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3275', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3276', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3277', 'item', '209'); -INSERT INTO cp_node VALUES ('3278', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3279', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3280', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3281', 'item', '209'); -INSERT INTO cp_node VALUES ('3282', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3283', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3284', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3285', 'item', '209'); -INSERT INTO cp_node VALUES ('3286', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3287', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3288', 'hideLMSUI', '209'); -INSERT INTO cp_node VALUES ('3289', 'resource', '209'); -INSERT INTO cp_node VALUES ('3290', 'file', '209'); -INSERT INTO cp_node VALUES ('3291', 'dependency', '209'); -INSERT INTO cp_node VALUES ('3292', 'dependency', '209'); -INSERT INTO cp_node VALUES ('3293', 'dependency', '209'); -INSERT INTO cp_node VALUES ('3294', 'dependency', '209'); -INSERT INTO cp_node VALUES ('3295', 'dependency', '209'); -INSERT INTO cp_node VALUES ('3296', 'resource', '209'); -INSERT INTO cp_node VALUES ('3297', 'file', '209'); -INSERT INTO cp_node VALUES ('3298', 'resource', '209'); -INSERT INTO cp_node VALUES ('3299', 'file', '209'); -INSERT INTO cp_node VALUES ('3300', 'resource', '209'); -INSERT INTO cp_node VALUES ('3301', 'file', '209'); -INSERT INTO cp_node VALUES ('3302', 'resource', '209'); -INSERT INTO cp_node VALUES ('3303', 'file', '209'); -INSERT INTO cp_node VALUES ('3304', 'dependency', '209'); -INSERT INTO cp_node VALUES ('3305', 'resource', '209'); -INSERT INTO cp_node VALUES ('3306', 'file', '209'); -INSERT INTO cp_node VALUES ('3307', 'resource', '209'); -INSERT INTO cp_node VALUES ('3308', 'file', '209'); -INSERT INTO cp_node VALUES ('3309', 'sequencing', '209'); -INSERT INTO cp_node VALUES ('3310', 'rule', '209'); -INSERT INTO cp_node VALUES ('3311', 'condition', '209'); -INSERT INTO cp_node VALUES ('3312', 'rule', '209'); -INSERT INTO cp_node VALUES ('3313', 'condition', '209'); -INSERT INTO cp_node VALUES ('3314', 'sequencing', '209'); -INSERT INTO cp_node VALUES ('3315', 'manifest', '210'); -INSERT INTO cp_node VALUES ('3316', 'organization', '210'); -INSERT INTO cp_node VALUES ('3317', 'item', '210'); -INSERT INTO cp_node VALUES ('3318', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3319', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3320', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3321', 'item', '210'); -INSERT INTO cp_node VALUES ('3322', 'item', '210'); -INSERT INTO cp_node VALUES ('3323', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3324', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3325', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3326', 'item', '210'); -INSERT INTO cp_node VALUES ('3327', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3328', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3329', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3330', 'item', '210'); -INSERT INTO cp_node VALUES ('3331', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3332', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3333', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3334', 'item', '210'); -INSERT INTO cp_node VALUES ('3335', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3336', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3337', 'hideLMSUI', '210'); -INSERT INTO cp_node VALUES ('3338', 'resource', '210'); -INSERT INTO cp_node VALUES ('3339', 'file', '210'); -INSERT INTO cp_node VALUES ('3340', 'dependency', '210'); -INSERT INTO cp_node VALUES ('3341', 'dependency', '210'); -INSERT INTO cp_node VALUES ('3342', 'dependency', '210'); -INSERT INTO cp_node VALUES ('3343', 'dependency', '210'); -INSERT INTO cp_node VALUES ('3344', 'dependency', '210'); -INSERT INTO cp_node VALUES ('3345', 'resource', '210'); -INSERT INTO cp_node VALUES ('3346', 'file', '210'); -INSERT INTO cp_node VALUES ('3347', 'resource', '210'); -INSERT INTO cp_node VALUES ('3348', 'file', '210'); -INSERT INTO cp_node VALUES ('3349', 'resource', '210'); -INSERT INTO cp_node VALUES ('3350', 'file', '210'); -INSERT INTO cp_node VALUES ('3351', 'resource', '210'); -INSERT INTO cp_node VALUES ('3352', 'file', '210'); -INSERT INTO cp_node VALUES ('3353', 'dependency', '210'); -INSERT INTO cp_node VALUES ('3354', 'resource', '210'); -INSERT INTO cp_node VALUES ('3355', 'file', '210'); -INSERT INTO cp_node VALUES ('3356', 'resource', '210'); -INSERT INTO cp_node VALUES ('3357', 'file', '210'); -INSERT INTO cp_node VALUES ('3358', 'sequencing', '210'); -INSERT INTO cp_node VALUES ('3359', 'rule', '210'); -INSERT INTO cp_node VALUES ('3360', 'condition', '210'); -INSERT INTO cp_node VALUES ('3361', 'rule', '210'); -INSERT INTO cp_node VALUES ('3362', 'condition', '210'); -INSERT INTO cp_node VALUES ('3363', 'sequencing', '210'); -INSERT INTO cp_node VALUES ('3364', 'manifest', '211'); -INSERT INTO cp_node VALUES ('3365', 'organization', '211'); -INSERT INTO cp_node VALUES ('3366', 'item', '211'); -INSERT INTO cp_node VALUES ('3367', 'item', '211'); -INSERT INTO cp_node VALUES ('3368', 'item', '211'); -INSERT INTO cp_node VALUES ('3369', 'item', '211'); -INSERT INTO cp_node VALUES ('3370', 'item', '211'); -INSERT INTO cp_node VALUES ('3371', 'item', '211'); -INSERT INTO cp_node VALUES ('3372', 'resource', '211'); -INSERT INTO cp_node VALUES ('3373', 'file', '211'); -INSERT INTO cp_node VALUES ('3374', 'dependency', '211'); -INSERT INTO cp_node VALUES ('3375', 'dependency', '211'); -INSERT INTO cp_node VALUES ('3376', 'dependency', '211'); -INSERT INTO cp_node VALUES ('3377', 'dependency', '211'); -INSERT INTO cp_node VALUES ('3378', 'dependency', '211'); -INSERT INTO cp_node VALUES ('3379', 'resource', '211'); -INSERT INTO cp_node VALUES ('3380', 'file', '211'); -INSERT INTO cp_node VALUES ('3381', 'resource', '211'); -INSERT INTO cp_node VALUES ('3382', 'file', '211'); -INSERT INTO cp_node VALUES ('3383', 'resource', '211'); -INSERT INTO cp_node VALUES ('3384', 'file', '211'); -INSERT INTO cp_node VALUES ('3385', 'resource', '211'); -INSERT INTO cp_node VALUES ('3386', 'file', '211'); -INSERT INTO cp_node VALUES ('3387', 'dependency', '211'); -INSERT INTO cp_node VALUES ('3388', 'resource', '211'); -INSERT INTO cp_node VALUES ('3389', 'file', '211'); -INSERT INTO cp_node VALUES ('3390', 'resource', '211'); -INSERT INTO cp_node VALUES ('3391', 'file', '211'); -INSERT INTO cp_node VALUES ('3392', 'sequencing', '211'); -INSERT INTO cp_node VALUES ('3393', 'rule', '211'); -INSERT INTO cp_node VALUES ('3394', 'condition', '211'); -INSERT INTO cp_node VALUES ('3395', 'rule', '211'); -INSERT INTO cp_node VALUES ('3396', 'condition', '211'); -INSERT INTO cp_node VALUES ('3397', 'sequencing', '211'); -INSERT INTO cp_node VALUES ('3398', 'manifest', '212'); -INSERT INTO cp_node VALUES ('3399', 'organization', '212'); -INSERT INTO cp_node VALUES ('3400', 'item', '212'); -INSERT INTO cp_node VALUES ('3401', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3402', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3403', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3404', 'item', '212'); -INSERT INTO cp_node VALUES ('3405', 'item', '212'); -INSERT INTO cp_node VALUES ('3406', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3407', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3408', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3409', 'item', '212'); -INSERT INTO cp_node VALUES ('3410', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3411', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3412', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3413', 'item', '212'); -INSERT INTO cp_node VALUES ('3414', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3415', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3416', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3417', 'item', '212'); -INSERT INTO cp_node VALUES ('3418', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3419', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3420', 'hideLMSUI', '212'); -INSERT INTO cp_node VALUES ('3421', 'resource', '212'); -INSERT INTO cp_node VALUES ('3422', 'file', '212'); -INSERT INTO cp_node VALUES ('3423', 'dependency', '212'); -INSERT INTO cp_node VALUES ('3424', 'dependency', '212'); -INSERT INTO cp_node VALUES ('3425', 'dependency', '212'); -INSERT INTO cp_node VALUES ('3426', 'dependency', '212'); -INSERT INTO cp_node VALUES ('3427', 'dependency', '212'); -INSERT INTO cp_node VALUES ('3428', 'resource', '212'); -INSERT INTO cp_node VALUES ('3429', 'file', '212'); -INSERT INTO cp_node VALUES ('3430', 'resource', '212'); -INSERT INTO cp_node VALUES ('3431', 'file', '212'); -INSERT INTO cp_node VALUES ('3432', 'resource', '212'); -INSERT INTO cp_node VALUES ('3433', 'file', '212'); -INSERT INTO cp_node VALUES ('3434', 'resource', '212'); -INSERT INTO cp_node VALUES ('3435', 'file', '212'); -INSERT INTO cp_node VALUES ('3436', 'dependency', '212'); -INSERT INTO cp_node VALUES ('3437', 'resource', '212'); -INSERT INTO cp_node VALUES ('3438', 'file', '212'); -INSERT INTO cp_node VALUES ('3439', 'resource', '212'); -INSERT INTO cp_node VALUES ('3440', 'file', '212'); -INSERT INTO cp_node VALUES ('3441', 'sequencing', '212'); -INSERT INTO cp_node VALUES ('3442', 'rule', '212'); -INSERT INTO cp_node VALUES ('3443', 'condition', '212'); -INSERT INTO cp_node VALUES ('3444', 'rule', '212'); -INSERT INTO cp_node VALUES ('3445', 'condition', '212'); -INSERT INTO cp_node VALUES ('3446', 'sequencing', '212'); -INSERT INTO cp_node VALUES ('3447', 'manifest', '213'); -INSERT INTO cp_node VALUES ('3448', 'organization', '213'); -INSERT INTO cp_node VALUES ('3449', 'item', '213'); -INSERT INTO cp_node VALUES ('3450', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3451', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3452', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3453', 'item', '213'); -INSERT INTO cp_node VALUES ('3454', 'item', '213'); -INSERT INTO cp_node VALUES ('3455', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3456', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3457', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3458', 'item', '213'); -INSERT INTO cp_node VALUES ('3459', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3460', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3461', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3462', 'item', '213'); -INSERT INTO cp_node VALUES ('3463', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3464', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3465', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3466', 'item', '213'); -INSERT INTO cp_node VALUES ('3467', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3468', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3469', 'hideLMSUI', '213'); -INSERT INTO cp_node VALUES ('3470', 'resource', '213'); -INSERT INTO cp_node VALUES ('3471', 'file', '213'); -INSERT INTO cp_node VALUES ('3472', 'dependency', '213'); -INSERT INTO cp_node VALUES ('3473', 'dependency', '213'); -INSERT INTO cp_node VALUES ('3474', 'dependency', '213'); -INSERT INTO cp_node VALUES ('3475', 'dependency', '213'); -INSERT INTO cp_node VALUES ('3476', 'dependency', '213'); -INSERT INTO cp_node VALUES ('3477', 'resource', '213'); -INSERT INTO cp_node VALUES ('3478', 'file', '213'); -INSERT INTO cp_node VALUES ('3479', 'resource', '213'); -INSERT INTO cp_node VALUES ('3480', 'file', '213'); -INSERT INTO cp_node VALUES ('3481', 'resource', '213'); -INSERT INTO cp_node VALUES ('3482', 'file', '213'); -INSERT INTO cp_node VALUES ('3483', 'resource', '213'); -INSERT INTO cp_node VALUES ('3484', 'file', '213'); -INSERT INTO cp_node VALUES ('3485', 'dependency', '213'); -INSERT INTO cp_node VALUES ('3486', 'resource', '213'); -INSERT INTO cp_node VALUES ('3487', 'file', '213'); -INSERT INTO cp_node VALUES ('3488', 'resource', '213'); -INSERT INTO cp_node VALUES ('3489', 'file', '213'); -INSERT INTO cp_node VALUES ('3490', 'sequencing', '213'); -INSERT INTO cp_node VALUES ('3491', 'rule', '213'); -INSERT INTO cp_node VALUES ('3492', 'condition', '213'); -INSERT INTO cp_node VALUES ('3493', 'rule', '213'); -INSERT INTO cp_node VALUES ('3494', 'condition', '213'); -INSERT INTO cp_node VALUES ('3495', 'rule', '213'); -INSERT INTO cp_node VALUES ('3496', 'condition', '213'); -INSERT INTO cp_node VALUES ('3497', 'sequencing', '213'); -INSERT INTO cp_node VALUES ('3498', 'manifest', '214'); -INSERT INTO cp_node VALUES ('3499', 'organization', '214'); -INSERT INTO cp_node VALUES ('3500', 'item', '214'); -INSERT INTO cp_node VALUES ('3501', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3502', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3503', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3504', 'item', '214'); -INSERT INTO cp_node VALUES ('3505', 'item', '214'); -INSERT INTO cp_node VALUES ('3506', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3507', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3508', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3509', 'item', '214'); -INSERT INTO cp_node VALUES ('3510', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3511', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3512', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3513', 'item', '214'); -INSERT INTO cp_node VALUES ('3514', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3515', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3516', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3517', 'item', '214'); -INSERT INTO cp_node VALUES ('3518', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3519', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3520', 'hideLMSUI', '214'); -INSERT INTO cp_node VALUES ('3521', 'resource', '214'); -INSERT INTO cp_node VALUES ('3522', 'file', '214'); -INSERT INTO cp_node VALUES ('3523', 'dependency', '214'); -INSERT INTO cp_node VALUES ('3524', 'dependency', '214'); -INSERT INTO cp_node VALUES ('3525', 'dependency', '214'); -INSERT INTO cp_node VALUES ('3526', 'dependency', '214'); -INSERT INTO cp_node VALUES ('3527', 'dependency', '214'); -INSERT INTO cp_node VALUES ('3528', 'resource', '214'); -INSERT INTO cp_node VALUES ('3529', 'file', '214'); -INSERT INTO cp_node VALUES ('3530', 'resource', '214'); -INSERT INTO cp_node VALUES ('3531', 'file', '214'); -INSERT INTO cp_node VALUES ('3532', 'resource', '214'); -INSERT INTO cp_node VALUES ('3533', 'file', '214'); -INSERT INTO cp_node VALUES ('3534', 'resource', '214'); -INSERT INTO cp_node VALUES ('3535', 'file', '214'); -INSERT INTO cp_node VALUES ('3536', 'dependency', '214'); -INSERT INTO cp_node VALUES ('3537', 'resource', '214'); -INSERT INTO cp_node VALUES ('3538', 'file', '214'); -INSERT INTO cp_node VALUES ('3539', 'resource', '214'); -INSERT INTO cp_node VALUES ('3540', 'file', '214'); -INSERT INTO cp_node VALUES ('3541', 'sequencing', '214'); -INSERT INTO cp_node VALUES ('3542', 'rule', '214'); -INSERT INTO cp_node VALUES ('3543', 'condition', '214'); -INSERT INTO cp_node VALUES ('3544', 'rule', '214'); -INSERT INTO cp_node VALUES ('3545', 'condition', '214'); -INSERT INTO cp_node VALUES ('3546', 'rule', '214'); -INSERT INTO cp_node VALUES ('3547', 'condition', '214'); -INSERT INTO cp_node VALUES ('3548', 'sequencing', '214'); -INSERT INTO cp_node VALUES ('3549', 'manifest', '215'); -INSERT INTO cp_node VALUES ('3550', 'organization', '215'); -INSERT INTO cp_node VALUES ('3551', 'item', '215'); -INSERT INTO cp_node VALUES ('3552', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3553', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3554', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3555', 'item', '215'); -INSERT INTO cp_node VALUES ('3556', 'item', '215'); -INSERT INTO cp_node VALUES ('3557', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3558', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3559', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3560', 'item', '215'); -INSERT INTO cp_node VALUES ('3561', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3562', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3563', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3564', 'item', '215'); -INSERT INTO cp_node VALUES ('3565', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3566', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3567', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3568', 'item', '215'); -INSERT INTO cp_node VALUES ('3569', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3570', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3571', 'hideLMSUI', '215'); -INSERT INTO cp_node VALUES ('3572', 'resource', '215'); -INSERT INTO cp_node VALUES ('3573', 'file', '215'); -INSERT INTO cp_node VALUES ('3574', 'dependency', '215'); -INSERT INTO cp_node VALUES ('3575', 'dependency', '215'); -INSERT INTO cp_node VALUES ('3576', 'dependency', '215'); -INSERT INTO cp_node VALUES ('3577', 'dependency', '215'); -INSERT INTO cp_node VALUES ('3578', 'dependency', '215'); -INSERT INTO cp_node VALUES ('3579', 'resource', '215'); -INSERT INTO cp_node VALUES ('3580', 'file', '215'); -INSERT INTO cp_node VALUES ('3581', 'resource', '215'); -INSERT INTO cp_node VALUES ('3582', 'file', '215'); -INSERT INTO cp_node VALUES ('3583', 'resource', '215'); -INSERT INTO cp_node VALUES ('3584', 'file', '215'); -INSERT INTO cp_node VALUES ('3585', 'resource', '215'); -INSERT INTO cp_node VALUES ('3586', 'file', '215'); -INSERT INTO cp_node VALUES ('3587', 'dependency', '215'); -INSERT INTO cp_node VALUES ('3588', 'resource', '215'); -INSERT INTO cp_node VALUES ('3589', 'file', '215'); -INSERT INTO cp_node VALUES ('3590', 'resource', '215'); -INSERT INTO cp_node VALUES ('3591', 'file', '215'); -INSERT INTO cp_node VALUES ('3592', 'sequencing', '215'); -INSERT INTO cp_node VALUES ('3593', 'rule', '215'); -INSERT INTO cp_node VALUES ('3594', 'condition', '215'); -INSERT INTO cp_node VALUES ('3595', 'rule', '215'); -INSERT INTO cp_node VALUES ('3596', 'condition', '215'); -INSERT INTO cp_node VALUES ('3597', 'rule', '215'); -INSERT INTO cp_node VALUES ('3598', 'condition', '215'); -INSERT INTO cp_node VALUES ('3599', 'condition', '215'); -INSERT INTO cp_node VALUES ('3600', 'sequencing', '215'); -INSERT INTO cp_node VALUES ('3601', 'manifest', '216'); -INSERT INTO cp_node VALUES ('3602', 'organization', '216'); -INSERT INTO cp_node VALUES ('3603', 'item', '216'); -INSERT INTO cp_node VALUES ('3604', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3605', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3606', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3607', 'item', '216'); -INSERT INTO cp_node VALUES ('3608', 'item', '216'); -INSERT INTO cp_node VALUES ('3609', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3610', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3611', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3612', 'item', '216'); -INSERT INTO cp_node VALUES ('3613', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3614', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3615', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3616', 'item', '216'); -INSERT INTO cp_node VALUES ('3617', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3618', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3619', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3620', 'item', '216'); -INSERT INTO cp_node VALUES ('3621', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3622', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3623', 'hideLMSUI', '216'); -INSERT INTO cp_node VALUES ('3624', 'resource', '216'); -INSERT INTO cp_node VALUES ('3625', 'file', '216'); -INSERT INTO cp_node VALUES ('3626', 'dependency', '216'); -INSERT INTO cp_node VALUES ('3627', 'dependency', '216'); -INSERT INTO cp_node VALUES ('3628', 'dependency', '216'); -INSERT INTO cp_node VALUES ('3629', 'dependency', '216'); -INSERT INTO cp_node VALUES ('3630', 'dependency', '216'); -INSERT INTO cp_node VALUES ('3631', 'resource', '216'); -INSERT INTO cp_node VALUES ('3632', 'file', '216'); -INSERT INTO cp_node VALUES ('3633', 'resource', '216'); -INSERT INTO cp_node VALUES ('3634', 'file', '216'); -INSERT INTO cp_node VALUES ('3635', 'resource', '216'); -INSERT INTO cp_node VALUES ('3636', 'file', '216'); -INSERT INTO cp_node VALUES ('3637', 'resource', '216'); -INSERT INTO cp_node VALUES ('3638', 'file', '216'); -INSERT INTO cp_node VALUES ('3639', 'dependency', '216'); -INSERT INTO cp_node VALUES ('3640', 'resource', '216'); -INSERT INTO cp_node VALUES ('3641', 'file', '216'); -INSERT INTO cp_node VALUES ('3642', 'resource', '216'); -INSERT INTO cp_node VALUES ('3643', 'file', '216'); -INSERT INTO cp_node VALUES ('3644', 'sequencing', '216'); -INSERT INTO cp_node VALUES ('3645', 'rule', '216'); -INSERT INTO cp_node VALUES ('3646', 'condition', '216'); -INSERT INTO cp_node VALUES ('3647', 'rule', '216'); -INSERT INTO cp_node VALUES ('3648', 'condition', '216'); -INSERT INTO cp_node VALUES ('3649', 'rule', '216'); -INSERT INTO cp_node VALUES ('3650', 'condition', '216'); -INSERT INTO cp_node VALUES ('3651', 'condition', '216'); -INSERT INTO cp_node VALUES ('3652', 'sequencing', '216'); -INSERT INTO cp_node VALUES ('3653', 'manifest', '217'); -INSERT INTO cp_node VALUES ('3654', 'organization', '217'); -INSERT INTO cp_node VALUES ('3655', 'item', '217'); -INSERT INTO cp_node VALUES ('3656', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3657', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3658', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3659', 'item', '217'); -INSERT INTO cp_node VALUES ('3660', 'item', '217'); -INSERT INTO cp_node VALUES ('3661', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3662', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3663', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3664', 'item', '217'); -INSERT INTO cp_node VALUES ('3665', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3666', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3667', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3668', 'item', '217'); -INSERT INTO cp_node VALUES ('3669', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3670', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3671', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3672', 'item', '217'); -INSERT INTO cp_node VALUES ('3673', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3674', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3675', 'hideLMSUI', '217'); -INSERT INTO cp_node VALUES ('3676', 'resource', '217'); -INSERT INTO cp_node VALUES ('3677', 'file', '217'); -INSERT INTO cp_node VALUES ('3678', 'dependency', '217'); -INSERT INTO cp_node VALUES ('3679', 'dependency', '217'); -INSERT INTO cp_node VALUES ('3680', 'dependency', '217'); -INSERT INTO cp_node VALUES ('3681', 'dependency', '217'); -INSERT INTO cp_node VALUES ('3682', 'dependency', '217'); -INSERT INTO cp_node VALUES ('3683', 'resource', '217'); -INSERT INTO cp_node VALUES ('3684', 'file', '217'); -INSERT INTO cp_node VALUES ('3685', 'resource', '217'); -INSERT INTO cp_node VALUES ('3686', 'file', '217'); -INSERT INTO cp_node VALUES ('3687', 'resource', '217'); -INSERT INTO cp_node VALUES ('3688', 'file', '217'); -INSERT INTO cp_node VALUES ('3689', 'resource', '217'); -INSERT INTO cp_node VALUES ('3690', 'file', '217'); -INSERT INTO cp_node VALUES ('3691', 'dependency', '217'); -INSERT INTO cp_node VALUES ('3692', 'resource', '217'); -INSERT INTO cp_node VALUES ('3693', 'file', '217'); -INSERT INTO cp_node VALUES ('3694', 'resource', '217'); -INSERT INTO cp_node VALUES ('3695', 'file', '217'); -INSERT INTO cp_node VALUES ('3696', 'sequencing', '217'); -INSERT INTO cp_node VALUES ('3697', 'rule', '217'); -INSERT INTO cp_node VALUES ('3698', 'condition', '217'); -INSERT INTO cp_node VALUES ('3699', 'rule', '217'); -INSERT INTO cp_node VALUES ('3700', 'condition', '217'); -INSERT INTO cp_node VALUES ('3701', 'rule', '217'); -INSERT INTO cp_node VALUES ('3702', 'condition', '217'); -INSERT INTO cp_node VALUES ('3703', 'condition', '217'); -INSERT INTO cp_node VALUES ('3704', 'sequencing', '217'); -INSERT INTO cp_node VALUES ('3705', 'manifest', '218'); -INSERT INTO cp_node VALUES ('3706', 'organization', '218'); -INSERT INTO cp_node VALUES ('3707', 'item', '218'); -INSERT INTO cp_node VALUES ('3708', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3709', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3710', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3711', 'item', '218'); -INSERT INTO cp_node VALUES ('3712', 'item', '218'); -INSERT INTO cp_node VALUES ('3713', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3714', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3715', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3716', 'item', '218'); -INSERT INTO cp_node VALUES ('3717', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3718', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3719', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3720', 'item', '218'); -INSERT INTO cp_node VALUES ('3721', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3722', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3723', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3724', 'item', '218'); -INSERT INTO cp_node VALUES ('3725', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3726', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3727', 'hideLMSUI', '218'); -INSERT INTO cp_node VALUES ('3728', 'resource', '218'); -INSERT INTO cp_node VALUES ('3729', 'file', '218'); -INSERT INTO cp_node VALUES ('3730', 'dependency', '218'); -INSERT INTO cp_node VALUES ('3731', 'dependency', '218'); -INSERT INTO cp_node VALUES ('3732', 'dependency', '218'); -INSERT INTO cp_node VALUES ('3733', 'dependency', '218'); -INSERT INTO cp_node VALUES ('3734', 'dependency', '218'); -INSERT INTO cp_node VALUES ('3735', 'resource', '218'); -INSERT INTO cp_node VALUES ('3736', 'file', '218'); -INSERT INTO cp_node VALUES ('3737', 'resource', '218'); -INSERT INTO cp_node VALUES ('3738', 'file', '218'); -INSERT INTO cp_node VALUES ('3739', 'resource', '218'); -INSERT INTO cp_node VALUES ('3740', 'file', '218'); -INSERT INTO cp_node VALUES ('3741', 'resource', '218'); -INSERT INTO cp_node VALUES ('3742', 'file', '218'); -INSERT INTO cp_node VALUES ('3743', 'dependency', '218'); -INSERT INTO cp_node VALUES ('3744', 'resource', '218'); -INSERT INTO cp_node VALUES ('3745', 'file', '218'); -INSERT INTO cp_node VALUES ('3746', 'resource', '218'); -INSERT INTO cp_node VALUES ('3747', 'file', '218'); -INSERT INTO cp_node VALUES ('3748', 'sequencing', '218'); -INSERT INTO cp_node VALUES ('3749', 'rule', '218'); -INSERT INTO cp_node VALUES ('3750', 'condition', '218'); -INSERT INTO cp_node VALUES ('3751', 'rule', '218'); -INSERT INTO cp_node VALUES ('3752', 'condition', '218'); -INSERT INTO cp_node VALUES ('3753', 'rule', '218'); -INSERT INTO cp_node VALUES ('3754', 'condition', '218'); -INSERT INTO cp_node VALUES ('3755', 'condition', '218'); -INSERT INTO cp_node VALUES ('3756', 'sequencing', '218'); -INSERT INTO cp_node VALUES ('3757', 'manifest', '219'); -INSERT INTO cp_node VALUES ('3758', 'organization', '219'); -INSERT INTO cp_node VALUES ('3759', 'item', '219'); -INSERT INTO cp_node VALUES ('3760', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3761', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3762', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3763', 'item', '219'); -INSERT INTO cp_node VALUES ('3764', 'item', '219'); -INSERT INTO cp_node VALUES ('3765', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3766', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3767', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3768', 'item', '219'); -INSERT INTO cp_node VALUES ('3769', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3770', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3771', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3772', 'item', '219'); -INSERT INTO cp_node VALUES ('3773', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3774', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3775', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3776', 'item', '219'); -INSERT INTO cp_node VALUES ('3777', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3778', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3779', 'hideLMSUI', '219'); -INSERT INTO cp_node VALUES ('3780', 'resource', '219'); -INSERT INTO cp_node VALUES ('3781', 'file', '219'); -INSERT INTO cp_node VALUES ('3782', 'dependency', '219'); -INSERT INTO cp_node VALUES ('3783', 'dependency', '219'); -INSERT INTO cp_node VALUES ('3784', 'dependency', '219'); -INSERT INTO cp_node VALUES ('3785', 'dependency', '219'); -INSERT INTO cp_node VALUES ('3786', 'dependency', '219'); -INSERT INTO cp_node VALUES ('3787', 'resource', '219'); -INSERT INTO cp_node VALUES ('3788', 'file', '219'); -INSERT INTO cp_node VALUES ('3789', 'resource', '219'); -INSERT INTO cp_node VALUES ('3790', 'file', '219'); -INSERT INTO cp_node VALUES ('3791', 'resource', '219'); -INSERT INTO cp_node VALUES ('3792', 'file', '219'); -INSERT INTO cp_node VALUES ('3793', 'resource', '219'); -INSERT INTO cp_node VALUES ('3794', 'file', '219'); -INSERT INTO cp_node VALUES ('3795', 'dependency', '219'); -INSERT INTO cp_node VALUES ('3796', 'resource', '219'); -INSERT INTO cp_node VALUES ('3797', 'file', '219'); -INSERT INTO cp_node VALUES ('3798', 'resource', '219'); -INSERT INTO cp_node VALUES ('3799', 'file', '219'); -INSERT INTO cp_node VALUES ('3800', 'sequencing', '219'); -INSERT INTO cp_node VALUES ('3801', 'rule', '219'); -INSERT INTO cp_node VALUES ('3802', 'condition', '219'); -INSERT INTO cp_node VALUES ('3803', 'rule', '219'); -INSERT INTO cp_node VALUES ('3804', 'condition', '219'); -INSERT INTO cp_node VALUES ('3805', 'rule', '219'); -INSERT INTO cp_node VALUES ('3806', 'condition', '219'); -INSERT INTO cp_node VALUES ('3807', 'condition', '219'); -INSERT INTO cp_node VALUES ('3808', 'sequencing', '219'); -INSERT INTO cp_node VALUES ('3809', 'manifest', '220'); -INSERT INTO cp_node VALUES ('3810', 'organization', '220'); -INSERT INTO cp_node VALUES ('3811', 'item', '220'); -INSERT INTO cp_node VALUES ('3812', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3813', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3814', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3815', 'item', '220'); -INSERT INTO cp_node VALUES ('3816', 'item', '220'); -INSERT INTO cp_node VALUES ('3817', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3818', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3819', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3820', 'item', '220'); -INSERT INTO cp_node VALUES ('3821', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3822', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3823', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3824', 'item', '220'); -INSERT INTO cp_node VALUES ('3825', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3826', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3827', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3828', 'item', '220'); -INSERT INTO cp_node VALUES ('3829', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3830', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3831', 'hideLMSUI', '220'); -INSERT INTO cp_node VALUES ('3832', 'resource', '220'); -INSERT INTO cp_node VALUES ('3833', 'file', '220'); -INSERT INTO cp_node VALUES ('3834', 'dependency', '220'); -INSERT INTO cp_node VALUES ('3835', 'dependency', '220'); -INSERT INTO cp_node VALUES ('3836', 'dependency', '220'); -INSERT INTO cp_node VALUES ('3837', 'dependency', '220'); -INSERT INTO cp_node VALUES ('3838', 'dependency', '220'); -INSERT INTO cp_node VALUES ('3839', 'resource', '220'); -INSERT INTO cp_node VALUES ('3840', 'file', '220'); -INSERT INTO cp_node VALUES ('3841', 'resource', '220'); -INSERT INTO cp_node VALUES ('3842', 'file', '220'); -INSERT INTO cp_node VALUES ('3843', 'resource', '220'); -INSERT INTO cp_node VALUES ('3844', 'file', '220'); -INSERT INTO cp_node VALUES ('3845', 'resource', '220'); -INSERT INTO cp_node VALUES ('3846', 'file', '220'); -INSERT INTO cp_node VALUES ('3847', 'dependency', '220'); -INSERT INTO cp_node VALUES ('3848', 'resource', '220'); -INSERT INTO cp_node VALUES ('3849', 'file', '220'); -INSERT INTO cp_node VALUES ('3850', 'resource', '220'); -INSERT INTO cp_node VALUES ('3851', 'file', '220'); -INSERT INTO cp_node VALUES ('3852', 'sequencing', '220'); -INSERT INTO cp_node VALUES ('3853', 'rule', '220'); -INSERT INTO cp_node VALUES ('3854', 'condition', '220'); -INSERT INTO cp_node VALUES ('3855', 'rule', '220'); -INSERT INTO cp_node VALUES ('3856', 'condition', '220'); -INSERT INTO cp_node VALUES ('3857', 'rule', '220'); -INSERT INTO cp_node VALUES ('3858', 'condition', '220'); -INSERT INTO cp_node VALUES ('3859', 'condition', '220'); -INSERT INTO cp_node VALUES ('3860', 'sequencing', '220'); -INSERT INTO cp_node VALUES ('3861', 'manifest', '221'); -INSERT INTO cp_node VALUES ('3862', 'organization', '221'); -INSERT INTO cp_node VALUES ('3863', 'item', '221'); -INSERT INTO cp_node VALUES ('3864', 'item', '221'); -INSERT INTO cp_node VALUES ('3865', 'item', '221'); -INSERT INTO cp_node VALUES ('3866', 'item', '221'); -INSERT INTO cp_node VALUES ('3867', 'item', '221'); -INSERT INTO cp_node VALUES ('3868', 'item', '221'); -INSERT INTO cp_node VALUES ('3869', 'resource', '221'); -INSERT INTO cp_node VALUES ('3870', 'file', '221'); -INSERT INTO cp_node VALUES ('3871', 'dependency', '221'); -INSERT INTO cp_node VALUES ('3872', 'dependency', '221'); -INSERT INTO cp_node VALUES ('3873', 'dependency', '221'); -INSERT INTO cp_node VALUES ('3874', 'dependency', '221'); -INSERT INTO cp_node VALUES ('3875', 'dependency', '221'); -INSERT INTO cp_node VALUES ('3876', 'resource', '221'); -INSERT INTO cp_node VALUES ('3877', 'file', '221'); -INSERT INTO cp_node VALUES ('3878', 'resource', '221'); -INSERT INTO cp_node VALUES ('3879', 'file', '221'); -INSERT INTO cp_node VALUES ('3880', 'resource', '221'); -INSERT INTO cp_node VALUES ('3881', 'file', '221'); -INSERT INTO cp_node VALUES ('3882', 'resource', '221'); -INSERT INTO cp_node VALUES ('3883', 'file', '221'); -INSERT INTO cp_node VALUES ('3884', 'dependency', '221'); -INSERT INTO cp_node VALUES ('3885', 'resource', '221'); -INSERT INTO cp_node VALUES ('3886', 'file', '221'); -INSERT INTO cp_node VALUES ('3887', 'resource', '221'); -INSERT INTO cp_node VALUES ('3888', 'file', '221'); -INSERT INTO cp_node VALUES ('3889', 'sequencing', '221'); -INSERT INTO cp_node VALUES ('3890', 'rule', '221'); -INSERT INTO cp_node VALUES ('3891', 'condition', '221'); -INSERT INTO cp_node VALUES ('3892', 'rule', '221'); -INSERT INTO cp_node VALUES ('3893', 'condition', '221'); -INSERT INTO cp_node VALUES ('3894', 'rule', '221'); -INSERT INTO cp_node VALUES ('3895', 'condition', '221'); -INSERT INTO cp_node VALUES ('3896', 'condition', '221'); -INSERT INTO cp_node VALUES ('3897', 'sequencing', '221'); -INSERT INTO cp_node VALUES ('3898', 'manifest', '222'); -INSERT INTO cp_node VALUES ('3899', 'organization', '222'); -INSERT INTO cp_node VALUES ('3900', 'item', '222'); -INSERT INTO cp_node VALUES ('3901', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3902', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3903', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3904', 'item', '222'); -INSERT INTO cp_node VALUES ('3905', 'item', '222'); -INSERT INTO cp_node VALUES ('3906', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3907', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3908', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3909', 'item', '222'); -INSERT INTO cp_node VALUES ('3910', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3911', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3912', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3913', 'item', '222'); -INSERT INTO cp_node VALUES ('3914', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3915', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3916', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3917', 'item', '222'); -INSERT INTO cp_node VALUES ('3918', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3919', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3920', 'hideLMSUI', '222'); -INSERT INTO cp_node VALUES ('3921', 'resource', '222'); -INSERT INTO cp_node VALUES ('3922', 'file', '222'); -INSERT INTO cp_node VALUES ('3923', 'dependency', '222'); -INSERT INTO cp_node VALUES ('3924', 'dependency', '222'); -INSERT INTO cp_node VALUES ('3925', 'dependency', '222'); -INSERT INTO cp_node VALUES ('3926', 'dependency', '222'); -INSERT INTO cp_node VALUES ('3927', 'dependency', '222'); -INSERT INTO cp_node VALUES ('3928', 'resource', '222'); -INSERT INTO cp_node VALUES ('3929', 'file', '222'); -INSERT INTO cp_node VALUES ('3930', 'resource', '222'); -INSERT INTO cp_node VALUES ('3931', 'file', '222'); -INSERT INTO cp_node VALUES ('3932', 'resource', '222'); -INSERT INTO cp_node VALUES ('3933', 'file', '222'); -INSERT INTO cp_node VALUES ('3934', 'resource', '222'); -INSERT INTO cp_node VALUES ('3935', 'file', '222'); -INSERT INTO cp_node VALUES ('3936', 'dependency', '222'); -INSERT INTO cp_node VALUES ('3937', 'resource', '222'); -INSERT INTO cp_node VALUES ('3938', 'file', '222'); -INSERT INTO cp_node VALUES ('3939', 'resource', '222'); -INSERT INTO cp_node VALUES ('3940', 'file', '222'); -INSERT INTO cp_node VALUES ('3941', 'sequencing', '222'); -INSERT INTO cp_node VALUES ('3942', 'rule', '222'); -INSERT INTO cp_node VALUES ('3943', 'condition', '222'); -INSERT INTO cp_node VALUES ('3944', 'rule', '222'); -INSERT INTO cp_node VALUES ('3945', 'condition', '222'); -INSERT INTO cp_node VALUES ('3946', 'rule', '222'); -INSERT INTO cp_node VALUES ('3947', 'condition', '222'); -INSERT INTO cp_node VALUES ('3948', 'condition', '222'); -INSERT INTO cp_node VALUES ('3949', 'sequencing', '222'); -INSERT INTO cp_node VALUES ('3950', 'manifest', '223'); -INSERT INTO cp_node VALUES ('3951', 'organization', '223'); -INSERT INTO cp_node VALUES ('3952', 'item', '223'); -INSERT INTO cp_node VALUES ('3953', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3954', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3955', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3956', 'item', '223'); -INSERT INTO cp_node VALUES ('3957', 'item', '223'); -INSERT INTO cp_node VALUES ('3958', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3959', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3960', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3961', 'item', '223'); -INSERT INTO cp_node VALUES ('3962', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3963', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3964', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3965', 'item', '223'); -INSERT INTO cp_node VALUES ('3966', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3967', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3968', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3969', 'item', '223'); -INSERT INTO cp_node VALUES ('3970', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3971', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3972', 'hideLMSUI', '223'); -INSERT INTO cp_node VALUES ('3973', 'resource', '223'); -INSERT INTO cp_node VALUES ('3974', 'file', '223'); -INSERT INTO cp_node VALUES ('3975', 'dependency', '223'); -INSERT INTO cp_node VALUES ('3976', 'dependency', '223'); -INSERT INTO cp_node VALUES ('3977', 'dependency', '223'); -INSERT INTO cp_node VALUES ('3978', 'dependency', '223'); -INSERT INTO cp_node VALUES ('3979', 'dependency', '223'); -INSERT INTO cp_node VALUES ('3980', 'resource', '223'); -INSERT INTO cp_node VALUES ('3981', 'file', '223'); -INSERT INTO cp_node VALUES ('3982', 'resource', '223'); -INSERT INTO cp_node VALUES ('3983', 'file', '223'); -INSERT INTO cp_node VALUES ('3984', 'resource', '223'); -INSERT INTO cp_node VALUES ('3985', 'file', '223'); -INSERT INTO cp_node VALUES ('3986', 'resource', '223'); -INSERT INTO cp_node VALUES ('3987', 'file', '223'); -INSERT INTO cp_node VALUES ('3988', 'dependency', '223'); -INSERT INTO cp_node VALUES ('3989', 'resource', '223'); -INSERT INTO cp_node VALUES ('3990', 'file', '223'); -INSERT INTO cp_node VALUES ('3991', 'resource', '223'); -INSERT INTO cp_node VALUES ('3992', 'file', '223'); -INSERT INTO cp_node VALUES ('3993', 'sequencing', '223'); -INSERT INTO cp_node VALUES ('3994', 'rule', '223'); -INSERT INTO cp_node VALUES ('3995', 'condition', '223'); -INSERT INTO cp_node VALUES ('3996', 'rule', '223'); -INSERT INTO cp_node VALUES ('3997', 'condition', '223'); -INSERT INTO cp_node VALUES ('3998', 'rule', '223'); -INSERT INTO cp_node VALUES ('3999', 'condition', '223'); -INSERT INTO cp_node VALUES ('4000', 'sequencing', '223'); -INSERT INTO cp_node VALUES ('4001', 'manifest', '224'); -INSERT INTO cp_node VALUES ('4002', 'organization', '224'); -INSERT INTO cp_node VALUES ('4003', 'item', '224'); -INSERT INTO cp_node VALUES ('4004', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4005', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4006', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4007', 'item', '224'); -INSERT INTO cp_node VALUES ('4008', 'item', '224'); -INSERT INTO cp_node VALUES ('4009', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4010', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4011', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4012', 'item', '224'); -INSERT INTO cp_node VALUES ('4013', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4014', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4015', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4016', 'item', '224'); -INSERT INTO cp_node VALUES ('4017', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4018', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4019', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4020', 'item', '224'); -INSERT INTO cp_node VALUES ('4021', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4022', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4023', 'hideLMSUI', '224'); -INSERT INTO cp_node VALUES ('4024', 'resource', '224'); -INSERT INTO cp_node VALUES ('4025', 'file', '224'); -INSERT INTO cp_node VALUES ('4026', 'dependency', '224'); -INSERT INTO cp_node VALUES ('4027', 'dependency', '224'); -INSERT INTO cp_node VALUES ('4028', 'dependency', '224'); -INSERT INTO cp_node VALUES ('4029', 'dependency', '224'); -INSERT INTO cp_node VALUES ('4030', 'dependency', '224'); -INSERT INTO cp_node VALUES ('4031', 'resource', '224'); -INSERT INTO cp_node VALUES ('4032', 'file', '224'); -INSERT INTO cp_node VALUES ('4033', 'resource', '224'); -INSERT INTO cp_node VALUES ('4034', 'file', '224'); -INSERT INTO cp_node VALUES ('4035', 'resource', '224'); -INSERT INTO cp_node VALUES ('4036', 'file', '224'); -INSERT INTO cp_node VALUES ('4037', 'resource', '224'); -INSERT INTO cp_node VALUES ('4038', 'file', '224'); -INSERT INTO cp_node VALUES ('4039', 'dependency', '224'); -INSERT INTO cp_node VALUES ('4040', 'resource', '224'); -INSERT INTO cp_node VALUES ('4041', 'file', '224'); -INSERT INTO cp_node VALUES ('4042', 'resource', '224'); -INSERT INTO cp_node VALUES ('4043', 'file', '224'); -INSERT INTO cp_node VALUES ('4044', 'sequencing', '224'); -INSERT INTO cp_node VALUES ('4045', 'rule', '224'); -INSERT INTO cp_node VALUES ('4046', 'condition', '224'); -INSERT INTO cp_node VALUES ('4047', 'rule', '224'); -INSERT INTO cp_node VALUES ('4048', 'condition', '224'); -INSERT INTO cp_node VALUES ('4049', 'rule', '224'); -INSERT INTO cp_node VALUES ('4050', 'condition', '224'); -INSERT INTO cp_node VALUES ('4051', 'sequencing', '224'); -INSERT INTO cp_node VALUES ('4052', 'manifest', '225'); -INSERT INTO cp_node VALUES ('4053', 'organization', '225'); -INSERT INTO cp_node VALUES ('4054', 'item', '225'); -INSERT INTO cp_node VALUES ('4055', 'item', '225'); -INSERT INTO cp_node VALUES ('4056', 'hideLMSUI', '225'); -INSERT INTO cp_node VALUES ('4057', 'hideLMSUI', '225'); -INSERT INTO cp_node VALUES ('4058', 'hideLMSUI', '225'); -INSERT INTO cp_node VALUES ('4059', 'item', '225'); -INSERT INTO cp_node VALUES ('4060', 'hideLMSUI', '225'); -INSERT INTO cp_node VALUES ('4061', 'hideLMSUI', '225'); -INSERT INTO cp_node VALUES ('4062', 'hideLMSUI', '225'); -INSERT INTO cp_node VALUES ('4063', 'item', '225'); -INSERT INTO cp_node VALUES ('4064', 'hideLMSUI', '225'); -INSERT INTO cp_node VALUES ('4065', 'hideLMSUI', '225'); -INSERT INTO cp_node VALUES ('4066', 'hideLMSUI', '225'); -INSERT INTO cp_node VALUES ('4067', 'item', '225'); -INSERT INTO cp_node VALUES ('4068', 'hideLMSUI', '225'); -INSERT INTO cp_node VALUES ('4069', 'hideLMSUI', '225'); -INSERT INTO cp_node VALUES ('4070', 'hideLMSUI', '225'); -INSERT INTO cp_node VALUES ('4071', 'resource', '225'); -INSERT INTO cp_node VALUES ('4072', 'file', '225'); -INSERT INTO cp_node VALUES ('4073', 'dependency', '225'); -INSERT INTO cp_node VALUES ('4074', 'dependency', '225'); -INSERT INTO cp_node VALUES ('4075', 'dependency', '225'); -INSERT INTO cp_node VALUES ('4076', 'dependency', '225'); -INSERT INTO cp_node VALUES ('4077', 'dependency', '225'); -INSERT INTO cp_node VALUES ('4078', 'resource', '225'); -INSERT INTO cp_node VALUES ('4079', 'file', '225'); -INSERT INTO cp_node VALUES ('4080', 'resource', '225'); -INSERT INTO cp_node VALUES ('4081', 'file', '225'); -INSERT INTO cp_node VALUES ('4082', 'resource', '225'); -INSERT INTO cp_node VALUES ('4083', 'file', '225'); -INSERT INTO cp_node VALUES ('4084', 'resource', '225'); -INSERT INTO cp_node VALUES ('4085', 'file', '225'); -INSERT INTO cp_node VALUES ('4086', 'dependency', '225'); -INSERT INTO cp_node VALUES ('4087', 'resource', '225'); -INSERT INTO cp_node VALUES ('4088', 'file', '225'); -INSERT INTO cp_node VALUES ('4089', 'resource', '225'); -INSERT INTO cp_node VALUES ('4090', 'file', '225'); -INSERT INTO cp_node VALUES ('4091', 'sequencing', '225'); -INSERT INTO cp_node VALUES ('4092', 'rule', '225'); -INSERT INTO cp_node VALUES ('4093', 'condition', '225'); -INSERT INTO cp_node VALUES ('4094', 'rule', '225'); -INSERT INTO cp_node VALUES ('4095', 'condition', '225'); -INSERT INTO cp_node VALUES ('4096', 'sequencing', '225'); -INSERT INTO cp_node VALUES ('4097', 'manifest', '226'); -INSERT INTO cp_node VALUES ('4098', 'organization', '226'); -INSERT INTO cp_node VALUES ('4099', 'item', '226'); -INSERT INTO cp_node VALUES ('4100', 'item', '226'); -INSERT INTO cp_node VALUES ('4101', 'hideLMSUI', '226'); -INSERT INTO cp_node VALUES ('4102', 'hideLMSUI', '226'); -INSERT INTO cp_node VALUES ('4103', 'hideLMSUI', '226'); -INSERT INTO cp_node VALUES ('4104', 'item', '226'); -INSERT INTO cp_node VALUES ('4105', 'hideLMSUI', '226'); -INSERT INTO cp_node VALUES ('4106', 'hideLMSUI', '226'); -INSERT INTO cp_node VALUES ('4107', 'hideLMSUI', '226'); -INSERT INTO cp_node VALUES ('4108', 'item', '226'); -INSERT INTO cp_node VALUES ('4109', 'hideLMSUI', '226'); -INSERT INTO cp_node VALUES ('4110', 'hideLMSUI', '226'); -INSERT INTO cp_node VALUES ('4111', 'hideLMSUI', '226'); -INSERT INTO cp_node VALUES ('4112', 'item', '226'); -INSERT INTO cp_node VALUES ('4113', 'hideLMSUI', '226'); -INSERT INTO cp_node VALUES ('4114', 'hideLMSUI', '226'); -INSERT INTO cp_node VALUES ('4115', 'hideLMSUI', '226'); -INSERT INTO cp_node VALUES ('4116', 'resource', '226'); -INSERT INTO cp_node VALUES ('4117', 'file', '226'); -INSERT INTO cp_node VALUES ('4118', 'dependency', '226'); -INSERT INTO cp_node VALUES ('4119', 'dependency', '226'); -INSERT INTO cp_node VALUES ('4120', 'dependency', '226'); -INSERT INTO cp_node VALUES ('4121', 'dependency', '226'); -INSERT INTO cp_node VALUES ('4122', 'dependency', '226'); -INSERT INTO cp_node VALUES ('4123', 'resource', '226'); -INSERT INTO cp_node VALUES ('4124', 'file', '226'); -INSERT INTO cp_node VALUES ('4125', 'resource', '226'); -INSERT INTO cp_node VALUES ('4126', 'file', '226'); -INSERT INTO cp_node VALUES ('4127', 'resource', '226'); -INSERT INTO cp_node VALUES ('4128', 'file', '226'); -INSERT INTO cp_node VALUES ('4129', 'resource', '226'); -INSERT INTO cp_node VALUES ('4130', 'file', '226'); -INSERT INTO cp_node VALUES ('4131', 'dependency', '226'); -INSERT INTO cp_node VALUES ('4132', 'resource', '226'); -INSERT INTO cp_node VALUES ('4133', 'file', '226'); -INSERT INTO cp_node VALUES ('4134', 'resource', '226'); -INSERT INTO cp_node VALUES ('4135', 'file', '226'); -INSERT INTO cp_node VALUES ('4136', 'sequencing', '226'); -INSERT INTO cp_node VALUES ('4137', 'rule', '226'); -INSERT INTO cp_node VALUES ('4138', 'condition', '226'); -INSERT INTO cp_node VALUES ('4139', 'rule', '226'); -INSERT INTO cp_node VALUES ('4140', 'condition', '226'); -INSERT INTO cp_node VALUES ('4141', 'rule', '226'); -INSERT INTO cp_node VALUES ('4142', 'condition', '226'); -INSERT INTO cp_node VALUES ('4143', 'sequencing', '226'); -INSERT INTO cp_node VALUES ('4144', 'manifest', '227'); -INSERT INTO cp_node VALUES ('4145', 'organization', '227'); -INSERT INTO cp_node VALUES ('4146', 'item', '227'); -INSERT INTO cp_node VALUES ('4147', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4148', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4149', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4150', 'item', '227'); -INSERT INTO cp_node VALUES ('4151', 'item', '227'); -INSERT INTO cp_node VALUES ('4152', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4153', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4154', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4155', 'item', '227'); -INSERT INTO cp_node VALUES ('4156', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4157', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4158', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4159', 'item', '227'); -INSERT INTO cp_node VALUES ('4160', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4161', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4162', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4163', 'item', '227'); -INSERT INTO cp_node VALUES ('4164', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4165', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4166', 'hideLMSUI', '227'); -INSERT INTO cp_node VALUES ('4167', 'resource', '227'); -INSERT INTO cp_node VALUES ('4168', 'file', '227'); -INSERT INTO cp_node VALUES ('4169', 'dependency', '227'); -INSERT INTO cp_node VALUES ('4170', 'dependency', '227'); -INSERT INTO cp_node VALUES ('4171', 'dependency', '227'); -INSERT INTO cp_node VALUES ('4172', 'dependency', '227'); -INSERT INTO cp_node VALUES ('4173', 'dependency', '227'); -INSERT INTO cp_node VALUES ('4174', 'resource', '227'); -INSERT INTO cp_node VALUES ('4175', 'file', '227'); -INSERT INTO cp_node VALUES ('4176', 'resource', '227'); -INSERT INTO cp_node VALUES ('4177', 'file', '227'); -INSERT INTO cp_node VALUES ('4178', 'resource', '227'); -INSERT INTO cp_node VALUES ('4179', 'file', '227'); -INSERT INTO cp_node VALUES ('4180', 'resource', '227'); -INSERT INTO cp_node VALUES ('4181', 'file', '227'); -INSERT INTO cp_node VALUES ('4182', 'dependency', '227'); -INSERT INTO cp_node VALUES ('4183', 'resource', '227'); -INSERT INTO cp_node VALUES ('4184', 'file', '227'); -INSERT INTO cp_node VALUES ('4185', 'resource', '227'); -INSERT INTO cp_node VALUES ('4186', 'file', '227'); -INSERT INTO cp_node VALUES ('4187', 'sequencing', '227'); -INSERT INTO cp_node VALUES ('4188', 'rule', '227'); -INSERT INTO cp_node VALUES ('4189', 'condition', '227'); -INSERT INTO cp_node VALUES ('4190', 'sequencing', '227'); -INSERT INTO cp_node VALUES ('4191', 'rule', '227'); -INSERT INTO cp_node VALUES ('4192', 'condition', '227'); -INSERT INTO cp_node VALUES ('4193', 'sequencing', '227'); -INSERT INTO cp_node VALUES ('4194', 'rule', '227'); -INSERT INTO cp_node VALUES ('4195', 'condition', '227'); -INSERT INTO cp_node VALUES ('4196', 'rule', '227'); -INSERT INTO cp_node VALUES ('4197', 'condition', '227'); -INSERT INTO cp_node VALUES ('4198', 'sequencing', '227'); -INSERT INTO cp_node VALUES ('4199', 'manifest', '228'); -INSERT INTO cp_node VALUES ('4200', 'organization', '228'); -INSERT INTO cp_node VALUES ('4201', 'item', '228'); -INSERT INTO cp_node VALUES ('4202', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4203', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4204', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4205', 'item', '228'); -INSERT INTO cp_node VALUES ('4206', 'item', '228'); -INSERT INTO cp_node VALUES ('4207', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4208', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4209', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4210', 'item', '228'); -INSERT INTO cp_node VALUES ('4211', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4212', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4213', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4214', 'item', '228'); -INSERT INTO cp_node VALUES ('4215', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4216', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4217', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4218', 'item', '228'); -INSERT INTO cp_node VALUES ('4219', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4220', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4221', 'hideLMSUI', '228'); -INSERT INTO cp_node VALUES ('4222', 'resource', '228'); -INSERT INTO cp_node VALUES ('4223', 'file', '228'); -INSERT INTO cp_node VALUES ('4224', 'dependency', '228'); -INSERT INTO cp_node VALUES ('4225', 'dependency', '228'); -INSERT INTO cp_node VALUES ('4226', 'dependency', '228'); -INSERT INTO cp_node VALUES ('4227', 'dependency', '228'); -INSERT INTO cp_node VALUES ('4228', 'dependency', '228'); -INSERT INTO cp_node VALUES ('4229', 'resource', '228'); -INSERT INTO cp_node VALUES ('4230', 'file', '228'); -INSERT INTO cp_node VALUES ('4231', 'resource', '228'); -INSERT INTO cp_node VALUES ('4232', 'file', '228'); -INSERT INTO cp_node VALUES ('4233', 'resource', '228'); -INSERT INTO cp_node VALUES ('4234', 'file', '228'); -INSERT INTO cp_node VALUES ('4235', 'resource', '228'); -INSERT INTO cp_node VALUES ('4236', 'file', '228'); -INSERT INTO cp_node VALUES ('4237', 'dependency', '228'); -INSERT INTO cp_node VALUES ('4238', 'resource', '228'); -INSERT INTO cp_node VALUES ('4239', 'file', '228'); -INSERT INTO cp_node VALUES ('4240', 'resource', '228'); -INSERT INTO cp_node VALUES ('4241', 'file', '228'); -INSERT INTO cp_node VALUES ('4242', 'sequencing', '228'); -INSERT INTO cp_node VALUES ('4243', 'rule', '228'); -INSERT INTO cp_node VALUES ('4244', 'condition', '228'); -INSERT INTO cp_node VALUES ('4245', 'sequencing', '228'); -INSERT INTO cp_node VALUES ('4246', 'rule', '228'); -INSERT INTO cp_node VALUES ('4247', 'condition', '228'); -INSERT INTO cp_node VALUES ('4248', 'sequencing', '228'); -INSERT INTO cp_node VALUES ('4249', 'rule', '228'); -INSERT INTO cp_node VALUES ('4250', 'condition', '228'); -INSERT INTO cp_node VALUES ('4251', 'rule', '228'); -INSERT INTO cp_node VALUES ('4252', 'condition', '228'); -INSERT INTO cp_node VALUES ('4253', 'sequencing', '228'); -INSERT INTO cp_node VALUES ('4254', 'manifest', '229'); -INSERT INTO cp_node VALUES ('4255', 'organization', '229'); -INSERT INTO cp_node VALUES ('4256', 'item', '229'); -INSERT INTO cp_node VALUES ('4257', 'item', '229'); -INSERT INTO cp_node VALUES ('4258', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4259', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4260', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4261', 'item', '229'); -INSERT INTO cp_node VALUES ('4262', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4263', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4264', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4265', 'item', '229'); -INSERT INTO cp_node VALUES ('4266', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4267', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4268', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4269', 'item', '229'); -INSERT INTO cp_node VALUES ('4270', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4271', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4272', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4273', 'item', '229'); -INSERT INTO cp_node VALUES ('4274', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4275', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4276', 'hideLMSUI', '229'); -INSERT INTO cp_node VALUES ('4277', 'resource', '229'); -INSERT INTO cp_node VALUES ('4278', 'file', '229'); -INSERT INTO cp_node VALUES ('4279', 'dependency', '229'); -INSERT INTO cp_node VALUES ('4280', 'dependency', '229'); -INSERT INTO cp_node VALUES ('4281', 'dependency', '229'); -INSERT INTO cp_node VALUES ('4282', 'dependency', '229'); -INSERT INTO cp_node VALUES ('4283', 'dependency', '229'); -INSERT INTO cp_node VALUES ('4284', 'resource', '229'); -INSERT INTO cp_node VALUES ('4285', 'file', '229'); -INSERT INTO cp_node VALUES ('4286', 'resource', '229'); -INSERT INTO cp_node VALUES ('4287', 'file', '229'); -INSERT INTO cp_node VALUES ('4288', 'resource', '229'); -INSERT INTO cp_node VALUES ('4289', 'file', '229'); -INSERT INTO cp_node VALUES ('4290', 'resource', '229'); -INSERT INTO cp_node VALUES ('4291', 'file', '229'); -INSERT INTO cp_node VALUES ('4292', 'dependency', '229'); -INSERT INTO cp_node VALUES ('4293', 'resource', '229'); -INSERT INTO cp_node VALUES ('4294', 'file', '229'); -INSERT INTO cp_node VALUES ('4295', 'resource', '229'); -INSERT INTO cp_node VALUES ('4296', 'file', '229'); -INSERT INTO cp_node VALUES ('4297', 'sequencing', '229'); -INSERT INTO cp_node VALUES ('4298', 'rule', '229'); -INSERT INTO cp_node VALUES ('4299', 'condition', '229'); -INSERT INTO cp_node VALUES ('4300', 'sequencing', '229'); -INSERT INTO cp_node VALUES ('4301', 'sequencing', '229'); -INSERT INTO cp_node VALUES ('4302', 'rule', '229'); -INSERT INTO cp_node VALUES ('4303', 'condition', '229'); -INSERT INTO cp_node VALUES ('4304', 'rule', '229'); -INSERT INTO cp_node VALUES ('4305', 'condition', '229'); -INSERT INTO cp_node VALUES ('4306', 'manifest', '230'); -INSERT INTO cp_node VALUES ('4307', 'organization', '230'); -INSERT INTO cp_node VALUES ('4308', 'item', '230'); -INSERT INTO cp_node VALUES ('4309', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4310', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4311', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4312', 'item', '230'); -INSERT INTO cp_node VALUES ('4313', 'item', '230'); -INSERT INTO cp_node VALUES ('4314', 'item', '230'); -INSERT INTO cp_node VALUES ('4315', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4316', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4317', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4318', 'item', '230'); -INSERT INTO cp_node VALUES ('4319', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4320', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4321', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4322', 'item', '230'); -INSERT INTO cp_node VALUES ('4323', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4324', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4325', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4326', 'item', '230'); -INSERT INTO cp_node VALUES ('4327', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4328', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4329', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4330', 'item', '230'); -INSERT INTO cp_node VALUES ('4331', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4332', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4333', 'hideLMSUI', '230'); -INSERT INTO cp_node VALUES ('4334', 'resource', '230'); -INSERT INTO cp_node VALUES ('4335', 'file', '230'); -INSERT INTO cp_node VALUES ('4336', 'dependency', '230'); -INSERT INTO cp_node VALUES ('4337', 'dependency', '230'); -INSERT INTO cp_node VALUES ('4338', 'dependency', '230'); -INSERT INTO cp_node VALUES ('4339', 'dependency', '230'); -INSERT INTO cp_node VALUES ('4340', 'dependency', '230'); -INSERT INTO cp_node VALUES ('4341', 'resource', '230'); -INSERT INTO cp_node VALUES ('4342', 'file', '230'); -INSERT INTO cp_node VALUES ('4343', 'resource', '230'); -INSERT INTO cp_node VALUES ('4344', 'file', '230'); -INSERT INTO cp_node VALUES ('4345', 'resource', '230'); -INSERT INTO cp_node VALUES ('4346', 'file', '230'); -INSERT INTO cp_node VALUES ('4347', 'resource', '230'); -INSERT INTO cp_node VALUES ('4348', 'file', '230'); -INSERT INTO cp_node VALUES ('4349', 'dependency', '230'); -INSERT INTO cp_node VALUES ('4350', 'resource', '230'); -INSERT INTO cp_node VALUES ('4351', 'file', '230'); -INSERT INTO cp_node VALUES ('4352', 'resource', '230'); -INSERT INTO cp_node VALUES ('4353', 'file', '230'); -INSERT INTO cp_node VALUES ('4354', 'sequencing', '230'); -INSERT INTO cp_node VALUES ('4355', 'rule', '230'); -INSERT INTO cp_node VALUES ('4356', 'condition', '230'); -INSERT INTO cp_node VALUES ('4357', 'rule', '230'); -INSERT INTO cp_node VALUES ('4358', 'condition', '230'); -INSERT INTO cp_node VALUES ('4359', 'rule', '230'); -INSERT INTO cp_node VALUES ('4360', 'condition', '230'); -INSERT INTO cp_node VALUES ('4361', 'condition', '230'); -INSERT INTO cp_node VALUES ('4362', 'condition', '230'); -INSERT INTO cp_node VALUES ('4363', 'rule', '230'); -INSERT INTO cp_node VALUES ('4364', 'condition', '230'); -INSERT INTO cp_node VALUES ('4365', 'sequencing', '230'); -INSERT INTO cp_node VALUES ('4366', 'sequencing', '230'); -INSERT INTO cp_node VALUES ('4367', 'rule', '230'); -INSERT INTO cp_node VALUES ('4368', 'condition', '230'); -INSERT INTO cp_node VALUES ('4369', 'rule', '230'); -INSERT INTO cp_node VALUES ('4370', 'condition', '230'); -INSERT INTO cp_node VALUES ('4371', 'condition', '230'); -INSERT INTO cp_node VALUES ('4372', 'sequencing', '230'); -INSERT INTO cp_node VALUES ('4373', 'manifest', '231'); -INSERT INTO cp_node VALUES ('4374', 'organization', '231'); -INSERT INTO cp_node VALUES ('4375', 'item', '231'); -INSERT INTO cp_node VALUES ('4376', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4377', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4378', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4379', 'item', '231'); -INSERT INTO cp_node VALUES ('4380', 'item', '231'); -INSERT INTO cp_node VALUES ('4381', 'item', '231'); -INSERT INTO cp_node VALUES ('4382', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4383', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4384', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4385', 'item', '231'); -INSERT INTO cp_node VALUES ('4386', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4387', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4388', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4389', 'item', '231'); -INSERT INTO cp_node VALUES ('4390', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4391', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4392', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4393', 'item', '231'); -INSERT INTO cp_node VALUES ('4394', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4395', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4396', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4397', 'item', '231'); -INSERT INTO cp_node VALUES ('4398', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4399', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4400', 'hideLMSUI', '231'); -INSERT INTO cp_node VALUES ('4401', 'resource', '231'); -INSERT INTO cp_node VALUES ('4402', 'file', '231'); -INSERT INTO cp_node VALUES ('4403', 'dependency', '231'); -INSERT INTO cp_node VALUES ('4404', 'dependency', '231'); -INSERT INTO cp_node VALUES ('4405', 'dependency', '231'); -INSERT INTO cp_node VALUES ('4406', 'dependency', '231'); -INSERT INTO cp_node VALUES ('4407', 'dependency', '231'); -INSERT INTO cp_node VALUES ('4408', 'resource', '231'); -INSERT INTO cp_node VALUES ('4409', 'file', '231'); -INSERT INTO cp_node VALUES ('4410', 'resource', '231'); -INSERT INTO cp_node VALUES ('4411', 'file', '231'); -INSERT INTO cp_node VALUES ('4412', 'resource', '231'); -INSERT INTO cp_node VALUES ('4413', 'file', '231'); -INSERT INTO cp_node VALUES ('4414', 'resource', '231'); -INSERT INTO cp_node VALUES ('4415', 'file', '231'); -INSERT INTO cp_node VALUES ('4416', 'dependency', '231'); -INSERT INTO cp_node VALUES ('4417', 'resource', '231'); -INSERT INTO cp_node VALUES ('4418', 'file', '231'); -INSERT INTO cp_node VALUES ('4419', 'resource', '231'); -INSERT INTO cp_node VALUES ('4420', 'file', '231'); -INSERT INTO cp_node VALUES ('4421', 'sequencing', '231'); -INSERT INTO cp_node VALUES ('4422', 'sequencing', '231'); -INSERT INTO cp_node VALUES ('4423', 'sequencing', '231'); -INSERT INTO cp_node VALUES ('4424', 'sequencing', '231'); -INSERT INTO cp_node VALUES ('4425', 'rule', '231'); -INSERT INTO cp_node VALUES ('4426', 'condition', '231'); -INSERT INTO cp_node VALUES ('4427', 'rule', '231'); -INSERT INTO cp_node VALUES ('4428', 'condition', '231'); -INSERT INTO cp_node VALUES ('4429', 'rule', '231'); -INSERT INTO cp_node VALUES ('4430', 'condition', '231'); -INSERT INTO cp_node VALUES ('4431', 'condition', '231'); -INSERT INTO cp_node VALUES ('4432', 'condition', '231'); -INSERT INTO cp_node VALUES ('4433', 'rule', '231'); -INSERT INTO cp_node VALUES ('4434', 'condition', '231'); -INSERT INTO cp_node VALUES ('4435', 'sequencing', '231'); -INSERT INTO cp_node VALUES ('4436', 'rule', '231'); -INSERT INTO cp_node VALUES ('4437', 'condition', '231'); -INSERT INTO cp_node VALUES ('4438', 'rule', '231'); -INSERT INTO cp_node VALUES ('4439', 'condition', '231'); -INSERT INTO cp_node VALUES ('4440', 'condition', '231'); -INSERT INTO cp_node VALUES ('4441', 'sequencing', '231'); -INSERT INTO cp_node VALUES ('4442', 'manifest', '232'); -INSERT INTO cp_node VALUES ('4443', 'organization', '232'); -INSERT INTO cp_node VALUES ('4444', 'item', '232'); -INSERT INTO cp_node VALUES ('4445', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4446', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4447', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4448', 'item', '232'); -INSERT INTO cp_node VALUES ('4449', 'item', '232'); -INSERT INTO cp_node VALUES ('4450', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4451', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4452', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4453', 'item', '232'); -INSERT INTO cp_node VALUES ('4454', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4455', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4456', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4457', 'item', '232'); -INSERT INTO cp_node VALUES ('4458', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4459', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4460', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4461', 'item', '232'); -INSERT INTO cp_node VALUES ('4462', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4463', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4464', 'hideLMSUI', '232'); -INSERT INTO cp_node VALUES ('4465', 'resource', '232'); -INSERT INTO cp_node VALUES ('4466', 'file', '232'); -INSERT INTO cp_node VALUES ('4467', 'dependency', '232'); -INSERT INTO cp_node VALUES ('4468', 'dependency', '232'); -INSERT INTO cp_node VALUES ('4469', 'dependency', '232'); -INSERT INTO cp_node VALUES ('4470', 'dependency', '232'); -INSERT INTO cp_node VALUES ('4471', 'dependency', '232'); -INSERT INTO cp_node VALUES ('4472', 'resource', '232'); -INSERT INTO cp_node VALUES ('4473', 'file', '232'); -INSERT INTO cp_node VALUES ('4474', 'resource', '232'); -INSERT INTO cp_node VALUES ('4475', 'file', '232'); -INSERT INTO cp_node VALUES ('4476', 'resource', '232'); -INSERT INTO cp_node VALUES ('4477', 'file', '232'); -INSERT INTO cp_node VALUES ('4478', 'resource', '232'); -INSERT INTO cp_node VALUES ('4479', 'file', '232'); -INSERT INTO cp_node VALUES ('4480', 'dependency', '232'); -INSERT INTO cp_node VALUES ('4481', 'resource', '232'); -INSERT INTO cp_node VALUES ('4482', 'file', '232'); -INSERT INTO cp_node VALUES ('4483', 'resource', '232'); -INSERT INTO cp_node VALUES ('4484', 'file', '232'); -INSERT INTO cp_node VALUES ('4485', 'sequencing', '232'); -INSERT INTO cp_node VALUES ('4486', 'rule', '232'); -INSERT INTO cp_node VALUES ('4487', 'condition', '232'); -INSERT INTO cp_node VALUES ('4488', 'sequencing', '232'); -INSERT INTO cp_node VALUES ('4489', 'rule', '232'); -INSERT INTO cp_node VALUES ('4490', 'condition', '232'); -INSERT INTO cp_node VALUES ('4491', 'rule', '232'); -INSERT INTO cp_node VALUES ('4492', 'condition', '232'); -INSERT INTO cp_node VALUES ('4493', 'rule', '232'); -INSERT INTO cp_node VALUES ('4494', 'condition', '232'); -INSERT INTO cp_node VALUES ('4495', 'sequencing', '232'); -INSERT INTO cp_node VALUES ('4496', 'manifest', '233'); -INSERT INTO cp_node VALUES ('4497', 'organization', '233'); -INSERT INTO cp_node VALUES ('4498', 'item', '233'); -INSERT INTO cp_node VALUES ('4499', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4500', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4501', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4502', 'item', '233'); -INSERT INTO cp_node VALUES ('4503', 'item', '233'); -INSERT INTO cp_node VALUES ('4504', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4505', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4506', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4507', 'item', '233'); -INSERT INTO cp_node VALUES ('4508', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4509', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4510', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4511', 'item', '233'); -INSERT INTO cp_node VALUES ('4512', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4513', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4514', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4515', 'item', '233'); -INSERT INTO cp_node VALUES ('4516', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4517', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4518', 'hideLMSUI', '233'); -INSERT INTO cp_node VALUES ('4519', 'resource', '233'); -INSERT INTO cp_node VALUES ('4520', 'file', '233'); -INSERT INTO cp_node VALUES ('4521', 'dependency', '233'); -INSERT INTO cp_node VALUES ('4522', 'dependency', '233'); -INSERT INTO cp_node VALUES ('4523', 'dependency', '233'); -INSERT INTO cp_node VALUES ('4524', 'dependency', '233'); -INSERT INTO cp_node VALUES ('4525', 'dependency', '233'); -INSERT INTO cp_node VALUES ('4526', 'resource', '233'); -INSERT INTO cp_node VALUES ('4527', 'file', '233'); -INSERT INTO cp_node VALUES ('4528', 'resource', '233'); -INSERT INTO cp_node VALUES ('4529', 'file', '233'); -INSERT INTO cp_node VALUES ('4530', 'resource', '233'); -INSERT INTO cp_node VALUES ('4531', 'file', '233'); -INSERT INTO cp_node VALUES ('4532', 'resource', '233'); -INSERT INTO cp_node VALUES ('4533', 'file', '233'); -INSERT INTO cp_node VALUES ('4534', 'dependency', '233'); -INSERT INTO cp_node VALUES ('4535', 'resource', '233'); -INSERT INTO cp_node VALUES ('4536', 'file', '233'); -INSERT INTO cp_node VALUES ('4537', 'resource', '233'); -INSERT INTO cp_node VALUES ('4538', 'file', '233'); -INSERT INTO cp_node VALUES ('4539', 'sequencing', '233'); -INSERT INTO cp_node VALUES ('4540', 'rule', '233'); -INSERT INTO cp_node VALUES ('4541', 'condition', '233'); -INSERT INTO cp_node VALUES ('4542', 'rule', '233'); -INSERT INTO cp_node VALUES ('4543', 'condition', '233'); -INSERT INTO cp_node VALUES ('4544', 'rule', '233'); -INSERT INTO cp_node VALUES ('4545', 'condition', '233'); -INSERT INTO cp_node VALUES ('4546', 'sequencing', '233'); -INSERT INTO cp_node VALUES ('4547', 'manifest', '234'); -INSERT INTO cp_node VALUES ('4548', 'organization', '234'); -INSERT INTO cp_node VALUES ('4549', 'item', '234'); -INSERT INTO cp_node VALUES ('4550', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4551', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4552', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4553', 'item', '234'); -INSERT INTO cp_node VALUES ('4554', 'item', '234'); -INSERT INTO cp_node VALUES ('4555', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4556', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4557', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4558', 'item', '234'); -INSERT INTO cp_node VALUES ('4559', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4560', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4561', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4562', 'item', '234'); -INSERT INTO cp_node VALUES ('4563', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4564', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4565', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4566', 'item', '234'); -INSERT INTO cp_node VALUES ('4567', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4568', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4569', 'hideLMSUI', '234'); -INSERT INTO cp_node VALUES ('4570', 'resource', '234'); -INSERT INTO cp_node VALUES ('4571', 'file', '234'); -INSERT INTO cp_node VALUES ('4572', 'dependency', '234'); -INSERT INTO cp_node VALUES ('4573', 'dependency', '234'); -INSERT INTO cp_node VALUES ('4574', 'dependency', '234'); -INSERT INTO cp_node VALUES ('4575', 'dependency', '234'); -INSERT INTO cp_node VALUES ('4576', 'dependency', '234'); -INSERT INTO cp_node VALUES ('4577', 'resource', '234'); -INSERT INTO cp_node VALUES ('4578', 'file', '234'); -INSERT INTO cp_node VALUES ('4579', 'resource', '234'); -INSERT INTO cp_node VALUES ('4580', 'file', '234'); -INSERT INTO cp_node VALUES ('4581', 'resource', '234'); -INSERT INTO cp_node VALUES ('4582', 'file', '234'); -INSERT INTO cp_node VALUES ('4583', 'resource', '234'); -INSERT INTO cp_node VALUES ('4584', 'file', '234'); -INSERT INTO cp_node VALUES ('4585', 'dependency', '234'); -INSERT INTO cp_node VALUES ('4586', 'resource', '234'); -INSERT INTO cp_node VALUES ('4587', 'file', '234'); -INSERT INTO cp_node VALUES ('4588', 'resource', '234'); -INSERT INTO cp_node VALUES ('4589', 'file', '234'); -INSERT INTO cp_node VALUES ('4590', 'sequencing', '234'); -INSERT INTO cp_node VALUES ('4591', 'objective', '234'); -INSERT INTO cp_node VALUES ('4592', 'sequencing', '234'); -INSERT INTO cp_node VALUES ('4593', 'sequencing', '234'); -INSERT INTO cp_node VALUES ('4594', 'sequencing', '234'); -INSERT INTO cp_node VALUES ('4595', 'rule', '234'); -INSERT INTO cp_node VALUES ('4596', 'condition', '234'); -INSERT INTO cp_node VALUES ('4597', 'rule', '234'); -INSERT INTO cp_node VALUES ('4598', 'condition', '234'); -INSERT INTO cp_node VALUES ('4599', 'rule', '234'); -INSERT INTO cp_node VALUES ('4600', 'condition', '234'); -INSERT INTO cp_node VALUES ('4601', 'sequencing', '234'); -INSERT INTO cp_node VALUES ('4602', 'manifest', '235'); -INSERT INTO cp_node VALUES ('4603', 'organization', '235'); -INSERT INTO cp_node VALUES ('4604', 'item', '235'); -INSERT INTO cp_node VALUES ('4605', 'hideLMSUI', '235'); -INSERT INTO cp_node VALUES ('4606', 'hideLMSUI', '235'); -INSERT INTO cp_node VALUES ('4607', 'hideLMSUI', '235'); -INSERT INTO cp_node VALUES ('4608', 'item', '235'); -INSERT INTO cp_node VALUES ('4609', 'item', '235'); -INSERT INTO cp_node VALUES ('4610', 'hideLMSUI', '235'); -INSERT INTO cp_node VALUES ('4611', 'hideLMSUI', '235'); -INSERT INTO cp_node VALUES ('4612', 'hideLMSUI', '235'); -INSERT INTO cp_node VALUES ('4613', 'item', '235'); -INSERT INTO cp_node VALUES ('4614', 'hideLMSUI', '235'); -INSERT INTO cp_node VALUES ('4615', 'hideLMSUI', '235'); -INSERT INTO cp_node VALUES ('4616', 'hideLMSUI', '235'); -INSERT INTO cp_node VALUES ('4617', 'resource', '235'); -INSERT INTO cp_node VALUES ('4618', 'file', '235'); -INSERT INTO cp_node VALUES ('4619', 'dependency', '235'); -INSERT INTO cp_node VALUES ('4620', 'dependency', '235'); -INSERT INTO cp_node VALUES ('4621', 'dependency', '235'); -INSERT INTO cp_node VALUES ('4622', 'dependency', '235'); -INSERT INTO cp_node VALUES ('4623', 'dependency', '235'); -INSERT INTO cp_node VALUES ('4624', 'resource', '235'); -INSERT INTO cp_node VALUES ('4625', 'file', '235'); -INSERT INTO cp_node VALUES ('4626', 'resource', '235'); -INSERT INTO cp_node VALUES ('4627', 'file', '235'); -INSERT INTO cp_node VALUES ('4628', 'resource', '235'); -INSERT INTO cp_node VALUES ('4629', 'file', '235'); -INSERT INTO cp_node VALUES ('4630', 'resource', '235'); -INSERT INTO cp_node VALUES ('4631', 'file', '235'); -INSERT INTO cp_node VALUES ('4632', 'dependency', '235'); -INSERT INTO cp_node VALUES ('4633', 'resource', '235'); -INSERT INTO cp_node VALUES ('4634', 'file', '235'); -INSERT INTO cp_node VALUES ('4635', 'resource', '235'); -INSERT INTO cp_node VALUES ('4636', 'file', '235'); -INSERT INTO cp_node VALUES ('4637', 'sequencing', '235'); -INSERT INTO cp_node VALUES ('4638', 'rule', '235'); -INSERT INTO cp_node VALUES ('4639', 'condition', '235'); -INSERT INTO cp_node VALUES ('4640', 'rule', '235'); -INSERT INTO cp_node VALUES ('4641', 'condition', '235'); -INSERT INTO cp_node VALUES ('4642', 'rule', '235'); -INSERT INTO cp_node VALUES ('4643', 'condition', '235'); -INSERT INTO cp_node VALUES ('4644', 'rule', '235'); -INSERT INTO cp_node VALUES ('4645', 'condition', '235'); -INSERT INTO cp_node VALUES ('4646', 'sequencing', '235'); -INSERT INTO cp_node VALUES ('4647', 'manifest', '236'); -INSERT INTO cp_node VALUES ('4648', 'organization', '236'); -INSERT INTO cp_node VALUES ('4649', 'item', '236'); -INSERT INTO cp_node VALUES ('4650', 'hideLMSUI', '236'); -INSERT INTO cp_node VALUES ('4651', 'hideLMSUI', '236'); -INSERT INTO cp_node VALUES ('4652', 'hideLMSUI', '236'); -INSERT INTO cp_node VALUES ('4653', 'item', '236'); -INSERT INTO cp_node VALUES ('4654', 'item', '236'); -INSERT INTO cp_node VALUES ('4655', 'hideLMSUI', '236'); -INSERT INTO cp_node VALUES ('4656', 'hideLMSUI', '236'); -INSERT INTO cp_node VALUES ('4657', 'hideLMSUI', '236'); -INSERT INTO cp_node VALUES ('4658', 'item', '236'); -INSERT INTO cp_node VALUES ('4659', 'hideLMSUI', '236'); -INSERT INTO cp_node VALUES ('4660', 'hideLMSUI', '236'); -INSERT INTO cp_node VALUES ('4661', 'hideLMSUI', '236'); -INSERT INTO cp_node VALUES ('4662', 'resource', '236'); -INSERT INTO cp_node VALUES ('4663', 'file', '236'); -INSERT INTO cp_node VALUES ('4664', 'dependency', '236'); -INSERT INTO cp_node VALUES ('4665', 'dependency', '236'); -INSERT INTO cp_node VALUES ('4666', 'dependency', '236'); -INSERT INTO cp_node VALUES ('4667', 'dependency', '236'); -INSERT INTO cp_node VALUES ('4668', 'dependency', '236'); -INSERT INTO cp_node VALUES ('4669', 'resource', '236'); -INSERT INTO cp_node VALUES ('4670', 'file', '236'); -INSERT INTO cp_node VALUES ('4671', 'resource', '236'); -INSERT INTO cp_node VALUES ('4672', 'file', '236'); -INSERT INTO cp_node VALUES ('4673', 'resource', '236'); -INSERT INTO cp_node VALUES ('4674', 'file', '236'); -INSERT INTO cp_node VALUES ('4675', 'resource', '236'); -INSERT INTO cp_node VALUES ('4676', 'file', '236'); -INSERT INTO cp_node VALUES ('4677', 'dependency', '236'); -INSERT INTO cp_node VALUES ('4678', 'resource', '236'); -INSERT INTO cp_node VALUES ('4679', 'file', '236'); -INSERT INTO cp_node VALUES ('4680', 'resource', '236'); -INSERT INTO cp_node VALUES ('4681', 'file', '236'); -INSERT INTO cp_node VALUES ('4682', 'sequencing', '236'); -INSERT INTO cp_node VALUES ('4683', 'rule', '236'); -INSERT INTO cp_node VALUES ('4684', 'condition', '236'); -INSERT INTO cp_node VALUES ('4685', 'rule', '236'); -INSERT INTO cp_node VALUES ('4686', 'condition', '236'); -INSERT INTO cp_node VALUES ('4687', 'rule', '236'); -INSERT INTO cp_node VALUES ('4688', 'condition', '236'); -INSERT INTO cp_node VALUES ('4689', 'rule', '236'); -INSERT INTO cp_node VALUES ('4690', 'condition', '236'); -INSERT INTO cp_node VALUES ('4691', 'sequencing', '236'); -INSERT INTO cp_node VALUES ('4692', 'manifest', '237'); -INSERT INTO cp_node VALUES ('4693', 'organization', '237'); -INSERT INTO cp_node VALUES ('4694', 'item', '237'); -INSERT INTO cp_node VALUES ('4695', 'item', '237'); -INSERT INTO cp_node VALUES ('4696', 'item', '237'); -INSERT INTO cp_node VALUES ('4697', 'item', '237'); -INSERT INTO cp_node VALUES ('4698', 'item', '237'); -INSERT INTO cp_node VALUES ('4699', 'item', '237'); -INSERT INTO cp_node VALUES ('4700', 'resource', '237'); -INSERT INTO cp_node VALUES ('4701', 'file', '237'); -INSERT INTO cp_node VALUES ('4702', 'dependency', '237'); -INSERT INTO cp_node VALUES ('4703', 'dependency', '237'); -INSERT INTO cp_node VALUES ('4704', 'dependency', '237'); -INSERT INTO cp_node VALUES ('4705', 'dependency', '237'); -INSERT INTO cp_node VALUES ('4706', 'dependency', '237'); -INSERT INTO cp_node VALUES ('4707', 'resource', '237'); -INSERT INTO cp_node VALUES ('4708', 'file', '237'); -INSERT INTO cp_node VALUES ('4709', 'resource', '237'); -INSERT INTO cp_node VALUES ('4710', 'file', '237'); -INSERT INTO cp_node VALUES ('4711', 'resource', '237'); -INSERT INTO cp_node VALUES ('4712', 'file', '237'); -INSERT INTO cp_node VALUES ('4713', 'resource', '237'); -INSERT INTO cp_node VALUES ('4714', 'file', '237'); -INSERT INTO cp_node VALUES ('4715', 'dependency', '237'); -INSERT INTO cp_node VALUES ('4716', 'resource', '237'); -INSERT INTO cp_node VALUES ('4717', 'file', '237'); -INSERT INTO cp_node VALUES ('4718', 'resource', '237'); -INSERT INTO cp_node VALUES ('4719', 'file', '237'); -INSERT INTO cp_node VALUES ('4720', 'sequencing', '237'); -INSERT INTO cp_node VALUES ('4721', 'rule', '237'); -INSERT INTO cp_node VALUES ('4722', 'condition', '237'); -INSERT INTO cp_node VALUES ('4723', 'rule', '237'); -INSERT INTO cp_node VALUES ('4724', 'condition', '237'); -INSERT INTO cp_node VALUES ('4725', 'rule', '237'); -INSERT INTO cp_node VALUES ('4726', 'condition', '237'); -INSERT INTO cp_node VALUES ('4727', 'sequencing', '237'); -INSERT INTO cp_node VALUES ('4728', 'manifest', '238'); -INSERT INTO cp_node VALUES ('4729', 'organization', '238'); -INSERT INTO cp_node VALUES ('4730', 'item', '238'); -INSERT INTO cp_node VALUES ('4731', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4732', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4733', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4734', 'item', '238'); -INSERT INTO cp_node VALUES ('4735', 'item', '238'); -INSERT INTO cp_node VALUES ('4736', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4737', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4738', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4739', 'item', '238'); -INSERT INTO cp_node VALUES ('4740', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4741', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4742', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4743', 'item', '238'); -INSERT INTO cp_node VALUES ('4744', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4745', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4746', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4747', 'item', '238'); -INSERT INTO cp_node VALUES ('4748', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4749', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4750', 'hideLMSUI', '238'); -INSERT INTO cp_node VALUES ('4751', 'resource', '238'); -INSERT INTO cp_node VALUES ('4752', 'file', '238'); -INSERT INTO cp_node VALUES ('4753', 'dependency', '238'); -INSERT INTO cp_node VALUES ('4754', 'dependency', '238'); -INSERT INTO cp_node VALUES ('4755', 'dependency', '238'); -INSERT INTO cp_node VALUES ('4756', 'dependency', '238'); -INSERT INTO cp_node VALUES ('4757', 'dependency', '238'); -INSERT INTO cp_node VALUES ('4758', 'resource', '238'); -INSERT INTO cp_node VALUES ('4759', 'file', '238'); -INSERT INTO cp_node VALUES ('4760', 'resource', '238'); -INSERT INTO cp_node VALUES ('4761', 'file', '238'); -INSERT INTO cp_node VALUES ('4762', 'resource', '238'); -INSERT INTO cp_node VALUES ('4763', 'file', '238'); -INSERT INTO cp_node VALUES ('4764', 'resource', '238'); -INSERT INTO cp_node VALUES ('4765', 'file', '238'); -INSERT INTO cp_node VALUES ('4766', 'dependency', '238'); -INSERT INTO cp_node VALUES ('4767', 'resource', '238'); -INSERT INTO cp_node VALUES ('4768', 'file', '238'); -INSERT INTO cp_node VALUES ('4769', 'resource', '238'); -INSERT INTO cp_node VALUES ('4770', 'file', '238'); -INSERT INTO cp_node VALUES ('4771', 'sequencing', '238'); -INSERT INTO cp_node VALUES ('4772', 'objective', '238'); -INSERT INTO cp_node VALUES ('4773', 'objective', '238'); -INSERT INTO cp_node VALUES ('4774', 'mapInfo', '238'); -INSERT INTO cp_node VALUES ('4775', 'objective', '238'); -INSERT INTO cp_node VALUES ('4776', 'mapInfo', '238'); -INSERT INTO cp_node VALUES ('4777', 'objective', '238'); -INSERT INTO cp_node VALUES ('4778', 'mapInfo', '238'); -INSERT INTO cp_node VALUES ('4779', 'sequencing', '238'); -INSERT INTO cp_node VALUES ('4780', 'objective', '238'); -INSERT INTO cp_node VALUES ('4781', 'mapInfo', '238'); -INSERT INTO cp_node VALUES ('4782', 'sequencing', '238'); -INSERT INTO cp_node VALUES ('4783', 'rule', '238'); -INSERT INTO cp_node VALUES ('4784', 'condition', '238'); -INSERT INTO cp_node VALUES ('4785', 'rule', '238'); -INSERT INTO cp_node VALUES ('4786', 'condition', '238'); -INSERT INTO cp_node VALUES ('4787', 'rule', '238'); -INSERT INTO cp_node VALUES ('4788', 'condition', '238'); -INSERT INTO cp_node VALUES ('4789', 'sequencing', '238'); -INSERT INTO cp_node VALUES ('4790', 'manifest', '239'); -INSERT INTO cp_node VALUES ('4791', 'organization', '239'); -INSERT INTO cp_node VALUES ('4792', 'item', '239'); -INSERT INTO cp_node VALUES ('4793', 'hideLMSUI', '239'); -INSERT INTO cp_node VALUES ('4794', 'hideLMSUI', '239'); -INSERT INTO cp_node VALUES ('4795', 'hideLMSUI', '239'); -INSERT INTO cp_node VALUES ('4796', 'item', '239'); -INSERT INTO cp_node VALUES ('4797', 'hideLMSUI', '239'); -INSERT INTO cp_node VALUES ('4798', 'hideLMSUI', '239'); -INSERT INTO cp_node VALUES ('4799', 'hideLMSUI', '239'); -INSERT INTO cp_node VALUES ('4800', 'item', '239'); -INSERT INTO cp_node VALUES ('4801', 'hideLMSUI', '239'); -INSERT INTO cp_node VALUES ('4802', 'hideLMSUI', '239'); -INSERT INTO cp_node VALUES ('4803', 'hideLMSUI', '239'); -INSERT INTO cp_node VALUES ('4804', 'resource', '239'); -INSERT INTO cp_node VALUES ('4805', 'file', '239'); -INSERT INTO cp_node VALUES ('4806', 'dependency', '239'); -INSERT INTO cp_node VALUES ('4807', 'dependency', '239'); -INSERT INTO cp_node VALUES ('4808', 'dependency', '239'); -INSERT INTO cp_node VALUES ('4809', 'dependency', '239'); -INSERT INTO cp_node VALUES ('4810', 'dependency', '239'); -INSERT INTO cp_node VALUES ('4811', 'resource', '239'); -INSERT INTO cp_node VALUES ('4812', 'file', '239'); -INSERT INTO cp_node VALUES ('4813', 'resource', '239'); -INSERT INTO cp_node VALUES ('4814', 'file', '239'); -INSERT INTO cp_node VALUES ('4815', 'resource', '239'); -INSERT INTO cp_node VALUES ('4816', 'file', '239'); -INSERT INTO cp_node VALUES ('4817', 'resource', '239'); -INSERT INTO cp_node VALUES ('4818', 'file', '239'); -INSERT INTO cp_node VALUES ('4819', 'dependency', '239'); -INSERT INTO cp_node VALUES ('4820', 'resource', '239'); -INSERT INTO cp_node VALUES ('4821', 'file', '239'); -INSERT INTO cp_node VALUES ('4822', 'resource', '239'); -INSERT INTO cp_node VALUES ('4823', 'file', '239'); -INSERT INTO cp_node VALUES ('4824', 'sequencing', '239'); -INSERT INTO cp_node VALUES ('4825', 'rule', '239'); -INSERT INTO cp_node VALUES ('4826', 'condition', '239'); -INSERT INTO cp_node VALUES ('4827', 'objective', '239'); -INSERT INTO cp_node VALUES ('4828', 'mapInfo', '239'); -INSERT INTO cp_node VALUES ('4829', 'sequencing', '239'); -INSERT INTO cp_node VALUES ('4830', 'manifest', '240'); -INSERT INTO cp_node VALUES ('4831', 'organization', '240'); -INSERT INTO cp_node VALUES ('4832', 'item', '240'); -INSERT INTO cp_node VALUES ('4833', 'hideLMSUI', '240'); -INSERT INTO cp_node VALUES ('4834', 'hideLMSUI', '240'); -INSERT INTO cp_node VALUES ('4835', 'hideLMSUI', '240'); -INSERT INTO cp_node VALUES ('4836', 'item', '240'); -INSERT INTO cp_node VALUES ('4837', 'hideLMSUI', '240'); -INSERT INTO cp_node VALUES ('4838', 'hideLMSUI', '240'); -INSERT INTO cp_node VALUES ('4839', 'hideLMSUI', '240'); -INSERT INTO cp_node VALUES ('4840', 'item', '240'); -INSERT INTO cp_node VALUES ('4841', 'hideLMSUI', '240'); -INSERT INTO cp_node VALUES ('4842', 'hideLMSUI', '240'); -INSERT INTO cp_node VALUES ('4843', 'hideLMSUI', '240'); -INSERT INTO cp_node VALUES ('4844', 'resource', '240'); -INSERT INTO cp_node VALUES ('4845', 'file', '240'); -INSERT INTO cp_node VALUES ('4846', 'dependency', '240'); -INSERT INTO cp_node VALUES ('4847', 'dependency', '240'); -INSERT INTO cp_node VALUES ('4848', 'dependency', '240'); -INSERT INTO cp_node VALUES ('4849', 'dependency', '240'); -INSERT INTO cp_node VALUES ('4850', 'dependency', '240'); -INSERT INTO cp_node VALUES ('4851', 'resource', '240'); -INSERT INTO cp_node VALUES ('4852', 'file', '240'); -INSERT INTO cp_node VALUES ('4853', 'resource', '240'); -INSERT INTO cp_node VALUES ('4854', 'file', '240'); -INSERT INTO cp_node VALUES ('4855', 'resource', '240'); -INSERT INTO cp_node VALUES ('4856', 'file', '240'); -INSERT INTO cp_node VALUES ('4857', 'resource', '240'); -INSERT INTO cp_node VALUES ('4858', 'file', '240'); -INSERT INTO cp_node VALUES ('4859', 'dependency', '240'); -INSERT INTO cp_node VALUES ('4860', 'resource', '240'); -INSERT INTO cp_node VALUES ('4861', 'file', '240'); -INSERT INTO cp_node VALUES ('4862', 'resource', '240'); -INSERT INTO cp_node VALUES ('4863', 'file', '240'); -INSERT INTO cp_node VALUES ('4864', 'sequencing', '240'); -INSERT INTO cp_node VALUES ('4865', 'rule', '240'); -INSERT INTO cp_node VALUES ('4866', 'condition', '240'); -INSERT INTO cp_node VALUES ('4867', 'condition', '240'); -INSERT INTO cp_node VALUES ('4868', 'sequencing', '240'); -INSERT INTO cp_node VALUES ('4869', 'manifest', '241'); -INSERT INTO cp_node VALUES ('4870', 'organization', '241'); -INSERT INTO cp_node VALUES ('4871', 'item', '241'); -INSERT INTO cp_node VALUES ('4872', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4873', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4874', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4875', 'item', '241'); -INSERT INTO cp_node VALUES ('4876', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4877', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4878', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4879', 'item', '241'); -INSERT INTO cp_node VALUES ('4880', 'item', '241'); -INSERT INTO cp_node VALUES ('4881', 'item', '241'); -INSERT INTO cp_node VALUES ('4882', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4883', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4884', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4885', 'item', '241'); -INSERT INTO cp_node VALUES ('4886', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4887', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4888', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4889', 'item', '241'); -INSERT INTO cp_node VALUES ('4890', 'item', '241'); -INSERT INTO cp_node VALUES ('4891', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4892', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4893', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4894', 'item', '241'); -INSERT INTO cp_node VALUES ('4895', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4896', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4897', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4898', 'item', '241'); -INSERT INTO cp_node VALUES ('4899', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4900', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4901', 'hideLMSUI', '241'); -INSERT INTO cp_node VALUES ('4902', 'resource', '241'); -INSERT INTO cp_node VALUES ('4903', 'file', '241'); -INSERT INTO cp_node VALUES ('4904', 'dependency', '241'); -INSERT INTO cp_node VALUES ('4905', 'dependency', '241'); -INSERT INTO cp_node VALUES ('4906', 'dependency', '241'); -INSERT INTO cp_node VALUES ('4907', 'dependency', '241'); -INSERT INTO cp_node VALUES ('4908', 'dependency', '241'); -INSERT INTO cp_node VALUES ('4909', 'resource', '241'); -INSERT INTO cp_node VALUES ('4910', 'file', '241'); -INSERT INTO cp_node VALUES ('4911', 'resource', '241'); -INSERT INTO cp_node VALUES ('4912', 'file', '241'); -INSERT INTO cp_node VALUES ('4913', 'resource', '241'); -INSERT INTO cp_node VALUES ('4914', 'file', '241'); -INSERT INTO cp_node VALUES ('4915', 'resource', '241'); -INSERT INTO cp_node VALUES ('4916', 'file', '241'); -INSERT INTO cp_node VALUES ('4917', 'dependency', '241'); -INSERT INTO cp_node VALUES ('4918', 'resource', '241'); -INSERT INTO cp_node VALUES ('4919', 'file', '241'); -INSERT INTO cp_node VALUES ('4920', 'resource', '241'); -INSERT INTO cp_node VALUES ('4921', 'file', '241'); -INSERT INTO cp_node VALUES ('4922', 'sequencing', '241'); -INSERT INTO cp_node VALUES ('4923', 'rule', '241'); -INSERT INTO cp_node VALUES ('4924', 'condition', '241'); -INSERT INTO cp_node VALUES ('4925', 'objective', '241'); -INSERT INTO cp_node VALUES ('4926', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4927', 'sequencing', '241'); -INSERT INTO cp_node VALUES ('4928', 'rule', '241'); -INSERT INTO cp_node VALUES ('4929', 'condition', '241'); -INSERT INTO cp_node VALUES ('4930', 'objective', '241'); -INSERT INTO cp_node VALUES ('4931', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4932', 'sequencing', '241'); -INSERT INTO cp_node VALUES ('4933', 'rule', '241'); -INSERT INTO cp_node VALUES ('4934', 'condition', '241'); -INSERT INTO cp_node VALUES ('4935', 'objective', '241'); -INSERT INTO cp_node VALUES ('4936', 'objective', '241'); -INSERT INTO cp_node VALUES ('4937', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4938', 'sequencing', '241'); -INSERT INTO cp_node VALUES ('4939', 'rule', '241'); -INSERT INTO cp_node VALUES ('4940', 'condition', '241'); -INSERT INTO cp_node VALUES ('4941', 'rule', '241'); -INSERT INTO cp_node VALUES ('4942', 'condition', '241'); -INSERT INTO cp_node VALUES ('4943', 'condition', '241'); -INSERT INTO cp_node VALUES ('4944', 'objective', '241'); -INSERT INTO cp_node VALUES ('4945', 'objective', '241'); -INSERT INTO cp_node VALUES ('4946', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4947', 'objective', '241'); -INSERT INTO cp_node VALUES ('4948', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4949', 'sequencing', '241'); -INSERT INTO cp_node VALUES ('4950', 'sequencing', '241'); -INSERT INTO cp_node VALUES ('4951', 'rule', '241'); -INSERT INTO cp_node VALUES ('4952', 'condition', '241'); -INSERT INTO cp_node VALUES ('4953', 'objective', '241'); -INSERT INTO cp_node VALUES ('4954', 'objective', '241'); -INSERT INTO cp_node VALUES ('4955', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4956', 'sequencing', '241'); -INSERT INTO cp_node VALUES ('4957', 'rule', '241'); -INSERT INTO cp_node VALUES ('4958', 'condition', '241'); -INSERT INTO cp_node VALUES ('4959', 'rule', '241'); -INSERT INTO cp_node VALUES ('4960', 'condition', '241'); -INSERT INTO cp_node VALUES ('4961', 'condition', '241'); -INSERT INTO cp_node VALUES ('4962', 'objective', '241'); -INSERT INTO cp_node VALUES ('4963', 'objective', '241'); -INSERT INTO cp_node VALUES ('4964', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4965', 'objective', '241'); -INSERT INTO cp_node VALUES ('4966', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4967', 'sequencing', '241'); -INSERT INTO cp_node VALUES ('4968', 'sequencing', '241'); -INSERT INTO cp_node VALUES ('4969', 'rule', '241'); -INSERT INTO cp_node VALUES ('4970', 'condition', '241'); -INSERT INTO cp_node VALUES ('4971', 'objective', '241'); -INSERT INTO cp_node VALUES ('4972', 'objective', '241'); -INSERT INTO cp_node VALUES ('4973', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4974', 'objective', '241'); -INSERT INTO cp_node VALUES ('4975', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4976', 'objective', '241'); -INSERT INTO cp_node VALUES ('4977', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4978', 'objective', '241'); -INSERT INTO cp_node VALUES ('4979', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4980', 'objective', '241'); -INSERT INTO cp_node VALUES ('4981', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4982', 'sequencing', '241'); -INSERT INTO cp_node VALUES ('4983', 'rule', '241'); -INSERT INTO cp_node VALUES ('4984', 'condition', '241'); -INSERT INTO cp_node VALUES ('4985', 'objective', '241'); -INSERT INTO cp_node VALUES ('4986', 'objective', '241'); -INSERT INTO cp_node VALUES ('4987', 'mapInfo', '241'); -INSERT INTO cp_node VALUES ('4988', 'sequencing', '241'); -INSERT INTO cp_node VALUES ('4989', 'manifest', '242'); -INSERT INTO cp_node VALUES ('4990', 'organization', '242'); -INSERT INTO cp_node VALUES ('4991', 'item', '242'); -INSERT INTO cp_node VALUES ('4992', 'hideLMSUI', '242'); -INSERT INTO cp_node VALUES ('4993', 'hideLMSUI', '242'); -INSERT INTO cp_node VALUES ('4994', 'hideLMSUI', '242'); -INSERT INTO cp_node VALUES ('4995', 'item', '242'); -INSERT INTO cp_node VALUES ('4996', 'hideLMSUI', '242'); -INSERT INTO cp_node VALUES ('4997', 'hideLMSUI', '242'); -INSERT INTO cp_node VALUES ('4998', 'hideLMSUI', '242'); -INSERT INTO cp_node VALUES ('4999', 'item', '242'); -INSERT INTO cp_node VALUES ('5000', 'hideLMSUI', '242'); -INSERT INTO cp_node VALUES ('5001', 'hideLMSUI', '242'); -INSERT INTO cp_node VALUES ('5002', 'hideLMSUI', '242'); -INSERT INTO cp_node VALUES ('5003', 'resource', '242'); -INSERT INTO cp_node VALUES ('5004', 'file', '242'); -INSERT INTO cp_node VALUES ('5005', 'dependency', '242'); -INSERT INTO cp_node VALUES ('5006', 'dependency', '242'); -INSERT INTO cp_node VALUES ('5007', 'dependency', '242'); -INSERT INTO cp_node VALUES ('5008', 'dependency', '242'); -INSERT INTO cp_node VALUES ('5009', 'dependency', '242'); -INSERT INTO cp_node VALUES ('5010', 'resource', '242'); -INSERT INTO cp_node VALUES ('5011', 'file', '242'); -INSERT INTO cp_node VALUES ('5012', 'resource', '242'); -INSERT INTO cp_node VALUES ('5013', 'file', '242'); -INSERT INTO cp_node VALUES ('5014', 'resource', '242'); -INSERT INTO cp_node VALUES ('5015', 'file', '242'); -INSERT INTO cp_node VALUES ('5016', 'resource', '242'); -INSERT INTO cp_node VALUES ('5017', 'file', '242'); -INSERT INTO cp_node VALUES ('5018', 'dependency', '242'); -INSERT INTO cp_node VALUES ('5019', 'resource', '242'); -INSERT INTO cp_node VALUES ('5020', 'file', '242'); -INSERT INTO cp_node VALUES ('5021', 'resource', '242'); -INSERT INTO cp_node VALUES ('5022', 'file', '242'); -INSERT INTO cp_node VALUES ('5023', 'sequencing', '242'); -INSERT INTO cp_node VALUES ('5024', 'rule', '242'); -INSERT INTO cp_node VALUES ('5025', 'condition', '242'); -INSERT INTO cp_node VALUES ('5026', 'rule', '242'); -INSERT INTO cp_node VALUES ('5027', 'condition', '242'); -INSERT INTO cp_node VALUES ('5028', 'sequencing', '242'); -INSERT INTO cp_node VALUES ('5029', 'manifest', '243'); -INSERT INTO cp_node VALUES ('5030', 'organization', '243'); -INSERT INTO cp_node VALUES ('5031', 'item', '243'); -INSERT INTO cp_node VALUES ('5032', 'item', '243'); -INSERT INTO cp_node VALUES ('5033', 'hideLMSUI', '243'); -INSERT INTO cp_node VALUES ('5034', 'hideLMSUI', '243'); -INSERT INTO cp_node VALUES ('5035', 'hideLMSUI', '243'); -INSERT INTO cp_node VALUES ('5036', 'item', '243'); -INSERT INTO cp_node VALUES ('5037', 'hideLMSUI', '243'); -INSERT INTO cp_node VALUES ('5038', 'hideLMSUI', '243'); -INSERT INTO cp_node VALUES ('5039', 'hideLMSUI', '243'); -INSERT INTO cp_node VALUES ('5040', 'item', '243'); -INSERT INTO cp_node VALUES ('5041', 'hideLMSUI', '243'); -INSERT INTO cp_node VALUES ('5042', 'hideLMSUI', '243'); -INSERT INTO cp_node VALUES ('5043', 'hideLMSUI', '243'); -INSERT INTO cp_node VALUES ('5044', 'item', '243'); -INSERT INTO cp_node VALUES ('5045', 'hideLMSUI', '243'); -INSERT INTO cp_node VALUES ('5046', 'hideLMSUI', '243'); -INSERT INTO cp_node VALUES ('5047', 'hideLMSUI', '243'); -INSERT INTO cp_node VALUES ('5048', 'resource', '243'); -INSERT INTO cp_node VALUES ('5049', 'file', '243'); -INSERT INTO cp_node VALUES ('5050', 'dependency', '243'); -INSERT INTO cp_node VALUES ('5051', 'dependency', '243'); -INSERT INTO cp_node VALUES ('5052', 'dependency', '243'); -INSERT INTO cp_node VALUES ('5053', 'dependency', '243'); -INSERT INTO cp_node VALUES ('5054', 'dependency', '243'); -INSERT INTO cp_node VALUES ('5055', 'resource', '243'); -INSERT INTO cp_node VALUES ('5056', 'file', '243'); -INSERT INTO cp_node VALUES ('5057', 'resource', '243'); -INSERT INTO cp_node VALUES ('5058', 'file', '243'); -INSERT INTO cp_node VALUES ('5059', 'resource', '243'); -INSERT INTO cp_node VALUES ('5060', 'file', '243'); -INSERT INTO cp_node VALUES ('5061', 'resource', '243'); -INSERT INTO cp_node VALUES ('5062', 'file', '243'); -INSERT INTO cp_node VALUES ('5063', 'dependency', '243'); -INSERT INTO cp_node VALUES ('5064', 'resource', '243'); -INSERT INTO cp_node VALUES ('5065', 'file', '243'); -INSERT INTO cp_node VALUES ('5066', 'resource', '243'); -INSERT INTO cp_node VALUES ('5067', 'file', '243'); -INSERT INTO cp_node VALUES ('5068', 'sequencing', '243'); -INSERT INTO cp_node VALUES ('5069', 'rule', '243'); -INSERT INTO cp_node VALUES ('5070', 'condition', '243'); -INSERT INTO cp_node VALUES ('5071', 'sequencing', '243'); -INSERT INTO cp_node VALUES ('5072', 'sequencing', '243'); -INSERT INTO cp_node VALUES ('5073', 'manifest', '244'); -INSERT INTO cp_node VALUES ('5074', 'organization', '244'); -INSERT INTO cp_node VALUES ('5075', 'item', '244'); -INSERT INTO cp_node VALUES ('5076', 'item', '244'); -INSERT INTO cp_node VALUES ('5077', 'hideLMSUI', '244'); -INSERT INTO cp_node VALUES ('5078', 'hideLMSUI', '244'); -INSERT INTO cp_node VALUES ('5079', 'hideLMSUI', '244'); -INSERT INTO cp_node VALUES ('5080', 'item', '244'); -INSERT INTO cp_node VALUES ('5081', 'hideLMSUI', '244'); -INSERT INTO cp_node VALUES ('5082', 'hideLMSUI', '244'); -INSERT INTO cp_node VALUES ('5083', 'hideLMSUI', '244'); -INSERT INTO cp_node VALUES ('5084', 'item', '244'); -INSERT INTO cp_node VALUES ('5085', 'hideLMSUI', '244'); -INSERT INTO cp_node VALUES ('5086', 'hideLMSUI', '244'); -INSERT INTO cp_node VALUES ('5087', 'hideLMSUI', '244'); -INSERT INTO cp_node VALUES ('5088', 'resource', '244'); -INSERT INTO cp_node VALUES ('5089', 'file', '244'); -INSERT INTO cp_node VALUES ('5090', 'dependency', '244'); -INSERT INTO cp_node VALUES ('5091', 'dependency', '244'); -INSERT INTO cp_node VALUES ('5092', 'dependency', '244'); -INSERT INTO cp_node VALUES ('5093', 'dependency', '244'); -INSERT INTO cp_node VALUES ('5094', 'dependency', '244'); -INSERT INTO cp_node VALUES ('5095', 'resource', '244'); -INSERT INTO cp_node VALUES ('5096', 'file', '244'); -INSERT INTO cp_node VALUES ('5097', 'resource', '244'); -INSERT INTO cp_node VALUES ('5098', 'file', '244'); -INSERT INTO cp_node VALUES ('5099', 'resource', '244'); -INSERT INTO cp_node VALUES ('5100', 'file', '244'); -INSERT INTO cp_node VALUES ('5101', 'resource', '244'); -INSERT INTO cp_node VALUES ('5102', 'file', '244'); -INSERT INTO cp_node VALUES ('5103', 'dependency', '244'); -INSERT INTO cp_node VALUES ('5104', 'resource', '244'); -INSERT INTO cp_node VALUES ('5105', 'file', '244'); -INSERT INTO cp_node VALUES ('5106', 'resource', '244'); -INSERT INTO cp_node VALUES ('5107', 'file', '244'); -INSERT INTO cp_node VALUES ('5108', 'sequencing', '244'); -INSERT INTO cp_node VALUES ('5109', 'rule', '244'); -INSERT INTO cp_node VALUES ('5110', 'condition', '244'); -INSERT INTO cp_node VALUES ('5111', 'sequencing', '244'); -INSERT INTO cp_node VALUES ('5112', 'sequencing', '244'); -INSERT INTO cp_node VALUES ('5113', 'manifest', '245'); -INSERT INTO cp_node VALUES ('5114', 'organization', '245'); -INSERT INTO cp_node VALUES ('5115', 'item', '245'); -INSERT INTO cp_node VALUES ('5116', 'item', '245'); -INSERT INTO cp_node VALUES ('5117', 'hideLMSUI', '245'); -INSERT INTO cp_node VALUES ('5118', 'hideLMSUI', '245'); -INSERT INTO cp_node VALUES ('5119', 'hideLMSUI', '245'); -INSERT INTO cp_node VALUES ('5120', 'item', '245'); -INSERT INTO cp_node VALUES ('5121', 'hideLMSUI', '245'); -INSERT INTO cp_node VALUES ('5122', 'hideLMSUI', '245'); -INSERT INTO cp_node VALUES ('5123', 'hideLMSUI', '245'); -INSERT INTO cp_node VALUES ('5124', 'item', '245'); -INSERT INTO cp_node VALUES ('5125', 'hideLMSUI', '245'); -INSERT INTO cp_node VALUES ('5126', 'hideLMSUI', '245'); -INSERT INTO cp_node VALUES ('5127', 'hideLMSUI', '245'); -INSERT INTO cp_node VALUES ('5128', 'resource', '245'); -INSERT INTO cp_node VALUES ('5129', 'file', '245'); -INSERT INTO cp_node VALUES ('5130', 'dependency', '245'); -INSERT INTO cp_node VALUES ('5131', 'dependency', '245'); -INSERT INTO cp_node VALUES ('5132', 'dependency', '245'); -INSERT INTO cp_node VALUES ('5133', 'dependency', '245'); -INSERT INTO cp_node VALUES ('5134', 'dependency', '245'); -INSERT INTO cp_node VALUES ('5135', 'resource', '245'); -INSERT INTO cp_node VALUES ('5136', 'file', '245'); -INSERT INTO cp_node VALUES ('5137', 'resource', '245'); -INSERT INTO cp_node VALUES ('5138', 'file', '245'); -INSERT INTO cp_node VALUES ('5139', 'resource', '245'); -INSERT INTO cp_node VALUES ('5140', 'file', '245'); -INSERT INTO cp_node VALUES ('5141', 'resource', '245'); -INSERT INTO cp_node VALUES ('5142', 'file', '245'); -INSERT INTO cp_node VALUES ('5143', 'dependency', '245'); -INSERT INTO cp_node VALUES ('5144', 'resource', '245'); -INSERT INTO cp_node VALUES ('5145', 'file', '245'); -INSERT INTO cp_node VALUES ('5146', 'resource', '245'); -INSERT INTO cp_node VALUES ('5147', 'file', '245'); -INSERT INTO cp_node VALUES ('5148', 'sequencing', '245'); -INSERT INTO cp_node VALUES ('5149', 'rule', '245'); -INSERT INTO cp_node VALUES ('5150', 'condition', '245'); -INSERT INTO cp_node VALUES ('5151', 'sequencing', '245'); -INSERT INTO cp_node VALUES ('5152', 'rule', '245'); -INSERT INTO cp_node VALUES ('5153', 'condition', '245'); -INSERT INTO cp_node VALUES ('5154', 'rule', '245'); -INSERT INTO cp_node VALUES ('5155', 'condition', '245'); -INSERT INTO cp_node VALUES ('5156', 'sequencing', '245'); -INSERT INTO cp_node VALUES ('5157', 'manifest', '246'); -INSERT INTO cp_node VALUES ('5158', 'organization', '246'); -INSERT INTO cp_node VALUES ('5159', 'item', '246'); -INSERT INTO cp_node VALUES ('5160', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5161', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5162', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5163', 'item', '246'); -INSERT INTO cp_node VALUES ('5164', 'item', '246'); -INSERT INTO cp_node VALUES ('5165', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5166', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5167', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5168', 'item', '246'); -INSERT INTO cp_node VALUES ('5169', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5170', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5171', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5172', 'item', '246'); -INSERT INTO cp_node VALUES ('5173', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5174', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5175', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5176', 'item', '246'); -INSERT INTO cp_node VALUES ('5177', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5178', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5179', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5180', 'item', '246'); -INSERT INTO cp_node VALUES ('5181', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5182', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5183', 'hideLMSUI', '246'); -INSERT INTO cp_node VALUES ('5184', 'resource', '246'); -INSERT INTO cp_node VALUES ('5185', 'file', '246'); -INSERT INTO cp_node VALUES ('5186', 'dependency', '246'); -INSERT INTO cp_node VALUES ('5187', 'dependency', '246'); -INSERT INTO cp_node VALUES ('5188', 'dependency', '246'); -INSERT INTO cp_node VALUES ('5189', 'dependency', '246'); -INSERT INTO cp_node VALUES ('5190', 'dependency', '246'); -INSERT INTO cp_node VALUES ('5191', 'resource', '246'); -INSERT INTO cp_node VALUES ('5192', 'file', '246'); -INSERT INTO cp_node VALUES ('5193', 'resource', '246'); -INSERT INTO cp_node VALUES ('5194', 'file', '246'); -INSERT INTO cp_node VALUES ('5195', 'resource', '246'); -INSERT INTO cp_node VALUES ('5196', 'file', '246'); -INSERT INTO cp_node VALUES ('5197', 'resource', '246'); -INSERT INTO cp_node VALUES ('5198', 'file', '246'); -INSERT INTO cp_node VALUES ('5199', 'dependency', '246'); -INSERT INTO cp_node VALUES ('5200', 'resource', '246'); -INSERT INTO cp_node VALUES ('5201', 'file', '246'); -INSERT INTO cp_node VALUES ('5202', 'resource', '246'); -INSERT INTO cp_node VALUES ('5203', 'file', '246'); -INSERT INTO cp_node VALUES ('5204', 'sequencing', '246'); -INSERT INTO cp_node VALUES ('5205', 'rule', '246'); -INSERT INTO cp_node VALUES ('5206', 'condition', '246'); -INSERT INTO cp_node VALUES ('5207', 'objective', '246'); -INSERT INTO cp_node VALUES ('5208', 'sequencing', '246'); -INSERT INTO cp_node VALUES ('5209', 'rule', '246'); -INSERT INTO cp_node VALUES ('5210', 'condition', '246'); -INSERT INTO cp_node VALUES ('5211', 'sequencing', '246'); -INSERT INTO cp_node VALUES ('5212', 'rule', '246'); -INSERT INTO cp_node VALUES ('5213', 'condition', '246'); -INSERT INTO cp_node VALUES ('5214', 'sequencing', '246'); -INSERT INTO cp_node VALUES ('5215', 'sequencing', '246'); -INSERT INTO cp_node VALUES ('5216', 'manifest', '247'); -INSERT INTO cp_node VALUES ('5217', 'organization', '247'); -INSERT INTO cp_node VALUES ('5218', 'item', '247'); -INSERT INTO cp_node VALUES ('5219', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5220', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5221', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5222', 'item', '247'); -INSERT INTO cp_node VALUES ('5223', 'item', '247'); -INSERT INTO cp_node VALUES ('5224', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5225', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5226', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5227', 'item', '247'); -INSERT INTO cp_node VALUES ('5228', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5229', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5230', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5231', 'item', '247'); -INSERT INTO cp_node VALUES ('5232', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5233', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5234', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5235', 'item', '247'); -INSERT INTO cp_node VALUES ('5236', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5237', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5238', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5239', 'item', '247'); -INSERT INTO cp_node VALUES ('5240', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5241', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5242', 'hideLMSUI', '247'); -INSERT INTO cp_node VALUES ('5243', 'resource', '247'); -INSERT INTO cp_node VALUES ('5244', 'file', '247'); -INSERT INTO cp_node VALUES ('5245', 'dependency', '247'); -INSERT INTO cp_node VALUES ('5246', 'dependency', '247'); -INSERT INTO cp_node VALUES ('5247', 'dependency', '247'); -INSERT INTO cp_node VALUES ('5248', 'dependency', '247'); -INSERT INTO cp_node VALUES ('5249', 'dependency', '247'); -INSERT INTO cp_node VALUES ('5250', 'resource', '247'); -INSERT INTO cp_node VALUES ('5251', 'file', '247'); -INSERT INTO cp_node VALUES ('5252', 'resource', '247'); -INSERT INTO cp_node VALUES ('5253', 'file', '247'); -INSERT INTO cp_node VALUES ('5254', 'resource', '247'); -INSERT INTO cp_node VALUES ('5255', 'file', '247'); -INSERT INTO cp_node VALUES ('5256', 'resource', '247'); -INSERT INTO cp_node VALUES ('5257', 'file', '247'); -INSERT INTO cp_node VALUES ('5258', 'dependency', '247'); -INSERT INTO cp_node VALUES ('5259', 'resource', '247'); -INSERT INTO cp_node VALUES ('5260', 'file', '247'); -INSERT INTO cp_node VALUES ('5261', 'resource', '247'); -INSERT INTO cp_node VALUES ('5262', 'file', '247'); -INSERT INTO cp_node VALUES ('5263', 'sequencing', '247'); -INSERT INTO cp_node VALUES ('5264', 'rule', '247'); -INSERT INTO cp_node VALUES ('5265', 'condition', '247'); -INSERT INTO cp_node VALUES ('5266', 'sequencing', '247'); -INSERT INTO cp_node VALUES ('5267', 'rule', '247'); -INSERT INTO cp_node VALUES ('5268', 'condition', '247'); -INSERT INTO cp_node VALUES ('5269', 'objective', '247'); -INSERT INTO cp_node VALUES ('5270', 'sequencing', '247'); -INSERT INTO cp_node VALUES ('5271', 'rule', '247'); -INSERT INTO cp_node VALUES ('5272', 'condition', '247'); -INSERT INTO cp_node VALUES ('5273', 'sequencing', '247'); -INSERT INTO cp_node VALUES ('5274', 'sequencing', '247'); -INSERT INTO cp_node VALUES ('5275', 'manifest', '248'); -INSERT INTO cp_node VALUES ('5276', 'organization', '248'); -INSERT INTO cp_node VALUES ('5277', 'item', '248'); -INSERT INTO cp_node VALUES ('5278', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5279', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5280', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5281', 'item', '248'); -INSERT INTO cp_node VALUES ('5282', 'item', '248'); -INSERT INTO cp_node VALUES ('5283', 'item', '248'); -INSERT INTO cp_node VALUES ('5284', 'item', '248'); -INSERT INTO cp_node VALUES ('5285', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5286', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5287', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5288', 'item', '248'); -INSERT INTO cp_node VALUES ('5289', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5290', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5291', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5292', 'item', '248'); -INSERT INTO cp_node VALUES ('5293', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5294', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5295', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5296', 'item', '248'); -INSERT INTO cp_node VALUES ('5297', 'item', '248'); -INSERT INTO cp_node VALUES ('5298', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5299', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5300', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5301', 'item', '248'); -INSERT INTO cp_node VALUES ('5302', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5303', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5304', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5305', 'item', '248'); -INSERT INTO cp_node VALUES ('5306', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5307', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5308', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5309', 'item', '248'); -INSERT INTO cp_node VALUES ('5310', 'item', '248'); -INSERT INTO cp_node VALUES ('5311', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5312', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5313', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5314', 'item', '248'); -INSERT INTO cp_node VALUES ('5315', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5316', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5317', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5318', 'item', '248'); -INSERT INTO cp_node VALUES ('5319', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5320', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5321', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5322', 'item', '248'); -INSERT INTO cp_node VALUES ('5323', 'item', '248'); -INSERT INTO cp_node VALUES ('5324', 'item', '248'); -INSERT INTO cp_node VALUES ('5325', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5326', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5327', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5328', 'item', '248'); -INSERT INTO cp_node VALUES ('5329', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5330', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5331', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5332', 'item', '248'); -INSERT INTO cp_node VALUES ('5333', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5334', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5335', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5336', 'item', '248'); -INSERT INTO cp_node VALUES ('5337', 'item', '248'); -INSERT INTO cp_node VALUES ('5338', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5339', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5340', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5341', 'item', '248'); -INSERT INTO cp_node VALUES ('5342', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5343', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5344', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5345', 'item', '248'); -INSERT INTO cp_node VALUES ('5346', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5347', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5348', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5349', 'item', '248'); -INSERT INTO cp_node VALUES ('5350', 'item', '248'); -INSERT INTO cp_node VALUES ('5351', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5352', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5353', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5354', 'item', '248'); -INSERT INTO cp_node VALUES ('5355', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5356', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5357', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5358', 'item', '248'); -INSERT INTO cp_node VALUES ('5359', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5360', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5361', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5362', 'item', '248'); -INSERT INTO cp_node VALUES ('5363', 'item', '248'); -INSERT INTO cp_node VALUES ('5364', 'item', '248'); -INSERT INTO cp_node VALUES ('5365', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5366', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5367', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5368', 'item', '248'); -INSERT INTO cp_node VALUES ('5369', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5370', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5371', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5372', 'item', '248'); -INSERT INTO cp_node VALUES ('5373', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5374', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5375', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5376', 'item', '248'); -INSERT INTO cp_node VALUES ('5377', 'item', '248'); -INSERT INTO cp_node VALUES ('5378', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5379', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5380', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5381', 'item', '248'); -INSERT INTO cp_node VALUES ('5382', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5383', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5384', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5385', 'item', '248'); -INSERT INTO cp_node VALUES ('5386', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5387', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5388', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5389', 'item', '248'); -INSERT INTO cp_node VALUES ('5390', 'item', '248'); -INSERT INTO cp_node VALUES ('5391', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5392', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5393', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5394', 'item', '248'); -INSERT INTO cp_node VALUES ('5395', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5396', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5397', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5398', 'item', '248'); -INSERT INTO cp_node VALUES ('5399', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5400', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5401', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5402', 'item', '248'); -INSERT INTO cp_node VALUES ('5403', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5404', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5405', 'hideLMSUI', '248'); -INSERT INTO cp_node VALUES ('5406', 'resource', '248'); -INSERT INTO cp_node VALUES ('5407', 'file', '248'); -INSERT INTO cp_node VALUES ('5408', 'dependency', '248'); -INSERT INTO cp_node VALUES ('5409', 'dependency', '248'); -INSERT INTO cp_node VALUES ('5410', 'dependency', '248'); -INSERT INTO cp_node VALUES ('5411', 'dependency', '248'); -INSERT INTO cp_node VALUES ('5412', 'dependency', '248'); -INSERT INTO cp_node VALUES ('5413', 'resource', '248'); -INSERT INTO cp_node VALUES ('5414', 'file', '248'); -INSERT INTO cp_node VALUES ('5415', 'resource', '248'); -INSERT INTO cp_node VALUES ('5416', 'file', '248'); -INSERT INTO cp_node VALUES ('5417', 'resource', '248'); -INSERT INTO cp_node VALUES ('5418', 'file', '248'); -INSERT INTO cp_node VALUES ('5419', 'resource', '248'); -INSERT INTO cp_node VALUES ('5420', 'file', '248'); -INSERT INTO cp_node VALUES ('5421', 'dependency', '248'); -INSERT INTO cp_node VALUES ('5422', 'resource', '248'); -INSERT INTO cp_node VALUES ('5423', 'file', '248'); -INSERT INTO cp_node VALUES ('5424', 'resource', '248'); -INSERT INTO cp_node VALUES ('5425', 'file', '248'); -INSERT INTO cp_node VALUES ('5426', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5427', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5428', 'objective', '248'); -INSERT INTO cp_node VALUES ('5429', 'mapInfo', '248'); -INSERT INTO cp_node VALUES ('5430', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5431', 'objective', '248'); -INSERT INTO cp_node VALUES ('5432', 'mapInfo', '248'); -INSERT INTO cp_node VALUES ('5433', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5434', 'objective', '248'); -INSERT INTO cp_node VALUES ('5435', 'mapInfo', '248'); -INSERT INTO cp_node VALUES ('5436', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5437', 'objective', '248'); -INSERT INTO cp_node VALUES ('5438', 'mapInfo', '248'); -INSERT INTO cp_node VALUES ('5439', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5440', 'objective', '248'); -INSERT INTO cp_node VALUES ('5441', 'mapInfo', '248'); -INSERT INTO cp_node VALUES ('5442', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5443', 'objective', '248'); -INSERT INTO cp_node VALUES ('5444', 'mapInfo', '248'); -INSERT INTO cp_node VALUES ('5445', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5446', 'objective', '248'); -INSERT INTO cp_node VALUES ('5447', 'mapInfo', '248'); -INSERT INTO cp_node VALUES ('5448', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5449', 'objective', '248'); -INSERT INTO cp_node VALUES ('5450', 'mapInfo', '248'); -INSERT INTO cp_node VALUES ('5451', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5452', 'objective', '248'); -INSERT INTO cp_node VALUES ('5453', 'mapInfo', '248'); -INSERT INTO cp_node VALUES ('5454', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5455', 'rule', '248'); -INSERT INTO cp_node VALUES ('5456', 'condition', '248'); -INSERT INTO cp_node VALUES ('5457', 'rule', '248'); -INSERT INTO cp_node VALUES ('5458', 'condition', '248'); -INSERT INTO cp_node VALUES ('5459', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5460', 'objective', '248'); -INSERT INTO cp_node VALUES ('5461', 'objective', '248'); -INSERT INTO cp_node VALUES ('5462', 'mapInfo', '248'); -INSERT INTO cp_node VALUES ('5463', 'objective', '248'); -INSERT INTO cp_node VALUES ('5464', 'mapInfo', '248'); -INSERT INTO cp_node VALUES ('5465', 'objective', '248'); -INSERT INTO cp_node VALUES ('5466', 'mapInfo', '248'); -INSERT INTO cp_node VALUES ('5467', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5468', 'rule', '248'); -INSERT INTO cp_node VALUES ('5469', 'condition', '248'); -INSERT INTO cp_node VALUES ('5470', 'rule', '248'); -INSERT INTO cp_node VALUES ('5471', 'condition', '248'); -INSERT INTO cp_node VALUES ('5472', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5473', 'rule', '248'); -INSERT INTO cp_node VALUES ('5474', 'condition', '248'); -INSERT INTO cp_node VALUES ('5475', 'rule', '248'); -INSERT INTO cp_node VALUES ('5476', 'condition', '248'); -INSERT INTO cp_node VALUES ('5477', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5478', 'rule', '248'); -INSERT INTO cp_node VALUES ('5479', 'condition', '248'); -INSERT INTO cp_node VALUES ('5480', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5481', 'rule', '248'); -INSERT INTO cp_node VALUES ('5482', 'condition', '248'); -INSERT INTO cp_node VALUES ('5483', 'rule', '248'); -INSERT INTO cp_node VALUES ('5484', 'condition', '248'); -INSERT INTO cp_node VALUES ('5485', 'sequencing', '248'); -INSERT INTO cp_node VALUES ('5486', 'rule', '248'); -INSERT INTO cp_node VALUES ('5487', 'condition', '248'); -INSERT INTO cp_node VALUES ('5488', 'manifest', '249'); -INSERT INTO cp_node VALUES ('5489', 'organization', '249'); -INSERT INTO cp_node VALUES ('5490', 'item', '249'); -INSERT INTO cp_node VALUES ('5491', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5492', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5493', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5494', 'item', '249'); -INSERT INTO cp_node VALUES ('5495', 'item', '249'); -INSERT INTO cp_node VALUES ('5496', 'item', '249'); -INSERT INTO cp_node VALUES ('5497', 'item', '249'); -INSERT INTO cp_node VALUES ('5498', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5499', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5500', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5501', 'item', '249'); -INSERT INTO cp_node VALUES ('5502', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5503', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5504', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5505', 'item', '249'); -INSERT INTO cp_node VALUES ('5506', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5507', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5508', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5509', 'item', '249'); -INSERT INTO cp_node VALUES ('5510', 'item', '249'); -INSERT INTO cp_node VALUES ('5511', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5512', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5513', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5514', 'item', '249'); -INSERT INTO cp_node VALUES ('5515', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5516', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5517', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5518', 'item', '249'); -INSERT INTO cp_node VALUES ('5519', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5520', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5521', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5522', 'item', '249'); -INSERT INTO cp_node VALUES ('5523', 'item', '249'); -INSERT INTO cp_node VALUES ('5524', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5525', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5526', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5527', 'item', '249'); -INSERT INTO cp_node VALUES ('5528', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5529', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5530', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5531', 'item', '249'); -INSERT INTO cp_node VALUES ('5532', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5533', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5534', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5535', 'item', '249'); -INSERT INTO cp_node VALUES ('5536', 'item', '249'); -INSERT INTO cp_node VALUES ('5537', 'item', '249'); -INSERT INTO cp_node VALUES ('5538', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5539', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5540', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5541', 'item', '249'); -INSERT INTO cp_node VALUES ('5542', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5543', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5544', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5545', 'item', '249'); -INSERT INTO cp_node VALUES ('5546', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5547', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5548', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5549', 'item', '249'); -INSERT INTO cp_node VALUES ('5550', 'item', '249'); -INSERT INTO cp_node VALUES ('5551', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5552', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5553', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5554', 'item', '249'); -INSERT INTO cp_node VALUES ('5555', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5556', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5557', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5558', 'item', '249'); -INSERT INTO cp_node VALUES ('5559', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5560', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5561', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5562', 'item', '249'); -INSERT INTO cp_node VALUES ('5563', 'item', '249'); -INSERT INTO cp_node VALUES ('5564', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5565', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5566', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5567', 'item', '249'); -INSERT INTO cp_node VALUES ('5568', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5569', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5570', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5571', 'item', '249'); -INSERT INTO cp_node VALUES ('5572', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5573', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5574', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5575', 'item', '249'); -INSERT INTO cp_node VALUES ('5576', 'item', '249'); -INSERT INTO cp_node VALUES ('5577', 'item', '249'); -INSERT INTO cp_node VALUES ('5578', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5579', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5580', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5581', 'item', '249'); -INSERT INTO cp_node VALUES ('5582', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5583', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5584', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5585', 'item', '249'); -INSERT INTO cp_node VALUES ('5586', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5587', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5588', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5589', 'item', '249'); -INSERT INTO cp_node VALUES ('5590', 'item', '249'); -INSERT INTO cp_node VALUES ('5591', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5592', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5593', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5594', 'item', '249'); -INSERT INTO cp_node VALUES ('5595', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5596', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5597', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5598', 'item', '249'); -INSERT INTO cp_node VALUES ('5599', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5600', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5601', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5602', 'item', '249'); -INSERT INTO cp_node VALUES ('5603', 'item', '249'); -INSERT INTO cp_node VALUES ('5604', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5605', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5606', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5607', 'item', '249'); -INSERT INTO cp_node VALUES ('5608', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5609', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5610', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5611', 'item', '249'); -INSERT INTO cp_node VALUES ('5612', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5613', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5614', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5615', 'item', '249'); -INSERT INTO cp_node VALUES ('5616', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5617', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5618', 'hideLMSUI', '249'); -INSERT INTO cp_node VALUES ('5619', 'resource', '249'); -INSERT INTO cp_node VALUES ('5620', 'file', '249'); -INSERT INTO cp_node VALUES ('5621', 'dependency', '249'); -INSERT INTO cp_node VALUES ('5622', 'dependency', '249'); -INSERT INTO cp_node VALUES ('5623', 'dependency', '249'); -INSERT INTO cp_node VALUES ('5624', 'dependency', '249'); -INSERT INTO cp_node VALUES ('5625', 'dependency', '249'); -INSERT INTO cp_node VALUES ('5626', 'resource', '249'); -INSERT INTO cp_node VALUES ('5627', 'file', '249'); -INSERT INTO cp_node VALUES ('5628', 'resource', '249'); -INSERT INTO cp_node VALUES ('5629', 'file', '249'); -INSERT INTO cp_node VALUES ('5630', 'resource', '249'); -INSERT INTO cp_node VALUES ('5631', 'file', '249'); -INSERT INTO cp_node VALUES ('5632', 'resource', '249'); -INSERT INTO cp_node VALUES ('5633', 'file', '249'); -INSERT INTO cp_node VALUES ('5634', 'dependency', '249'); -INSERT INTO cp_node VALUES ('5635', 'resource', '249'); -INSERT INTO cp_node VALUES ('5636', 'file', '249'); -INSERT INTO cp_node VALUES ('5637', 'resource', '249'); -INSERT INTO cp_node VALUES ('5638', 'file', '249'); -INSERT INTO cp_node VALUES ('5639', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5640', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5641', 'objective', '249'); -INSERT INTO cp_node VALUES ('5642', 'mapInfo', '249'); -INSERT INTO cp_node VALUES ('5643', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5644', 'objective', '249'); -INSERT INTO cp_node VALUES ('5645', 'objective', '249'); -INSERT INTO cp_node VALUES ('5646', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5647', 'objective', '249'); -INSERT INTO cp_node VALUES ('5648', 'objective', '249'); -INSERT INTO cp_node VALUES ('5649', 'objective', '249'); -INSERT INTO cp_node VALUES ('5650', 'objective', '249'); -INSERT INTO cp_node VALUES ('5651', 'objective', '249'); -INSERT INTO cp_node VALUES ('5652', 'objective', '249'); -INSERT INTO cp_node VALUES ('5653', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5654', 'objective', '249'); -INSERT INTO cp_node VALUES ('5655', 'mapInfo', '249'); -INSERT INTO cp_node VALUES ('5656', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5657', 'objective', '249'); -INSERT INTO cp_node VALUES ('5658', 'mapInfo', '249'); -INSERT INTO cp_node VALUES ('5659', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5660', 'objective', '249'); -INSERT INTO cp_node VALUES ('5661', 'mapInfo', '249'); -INSERT INTO cp_node VALUES ('5662', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5663', 'objective', '249'); -INSERT INTO cp_node VALUES ('5664', 'mapInfo', '249'); -INSERT INTO cp_node VALUES ('5665', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5666', 'objective', '249'); -INSERT INTO cp_node VALUES ('5667', 'mapInfo', '249'); -INSERT INTO cp_node VALUES ('5668', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5669', 'objective', '249'); -INSERT INTO cp_node VALUES ('5670', 'mapInfo', '249'); -INSERT INTO cp_node VALUES ('5671', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5672', 'objective', '249'); -INSERT INTO cp_node VALUES ('5673', 'mapInfo', '249'); -INSERT INTO cp_node VALUES ('5674', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5675', 'objective', '249'); -INSERT INTO cp_node VALUES ('5676', 'mapInfo', '249'); -INSERT INTO cp_node VALUES ('5677', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5678', 'rule', '249'); -INSERT INTO cp_node VALUES ('5679', 'condition', '249'); -INSERT INTO cp_node VALUES ('5680', 'rule', '249'); -INSERT INTO cp_node VALUES ('5681', 'condition', '249'); -INSERT INTO cp_node VALUES ('5682', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5683', 'objective', '249'); -INSERT INTO cp_node VALUES ('5684', 'objective', '249'); -INSERT INTO cp_node VALUES ('5685', 'mapInfo', '249'); -INSERT INTO cp_node VALUES ('5686', 'objective', '249'); -INSERT INTO cp_node VALUES ('5687', 'mapInfo', '249'); -INSERT INTO cp_node VALUES ('5688', 'objective', '249'); -INSERT INTO cp_node VALUES ('5689', 'mapInfo', '249'); -INSERT INTO cp_node VALUES ('5690', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5691', 'rule', '249'); -INSERT INTO cp_node VALUES ('5692', 'condition', '249'); -INSERT INTO cp_node VALUES ('5693', 'rule', '249'); -INSERT INTO cp_node VALUES ('5694', 'condition', '249'); -INSERT INTO cp_node VALUES ('5695', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5696', 'rule', '249'); -INSERT INTO cp_node VALUES ('5697', 'condition', '249'); -INSERT INTO cp_node VALUES ('5698', 'rule', '249'); -INSERT INTO cp_node VALUES ('5699', 'condition', '249'); -INSERT INTO cp_node VALUES ('5700', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5701', 'rule', '249'); -INSERT INTO cp_node VALUES ('5702', 'condition', '249'); -INSERT INTO cp_node VALUES ('5703', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5704', 'rule', '249'); -INSERT INTO cp_node VALUES ('5705', 'condition', '249'); -INSERT INTO cp_node VALUES ('5706', 'rule', '249'); -INSERT INTO cp_node VALUES ('5707', 'condition', '249'); -INSERT INTO cp_node VALUES ('5708', 'sequencing', '249'); -INSERT INTO cp_node VALUES ('5709', 'rule', '249'); -INSERT INTO cp_node VALUES ('5710', 'condition', '249'); -INSERT INTO cp_node VALUES ('5711', 'manifest', '252'); -INSERT INTO cp_node VALUES ('5712', 'organization', '252'); -INSERT INTO cp_node VALUES ('5713', 'item', '252'); -INSERT INTO cp_node VALUES ('5714', 'item', '252'); -INSERT INTO cp_node VALUES ('5715', 'item', '252'); -INSERT INTO cp_node VALUES ('5716', 'item', '252'); -INSERT INTO cp_node VALUES ('5717', 'item', '252'); -INSERT INTO cp_node VALUES ('5718', 'item', '252'); -INSERT INTO cp_node VALUES ('5719', 'resource', '252'); -INSERT INTO cp_node VALUES ('5720', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5721', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5722', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5723', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5724', 'resource', '252'); -INSERT INTO cp_node VALUES ('5725', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5726', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5727', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5728', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5729', 'resource', '252'); -INSERT INTO cp_node VALUES ('5730', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5731', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5732', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5733', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5734', 'resource', '252'); -INSERT INTO cp_node VALUES ('5735', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5736', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5737', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5738', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5739', 'resource', '252'); -INSERT INTO cp_node VALUES ('5740', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5741', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5742', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5743', 'dependency', '252'); -INSERT INTO cp_node VALUES ('5744', 'resource', '252'); -INSERT INTO cp_node VALUES ('5745', 'file', '252'); -INSERT INTO cp_node VALUES ('5746', 'file', '252'); -INSERT INTO cp_node VALUES ('5747', 'file', '252'); -INSERT INTO cp_node VALUES ('5748', 'resource', '252'); -INSERT INTO cp_node VALUES ('5749', 'file', '252'); -INSERT INTO cp_node VALUES ('5750', 'file', '252'); -INSERT INTO cp_node VALUES ('5751', 'file', '252'); -INSERT INTO cp_node VALUES ('5752', 'file', '252'); -INSERT INTO cp_node VALUES ('5753', 'resource', '252'); -INSERT INTO cp_node VALUES ('5754', 'resource', '252'); -INSERT INTO cp_node VALUES ('5755', 'file', '252'); -INSERT INTO cp_node VALUES ('5756', 'file', '252'); -INSERT INTO cp_node VALUES ('5757', 'file', '252'); -INSERT INTO cp_node VALUES ('5758', 'file', '252'); -INSERT INTO cp_node VALUES ('5759', 'file', '252'); -INSERT INTO cp_node VALUES ('5760', 'file', '252'); -INSERT INTO cp_node VALUES ('5761', 'file', '252'); -INSERT INTO cp_node VALUES ('5762', 'file', '252'); -INSERT INTO cp_node VALUES ('5763', 'file', '252'); -INSERT INTO cp_node VALUES ('5764', 'file', '252'); -INSERT INTO cp_node VALUES ('5765', 'file', '252'); -INSERT INTO cp_node VALUES ('5766', 'file', '252'); -INSERT INTO cp_node VALUES ('5767', 'file', '252'); -INSERT INTO cp_node VALUES ('5768', 'file', '252'); -INSERT INTO cp_node VALUES ('5769', 'file', '252'); -INSERT INTO cp_node VALUES ('5770', 'file', '252'); -INSERT INTO cp_node VALUES ('5771', 'file', '252'); -INSERT INTO cp_node VALUES ('5772', 'file', '252'); -INSERT INTO cp_node VALUES ('5773', 'file', '252'); -INSERT INTO cp_node VALUES ('5774', 'file', '252'); -INSERT INTO cp_node VALUES ('5775', 'file', '252'); -INSERT INTO cp_node VALUES ('5776', 'file', '252'); -INSERT INTO cp_node VALUES ('5777', 'file', '252'); -INSERT INTO cp_node VALUES ('5778', 'file', '252'); -INSERT INTO cp_node VALUES ('5779', 'file', '252'); -INSERT INTO cp_node VALUES ('5780', 'file', '252'); -INSERT INTO cp_node VALUES ('5781', 'file', '252'); -INSERT INTO cp_node VALUES ('5782', 'file', '252'); -INSERT INTO cp_node VALUES ('5783', 'file', '252'); -INSERT INTO cp_node VALUES ('5784', 'file', '252'); -INSERT INTO cp_node VALUES ('5785', 'file', '252'); -INSERT INTO cp_node VALUES ('5786', 'file', '252'); -INSERT INTO cp_node VALUES ('5787', 'file', '252'); -INSERT INTO cp_node VALUES ('5788', 'file', '252'); -INSERT INTO cp_node VALUES ('5789', 'file', '252'); -INSERT INTO cp_node VALUES ('5790', 'file', '252'); -INSERT INTO cp_node VALUES ('5791', 'file', '252'); -INSERT INTO cp_node VALUES ('5792', 'file', '252'); -INSERT INTO cp_node VALUES ('5793', 'file', '252'); -INSERT INTO cp_node VALUES ('5794', 'file', '252'); -INSERT INTO cp_node VALUES ('5795', 'file', '252'); -INSERT INTO cp_node VALUES ('5796', 'file', '252'); -INSERT INTO cp_node VALUES ('5797', 'file', '252'); -INSERT INTO cp_node VALUES ('5798', 'file', '252'); -INSERT INTO cp_node VALUES ('5799', 'file', '252'); -INSERT INTO cp_node VALUES ('5800', 'file', '252'); -INSERT INTO cp_node VALUES ('5801', 'file', '252'); -INSERT INTO cp_node VALUES ('5802', 'file', '252'); -INSERT INTO cp_node VALUES ('5803', 'file', '252'); -INSERT INTO cp_node VALUES ('5804', 'file', '252'); -INSERT INTO cp_node VALUES ('5805', 'file', '252'); -INSERT INTO cp_node VALUES ('5806', 'file', '252'); -INSERT INTO cp_node VALUES ('5807', 'file', '252'); -INSERT INTO cp_node VALUES ('5808', 'file', '252'); -INSERT INTO cp_node VALUES ('5809', 'file', '252'); -INSERT INTO cp_node VALUES ('5810', 'file', '252'); -INSERT INTO cp_node VALUES ('5811', 'file', '252'); -INSERT INTO cp_node VALUES ('5812', 'file', '252'); -INSERT INTO cp_node VALUES ('5813', 'file', '252'); -INSERT INTO cp_node VALUES ('5814', 'file', '252'); -INSERT INTO cp_node VALUES ('5815', 'file', '252'); -INSERT INTO cp_node VALUES ('5816', 'file', '252'); -INSERT INTO cp_node VALUES ('5817', 'file', '252'); -INSERT INTO cp_node VALUES ('5818', 'file', '252'); -INSERT INTO cp_node VALUES ('5819', 'file', '252'); -INSERT INTO cp_node VALUES ('5820', 'file', '252'); -INSERT INTO cp_node VALUES ('5821', 'file', '252'); -INSERT INTO cp_node VALUES ('5822', 'file', '252'); -INSERT INTO cp_node VALUES ('5823', 'resource', '252'); -INSERT INTO cp_node VALUES ('5824', 'file', '252'); -INSERT INTO cp_node VALUES ('5825', 'file', '252'); -INSERT INTO cp_node VALUES ('5826', 'file', '252'); -INSERT INTO cp_node VALUES ('5827', 'resource', '252'); -INSERT INTO cp_node VALUES ('5828', 'file', '252'); -INSERT INTO cp_node VALUES ('5829', 'file', '252'); -INSERT INTO cp_node VALUES ('5830', 'file', '252'); -INSERT INTO cp_node VALUES ('5831', 'file', '252'); -INSERT INTO cp_node VALUES ('5832', 'file', '252'); -INSERT INTO cp_node VALUES ('5833', 'file', '252'); -INSERT INTO cp_node VALUES ('5834', 'file', '252'); -INSERT INTO cp_node VALUES ('5835', 'file', '252'); -INSERT INTO cp_node VALUES ('5836', 'resource', '252'); -INSERT INTO cp_node VALUES ('5837', 'resource', '252'); -INSERT INTO cp_node VALUES ('5838', 'file', '252'); -INSERT INTO cp_node VALUES ('5839', 'file', '252'); -INSERT INTO cp_node VALUES ('5840', 'file', '252'); -INSERT INTO cp_node VALUES ('5841', 'file', '252'); -INSERT INTO cp_node VALUES ('5842', 'file', '252'); -INSERT INTO cp_node VALUES ('5843', 'file', '252'); -INSERT INTO cp_node VALUES ('5844', 'file', '252'); -INSERT INTO cp_node VALUES ('5845', 'file', '252'); -INSERT INTO cp_node VALUES ('5846', 'file', '252'); -INSERT INTO cp_node VALUES ('5847', 'file', '252'); -INSERT INTO cp_node VALUES ('5848', 'file', '252'); -INSERT INTO cp_node VALUES ('5849', 'file', '252'); -INSERT INTO cp_node VALUES ('5850', 'file', '252'); -INSERT INTO cp_node VALUES ('5851', 'file', '252'); -INSERT INTO cp_node VALUES ('5852', 'file', '252'); -INSERT INTO cp_node VALUES ('5853', 'file', '252'); -INSERT INTO cp_node VALUES ('5854', 'file', '252'); -INSERT INTO cp_node VALUES ('5855', 'file', '252'); -INSERT INTO cp_node VALUES ('5856', 'file', '252'); -INSERT INTO cp_node VALUES ('5857', 'file', '252'); -INSERT INTO cp_node VALUES ('5858', 'file', '252'); -INSERT INTO cp_node VALUES ('5859', 'file', '252'); -INSERT INTO cp_node VALUES ('5860', 'file', '252'); -INSERT INTO cp_node VALUES ('5861', 'file', '252'); -INSERT INTO cp_node VALUES ('5862', 'file', '252'); -INSERT INTO cp_node VALUES ('5863', 'file', '252'); -INSERT INTO cp_node VALUES ('5864', 'file', '252'); -INSERT INTO cp_node VALUES ('5865', 'file', '252'); -INSERT INTO cp_node VALUES ('5866', 'file', '252'); -INSERT INTO cp_node VALUES ('5867', 'file', '252'); -INSERT INTO cp_node VALUES ('5868', 'file', '252'); -INSERT INTO cp_node VALUES ('5869', 'file', '252'); -INSERT INTO cp_node VALUES ('5870', 'file', '252'); -INSERT INTO cp_node VALUES ('5871', 'file', '252'); -INSERT INTO cp_node VALUES ('5872', 'file', '252'); -INSERT INTO cp_node VALUES ('5873', 'file', '252'); -INSERT INTO cp_node VALUES ('5874', 'file', '252'); -INSERT INTO cp_node VALUES ('5875', 'file', '252'); -INSERT INTO cp_node VALUES ('5876', 'file', '252'); -INSERT INTO cp_node VALUES ('5877', 'file', '252'); -INSERT INTO cp_node VALUES ('5878', 'file', '252'); -INSERT INTO cp_node VALUES ('5879', 'file', '252'); -INSERT INTO cp_node VALUES ('5880', 'file', '252'); -INSERT INTO cp_node VALUES ('5881', 'file', '252'); -INSERT INTO cp_node VALUES ('5882', 'file', '252'); -INSERT INTO cp_node VALUES ('5883', 'file', '252'); -INSERT INTO cp_node VALUES ('5884', 'file', '252'); -INSERT INTO cp_node VALUES ('5885', 'file', '252'); -INSERT INTO cp_node VALUES ('5886', 'file', '252'); -INSERT INTO cp_node VALUES ('5887', 'file', '252'); -INSERT INTO cp_node VALUES ('5888', 'file', '252'); -INSERT INTO cp_node VALUES ('5889', 'file', '252'); -INSERT INTO cp_node VALUES ('5890', 'file', '252'); -INSERT INTO cp_node VALUES ('5891', 'file', '252'); -INSERT INTO cp_node VALUES ('5892', 'file', '252'); -INSERT INTO cp_node VALUES ('5893', 'file', '252'); -INSERT INTO cp_node VALUES ('5894', 'file', '252'); -INSERT INTO cp_node VALUES ('5895', 'file', '252'); -INSERT INTO cp_node VALUES ('5896', 'file', '252'); -INSERT INTO cp_node VALUES ('5897', 'file', '252'); -INSERT INTO cp_node VALUES ('5898', 'file', '252'); -INSERT INTO cp_node VALUES ('5899', 'file', '252'); -INSERT INTO cp_node VALUES ('5900', 'file', '252'); -INSERT INTO cp_node VALUES ('5901', 'file', '252'); -INSERT INTO cp_node VALUES ('5902', 'file', '252'); -INSERT INTO cp_node VALUES ('5903', 'file', '252'); -INSERT INTO cp_node VALUES ('5904', 'file', '252'); -INSERT INTO cp_node VALUES ('5905', 'file', '252'); -INSERT INTO cp_node VALUES ('5906', 'resource', '252'); -INSERT INTO cp_node VALUES ('5907', 'file', '252'); -INSERT INTO cp_node VALUES ('5908', 'file', '252'); -INSERT INTO cp_node VALUES ('5909', 'file', '252'); -INSERT INTO cp_node VALUES ('5910', 'resource', '252'); -INSERT INTO cp_node VALUES ('5911', 'file', '252'); -INSERT INTO cp_node VALUES ('5912', 'file', '252'); -INSERT INTO cp_node VALUES ('5913', 'file', '252'); -INSERT INTO cp_node VALUES ('5914', 'file', '252'); -INSERT INTO cp_node VALUES ('5915', 'file', '252'); -INSERT INTO cp_node VALUES ('5916', 'file', '252'); -INSERT INTO cp_node VALUES ('5917', 'file', '252'); -INSERT INTO cp_node VALUES ('5918', 'file', '252'); -INSERT INTO cp_node VALUES ('5919', 'file', '252'); -INSERT INTO cp_node VALUES ('5920', 'file', '252'); -INSERT INTO cp_node VALUES ('5921', 'file', '252'); -INSERT INTO cp_node VALUES ('5922', 'file', '252'); -INSERT INTO cp_node VALUES ('5923', 'resource', '252'); -INSERT INTO cp_node VALUES ('5924', 'resource', '252'); -INSERT INTO cp_node VALUES ('5925', 'file', '252'); -INSERT INTO cp_node VALUES ('5926', 'file', '252'); -INSERT INTO cp_node VALUES ('5927', 'file', '252'); -INSERT INTO cp_node VALUES ('5928', 'file', '252'); -INSERT INTO cp_node VALUES ('5929', 'file', '252'); -INSERT INTO cp_node VALUES ('5930', 'file', '252'); -INSERT INTO cp_node VALUES ('5931', 'file', '252'); -INSERT INTO cp_node VALUES ('5932', 'file', '252'); -INSERT INTO cp_node VALUES ('5933', 'file', '252'); -INSERT INTO cp_node VALUES ('5934', 'file', '252'); -INSERT INTO cp_node VALUES ('5935', 'file', '252'); -INSERT INTO cp_node VALUES ('5936', 'file', '252'); -INSERT INTO cp_node VALUES ('5937', 'file', '252'); -INSERT INTO cp_node VALUES ('5938', 'file', '252'); -INSERT INTO cp_node VALUES ('5939', 'file', '252'); -INSERT INTO cp_node VALUES ('5940', 'file', '252'); -INSERT INTO cp_node VALUES ('5941', 'file', '252'); -INSERT INTO cp_node VALUES ('5942', 'file', '252'); -INSERT INTO cp_node VALUES ('5943', 'file', '252'); -INSERT INTO cp_node VALUES ('5944', 'file', '252'); -INSERT INTO cp_node VALUES ('5945', 'file', '252'); -INSERT INTO cp_node VALUES ('5946', 'file', '252'); -INSERT INTO cp_node VALUES ('5947', 'file', '252'); -INSERT INTO cp_node VALUES ('5948', 'file', '252'); -INSERT INTO cp_node VALUES ('5949', 'file', '252'); -INSERT INTO cp_node VALUES ('5950', 'file', '252'); -INSERT INTO cp_node VALUES ('5951', 'file', '252'); -INSERT INTO cp_node VALUES ('5952', 'file', '252'); -INSERT INTO cp_node VALUES ('5953', 'file', '252'); -INSERT INTO cp_node VALUES ('5954', 'file', '252'); -INSERT INTO cp_node VALUES ('5955', 'file', '252'); -INSERT INTO cp_node VALUES ('5956', 'file', '252'); -INSERT INTO cp_node VALUES ('5957', 'file', '252'); -INSERT INTO cp_node VALUES ('5958', 'file', '252'); -INSERT INTO cp_node VALUES ('5959', 'file', '252'); -INSERT INTO cp_node VALUES ('5960', 'file', '252'); -INSERT INTO cp_node VALUES ('5961', 'file', '252'); -INSERT INTO cp_node VALUES ('5962', 'file', '252'); -INSERT INTO cp_node VALUES ('5963', 'file', '252'); -INSERT INTO cp_node VALUES ('5964', 'file', '252'); -INSERT INTO cp_node VALUES ('5965', 'file', '252'); -INSERT INTO cp_node VALUES ('5966', 'file', '252'); -INSERT INTO cp_node VALUES ('5967', 'file', '252'); -INSERT INTO cp_node VALUES ('5968', 'file', '252'); -INSERT INTO cp_node VALUES ('5969', 'file', '252'); -INSERT INTO cp_node VALUES ('5970', 'file', '252'); -INSERT INTO cp_node VALUES ('5971', 'file', '252'); -INSERT INTO cp_node VALUES ('5972', 'file', '252'); -INSERT INTO cp_node VALUES ('5973', 'file', '252'); -INSERT INTO cp_node VALUES ('5974', 'file', '252'); -INSERT INTO cp_node VALUES ('5975', 'file', '252'); -INSERT INTO cp_node VALUES ('5976', 'file', '252'); -INSERT INTO cp_node VALUES ('5977', 'file', '252'); -INSERT INTO cp_node VALUES ('5978', 'file', '252'); -INSERT INTO cp_node VALUES ('5979', 'file', '252'); -INSERT INTO cp_node VALUES ('5980', 'file', '252'); -INSERT INTO cp_node VALUES ('5981', 'file', '252'); -INSERT INTO cp_node VALUES ('5982', 'file', '252'); -INSERT INTO cp_node VALUES ('5983', 'file', '252'); -INSERT INTO cp_node VALUES ('5984', 'file', '252'); -INSERT INTO cp_node VALUES ('5985', 'file', '252'); -INSERT INTO cp_node VALUES ('5986', 'file', '252'); -INSERT INTO cp_node VALUES ('5987', 'file', '252'); -INSERT INTO cp_node VALUES ('5988', 'file', '252'); -INSERT INTO cp_node VALUES ('5989', 'file', '252'); -INSERT INTO cp_node VALUES ('5990', 'file', '252'); -INSERT INTO cp_node VALUES ('5991', 'file', '252'); -INSERT INTO cp_node VALUES ('5992', 'file', '252'); -INSERT INTO cp_node VALUES ('5993', 'resource', '252'); -INSERT INTO cp_node VALUES ('5994', 'file', '252'); -INSERT INTO cp_node VALUES ('5995', 'file', '252'); -INSERT INTO cp_node VALUES ('5996', 'file', '252'); -INSERT INTO cp_node VALUES ('5997', 'resource', '252'); -INSERT INTO cp_node VALUES ('5998', 'file', '252'); -INSERT INTO cp_node VALUES ('5999', 'file', '252'); -INSERT INTO cp_node VALUES ('6000', 'file', '252'); -INSERT INTO cp_node VALUES ('6001', 'file', '252'); -INSERT INTO cp_node VALUES ('6002', 'file', '252'); -INSERT INTO cp_node VALUES ('6003', 'file', '252'); -INSERT INTO cp_node VALUES ('6004', 'file', '252'); -INSERT INTO cp_node VALUES ('6005', 'file', '252'); -INSERT INTO cp_node VALUES ('6006', 'resource', '252'); -INSERT INTO cp_node VALUES ('6007', 'resource', '252'); -INSERT INTO cp_node VALUES ('6008', 'file', '252'); -INSERT INTO cp_node VALUES ('6009', 'file', '252'); -INSERT INTO cp_node VALUES ('6010', 'file', '252'); -INSERT INTO cp_node VALUES ('6011', 'file', '252'); -INSERT INTO cp_node VALUES ('6012', 'file', '252'); -INSERT INTO cp_node VALUES ('6013', 'file', '252'); -INSERT INTO cp_node VALUES ('6014', 'file', '252'); -INSERT INTO cp_node VALUES ('6015', 'file', '252'); -INSERT INTO cp_node VALUES ('6016', 'file', '252'); -INSERT INTO cp_node VALUES ('6017', 'file', '252'); -INSERT INTO cp_node VALUES ('6018', 'file', '252'); -INSERT INTO cp_node VALUES ('6019', 'file', '252'); -INSERT INTO cp_node VALUES ('6020', 'file', '252'); -INSERT INTO cp_node VALUES ('6021', 'file', '252'); -INSERT INTO cp_node VALUES ('6022', 'file', '252'); -INSERT INTO cp_node VALUES ('6023', 'file', '252'); -INSERT INTO cp_node VALUES ('6024', 'file', '252'); -INSERT INTO cp_node VALUES ('6025', 'file', '252'); -INSERT INTO cp_node VALUES ('6026', 'file', '252'); -INSERT INTO cp_node VALUES ('6027', 'file', '252'); -INSERT INTO cp_node VALUES ('6028', 'file', '252'); -INSERT INTO cp_node VALUES ('6029', 'file', '252'); -INSERT INTO cp_node VALUES ('6030', 'file', '252'); -INSERT INTO cp_node VALUES ('6031', 'file', '252'); -INSERT INTO cp_node VALUES ('6032', 'file', '252'); -INSERT INTO cp_node VALUES ('6033', 'file', '252'); -INSERT INTO cp_node VALUES ('6034', 'file', '252'); -INSERT INTO cp_node VALUES ('6035', 'file', '252'); -INSERT INTO cp_node VALUES ('6036', 'file', '252'); -INSERT INTO cp_node VALUES ('6037', 'file', '252'); -INSERT INTO cp_node VALUES ('6038', 'file', '252'); -INSERT INTO cp_node VALUES ('6039', 'file', '252'); -INSERT INTO cp_node VALUES ('6040', 'file', '252'); -INSERT INTO cp_node VALUES ('6041', 'file', '252'); -INSERT INTO cp_node VALUES ('6042', 'file', '252'); -INSERT INTO cp_node VALUES ('6043', 'file', '252'); -INSERT INTO cp_node VALUES ('6044', 'file', '252'); -INSERT INTO cp_node VALUES ('6045', 'file', '252'); -INSERT INTO cp_node VALUES ('6046', 'file', '252'); -INSERT INTO cp_node VALUES ('6047', 'file', '252'); -INSERT INTO cp_node VALUES ('6048', 'file', '252'); -INSERT INTO cp_node VALUES ('6049', 'file', '252'); -INSERT INTO cp_node VALUES ('6050', 'file', '252'); -INSERT INTO cp_node VALUES ('6051', 'file', '252'); -INSERT INTO cp_node VALUES ('6052', 'file', '252'); -INSERT INTO cp_node VALUES ('6053', 'file', '252'); -INSERT INTO cp_node VALUES ('6054', 'file', '252'); -INSERT INTO cp_node VALUES ('6055', 'file', '252'); -INSERT INTO cp_node VALUES ('6056', 'file', '252'); -INSERT INTO cp_node VALUES ('6057', 'file', '252'); -INSERT INTO cp_node VALUES ('6058', 'file', '252'); -INSERT INTO cp_node VALUES ('6059', 'file', '252'); -INSERT INTO cp_node VALUES ('6060', 'file', '252'); -INSERT INTO cp_node VALUES ('6061', 'file', '252'); -INSERT INTO cp_node VALUES ('6062', 'file', '252'); -INSERT INTO cp_node VALUES ('6063', 'file', '252'); -INSERT INTO cp_node VALUES ('6064', 'file', '252'); -INSERT INTO cp_node VALUES ('6065', 'file', '252'); -INSERT INTO cp_node VALUES ('6066', 'file', '252'); -INSERT INTO cp_node VALUES ('6067', 'file', '252'); -INSERT INTO cp_node VALUES ('6068', 'file', '252'); -INSERT INTO cp_node VALUES ('6069', 'file', '252'); -INSERT INTO cp_node VALUES ('6070', 'file', '252'); -INSERT INTO cp_node VALUES ('6071', 'file', '252'); -INSERT INTO cp_node VALUES ('6072', 'file', '252'); -INSERT INTO cp_node VALUES ('6073', 'file', '252'); -INSERT INTO cp_node VALUES ('6074', 'file', '252'); -INSERT INTO cp_node VALUES ('6075', 'file', '252'); -INSERT INTO cp_node VALUES ('6076', 'resource', '252'); -INSERT INTO cp_node VALUES ('6077', 'file', '252'); -INSERT INTO cp_node VALUES ('6078', 'file', '252'); -INSERT INTO cp_node VALUES ('6079', 'file', '252'); -INSERT INTO cp_node VALUES ('6080', 'resource', '252'); -INSERT INTO cp_node VALUES ('6081', 'file', '252'); -INSERT INTO cp_node VALUES ('6082', 'file', '252'); -INSERT INTO cp_node VALUES ('6083', 'file', '252'); -INSERT INTO cp_node VALUES ('6084', 'file', '252'); -INSERT INTO cp_node VALUES ('6085', 'resource', '252'); -INSERT INTO cp_node VALUES ('6086', 'resource', '252'); -INSERT INTO cp_node VALUES ('6087', 'file', '252'); -INSERT INTO cp_node VALUES ('6088', 'file', '252'); -INSERT INTO cp_node VALUES ('6089', 'file', '252'); -INSERT INTO cp_node VALUES ('6090', 'file', '252'); -INSERT INTO cp_node VALUES ('6091', 'file', '252'); -INSERT INTO cp_node VALUES ('6092', 'file', '252'); -INSERT INTO cp_node VALUES ('6093', 'file', '252'); -INSERT INTO cp_node VALUES ('6094', 'file', '252'); -INSERT INTO cp_node VALUES ('6095', 'file', '252'); -INSERT INTO cp_node VALUES ('6096', 'file', '252'); -INSERT INTO cp_node VALUES ('6097', 'file', '252'); -INSERT INTO cp_node VALUES ('6098', 'file', '252'); -INSERT INTO cp_node VALUES ('6099', 'file', '252'); -INSERT INTO cp_node VALUES ('6100', 'file', '252'); -INSERT INTO cp_node VALUES ('6101', 'file', '252'); -INSERT INTO cp_node VALUES ('6102', 'file', '252'); -INSERT INTO cp_node VALUES ('6103', 'file', '252'); -INSERT INTO cp_node VALUES ('6104', 'file', '252'); -INSERT INTO cp_node VALUES ('6105', 'file', '252'); -INSERT INTO cp_node VALUES ('6106', 'file', '252'); -INSERT INTO cp_node VALUES ('6107', 'file', '252'); -INSERT INTO cp_node VALUES ('6108', 'file', '252'); -INSERT INTO cp_node VALUES ('6109', 'file', '252'); -INSERT INTO cp_node VALUES ('6110', 'file', '252'); -INSERT INTO cp_node VALUES ('6111', 'file', '252'); -INSERT INTO cp_node VALUES ('6112', 'file', '252'); -INSERT INTO cp_node VALUES ('6113', 'file', '252'); -INSERT INTO cp_node VALUES ('6114', 'file', '252'); -INSERT INTO cp_node VALUES ('6115', 'file', '252'); -INSERT INTO cp_node VALUES ('6116', 'file', '252'); -INSERT INTO cp_node VALUES ('6117', 'file', '252'); -INSERT INTO cp_node VALUES ('6118', 'file', '252'); -INSERT INTO cp_node VALUES ('6119', 'file', '252'); -INSERT INTO cp_node VALUES ('6120', 'file', '252'); -INSERT INTO cp_node VALUES ('6121', 'file', '252'); -INSERT INTO cp_node VALUES ('6122', 'file', '252'); -INSERT INTO cp_node VALUES ('6123', 'file', '252'); -INSERT INTO cp_node VALUES ('6124', 'file', '252'); -INSERT INTO cp_node VALUES ('6125', 'file', '252'); -INSERT INTO cp_node VALUES ('6126', 'file', '252'); -INSERT INTO cp_node VALUES ('6127', 'file', '252'); -INSERT INTO cp_node VALUES ('6128', 'file', '252'); -INSERT INTO cp_node VALUES ('6129', 'file', '252'); -INSERT INTO cp_node VALUES ('6130', 'file', '252'); -INSERT INTO cp_node VALUES ('6131', 'file', '252'); -INSERT INTO cp_node VALUES ('6132', 'file', '252'); -INSERT INTO cp_node VALUES ('6133', 'file', '252'); -INSERT INTO cp_node VALUES ('6134', 'file', '252'); -INSERT INTO cp_node VALUES ('6135', 'file', '252'); -INSERT INTO cp_node VALUES ('6136', 'file', '252'); -INSERT INTO cp_node VALUES ('6137', 'file', '252'); -INSERT INTO cp_node VALUES ('6138', 'file', '252'); -INSERT INTO cp_node VALUES ('6139', 'file', '252'); -INSERT INTO cp_node VALUES ('6140', 'file', '252'); -INSERT INTO cp_node VALUES ('6141', 'file', '252'); -INSERT INTO cp_node VALUES ('6142', 'file', '252'); -INSERT INTO cp_node VALUES ('6143', 'file', '252'); -INSERT INTO cp_node VALUES ('6144', 'file', '252'); -INSERT INTO cp_node VALUES ('6145', 'file', '252'); -INSERT INTO cp_node VALUES ('6146', 'file', '252'); -INSERT INTO cp_node VALUES ('6147', 'file', '252'); -INSERT INTO cp_node VALUES ('6148', 'file', '252'); -INSERT INTO cp_node VALUES ('6149', 'file', '252'); -INSERT INTO cp_node VALUES ('6150', 'file', '252'); -INSERT INTO cp_node VALUES ('6151', 'file', '252'); -INSERT INTO cp_node VALUES ('6152', 'file', '252'); -INSERT INTO cp_node VALUES ('6153', 'file', '252'); -INSERT INTO cp_node VALUES ('6154', 'file', '252'); -INSERT INTO cp_node VALUES ('6155', 'resource', '252'); -INSERT INTO cp_node VALUES ('6156', 'file', '252'); -INSERT INTO cp_node VALUES ('6157', 'file', '252'); -INSERT INTO cp_node VALUES ('6158', 'file', '252'); -INSERT INTO cp_node VALUES ('6159', 'file', '252'); -INSERT INTO cp_node VALUES ('6160', 'file', '252'); -INSERT INTO cp_node VALUES ('6161', 'file', '252'); -INSERT INTO cp_node VALUES ('6162', 'file', '252'); -INSERT INTO cp_node VALUES ('6163', 'file', '252'); -INSERT INTO cp_node VALUES ('6164', 'file', '252'); -INSERT INTO cp_node VALUES ('6165', 'file', '252'); -INSERT INTO cp_node VALUES ('6166', 'file', '252'); -INSERT INTO cp_node VALUES ('6167', 'file', '252'); -INSERT INTO cp_node VALUES ('6168', 'file', '252'); -INSERT INTO cp_node VALUES ('6169', 'file', '252'); -INSERT INTO cp_node VALUES ('6170', 'file', '252'); -INSERT INTO cp_node VALUES ('6171', 'file', '252'); -INSERT INTO cp_node VALUES ('6172', 'file', '252'); -INSERT INTO cp_node VALUES ('6173', 'manifest', '253'); -INSERT INTO cp_node VALUES ('6174', 'organization', '253'); -INSERT INTO cp_node VALUES ('6175', 'item', '253'); -INSERT INTO cp_node VALUES ('6176', 'item', '253'); -INSERT INTO cp_node VALUES ('6177', 'item', '253'); -INSERT INTO cp_node VALUES ('6178', 'item', '253'); -INSERT INTO cp_node VALUES ('6179', 'item', '253'); -INSERT INTO cp_node VALUES ('6180', 'item', '253'); -INSERT INTO cp_node VALUES ('6181', 'item', '253'); -INSERT INTO cp_node VALUES ('6182', 'item', '253'); -INSERT INTO cp_node VALUES ('6183', 'item', '253'); -INSERT INTO cp_node VALUES ('6184', 'item', '253'); -INSERT INTO cp_node VALUES ('6185', 'item', '253'); -INSERT INTO cp_node VALUES ('6186', 'item', '253'); -INSERT INTO cp_node VALUES ('6187', 'item', '253'); -INSERT INTO cp_node VALUES ('6188', 'item', '253'); -INSERT INTO cp_node VALUES ('6189', 'item', '253'); -INSERT INTO cp_node VALUES ('6190', 'item', '253'); -INSERT INTO cp_node VALUES ('6191', 'item', '253'); -INSERT INTO cp_node VALUES ('6192', 'item', '253'); -INSERT INTO cp_node VALUES ('6193', 'item', '253'); -INSERT INTO cp_node VALUES ('6194', 'item', '253'); -INSERT INTO cp_node VALUES ('6195', 'item', '253'); -INSERT INTO cp_node VALUES ('6196', 'item', '253'); -INSERT INTO cp_node VALUES ('6197', 'item', '253'); -INSERT INTO cp_node VALUES ('6198', 'resource', '253'); -INSERT INTO cp_node VALUES ('6199', 'file', '253'); -INSERT INTO cp_node VALUES ('6200', 'file', '253'); -INSERT INTO cp_node VALUES ('6201', 'file', '253'); -INSERT INTO cp_node VALUES ('6202', 'file', '253'); -INSERT INTO cp_node VALUES ('6203', 'resource', '253'); -INSERT INTO cp_node VALUES ('6204', 'file', '253'); -INSERT INTO cp_node VALUES ('6205', 'file', '253'); -INSERT INTO cp_node VALUES ('6206', 'file', '253'); -INSERT INTO cp_node VALUES ('6207', 'file', '253'); -INSERT INTO cp_node VALUES ('6208', 'file', '253'); -INSERT INTO cp_node VALUES ('6209', 'file', '253'); -INSERT INTO cp_node VALUES ('6210', 'file', '253'); -INSERT INTO cp_node VALUES ('6211', 'resource', '253'); -INSERT INTO cp_node VALUES ('6212', 'file', '253'); -INSERT INTO cp_node VALUES ('6213', 'file', '253'); -INSERT INTO cp_node VALUES ('6214', 'file', '253'); -INSERT INTO cp_node VALUES ('6215', 'file', '253'); -INSERT INTO cp_node VALUES ('6216', 'file', '253'); -INSERT INTO cp_node VALUES ('6217', 'file', '253'); -INSERT INTO cp_node VALUES ('6218', 'file', '253'); -INSERT INTO cp_node VALUES ('6219', 'file', '253'); -INSERT INTO cp_node VALUES ('6220', 'file', '253'); -INSERT INTO cp_node VALUES ('6221', 'file', '253'); -INSERT INTO cp_node VALUES ('6222', 'file', '253'); -INSERT INTO cp_node VALUES ('6223', 'file', '253'); -INSERT INTO cp_node VALUES ('6224', 'file', '253'); -INSERT INTO cp_node VALUES ('6225', 'file', '253'); -INSERT INTO cp_node VALUES ('6226', 'file', '253'); -INSERT INTO cp_node VALUES ('6227', 'file', '253'); -INSERT INTO cp_node VALUES ('6228', 'resource', '253'); -INSERT INTO cp_node VALUES ('6229', 'file', '253'); -INSERT INTO cp_node VALUES ('6230', 'file', '253'); -INSERT INTO cp_node VALUES ('6231', 'file', '253'); -INSERT INTO cp_node VALUES ('6232', 'file', '253'); -INSERT INTO cp_node VALUES ('6233', 'file', '253'); -INSERT INTO cp_node VALUES ('6234', 'file', '253'); -INSERT INTO cp_node VALUES ('6235', 'file', '253'); -INSERT INTO cp_node VALUES ('6236', 'resource', '253'); -INSERT INTO cp_node VALUES ('6237', 'file', '253'); -INSERT INTO cp_node VALUES ('6238', 'file', '253'); -INSERT INTO cp_node VALUES ('6239', 'file', '253'); -INSERT INTO cp_node VALUES ('6240', 'file', '253'); -INSERT INTO cp_node VALUES ('6241', 'file', '253'); -INSERT INTO cp_node VALUES ('6242', 'file', '253'); -INSERT INTO cp_node VALUES ('6243', 'file', '253'); -INSERT INTO cp_node VALUES ('6244', 'file', '253'); -INSERT INTO cp_node VALUES ('6245', 'file', '253'); -INSERT INTO cp_node VALUES ('6246', 'file', '253'); -INSERT INTO cp_node VALUES ('6247', 'file', '253'); -INSERT INTO cp_node VALUES ('6248', 'file', '253'); -INSERT INTO cp_node VALUES ('6249', 'file', '253'); -INSERT INTO cp_node VALUES ('6250', 'file', '253'); -INSERT INTO cp_node VALUES ('6251', 'resource', '253'); -INSERT INTO cp_node VALUES ('6252', 'file', '253'); -INSERT INTO cp_node VALUES ('6253', 'file', '253'); -INSERT INTO cp_node VALUES ('6254', 'file', '253'); -INSERT INTO cp_node VALUES ('6255', 'file', '253'); -INSERT INTO cp_node VALUES ('6256', 'file', '253'); -INSERT INTO cp_node VALUES ('6257', 'file', '253'); -INSERT INTO cp_node VALUES ('6258', 'file', '253'); -INSERT INTO cp_node VALUES ('6259', 'file', '253'); -INSERT INTO cp_node VALUES ('6260', 'file', '253'); -INSERT INTO cp_node VALUES ('6261', 'file', '253'); -INSERT INTO cp_node VALUES ('6262', 'file', '253'); -INSERT INTO cp_node VALUES ('6263', 'resource', '253'); -INSERT INTO cp_node VALUES ('6264', 'file', '253'); -INSERT INTO cp_node VALUES ('6265', 'file', '253'); -INSERT INTO cp_node VALUES ('6266', 'file', '253'); -INSERT INTO cp_node VALUES ('6267', 'file', '253'); -INSERT INTO cp_node VALUES ('6268', 'file', '253'); -INSERT INTO cp_node VALUES ('6269', 'file', '253'); -INSERT INTO cp_node VALUES ('6270', 'file', '253'); -INSERT INTO cp_node VALUES ('6271', 'file', '253'); -INSERT INTO cp_node VALUES ('6272', 'file', '253'); -INSERT INTO cp_node VALUES ('6273', 'file', '253'); -INSERT INTO cp_node VALUES ('6274', 'file', '253'); -INSERT INTO cp_node VALUES ('6275', 'resource', '253'); -INSERT INTO cp_node VALUES ('6276', 'file', '253'); -INSERT INTO cp_node VALUES ('6277', 'file', '253'); -INSERT INTO cp_node VALUES ('6278', 'file', '253'); -INSERT INTO cp_node VALUES ('6279', 'file', '253'); -INSERT INTO cp_node VALUES ('6280', 'file', '253'); -INSERT INTO cp_node VALUES ('6281', 'file', '253'); -INSERT INTO cp_node VALUES ('6282', 'file', '253'); -INSERT INTO cp_node VALUES ('6283', 'file', '253'); -INSERT INTO cp_node VALUES ('6284', 'file', '253'); -INSERT INTO cp_node VALUES ('6285', 'file', '253'); -INSERT INTO cp_node VALUES ('6286', 'file', '253'); -INSERT INTO cp_node VALUES ('6287', 'resource', '253'); -INSERT INTO cp_node VALUES ('6288', 'file', '253'); -INSERT INTO cp_node VALUES ('6289', 'file', '253'); -INSERT INTO cp_node VALUES ('6290', 'file', '253'); -INSERT INTO cp_node VALUES ('6291', 'file', '253'); -INSERT INTO cp_node VALUES ('6292', 'file', '253'); -INSERT INTO cp_node VALUES ('6293', 'file', '253'); -INSERT INTO cp_node VALUES ('6294', 'file', '253'); -INSERT INTO cp_node VALUES ('6295', 'file', '253'); -INSERT INTO cp_node VALUES ('6296', 'file', '253'); -INSERT INTO cp_node VALUES ('6297', 'file', '253'); -INSERT INTO cp_node VALUES ('6298', 'file', '253'); -INSERT INTO cp_node VALUES ('6299', 'file', '253'); -INSERT INTO cp_node VALUES ('6300', 'file', '253'); -INSERT INTO cp_node VALUES ('6301', 'file', '253'); -INSERT INTO cp_node VALUES ('6302', 'file', '253'); -INSERT INTO cp_node VALUES ('6303', 'file', '253'); -INSERT INTO cp_node VALUES ('6304', 'file', '253'); -INSERT INTO cp_node VALUES ('6305', 'file', '253'); -INSERT INTO cp_node VALUES ('6306', 'file', '253'); -INSERT INTO cp_node VALUES ('6307', 'file', '253'); -INSERT INTO cp_node VALUES ('6308', 'resource', '253'); -INSERT INTO cp_node VALUES ('6309', 'file', '253'); -INSERT INTO cp_node VALUES ('6310', 'file', '253'); -INSERT INTO cp_node VALUES ('6311', 'file', '253'); -INSERT INTO cp_node VALUES ('6312', 'file', '253'); -INSERT INTO cp_node VALUES ('6313', 'file', '253'); -INSERT INTO cp_node VALUES ('6314', 'file', '253'); -INSERT INTO cp_node VALUES ('6315', 'file', '253'); -INSERT INTO cp_node VALUES ('6316', 'file', '253'); -INSERT INTO cp_node VALUES ('6317', 'file', '253'); -INSERT INTO cp_node VALUES ('6318', 'file', '253'); -INSERT INTO cp_node VALUES ('6319', 'file', '253'); -INSERT INTO cp_node VALUES ('6320', 'file', '253'); -INSERT INTO cp_node VALUES ('6321', 'file', '253'); -INSERT INTO cp_node VALUES ('6322', 'file', '253'); -INSERT INTO cp_node VALUES ('6323', 'file', '253'); -INSERT INTO cp_node VALUES ('6324', 'file', '253'); -INSERT INTO cp_node VALUES ('6325', 'file', '253'); -INSERT INTO cp_node VALUES ('6326', 'file', '253'); -INSERT INTO cp_node VALUES ('6327', 'file', '253'); -INSERT INTO cp_node VALUES ('6328', 'file', '253'); -INSERT INTO cp_node VALUES ('6329', 'file', '253'); -INSERT INTO cp_node VALUES ('6330', 'file', '253'); -INSERT INTO cp_node VALUES ('6331', 'file', '253'); -INSERT INTO cp_node VALUES ('6332', 'resource', '253'); -INSERT INTO cp_node VALUES ('6333', 'file', '253'); -INSERT INTO cp_node VALUES ('6334', 'file', '253'); -INSERT INTO cp_node VALUES ('6335', 'resource', '253'); -INSERT INTO cp_node VALUES ('6336', 'file', '253'); -INSERT INTO cp_node VALUES ('6337', 'file', '253'); -INSERT INTO cp_node VALUES ('6338', 'resource', '253'); -INSERT INTO cp_node VALUES ('6339', 'file', '253'); -INSERT INTO cp_node VALUES ('6340', 'file', '253'); -INSERT INTO cp_node VALUES ('6341', 'resource', '253'); -INSERT INTO cp_node VALUES ('6342', 'file', '253'); -INSERT INTO cp_node VALUES ('6343', 'file', '253'); -INSERT INTO cp_node VALUES ('6344', 'resource', '253'); -INSERT INTO cp_node VALUES ('6345', 'file', '253'); -INSERT INTO cp_node VALUES ('6346', 'file', '253'); -INSERT INTO cp_node VALUES ('6347', 'resource', '253'); -INSERT INTO cp_node VALUES ('6348', 'file', '253'); -INSERT INTO cp_node VALUES ('6349', 'file', '253'); -INSERT INTO cp_node VALUES ('6350', 'resource', '253'); -INSERT INTO cp_node VALUES ('6351', 'file', '253'); -INSERT INTO cp_node VALUES ('6352', 'file', '253'); -INSERT INTO cp_node VALUES ('6353', 'resource', '253'); -INSERT INTO cp_node VALUES ('6354', 'file', '253'); -INSERT INTO cp_node VALUES ('6355', 'file', '253'); -INSERT INTO cp_node VALUES ('6356', 'resource', '253'); -INSERT INTO cp_node VALUES ('6357', 'file', '253'); -INSERT INTO cp_node VALUES ('6358', 'file', '253'); -INSERT INTO cp_node VALUES ('6359', 'sequencing', '253'); -INSERT INTO cp_node VALUES ('6360', 'sequencing', '253'); -INSERT INTO cp_node VALUES ('6361', 'sequencing', '253'); -INSERT INTO cp_node VALUES ('6362', 'sequencing', '253'); -INSERT INTO cp_node VALUES ('6363', 'sequencing', '253'); -INSERT INTO cp_node VALUES ('6364', 'rule', '253'); -INSERT INTO cp_node VALUES ('6365', 'condition', '253'); -INSERT INTO cp_node VALUES ('6366', 'objective', '253'); -INSERT INTO cp_node VALUES ('6367', 'sequencing', '253'); -INSERT INTO cp_node VALUES ('6368', 'rule', '253'); -INSERT INTO cp_node VALUES ('6369', 'condition', '253'); -INSERT INTO cp_node VALUES ('6370', 'rule', '253'); -INSERT INTO cp_node VALUES ('6371', 'condition', '253'); -INSERT INTO cp_node VALUES ('6372', 'rule', '253'); -INSERT INTO cp_node VALUES ('6373', 'condition', '253'); -INSERT INTO cp_node VALUES ('6374', 'manifest', '279'); -INSERT INTO cp_node VALUES ('6375', 'organization', '279'); -INSERT INTO cp_node VALUES ('6376', 'item', '279'); -INSERT INTO cp_node VALUES ('6377', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6378', 'item', '279'); -INSERT INTO cp_node VALUES ('6379', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6380', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6381', 'item', '279'); -INSERT INTO cp_node VALUES ('6382', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6383', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6384', 'item', '279'); -INSERT INTO cp_node VALUES ('6385', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6386', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6387', 'item', '279'); -INSERT INTO cp_node VALUES ('6388', 'item', '279'); -INSERT INTO cp_node VALUES ('6389', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6390', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6391', 'item', '279'); -INSERT INTO cp_node VALUES ('6392', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6393', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6394', 'item', '279'); -INSERT INTO cp_node VALUES ('6395', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6396', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6397', 'item', '279'); -INSERT INTO cp_node VALUES ('6398', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6399', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6400', 'item', '279'); -INSERT INTO cp_node VALUES ('6401', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6402', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6403', 'item', '279'); -INSERT INTO cp_node VALUES ('6404', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6405', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6406', 'item', '279'); -INSERT INTO cp_node VALUES ('6407', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6408', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6409', 'item', '279'); -INSERT INTO cp_node VALUES ('6410', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6411', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6412', 'item', '279'); -INSERT INTO cp_node VALUES ('6413', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6414', 'hideLMSUI', '279'); -INSERT INTO cp_node VALUES ('6415', 'resource', '279'); -INSERT INTO cp_node VALUES ('6416', 'file', '279'); -INSERT INTO cp_node VALUES ('6417', 'file', '279'); -INSERT INTO cp_node VALUES ('6418', 'file', '279'); -INSERT INTO cp_node VALUES ('6419', 'file', '279'); -INSERT INTO cp_node VALUES ('6420', 'file', '279'); -INSERT INTO cp_node VALUES ('6421', 'file', '279'); -INSERT INTO cp_node VALUES ('6422', 'resource', '279'); -INSERT INTO cp_node VALUES ('6423', 'file', '279'); -INSERT INTO cp_node VALUES ('6424', 'file', '279'); -INSERT INTO cp_node VALUES ('6425', 'file', '279'); -INSERT INTO cp_node VALUES ('6426', 'file', '279'); -INSERT INTO cp_node VALUES ('6427', 'file', '279'); -INSERT INTO cp_node VALUES ('6428', 'file', '279'); -INSERT INTO cp_node VALUES ('6429', 'file', '279'); -INSERT INTO cp_node VALUES ('6430', 'file', '279'); -INSERT INTO cp_node VALUES ('6431', 'file', '279'); -INSERT INTO cp_node VALUES ('6432', 'file', '279'); -INSERT INTO cp_node VALUES ('6433', 'file', '279'); -INSERT INTO cp_node VALUES ('6434', 'file', '279'); -INSERT INTO cp_node VALUES ('6435', 'file', '279'); -INSERT INTO cp_node VALUES ('6436', 'file', '279'); -INSERT INTO cp_node VALUES ('6437', 'file', '279'); -INSERT INTO cp_node VALUES ('6438', 'file', '279'); -INSERT INTO cp_node VALUES ('6439', 'file', '279'); -INSERT INTO cp_node VALUES ('6440', 'file', '279'); -INSERT INTO cp_node VALUES ('6441', 'file', '279'); -INSERT INTO cp_node VALUES ('6442', 'file', '279'); -INSERT INTO cp_node VALUES ('6443', 'file', '279'); -INSERT INTO cp_node VALUES ('6444', 'file', '279'); -INSERT INTO cp_node VALUES ('6445', 'file', '279'); -INSERT INTO cp_node VALUES ('6446', 'file', '279'); -INSERT INTO cp_node VALUES ('6447', 'file', '279'); -INSERT INTO cp_node VALUES ('6448', 'file', '279'); -INSERT INTO cp_node VALUES ('6449', 'file', '279'); -INSERT INTO cp_node VALUES ('6450', 'file', '279'); -INSERT INTO cp_node VALUES ('6451', 'file', '279'); -INSERT INTO cp_node VALUES ('6452', 'file', '279'); -INSERT INTO cp_node VALUES ('6453', 'file', '279'); -INSERT INTO cp_node VALUES ('6454', 'file', '279'); -INSERT INTO cp_node VALUES ('6455', 'file', '279'); -INSERT INTO cp_node VALUES ('6456', 'file', '279'); -INSERT INTO cp_node VALUES ('6457', 'file', '279'); -INSERT INTO cp_node VALUES ('6458', 'file', '279'); -INSERT INTO cp_node VALUES ('6459', 'file', '279'); -INSERT INTO cp_node VALUES ('6460', 'file', '279'); -INSERT INTO cp_node VALUES ('6461', 'file', '279'); -INSERT INTO cp_node VALUES ('6462', 'file', '279'); -INSERT INTO cp_node VALUES ('6463', 'file', '279'); -INSERT INTO cp_node VALUES ('6464', 'file', '279'); -INSERT INTO cp_node VALUES ('6465', 'file', '279'); -INSERT INTO cp_node VALUES ('6466', 'file', '279'); -INSERT INTO cp_node VALUES ('6467', 'file', '279'); -INSERT INTO cp_node VALUES ('6468', 'file', '279'); -INSERT INTO cp_node VALUES ('6469', 'resource', '279'); -INSERT INTO cp_node VALUES ('6470', 'file', '279'); -INSERT INTO cp_node VALUES ('6471', 'file', '279'); -INSERT INTO cp_node VALUES ('6472', 'file', '279'); -INSERT INTO cp_node VALUES ('6473', 'file', '279'); -INSERT INTO cp_node VALUES ('6474', 'file', '279'); -INSERT INTO cp_node VALUES ('6475', 'file', '279'); -INSERT INTO cp_node VALUES ('6476', 'file', '279'); -INSERT INTO cp_node VALUES ('6477', 'file', '279'); -INSERT INTO cp_node VALUES ('6478', 'file', '279'); -INSERT INTO cp_node VALUES ('6479', 'file', '279'); -INSERT INTO cp_node VALUES ('6480', 'file', '279'); -INSERT INTO cp_node VALUES ('6481', 'file', '279'); -INSERT INTO cp_node VALUES ('6482', 'file', '279'); -INSERT INTO cp_node VALUES ('6483', 'file', '279'); -INSERT INTO cp_node VALUES ('6484', 'file', '279'); -INSERT INTO cp_node VALUES ('6485', 'file', '279'); -INSERT INTO cp_node VALUES ('6486', 'file', '279'); -INSERT INTO cp_node VALUES ('6487', 'file', '279'); -INSERT INTO cp_node VALUES ('6488', 'file', '279'); -INSERT INTO cp_node VALUES ('6489', 'file', '279'); -INSERT INTO cp_node VALUES ('6490', 'file', '279'); -INSERT INTO cp_node VALUES ('6491', 'file', '279'); -INSERT INTO cp_node VALUES ('6492', 'file', '279'); -INSERT INTO cp_node VALUES ('6493', 'file', '279'); -INSERT INTO cp_node VALUES ('6494', 'file', '279'); -INSERT INTO cp_node VALUES ('6495', 'file', '279'); -INSERT INTO cp_node VALUES ('6496', 'file', '279'); -INSERT INTO cp_node VALUES ('6497', 'file', '279'); -INSERT INTO cp_node VALUES ('6498', 'file', '279'); -INSERT INTO cp_node VALUES ('6499', 'file', '279'); -INSERT INTO cp_node VALUES ('6500', 'file', '279'); -INSERT INTO cp_node VALUES ('6501', 'file', '279'); -INSERT INTO cp_node VALUES ('6502', 'file', '279'); -INSERT INTO cp_node VALUES ('6503', 'file', '279'); -INSERT INTO cp_node VALUES ('6504', 'file', '279'); -INSERT INTO cp_node VALUES ('6505', 'resource', '279'); -INSERT INTO cp_node VALUES ('6506', 'file', '279'); -INSERT INTO cp_node VALUES ('6507', 'file', '279'); -INSERT INTO cp_node VALUES ('6508', 'file', '279'); -INSERT INTO cp_node VALUES ('6509', 'file', '279'); -INSERT INTO cp_node VALUES ('6510', 'file', '279'); -INSERT INTO cp_node VALUES ('6511', 'file', '279'); -INSERT INTO cp_node VALUES ('6512', 'file', '279'); -INSERT INTO cp_node VALUES ('6513', 'file', '279'); -INSERT INTO cp_node VALUES ('6514', 'file', '279'); -INSERT INTO cp_node VALUES ('6515', 'file', '279'); -INSERT INTO cp_node VALUES ('6516', 'file', '279'); -INSERT INTO cp_node VALUES ('6517', 'file', '279'); -INSERT INTO cp_node VALUES ('6518', 'file', '279'); -INSERT INTO cp_node VALUES ('6519', 'file', '279'); -INSERT INTO cp_node VALUES ('6520', 'file', '279'); -INSERT INTO cp_node VALUES ('6521', 'file', '279'); -INSERT INTO cp_node VALUES ('6522', 'file', '279'); -INSERT INTO cp_node VALUES ('6523', 'file', '279'); -INSERT INTO cp_node VALUES ('6524', 'file', '279'); -INSERT INTO cp_node VALUES ('6525', 'file', '279'); -INSERT INTO cp_node VALUES ('6526', 'file', '279'); -INSERT INTO cp_node VALUES ('6527', 'file', '279'); -INSERT INTO cp_node VALUES ('6528', 'file', '279'); -INSERT INTO cp_node VALUES ('6529', 'file', '279'); -INSERT INTO cp_node VALUES ('6530', 'file', '279'); -INSERT INTO cp_node VALUES ('6531', 'file', '279'); -INSERT INTO cp_node VALUES ('6532', 'file', '279'); -INSERT INTO cp_node VALUES ('6533', 'file', '279'); -INSERT INTO cp_node VALUES ('6534', 'file', '279'); -INSERT INTO cp_node VALUES ('6535', 'file', '279'); -INSERT INTO cp_node VALUES ('6536', 'file', '279'); -INSERT INTO cp_node VALUES ('6537', 'file', '279'); -INSERT INTO cp_node VALUES ('6538', 'file', '279'); -INSERT INTO cp_node VALUES ('6539', 'file', '279'); -INSERT INTO cp_node VALUES ('6540', 'file', '279'); -INSERT INTO cp_node VALUES ('6541', 'file', '279'); -INSERT INTO cp_node VALUES ('6542', 'file', '279'); -INSERT INTO cp_node VALUES ('6543', 'file', '279'); -INSERT INTO cp_node VALUES ('6544', 'file', '279'); -INSERT INTO cp_node VALUES ('6545', 'file', '279'); -INSERT INTO cp_node VALUES ('6546', 'file', '279'); -INSERT INTO cp_node VALUES ('6547', 'file', '279'); -INSERT INTO cp_node VALUES ('6548', 'file', '279'); -INSERT INTO cp_node VALUES ('6549', 'file', '279'); -INSERT INTO cp_node VALUES ('6550', 'file', '279'); -INSERT INTO cp_node VALUES ('6551', 'resource', '279'); -INSERT INTO cp_node VALUES ('6552', 'file', '279'); -INSERT INTO cp_node VALUES ('6553', 'file', '279'); -INSERT INTO cp_node VALUES ('6554', 'file', '279'); -INSERT INTO cp_node VALUES ('6555', 'resource', '279'); -INSERT INTO cp_node VALUES ('6556', 'file', '279'); -INSERT INTO cp_node VALUES ('6557', 'file', '279'); -INSERT INTO cp_node VALUES ('6558', 'file', '279'); -INSERT INTO cp_node VALUES ('6559', 'resource', '279'); -INSERT INTO cp_node VALUES ('6560', 'file', '279'); -INSERT INTO cp_node VALUES ('6561', 'file', '279'); -INSERT INTO cp_node VALUES ('6562', 'file', '279'); -INSERT INTO cp_node VALUES ('6563', 'resource', '279'); -INSERT INTO cp_node VALUES ('6564', 'file', '279'); -INSERT INTO cp_node VALUES ('6565', 'file', '279'); -INSERT INTO cp_node VALUES ('6566', 'file', '279'); -INSERT INTO cp_node VALUES ('6567', 'resource', '279'); -INSERT INTO cp_node VALUES ('6568', 'file', '279'); -INSERT INTO cp_node VALUES ('6569', 'file', '279'); -INSERT INTO cp_node VALUES ('6570', 'file', '279'); -INSERT INTO cp_node VALUES ('6571', 'resource', '279'); -INSERT INTO cp_node VALUES ('6572', 'file', '279'); -INSERT INTO cp_node VALUES ('6573', 'file', '279'); -INSERT INTO cp_node VALUES ('6574', 'file', '279'); -INSERT INTO cp_node VALUES ('6575', 'resource', '279'); -INSERT INTO cp_node VALUES ('6576', 'file', '279'); -INSERT INTO cp_node VALUES ('6577', 'file', '279'); -INSERT INTO cp_node VALUES ('6578', 'file', '279'); -INSERT INTO cp_node VALUES ('6579', 'resource', '279'); -INSERT INTO cp_node VALUES ('6580', 'file', '279'); -INSERT INTO cp_node VALUES ('6581', 'file', '279'); -INSERT INTO cp_node VALUES ('6582', 'file', '279'); -INSERT INTO cp_node VALUES ('6583', 'resource', '279'); -INSERT INTO cp_node VALUES ('6584', 'file', '279'); -INSERT INTO cp_node VALUES ('6585', 'file', '279'); -INSERT INTO cp_node VALUES ('6586', 'file', '279'); -INSERT INTO cp_node VALUES ('6587', 'sequencing', '279'); -INSERT INTO cp_node VALUES ('6588', 'sequencing', '279'); -INSERT INTO cp_node VALUES ('6589', 'sequencing', '279'); -INSERT INTO cp_node VALUES ('6590', 'sequencing', '279'); -INSERT INTO cp_node VALUES ('6591', 'sequencing', '279'); -INSERT INTO cp_node VALUES ('6592', 'rule', '279'); -INSERT INTO cp_node VALUES ('6593', 'condition', '279'); -INSERT INTO cp_node VALUES ('6594', 'objective', '279'); -INSERT INTO cp_node VALUES ('6595', 'sequencing', '279'); -INSERT INTO cp_node VALUES ('6596', 'rule', '279'); -INSERT INTO cp_node VALUES ('6597', 'condition', '279'); -INSERT INTO cp_node VALUES ('6598', 'rule', '279'); -INSERT INTO cp_node VALUES ('6599', 'condition', '279'); -INSERT INTO cp_node VALUES ('6600', 'rule', '279'); -INSERT INTO cp_node VALUES ('6601', 'condition', '279'); -INSERT INTO cp_node VALUES ('6602', 'manifest', '280'); -INSERT INTO cp_node VALUES ('6603', 'organization', '280'); -INSERT INTO cp_node VALUES ('6604', 'item', '280'); -INSERT INTO cp_node VALUES ('6605', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6606', 'item', '280'); -INSERT INTO cp_node VALUES ('6607', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6608', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6609', 'item', '280'); -INSERT INTO cp_node VALUES ('6610', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6611', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6612', 'item', '280'); -INSERT INTO cp_node VALUES ('6613', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6614', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6615', 'item', '280'); -INSERT INTO cp_node VALUES ('6616', 'item', '280'); -INSERT INTO cp_node VALUES ('6617', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6618', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6619', 'item', '280'); -INSERT INTO cp_node VALUES ('6620', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6621', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6622', 'item', '280'); -INSERT INTO cp_node VALUES ('6623', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6624', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6625', 'item', '280'); -INSERT INTO cp_node VALUES ('6626', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6627', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6628', 'item', '280'); -INSERT INTO cp_node VALUES ('6629', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6630', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6631', 'item', '280'); -INSERT INTO cp_node VALUES ('6632', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6633', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6634', 'item', '280'); -INSERT INTO cp_node VALUES ('6635', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6636', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6637', 'item', '280'); -INSERT INTO cp_node VALUES ('6638', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6639', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6640', 'item', '280'); -INSERT INTO cp_node VALUES ('6641', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6642', 'hideLMSUI', '280'); -INSERT INTO cp_node VALUES ('6643', 'resource', '280'); -INSERT INTO cp_node VALUES ('6644', 'file', '280'); -INSERT INTO cp_node VALUES ('6645', 'file', '280'); -INSERT INTO cp_node VALUES ('6646', 'file', '280'); -INSERT INTO cp_node VALUES ('6647', 'file', '280'); -INSERT INTO cp_node VALUES ('6648', 'file', '280'); -INSERT INTO cp_node VALUES ('6649', 'file', '280'); -INSERT INTO cp_node VALUES ('6650', 'resource', '280'); -INSERT INTO cp_node VALUES ('6651', 'file', '280'); -INSERT INTO cp_node VALUES ('6652', 'file', '280'); -INSERT INTO cp_node VALUES ('6653', 'file', '280'); -INSERT INTO cp_node VALUES ('6654', 'file', '280'); -INSERT INTO cp_node VALUES ('6655', 'file', '280'); -INSERT INTO cp_node VALUES ('6656', 'file', '280'); -INSERT INTO cp_node VALUES ('6657', 'file', '280'); -INSERT INTO cp_node VALUES ('6658', 'file', '280'); -INSERT INTO cp_node VALUES ('6659', 'file', '280'); -INSERT INTO cp_node VALUES ('6660', 'file', '280'); -INSERT INTO cp_node VALUES ('6661', 'file', '280'); -INSERT INTO cp_node VALUES ('6662', 'file', '280'); -INSERT INTO cp_node VALUES ('6663', 'file', '280'); -INSERT INTO cp_node VALUES ('6664', 'file', '280'); -INSERT INTO cp_node VALUES ('6665', 'file', '280'); -INSERT INTO cp_node VALUES ('6666', 'file', '280'); -INSERT INTO cp_node VALUES ('6667', 'file', '280'); -INSERT INTO cp_node VALUES ('6668', 'file', '280'); -INSERT INTO cp_node VALUES ('6669', 'file', '280'); -INSERT INTO cp_node VALUES ('6670', 'file', '280'); -INSERT INTO cp_node VALUES ('6671', 'file', '280'); -INSERT INTO cp_node VALUES ('6672', 'file', '280'); -INSERT INTO cp_node VALUES ('6673', 'file', '280'); -INSERT INTO cp_node VALUES ('6674', 'file', '280'); -INSERT INTO cp_node VALUES ('6675', 'file', '280'); -INSERT INTO cp_node VALUES ('6676', 'file', '280'); -INSERT INTO cp_node VALUES ('6677', 'file', '280'); -INSERT INTO cp_node VALUES ('6678', 'file', '280'); -INSERT INTO cp_node VALUES ('6679', 'file', '280'); -INSERT INTO cp_node VALUES ('6680', 'file', '280'); -INSERT INTO cp_node VALUES ('6681', 'file', '280'); -INSERT INTO cp_node VALUES ('6682', 'file', '280'); -INSERT INTO cp_node VALUES ('6683', 'file', '280'); -INSERT INTO cp_node VALUES ('6684', 'file', '280'); -INSERT INTO cp_node VALUES ('6685', 'file', '280'); -INSERT INTO cp_node VALUES ('6686', 'file', '280'); -INSERT INTO cp_node VALUES ('6687', 'file', '280'); -INSERT INTO cp_node VALUES ('6688', 'file', '280'); -INSERT INTO cp_node VALUES ('6689', 'file', '280'); -INSERT INTO cp_node VALUES ('6690', 'file', '280'); -INSERT INTO cp_node VALUES ('6691', 'file', '280'); -INSERT INTO cp_node VALUES ('6692', 'file', '280'); -INSERT INTO cp_node VALUES ('6693', 'file', '280'); -INSERT INTO cp_node VALUES ('6694', 'file', '280'); -INSERT INTO cp_node VALUES ('6695', 'file', '280'); -INSERT INTO cp_node VALUES ('6696', 'file', '280'); -INSERT INTO cp_node VALUES ('6697', 'resource', '280'); -INSERT INTO cp_node VALUES ('6698', 'file', '280'); -INSERT INTO cp_node VALUES ('6699', 'file', '280'); -INSERT INTO cp_node VALUES ('6700', 'file', '280'); -INSERT INTO cp_node VALUES ('6701', 'file', '280'); -INSERT INTO cp_node VALUES ('6702', 'file', '280'); -INSERT INTO cp_node VALUES ('6703', 'file', '280'); -INSERT INTO cp_node VALUES ('6704', 'file', '280'); -INSERT INTO cp_node VALUES ('6705', 'file', '280'); -INSERT INTO cp_node VALUES ('6706', 'file', '280'); -INSERT INTO cp_node VALUES ('6707', 'file', '280'); -INSERT INTO cp_node VALUES ('6708', 'file', '280'); -INSERT INTO cp_node VALUES ('6709', 'file', '280'); -INSERT INTO cp_node VALUES ('6710', 'file', '280'); -INSERT INTO cp_node VALUES ('6711', 'file', '280'); -INSERT INTO cp_node VALUES ('6712', 'file', '280'); -INSERT INTO cp_node VALUES ('6713', 'file', '280'); -INSERT INTO cp_node VALUES ('6714', 'file', '280'); -INSERT INTO cp_node VALUES ('6715', 'file', '280'); -INSERT INTO cp_node VALUES ('6716', 'file', '280'); -INSERT INTO cp_node VALUES ('6717', 'file', '280'); -INSERT INTO cp_node VALUES ('6718', 'file', '280'); -INSERT INTO cp_node VALUES ('6719', 'file', '280'); -INSERT INTO cp_node VALUES ('6720', 'file', '280'); -INSERT INTO cp_node VALUES ('6721', 'file', '280'); -INSERT INTO cp_node VALUES ('6722', 'file', '280'); -INSERT INTO cp_node VALUES ('6723', 'file', '280'); -INSERT INTO cp_node VALUES ('6724', 'file', '280'); -INSERT INTO cp_node VALUES ('6725', 'file', '280'); -INSERT INTO cp_node VALUES ('6726', 'file', '280'); -INSERT INTO cp_node VALUES ('6727', 'file', '280'); -INSERT INTO cp_node VALUES ('6728', 'file', '280'); -INSERT INTO cp_node VALUES ('6729', 'file', '280'); -INSERT INTO cp_node VALUES ('6730', 'file', '280'); -INSERT INTO cp_node VALUES ('6731', 'file', '280'); -INSERT INTO cp_node VALUES ('6732', 'file', '280'); -INSERT INTO cp_node VALUES ('6733', 'resource', '280'); -INSERT INTO cp_node VALUES ('6734', 'file', '280'); -INSERT INTO cp_node VALUES ('6735', 'file', '280'); -INSERT INTO cp_node VALUES ('6736', 'file', '280'); -INSERT INTO cp_node VALUES ('6737', 'file', '280'); -INSERT INTO cp_node VALUES ('6738', 'file', '280'); -INSERT INTO cp_node VALUES ('6739', 'file', '280'); -INSERT INTO cp_node VALUES ('6740', 'file', '280'); -INSERT INTO cp_node VALUES ('6741', 'file', '280'); -INSERT INTO cp_node VALUES ('6742', 'file', '280'); -INSERT INTO cp_node VALUES ('6743', 'file', '280'); -INSERT INTO cp_node VALUES ('6744', 'file', '280'); -INSERT INTO cp_node VALUES ('6745', 'file', '280'); -INSERT INTO cp_node VALUES ('6746', 'file', '280'); -INSERT INTO cp_node VALUES ('6747', 'file', '280'); -INSERT INTO cp_node VALUES ('6748', 'file', '280'); -INSERT INTO cp_node VALUES ('6749', 'file', '280'); -INSERT INTO cp_node VALUES ('6750', 'file', '280'); -INSERT INTO cp_node VALUES ('6751', 'file', '280'); -INSERT INTO cp_node VALUES ('6752', 'file', '280'); -INSERT INTO cp_node VALUES ('6753', 'file', '280'); -INSERT INTO cp_node VALUES ('6754', 'file', '280'); -INSERT INTO cp_node VALUES ('6755', 'file', '280'); -INSERT INTO cp_node VALUES ('6756', 'file', '280'); -INSERT INTO cp_node VALUES ('6757', 'file', '280'); -INSERT INTO cp_node VALUES ('6758', 'file', '280'); -INSERT INTO cp_node VALUES ('6759', 'file', '280'); -INSERT INTO cp_node VALUES ('6760', 'file', '280'); -INSERT INTO cp_node VALUES ('6761', 'file', '280'); -INSERT INTO cp_node VALUES ('6762', 'file', '280'); -INSERT INTO cp_node VALUES ('6763', 'file', '280'); -INSERT INTO cp_node VALUES ('6764', 'file', '280'); -INSERT INTO cp_node VALUES ('6765', 'file', '280'); -INSERT INTO cp_node VALUES ('6766', 'file', '280'); -INSERT INTO cp_node VALUES ('6767', 'file', '280'); -INSERT INTO cp_node VALUES ('6768', 'file', '280'); -INSERT INTO cp_node VALUES ('6769', 'file', '280'); -INSERT INTO cp_node VALUES ('6770', 'file', '280'); -INSERT INTO cp_node VALUES ('6771', 'file', '280'); -INSERT INTO cp_node VALUES ('6772', 'file', '280'); -INSERT INTO cp_node VALUES ('6773', 'file', '280'); -INSERT INTO cp_node VALUES ('6774', 'file', '280'); -INSERT INTO cp_node VALUES ('6775', 'file', '280'); -INSERT INTO cp_node VALUES ('6776', 'file', '280'); -INSERT INTO cp_node VALUES ('6777', 'file', '280'); -INSERT INTO cp_node VALUES ('6778', 'file', '280'); -INSERT INTO cp_node VALUES ('6779', 'resource', '280'); -INSERT INTO cp_node VALUES ('6780', 'file', '280'); -INSERT INTO cp_node VALUES ('6781', 'file', '280'); -INSERT INTO cp_node VALUES ('6782', 'file', '280'); -INSERT INTO cp_node VALUES ('6783', 'resource', '280'); -INSERT INTO cp_node VALUES ('6784', 'file', '280'); -INSERT INTO cp_node VALUES ('6785', 'file', '280'); -INSERT INTO cp_node VALUES ('6786', 'file', '280'); -INSERT INTO cp_node VALUES ('6787', 'resource', '280'); -INSERT INTO cp_node VALUES ('6788', 'file', '280'); -INSERT INTO cp_node VALUES ('6789', 'file', '280'); -INSERT INTO cp_node VALUES ('6790', 'file', '280'); -INSERT INTO cp_node VALUES ('6791', 'resource', '280'); -INSERT INTO cp_node VALUES ('6792', 'file', '280'); -INSERT INTO cp_node VALUES ('6793', 'file', '280'); -INSERT INTO cp_node VALUES ('6794', 'file', '280'); -INSERT INTO cp_node VALUES ('6795', 'resource', '280'); -INSERT INTO cp_node VALUES ('6796', 'file', '280'); -INSERT INTO cp_node VALUES ('6797', 'file', '280'); -INSERT INTO cp_node VALUES ('6798', 'file', '280'); -INSERT INTO cp_node VALUES ('6799', 'resource', '280'); -INSERT INTO cp_node VALUES ('6800', 'file', '280'); -INSERT INTO cp_node VALUES ('6801', 'file', '280'); -INSERT INTO cp_node VALUES ('6802', 'file', '280'); -INSERT INTO cp_node VALUES ('6803', 'resource', '280'); -INSERT INTO cp_node VALUES ('6804', 'file', '280'); -INSERT INTO cp_node VALUES ('6805', 'file', '280'); -INSERT INTO cp_node VALUES ('6806', 'file', '280'); -INSERT INTO cp_node VALUES ('6807', 'resource', '280'); -INSERT INTO cp_node VALUES ('6808', 'file', '280'); -INSERT INTO cp_node VALUES ('6809', 'file', '280'); -INSERT INTO cp_node VALUES ('6810', 'file', '280'); -INSERT INTO cp_node VALUES ('6811', 'resource', '280'); -INSERT INTO cp_node VALUES ('6812', 'file', '280'); -INSERT INTO cp_node VALUES ('6813', 'file', '280'); -INSERT INTO cp_node VALUES ('6814', 'file', '280'); -INSERT INTO cp_node VALUES ('6815', 'sequencing', '280'); -INSERT INTO cp_node VALUES ('6816', 'sequencing', '280'); -INSERT INTO cp_node VALUES ('6817', 'sequencing', '280'); -INSERT INTO cp_node VALUES ('6818', 'sequencing', '280'); -INSERT INTO cp_node VALUES ('6819', 'sequencing', '280'); -INSERT INTO cp_node VALUES ('6820', 'rule', '280'); -INSERT INTO cp_node VALUES ('6821', 'condition', '280'); -INSERT INTO cp_node VALUES ('6822', 'objective', '280'); -INSERT INTO cp_node VALUES ('6823', 'sequencing', '280'); -INSERT INTO cp_node VALUES ('6824', 'rule', '280'); -INSERT INTO cp_node VALUES ('6825', 'condition', '280'); -INSERT INTO cp_node VALUES ('6826', 'rule', '280'); -INSERT INTO cp_node VALUES ('6827', 'condition', '280'); -INSERT INTO cp_node VALUES ('6828', 'rule', '280'); -INSERT INTO cp_node VALUES ('6829', 'condition', '280'); -INSERT INTO cp_node VALUES ('6830', 'manifest', '281'); -INSERT INTO cp_node VALUES ('6831', 'organization', '281'); -INSERT INTO cp_node VALUES ('6832', 'item', '281'); -INSERT INTO cp_node VALUES ('6833', 'item', '281'); -INSERT INTO cp_node VALUES ('6834', 'item', '281'); -INSERT INTO cp_node VALUES ('6835', 'item', '281'); -INSERT INTO cp_node VALUES ('6836', 'item', '281'); -INSERT INTO cp_node VALUES ('6837', 'item', '281'); -INSERT INTO cp_node VALUES ('6838', 'item', '281'); -INSERT INTO cp_node VALUES ('6839', 'item', '281'); -INSERT INTO cp_node VALUES ('6840', 'item', '281'); -INSERT INTO cp_node VALUES ('6841', 'item', '281'); -INSERT INTO cp_node VALUES ('6842', 'item', '281'); -INSERT INTO cp_node VALUES ('6843', 'item', '281'); -INSERT INTO cp_node VALUES ('6844', 'item', '281'); -INSERT INTO cp_node VALUES ('6845', 'resource', '281'); -INSERT INTO cp_node VALUES ('6846', 'file', '281'); -INSERT INTO cp_node VALUES ('6847', 'resource', '281'); -INSERT INTO cp_node VALUES ('6848', 'file', '281'); -INSERT INTO cp_node VALUES ('6849', 'file', '281'); -INSERT INTO cp_node VALUES ('6850', 'file', '281'); -INSERT INTO cp_node VALUES ('6851', 'file', '281'); -INSERT INTO cp_node VALUES ('6852', 'file', '281'); -INSERT INTO cp_node VALUES ('6853', 'file', '281'); -INSERT INTO cp_node VALUES ('6854', 'file', '281'); -INSERT INTO cp_node VALUES ('6855', 'resource', '281'); -INSERT INTO cp_node VALUES ('6856', 'file', '281'); -INSERT INTO cp_node VALUES ('6857', 'file', '281'); -INSERT INTO cp_node VALUES ('6858', 'file', '281'); -INSERT INTO cp_node VALUES ('6859', 'file', '281'); -INSERT INTO cp_node VALUES ('6860', 'file', '281'); -INSERT INTO cp_node VALUES ('6861', 'file', '281'); -INSERT INTO cp_node VALUES ('6862', 'resource', '281'); -INSERT INTO cp_node VALUES ('6863', 'file', '281'); -INSERT INTO cp_node VALUES ('6864', 'file', '281'); -INSERT INTO cp_node VALUES ('6865', 'file', '281'); -INSERT INTO cp_node VALUES ('6866', 'file', '281'); -INSERT INTO cp_node VALUES ('6867', 'file', '281'); -INSERT INTO cp_node VALUES ('6868', 'file', '281'); -INSERT INTO cp_node VALUES ('6869', 'file', '281'); -INSERT INTO cp_node VALUES ('6870', 'resource', '281'); -INSERT INTO cp_node VALUES ('6871', 'file', '281'); -INSERT INTO cp_node VALUES ('6872', 'file', '281'); -INSERT INTO cp_node VALUES ('6873', 'file', '281'); -INSERT INTO cp_node VALUES ('6874', 'file', '281'); -INSERT INTO cp_node VALUES ('6875', 'file', '281'); -INSERT INTO cp_node VALUES ('6876', 'file', '281'); -INSERT INTO cp_node VALUES ('6877', 'file', '281'); -INSERT INTO cp_node VALUES ('6878', 'resource', '281'); -INSERT INTO cp_node VALUES ('6879', 'file', '281'); -INSERT INTO cp_node VALUES ('6880', 'file', '281'); -INSERT INTO cp_node VALUES ('6881', 'file', '281'); -INSERT INTO cp_node VALUES ('6882', 'file', '281'); -INSERT INTO cp_node VALUES ('6883', 'file', '281'); -INSERT INTO cp_node VALUES ('6884', 'file', '281'); -INSERT INTO cp_node VALUES ('6885', 'resource', '281'); -INSERT INTO cp_node VALUES ('6886', 'file', '281'); -INSERT INTO cp_node VALUES ('6887', 'file', '281'); -INSERT INTO cp_node VALUES ('6888', 'file', '281'); -INSERT INTO cp_node VALUES ('6889', 'file', '281'); -INSERT INTO cp_node VALUES ('6890', 'file', '281'); -INSERT INTO cp_node VALUES ('6891', 'file', '281'); -INSERT INTO cp_node VALUES ('6892', 'resource', '281'); -INSERT INTO cp_node VALUES ('6893', 'file', '281'); -INSERT INTO cp_node VALUES ('6894', 'file', '281'); -INSERT INTO cp_node VALUES ('6895', 'file', '281'); -INSERT INTO cp_node VALUES ('6896', 'file', '281'); -INSERT INTO cp_node VALUES ('6897', 'file', '281'); -INSERT INTO cp_node VALUES ('6898', 'file', '281'); -INSERT INTO cp_node VALUES ('6899', 'sequencing', '281'); -INSERT INTO cp_node VALUES ('6900', 'sequencing', '281'); -INSERT INTO cp_node VALUES ('6901', 'rule', '281'); -INSERT INTO cp_node VALUES ('6902', 'condition', '281'); -INSERT INTO cp_node VALUES ('6903', 'sequencing', '281'); -INSERT INTO cp_node VALUES ('6904', 'rule', '281'); -INSERT INTO cp_node VALUES ('6905', 'condition', '281'); -INSERT INTO cp_node VALUES ('6906', 'sequencing', '281'); -INSERT INTO cp_node VALUES ('6907', 'rule', '281'); -INSERT INTO cp_node VALUES ('6908', 'condition', '281'); -INSERT INTO cp_node VALUES ('6909', 'sequencing', '281'); -INSERT INTO cp_node VALUES ('6910', 'rule', '281'); -INSERT INTO cp_node VALUES ('6911', 'condition', '281'); -INSERT INTO cp_node VALUES ('6912', 'sequencing', '281'); -INSERT INTO cp_node VALUES ('6913', 'rule', '281'); -INSERT INTO cp_node VALUES ('6914', 'condition', '281'); -INSERT INTO cp_node VALUES ('6915', 'condition', '281'); -INSERT INTO cp_node VALUES ('6916', 'sequencing', '281'); -INSERT INTO cp_node VALUES ('6917', 'rule', '281'); -INSERT INTO cp_node VALUES ('6918', 'condition', '281'); -INSERT INTO cp_node VALUES ('6919', 'sequencing', '281'); -INSERT INTO cp_node VALUES ('6920', 'rule', '281'); -INSERT INTO cp_node VALUES ('6921', 'condition', '281'); -INSERT INTO cp_node VALUES ('6922', 'condition', '281'); -INSERT INTO cp_node VALUES ('6923', 'sequencing', '281'); -INSERT INTO cp_node VALUES ('6924', 'objective', '281'); -INSERT INTO cp_node VALUES ('6925', 'objective', '281'); -INSERT INTO cp_node VALUES ('6926', 'mapInfo', '281'); -INSERT INTO cp_node VALUES ('6927', 'objective', '281'); -INSERT INTO cp_node VALUES ('6928', 'mapInfo', '281'); -INSERT INTO cp_node VALUES ('6929', 'objective', '281'); -INSERT INTO cp_node VALUES ('6930', 'mapInfo', '281'); -INSERT INTO cp_node VALUES ('6931', 'manifest', '283'); -INSERT INTO cp_node VALUES ('6932', 'organization', '283'); -INSERT INTO cp_node VALUES ('6933', 'item', '283'); -INSERT INTO cp_node VALUES ('6934', 'item', '283'); -INSERT INTO cp_node VALUES ('6935', 'item', '283'); -INSERT INTO cp_node VALUES ('6936', 'item', '283'); -INSERT INTO cp_node VALUES ('6937', 'item', '283'); -INSERT INTO cp_node VALUES ('6938', 'item', '283'); -INSERT INTO cp_node VALUES ('6939', 'item', '283'); -INSERT INTO cp_node VALUES ('6940', 'item', '283'); -INSERT INTO cp_node VALUES ('6941', 'item', '283'); -INSERT INTO cp_node VALUES ('6942', 'item', '283'); -INSERT INTO cp_node VALUES ('6943', 'item', '283'); -INSERT INTO cp_node VALUES ('6944', 'item', '283'); -INSERT INTO cp_node VALUES ('6945', 'item', '283'); -INSERT INTO cp_node VALUES ('6946', 'resource', '283'); -INSERT INTO cp_node VALUES ('6947', 'file', '283'); -INSERT INTO cp_node VALUES ('6948', 'resource', '283'); -INSERT INTO cp_node VALUES ('6949', 'file', '283'); -INSERT INTO cp_node VALUES ('6950', 'file', '283'); -INSERT INTO cp_node VALUES ('6951', 'file', '283'); -INSERT INTO cp_node VALUES ('6952', 'file', '283'); -INSERT INTO cp_node VALUES ('6953', 'file', '283'); -INSERT INTO cp_node VALUES ('6954', 'file', '283'); -INSERT INTO cp_node VALUES ('6955', 'file', '283'); -INSERT INTO cp_node VALUES ('6956', 'resource', '283'); -INSERT INTO cp_node VALUES ('6957', 'file', '283'); -INSERT INTO cp_node VALUES ('6958', 'file', '283'); -INSERT INTO cp_node VALUES ('6959', 'file', '283'); -INSERT INTO cp_node VALUES ('6960', 'file', '283'); -INSERT INTO cp_node VALUES ('6961', 'file', '283'); -INSERT INTO cp_node VALUES ('6962', 'file', '283'); -INSERT INTO cp_node VALUES ('6963', 'resource', '283'); -INSERT INTO cp_node VALUES ('6964', 'file', '283'); -INSERT INTO cp_node VALUES ('6965', 'file', '283'); -INSERT INTO cp_node VALUES ('6966', 'file', '283'); -INSERT INTO cp_node VALUES ('6967', 'file', '283'); -INSERT INTO cp_node VALUES ('6968', 'file', '283'); -INSERT INTO cp_node VALUES ('6969', 'file', '283'); -INSERT INTO cp_node VALUES ('6970', 'file', '283'); -INSERT INTO cp_node VALUES ('6971', 'resource', '283'); -INSERT INTO cp_node VALUES ('6972', 'file', '283'); -INSERT INTO cp_node VALUES ('6973', 'file', '283'); -INSERT INTO cp_node VALUES ('6974', 'file', '283'); -INSERT INTO cp_node VALUES ('6975', 'file', '283'); -INSERT INTO cp_node VALUES ('6976', 'file', '283'); -INSERT INTO cp_node VALUES ('6977', 'file', '283'); -INSERT INTO cp_node VALUES ('6978', 'file', '283'); -INSERT INTO cp_node VALUES ('6979', 'resource', '283'); -INSERT INTO cp_node VALUES ('6980', 'file', '283'); -INSERT INTO cp_node VALUES ('6981', 'file', '283'); -INSERT INTO cp_node VALUES ('6982', 'file', '283'); -INSERT INTO cp_node VALUES ('6983', 'file', '283'); -INSERT INTO cp_node VALUES ('6984', 'file', '283'); -INSERT INTO cp_node VALUES ('6985', 'file', '283'); -INSERT INTO cp_node VALUES ('6986', 'resource', '283'); -INSERT INTO cp_node VALUES ('6987', 'file', '283'); -INSERT INTO cp_node VALUES ('6988', 'file', '283'); -INSERT INTO cp_node VALUES ('6989', 'file', '283'); -INSERT INTO cp_node VALUES ('6990', 'file', '283'); -INSERT INTO cp_node VALUES ('6991', 'file', '283'); -INSERT INTO cp_node VALUES ('6992', 'file', '283'); -INSERT INTO cp_node VALUES ('6993', 'resource', '283'); -INSERT INTO cp_node VALUES ('6994', 'file', '283'); -INSERT INTO cp_node VALUES ('6995', 'file', '283'); -INSERT INTO cp_node VALUES ('6996', 'file', '283'); -INSERT INTO cp_node VALUES ('6997', 'file', '283'); -INSERT INTO cp_node VALUES ('6998', 'file', '283'); -INSERT INTO cp_node VALUES ('6999', 'file', '283'); -INSERT INTO cp_node VALUES ('7000', 'sequencing', '283'); -INSERT INTO cp_node VALUES ('7001', 'sequencing', '283'); -INSERT INTO cp_node VALUES ('7002', 'rule', '283'); -INSERT INTO cp_node VALUES ('7003', 'condition', '283'); -INSERT INTO cp_node VALUES ('7004', 'sequencing', '283'); -INSERT INTO cp_node VALUES ('7005', 'rule', '283'); -INSERT INTO cp_node VALUES ('7006', 'condition', '283'); -INSERT INTO cp_node VALUES ('7007', 'sequencing', '283'); -INSERT INTO cp_node VALUES ('7008', 'rule', '283'); -INSERT INTO cp_node VALUES ('7009', 'condition', '283'); -INSERT INTO cp_node VALUES ('7010', 'sequencing', '283'); -INSERT INTO cp_node VALUES ('7011', 'rule', '283'); -INSERT INTO cp_node VALUES ('7012', 'condition', '283'); -INSERT INTO cp_node VALUES ('7013', 'sequencing', '283'); -INSERT INTO cp_node VALUES ('7014', 'rule', '283'); -INSERT INTO cp_node VALUES ('7015', 'condition', '283'); -INSERT INTO cp_node VALUES ('7016', 'condition', '283'); -INSERT INTO cp_node VALUES ('7017', 'sequencing', '283'); -INSERT INTO cp_node VALUES ('7018', 'rule', '283'); -INSERT INTO cp_node VALUES ('7019', 'condition', '283'); -INSERT INTO cp_node VALUES ('7020', 'sequencing', '283'); -INSERT INTO cp_node VALUES ('7021', 'rule', '283'); -INSERT INTO cp_node VALUES ('7022', 'condition', '283'); -INSERT INTO cp_node VALUES ('7023', 'condition', '283'); -INSERT INTO cp_node VALUES ('7024', 'sequencing', '283'); -INSERT INTO cp_node VALUES ('7025', 'objective', '283'); -INSERT INTO cp_node VALUES ('7026', 'objective', '283'); -INSERT INTO cp_node VALUES ('7027', 'mapInfo', '283'); -INSERT INTO cp_node VALUES ('7028', 'objective', '283'); -INSERT INTO cp_node VALUES ('7029', 'mapInfo', '283'); -INSERT INTO cp_node VALUES ('7030', 'objective', '283'); -INSERT INTO cp_node VALUES ('7031', 'mapInfo', '283'); -INSERT INTO cp_node VALUES ('7032', 'manifest', '284'); -INSERT INTO cp_node VALUES ('7033', 'organization', '284'); -INSERT INTO cp_node VALUES ('7034', 'item', '284'); -INSERT INTO cp_node VALUES ('7035', 'item', '284'); -INSERT INTO cp_node VALUES ('7036', 'item', '284'); -INSERT INTO cp_node VALUES ('7037', 'item', '284'); -INSERT INTO cp_node VALUES ('7038', 'item', '284'); -INSERT INTO cp_node VALUES ('7039', 'item', '284'); -INSERT INTO cp_node VALUES ('7040', 'item', '284'); -INSERT INTO cp_node VALUES ('7041', 'item', '284'); -INSERT INTO cp_node VALUES ('7042', 'resource', '284'); -INSERT INTO cp_node VALUES ('7043', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7044', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7045', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7046', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7047', 'resource', '284'); -INSERT INTO cp_node VALUES ('7048', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7049', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7050', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7051', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7052', 'resource', '284'); -INSERT INTO cp_node VALUES ('7053', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7054', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7055', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7056', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7057', 'resource', '284'); -INSERT INTO cp_node VALUES ('7058', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7059', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7060', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7061', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7062', 'resource', '284'); -INSERT INTO cp_node VALUES ('7063', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7064', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7065', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7066', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7067', 'resource', '284'); -INSERT INTO cp_node VALUES ('7068', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7069', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7070', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7071', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7072', 'resource', '284'); -INSERT INTO cp_node VALUES ('7073', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7074', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7075', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7076', 'dependency', '284'); -INSERT INTO cp_node VALUES ('7077', 'resource', '284'); -INSERT INTO cp_node VALUES ('7078', 'file', '284'); -INSERT INTO cp_node VALUES ('7079', 'file', '284'); -INSERT INTO cp_node VALUES ('7080', 'file', '284'); -INSERT INTO cp_node VALUES ('7081', 'resource', '284'); -INSERT INTO cp_node VALUES ('7082', 'file', '284'); -INSERT INTO cp_node VALUES ('7083', 'file', '284'); -INSERT INTO cp_node VALUES ('7084', 'file', '284'); -INSERT INTO cp_node VALUES ('7085', 'file', '284'); -INSERT INTO cp_node VALUES ('7086', 'file', '284'); -INSERT INTO cp_node VALUES ('7087', 'file', '284'); -INSERT INTO cp_node VALUES ('7088', 'file', '284'); -INSERT INTO cp_node VALUES ('7089', 'file', '284'); -INSERT INTO cp_node VALUES ('7090', 'file', '284'); -INSERT INTO cp_node VALUES ('7091', 'file', '284'); -INSERT INTO cp_node VALUES ('7092', 'file', '284'); -INSERT INTO cp_node VALUES ('7093', 'resource', '284'); -INSERT INTO cp_node VALUES ('7094', 'file', '284'); -INSERT INTO cp_node VALUES ('7095', 'resource', '284'); -INSERT INTO cp_node VALUES ('7096', 'file', '284'); -INSERT INTO cp_node VALUES ('7097', 'file', '284'); -INSERT INTO cp_node VALUES ('7098', 'file', '284'); -INSERT INTO cp_node VALUES ('7099', 'file', '284'); -INSERT INTO cp_node VALUES ('7100', 'file', '284'); -INSERT INTO cp_node VALUES ('7101', 'file', '284'); -INSERT INTO cp_node VALUES ('7102', 'file', '284'); -INSERT INTO cp_node VALUES ('7103', 'file', '284'); -INSERT INTO cp_node VALUES ('7104', 'file', '284'); -INSERT INTO cp_node VALUES ('7105', 'file', '284'); -INSERT INTO cp_node VALUES ('7106', 'file', '284'); -INSERT INTO cp_node VALUES ('7107', 'file', '284'); -INSERT INTO cp_node VALUES ('7108', 'file', '284'); -INSERT INTO cp_node VALUES ('7109', 'file', '284'); -INSERT INTO cp_node VALUES ('7110', 'file', '284'); -INSERT INTO cp_node VALUES ('7111', 'file', '284'); -INSERT INTO cp_node VALUES ('7112', 'file', '284'); -INSERT INTO cp_node VALUES ('7113', 'file', '284'); -INSERT INTO cp_node VALUES ('7114', 'file', '284'); -INSERT INTO cp_node VALUES ('7115', 'file', '284'); -INSERT INTO cp_node VALUES ('7116', 'file', '284'); -INSERT INTO cp_node VALUES ('7117', 'file', '284'); -INSERT INTO cp_node VALUES ('7118', 'file', '284'); -INSERT INTO cp_node VALUES ('7119', 'file', '284'); -INSERT INTO cp_node VALUES ('7120', 'file', '284'); -INSERT INTO cp_node VALUES ('7121', 'file', '284'); -INSERT INTO cp_node VALUES ('7122', 'file', '284'); -INSERT INTO cp_node VALUES ('7123', 'file', '284'); -INSERT INTO cp_node VALUES ('7124', 'file', '284'); -INSERT INTO cp_node VALUES ('7125', 'file', '284'); -INSERT INTO cp_node VALUES ('7126', 'file', '284'); -INSERT INTO cp_node VALUES ('7127', 'file', '284'); -INSERT INTO cp_node VALUES ('7128', 'file', '284'); -INSERT INTO cp_node VALUES ('7129', 'file', '284'); -INSERT INTO cp_node VALUES ('7130', 'file', '284'); -INSERT INTO cp_node VALUES ('7131', 'file', '284'); -INSERT INTO cp_node VALUES ('7132', 'file', '284'); -INSERT INTO cp_node VALUES ('7133', 'file', '284'); -INSERT INTO cp_node VALUES ('7134', 'file', '284'); -INSERT INTO cp_node VALUES ('7135', 'file', '284'); -INSERT INTO cp_node VALUES ('7136', 'file', '284'); -INSERT INTO cp_node VALUES ('7137', 'file', '284'); -INSERT INTO cp_node VALUES ('7138', 'file', '284'); -INSERT INTO cp_node VALUES ('7139', 'file', '284'); -INSERT INTO cp_node VALUES ('7140', 'file', '284'); -INSERT INTO cp_node VALUES ('7141', 'file', '284'); -INSERT INTO cp_node VALUES ('7142', 'file', '284'); -INSERT INTO cp_node VALUES ('7143', 'file', '284'); -INSERT INTO cp_node VALUES ('7144', 'file', '284'); -INSERT INTO cp_node VALUES ('7145', 'file', '284'); -INSERT INTO cp_node VALUES ('7146', 'file', '284'); -INSERT INTO cp_node VALUES ('7147', 'file', '284'); -INSERT INTO cp_node VALUES ('7148', 'file', '284'); -INSERT INTO cp_node VALUES ('7149', 'file', '284'); -INSERT INTO cp_node VALUES ('7150', 'file', '284'); -INSERT INTO cp_node VALUES ('7151', 'file', '284'); -INSERT INTO cp_node VALUES ('7152', 'file', '284'); -INSERT INTO cp_node VALUES ('7153', 'file', '284'); -INSERT INTO cp_node VALUES ('7154', 'file', '284'); -INSERT INTO cp_node VALUES ('7155', 'file', '284'); -INSERT INTO cp_node VALUES ('7156', 'file', '284'); -INSERT INTO cp_node VALUES ('7157', 'file', '284'); -INSERT INTO cp_node VALUES ('7158', 'file', '284'); -INSERT INTO cp_node VALUES ('7159', 'file', '284'); -INSERT INTO cp_node VALUES ('7160', 'file', '284'); -INSERT INTO cp_node VALUES ('7161', 'file', '284'); -INSERT INTO cp_node VALUES ('7162', 'file', '284'); -INSERT INTO cp_node VALUES ('7163', 'file', '284'); -INSERT INTO cp_node VALUES ('7164', 'resource', '284'); -INSERT INTO cp_node VALUES ('7165', 'file', '284'); -INSERT INTO cp_node VALUES ('7166', 'file', '284'); -INSERT INTO cp_node VALUES ('7167', 'file', '284'); -INSERT INTO cp_node VALUES ('7168', 'resource', '284'); -INSERT INTO cp_node VALUES ('7169', 'file', '284'); -INSERT INTO cp_node VALUES ('7170', 'file', '284'); -INSERT INTO cp_node VALUES ('7171', 'file', '284'); -INSERT INTO cp_node VALUES ('7172', 'file', '284'); -INSERT INTO cp_node VALUES ('7173', 'file', '284'); -INSERT INTO cp_node VALUES ('7174', 'file', '284'); -INSERT INTO cp_node VALUES ('7175', 'resource', '284'); -INSERT INTO cp_node VALUES ('7176', 'file', '284'); -INSERT INTO cp_node VALUES ('7177', 'resource', '284'); -INSERT INTO cp_node VALUES ('7178', 'file', '284'); -INSERT INTO cp_node VALUES ('7179', 'file', '284'); -INSERT INTO cp_node VALUES ('7180', 'file', '284'); -INSERT INTO cp_node VALUES ('7181', 'file', '284'); -INSERT INTO cp_node VALUES ('7182', 'file', '284'); -INSERT INTO cp_node VALUES ('7183', 'file', '284'); -INSERT INTO cp_node VALUES ('7184', 'file', '284'); -INSERT INTO cp_node VALUES ('7185', 'file', '284'); -INSERT INTO cp_node VALUES ('7186', 'file', '284'); -INSERT INTO cp_node VALUES ('7187', 'file', '284'); -INSERT INTO cp_node VALUES ('7188', 'file', '284'); -INSERT INTO cp_node VALUES ('7189', 'file', '284'); -INSERT INTO cp_node VALUES ('7190', 'file', '284'); -INSERT INTO cp_node VALUES ('7191', 'file', '284'); -INSERT INTO cp_node VALUES ('7192', 'file', '284'); -INSERT INTO cp_node VALUES ('7193', 'file', '284'); -INSERT INTO cp_node VALUES ('7194', 'file', '284'); -INSERT INTO cp_node VALUES ('7195', 'file', '284'); -INSERT INTO cp_node VALUES ('7196', 'file', '284'); -INSERT INTO cp_node VALUES ('7197', 'file', '284'); -INSERT INTO cp_node VALUES ('7198', 'file', '284'); -INSERT INTO cp_node VALUES ('7199', 'file', '284'); -INSERT INTO cp_node VALUES ('7200', 'file', '284'); -INSERT INTO cp_node VALUES ('7201', 'file', '284'); -INSERT INTO cp_node VALUES ('7202', 'file', '284'); -INSERT INTO cp_node VALUES ('7203', 'file', '284'); -INSERT INTO cp_node VALUES ('7204', 'file', '284'); -INSERT INTO cp_node VALUES ('7205', 'file', '284'); -INSERT INTO cp_node VALUES ('7206', 'file', '284'); -INSERT INTO cp_node VALUES ('7207', 'file', '284'); -INSERT INTO cp_node VALUES ('7208', 'file', '284'); -INSERT INTO cp_node VALUES ('7209', 'file', '284'); -INSERT INTO cp_node VALUES ('7210', 'file', '284'); -INSERT INTO cp_node VALUES ('7211', 'file', '284'); -INSERT INTO cp_node VALUES ('7212', 'file', '284'); -INSERT INTO cp_node VALUES ('7213', 'file', '284'); -INSERT INTO cp_node VALUES ('7214', 'file', '284'); -INSERT INTO cp_node VALUES ('7215', 'file', '284'); -INSERT INTO cp_node VALUES ('7216', 'file', '284'); -INSERT INTO cp_node VALUES ('7217', 'file', '284'); -INSERT INTO cp_node VALUES ('7218', 'file', '284'); -INSERT INTO cp_node VALUES ('7219', 'file', '284'); -INSERT INTO cp_node VALUES ('7220', 'file', '284'); -INSERT INTO cp_node VALUES ('7221', 'file', '284'); -INSERT INTO cp_node VALUES ('7222', 'file', '284'); -INSERT INTO cp_node VALUES ('7223', 'file', '284'); -INSERT INTO cp_node VALUES ('7224', 'file', '284'); -INSERT INTO cp_node VALUES ('7225', 'file', '284'); -INSERT INTO cp_node VALUES ('7226', 'file', '284'); -INSERT INTO cp_node VALUES ('7227', 'file', '284'); -INSERT INTO cp_node VALUES ('7228', 'file', '284'); -INSERT INTO cp_node VALUES ('7229', 'file', '284'); -INSERT INTO cp_node VALUES ('7230', 'file', '284'); -INSERT INTO cp_node VALUES ('7231', 'file', '284'); -INSERT INTO cp_node VALUES ('7232', 'file', '284'); -INSERT INTO cp_node VALUES ('7233', 'file', '284'); -INSERT INTO cp_node VALUES ('7234', 'file', '284'); -INSERT INTO cp_node VALUES ('7235', 'file', '284'); -INSERT INTO cp_node VALUES ('7236', 'file', '284'); -INSERT INTO cp_node VALUES ('7237', 'file', '284'); -INSERT INTO cp_node VALUES ('7238', 'file', '284'); -INSERT INTO cp_node VALUES ('7239', 'file', '284'); -INSERT INTO cp_node VALUES ('7240', 'file', '284'); -INSERT INTO cp_node VALUES ('7241', 'file', '284'); -INSERT INTO cp_node VALUES ('7242', 'file', '284'); -INSERT INTO cp_node VALUES ('7243', 'file', '284'); -INSERT INTO cp_node VALUES ('7244', 'file', '284'); -INSERT INTO cp_node VALUES ('7245', 'file', '284'); -INSERT INTO cp_node VALUES ('7246', 'resource', '284'); -INSERT INTO cp_node VALUES ('7247', 'file', '284'); -INSERT INTO cp_node VALUES ('7248', 'file', '284'); -INSERT INTO cp_node VALUES ('7249', 'file', '284'); -INSERT INTO cp_node VALUES ('7250', 'resource', '284'); -INSERT INTO cp_node VALUES ('7251', 'file', '284'); -INSERT INTO cp_node VALUES ('7252', 'file', '284'); -INSERT INTO cp_node VALUES ('7253', 'file', '284'); -INSERT INTO cp_node VALUES ('7254', 'file', '284'); -INSERT INTO cp_node VALUES ('7255', 'file', '284'); -INSERT INTO cp_node VALUES ('7256', 'file', '284'); -INSERT INTO cp_node VALUES ('7257', 'resource', '284'); -INSERT INTO cp_node VALUES ('7258', 'file', '284'); -INSERT INTO cp_node VALUES ('7259', 'resource', '284'); -INSERT INTO cp_node VALUES ('7260', 'file', '284'); -INSERT INTO cp_node VALUES ('7261', 'file', '284'); -INSERT INTO cp_node VALUES ('7262', 'file', '284'); -INSERT INTO cp_node VALUES ('7263', 'file', '284'); -INSERT INTO cp_node VALUES ('7264', 'file', '284'); -INSERT INTO cp_node VALUES ('7265', 'file', '284'); -INSERT INTO cp_node VALUES ('7266', 'file', '284'); -INSERT INTO cp_node VALUES ('7267', 'file', '284'); -INSERT INTO cp_node VALUES ('7268', 'file', '284'); -INSERT INTO cp_node VALUES ('7269', 'file', '284'); -INSERT INTO cp_node VALUES ('7270', 'file', '284'); -INSERT INTO cp_node VALUES ('7271', 'file', '284'); -INSERT INTO cp_node VALUES ('7272', 'file', '284'); -INSERT INTO cp_node VALUES ('7273', 'file', '284'); -INSERT INTO cp_node VALUES ('7274', 'file', '284'); -INSERT INTO cp_node VALUES ('7275', 'file', '284'); -INSERT INTO cp_node VALUES ('7276', 'file', '284'); -INSERT INTO cp_node VALUES ('7277', 'file', '284'); -INSERT INTO cp_node VALUES ('7278', 'file', '284'); -INSERT INTO cp_node VALUES ('7279', 'file', '284'); -INSERT INTO cp_node VALUES ('7280', 'file', '284'); -INSERT INTO cp_node VALUES ('7281', 'file', '284'); -INSERT INTO cp_node VALUES ('7282', 'file', '284'); -INSERT INTO cp_node VALUES ('7283', 'file', '284'); -INSERT INTO cp_node VALUES ('7284', 'file', '284'); -INSERT INTO cp_node VALUES ('7285', 'file', '284'); -INSERT INTO cp_node VALUES ('7286', 'file', '284'); -INSERT INTO cp_node VALUES ('7287', 'file', '284'); -INSERT INTO cp_node VALUES ('7288', 'file', '284'); -INSERT INTO cp_node VALUES ('7289', 'file', '284'); -INSERT INTO cp_node VALUES ('7290', 'file', '284'); -INSERT INTO cp_node VALUES ('7291', 'file', '284'); -INSERT INTO cp_node VALUES ('7292', 'file', '284'); -INSERT INTO cp_node VALUES ('7293', 'file', '284'); -INSERT INTO cp_node VALUES ('7294', 'file', '284'); -INSERT INTO cp_node VALUES ('7295', 'file', '284'); -INSERT INTO cp_node VALUES ('7296', 'file', '284'); -INSERT INTO cp_node VALUES ('7297', 'file', '284'); -INSERT INTO cp_node VALUES ('7298', 'file', '284'); -INSERT INTO cp_node VALUES ('7299', 'file', '284'); -INSERT INTO cp_node VALUES ('7300', 'file', '284'); -INSERT INTO cp_node VALUES ('7301', 'file', '284'); -INSERT INTO cp_node VALUES ('7302', 'file', '284'); -INSERT INTO cp_node VALUES ('7303', 'file', '284'); -INSERT INTO cp_node VALUES ('7304', 'file', '284'); -INSERT INTO cp_node VALUES ('7305', 'file', '284'); -INSERT INTO cp_node VALUES ('7306', 'file', '284'); -INSERT INTO cp_node VALUES ('7307', 'file', '284'); -INSERT INTO cp_node VALUES ('7308', 'file', '284'); -INSERT INTO cp_node VALUES ('7309', 'file', '284'); -INSERT INTO cp_node VALUES ('7310', 'file', '284'); -INSERT INTO cp_node VALUES ('7311', 'file', '284'); -INSERT INTO cp_node VALUES ('7312', 'file', '284'); -INSERT INTO cp_node VALUES ('7313', 'file', '284'); -INSERT INTO cp_node VALUES ('7314', 'file', '284'); -INSERT INTO cp_node VALUES ('7315', 'file', '284'); -INSERT INTO cp_node VALUES ('7316', 'file', '284'); -INSERT INTO cp_node VALUES ('7317', 'file', '284'); -INSERT INTO cp_node VALUES ('7318', 'file', '284'); -INSERT INTO cp_node VALUES ('7319', 'file', '284'); -INSERT INTO cp_node VALUES ('7320', 'file', '284'); -INSERT INTO cp_node VALUES ('7321', 'file', '284'); -INSERT INTO cp_node VALUES ('7322', 'file', '284'); -INSERT INTO cp_node VALUES ('7323', 'file', '284'); -INSERT INTO cp_node VALUES ('7324', 'file', '284'); -INSERT INTO cp_node VALUES ('7325', 'file', '284'); -INSERT INTO cp_node VALUES ('7326', 'file', '284'); -INSERT INTO cp_node VALUES ('7327', 'file', '284'); -INSERT INTO cp_node VALUES ('7328', 'resource', '284'); -INSERT INTO cp_node VALUES ('7329', 'file', '284'); -INSERT INTO cp_node VALUES ('7330', 'file', '284'); -INSERT INTO cp_node VALUES ('7331', 'file', '284'); -INSERT INTO cp_node VALUES ('7332', 'resource', '284'); -INSERT INTO cp_node VALUES ('7333', 'file', '284'); -INSERT INTO cp_node VALUES ('7334', 'file', '284'); -INSERT INTO cp_node VALUES ('7335', 'file', '284'); -INSERT INTO cp_node VALUES ('7336', 'file', '284'); -INSERT INTO cp_node VALUES ('7337', 'resource', '284'); -INSERT INTO cp_node VALUES ('7338', 'file', '284'); -INSERT INTO cp_node VALUES ('7339', 'resource', '284'); -INSERT INTO cp_node VALUES ('7340', 'file', '284'); -INSERT INTO cp_node VALUES ('7341', 'file', '284'); -INSERT INTO cp_node VALUES ('7342', 'file', '284'); -INSERT INTO cp_node VALUES ('7343', 'file', '284'); -INSERT INTO cp_node VALUES ('7344', 'file', '284'); -INSERT INTO cp_node VALUES ('7345', 'file', '284'); -INSERT INTO cp_node VALUES ('7346', 'file', '284'); -INSERT INTO cp_node VALUES ('7347', 'file', '284'); -INSERT INTO cp_node VALUES ('7348', 'file', '284'); -INSERT INTO cp_node VALUES ('7349', 'file', '284'); -INSERT INTO cp_node VALUES ('7350', 'file', '284'); -INSERT INTO cp_node VALUES ('7351', 'file', '284'); -INSERT INTO cp_node VALUES ('7352', 'file', '284'); -INSERT INTO cp_node VALUES ('7353', 'file', '284'); -INSERT INTO cp_node VALUES ('7354', 'file', '284'); -INSERT INTO cp_node VALUES ('7355', 'file', '284'); -INSERT INTO cp_node VALUES ('7356', 'file', '284'); -INSERT INTO cp_node VALUES ('7357', 'file', '284'); -INSERT INTO cp_node VALUES ('7358', 'file', '284'); -INSERT INTO cp_node VALUES ('7359', 'file', '284'); -INSERT INTO cp_node VALUES ('7360', 'file', '284'); -INSERT INTO cp_node VALUES ('7361', 'file', '284'); -INSERT INTO cp_node VALUES ('7362', 'file', '284'); -INSERT INTO cp_node VALUES ('7363', 'file', '284'); -INSERT INTO cp_node VALUES ('7364', 'file', '284'); -INSERT INTO cp_node VALUES ('7365', 'file', '284'); -INSERT INTO cp_node VALUES ('7366', 'file', '284'); -INSERT INTO cp_node VALUES ('7367', 'file', '284'); -INSERT INTO cp_node VALUES ('7368', 'file', '284'); -INSERT INTO cp_node VALUES ('7369', 'file', '284'); -INSERT INTO cp_node VALUES ('7370', 'file', '284'); -INSERT INTO cp_node VALUES ('7371', 'file', '284'); -INSERT INTO cp_node VALUES ('7372', 'file', '284'); -INSERT INTO cp_node VALUES ('7373', 'file', '284'); -INSERT INTO cp_node VALUES ('7374', 'file', '284'); -INSERT INTO cp_node VALUES ('7375', 'file', '284'); -INSERT INTO cp_node VALUES ('7376', 'file', '284'); -INSERT INTO cp_node VALUES ('7377', 'file', '284'); -INSERT INTO cp_node VALUES ('7378', 'file', '284'); -INSERT INTO cp_node VALUES ('7379', 'file', '284'); -INSERT INTO cp_node VALUES ('7380', 'file', '284'); -INSERT INTO cp_node VALUES ('7381', 'file', '284'); -INSERT INTO cp_node VALUES ('7382', 'file', '284'); -INSERT INTO cp_node VALUES ('7383', 'file', '284'); -INSERT INTO cp_node VALUES ('7384', 'file', '284'); -INSERT INTO cp_node VALUES ('7385', 'file', '284'); -INSERT INTO cp_node VALUES ('7386', 'file', '284'); -INSERT INTO cp_node VALUES ('7387', 'file', '284'); -INSERT INTO cp_node VALUES ('7388', 'file', '284'); -INSERT INTO cp_node VALUES ('7389', 'file', '284'); -INSERT INTO cp_node VALUES ('7390', 'file', '284'); -INSERT INTO cp_node VALUES ('7391', 'file', '284'); -INSERT INTO cp_node VALUES ('7392', 'file', '284'); -INSERT INTO cp_node VALUES ('7393', 'file', '284'); -INSERT INTO cp_node VALUES ('7394', 'file', '284'); -INSERT INTO cp_node VALUES ('7395', 'file', '284'); -INSERT INTO cp_node VALUES ('7396', 'file', '284'); -INSERT INTO cp_node VALUES ('7397', 'file', '284'); -INSERT INTO cp_node VALUES ('7398', 'file', '284'); -INSERT INTO cp_node VALUES ('7399', 'file', '284'); -INSERT INTO cp_node VALUES ('7400', 'file', '284'); -INSERT INTO cp_node VALUES ('7401', 'file', '284'); -INSERT INTO cp_node VALUES ('7402', 'file', '284'); -INSERT INTO cp_node VALUES ('7403', 'file', '284'); -INSERT INTO cp_node VALUES ('7404', 'file', '284'); -INSERT INTO cp_node VALUES ('7405', 'file', '284'); -INSERT INTO cp_node VALUES ('7406', 'file', '284'); -INSERT INTO cp_node VALUES ('7407', 'file', '284'); -INSERT INTO cp_node VALUES ('7408', 'resource', '284'); -INSERT INTO cp_node VALUES ('7409', 'file', '284'); -INSERT INTO cp_node VALUES ('7410', 'file', '284'); -INSERT INTO cp_node VALUES ('7411', 'file', '284'); -INSERT INTO cp_node VALUES ('7412', 'resource', '284'); -INSERT INTO cp_node VALUES ('7413', 'file', '284'); -INSERT INTO cp_node VALUES ('7414', 'file', '284'); -INSERT INTO cp_node VALUES ('7415', 'file', '284'); -INSERT INTO cp_node VALUES ('7416', 'file', '284'); -INSERT INTO cp_node VALUES ('7417', 'file', '284'); -INSERT INTO cp_node VALUES ('7418', 'file', '284'); -INSERT INTO cp_node VALUES ('7419', 'file', '284'); -INSERT INTO cp_node VALUES ('7420', 'file', '284'); -INSERT INTO cp_node VALUES ('7421', 'file', '284'); -INSERT INTO cp_node VALUES ('7422', 'file', '284'); -INSERT INTO cp_node VALUES ('7423', 'file', '284'); -INSERT INTO cp_node VALUES ('7424', 'resource', '284'); -INSERT INTO cp_node VALUES ('7425', 'file', '284'); -INSERT INTO cp_node VALUES ('7426', 'resource', '284'); -INSERT INTO cp_node VALUES ('7427', 'file', '284'); -INSERT INTO cp_node VALUES ('7428', 'file', '284'); -INSERT INTO cp_node VALUES ('7429', 'file', '284'); -INSERT INTO cp_node VALUES ('7430', 'file', '284'); -INSERT INTO cp_node VALUES ('7431', 'file', '284'); -INSERT INTO cp_node VALUES ('7432', 'file', '284'); -INSERT INTO cp_node VALUES ('7433', 'file', '284'); -INSERT INTO cp_node VALUES ('7434', 'file', '284'); -INSERT INTO cp_node VALUES ('7435', 'file', '284'); -INSERT INTO cp_node VALUES ('7436', 'file', '284'); -INSERT INTO cp_node VALUES ('7437', 'file', '284'); -INSERT INTO cp_node VALUES ('7438', 'file', '284'); -INSERT INTO cp_node VALUES ('7439', 'file', '284'); -INSERT INTO cp_node VALUES ('7440', 'file', '284'); -INSERT INTO cp_node VALUES ('7441', 'file', '284'); -INSERT INTO cp_node VALUES ('7442', 'file', '284'); -INSERT INTO cp_node VALUES ('7443', 'file', '284'); -INSERT INTO cp_node VALUES ('7444', 'file', '284'); -INSERT INTO cp_node VALUES ('7445', 'file', '284'); -INSERT INTO cp_node VALUES ('7446', 'file', '284'); -INSERT INTO cp_node VALUES ('7447', 'file', '284'); -INSERT INTO cp_node VALUES ('7448', 'file', '284'); -INSERT INTO cp_node VALUES ('7449', 'file', '284'); -INSERT INTO cp_node VALUES ('7450', 'file', '284'); -INSERT INTO cp_node VALUES ('7451', 'file', '284'); -INSERT INTO cp_node VALUES ('7452', 'file', '284'); -INSERT INTO cp_node VALUES ('7453', 'file', '284'); -INSERT INTO cp_node VALUES ('7454', 'file', '284'); -INSERT INTO cp_node VALUES ('7455', 'file', '284'); -INSERT INTO cp_node VALUES ('7456', 'file', '284'); -INSERT INTO cp_node VALUES ('7457', 'file', '284'); -INSERT INTO cp_node VALUES ('7458', 'file', '284'); -INSERT INTO cp_node VALUES ('7459', 'file', '284'); -INSERT INTO cp_node VALUES ('7460', 'file', '284'); -INSERT INTO cp_node VALUES ('7461', 'file', '284'); -INSERT INTO cp_node VALUES ('7462', 'file', '284'); -INSERT INTO cp_node VALUES ('7463', 'file', '284'); -INSERT INTO cp_node VALUES ('7464', 'file', '284'); -INSERT INTO cp_node VALUES ('7465', 'file', '284'); -INSERT INTO cp_node VALUES ('7466', 'file', '284'); -INSERT INTO cp_node VALUES ('7467', 'file', '284'); -INSERT INTO cp_node VALUES ('7468', 'file', '284'); -INSERT INTO cp_node VALUES ('7469', 'file', '284'); -INSERT INTO cp_node VALUES ('7470', 'file', '284'); -INSERT INTO cp_node VALUES ('7471', 'file', '284'); -INSERT INTO cp_node VALUES ('7472', 'file', '284'); -INSERT INTO cp_node VALUES ('7473', 'file', '284'); -INSERT INTO cp_node VALUES ('7474', 'file', '284'); -INSERT INTO cp_node VALUES ('7475', 'file', '284'); -INSERT INTO cp_node VALUES ('7476', 'file', '284'); -INSERT INTO cp_node VALUES ('7477', 'file', '284'); -INSERT INTO cp_node VALUES ('7478', 'file', '284'); -INSERT INTO cp_node VALUES ('7479', 'file', '284'); -INSERT INTO cp_node VALUES ('7480', 'file', '284'); -INSERT INTO cp_node VALUES ('7481', 'file', '284'); -INSERT INTO cp_node VALUES ('7482', 'file', '284'); -INSERT INTO cp_node VALUES ('7483', 'file', '284'); -INSERT INTO cp_node VALUES ('7484', 'file', '284'); -INSERT INTO cp_node VALUES ('7485', 'file', '284'); -INSERT INTO cp_node VALUES ('7486', 'file', '284'); -INSERT INTO cp_node VALUES ('7487', 'file', '284'); -INSERT INTO cp_node VALUES ('7488', 'file', '284'); -INSERT INTO cp_node VALUES ('7489', 'file', '284'); -INSERT INTO cp_node VALUES ('7490', 'file', '284'); -INSERT INTO cp_node VALUES ('7491', 'file', '284'); -INSERT INTO cp_node VALUES ('7492', 'file', '284'); -INSERT INTO cp_node VALUES ('7493', 'file', '284'); -INSERT INTO cp_node VALUES ('7494', 'file', '284'); -INSERT INTO cp_node VALUES ('7495', 'resource', '284'); -INSERT INTO cp_node VALUES ('7496', 'file', '284'); -INSERT INTO cp_node VALUES ('7497', 'file', '284'); -INSERT INTO cp_node VALUES ('7498', 'file', '284'); -INSERT INTO cp_node VALUES ('7499', 'resource', '284'); -INSERT INTO cp_node VALUES ('7500', 'file', '284'); -INSERT INTO cp_node VALUES ('7501', 'file', '284'); -INSERT INTO cp_node VALUES ('7502', 'file', '284'); -INSERT INTO cp_node VALUES ('7503', 'file', '284'); -INSERT INTO cp_node VALUES ('7504', 'file', '284'); -INSERT INTO cp_node VALUES ('7505', 'file', '284'); -INSERT INTO cp_node VALUES ('7506', 'file', '284'); -INSERT INTO cp_node VALUES ('7507', 'file', '284'); -INSERT INTO cp_node VALUES ('7508', 'resource', '284'); -INSERT INTO cp_node VALUES ('7509', 'file', '284'); -INSERT INTO cp_node VALUES ('7510', 'resource', '284'); -INSERT INTO cp_node VALUES ('7511', 'file', '284'); -INSERT INTO cp_node VALUES ('7512', 'file', '284'); -INSERT INTO cp_node VALUES ('7513', 'file', '284'); -INSERT INTO cp_node VALUES ('7514', 'file', '284'); -INSERT INTO cp_node VALUES ('7515', 'file', '284'); -INSERT INTO cp_node VALUES ('7516', 'file', '284'); -INSERT INTO cp_node VALUES ('7517', 'file', '284'); -INSERT INTO cp_node VALUES ('7518', 'file', '284'); -INSERT INTO cp_node VALUES ('7519', 'file', '284'); -INSERT INTO cp_node VALUES ('7520', 'file', '284'); -INSERT INTO cp_node VALUES ('7521', 'file', '284'); -INSERT INTO cp_node VALUES ('7522', 'file', '284'); -INSERT INTO cp_node VALUES ('7523', 'file', '284'); -INSERT INTO cp_node VALUES ('7524', 'file', '284'); -INSERT INTO cp_node VALUES ('7525', 'file', '284'); -INSERT INTO cp_node VALUES ('7526', 'file', '284'); -INSERT INTO cp_node VALUES ('7527', 'file', '284'); -INSERT INTO cp_node VALUES ('7528', 'file', '284'); -INSERT INTO cp_node VALUES ('7529', 'file', '284'); -INSERT INTO cp_node VALUES ('7530', 'file', '284'); -INSERT INTO cp_node VALUES ('7531', 'file', '284'); -INSERT INTO cp_node VALUES ('7532', 'file', '284'); -INSERT INTO cp_node VALUES ('7533', 'file', '284'); -INSERT INTO cp_node VALUES ('7534', 'file', '284'); -INSERT INTO cp_node VALUES ('7535', 'file', '284'); -INSERT INTO cp_node VALUES ('7536', 'file', '284'); -INSERT INTO cp_node VALUES ('7537', 'file', '284'); -INSERT INTO cp_node VALUES ('7538', 'file', '284'); -INSERT INTO cp_node VALUES ('7539', 'file', '284'); -INSERT INTO cp_node VALUES ('7540', 'file', '284'); -INSERT INTO cp_node VALUES ('7541', 'file', '284'); -INSERT INTO cp_node VALUES ('7542', 'file', '284'); -INSERT INTO cp_node VALUES ('7543', 'file', '284'); -INSERT INTO cp_node VALUES ('7544', 'file', '284'); -INSERT INTO cp_node VALUES ('7545', 'file', '284'); -INSERT INTO cp_node VALUES ('7546', 'file', '284'); -INSERT INTO cp_node VALUES ('7547', 'file', '284'); -INSERT INTO cp_node VALUES ('7548', 'file', '284'); -INSERT INTO cp_node VALUES ('7549', 'file', '284'); -INSERT INTO cp_node VALUES ('7550', 'file', '284'); -INSERT INTO cp_node VALUES ('7551', 'file', '284'); -INSERT INTO cp_node VALUES ('7552', 'file', '284'); -INSERT INTO cp_node VALUES ('7553', 'file', '284'); -INSERT INTO cp_node VALUES ('7554', 'file', '284'); -INSERT INTO cp_node VALUES ('7555', 'file', '284'); -INSERT INTO cp_node VALUES ('7556', 'file', '284'); -INSERT INTO cp_node VALUES ('7557', 'file', '284'); -INSERT INTO cp_node VALUES ('7558', 'file', '284'); -INSERT INTO cp_node VALUES ('7559', 'file', '284'); -INSERT INTO cp_node VALUES ('7560', 'file', '284'); -INSERT INTO cp_node VALUES ('7561', 'file', '284'); -INSERT INTO cp_node VALUES ('7562', 'file', '284'); -INSERT INTO cp_node VALUES ('7563', 'file', '284'); -INSERT INTO cp_node VALUES ('7564', 'file', '284'); -INSERT INTO cp_node VALUES ('7565', 'file', '284'); -INSERT INTO cp_node VALUES ('7566', 'file', '284'); -INSERT INTO cp_node VALUES ('7567', 'file', '284'); -INSERT INTO cp_node VALUES ('7568', 'file', '284'); -INSERT INTO cp_node VALUES ('7569', 'file', '284'); -INSERT INTO cp_node VALUES ('7570', 'file', '284'); -INSERT INTO cp_node VALUES ('7571', 'file', '284'); -INSERT INTO cp_node VALUES ('7572', 'file', '284'); -INSERT INTO cp_node VALUES ('7573', 'file', '284'); -INSERT INTO cp_node VALUES ('7574', 'file', '284'); -INSERT INTO cp_node VALUES ('7575', 'file', '284'); -INSERT INTO cp_node VALUES ('7576', 'file', '284'); -INSERT INTO cp_node VALUES ('7577', 'file', '284'); -INSERT INTO cp_node VALUES ('7578', 'file', '284'); -INSERT INTO cp_node VALUES ('7579', 'resource', '284'); -INSERT INTO cp_node VALUES ('7580', 'file', '284'); -INSERT INTO cp_node VALUES ('7581', 'file', '284'); -INSERT INTO cp_node VALUES ('7582', 'file', '284'); -INSERT INTO cp_node VALUES ('7583', 'resource', '284'); -INSERT INTO cp_node VALUES ('7584', 'file', '284'); -INSERT INTO cp_node VALUES ('7585', 'file', '284'); -INSERT INTO cp_node VALUES ('7586', 'file', '284'); -INSERT INTO cp_node VALUES ('7587', 'file', '284'); -INSERT INTO cp_node VALUES ('7588', 'resource', '284'); -INSERT INTO cp_node VALUES ('7589', 'file', '284'); -INSERT INTO cp_node VALUES ('7590', 'resource', '284'); -INSERT INTO cp_node VALUES ('7591', 'file', '284'); -INSERT INTO cp_node VALUES ('7592', 'file', '284'); -INSERT INTO cp_node VALUES ('7593', 'file', '284'); -INSERT INTO cp_node VALUES ('7594', 'file', '284'); -INSERT INTO cp_node VALUES ('7595', 'file', '284'); -INSERT INTO cp_node VALUES ('7596', 'file', '284'); -INSERT INTO cp_node VALUES ('7597', 'file', '284'); -INSERT INTO cp_node VALUES ('7598', 'file', '284'); -INSERT INTO cp_node VALUES ('7599', 'file', '284'); -INSERT INTO cp_node VALUES ('7600', 'file', '284'); -INSERT INTO cp_node VALUES ('7601', 'file', '284'); -INSERT INTO cp_node VALUES ('7602', 'file', '284'); -INSERT INTO cp_node VALUES ('7603', 'file', '284'); -INSERT INTO cp_node VALUES ('7604', 'file', '284'); -INSERT INTO cp_node VALUES ('7605', 'file', '284'); -INSERT INTO cp_node VALUES ('7606', 'file', '284'); -INSERT INTO cp_node VALUES ('7607', 'file', '284'); -INSERT INTO cp_node VALUES ('7608', 'file', '284'); -INSERT INTO cp_node VALUES ('7609', 'file', '284'); -INSERT INTO cp_node VALUES ('7610', 'file', '284'); -INSERT INTO cp_node VALUES ('7611', 'file', '284'); -INSERT INTO cp_node VALUES ('7612', 'file', '284'); -INSERT INTO cp_node VALUES ('7613', 'file', '284'); -INSERT INTO cp_node VALUES ('7614', 'file', '284'); -INSERT INTO cp_node VALUES ('7615', 'file', '284'); -INSERT INTO cp_node VALUES ('7616', 'file', '284'); -INSERT INTO cp_node VALUES ('7617', 'file', '284'); -INSERT INTO cp_node VALUES ('7618', 'file', '284'); -INSERT INTO cp_node VALUES ('7619', 'file', '284'); -INSERT INTO cp_node VALUES ('7620', 'file', '284'); -INSERT INTO cp_node VALUES ('7621', 'file', '284'); -INSERT INTO cp_node VALUES ('7622', 'file', '284'); -INSERT INTO cp_node VALUES ('7623', 'file', '284'); -INSERT INTO cp_node VALUES ('7624', 'file', '284'); -INSERT INTO cp_node VALUES ('7625', 'file', '284'); -INSERT INTO cp_node VALUES ('7626', 'file', '284'); -INSERT INTO cp_node VALUES ('7627', 'file', '284'); -INSERT INTO cp_node VALUES ('7628', 'file', '284'); -INSERT INTO cp_node VALUES ('7629', 'file', '284'); -INSERT INTO cp_node VALUES ('7630', 'file', '284'); -INSERT INTO cp_node VALUES ('7631', 'file', '284'); -INSERT INTO cp_node VALUES ('7632', 'file', '284'); -INSERT INTO cp_node VALUES ('7633', 'file', '284'); -INSERT INTO cp_node VALUES ('7634', 'file', '284'); -INSERT INTO cp_node VALUES ('7635', 'file', '284'); -INSERT INTO cp_node VALUES ('7636', 'file', '284'); -INSERT INTO cp_node VALUES ('7637', 'file', '284'); -INSERT INTO cp_node VALUES ('7638', 'file', '284'); -INSERT INTO cp_node VALUES ('7639', 'file', '284'); -INSERT INTO cp_node VALUES ('7640', 'file', '284'); -INSERT INTO cp_node VALUES ('7641', 'file', '284'); -INSERT INTO cp_node VALUES ('7642', 'file', '284'); -INSERT INTO cp_node VALUES ('7643', 'file', '284'); -INSERT INTO cp_node VALUES ('7644', 'file', '284'); -INSERT INTO cp_node VALUES ('7645', 'file', '284'); -INSERT INTO cp_node VALUES ('7646', 'file', '284'); -INSERT INTO cp_node VALUES ('7647', 'file', '284'); -INSERT INTO cp_node VALUES ('7648', 'file', '284'); -INSERT INTO cp_node VALUES ('7649', 'file', '284'); -INSERT INTO cp_node VALUES ('7650', 'file', '284'); -INSERT INTO cp_node VALUES ('7651', 'file', '284'); -INSERT INTO cp_node VALUES ('7652', 'file', '284'); -INSERT INTO cp_node VALUES ('7653', 'file', '284'); -INSERT INTO cp_node VALUES ('7654', 'file', '284'); -INSERT INTO cp_node VALUES ('7655', 'file', '284'); -INSERT INTO cp_node VALUES ('7656', 'file', '284'); -INSERT INTO cp_node VALUES ('7657', 'file', '284'); -INSERT INTO cp_node VALUES ('7658', 'file', '284'); -INSERT INTO cp_node VALUES ('7659', 'resource', '284'); -INSERT INTO cp_node VALUES ('7660', 'file', '284'); -INSERT INTO cp_node VALUES ('7661', 'file', '284'); -INSERT INTO cp_node VALUES ('7662', 'file', '284'); -INSERT INTO cp_node VALUES ('7663', 'file', '284'); -INSERT INTO cp_node VALUES ('7664', 'file', '284'); -INSERT INTO cp_node VALUES ('7665', 'file', '284'); -INSERT INTO cp_node VALUES ('7666', 'file', '284'); -INSERT INTO cp_node VALUES ('7667', 'file', '284'); -INSERT INTO cp_node VALUES ('7668', 'file', '284'); -INSERT INTO cp_node VALUES ('7669', 'file', '284'); -INSERT INTO cp_node VALUES ('7670', 'file', '284'); -INSERT INTO cp_node VALUES ('7671', 'file', '284'); -INSERT INTO cp_node VALUES ('7672', 'file', '284'); -INSERT INTO cp_node VALUES ('7673', 'file', '284'); -INSERT INTO cp_node VALUES ('7674', 'file', '284'); -INSERT INTO cp_node VALUES ('7675', 'file', '284'); -INSERT INTO cp_node VALUES ('7676', 'file', '284'); -INSERT INTO cp_node VALUES ('7677', 'manifest', '100'); -INSERT INTO cp_node VALUES ('7678', 'organization', '100'); -INSERT INTO cp_node VALUES ('7679', 'item', '100'); -INSERT INTO cp_node VALUES ('7680', 'item', '100'); -INSERT INTO cp_node VALUES ('7681', 'item', '100'); -INSERT INTO cp_node VALUES ('7682', 'item', '100'); -INSERT INTO cp_node VALUES ('7683', 'item', '100'); -INSERT INTO cp_node VALUES ('7684', 'item', '100'); -INSERT INTO cp_node VALUES ('7685', 'item', '100'); -INSERT INTO cp_node VALUES ('7686', 'item', '100'); -INSERT INTO cp_node VALUES ('7687', 'item', '100'); -INSERT INTO cp_node VALUES ('7688', 'item', '100'); -INSERT INTO cp_node VALUES ('7689', 'item', '100'); -INSERT INTO cp_node VALUES ('7690', 'resource', '100'); -INSERT INTO cp_node VALUES ('7691', 'resource', '100'); -INSERT INTO cp_node VALUES ('7692', 'manifest', '100'); -INSERT INTO cp_node VALUES ('7693', 'organization', '100'); -INSERT INTO cp_node VALUES ('7694', 'item', '100'); -INSERT INTO cp_node VALUES ('7695', 'item', '100'); -INSERT INTO cp_node VALUES ('7696', 'item', '100'); -INSERT INTO cp_node VALUES ('7697', 'item', '100'); -INSERT INTO cp_node VALUES ('7698', 'item', '100'); -INSERT INTO cp_node VALUES ('7699', 'item', '100'); -INSERT INTO cp_node VALUES ('7700', 'item', '100'); -INSERT INTO cp_node VALUES ('7701', 'item', '100'); -INSERT INTO cp_node VALUES ('7702', 'resource', '100'); -INSERT INTO cp_node VALUES ('7703', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7704', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7705', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7706', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7707', 'resource', '100'); -INSERT INTO cp_node VALUES ('7708', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7709', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7710', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7711', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7712', 'resource', '100'); -INSERT INTO cp_node VALUES ('7713', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7714', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7715', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7716', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7717', 'resource', '100'); -INSERT INTO cp_node VALUES ('7718', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7719', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7720', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7721', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7722', 'resource', '100'); -INSERT INTO cp_node VALUES ('7723', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7724', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7725', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7726', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7727', 'resource', '100'); -INSERT INTO cp_node VALUES ('7728', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7729', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7730', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7731', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7732', 'resource', '100'); -INSERT INTO cp_node VALUES ('7733', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7734', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7735', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7736', 'dependency', '100'); -INSERT INTO cp_node VALUES ('7737', 'resource', '100'); -INSERT INTO cp_node VALUES ('7738', 'file', '100'); -INSERT INTO cp_node VALUES ('7739', 'file', '100'); -INSERT INTO cp_node VALUES ('7740', 'file', '100'); -INSERT INTO cp_node VALUES ('7741', 'resource', '100'); -INSERT INTO cp_node VALUES ('7742', 'file', '100'); -INSERT INTO cp_node VALUES ('7743', 'file', '100'); -INSERT INTO cp_node VALUES ('7744', 'file', '100'); -INSERT INTO cp_node VALUES ('7745', 'file', '100'); -INSERT INTO cp_node VALUES ('7746', 'file', '100'); -INSERT INTO cp_node VALUES ('7747', 'file', '100'); -INSERT INTO cp_node VALUES ('7748', 'file', '100'); -INSERT INTO cp_node VALUES ('7749', 'file', '100'); -INSERT INTO cp_node VALUES ('7750', 'file', '100'); -INSERT INTO cp_node VALUES ('7751', 'file', '100'); -INSERT INTO cp_node VALUES ('7752', 'file', '100'); -INSERT INTO cp_node VALUES ('7753', 'resource', '100'); -INSERT INTO cp_node VALUES ('7754', 'file', '100'); -INSERT INTO cp_node VALUES ('7755', 'resource', '100'); -INSERT INTO cp_node VALUES ('7756', 'file', '100'); -INSERT INTO cp_node VALUES ('7757', 'file', '100'); -INSERT INTO cp_node VALUES ('7758', 'file', '100'); -INSERT INTO cp_node VALUES ('7759', 'file', '100'); -INSERT INTO cp_node VALUES ('7760', 'file', '100'); -INSERT INTO cp_node VALUES ('7761', 'file', '100'); -INSERT INTO cp_node VALUES ('7762', 'file', '100'); -INSERT INTO cp_node VALUES ('7763', 'file', '100'); -INSERT INTO cp_node VALUES ('7764', 'file', '100'); -INSERT INTO cp_node VALUES ('7765', 'file', '100'); -INSERT INTO cp_node VALUES ('7766', 'file', '100'); -INSERT INTO cp_node VALUES ('7767', 'file', '100'); -INSERT INTO cp_node VALUES ('7768', 'file', '100'); -INSERT INTO cp_node VALUES ('7769', 'file', '100'); -INSERT INTO cp_node VALUES ('7770', 'file', '100'); -INSERT INTO cp_node VALUES ('7771', 'file', '100'); -INSERT INTO cp_node VALUES ('7772', 'file', '100'); -INSERT INTO cp_node VALUES ('7773', 'file', '100'); -INSERT INTO cp_node VALUES ('7774', 'file', '100'); -INSERT INTO cp_node VALUES ('7775', 'file', '100'); -INSERT INTO cp_node VALUES ('7776', 'file', '100'); -INSERT INTO cp_node VALUES ('7777', 'file', '100'); -INSERT INTO cp_node VALUES ('7778', 'file', '100'); -INSERT INTO cp_node VALUES ('7779', 'file', '100'); -INSERT INTO cp_node VALUES ('7780', 'file', '100'); -INSERT INTO cp_node VALUES ('7781', 'file', '100'); -INSERT INTO cp_node VALUES ('7782', 'file', '100'); -INSERT INTO cp_node VALUES ('7783', 'file', '100'); -INSERT INTO cp_node VALUES ('7784', 'file', '100'); -INSERT INTO cp_node VALUES ('7785', 'file', '100'); -INSERT INTO cp_node VALUES ('7786', 'file', '100'); -INSERT INTO cp_node VALUES ('7787', 'file', '100'); -INSERT INTO cp_node VALUES ('7788', 'file', '100'); -INSERT INTO cp_node VALUES ('7789', 'file', '100'); -INSERT INTO cp_node VALUES ('7790', 'file', '100'); -INSERT INTO cp_node VALUES ('7791', 'file', '100'); -INSERT INTO cp_node VALUES ('7792', 'file', '100'); -INSERT INTO cp_node VALUES ('7793', 'file', '100'); -INSERT INTO cp_node VALUES ('7794', 'file', '100'); -INSERT INTO cp_node VALUES ('7795', 'file', '100'); -INSERT INTO cp_node VALUES ('7796', 'file', '100'); -INSERT INTO cp_node VALUES ('7797', 'file', '100'); -INSERT INTO cp_node VALUES ('7798', 'file', '100'); -INSERT INTO cp_node VALUES ('7799', 'file', '100'); -INSERT INTO cp_node VALUES ('7800', 'file', '100'); -INSERT INTO cp_node VALUES ('7801', 'file', '100'); -INSERT INTO cp_node VALUES ('7802', 'file', '100'); -INSERT INTO cp_node VALUES ('7803', 'file', '100'); -INSERT INTO cp_node VALUES ('7804', 'file', '100'); -INSERT INTO cp_node VALUES ('7805', 'file', '100'); -INSERT INTO cp_node VALUES ('7806', 'file', '100'); -INSERT INTO cp_node VALUES ('7807', 'file', '100'); -INSERT INTO cp_node VALUES ('7808', 'file', '100'); -INSERT INTO cp_node VALUES ('7809', 'file', '100'); -INSERT INTO cp_node VALUES ('7810', 'file', '100'); -INSERT INTO cp_node VALUES ('7811', 'file', '100'); -INSERT INTO cp_node VALUES ('7812', 'file', '100'); -INSERT INTO cp_node VALUES ('7813', 'file', '100'); -INSERT INTO cp_node VALUES ('7814', 'file', '100'); -INSERT INTO cp_node VALUES ('7815', 'file', '100'); -INSERT INTO cp_node VALUES ('7816', 'file', '100'); -INSERT INTO cp_node VALUES ('7817', 'file', '100'); -INSERT INTO cp_node VALUES ('7818', 'file', '100'); -INSERT INTO cp_node VALUES ('7819', 'file', '100'); -INSERT INTO cp_node VALUES ('7820', 'file', '100'); -INSERT INTO cp_node VALUES ('7821', 'file', '100'); -INSERT INTO cp_node VALUES ('7822', 'file', '100'); -INSERT INTO cp_node VALUES ('7823', 'file', '100'); -INSERT INTO cp_node VALUES ('7824', 'resource', '100'); -INSERT INTO cp_node VALUES ('7825', 'file', '100'); -INSERT INTO cp_node VALUES ('7826', 'file', '100'); -INSERT INTO cp_node VALUES ('7827', 'file', '100'); -INSERT INTO cp_node VALUES ('7828', 'resource', '100'); -INSERT INTO cp_node VALUES ('7829', 'file', '100'); -INSERT INTO cp_node VALUES ('7830', 'file', '100'); -INSERT INTO cp_node VALUES ('7831', 'file', '100'); -INSERT INTO cp_node VALUES ('7832', 'file', '100'); -INSERT INTO cp_node VALUES ('7833', 'file', '100'); -INSERT INTO cp_node VALUES ('7834', 'file', '100'); -INSERT INTO cp_node VALUES ('7835', 'resource', '100'); -INSERT INTO cp_node VALUES ('7836', 'file', '100'); -INSERT INTO cp_node VALUES ('7837', 'resource', '100'); -INSERT INTO cp_node VALUES ('7838', 'file', '100'); -INSERT INTO cp_node VALUES ('7839', 'file', '100'); -INSERT INTO cp_node VALUES ('7840', 'file', '100'); -INSERT INTO cp_node VALUES ('7841', 'file', '100'); -INSERT INTO cp_node VALUES ('7842', 'file', '100'); -INSERT INTO cp_node VALUES ('7843', 'file', '100'); -INSERT INTO cp_node VALUES ('7844', 'file', '100'); -INSERT INTO cp_node VALUES ('7845', 'file', '100'); -INSERT INTO cp_node VALUES ('7846', 'file', '100'); -INSERT INTO cp_node VALUES ('7847', 'file', '100'); -INSERT INTO cp_node VALUES ('7848', 'file', '100'); -INSERT INTO cp_node VALUES ('7849', 'file', '100'); -INSERT INTO cp_node VALUES ('7850', 'file', '100'); -INSERT INTO cp_node VALUES ('7851', 'file', '100'); -INSERT INTO cp_node VALUES ('7852', 'file', '100'); -INSERT INTO cp_node VALUES ('7853', 'file', '100'); -INSERT INTO cp_node VALUES ('7854', 'file', '100'); -INSERT INTO cp_node VALUES ('7855', 'file', '100'); -INSERT INTO cp_node VALUES ('7856', 'file', '100'); -INSERT INTO cp_node VALUES ('7857', 'file', '100'); -INSERT INTO cp_node VALUES ('7858', 'file', '100'); -INSERT INTO cp_node VALUES ('7859', 'file', '100'); -INSERT INTO cp_node VALUES ('7860', 'file', '100'); -INSERT INTO cp_node VALUES ('7861', 'file', '100'); -INSERT INTO cp_node VALUES ('7862', 'file', '100'); -INSERT INTO cp_node VALUES ('7863', 'file', '100'); -INSERT INTO cp_node VALUES ('7864', 'file', '100'); -INSERT INTO cp_node VALUES ('7865', 'file', '100'); -INSERT INTO cp_node VALUES ('7866', 'file', '100'); -INSERT INTO cp_node VALUES ('7867', 'file', '100'); -INSERT INTO cp_node VALUES ('7868', 'file', '100'); -INSERT INTO cp_node VALUES ('7869', 'file', '100'); -INSERT INTO cp_node VALUES ('7870', 'file', '100'); -INSERT INTO cp_node VALUES ('7871', 'file', '100'); -INSERT INTO cp_node VALUES ('7872', 'file', '100'); -INSERT INTO cp_node VALUES ('7873', 'file', '100'); -INSERT INTO cp_node VALUES ('7874', 'file', '100'); -INSERT INTO cp_node VALUES ('7875', 'file', '100'); -INSERT INTO cp_node VALUES ('7876', 'file', '100'); -INSERT INTO cp_node VALUES ('7877', 'file', '100'); -INSERT INTO cp_node VALUES ('7878', 'file', '100'); -INSERT INTO cp_node VALUES ('7879', 'file', '100'); -INSERT INTO cp_node VALUES ('7880', 'file', '100'); -INSERT INTO cp_node VALUES ('7881', 'file', '100'); -INSERT INTO cp_node VALUES ('7882', 'file', '100'); -INSERT INTO cp_node VALUES ('7883', 'file', '100'); -INSERT INTO cp_node VALUES ('7884', 'file', '100'); -INSERT INTO cp_node VALUES ('7885', 'file', '100'); -INSERT INTO cp_node VALUES ('7886', 'file', '100'); -INSERT INTO cp_node VALUES ('7887', 'file', '100'); -INSERT INTO cp_node VALUES ('7888', 'file', '100'); -INSERT INTO cp_node VALUES ('7889', 'file', '100'); -INSERT INTO cp_node VALUES ('7890', 'file', '100'); -INSERT INTO cp_node VALUES ('7891', 'file', '100'); -INSERT INTO cp_node VALUES ('7892', 'file', '100'); -INSERT INTO cp_node VALUES ('7893', 'file', '100'); -INSERT INTO cp_node VALUES ('7894', 'file', '100'); -INSERT INTO cp_node VALUES ('7895', 'file', '100'); -INSERT INTO cp_node VALUES ('7896', 'file', '100'); -INSERT INTO cp_node VALUES ('7897', 'file', '100'); -INSERT INTO cp_node VALUES ('7898', 'file', '100'); -INSERT INTO cp_node VALUES ('7899', 'file', '100'); -INSERT INTO cp_node VALUES ('7900', 'file', '100'); -INSERT INTO cp_node VALUES ('7901', 'file', '100'); -INSERT INTO cp_node VALUES ('7902', 'file', '100'); -INSERT INTO cp_node VALUES ('7903', 'file', '100'); -INSERT INTO cp_node VALUES ('7904', 'file', '100'); -INSERT INTO cp_node VALUES ('7905', 'file', '100'); -INSERT INTO cp_node VALUES ('7906', 'resource', '100'); -INSERT INTO cp_node VALUES ('7907', 'file', '100'); -INSERT INTO cp_node VALUES ('7908', 'file', '100'); -INSERT INTO cp_node VALUES ('7909', 'file', '100'); -INSERT INTO cp_node VALUES ('7910', 'resource', '100'); -INSERT INTO cp_node VALUES ('7911', 'file', '100'); -INSERT INTO cp_node VALUES ('7912', 'file', '100'); -INSERT INTO cp_node VALUES ('7913', 'file', '100'); -INSERT INTO cp_node VALUES ('7914', 'file', '100'); -INSERT INTO cp_node VALUES ('7915', 'file', '100'); -INSERT INTO cp_node VALUES ('7916', 'file', '100'); -INSERT INTO cp_node VALUES ('7917', 'resource', '100'); -INSERT INTO cp_node VALUES ('7918', 'file', '100'); -INSERT INTO cp_node VALUES ('7919', 'resource', '100'); -INSERT INTO cp_node VALUES ('7920', 'file', '100'); -INSERT INTO cp_node VALUES ('7921', 'file', '100'); -INSERT INTO cp_node VALUES ('7922', 'file', '100'); -INSERT INTO cp_node VALUES ('7923', 'file', '100'); -INSERT INTO cp_node VALUES ('7924', 'file', '100'); -INSERT INTO cp_node VALUES ('7925', 'file', '100'); -INSERT INTO cp_node VALUES ('7926', 'file', '100'); -INSERT INTO cp_node VALUES ('7927', 'file', '100'); -INSERT INTO cp_node VALUES ('7928', 'file', '100'); -INSERT INTO cp_node VALUES ('7929', 'file', '100'); -INSERT INTO cp_node VALUES ('7930', 'file', '100'); -INSERT INTO cp_node VALUES ('7931', 'file', '100'); -INSERT INTO cp_node VALUES ('7932', 'file', '100'); -INSERT INTO cp_node VALUES ('7933', 'file', '100'); -INSERT INTO cp_node VALUES ('7934', 'file', '100'); -INSERT INTO cp_node VALUES ('7935', 'file', '100'); -INSERT INTO cp_node VALUES ('7936', 'file', '100'); -INSERT INTO cp_node VALUES ('7937', 'file', '100'); -INSERT INTO cp_node VALUES ('7938', 'file', '100'); -INSERT INTO cp_node VALUES ('7939', 'file', '100'); -INSERT INTO cp_node VALUES ('7940', 'file', '100'); -INSERT INTO cp_node VALUES ('7941', 'file', '100'); -INSERT INTO cp_node VALUES ('7942', 'file', '100'); -INSERT INTO cp_node VALUES ('7943', 'file', '100'); -INSERT INTO cp_node VALUES ('7944', 'file', '100'); -INSERT INTO cp_node VALUES ('7945', 'file', '100'); -INSERT INTO cp_node VALUES ('7946', 'file', '100'); -INSERT INTO cp_node VALUES ('7947', 'file', '100'); -INSERT INTO cp_node VALUES ('7948', 'file', '100'); -INSERT INTO cp_node VALUES ('7949', 'file', '100'); -INSERT INTO cp_node VALUES ('7950', 'file', '100'); -INSERT INTO cp_node VALUES ('7951', 'file', '100'); -INSERT INTO cp_node VALUES ('7952', 'file', '100'); -INSERT INTO cp_node VALUES ('7953', 'file', '100'); -INSERT INTO cp_node VALUES ('7954', 'file', '100'); -INSERT INTO cp_node VALUES ('7955', 'file', '100'); -INSERT INTO cp_node VALUES ('7956', 'file', '100'); -INSERT INTO cp_node VALUES ('7957', 'file', '100'); -INSERT INTO cp_node VALUES ('7958', 'file', '100'); -INSERT INTO cp_node VALUES ('7959', 'file', '100'); -INSERT INTO cp_node VALUES ('7960', 'file', '100'); -INSERT INTO cp_node VALUES ('7961', 'file', '100'); -INSERT INTO cp_node VALUES ('7962', 'file', '100'); -INSERT INTO cp_node VALUES ('7963', 'file', '100'); -INSERT INTO cp_node VALUES ('7964', 'file', '100'); -INSERT INTO cp_node VALUES ('7965', 'file', '100'); -INSERT INTO cp_node VALUES ('7966', 'file', '100'); -INSERT INTO cp_node VALUES ('7967', 'file', '100'); -INSERT INTO cp_node VALUES ('7968', 'file', '100'); -INSERT INTO cp_node VALUES ('7969', 'file', '100'); -INSERT INTO cp_node VALUES ('7970', 'file', '100'); -INSERT INTO cp_node VALUES ('7971', 'file', '100'); -INSERT INTO cp_node VALUES ('7972', 'file', '100'); -INSERT INTO cp_node VALUES ('7973', 'file', '100'); -INSERT INTO cp_node VALUES ('7974', 'file', '100'); -INSERT INTO cp_node VALUES ('7975', 'file', '100'); -INSERT INTO cp_node VALUES ('7976', 'file', '100'); -INSERT INTO cp_node VALUES ('7977', 'file', '100'); -INSERT INTO cp_node VALUES ('7978', 'file', '100'); -INSERT INTO cp_node VALUES ('7979', 'file', '100'); -INSERT INTO cp_node VALUES ('7980', 'file', '100'); -INSERT INTO cp_node VALUES ('7981', 'file', '100'); -INSERT INTO cp_node VALUES ('7982', 'file', '100'); -INSERT INTO cp_node VALUES ('7983', 'file', '100'); -INSERT INTO cp_node VALUES ('7984', 'file', '100'); -INSERT INTO cp_node VALUES ('7985', 'file', '100'); -INSERT INTO cp_node VALUES ('7986', 'file', '100'); -INSERT INTO cp_node VALUES ('7987', 'file', '100'); -INSERT INTO cp_node VALUES ('7988', 'resource', '100'); -INSERT INTO cp_node VALUES ('7989', 'file', '100'); -INSERT INTO cp_node VALUES ('7990', 'file', '100'); -INSERT INTO cp_node VALUES ('7991', 'file', '100'); -INSERT INTO cp_node VALUES ('7992', 'resource', '100'); -INSERT INTO cp_node VALUES ('7993', 'file', '100'); -INSERT INTO cp_node VALUES ('7994', 'file', '100'); -INSERT INTO cp_node VALUES ('7995', 'file', '100'); -INSERT INTO cp_node VALUES ('7996', 'file', '100'); -INSERT INTO cp_node VALUES ('7997', 'resource', '100'); -INSERT INTO cp_node VALUES ('7998', 'file', '100'); -INSERT INTO cp_node VALUES ('7999', 'resource', '100'); -INSERT INTO cp_node VALUES ('8000', 'file', '100'); -INSERT INTO cp_node VALUES ('8001', 'file', '100'); -INSERT INTO cp_node VALUES ('8002', 'file', '100'); -INSERT INTO cp_node VALUES ('8003', 'file', '100'); -INSERT INTO cp_node VALUES ('8004', 'file', '100'); -INSERT INTO cp_node VALUES ('8005', 'file', '100'); -INSERT INTO cp_node VALUES ('8006', 'file', '100'); -INSERT INTO cp_node VALUES ('8007', 'file', '100'); -INSERT INTO cp_node VALUES ('8008', 'file', '100'); -INSERT INTO cp_node VALUES ('8009', 'file', '100'); -INSERT INTO cp_node VALUES ('8010', 'file', '100'); -INSERT INTO cp_node VALUES ('8011', 'file', '100'); -INSERT INTO cp_node VALUES ('8012', 'file', '100'); -INSERT INTO cp_node VALUES ('8013', 'file', '100'); -INSERT INTO cp_node VALUES ('8014', 'file', '100'); -INSERT INTO cp_node VALUES ('8015', 'file', '100'); -INSERT INTO cp_node VALUES ('8016', 'file', '100'); -INSERT INTO cp_node VALUES ('8017', 'file', '100'); -INSERT INTO cp_node VALUES ('8018', 'file', '100'); -INSERT INTO cp_node VALUES ('8019', 'file', '100'); -INSERT INTO cp_node VALUES ('8020', 'file', '100'); -INSERT INTO cp_node VALUES ('8021', 'file', '100'); -INSERT INTO cp_node VALUES ('8022', 'file', '100'); -INSERT INTO cp_node VALUES ('8023', 'file', '100'); -INSERT INTO cp_node VALUES ('8024', 'file', '100'); -INSERT INTO cp_node VALUES ('8025', 'file', '100'); -INSERT INTO cp_node VALUES ('8026', 'file', '100'); -INSERT INTO cp_node VALUES ('8027', 'file', '100'); -INSERT INTO cp_node VALUES ('8028', 'file', '100'); -INSERT INTO cp_node VALUES ('8029', 'file', '100'); -INSERT INTO cp_node VALUES ('8030', 'file', '100'); -INSERT INTO cp_node VALUES ('8031', 'file', '100'); -INSERT INTO cp_node VALUES ('8032', 'file', '100'); -INSERT INTO cp_node VALUES ('8033', 'file', '100'); -INSERT INTO cp_node VALUES ('8034', 'file', '100'); -INSERT INTO cp_node VALUES ('8035', 'file', '100'); -INSERT INTO cp_node VALUES ('8036', 'file', '100'); -INSERT INTO cp_node VALUES ('8037', 'file', '100'); -INSERT INTO cp_node VALUES ('8038', 'file', '100'); -INSERT INTO cp_node VALUES ('8039', 'file', '100'); -INSERT INTO cp_node VALUES ('8040', 'file', '100'); -INSERT INTO cp_node VALUES ('8041', 'file', '100'); -INSERT INTO cp_node VALUES ('8042', 'file', '100'); -INSERT INTO cp_node VALUES ('8043', 'file', '100'); -INSERT INTO cp_node VALUES ('8044', 'file', '100'); -INSERT INTO cp_node VALUES ('8045', 'file', '100'); -INSERT INTO cp_node VALUES ('8046', 'file', '100'); -INSERT INTO cp_node VALUES ('8047', 'file', '100'); -INSERT INTO cp_node VALUES ('8048', 'file', '100'); -INSERT INTO cp_node VALUES ('8049', 'file', '100'); -INSERT INTO cp_node VALUES ('8050', 'file', '100'); -INSERT INTO cp_node VALUES ('8051', 'file', '100'); -INSERT INTO cp_node VALUES ('8052', 'file', '100'); -INSERT INTO cp_node VALUES ('8053', 'file', '100'); -INSERT INTO cp_node VALUES ('8054', 'file', '100'); -INSERT INTO cp_node VALUES ('8055', 'file', '100'); -INSERT INTO cp_node VALUES ('8056', 'file', '100'); -INSERT INTO cp_node VALUES ('8057', 'file', '100'); -INSERT INTO cp_node VALUES ('8058', 'file', '100'); -INSERT INTO cp_node VALUES ('8059', 'file', '100'); -INSERT INTO cp_node VALUES ('8060', 'file', '100'); -INSERT INTO cp_node VALUES ('8061', 'file', '100'); -INSERT INTO cp_node VALUES ('8062', 'file', '100'); -INSERT INTO cp_node VALUES ('8063', 'file', '100'); -INSERT INTO cp_node VALUES ('8064', 'file', '100'); -INSERT INTO cp_node VALUES ('8065', 'file', '100'); -INSERT INTO cp_node VALUES ('8066', 'file', '100'); -INSERT INTO cp_node VALUES ('8067', 'file', '100'); -INSERT INTO cp_node VALUES ('8068', 'resource', '100'); -INSERT INTO cp_node VALUES ('8069', 'file', '100'); -INSERT INTO cp_node VALUES ('8070', 'file', '100'); -INSERT INTO cp_node VALUES ('8071', 'file', '100'); -INSERT INTO cp_node VALUES ('8072', 'resource', '100'); -INSERT INTO cp_node VALUES ('8073', 'file', '100'); -INSERT INTO cp_node VALUES ('8074', 'file', '100'); -INSERT INTO cp_node VALUES ('8075', 'file', '100'); -INSERT INTO cp_node VALUES ('8076', 'file', '100'); -INSERT INTO cp_node VALUES ('8077', 'file', '100'); -INSERT INTO cp_node VALUES ('8078', 'file', '100'); -INSERT INTO cp_node VALUES ('8079', 'file', '100'); -INSERT INTO cp_node VALUES ('8080', 'file', '100'); -INSERT INTO cp_node VALUES ('8081', 'file', '100'); -INSERT INTO cp_node VALUES ('8082', 'file', '100'); -INSERT INTO cp_node VALUES ('8083', 'file', '100'); -INSERT INTO cp_node VALUES ('8084', 'resource', '100'); -INSERT INTO cp_node VALUES ('8085', 'file', '100'); -INSERT INTO cp_node VALUES ('8086', 'resource', '100'); -INSERT INTO cp_node VALUES ('8087', 'file', '100'); -INSERT INTO cp_node VALUES ('8088', 'file', '100'); -INSERT INTO cp_node VALUES ('8089', 'file', '100'); -INSERT INTO cp_node VALUES ('8090', 'file', '100'); -INSERT INTO cp_node VALUES ('8091', 'file', '100'); -INSERT INTO cp_node VALUES ('8092', 'file', '100'); -INSERT INTO cp_node VALUES ('8093', 'file', '100'); -INSERT INTO cp_node VALUES ('8094', 'file', '100'); -INSERT INTO cp_node VALUES ('8095', 'file', '100'); -INSERT INTO cp_node VALUES ('8096', 'file', '100'); -INSERT INTO cp_node VALUES ('8097', 'file', '100'); -INSERT INTO cp_node VALUES ('8098', 'file', '100'); -INSERT INTO cp_node VALUES ('8099', 'file', '100'); -INSERT INTO cp_node VALUES ('8100', 'file', '100'); -INSERT INTO cp_node VALUES ('8101', 'file', '100'); -INSERT INTO cp_node VALUES ('8102', 'file', '100'); -INSERT INTO cp_node VALUES ('8103', 'file', '100'); -INSERT INTO cp_node VALUES ('8104', 'file', '100'); -INSERT INTO cp_node VALUES ('8105', 'file', '100'); -INSERT INTO cp_node VALUES ('8106', 'file', '100'); -INSERT INTO cp_node VALUES ('8107', 'file', '100'); -INSERT INTO cp_node VALUES ('8108', 'file', '100'); -INSERT INTO cp_node VALUES ('8109', 'file', '100'); -INSERT INTO cp_node VALUES ('8110', 'file', '100'); -INSERT INTO cp_node VALUES ('8111', 'file', '100'); -INSERT INTO cp_node VALUES ('8112', 'file', '100'); -INSERT INTO cp_node VALUES ('8113', 'file', '100'); -INSERT INTO cp_node VALUES ('8114', 'file', '100'); -INSERT INTO cp_node VALUES ('8115', 'file', '100'); -INSERT INTO cp_node VALUES ('8116', 'file', '100'); -INSERT INTO cp_node VALUES ('8117', 'file', '100'); -INSERT INTO cp_node VALUES ('8118', 'file', '100'); -INSERT INTO cp_node VALUES ('8119', 'file', '100'); -INSERT INTO cp_node VALUES ('8120', 'file', '100'); -INSERT INTO cp_node VALUES ('8121', 'file', '100'); -INSERT INTO cp_node VALUES ('8122', 'file', '100'); -INSERT INTO cp_node VALUES ('8123', 'file', '100'); -INSERT INTO cp_node VALUES ('8124', 'file', '100'); -INSERT INTO cp_node VALUES ('8125', 'file', '100'); -INSERT INTO cp_node VALUES ('8126', 'file', '100'); -INSERT INTO cp_node VALUES ('8127', 'file', '100'); -INSERT INTO cp_node VALUES ('8128', 'file', '100'); -INSERT INTO cp_node VALUES ('8129', 'file', '100'); -INSERT INTO cp_node VALUES ('8130', 'file', '100'); -INSERT INTO cp_node VALUES ('8131', 'file', '100'); -INSERT INTO cp_node VALUES ('8132', 'file', '100'); -INSERT INTO cp_node VALUES ('8133', 'file', '100'); -INSERT INTO cp_node VALUES ('8134', 'file', '100'); -INSERT INTO cp_node VALUES ('8135', 'file', '100'); -INSERT INTO cp_node VALUES ('8136', 'file', '100'); -INSERT INTO cp_node VALUES ('8137', 'file', '100'); -INSERT INTO cp_node VALUES ('8138', 'file', '100'); -INSERT INTO cp_node VALUES ('8139', 'file', '100'); -INSERT INTO cp_node VALUES ('8140', 'file', '100'); -INSERT INTO cp_node VALUES ('8141', 'file', '100'); -INSERT INTO cp_node VALUES ('8142', 'file', '100'); -INSERT INTO cp_node VALUES ('8143', 'file', '100'); -INSERT INTO cp_node VALUES ('8144', 'file', '100'); -INSERT INTO cp_node VALUES ('8145', 'file', '100'); -INSERT INTO cp_node VALUES ('8146', 'file', '100'); -INSERT INTO cp_node VALUES ('8147', 'file', '100'); -INSERT INTO cp_node VALUES ('8148', 'file', '100'); -INSERT INTO cp_node VALUES ('8149', 'file', '100'); -INSERT INTO cp_node VALUES ('8150', 'file', '100'); -INSERT INTO cp_node VALUES ('8151', 'file', '100'); -INSERT INTO cp_node VALUES ('8152', 'file', '100'); -INSERT INTO cp_node VALUES ('8153', 'file', '100'); -INSERT INTO cp_node VALUES ('8154', 'file', '100'); -INSERT INTO cp_node VALUES ('8155', 'resource', '100'); -INSERT INTO cp_node VALUES ('8156', 'file', '100'); -INSERT INTO cp_node VALUES ('8157', 'file', '100'); -INSERT INTO cp_node VALUES ('8158', 'file', '100'); -INSERT INTO cp_node VALUES ('8159', 'resource', '100'); -INSERT INTO cp_node VALUES ('8160', 'file', '100'); -INSERT INTO cp_node VALUES ('8161', 'file', '100'); -INSERT INTO cp_node VALUES ('8162', 'file', '100'); -INSERT INTO cp_node VALUES ('8163', 'file', '100'); -INSERT INTO cp_node VALUES ('8164', 'file', '100'); -INSERT INTO cp_node VALUES ('8165', 'file', '100'); -INSERT INTO cp_node VALUES ('8166', 'file', '100'); -INSERT INTO cp_node VALUES ('8167', 'file', '100'); -INSERT INTO cp_node VALUES ('8168', 'resource', '100'); -INSERT INTO cp_node VALUES ('8169', 'file', '100'); -INSERT INTO cp_node VALUES ('8170', 'resource', '100'); -INSERT INTO cp_node VALUES ('8171', 'file', '100'); -INSERT INTO cp_node VALUES ('8172', 'file', '100'); -INSERT INTO cp_node VALUES ('8173', 'file', '100'); -INSERT INTO cp_node VALUES ('8174', 'file', '100'); -INSERT INTO cp_node VALUES ('8175', 'file', '100'); -INSERT INTO cp_node VALUES ('8176', 'file', '100'); -INSERT INTO cp_node VALUES ('8177', 'file', '100'); -INSERT INTO cp_node VALUES ('8178', 'file', '100'); -INSERT INTO cp_node VALUES ('8179', 'file', '100'); -INSERT INTO cp_node VALUES ('8180', 'file', '100'); -INSERT INTO cp_node VALUES ('8181', 'file', '100'); -INSERT INTO cp_node VALUES ('8182', 'file', '100'); -INSERT INTO cp_node VALUES ('8183', 'file', '100'); -INSERT INTO cp_node VALUES ('8184', 'file', '100'); -INSERT INTO cp_node VALUES ('8185', 'file', '100'); -INSERT INTO cp_node VALUES ('8186', 'file', '100'); -INSERT INTO cp_node VALUES ('8187', 'file', '100'); -INSERT INTO cp_node VALUES ('8188', 'file', '100'); -INSERT INTO cp_node VALUES ('8189', 'file', '100'); -INSERT INTO cp_node VALUES ('8190', 'file', '100'); -INSERT INTO cp_node VALUES ('8191', 'file', '100'); -INSERT INTO cp_node VALUES ('8192', 'file', '100'); -INSERT INTO cp_node VALUES ('8193', 'file', '100'); -INSERT INTO cp_node VALUES ('8194', 'file', '100'); -INSERT INTO cp_node VALUES ('8195', 'file', '100'); -INSERT INTO cp_node VALUES ('8196', 'file', '100'); -INSERT INTO cp_node VALUES ('8197', 'file', '100'); -INSERT INTO cp_node VALUES ('8198', 'file', '100'); -INSERT INTO cp_node VALUES ('8199', 'file', '100'); -INSERT INTO cp_node VALUES ('8200', 'file', '100'); -INSERT INTO cp_node VALUES ('8201', 'file', '100'); -INSERT INTO cp_node VALUES ('8202', 'file', '100'); -INSERT INTO cp_node VALUES ('8203', 'file', '100'); -INSERT INTO cp_node VALUES ('8204', 'file', '100'); -INSERT INTO cp_node VALUES ('8205', 'file', '100'); -INSERT INTO cp_node VALUES ('8206', 'file', '100'); -INSERT INTO cp_node VALUES ('8207', 'file', '100'); -INSERT INTO cp_node VALUES ('8208', 'file', '100'); -INSERT INTO cp_node VALUES ('8209', 'file', '100'); -INSERT INTO cp_node VALUES ('8210', 'file', '100'); -INSERT INTO cp_node VALUES ('8211', 'file', '100'); -INSERT INTO cp_node VALUES ('8212', 'file', '100'); -INSERT INTO cp_node VALUES ('8213', 'file', '100'); -INSERT INTO cp_node VALUES ('8214', 'file', '100'); -INSERT INTO cp_node VALUES ('8215', 'file', '100'); -INSERT INTO cp_node VALUES ('8216', 'file', '100'); -INSERT INTO cp_node VALUES ('8217', 'file', '100'); -INSERT INTO cp_node VALUES ('8218', 'file', '100'); -INSERT INTO cp_node VALUES ('8219', 'file', '100'); -INSERT INTO cp_node VALUES ('8220', 'file', '100'); -INSERT INTO cp_node VALUES ('8221', 'file', '100'); -INSERT INTO cp_node VALUES ('8222', 'file', '100'); -INSERT INTO cp_node VALUES ('8223', 'file', '100'); -INSERT INTO cp_node VALUES ('8224', 'file', '100'); -INSERT INTO cp_node VALUES ('8225', 'file', '100'); -INSERT INTO cp_node VALUES ('8226', 'file', '100'); -INSERT INTO cp_node VALUES ('8227', 'file', '100'); -INSERT INTO cp_node VALUES ('8228', 'file', '100'); -INSERT INTO cp_node VALUES ('8229', 'file', '100'); -INSERT INTO cp_node VALUES ('8230', 'file', '100'); -INSERT INTO cp_node VALUES ('8231', 'file', '100'); -INSERT INTO cp_node VALUES ('8232', 'file', '100'); -INSERT INTO cp_node VALUES ('8233', 'file', '100'); -INSERT INTO cp_node VALUES ('8234', 'file', '100'); -INSERT INTO cp_node VALUES ('8235', 'file', '100'); -INSERT INTO cp_node VALUES ('8236', 'file', '100'); -INSERT INTO cp_node VALUES ('8237', 'file', '100'); -INSERT INTO cp_node VALUES ('8238', 'file', '100'); -INSERT INTO cp_node VALUES ('8239', 'resource', '100'); -INSERT INTO cp_node VALUES ('8240', 'file', '100'); -INSERT INTO cp_node VALUES ('8241', 'file', '100'); -INSERT INTO cp_node VALUES ('8242', 'file', '100'); -INSERT INTO cp_node VALUES ('8243', 'resource', '100'); -INSERT INTO cp_node VALUES ('8244', 'file', '100'); -INSERT INTO cp_node VALUES ('8245', 'file', '100'); -INSERT INTO cp_node VALUES ('8246', 'file', '100'); -INSERT INTO cp_node VALUES ('8247', 'file', '100'); -INSERT INTO cp_node VALUES ('8248', 'resource', '100'); -INSERT INTO cp_node VALUES ('8249', 'file', '100'); -INSERT INTO cp_node VALUES ('8250', 'resource', '100'); -INSERT INTO cp_node VALUES ('8251', 'file', '100'); -INSERT INTO cp_node VALUES ('8252', 'file', '100'); -INSERT INTO cp_node VALUES ('8253', 'file', '100'); -INSERT INTO cp_node VALUES ('8254', 'file', '100'); -INSERT INTO cp_node VALUES ('8255', 'file', '100'); -INSERT INTO cp_node VALUES ('8256', 'file', '100'); -INSERT INTO cp_node VALUES ('8257', 'file', '100'); -INSERT INTO cp_node VALUES ('8258', 'file', '100'); -INSERT INTO cp_node VALUES ('8259', 'file', '100'); -INSERT INTO cp_node VALUES ('8260', 'file', '100'); -INSERT INTO cp_node VALUES ('8261', 'file', '100'); -INSERT INTO cp_node VALUES ('8262', 'file', '100'); -INSERT INTO cp_node VALUES ('8263', 'file', '100'); -INSERT INTO cp_node VALUES ('8264', 'file', '100'); -INSERT INTO cp_node VALUES ('8265', 'file', '100'); -INSERT INTO cp_node VALUES ('8266', 'file', '100'); -INSERT INTO cp_node VALUES ('8267', 'file', '100'); -INSERT INTO cp_node VALUES ('8268', 'file', '100'); -INSERT INTO cp_node VALUES ('8269', 'file', '100'); -INSERT INTO cp_node VALUES ('8270', 'file', '100'); -INSERT INTO cp_node VALUES ('8271', 'file', '100'); -INSERT INTO cp_node VALUES ('8272', 'file', '100'); -INSERT INTO cp_node VALUES ('8273', 'file', '100'); -INSERT INTO cp_node VALUES ('8274', 'file', '100'); -INSERT INTO cp_node VALUES ('8275', 'file', '100'); -INSERT INTO cp_node VALUES ('8276', 'file', '100'); -INSERT INTO cp_node VALUES ('8277', 'file', '100'); -INSERT INTO cp_node VALUES ('8278', 'file', '100'); -INSERT INTO cp_node VALUES ('8279', 'file', '100'); -INSERT INTO cp_node VALUES ('8280', 'file', '100'); -INSERT INTO cp_node VALUES ('8281', 'file', '100'); -INSERT INTO cp_node VALUES ('8282', 'file', '100'); -INSERT INTO cp_node VALUES ('8283', 'file', '100'); -INSERT INTO cp_node VALUES ('8284', 'file', '100'); -INSERT INTO cp_node VALUES ('8285', 'file', '100'); -INSERT INTO cp_node VALUES ('8286', 'file', '100'); -INSERT INTO cp_node VALUES ('8287', 'file', '100'); -INSERT INTO cp_node VALUES ('8288', 'file', '100'); -INSERT INTO cp_node VALUES ('8289', 'file', '100'); -INSERT INTO cp_node VALUES ('8290', 'file', '100'); -INSERT INTO cp_node VALUES ('8291', 'file', '100'); -INSERT INTO cp_node VALUES ('8292', 'file', '100'); -INSERT INTO cp_node VALUES ('8293', 'file', '100'); -INSERT INTO cp_node VALUES ('8294', 'file', '100'); -INSERT INTO cp_node VALUES ('8295', 'file', '100'); -INSERT INTO cp_node VALUES ('8296', 'file', '100'); -INSERT INTO cp_node VALUES ('8297', 'file', '100'); -INSERT INTO cp_node VALUES ('8298', 'file', '100'); -INSERT INTO cp_node VALUES ('8299', 'file', '100'); -INSERT INTO cp_node VALUES ('8300', 'file', '100'); -INSERT INTO cp_node VALUES ('8301', 'file', '100'); -INSERT INTO cp_node VALUES ('8302', 'file', '100'); -INSERT INTO cp_node VALUES ('8303', 'file', '100'); -INSERT INTO cp_node VALUES ('8304', 'file', '100'); -INSERT INTO cp_node VALUES ('8305', 'file', '100'); -INSERT INTO cp_node VALUES ('8306', 'file', '100'); -INSERT INTO cp_node VALUES ('8307', 'file', '100'); -INSERT INTO cp_node VALUES ('8308', 'file', '100'); -INSERT INTO cp_node VALUES ('8309', 'file', '100'); -INSERT INTO cp_node VALUES ('8310', 'file', '100'); -INSERT INTO cp_node VALUES ('8311', 'file', '100'); -INSERT INTO cp_node VALUES ('8312', 'file', '100'); -INSERT INTO cp_node VALUES ('8313', 'file', '100'); -INSERT INTO cp_node VALUES ('8314', 'file', '100'); -INSERT INTO cp_node VALUES ('8315', 'file', '100'); -INSERT INTO cp_node VALUES ('8316', 'file', '100'); -INSERT INTO cp_node VALUES ('8317', 'file', '100'); -INSERT INTO cp_node VALUES ('8318', 'file', '100'); -INSERT INTO cp_node VALUES ('8319', 'resource', '100'); -INSERT INTO cp_node VALUES ('8320', 'file', '100'); -INSERT INTO cp_node VALUES ('8321', 'file', '100'); -INSERT INTO cp_node VALUES ('8322', 'file', '100'); -INSERT INTO cp_node VALUES ('8323', 'file', '100'); -INSERT INTO cp_node VALUES ('8324', 'file', '100'); -INSERT INTO cp_node VALUES ('8325', 'file', '100'); -INSERT INTO cp_node VALUES ('8326', 'file', '100'); -INSERT INTO cp_node VALUES ('8327', 'file', '100'); -INSERT INTO cp_node VALUES ('8328', 'file', '100'); -INSERT INTO cp_node VALUES ('8329', 'file', '100'); -INSERT INTO cp_node VALUES ('8330', 'file', '100'); -INSERT INTO cp_node VALUES ('8331', 'file', '100'); -INSERT INTO cp_node VALUES ('8332', 'file', '100'); -INSERT INTO cp_node VALUES ('8333', 'file', '100'); -INSERT INTO cp_node VALUES ('8334', 'file', '100'); -INSERT INTO cp_node VALUES ('8335', 'file', '100'); -INSERT INTO cp_node VALUES ('8336', 'file', '100'); -INSERT INTO cp_node VALUES ('8337', 'manifest', '100'); -INSERT INTO cp_node VALUES ('8338', 'organization', '100'); -INSERT INTO cp_node VALUES ('8339', 'item', '100'); -INSERT INTO cp_node VALUES ('8340', 'item', '100'); -INSERT INTO cp_node VALUES ('8341', 'item', '100'); -INSERT INTO cp_node VALUES ('8342', 'item', '100'); -INSERT INTO cp_node VALUES ('8343', 'item', '100'); -INSERT INTO cp_node VALUES ('8344', 'item', '100'); -INSERT INTO cp_node VALUES ('8345', 'item', '100'); -INSERT INTO cp_node VALUES ('8346', 'item', '100'); -INSERT INTO cp_node VALUES ('8347', 'item', '100'); -INSERT INTO cp_node VALUES ('8348', 'item', '100'); -INSERT INTO cp_node VALUES ('8349', 'item', '100'); -INSERT INTO cp_node VALUES ('8350', 'resource', '100'); -INSERT INTO cp_node VALUES ('8351', 'resource', '100'); -INSERT INTO cp_node VALUES ('8352', 'manifest', '100'); -INSERT INTO cp_node VALUES ('8353', 'organization', '100'); -INSERT INTO cp_node VALUES ('8354', 'item', '100'); -INSERT INTO cp_node VALUES ('8355', 'item', '100'); -INSERT INTO cp_node VALUES ('8356', 'item', '100'); -INSERT INTO cp_node VALUES ('8357', 'item', '100'); -INSERT INTO cp_node VALUES ('8358', 'item', '100'); -INSERT INTO cp_node VALUES ('8359', 'item', '100'); -INSERT INTO cp_node VALUES ('8360', 'item', '100'); -INSERT INTO cp_node VALUES ('8361', 'item', '100'); -INSERT INTO cp_node VALUES ('8362', 'item', '100'); -INSERT INTO cp_node VALUES ('8363', 'item', '100'); -INSERT INTO cp_node VALUES ('8364', 'item', '100'); -INSERT INTO cp_node VALUES ('8365', 'resource', '100'); -INSERT INTO cp_node VALUES ('8366', 'resource', '100'); -INSERT INTO cp_node VALUES ('8367', 'manifest', '100'); -INSERT INTO cp_node VALUES ('8368', 'organization', '100'); -INSERT INTO cp_node VALUES ('8369', 'item', '100'); -INSERT INTO cp_node VALUES ('8370', 'item', '100'); -INSERT INTO cp_node VALUES ('8371', 'item', '100'); -INSERT INTO cp_node VALUES ('8372', 'item', '100'); -INSERT INTO cp_node VALUES ('8373', 'item', '100'); -INSERT INTO cp_node VALUES ('8374', 'item', '100'); -INSERT INTO cp_node VALUES ('8375', 'item', '100'); -INSERT INTO cp_node VALUES ('8376', 'item', '100'); -INSERT INTO cp_node VALUES ('8377', 'item', '100'); -INSERT INTO cp_node VALUES ('8378', 'item', '100'); -INSERT INTO cp_node VALUES ('8379', 'item', '100'); -INSERT INTO cp_node VALUES ('8380', 'resource', '100'); -INSERT INTO cp_node VALUES ('8381', 'resource', '100'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_objective -# -INSERT INTO cp_objective VALUES ('121', '0.8', '', 'true', 'true'); -INSERT INTO cp_objective VALUES ('123', '0.7', '', 'true', 'true'); -INSERT INTO cp_objective VALUES ('153', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('155', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('192', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('193', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('194', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('195', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('199', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('200', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('202', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('203', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('236', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('237', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('239', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('240', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('241', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('242', '', 'obj4', 'false', 'false'); -INSERT INTO cp_objective VALUES ('243', '', 'obj5', 'false', 'false'); -INSERT INTO cp_objective VALUES ('308', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('309', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('311', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('312', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('313', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('314', '', 'obj4', 'false', 'false'); -INSERT INTO cp_objective VALUES ('315', '', 'obj5', 'false', 'false'); -INSERT INTO cp_objective VALUES ('316', '', 'obj6', 'false', 'false'); -INSERT INTO cp_objective VALUES ('1091', '-0.5', 'SEQSUCCESSSTATUSOVERRIDE01', 'true', 'true'); -INSERT INTO cp_objective VALUES ('1093', '-0.5', 'SEQSUCCESSSTATUSUNKNOWN01', 'true', 'true'); -INSERT INTO cp_objective VALUES ('1095', '', 'SEQSCALEDPASSINGSCOREDEFAULT01', 'true', 'true'); -INSERT INTO cp_objective VALUES ('1097', '0.6', 'SCALEDPASSINGSCOREINIT', 'true', 'true'); -INSERT INTO cp_objective VALUES ('1099', '0.8', 'SEQSCALEDPASSINGSCORENOINIT01', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1101', '0.7', 'SEQSCALEDPASSINGSCORENOINIT02', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1369', '0.6', '', 'true', 'true'); -INSERT INTO cp_objective VALUES ('1420', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('1473', '0.6', '', 'true', 'true'); -INSERT INTO cp_objective VALUES ('1510', '', 'PRIMARYOBJ_1', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1515', '', 'PRIMARYOBJ_2', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1553', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1558', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1596', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1601', '0.5', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('1639', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1640', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('1645', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1646', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('1675', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1676', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('1681', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1682', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('1720', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1721', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('1724', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1725', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('1728', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1729', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('1787', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1792', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1797', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('1802', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1807', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1866', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1871', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1876', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('1881', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1887', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1889', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('1941', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1945', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1948', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1951', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('1954', '-0.75', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('2001', '', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('2006', '0.4', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('2011', '0.1', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2053', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2058', '0.75', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('2063', '0.1', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2101', '0.0', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('2106', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2153', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2162', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2200', '', 'obj1', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2206', '', 'obj1', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2209', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2210', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2248', '', 'obj1', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2253', '', 'obj1', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2256', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2257', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2299', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2306', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2314', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2321', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2363', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2370', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2378', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2385', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2425', '', 'obj1', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2430', '', 'obj2', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2433', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2434', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2436', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2480', '', 'obj1', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2485', '', 'obj2', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2488', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2489', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2491', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2524', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2529', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2532', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2570', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2575', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2578', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2616', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2618', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2622', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2625', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2663', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2665', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2666', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2667', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2671', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2674', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2712', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2713', '', 'obj', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2718', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2719', '', 'obj', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2722', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2723', '', 'obj', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2761', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2762', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2764', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2765', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2769', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2770', '', 'obj', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2773', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2774', '', 'obj', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2815', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2816', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2856', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2857', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2897', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2898', '0.9', 'obj1', 'false', 'true'); -INSERT INTO cp_objective VALUES ('2939', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2940', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2946', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2947', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2989', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2990', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('2996', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('2997', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3039', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('3040', '0.25', 'obj1', 'false', 'true'); -INSERT INTO cp_objective VALUES ('3046', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('3047', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3085', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('3086', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3088', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3090', '0.4', 'obj4', 'false', 'true'); -INSERT INTO cp_objective VALUES ('3092', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3095', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('3096', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3098', '0.3', 'gObj-OB14a-1', 'false', 'true'); -INSERT INTO cp_objective VALUES ('3100', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3102', '0.15', 'obj4', 'false', 'true'); -INSERT INTO cp_objective VALUES ('3104', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3107', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('3108', '0.6', 'obj4', 'false', 'true'); -INSERT INTO cp_objective VALUES ('3110', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3112', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3114', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3116', '0.01', 'gObj-OB14a-1', 'false', 'true'); -INSERT INTO cp_objective VALUES ('3158', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('3159', '', 'obj4', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3160', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3161', '', 'OBJ1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3162', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3163', '0.5', 'obj2', 'false', 'true'); -INSERT INTO cp_objective VALUES ('3165', '', 'obj', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3168', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('3170', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3171', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3172', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3173', '', 'obj5', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3175', '', 'obj4', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3177', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('3178', '', 'obj5', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3179', '', 'obj4', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3181', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3183', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3185', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3187', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('3188', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3191', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('3245', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('3248', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('3251', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('3263', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('4591', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('4772', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('4773', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4775', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4777', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4780', ' - 0.6 - ', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('4827', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('4925', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('4930', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('4935', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('4936', '', 'obj-SX05-3a', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4944', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('4945', '', 'obj-SX05-3a', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4947', '', 'obj-SX05-3b', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4953', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('4954', '', 'obj-SX05-4a', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4962', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('4963', '', 'obj-SX05-4a', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4965', '', 'obj-SX05-4b', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4971', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('4972', '', 'obj-SX05-5', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4974', '', 'obj-SX05-3a', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4976', '', 'obj-SX05-3b', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4978', '', 'obj-SX05-4a', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4980', '', 'obj-SX05-4b', 'false', 'false'); -INSERT INTO cp_objective VALUES ('4985', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('4986', '', 'obj-SX05-5', 'false', 'false'); -INSERT INTO cp_objective VALUES ('5207', '-0.50', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5269', '0.0', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5428', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5431', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('5434', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5437', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5440', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('5443', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5446', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5449', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('5452', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5460', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('5461', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('5463', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('5465', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('5641', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5644', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('5645', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('5647', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('5648', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('5649', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('5650', '', 'obj4', 'false', 'false'); -INSERT INTO cp_objective VALUES ('5651', '', 'obj5', 'false', 'false'); -INSERT INTO cp_objective VALUES ('5652', '', 'obj6', 'false', 'false'); -INSERT INTO cp_objective VALUES ('5654', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('5657', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5660', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5663', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('5666', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5669', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5672', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('5675', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('5683', '', 'PRIMARYOBJ', 'true', 'false'); -INSERT INTO cp_objective VALUES ('5684', '', 'obj1', 'false', 'false'); -INSERT INTO cp_objective VALUES ('5686', '', 'obj2', 'false', 'false'); -INSERT INTO cp_objective VALUES ('5688', '', 'obj3', 'false', 'false'); -INSERT INTO cp_objective VALUES ('6366', '0.6', '', 'true', 'true'); -INSERT INTO cp_objective VALUES ('6594', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('6822', '0.6', 'PRIMARYOBJ', 'true', 'true'); -INSERT INTO cp_objective VALUES ('6924', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('6925', '0', 'b75d9d2755344021b906853aea56f52f', 'false', 'false'); -INSERT INTO cp_objective VALUES ('6927', '0', '1d622cc0b1a547019354abfbef60c303', 'false', 'false'); -INSERT INTO cp_objective VALUES ('6929', '0', '201c0fcdbe99495ebabe81ec93e19736', 'false', 'false'); -INSERT INTO cp_objective VALUES ('7025', '', '', 'true', 'false'); -INSERT INTO cp_objective VALUES ('7026', '0', 'b75d9d2755344021b906853aea56f52f', 'false', 'false'); -INSERT INTO cp_objective VALUES ('7028', '0', '1d622cc0b1a547019354abfbef60c303', 'false', 'false'); -INSERT INTO cp_objective VALUES ('7030', '0', '201c0fcdbe99495ebabe81ec93e19736', 'false', 'false'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_organization -# -INSERT INTO cp_organization VALUES ('2', 'API', 'false', '', '', 'LMS Test Content Package API '); -INSERT INTO cp_organization VALUES ('44', 'API', 'false', '', '', 'LMS Test Content Package API '); -INSERT INTO cp_organization VALUES ('86', 'CM-01', 'false', 'id3022114', '', 'LMS Test Content Package CM-01 '); -INSERT INTO cp_organization VALUES ('126', 'CM-02a', 'false', 'id2681290', '', 'LMS Test Content Package CM-02a '); -INSERT INTO cp_organization VALUES ('158', 'CM-02b', 'false', 'id2689463', '', 'LMS Test Content Package CM-02b '); -INSERT INTO cp_organization VALUES ('206', 'CM-03a', 'false', 'id2818691', '', 'LMS Test Content Package CM-03a '); -INSERT INTO cp_organization VALUES ('260', 'CM-03b', 'false', 'id2683399', '', 'LMS Test Content Package CM-03b '); -INSERT INTO cp_organization VALUES ('333', 'CM-04a', 'false', '', '', 'LMS Test Content Package CM-04a '); -INSERT INTO cp_organization VALUES ('401', 'CM-04b', 'false', 'id2690686', '', 'LMS Test Content Package CM-04b '); -INSERT INTO cp_organization VALUES ('444', 'CM-04c', 'false', '', '', 'LMS Test Content Package CM-04c '); -INSERT INTO cp_organization VALUES ('516', 'CM-04d', 'false', '', '', 'LMS Test Content Package CM-04d '); -INSERT INTO cp_organization VALUES ('584', 'CM-05', 'false', 'id3042067', '', 'LMS Test Content Package CM-05'); -INSERT INTO cp_organization VALUES ('639', 'CM-06', 'false', 'id2827862', '', 'LMS Test Content Package CM-06'); -INSERT INTO cp_organization VALUES ('674', 'CM-07a', 'false', 'id2837362', '', 'LMS Test Content Package CM-07a '); -INSERT INTO cp_organization VALUES ('730', 'CM-07b', 'false', '', '', 'LMS Test Content Package CM-07b'); -INSERT INTO cp_organization VALUES ('798', 'CM-07c', 'false', 'id2621280', '', 'LMS Test Content Package CM-07c'); -INSERT INTO cp_organization VALUES ('855', 'CM-07d', 'false', 'id2675796', '', 'LMS Test Content Package CM-07d'); -INSERT INTO cp_organization VALUES ('903', 'CASETEST', 'false', 'id2619357', '', 'LMS Test Content Package CM-07e'); -INSERT INTO cp_organization VALUES ('936', 'CM-07f', 'false', 'id2680488', '', 'LMS Test Content Package CM-07f'); -INSERT INTO cp_organization VALUES ('966', 'CM-08', 'false', 'GeneralSequencing', '', 'LMS Test Content Package CM-08'); -INSERT INTO cp_organization VALUES ('995', 'DMB', 'false', '', '', 'LMS Test Content Package DMB '); -INSERT INTO cp_organization VALUES ('1103', 'DMI', 'false', '', '', 'LMS Test Content Package DMI '); -INSERT INTO cp_organization VALUES ('1154', 'MS-01', 'false', 'id2623293', '', 'LMS Test Content Package MS-01 '); -INSERT INTO cp_organization VALUES ('1202', 'MS-02', 'false', 'id2628852', '', 'LMS Test Content Package MS-02'); -INSERT INTO cp_organization VALUES ('1252', 'MS-03', 'false', 'id3106767', '', 'LMS Test Content Package MS-03 '); -INSERT INTO cp_organization VALUES ('1302', 'MS-04', 'false', 'id2835041', '', 'LMS Test Content Package MS-04 '); -INSERT INTO cp_organization VALUES ('1336', 'MS-05a', 'false', 'id2835031', '', 'LMS Test Content Package MS-05a '); -INSERT INTO cp_organization VALUES ('1372', 'MS-05b', 'false', 'id2683209', '', 'LMS Test Content Package MS-05b'); -INSERT INTO cp_organization VALUES ('1423', 'MS-06', 'false', 'id2686492', '', 'LMS Test Content Package MS-06 '); -INSERT INTO cp_organization VALUES ('1476', 'OB-01a', 'false', 'id2684391', '', 'LMS Test Content Package OB-01a '); -INSERT INTO cp_organization VALUES ('1519', 'OB-01b', 'false', 'id2835415', '', 'LMS Test Content Package OB-01b '); -INSERT INTO cp_organization VALUES ('1562', 'OB-01c', 'false', 'id2679887', '', 'LMS Test Content Package OB-01c '); -INSERT INTO cp_organization VALUES ('1605', 'OB-02a', 'false', 'id2679756', '', 'LMS Test Content Package OB-02a '); -INSERT INTO cp_organization VALUES ('1650', 'OB-02b', 'false', 'id2678483', '', 'LMS Test Content Package OB-02b '); -INSERT INTO cp_organization VALUES ('1686', 'OB-03a', 'false', 'id2816557', '', 'LMS Test Content Package OB-03a'); -INSERT INTO cp_organization VALUES ('1733', 'OB-03b', 'false', 'id3028734', '', 'LMS Test Content Package OB-03b'); -INSERT INTO cp_organization VALUES ('1812', 'OB-03c', 'false', 'id2618316', '', 'LMS Test Content Package OB-03c '); -INSERT INTO cp_organization VALUES ('1894', 'OB-04', 'false', 'id2836318', '', 'LMS Test Content Package OB-04 '); -INSERT INTO cp_organization VALUES ('1963', 'OB-05a', 'false', 'id2833703', '', 'LMS Test Content Package OB-05a '); -INSERT INTO cp_organization VALUES ('2015', 'OB-05b', 'false', 'id3024934', '', 'LMS Test Content Package OB-05b'); -INSERT INTO cp_organization VALUES ('2067', 'OB-05c', 'false', 'id2680434', '', 'LMS Test Content Package OB-05c '); -INSERT INTO cp_organization VALUES ('2110', 'OB-06', 'false', 'id3042076', '', 'LMS Test Content Package OB-06 '); -INSERT INTO cp_organization VALUES ('2166', 'OB-07a', 'false', 'id2685286', '', 'LMS Test Content Package OB-07a'); -INSERT INTO cp_organization VALUES ('2214', 'OB-07b', 'false', 'id3099498', '', 'LMS Test Content Package OB-07b'); -INSERT INTO cp_organization VALUES ('2261', 'OB-08a', 'false', 'id3018439', '', 'LMS Test Content Package OB-08a'); -INSERT INTO cp_organization VALUES ('2325', 'OB-08b', 'false', 'id2813752', '', 'LMS Test Content Package OB-08b'); -INSERT INTO cp_organization VALUES ('2389', 'OB-09a', 'false', 'id2835854', '', 'LMS Test Content Package OB-09a'); -INSERT INTO cp_organization VALUES ('2444', 'OB-09b', 'false', 'id2688473', '', 'LMS Test Content Package OB-09b'); -INSERT INTO cp_organization VALUES ('2499', 'OB-10a', 'false', 'id2623394', '', 'LMS Test Content Package OB-10a'); -INSERT INTO cp_organization VALUES ('2536', 'OB-10b', 'false', 'id3024558', '', 'LMS Test Content Package OB-10b'); -INSERT INTO cp_organization VALUES ('2582', 'OB-10c', 'false', 'id3036101', '', 'LMS Test Content Package OB-10c'); -INSERT INTO cp_organization VALUES ('2629', 'OB-10d', 'false', 'id3024238', '', 'LMS Test Content Package OB-10d'); -INSERT INTO cp_organization VALUES ('2678', 'OB-11a', 'false', 'id2784294', '', 'LMS Test Content Package OB-11a'); -INSERT INTO cp_organization VALUES ('2727', 'OB-11b', 'false', 'id2623206', '', 'LMS Test Content Package OB-11b'); -INSERT INTO cp_organization VALUES ('2778', 'OB-12a', 'false', 'id3024614', '', 'LMS Test Content Package OB-12a'); -INSERT INTO cp_organization VALUES ('2819', 'OB-12b', 'false', 'id3024649', '', 'LMS Test Content Package OB-12b'); -INSERT INTO cp_organization VALUES ('2860', 'OB-12c', 'false', 'id2685932', '', 'LMS Test Content Package OB-12c'); -INSERT INTO cp_organization VALUES ('2901', 'OB-13a', 'false', 'id2687756', '', 'LMS Test Content Package OB-13a '); -INSERT INTO cp_organization VALUES ('2951', 'OB-13b', 'false', 'id2832065', '', 'LMS Test Content Package OB-13b '); -INSERT INTO cp_organization VALUES ('3001', 'OB-13c', 'false', 'id2678078', '', 'LMS Test Content Package OB-13c '); -INSERT INTO cp_organization VALUES ('3051', 'OB-14a', 'false', 'id2832072', '', 'LMS Test Content Package OB-14a'); -INSERT INTO cp_organization VALUES ('3120', 'OB-14b', 'false', 'id2836467', '', 'LMS Test Content Package OB-14b'); -INSERT INTO cp_organization VALUES ('3195', 'OB-15', 'false', 'id2619353', '', 'LMS Test Content Package OB-15 '); -INSERT INTO cp_organization VALUES ('3267', 'RU-01aa', 'false', 'id3023482', '', 'LMS Test Content Package RU-01aa '); -INSERT INTO cp_organization VALUES ('3316', 'RU-01ab', 'false', 'id2676050', '', 'LMS Test Content Package RU-01ab '); -INSERT INTO cp_organization VALUES ('3365', 'RU-01ba', 'false', 'id2815727', '', 'LMS Test Content Package RU-01ba '); -INSERT INTO cp_organization VALUES ('3399', 'RU-01bb', 'false', 'id2676424', '', 'LMS Test Content Package RU-01bb '); -INSERT INTO cp_organization VALUES ('3448', 'RU-02a', 'false', 'id2687602', '', 'LMS Test Content Package RU-02a '); -INSERT INTO cp_organization VALUES ('3499', 'RU-02b', 'false', 'id2839516', '', 'LMS Test Content Package RU-02b '); -INSERT INTO cp_organization VALUES ('3550', 'RU-03a', 'false', 'id2836275', '', 'LMS Test Content Package RU-03a '); -INSERT INTO cp_organization VALUES ('3602', 'RU-03b', 'false', 'id2685338', '', 'LMS Test Content Package RU-03b '); -INSERT INTO cp_organization VALUES ('3654', 'RU-04aa', 'false', 'id2698800', '', 'LMS Test Content Package RU-04aa '); -INSERT INTO cp_organization VALUES ('3706', 'RU-04ab', 'false', 'id3020230', '', 'LMS Test Content Package RU-04ab '); -INSERT INTO cp_organization VALUES ('3758', 'RU-04ba', 'false', 'id3024577', '', 'LMS Test Content Package RU-04ba '); -INSERT INTO cp_organization VALUES ('3810', 'RU-04bb', 'false', 'id2691069', '', 'LMS Test Content Package RU-04bb '); -INSERT INTO cp_organization VALUES ('3862', 'RU-04bc', 'false', 'id2697061', '', 'LMS Test Content Package RU-04bc '); -INSERT INTO cp_organization VALUES ('3899', 'RU-04bd', 'false', 'id2832273', '', 'LMS Test Content Package RU-04bd '); -INSERT INTO cp_organization VALUES ('3951', 'RU-05a', 'false', 'id3003369', '', 'LMS Test Content Package RU-05a '); -INSERT INTO cp_organization VALUES ('4002', 'RU-05b', 'false', 'id2820429', '', 'LMS Test Content Package RU-05b '); -INSERT INTO cp_organization VALUES ('4053', 'RU-06a', 'false', 'id2844067', '', 'LMS Test Content Package RU-06a '); -INSERT INTO cp_organization VALUES ('4098', 'RU-06b', 'false', 'id2835664', '', 'LMS Test Content Package RU-06b '); -INSERT INTO cp_organization VALUES ('4145', 'RU-07a', 'false', 'id2832252', '', 'LMS Test Content Package RU-07a '); -INSERT INTO cp_organization VALUES ('4200', 'RU-07b', 'false', 'id2850246', '', 'LMS Test Content Package RU-07b '); -INSERT INTO cp_organization VALUES ('4255', 'RU-07c', 'false', 'id2852293', '', 'LMS Test Content Package RU-07c '); -INSERT INTO cp_organization VALUES ('4307', 'RU-08a', 'false', 'id3094007', '', 'LMS Test Content Package RU-08a '); -INSERT INTO cp_organization VALUES ('4374', 'RU-08b', 'false', 'id2835144', '', 'LMS Test Content Package RU-08b '); -INSERT INTO cp_organization VALUES ('4443', 'RU-09', 'false', 'id2622963', '', 'LMS Test Content Package RU-09 '); -INSERT INTO cp_organization VALUES ('4497', 'RU-10', 'false', 'id2695362', '', 'LMS Test Content Package RU-10 '); -INSERT INTO cp_organization VALUES ('4548', 'RU-11', 'false', 'id2821665', '', 'LMS Test Content Package RU-11 '); -INSERT INTO cp_organization VALUES ('4603', 'RU-12a', 'false', 'id2620884', '', 'LMS Test Content Package RU-12a '); -INSERT INTO cp_organization VALUES ('4648', 'RU-12b', 'false', 'id2681527', '', 'LMS Test Content Package RU-12b '); -INSERT INTO cp_organization VALUES ('4693', 'SX-02', 'false', 'id2868122', '', 'LMS Test Content Package SX-02 '); -INSERT INTO cp_organization VALUES ('4729', 'SX-03', 'false', 'id2698680', '', 'LMS Test Content Package SX-03'); -INSERT INTO cp_organization VALUES ('4791', 'SX-04a', 'false', 'id2696373', '', 'LMS Test Content Package SX-04a'); -INSERT INTO cp_organization VALUES ('4831', 'SX-04b', 'false', 'id3005863', '', 'LMS Test Content Package SX-04b'); -INSERT INTO cp_organization VALUES ('4870', 'SX-05', 'false', 'id2695987', '', 'LMS Test Content Package SX-05'); -INSERT INTO cp_organization VALUES ('4990', 'SX-06', 'false', 'id3003378', '', 'LMS Test Content Package SX-06'); -INSERT INTO cp_organization VALUES ('5030', 'SX-07a', 'false', 'id2862126', '', 'LMS Test Content Package SX-07a '); -INSERT INTO cp_organization VALUES ('5074', 'SX-07b', 'false', 'id2834188', '', 'LMS Test Content Package SX-07b'); -INSERT INTO cp_organization VALUES ('5114', 'SX-07c', 'false', 'id2817705', '', 'LMS Test Content Package SX-07c '); -INSERT INTO cp_organization VALUES ('5158', 'SX-07d', 'false', 'id2837821', '', 'LMS Test Content Package SX-07d '); -INSERT INTO cp_organization VALUES ('5217', 'SX-07e', 'false', 'id2861765', '', 'LMS Test Content Package SX-07e '); -INSERT INTO cp_organization VALUES ('5276', 'T-01a', 'false', 'id2675932', '', 'LMS Test Content Package T-01a '); -INSERT INTO cp_organization VALUES ('5489', 'T-01b', 'false', 'id2817663', '', 'LMS Test Content Package T-01b'); -INSERT INTO cp_organization VALUES ('5712', 'blabla', 'false', '', '', 'Combating Trafficking in Human Beings'); -INSERT INTO cp_organization VALUES ('6174', 'TOC1', 'false', 'id382106', '', 'Photoshop Example -- Linear'); -INSERT INTO cp_organization VALUES ('6375', 'TOC1', 'false', 'id383665', '', 'Photoshop Example -- Linear Controls'); -INSERT INTO cp_organization VALUES ('6603', 'TOC1', 'false', 'id383785', '', 'Photoshop Example -- Linear Controls'); -INSERT INTO cp_organization VALUES ('6831', 'organization_294673fbf63c4815b45af1651480864c', 'false', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', '', 'ILIAS for Admins'); -INSERT INTO cp_organization VALUES ('6932', 'organization_294673fbf63c4815b45af1651480864c', 'false', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', '', 'ILIAS for Admins'); -INSERT INTO cp_organization VALUES ('7033', 'blabla', 'false', '', '', 'Human Trafficking: Causes, Consequences, Counter-Strategies'); -INSERT INTO cp_organization VALUES ('7678', 'ORG-5EA524CA-76F2-4829-DBD5-AC3CEF8A0153', 'false', '', '', 'Organization'); -INSERT INTO cp_organization VALUES ('7693', 'blabla', 'false', '', '', 'Human Trafficking: Causes, Consequences, Counter-Strategies'); -INSERT INTO cp_organization VALUES ('8338', 'ORG-5EA524CA-76F2-4829-DBD5-AC3CEF8A0153', 'false', '', '', 'Organization'); -INSERT INTO cp_organization VALUES ('8353', 'ORG-5EA524CA-76F2-4829-DBD5-AC3CEF8A0153', 'false', '', '', 'Organization'); -INSERT INTO cp_organization VALUES ('8368', 'ORG-5EA524CA-76F2-4829-DBD5-AC3CEF8A0153', 'false', '', '', 'Organization'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_package -# -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"ORG-5EA524CA-76F2-4829-DBD5-AC3CEF8A0153","title":"Organization","foreignId":8368,"item":[{"id":"ITEM-A0584416-40BD-5359-361E-EA8C65CF1931","title":"Item","resourceId":"cam.html","foreignId":8369,"item":[{"id":"ITEM-8003C0B7-59CA-87E9-7080-38F0B5744C65","title":"Item","resourceId":"cam.html","foreignId":8370},{"id":"ITEM-4218CB3B-2767-1405-B60E-683FD8B446F0","title":"Item","foreignId":8371,"href":"cam.html"},{"id":"ITEM-68636AC0-9174-5BA6-F2D7-723D75038477","title":"Item","foreignId":8372,"href":"cam.html"}]},{"id":"ITEM-A398A9B3-8834-BC2C-7248-74F403D6B0B2","title":"Item","foreignId":8373,"href":"cam.html","item":[{"id":"ITEM-A255830A-6D26-C1D0-05E5-F41BBF4EF59E","title":"Item","foreignId":8374},{"id":"ITEM-1C992844-FD6C-F690-E59C-3E24B4D81771","title":"Item","foreignId":8375},{"id":"ITEM-BFAA6BE7-54E8-E64E-C843-7E9FB8414008","title":"Item","foreignId":8376,"item":[{"id":"ITEM-AACF750F-4446-263F-B582-66AC9DD5794A","title":"Item","foreignId":8377}]},{"id":"ITEM-BAFBDB54-1B6D-88E7-4BAB-368C4A7A0EEE","title":"Item","foreignId":8378},{"id":"ITEM-CE1A7F27-3460-8F09-3ADC-3ED5C9EAD410","title":"Item","foreignId":8379}]}],"base":""},"base":"./data/il_scorm2004/lm_data/lm_319/","foreignId":8367,"id":"MANIFEST-54F1704C-B5BA-B7A2-A13E-7BE4F0B9BEB1"}', '0', '100', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"API","title":"LMS Test Content Package API ","foreignId":2,"item":[{"id":"activity_1","title":"Asset Launch Test","parameters":"tc=API&act=1","foreignId":3,"href":"resources/AssetLaunchTest.htm","hideLMSUI":[{"value":"suspendAll","foreignId":4}]},{"id":"activity_2","title":"API Implementation Test 1","parameters":"tc=API&act=2","foreignId":5,"href":"resources/APIRTETest1.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":6}]},{"id":"activity_3","title":"API Implementation Test 2","parameters":"tc=API&act=3","foreignId":7,"href":"resources/APIRTETest2.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":8}]}],"base":""},"base":"./data/ilias3_scorm2004/lm_data/lm_146/","foreignId":1,"id":"LMSTestPackage_API"}', '0', '146', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"API","title":"LMS Test Content Package API ","foreignId":44,"item":[{"id":"activity_1","title":"Asset Launch Test","parameters":"tc=API&act=1","foreignId":45,"href":"resources/AssetLaunchTest.htm","hideLMSUI":[{"value":"suspendAll","foreignId":46}]},{"id":"activity_2","title":"API Implementation Test 1","parameters":"tc=API&act=2","foreignId":47,"href":"resources/APIRTETest1.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":48}]},{"id":"activity_3","title":"API Implementation Test 2","parameters":"tc=API&act=3","foreignId":49,"href":"resources/APIRTETest2.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":50}]}],"base":""},"base":"./data/ilias3_scorm2004/lm_data/lm_147/","foreignId":43,"id":"LMSTestPackage_API"}', '0', '147', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-01","title":"LMS Test Content Package CM-01 ","sequencingId":"id3022114","foreignId":86,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=CM-01&act=1","sequencingId":"id3004973","foreignId":87,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":88},{"value":"previous","foreignId":89},{"value":"suspendAll","foreignId":90}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-01&act=2","sequencingId":"id3000020","foreignId":91,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":92},{"value":"previous","foreignId":93},{"value":"suspendAll","foreignId":94}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-01&act=3","sequencingId":"id2784313","foreignId":95,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":96},{"value":"previous","foreignId":97},{"value":"suspendAll","foreignId":98}]}],"base":""},"sequencing":[{"id":"id3004973","attemptAbsoluteDurationLimit":"P5Y6M4DT12H30M58S","foreignId":119},{"id":"id3000020","foreignId":120,"objective":[{"primary":true,"objectiveID":"","satisfiedByMeasure":true,"minNormalizedMeasure":0.8,"foreignId":121}]},{"id":"id2784313","attemptAbsoluteDurationLimit":"P5Y6M4DT12H30M58S","foreignId":122,"objective":[{"primary":true,"objectiveID":"","satisfiedByMeasure":true,"minNormalizedMeasure":0.7,"foreignId":123}]},{"id":"id3022114","choice":false,"flow":true,"foreignId":124}],"base":"./data/ilias3_scorm2004/lm_data/lm_148/","foreignId":85,"id":"LMSTestPackage_CM-01"}', '0', '148', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-02a","title":"LMS Test Content Package CM-02a ","sequencingId":"id2681290","foreignId":126,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=CM-02a&act=1","foreignId":127,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-02a&act=2","sequencingId":"id2681375","foreignId":128,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-02a&act=3","sequencingId":"id2681311","foreignId":129,"href":"resources/SequencingTest.htm","sco":1}],"base":""},"sequencing":[{"id":"id2681375","foreignId":150,"rule":[{"type":"pre","action":"skip","foreignId":151,"condition":[{"condition":"satisfied","foreignId":152}]}],"objective":[{"primary":true,"objectiveID":"","foreignId":153}]},{"id":"id2681311","foreignId":154,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":155}]},{"id":"id2681290","choice":false,"flow":true,"foreignId":156}],"base":"./data/ilias3_scorm2004/lm_data/lm_149/","foreignId":125,"id":"LMSTestPackage_CM-02a"}', '0', '149', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-02b","title":"LMS Test Content Package CM-02b ","sequencingId":"id2689463","foreignId":158,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=CM-02b&act=1","sequencingId":"id2688724","foreignId":159,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":160},{"value":"previous","foreignId":161},{"value":"suspendAll","foreignId":162}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-02b&act=2","sequencingId":"id2688740","foreignId":163,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":164},{"value":"previous","foreignId":165},{"value":"suspendAll","foreignId":166}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-02b&act=3","sequencingId":"id2688775","foreignId":167,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":168},{"value":"previous","foreignId":169},{"value":"suspendAll","foreignId":170}]}],"base":""},"sequencing":[{"id":"id2688724","foreignId":191,"objective":[{"primary":true,"objectiveID":"","foreignId":192},{"primary":false,"objectiveID":"obj1","foreignId":193},{"primary":false,"objectiveID":"obj2","foreignId":194},{"primary":false,"objectiveID":"obj3","foreignId":195}]},{"id":"id2688740","objectiveSetByContent":true,"foreignId":196,"rule":[{"type":"pre","action":"skip","foreignId":197,"condition":[{"condition":"satisfied","foreignId":198}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":199},{"primary":false,"objectiveID":"obj1","foreignId":200}]},{"id":"id2688775","foreignId":201,"objective":[{"primary":true,"objectiveID":"","foreignId":202},{"primary":false,"objectiveID":"obj1","foreignId":203}]},{"id":"id2689463","choice":false,"flow":true,"foreignId":204}],"base":"./data/ilias3_scorm2004/lm_data/lm_150/","foreignId":157,"id":"LMSTestPackage_CM-02b"}', '0', '150', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-03a","title":"LMS Test Content Package CM-03a ","sequencingId":"id2818691","foreignId":206,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2813287","foreignId":207,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-03a&act=2","sequencingId":"id2813310","foreignId":208,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-03a&act=3","sequencingId":"id2835189","foreignId":209,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_4","title":"Activity 4","sequencingId":"id2835331","foreignId":210,"item":[{"id":"activity_5","title":"Activity 5","parameters":"tc=CM-03a&act=5","sequencingId":"id2813412","foreignId":211,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_6","title":"Activity 6","parameters":"tc=CM-03a&act=6","sequencingId":"id2813486","foreignId":212,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_7","title":"Activity 7","parameters":"tc=CM-03a&act=7","sequencingId":"id2819729","foreignId":213,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_8","title":"Activity 8","parameters":"tc=CM-03a&act=8","foreignId":214,"href":"resources/SequencingTest.htm","sco":1}],"base":""},"sequencing":[{"id":"id2813310","foreignId":235,"objective":[{"primary":true,"objectiveID":"","foreignId":236},{"primary":false,"objectiveID":"obj1","foreignId":237}]},{"id":"id2835189","foreignId":238,"objective":[{"primary":true,"objectiveID":"","foreignId":239},{"primary":false,"objectiveID":"obj2","foreignId":240},{"primary":false,"objectiveID":"obj3","foreignId":241},{"primary":false,"objectiveID":"obj4","foreignId":242},{"primary":false,"objectiveID":"obj5","foreignId":243}]},{"id":"id2813287","choice":false,"flow":true,"foreignId":244},{"id":"id2813412","foreignId":245,"rule":[{"type":"pre","action":"skip","foreignId":246,"condition":[{"condition":"attempted","foreignId":247},{"operator":"not","condition":"completed","foreignId":248}]}]},{"id":"id2813486","foreignId":249,"rule":[{"type":"pre","action":"skip","foreignId":250,"condition":[{"condition":"attempted","foreignId":251},{"operator":"not","condition":"completed","foreignId":252}]}]},{"id":"id2819729","foreignId":253,"rule":[{"type":"pre","action":"skip","foreignId":254,"condition":[{"condition":"attempted","foreignId":255},{"operator":"not","condition":"completed","foreignId":256}]}]},{"id":"id2835331","choice":false,"flow":true,"foreignId":257},{"id":"id2818691","choice":false,"flow":true,"foreignId":258}],"base":"./data/ilias3_scorm2004/lm_data/lm_151/","foreignId":205,"id":"LMSTestPackage_CM-03a"}', '0', '151', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-03b","title":"LMS Test Content Package CM-03b ","sequencingId":"id2683399","foreignId":260,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2683920","foreignId":261,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-03b&act=2","sequencingId":"id2684104","foreignId":262,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":263},{"value":"previous","foreignId":264},{"value":"suspendAll","foreignId":265}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-03b&act=3","sequencingId":"id2683998","foreignId":266,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":267},{"value":"previous","foreignId":268},{"value":"suspendAll","foreignId":269}]}]},{"id":"activity_4","title":"Activity 4","sequencingId":"id2683484","foreignId":270,"item":[{"id":"activity_5","title":"Activity 5","parameters":"tc=CM-03b&act=5","sequencingId":"id2683813","foreignId":271,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":272},{"value":"previous","foreignId":273},{"value":"suspendAll","foreignId":274}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=CM-03b&act=6","sequencingId":"id2683695","foreignId":275,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":276},{"value":"previous","foreignId":277},{"value":"suspendAll","foreignId":278}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=CM-03b&act=7","sequencingId":"id2683563","foreignId":279,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":280},{"value":"previous","foreignId":281},{"value":"suspendAll","foreignId":282}]}]},{"id":"activity_8","title":"Activity 8","parameters":"tc=CM-03b&act=8","foreignId":283,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":284},{"value":"previous","foreignId":285},{"value":"suspendAll","foreignId":286}]}],"base":""},"sequencing":[{"id":"id2684104","foreignId":307,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":308},{"primary":false,"objectiveID":"obj1","foreignId":309}]},{"id":"id2683998","foreignId":310,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":311},{"primary":false,"objectiveID":"obj2","foreignId":312},{"primary":false,"objectiveID":"obj3","foreignId":313},{"primary":false,"objectiveID":"obj4","foreignId":314},{"primary":false,"objectiveID":"obj5","foreignId":315},{"primary":false,"objectiveID":"obj6","foreignId":316}]},{"id":"id2683920","choice":false,"flow":true,"foreignId":317},{"id":"id2683813","foreignId":318,"rule":[{"type":"pre","action":"skip","foreignId":319,"condition":[{"condition":"attempted","foreignId":320},{"operator":"not","condition":"completed","foreignId":321}]}]},{"id":"id2683695","foreignId":322,"rule":[{"type":"pre","action":"skip","foreignId":323,"condition":[{"condition":"attempted","foreignId":324},{"operator":"not","condition":"completed","foreignId":325}]}]},{"id":"id2683563","foreignId":326,"rule":[{"type":"pre","action":"skip","foreignId":327,"condition":[{"condition":"attempted","foreignId":328},{"operator":"not","condition":"completed","foreignId":329}]}]},{"id":"id2683484","choice":false,"flow":true,"foreignId":330},{"id":"id2683399","choice":false,"flow":true,"foreignId":331}],"base":"./data/ilias3_scorm2004/lm_data/lm_152/","foreignId":259,"id":"LMSTestPackage_CM-03b"}', '0', '152', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-04a","title":"LMS Test Content Package CM-04a ","foreignId":333,"item":[{"id":"activity_1","title":"Activity 1","foreignId":334,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-04a&act=2","foreignId":335,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":336},{"value":"previous","foreignId":337},{"value":"suspendAll","foreignId":338}]},{"id":"__CM-04a.Activity.3__","title":"Activity 3","parameters":"tc=CM-04a&act=3","foreignId":339,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":340},{"value":"previous","foreignId":341},{"value":"suspendAll","foreignId":342}]}]},{"id":"activity_4","title":"Activity 4","foreignId":343,"item":[{"id":"activity_5","title":"Activity 5","parameters":"tc=CM-04a&act=5","foreignId":344,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":345},{"value":"previous","foreignId":346},{"value":"suspendAll","foreignId":347}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=CM-04a&act=6","foreignId":348,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":349},{"value":"previous","foreignId":350},{"value":"suspendAll","foreignId":351}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=CM-04a&act=7","foreignId":352,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":353},{"value":"previous","foreignId":354},{"value":"suspendAll","foreignId":355}]}]},{"id":"activity_8","title":"Activity 8","foreignId":356,"item":[{"id":"_9_","title":"Activity 9","parameters":"tc=CM-04a&act=9","foreignId":357,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":358},{"value":"previous","foreignId":359},{"value":"suspendAll","foreignId":360}]},{"id":"activity_10","title":"Activity 10","foreignId":361,"item":[{"id":"_.activity.11","title":"Activity 11","sequencingId":"id2784280","foreignId":362,"item":[{"id":"activity_12","title":"Activity 12","parameters":"tc=CM-04a&act=12","foreignId":363,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":364},{"value":"previous","foreignId":365},{"value":"suspendAll","foreignId":366}]},{"id":"activity_13","title":"Activity 13","parameters":"tc=CM-04a&act=13","foreignId":367,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":368},{"value":"previous","foreignId":369},{"value":"suspendAll","foreignId":370}]}]},{"id":"Activity.14_LEAF","title":"Activity 14","parameters":"tc=CM-04a&act=14","foreignId":371,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":372},{"value":"previous","foreignId":373},{"value":"suspendAll","foreignId":374}]}]}]},{"id":"Activity-15","title":"Activity 15","parameters":"tc=CM-04a&act=15","foreignId":375,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":376},{"value":"previous","foreignId":377},{"value":"suspendAll","foreignId":378}]}],"base":""},"sequencing":[{"id":"id2784280","flow":true,"foreignId":399}],"base":"./data/ilias3_scorm2004/lm_data/lm_153/","foreignId":332,"id":"LMSTestPackage_CM-04a"}', '0', '153', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-04b","title":"LMS Test Content Package CM-04b ","sequencingId":"id2690686","foreignId":401,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2688676","foreignId":402,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-04b&act=2","foreignId":403,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-04b&act=3","foreignId":404,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_4","title":"Activity 4","foreignId":405,"item":[{"id":"activity_5","title":"Activity 5","parameters":"tc=CM-04b&act=5","foreignId":406,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_6","title":"Activity 6","parameters":"tc=CM-04b&act=6","foreignId":407,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_7","title":"Activity 7","parameters":"tc=CM-04b&act=7","foreignId":408,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_8","title":"Activity 8","foreignId":409,"item":[{"id":"activity_9","title":"Activity 9","parameters":"tc=CM-04b&act=9","foreignId":410,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_10","title":"Activity 10","sequencingId":"id2690845","foreignId":411,"item":[{"id":"activity_11","title":"Activity 11","sequencingId":"id2688662","foreignId":412,"item":[{"id":"activity_12","title":"Activity 12","parameters":"tc=CM-04b&act=12","foreignId":413,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_13","title":"Activity 13","parameters":"tc=CM-04b&act=13","foreignId":414,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_14","title":"Activity 14","parameters":"tc=CM-04b&act=14","foreignId":415,"href":"resources/SequencingTest.htm","sco":1}]}]},{"id":"activity_15","title":"Activity 15","parameters":"tc=CM-04b&act=15","foreignId":416,"href":"resources/SequencingTest.htm","sco":1}],"base":""},"sequencing":[{"id":"id2688676","flow":true,"foreignId":437},{"id":"id2688662","flow":true,"foreignId":438,"rule":[{"type":"pre","action":"skip","foreignId":439,"condition":[{"condition":"attempted","foreignId":440}]}]},{"id":"id2690845","flow":true,"foreignId":441},{"id":"id2690686","flow":true,"foreignId":442}],"base":"./data/ilias3_scorm2004/lm_data/lm_154/","foreignId":400,"id":"LMSTestPackage_CM-04b"}', '0', '154', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-04c","title":"LMS Test Content Package CM-04c ","foreignId":444,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2684529","foreignId":445,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-04c&act=2","foreignId":446,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":447},{"value":"previous","foreignId":448},{"value":"suspendAll","foreignId":449}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-04c&act=3","foreignId":450,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":451},{"value":"previous","foreignId":452},{"value":"suspendAll","foreignId":453}]}]},{"id":"activity_4","title":"Activity 4","foreignId":454,"item":[{"id":"activity_5","title":"Activity 5","parameters":"tc=CM-04c&act=5","foreignId":455,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":456},{"value":"previous","foreignId":457},{"value":"suspendAll","foreignId":458}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=CM-04c&act=6","foreignId":459,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":460},{"value":"previous","foreignId":461},{"value":"suspendAll","foreignId":462}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=CM-04c&act=7","foreignId":463,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":464},{"value":"previous","foreignId":465},{"value":"suspendAll","foreignId":466}]}]},{"id":"activity_8","title":"Activity 8","foreignId":467,"item":[{"id":"activity_9","title":"Activity 9","parameters":"tc=CM-04c&act=9","foreignId":468,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":469},{"value":"previous","foreignId":470},{"value":"suspendAll","foreignId":471}]},{"id":"activity_10","title":"Activity 10","sequencingId":"id2683882","foreignId":472,"item":[{"id":"activity_11","title":"Activity 11","sequencingId":"id2684033","foreignId":473,"item":[{"id":"activity_12","title":"Activity 12","parameters":"tc=CM-04c&act=12","foreignId":474,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":475},{"value":"previous","foreignId":476},{"value":"suspendAll","foreignId":477}]},{"id":"activity_13","title":"Activity 13","parameters":"tc=CM-04c&act=13","foreignId":478,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":479},{"value":"previous","foreignId":480},{"value":"suspendAll","foreignId":481}]}]},{"id":"activity_14","title":"Activity 14","parameters":"tc=CM-04c&act=14","foreignId":482,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":483},{"value":"previous","foreignId":484},{"value":"suspendAll","foreignId":485}]}]}]},{"id":"activity_15","title":"Activity 15","parameters":"tc=CM-04c&act=15","foreignId":486,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":487},{"value":"previous","foreignId":488},{"value":"suspendAll","foreignId":489}]}],"base":""},"sequencing":[{"id":"id2684529","flow":true,"foreignId":510},{"id":"id2684033","flow":true,"foreignId":511,"rule":[{"type":"pre","action":"skip","foreignId":512,"condition":[{"condition":"attempted","foreignId":513}]}]},{"id":"id2683882","flow":true,"foreignId":514}],"base":"./data/ilias3_scorm2004/lm_data/lm_155/","foreignId":443,"id":"LMSTestPackage_CM-04c"}', '0', '155', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-04d","title":"LMS Test Content Package CM-04d ","foreignId":516,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2829866","foreignId":517,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-04d&act=2","foreignId":518,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":519},{"value":"previous","foreignId":520},{"value":"suspendAll","foreignId":521}]},{"id":"activity_3","title":"Activity 3","isvisible":false,"parameters":"tc=CM-04d&act=3","foreignId":522,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":523},{"value":"previous","foreignId":524},{"value":"suspendAll","foreignId":525}]}]},{"id":"activity_4","title":"Activity 4","foreignId":526,"item":[{"id":"activity_5","title":"Activity 5","parameters":"tc=CM-04d&act=5","foreignId":527,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":528},{"value":"previous","foreignId":529},{"value":"suspendAll","foreignId":530}]},{"id":"_6Sample-act","title":"Activity 6","isvisible":false,"parameters":"tc=CM-04d&act=6","foreignId":531,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":532},{"value":"previous","foreignId":533},{"value":"suspendAll","foreignId":534}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=CM-04d&act=7","foreignId":535,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":536},{"value":"previous","foreignId":537},{"value":"suspendAll","foreignId":538}]}]},{"id":"activity_8","title":"Activity 8","foreignId":539,"item":[{"id":"activity_9","title":"Activity 9","parameters":"tc=CM-04d&act=9","foreignId":540,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":541},{"value":"previous","foreignId":542},{"value":"suspendAll","foreignId":543}]},{"id":"activity_10","title":"Activity 10","foreignId":544,"item":[{"id":"activity_11","title":"Activity 11","foreignId":545,"item":[{"id":"activity_12","title":"Activity 12","parameters":"tc=CM-04d&act=12","foreignId":546,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":547},{"value":"previous","foreignId":548},{"value":"suspendAll","foreignId":549}]},{"id":"Sample-act-13","title":"Activity 13","parameters":"tc=CM-04d&act=13","foreignId":550,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":551},{"value":"previous","foreignId":552},{"value":"suspendAll","foreignId":553}]}]},{"id":"activity_14","title":"Activity 14","isvisible":false,"parameters":"tc=CM-04d&act=14","foreignId":554,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":555},{"value":"previous","foreignId":556},{"value":"suspendAll","foreignId":557}]}]}]},{"id":"Sample15","title":"Activity 15","isvisible":false,"parameters":"tc=CM-04d&act=15","foreignId":558,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":559},{"value":"previous","foreignId":560},{"value":"suspendAll","foreignId":561}]}],"base":""},"sequencing":[{"id":"id2829866","flow":true,"foreignId":582}],"base":"./data/ilias3_scorm2004/lm_data/lm_156/","foreignId":515,"id":"LMSTestPackage_CM-04d"}', '0', '156', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-05","title":"LMS Test Content Package CM-05","sequencingId":"id3042067","foreignId":584,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=CM-05&act=1","foreignId":585,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":586},{"value":"previous","foreignId":587},{"value":"suspendAll","foreignId":588}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id3022102","foreignId":589,"item":[{"id":"activity_3","title":"Activity 3","sequencingId":"id3028815","foreignId":590,"item":[{"id":"activity_4","title":"Activity 4","parameters":"tc=CM-05&act=4","foreignId":591,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":592},{"value":"previous","foreignId":593},{"value":"suspendAll","foreignId":594}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=CM-05&act=5","foreignId":595,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":596},{"value":"previous","foreignId":597},{"value":"suspendAll","foreignId":598}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=CM-05&act=6","foreignId":599,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":600},{"value":"previous","foreignId":601},{"value":"suspendAll","foreignId":602}]}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=CM-05&act=7","foreignId":603,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":604},{"value":"previous","foreignId":605},{"value":"suspendAll","foreignId":606}]},{"id":"activity_8","title":"Activity 8","parameters":"tc=CM-05&act=8","foreignId":607,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":608},{"value":"previous","foreignId":609},{"value":"suspendAll","foreignId":610}]}]},{"id":"activity_9","title":"Activity 9","parameters":"tc=CM-05&act=9","foreignId":611,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":612},{"value":"previous","foreignId":613},{"value":"suspendAll","foreignId":614}]}],"base":""},"sequencing":[{"id":"id3028815","flow":true,"foreignId":635},{"id":"id3022102","flow":true,"foreignId":636},{"id":"id3042067","flow":true,"foreignId":637}],"base":"./data/ilias3_scorm2004/lm_data/lm_157/","foreignId":583,"id":"LMSTestPackage_CM-05"}', '0', '157', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-06","title":"LMS Test Content Package CM-06","sequencingId":"id2827862","foreignId":639,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=CM-06&act=1","foreignId":640,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":641},{"value":"previous","foreignId":642},{"value":"suspendAll","foreignId":643}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-06&act=2","foreignId":644,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":645},{"value":"previous","foreignId":646},{"value":"suspendAll","foreignId":647}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-06&act=3","foreignId":648,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":649},{"value":"previous","foreignId":650},{"value":"suspendAll","foreignId":651}]}],"base":""},"sequencing":[{"id":"id2827862","choice":false,"flow":true,"foreignId":672}],"base":"./data/ilias3_scorm2004/lm_data/lm_158/","foreignId":638,"id":"LMSTestPackage_CM-06"}', '0', '158', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-07a","title":"LMS Test Content Package CM-07a ","sequencingId":"id2837362","foreignId":674,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2837640","foreignId":675,"item":[{"id":"activity_2","title":"Activity 2","sequencingId":"id2815570","foreignId":676,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-07a&act=3","foreignId":677,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_4","title":"Activity 4","parameters":"tc=CM-07a&act=4","foreignId":678,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_5","title":"Activity 5","parameters":"tc=CM-07a&act=5","sequencingId":"id2813725","foreignId":679,"href":"resources/SequencingTestFail.htm","sco":1}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=CM-07a&act=6","sequencingId":"id2832153","foreignId":680,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_7","title":"Activity 7","parameters":"tc=CM-07a&act=7","foreignId":681,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_8","title":"Activity 8","sequencingId":"id2813947","foreignId":682,"item":[{"id":"activity_9","title":"Activity 9","parameters":"tc=CM-07a&act=9","foreignId":683,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_10","title":"Activity 10","parameters":"tc=CM-07a&act=10","sequencingId":"id2837777","foreignId":684,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_11","title":"Activity 11","sequencingId":"id2813936","foreignId":685,"item":[{"id":"activity_12","title":"Activity 12","parameters":"tc=CM-07a&act=12","foreignId":686,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_13","title":"Activity 13","parameters":"tc=CM-07a&act=13","foreignId":687,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_14","title":"Activity 14","parameters":"tc=CM-07a&act=14","sequencingId":"id2837306","foreignId":688,"href":"resources/SequencingTest.htm","sco":1}]}]}],"base":""},"sequencing":[{"id":"id2813725","foreignId":716,"rule":[{"type":"pre","action":"disabled","foreignId":717,"condition":[{"condition":"always","foreignId":718}]}]},{"id":"id2815570","flow":true,"foreignId":719},{"id":"id2832153","choiceExit":false,"foreignId":720},{"id":"id2837640","choiceExit":false,"flow":true,"foreignId":721},{"id":"id2837777","choiceExit":false,"foreignId":722},{"id":"id2837306","foreignId":723,"rule":[{"type":"pre","action":"disabled","foreignId":724,"condition":[{"condition":"always","foreignId":725}]}]},{"id":"id2813936","flow":true,"foreignId":726},{"id":"id2813947","choiceExit":false,"flow":true,"foreignId":727},{"id":"id2837362","flow":true,"foreignId":728}],"base":"./data/ilias3_scorm2004/lm_data/lm_159/","foreignId":673,"id":"LMSTestPackage_CM-07a"}', '0', '159', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-07b","title":"LMS Test Content Package CM-07b","foreignId":730,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id3020067","foreignId":731,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-07b&act=2","sequencingId":"id3024937","foreignId":732,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-07b&act=3","foreignId":733,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_4","title":"Activity 4","sequencingId":"id3022124","foreignId":734,"item":[{"id":"activity_5","title":"Activity 5","sequencingId":"id3028800","foreignId":735,"item":[{"id":"activity_6","title":"Activity 6","parameters":"tc=CM-07b&act=6","foreignId":736,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_7","title":"Activity 7","parameters":"tc=CM-07b&act=7","foreignId":737,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_8","title":"Activity 8","parameters":"tc=CM-07b&act=8","foreignId":738,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_9","title":"Activity 9","sequencingId":"id3020956","foreignId":739,"item":[{"id":"activity_10","title":"Activity 10","sequencingId":"id3020285","foreignId":740,"item":[{"id":"activity_11","title":"Activity 11","parameters":"tc=CM-07b&act=11","foreignId":741,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_12","title":"Activity 12","parameters":"tc=CM-07b&act=12","foreignId":742,"href":"resources/SequencingTestFail.htm","sco":1}]},{"id":"activity_13","title":"Activity 13","sequencingId":"id3020988","foreignId":743,"item":[{"id":"activity_14","title":"Activity 14","sequencingId":"id3024549","foreignId":744,"item":[{"id":"activity_15","title":"Activity 15","parameters":"tc=CM-07b&act=15","sequencingId":"id3020228","foreignId":745,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_16","title":"Activity 16","parameters":"tc=CM-07b&act=16","sequencingId":"id3024605","foreignId":746,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_17","title":"Activity 17","parameters":"tc=CM-07b&act=17","foreignId":747,"href":"resources/SequencingTest.htm","sco":1}]}]},{"id":"activity_18","title":"Activity 18","foreignId":748,"item":[{"id":"activity_19","title":"Activity 19","parameters":"tc=CM-07b&act=19","foreignId":749,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_20","title":"Activity 20","parameters":"tc=CM-07b&act=20","foreignId":750,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_21","title":"Activity 21","parameters":"tc=CM-07b&act=21","foreignId":751,"href":"resources/SequencingTest.htm","sco":1}]}],"base":""},"sequencing":[{"id":"id3024937","foreignId":779,"rule":[{"type":"pre","action":"skip","foreignId":780,"condition":[{"condition":"always","foreignId":781}]}]},{"id":"id3020067","flow":true,"foreignId":782},{"id":"id3028800","flow":true,"foreignId":783},{"id":"id3022124","flow":true,"foreignId":784,"rule":[{"type":"pre","action":"disabled","foreignId":785,"condition":[{"condition":"always","foreignId":786}]}]},{"id":"id3020285","flow":true,"foreignId":787},{"id":"id3020228","foreignId":788,"rule":[{"type":"pre","action":"skip","foreignId":789,"condition":[{"condition":"always","foreignId":790}]}]},{"id":"id3024605","foreignId":791,"rule":[{"type":"pre","action":"skip","foreignId":792,"condition":[{"condition":"attempted","foreignId":793}]}]},{"id":"id3024549","flow":true,"foreignId":794},{"id":"id3020988","flow":true,"foreignId":795},{"id":"id3020956","flow":true,"foreignId":796}],"base":"./data/ilias3_scorm2004/lm_data/lm_160/","foreignId":729,"id":"LMSTestPackage_CM-07b"}', '0', '160', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-07c","title":"LMS Test Content Package CM-07c","sequencingId":"id2621280","foreignId":798,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2621923","foreignId":799,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-07c&act=2","sequencingId":"id2621964","foreignId":800,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-07c&act=3","foreignId":801,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_4","title":"Activity 4","sequencingId":"id2621616","foreignId":802,"item":[{"id":"activity_5","title":"Activity 5","sequencingId":"id2621754","foreignId":803,"item":[{"id":"activity_6","title":"Activity 6","parameters":"tc=CM-07c&act=6","foreignId":804,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_7","title":"Activity 7","parameters":"tc=CM-07c&act=7","sequencingId":"id2621788","foreignId":805,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_8","title":"Activity 8","parameters":"tc=CM-07c&act=8","foreignId":806,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_9","title":"Activity 9","sequencingId":"id2621419","foreignId":807,"item":[{"id":"activity_10","title":"Activity 10","isvisible":false,"parameters":"tc=CM-07c&act=10","foreignId":808,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_11","title":"Activity 11","sequencingId":"id2621435","foreignId":809,"item":[{"id":"activity_12","title":"Activity 12","sequencingId":"id2621504","foreignId":810,"item":[{"id":"activity_13","title":"Activity 13","parameters":"tc=CM-07c&act=13","foreignId":811,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_14","title":"Activity 14","parameters":"tc=CM-07c&act=14","foreignId":812,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_15","title":"Activity 15","parameters":"tc=CM-07c&act=15","foreignId":813,"href":"resources/SequencingTest.htm","sco":1}]}]},{"id":"activity_16","title":"Activity 16","sequencingId":"id2621296","foreignId":814,"item":[{"id":"activity_17","title":"Activity 17","parameters":"tc=CM-07c&act=17","foreignId":815,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_18","title":"Activity 18","parameters":"tc=CM-07c&act=18","sequencingId":"id2621312","foreignId":816,"href":"resources/SequencingTest.htm","sco":1}]}],"base":""},"sequencing":[{"id":"id2621964","attemptLimit":1,"foreignId":837},{"id":"id2621923","flow":true,"foreignId":838},{"id":"id2621788","foreignId":839,"rule":[{"type":"pre","action":"hiddenFromChoice","foreignId":840,"condition":[{"condition":"always","foreignId":841}]}]},{"id":"id2621754","flow":true,"foreignId":842},{"id":"id2621616","flow":true,"foreignId":843,"rule":[{"type":"pre","action":"hiddenFromChoice","foreignId":844,"condition":[{"condition":"attempted","foreignId":845}]}]},{"id":"id2621504","flow":true,"foreignId":846},{"id":"id2621435","flow":true,"attemptLimit":1,"foreignId":847},{"id":"id2621419","flow":true,"foreignId":848},{"id":"id2621312","foreignId":849,"rule":[{"type":"pre","action":"disabled","foreignId":850,"condition":[{"condition":"always","foreignId":851}]}]},{"id":"id2621296","flow":true,"foreignId":852},{"id":"id2621280","flow":true,"foreignId":853}],"base":"./data/ilias3_scorm2004/lm_data/lm_161/","foreignId":797,"id":"LMSTestPackage_CM-07c"}', '0', '161', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-07d","title":"LMS Test Content Package CM-07d","sequencingId":"id2675796","foreignId":855,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2676334","foreignId":856,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-07d&act=2","foreignId":857,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-07d&act=3","foreignId":858,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_4","title":"Activity 4","sequencingId":"id2676165","foreignId":859,"item":[{"id":"activity_5","title":"Activity 5","foreignId":860,"item":[{"id":"activity_6","title":"Activity 6","parameters":"tc=CM-07d&act=6","foreignId":861,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_7","title":"Activity 7","parameters":"tc=CM-07d&act=7","foreignId":862,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_8","title":"Activity 8","parameters":"tc=CM-07d&act=8","foreignId":863,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_9","title":"Activity 9","sequencingId":"id2675940","foreignId":864,"item":[{"id":"activity_10","title":"Activity 10","parameters":"tc=CM-07d&act=10","foreignId":865,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_11","title":"Activity 11","sequencingId":"id2675982","foreignId":866,"item":[{"id":"activity_12","title":"Activity 12","sequencingId":"id2676043","foreignId":867,"item":[{"id":"activity_13","title":"Activity 13","parameters":"tc=CM-07d&act=13","sequencingId":"id2676063","foreignId":868,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_14","title":"Activity 14","parameters":"tc=CM-07d&act=14","foreignId":869,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_15","title":"Activity 15","parameters":"tc=CM-07d&act=15","foreignId":870,"href":"resources/SequencingTest.htm","sco":1}]}]},{"id":"activity_16","title":"Activity 16","sequencingId":"id2675857","foreignId":871,"item":[{"id":"activity_17","title":"Activity 17","parameters":"tc=CM-07d&act=17","foreignId":872,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_18","title":"Activity 18","parameters":"tc=CM-07d&act=18","foreignId":873,"href":"resources/SequencingTest.htm","sco":1}]}],"base":""},"sequencing":[{"id":"id2676334","flow":true,"foreignId":894},{"id":"id2676165","constrainChoice":true,"foreignId":895},{"id":"id2676063","preventActivation":true,"constrainChoice":true,"foreignId":896},{"id":"id2676043","flow":true,"preventActivation":true,"foreignId":897},{"id":"id2675982","flow":true,"constrainChoice":true,"foreignId":898},{"id":"id2675940","flow":true,"constrainChoice":true,"foreignId":899},{"id":"id2675857","flow":true,"preventActivation":true,"constrainChoice":true,"foreignId":900},{"id":"id2675796","choice":false,"flow":true,"foreignId":901}],"base":"./data/ilias3_scorm2004/lm_data/lm_162/","foreignId":854,"id":"LMSTestPackage_CM-07d"}', '0', '162', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CASETEST","title":"LMS Test Content Package CM-07e","sequencingId":"id2619357","foreignId":903,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=CM-07e&act=1","foreignId":904,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_2","title":"Activity 2","sequencingId":"id2619344","foreignId":905,"item":[{"id":"CaseTest","title":"Activity 3","parameters":"tc=CM-07e&act=3","foreignId":906,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_4","title":"Activity 4","sequencingId":"id2618515","foreignId":907,"item":[{"id":"activity_5","title":"Activity 5","parameters":"tc=CM-07e&act=5","foreignId":908,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_6","title":"Activity 6","parameters":"tc=CM-07e&act=6","foreignId":909,"href":"resources/SequencingTest.htm","sco":1}]}]}],"base":""},"sequencing":[{"id":"id2618515","flow":true,"foreignId":930,"rule":[{"type":"pre","action":"stopForwardTraversal","foreignId":931,"condition":[{"condition":"always","foreignId":932}]}]},{"id":"id2619344","flow":true,"foreignId":933},{"id":"id2619357","flow":true,"foreignId":934}],"base":"./data/ilias3_scorm2004/lm_data/lm_163/","foreignId":902,"id":"LMSTestPackage_CM-07e"}', '0', '163', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-07f","title":"LMS Test Content Package CM-07f","sequencingId":"id2680488","foreignId":936,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=CM-07f&act=1","sequencingId":"id2680596","foreignId":937,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-07f&act=2","foreignId":938,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_3","title":"Activity 3","parameters":"tc=CM-07f&act=3","foreignId":939,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_4","title":"Activity 4","parameters":"tc=CM-07f&act=4","foreignId":940,"href":"resources/SequencingTest.htm","sco":1}],"base":""},"sequencing":[{"id":"id2680596","foreignId":961,"rule":[{"type":"pre","action":"stopForwardTraversal","foreignId":962,"condition":[{"condition":"always","foreignId":963}]}]},{"id":"id2680488","flow":true,"foreignId":964}],"base":"./data/ilias3_scorm2004/lm_data/lm_164/","foreignId":935,"id":"LMSTestPackage_CM-07f"}', '0', '164', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"CM-08","title":"LMS Test Content Package CM-08","sequencingId":"GeneralSequencing","foreignId":966,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=CM-08&act=1","sequencingId":"id2682236","foreignId":967,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_2","title":"Activity 2","parameters":"tc=CM-08&act=2","sequencingId":"id2681702","foreignId":968,"href":"resources/SequencingTest.htm","sco":1}],"base":""},"sequencing":[{"id":"id2682236","sequencingId":"GeneralSequencing","foreignId":989,"rule":[{"type":"post","action":"exitAll","foreignId":990,"condition":[{"condition":"always","foreignId":991}]}]},{"id":"id2681702","foreignId":992},{"id":"GeneralSequencing","flow":true,"foreignId":993}],"base":"./data/ilias3_scorm2004/lm_data/lm_165/","foreignId":965,"id":"LMSTestPackage_CM-08"}', '0', '165', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"DMB","title":"LMS Test Content Package DMB ","foreignId":995,"item":[{"id":"activity_1","title":"Data Model Behavior Test 1","parameters":"tc=DMB&act=1","foreignId":996,"href":"resources/DMBehaviorTest1.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":997}]},{"id":"activity_2","title":"Data Model Behavior Test 2","parameters":"tc=DMB&act=2","completionThreshold":0.8,"foreignId":998,"href":"resources/DMBehaviorTest2.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":999}]},{"id":"activity_3","title":"Data Model Behavior Test 3","parameters":"tc=DMB&act=3","sequencingId":"id2624021","foreignId":1000,"href":"resources/DMBehaviorTest3.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":1001}]},{"id":"activity_4","title":"Data Model Behavior Test 4","parameters":"tc=DMB&act=4","sequencingId":"id2623911","foreignId":1002,"href":"resources/DMBehaviorTest4.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":1003}]},{"id":"activity_5","title":"Data Model Behavior Test 5","parameters":"tc=DMB&act=5","sequencingId":"id2623838","foreignId":1004,"href":"resources/DMBehaviorTest5.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":1005}]},{"id":"activity_6","title":"Data Model Behavior Test 6","parameters":"tc=DMB&act=6","completionThreshold":0.6,"sequencingId":"id2623724","foreignId":1006,"href":"resources/DMBehaviorTest6.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":1007}]},{"id":"activity_7","title":"Data Model Behavior Test 7","parameters":"tc=DMB&act=7","sequencingId":"id2623628","foreignId":1008,"href":"resources/DMBehaviorTest7.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":1009}]},{"id":"activity_8","title":"Data Model Behavior Test 8","parameters":"tc=DMB&act=8","sequencingId":"id2623522","foreignId":1010,"href":"resources/DMBehaviorTest8.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":1011}]},{"id":"activity_9","title":"Data Model Behavior Test 9","parameters":"tc=DMB&act=9","foreignId":1012,"href":"resources/DMBehaviorTest9.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":1013}]}],"base":""},"sequencing":[{"id":"id2624021","foreignId":1090,"objective":[{"primary":true,"objectiveID":"SEQSUCCESSSTATUSOVERRIDE01","satisfiedByMeasure":true,"minNormalizedMeasure":-0.5,"foreignId":1091}]},{"id":"id2623911","foreignId":1092,"objective":[{"primary":true,"objectiveID":"SEQSUCCESSSTATUSUNKNOWN01","satisfiedByMeasure":true,"minNormalizedMeasure":-0.5,"foreignId":1093}]},{"id":"id2623838","foreignId":1094,"objective":[{"primary":true,"objectiveID":"SEQSCALEDPASSINGSCOREDEFAULT01","satisfiedByMeasure":true,"foreignId":1095}]},{"id":"id2623724","foreignId":1096,"objective":[{"primary":true,"objectiveID":"SCALEDPASSINGSCOREINIT","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":1097}]},{"id":"id2623628","foreignId":1098,"objective":[{"primary":true,"objectiveID":"SEQSCALEDPASSINGSCORENOINIT01","minNormalizedMeasure":0.8,"foreignId":1099}]},{"id":"id2623522","foreignId":1100,"objective":[{"primary":true,"objectiveID":"SEQSCALEDPASSINGSCORENOINIT02","minNormalizedMeasure":0.7,"foreignId":1101}]}],"base":"./data/ilias3_scorm2004/lm_data/lm_166/","foreignId":994,"id":"LMSTestPackage_DMB"}', '0', '166', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"DMI","title":"LMS Test Content Package DMI ","foreignId":1103,"item":[{"id":"activity_1","title":"Data Model Implementation Test 1","parameters":"tc=DMI&act=1","timeLimitAction":"continue,message","dataFromLMS":"Launch Data Test","completionThreshold":0.8,"foreignId":1104,"href":"resources/DMImplementationTest1.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":1105}]},{"id":"activity_2","title":"Data Model Implementation Test 2","parameters":"tc=DMI&act=2","dataFromLMS":"thisstringislength20qwertyuiop0123456789thisstringislength60qwertyuiop0123456789thisstringislengt100thisstringislengt120qwertyuiop0123456789thisstringislengt160qwertyuiop0123456789thisstringislengt200thisstringislengt220qwertyuiop0123456789thisstringislengt260qwertyuiop0123456789thisstringislengt300thisstringislengt320qwertyuiop0123456789thisstringislengt360qwertyuiop0123456789thisstringislengt400thisstringislengt420qwertyuiop0123456789thisstringislengt460qwertyuiop0123456789thisstringislengt500thisstringislengt520qwertyuiop0123456789thisstringislengt560qwertyuiop0123456789thisstringislengt600thisstringislengt620qwertyuiop0123456789thisstringislengt660qwertyuiop0123456789thisstringislengt700thisstringislengt720qwertyuiop0123456789thisstringislengt760qwertyuiop0123456789thisstringislengt800thisstringislengt820qwertyuiop0123456789thisstringislengt860qwertyuiop0123456789thisstringislengt900thisstringislengt920qwertyuiop0123456789thisstringislengt960qwertyuiop0123456789thisstringisleng1000thisstringisleng1020qwertyuiop0123456789thisstringisleng1060qwertyuiop0123456789thisstringisleng1100thisstringisleng1120qwertyuiop0123456789thisstringisleng1160qwertyuiop0123456789thisstringisleng1200thisstringisleng1220qwertyuiop0123456789thisstringisleng1260qwertyuiop0123456789thisstringisleng1300thisstringisleng1320qwertyuiop0123456789thisstringisleng1360qwertyuiop0123456789thisstringisleng1400thisstringisleng1420qwertyuiop0123456789thisstringisleng1460qwertyuiop0123456789thisstringisleng1500thisstringisleng1520qwertyuiop0123456789thisstringisleng1560qwertyuiop0123456789thisstringisleng1600thisstringisleng1620qwertyuiop0123456789thisstringisleng1660qwertyuiop0123456789thisstringisleng1700thisstringisleng1720qwertyuiop0123456789thisstringisleng1760qwertyuiop0123456789thisstringisleng1800thisstringisleng1820qwertyuiop0123456789thisstringisleng1860qwertyuiop0123456789thisstringisleng1900thisstringisleng1920qwertyuiop0123456789thisstringisleng1960qwertyuiop0123456789thisstringisleng2000thisstringisleng2020qwertyuiop0123456789thisstringisleng2060qwertyuiop0123456789thisstringisleng2100thisstringisleng2120qwertyuiop0123456789thisstringisleng2160qwertyuiop0123456789thisstringisleng2200thisstringisleng2220qwertyuiop0123456789thisstringisleng2260qwertyuiop0123456789thisstringisleng2300thisstringisleng2320qwertyuiop0123456789thisstringisleng2360qwertyuiop0123456789thisstringisleng2400thisstringisleng2420qwertyuiop0123456789thisstringisleng2460qwertyuiop0123456789thisstringisleng2500thisstringisleng2520qwertyuiop0123456789thisstringisleng2560qwertyuiop0123456789thisstringisleng2600thisstringisleng2620qwertyuiop0123456789thisstringisleng2660qwertyuiop0123456789thisstringisleng2700thisstringisleng2720qwertyuiop0123456789thisstringisleng2760qwertyuiop0123456789thisstringisleng2800thisstringisleng2820qwertyuiop0123456789thisstringisleng2860qwertyuiop0123456789thisstringisleng2900thisstringisleng2920qwertyuiop0123456789thisstringisleng2960qwertyuiop0123456789thisstringisleng2000thisstringisleng3020qwertyuiop0123456789thisstringisleng3060qwertyuiop0123456789thisstringisleng3100thisstringisleng3120qwertyuiop0123456789thisstringisleng3160qwertyuiop0123456789thisstringisleng3200thisstringisleng3220qwertyuiop0123456789thisstringisleng3260qwertyuiop0123456789thisstringisleng3300thisstringisleng3320qwertyuiop0123456789thisstringisleng3360qwertyuiop0123456789thisstringisleng3400thisstringisleng3420qwertyuiop0123456789thisstringisleng3460qwertyuiop0123456789thisstringisleng3500thisstringisleng3520qwertyuiop0123456789thisstringisleng3560qwertyuiop0123456789thisstringisleng3600thisstringisleng3620qwertyuiop0123456789thisstringisleng3660qwertyuiop0123456789thisstringisleng3700thisstringisleng3720qwertyuiop0123456789thisstringisleng3760qwertyuiop0123456789thisstringisleng3800thisstringisleng3820qwertyuiop0123456789thisstringisleng3860qwertyuiop0123456789thisstringisleng3900thisstringisleng3920qwertyuiop0123456789thisstringisleng3960qwertyuiop0123456789thisstringisleng4000","foreignId":1106,"href":"resources/DMImplementationTest2.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":1107}]},{"id":"activity_3","title":"Data Model Implementation Test 3","parameters":"tc=DMI&act=3","foreignId":1108,"href":"resources/DMImplementationTest3.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":1109}]},{"id":"activity_4","title":"Data Model Implementation Test 4","parameters":"tc=DMI&act=4","foreignId":1110,"href":"resources/DMImplementationTest4.htm","sco":1,"hideLMSUI":[{"value":"suspendAll","foreignId":1111}]}],"base":""},"base":"./data/ilias3_scorm2004/lm_data/lm_167/","foreignId":1102,"id":"LMSTestPackage_DMI"}', '0', '167', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"MS-01","title":"LMS Test Content Package MS-01 ","sequencingId":"id2623293","foreignId":1154,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=MS-01&act=1","foreignId":1155,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1156},{"value":"previous","foreignId":1157},{"value":"suspendAll","foreignId":1158}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2623509","foreignId":1159,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=MS-01&act=3","sequencingId":"id2623667","foreignId":1160,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1161},{"value":"previous","foreignId":1162},{"value":"suspendAll","foreignId":1163}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=MS-01&act=4","foreignId":1164,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1165},{"value":"previous","foreignId":1166},{"value":"suspendAll","foreignId":1167}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=MS-01&act=5","foreignId":1168,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1169},{"value":"previous","foreignId":1170},{"value":"suspendAll","foreignId":1171}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=MS-01&act=6","foreignId":1172,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1173},{"value":"previous","foreignId":1174},{"value":"suspendAll","foreignId":1175}]}],"base":""},"sequencing":[{"id":"id2623667","rollupObjectiveSatisfied":false,"foreignId":1196},{"id":"id2623509","choice":false,"flow":true,"foreignId":1197,"rule":[{"type":"pre","action":"skip","foreignId":1198,"condition":[{"measureThreshold":0.4,"condition":"objectiveMeasureGreaterThan","foreignId":1199}]}]},{"id":"id2623293","choice":false,"flow":true,"foreignId":1200}],"base":"./data/ilias3_scorm2004/lm_data/lm_168/","foreignId":1153,"id":"LMSTestPackage_MS-01"}', '0', '168', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"MS-02","title":"LMS Test Content Package MS-02","sequencingId":"id2628852","foreignId":1202,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=MS-02&act=1","foreignId":1203,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1204},{"value":"previous","foreignId":1205},{"value":"suspendAll","foreignId":1206}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2630752","foreignId":1207,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=MS-02&act=3","sequencingId":"id2631163","foreignId":1208,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1209},{"value":"previous","foreignId":1210},{"value":"suspendAll","foreignId":1211}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=MS-02&act=4","sequencingId":"id2625279","foreignId":1212,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1213},{"value":"previous","foreignId":1214},{"value":"suspendAll","foreignId":1215}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=MS-02&act=5","sequencingId":"id2630740","foreignId":1216,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1217},{"value":"previous","foreignId":1218},{"value":"suspendAll","foreignId":1219}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=MS-02&act=6","foreignId":1220,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1221},{"value":"previous","foreignId":1222},{"value":"suspendAll","foreignId":1223}]}],"base":""},"sequencing":[{"id":"id2631163","objectiveMeasureWeight":0.75,"foreignId":1244},{"id":"id2625279","objectiveMeasureWeight":0.25,"foreignId":1245},{"id":"id2630740","objectiveMeasureWeight":0.25,"foreignId":1246},{"id":"id2630752","choice":false,"flow":true,"foreignId":1247,"rule":[{"type":"pre","action":"skip","foreignId":1248,"condition":[{"measureThreshold":0.6,"condition":"objectiveMeasureLessThan","foreignId":1249}]}]},{"id":"id2628852","choice":false,"flow":true,"foreignId":1250}],"base":"./data/ilias3_scorm2004/lm_data/lm_169/","foreignId":1201,"id":"LMSTestPackage_MS-02"}', '0', '169', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"MS-03","title":"LMS Test Content Package MS-03 ","sequencingId":"id3106767","foreignId":1252,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=MS-03&act=1","foreignId":1253,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1254},{"value":"previous","foreignId":1255},{"value":"suspendAll","foreignId":1256}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id3111817","foreignId":1257,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=MS-03&act=3","sequencingId":"id3078556","foreignId":1258,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1259},{"value":"previous","foreignId":1260},{"value":"suspendAll","foreignId":1261}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=MS-03&act=4","sequencingId":"id3078599","foreignId":1262,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1263},{"value":"previous","foreignId":1264},{"value":"suspendAll","foreignId":1265}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=MS-03&act=5","sequencingId":"id3111807","foreignId":1266,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1267},{"value":"previous","foreignId":1268},{"value":"suspendAll","foreignId":1269}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=MS-03&act=6","foreignId":1270,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1271},{"value":"previous","foreignId":1272},{"value":"suspendAll","foreignId":1273}]}],"base":""},"sequencing":[{"id":"id3078556","objectiveMeasureWeight":0.5,"foreignId":1294},{"id":"id3078599","objectiveMeasureWeight":0,"foreignId":1295},{"id":"id3111807","objectiveMeasureWeight":0.25,"foreignId":1296},{"id":"id3111817","choice":false,"flow":true,"foreignId":1297,"rule":[{"type":"pre","action":"skip","foreignId":1298,"condition":[{"measureThreshold":0.5,"condition":"objectiveMeasureGreaterThan","foreignId":1299}]}]},{"id":"id3106767","choice":false,"flow":true,"foreignId":1300}],"base":"./data/ilias3_scorm2004/lm_data/lm_170/","foreignId":1251,"id":"LMSTestPackage_MS-03"}', '0', '170', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"MS-04","title":"LMS Test Content Package MS-04 ","sequencingId":"id2835041","foreignId":1302,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=MS-04&act=1","foreignId":1303,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_2","title":"Activity 2","sequencingId":"id2836564","foreignId":1304,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=MS-04&act=3","foreignId":1305,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_4","title":"Activity 4","parameters":"tc=MS-04&act=4","sequencingId":"id2836477","foreignId":1306,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_5","title":"Activity 5","parameters":"tc=MS-04&act=5","sequencingId":"id2838200","foreignId":1307,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=MS-04&act=6","foreignId":1308,"href":"resources/SequencingTest.htm","sco":1}],"base":""},"sequencing":[{"id":"id2836477","tracked":false,"foreignId":1329},{"id":"id2838200","objectiveMeasureWeight":0.25,"foreignId":1330},{"id":"id2836564","choice":false,"flow":true,"foreignId":1331,"rule":[{"type":"pre","action":"skip","foreignId":1332,"condition":[{"measureThreshold":0.25,"condition":"objectiveMeasureLessThan","foreignId":1333}]}]},{"id":"id2835041","choice":false,"flow":true,"foreignId":1334}],"base":"./data/ilias3_scorm2004/lm_data/lm_171/","foreignId":1301,"id":"LMSTestPackage_MS-04"}', '0', '171', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"MS-05a","title":"LMS Test Content Package MS-05a ","sequencingId":"id2835031","foreignId":1336,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=MS-05a&act=1","foreignId":1337,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_2","title":"Activity 2","sequencingId":"id2832248","foreignId":1338,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=MS-05a&act=3","foreignId":1339,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_4","title":"Activity 4","parameters":"tc=MS-05a&act=4","foreignId":1340,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_5","title":"Activity 5","parameters":"tc=MS-05a&act=5","sequencingId":"id2821682","foreignId":1341,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=MS-05a&act=6","foreignId":1342,"href":"resources/SequencingTest.htm","sco":1}],"base":""},"sequencing":[{"id":"id2821682","objectiveMeasureWeight":0.25,"foreignId":1363},{"id":"id2832248","choice":false,"flow":true,"foreignId":1364,"rule":[{"type":"exit","action":"exit","foreignId":1365,"condition":[{"condition":"satisfied","foreignId":1366}]},{"type":"post","action":"previous","foreignId":1367,"condition":[{"condition":"satisfied","foreignId":1368}]}],"objective":[{"primary":true,"objectiveID":"","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":1369}]},{"id":"id2835031","choice":false,"flow":true,"foreignId":1370}],"base":"./data/ilias3_scorm2004/lm_data/lm_172/","foreignId":1335,"id":"LMSTestPackage_MS-05a"}', '0', '172', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"MS-05b","title":"LMS Test Content Package MS-05b","sequencingId":"id2683209","foreignId":1372,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=MS-05b&act=1","foreignId":1373,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1374},{"value":"previous","foreignId":1375},{"value":"suspendAll","foreignId":1376}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2689660","foreignId":1377,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=MS-05b&act=3","foreignId":1378,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1379},{"value":"previous","foreignId":1380},{"value":"suspendAll","foreignId":1381}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=MS-05b&act=4","foreignId":1382,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1383},{"value":"previous","foreignId":1384},{"value":"suspendAll","foreignId":1385}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=MS-05b&act=5","sequencingId":"id2689649","foreignId":1386,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1387},{"value":"previous","foreignId":1388},{"value":"suspendAll","foreignId":1389}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=MS-05b&act=6","foreignId":1390,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1391},{"value":"previous","foreignId":1392},{"value":"suspendAll","foreignId":1393}]}],"base":""},"sequencing":[{"id":"id2689649","objectiveMeasureWeight":0.25,"foreignId":1414},{"id":"id2689660","choice":false,"flow":true,"foreignId":1415,"rule":[{"type":"exit","action":"exit","foreignId":1416,"condition":[{"condition":"satisfied","foreignId":1417}]},{"type":"post","action":"previous","foreignId":1418,"condition":[{"condition":"satisfied","foreignId":1419}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":1420}]},{"id":"id2683209","choice":false,"flow":true,"foreignId":1421}],"base":"./data/ilias3_scorm2004/lm_data/lm_173/","foreignId":1371,"id":"LMSTestPackage_MS-05b"}', '0', '173', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"MS-06","title":"LMS Test Content Package MS-06 ","sequencingId":"id2686492","foreignId":1423,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=MS-06&act=1","foreignId":1424,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1425},{"value":"previous","foreignId":1426},{"value":"suspendAll","foreignId":1427}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2684182","foreignId":1428,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=MS-06&act=3","foreignId":1429,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1430},{"value":"previous","foreignId":1431},{"value":"suspendAll","foreignId":1432}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=MS-06&act=4","foreignId":1433,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1434},{"value":"previous","foreignId":1435},{"value":"suspendAll","foreignId":1436}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=MS-06&act=5","sequencingId":"id2692447","foreignId":1437,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1438},{"value":"previous","foreignId":1439},{"value":"suspendAll","foreignId":1440}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=MS-06&act=6","foreignId":1441,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1442},{"value":"previous","foreignId":1443},{"value":"suspendAll","foreignId":1444}]}],"base":""},"sequencing":[{"id":"id2692447","objectiveMeasureWeight":0.25,"foreignId":1465},{"id":"id2684182","choice":false,"flow":true,"measureSatisfactionIfActive":false,"foreignId":1466,"rule":[{"type":"pre","action":"skip","foreignId":1467,"condition":[{"condition":"satisfied","foreignId":1468}]},{"type":"exit","action":"exit","foreignId":1469,"condition":[{"condition":"satisfied","foreignId":1470}]},{"type":"post","action":"previous","foreignId":1471,"condition":[{"condition":"satisfied","foreignId":1472}]}],"objective":[{"primary":true,"objectiveID":"","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":1473}]},{"id":"id2686492","choice":false,"flow":true,"foreignId":1474}],"base":"./data/ilias3_scorm2004/lm_data/lm_174/","foreignId":1422,"id":"LMSTestPackage_MS-06"}', '0', '174', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-01a","title":"LMS Test Content Package OB-01a ","sequencingId":"id2684391","foreignId":1476,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-01a&act=1","sequencingId":"id2684515","foreignId":1477,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1478},{"value":"previous","foreignId":1479},{"value":"suspendAll","foreignId":1480}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-01a&act=2","sequencingId":"id2684181","foreignId":1481,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1482},{"value":"previous","foreignId":1483},{"value":"suspendAll","foreignId":1484}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-01a&act=3","foreignId":1485,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1486},{"value":"previous","foreignId":1487},{"value":"suspendAll","foreignId":1488}]}],"base":""},"sequencing":[{"id":"id2684515","foreignId":1509,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ_1","foreignId":1510,"mapInfo":[{"targetObjectiveID":"gObj-OB01a","writeSatisfiedStatus":true,"foreignId":1511}]}]},{"id":"id2684181","foreignId":1512,"rule":[{"type":"pre","action":"skip","foreignId":1513,"condition":[{"condition":"satisfied","foreignId":1514}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ_2","foreignId":1515,"mapInfo":[{"targetObjectiveID":"gObj-OB01a","foreignId":1516}]}]},{"id":"id2684391","choice":false,"flow":true,"foreignId":1517}],"base":"./data/ilias3_scorm2004/lm_data/lm_175/","foreignId":1475,"id":"LMSTestPackage_OB-01a"}', '0', '175', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-01b","title":"LMS Test Content Package OB-01b ","sequencingId":"id2835415","foreignId":1519,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-01b&act=1","sequencingId":"id2835613","foreignId":1520,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1521},{"value":"previous","foreignId":1522},{"value":"suspendAll","foreignId":1523}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-01b&act=2","sequencingId":"id2834911","foreignId":1524,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1525},{"value":"previous","foreignId":1526},{"value":"suspendAll","foreignId":1527}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-01b&act=3","foreignId":1528,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1529},{"value":"previous","foreignId":1530},{"value":"suspendAll","foreignId":1531}]}],"base":""},"sequencing":[{"id":"id2835613","foreignId":1552,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1553,"mapInfo":[{"targetObjectiveID":"gObj-OB01b","writeNormalizedMeasure":true,"foreignId":1554}]}]},{"id":"id2834911","foreignId":1555,"rule":[{"type":"pre","action":"skip","foreignId":1556,"condition":[{"measureThreshold":0.75,"condition":"objectiveMeasureGreaterThan","foreignId":1557}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1558,"mapInfo":[{"targetObjectiveID":"gObj-OB01b","foreignId":1559}]}]},{"id":"id2835415","choice":false,"flow":true,"foreignId":1560}],"base":"./data/ilias3_scorm2004/lm_data/lm_176/","foreignId":1518,"id":"LMSTestPackage_OB-01b"}', '0', '176', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-01c","title":"LMS Test Content Package OB-01c ","sequencingId":"id2679887","foreignId":1562,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-01c&act=1","sequencingId":"id2680072","foreignId":1563,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1564},{"value":"previous","foreignId":1565},{"value":"suspendAll","foreignId":1566}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-01c&act=2","sequencingId":"id2682456","foreignId":1567,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1568},{"value":"previous","foreignId":1569},{"value":"suspendAll","foreignId":1570}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-01c&act=3","foreignId":1571,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1572},{"value":"previous","foreignId":1573},{"value":"suspendAll","foreignId":1574}]}],"base":""},"sequencing":[{"id":"id2680072","foreignId":1595,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1596,"mapInfo":[{"targetObjectiveID":"gObj-OB01c","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":1597}]}]},{"id":"id2682456","foreignId":1598,"rule":[{"type":"pre","action":"skip","foreignId":1599,"condition":[{"condition":"satisfied","foreignId":1600}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.5,"foreignId":1601,"mapInfo":[{"targetObjectiveID":"gObj-OB01c","foreignId":1602}]}]},{"id":"id2679887","choice":false,"flow":true,"foreignId":1603}],"base":"./data/ilias3_scorm2004/lm_data/lm_177/","foreignId":1561,"id":"LMSTestPackage_OB-01c"}', '0', '177', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-02a","title":"LMS Test Content Package OB-02a ","sequencingId":"id2679756","foreignId":1605,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-02a&act=1","sequencingId":"id2680029","foreignId":1606,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1607},{"value":"previous","foreignId":1608},{"value":"suspendAll","foreignId":1609}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-02a&act=2","sequencingId":"id2680065","foreignId":1610,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1611},{"value":"previous","foreignId":1612},{"value":"suspendAll","foreignId":1613}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-02a&act=3","foreignId":1614,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1615},{"value":"previous","foreignId":1616},{"value":"suspendAll","foreignId":1617}]}],"base":""},"sequencing":[{"id":"id2680029","foreignId":1638,"objective":[{"primary":true,"objectiveID":"","foreignId":1639},{"primary":false,"objectiveID":"obj1","foreignId":1640,"mapInfo":[{"targetObjectiveID":"gObj-OB02a","writeSatisfiedStatus":true,"foreignId":1641}]}]},{"id":"id2680065","foreignId":1642,"rule":[{"type":"pre","action":"skip","foreignId":1643,"condition":[{"referencedObjective":"obj1","operator":"not","condition":"satisfied","foreignId":1644}]}],"objective":[{"primary":true,"objectiveID":"","foreignId":1645},{"primary":false,"objectiveID":"obj1","foreignId":1646,"mapInfo":[{"targetObjectiveID":"gObj-OB02a","foreignId":1647}]}]},{"id":"id2679756","choice":false,"flow":true,"foreignId":1648}],"base":"./data/ilias3_scorm2004/lm_data/lm_178/","foreignId":1604,"id":"LMSTestPackage_OB-02a"}', '0', '178', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-02b","title":"LMS Test Content Package OB-02b ","sequencingId":"id2678483","foreignId":1650,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-02b&act=1","sequencingId":"id2678657","foreignId":1651,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-02b&act=2","sequencingId":"id2678572","foreignId":1652,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-02b&act=3","foreignId":1653,"href":"resources/SequencingTest.htm","sco":1}],"base":""},"sequencing":[{"id":"id2678657","foreignId":1674,"objective":[{"primary":true,"objectiveID":"","foreignId":1675},{"primary":false,"objectiveID":"obj1","foreignId":1676,"mapInfo":[{"targetObjectiveID":"gObj-OB02b","writeNormalizedMeasure":true,"foreignId":1677}]}]},{"id":"id2678572","foreignId":1678,"rule":[{"type":"pre","action":"skip","foreignId":1679,"condition":[{"referencedObjective":"obj1","measureThreshold":0.25,"condition":"objectiveMeasureLessThan","foreignId":1680}]}],"objective":[{"primary":true,"objectiveID":"","foreignId":1681},{"primary":false,"objectiveID":"obj1","foreignId":1682,"mapInfo":[{"targetObjectiveID":"gObj-OB02b","foreignId":1683}]}]},{"id":"id2678483","choice":false,"flow":true,"foreignId":1684}],"base":"./data/ilias3_scorm2004/lm_data/lm_179/","foreignId":1649,"id":"LMSTestPackage_OB-02b"}', '0', '179', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-03a","title":"LMS Test Content Package OB-03a","sequencingId":"id2816557","foreignId":1686,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-03a&act=1","sequencingId":"id2836190","foreignId":1687,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1688},{"value":"previous","foreignId":1689},{"value":"suspendAll","foreignId":1690}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-03a&act=2","sequencingId":"id2832296","foreignId":1691,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1692},{"value":"previous","foreignId":1693},{"value":"suspendAll","foreignId":1694}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-03a&act=3","sequencingId":"id2821209","foreignId":1695,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1696},{"value":"previous","foreignId":1697},{"value":"suspendAll","foreignId":1698}]}],"base":""},"sequencing":[{"id":"id2836190","foreignId":1719,"objective":[{"primary":true,"objectiveID":"","foreignId":1720},{"primary":false,"objectiveID":"obj1","foreignId":1721,"mapInfo":[{"targetObjectiveID":"gObj-OB03-1","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":1722}]}]},{"id":"id2832296","foreignId":1723,"objective":[{"primary":true,"objectiveID":"","foreignId":1724},{"primary":false,"objectiveID":"obj1","foreignId":1725,"mapInfo":[{"targetObjectiveID":"gObj-OB03-2","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":1726}]}]},{"id":"id2821209","foreignId":1727,"objective":[{"primary":true,"objectiveID":"","foreignId":1728},{"primary":false,"objectiveID":"obj1","foreignId":1729,"mapInfo":[{"targetObjectiveID":"gObj-OB03-3","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":1730}]}]},{"id":"id2816557","choice":false,"flow":true,"foreignId":1731}],"base":"./data/ilias3_scorm2004/lm_data/lm_180/","foreignId":1685,"id":"LMSTestPackage_OB-03a"}', '0', '180', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-03b","title":"LMS Test Content Package OB-03b","sequencingId":"id3028734","foreignId":1733,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-03b&act=1","sequencingId":"id3020934","foreignId":1734,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1735},{"value":"previous","foreignId":1736},{"value":"suspendAll","foreignId":1737}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id3022408","foreignId":1738,"item":[{"id":"activity_3","title":"Activity 3","sequencingId":"id3074114","foreignId":1739,"item":[{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-03b&act=4","foreignId":1740,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1741},{"value":"previous","foreignId":1742},{"value":"suspendAll","foreignId":1743}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=OB-03b&act=5","sequencingId":"id3028833","foreignId":1744,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1745},{"value":"previous","foreignId":1746},{"value":"suspendAll","foreignId":1747}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=OB-03b&act=6","foreignId":1748,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1749},{"value":"previous","foreignId":1750},{"value":"suspendAll","foreignId":1751}]}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=OB-03b&act=7","sequencingId":"id3041086","foreignId":1752,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1753},{"value":"previous","foreignId":1754},{"value":"suspendAll","foreignId":1755}]},{"id":"activity_8","title":"Activity 8","parameters":"tc=OB-03b&act=8","sequencingId":"id3094598","foreignId":1756,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1757},{"value":"previous","foreignId":1758},{"value":"suspendAll","foreignId":1759}]}]},{"id":"activity_9","title":"Activity 9","parameters":"tc=OB-03b&act=9","foreignId":1760,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1761},{"value":"previous","foreignId":1762},{"value":"suspendAll","foreignId":1763}]}],"base":""},"sequencing":[{"id":"id3020934","foreignId":1784,"rule":[{"type":"pre","action":"skip","foreignId":1785,"condition":[{"operator":"not","condition":"satisfied","foreignId":1786}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1787,"mapInfo":[{"targetObjectiveID":"gObj-OB03-2","foreignId":1788}]}]},{"id":"id3028833","foreignId":1789,"rule":[{"type":"pre","action":"skip","foreignId":1790,"condition":[{"condition":"satisfied","foreignId":1791}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1792,"mapInfo":[{"targetObjectiveID":"gObj-OB03-1","foreignId":1793}]}]},{"id":"id3074114","flow":true,"foreignId":1794,"rule":[{"type":"pre","action":"skip","foreignId":1795,"condition":[{"condition":"satisfied","foreignId":1796}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":1797,"mapInfo":[{"targetObjectiveID":"gObj-OB03-3","readSatisfiedStatus":false,"writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":1798}]}]},{"id":"id3041086","foreignId":1799,"rule":[{"type":"pre","action":"skip","foreignId":1800,"condition":[{"condition":"satisfied","foreignId":1801}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1802,"mapInfo":[{"targetObjectiveID":"gObj-OB03-3","foreignId":1803}]}]},{"id":"id3094598","foreignId":1804,"rule":[{"type":"pre","action":"skip","foreignId":1805,"condition":[{"condition":"satisfied","foreignId":1806}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1807,"mapInfo":[{"targetObjectiveID":"gObj-OB03-3","foreignId":1808}]}]},{"id":"id3022408","choice":false,"flow":true,"foreignId":1809},{"id":"id3028734","choice":false,"flow":true,"foreignId":1810}],"base":"./data/ilias3_scorm2004/lm_data/lm_181/","foreignId":1732,"id":"LMSTestPackage_OB-03b"}', '0', '181', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-03c","title":"LMS Test Content Package OB-03c ","sequencingId":"id2618316","foreignId":1812,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-03c&act=1","sequencingId":"id2619264","foreignId":1813,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1814},{"value":"previous","foreignId":1815},{"value":"suspendAll","foreignId":1816}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2618402","foreignId":1817,"item":[{"id":"activity_3","title":"Activity 3","sequencingId":"id2618856","foreignId":1818,"item":[{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-03c&act=4","foreignId":1819,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1820},{"value":"previous","foreignId":1821},{"value":"suspendAll","foreignId":1822}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=OB-03c&act=5","sequencingId":"id2619009","foreignId":1823,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1824},{"value":"previous","foreignId":1825},{"value":"suspendAll","foreignId":1826}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=OB-03c&act=6","foreignId":1827,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1828},{"value":"previous","foreignId":1829},{"value":"suspendAll","foreignId":1830}]}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=OB-03c&act=7","sequencingId":"id2618648","foreignId":1831,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1832},{"value":"previous","foreignId":1833},{"value":"suspendAll","foreignId":1834}]},{"id":"activity_8","title":"Activity 8","parameters":"tc=OB-03c&act=8","sequencingId":"id2618531","foreignId":1835,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1836},{"value":"previous","foreignId":1837},{"value":"suspendAll","foreignId":1838}]}]},{"id":"activity_9","title":"Activity 9","parameters":"tc=OB-03c&act=9","foreignId":1839,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1840},{"value":"previous","foreignId":1841},{"value":"suspendAll","foreignId":1842}]}],"base":""},"sequencing":[{"id":"id2619264","foreignId":1863,"rule":[{"type":"pre","action":"skip","foreignId":1864,"condition":[{"operator":"not","condition":"objectiveStatusKnown","foreignId":1865}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1866,"mapInfo":[{"targetObjectiveID":"gObj-OB03-3","foreignId":1867}]}]},{"id":"id2619009","foreignId":1868,"rule":[{"type":"pre","action":"skip","foreignId":1869,"condition":[{"condition":"satisfied","foreignId":1870}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1871,"mapInfo":[{"targetObjectiveID":"gObj-OB03-1","foreignId":1872}]}]},{"id":"id2618856","choice":false,"flow":true,"foreignId":1873,"rule":[{"type":"pre","action":"skip","foreignId":1874,"condition":[{"condition":"satisfied","foreignId":1875}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":1876,"mapInfo":[{"targetObjectiveID":"gObj-OB03-3","readSatisfiedStatus":false,"writeSatisfiedStatus":true,"foreignId":1877}]}]},{"id":"id2618648","foreignId":1878,"rule":[{"type":"pre","action":"skip","foreignId":1879,"condition":[{"operator":"not","condition":"satisfied","foreignId":1880}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1881,"mapInfo":[{"targetObjectiveID":"gObj-OB03-2","foreignId":1882}]}]},{"id":"id2618531","foreignId":1883,"rule":[{"type":"pre","action":"skip","foreignId":1884,"condition":[{"operator":"not","condition":"satisfied","foreignId":1885},{"referencedObjective":"obj1","operator":"not","condition":"objectiveStatusKnown","foreignId":1886}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1887,"mapInfo":[{"targetObjectiveID":"gObj-OB03-2","foreignId":1888}]},{"primary":false,"objectiveID":"obj1","foreignId":1889,"mapInfo":[{"targetObjectiveID":"gObj-OB03-3","foreignId":1890}]}]},{"id":"id2618402","choice":false,"flow":true,"foreignId":1891},{"id":"id2618316","choice":false,"flow":true,"foreignId":1892}],"base":"./data/ilias3_scorm2004/lm_data/lm_182/","foreignId":1811,"id":"LMSTestPackage_OB-03c"}', '0', '182', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-04","title":"LMS Test Content Package OB-04 ","sequencingId":"id2836318","foreignId":1894,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-04&act=1","sequencingId":"id2691977","foreignId":1895,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1896},{"value":"previous","foreignId":1897},{"value":"suspendAll","foreignId":1898}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-04&act=2","sequencingId":"id2834923","foreignId":1899,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1900},{"value":"previous","foreignId":1901},{"value":"suspendAll","foreignId":1902}]},{"id":"activity_3","title":"Activity 3","sequencingId":"id2813658","foreignId":1903,"item":[{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-04&act=4","sequencingId":"id2849373","foreignId":1904,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1905},{"value":"previous","foreignId":1906},{"value":"suspendAll","foreignId":1907}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=OB-04&act=5","sequencingId":"id2843005","foreignId":1908,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1909},{"value":"previous","foreignId":1910},{"value":"suspendAll","foreignId":1911}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=OB-04&act=6","sequencingId":"id2813760","foreignId":1912,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1913},{"value":"previous","foreignId":1914},{"value":"suspendAll","foreignId":1915}]}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=OB-04&act=7","foreignId":1916,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1917},{"value":"previous","foreignId":1918},{"value":"suspendAll","foreignId":1919}]}],"base":""},"sequencing":[{"id":"id2691977","foreignId":1940,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1941,"mapInfo":[{"targetObjectiveID":"gObj-OB04-1","readSatisfiedStatus":false,"readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":1942},{"targetObjectiveID":"gObj-OB04-3","readSatisfiedStatus":false,"readNormalizedMeasure":false,"writeNormalizedMeasure":true,"foreignId":1943}]}]},{"id":"id2834923","foreignId":1944,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1945,"mapInfo":[{"targetObjectiveID":"gObj-OB04-2","writeSatisfiedStatus":true,"foreignId":1946}]}]},{"id":"id2849373","foreignId":1947,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1948,"mapInfo":[{"targetObjectiveID":"gObj-OB04-1","foreignId":1949}]}]},{"id":"id2843005","foreignId":1950,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":1951,"mapInfo":[{"targetObjectiveID":"gObj-OB04-2","foreignId":1952}]}]},{"id":"id2813760","foreignId":1953,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":-0.75,"foreignId":1954,"mapInfo":[{"targetObjectiveID":"gObj-OB04-3","foreignId":1955}]}]},{"id":"id2813658","choice":false,"flow":true,"foreignId":1956,"rule":[{"type":"pre","action":"skip","foreignId":1957,"condition":[{"condition":"completed","foreignId":1958}]},{"type":"rollup","action":"completed","foreignId":1959,"condition":[{"condition":"satisfied","foreignId":1960}]}]},{"id":"id2836318","choice":false,"flow":true,"foreignId":1961}],"base":"./data/ilias3_scorm2004/lm_data/lm_183/","foreignId":1893,"id":"LMSTestPackage_OB-04"}', '0', '183', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-05a","title":"LMS Test Content Package OB-05a ","sequencingId":"id2833703","foreignId":1963,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-05a&act=1","sequencingId":"id2836202","foreignId":1964,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1965},{"value":"previous","foreignId":1966},{"value":"suspendAll","foreignId":1967}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-05a&act=2","sequencingId":"id2834977","foreignId":1968,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1969},{"value":"previous","foreignId":1970},{"value":"suspendAll","foreignId":1971}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-05a&act=3","sequencingId":"id2835142","foreignId":1972,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1973},{"value":"previous","foreignId":1974},{"value":"suspendAll","foreignId":1975}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-05a&act=4","foreignId":1976,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":1977},{"value":"previous","foreignId":1978},{"value":"suspendAll","foreignId":1979}]}],"base":""},"sequencing":[{"id":"id2836202","foreignId":2000,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"foreignId":2001,"mapInfo":[{"targetObjectiveID":"gObj-OB05a","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":2002}]}]},{"id":"id2834977","foreignId":2003,"rule":[{"type":"pre","action":"skip","foreignId":2004,"condition":[{"condition":"satisfied","foreignId":2005}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.4,"foreignId":2006,"mapInfo":[{"targetObjectiveID":"gObj-OB05a","foreignId":2007}]}]},{"id":"id2835142","foreignId":2008,"rule":[{"type":"pre","action":"skip","foreignId":2009,"condition":[{"operator":"not","condition":"satisfied","foreignId":2010}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","minNormalizedMeasure":0.1,"foreignId":2011,"mapInfo":[{"targetObjectiveID":"gObj-OB05a","foreignId":2012}]}]},{"id":"id2833703","choice":false,"flow":true,"foreignId":2013}],"base":"./data/ilias3_scorm2004/lm_data/lm_184/","foreignId":1962,"id":"LMSTestPackage_OB-05a"}', '0', '184', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-05b","title":"LMS Test Content Package OB-05b","sequencingId":"id3024934","foreignId":2015,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-05b&act=1","sequencingId":"id3024654","foreignId":2016,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2017},{"value":"previous","foreignId":2018},{"value":"suspendAll","foreignId":2019}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-05b&act=2","sequencingId":"id3074260","foreignId":2020,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2021},{"value":"previous","foreignId":2022},{"value":"suspendAll","foreignId":2023}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-05b&act=3","sequencingId":"id3041974","foreignId":2024,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2025},{"value":"previous","foreignId":2026},{"value":"suspendAll","foreignId":2027}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-05b&act=4","foreignId":2028,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2029},{"value":"previous","foreignId":2030},{"value":"suspendAll","foreignId":2031}]}],"base":""},"sequencing":[{"id":"id3024654","foreignId":2052,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2053,"mapInfo":[{"targetObjectiveID":"gObj-OB05b","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":2054}]}]},{"id":"id3074260","foreignId":2055,"rule":[{"type":"pre","action":"skip","foreignId":2056,"condition":[{"operator":"not","condition":"objectiveStatusKnown","foreignId":2057}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.75,"foreignId":2058,"mapInfo":[{"targetObjectiveID":"gObj-OB05b","foreignId":2059}]}]},{"id":"id3041974","foreignId":2060,"rule":[{"type":"pre","action":"skip","foreignId":2061,"condition":[{"condition":"satisfied","foreignId":2062}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","minNormalizedMeasure":0.1,"foreignId":2063,"mapInfo":[{"targetObjectiveID":"gObj-OB05b","foreignId":2064}]}]},{"id":"id3024934","choice":false,"flow":true,"foreignId":2065}],"base":"./data/ilias3_scorm2004/lm_data/lm_185/","foreignId":2014,"id":"LMSTestPackage_OB-05b"}', '0', '185', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-05c","title":"LMS Test Content Package OB-05c ","sequencingId":"id2680434","foreignId":2067,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-05c&act=1","sequencingId":"id2676157","foreignId":2068,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2069},{"value":"previous","foreignId":2070},{"value":"suspendAll","foreignId":2071}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-05c&act=2","sequencingId":"id2676107","foreignId":2072,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2073},{"value":"previous","foreignId":2074},{"value":"suspendAll","foreignId":2075}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-05c&act=3","foreignId":2076,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2077},{"value":"previous","foreignId":2078},{"value":"suspendAll","foreignId":2079}]}],"base":""},"sequencing":[{"id":"id2676157","foreignId":2100,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0,"foreignId":2101,"mapInfo":[{"targetObjectiveID":"gObj-OB05c","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":2102}]}]},{"id":"id2676107","foreignId":2103,"rule":[{"type":"pre","action":"skip","foreignId":2104,"condition":[{"operator":"not","condition":"objectiveStatusKnown","foreignId":2105}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2106,"mapInfo":[{"targetObjectiveID":"gObj-OB05c","foreignId":2107}]}]},{"id":"id2680434","choice":false,"flow":true,"foreignId":2108}],"base":"./data/ilias3_scorm2004/lm_data/lm_186/","foreignId":2066,"id":"LMSTestPackage_OB-05c"}', '0', '186', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-06","title":"LMS Test Content Package OB-06 ","sequencingId":"id3042076","foreignId":2110,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-06&act=1","sequencingId":"id3025741","foreignId":2111,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2112},{"value":"previous","foreignId":2113},{"value":"suspendAll","foreignId":2114}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id3082989","foreignId":2115,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-06&act=3","foreignId":2116,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2117},{"value":"previous","foreignId":2118},{"value":"suspendAll","foreignId":2119}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-06&act=4","foreignId":2120,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2121},{"value":"previous","foreignId":2122},{"value":"suspendAll","foreignId":2123}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=OB-06&act=5","foreignId":2124,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2125},{"value":"previous","foreignId":2126},{"value":"suspendAll","foreignId":2127}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=OB-06&act=6","foreignId":2128,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2129},{"value":"previous","foreignId":2130},{"value":"suspendAll","foreignId":2131}]}],"base":""},"sequencing":[{"id":"id3025741","foreignId":2152,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2153,"mapInfo":[{"targetObjectiveID":"gObj-OB06","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":2154}]}]},{"id":"id3082989","choice":false,"flow":true,"tracked":false,"foreignId":2155,"rule":[{"type":"pre","action":"skip","foreignId":2156,"condition":[{"condition":"objectiveStatusKnown","foreignId":2157},{"condition":"objectiveMeasureKnown","foreignId":2158}]},{"type":"pre","conditionCombination":"any","action":"skip","foreignId":2159,"condition":[{"condition":"objectiveStatusKnown","foreignId":2160},{"condition":"objectiveMeasureKnown","foreignId":2161}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2162,"mapInfo":[{"targetObjectiveID":"gObj-OB06","foreignId":2163}]}]},{"id":"id3042076","choice":false,"flow":true,"foreignId":2164}],"base":"./data/ilias3_scorm2004/lm_data/lm_187/","foreignId":2109,"id":"LMSTestPackage_OB-06"}', '0', '187', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-07a","title":"LMS Test Content Package OB-07a","sequencingId":"id2685286","foreignId":2166,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-07a&act=1","sequencingId":"id2685266","foreignId":2167,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2168},{"value":"previous","foreignId":2169},{"value":"suspendAll","foreignId":2170}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-07a&act=2","sequencingId":"id2685192","foreignId":2171,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2172},{"value":"previous","foreignId":2173},{"value":"suspendAll","foreignId":2174}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-07a&act=3","sequencingId":"id2681135","foreignId":2175,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2176},{"value":"previous","foreignId":2177},{"value":"suspendAll","foreignId":2178}]}],"base":""},"sequencing":[{"id":"id2685266","foreignId":2199,"objective":[{"primary":true,"objectiveID":"obj1","foreignId":2200,"mapInfo":[{"targetObjectiveID":"gObj-OB07a","writeSatisfiedStatus":true,"foreignId":2201}]}]},{"id":"id2685192","foreignId":2202,"rule":[{"type":"pre","action":"skip","foreignId":2203,"condition":[{"referencedObjective":"obj1","condition":"objectiveStatusKnown","foreignId":2204},{"referencedObjective":"obj1","operator":"not","condition":"satisfied","foreignId":2205}]}],"objective":[{"primary":true,"objectiveID":"obj1","foreignId":2206,"mapInfo":[{"targetObjectiveID":"gObj-OB07a","foreignId":2207}]}]},{"id":"id2681135","foreignId":2208,"objective":[{"primary":true,"objectiveID":"","foreignId":2209},{"primary":false,"objectiveID":"obj1","foreignId":2210,"mapInfo":[{"targetObjectiveID":"gObj-OB07a","foreignId":2211}]}]},{"id":"id2685286","choice":false,"flow":true,"foreignId":2212}],"base":"./data/ilias3_scorm2004/lm_data/lm_188/","foreignId":2165,"id":"LMSTestPackage_OB-07a"}', '0', '188', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-07b","title":"LMS Test Content Package OB-07b","sequencingId":"id3099498","foreignId":2214,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-07b&act=1","sequencingId":"id3082998","foreignId":2215,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2216},{"value":"previous","foreignId":2217},{"value":"suspendAll","foreignId":2218}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-07b&act=2","sequencingId":"id3020248","foreignId":2219,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2220},{"value":"previous","foreignId":2221},{"value":"suspendAll","foreignId":2222}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-07b&act=3","sequencingId":"id3024613","foreignId":2223,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2224},{"value":"previous","foreignId":2225},{"value":"suspendAll","foreignId":2226}]}],"base":""},"sequencing":[{"id":"id3082998","foreignId":2247,"objective":[{"primary":true,"objectiveID":"obj1","foreignId":2248,"mapInfo":[{"targetObjectiveID":"gObj-OB07b","writeNormalizedMeasure":true,"foreignId":2249}]}]},{"id":"id3020248","foreignId":2250,"rule":[{"type":"pre","action":"skip","foreignId":2251,"condition":[{"referencedObjective":"obj1","measureThreshold":0.75,"condition":"objectiveMeasureLessThan","foreignId":2252}]}],"objective":[{"primary":true,"objectiveID":"obj1","foreignId":2253,"mapInfo":[{"targetObjectiveID":"gObj-OB07b","foreignId":2254}]}]},{"id":"id3024613","foreignId":2255,"objective":[{"primary":true,"objectiveID":"","foreignId":2256},{"primary":false,"objectiveID":"obj1","foreignId":2257,"mapInfo":[{"targetObjectiveID":"gObj-OB07b","foreignId":2258}]}]},{"id":"id3099498","choice":false,"flow":true,"foreignId":2259}],"base":"./data/ilias3_scorm2004/lm_data/lm_189/","foreignId":2213,"id":"LMSTestPackage_OB-07b"}', '0', '189', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-08a","title":"LMS Test Content Package OB-08a","sequencingId":"id3018439","foreignId":2261,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-08a&act=1","sequencingId":"id3059082","foreignId":2262,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2263},{"value":"previous","foreignId":2264},{"value":"suspendAll","foreignId":2265}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-08a&act=2","sequencingId":"id3024255","foreignId":2266,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2267},{"value":"previous","foreignId":2268},{"value":"suspendAll","foreignId":2269}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-08a&act=3","sequencingId":"id3027207","foreignId":2270,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2271},{"value":"previous","foreignId":2272},{"value":"suspendAll","foreignId":2273}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-08a&act=4","sequencingId":"id3024933","foreignId":2274,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2275},{"value":"previous","foreignId":2276},{"value":"suspendAll","foreignId":2277}]}],"base":""},"sequencing":[{"id":"id3059082","foreignId":2298,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2299,"mapInfo":[{"targetObjectiveID":"gObj-OB08","writeNormalizedMeasure":true,"foreignId":2300}]}]},{"id":"id3024255","foreignId":2301,"rule":[{"type":"pre","action":"skip","foreignId":2302,"condition":[{"measureThreshold":0,"condition":"objectiveMeasureGreaterThan","foreignId":2303}]},{"type":"post","action":"exitParent","foreignId":2304,"condition":[{"condition":"always","foreignId":2305}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2306,"mapInfo":[{"targetObjectiveID":"gObj-OB08","foreignId":2307}]}]},{"id":"id3027207","foreignId":2308,"rule":[{"type":"pre","conditionCombination":"any","action":"skip","foreignId":2309,"condition":[{"measureThreshold":0.5,"condition":"objectiveMeasureLessThan","foreignId":2310},{"measureThreshold":0.5,"condition":"objectiveMeasureGreaterThan","foreignId":2311}]},{"type":"post","action":"exitParent","foreignId":2312,"condition":[{"condition":"always","foreignId":2313}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2314,"mapInfo":[{"targetObjectiveID":"gObj-OB08","foreignId":2315}]}]},{"id":"id3024933","foreignId":2316,"rule":[{"type":"pre","action":"skip","foreignId":2317,"condition":[{"measureThreshold":1,"condition":"objectiveMeasureLessThan","foreignId":2318}]},{"type":"post","action":"exitParent","foreignId":2319,"condition":[{"condition":"always","foreignId":2320}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2321,"mapInfo":[{"targetObjectiveID":"gObj-OB08","foreignId":2322}]}]},{"id":"id3018439","choice":false,"flow":true,"foreignId":2323}],"base":"./data/ilias3_scorm2004/lm_data/lm_190/","foreignId":2260,"id":"LMSTestPackage_OB-08a"}', '0', '190', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-08b","title":"LMS Test Content Package OB-08b","sequencingId":"id2813752","foreignId":2325,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-08b&act=1","sequencingId":"id2813980","foreignId":2326,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2327},{"value":"previous","foreignId":2328},{"value":"suspendAll","foreignId":2329}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-08b&act=2","sequencingId":"id2836377","foreignId":2330,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2331},{"value":"previous","foreignId":2332},{"value":"suspendAll","foreignId":2333}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-08b&act=3","sequencingId":"id2821677","foreignId":2334,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2335},{"value":"previous","foreignId":2336},{"value":"suspendAll","foreignId":2337}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-08b&act=4","sequencingId":"id2847475","foreignId":2338,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2339},{"value":"previous","foreignId":2340},{"value":"suspendAll","foreignId":2341}]}],"base":""},"sequencing":[{"id":"id2813980","foreignId":2362,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2363,"mapInfo":[{"targetObjectiveID":"gObj-OB08","writeNormalizedMeasure":true,"foreignId":2364}]}]},{"id":"id2836377","foreignId":2365,"rule":[{"type":"pre","action":"skip","foreignId":2366,"condition":[{"measureThreshold":0,"condition":"objectiveMeasureGreaterThan","foreignId":2367}]},{"type":"post","action":"exitParent","foreignId":2368,"condition":[{"condition":"always","foreignId":2369}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2370,"mapInfo":[{"targetObjectiveID":"gObj-OB08","foreignId":2371}]}]},{"id":"id2821677","foreignId":2372,"rule":[{"type":"pre","conditionCombination":"any","action":"skip","foreignId":2373,"condition":[{"measureThreshold":0.5,"condition":"objectiveMeasureLessThan","foreignId":2374},{"measureThreshold":0.5,"condition":"objectiveMeasureGreaterThan","foreignId":2375}]},{"type":"post","action":"exitParent","foreignId":2376,"condition":[{"condition":"always","foreignId":2377}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2378,"mapInfo":[{"targetObjectiveID":"gObj-OB08","foreignId":2379}]}]},{"id":"id2847475","foreignId":2380,"rule":[{"type":"pre","action":"skip","foreignId":2381,"condition":[{"measureThreshold":1,"condition":"objectiveMeasureLessThan","foreignId":2382}]},{"type":"post","action":"exitParent","foreignId":2383,"condition":[{"condition":"always","foreignId":2384}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2385,"mapInfo":[{"targetObjectiveID":"gObj-OB08","foreignId":2386}]}]},{"id":"id2813752","choice":false,"flow":true,"foreignId":2387}],"base":"./data/ilias3_scorm2004/lm_data/lm_191/","foreignId":2324,"id":"LMSTestPackage_OB-08b"}', '0', '191', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-09a","title":"LMS Test Content Package OB-09a","sequencingId":"id2835854","foreignId":2389,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-09a&act=1","sequencingId":"id2833749","foreignId":2390,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2391},{"value":"previous","foreignId":2392},{"value":"suspendAll","foreignId":2393}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-09a&act=2","sequencingId":"id2836002","foreignId":2394,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2395},{"value":"previous","foreignId":2396},{"value":"suspendAll","foreignId":2397}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-09a&act=3","sequencingId":"id2836376","foreignId":2398,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2399},{"value":"previous","foreignId":2400},{"value":"suspendAll","foreignId":2401}]}],"base":""},"sequencing":[{"id":"id2833749","rollupObjectiveSatisfied":false,"rollupProgressCompletion":false,"foreignId":2422,"rule":[{"type":"pre","action":"skip","foreignId":2423,"condition":[{"referencedObjective":"obj1","condition":"satisfied","foreignId":2424}]}],"objective":[{"primary":true,"objectiveID":"obj1","foreignId":2425,"mapInfo":[{"targetObjectiveID":"gObj-OB09-obj1","foreignId":2426}]}]},{"id":"id2836002","rollupObjectiveSatisfied":false,"rollupProgressCompletion":false,"foreignId":2427,"rule":[{"type":"pre","action":"skip","foreignId":2428,"condition":[{"referencedObjective":"obj2","condition":"satisfied","foreignId":2429}]}],"objective":[{"primary":true,"objectiveID":"obj2","foreignId":2430,"mapInfo":[{"targetObjectiveID":"gObj-OB09-obj2","foreignId":2431}]}]},{"id":"id2836376","foreignId":2432,"objective":[{"primary":true,"objectiveID":"","foreignId":2433},{"primary":false,"objectiveID":"obj1","foreignId":2434,"mapInfo":[{"targetObjectiveID":"gObj-OB09-obj1","writeSatisfiedStatus":true,"foreignId":2435}]},{"primary":false,"objectiveID":"obj2","foreignId":2436,"mapInfo":[{"targetObjectiveID":"gObj-OB09-obj2","writeSatisfiedStatus":true,"foreignId":2437}]}]},{"id":"id2835854","choice":false,"flow":true,"foreignId":2438,"rule":[{"type":"exit","action":"exit","foreignId":2439,"condition":[{"condition":"completed","foreignId":2440}]},{"type":"post","action":"retry","foreignId":2441,"condition":[{"operator":"not","condition":"satisfied","foreignId":2442}]}]}],"base":"./data/ilias3_scorm2004/lm_data/lm_192/","foreignId":2388,"id":"LMSTestPackage_OB-09a"}', '0', '192', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-09b","title":"LMS Test Content Package OB-09b","sequencingId":"id2688473","foreignId":2444,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-09b&act=1","sequencingId":"id2684985","foreignId":2445,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2446},{"value":"previous","foreignId":2447},{"value":"suspendAll","foreignId":2448}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-09b&act=2","sequencingId":"id2690601","foreignId":2449,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2450},{"value":"previous","foreignId":2451},{"value":"suspendAll","foreignId":2452}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-09b&act=3","sequencingId":"id2689989","foreignId":2453,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2454},{"value":"previous","foreignId":2455},{"value":"suspendAll","foreignId":2456}]}],"base":""},"sequencing":[{"id":"id2684985","rollupObjectiveSatisfied":false,"rollupProgressCompletion":false,"foreignId":2477,"rule":[{"type":"pre","action":"skip","foreignId":2478,"condition":[{"referencedObjective":"obj1","condition":"satisfied","foreignId":2479}]}],"objective":[{"primary":true,"objectiveID":"obj1","foreignId":2480,"mapInfo":[{"targetObjectiveID":"gObj-OB09-obj1","foreignId":2481}]}]},{"id":"id2690601","rollupObjectiveSatisfied":false,"rollupProgressCompletion":false,"foreignId":2482,"rule":[{"type":"pre","action":"skip","foreignId":2483,"condition":[{"referencedObjective":"obj2","condition":"satisfied","foreignId":2484}]}],"objective":[{"primary":true,"objectiveID":"obj2","foreignId":2485,"mapInfo":[{"targetObjectiveID":"gObj-OB09-obj2","foreignId":2486}]}]},{"id":"id2689989","foreignId":2487,"objective":[{"primary":true,"objectiveID":"","foreignId":2488},{"primary":false,"objectiveID":"obj1","foreignId":2489,"mapInfo":[{"targetObjectiveID":"gObj-OB09-obj1","writeSatisfiedStatus":true,"foreignId":2490}]},{"primary":false,"objectiveID":"obj2","foreignId":2491,"mapInfo":[{"targetObjectiveID":"gObj-OB09-obj2","writeSatisfiedStatus":true,"foreignId":2492}]}]},{"id":"id2688473","choice":false,"flow":true,"foreignId":2493,"rule":[{"type":"exit","action":"exit","foreignId":2494,"condition":[{"condition":"completed","foreignId":2495}]},{"type":"post","action":"retry","foreignId":2496,"condition":[{"operator":"not","condition":"satisfied","foreignId":2497}]}]}],"base":"./data/ilias3_scorm2004/lm_data/lm_193/","foreignId":2443,"id":"LMSTestPackage_OB-09b"}', '0', '193', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-10a","title":"LMS Test Content Package OB-10a","sequencingId":"id2623394","foreignId":2499,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-10a&act=1","sequencingId":"id2623602","foreignId":2500,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-10a&act=2","sequencingId":"id2623520","foreignId":2501,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-10a&act=3","sequencingId":"id2623422","foreignId":2502,"href":"resources/SequencingTest.htm","sco":1}],"base":""},"sequencing":[{"id":"id2623602","tracked":false,"foreignId":2523,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2524,"mapInfo":[{"targetObjectiveID":"gObj-OB10a","readSatisfiedStatus":false,"writeSatisfiedStatus":true,"foreignId":2525}]}]},{"id":"id2623520","foreignId":2526,"rule":[{"type":"pre","action":"skip","foreignId":2527,"condition":[{"condition":"satisfied","foreignId":2528}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2529,"mapInfo":[{"targetObjectiveID":"gObj-OB10a","writeSatisfiedStatus":true,"foreignId":2530}]}]},{"id":"id2623422","tracked":false,"foreignId":2531,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2532,"mapInfo":[{"targetObjectiveID":"gObj-OB10a","foreignId":2533}]}]},{"id":"id2623394","choice":false,"flow":true,"foreignId":2534}],"base":"./data/ilias3_scorm2004/lm_data/lm_194/","foreignId":2498,"id":"LMSTestPackage_OB-10a"}', '0', '194', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-10b","title":"LMS Test Content Package OB-10b","sequencingId":"id3024558","foreignId":2536,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-10b&act=1","sequencingId":"id3085765","foreignId":2537,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2538},{"value":"previous","foreignId":2539},{"value":"suspendAll","foreignId":2540}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-10b&act=2","sequencingId":"id3022395","foreignId":2541,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2542},{"value":"previous","foreignId":2543},{"value":"suspendAll","foreignId":2544}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-10b&act=3","sequencingId":"id3022470","foreignId":2545,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2546},{"value":"previous","foreignId":2547},{"value":"suspendAll","foreignId":2548}]}],"base":""},"sequencing":[{"id":"id3085765","tracked":false,"foreignId":2569,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2570,"mapInfo":[{"targetObjectiveID":"gObj-OB10b","readSatisfiedStatus":false,"writeNormalizedMeasure":true,"foreignId":2571}]}]},{"id":"id3022395","foreignId":2572,"rule":[{"type":"pre","action":"skip","foreignId":2573,"condition":[{"measureThreshold":0.7,"condition":"objectiveMeasureGreaterThan","foreignId":2574}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2575,"mapInfo":[{"targetObjectiveID":"gObj-OB10b","writeNormalizedMeasure":true,"foreignId":2576}]}]},{"id":"id3022470","tracked":false,"foreignId":2577,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2578,"mapInfo":[{"targetObjectiveID":"gObj-OB10b","foreignId":2579}]}]},{"id":"id3024558","choice":false,"flow":true,"foreignId":2580}],"base":"./data/ilias3_scorm2004/lm_data/lm_195/","foreignId":2535,"id":"LMSTestPackage_OB-10b"}', '0', '195', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-10c","title":"LMS Test Content Package OB-10c","sequencingId":"id3036101","foreignId":2582,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-10c&act=1","sequencingId":"id3021295","foreignId":2583,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2584},{"value":"previous","foreignId":2585},{"value":"suspendAll","foreignId":2586}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-10c&act=2","sequencingId":"id3020449","foreignId":2587,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2588},{"value":"previous","foreignId":2589},{"value":"suspendAll","foreignId":2590}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-10c&act=3","sequencingId":"id3020211","foreignId":2591,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2592},{"value":"previous","foreignId":2593},{"value":"suspendAll","foreignId":2594}]}],"base":""},"sequencing":[{"id":"id3021295","tracked":false,"foreignId":2615,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2616,"mapInfo":[{"targetObjectiveID":"gObj-OB10c","readSatisfiedStatus":false,"writeSatisfiedStatus":true,"foreignId":2617}]},{"primary":false,"objectiveID":"obj1","foreignId":2618}]},{"id":"id3020449","foreignId":2619,"rule":[{"type":"pre","action":"skip","foreignId":2620,"condition":[{"condition":"satisfied","foreignId":2621}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2622,"mapInfo":[{"targetObjectiveID":"gObj-OB10c","writeSatisfiedStatus":true,"foreignId":2623}]}]},{"id":"id3020211","tracked":false,"foreignId":2624,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2625,"mapInfo":[{"targetObjectiveID":"gObj-OB10c","foreignId":2626}]}]},{"id":"id3036101","choice":false,"flow":true,"foreignId":2627}],"base":"./data/ilias3_scorm2004/lm_data/lm_196/","foreignId":2581,"id":"LMSTestPackage_OB-10c"}', '0', '196', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-10d","title":"LMS Test Content Package OB-10d","sequencingId":"id3024238","foreignId":2629,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-10d&act=1","sequencingId":"id3021031","foreignId":2630,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2631},{"value":"previous","foreignId":2632},{"value":"suspendAll","foreignId":2633}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-10d&act=2","sequencingId":"id3024205","foreignId":2634,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2635},{"value":"previous","foreignId":2636},{"value":"suspendAll","foreignId":2637}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-10d&act=3","sequencingId":"id3020790","foreignId":2638,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2639},{"value":"previous","foreignId":2640},{"value":"suspendAll","foreignId":2641}]}],"base":""},"sequencing":[{"id":"id3021031","tracked":false,"foreignId":2662,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2663,"mapInfo":[{"targetObjectiveID":"gObj-OB10d","readSatisfiedStatus":false,"writeNormalizedMeasure":true,"foreignId":2664}]},{"primary":false,"objectiveID":"obj1","foreignId":2665},{"primary":false,"objectiveID":"obj2","foreignId":2666},{"primary":false,"objectiveID":"obj3","foreignId":2667}]},{"id":"id3024205","foreignId":2668,"rule":[{"type":"pre","action":"skip","foreignId":2669,"condition":[{"measureThreshold":0.7,"condition":"objectiveMeasureGreaterThan","foreignId":2670}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2671,"mapInfo":[{"targetObjectiveID":"gObj-OB10d","writeNormalizedMeasure":true,"foreignId":2672}]}]},{"id":"id3020790","tracked":false,"foreignId":2673,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":2674,"mapInfo":[{"targetObjectiveID":"gObj-OB10d","foreignId":2675}]}]},{"id":"id3024238","choice":false,"flow":true,"foreignId":2676}],"base":"./data/ilias3_scorm2004/lm_data/lm_197/","foreignId":2628,"id":"LMSTestPackage_OB-10d"}', '0', '197', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-11a","title":"LMS Test Content Package OB-11a","sequencingId":"id2784294","foreignId":2678,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-11a&act=1","sequencingId":"id3085660","foreignId":2679,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2680},{"value":"previous","foreignId":2681},{"value":"suspendAll","foreignId":2682}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-11a&act=2","sequencingId":"id3024627","foreignId":2683,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2684},{"value":"previous","foreignId":2685},{"value":"suspendAll","foreignId":2686}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-11a&act=3","sequencingId":"id3024005","foreignId":2687,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2688},{"value":"previous","foreignId":2689},{"value":"suspendAll","foreignId":2690}]}],"base":""},"sequencing":[{"id":"id3085660","tracked":false,"foreignId":2711,"objective":[{"primary":true,"objectiveID":"","foreignId":2712},{"primary":false,"objectiveID":"obj","foreignId":2713,"mapInfo":[{"targetObjectiveID":"gObj-OB11a","readSatisfiedStatus":false,"writeSatisfiedStatus":true,"foreignId":2714}]}]},{"id":"id3024627","foreignId":2715,"rule":[{"type":"pre","action":"skip","foreignId":2716,"condition":[{"condition":"satisfied","foreignId":2717}]}],"objective":[{"primary":true,"objectiveID":"","foreignId":2718},{"primary":false,"objectiveID":"obj","foreignId":2719,"mapInfo":[{"targetObjectiveID":"gObj-OB11a","writeSatisfiedStatus":true,"foreignId":2720}]}]},{"id":"id3024005","tracked":false,"foreignId":2721,"objective":[{"primary":true,"objectiveID":"","foreignId":2722},{"primary":false,"objectiveID":"obj","foreignId":2723,"mapInfo":[{"targetObjectiveID":"gObj-OB11a","foreignId":2724}]}]},{"id":"id2784294","choice":false,"flow":true,"foreignId":2725}],"base":"./data/ilias3_scorm2004/lm_data/lm_198/","foreignId":2677,"id":"LMSTestPackage_OB-11a"}', '0', '198', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-11b","title":"LMS Test Content Package OB-11b","sequencingId":"id2623206","foreignId":2727,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-11b&act=1","sequencingId":"id2684186","foreignId":2728,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2729},{"value":"previous","foreignId":2730},{"value":"suspendAll","foreignId":2731}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-11b&act=2","sequencingId":"id2623396","foreignId":2732,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2733},{"value":"previous","foreignId":2734},{"value":"suspendAll","foreignId":2735}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-11b&act=3","sequencingId":"id2623266","foreignId":2736,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2737},{"value":"previous","foreignId":2738},{"value":"suspendAll","foreignId":2739}]}],"base":""},"sequencing":[{"id":"id2684186","tracked":false,"foreignId":2760,"objective":[{"primary":true,"objectiveID":"","foreignId":2761},{"primary":false,"objectiveID":"obj1","foreignId":2762,"mapInfo":[{"targetObjectiveID":"gObj-OB11b","readSatisfiedStatus":false,"writeNormalizedMeasure":true,"foreignId":2763}]},{"primary":false,"objectiveID":"obj2","foreignId":2764},{"primary":false,"objectiveID":"obj3","foreignId":2765}]},{"id":"id2623396","foreignId":2766,"rule":[{"type":"pre","action":"skip","foreignId":2767,"condition":[{"measureThreshold":0.7,"condition":"objectiveMeasureGreaterThan","foreignId":2768}]}],"objective":[{"primary":true,"objectiveID":"","foreignId":2769},{"primary":false,"objectiveID":"obj","foreignId":2770,"mapInfo":[{"targetObjectiveID":"gObj-OB11b","writeNormalizedMeasure":true,"foreignId":2771}]}]},{"id":"id2623266","tracked":false,"foreignId":2772,"objective":[{"primary":true,"objectiveID":"","foreignId":2773},{"primary":false,"objectiveID":"obj","foreignId":2774,"mapInfo":[{"targetObjectiveID":"gObj-OB11b","foreignId":2775}]}]},{"id":"id2623206","choice":false,"flow":true,"foreignId":2776}],"base":"./data/ilias3_scorm2004/lm_data/lm_199/","foreignId":2726,"id":"LMSTestPackage_OB-11b"}', '0', '199', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-12a","title":"LMS Test Content Package OB-12a","sequencingId":"id3024614","foreignId":2778,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-12a&act=1","foreignId":2779,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2780},{"value":"previous","foreignId":2781},{"value":"suspendAll","foreignId":2782}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-12a&act=2","sequencingId":"id3036015","foreignId":2783,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2784},{"value":"previous","foreignId":2785},{"value":"suspendAll","foreignId":2786}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-12a&act=3","foreignId":2787,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2788},{"value":"previous","foreignId":2789},{"value":"suspendAll","foreignId":2790}]}],"base":""},"sequencing":[{"id":"id3036015","foreignId":2811,"rule":[{"type":"post","action":"previous","foreignId":2812,"condition":[{"referencedObjective":"obj1","condition":"objectiveStatusKnown","foreignId":2813},{"referencedObjective":"obj1","operator":"not","condition":"objectiveMeasureKnown","foreignId":2814}]}],"objective":[{"primary":true,"objectiveID":"","foreignId":2815},{"primary":false,"objectiveID":"obj1","foreignId":2816}]},{"id":"id3024614","choice":false,"flow":true,"foreignId":2817}],"base":"./data/ilias3_scorm2004/lm_data/lm_200/","foreignId":2777,"id":"LMSTestPackage_OB-12a"}', '0', '200', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-12b","title":"LMS Test Content Package OB-12b","sequencingId":"id3024649","foreignId":2819,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-12b&act=1","foreignId":2820,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2821},{"value":"previous","foreignId":2822},{"value":"suspendAll","foreignId":2823}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-12b&act=2","sequencingId":"id3020214","foreignId":2824,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2825},{"value":"previous","foreignId":2826},{"value":"suspendAll","foreignId":2827}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-12b&act=3","foreignId":2828,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2829},{"value":"previous","foreignId":2830},{"value":"suspendAll","foreignId":2831}]}],"base":""},"sequencing":[{"id":"id3020214","foreignId":2852,"rule":[{"type":"post","action":"continue","foreignId":2853,"condition":[{"referencedObjective":"obj1","operator":"not","condition":"objectiveStatusKnown","foreignId":2854},{"referencedObjective":"obj1","condition":"objectiveMeasureKnown","foreignId":2855}]}],"objective":[{"primary":true,"objectiveID":"","foreignId":2856},{"primary":false,"objectiveID":"obj1","foreignId":2857}]},{"id":"id3024649","choice":false,"flow":true,"foreignId":2858}],"base":"./data/ilias3_scorm2004/lm_data/lm_201/","foreignId":2818,"id":"LMSTestPackage_OB-12b"}', '0', '201', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-12c","title":"LMS Test Content Package OB-12c","sequencingId":"id2685932","foreignId":2860,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-12c&act=1","foreignId":2861,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2862},{"value":"previous","foreignId":2863},{"value":"suspendAll","foreignId":2864}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-12c&act=2","sequencingId":"id2691063","foreignId":2865,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2866},{"value":"previous","foreignId":2867},{"value":"suspendAll","foreignId":2868}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-12c&act=3","foreignId":2869,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2870},{"value":"previous","foreignId":2871},{"value":"suspendAll","foreignId":2872}]}],"base":""},"sequencing":[{"id":"id2691063","foreignId":2893,"rule":[{"type":"post","action":"continue","foreignId":2894,"condition":[{"referencedObjective":"obj1","condition":"objectiveStatusKnown","foreignId":2895},{"referencedObjective":"obj1","condition":"objectiveMeasureKnown","foreignId":2896}]}],"objective":[{"primary":true,"objectiveID":"","foreignId":2897},{"primary":false,"objectiveID":"obj1","satisfiedByMeasure":true,"minNormalizedMeasure":0.9,"foreignId":2898}]},{"id":"id2685932","choice":false,"flow":true,"foreignId":2899}],"base":"./data/ilias3_scorm2004/lm_data/lm_202/","foreignId":2859,"id":"LMSTestPackage_OB-12c"}', '0', '202', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-13a","title":"LMS Test Content Package OB-13a ","sequencingId":"id2687756","foreignId":2901,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-13a&act=1","foreignId":2902,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2903},{"value":"previous","foreignId":2904},{"value":"suspendAll","foreignId":2905}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-13a&act=2","sequencingId":"id2686031","foreignId":2906,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2907},{"value":"previous","foreignId":2908},{"value":"suspendAll","foreignId":2909}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-13a&act=3","sequencingId":"id2687289","foreignId":2910,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2911},{"value":"previous","foreignId":2912},{"value":"suspendAll","foreignId":2913}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-13a&act=4","foreignId":2914,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2915},{"value":"previous","foreignId":2916},{"value":"suspendAll","foreignId":2917}]}],"base":""},"sequencing":[{"id":"id2686031","foreignId":2938,"objective":[{"primary":true,"objectiveID":"","foreignId":2939},{"primary":false,"objectiveID":"obj1","foreignId":2940,"mapInfo":[{"targetObjectiveID":"gObj-OB13a","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":2941}]}]},{"id":"id2687289","foreignId":2942,"rule":[{"type":"pre","action":"skip","foreignId":2943,"condition":[{"referencedObjective":"obj1","condition":"objectiveStatusKnown","foreignId":2944},{"referencedObjective":"obj1","operator":"not","condition":"objectiveMeasureKnown","foreignId":2945}]}],"objective":[{"primary":true,"objectiveID":"","foreignId":2946},{"primary":false,"objectiveID":"obj1","foreignId":2947,"mapInfo":[{"targetObjectiveID":"gObj-OB13a","foreignId":2948}]}]},{"id":"id2687756","choice":false,"flow":true,"foreignId":2949}],"base":"./data/ilias3_scorm2004/lm_data/lm_203/","foreignId":2900,"id":"LMSTestPackage_OB-13a"}', '0', '203', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-13b","title":"LMS Test Content Package OB-13b ","sequencingId":"id2832065","foreignId":2951,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-13b&act=1","foreignId":2952,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2953},{"value":"previous","foreignId":2954},{"value":"suspendAll","foreignId":2955}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-13b&act=2","sequencingId":"id2821445","foreignId":2956,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2957},{"value":"previous","foreignId":2958},{"value":"suspendAll","foreignId":2959}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-13b&act=3","sequencingId":"id2835105","foreignId":2960,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2961},{"value":"previous","foreignId":2962},{"value":"suspendAll","foreignId":2963}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-13b&act=4","foreignId":2964,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":2965},{"value":"previous","foreignId":2966},{"value":"suspendAll","foreignId":2967}]}],"base":""},"sequencing":[{"id":"id2821445","foreignId":2988,"objective":[{"primary":true,"objectiveID":"","foreignId":2989},{"primary":false,"objectiveID":"obj1","foreignId":2990,"mapInfo":[{"targetObjectiveID":"gObj-OB13b","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":2991}]}]},{"id":"id2835105","foreignId":2992,"rule":[{"type":"pre","action":"skip","foreignId":2993,"condition":[{"referencedObjective":"obj1","operator":"not","condition":"objectiveStatusKnown","foreignId":2994},{"referencedObjective":"obj1","condition":"objectiveMeasureKnown","foreignId":2995}]}],"objective":[{"primary":true,"objectiveID":"","foreignId":2996},{"primary":false,"objectiveID":"obj1","foreignId":2997,"mapInfo":[{"targetObjectiveID":"gObj-OB13b","foreignId":2998}]}]},{"id":"id2832065","choice":false,"flow":true,"foreignId":2999}],"base":"./data/ilias3_scorm2004/lm_data/lm_204/","foreignId":2950,"id":"LMSTestPackage_OB-13b"}', '0', '204', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-13c","title":"LMS Test Content Package OB-13c ","sequencingId":"id2678078","foreignId":3001,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-13c&act=1","foreignId":3002,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3003},{"value":"previous","foreignId":3004},{"value":"suspendAll","foreignId":3005}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-13c&act=2","sequencingId":"id2678375","foreignId":3006,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3007},{"value":"previous","foreignId":3008},{"value":"suspendAll","foreignId":3009}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-13c&act=3","sequencingId":"id2678294","foreignId":3010,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3011},{"value":"previous","foreignId":3012},{"value":"suspendAll","foreignId":3013}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-13c&act=4","foreignId":3014,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3015},{"value":"previous","foreignId":3016},{"value":"suspendAll","foreignId":3017}]}],"base":""},"sequencing":[{"id":"id2678375","foreignId":3038,"objective":[{"primary":true,"objectiveID":"","foreignId":3039},{"primary":false,"objectiveID":"obj1","satisfiedByMeasure":true,"minNormalizedMeasure":0.25,"foreignId":3040,"mapInfo":[{"targetObjectiveID":"gObj-OB13c","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3041}]}]},{"id":"id2678294","foreignId":3042,"rule":[{"type":"pre","action":"skip","foreignId":3043,"condition":[{"referencedObjective":"obj1","condition":"objectiveStatusKnown","foreignId":3044},{"referencedObjective":"obj1","condition":"objectiveMeasureKnown","foreignId":3045}]}],"objective":[{"primary":true,"objectiveID":"","foreignId":3046},{"primary":false,"objectiveID":"obj1","foreignId":3047,"mapInfo":[{"targetObjectiveID":"gObj-OB13c","foreignId":3048}]}]},{"id":"id2678078","choice":false,"flow":true,"foreignId":3049}],"base":"./data/ilias3_scorm2004/lm_data/lm_205/","foreignId":3000,"id":"LMSTestPackage_OB-13c"}', '0', '205', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-14a","title":"LMS Test Content Package OB-14a","sequencingId":"id2832072","foreignId":3051,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-14a&act=1","sequencingId":"id2843381","foreignId":3052,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3053},{"value":"previous","foreignId":3054},{"value":"suspendAll","foreignId":3055}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-14a&act=2","sequencingId":"id2834918","foreignId":3056,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3057},{"value":"previous","foreignId":3058},{"value":"suspendAll","foreignId":3059}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-14a&act=3","sequencingId":"id2836192","foreignId":3060,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3061},{"value":"previous","foreignId":3062},{"value":"suspendAll","foreignId":3063}]}],"base":""},"sequencing":[{"id":"id2843381","foreignId":3084,"objective":[{"primary":true,"objectiveID":"","foreignId":3085},{"primary":false,"objectiveID":"obj2","foreignId":3086,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-2","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3087}]},{"primary":false,"objectiveID":"obj3","foreignId":3088,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-3","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3089}]},{"primary":false,"objectiveID":"obj4","satisfiedByMeasure":true,"minNormalizedMeasure":0.4,"foreignId":3090,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-4","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3091}]},{"primary":false,"objectiveID":"obj1","foreignId":3092,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-1","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3093}]}]},{"id":"id2834918","foreignId":3094,"objective":[{"primary":true,"objectiveID":"","foreignId":3095},{"primary":false,"objectiveID":"obj3","foreignId":3096,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-3","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3097}]},{"primary":false,"objectiveID":"gObj-OB14a-1","satisfiedByMeasure":true,"minNormalizedMeasure":0.3,"foreignId":3098,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-3","foreignId":3099}]},{"primary":false,"objectiveID":"obj1","foreignId":3100,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-1","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3101}]},{"primary":false,"objectiveID":"obj4","satisfiedByMeasure":true,"minNormalizedMeasure":0.15,"foreignId":3102,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-4","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3103}]},{"primary":false,"objectiveID":"obj2","foreignId":3104,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-2","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3105}]}]},{"id":"id2836192","tracked":false,"foreignId":3106,"objective":[{"primary":true,"objectiveID":"","foreignId":3107},{"primary":false,"objectiveID":"obj4","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":3108,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-4","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3109}]},{"primary":false,"objectiveID":"obj1","foreignId":3110,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-1","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3111}]},{"primary":false,"objectiveID":"obj2","foreignId":3112,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-2","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3113}]},{"primary":false,"objectiveID":"obj3","foreignId":3114,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-3","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3115}]},{"primary":false,"objectiveID":"gObj-OB14a-1","satisfiedByMeasure":true,"minNormalizedMeasure":0.01,"foreignId":3116,"mapInfo":[{"targetObjectiveID":"gObj-OB14a-3","foreignId":3117}]}]},{"id":"id2832072","choice":false,"flow":true,"foreignId":3118}],"base":"./data/ilias3_scorm2004/lm_data/lm_206/","foreignId":3050,"id":"LMSTestPackage_OB-14a"}', '0', '206', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-14b","title":"LMS Test Content Package OB-14b","sequencingId":"id2836467","foreignId":3120,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-14b&act=1","sequencingId":"id2835369","foreignId":3121,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3122},{"value":"previous","foreignId":3123},{"value":"suspendAll","foreignId":3124}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-14b&act=2","sequencingId":"id2836423","foreignId":3125,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3126},{"value":"previous","foreignId":3127},{"value":"suspendAll","foreignId":3128}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=OB-14b&act=3","sequencingId":"id2843361","foreignId":3129,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3130},{"value":"previous","foreignId":3131},{"value":"suspendAll","foreignId":3132}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-14b&act=4","sequencingId":"id2835730","foreignId":3133,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3134},{"value":"previous","foreignId":3135},{"value":"suspendAll","foreignId":3136}]}],"base":""},"sequencing":[{"id":"id2835369","foreignId":3157,"objective":[{"primary":true,"objectiveID":"","foreignId":3158},{"primary":false,"objectiveID":"obj4","foreignId":3159},{"primary":false,"objectiveID":"obj1","foreignId":3160},{"primary":false,"objectiveID":"OBJ1","foreignId":3161},{"primary":false,"objectiveID":"obj3","foreignId":3162},{"primary":false,"objectiveID":"obj2","satisfiedByMeasure":true,"minNormalizedMeasure":0.5,"foreignId":3163,"mapInfo":[{"targetObjectiveID":"gObj-OB14b-1","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3164}]},{"primary":false,"objectiveID":"obj","foreignId":3165,"mapInfo":[{"targetObjectiveID":"obj1","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3166}]}]},{"id":"id2836423","foreignId":3167,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":3168,"mapInfo":[{"targetObjectiveID":"gObj-OB14b-2","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3169}]},{"primary":false,"objectiveID":"obj3","foreignId":3170},{"primary":false,"objectiveID":"obj2","foreignId":3171},{"primary":false,"objectiveID":"obj1","foreignId":3172},{"primary":false,"objectiveID":"obj5","foreignId":3173,"mapInfo":[{"targetObjectiveID":"gObj-OB14b-3","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3174}]},{"primary":false,"objectiveID":"obj4","foreignId":3175}]},{"id":"id2843361","tracked":false,"foreignId":3176,"objective":[{"primary":true,"objectiveID":"","foreignId":3177},{"primary":false,"objectiveID":"obj5","foreignId":3178},{"primary":false,"objectiveID":"obj4","foreignId":3179,"mapInfo":[{"targetObjectiveID":"gObj-OB14b-1","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3180}]},{"primary":false,"objectiveID":"obj3","foreignId":3181,"mapInfo":[{"targetObjectiveID":"gObj-OB14b-2","foreignId":3182}]},{"primary":false,"objectiveID":"obj1","foreignId":3183,"mapInfo":[{"targetObjectiveID":"gObj-OB14b-3","foreignId":3184}]},{"primary":false,"objectiveID":"obj2","foreignId":3185}]},{"id":"id2835730","foreignId":3186,"objective":[{"primary":true,"objectiveID":"","foreignId":3187},{"primary":false,"objectiveID":"obj1","foreignId":3188,"mapInfo":[{"targetObjectiveID":"gObj-OB14b-3","readSatisfiedStatus":false,"readNormalizedMeasure":false,"writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":3189},{"targetObjectiveID":"gObj-OB14b-1","foreignId":3190}]},{"primary":false,"objectiveID":"obj2","foreignId":3191,"mapInfo":[{"targetObjectiveID":"gObj-OB14b-2","foreignId":3192}]}]},{"id":"id2836467","choice":false,"flow":true,"foreignId":3193}],"base":"./data/ilias3_scorm2004/lm_data/lm_207/","foreignId":3119,"id":"LMSTestPackage_OB-14b"}', '0', '207', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"OB-15","title":"LMS Test Content Package OB-15 ","sequencingId":"id2619353","foreignId":3195,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=OB-15&act=1","sequencingId":"id2620143","foreignId":3196,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3197},{"value":"previous","foreignId":3198},{"value":"suspendAll","foreignId":3199}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=OB-15&act=2","sequencingId":"id2620044","foreignId":3200,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3201},{"value":"previous","foreignId":3202},{"value":"suspendAll","foreignId":3203}]},{"id":"activity_3","title":"Activity 3","sequencingId":"id2619736","foreignId":3204,"item":[{"id":"activity_4","title":"Activity 4","parameters":"tc=OB-15&act=4","sequencingId":"id2619908","foreignId":3205,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3206},{"value":"previous","foreignId":3207},{"value":"suspendAll","foreignId":3208}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=OB-15&act=5","sequencingId":"id2619802","foreignId":3209,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3210},{"value":"previous","foreignId":3211},{"value":"suspendAll","foreignId":3212}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=OB-15&act=6","sequencingId":"id2619599","foreignId":3213,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3214},{"value":"previous","foreignId":3215},{"value":"suspendAll","foreignId":3216}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=OB-15&act=7","foreignId":3217,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3218},{"value":"previous","foreignId":3219},{"value":"suspendAll","foreignId":3220}]}],"base":""},"sequencing":[{"id":"id2620143","foreignId":3241,"rule":[{"type":"pre","action":"skip","foreignId":3242,"condition":[{"operator":"not","condition":"activityProgressKnown","foreignId":3243}]}]},{"id":"id2620044","foreignId":3244,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":3245,"mapInfo":[{"targetObjectiveID":"gObj-OB15","writeSatisfiedStatus":true,"foreignId":3246}]}]},{"id":"id2619908","foreignId":3247,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":3248,"mapInfo":[{"targetObjectiveID":"gObj-OB15","foreignId":3249}]}]},{"id":"id2619802","foreignId":3250,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":3251,"mapInfo":[{"targetObjectiveID":"gObj-OB15","foreignId":3252}]}]},{"id":"id2619736","choice":false,"flow":true,"foreignId":3253,"rule":[{"type":"pre","action":"skip","foreignId":3254,"condition":[{"condition":"completed","foreignId":3255}]},{"type":"rollup","action":"completed","foreignId":3256,"condition":[{"condition":"satisfied","foreignId":3257}]}]},{"id":"id2619599","foreignId":3258,"rule":[{"type":"pre","action":"skip","foreignId":3259,"condition":[{"operator":"not","condition":"activityProgressKnown","foreignId":3260}]},{"type":"rollup","action":"completed","foreignId":3261,"condition":[{"condition":"satisfied","foreignId":3262}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":3263,"mapInfo":[{"targetObjectiveID":"gObj-OB15","foreignId":3264}]}]},{"id":"id2619353","choice":false,"flow":true,"foreignId":3265}],"base":"./data/ilias3_scorm2004/lm_data/lm_208/","foreignId":3194,"id":"LMSTestPackage_OB-15"}', '0', '208', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-01aa","title":"LMS Test Content Package RU-01aa ","sequencingId":"id3023482","foreignId":3267,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-01aa&act=1","foreignId":3268,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3269},{"value":"previous","foreignId":3270},{"value":"suspendAll","foreignId":3271}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id3020417","foreignId":3272,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-01aa&act=3","foreignId":3273,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3274},{"value":"previous","foreignId":3275},{"value":"suspendAll","foreignId":3276}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-01aa&act=4","foreignId":3277,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3278},{"value":"previous","foreignId":3279},{"value":"suspendAll","foreignId":3280}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-01aa&act=5","foreignId":3281,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3282},{"value":"previous","foreignId":3283},{"value":"suspendAll","foreignId":3284}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-01aa&act=6","foreignId":3285,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3286},{"value":"previous","foreignId":3287},{"value":"suspendAll","foreignId":3288}]}],"base":""},"sequencing":[{"id":"id3020417","choice":false,"flow":true,"foreignId":3309,"rule":[{"type":"exit","action":"exit","foreignId":3310,"condition":[{"condition":"satisfied","foreignId":3311}]},{"type":"post","action":"previous","foreignId":3312,"condition":[{"condition":"satisfied","foreignId":3313}]}]},{"id":"id3023482","choice":false,"flow":true,"foreignId":3314}],"base":"./data/ilias3_scorm2004/lm_data/lm_209/","foreignId":3266,"id":"LMSTestPackage_RU-01aa"}', '0', '209', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-01ab","title":"LMS Test Content Package RU-01ab ","sequencingId":"id2676050","foreignId":3316,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-01ab&act=1","foreignId":3317,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3318},{"value":"previous","foreignId":3319},{"value":"suspendAll","foreignId":3320}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2676129","foreignId":3321,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-01ab&act=3","foreignId":3322,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3323},{"value":"previous","foreignId":3324},{"value":"suspendAll","foreignId":3325}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-01ab&act=4","foreignId":3326,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3327},{"value":"previous","foreignId":3328},{"value":"suspendAll","foreignId":3329}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-01ab&act=5","foreignId":3330,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3331},{"value":"previous","foreignId":3332},{"value":"suspendAll","foreignId":3333}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-01ab&act=6","foreignId":3334,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3335},{"value":"previous","foreignId":3336},{"value":"suspendAll","foreignId":3337}]}],"base":""},"sequencing":[{"id":"id2676129","choice":false,"flow":true,"foreignId":3358,"rule":[{"type":"exit","action":"exit","foreignId":3359,"condition":[{"condition":"satisfied","foreignId":3360}]},{"type":"post","action":"previous","foreignId":3361,"condition":[{"condition":"satisfied","foreignId":3362}]}]},{"id":"id2676050","choice":false,"flow":true,"foreignId":3363}],"base":"./data/ilias3_scorm2004/lm_data/lm_210/","foreignId":3315,"id":"LMSTestPackage_RU-01ab"}', '0', '210', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-01ba","title":"LMS Test Content Package RU-01ba ","sequencingId":"id2815727","foreignId":3365,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-01ba&act=1","foreignId":3366,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_2","title":"Activity 2","sequencingId":"id2834929","foreignId":3367,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-01ba&act=3","foreignId":3368,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-01ba&act=4","foreignId":3369,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-01ba&act=5","foreignId":3370,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-01ba&act=6","foreignId":3371,"href":"resources/SequencingTest.htm","sco":1}],"base":""},"sequencing":[{"id":"id2834929","choice":false,"flow":true,"foreignId":3392,"rule":[{"type":"exit","action":"exit","foreignId":3393,"condition":[{"condition":"completed","foreignId":3394}]},{"type":"post","action":"previous","foreignId":3395,"condition":[{"condition":"completed","foreignId":3396}]}]},{"id":"id2815727","choice":false,"flow":true,"foreignId":3397}],"base":"./data/ilias3_scorm2004/lm_data/lm_211/","foreignId":3364,"id":"LMSTestPackage_RU-01ba"}', '0', '211', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-01bb","title":"LMS Test Content Package RU-01bb ","sequencingId":"id2676424","foreignId":3399,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-01bb&act=1","foreignId":3400,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3401},{"value":"previous","foreignId":3402},{"value":"suspendAll","foreignId":3403}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2676502","foreignId":3404,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-01bb&act=3","foreignId":3405,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3406},{"value":"previous","foreignId":3407},{"value":"suspendAll","foreignId":3408}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-01bb&act=4","foreignId":3409,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3410},{"value":"previous","foreignId":3411},{"value":"suspendAll","foreignId":3412}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-01bb&act=5","foreignId":3413,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3414},{"value":"previous","foreignId":3415},{"value":"suspendAll","foreignId":3416}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-01bb&act=6","foreignId":3417,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3418},{"value":"previous","foreignId":3419},{"value":"suspendAll","foreignId":3420}]}],"base":""},"sequencing":[{"id":"id2676502","choice":false,"flow":true,"foreignId":3441,"rule":[{"type":"exit","action":"exit","foreignId":3442,"condition":[{"condition":"completed","foreignId":3443}]},{"type":"post","action":"previous","foreignId":3444,"condition":[{"condition":"completed","foreignId":3445}]}]},{"id":"id2676424","choice":false,"flow":true,"foreignId":3446}],"base":"./data/ilias3_scorm2004/lm_data/lm_212/","foreignId":3398,"id":"LMSTestPackage_RU-01bb"}', '0', '212', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-02a","title":"LMS Test Content Package RU-02a ","sequencingId":"id2687602","foreignId":3448,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-02a&act=1","foreignId":3449,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3450},{"value":"previous","foreignId":3451},{"value":"suspendAll","foreignId":3452}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2686379","foreignId":3453,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-02a&act=3","foreignId":3454,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3455},{"value":"previous","foreignId":3456},{"value":"suspendAll","foreignId":3457}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-02a&act=4","foreignId":3458,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3459},{"value":"previous","foreignId":3460},{"value":"suspendAll","foreignId":3461}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-02a&act=5","foreignId":3462,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3463},{"value":"previous","foreignId":3464},{"value":"suspendAll","foreignId":3465}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-02a&act=6","foreignId":3466,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3467},{"value":"previous","foreignId":3468},{"value":"suspendAll","foreignId":3469}]}],"base":""},"sequencing":[{"id":"id2686379","choice":false,"flow":true,"foreignId":3490,"rule":[{"type":"exit","action":"exit","foreignId":3491,"condition":[{"condition":"completed","foreignId":3492}]},{"type":"post","action":"previous","foreignId":3493,"condition":[{"condition":"completed","foreignId":3494}]},{"type":"rollup","childActivitySet":"any","action":"completed","foreignId":3495,"condition":[{"condition":"satisfied","foreignId":3496}]}]},{"id":"id2687602","choice":false,"flow":true,"foreignId":3497}],"base":"./data/ilias3_scorm2004/lm_data/lm_213/","foreignId":3447,"id":"LMSTestPackage_RU-02a"}', '0', '213', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-02b","title":"LMS Test Content Package RU-02b ","sequencingId":"id2839516","foreignId":3499,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-02b&act=1","foreignId":3500,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3501},{"value":"previous","foreignId":3502},{"value":"suspendAll","foreignId":3503}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2835303","foreignId":3504,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-02b&act=3","foreignId":3505,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3506},{"value":"previous","foreignId":3507},{"value":"suspendAll","foreignId":3508}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-02b&act=4","foreignId":3509,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3510},{"value":"previous","foreignId":3511},{"value":"suspendAll","foreignId":3512}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-02b&act=5","foreignId":3513,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3514},{"value":"previous","foreignId":3515},{"value":"suspendAll","foreignId":3516}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-02b&act=6","foreignId":3517,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3518},{"value":"previous","foreignId":3519},{"value":"suspendAll","foreignId":3520}]}],"base":""},"sequencing":[{"id":"id2835303","choice":false,"flow":true,"foreignId":3541,"rule":[{"type":"exit","action":"exit","foreignId":3542,"condition":[{"condition":"satisfied","foreignId":3543}]},{"type":"post","action":"continue","foreignId":3544,"condition":[{"condition":"satisfied","foreignId":3545}]},{"type":"rollup","childActivitySet":"any","action":"satisfied","foreignId":3546,"condition":[{"condition":"completed","foreignId":3547}]}]},{"id":"id2839516","choice":false,"flow":true,"foreignId":3548}],"base":"./data/ilias3_scorm2004/lm_data/lm_214/","foreignId":3498,"id":"LMSTestPackage_RU-02b"}', '0', '214', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-03a","title":"LMS Test Content Package RU-03a ","sequencingId":"id2836275","foreignId":3550,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-03a&act=1","foreignId":3551,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3552},{"value":"previous","foreignId":3553},{"value":"suspendAll","foreignId":3554}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2836314","foreignId":3555,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-03a&act=3","foreignId":3556,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3557},{"value":"previous","foreignId":3558},{"value":"suspendAll","foreignId":3559}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-03a&act=4","foreignId":3560,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3561},{"value":"previous","foreignId":3562},{"value":"suspendAll","foreignId":3563}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-03a&act=5","foreignId":3564,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3565},{"value":"previous","foreignId":3566},{"value":"suspendAll","foreignId":3567}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-03a&act=6","foreignId":3568,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3569},{"value":"previous","foreignId":3570},{"value":"suspendAll","foreignId":3571}]}],"base":""},"sequencing":[{"id":"id2836314","choice":false,"flow":true,"foreignId":3592,"rule":[{"type":"exit","action":"exit","foreignId":3593,"condition":[{"condition":"completed","foreignId":3594}]},{"type":"post","action":"previous","foreignId":3595,"condition":[{"condition":"completed","foreignId":3596}]},{"type":"rollup","childActivitySet":"atLeastCount","minimumCount":1,"action":"completed","conditionCombination":"all","foreignId":3597,"condition":[{"condition":"attempted","foreignId":3598},{"condition":"completed","operator":"not","foreignId":3599}]}]},{"id":"id2836275","choice":false,"flow":true,"foreignId":3600}],"base":"./data/ilias3_scorm2004/lm_data/lm_215/","foreignId":3549,"id":"LMSTestPackage_RU-03a"}', '0', '215', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-03b","title":"LMS Test Content Package RU-03b ","sequencingId":"id2685338","foreignId":3602,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-03b&act=1","foreignId":3603,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3604},{"value":"previous","foreignId":3605},{"value":"suspendAll","foreignId":3606}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2686169","foreignId":3607,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-03b&act=3","foreignId":3608,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3609},{"value":"previous","foreignId":3610},{"value":"suspendAll","foreignId":3611}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-03b&act=4","foreignId":3612,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3613},{"value":"previous","foreignId":3614},{"value":"suspendAll","foreignId":3615}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-03b&act=5","foreignId":3616,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3617},{"value":"previous","foreignId":3618},{"value":"suspendAll","foreignId":3619}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-03b&act=6","foreignId":3620,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3621},{"value":"previous","foreignId":3622},{"value":"suspendAll","foreignId":3623}]}],"base":""},"sequencing":[{"id":"id2686169","choice":false,"flow":true,"foreignId":3644,"rule":[{"type":"exit","action":"exit","foreignId":3645,"condition":[{"condition":"satisfied","foreignId":3646}]},{"type":"post","action":"previous","foreignId":3647,"condition":[{"condition":"satisfied","foreignId":3648}]},{"type":"rollup","childActivitySet":"atLeastCount","minimumCount":1,"action":"satisfied","conditionCombination":"all","foreignId":3649,"condition":[{"condition":"attempted","foreignId":3650},{"condition":"satisfied","operator":"not","foreignId":3651}]}]},{"id":"id2685338","choice":false,"flow":true,"foreignId":3652}],"base":"./data/ilias3_scorm2004/lm_data/lm_216/","foreignId":3601,"id":"LMSTestPackage_RU-03b"}', '0', '216', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-04aa","title":"LMS Test Content Package RU-04aa ","sequencingId":"id2698800","foreignId":3654,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-04aa&act=1","foreignId":3655,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3656},{"value":"previous","foreignId":3657},{"value":"suspendAll","foreignId":3658}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2697094","foreignId":3659,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-04aa&act=3","foreignId":3660,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3661},{"value":"previous","foreignId":3662},{"value":"suspendAll","foreignId":3663}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-04aa&act=4","foreignId":3664,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3665},{"value":"previous","foreignId":3666},{"value":"suspendAll","foreignId":3667}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-04aa&act=5","foreignId":3668,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3669},{"value":"previous","foreignId":3670},{"value":"suspendAll","foreignId":3671}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-04aa&act=6","foreignId":3672,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3673},{"value":"previous","foreignId":3674},{"value":"suspendAll","foreignId":3675}]}],"base":""},"sequencing":[{"id":"id2697094","choice":false,"flow":true,"foreignId":3696,"rule":[{"type":"exit","action":"exit","foreignId":3697,"condition":[{"condition":"satisfied","foreignId":3698}]},{"type":"post","action":"previous","foreignId":3699,"condition":[{"condition":"satisfied","foreignId":3700}]},{"type":"rollup","childActivitySet":"atLeastPercent","minimumPercent":0.5,"action":"satisfied","foreignId":3701,"condition":[{"condition":"satisfied","foreignId":3702},{"condition":"objectiveMeasureKnown","foreignId":3703}]}]},{"id":"id2698800","choice":false,"flow":true,"foreignId":3704}],"base":"./data/ilias3_scorm2004/lm_data/lm_217/","foreignId":3653,"id":"LMSTestPackage_RU-04aa"}', '0', '217', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-04ab","title":"LMS Test Content Package RU-04ab ","sequencingId":"id3020230","foreignId":3706,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-04ab&act=1","foreignId":3707,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3708},{"value":"previous","foreignId":3709},{"value":"suspendAll","foreignId":3710}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2997725","foreignId":3711,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-04ab&act=3","foreignId":3712,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3713},{"value":"previous","foreignId":3714},{"value":"suspendAll","foreignId":3715}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-04ab&act=4","foreignId":3716,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3717},{"value":"previous","foreignId":3718},{"value":"suspendAll","foreignId":3719}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-04ab&act=5","foreignId":3720,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3721},{"value":"previous","foreignId":3722},{"value":"suspendAll","foreignId":3723}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-04ab&act=6","foreignId":3724,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3725},{"value":"previous","foreignId":3726},{"value":"suspendAll","foreignId":3727}]}],"base":""},"sequencing":[{"id":"id2997725","choice":false,"flow":true,"foreignId":3748,"rule":[{"type":"exit","action":"exit","foreignId":3749,"condition":[{"condition":"satisfied","foreignId":3750}]},{"type":"post","action":"previous","foreignId":3751,"condition":[{"condition":"satisfied","foreignId":3752}]},{"type":"rollup","childActivitySet":"atLeastPercent","minimumPercent":0.5,"action":"satisfied","foreignId":3753,"condition":[{"condition":"satisfied","foreignId":3754},{"condition":"objectiveMeasureKnown","foreignId":3755}]}]},{"id":"id3020230","choice":false,"flow":true,"foreignId":3756}],"base":"./data/ilias3_scorm2004/lm_data/lm_218/","foreignId":3705,"id":"LMSTestPackage_RU-04ab"}', '0', '218', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-04ba","title":"LMS Test Content Package RU-04ba ","sequencingId":"id3024577","foreignId":3758,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-04ba&act=1","foreignId":3759,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3760},{"value":"previous","foreignId":3761},{"value":"suspendAll","foreignId":3762}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2999935","foreignId":3763,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-04ba&act=3","foreignId":3764,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3765},{"value":"previous","foreignId":3766},{"value":"suspendAll","foreignId":3767}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-04ba&act=4","foreignId":3768,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3769},{"value":"previous","foreignId":3770},{"value":"suspendAll","foreignId":3771}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-04ba&act=5","foreignId":3772,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3773},{"value":"previous","foreignId":3774},{"value":"suspendAll","foreignId":3775}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-04ba&act=6","foreignId":3776,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3777},{"value":"previous","foreignId":3778},{"value":"suspendAll","foreignId":3779}]}],"base":""},"sequencing":[{"id":"id2999935","choice":false,"flow":true,"foreignId":3800,"rule":[{"type":"exit","action":"exit","foreignId":3801,"condition":[{"condition":"completed","foreignId":3802}]},{"type":"post","action":"previous","foreignId":3803,"condition":[{"condition":"completed","foreignId":3804}]},{"type":"rollup","childActivitySet":"atLeastPercent","minimumPercent":0.5,"action":"completed","foreignId":3805,"condition":[{"condition":"completed","foreignId":3806},{"condition":"objectiveMeasureKnown","foreignId":3807}]}]},{"id":"id3024577","choice":false,"flow":true,"foreignId":3808}],"base":"./data/ilias3_scorm2004/lm_data/lm_219/","foreignId":3757,"id":"LMSTestPackage_RU-04ba"}', '0', '219', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-04bb","title":"LMS Test Content Package RU-04bb ","sequencingId":"id2691069","foreignId":3810,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-04bb&act=1","foreignId":3811,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3812},{"value":"previous","foreignId":3813},{"value":"suspendAll","foreignId":3814}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2706518","foreignId":3815,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-04bb&act=3","foreignId":3816,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3817},{"value":"previous","foreignId":3818},{"value":"suspendAll","foreignId":3819}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-04bb&act=4","foreignId":3820,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3821},{"value":"previous","foreignId":3822},{"value":"suspendAll","foreignId":3823}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-04bb&act=5","foreignId":3824,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3825},{"value":"previous","foreignId":3826},{"value":"suspendAll","foreignId":3827}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-04bb&act=6","foreignId":3828,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3829},{"value":"previous","foreignId":3830},{"value":"suspendAll","foreignId":3831}]}],"base":""},"sequencing":[{"id":"id2706518","choice":false,"flow":true,"foreignId":3852,"rule":[{"type":"exit","action":"exit","foreignId":3853,"condition":[{"condition":"completed","foreignId":3854}]},{"type":"post","action":"previous","foreignId":3855,"condition":[{"condition":"completed","foreignId":3856}]},{"type":"rollup","childActivitySet":"atLeastPercent","minimumPercent":0.5,"action":"completed","foreignId":3857,"condition":[{"condition":"completed","foreignId":3858},{"condition":"objectiveMeasureKnown","foreignId":3859}]}]},{"id":"id2691069","choice":false,"flow":true,"foreignId":3860}],"base":"./data/ilias3_scorm2004/lm_data/lm_220/","foreignId":3809,"id":"LMSTestPackage_RU-04bb"}', '0', '220', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-04bc","title":"LMS Test Content Package RU-04bc ","sequencingId":"id2697061","foreignId":3862,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-04bc&act=1","foreignId":3863,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_2","title":"Activity 2","sequencingId":"id2694654","foreignId":3864,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-04bc&act=3","foreignId":3865,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-04bc&act=4","foreignId":3866,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-04bc&act=5","foreignId":3867,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-04bc&act=6","foreignId":3868,"href":"resources/SequencingTest.htm","sco":1}],"base":""},"sequencing":[{"id":"id2694654","choice":false,"flow":true,"foreignId":3889,"rule":[{"type":"exit","action":"exit","foreignId":3890,"condition":[{"condition":"completed","foreignId":3891}]},{"type":"post","action":"previous","foreignId":3892,"condition":[{"condition":"completed","foreignId":3893}]},{"type":"rollup","childActivitySet":"atLeastPercent","minimumPercent":0.5,"action":"completed","foreignId":3894,"condition":[{"condition":"completed","foreignId":3895},{"condition":"objectiveMeasureKnown","foreignId":3896}]}]},{"id":"id2697061","choice":false,"flow":true,"foreignId":3897}],"base":"./data/ilias3_scorm2004/lm_data/lm_221/","foreignId":3861,"id":"LMSTestPackage_RU-04bc"}', '0', '221', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-04bd","title":"LMS Test Content Package RU-04bd ","sequencingId":"id2832273","foreignId":3899,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-04bd&act=1","foreignId":3900,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3901},{"value":"previous","foreignId":3902},{"value":"suspendAll","foreignId":3903}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2820463","foreignId":3904,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-04bd&act=3","foreignId":3905,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3906},{"value":"previous","foreignId":3907},{"value":"suspendAll","foreignId":3908}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-04bd&act=4","foreignId":3909,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3910},{"value":"previous","foreignId":3911},{"value":"suspendAll","foreignId":3912}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-04bd&act=5","foreignId":3913,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3914},{"value":"previous","foreignId":3915},{"value":"suspendAll","foreignId":3916}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-04bd&act=6","foreignId":3917,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3918},{"value":"previous","foreignId":3919},{"value":"suspendAll","foreignId":3920}]}],"base":""},"sequencing":[{"id":"id2820463","choice":false,"flow":true,"foreignId":3941,"rule":[{"type":"exit","action":"exit","foreignId":3942,"condition":[{"condition":"completed","foreignId":3943}]},{"type":"post","action":"previous","foreignId":3944,"condition":[{"condition":"completed","foreignId":3945}]},{"type":"rollup","childActivitySet":"atLeastPercent","minimumPercent":0.5,"action":"completed","foreignId":3946,"condition":[{"condition":"completed","foreignId":3947},{"condition":"objectiveMeasureKnown","foreignId":3948}]}]},{"id":"id2832273","choice":false,"flow":true,"foreignId":3949}],"base":"./data/ilias3_scorm2004/lm_data/lm_222/","foreignId":3898,"id":"LMSTestPackage_RU-04bd"}', '0', '222', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-05a","title":"LMS Test Content Package RU-05a ","sequencingId":"id3003369","foreignId":3951,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-05a&act=1","foreignId":3952,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3953},{"value":"previous","foreignId":3954},{"value":"suspendAll","foreignId":3955}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id3021205","foreignId":3956,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-05a&act=3","foreignId":3957,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3958},{"value":"previous","foreignId":3959},{"value":"suspendAll","foreignId":3960}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-05a&act=4","foreignId":3961,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3962},{"value":"previous","foreignId":3963},{"value":"suspendAll","foreignId":3964}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-05a&act=5","foreignId":3965,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3966},{"value":"previous","foreignId":3967},{"value":"suspendAll","foreignId":3968}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-05a&act=6","foreignId":3969,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":3970},{"value":"previous","foreignId":3971},{"value":"suspendAll","foreignId":3972}]}],"base":""},"sequencing":[{"id":"id3021205","choice":false,"flow":true,"foreignId":3993,"rule":[{"type":"exit","action":"exit","foreignId":3994,"condition":[{"condition":"completed","foreignId":3995}]},{"type":"post","action":"previous","foreignId":3996,"condition":[{"condition":"completed","foreignId":3997}]},{"type":"rollup","childActivitySet":"none","action":"completed","foreignId":3998,"condition":[{"condition":"satisfied","foreignId":3999}]}]},{"id":"id3003369","choice":false,"flow":true,"foreignId":4000}],"base":"./data/ilias3_scorm2004/lm_data/lm_223/","foreignId":3950,"id":"LMSTestPackage_RU-05a"}', '0', '223', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-05b","title":"LMS Test Content Package RU-05b ","sequencingId":"id2820429","foreignId":4002,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-05b&act=1","foreignId":4003,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4004},{"value":"previous","foreignId":4005},{"value":"suspendAll","foreignId":4006}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2836321","foreignId":4007,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-05b&act=3","foreignId":4008,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4009},{"value":"previous","foreignId":4010},{"value":"suspendAll","foreignId":4011}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-05b&act=4","foreignId":4012,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4013},{"value":"previous","foreignId":4014},{"value":"suspendAll","foreignId":4015}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-05b&act=5","foreignId":4016,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4017},{"value":"previous","foreignId":4018},{"value":"suspendAll","foreignId":4019}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-05b&act=6","foreignId":4020,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4021},{"value":"previous","foreignId":4022},{"value":"suspendAll","foreignId":4023}]}],"base":""},"sequencing":[{"id":"id2836321","choice":false,"flow":true,"foreignId":4044,"rule":[{"type":"exit","action":"exit","foreignId":4045,"condition":[{"condition":"satisfied","foreignId":4046}]},{"type":"post","action":"continue","foreignId":4047,"condition":[{"condition":"satisfied","foreignId":4048}]},{"type":"rollup","childActivitySet":"none","action":"satisfied","foreignId":4049,"condition":[{"condition":"completed","foreignId":4050}]}]},{"id":"id2820429","choice":false,"flow":true,"foreignId":4051}],"base":"./data/ilias3_scorm2004/lm_data/lm_224/","foreignId":4001,"id":"LMSTestPackage_RU-05b"}', '0', '224', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-06a","title":"LMS Test Content Package RU-06a ","sequencingId":"id2844067","foreignId":4053,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2835665","foreignId":4054,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=RU-06a&act=2","foreignId":4055,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4056},{"value":"previous","foreignId":4057},{"value":"suspendAll","foreignId":4058}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-06a&act=3","foreignId":4059,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4060},{"value":"previous","foreignId":4061},{"value":"suspendAll","foreignId":4062}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-06a&act=4","foreignId":4063,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4064},{"value":"previous","foreignId":4065},{"value":"suspendAll","foreignId":4066}]}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-06a&act=5","foreignId":4067,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4068},{"value":"previous","foreignId":4069},{"value":"suspendAll","foreignId":4070}]}],"base":""},"sequencing":[{"id":"id2835665","choice":false,"flow":true,"useCurrentAttemptObjectiveInfo":false,"foreignId":4091,"rule":[{"type":"exit","action":"exit","foreignId":4092,"condition":[{"condition":"satisfied","foreignId":4093}]},{"type":"post","action":"continue","foreignId":4094,"condition":[{"condition":"satisfied","foreignId":4095}]}]},{"id":"id2844067","choice":false,"flow":true,"foreignId":4096}],"base":"./data/ilias3_scorm2004/lm_data/lm_225/","foreignId":4052,"id":"LMSTestPackage_RU-06a"}', '0', '225', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-06b","title":"LMS Test Content Package RU-06b ","sequencingId":"id2835664","foreignId":4098,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2820358","foreignId":4099,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=RU-06b&act=2","foreignId":4100,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4101},{"value":"previous","foreignId":4102},{"value":"suspendAll","foreignId":4103}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-06b&act=3","foreignId":4104,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4105},{"value":"previous","foreignId":4106},{"value":"suspendAll","foreignId":4107}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-06b&act=4","foreignId":4108,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4109},{"value":"previous","foreignId":4110},{"value":"suspendAll","foreignId":4111}]}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-06b&act=5","foreignId":4112,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4113},{"value":"previous","foreignId":4114},{"value":"suspendAll","foreignId":4115}]}],"base":""},"sequencing":[{"id":"id2820358","choice":false,"flow":true,"useCurrentAttemptProgressInfo":false,"foreignId":4136,"rule":[{"type":"exit","action":"exit","foreignId":4137,"condition":[{"condition":"satisfied","foreignId":4138}]},{"type":"post","action":"continue","foreignId":4139,"condition":[{"condition":"satisfied","foreignId":4140}]},{"type":"rollup","childActivitySet":"atLeastCount","minimumCount":2,"action":"satisfied","foreignId":4141,"condition":[{"condition":"completed","foreignId":4142}]}]},{"id":"id2835664","choice":false,"flow":true,"foreignId":4143}],"base":"./data/ilias3_scorm2004/lm_data/lm_226/","foreignId":4097,"id":"LMSTestPackage_RU-06b"}', '0', '226', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-07a","title":"LMS Test Content Package RU-07a ","sequencingId":"id2832252","foreignId":4145,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-07a&act=1","foreignId":4146,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4147},{"value":"previous","foreignId":4148},{"value":"suspendAll","foreignId":4149}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2836245","foreignId":4150,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-07a&act=3","sequencingId":"id2832236","foreignId":4151,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4152},{"value":"previous","foreignId":4153},{"value":"suspendAll","foreignId":4154}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-07a&act=4","sequencingId":"id2850277","foreignId":4155,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4156},{"value":"previous","foreignId":4157},{"value":"suspendAll","foreignId":4158}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-07a&act=5","foreignId":4159,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4160},{"value":"previous","foreignId":4161},{"value":"suspendAll","foreignId":4162}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-07a&act=6","foreignId":4163,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4164},{"value":"previous","foreignId":4165},{"value":"suspendAll","foreignId":4166}]}],"base":""},"sequencing":[{"id":"id2832236","attemptLimit":1,"requiredForSatisfied":"ifNotSkipped","requiredForNotSatisfied":"ifNotSkipped","rollupProgressCompletion":false,"foreignId":4187,"rule":[{"type":"pre","action":"skip","foreignId":4188,"condition":[{"condition":"attemptLimitExceeded","foreignId":4189}]}]},{"id":"id2850277","requiredForSatisfied":"ifAttempted","requiredForNotSatisfied":"ifAttempted","requiredForCompleted":"ifAttempted","foreignId":4190,"rule":[{"type":"pre","action":"skip","foreignId":4191,"condition":[{"condition":"always","foreignId":4192}]}]},{"id":"id2836245","choice":false,"flow":true,"foreignId":4193,"rule":[{"type":"exit","action":"exit","foreignId":4194,"condition":[{"condition":"completed","foreignId":4195}]},{"type":"post","action":"retry","foreignId":4196,"condition":[{"operator":"not","condition":"satisfied","foreignId":4197}]}]},{"id":"id2832252","choice":false,"flow":true,"foreignId":4198}],"base":"./data/ilias3_scorm2004/lm_data/lm_227/","foreignId":4144,"id":"LMSTestPackage_RU-07a"}', '0', '227', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-07b","title":"LMS Test Content Package RU-07b ","sequencingId":"id2850246","foreignId":4200,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-07b&act=1","foreignId":4201,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4202},{"value":"previous","foreignId":4203},{"value":"suspendAll","foreignId":4204}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2853206","foreignId":4205,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-07b&act=3","sequencingId":"id2835912","foreignId":4206,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4207},{"value":"previous","foreignId":4208},{"value":"suspendAll","foreignId":4209}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-07b&act=4","sequencingId":"id2815734","foreignId":4210,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4211},{"value":"previous","foreignId":4212},{"value":"suspendAll","foreignId":4213}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-07b&act=5","foreignId":4214,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4215},{"value":"previous","foreignId":4216},{"value":"suspendAll","foreignId":4217}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-07b&act=6","foreignId":4218,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4219},{"value":"previous","foreignId":4220},{"value":"suspendAll","foreignId":4221}]}],"base":""},"sequencing":[{"id":"id2835912","attemptLimit":1,"requiredForSatisfied":"ifNotSkipped","rollupProgressCompletion":false,"foreignId":4242,"rule":[{"type":"pre","action":"skip","foreignId":4243,"condition":[{"condition":"attemptLimitExceeded","foreignId":4244}]}]},{"id":"id2815734","requiredForSatisfied":"ifAttempted","requiredForCompleted":"ifAttempted","foreignId":4245,"rule":[{"type":"pre","action":"skip","foreignId":4246,"condition":[{"condition":"always","foreignId":4247}]}]},{"id":"id2853206","choice":false,"flow":true,"foreignId":4248,"rule":[{"type":"exit","action":"exit","foreignId":4249,"condition":[{"condition":"completed","foreignId":4250}]},{"type":"post","action":"retry","foreignId":4251,"condition":[{"operator":"not","condition":"satisfied","foreignId":4252}]}]},{"id":"id2850246","choice":false,"flow":true,"foreignId":4253}],"base":"./data/ilias3_scorm2004/lm_data/lm_228/","foreignId":4199,"id":"LMSTestPackage_RU-07b"}', '0', '228', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-07c","title":"LMS Test Content Package RU-07c ","sequencingId":"id2852293","foreignId":4255,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2849899","foreignId":4256,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=RU-07c&act=2","foreignId":4257,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4258},{"value":"previous","foreignId":4259},{"value":"suspendAll","foreignId":4260}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-07c&act=3","foreignId":4261,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4262},{"value":"previous","foreignId":4263},{"value":"suspendAll","foreignId":4264}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-07c&act=4","foreignId":4265,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4266},{"value":"previous","foreignId":4267},{"value":"suspendAll","foreignId":4268}]}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-07c&act=5","foreignId":4269,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4270},{"value":"previous","foreignId":4271},{"value":"suspendAll","foreignId":4272}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-07c&act=6","sequencingId":"id2859301","foreignId":4273,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4274},{"value":"previous","foreignId":4275},{"value":"suspendAll","foreignId":4276}]}],"base":""},"sequencing":[{"id":"id2849899","choice":false,"flow":true,"attemptLimit":2,"requiredForSatisfied":"ifNotSkipped","rollupProgressCompletion":false,"foreignId":4297,"rule":[{"type":"pre","action":"skip","foreignId":4298,"condition":[{"condition":"attemptLimitExceeded","foreignId":4299}]}]},{"id":"id2859301","rollupObjectiveSatisfied":false,"rollupProgressCompletion":false,"foreignId":4300},{"id":"id2852293","choice":false,"flow":true,"foreignId":4301,"rule":[{"type":"exit","action":"exit","foreignId":4302,"condition":[{"condition":"completed","foreignId":4303}]},{"type":"post","action":"retry","foreignId":4304,"condition":[{"operator":"not","condition":"satisfied","foreignId":4305}]}]}],"base":"./data/ilias3_scorm2004/lm_data/lm_229/","foreignId":4254,"id":"LMSTestPackage_RU-07c"}', '0', '229', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-08a","title":"LMS Test Content Package RU-08a ","sequencingId":"id3094007","foreignId":4307,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-08a&act=1","foreignId":4308,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4309},{"value":"previous","foreignId":4310},{"value":"suspendAll","foreignId":4311}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id3093412","foreignId":4312,"item":[{"id":"activity_3","title":"Activity 3","sequencingId":"id3099562","foreignId":4313,"item":[{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-08a&act=4","foreignId":4314,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4315},{"value":"previous","foreignId":4316},{"value":"suspendAll","foreignId":4317}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-08a&act=5","foreignId":4318,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4319},{"value":"previous","foreignId":4320},{"value":"suspendAll","foreignId":4321}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-08a&act=6","foreignId":4322,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4323},{"value":"previous","foreignId":4324},{"value":"suspendAll","foreignId":4325}]}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=RU-08a&act=7","sequencingId":"id3112339","foreignId":4326,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4327},{"value":"previous","foreignId":4328},{"value":"suspendAll","foreignId":4329}]}]},{"id":"activity_8","title":"Activity 8","parameters":"tc=RU-08a&act=8","foreignId":4330,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4331},{"value":"previous","foreignId":4332},{"value":"suspendAll","foreignId":4333}]}],"base":""},"sequencing":[{"id":"id3099562","choice":false,"flow":true,"foreignId":4354,"rule":[{"type":"exit","action":"exit","foreignId":4355,"condition":[{"condition":"satisfied","foreignId":4356}]},{"type":"post","action":"exitParent","foreignId":4357,"condition":[{"condition":"satisfied","foreignId":4358}]},{"type":"rollup","action":"incomplete","foreignId":4359,"condition":[{"condition":"objectiveStatusKnown","foreignId":4360},{"condition":"objectiveMeasureKnown","foreignId":4361},{"condition":"activityProgressKnown","foreignId":4362}]},{"type":"rollup","action":"satisfied","foreignId":4363,"condition":[{"condition":"attempted","foreignId":4364}]}]},{"id":"id3112339","requiredForCompleted":"ifAttempted","foreignId":4365},{"id":"id3093412","choice":false,"flow":true,"foreignId":4366,"rule":[{"type":"post","action":"previous","foreignId":4367,"condition":[{"condition":"completed","foreignId":4368}]},{"type":"rollup","action":"completed","conditionCombination":"all","foreignId":4369,"condition":[{"condition":"activityProgressKnown","foreignId":4370},{"condition":"completed","operator":"not","foreignId":4371}]}]},{"id":"id3094007","choice":false,"flow":true,"foreignId":4372}],"base":"./data/ilias3_scorm2004/lm_data/lm_230/","foreignId":4306,"id":"LMSTestPackage_RU-08a"}', '0', '230', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-08b","title":"LMS Test Content Package RU-08b ","sequencingId":"id2835144","foreignId":4374,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-08b&act=1","foreignId":4375,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4376},{"value":"previous","foreignId":4377},{"value":"suspendAll","foreignId":4378}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2835519","foreignId":4379,"item":[{"id":"activity_3","title":"Activity 3","sequencingId":"id2857593","foreignId":4380,"item":[{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-08b&act=4","sequencingId":"id2835367","foreignId":4381,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4382},{"value":"previous","foreignId":4383},{"value":"suspendAll","foreignId":4384}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-08b&act=5","sequencingId":"id2835628","foreignId":4385,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4386},{"value":"previous","foreignId":4387},{"value":"suspendAll","foreignId":4388}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-08b&act=6","sequencingId":"id2832247","foreignId":4389,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4390},{"value":"previous","foreignId":4391},{"value":"suspendAll","foreignId":4392}]}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=RU-08b&act=7","foreignId":4393,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4394},{"value":"previous","foreignId":4395},{"value":"suspendAll","foreignId":4396}]}]},{"id":"activity_8","title":"Activity 8","parameters":"tc=RU-08b&act=8","foreignId":4397,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4398},{"value":"previous","foreignId":4399},{"value":"suspendAll","foreignId":4400}]}],"base":""},"sequencing":[{"id":"id2835367","completionSetByContent":true,"objectiveSetByContent":true,"foreignId":4421},{"id":"id2835628","completionSetByContent":true,"objectiveSetByContent":true,"foreignId":4422},{"id":"id2832247","completionSetByContent":true,"objectiveSetByContent":true,"foreignId":4423},{"id":"id2857593","choice":false,"flow":true,"foreignId":4424,"rule":[{"type":"exit","action":"exit","foreignId":4425,"condition":[{"condition":"satisfied","foreignId":4426}]},{"type":"post","action":"exitParent","foreignId":4427,"condition":[{"condition":"satisfied","foreignId":4428}]},{"type":"rollup","action":"incomplete","foreignId":4429,"condition":[{"condition":"objectiveStatusKnown","foreignId":4430},{"condition":"objectiveMeasureKnown","foreignId":4431},{"condition":"activityProgressKnown","foreignId":4432}]},{"type":"rollup","action":"satisfied","foreignId":4433,"condition":[{"condition":"attempted","foreignId":4434}]}]},{"id":"id2835519","choice":false,"flow":true,"foreignId":4435,"rule":[{"type":"post","action":"previous","foreignId":4436,"condition":[{"condition":"completed","foreignId":4437}]},{"type":"rollup","action":"completed","conditionCombination":"all","foreignId":4438,"condition":[{"condition":"activityProgressKnown","foreignId":4439},{"condition":"completed","operator":"not","foreignId":4440}]}]},{"id":"id2835144","choice":false,"flow":true,"foreignId":4441}],"base":"./data/ilias3_scorm2004/lm_data/lm_231/","foreignId":4373,"id":"LMSTestPackage_RU-08b"}', '0', '231', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-09","title":"LMS Test Content Package RU-09 ","sequencingId":"id2622963","foreignId":4443,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-09&act=1","foreignId":4444,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4445},{"value":"previous","foreignId":4446},{"value":"suspendAll","foreignId":4447}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2623166","foreignId":4448,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-09&act=3","foreignId":4449,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4450},{"value":"previous","foreignId":4451},{"value":"suspendAll","foreignId":4452}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-09&act=4","sequencingId":"id2623309","foreignId":4453,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4454},{"value":"previous","foreignId":4455},{"value":"suspendAll","foreignId":4456}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-09&act=5","foreignId":4457,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4458},{"value":"previous","foreignId":4459},{"value":"suspendAll","foreignId":4460}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-09&act=6","foreignId":4461,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4462},{"value":"previous","foreignId":4463},{"value":"suspendAll","foreignId":4464}]}],"base":""},"sequencing":[{"id":"id2623309","attemptLimit":2,"requiredForSatisfied":"ifNotSkipped","requiredForCompleted":"ifNotSkipped","requiredForIncomplete":"ifNotSkipped","foreignId":4485,"rule":[{"type":"pre","action":"skip","foreignId":4486,"condition":[{"condition":"attemptLimitExceeded","foreignId":4487}]}]},{"id":"id2623166","choice":false,"flow":true,"foreignId":4488,"rule":[{"type":"exit","action":"exit","foreignId":4489,"condition":[{"condition":"satisfied","foreignId":4490}]},{"type":"post","action":"retryAll","foreignId":4491,"condition":[{"operator":"not","condition":"completed","foreignId":4492}]},{"type":"post","action":"continue","foreignId":4493,"condition":[{"condition":"completed","foreignId":4494}]}]},{"id":"id2622963","choice":false,"flow":true,"foreignId":4495}],"base":"./data/ilias3_scorm2004/lm_data/lm_232/","foreignId":4442,"id":"LMSTestPackage_RU-09"}', '0', '232', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-10","title":"LMS Test Content Package RU-10 ","sequencingId":"id2695362","foreignId":4497,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-10&act=1","foreignId":4498,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4499},{"value":"previous","foreignId":4500},{"value":"suspendAll","foreignId":4501}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2693746","foreignId":4502,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-10&act=3","foreignId":4503,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4504},{"value":"previous","foreignId":4505},{"value":"suspendAll","foreignId":4506}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-10&act=4","foreignId":4507,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4508},{"value":"previous","foreignId":4509},{"value":"suspendAll","foreignId":4510}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-10&act=5","foreignId":4511,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4512},{"value":"previous","foreignId":4513},{"value":"suspendAll","foreignId":4514}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-10&act=6","foreignId":4515,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4516},{"value":"previous","foreignId":4517},{"value":"suspendAll","foreignId":4518}]}],"base":""},"sequencing":[{"id":"id2693746","choice":false,"flow":true,"tracked":false,"foreignId":4539,"rule":[{"type":"exit","action":"exit","foreignId":4540,"condition":[{"condition":"completed","foreignId":4541}]},{"type":"post","action":"previous","foreignId":4542,"condition":[{"condition":"completed","foreignId":4543}]},{"type":"rollup","action":"completed","foreignId":4544,"condition":[{"condition":"satisfied","foreignId":4545}]}]},{"id":"id2695362","choice":false,"flow":true,"foreignId":4546}],"base":"./data/ilias3_scorm2004/lm_data/lm_233/","foreignId":4496,"id":"LMSTestPackage_RU-10"}', '0', '233', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-11","title":"LMS Test Content Package RU-11 ","sequencingId":"id2821665","foreignId":4548,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-11&act=1","foreignId":4549,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4550},{"value":"previous","foreignId":4551},{"value":"suspendAll","foreignId":4552}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2817761","foreignId":4553,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-11&act=3","sequencingId":"id2835269","foreignId":4554,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4555},{"value":"previous","foreignId":4556},{"value":"suspendAll","foreignId":4557}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-11&act=4","sequencingId":"id2835169","foreignId":4558,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4559},{"value":"previous","foreignId":4560},{"value":"suspendAll","foreignId":4561}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=RU-11&act=5","sequencingId":"id2817750","foreignId":4562,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4563},{"value":"previous","foreignId":4564},{"value":"suspendAll","foreignId":4565}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=RU-11&act=6","foreignId":4566,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4567},{"value":"previous","foreignId":4568},{"value":"suspendAll","foreignId":4569}]}],"base":""},"sequencing":[{"id":"id2835269","tracked":false,"foreignId":4590,"objective":[{"primary":true,"objectiveID":"","foreignId":4591}]},{"id":"id2835169","tracked":false,"foreignId":4592},{"id":"id2817750","tracked":false,"foreignId":4593},{"id":"id2817761","choice":false,"flow":true,"foreignId":4594,"rule":[{"type":"exit","action":"exit","foreignId":4595,"condition":[{"condition":"completed","foreignId":4596}]},{"type":"post","action":"previous","foreignId":4597,"condition":[{"condition":"completed","foreignId":4598}]},{"type":"rollup","action":"completed","foreignId":4599,"condition":[{"condition":"objectiveStatusKnown","operator":"not","foreignId":4600}]}]},{"id":"id2821665","choice":false,"flow":true,"foreignId":4601}],"base":"./data/ilias3_scorm2004/lm_data/lm_234/","foreignId":4547,"id":"LMSTestPackage_RU-11"}', '0', '234', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-12a","title":"LMS Test Content Package RU-12a ","sequencingId":"id2620884","foreignId":4603,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-12a&act=1","foreignId":4604,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4605},{"value":"previous","foreignId":4606},{"value":"suspendAll","foreignId":4607}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2621117","foreignId":4608,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-12a&act=3","foreignId":4609,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4610},{"value":"previous","foreignId":4611},{"value":"suspendAll","foreignId":4612}]}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-12a&act=4","foreignId":4613,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4614},{"value":"previous","foreignId":4615},{"value":"suspendAll","foreignId":4616}]}],"base":""},"sequencing":[{"id":"id2621117","choice":false,"flow":true,"foreignId":4637,"rule":[{"type":"exit","action":"exit","foreignId":4638,"condition":[{"condition":"always","foreignId":4639}]},{"type":"post","action":"previous","foreignId":4640,"condition":[{"operator":"not","condition":"objectiveStatusKnown","foreignId":4641}]},{"type":"post","action":"retry","foreignId":4642,"condition":[{"condition":"satisfied","foreignId":4643}]},{"type":"rollup","action":"notSatisfied","foreignId":4644,"condition":[{"condition":"satisfied","operator":"not","foreignId":4645}]}]},{"id":"id2620884","choice":false,"flow":true,"foreignId":4646}],"base":"./data/ilias3_scorm2004/lm_data/lm_235/","foreignId":4602,"id":"LMSTestPackage_RU-12a"}', '0', '235', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"RU-12b","title":"LMS Test Content Package RU-12b ","sequencingId":"id2681527","foreignId":4648,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=RU-12b&act=1","foreignId":4649,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4650},{"value":"previous","foreignId":4651},{"value":"suspendAll","foreignId":4652}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2681832","foreignId":4653,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=RU-12b&act=3","foreignId":4654,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4655},{"value":"previous","foreignId":4656},{"value":"suspendAll","foreignId":4657}]}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=RU-12b&act=4","foreignId":4658,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4659},{"value":"previous","foreignId":4660},{"value":"suspendAll","foreignId":4661}]}],"base":""},"sequencing":[{"id":"id2681832","choice":false,"flow":true,"foreignId":4682,"rule":[{"type":"exit","action":"exit","foreignId":4683,"condition":[{"condition":"always","foreignId":4684}]},{"type":"post","action":"previous","foreignId":4685,"condition":[{"operator":"not","condition":"activityProgressKnown","foreignId":4686}]},{"type":"post","action":"retry","foreignId":4687,"condition":[{"condition":"completed","foreignId":4688}]},{"type":"rollup","action":"incomplete","foreignId":4689,"condition":[{"condition":"completed","operator":"not","foreignId":4690}]}]},{"id":"id2681527","choice":false,"flow":true,"foreignId":4691}],"base":"./data/ilias3_scorm2004/lm_data/lm_236/","foreignId":4647,"id":"LMSTestPackage_RU-12b"}', '0', '236', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"SX-02","title":"LMS Test Content Package SX-02 ","sequencingId":"id2868122","foreignId":4693,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=SX-02&act=1","foreignId":4694,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_2","title":"Activity 2","sequencingId":"id2836148","foreignId":4695,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=SX-02&act=3","completionThreshold":0.5,"foreignId":4696,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_4","title":"Activity 4","parameters":"tc=SX-02&act=4","foreignId":4697,"href":"resources/SequencingTest.htm","sco":1},{"id":"activity_5","title":"Activity 5","parameters":"tc=SX-02&act=5","completionThreshold":0.75,"foreignId":4698,"href":"resources/SequencingTest.htm","sco":1}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=SX-02&act=6","foreignId":4699,"href":"resources/SequencingTest.htm","sco":1}],"base":""},"sequencing":[{"id":"id2836148","choice":false,"flow":true,"foreignId":4720,"rule":[{"type":"exit","action":"exit","foreignId":4721,"condition":[{"condition":"satisfied","foreignId":4722}]},{"type":"post","action":"previous","foreignId":4723,"condition":[{"condition":"satisfied","foreignId":4724}]},{"type":"rollup","action":"satisfied","foreignId":4725,"condition":[{"condition":"completed","foreignId":4726}]}]},{"id":"id2868122","choice":false,"flow":true,"foreignId":4727}],"base":"./data/ilias3_scorm2004/lm_data/lm_237/","foreignId":4692,"id":"LMSTestPackage_SX-02"}', '0', '237', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"SX-03","title":"LMS Test Content Package SX-03","sequencingId":"id2698680","foreignId":4729,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=SX-03&act=1","sequencingId":"id2699284","foreignId":4730,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4731},{"value":"previous","foreignId":4732},{"value":"suspendAll","foreignId":4733}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2699004","foreignId":4734,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=SX-03&act=3","sequencingId":"id2698909","foreignId":4735,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"nttttttttcontinuenttttttt","foreignId":4736},{"value":"nttttttttpreviousnttttttt","foreignId":4737},{"value":"n suspendAlln ","foreignId":4738}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=SX-03&act=4","foreignId":4739,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"nttttttttcontinuenttttttt","foreignId":4740},{"value":"nttttttttpreviousnttttttt","foreignId":4741},{"value":"n suspendAlln ","foreignId":4742}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=SX-03&act=5","foreignId":4743,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"nttttttttcontinuenttttttt","foreignId":4744},{"value":"nttttttttpreviousnttttttt","foreignId":4745},{"value":"n suspendAlln ","foreignId":4746}]}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=SX-03&act=6","foreignId":4747,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4748},{"value":"previous","foreignId":4749},{"value":"suspendAll","foreignId":4750}]}],"base":""},"sequencing":[{"id":"id2699284","foreignId":4771,"objective":[{"primary":true,"objectiveID":"","foreignId":4772},{"primary":false,"objectiveID":"obj1","foreignId":4773,"mapInfo":[{"targetObjectiveID":"gObj-SX03-1","readSatisfiedStatus":false,"readNormalizedMeasure":false,"writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":4774}]},{"primary":false,"objectiveID":"obj2","foreignId":4775,"mapInfo":[{"targetObjectiveID":"gObj-SX03-2","readSatisfiedStatus":false,"readNormalizedMeasure":false,"writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":4776}]},{"primary":false,"objectiveID":"obj3","foreignId":4777,"mapInfo":[{"targetObjectiveID":"gObj-SX03-3","readSatisfiedStatus":false,"readNormalizedMeasure":false,"writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":4778}]}]},{"id":"id2698909","foreignId":4779,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":"nttttttttt0.6ntttttttt","foreignId":4780,"mapInfo":[{"targetObjectiveID":"gObj-SX03-1","foreignId":4781}]}]},{"id":"id2699004","choice":false,"flow":true,"foreignId":4782,"rule":[{"type":"exit","action":"exit","foreignId":4783,"condition":[{"condition":"completed","foreignId":4784}]},{"type":"post","action":"previous","foreignId":4785,"condition":[{"condition":"completed","foreignId":4786}]},{"type":"rollup","action":"completed","foreignId":4787,"condition":[{"condition":"satisfied","foreignId":4788}]}]},{"id":"id2698680","choice":false,"flow":true,"foreignId":4789}],"base":"./data/ilias3_scorm2004/lm_data/lm_238/","foreignId":4728,"id":"LMSTestPackage_SX-03"}', '0', '238', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"SX-04a","title":"LMS Test Content Package SX-04a","sequencingId":"id2696373","foreignId":4791,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=SX-04a&act=1","sequencingId":"id2624783","foreignId":4792,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4793},{"value":"previous","foreignId":4794},{"value":"suspendAll","foreignId":4795}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=SX-04a&act=2","foreignId":4796,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4797},{"value":"previous","foreignId":4798},{"value":"suspendAll","foreignId":4799}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=SX-04a&act=3","foreignId":4800,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4801},{"value":"previous","foreignId":4802},{"value":"suspendAll","foreignId":4803}]}],"base":""},"sequencing":[{"id":"id2624783","foreignId":4824,"rule":[{"type":"pre","action":"skip","foreignId":4825,"condition":[{"condition":"satisfied","foreignId":4826}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":4827,"mapInfo":[{"targetObjectiveID":"gObj-SX04a","writeSatisfiedStatus":true,"foreignId":4828}]}]},{"id":"id2696373","choice":false,"flow":true,"foreignId":4829}],"base":"./data/ilias3_scorm2004/lm_data/lm_239/","foreignId":4790,"id":"LMSTestPackage_SX-04a"}', '0', '239', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"SX-04b","title":"LMS Test Content Package SX-04b","sequencingId":"id3005863","foreignId":4831,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=SX-04b&act=1","sequencingId":"id3000006","foreignId":4832,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4833},{"value":"previous","foreignId":4834},{"value":"suspendAll","foreignId":4835}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=SX-04b&act=2","foreignId":4836,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4837},{"value":"previous","foreignId":4838},{"value":"suspendAll","foreignId":4839}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=SX-04b&act=3","foreignId":4840,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4841},{"value":"previous","foreignId":4842},{"value":"suspendAll","foreignId":4843}]}],"base":""},"sequencing":[{"id":"id3000006","foreignId":4864,"rule":[{"type":"pre","conditionCombination":"any","action":"skip","foreignId":4865,"condition":[{"condition":"satisfied","foreignId":4866},{"condition":"completed","foreignId":4867}]}]},{"id":"id3005863","flow":true,"foreignId":4868}],"base":"./data/ilias3_scorm2004/lm_data/lm_240/","foreignId":4830,"id":"LMSTestPackage_SX-04b"}', '0', '240', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"SX-05","title":"LMS Test Content Package SX-05","sequencingId":"id2695987","foreignId":4870,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=SX-05&act=1","sequencingId":"id2686705","foreignId":4871,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4872},{"value":"previous","foreignId":4873},{"value":"suspendAll","foreignId":4874}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=SX-05&act=2","sequencingId":"id2687557","foreignId":4875,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4876},{"value":"previous","foreignId":4877},{"value":"suspendAll","foreignId":4878}]},{"id":"activity_3","title":"Activity 3","sequencingId":"id2698812","foreignId":4879,"item":[{"id":"activity_4","title":"Activity 4","sequencingId":"id2699280","foreignId":4880,"item":[{"id":"activity_5","title":"Activity 5","parameters":"tc=SX-05&act=5","sequencingId":"id2699316","foreignId":4881,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4882},{"value":"previous","foreignId":4883},{"value":"suspendAll","foreignId":4884}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=SX-05&act=6","sequencingId":"id2696380","foreignId":4885,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4886},{"value":"previous","foreignId":4887},{"value":"suspendAll","foreignId":4888}]}]},{"id":"activity_7","title":"Activity 7","sequencingId":"id2696287","foreignId":4889,"item":[{"id":"activity_8","title":"Activity 8","parameters":"tc=SX-05&act=8","sequencingId":"id2686689","foreignId":4890,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4891},{"value":"previous","foreignId":4892},{"value":"suspendAll","foreignId":4893}]},{"id":"activity_9","title":"Activity 9","parameters":"tc=SX-05&act=9","sequencingId":"id2699208","foreignId":4894,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4895},{"value":"previous","foreignId":4896},{"value":"suspendAll","foreignId":4897}]}]},{"id":"activity_10","title":"Activity 10","parameters":"tc=SX-05&act=10","sequencingId":"id2681469","foreignId":4898,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4899},{"value":"previous","foreignId":4900},{"value":"suspendAll","foreignId":4901}]}]}],"base":""},"sequencing":[{"id":"id2686705","rollupObjectiveSatisfied":false,"rollupProgressCompletion":false,"foreignId":4922,"rule":[{"type":"pre","action":"skip","foreignId":4923,"condition":[{"condition":"satisfied","foreignId":4924}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":4925,"mapInfo":[{"targetObjectiveID":"gObj-SX05-1","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4926}]}]},{"id":"id2687557","rollupObjectiveSatisfied":false,"rollupProgressCompletion":false,"foreignId":4927,"rule":[{"type":"pre","action":"skip","foreignId":4928,"condition":[{"condition":"satisfied","foreignId":4929}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":4930,"mapInfo":[{"targetObjectiveID":"gObj-SX05-2","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4931}]}]},{"id":"id2699316","foreignId":4932,"rule":[{"type":"pre","action":"skip","foreignId":4933,"condition":[{"referencedObjective":"obj-SX05-3a","condition":"satisfied","foreignId":4934}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":4935},{"primary":false,"objectiveID":"obj-SX05-3a","foreignId":4936,"mapInfo":[{"targetObjectiveID":"gObj-SX05-3a","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4937}]}]},{"id":"id2696380","foreignId":4938,"rule":[{"type":"pre","action":"skip","foreignId":4939,"condition":[{"referencedObjective":"obj-SX05-3b","condition":"satisfied","foreignId":4940}]},{"type":"post","conditionCombination":"any","action":"retryAll","foreignId":4941,"condition":[{"referencedObjective":"obj-SX05-3a","operator":"not","condition":"satisfied","foreignId":4942},{"referencedObjective":"obj-SX05-3b","operator":"not","condition":"satisfied","foreignId":4943}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":4944},{"primary":false,"objectiveID":"obj-SX05-3a","foreignId":4945,"mapInfo":[{"targetObjectiveID":"gObj-SX05-3a","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4946}]},{"primary":false,"objectiveID":"obj-SX05-3b","foreignId":4947,"mapInfo":[{"targetObjectiveID":"gObj-SX05-3b","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4948}]}]},{"id":"id2699280","choice":false,"flow":true,"foreignId":4949},{"id":"id2686689","foreignId":4950,"rule":[{"type":"pre","action":"skip","foreignId":4951,"condition":[{"referencedObjective":"obj-SX05-4a","condition":"satisfied","foreignId":4952}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":4953},{"primary":false,"objectiveID":"obj-SX05-4a","foreignId":4954,"mapInfo":[{"targetObjectiveID":"gObj-SX05-4a","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4955}]}]},{"id":"id2699208","foreignId":4956,"rule":[{"type":"pre","action":"skip","foreignId":4957,"condition":[{"referencedObjective":"obj-SX05-4b","condition":"satisfied","foreignId":4958}]},{"type":"post","conditionCombination":"any","action":"retryAll","foreignId":4959,"condition":[{"referencedObjective":"obj-SX05-4a","operator":"not","condition":"satisfied","foreignId":4960},{"referencedObjective":"obj-SX05-4b","operator":"not","condition":"satisfied","foreignId":4961}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":4962},{"primary":false,"objectiveID":"obj-SX05-4a","foreignId":4963,"mapInfo":[{"targetObjectiveID":"gObj-SX05-4a","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4964}]},{"primary":false,"objectiveID":"obj-SX05-4b","foreignId":4965,"mapInfo":[{"targetObjectiveID":"gObj-SX05-4b","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4966}]}]},{"id":"id2696287","choice":false,"flow":true,"foreignId":4967},{"id":"id2681469","rollupObjectiveSatisfied":false,"rollupProgressCompletion":false,"foreignId":4968,"rule":[{"type":"post","action":"exitParent","foreignId":4969,"condition":[{"condition":"always","foreignId":4970}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":4971},{"primary":false,"objectiveID":"obj-SX05-5","foreignId":4972,"mapInfo":[{"targetObjectiveID":"gObj-SX05-5","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4973}]},{"primary":false,"objectiveID":"obj-SX05-3a","foreignId":4974,"mapInfo":[{"targetObjectiveID":"gObj-SX05-3a","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4975}]},{"primary":false,"objectiveID":"obj-SX05-3b","foreignId":4976,"mapInfo":[{"targetObjectiveID":"gObj-SX05-3b","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4977}]},{"primary":false,"objectiveID":"obj-SX05-4a","foreignId":4978,"mapInfo":[{"targetObjectiveID":"gObj-SX05-4a","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4979}]},{"primary":false,"objectiveID":"obj-SX05-4b","foreignId":4980,"mapInfo":[{"targetObjectiveID":"gObj-SX05-4b","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4981}]}]},{"id":"id2698812","choice":false,"flow":true,"foreignId":4982,"rule":[{"type":"post","action":"retry","foreignId":4983,"condition":[{"referencedObjective":"obj-SX05-5","operator":"not","condition":"satisfied","foreignId":4984}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":4985},{"primary":false,"objectiveID":"obj-SX05-5","foreignId":4986,"mapInfo":[{"targetObjectiveID":"gObj-SX05-5","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"foreignId":4987}]}]},{"id":"id2695987","choice":false,"flow":true,"foreignId":4988}],"base":"./data/ilias3_scorm2004/lm_data/lm_241/","foreignId":4869,"id":"SeqConTest_SX-05"}', '0', '241', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"SX-06","title":"LMS Test Content Package SX-06","sequencingId":"id3003378","foreignId":4990,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=SX-06&act=1","foreignId":4991,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4992},{"value":"previous","foreignId":4993},{"value":"suspendAll","foreignId":4994}]},{"id":"activity_2","title":"Activity 2","parameters":"tc=SX-06&act=2","sequencingId":"id3095010","foreignId":4995,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":4996},{"value":"previous","foreignId":4997},{"value":"suspendAll","foreignId":4998}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=SX-06&act=3","foreignId":4999,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5000},{"value":"previous","foreignId":5001},{"value":"suspendAll","foreignId":5002}]}],"base":""},"sequencing":[{"id":"id3095010","foreignId":5023,"rule":[{"type":"post","action":"continue","foreignId":5024,"condition":[{"condition":"completed","foreignId":5025}]},{"type":"post","action":"retry","foreignId":5026,"condition":[{"operator":"not","condition":"completed","foreignId":5027}]}]},{"id":"id3003378","choice":false,"flow":true,"foreignId":5028}],"base":"./data/ilias3_scorm2004/lm_data/lm_242/","foreignId":4989,"id":"LMSTestPackage_SX-06"}', '0', '242', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"SX-07a","title":"LMS Test Content Package SX-07a ","sequencingId":"id2862126","foreignId":5030,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2837196","foreignId":5031,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=SX-07a&act=2","sequencingId":"id2837123","foreignId":5032,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5033},{"value":"previous","foreignId":5034},{"value":"suspendAll","foreignId":5035}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=SX-07a&act=3","foreignId":5036,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5037},{"value":"previous","foreignId":5038},{"value":"suspendAll","foreignId":5039}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=SX-07a&act=4","foreignId":5040,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5041},{"value":"previous","foreignId":5042},{"value":"suspendAll","foreignId":5043}]}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=SX-07a&act=5","foreignId":5044,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5045},{"value":"previous","foreignId":5046},{"value":"suspendAll","foreignId":5047}]}],"base":""},"sequencing":[{"id":"id2837123","foreignId":5068,"rule":[{"type":"pre","action":"skip","foreignId":5069,"condition":[{"operator":"not","condition":"completed","foreignId":5070}]}]},{"id":"id2837196","choice":false,"flow":true,"foreignId":5071},{"id":"id2862126","choice":false,"flow":true,"foreignId":5072}],"base":"./data/ilias3_scorm2004/lm_data/lm_243/","foreignId":5029,"id":"LMSTestPackage_SX-07a"}', '0', '243', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"SX-07b","title":"LMS Test Content Package SX-07b","sequencingId":"id2834188","foreignId":5074,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2836154","foreignId":5075,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=SX-07b&act=2","sequencingId":"id2837340","foreignId":5076,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5077},{"value":"previous","foreignId":5078},{"value":"suspendAll","foreignId":5079}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=SX-07b&act=3","foreignId":5080,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5081},{"value":"previous","foreignId":5082},{"value":"suspendAll","foreignId":5083}]}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=SX-07b&act=4","foreignId":5084,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5085},{"value":"previous","foreignId":5086},{"value":"suspendAll","foreignId":5087}]}],"base":""},"sequencing":[{"id":"id2837340","foreignId":5108,"rule":[{"type":"pre","action":"skip","foreignId":5109,"condition":[{"operator":"not","condition":"satisfied","foreignId":5110}]}]},{"id":"id2836154","choice":false,"flow":true,"foreignId":5111},{"id":"id2834188","flow":true,"foreignId":5112}],"base":"./data/ilias3_scorm2004/lm_data/lm_244/","foreignId":5073,"id":"LMSTestPackage_SX-07b"}', '0', '244', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"SX-07c","title":"LMS Test Content Package SX-07c ","sequencingId":"id2817705","foreignId":5114,"item":[{"id":"activity_1","title":"Activity 1","sequencingId":"id2861852","foreignId":5115,"item":[{"id":"activity_2","title":"Activity 2","parameters":"tc=SX-07c&act=2","sequencingId":"id2837019","foreignId":5116,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5117},{"value":"previous","foreignId":5118},{"value":"suspendAll","foreignId":5119}]},{"id":"activity_3","title":"Activity 3","parameters":"tc=SX-07c&act=3","foreignId":5120,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5121},{"value":"previous","foreignId":5122},{"value":"suspendAll","foreignId":5123}]}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=SX-07c&act=4","foreignId":5124,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5125},{"value":"previous","foreignId":5126},{"value":"suspendAll","foreignId":5127}]}],"base":""},"sequencing":[{"id":"id2837019","foreignId":5148,"rule":[{"type":"pre","action":"skip","foreignId":5149,"condition":[{"condition":"satisfied","foreignId":5150}]}]},{"id":"id2861852","choice":false,"flow":true,"foreignId":5151,"rule":[{"type":"exit","action":"exit","foreignId":5152,"condition":[{"condition":"completed","foreignId":5153}]},{"type":"post","action":"retry","foreignId":5154,"condition":[{"condition":"completed","foreignId":5155}]}]},{"id":"id2817705","choice":false,"flow":true,"foreignId":5156}],"base":"./data/ilias3_scorm2004/lm_data/lm_245/","foreignId":5113,"id":"LMSTestPackage_SX-07c"}', '0', '245', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"SX-07d","title":"LMS Test Content Package SX-07d ","sequencingId":"id2837821","foreignId":5158,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=SX-07d&act=1","foreignId":5159,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5160},{"value":"previous","foreignId":5161},{"value":"suspendAll","foreignId":5162}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2813984","foreignId":5163,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=SX-07d&act=3","sequencingId":"id2862147","foreignId":5164,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5165},{"value":"previous","foreignId":5166},{"value":"suspendAll","foreignId":5167}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=SX-07d&act=4","sequencingId":"id2812723","foreignId":5168,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5169},{"value":"previous","foreignId":5170},{"value":"suspendAll","foreignId":5171}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=SX-07d&act=5","sequencingId":"id2837145","foreignId":5172,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5173},{"value":"previous","foreignId":5174},{"value":"suspendAll","foreignId":5175}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=SX-07d&act=6","foreignId":5176,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5177},{"value":"previous","foreignId":5178},{"value":"suspendAll","foreignId":5179}]}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=SX-07d&act=7","foreignId":5180,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5181},{"value":"previous","foreignId":5182},{"value":"suspendAll","foreignId":5183}]}],"base":""},"sequencing":[{"id":"id2862147","foreignId":5204,"rule":[{"type":"pre","action":"skip","foreignId":5205,"condition":[{"condition":"satisfied","foreignId":5206}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":-0.5,"foreignId":5207}]},{"id":"id2812723","foreignId":5208,"rule":[{"type":"pre","action":"skip","foreignId":5209,"condition":[{"condition":"completed","foreignId":5210}]}]},{"id":"id2837145","foreignId":5211,"rule":[{"type":"pre","action":"skip","foreignId":5212,"condition":[{"condition":"satisfied","foreignId":5213}]}]},{"id":"id2813984","choice":false,"flow":true,"foreignId":5214},{"id":"id2837821","choice":false,"flow":true,"foreignId":5215}],"base":"./data/ilias3_scorm2004/lm_data/lm_246/","foreignId":5157,"id":"LMSTestPackage_SX-07d"}', '0', '246', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"SX-07e","title":"LMS Test Content Package SX-07e ","sequencingId":"id2861765","foreignId":5217,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=SX-07e&act=1","foreignId":5218,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5219},{"value":"previous","foreignId":5220},{"value":"suspendAll","foreignId":5221}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2818780","foreignId":5222,"item":[{"id":"activity_3","title":"Activity 3","parameters":"tc=SX-07e&act=3","foreignId":5223,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5224},{"value":"previous","foreignId":5225},{"value":"suspendAll","foreignId":5226}]},{"id":"activity_4","title":"Activity 4","parameters":"tc=SX-07e&act=4","sequencingId":"id2834249","foreignId":5227,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5228},{"value":"previous","foreignId":5229},{"value":"suspendAll","foreignId":5230}]},{"id":"activity_5","title":"Activity 5","parameters":"tc=SX-07e&act=5","sequencingId":"id2836098","foreignId":5231,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5232},{"value":"previous","foreignId":5233},{"value":"suspendAll","foreignId":5234}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=SX-07e&act=6","sequencingId":"id2835895","foreignId":5235,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5236},{"value":"previous","foreignId":5237},{"value":"suspendAll","foreignId":5238}]}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=SX-07e&act=7","foreignId":5239,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5240},{"value":"previous","foreignId":5241},{"value":"suspendAll","foreignId":5242}]}],"base":""},"sequencing":[{"id":"id2834249","foreignId":5263,"rule":[{"type":"pre","action":"skip","foreignId":5264,"condition":[{"condition":"satisfied","foreignId":5265}]}]},{"id":"id2836098","foreignId":5266,"rule":[{"type":"pre","action":"skip","foreignId":5267,"condition":[{"condition":"satisfied","foreignId":5268}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0,"foreignId":5269}]},{"id":"id2835895","foreignId":5270,"rule":[{"type":"pre","action":"skip","foreignId":5271,"condition":[{"condition":"completed","foreignId":5272}]}]},{"id":"id2818780","choice":false,"flow":true,"foreignId":5273},{"id":"id2861765","choice":false,"flow":true,"foreignId":5274}],"base":"./data/ilias3_scorm2004/lm_data/lm_247/","foreignId":5216,"id":"LMSTestPackage_SX-07e"}', '0', '247', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"T-01a","title":"LMS Test Content Package T-01a ","sequencingId":"id2675932","foreignId":5276,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=T-01a&act=1","sequencingId":"id2675739","foreignId":5277,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5278},{"value":"previous","foreignId":5279},{"value":"suspendAll","foreignId":5280}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2675998","foreignId":5281,"item":[{"id":"activity_3","title":"Activity 3","sequencingId":"module","foreignId":5282,"item":[{"id":"activity_4","title":"Activity 4","sequencingId":"id2675451","foreignId":5283,"item":[{"id":"activity_5","title":"Activity 5","parameters":"tc=T-01a&act=5","foreignId":5284,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5285},{"value":"previous","foreignId":5286},{"value":"suspendAll","foreignId":5287}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=T-01a&act=6","foreignId":5288,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5289},{"value":"previous","foreignId":5290},{"value":"suspendAll","foreignId":5291}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=T-01a&act=7","foreignId":5292,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5293},{"value":"previous","foreignId":5294},{"value":"suspendAll","foreignId":5295}]}]},{"id":"activity_8","title":"Activity 8","sequencingId":"id2675173","foreignId":5296,"item":[{"id":"activity_9","title":"Activity 9","parameters":"tc=T-01a&act=9","foreignId":5297,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5298},{"value":"previous","foreignId":5299},{"value":"suspendAll","foreignId":5300}]},{"id":"activity_10","title":"Activity 10","parameters":"tc=T-01a&act=10","foreignId":5301,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5302},{"value":"previous","foreignId":5303},{"value":"suspendAll","foreignId":5304}]},{"id":"activity_11","title":"Activity 11","parameters":"tc=T-01a&act=11","foreignId":5305,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5306},{"value":"previous","foreignId":5307},{"value":"suspendAll","foreignId":5308}]}]},{"id":"activity_12","title":"Activity 12","sequencingId":"id2674918","foreignId":5309,"item":[{"id":"activity_13","title":"Activity 13","parameters":"tc=T-01a&act=13","foreignId":5310,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5311},{"value":"previous","foreignId":5312},{"value":"suspendAll","foreignId":5313}]},{"id":"activity_14","title":"Activity 14","parameters":"tc=T-01a&act=14","foreignId":5314,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5315},{"value":"previous","foreignId":5316},{"value":"suspendAll","foreignId":5317}]},{"id":"activity_15","title":"Activity 15","parameters":"tc=T-01a&act=15","foreignId":5318,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5319},{"value":"previous","foreignId":5320},{"value":"suspendAll","foreignId":5321}]}]}]},{"id":"activity_16","title":"Activity 16","sequencingId":"module","foreignId":5322,"item":[{"id":"activity_17","title":"Activty 17","sequencingId":"id2674604","foreignId":5323,"item":[{"id":"activity_18","title":"Activity 18","parameters":"tc=T-01a&act=18","foreignId":5324,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5325},{"value":"previous","foreignId":5326},{"value":"suspendAll","foreignId":5327}]},{"id":"activity_19","title":"Activity 19","parameters":"tc=T-01a&act=19","foreignId":5328,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5329},{"value":"previous","foreignId":5330},{"value":"suspendAll","foreignId":5331}]},{"id":"activity_20","title":"Activity 20","parameters":"tc=T-01a&act=20","foreignId":5332,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5333},{"value":"previous","foreignId":5334},{"value":"suspendAll","foreignId":5335}]}]},{"id":"activity_21","title":"Activity 21","sequencingId":"id2674322","foreignId":5336,"item":[{"id":"activity_22","title":"Activity 22","parameters":"tc=T-01a&act=22","foreignId":5337,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5338},{"value":"previous","foreignId":5339},{"value":"suspendAll","foreignId":5340}]},{"id":"activity_23","title":"Activity 23","parameters":"tc=T-01a&act=23","foreignId":5341,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5342},{"value":"previous","foreignId":5343},{"value":"suspendAll","foreignId":5344}]},{"id":"activity_24","title":"Activity 24","parameters":"tc=T-01a&act=24","foreignId":5345,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5346},{"value":"previous","foreignId":5347},{"value":"suspendAll","foreignId":5348}]}]},{"id":"activity_25","title":"Activity 25","sequencingId":"id2668217","foreignId":5349,"item":[{"id":"activity_26","title":"Activity 26","parameters":"tc=T-01a&act=26","foreignId":5350,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5351},{"value":"previous","foreignId":5352},{"value":"suspendAll","foreignId":5353}]},{"id":"activity_27","title":"Activity 27","parameters":"tc=T-01a&act=27","foreignId":5354,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5355},{"value":"previous","foreignId":5356},{"value":"suspendAll","foreignId":5357}]},{"id":"activity_28","title":"Activity 28","parameters":"tc=T-01a&act=28","foreignId":5358,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5359},{"value":"previous","foreignId":5360},{"value":"suspendAll","foreignId":5361}]}]}]},{"id":"activity_29","title":"Activity 29","sequencingId":"module","foreignId":5362,"item":[{"id":"activity_30","title":"Activity 30","sequencingId":"id2668137","foreignId":5363,"item":[{"id":"activity_31","title":"Activity 31","parameters":"tc=T-01a&act=31","foreignId":5364,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5365},{"value":"previous","foreignId":5366},{"value":"suspendAll","foreignId":5367}]},{"id":"activity_32","title":"Activity 32","parameters":"tc=T-01a&act=32","foreignId":5368,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5369},{"value":"previous","foreignId":5370},{"value":"suspendAll","foreignId":5371}]},{"id":"activity_33","title":"Activity 33","parameters":"tc=T-01a&act=33","foreignId":5372,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5373},{"value":"previous","foreignId":5374},{"value":"suspendAll","foreignId":5375}]}]},{"id":"activity_34","title":"Activity 34","sequencingId":"id2678102","foreignId":5376,"item":[{"id":"activity_35","title":"Activity 35","parameters":"tc=T-01a&act=35","foreignId":5377,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5378},{"value":"previous","foreignId":5379},{"value":"suspendAll","foreignId":5380}]},{"id":"activity_36","title":"Activity 36","parameters":"tc=T-01a&act=36","foreignId":5381,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5382},{"value":"previous","foreignId":5383},{"value":"suspendAll","foreignId":5384}]},{"id":"activity_37","title":"Activity 37","parameters":"tc=T-01a&act=37","foreignId":5385,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5386},{"value":"previous","foreignId":5387},{"value":"suspendAll","foreignId":5388}]}]},{"id":"activity_38","title":"Activity 38","sequencingId":"id2618945","foreignId":5389,"item":[{"id":"activity_39","title":"Activity 39","parameters":"tc=T-01a&act=39","foreignId":5390,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5391},{"value":"previous","foreignId":5392},{"value":"suspendAll","foreignId":5393}]},{"id":"activity_40","title":"Activity 40","parameters":"tc=T-01a&act=40","foreignId":5394,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5395},{"value":"previous","foreignId":5396},{"value":"suspendAll","foreignId":5397}]},{"id":"activity_41","title":"Activity 41","parameters":"tc=T-01a&act=41","foreignId":5398,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5399},{"value":"previous","foreignId":5400},{"value":"suspendAll","foreignId":5401}]}]}]}]},{"id":"activity_42","title":"Activity 42","parameters":"tc=T-01a&act=42","sequencingId":"id2678246","foreignId":5402,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5403},{"value":"previous","foreignId":5404},{"value":"suspendAll","foreignId":5405}]}],"base":""},"sequencing":[{"id":"id2675739","rollupObjectiveSatisfied":false,"foreignId":5426},{"id":"id2675451","sequencingId":"pretest","foreignId":5427,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":5428,"mapInfo":[{"targetObjectiveID":"gObj-T01a-1","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":5429}]}]},{"id":"id2675173","sequencingId":"lessons","foreignId":5430,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":5431,"mapInfo":[{"targetObjectiveID":"gObj-T01a-1","foreignId":5432}]}]},{"id":"id2674918","sequencingId":"posttest","foreignId":5433,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":5434,"mapInfo":[{"targetObjectiveID":"gObj-T01a-1","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":5435}]}]},{"id":"id2674604","sequencingId":"pretest","foreignId":5436,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":5437,"mapInfo":[{"targetObjectiveID":"gObj-T01a-2","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":5438}]}]},{"id":"id2674322","sequencingId":"lessons","foreignId":5439,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":5440,"mapInfo":[{"targetObjectiveID":"gObj-T01a-2","foreignId":5441}]}]},{"id":"id2668217","sequencingId":"posttest","foreignId":5442,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":5443,"mapInfo":[{"targetObjectiveID":"gObj-T01a-2","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":5444}]}]},{"id":"id2668137","sequencingId":"pretest","foreignId":5445,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":5446,"mapInfo":[{"targetObjectiveID":"gObj-T01a-3","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":5447}]}]},{"id":"id2678102","sequencingId":"lessons","foreignId":5448,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":5449,"mapInfo":[{"targetObjectiveID":"gObj-T01a-3","foreignId":5450}]}]},{"id":"id2618945","sequencingId":"posttest","foreignId":5451,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":5452,"mapInfo":[{"targetObjectiveID":"gObj-T01a-3","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":5453}]}]},{"id":"id2675998","choice":false,"flow":true,"foreignId":5454,"rule":[{"type":"exit","action":"exit","foreignId":5455,"condition":[{"condition":"completed","foreignId":5456}]},{"type":"post","action":"continue","foreignId":5457,"condition":[{"condition":"always","foreignId":5458}]}]},{"id":"id2678246","attemptLimit":1,"rollupObjectiveSatisfied":false,"foreignId":5459,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":5460},{"primary":false,"objectiveID":"obj1","foreignId":5461,"mapInfo":[{"targetObjectiveID":"gObj-T01a-1","foreignId":5462}]},{"primary":false,"objectiveID":"obj2","foreignId":5463,"mapInfo":[{"targetObjectiveID":"gObj-T01a-2","foreignId":5464}]},{"primary":false,"objectiveID":"obj3","foreignId":5465,"mapInfo":[{"targetObjectiveID":"gObj-T01a-3","foreignId":5466}]}]},{"id":"id2675932","choice":false,"flow":true,"foreignId":5467,"rule":[{"type":"exit","action":"exit","foreignId":5468,"condition":[{"condition":"completed","foreignId":5469}]},{"type":"rollup","childActivitySet":"any","action":"notSatisfied","foreignId":5470,"condition":[{"condition":"satisfied","operator":"not","foreignId":5471}]}]},{"id":"pretest","choice":false,"flow":true,"attemptLimit":1,"requiredForCompleted":"ifAttempted","foreignId":5472,"rule":[{"type":"pre","action":"skip","foreignId":5473,"condition":[{"condition":"satisfied","foreignId":5474}]},{"type":"rollup","action":"completed","foreignId":5475,"condition":[{"condition":"attempted","foreignId":5476}]}]},{"id":"lessons","choice":false,"flow":true,"rollupObjectiveSatisfied":false,"rollupProgressCompletion":false,"foreignId":5477,"rule":[{"type":"pre","action":"skip","foreignId":5478,"condition":[{"condition":"satisfied","foreignId":5479}]}]},{"id":"posttest","choice":false,"flow":true,"attemptLimit":1,"requiredForCompleted":"ifNotSkipped","foreignId":5480,"rule":[{"type":"pre","action":"skip","foreignId":5481,"condition":[{"condition":"satisfied","foreignId":5482}]},{"type":"rollup","action":"completed","foreignId":5483,"condition":[{"condition":"attempted","foreignId":5484}]}]},{"id":"module","choice":false,"flow":true,"foreignId":5485,"rule":[{"type":"exit","action":"exit","foreignId":5486,"condition":[{"condition":"completed","foreignId":5487}]}]}],"base":"./data/ilias3_scorm2004/lm_data/lm_248/","foreignId":5275,"id":"LMSTestPackage_T-01a"}', '0', '248', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"T-01b","title":"LMS Test Content Package T-01b","sequencingId":"id2817663","foreignId":5489,"item":[{"id":"activity_1","title":"Activity 1","parameters":"tc=T-01b&act=1","sequencingId":"id2820366","foreignId":5490,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5491},{"value":"previous","foreignId":5492},{"value":"suspendAll","foreignId":5493}]},{"id":"activity_2","title":"Activity 2","sequencingId":"id2837025","foreignId":5494,"item":[{"id":"activity_3","title":"Activity 3","sequencingId":"module","foreignId":5495,"item":[{"id":"activity_4","title":"Activity 4","sequencingId":"id2820213","foreignId":5496,"item":[{"id":"activity_5","title":"Activity 5","parameters":"tc=T-01b&act=5","foreignId":5497,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5498},{"value":"previous","foreignId":5499},{"value":"suspendAll","foreignId":5500}]},{"id":"activity_6","title":"Activity 6","parameters":"tc=T-01b&act=6","foreignId":5501,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5502},{"value":"previous","foreignId":5503},{"value":"suspendAll","foreignId":5504}]},{"id":"activity_7","title":"Activity 7","parameters":"tc=T-01b&act=7","foreignId":5505,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5506},{"value":"previous","foreignId":5507},{"value":"suspendAll","foreignId":5508}]}]},{"id":"activity_8","title":"Activity 8","sequencingId":"id2837293","foreignId":5509,"item":[{"id":"activity_9","title":"Activity 9","parameters":"tc=T-01b&act=9","sequencingId":"id2843255","foreignId":5510,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5511},{"value":"previous","foreignId":5512},{"value":"suspendAll","foreignId":5513}]},{"id":"activity_10","title":"Activity 10","parameters":"tc=T-01b&act=10","sequencingId":"id2820281","foreignId":5514,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5515},{"value":"previous","foreignId":5516},{"value":"suspendAll","foreignId":5517}]},{"id":"activity_11","title":"Activity 11","parameters":"tc=T-01b&act=11","foreignId":5518,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5519},{"value":"previous","foreignId":5520},{"value":"suspendAll","foreignId":5521}]}]},{"id":"activity_12","title":"Activity 12","sequencingId":"id2820160","foreignId":5522,"item":[{"id":"activity_13","title":"Activity 13","parameters":"tc=T-01b&act=13","foreignId":5523,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5524},{"value":"previous","foreignId":5525},{"value":"suspendAll","foreignId":5526}]},{"id":"activity_14","title":"Activity 14","parameters":"tc=T-01b&act=14","foreignId":5527,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5528},{"value":"previous","foreignId":5529},{"value":"suspendAll","foreignId":5530}]},{"id":"activity_15","title":"Activity 15","parameters":"tc=T-01b&act=15","foreignId":5531,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5532},{"value":"previous","foreignId":5533},{"value":"suspendAll","foreignId":5534}]}]}]},{"id":"activity_16","title":"Activity 16","sequencingId":"module","foreignId":5535,"item":[{"id":"activity_17","title":"Activty 17","sequencingId":"id2850173","foreignId":5536,"item":[{"id":"activity_18","title":"Activity 18","parameters":"tc=T-01b&act=18","foreignId":5537,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5538},{"value":"previous","foreignId":5539},{"value":"suspendAll","foreignId":5540}]},{"id":"activity_19","title":"Activity 19","parameters":"tc=T-01b&act=19","foreignId":5541,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5542},{"value":"previous","foreignId":5543},{"value":"suspendAll","foreignId":5544}]},{"id":"activity_20","title":"Activity 20","parameters":"tc=T-01b&act=20","foreignId":5545,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5546},{"value":"previous","foreignId":5547},{"value":"suspendAll","foreignId":5548}]}]},{"id":"activity_21","title":"Activity 21","sequencingId":"id2820322","foreignId":5549,"item":[{"id":"activity_22","title":"Activity 22","parameters":"tc=T-01b&act=22","foreignId":5550,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5551},{"value":"previous","foreignId":5552},{"value":"suspendAll","foreignId":5553}]},{"id":"activity_23","title":"Activity 23","parameters":"tc=T-01b&act=23","foreignId":5554,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5555},{"value":"previous","foreignId":5556},{"value":"suspendAll","foreignId":5557}]},{"id":"activity_24","title":"Activity 24","parameters":"tc=T-01b&act=24","foreignId":5558,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5559},{"value":"previous","foreignId":5560},{"value":"suspendAll","foreignId":5561}]}]},{"id":"activity_25","title":"Activity 25","sequencingId":"id2843649","foreignId":5562,"item":[{"id":"activity_26","title":"Activity 26","parameters":"tc=T-01b&act=26","foreignId":5563,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5564},{"value":"previous","foreignId":5565},{"value":"suspendAll","foreignId":5566}]},{"id":"activity_27","title":"Activity 27","parameters":"tc=T-01b&act=27","foreignId":5567,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5568},{"value":"previous","foreignId":5569},{"value":"suspendAll","foreignId":5570}]},{"id":"activity_28","title":"Activity 28","parameters":"tc=T-01b&act=28","foreignId":5571,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5572},{"value":"previous","foreignId":5573},{"value":"suspendAll","foreignId":5574}]}]}]},{"id":"activity_29","title":"Activity 29","sequencingId":"module","foreignId":5575,"item":[{"id":"activity_30","title":"Activity 30","sequencingId":"id2837175","foreignId":5576,"item":[{"id":"activity_31","title":"Activity 31","parameters":"tc=T-01b&act=31","foreignId":5577,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5578},{"value":"previous","foreignId":5579},{"value":"suspendAll","foreignId":5580}]},{"id":"activity_32","title":"Activity 32","parameters":"tc=T-01b&act=32","foreignId":5581,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5582},{"value":"previous","foreignId":5583},{"value":"suspendAll","foreignId":5584}]},{"id":"activity_33","title":"Activity 33","parameters":"tc=T-01b&act=33","foreignId":5585,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5586},{"value":"previous","foreignId":5587},{"value":"suspendAll","foreignId":5588}]}]},{"id":"activity_34","title":"Activity 34","sequencingId":"id2820477","foreignId":5589,"item":[{"id":"activity_35","title":"Activity 35","parameters":"tc=T-01b&act=35","foreignId":5590,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5591},{"value":"previous","foreignId":5592},{"value":"suspendAll","foreignId":5593}]},{"id":"activity_36","title":"Activity 36","parameters":"tc=T-01b&act=36","foreignId":5594,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5595},{"value":"previous","foreignId":5596},{"value":"suspendAll","foreignId":5597}]},{"id":"activity_37","title":"Activity 37","parameters":"tc=T-01b&act=37","foreignId":5598,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5599},{"value":"previous","foreignId":5600},{"value":"suspendAll","foreignId":5601}]}]},{"id":"activity_38","title":"Activity 38","sequencingId":"id2843571","foreignId":5602,"item":[{"id":"activity_39","title":"Activity 39","parameters":"tc=T-01b&act=39","foreignId":5603,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5604},{"value":"previous","foreignId":5605},{"value":"suspendAll","foreignId":5606}]},{"id":"activity_40","title":"Activity 40","parameters":"tc=T-01b&act=40","foreignId":5607,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5608},{"value":"previous","foreignId":5609},{"value":"suspendAll","foreignId":5610}]},{"id":"activity_41","title":"Activity 41","parameters":"tc=T-01b&act=41","foreignId":5611,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5612},{"value":"previous","foreignId":5613},{"value":"suspendAll","foreignId":5614}]}]}]}]},{"id":"activity_42","title":"Activity 42","parameters":"tc=T-01b&act=42","sequencingId":"id2837119","foreignId":5615,"href":"resources/SequencingTest.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":5616},{"value":"previous","foreignId":5617},{"value":"suspendAll","foreignId":5618}]}],"base":""},"sequencing":[{"id":"id2820366","rollupObjectiveSatisfied":false,"foreignId":5639},{"id":"id2820213","sequencingId":"pretest","foreignId":5640,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":5641,"mapInfo":[{"targetObjectiveID":"gObj-T01b-1","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":5642}]}]},{"id":"id2843255","tracked":false,"foreignId":5643,"objective":[{"primary":true,"objectiveID":"","foreignId":5644},{"primary":false,"objectiveID":"obj1","foreignId":5645}]},{"id":"id2820281","tracked":false,"foreignId":5646,"objective":[{"primary":true,"objectiveID":"","foreignId":5647},{"primary":false,"objectiveID":"obj2","foreignId":5648},{"primary":false,"objectiveID":"obj3","foreignId":5649},{"primary":false,"objectiveID":"obj4","foreignId":5650},{"primary":false,"objectiveID":"obj5","foreignId":5651},{"primary":false,"objectiveID":"obj6","foreignId":5652}]},{"id":"id2837293","sequencingId":"lessons","foreignId":5653,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":5654,"mapInfo":[{"targetObjectiveID":"gObj-T01b-1","foreignId":5655}]}]},{"id":"id2820160","sequencingId":"posttest","foreignId":5656,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":5657,"mapInfo":[{"targetObjectiveID":"gObj-T01b-1","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":5658}]}]},{"id":"id2850173","sequencingId":"pretest","foreignId":5659,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":5660,"mapInfo":[{"targetObjectiveID":"gObj-T01b-2","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":5661}]}]},{"id":"id2820322","sequencingId":"lessons","foreignId":5662,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":5663,"mapInfo":[{"targetObjectiveID":"gObj-T01b-2","foreignId":5664}]}]},{"id":"id2843649","sequencingId":"posttest","foreignId":5665,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":5666,"mapInfo":[{"targetObjectiveID":"gObj-T01b-2","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":5667}]}]},{"id":"id2837175","sequencingId":"pretest","foreignId":5668,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":5669,"mapInfo":[{"targetObjectiveID":"gObj-T01b-3","readNormalizedMeasure":false,"writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":5670}]}]},{"id":"id2820477","sequencingId":"lessons","foreignId":5671,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":5672,"mapInfo":[{"targetObjectiveID":"gObj-T01b-3","foreignId":5673}]}]},{"id":"id2843571","sequencingId":"posttest","foreignId":5674,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":5675,"mapInfo":[{"targetObjectiveID":"gObj-T01b-3","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":5676}]}]},{"id":"id2837025","choice":false,"flow":true,"foreignId":5677,"rule":[{"type":"exit","action":"exit","foreignId":5678,"condition":[{"condition":"completed","foreignId":5679}]},{"type":"post","action":"continue","foreignId":5680,"condition":[{"condition":"always","foreignId":5681}]}]},{"id":"id2837119","attemptLimit":1,"rollupObjectiveSatisfied":false,"foreignId":5682,"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","foreignId":5683},{"primary":false,"objectiveID":"obj1","foreignId":5684,"mapInfo":[{"targetObjectiveID":"gObj-T01b-1","foreignId":5685}]},{"primary":false,"objectiveID":"obj2","foreignId":5686,"mapInfo":[{"targetObjectiveID":"gObj-T01b-2","foreignId":5687}]},{"primary":false,"objectiveID":"obj3","foreignId":5688,"mapInfo":[{"targetObjectiveID":"gObj-T01b-3","foreignId":5689}]}]},{"id":"id2817663","choice":false,"flow":true,"foreignId":5690,"rule":[{"type":"exit","action":"exit","foreignId":5691,"condition":[{"condition":"completed","foreignId":5692}]},{"type":"rollup","childActivitySet":"any","action":"notSatisfied","foreignId":5693,"condition":[{"condition":"satisfied","operator":"not","foreignId":5694}]}]},{"id":"pretest","choice":false,"flow":true,"attemptLimit":1,"requiredForCompleted":"ifAttempted","foreignId":5695,"rule":[{"type":"pre","action":"skip","foreignId":5696,"condition":[{"condition":"satisfied","foreignId":5697}]},{"type":"rollup","action":"completed","foreignId":5698,"condition":[{"condition":"attempted","foreignId":5699}]}]},{"id":"lessons","choice":false,"flow":true,"rollupObjectiveSatisfied":false,"rollupProgressCompletion":false,"foreignId":5700,"rule":[{"type":"pre","action":"skip","foreignId":5701,"condition":[{"condition":"satisfied","foreignId":5702}]}]},{"id":"posttest","choice":false,"flow":true,"attemptLimit":1,"requiredForCompleted":"ifNotSkipped","foreignId":5703,"rule":[{"type":"pre","action":"skip","foreignId":5704,"condition":[{"condition":"satisfied","foreignId":5705}]},{"type":"rollup","action":"completed","foreignId":5706,"condition":[{"condition":"attempted","foreignId":5707}]}]},{"id":"module","choice":false,"flow":true,"foreignId":5708,"rule":[{"type":"exit","action":"exit","foreignId":5709,"condition":[{"condition":"completed","foreignId":5710}]}]}],"base":"./data/ilias3_scorm2004/lm_data/lm_249/","foreignId":5488,"id":"LMSTestPackage_T-01b"}', '0', '249', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"blabla","title":"Combating Trafficking in Human Beings","foreignId":5712,"item":[{"id":"u1","title":"Combating Trafficking in Human Beings","foreignId":5713,"item":[{"id":"OSCO1","title":"NATO Policy on Combating Trafficking in Human Beings","foreignId":5714,"href":"./scos/1/index.html","sco":1},{"id":"OSCO2","title":"What is Trafficking in Human Beings?","foreignId":5715,"href":"./scos/2/index.html","sco":1},{"id":"OSCO3","title":"Trafficking in Human Beings: Victims and Perpetrators","foreignId":5716,"href":"./scos/3/index.html","sco":1},{"id":"OSCO4","title":"Impact of Trafficking in Human Beings on NATO-led operations","foreignId":5717,"href":"./scos/4/index.html","sco":1},{"id":"OSCO5","title":"Duties of NATO-led Forces in Preventing Trafficking in Human Beings","foreignId":5718,"href":"./scos/5/index.html","sco":1}]}],"base":""},"base":"./data/il_scorm2004/lm_data/lm_252/","foreignId":5711,"id":"pfplms-42285"}', '0', '252', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"TOC1","title":"Photoshop Example -- Linear","sequencingId":"id382106","foreignId":6174,"item":[{"id":"INTRO","title":"Introduction","sequencingId":"id382584","foreignId":6175,"href":"intro.htm"},{"id":"MODULE1","title":"Module 1 -- Basics","sequencingId":"id382558","foreignId":6176,"item":[{"id":"LESSON1","title":"Lesson 1 -- Interface","foreignId":6177,"href":"Lesson1.htm"},{"id":"LESSON2","title":"Lesson 2 -- Toolbox","foreignId":6178,"href":"Lesson2.htm"},{"id":"LESSON3","title":"Lesson 3 -- Palettes","foreignId":6179,"href":"Lesson3.htm"},{"id":"LESSON4","title":"Lesson 4 -- Layers","foreignId":6180,"href":"Lesson4.htm"}]},{"id":"MODULE2","title":"Module 2 -- Enhancing Images","sequencingId":"id382538","foreignId":6181,"item":[{"id":"LESSON5","title":"Lesson 5 -- Color Balance","foreignId":6182,"href":"Lesson5.htm"},{"id":"LESSON6","title":"Lesson 6 -- Brightness and Contrast","foreignId":6183,"href":"Lesson6.htm"},{"id":"LESSON7","title":"Lesson 7 -- Hue and Saturation","foreignId":6184,"href":"Lesson7.htm"}]},{"id":"MODULE3","title":"Module 3 -- Blending Images","sequencingId":"id382425","foreignId":6185,"item":[{"id":"LESSON8","title":"Lesson 8 -- Selection Tools","foreignId":6186,"href":"Lesson8.htm"},{"id":"LESSON9","title":"Lesson 9 -- Transform","foreignId":6187,"href":"Lesson9.htm"}]},{"id":"EXAM","title":"Exam","sequencingId":"id382240","foreignId":6188,"item":[{"id":"QUESTION1","title":"QUESTION 1","parameters":"main=Exam&sub=Question 1","foreignId":6189,"href":"Question1.htm","sco":1},{"id":"QUESTION2","title":"QUESTION 2","parameters":"main=Exam&sub=Question 2","foreignId":6190,"href":"Question2.htm","sco":1},{"id":"QUESTION3","title":"QUESTION 3","parameters":"main=Exam&sub=Question 3","foreignId":6191,"href":"Question3.htm","sco":1},{"id":"QUESTION4","title":"QUESTION 4","parameters":"main=Exam&sub=Question 4","foreignId":6192,"href":"Question4.htm","sco":1},{"id":"QUESTION5","title":"QUESTION 5","parameters":"main=Exam&sub=Question 5","foreignId":6193,"href":"Question5.htm","sco":1},{"id":"QUESTION6","title":"QUESTION 6","parameters":"main=Exam&sub=Question 6","foreignId":6194,"href":"Question6.htm","sco":1},{"id":"QUESTION7","title":"QUESTION 7","parameters":"main=Exam&sub=Question 7","foreignId":6195,"href":"Question7.htm","sco":1},{"id":"QUESTION8","title":"QUESTION 8","parameters":"main=Exam&sub=Question 8","foreignId":6196,"href":"Question8.htm","sco":1},{"id":"QUESTION9","title":"QUESTION 9","parameters":"main=Exam&sub=Question 9","foreignId":6197,"href":"Question9.htm","sco":1}]}],"base":""},"sequencing":[{"id":"id382584","rollupObjectiveSatisfied":false,"foreignId":6359},{"id":"id382558","choice":false,"flow":true,"rollupObjectiveSatisfied":false,"foreignId":6360},{"id":"id382538","choice":false,"flow":true,"rollupObjectiveSatisfied":false,"foreignId":6361},{"id":"id382425","choice":false,"flow":true,"rollupObjectiveSatisfied":false,"foreignId":6362},{"id":"id382240","choice":false,"flow":true,"foreignId":6363,"rule":[{"type":"rollup","action":"completed","foreignId":6364,"condition":[{"condition":"attempted","foreignId":6365}]}],"objective":[{"primary":true,"objectiveID":"","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":6366}]},{"id":"id382106","choice":false,"flow":true,"foreignId":6367,"rule":[{"type":"exit","action":"exit","foreignId":6368,"condition":[{"condition":"completed","foreignId":6369}]},{"type":"rollup","action":"satisfied","foreignId":6370,"condition":[{"condition":"satisfied","foreignId":6371}]},{"type":"rollup","childActivitySet":"any","action":"notSatisfied","foreignId":6372,"condition":[{"condition":"satisfied","operator":"not","foreignId":6373}]}]}],"base":"./data/il_scorm2004/lm_data/lm_253/","foreignId":6173,"id":"photo-MANIFEST-linear"}', '0', '253', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"TOC1","title":"Photoshop Example -- Linear Controls","sequencingId":"id383665","foreignId":6375,"item":[{"id":"INTRO","title":"Introduction","sequencingId":"id384142","foreignId":6376,"href":"intro.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":6377}]},{"id":"MODULE1","title":"Module 1 -- Basics","sequencingId":"id383693","foreignId":6378,"href":"Lesson1.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6379},{"value":"continue","foreignId":6380}]},{"id":"MODULE2","title":"Module 2 -- Enhancing Images","sequencingId":"id383741","foreignId":6381,"href":"Lesson5.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6382},{"value":"continue","foreignId":6383}]},{"id":"MODULE3","title":"Module 3 -- Blending Images","sequencingId":"id383789","foreignId":6384,"href":"Lesson8.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6385},{"value":"continue","foreignId":6386}]},{"id":"EXAM","title":"Exam","sequencingId":"id383606","foreignId":6387,"item":[{"id":"QUESTION1","title":"QUESTION 1","parameters":"main=Exam&sub=Question 1","foreignId":6388,"href":"Question1.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6389},{"value":"continue","foreignId":6390}]},{"id":"QUESTION2","title":"QUESTION 2","parameters":"main=Exam&sub=Question 2","foreignId":6391,"href":"Question2.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6392},{"value":"continue","foreignId":6393}]},{"id":"QUESTION3","title":"QUESTION 3","parameters":"main=Exam&sub=Question 3","foreignId":6394,"href":"Question3.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6395},{"value":"continue","foreignId":6396}]},{"id":"QUESTION4","title":"QUESTION 4","parameters":"main=Exam&sub=Question 4","foreignId":6397,"href":"Question4.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6398},{"value":"continue","foreignId":6399}]},{"id":"QUESTION5","title":"QUESTION 5","parameters":"main=Exam&sub=Question 5","foreignId":6400,"href":"Question5.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6401},{"value":"continue","foreignId":6402}]},{"id":"QUESTION6","title":"QUESTION 6","parameters":"main=Exam&sub=Question 6","foreignId":6403,"href":"Question6.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6404},{"value":"continue","foreignId":6405}]},{"id":"QUESTION7","title":"QUESTION 7","parameters":"main=Exam&sub=Question 7","foreignId":6406,"href":"Question7.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6407},{"value":"continue","foreignId":6408}]},{"id":"QUESTION8","title":"QUESTION 8","parameters":"main=Exam&sub=Question 8","foreignId":6409,"href":"Question8.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6410},{"value":"continue","foreignId":6411}]},{"id":"QUESTION9","title":"QUESTION 9","parameters":"main=Exam&sub=Question 9","foreignId":6412,"href":"Question9.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6413},{"value":"continue","foreignId":6414}]}]}],"base":""},"sequencing":[{"id":"id384142","rollupObjectiveSatisfied":false,"foreignId":6587},{"id":"id383693","choice":false,"flow":true,"rollupObjectiveSatisfied":false,"foreignId":6588},{"id":"id383741","choice":false,"flow":true,"rollupObjectiveSatisfied":false,"foreignId":6589},{"id":"id383789","choice":false,"flow":true,"rollupObjectiveSatisfied":false,"foreignId":6590},{"id":"id383606","choice":false,"flow":true,"foreignId":6591,"rule":[{"type":"rollup","action":"completed","foreignId":6592,"condition":[{"condition":"attempted","foreignId":6593}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":6594}]},{"id":"id383665","choice":false,"flow":true,"foreignId":6595,"rule":[{"type":"exit","action":"exit","foreignId":6596,"condition":[{"condition":"completed","foreignId":6597}]},{"type":"rollup","action":"satisfied","foreignId":6598,"condition":[{"condition":"satisfied","foreignId":6599}]},{"type":"rollup","childActivitySet":"any","action":"notSatisfied","foreignId":6600,"condition":[{"condition":"satisfied","operator":"not","foreignId":6601}]}]}],"base":"./data/il_scorm2004/lm_data/lm_279/","foreignId":6374,"id":"photo-MANIFEST-linear-controls"}', '0', '279', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"TOC1","title":"Photoshop Example -- Linear Controls","sequencingId":"id383785","foreignId":6603,"item":[{"id":"INTRO","title":"Introduction","sequencingId":"id384077","foreignId":6604,"href":"intro.htm","sco":1,"hideLMSUI":[{"value":"continue","foreignId":6605}]},{"id":"MODULE1","title":"Module 1 -- Basics","sequencingId":"id384117","foreignId":6606,"href":"Lesson1.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6607},{"value":"continue","foreignId":6608}]},{"id":"MODULE2","title":"Module 2 -- Enhancing Images","sequencingId":"id383992","foreignId":6609,"href":"Lesson5.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6610},{"value":"continue","foreignId":6611}]},{"id":"MODULE3","title":"Module 3 -- Blending Images","sequencingId":"id384048","foreignId":6612,"href":"Lesson8.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6613},{"value":"continue","foreignId":6614}]},{"id":"EXAM","title":"Exam","sequencingId":"id383725","foreignId":6615,"item":[{"id":"QUESTION1","title":"QUESTION 1","parameters":"main=Exam&sub=Question 1","foreignId":6616,"href":"Question1.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6617},{"value":"continue","foreignId":6618}]},{"id":"QUESTION2","title":"QUESTION 2","parameters":"main=Exam&sub=Question 2","foreignId":6619,"href":"Question2.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6620},{"value":"continue","foreignId":6621}]},{"id":"QUESTION3","title":"QUESTION 3","parameters":"main=Exam&sub=Question 3","foreignId":6622,"href":"Question3.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6623},{"value":"continue","foreignId":6624}]},{"id":"QUESTION4","title":"QUESTION 4","parameters":"main=Exam&sub=Question 4","foreignId":6625,"href":"Question4.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6626},{"value":"continue","foreignId":6627}]},{"id":"QUESTION5","title":"QUESTION 5","parameters":"main=Exam&sub=Question 5","foreignId":6628,"href":"Question5.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6629},{"value":"continue","foreignId":6630}]},{"id":"QUESTION6","title":"QUESTION 6","parameters":"main=Exam&sub=Question 6","foreignId":6631,"href":"Question6.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6632},{"value":"continue","foreignId":6633}]},{"id":"QUESTION7","title":"QUESTION 7","parameters":"main=Exam&sub=Question 7","foreignId":6634,"href":"Question7.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6635},{"value":"continue","foreignId":6636}]},{"id":"QUESTION8","title":"QUESTION 8","parameters":"main=Exam&sub=Question 8","foreignId":6637,"href":"Question8.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6638},{"value":"continue","foreignId":6639}]},{"id":"QUESTION9","title":"QUESTION 9","parameters":"main=Exam&sub=Question 9","foreignId":6640,"href":"Question9.htm","sco":1,"hideLMSUI":[{"value":"previous","foreignId":6641},{"value":"continue","foreignId":6642}]}]}],"base":""},"sequencing":[{"id":"id384077","rollupObjectiveSatisfied":false,"foreignId":6815},{"id":"id384117","choice":false,"flow":true,"rollupObjectiveSatisfied":false,"foreignId":6816},{"id":"id383992","choice":false,"flow":true,"rollupObjectiveSatisfied":false,"foreignId":6817},{"id":"id384048","choice":false,"flow":true,"rollupObjectiveSatisfied":false,"foreignId":6818},{"id":"id383725","choice":false,"flow":true,"foreignId":6819,"rule":[{"type":"rollup","action":"completed","foreignId":6820,"condition":[{"condition":"attempted","foreignId":6821}]}],"objective":[{"primary":true,"objectiveID":"PRIMARYOBJ","satisfiedByMeasure":true,"minNormalizedMeasure":0.6,"foreignId":6822}]},{"id":"id383785","choice":false,"flow":true,"foreignId":6823,"rule":[{"type":"exit","action":"exit","foreignId":6824,"condition":[{"condition":"completed","foreignId":6825}]},{"type":"rollup","action":"satisfied","foreignId":6826,"condition":[{"condition":"satisfied","foreignId":6827}]},{"type":"rollup","childActivitySet":"any","action":"notSatisfied","foreignId":6828,"condition":[{"condition":"satisfied","operator":"not","foreignId":6829}]}]}],"base":"./data/il_scorm2004/lm_data/lm_280/","foreignId":6602,"id":"photo-MANIFEST-linear-controls"}', '0', '280', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"organization_294673fbf63c4815b45af1651480864c","title":"ILIAS for Admins","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6831,"item":[{"id":"item_8017380e67384e13b735d16511a6c149","title":"Vorabtest","sequencingId":"id381365","foreignId":6832,"href":"e78a86fa23ee48f7a94b940d215c2d61.scorm.html","sco":1},{"id":"item_e4a9c7851c114760b2a3f03e892b5427","title":"Authentifizierung","sequencingId":"id381502","foreignId":6833,"item":[{"id":"item_df1cb952695841938519b1b77d7fc5b6","title":"Hidden Cluster Item","isvisible":false,"sequencingId":"id380310","foreignId":6834,"item":[{"id":"item_8ebe0745ffe24bffa2ceba3682c6f7ec","title":"Authentifizierung 1 ","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6835,"href":"02d2c79bc48441859c3f00f5ec2540c5.scorm.html","sco":1},{"id":"item_3bf16927a417469293bd176b23bf5cb4","title":"Authentifizerung 2 ","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6836,"href":"f5390ebc083c438fb67aa56b67780cff.scorm.html","sco":1},{"id":"item_366683108e61443b911f86a36cfd3ce6","title":"Authentifizierung Nachtest","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6837,"href":"c69a680963fd4ba9803d03b60fa363e8.scorm.html","sco":1},{"id":"item_a0dc6a3eb9714bb2bd7e322087a41b12","title":"Sequence Cap","isvisible":false,"sequencingId":"id380281","foreignId":6838,"href":"SequenceCap.html","sco":1}]},{"id":"item_1ff77533d4084fb9aebf21d3a2154492","title":"Sequence Cap","isvisible":false,"sequencingId":"id381473","foreignId":6839,"href":"SequenceCap.html","sco":1}]},{"id":"item_f321b6f642f04739ae001cb659321fd8","title":"Deployment","sequencingId":"id381269","foreignId":6840,"item":[{"id":"item_55d6e1ad8c0a44f3b27f6bb825f30c61","title":"Nachhilfe zum Deployment","sequencingId":"id381312","foreignId":6841,"href":"1b175b9aa5b441f7ad4a06cb9e989a76.scorm.html","sco":1},{"id":"item_6da130defc4a403b8176bcdeb495a3ac","title":"Deployment I ","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6842,"href":"776fec1461844972b0ee5615f86b479b.scorm.html","sco":1},{"id":"item_c792f8ad0c0e45bb855c3887e5720565","title":"Sequence Cap","isvisible":false,"sequencingId":"id381240","foreignId":6843,"href":"SequenceCap.html","sco":1}]},{"id":"item_8c3a716431ce4514b7ba93400f9f61e6","title":"Ende","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6844,"href":"5de0f6934391493f859f0323f21e6fb3.scorm.html","sco":1}],"base":""},"sequencing":[{"id":"id381365","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","choiceExit":false,"foreignId":6899},{"id":"id380281","foreignId":6900,"rule":[{"type":"post","action":"exitParent","foreignId":6901,"condition":[{"condition":"always","foreignId":6902}]}]},{"id":"id380310","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","attemptLimit":0,"foreignId":6903,"rule":[{"type":"post","action":"retry","foreignId":6904,"condition":[{"referencedObjective":"201c0fcdbe99495ebabe81ec93e19736","measureThreshold":0.66,"condition":"objectiveMeasureLessThan","foreignId":6905}]}]},{"id":"id381473","foreignId":6906,"rule":[{"type":"post","action":"exitParent","foreignId":6907,"condition":[{"condition":"always","foreignId":6908}]}]},{"id":"id381502","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6909,"rule":[{"type":"pre","action":"skip","foreignId":6910,"condition":[{"referencedObjective":"b75d9d2755344021b906853aea56f52f","measureThreshold":0.75,"operator":"not","condition":"objectiveMeasureLessThan","foreignId":6911}]}]},{"id":"id381312","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6912,"rule":[{"type":"pre","action":"skip","foreignId":6913,"condition":[{"referencedObjective":"1d622cc0b1a547019354abfbef60c303","measureThreshold":0.5,"operator":"not","condition":"objectiveMeasureGreaterThan","foreignId":6914},{"referencedObjective":"1d622cc0b1a547019354abfbef60c303","measureThreshold":0.5,"operator":"not","condition":"objectiveMeasureLessThan","foreignId":6915}]}]},{"id":"id381240","foreignId":6916,"rule":[{"type":"post","action":"exitParent","foreignId":6917,"condition":[{"condition":"always","foreignId":6918}]}]},{"id":"id381269","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6919,"rule":[{"type":"pre","action":"skip","foreignId":6920,"condition":[{"referencedObjective":"1d622cc0b1a547019354abfbef60c303","measureThreshold":1,"operator":"not","condition":"objectiveMeasureGreaterThan","foreignId":6921},{"referencedObjective":"1d622cc0b1a547019354abfbef60c303","measureThreshold":1,"operator":"not","condition":"objectiveMeasureLessThan","foreignId":6922}]}]},{"id":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","flow":true,"foreignId":6923,"objective":[{"primary":true,"objectiveID":"","foreignId":6924},{"primary":false,"objectiveID":"b75d9d2755344021b906853aea56f52f","minNormalizedMeasure":0,"foreignId":6925,"mapInfo":[{"targetObjectiveID":"b75d9d2755344021b906853aea56f52f","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":6926}]},{"primary":false,"objectiveID":"1d622cc0b1a547019354abfbef60c303","minNormalizedMeasure":0,"foreignId":6927,"mapInfo":[{"targetObjectiveID":"1d622cc0b1a547019354abfbef60c303","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":6928}]},{"primary":false,"objectiveID":"201c0fcdbe99495ebabe81ec93e19736","minNormalizedMeasure":0,"foreignId":6929,"mapInfo":[{"targetObjectiveID":"201c0fcdbe99495ebabe81ec93e19736","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":6930}]}]}],"base":"./data/il_scorm2004/lm_data/lm_281/","foreignId":6830,"id":"manifest_5fdcd2e25838459c9bc3cee758cf4e5c"}', '0', '281', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"organization_294673fbf63c4815b45af1651480864c","title":"ILIAS for Admins","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6932,"item":[{"id":"item_8017380e67384e13b735d16511a6c149","title":"Vorabtest","sequencingId":"id382028","foreignId":6933,"href":"e78a86fa23ee48f7a94b940d215c2d61.scorm.html","sco":1},{"id":"item_e4a9c7851c114760b2a3f03e892b5427","title":"Authentifizierung","sequencingId":"id381884","foreignId":6934,"item":[{"id":"item_df1cb952695841938519b1b77d7fc5b6","title":"Hidden Cluster Item","isvisible":false,"sequencingId":"id382072","foreignId":6935,"item":[{"id":"item_8ebe0745ffe24bffa2ceba3682c6f7ec","title":"Authentifizierung 1 ","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6936,"href":"02d2c79bc48441859c3f00f5ec2540c5.scorm.html","sco":1},{"id":"item_3bf16927a417469293bd176b23bf5cb4","title":"Authentifizerung 2 ","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6937,"href":"f5390ebc083c438fb67aa56b67780cff.scorm.html","sco":1},{"id":"item_366683108e61443b911f86a36cfd3ce6","title":"Authentifizierung Nachtest","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6938,"href":"c69a680963fd4ba9803d03b60fa363e8.scorm.html","sco":1},{"id":"item_a0dc6a3eb9714bb2bd7e322087a41b12","title":"Sequence Cap","isvisible":false,"sequencingId":"id382139","foreignId":6939,"href":"SequenceCap.html","sco":1}]},{"id":"item_1ff77533d4084fb9aebf21d3a2154492","title":"Sequence Cap","isvisible":false,"sequencingId":"id381856","foreignId":6940,"href":"SequenceCap.html","sco":1}]},{"id":"item_f321b6f642f04739ae001cb659321fd8","title":"Deployment","sequencingId":"id381696","foreignId":6941,"item":[{"id":"item_55d6e1ad8c0a44f3b27f6bb825f30c61","title":"Nachhilfe zum Deployment","sequencingId":"id381946","foreignId":6942,"href":"1b175b9aa5b441f7ad4a06cb9e989a76.scorm.html","sco":1},{"id":"item_6da130defc4a403b8176bcdeb495a3ac","title":"Deployment I ","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6943,"href":"776fec1461844972b0ee5615f86b479b.scorm.html","sco":1},{"id":"item_c792f8ad0c0e45bb855c3887e5720565","title":"Sequence Cap","isvisible":false,"sequencingId":"id381668","foreignId":6944,"href":"SequenceCap.html","sco":1}]},{"id":"item_8c3a716431ce4514b7ba93400f9f61e6","title":"Ende","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":6945,"href":"5de0f6934391493f859f0323f21e6fb3.scorm.html","sco":1}],"base":""},"sequencing":[{"id":"id382028","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","choiceExit":false,"foreignId":7000},{"id":"id382139","foreignId":7001,"rule":[{"type":"post","action":"exitParent","foreignId":7002,"condition":[{"condition":"always","foreignId":7003}]}]},{"id":"id382072","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","attemptLimit":0,"foreignId":7004,"rule":[{"type":"post","action":"retry","foreignId":7005,"condition":[{"referencedObjective":"201c0fcdbe99495ebabe81ec93e19736","measureThreshold":0.66,"condition":"objectiveMeasureLessThan","foreignId":7006}]}]},{"id":"id381856","foreignId":7007,"rule":[{"type":"post","action":"exitParent","foreignId":7008,"condition":[{"condition":"always","foreignId":7009}]}]},{"id":"id381884","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":7010,"rule":[{"type":"pre","action":"skip","foreignId":7011,"condition":[{"referencedObjective":"b75d9d2755344021b906853aea56f52f","measureThreshold":0.75,"operator":"not","condition":"objectiveMeasureLessThan","foreignId":7012}]}]},{"id":"id381946","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":7013,"rule":[{"type":"pre","action":"skip","foreignId":7014,"condition":[{"referencedObjective":"1d622cc0b1a547019354abfbef60c303","measureThreshold":0.5,"operator":"not","condition":"objectiveMeasureGreaterThan","foreignId":7015},{"referencedObjective":"1d622cc0b1a547019354abfbef60c303","measureThreshold":0.5,"operator":"not","condition":"objectiveMeasureLessThan","foreignId":7016}]}]},{"id":"id381668","foreignId":7017,"rule":[{"type":"post","action":"exitParent","foreignId":7018,"condition":[{"condition":"always","foreignId":7019}]}]},{"id":"id381696","sequencingId":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","foreignId":7020,"rule":[{"type":"pre","action":"skip","foreignId":7021,"condition":[{"referencedObjective":"1d622cc0b1a547019354abfbef60c303","measureThreshold":1,"operator":"not","condition":"objectiveMeasureGreaterThan","foreignId":7022},{"referencedObjective":"1d622cc0b1a547019354abfbef60c303","measureThreshold":1,"operator":"not","condition":"objectiveMeasureLessThan","foreignId":7023}]}]},{"id":"sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da","flow":true,"foreignId":7024,"objective":[{"primary":true,"objectiveID":"","foreignId":7025},{"primary":false,"objectiveID":"b75d9d2755344021b906853aea56f52f","minNormalizedMeasure":0,"foreignId":7026,"mapInfo":[{"targetObjectiveID":"b75d9d2755344021b906853aea56f52f","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":7027}]},{"primary":false,"objectiveID":"1d622cc0b1a547019354abfbef60c303","minNormalizedMeasure":0,"foreignId":7028,"mapInfo":[{"targetObjectiveID":"1d622cc0b1a547019354abfbef60c303","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":7029}]},{"primary":false,"objectiveID":"201c0fcdbe99495ebabe81ec93e19736","minNormalizedMeasure":0,"foreignId":7030,"mapInfo":[{"targetObjectiveID":"201c0fcdbe99495ebabe81ec93e19736","writeSatisfiedStatus":true,"writeNormalizedMeasure":true,"foreignId":7031}]}]}],"base":"./data/il_scorm2004/lm_data/lm_283/","foreignId":6931,"id":"manifest_5fdcd2e25838459c9bc3cee758cf4e5c"}', '0', '283', '0', '', ' - -'); -INSERT INTO cp_package VALUES ('0', '', '{"item":{"id":"blabla","title":"Human Trafficking: Causes, Consequences, Counter-Strategies","foreignId":7033,"item":[{"id":"u1","title":"Learning Objects","foreignId":7034,"item":[{"id":"OSCO1","title":"Types of Human Trafficking","foreignId":7035,"href":"./scos/1/index.html","sco":1},{"id":"OSCO2","title":"The History of Human Trafficking","foreignId":7036,"href":"./scos/2/index.html","sco":1},{"id":"OSCO3","title":"Causes of Human Trafficking","foreignId":7037,"href":"./scos/3/index.html","sco":1},{"id":"OSCO4","title":"Consequences of Human Trafficking","foreignId":7038,"href":"./scos/4/index.html","sco":1},{"id":"OSCO5","title":"Strategies against Human Trafficking","foreignId":7039,"href":"./scos/5/index.html","sco":1},{"id":"OSCO6","title":"Challenges to Counter-Trafficking Efforts","foreignId":7040,"href":"./scos/6/index.html","sco":1},{"id":"OSCO7","title":"Human Trafficking: Causes, Consequences, and Counter-Strategies","foreignId":7041,"href":"./scos/7/index.html","sco":1}]}],"base":""},"base":"./data/il_scorm2004/lm_data/lm_284/","foreignId":7032,"id":"pfplms-70633"}', '0', '284', '0', '', ' - -'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_resource -# -INSERT INTO cp_resource VALUES ('resources/', '9', 'AssetLaunchTest.htm', 'ASSETLAUNCH01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '16', 'APIRTETest1.htm', 'APIRTE01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '23', 'APIRTETest2.htm', 'APIRTE02', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '30', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '32', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '34', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '37', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '39', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '41', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '51', 'AssetLaunchTest.htm', 'ASSETLAUNCH01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '58', 'APIRTETest1.htm', 'APIRTE01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '65', 'APIRTETest2.htm', 'APIRTE02', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '72', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '74', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '76', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '79', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '81', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '83', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '99', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '106', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '108', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '110', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '112', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '115', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '117', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '130', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '137', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '139', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '141', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '143', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '146', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '148', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '171', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '178', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '180', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '182', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '184', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '187', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '189', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '215', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '222', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '224', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '226', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '228', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '231', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '233', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '287', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '294', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '296', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '298', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '300', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '303', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '305', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '379', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '386', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '388', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '390', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '392', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '395', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '397', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '417', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '424', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '426', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '428', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '430', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '433', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '435', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '490', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '497', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '499', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '501', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '503', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '506', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '508', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '562', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '569', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '571', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '573', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '575', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '578', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '580', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '615', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '622', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '624', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '626', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '628', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '631', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '633', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '652', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '659', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '661', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '663', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '665', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '668', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '670', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '689', 'SequencingTestFail.htm', 'Seq01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '696', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '703', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '705', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '707', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '709', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '712', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '714', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '752', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '759', 'SequencingTestFail.htm', 'Seq01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '766', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '768', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '770', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '772', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '775', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '777', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '817', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '824', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '826', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '828', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '830', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '833', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '835', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '874', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '881', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '883', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '885', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '887', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '890', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '892', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '910', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '917', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '919', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '921', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '923', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '926', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '928', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '941', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '948', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '950', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '952', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '954', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '957', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '959', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '969', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '976', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '978', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '980', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '982', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '985', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '987', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1014', 'DMBehaviorTest1.htm', 'DMBEHAVIOR01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1021', 'DMBehaviorTest2.htm', 'DMBEHAVIOR02', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1028', 'DMBehaviorTest3.htm', 'DMBEHAVIOR03', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1035', 'DMBehaviorTest4.htm', 'DMBEHAVIOR04', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1042', 'DMBehaviorTest5.htm', 'DMBEHAVIOR05', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1049', 'DMBehaviorTest6.htm', 'DMBEHAVIOR06', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1056', 'DMBehaviorTest7.htm', 'DMBEHAVIOR07', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1063', 'DMBehaviorTest8.htm', 'DMBEHAVIOR08', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1070', 'DMBehaviorTest9.htm', 'DMBEHAVIOR09', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1077', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1079', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1081', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1083', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1086', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1088', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1112', 'DMImplementationTest1.htm', 'DMIMPLEMENTATION01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1119', 'DMImplementationTest2.htm', 'DMIMPLEMENTATION02', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1126', 'DMImplementationTest3.htm', 'DMIMPLEMENTATION03', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1133', 'DMImplementationTest4.htm', 'DMIMPLEMENTATION04', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1140', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1142', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1144', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1146', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1149', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1151', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1176', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1183', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1185', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1187', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1189', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1192', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1194', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1224', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1231', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1233', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1235', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1237', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1240', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1242', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1274', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1281', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1283', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1285', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1287', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1290', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1292', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1309', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1316', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1318', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1320', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1322', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1325', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1327', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1343', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1350', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1352', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1354', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1356', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1359', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1361', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1394', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1401', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1403', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1405', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1407', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1410', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1412', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1445', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1452', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1454', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1456', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1458', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1461', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1463', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1489', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1496', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1498', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1500', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1502', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1505', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1507', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1532', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1539', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1541', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1543', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1545', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1548', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1550', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1575', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1582', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1584', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1586', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1588', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1591', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1593', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1618', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1625', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1627', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1629', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1631', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1634', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1636', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1654', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1661', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1663', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1665', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1667', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1670', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1672', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1699', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1706', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1708', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1710', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1712', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1715', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1717', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1764', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1771', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1773', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1775', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1777', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1780', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1782', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1843', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1850', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1852', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1854', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1856', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1859', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1861', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1920', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1927', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1929', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1931', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1933', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1936', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1938', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '1980', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1987', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '1989', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1991', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1993', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1996', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '1998', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2032', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2039', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2041', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2043', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2045', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2048', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2050', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2080', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2087', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2089', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2091', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2093', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2096', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2098', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2132', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2139', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2141', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2143', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2145', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2148', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2150', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2179', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2186', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2188', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2190', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2192', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2195', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2197', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2227', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2234', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2236', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2238', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2240', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2243', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2245', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2278', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2285', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2287', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2289', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2291', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2294', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2296', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2342', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2349', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2351', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2353', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2355', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2358', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2360', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2402', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2409', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2411', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2413', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2415', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2418', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2420', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2457', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2464', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2466', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2468', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2470', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2473', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2475', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2503', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2510', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2512', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2514', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2516', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2519', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2521', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2549', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2556', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2558', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2560', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2562', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2565', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2567', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2595', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2602', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2604', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2606', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2608', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2611', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2613', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2642', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2649', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2651', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2653', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2655', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2658', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2660', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2691', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2698', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2700', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2702', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2704', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2707', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2709', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2740', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2747', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2749', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2751', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2753', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2756', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2758', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2791', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2798', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2800', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2802', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2804', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2807', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2809', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2832', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2839', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2841', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2843', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2845', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2848', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2850', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2873', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2880', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2882', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2884', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2886', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2889', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2891', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2918', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2925', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2927', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2929', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2931', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2934', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2936', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '2968', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2975', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '2977', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2979', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2981', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2984', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '2986', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3018', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3025', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3027', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3029', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3031', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3034', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3036', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3064', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3071', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3073', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3075', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3077', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3080', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3082', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3137', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3144', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3146', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3148', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3150', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3153', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3155', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3221', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3228', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3230', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3232', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3234', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3237', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3239', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3289', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3296', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3298', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3300', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3302', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3305', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3307', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3338', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3345', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3347', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3349', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3351', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3354', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3356', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3372', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3379', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3381', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3383', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3385', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3388', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3390', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3421', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3428', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3430', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3432', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3434', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3437', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3439', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3470', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3477', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3479', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3481', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3483', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3486', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3488', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3521', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3528', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3530', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3532', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3534', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3537', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3539', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3572', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3579', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3581', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3583', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3585', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3588', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3590', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3624', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3631', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3633', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3635', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3637', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3640', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3642', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3676', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3683', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3685', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3687', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3689', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3692', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3694', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3728', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3735', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3737', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3739', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3741', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3744', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3746', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3780', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3787', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3789', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3791', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3793', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3796', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3798', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3832', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3839', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3841', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3843', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3845', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3848', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3850', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3869', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3876', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3878', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3880', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3882', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3885', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3887', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3921', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3928', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3930', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3932', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3934', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3937', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3939', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '3973', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3980', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '3982', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3984', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3986', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3989', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '3991', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4024', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4031', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4033', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4035', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4037', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4040', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4042', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4071', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4078', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4080', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4082', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4084', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4087', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4089', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4116', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4123', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4125', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4127', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4129', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4132', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4134', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4167', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4174', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4176', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4178', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4180', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4183', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4185', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4222', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4229', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4231', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4233', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4235', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4238', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4240', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4277', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4284', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4286', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4288', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4290', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4293', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4295', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4334', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4341', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4343', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4345', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4347', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4350', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4352', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4401', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4408', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4410', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4412', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4414', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4417', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4419', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4465', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4472', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4474', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4476', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4478', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4481', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4483', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4519', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4526', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4528', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4530', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4532', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4535', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4537', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4570', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4577', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4579', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4581', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4583', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4586', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4588', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4617', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4624', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4626', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4628', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4630', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4633', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4635', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4662', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4669', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4671', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4673', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4675', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4678', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4680', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4700', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4707', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4709', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4711', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4713', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4716', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4718', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4751', 'resources/SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4758', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4760', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4762', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4764', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4767', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4769', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4804', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4811', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4813', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4815', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4817', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4820', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4822', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4844', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4851', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4853', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4855', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4857', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4860', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4862', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '4902', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4909', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '4911', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4913', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4915', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4918', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '4920', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '5003', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5010', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '5012', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5014', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5016', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5019', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5021', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '5048', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5055', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '5057', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5059', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5061', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5064', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5066', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '5088', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5095', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '5097', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5099', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5101', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5104', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5106', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '5128', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5135', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '5137', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5139', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5141', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5144', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5146', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '5184', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5191', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '5193', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5195', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5197', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5200', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5202', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '5243', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5250', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '5252', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5254', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5256', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5259', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5261', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '5406', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5413', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '5415', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5417', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5419', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5422', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5424', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('resources/', '5619', 'SequencingTest.htm', 'SEQ01', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5626', '', 'LMSFNCTS01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('common/', '5628', '', 'JAR01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5630', '', 'ABOUT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5632', '', 'EMULATION01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5635', '', 'BROWSERDETECT01', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5637', '', 'LMSINCLUDE', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5719', './scos/1/index.html', 'SCO1', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5724', './scos/2/index.html', 'SCO2', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5729', './scos/3/index.html', 'SCO3', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5734', './scos/4/index.html', 'SCO4', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5739', './scos/5/index.html', 'SCO5', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5744', '', 'SCO1ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5748', '', 'SCO1P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5753', '', 'SCO1RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5754', '', 'SCO1FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5823', '', 'SCO2ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5827', '', 'SCO2P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5836', '', 'SCO2RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5837', '', 'SCO2FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5906', '', 'SCO3ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5910', '', 'SCO3P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5923', '', 'SCO3RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5924', '', 'SCO3FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5993', '', 'SCO4ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '5997', '', 'SCO4P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6006', '', 'SCO4RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6007', '', 'SCO4FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6076', '', 'SCO5ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6080', '', 'SCO5P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6085', '', 'SCO5RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6086', '', 'SCO5FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6155', '', 'PKG', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6198', 'intro.htm', 'RESOURCE_INTRO', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6203', 'Lesson1.htm', 'RESOURCE_LESSON1', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6211', 'Lesson2.htm', 'RESOURCE_LESSON2', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6228', 'Lesson3.htm', 'RESOURCE_LESSON3', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6236', 'Lesson4.htm', 'RESOURCE_LESSON4', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6251', 'Lesson5.htm', 'RESOURCE_LESSON5', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6263', 'Lesson6.htm', 'RESOURCE_LESSON6', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6275', 'Lesson7.htm', 'RESOURCE_LESSON7', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6287', 'Lesson8.htm', 'RESOURCE_LESSON8', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6308', 'Lesson9.htm', 'RESOURCE_LESSON9', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6332', 'Question1.htm', 'RESOURCE_QUESTION1', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6335', 'Question2.htm', 'RESOURCE_QUESTION2', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6338', 'Question3.htm', 'RESOURCE_QUESTION3', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6341', 'Question4.htm', 'RESOURCE_QUESTION4', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6344', 'Question5.htm', 'RESOURCE_QUESTION5', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6347', 'Question6.htm', 'RESOURCE_QUESTION6', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6350', 'Question7.htm', 'RESOURCE_QUESTION7', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6353', 'Question8.htm', 'RESOURCE_QUESTION8', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6356', 'Question9.htm', 'RESOURCE_QUESTION9', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6415', 'intro.htm', 'RESOURCE_INTRO', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6422', 'Lesson1.htm', 'RESOURCE_LESSON1', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6469', 'Lesson5.htm', 'RESOURCE_LESSON2', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6505', 'Lesson8.htm', 'RESOURCE_LESSON3', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6551', 'Question1.htm', 'RESOURCE_QUESTION1', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6555', 'Question2.htm', 'RESOURCE_QUESTION2', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6559', 'Question3.htm', 'RESOURCE_QUESTION3', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6563', 'Question4.htm', 'RESOURCE_QUESTION4', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6567', 'Question5.htm', 'RESOURCE_QUESTION5', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6571', 'Question6.htm', 'RESOURCE_QUESTION6', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6575', 'Question7.htm', 'RESOURCE_QUESTION7', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6579', 'Question8.htm', 'RESOURCE_QUESTION8', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6583', 'Question9.htm', 'RESOURCE_QUESTION9', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6643', 'intro.htm', 'RESOURCE_INTRO', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6650', 'Lesson1.htm', 'RESOURCE_LESSON1', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6697', 'Lesson5.htm', 'RESOURCE_LESSON2', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6733', 'Lesson8.htm', 'RESOURCE_LESSON3', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6779', 'Question1.htm', 'RESOURCE_QUESTION1', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6783', 'Question2.htm', 'RESOURCE_QUESTION2', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6787', 'Question3.htm', 'RESOURCE_QUESTION3', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6791', 'Question4.htm', 'RESOURCE_QUESTION4', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6795', 'Question5.htm', 'RESOURCE_QUESTION5', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6799', 'Question6.htm', 'RESOURCE_QUESTION6', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6803', 'Question7.htm', 'RESOURCE_QUESTION7', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6807', 'Question8.htm', 'RESOURCE_QUESTION8', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6811', 'Question9.htm', 'RESOURCE_QUESTION9', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6845', 'SequenceCap.html', 'resource_f9bf818889944a0f9b87ade4807e0570', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6847', 'e78a86fa23ee48f7a94b940d215c2d61.scorm.html', 'resource_74da3c38d35c47d5b42da9d6c0f255bb', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6855', '02d2c79bc48441859c3f00f5ec2540c5.scorm.html', 'resource_0c47e4ac023a4a819fdbb28146b7b7a2', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6862', 'f5390ebc083c438fb67aa56b67780cff.scorm.html', 'resource_eb239f75804641ab8932982a13e7db54', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6870', 'c69a680963fd4ba9803d03b60fa363e8.scorm.html', 'resource_e5c297d67e284e82b1d3517d6fbe49d2', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6878', '1b175b9aa5b441f7ad4a06cb9e989a76.scorm.html', 'resource_fc6d353a91074b368b6e67f9792be8a9', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6885', '776fec1461844972b0ee5615f86b479b.scorm.html', 'resource_de5e74877b524f77a97a5b0e93d8c7e1', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6892', '5de0f6934391493f859f0323f21e6fb3.scorm.html', 'resource_9c7707d6d3da41629b647c3a0c9d6063', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6946', 'SequenceCap.html', 'resource_f9bf818889944a0f9b87ade4807e0570', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6948', 'e78a86fa23ee48f7a94b940d215c2d61.scorm.html', 'resource_74da3c38d35c47d5b42da9d6c0f255bb', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6956', '02d2c79bc48441859c3f00f5ec2540c5.scorm.html', 'resource_0c47e4ac023a4a819fdbb28146b7b7a2', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6963', 'f5390ebc083c438fb67aa56b67780cff.scorm.html', 'resource_eb239f75804641ab8932982a13e7db54', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6971', 'c69a680963fd4ba9803d03b60fa363e8.scorm.html', 'resource_e5c297d67e284e82b1d3517d6fbe49d2', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6979', '1b175b9aa5b441f7ad4a06cb9e989a76.scorm.html', 'resource_fc6d353a91074b368b6e67f9792be8a9', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6986', '776fec1461844972b0ee5615f86b479b.scorm.html', 'resource_de5e74877b524f77a97a5b0e93d8c7e1', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '6993', '5de0f6934391493f859f0323f21e6fb3.scorm.html', 'resource_9c7707d6d3da41629b647c3a0c9d6063', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7042', './scos/1/index.html', 'SCO1', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7047', './scos/2/index.html', 'SCO2', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7052', './scos/3/index.html', 'SCO3', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7057', './scos/4/index.html', 'SCO4', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7062', './scos/5/index.html', 'SCO5', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7067', './scos/6/index.html', 'SCO6', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7072', './scos/7/index.html', 'SCO7', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7077', '', 'SCO1ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7081', '', 'SCO1P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7093', '', 'SCO1RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7095', '', 'SCO1FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7164', '', 'SCO2ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7168', '', 'SCO2P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7175', '', 'SCO2RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7177', '', 'SCO2FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7246', '', 'SCO3ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7250', '', 'SCO3P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7257', '', 'SCO3RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7259', '', 'SCO3FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7328', '', 'SCO4ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7332', '', 'SCO4P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7337', '', 'SCO4RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7339', '', 'SCO4FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7408', '', 'SCO5ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7412', '', 'SCO5P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7424', '', 'SCO5RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7426', '', 'SCO5FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7495', '', 'SCO6ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7499', '', 'SCO6P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7508', '', 'SCO6RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7510', '', 'SCO6FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7579', '', 'SCO7ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7583', '', 'SCO7P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7588', '', 'SCO7RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7590', '', 'SCO7FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7659', '', 'PKG', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7690', 'cam.html', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7691', 'isight.mov', 'RES-96CAC181-1A8F-256A-33E5-3E20A491BE78', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7702', './scos/1/index.html', 'SCO1', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7707', './scos/2/index.html', 'SCO2', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7712', './scos/3/index.html', 'SCO3', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7717', './scos/4/index.html', 'SCO4', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7722', './scos/5/index.html', 'SCO5', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7727', './scos/6/index.html', 'SCO6', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7732', './scos/7/index.html', 'SCO7', 'sco', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7737', '', 'SCO1ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7741', '', 'SCO1P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7753', '', 'SCO1RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7755', '', 'SCO1FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7824', '', 'SCO2ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7828', '', 'SCO2P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7835', '', 'SCO2RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7837', '', 'SCO2FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7906', '', 'SCO3ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7910', '', 'SCO3P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7917', '', 'SCO3RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7919', '', 'SCO3FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7988', '', 'SCO4ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7992', '', 'SCO4P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7997', '', 'SCO4RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '7999', '', 'SCO4FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8068', '', 'SCO5ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8072', '', 'SCO5P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8084', '', 'SCO5RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8086', '', 'SCO5FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8155', '', 'SCO6ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8159', '', 'SCO6P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8168', '', 'SCO6RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8170', '', 'SCO6FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8239', '', 'SCO7ITSELF', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8243', '', 'SCO7P2OBJECTS', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8248', '', 'SCO7RESOURCES', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8250', '', 'SCO7FLAVOUR', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8319', '', 'PKG', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8350', 'cam.html', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8351', 'isight.mov', 'RES-96CAC181-1A8F-256A-33E5-3E20A491BE78', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8365', 'cam.html', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8366', 'isight.mov', 'RES-96CAC181-1A8F-256A-33E5-3E20A491BE78', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8380', 'cam.html', 'RES-832DAE41-07A8-167A-D214-DDBFCD53B10A', 'asset', 'webcontent'); -INSERT INTO cp_resource VALUES ('', '8381', 'isight.mov', 'RES-96CAC181-1A8F-256A-33E5-3E20A491BE78', 'asset', 'webcontent'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_rule -# -INSERT INTO cp_rule VALUES ('skip', '', '', '151', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '197', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '246', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '250', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '254', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '319', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '323', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '327', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '439', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '512', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('disabled', '', '', '717', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('disabled', '', '', '724', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '780', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('disabled', '', '', '785', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '789', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '792', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('hiddenFromChoice', '', '', '840', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('hiddenFromChoice', '', '', '844', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('disabled', '', '', '850', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('stopForwardTraversal', '', '', '931', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('stopForwardTraversal', '', '', '962', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exitAll', '', '', '990', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1198', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1248', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1298', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1332', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exit', '', '', '1365', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '1367', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exit', '', '', '1416', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '1418', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1467', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exit', '', '', '1469', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '1471', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1513', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1556', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1599', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1643', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1679', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1785', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1790', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1795', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1800', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1805', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1864', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1869', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1874', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1879', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1884', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '1957', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('completed', '', '', '1959', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2004', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2009', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2056', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2061', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2104', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2156', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', 'any', '2159', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2203', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2251', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2302', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '2304', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', 'any', '2309', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '2312', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2317', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '2319', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2366', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '2368', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', 'any', '2373', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '2376', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2381', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '2383', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2423', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2428', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exit', '', '', '2439', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('retry', '', '', '2441', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2478', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2483', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exit', '', '', '2494', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('retry', '', '', '2496', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2527', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2573', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2620', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2669', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2716', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2767', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('previous', '', '', '2812', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('continue', '', '', '2853', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('continue', '', '', '2894', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2943', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '2993', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '3043', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '3242', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '3254', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('completed', '', '', '3256', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('skip', '', '', '3259', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('completed', '', '', '3261', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3310', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3312', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3359', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3361', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3393', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3395', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3442', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3444', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3491', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3493', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('completed', 'any', '', '3495', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3542', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('continue', '', '', '3544', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('satisfied', 'any', '', '3546', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3593', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3595', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('completed', 'atLeastCount', 'all', '3597', '1', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3645', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3647', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('satisfied', 'atLeastCount', 'all', '3649', '1', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3697', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3699', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('satisfied', 'atLeastPercent', '', '3701', '0', '0.5', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3749', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3751', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('satisfied', 'atLeastPercent', '', '3753', '0', '0.5', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3801', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3803', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('completed', 'atLeastPercent', '', '3805', '0', '0.5', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3853', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3855', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('completed', 'atLeastPercent', '', '3857', '0', '0.5', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3890', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3892', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('completed', 'atLeastPercent', '', '3894', '0', '0.5', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3942', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3944', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('completed', 'atLeastPercent', '', '3946', '0', '0.5', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '3994', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '3996', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('completed', 'none', '', '3998', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4045', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('continue', '', '', '4047', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('satisfied', 'none', '', '4049', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4092', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('continue', '', '', '4094', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4137', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('continue', '', '', '4139', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('satisfied', 'atLeastCount', '', '4141', '2', '', 'rollup'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4188', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4191', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4194', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('retry', '', '', '4196', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4243', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4246', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4249', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('retry', '', '', '4251', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4298', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4302', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('retry', '', '', '4304', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4355', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '4357', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('incomplete', '', '', '4359', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('satisfied', '', '', '4363', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('previous', '', '', '4367', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('completed', '', 'all', '4369', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4425', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '4427', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('incomplete', '', '', '4429', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('satisfied', '', '', '4433', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('previous', '', '', '4436', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('completed', '', 'all', '4438', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4486', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4489', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('retryAll', '', '', '4491', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('continue', '', '', '4493', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4540', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '4542', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('completed', '', '', '4544', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4595', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '4597', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('completed', '', '', '4599', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4638', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '4640', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('retry', '', '', '4642', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('notSatisfied', '', '', '4644', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4683', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '4685', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('retry', '', '', '4687', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('incomplete', '', '', '4689', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4721', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '4723', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('satisfied', '', '', '4725', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '4783', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('previous', '', '', '4785', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('completed', '', '', '4787', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4825', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', 'any', '4865', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4923', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4928', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4933', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4939', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('retryAll', '', 'any', '4941', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4951', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '4957', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('retryAll', '', 'any', '4959', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '4969', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('retry', '', '', '4983', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('continue', '', '', '5024', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('retry', '', '', '5026', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5069', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5109', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5149', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exit', '', '', '5152', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('retry', '', '', '5154', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5205', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5209', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5212', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5264', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5267', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5271', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exit', '', '', '5455', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('continue', '', '', '5457', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exit', '', '', '5468', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('notSatisfied', 'any', '', '5470', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5473', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('completed', '', '', '5475', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5478', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5481', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('completed', '', '', '5483', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '5486', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('exit', '', '', '5678', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('continue', '', '', '5680', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exit', '', '', '5691', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('notSatisfied', 'any', '', '5693', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5696', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('completed', '', '', '5698', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5701', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '5704', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('completed', '', '', '5706', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '5709', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('completed', '', '', '6364', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '6368', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('satisfied', '', '', '6370', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('notSatisfied', 'any', '', '6372', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('completed', '', '', '6592', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '6596', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('satisfied', '', '', '6598', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('notSatisfied', 'any', '', '6600', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('completed', '', '', '6820', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exit', '', '', '6824', '0', '', 'exit'); -INSERT INTO cp_rule VALUES ('satisfied', '', '', '6826', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('notSatisfied', 'any', '', '6828', '0', '', 'rollup'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '6901', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('retry', '', '', '6904', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '6907', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '6910', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '6913', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '6917', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '6920', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '7002', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('retry', '', '', '7005', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '7008', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '7011', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('skip', '', '', '7014', '0', '', 'pre'); -INSERT INTO cp_rule VALUES ('exitParent', '', '', '7018', '0', '', 'post'); -INSERT INTO cp_rule VALUES ('skip', '', '', '7021', '0', '', 'pre'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_sequencing -# -INSERT INTO cp_sequencing VALUES ('0', '0', 'P5Y6M4DT12H30M58S', '0', '0', '0', 'false', 'false', 'false', 'false', '119', '0', 'false', 'false', 'id3004973', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '120', '0', 'false', 'false', 'id3000020', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', 'P5Y6M4DT12H30M58S', '0', '0', '0', 'false', 'false', 'false', 'false', '122', '0', 'false', 'false', 'id2784313', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '124', '0', 'true', 'false', 'id3022114', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '150', '0', 'false', 'false', 'id2681375', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '154', '0', 'false', 'false', 'id2681311', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '156', '0', 'true', 'false', 'id2681290', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '191', '0', 'false', 'false', 'id2688724', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '196', '0', 'false', 'false', 'id2688740', 'false', '0', 'true', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '201', '0', 'false', 'false', 'id2688775', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '204', '0', 'true', 'false', 'id2689463', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '235', '0', 'false', 'false', 'id2813310', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '238', '0', 'false', 'false', 'id2835189', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '244', '0', 'true', 'false', 'id2813287', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '245', '0', 'false', 'false', 'id2813412', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '249', '0', 'false', 'false', 'id2813486', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '253', '0', 'false', 'false', 'id2819729', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '257', '0', 'true', 'false', 'id2835331', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '258', '0', 'true', 'false', 'id2818691', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '307', '0', 'false', 'false', 'id2684104', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '310', '0', 'false', 'false', 'id2683998', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '317', '0', 'true', 'false', 'id2683920', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '318', '0', 'false', 'false', 'id2683813', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '322', '0', 'false', 'false', 'id2683695', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '326', '0', 'false', 'false', 'id2683563', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '330', '0', 'true', 'false', 'id2683484', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '331', '0', 'true', 'false', 'id2683399', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '399', '0', 'true', 'false', 'id2784280', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '437', '0', 'true', 'false', 'id2688676', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '438', '0', 'true', 'false', 'id2688662', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '441', '0', 'true', 'false', 'id2690845', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '442', '0', 'true', 'false', 'id2690686', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '510', '0', 'true', 'false', 'id2684529', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '511', '0', 'true', 'false', 'id2684033', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '514', '0', 'true', 'false', 'id2683882', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '582', '0', 'true', 'false', 'id2829866', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '635', '0', 'true', 'false', 'id3028815', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '636', '0', 'true', 'false', 'id3022102', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '637', '0', 'true', 'false', 'id3042067', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '672', '0', 'true', 'false', 'id2827862', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '716', '0', 'false', 'false', 'id2813725', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '719', '0', 'true', 'false', 'id2815570', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '720', '0', 'false', 'false', 'id2832153', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '721', '0', 'true', 'false', 'id2837640', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '722', '0', 'false', 'false', 'id2837777', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '723', '0', 'false', 'false', 'id2837306', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '726', '0', 'true', 'false', 'id2813936', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '727', '0', 'true', 'false', 'id2813947', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '728', '0', 'true', 'false', 'id2837362', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '779', '0', 'false', 'false', 'id3024937', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '782', '0', 'true', 'false', 'id3020067', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '783', '0', 'true', 'false', 'id3028800', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '784', '0', 'true', 'false', 'id3022124', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '787', '0', 'true', 'false', 'id3020285', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '788', '0', 'false', 'false', 'id3020228', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '791', '0', 'false', 'false', 'id3024605', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '794', '0', 'true', 'false', 'id3024549', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '795', '0', 'true', 'false', 'id3020988', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '796', '0', 'true', 'false', 'id3020956', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '1', '0', 'false', 'false', 'false', 'false', '837', '0', 'false', 'false', 'id2621964', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '838', '0', 'true', 'false', 'id2621923', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '839', '0', 'false', 'false', 'id2621788', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '842', '0', 'true', 'false', 'id2621754', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '843', '0', 'true', 'false', 'id2621616', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '846', '0', 'true', 'false', 'id2621504', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '1', '0', 'false', 'false', 'false', 'false', '847', '0', 'true', 'false', 'id2621435', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '848', '0', 'true', 'false', 'id2621419', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '849', '0', 'false', 'false', 'id2621312', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '852', '0', 'true', 'false', 'id2621296', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '853', '0', 'true', 'false', 'id2621280', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '894', '0', 'true', 'false', 'id2676334', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'true', '895', '0', 'false', 'false', 'id2676165', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'true', '896', '0', 'false', 'false', 'id2676063', 'false', '0', 'false', 'true', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '897', '0', 'true', 'false', 'id2676043', 'false', '0', 'false', 'true', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'true', '898', '0', 'true', 'false', 'id2675982', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'true', '899', '0', 'true', 'false', 'id2675940', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'true', '900', '0', 'true', 'false', 'id2675857', 'false', '0', 'false', 'true', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '901', '0', 'true', 'false', 'id2675796', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '930', '0', 'true', 'false', 'id2618515', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '933', '0', 'true', 'false', 'id2619344', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '934', '0', 'true', 'false', 'id2619357', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '961', '0', 'false', 'false', 'id2680596', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '964', '0', 'true', 'false', 'id2680488', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '989', '0', 'false', 'false', 'id2682236', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'GeneralSequencing', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '992', '0', 'false', 'false', 'id2681702', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '993', '0', 'true', 'false', 'GeneralSequencing', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1090', '0', 'false', 'false', 'id2624021', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1092', '0', 'false', 'false', 'id2623911', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1094', '0', 'false', 'false', 'id2623838', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1096', '0', 'false', 'false', 'id2623724', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1098', '0', 'false', 'false', 'id2623628', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1100', '0', 'false', 'false', 'id2623522', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1196', '0', 'false', 'false', 'id2623667', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1197', '0', 'true', 'false', 'id2623509', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1200', '0', 'true', 'false', 'id2623293', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1244', '0', 'false', 'false', 'id2631163', 'false', '0.75', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1245', '0', 'false', 'false', 'id2625279', 'false', '0.25', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1246', '0', 'false', 'false', 'id2630740', 'false', '0.25', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1247', '0', 'true', 'false', 'id2630752', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1250', '0', 'true', 'false', 'id2628852', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1294', '0', 'false', 'false', 'id3078556', 'false', '0.5', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1295', '0', 'false', 'false', 'id3078599', 'false', '0.0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1296', '0', 'false', 'false', 'id3111807', 'false', '0.25', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1297', '0', 'true', 'false', 'id3111817', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1300', '0', 'true', 'false', 'id3106767', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1329', '0', 'false', 'false', 'id2836477', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1330', '0', 'false', 'false', 'id2838200', 'false', '0.25', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1331', '0', 'true', 'false', 'id2836564', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1334', '0', 'true', 'false', 'id2835041', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1363', '0', 'false', 'false', 'id2821682', 'false', '0.25', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1364', '0', 'true', 'false', 'id2832248', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1370', '0', 'true', 'false', 'id2835031', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1414', '0', 'false', 'false', 'id2689649', 'false', '0.25', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1415', '0', 'true', 'false', 'id2689660', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1421', '0', 'true', 'false', 'id2683209', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1465', '0', 'false', 'false', 'id2692447', 'false', '0.25', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1466', '0', 'true', 'false', 'id2684182', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1474', '0', 'true', 'false', 'id2686492', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1509', '0', 'false', 'false', 'id2684515', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1512', '0', 'false', 'false', 'id2684181', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1517', '0', 'true', 'false', 'id2684391', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1552', '0', 'false', 'false', 'id2835613', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1555', '0', 'false', 'false', 'id2834911', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1560', '0', 'true', 'false', 'id2835415', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1595', '0', 'false', 'false', 'id2680072', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1598', '0', 'false', 'false', 'id2682456', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1603', '0', 'true', 'false', 'id2679887', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1638', '0', 'false', 'false', 'id2680029', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1642', '0', 'false', 'false', 'id2680065', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1648', '0', 'true', 'false', 'id2679756', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1674', '0', 'false', 'false', 'id2678657', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1678', '0', 'false', 'false', 'id2678572', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1684', '0', 'true', 'false', 'id2678483', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1719', '0', 'false', 'false', 'id2836190', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1723', '0', 'false', 'false', 'id2832296', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1727', '0', 'false', 'false', 'id2821209', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1731', '0', 'true', 'false', 'id2816557', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1784', '0', 'false', 'false', 'id3020934', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1789', '0', 'false', 'false', 'id3028833', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1794', '0', 'true', 'false', 'id3074114', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1799', '0', 'false', 'false', 'id3041086', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1804', '0', 'false', 'false', 'id3094598', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1809', '0', 'true', 'false', 'id3022408', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1810', '0', 'true', 'false', 'id3028734', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1863', '0', 'false', 'false', 'id2619264', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1868', '0', 'false', 'false', 'id2619009', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1873', '0', 'true', 'false', 'id2618856', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1878', '0', 'false', 'false', 'id2618648', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1883', '0', 'false', 'false', 'id2618531', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1891', '0', 'true', 'false', 'id2618402', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1892', '0', 'true', 'false', 'id2618316', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1940', '0', 'false', 'false', 'id2691977', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1944', '0', 'false', 'false', 'id2834923', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1947', '0', 'false', 'false', 'id2849373', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1950', '0', 'false', 'false', 'id2843005', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1953', '0', 'false', 'false', 'id2813760', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1956', '0', 'true', 'false', 'id2813658', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '1961', '0', 'true', 'false', 'id2836318', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2000', '0', 'false', 'false', 'id2836202', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2003', '0', 'false', 'false', 'id2834977', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2008', '0', 'false', 'false', 'id2835142', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2013', '0', 'true', 'false', 'id2833703', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2052', '0', 'false', 'false', 'id3024654', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2055', '0', 'false', 'false', 'id3074260', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2060', '0', 'false', 'false', 'id3041974', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2065', '0', 'true', 'false', 'id3024934', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2100', '0', 'false', 'false', 'id2676157', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2103', '0', 'false', 'false', 'id2676107', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2108', '0', 'true', 'false', 'id2680434', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2152', '0', 'false', 'false', 'id3025741', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2155', '0', 'true', 'false', 'id3082989', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2164', '0', 'true', 'false', 'id3042076', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2199', '0', 'false', 'false', 'id2685266', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2202', '0', 'false', 'false', 'id2685192', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2208', '0', 'false', 'false', 'id2681135', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2212', '0', 'true', 'false', 'id2685286', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2247', '0', 'false', 'false', 'id3082998', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2250', '0', 'false', 'false', 'id3020248', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2255', '0', 'false', 'false', 'id3024613', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2259', '0', 'true', 'false', 'id3099498', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2298', '0', 'false', 'false', 'id3059082', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2301', '0', 'false', 'false', 'id3024255', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2308', '0', 'false', 'false', 'id3027207', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2316', '0', 'false', 'false', 'id3024933', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2323', '0', 'true', 'false', 'id3018439', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2362', '0', 'false', 'false', 'id2813980', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2365', '0', 'false', 'false', 'id2836377', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2372', '0', 'false', 'false', 'id2821677', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2380', '0', 'false', 'false', 'id2847475', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2387', '0', 'true', 'false', 'id2813752', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2422', '0', 'false', 'false', 'id2833749', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2427', '0', 'false', 'false', 'id2836002', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2432', '0', 'false', 'false', 'id2836376', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2438', '0', 'true', 'false', 'id2835854', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2477', '0', 'false', 'false', 'id2684985', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2482', '0', 'false', 'false', 'id2690601', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2487', '0', 'false', 'false', 'id2689989', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2493', '0', 'true', 'false', 'id2688473', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2523', '0', 'false', 'false', 'id2623602', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2526', '0', 'false', 'false', 'id2623520', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2531', '0', 'false', 'false', 'id2623422', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2534', '0', 'true', 'false', 'id2623394', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2569', '0', 'false', 'false', 'id3085765', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2572', '0', 'false', 'false', 'id3022395', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2577', '0', 'false', 'false', 'id3022470', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2580', '0', 'true', 'false', 'id3024558', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2615', '0', 'false', 'false', 'id3021295', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2619', '0', 'false', 'false', 'id3020449', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2624', '0', 'false', 'false', 'id3020211', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2627', '0', 'true', 'false', 'id3036101', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2662', '0', 'false', 'false', 'id3021031', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2668', '0', 'false', 'false', 'id3024205', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2673', '0', 'false', 'false', 'id3020790', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2676', '0', 'true', 'false', 'id3024238', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2711', '0', 'false', 'false', 'id3085660', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2715', '0', 'false', 'false', 'id3024627', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2721', '0', 'false', 'false', 'id3024005', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2725', '0', 'true', 'false', 'id2784294', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2760', '0', 'false', 'false', 'id2684186', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2766', '0', 'false', 'false', 'id2623396', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2772', '0', 'false', 'false', 'id2623266', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2776', '0', 'true', 'false', 'id2623206', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2811', '0', 'false', 'false', 'id3036015', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2817', '0', 'true', 'false', 'id3024614', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2852', '0', 'false', 'false', 'id3020214', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2858', '0', 'true', 'false', 'id3024649', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2893', '0', 'false', 'false', 'id2691063', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2899', '0', 'true', 'false', 'id2685932', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2938', '0', 'false', 'false', 'id2686031', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2942', '0', 'false', 'false', 'id2687289', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2949', '0', 'true', 'false', 'id2687756', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2988', '0', 'false', 'false', 'id2821445', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2992', '0', 'false', 'false', 'id2835105', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '2999', '0', 'true', 'false', 'id2832065', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3038', '0', 'false', 'false', 'id2678375', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3042', '0', 'false', 'false', 'id2678294', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3049', '0', 'true', 'false', 'id2678078', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3084', '0', 'false', 'false', 'id2843381', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3094', '0', 'false', 'false', 'id2834918', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3106', '0', 'false', 'false', 'id2836192', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3118', '0', 'true', 'false', 'id2832072', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3157', '0', 'false', 'false', 'id2835369', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3167', '0', 'false', 'false', 'id2836423', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3176', '0', 'false', 'false', 'id2843361', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3186', '0', 'false', 'false', 'id2835730', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3193', '0', 'true', 'false', 'id2836467', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3241', '0', 'false', 'false', 'id2620143', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3244', '0', 'false', 'false', 'id2620044', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3247', '0', 'false', 'false', 'id2619908', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3250', '0', 'false', 'false', 'id2619802', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3253', '0', 'true', 'false', 'id2619736', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3258', '0', 'false', 'false', 'id2619599', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3265', '0', 'true', 'false', 'id2619353', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3309', '0', 'true', 'false', 'id3020417', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3314', '0', 'true', 'false', 'id3023482', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3358', '0', 'true', 'false', 'id2676129', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3363', '0', 'true', 'false', 'id2676050', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3392', '0', 'true', 'false', 'id2834929', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3397', '0', 'true', 'false', 'id2815727', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3441', '0', 'true', 'false', 'id2676502', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3446', '0', 'true', 'false', 'id2676424', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3490', '0', 'true', 'false', 'id2686379', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3497', '0', 'true', 'false', 'id2687602', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3541', '0', 'true', 'false', 'id2835303', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3548', '0', 'true', 'false', 'id2839516', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3592', '0', 'true', 'false', 'id2836314', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3600', '0', 'true', 'false', 'id2836275', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3644', '0', 'true', 'false', 'id2686169', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3652', '0', 'true', 'false', 'id2685338', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3696', '0', 'true', 'false', 'id2697094', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3704', '0', 'true', 'false', 'id2698800', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3748', '0', 'true', 'false', 'id2997725', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3756', '0', 'true', 'false', 'id3020230', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3800', '0', 'true', 'false', 'id2999935', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3808', '0', 'true', 'false', 'id3024577', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3852', '0', 'true', 'false', 'id2706518', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3860', '0', 'true', 'false', 'id2691069', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3889', '0', 'true', 'false', 'id2694654', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3897', '0', 'true', 'false', 'id2697061', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3941', '0', 'true', 'false', 'id2820463', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3949', '0', 'true', 'false', 'id2832273', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '3993', '0', 'true', 'false', 'id3021205', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4000', '0', 'true', 'false', 'id3003369', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4044', '0', 'true', 'false', 'id2836321', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4051', '0', 'true', 'false', 'id2820429', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4091', '0', 'true', 'false', 'id2835665', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4096', '0', 'true', 'false', 'id2844067', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4136', '0', 'true', 'false', 'id2820358', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4143', '0', 'true', 'false', 'id2835664', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '1', '0', 'false', 'false', 'false', 'false', '4187', '0', 'false', 'false', 'id2832236', 'false', '0', 'false', 'false', '', 'false', '', '', 'ifNotSkipped', 'ifNotSkipped', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4190', '0', 'false', 'false', 'id2850277', 'false', '0', 'false', 'false', '', 'false', 'ifAttempted', '', 'ifAttempted', 'ifAttempted', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4193', '0', 'true', 'false', 'id2836245', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4198', '0', 'true', 'false', 'id2832252', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '1', '0', 'false', 'false', 'false', 'false', '4242', '0', 'false', 'false', 'id2835912', 'false', '0', 'false', 'false', '', 'false', '', '', '', 'ifNotSkipped', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4245', '0', 'false', 'false', 'id2815734', 'false', '0', 'false', 'false', '', 'false', 'ifAttempted', '', '', 'ifAttempted', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4248', '0', 'true', 'false', 'id2853206', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4253', '0', 'true', 'false', 'id2850246', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '2', '0', 'false', 'false', 'false', 'false', '4297', '0', 'true', 'false', 'id2849899', 'false', '0', 'false', 'false', '', 'false', '', '', '', 'ifNotSkipped', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4300', '0', 'false', 'false', 'id2859301', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4301', '0', 'true', 'false', 'id2852293', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4354', '0', 'true', 'false', 'id3099562', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4365', '0', 'false', 'false', 'id3112339', 'false', '0', 'false', 'false', '', 'false', 'ifAttempted', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4366', '0', 'true', 'false', 'id3093412', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4372', '0', 'true', 'false', 'id3094007', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'true', 'false', '4421', '0', 'false', 'false', 'id2835367', 'false', '0', 'true', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'true', 'false', '4422', '0', 'false', 'false', 'id2835628', 'false', '0', 'true', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'true', 'false', '4423', '0', 'false', 'false', 'id2832247', 'false', '0', 'true', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4424', '0', 'true', 'false', 'id2857593', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4435', '0', 'true', 'false', 'id2835519', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4441', '0', 'true', 'false', 'id2835144', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '2', '0', 'false', 'false', 'false', 'false', '4485', '0', 'false', 'false', 'id2623309', 'false', '0', 'false', 'false', '', 'false', 'ifNotSkipped', 'ifNotSkipped', '', 'ifNotSkipped', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4488', '0', 'true', 'false', 'id2623166', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4495', '0', 'true', 'false', 'id2622963', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4539', '0', 'true', 'false', 'id2693746', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4546', '0', 'true', 'false', 'id2695362', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4590', '0', 'false', 'false', 'id2835269', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4592', '0', 'false', 'false', 'id2835169', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4593', '0', 'false', 'false', 'id2817750', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4594', '0', 'true', 'false', 'id2817761', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4601', '0', 'true', 'false', 'id2821665', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4637', '0', 'true', 'false', 'id2621117', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4646', '0', 'true', 'false', 'id2620884', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4682', '0', 'true', 'false', 'id2681832', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4691', '0', 'true', 'false', 'id2681527', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4720', '0', 'true', 'false', 'id2836148', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4727', '0', 'true', 'false', 'id2868122', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4771', '0', 'false', 'false', 'id2699284', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4779', '0', 'false', 'false', 'id2698909', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4782', '0', 'true', 'false', 'id2699004', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4789', '0', 'true', 'false', 'id2698680', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4824', '0', 'false', 'false', 'id2624783', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4829', '0', 'true', 'false', 'id2696373', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4864', '0', 'false', 'false', 'id3000006', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4868', '0', 'true', 'false', 'id3005863', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4922', '0', 'false', 'false', 'id2686705', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4927', '0', 'false', 'false', 'id2687557', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4932', '0', 'false', 'false', 'id2699316', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4938', '0', 'false', 'false', 'id2696380', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4949', '0', 'true', 'false', 'id2699280', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4950', '0', 'false', 'false', 'id2686689', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4956', '0', 'false', 'false', 'id2699208', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4967', '0', 'true', 'false', 'id2696287', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4968', '0', 'false', 'false', 'id2681469', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4982', '0', 'true', 'false', 'id2698812', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '4988', '0', 'true', 'false', 'id2695987', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5023', '0', 'false', 'false', 'id3095010', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5028', '0', 'true', 'false', 'id3003378', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5068', '0', 'false', 'false', 'id2837123', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5071', '0', 'true', 'false', 'id2837196', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5072', '0', 'true', 'false', 'id2862126', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5108', '0', 'false', 'false', 'id2837340', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5111', '0', 'true', 'false', 'id2836154', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5112', '0', 'true', 'false', 'id2834188', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5148', '0', 'false', 'false', 'id2837019', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5151', '0', 'true', 'false', 'id2861852', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5156', '0', 'true', 'false', 'id2817705', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5204', '0', 'false', 'false', 'id2862147', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5208', '0', 'false', 'false', 'id2812723', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5211', '0', 'false', 'false', 'id2837145', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5214', '0', 'true', 'false', 'id2813984', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5215', '0', 'true', 'false', 'id2837821', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5263', '0', 'false', 'false', 'id2834249', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5266', '0', 'false', 'false', 'id2836098', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5270', '0', 'false', 'false', 'id2835895', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5273', '0', 'true', 'false', 'id2818780', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5274', '0', 'true', 'false', 'id2861765', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5426', '0', 'false', 'false', 'id2675739', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5427', '0', 'false', 'false', 'id2675451', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'pretest', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5430', '0', 'false', 'false', 'id2675173', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'lessons', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5433', '0', 'false', 'false', 'id2674918', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'posttest', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5436', '0', 'false', 'false', 'id2674604', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'pretest', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5439', '0', 'false', 'false', 'id2674322', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'lessons', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5442', '0', 'false', 'false', 'id2668217', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'posttest', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5445', '0', 'false', 'false', 'id2668137', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'pretest', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5448', '0', 'false', 'false', 'id2678102', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'lessons', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5451', '0', 'false', 'false', 'id2618945', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'posttest', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5454', '0', 'true', 'false', 'id2675998', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '1', '0', 'false', 'false', 'false', 'false', '5459', '0', 'false', 'false', 'id2678246', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5467', '0', 'true', 'false', 'id2675932', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '1', '0', 'false', 'false', 'false', 'false', '5472', '0', 'true', 'false', 'pretest', 'false', '0', 'false', 'false', '', 'false', 'ifAttempted', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5477', '0', 'true', 'false', 'lessons', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '1', '0', 'false', 'false', 'false', 'false', '5480', '0', 'true', 'false', 'posttest', 'false', '0', 'false', 'false', '', 'false', 'ifNotSkipped', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5485', '0', 'true', 'false', 'module', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5639', '0', 'false', 'false', 'id2820366', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5640', '0', 'false', 'false', 'id2820213', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'pretest', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5643', '0', 'false', 'false', 'id2843255', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5646', '0', 'false', 'false', 'id2820281', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5653', '0', 'false', 'false', 'id2837293', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'lessons', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5656', '0', 'false', 'false', 'id2820160', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'posttest', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5659', '0', 'false', 'false', 'id2850173', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'pretest', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5662', '0', 'false', 'false', 'id2820322', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'lessons', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5665', '0', 'false', 'false', 'id2843649', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'posttest', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5668', '0', 'false', 'false', 'id2837175', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'pretest', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5671', '0', 'false', 'false', 'id2820477', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'lessons', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5674', '0', 'false', 'false', 'id2843571', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'posttest', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5677', '0', 'true', 'false', 'id2837025', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '1', '0', 'false', 'false', 'false', 'false', '5682', '0', 'false', 'false', 'id2837119', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5690', '0', 'true', 'false', 'id2817663', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '1', '0', 'false', 'false', 'false', 'false', '5695', '0', 'true', 'false', 'pretest', 'false', '0', 'false', 'false', '', 'false', 'ifAttempted', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5700', '0', 'true', 'false', 'lessons', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '1', '0', 'false', 'false', 'false', 'false', '5703', '0', 'true', 'false', 'posttest', 'false', '0', 'false', 'false', '', 'false', 'ifNotSkipped', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '5708', '0', 'true', 'false', 'module', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6359', '0', 'false', 'false', 'id382584', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6360', '0', 'true', 'false', 'id382558', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6361', '0', 'true', 'false', 'id382538', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6362', '0', 'true', 'false', 'id382425', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6363', '0', 'true', 'false', 'id382240', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6367', '0', 'true', 'false', 'id382106', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6587', '0', 'false', 'false', 'id384142', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6588', '0', 'true', 'false', 'id383693', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6589', '0', 'true', 'false', 'id383741', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6590', '0', 'true', 'false', 'id383789', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6591', '0', 'true', 'false', 'id383606', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6595', '0', 'true', 'false', 'id383665', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6815', '0', 'false', 'false', 'id384077', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6816', '0', 'true', 'false', 'id384117', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6817', '0', 'true', 'false', 'id383992', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6818', '0', 'true', 'false', 'id384048', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6819', '0', 'true', 'false', 'id383725', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6823', '0', 'true', 'false', 'id383785', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6899', '0', 'false', 'false', 'id381365', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6900', '0', 'false', 'false', 'id380281', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6903', '0', 'false', 'false', 'id380310', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6906', '0', 'false', 'false', 'id381473', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6909', '0', 'false', 'false', 'id381502', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6912', '0', 'false', 'false', 'id381312', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6916', '0', 'false', 'false', 'id381240', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6919', '0', 'false', 'false', 'id381269', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '6923', '0', 'true', 'false', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '7000', '0', 'false', 'false', 'id382028', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '7001', '0', 'false', 'false', 'id382139', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '7004', '0', 'false', 'false', 'id382072', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '7007', '0', 'false', 'false', 'id381856', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '7010', '0', 'false', 'false', 'id381884', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '7013', '0', 'false', 'false', 'id381946', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '7017', '0', 'false', 'false', 'id381668', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '7020', '0', 'false', 'false', 'id381696', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', 'false', 'false', 'false'); -INSERT INTO cp_sequencing VALUES ('0', '0', '0', '0', '0', '0', 'false', 'false', 'false', 'false', '7024', '0', 'true', 'false', 'sequencing_c9c0a2a07aaf4c4d987e7c1cc90de4da', 'false', '0', 'false', 'false', '', 'false', '', '', '', '', 'false', 'false', '0', '', '', 'false', 'false', 'false'); -# -------------------------------------------------------- - - -# -# Dumping data for table: cp_tree -# -INSERT INTO cp_tree VALUES ('1', '1', '1', '146', '0', '84'); -INSERT INTO cp_tree VALUES ('2', '2', '2', '146', '1', '15'); -INSERT INTO cp_tree VALUES ('3', '3', '3', '146', '2', '6'); -INSERT INTO cp_tree VALUES ('4', '4', '4', '146', '3', '5'); -INSERT INTO cp_tree VALUES ('5', '3', '7', '146', '2', '10'); -INSERT INTO cp_tree VALUES ('6', '4', '8', '146', '5', '9'); -INSERT INTO cp_tree VALUES ('7', '3', '11', '146', '2', '14'); -INSERT INTO cp_tree VALUES ('8', '4', '12', '146', '7', '13'); -INSERT INTO cp_tree VALUES ('9', '2', '16', '146', '1', '29'); -INSERT INTO cp_tree VALUES ('10', '3', '17', '146', '9', '18'); -INSERT INTO cp_tree VALUES ('11', '3', '19', '146', '9', '20'); -INSERT INTO cp_tree VALUES ('12', '3', '21', '146', '9', '22'); -INSERT INTO cp_tree VALUES ('13', '3', '23', '146', '9', '24'); -INSERT INTO cp_tree VALUES ('14', '3', '25', '146', '9', '26'); -INSERT INTO cp_tree VALUES ('15', '3', '27', '146', '9', '28'); -INSERT INTO cp_tree VALUES ('16', '2', '30', '146', '1', '43'); -INSERT INTO cp_tree VALUES ('17', '3', '31', '146', '16', '32'); -INSERT INTO cp_tree VALUES ('18', '3', '33', '146', '16', '34'); -INSERT INTO cp_tree VALUES ('19', '3', '35', '146', '16', '36'); -INSERT INTO cp_tree VALUES ('20', '3', '37', '146', '16', '38'); -INSERT INTO cp_tree VALUES ('21', '3', '39', '146', '16', '40'); -INSERT INTO cp_tree VALUES ('22', '3', '41', '146', '16', '42'); -INSERT INTO cp_tree VALUES ('23', '2', '44', '146', '1', '57'); -INSERT INTO cp_tree VALUES ('24', '3', '45', '146', '23', '46'); -INSERT INTO cp_tree VALUES ('25', '3', '47', '146', '23', '48'); -INSERT INTO cp_tree VALUES ('26', '3', '49', '146', '23', '50'); -INSERT INTO cp_tree VALUES ('27', '3', '51', '146', '23', '52'); -INSERT INTO cp_tree VALUES ('28', '3', '53', '146', '23', '54'); -INSERT INTO cp_tree VALUES ('29', '3', '55', '146', '23', '56'); -INSERT INTO cp_tree VALUES ('30', '2', '58', '146', '1', '61'); -INSERT INTO cp_tree VALUES ('31', '3', '59', '146', '30', '60'); -INSERT INTO cp_tree VALUES ('32', '2', '62', '146', '1', '65'); -INSERT INTO cp_tree VALUES ('33', '3', '63', '146', '32', '64'); -INSERT INTO cp_tree VALUES ('34', '2', '66', '146', '1', '71'); -INSERT INTO cp_tree VALUES ('35', '3', '67', '146', '34', '68'); -INSERT INTO cp_tree VALUES ('36', '3', '69', '146', '34', '70'); -INSERT INTO cp_tree VALUES ('37', '2', '72', '146', '1', '75'); -INSERT INTO cp_tree VALUES ('38', '3', '73', '146', '37', '74'); -INSERT INTO cp_tree VALUES ('39', '2', '76', '146', '1', '79'); -INSERT INTO cp_tree VALUES ('40', '3', '77', '146', '39', '78'); -INSERT INTO cp_tree VALUES ('41', '2', '80', '146', '1', '83'); -INSERT INTO cp_tree VALUES ('42', '3', '81', '146', '41', '82'); -INSERT INTO cp_tree VALUES ('43', '1', '1', '147', '0', '84'); -INSERT INTO cp_tree VALUES ('44', '2', '2', '147', '43', '15'); -INSERT INTO cp_tree VALUES ('45', '3', '3', '147', '44', '6'); -INSERT INTO cp_tree VALUES ('46', '4', '4', '147', '45', '5'); -INSERT INTO cp_tree VALUES ('47', '3', '7', '147', '44', '10'); -INSERT INTO cp_tree VALUES ('48', '4', '8', '147', '47', '9'); -INSERT INTO cp_tree VALUES ('49', '3', '11', '147', '44', '14'); -INSERT INTO cp_tree VALUES ('50', '4', '12', '147', '49', '13'); -INSERT INTO cp_tree VALUES ('51', '2', '16', '147', '43', '29'); -INSERT INTO cp_tree VALUES ('52', '3', '17', '147', '51', '18'); -INSERT INTO cp_tree VALUES ('53', '3', '19', '147', '51', '20'); -INSERT INTO cp_tree VALUES ('54', '3', '21', '147', '51', '22'); -INSERT INTO cp_tree VALUES ('55', '3', '23', '147', '51', '24'); -INSERT INTO cp_tree VALUES ('56', '3', '25', '147', '51', '26'); -INSERT INTO cp_tree VALUES ('57', '3', '27', '147', '51', '28'); -INSERT INTO cp_tree VALUES ('58', '2', '30', '147', '43', '43'); -INSERT INTO cp_tree VALUES ('59', '3', '31', '147', '58', '32'); -INSERT INTO cp_tree VALUES ('60', '3', '33', '147', '58', '34'); -INSERT INTO cp_tree VALUES ('61', '3', '35', '147', '58', '36'); -INSERT INTO cp_tree VALUES ('62', '3', '37', '147', '58', '38'); -INSERT INTO cp_tree VALUES ('63', '3', '39', '147', '58', '40'); -INSERT INTO cp_tree VALUES ('64', '3', '41', '147', '58', '42'); -INSERT INTO cp_tree VALUES ('65', '2', '44', '147', '43', '57'); -INSERT INTO cp_tree VALUES ('66', '3', '45', '147', '65', '46'); -INSERT INTO cp_tree VALUES ('67', '3', '47', '147', '65', '48'); -INSERT INTO cp_tree VALUES ('68', '3', '49', '147', '65', '50'); -INSERT INTO cp_tree VALUES ('69', '3', '51', '147', '65', '52'); -INSERT INTO cp_tree VALUES ('70', '3', '53', '147', '65', '54'); -INSERT INTO cp_tree VALUES ('71', '3', '55', '147', '65', '56'); -INSERT INTO cp_tree VALUES ('72', '2', '58', '147', '43', '61'); -INSERT INTO cp_tree VALUES ('73', '3', '59', '147', '72', '60'); -INSERT INTO cp_tree VALUES ('74', '2', '62', '147', '43', '65'); -INSERT INTO cp_tree VALUES ('75', '3', '63', '147', '74', '64'); -INSERT INTO cp_tree VALUES ('76', '2', '66', '147', '43', '71'); -INSERT INTO cp_tree VALUES ('77', '3', '67', '147', '76', '68'); -INSERT INTO cp_tree VALUES ('78', '3', '69', '147', '76', '70'); -INSERT INTO cp_tree VALUES ('79', '2', '72', '147', '43', '75'); -INSERT INTO cp_tree VALUES ('80', '3', '73', '147', '79', '74'); -INSERT INTO cp_tree VALUES ('81', '2', '76', '147', '43', '79'); -INSERT INTO cp_tree VALUES ('82', '3', '77', '147', '81', '78'); -INSERT INTO cp_tree VALUES ('83', '2', '80', '147', '43', '83'); -INSERT INTO cp_tree VALUES ('84', '3', '81', '147', '83', '82'); -INSERT INTO cp_tree VALUES ('85', '1', '1', '148', '0', '80'); -INSERT INTO cp_tree VALUES ('86', '2', '2', '148', '85', '27'); -INSERT INTO cp_tree VALUES ('87', '3', '3', '148', '86', '10'); -INSERT INTO cp_tree VALUES ('88', '4', '4', '148', '87', '5'); -INSERT INTO cp_tree VALUES ('89', '4', '6', '148', '87', '7'); -INSERT INTO cp_tree VALUES ('90', '4', '8', '148', '87', '9'); -INSERT INTO cp_tree VALUES ('91', '3', '11', '148', '86', '18'); -INSERT INTO cp_tree VALUES ('92', '4', '12', '148', '91', '13'); -INSERT INTO cp_tree VALUES ('93', '4', '14', '148', '91', '15'); -INSERT INTO cp_tree VALUES ('94', '4', '16', '148', '91', '17'); -INSERT INTO cp_tree VALUES ('95', '3', '19', '148', '86', '26'); -INSERT INTO cp_tree VALUES ('96', '4', '20', '148', '95', '21'); -INSERT INTO cp_tree VALUES ('97', '4', '22', '148', '95', '23'); -INSERT INTO cp_tree VALUES ('98', '4', '24', '148', '95', '25'); -INSERT INTO cp_tree VALUES ('99', '2', '28', '148', '85', '41'); -INSERT INTO cp_tree VALUES ('100', '3', '29', '148', '99', '30'); -INSERT INTO cp_tree VALUES ('101', '3', '31', '148', '99', '32'); -INSERT INTO cp_tree VALUES ('102', '3', '33', '148', '99', '34'); -INSERT INTO cp_tree VALUES ('103', '3', '35', '148', '99', '36'); -INSERT INTO cp_tree VALUES ('104', '3', '37', '148', '99', '38'); -INSERT INTO cp_tree VALUES ('105', '3', '39', '148', '99', '40'); -INSERT INTO cp_tree VALUES ('106', '2', '42', '148', '85', '45'); -INSERT INTO cp_tree VALUES ('107', '3', '43', '148', '106', '44'); -INSERT INTO cp_tree VALUES ('108', '2', '46', '148', '85', '49'); -INSERT INTO cp_tree VALUES ('109', '3', '47', '148', '108', '48'); -INSERT INTO cp_tree VALUES ('110', '2', '50', '148', '85', '53'); -INSERT INTO cp_tree VALUES ('111', '3', '51', '148', '110', '52'); -INSERT INTO cp_tree VALUES ('112', '2', '54', '148', '85', '59'); -INSERT INTO cp_tree VALUES ('113', '3', '55', '148', '112', '56'); -INSERT INTO cp_tree VALUES ('114', '3', '57', '148', '112', '58'); -INSERT INTO cp_tree VALUES ('115', '2', '60', '148', '85', '63'); -INSERT INTO cp_tree VALUES ('116', '3', '61', '148', '115', '62'); -INSERT INTO cp_tree VALUES ('117', '2', '64', '148', '85', '67'); -INSERT INTO cp_tree VALUES ('118', '3', '65', '148', '117', '66'); -INSERT INTO cp_tree VALUES ('119', '2', '68', '148', '85', '69'); -INSERT INTO cp_tree VALUES ('120', '2', '70', '148', '85', '73'); -INSERT INTO cp_tree VALUES ('121', '3', '71', '148', '120', '72'); -INSERT INTO cp_tree VALUES ('122', '2', '74', '148', '85', '77'); -INSERT INTO cp_tree VALUES ('123', '3', '75', '148', '122', '76'); -INSERT INTO cp_tree VALUES ('124', '2', '78', '148', '85', '79'); -INSERT INTO cp_tree VALUES ('125', '1', '1', '149', '0', '64'); -INSERT INTO cp_tree VALUES ('126', '2', '2', '149', '125', '9'); -INSERT INTO cp_tree VALUES ('127', '3', '3', '149', '126', '4'); -INSERT INTO cp_tree VALUES ('128', '3', '5', '149', '126', '6'); -INSERT INTO cp_tree VALUES ('129', '3', '7', '149', '126', '8'); -INSERT INTO cp_tree VALUES ('130', '2', '10', '149', '125', '23'); -INSERT INTO cp_tree VALUES ('131', '3', '11', '149', '130', '12'); -INSERT INTO cp_tree VALUES ('132', '3', '13', '149', '130', '14'); -INSERT INTO cp_tree VALUES ('133', '3', '15', '149', '130', '16'); -INSERT INTO cp_tree VALUES ('134', '3', '17', '149', '130', '18'); -INSERT INTO cp_tree VALUES ('135', '3', '19', '149', '130', '20'); -INSERT INTO cp_tree VALUES ('136', '3', '21', '149', '130', '22'); -INSERT INTO cp_tree VALUES ('137', '2', '24', '149', '125', '27'); -INSERT INTO cp_tree VALUES ('138', '3', '25', '149', '137', '26'); -INSERT INTO cp_tree VALUES ('139', '2', '28', '149', '125', '31'); -INSERT INTO cp_tree VALUES ('140', '3', '29', '149', '139', '30'); -INSERT INTO cp_tree VALUES ('141', '2', '32', '149', '125', '35'); -INSERT INTO cp_tree VALUES ('142', '3', '33', '149', '141', '34'); -INSERT INTO cp_tree VALUES ('143', '2', '36', '149', '125', '41'); -INSERT INTO cp_tree VALUES ('144', '3', '37', '149', '143', '38'); -INSERT INTO cp_tree VALUES ('145', '3', '39', '149', '143', '40'); -INSERT INTO cp_tree VALUES ('146', '2', '42', '149', '125', '45'); -INSERT INTO cp_tree VALUES ('147', '3', '43', '149', '146', '44'); -INSERT INTO cp_tree VALUES ('148', '2', '46', '149', '125', '49'); -INSERT INTO cp_tree VALUES ('149', '3', '47', '149', '148', '48'); -INSERT INTO cp_tree VALUES ('150', '2', '50', '149', '125', '57'); -INSERT INTO cp_tree VALUES ('151', '3', '51', '149', '150', '54'); -INSERT INTO cp_tree VALUES ('152', '4', '52', '149', '151', '53'); -INSERT INTO cp_tree VALUES ('153', '3', '55', '149', '150', '56'); -INSERT INTO cp_tree VALUES ('154', '2', '58', '149', '125', '61'); -INSERT INTO cp_tree VALUES ('155', '3', '59', '149', '154', '60'); -INSERT INTO cp_tree VALUES ('156', '2', '62', '149', '125', '63'); -INSERT INTO cp_tree VALUES ('157', '1', '1', '150', '0', '96'); -INSERT INTO cp_tree VALUES ('158', '2', '2', '150', '157', '27'); -INSERT INTO cp_tree VALUES ('159', '3', '3', '150', '158', '10'); -INSERT INTO cp_tree VALUES ('160', '4', '4', '150', '159', '5'); -INSERT INTO cp_tree VALUES ('161', '4', '6', '150', '159', '7'); -INSERT INTO cp_tree VALUES ('162', '4', '8', '150', '159', '9'); -INSERT INTO cp_tree VALUES ('163', '3', '11', '150', '158', '18'); -INSERT INTO cp_tree VALUES ('164', '4', '12', '150', '163', '13'); -INSERT INTO cp_tree VALUES ('165', '4', '14', '150', '163', '15'); -INSERT INTO cp_tree VALUES ('166', '4', '16', '150', '163', '17'); -INSERT INTO cp_tree VALUES ('167', '3', '19', '150', '158', '26'); -INSERT INTO cp_tree VALUES ('168', '4', '20', '150', '167', '21'); -INSERT INTO cp_tree VALUES ('169', '4', '22', '150', '167', '23'); -INSERT INTO cp_tree VALUES ('170', '4', '24', '150', '167', '25'); -INSERT INTO cp_tree VALUES ('171', '2', '28', '150', '157', '41'); -INSERT INTO cp_tree VALUES ('172', '3', '29', '150', '171', '30'); -INSERT INTO cp_tree VALUES ('173', '3', '31', '150', '171', '32'); -INSERT INTO cp_tree VALUES ('174', '3', '33', '150', '171', '34'); -INSERT INTO cp_tree VALUES ('175', '3', '35', '150', '171', '36'); -INSERT INTO cp_tree VALUES ('176', '3', '37', '150', '171', '38'); -INSERT INTO cp_tree VALUES ('177', '3', '39', '150', '171', '40'); -INSERT INTO cp_tree VALUES ('178', '2', '42', '150', '157', '45'); -INSERT INTO cp_tree VALUES ('179', '3', '43', '150', '178', '44'); -INSERT INTO cp_tree VALUES ('180', '2', '46', '150', '157', '49'); -INSERT INTO cp_tree VALUES ('181', '3', '47', '150', '180', '48'); -INSERT INTO cp_tree VALUES ('182', '2', '50', '150', '157', '53'); -INSERT INTO cp_tree VALUES ('183', '3', '51', '150', '182', '52'); -INSERT INTO cp_tree VALUES ('184', '2', '54', '150', '157', '59'); -INSERT INTO cp_tree VALUES ('185', '3', '55', '150', '184', '56'); -INSERT INTO cp_tree VALUES ('186', '3', '57', '150', '184', '58'); -INSERT INTO cp_tree VALUES ('187', '2', '60', '150', '157', '63'); -INSERT INTO cp_tree VALUES ('188', '3', '61', '150', '187', '62'); -INSERT INTO cp_tree VALUES ('189', '2', '64', '150', '157', '67'); -INSERT INTO cp_tree VALUES ('190', '3', '65', '150', '189', '66'); -INSERT INTO cp_tree VALUES ('191', '2', '68', '150', '157', '77'); -INSERT INTO cp_tree VALUES ('192', '3', '69', '150', '191', '70'); -INSERT INTO cp_tree VALUES ('193', '3', '71', '150', '191', '72'); -INSERT INTO cp_tree VALUES ('194', '3', '73', '150', '191', '74'); -INSERT INTO cp_tree VALUES ('195', '3', '75', '150', '191', '76'); -INSERT INTO cp_tree VALUES ('196', '2', '78', '150', '157', '87'); -INSERT INTO cp_tree VALUES ('197', '3', '79', '150', '196', '82'); -INSERT INTO cp_tree VALUES ('198', '4', '80', '150', '197', '81'); -INSERT INTO cp_tree VALUES ('199', '3', '83', '150', '196', '84'); -INSERT INTO cp_tree VALUES ('200', '3', '85', '150', '196', '86'); -INSERT INTO cp_tree VALUES ('201', '2', '88', '150', '157', '93'); -INSERT INTO cp_tree VALUES ('202', '3', '89', '150', '201', '90'); -INSERT INTO cp_tree VALUES ('203', '3', '91', '150', '201', '92'); -INSERT INTO cp_tree VALUES ('204', '2', '94', '150', '157', '95'); -INSERT INTO cp_tree VALUES ('205', '1', '1', '151', '0', '108'); -INSERT INTO cp_tree VALUES ('206', '2', '2', '151', '205', '19'); -INSERT INTO cp_tree VALUES ('207', '3', '3', '151', '206', '8'); -INSERT INTO cp_tree VALUES ('208', '4', '4', '151', '207', '5'); -INSERT INTO cp_tree VALUES ('209', '4', '6', '151', '207', '7'); -INSERT INTO cp_tree VALUES ('210', '3', '9', '151', '206', '16'); -INSERT INTO cp_tree VALUES ('211', '4', '10', '151', '210', '11'); -INSERT INTO cp_tree VALUES ('212', '4', '12', '151', '210', '13'); -INSERT INTO cp_tree VALUES ('213', '4', '14', '151', '210', '15'); -INSERT INTO cp_tree VALUES ('214', '3', '17', '151', '206', '18'); -INSERT INTO cp_tree VALUES ('215', '2', '20', '151', '205', '33'); -INSERT INTO cp_tree VALUES ('216', '3', '21', '151', '215', '22'); -INSERT INTO cp_tree VALUES ('217', '3', '23', '151', '215', '24'); -INSERT INTO cp_tree VALUES ('218', '3', '25', '151', '215', '26'); -INSERT INTO cp_tree VALUES ('219', '3', '27', '151', '215', '28'); -INSERT INTO cp_tree VALUES ('220', '3', '29', '151', '215', '30'); -INSERT INTO cp_tree VALUES ('221', '3', '31', '151', '215', '32'); -INSERT INTO cp_tree VALUES ('222', '2', '34', '151', '205', '37'); -INSERT INTO cp_tree VALUES ('223', '3', '35', '151', '222', '36'); -INSERT INTO cp_tree VALUES ('224', '2', '38', '151', '205', '41'); -INSERT INTO cp_tree VALUES ('225', '3', '39', '151', '224', '40'); -INSERT INTO cp_tree VALUES ('226', '2', '42', '151', '205', '45'); -INSERT INTO cp_tree VALUES ('227', '3', '43', '151', '226', '44'); -INSERT INTO cp_tree VALUES ('228', '2', '46', '151', '205', '51'); -INSERT INTO cp_tree VALUES ('229', '3', '47', '151', '228', '48'); -INSERT INTO cp_tree VALUES ('230', '3', '49', '151', '228', '50'); -INSERT INTO cp_tree VALUES ('231', '2', '52', '151', '205', '55'); -INSERT INTO cp_tree VALUES ('232', '3', '53', '151', '231', '54'); -INSERT INTO cp_tree VALUES ('233', '2', '56', '151', '205', '59'); -INSERT INTO cp_tree VALUES ('234', '3', '57', '151', '233', '58'); -INSERT INTO cp_tree VALUES ('235', '2', '60', '151', '205', '65'); -INSERT INTO cp_tree VALUES ('236', '3', '61', '151', '235', '62'); -INSERT INTO cp_tree VALUES ('237', '3', '63', '151', '235', '64'); -INSERT INTO cp_tree VALUES ('238', '2', '66', '151', '205', '77'); -INSERT INTO cp_tree VALUES ('239', '3', '67', '151', '238', '68'); -INSERT INTO cp_tree VALUES ('240', '3', '69', '151', '238', '70'); -INSERT INTO cp_tree VALUES ('241', '3', '71', '151', '238', '72'); -INSERT INTO cp_tree VALUES ('242', '3', '73', '151', '238', '74'); -INSERT INTO cp_tree VALUES ('243', '3', '75', '151', '238', '76'); -INSERT INTO cp_tree VALUES ('244', '2', '78', '151', '205', '79'); -INSERT INTO cp_tree VALUES ('245', '2', '80', '151', '205', '87'); -INSERT INTO cp_tree VALUES ('246', '3', '81', '151', '245', '86'); -INSERT INTO cp_tree VALUES ('247', '4', '82', '151', '246', '83'); -INSERT INTO cp_tree VALUES ('248', '4', '84', '151', '246', '85'); -INSERT INTO cp_tree VALUES ('249', '2', '88', '151', '205', '95'); -INSERT INTO cp_tree VALUES ('250', '3', '89', '151', '249', '94'); -INSERT INTO cp_tree VALUES ('251', '4', '90', '151', '250', '91'); -INSERT INTO cp_tree VALUES ('252', '4', '92', '151', '250', '93'); -INSERT INTO cp_tree VALUES ('253', '2', '96', '151', '205', '103'); -INSERT INTO cp_tree VALUES ('254', '3', '97', '151', '253', '102'); -INSERT INTO cp_tree VALUES ('255', '4', '98', '151', '254', '99'); -INSERT INTO cp_tree VALUES ('256', '4', '100', '151', '254', '101'); -INSERT INTO cp_tree VALUES ('257', '2', '104', '151', '205', '105'); -INSERT INTO cp_tree VALUES ('258', '2', '106', '151', '205', '107'); -INSERT INTO cp_tree VALUES ('259', '1', '1', '152', '0', '146'); -INSERT INTO cp_tree VALUES ('260', '2', '2', '152', '259', '55'); -INSERT INTO cp_tree VALUES ('261', '3', '3', '152', '260', '20'); -INSERT INTO cp_tree VALUES ('262', '4', '4', '152', '261', '11'); -INSERT INTO cp_tree VALUES ('263', '5', '5', '152', '262', '6'); -INSERT INTO cp_tree VALUES ('264', '5', '7', '152', '262', '8'); -INSERT INTO cp_tree VALUES ('265', '5', '9', '152', '262', '10'); -INSERT INTO cp_tree VALUES ('266', '4', '12', '152', '261', '19'); -INSERT INTO cp_tree VALUES ('267', '5', '13', '152', '266', '14'); -INSERT INTO cp_tree VALUES ('268', '5', '15', '152', '266', '16'); -INSERT INTO cp_tree VALUES ('269', '5', '17', '152', '266', '18'); -INSERT INTO cp_tree VALUES ('270', '3', '21', '152', '260', '46'); -INSERT INTO cp_tree VALUES ('271', '4', '22', '152', '270', '29'); -INSERT INTO cp_tree VALUES ('272', '5', '23', '152', '271', '24'); -INSERT INTO cp_tree VALUES ('273', '5', '25', '152', '271', '26'); -INSERT INTO cp_tree VALUES ('274', '5', '27', '152', '271', '28'); -INSERT INTO cp_tree VALUES ('275', '4', '30', '152', '270', '37'); -INSERT INTO cp_tree VALUES ('276', '5', '31', '152', '275', '32'); -INSERT INTO cp_tree VALUES ('277', '5', '33', '152', '275', '34'); -INSERT INTO cp_tree VALUES ('278', '5', '35', '152', '275', '36'); -INSERT INTO cp_tree VALUES ('279', '4', '38', '152', '270', '45'); -INSERT INTO cp_tree VALUES ('280', '5', '39', '152', '279', '40'); -INSERT INTO cp_tree VALUES ('281', '5', '41', '152', '279', '42'); -INSERT INTO cp_tree VALUES ('282', '5', '43', '152', '279', '44'); -INSERT INTO cp_tree VALUES ('283', '3', '47', '152', '260', '54'); -INSERT INTO cp_tree VALUES ('284', '4', '48', '152', '283', '49'); -INSERT INTO cp_tree VALUES ('285', '4', '50', '152', '283', '51'); -INSERT INTO cp_tree VALUES ('286', '4', '52', '152', '283', '53'); -INSERT INTO cp_tree VALUES ('287', '2', '56', '152', '259', '69'); -INSERT INTO cp_tree VALUES ('288', '3', '57', '152', '287', '58'); -INSERT INTO cp_tree VALUES ('289', '3', '59', '152', '287', '60'); -INSERT INTO cp_tree VALUES ('290', '3', '61', '152', '287', '62'); -INSERT INTO cp_tree VALUES ('291', '3', '63', '152', '287', '64'); -INSERT INTO cp_tree VALUES ('292', '3', '65', '152', '287', '66'); -INSERT INTO cp_tree VALUES ('293', '3', '67', '152', '287', '68'); -INSERT INTO cp_tree VALUES ('294', '2', '70', '152', '259', '73'); -INSERT INTO cp_tree VALUES ('295', '3', '71', '152', '294', '72'); -INSERT INTO cp_tree VALUES ('296', '2', '74', '152', '259', '77'); -INSERT INTO cp_tree VALUES ('297', '3', '75', '152', '296', '76'); -INSERT INTO cp_tree VALUES ('298', '2', '78', '152', '259', '81'); -INSERT INTO cp_tree VALUES ('299', '3', '79', '152', '298', '80'); -INSERT INTO cp_tree VALUES ('300', '2', '82', '152', '259', '87'); -INSERT INTO cp_tree VALUES ('301', '3', '83', '152', '300', '84'); -INSERT INTO cp_tree VALUES ('302', '3', '85', '152', '300', '86'); -INSERT INTO cp_tree VALUES ('303', '2', '88', '152', '259', '91'); -INSERT INTO cp_tree VALUES ('304', '3', '89', '152', '303', '90'); -INSERT INTO cp_tree VALUES ('305', '2', '92', '152', '259', '95'); -INSERT INTO cp_tree VALUES ('306', '3', '93', '152', '305', '94'); -INSERT INTO cp_tree VALUES ('307', '2', '96', '152', '259', '101'); -INSERT INTO cp_tree VALUES ('308', '3', '97', '152', '307', '98'); -INSERT INTO cp_tree VALUES ('309', '3', '99', '152', '307', '100'); -INSERT INTO cp_tree VALUES ('310', '2', '102', '152', '259', '115'); -INSERT INTO cp_tree VALUES ('311', '3', '103', '152', '310', '104'); -INSERT INTO cp_tree VALUES ('312', '3', '105', '152', '310', '106'); -INSERT INTO cp_tree VALUES ('313', '3', '107', '152', '310', '108'); -INSERT INTO cp_tree VALUES ('314', '3', '109', '152', '310', '110'); -INSERT INTO cp_tree VALUES ('315', '3', '111', '152', '310', '112'); -INSERT INTO cp_tree VALUES ('316', '3', '113', '152', '310', '114'); -INSERT INTO cp_tree VALUES ('317', '2', '116', '152', '259', '117'); -INSERT INTO cp_tree VALUES ('318', '2', '118', '152', '259', '125'); -INSERT INTO cp_tree VALUES ('319', '3', '119', '152', '318', '124'); -INSERT INTO cp_tree VALUES ('320', '4', '120', '152', '319', '121'); -INSERT INTO cp_tree VALUES ('321', '4', '122', '152', '319', '123'); -INSERT INTO cp_tree VALUES ('322', '2', '126', '152', '259', '133'); -INSERT INTO cp_tree VALUES ('323', '3', '127', '152', '322', '132'); -INSERT INTO cp_tree VALUES ('324', '4', '128', '152', '323', '129'); -INSERT INTO cp_tree VALUES ('325', '4', '130', '152', '323', '131'); -INSERT INTO cp_tree VALUES ('326', '2', '134', '152', '259', '141'); -INSERT INTO cp_tree VALUES ('327', '3', '135', '152', '326', '140'); -INSERT INTO cp_tree VALUES ('328', '4', '136', '152', '327', '137'); -INSERT INTO cp_tree VALUES ('329', '4', '138', '152', '327', '139'); -INSERT INTO cp_tree VALUES ('330', '2', '142', '152', '259', '143'); -INSERT INTO cp_tree VALUES ('331', '2', '144', '152', '259', '145'); -INSERT INTO cp_tree VALUES ('332', '1', '1', '153', '0', '136'); -INSERT INTO cp_tree VALUES ('333', '2', '2', '153', '332', '93'); -INSERT INTO cp_tree VALUES ('334', '3', '3', '153', '333', '20'); -INSERT INTO cp_tree VALUES ('335', '4', '4', '153', '334', '11'); -INSERT INTO cp_tree VALUES ('336', '5', '5', '153', '335', '6'); -INSERT INTO cp_tree VALUES ('337', '5', '7', '153', '335', '8'); -INSERT INTO cp_tree VALUES ('338', '5', '9', '153', '335', '10'); -INSERT INTO cp_tree VALUES ('339', '4', '12', '153', '334', '19'); -INSERT INTO cp_tree VALUES ('340', '5', '13', '153', '339', '14'); -INSERT INTO cp_tree VALUES ('341', '5', '15', '153', '339', '16'); -INSERT INTO cp_tree VALUES ('342', '5', '17', '153', '339', '18'); -INSERT INTO cp_tree VALUES ('343', '3', '21', '153', '333', '46'); -INSERT INTO cp_tree VALUES ('344', '4', '22', '153', '343', '29'); -INSERT INTO cp_tree VALUES ('345', '5', '23', '153', '344', '24'); -INSERT INTO cp_tree VALUES ('346', '5', '25', '153', '344', '26'); -INSERT INTO cp_tree VALUES ('347', '5', '27', '153', '344', '28'); -INSERT INTO cp_tree VALUES ('348', '4', '30', '153', '343', '37'); -INSERT INTO cp_tree VALUES ('349', '5', '31', '153', '348', '32'); -INSERT INTO cp_tree VALUES ('350', '5', '33', '153', '348', '34'); -INSERT INTO cp_tree VALUES ('351', '5', '35', '153', '348', '36'); -INSERT INTO cp_tree VALUES ('352', '4', '38', '153', '343', '45'); -INSERT INTO cp_tree VALUES ('353', '5', '39', '153', '352', '40'); -INSERT INTO cp_tree VALUES ('354', '5', '41', '153', '352', '42'); -INSERT INTO cp_tree VALUES ('355', '5', '43', '153', '352', '44'); -INSERT INTO cp_tree VALUES ('356', '3', '47', '153', '333', '84'); -INSERT INTO cp_tree VALUES ('357', '4', '48', '153', '356', '55'); -INSERT INTO cp_tree VALUES ('358', '5', '49', '153', '357', '50'); -INSERT INTO cp_tree VALUES ('359', '5', '51', '153', '357', '52'); -INSERT INTO cp_tree VALUES ('360', '5', '53', '153', '357', '54'); -INSERT INTO cp_tree VALUES ('361', '4', '56', '153', '356', '83'); -INSERT INTO cp_tree VALUES ('362', '5', '57', '153', '361', '74'); -INSERT INTO cp_tree VALUES ('363', '6', '58', '153', '362', '65'); -INSERT INTO cp_tree VALUES ('364', '7', '59', '153', '363', '60'); -INSERT INTO cp_tree VALUES ('365', '7', '61', '153', '363', '62'); -INSERT INTO cp_tree VALUES ('366', '7', '63', '153', '363', '64'); -INSERT INTO cp_tree VALUES ('367', '6', '66', '153', '362', '73'); -INSERT INTO cp_tree VALUES ('368', '7', '67', '153', '367', '68'); -INSERT INTO cp_tree VALUES ('369', '7', '69', '153', '367', '70'); -INSERT INTO cp_tree VALUES ('370', '7', '71', '153', '367', '72'); -INSERT INTO cp_tree VALUES ('371', '5', '75', '153', '361', '82'); -INSERT INTO cp_tree VALUES ('372', '6', '76', '153', '371', '77'); -INSERT INTO cp_tree VALUES ('373', '6', '78', '153', '371', '79'); -INSERT INTO cp_tree VALUES ('374', '6', '80', '153', '371', '81'); -INSERT INTO cp_tree VALUES ('375', '3', '85', '153', '333', '92'); -INSERT INTO cp_tree VALUES ('376', '4', '86', '153', '375', '87'); -INSERT INTO cp_tree VALUES ('377', '4', '88', '153', '375', '89'); -INSERT INTO cp_tree VALUES ('378', '4', '90', '153', '375', '91'); -INSERT INTO cp_tree VALUES ('379', '2', '94', '153', '332', '107'); -INSERT INTO cp_tree VALUES ('380', '3', '95', '153', '379', '96'); -INSERT INTO cp_tree VALUES ('381', '3', '97', '153', '379', '98'); -INSERT INTO cp_tree VALUES ('382', '3', '99', '153', '379', '100'); -INSERT INTO cp_tree VALUES ('383', '3', '101', '153', '379', '102'); -INSERT INTO cp_tree VALUES ('384', '3', '103', '153', '379', '104'); -INSERT INTO cp_tree VALUES ('385', '3', '105', '153', '379', '106'); -INSERT INTO cp_tree VALUES ('386', '2', '108', '153', '332', '111'); -INSERT INTO cp_tree VALUES ('387', '3', '109', '153', '386', '110'); -INSERT INTO cp_tree VALUES ('388', '2', '112', '153', '332', '115'); -INSERT INTO cp_tree VALUES ('389', '3', '113', '153', '388', '114'); -INSERT INTO cp_tree VALUES ('390', '2', '116', '153', '332', '119'); -INSERT INTO cp_tree VALUES ('391', '3', '117', '153', '390', '118'); -INSERT INTO cp_tree VALUES ('392', '2', '120', '153', '332', '125'); -INSERT INTO cp_tree VALUES ('393', '3', '121', '153', '392', '122'); -INSERT INTO cp_tree VALUES ('394', '3', '123', '153', '392', '124'); -INSERT INTO cp_tree VALUES ('395', '2', '126', '153', '332', '129'); -INSERT INTO cp_tree VALUES ('396', '3', '127', '153', '395', '128'); -INSERT INTO cp_tree VALUES ('397', '2', '130', '153', '332', '133'); -INSERT INTO cp_tree VALUES ('398', '3', '131', '153', '397', '132'); -INSERT INTO cp_tree VALUES ('399', '2', '134', '153', '332', '135'); -INSERT INTO cp_tree VALUES ('400', '1', '1', '154', '0', '86'); -INSERT INTO cp_tree VALUES ('401', '2', '2', '154', '400', '33'); -INSERT INTO cp_tree VALUES ('402', '3', '3', '154', '401', '8'); -INSERT INTO cp_tree VALUES ('403', '4', '4', '154', '402', '5'); -INSERT INTO cp_tree VALUES ('404', '4', '6', '154', '402', '7'); -INSERT INTO cp_tree VALUES ('405', '3', '9', '154', '401', '16'); -INSERT INTO cp_tree VALUES ('406', '4', '10', '154', '405', '11'); -INSERT INTO cp_tree VALUES ('407', '4', '12', '154', '405', '13'); -INSERT INTO cp_tree VALUES ('408', '4', '14', '154', '405', '15'); -INSERT INTO cp_tree VALUES ('409', '3', '17', '154', '401', '30'); -INSERT INTO cp_tree VALUES ('410', '4', '18', '154', '409', '19'); -INSERT INTO cp_tree VALUES ('411', '4', '20', '154', '409', '29'); -INSERT INTO cp_tree VALUES ('412', '5', '21', '154', '411', '26'); -INSERT INTO cp_tree VALUES ('413', '6', '22', '154', '412', '23'); -INSERT INTO cp_tree VALUES ('414', '6', '24', '154', '412', '25'); -INSERT INTO cp_tree VALUES ('415', '5', '27', '154', '411', '28'); -INSERT INTO cp_tree VALUES ('416', '3', '31', '154', '401', '32'); -INSERT INTO cp_tree VALUES ('417', '2', '34', '154', '400', '47'); -INSERT INTO cp_tree VALUES ('418', '3', '35', '154', '417', '36'); -INSERT INTO cp_tree VALUES ('419', '3', '37', '154', '417', '38'); -INSERT INTO cp_tree VALUES ('420', '3', '39', '154', '417', '40'); -INSERT INTO cp_tree VALUES ('421', '3', '41', '154', '417', '42'); -INSERT INTO cp_tree VALUES ('422', '3', '43', '154', '417', '44'); -INSERT INTO cp_tree VALUES ('423', '3', '45', '154', '417', '46'); -INSERT INTO cp_tree VALUES ('424', '2', '48', '154', '400', '51'); -INSERT INTO cp_tree VALUES ('425', '3', '49', '154', '424', '50'); -INSERT INTO cp_tree VALUES ('426', '2', '52', '154', '400', '55'); -INSERT INTO cp_tree VALUES ('427', '3', '53', '154', '426', '54'); -INSERT INTO cp_tree VALUES ('428', '2', '56', '154', '400', '59'); -INSERT INTO cp_tree VALUES ('429', '3', '57', '154', '428', '58'); -INSERT INTO cp_tree VALUES ('430', '2', '60', '154', '400', '65'); -INSERT INTO cp_tree VALUES ('431', '3', '61', '154', '430', '62'); -INSERT INTO cp_tree VALUES ('432', '3', '63', '154', '430', '64'); -INSERT INTO cp_tree VALUES ('433', '2', '66', '154', '400', '69'); -INSERT INTO cp_tree VALUES ('434', '3', '67', '154', '433', '68'); -INSERT INTO cp_tree VALUES ('435', '2', '70', '154', '400', '73'); -INSERT INTO cp_tree VALUES ('436', '3', '71', '154', '435', '72'); -INSERT INTO cp_tree VALUES ('437', '2', '74', '154', '400', '75'); -INSERT INTO cp_tree VALUES ('438', '2', '76', '154', '400', '81'); -INSERT INTO cp_tree VALUES ('439', '3', '77', '154', '438', '80'); -INSERT INTO cp_tree VALUES ('440', '4', '78', '154', '439', '79'); -INSERT INTO cp_tree VALUES ('441', '2', '82', '154', '400', '83'); -INSERT INTO cp_tree VALUES ('442', '2', '84', '154', '400', '85'); -INSERT INTO cp_tree VALUES ('443', '1', '1', '155', '0', '144'); -INSERT INTO cp_tree VALUES ('444', '2', '2', '155', '443', '93'); -INSERT INTO cp_tree VALUES ('445', '3', '3', '155', '444', '20'); -INSERT INTO cp_tree VALUES ('446', '4', '4', '155', '445', '11'); -INSERT INTO cp_tree VALUES ('447', '5', '5', '155', '446', '6'); -INSERT INTO cp_tree VALUES ('448', '5', '7', '155', '446', '8'); -INSERT INTO cp_tree VALUES ('449', '5', '9', '155', '446', '10'); -INSERT INTO cp_tree VALUES ('450', '4', '12', '155', '445', '19'); -INSERT INTO cp_tree VALUES ('451', '5', '13', '155', '450', '14'); -INSERT INTO cp_tree VALUES ('452', '5', '15', '155', '450', '16'); -INSERT INTO cp_tree VALUES ('453', '5', '17', '155', '450', '18'); -INSERT INTO cp_tree VALUES ('454', '3', '21', '155', '444', '46'); -INSERT INTO cp_tree VALUES ('455', '4', '22', '155', '454', '29'); -INSERT INTO cp_tree VALUES ('456', '5', '23', '155', '455', '24'); -INSERT INTO cp_tree VALUES ('457', '5', '25', '155', '455', '26'); -INSERT INTO cp_tree VALUES ('458', '5', '27', '155', '455', '28'); -INSERT INTO cp_tree VALUES ('459', '4', '30', '155', '454', '37'); -INSERT INTO cp_tree VALUES ('460', '5', '31', '155', '459', '32'); -INSERT INTO cp_tree VALUES ('461', '5', '33', '155', '459', '34'); -INSERT INTO cp_tree VALUES ('462', '5', '35', '155', '459', '36'); -INSERT INTO cp_tree VALUES ('463', '4', '38', '155', '454', '45'); -INSERT INTO cp_tree VALUES ('464', '5', '39', '155', '463', '40'); -INSERT INTO cp_tree VALUES ('465', '5', '41', '155', '463', '42'); -INSERT INTO cp_tree VALUES ('466', '5', '43', '155', '463', '44'); -INSERT INTO cp_tree VALUES ('467', '3', '47', '155', '444', '84'); -INSERT INTO cp_tree VALUES ('468', '4', '48', '155', '467', '55'); -INSERT INTO cp_tree VALUES ('469', '5', '49', '155', '468', '50'); -INSERT INTO cp_tree VALUES ('470', '5', '51', '155', '468', '52'); -INSERT INTO cp_tree VALUES ('471', '5', '53', '155', '468', '54'); -INSERT INTO cp_tree VALUES ('472', '4', '56', '155', '467', '83'); -INSERT INTO cp_tree VALUES ('473', '5', '57', '155', '472', '74'); -INSERT INTO cp_tree VALUES ('474', '6', '58', '155', '473', '65'); -INSERT INTO cp_tree VALUES ('475', '7', '59', '155', '474', '60'); -INSERT INTO cp_tree VALUES ('476', '7', '61', '155', '474', '62'); -INSERT INTO cp_tree VALUES ('477', '7', '63', '155', '474', '64'); -INSERT INTO cp_tree VALUES ('478', '6', '66', '155', '473', '73'); -INSERT INTO cp_tree VALUES ('479', '7', '67', '155', '478', '68'); -INSERT INTO cp_tree VALUES ('480', '7', '69', '155', '478', '70'); -INSERT INTO cp_tree VALUES ('481', '7', '71', '155', '478', '72'); -INSERT INTO cp_tree VALUES ('482', '5', '75', '155', '472', '82'); -INSERT INTO cp_tree VALUES ('483', '6', '76', '155', '482', '77'); -INSERT INTO cp_tree VALUES ('484', '6', '78', '155', '482', '79'); -INSERT INTO cp_tree VALUES ('485', '6', '80', '155', '482', '81'); -INSERT INTO cp_tree VALUES ('486', '3', '85', '155', '444', '92'); -INSERT INTO cp_tree VALUES ('487', '4', '86', '155', '486', '87'); -INSERT INTO cp_tree VALUES ('488', '4', '88', '155', '486', '89'); -INSERT INTO cp_tree VALUES ('489', '4', '90', '155', '486', '91'); -INSERT INTO cp_tree VALUES ('490', '2', '94', '155', '443', '107'); -INSERT INTO cp_tree VALUES ('491', '3', '95', '155', '490', '96'); -INSERT INTO cp_tree VALUES ('492', '3', '97', '155', '490', '98'); -INSERT INTO cp_tree VALUES ('493', '3', '99', '155', '490', '100'); -INSERT INTO cp_tree VALUES ('494', '3', '101', '155', '490', '102'); -INSERT INTO cp_tree VALUES ('495', '3', '103', '155', '490', '104'); -INSERT INTO cp_tree VALUES ('496', '3', '105', '155', '490', '106'); -INSERT INTO cp_tree VALUES ('497', '2', '108', '155', '443', '111'); -INSERT INTO cp_tree VALUES ('498', '3', '109', '155', '497', '110'); -INSERT INTO cp_tree VALUES ('499', '2', '112', '155', '443', '115'); -INSERT INTO cp_tree VALUES ('500', '3', '113', '155', '499', '114'); -INSERT INTO cp_tree VALUES ('501', '2', '116', '155', '443', '119'); -INSERT INTO cp_tree VALUES ('502', '3', '117', '155', '501', '118'); -INSERT INTO cp_tree VALUES ('503', '2', '120', '155', '443', '125'); -INSERT INTO cp_tree VALUES ('504', '3', '121', '155', '503', '122'); -INSERT INTO cp_tree VALUES ('505', '3', '123', '155', '503', '124'); -INSERT INTO cp_tree VALUES ('506', '2', '126', '155', '443', '129'); -INSERT INTO cp_tree VALUES ('507', '3', '127', '155', '506', '128'); -INSERT INTO cp_tree VALUES ('508', '2', '130', '155', '443', '133'); -INSERT INTO cp_tree VALUES ('509', '3', '131', '155', '508', '132'); -INSERT INTO cp_tree VALUES ('510', '2', '134', '155', '443', '135'); -INSERT INTO cp_tree VALUES ('511', '2', '136', '155', '443', '141'); -INSERT INTO cp_tree VALUES ('512', '3', '137', '155', '511', '140'); -INSERT INTO cp_tree VALUES ('513', '4', '138', '155', '512', '139'); -INSERT INTO cp_tree VALUES ('514', '2', '142', '155', '443', '143'); -INSERT INTO cp_tree VALUES ('515', '1', '1', '156', '0', '136'); -INSERT INTO cp_tree VALUES ('516', '2', '2', '156', '515', '93'); -INSERT INTO cp_tree VALUES ('517', '3', '3', '156', '516', '20'); -INSERT INTO cp_tree VALUES ('518', '4', '4', '156', '517', '11'); -INSERT INTO cp_tree VALUES ('519', '5', '5', '156', '518', '6'); -INSERT INTO cp_tree VALUES ('520', '5', '7', '156', '518', '8'); -INSERT INTO cp_tree VALUES ('521', '5', '9', '156', '518', '10'); -INSERT INTO cp_tree VALUES ('522', '4', '12', '156', '517', '19'); -INSERT INTO cp_tree VALUES ('523', '5', '13', '156', '522', '14'); -INSERT INTO cp_tree VALUES ('524', '5', '15', '156', '522', '16'); -INSERT INTO cp_tree VALUES ('525', '5', '17', '156', '522', '18'); -INSERT INTO cp_tree VALUES ('526', '3', '21', '156', '516', '46'); -INSERT INTO cp_tree VALUES ('527', '4', '22', '156', '526', '29'); -INSERT INTO cp_tree VALUES ('528', '5', '23', '156', '527', '24'); -INSERT INTO cp_tree VALUES ('529', '5', '25', '156', '527', '26'); -INSERT INTO cp_tree VALUES ('530', '5', '27', '156', '527', '28'); -INSERT INTO cp_tree VALUES ('531', '4', '30', '156', '526', '37'); -INSERT INTO cp_tree VALUES ('532', '5', '31', '156', '531', '32'); -INSERT INTO cp_tree VALUES ('533', '5', '33', '156', '531', '34'); -INSERT INTO cp_tree VALUES ('534', '5', '35', '156', '531', '36'); -INSERT INTO cp_tree VALUES ('535', '4', '38', '156', '526', '45'); -INSERT INTO cp_tree VALUES ('536', '5', '39', '156', '535', '40'); -INSERT INTO cp_tree VALUES ('537', '5', '41', '156', '535', '42'); -INSERT INTO cp_tree VALUES ('538', '5', '43', '156', '535', '44'); -INSERT INTO cp_tree VALUES ('539', '3', '47', '156', '516', '84'); -INSERT INTO cp_tree VALUES ('540', '4', '48', '156', '539', '55'); -INSERT INTO cp_tree VALUES ('541', '5', '49', '156', '540', '50'); -INSERT INTO cp_tree VALUES ('542', '5', '51', '156', '540', '52'); -INSERT INTO cp_tree VALUES ('543', '5', '53', '156', '540', '54'); -INSERT INTO cp_tree VALUES ('544', '4', '56', '156', '539', '83'); -INSERT INTO cp_tree VALUES ('545', '5', '57', '156', '544', '74'); -INSERT INTO cp_tree VALUES ('546', '6', '58', '156', '545', '65'); -INSERT INTO cp_tree VALUES ('547', '7', '59', '156', '546', '60'); -INSERT INTO cp_tree VALUES ('548', '7', '61', '156', '546', '62'); -INSERT INTO cp_tree VALUES ('549', '7', '63', '156', '546', '64'); -INSERT INTO cp_tree VALUES ('550', '6', '66', '156', '545', '73'); -INSERT INTO cp_tree VALUES ('551', '7', '67', '156', '550', '68'); -INSERT INTO cp_tree VALUES ('552', '7', '69', '156', '550', '70'); -INSERT INTO cp_tree VALUES ('553', '7', '71', '156', '550', '72'); -INSERT INTO cp_tree VALUES ('554', '5', '75', '156', '544', '82'); -INSERT INTO cp_tree VALUES ('555', '6', '76', '156', '554', '77'); -INSERT INTO cp_tree VALUES ('556', '6', '78', '156', '554', '79'); -INSERT INTO cp_tree VALUES ('557', '6', '80', '156', '554', '81'); -INSERT INTO cp_tree VALUES ('558', '3', '85', '156', '516', '92'); -INSERT INTO cp_tree VALUES ('559', '4', '86', '156', '558', '87'); -INSERT INTO cp_tree VALUES ('560', '4', '88', '156', '558', '89'); -INSERT INTO cp_tree VALUES ('561', '4', '90', '156', '558', '91'); -INSERT INTO cp_tree VALUES ('562', '2', '94', '156', '515', '107'); -INSERT INTO cp_tree VALUES ('563', '3', '95', '156', '562', '96'); -INSERT INTO cp_tree VALUES ('564', '3', '97', '156', '562', '98'); -INSERT INTO cp_tree VALUES ('565', '3', '99', '156', '562', '100'); -INSERT INTO cp_tree VALUES ('566', '3', '101', '156', '562', '102'); -INSERT INTO cp_tree VALUES ('567', '3', '103', '156', '562', '104'); -INSERT INTO cp_tree VALUES ('568', '3', '105', '156', '562', '106'); -INSERT INTO cp_tree VALUES ('569', '2', '108', '156', '515', '111'); -INSERT INTO cp_tree VALUES ('570', '3', '109', '156', '569', '110'); -INSERT INTO cp_tree VALUES ('571', '2', '112', '156', '515', '115'); -INSERT INTO cp_tree VALUES ('572', '3', '113', '156', '571', '114'); -INSERT INTO cp_tree VALUES ('573', '2', '116', '156', '515', '119'); -INSERT INTO cp_tree VALUES ('574', '3', '117', '156', '573', '118'); -INSERT INTO cp_tree VALUES ('575', '2', '120', '156', '515', '125'); -INSERT INTO cp_tree VALUES ('576', '3', '121', '156', '575', '122'); -INSERT INTO cp_tree VALUES ('577', '3', '123', '156', '575', '124'); -INSERT INTO cp_tree VALUES ('578', '2', '126', '156', '515', '129'); -INSERT INTO cp_tree VALUES ('579', '3', '127', '156', '578', '128'); -INSERT INTO cp_tree VALUES ('580', '2', '130', '156', '515', '133'); -INSERT INTO cp_tree VALUES ('581', '3', '131', '156', '580', '132'); -INSERT INTO cp_tree VALUES ('582', '2', '134', '156', '515', '135'); -INSERT INTO cp_tree VALUES ('583', '1', '1', '157', '0', '110'); -INSERT INTO cp_tree VALUES ('584', '2', '2', '157', '583', '63'); -INSERT INTO cp_tree VALUES ('585', '3', '3', '157', '584', '10'); -INSERT INTO cp_tree VALUES ('586', '4', '4', '157', '585', '5'); -INSERT INTO cp_tree VALUES ('587', '4', '6', '157', '585', '7'); -INSERT INTO cp_tree VALUES ('588', '4', '8', '157', '585', '9'); -INSERT INTO cp_tree VALUES ('589', '3', '11', '157', '584', '54'); -INSERT INTO cp_tree VALUES ('590', '4', '12', '157', '589', '37'); -INSERT INTO cp_tree VALUES ('591', '5', '13', '157', '590', '20'); -INSERT INTO cp_tree VALUES ('592', '6', '14', '157', '591', '15'); -INSERT INTO cp_tree VALUES ('593', '6', '16', '157', '591', '17'); -INSERT INTO cp_tree VALUES ('594', '6', '18', '157', '591', '19'); -INSERT INTO cp_tree VALUES ('595', '5', '21', '157', '590', '28'); -INSERT INTO cp_tree VALUES ('596', '6', '22', '157', '595', '23'); -INSERT INTO cp_tree VALUES ('597', '6', '24', '157', '595', '25'); -INSERT INTO cp_tree VALUES ('598', '6', '26', '157', '595', '27'); -INSERT INTO cp_tree VALUES ('599', '5', '29', '157', '590', '36'); -INSERT INTO cp_tree VALUES ('600', '6', '30', '157', '599', '31'); -INSERT INTO cp_tree VALUES ('601', '6', '32', '157', '599', '33'); -INSERT INTO cp_tree VALUES ('602', '6', '34', '157', '599', '35'); -INSERT INTO cp_tree VALUES ('603', '4', '38', '157', '589', '45'); -INSERT INTO cp_tree VALUES ('604', '5', '39', '157', '603', '40'); -INSERT INTO cp_tree VALUES ('605', '5', '41', '157', '603', '42'); -INSERT INTO cp_tree VALUES ('606', '5', '43', '157', '603', '44'); -INSERT INTO cp_tree VALUES ('607', '4', '46', '157', '589', '53'); -INSERT INTO cp_tree VALUES ('608', '5', '47', '157', '607', '48'); -INSERT INTO cp_tree VALUES ('609', '5', '49', '157', '607', '50'); -INSERT INTO cp_tree VALUES ('610', '5', '51', '157', '607', '52'); -INSERT INTO cp_tree VALUES ('611', '3', '55', '157', '584', '62'); -INSERT INTO cp_tree VALUES ('612', '4', '56', '157', '611', '57'); -INSERT INTO cp_tree VALUES ('613', '4', '58', '157', '611', '59'); -INSERT INTO cp_tree VALUES ('614', '4', '60', '157', '611', '61'); -INSERT INTO cp_tree VALUES ('615', '2', '64', '157', '583', '77'); -INSERT INTO cp_tree VALUES ('616', '3', '65', '157', '615', '66'); -INSERT INTO cp_tree VALUES ('617', '3', '67', '157', '615', '68'); -INSERT INTO cp_tree VALUES ('618', '3', '69', '157', '615', '70'); -INSERT INTO cp_tree VALUES ('619', '3', '71', '157', '615', '72'); -INSERT INTO cp_tree VALUES ('620', '3', '73', '157', '615', '74'); -INSERT INTO cp_tree VALUES ('621', '3', '75', '157', '615', '76'); -INSERT INTO cp_tree VALUES ('622', '2', '78', '157', '583', '81'); -INSERT INTO cp_tree VALUES ('623', '3', '79', '157', '622', '80'); -INSERT INTO cp_tree VALUES ('624', '2', '82', '157', '583', '85'); -INSERT INTO cp_tree VALUES ('625', '3', '83', '157', '624', '84'); -INSERT INTO cp_tree VALUES ('626', '2', '86', '157', '583', '89'); -INSERT INTO cp_tree VALUES ('627', '3', '87', '157', '626', '88'); -INSERT INTO cp_tree VALUES ('628', '2', '90', '157', '583', '95'); -INSERT INTO cp_tree VALUES ('629', '3', '91', '157', '628', '92'); -INSERT INTO cp_tree VALUES ('630', '3', '93', '157', '628', '94'); -INSERT INTO cp_tree VALUES ('631', '2', '96', '157', '583', '99'); -INSERT INTO cp_tree VALUES ('632', '3', '97', '157', '631', '98'); -INSERT INTO cp_tree VALUES ('633', '2', '100', '157', '583', '103'); -INSERT INTO cp_tree VALUES ('634', '3', '101', '157', '633', '102'); -INSERT INTO cp_tree VALUES ('635', '2', '104', '157', '583', '105'); -INSERT INTO cp_tree VALUES ('636', '2', '106', '157', '583', '107'); -INSERT INTO cp_tree VALUES ('637', '2', '108', '157', '583', '109'); -INSERT INTO cp_tree VALUES ('638', '1', '1', '158', '0', '70'); -INSERT INTO cp_tree VALUES ('639', '2', '2', '158', '638', '27'); -INSERT INTO cp_tree VALUES ('640', '3', '3', '158', '639', '10'); -INSERT INTO cp_tree VALUES ('641', '4', '4', '158', '640', '5'); -INSERT INTO cp_tree VALUES ('642', '4', '6', '158', '640', '7'); -INSERT INTO cp_tree VALUES ('643', '4', '8', '158', '640', '9'); -INSERT INTO cp_tree VALUES ('644', '3', '11', '158', '639', '18'); -INSERT INTO cp_tree VALUES ('645', '4', '12', '158', '644', '13'); -INSERT INTO cp_tree VALUES ('646', '4', '14', '158', '644', '15'); -INSERT INTO cp_tree VALUES ('647', '4', '16', '158', '644', '17'); -INSERT INTO cp_tree VALUES ('648', '3', '19', '158', '639', '26'); -INSERT INTO cp_tree VALUES ('649', '4', '20', '158', '648', '21'); -INSERT INTO cp_tree VALUES ('650', '4', '22', '158', '648', '23'); -INSERT INTO cp_tree VALUES ('651', '4', '24', '158', '648', '25'); -INSERT INTO cp_tree VALUES ('652', '2', '28', '158', '638', '41'); -INSERT INTO cp_tree VALUES ('653', '3', '29', '158', '652', '30'); -INSERT INTO cp_tree VALUES ('654', '3', '31', '158', '652', '32'); -INSERT INTO cp_tree VALUES ('655', '3', '33', '158', '652', '34'); -INSERT INTO cp_tree VALUES ('656', '3', '35', '158', '652', '36'); -INSERT INTO cp_tree VALUES ('657', '3', '37', '158', '652', '38'); -INSERT INTO cp_tree VALUES ('658', '3', '39', '158', '652', '40'); -INSERT INTO cp_tree VALUES ('659', '2', '42', '158', '638', '45'); -INSERT INTO cp_tree VALUES ('660', '3', '43', '158', '659', '44'); -INSERT INTO cp_tree VALUES ('661', '2', '46', '158', '638', '49'); -INSERT INTO cp_tree VALUES ('662', '3', '47', '158', '661', '48'); -INSERT INTO cp_tree VALUES ('663', '2', '50', '158', '638', '53'); -INSERT INTO cp_tree VALUES ('664', '3', '51', '158', '663', '52'); -INSERT INTO cp_tree VALUES ('665', '2', '54', '158', '638', '59'); -INSERT INTO cp_tree VALUES ('666', '3', '55', '158', '665', '56'); -INSERT INTO cp_tree VALUES ('667', '3', '57', '158', '665', '58'); -INSERT INTO cp_tree VALUES ('668', '2', '60', '158', '638', '63'); -INSERT INTO cp_tree VALUES ('669', '3', '61', '158', '668', '62'); -INSERT INTO cp_tree VALUES ('670', '2', '64', '158', '638', '67'); -INSERT INTO cp_tree VALUES ('671', '3', '65', '158', '670', '66'); -INSERT INTO cp_tree VALUES ('672', '2', '68', '158', '638', '69'); -INSERT INTO cp_tree VALUES ('673', '1', '1', '159', '0', '112'); -INSERT INTO cp_tree VALUES ('674', '2', '2', '159', '673', '31'); -INSERT INTO cp_tree VALUES ('675', '3', '3', '159', '674', '16'); -INSERT INTO cp_tree VALUES ('676', '4', '4', '159', '675', '11'); -INSERT INTO cp_tree VALUES ('677', '5', '5', '159', '676', '6'); -INSERT INTO cp_tree VALUES ('678', '5', '7', '159', '676', '8'); -INSERT INTO cp_tree VALUES ('679', '5', '9', '159', '676', '10'); -INSERT INTO cp_tree VALUES ('680', '4', '12', '159', '675', '13'); -INSERT INTO cp_tree VALUES ('681', '4', '14', '159', '675', '15'); -INSERT INTO cp_tree VALUES ('682', '3', '17', '159', '674', '30'); -INSERT INTO cp_tree VALUES ('683', '4', '18', '159', '682', '19'); -INSERT INTO cp_tree VALUES ('684', '4', '20', '159', '682', '21'); -INSERT INTO cp_tree VALUES ('685', '4', '22', '159', '682', '29'); -INSERT INTO cp_tree VALUES ('686', '5', '23', '159', '685', '24'); -INSERT INTO cp_tree VALUES ('687', '5', '25', '159', '685', '26'); -INSERT INTO cp_tree VALUES ('688', '5', '27', '159', '685', '28'); -INSERT INTO cp_tree VALUES ('689', '2', '32', '159', '673', '45'); -INSERT INTO cp_tree VALUES ('690', '3', '33', '159', '689', '34'); -INSERT INTO cp_tree VALUES ('691', '3', '35', '159', '689', '36'); -INSERT INTO cp_tree VALUES ('692', '3', '37', '159', '689', '38'); -INSERT INTO cp_tree VALUES ('693', '3', '39', '159', '689', '40'); -INSERT INTO cp_tree VALUES ('694', '3', '41', '159', '689', '42'); -INSERT INTO cp_tree VALUES ('695', '3', '43', '159', '689', '44'); -INSERT INTO cp_tree VALUES ('696', '2', '46', '159', '673', '59'); -INSERT INTO cp_tree VALUES ('697', '3', '47', '159', '696', '48'); -INSERT INTO cp_tree VALUES ('698', '3', '49', '159', '696', '50'); -INSERT INTO cp_tree VALUES ('699', '3', '51', '159', '696', '52'); -INSERT INTO cp_tree VALUES ('700', '3', '53', '159', '696', '54'); -INSERT INTO cp_tree VALUES ('701', '3', '55', '159', '696', '56'); -INSERT INTO cp_tree VALUES ('702', '3', '57', '159', '696', '58'); -INSERT INTO cp_tree VALUES ('703', '2', '60', '159', '673', '63'); -INSERT INTO cp_tree VALUES ('704', '3', '61', '159', '703', '62'); -INSERT INTO cp_tree VALUES ('705', '2', '64', '159', '673', '67'); -INSERT INTO cp_tree VALUES ('706', '3', '65', '159', '705', '66'); -INSERT INTO cp_tree VALUES ('707', '2', '68', '159', '673', '71'); -INSERT INTO cp_tree VALUES ('708', '3', '69', '159', '707', '70'); -INSERT INTO cp_tree VALUES ('709', '2', '72', '159', '673', '77'); -INSERT INTO cp_tree VALUES ('710', '3', '73', '159', '709', '74'); -INSERT INTO cp_tree VALUES ('711', '3', '75', '159', '709', '76'); -INSERT INTO cp_tree VALUES ('712', '2', '78', '159', '673', '81'); -INSERT INTO cp_tree VALUES ('713', '3', '79', '159', '712', '80'); -INSERT INTO cp_tree VALUES ('714', '2', '82', '159', '673', '85'); -INSERT INTO cp_tree VALUES ('715', '3', '83', '159', '714', '84'); -INSERT INTO cp_tree VALUES ('716', '2', '86', '159', '673', '91'); -INSERT INTO cp_tree VALUES ('717', '3', '87', '159', '716', '90'); -INSERT INTO cp_tree VALUES ('718', '4', '88', '159', '717', '89'); -INSERT INTO cp_tree VALUES ('719', '2', '92', '159', '673', '93'); -INSERT INTO cp_tree VALUES ('720', '2', '94', '159', '673', '95'); -INSERT INTO cp_tree VALUES ('721', '2', '96', '159', '673', '97'); -INSERT INTO cp_tree VALUES ('722', '2', '98', '159', '673', '99'); -INSERT INTO cp_tree VALUES ('723', '2', '100', '159', '673', '105'); -INSERT INTO cp_tree VALUES ('724', '3', '101', '159', '723', '104'); -INSERT INTO cp_tree VALUES ('725', '4', '102', '159', '724', '103'); -INSERT INTO cp_tree VALUES ('726', '2', '106', '159', '673', '107'); -INSERT INTO cp_tree VALUES ('727', '2', '108', '159', '673', '109'); -INSERT INTO cp_tree VALUES ('728', '2', '110', '159', '673', '111'); -INSERT INTO cp_tree VALUES ('729', '1', '1', '160', '0', '136'); -INSERT INTO cp_tree VALUES ('730', '2', '2', '160', '729', '45'); -INSERT INTO cp_tree VALUES ('731', '3', '3', '160', '730', '8'); -INSERT INTO cp_tree VALUES ('732', '4', '4', '160', '731', '5'); -INSERT INTO cp_tree VALUES ('733', '4', '6', '160', '731', '7'); -INSERT INTO cp_tree VALUES ('734', '3', '9', '160', '730', '18'); -INSERT INTO cp_tree VALUES ('735', '4', '10', '160', '734', '15'); -INSERT INTO cp_tree VALUES ('736', '5', '11', '160', '735', '12'); -INSERT INTO cp_tree VALUES ('737', '5', '13', '160', '735', '14'); -INSERT INTO cp_tree VALUES ('738', '4', '16', '160', '734', '17'); -INSERT INTO cp_tree VALUES ('739', '3', '19', '160', '730', '36'); -INSERT INTO cp_tree VALUES ('740', '4', '20', '160', '739', '25'); -INSERT INTO cp_tree VALUES ('741', '5', '21', '160', '740', '22'); -INSERT INTO cp_tree VALUES ('742', '5', '23', '160', '740', '24'); -INSERT INTO cp_tree VALUES ('743', '4', '26', '160', '739', '35'); -INSERT INTO cp_tree VALUES ('744', '5', '27', '160', '743', '32'); -INSERT INTO cp_tree VALUES ('745', '6', '28', '160', '744', '29'); -INSERT INTO cp_tree VALUES ('746', '6', '30', '160', '744', '31'); -INSERT INTO cp_tree VALUES ('747', '5', '33', '160', '743', '34'); -INSERT INTO cp_tree VALUES ('748', '3', '37', '160', '730', '44'); -INSERT INTO cp_tree VALUES ('749', '4', '38', '160', '748', '39'); -INSERT INTO cp_tree VALUES ('750', '4', '40', '160', '748', '41'); -INSERT INTO cp_tree VALUES ('751', '4', '42', '160', '748', '43'); -INSERT INTO cp_tree VALUES ('752', '2', '46', '160', '729', '59'); -INSERT INTO cp_tree VALUES ('753', '3', '47', '160', '752', '48'); -INSERT INTO cp_tree VALUES ('754', '3', '49', '160', '752', '50'); -INSERT INTO cp_tree VALUES ('755', '3', '51', '160', '752', '52'); -INSERT INTO cp_tree VALUES ('756', '3', '53', '160', '752', '54'); -INSERT INTO cp_tree VALUES ('757', '3', '55', '160', '752', '56'); -INSERT INTO cp_tree VALUES ('758', '3', '57', '160', '752', '58'); -INSERT INTO cp_tree VALUES ('759', '2', '60', '160', '729', '73'); -INSERT INTO cp_tree VALUES ('760', '3', '61', '160', '759', '62'); -INSERT INTO cp_tree VALUES ('761', '3', '63', '160', '759', '64'); -INSERT INTO cp_tree VALUES ('762', '3', '65', '160', '759', '66'); -INSERT INTO cp_tree VALUES ('763', '3', '67', '160', '759', '68'); -INSERT INTO cp_tree VALUES ('764', '3', '69', '160', '759', '70'); -INSERT INTO cp_tree VALUES ('765', '3', '71', '160', '759', '72'); -INSERT INTO cp_tree VALUES ('766', '2', '74', '160', '729', '77'); -INSERT INTO cp_tree VALUES ('767', '3', '75', '160', '766', '76'); -INSERT INTO cp_tree VALUES ('768', '2', '78', '160', '729', '81'); -INSERT INTO cp_tree VALUES ('769', '3', '79', '160', '768', '80'); -INSERT INTO cp_tree VALUES ('770', '2', '82', '160', '729', '85'); -INSERT INTO cp_tree VALUES ('771', '3', '83', '160', '770', '84'); -INSERT INTO cp_tree VALUES ('772', '2', '86', '160', '729', '91'); -INSERT INTO cp_tree VALUES ('773', '3', '87', '160', '772', '88'); -INSERT INTO cp_tree VALUES ('774', '3', '89', '160', '772', '90'); -INSERT INTO cp_tree VALUES ('775', '2', '92', '160', '729', '95'); -INSERT INTO cp_tree VALUES ('776', '3', '93', '160', '775', '94'); -INSERT INTO cp_tree VALUES ('777', '2', '96', '160', '729', '99'); -INSERT INTO cp_tree VALUES ('778', '3', '97', '160', '777', '98'); -INSERT INTO cp_tree VALUES ('779', '2', '100', '160', '729', '105'); -INSERT INTO cp_tree VALUES ('780', '3', '101', '160', '779', '104'); -INSERT INTO cp_tree VALUES ('781', '4', '102', '160', '780', '103'); -INSERT INTO cp_tree VALUES ('782', '2', '106', '160', '729', '107'); -INSERT INTO cp_tree VALUES ('783', '2', '108', '160', '729', '109'); -INSERT INTO cp_tree VALUES ('784', '2', '110', '160', '729', '115'); -INSERT INTO cp_tree VALUES ('785', '3', '111', '160', '784', '114'); -INSERT INTO cp_tree VALUES ('786', '4', '112', '160', '785', '113'); -INSERT INTO cp_tree VALUES ('787', '2', '116', '160', '729', '117'); -INSERT INTO cp_tree VALUES ('788', '2', '118', '160', '729', '123'); -INSERT INTO cp_tree VALUES ('789', '3', '119', '160', '788', '122'); -INSERT INTO cp_tree VALUES ('790', '4', '120', '160', '789', '121'); -INSERT INTO cp_tree VALUES ('791', '2', '124', '160', '729', '129'); -INSERT INTO cp_tree VALUES ('792', '3', '125', '160', '791', '128'); -INSERT INTO cp_tree VALUES ('793', '4', '126', '160', '792', '127'); -INSERT INTO cp_tree VALUES ('794', '2', '130', '160', '729', '131'); -INSERT INTO cp_tree VALUES ('795', '2', '132', '160', '729', '133'); -INSERT INTO cp_tree VALUES ('796', '2', '134', '160', '729', '135'); -INSERT INTO cp_tree VALUES ('797', '1', '1', '161', '0', '114'); -INSERT INTO cp_tree VALUES ('798', '2', '2', '161', '797', '39'); -INSERT INTO cp_tree VALUES ('799', '3', '3', '161', '798', '8'); -INSERT INTO cp_tree VALUES ('800', '4', '4', '161', '799', '5'); -INSERT INTO cp_tree VALUES ('801', '4', '6', '161', '799', '7'); -INSERT INTO cp_tree VALUES ('802', '3', '9', '161', '798', '18'); -INSERT INTO cp_tree VALUES ('803', '4', '10', '161', '802', '15'); -INSERT INTO cp_tree VALUES ('804', '5', '11', '161', '803', '12'); -INSERT INTO cp_tree VALUES ('805', '5', '13', '161', '803', '14'); -INSERT INTO cp_tree VALUES ('806', '4', '16', '161', '802', '17'); -INSERT INTO cp_tree VALUES ('807', '3', '19', '161', '798', '32'); -INSERT INTO cp_tree VALUES ('808', '4', '20', '161', '807', '21'); -INSERT INTO cp_tree VALUES ('809', '4', '22', '161', '807', '31'); -INSERT INTO cp_tree VALUES ('810', '5', '23', '161', '809', '28'); -INSERT INTO cp_tree VALUES ('811', '6', '24', '161', '810', '25'); -INSERT INTO cp_tree VALUES ('812', '6', '26', '161', '810', '27'); -INSERT INTO cp_tree VALUES ('813', '5', '29', '161', '809', '30'); -INSERT INTO cp_tree VALUES ('814', '3', '33', '161', '798', '38'); -INSERT INTO cp_tree VALUES ('815', '4', '34', '161', '814', '35'); -INSERT INTO cp_tree VALUES ('816', '4', '36', '161', '814', '37'); -INSERT INTO cp_tree VALUES ('817', '2', '40', '161', '797', '53'); -INSERT INTO cp_tree VALUES ('818', '3', '41', '161', '817', '42'); -INSERT INTO cp_tree VALUES ('819', '3', '43', '161', '817', '44'); -INSERT INTO cp_tree VALUES ('820', '3', '45', '161', '817', '46'); -INSERT INTO cp_tree VALUES ('821', '3', '47', '161', '817', '48'); -INSERT INTO cp_tree VALUES ('822', '3', '49', '161', '817', '50'); -INSERT INTO cp_tree VALUES ('823', '3', '51', '161', '817', '52'); -INSERT INTO cp_tree VALUES ('824', '2', '54', '161', '797', '57'); -INSERT INTO cp_tree VALUES ('825', '3', '55', '161', '824', '56'); -INSERT INTO cp_tree VALUES ('826', '2', '58', '161', '797', '61'); -INSERT INTO cp_tree VALUES ('827', '3', '59', '161', '826', '60'); -INSERT INTO cp_tree VALUES ('828', '2', '62', '161', '797', '65'); -INSERT INTO cp_tree VALUES ('829', '3', '63', '161', '828', '64'); -INSERT INTO cp_tree VALUES ('830', '2', '66', '161', '797', '71'); -INSERT INTO cp_tree VALUES ('831', '3', '67', '161', '830', '68'); -INSERT INTO cp_tree VALUES ('832', '3', '69', '161', '830', '70'); -INSERT INTO cp_tree VALUES ('833', '2', '72', '161', '797', '75'); -INSERT INTO cp_tree VALUES ('834', '3', '73', '161', '833', '74'); -INSERT INTO cp_tree VALUES ('835', '2', '76', '161', '797', '79'); -INSERT INTO cp_tree VALUES ('836', '3', '77', '161', '835', '78'); -INSERT INTO cp_tree VALUES ('837', '2', '80', '161', '797', '81'); -INSERT INTO cp_tree VALUES ('838', '2', '82', '161', '797', '83'); -INSERT INTO cp_tree VALUES ('839', '2', '84', '161', '797', '89'); -INSERT INTO cp_tree VALUES ('840', '3', '85', '161', '839', '88'); -INSERT INTO cp_tree VALUES ('841', '4', '86', '161', '840', '87'); -INSERT INTO cp_tree VALUES ('842', '2', '90', '161', '797', '91'); -INSERT INTO cp_tree VALUES ('843', '2', '92', '161', '797', '97'); -INSERT INTO cp_tree VALUES ('844', '3', '93', '161', '843', '96'); -INSERT INTO cp_tree VALUES ('845', '4', '94', '161', '844', '95'); -INSERT INTO cp_tree VALUES ('846', '2', '98', '161', '797', '99'); -INSERT INTO cp_tree VALUES ('847', '2', '100', '161', '797', '101'); -INSERT INTO cp_tree VALUES ('848', '2', '102', '161', '797', '103'); -INSERT INTO cp_tree VALUES ('849', '2', '104', '161', '797', '109'); -INSERT INTO cp_tree VALUES ('850', '3', '105', '161', '849', '108'); -INSERT INTO cp_tree VALUES ('851', '4', '106', '161', '850', '107'); -INSERT INTO cp_tree VALUES ('852', '2', '110', '161', '797', '111'); -INSERT INTO cp_tree VALUES ('853', '2', '112', '161', '797', '113'); -INSERT INTO cp_tree VALUES ('854', '1', '1', '162', '0', '96'); -INSERT INTO cp_tree VALUES ('855', '2', '2', '162', '854', '39'); -INSERT INTO cp_tree VALUES ('856', '3', '3', '162', '855', '8'); -INSERT INTO cp_tree VALUES ('857', '4', '4', '162', '856', '5'); -INSERT INTO cp_tree VALUES ('858', '4', '6', '162', '856', '7'); -INSERT INTO cp_tree VALUES ('859', '3', '9', '162', '855', '18'); -INSERT INTO cp_tree VALUES ('860', '4', '10', '162', '859', '15'); -INSERT INTO cp_tree VALUES ('861', '5', '11', '162', '860', '12'); -INSERT INTO cp_tree VALUES ('862', '5', '13', '162', '860', '14'); -INSERT INTO cp_tree VALUES ('863', '4', '16', '162', '859', '17'); -INSERT INTO cp_tree VALUES ('864', '3', '19', '162', '855', '32'); -INSERT INTO cp_tree VALUES ('865', '4', '20', '162', '864', '21'); -INSERT INTO cp_tree VALUES ('866', '4', '22', '162', '864', '31'); -INSERT INTO cp_tree VALUES ('867', '5', '23', '162', '866', '28'); -INSERT INTO cp_tree VALUES ('868', '6', '24', '162', '867', '25'); -INSERT INTO cp_tree VALUES ('869', '6', '26', '162', '867', '27'); -INSERT INTO cp_tree VALUES ('870', '5', '29', '162', '866', '30'); -INSERT INTO cp_tree VALUES ('871', '3', '33', '162', '855', '38'); -INSERT INTO cp_tree VALUES ('872', '4', '34', '162', '871', '35'); -INSERT INTO cp_tree VALUES ('873', '4', '36', '162', '871', '37'); -INSERT INTO cp_tree VALUES ('874', '2', '40', '162', '854', '53'); -INSERT INTO cp_tree VALUES ('875', '3', '41', '162', '874', '42'); -INSERT INTO cp_tree VALUES ('876', '3', '43', '162', '874', '44'); -INSERT INTO cp_tree VALUES ('877', '3', '45', '162', '874', '46'); -INSERT INTO cp_tree VALUES ('878', '3', '47', '162', '874', '48'); -INSERT INTO cp_tree VALUES ('879', '3', '49', '162', '874', '50'); -INSERT INTO cp_tree VALUES ('880', '3', '51', '162', '874', '52'); -INSERT INTO cp_tree VALUES ('881', '2', '54', '162', '854', '57'); -INSERT INTO cp_tree VALUES ('882', '3', '55', '162', '881', '56'); -INSERT INTO cp_tree VALUES ('883', '2', '58', '162', '854', '61'); -INSERT INTO cp_tree VALUES ('884', '3', '59', '162', '883', '60'); -INSERT INTO cp_tree VALUES ('885', '2', '62', '162', '854', '65'); -INSERT INTO cp_tree VALUES ('886', '3', '63', '162', '885', '64'); -INSERT INTO cp_tree VALUES ('887', '2', '66', '162', '854', '71'); -INSERT INTO cp_tree VALUES ('888', '3', '67', '162', '887', '68'); -INSERT INTO cp_tree VALUES ('889', '3', '69', '162', '887', '70'); -INSERT INTO cp_tree VALUES ('890', '2', '72', '162', '854', '75'); -INSERT INTO cp_tree VALUES ('891', '3', '73', '162', '890', '74'); -INSERT INTO cp_tree VALUES ('892', '2', '76', '162', '854', '79'); -INSERT INTO cp_tree VALUES ('893', '3', '77', '162', '892', '78'); -INSERT INTO cp_tree VALUES ('894', '2', '80', '162', '854', '81'); -INSERT INTO cp_tree VALUES ('895', '2', '82', '162', '854', '83'); -INSERT INTO cp_tree VALUES ('896', '2', '84', '162', '854', '85'); -INSERT INTO cp_tree VALUES ('897', '2', '86', '162', '854', '87'); -INSERT INTO cp_tree VALUES ('898', '2', '88', '162', '854', '89'); -INSERT INTO cp_tree VALUES ('899', '2', '90', '162', '854', '91'); -INSERT INTO cp_tree VALUES ('900', '2', '92', '162', '854', '93'); -INSERT INTO cp_tree VALUES ('901', '2', '94', '162', '854', '95'); -INSERT INTO cp_tree VALUES ('902', '1', '1', '163', '0', '66'); -INSERT INTO cp_tree VALUES ('903', '2', '2', '163', '902', '15'); -INSERT INTO cp_tree VALUES ('904', '3', '3', '163', '903', '4'); -INSERT INTO cp_tree VALUES ('905', '3', '5', '163', '903', '14'); -INSERT INTO cp_tree VALUES ('906', '4', '6', '163', '905', '7'); -INSERT INTO cp_tree VALUES ('907', '4', '8', '163', '905', '13'); -INSERT INTO cp_tree VALUES ('908', '5', '9', '163', '907', '10'); -INSERT INTO cp_tree VALUES ('909', '5', '11', '163', '907', '12'); -INSERT INTO cp_tree VALUES ('910', '2', '16', '163', '902', '29'); -INSERT INTO cp_tree VALUES ('911', '3', '17', '163', '910', '18'); -INSERT INTO cp_tree VALUES ('912', '3', '19', '163', '910', '20'); -INSERT INTO cp_tree VALUES ('913', '3', '21', '163', '910', '22'); -INSERT INTO cp_tree VALUES ('914', '3', '23', '163', '910', '24'); -INSERT INTO cp_tree VALUES ('915', '3', '25', '163', '910', '26'); -INSERT INTO cp_tree VALUES ('916', '3', '27', '163', '910', '28'); -INSERT INTO cp_tree VALUES ('917', '2', '30', '163', '902', '33'); -INSERT INTO cp_tree VALUES ('918', '3', '31', '163', '917', '32'); -INSERT INTO cp_tree VALUES ('919', '2', '34', '163', '902', '37'); -INSERT INTO cp_tree VALUES ('920', '3', '35', '163', '919', '36'); -INSERT INTO cp_tree VALUES ('921', '2', '38', '163', '902', '41'); -INSERT INTO cp_tree VALUES ('922', '3', '39', '163', '921', '40'); -INSERT INTO cp_tree VALUES ('923', '2', '42', '163', '902', '47'); -INSERT INTO cp_tree VALUES ('924', '3', '43', '163', '923', '44'); -INSERT INTO cp_tree VALUES ('925', '3', '45', '163', '923', '46'); -INSERT INTO cp_tree VALUES ('926', '2', '48', '163', '902', '51'); -INSERT INTO cp_tree VALUES ('927', '3', '49', '163', '926', '50'); -INSERT INTO cp_tree VALUES ('928', '2', '52', '163', '902', '55'); -INSERT INTO cp_tree VALUES ('929', '3', '53', '163', '928', '54'); -INSERT INTO cp_tree VALUES ('930', '2', '56', '163', '902', '61'); -INSERT INTO cp_tree VALUES ('931', '3', '57', '163', '930', '60'); -INSERT INTO cp_tree VALUES ('932', '4', '58', '163', '931', '59'); -INSERT INTO cp_tree VALUES ('933', '2', '62', '163', '902', '63'); -INSERT INTO cp_tree VALUES ('934', '2', '64', '163', '902', '65'); -INSERT INTO cp_tree VALUES ('935', '1', '1', '164', '0', '60'); -INSERT INTO cp_tree VALUES ('936', '2', '2', '164', '935', '11'); -INSERT INTO cp_tree VALUES ('937', '3', '3', '164', '936', '4'); -INSERT INTO cp_tree VALUES ('938', '3', '5', '164', '936', '6'); -INSERT INTO cp_tree VALUES ('939', '3', '7', '164', '936', '8'); -INSERT INTO cp_tree VALUES ('940', '3', '9', '164', '936', '10'); -INSERT INTO cp_tree VALUES ('941', '2', '12', '164', '935', '25'); -INSERT INTO cp_tree VALUES ('942', '3', '13', '164', '941', '14'); -INSERT INTO cp_tree VALUES ('943', '3', '15', '164', '941', '16'); -INSERT INTO cp_tree VALUES ('944', '3', '17', '164', '941', '18'); -INSERT INTO cp_tree VALUES ('945', '3', '19', '164', '941', '20'); -INSERT INTO cp_tree VALUES ('946', '3', '21', '164', '941', '22'); -INSERT INTO cp_tree VALUES ('947', '3', '23', '164', '941', '24'); -INSERT INTO cp_tree VALUES ('948', '2', '26', '164', '935', '29'); -INSERT INTO cp_tree VALUES ('949', '3', '27', '164', '948', '28'); -INSERT INTO cp_tree VALUES ('950', '2', '30', '164', '935', '33'); -INSERT INTO cp_tree VALUES ('951', '3', '31', '164', '950', '32'); -INSERT INTO cp_tree VALUES ('952', '2', '34', '164', '935', '37'); -INSERT INTO cp_tree VALUES ('953', '3', '35', '164', '952', '36'); -INSERT INTO cp_tree VALUES ('954', '2', '38', '164', '935', '43'); -INSERT INTO cp_tree VALUES ('955', '3', '39', '164', '954', '40'); -INSERT INTO cp_tree VALUES ('956', '3', '41', '164', '954', '42'); -INSERT INTO cp_tree VALUES ('957', '2', '44', '164', '935', '47'); -INSERT INTO cp_tree VALUES ('958', '3', '45', '164', '957', '46'); -INSERT INTO cp_tree VALUES ('959', '2', '48', '164', '935', '51'); -INSERT INTO cp_tree VALUES ('960', '3', '49', '164', '959', '50'); -INSERT INTO cp_tree VALUES ('961', '2', '52', '164', '935', '57'); -INSERT INTO cp_tree VALUES ('962', '3', '53', '164', '961', '56'); -INSERT INTO cp_tree VALUES ('963', '4', '54', '164', '962', '55'); -INSERT INTO cp_tree VALUES ('964', '2', '58', '164', '935', '59'); -INSERT INTO cp_tree VALUES ('965', '1', '1', '165', '0', '58'); -INSERT INTO cp_tree VALUES ('966', '2', '2', '165', '965', '7'); -INSERT INTO cp_tree VALUES ('967', '3', '3', '165', '966', '4'); -INSERT INTO cp_tree VALUES ('968', '3', '5', '165', '966', '6'); -INSERT INTO cp_tree VALUES ('969', '2', '8', '165', '965', '21'); -INSERT INTO cp_tree VALUES ('970', '3', '9', '165', '969', '10'); -INSERT INTO cp_tree VALUES ('971', '3', '11', '165', '969', '12'); -INSERT INTO cp_tree VALUES ('972', '3', '13', '165', '969', '14'); -INSERT INTO cp_tree VALUES ('973', '3', '15', '165', '969', '16'); -INSERT INTO cp_tree VALUES ('974', '3', '17', '165', '969', '18'); -INSERT INTO cp_tree VALUES ('975', '3', '19', '165', '969', '20'); -INSERT INTO cp_tree VALUES ('976', '2', '22', '165', '965', '25'); -INSERT INTO cp_tree VALUES ('977', '3', '23', '165', '976', '24'); -INSERT INTO cp_tree VALUES ('978', '2', '26', '165', '965', '29'); -INSERT INTO cp_tree VALUES ('979', '3', '27', '165', '978', '28'); -INSERT INTO cp_tree VALUES ('980', '2', '30', '165', '965', '33'); -INSERT INTO cp_tree VALUES ('981', '3', '31', '165', '980', '32'); -INSERT INTO cp_tree VALUES ('982', '2', '34', '165', '965', '39'); -INSERT INTO cp_tree VALUES ('983', '3', '35', '165', '982', '36'); -INSERT INTO cp_tree VALUES ('984', '3', '37', '165', '982', '38'); -INSERT INTO cp_tree VALUES ('985', '2', '40', '165', '965', '43'); -INSERT INTO cp_tree VALUES ('986', '3', '41', '165', '985', '42'); -INSERT INTO cp_tree VALUES ('987', '2', '44', '165', '965', '47'); -INSERT INTO cp_tree VALUES ('988', '3', '45', '165', '987', '46'); -INSERT INTO cp_tree VALUES ('989', '2', '48', '165', '965', '53'); -INSERT INTO cp_tree VALUES ('990', '3', '49', '165', '989', '52'); -INSERT INTO cp_tree VALUES ('991', '4', '50', '165', '990', '51'); -INSERT INTO cp_tree VALUES ('992', '2', '54', '165', '965', '55'); -INSERT INTO cp_tree VALUES ('993', '2', '56', '165', '965', '57'); -INSERT INTO cp_tree VALUES ('994', '1', '1', '166', '0', '216'); -INSERT INTO cp_tree VALUES ('995', '2', '2', '166', '994', '39'); -INSERT INTO cp_tree VALUES ('996', '3', '3', '166', '995', '6'); -INSERT INTO cp_tree VALUES ('997', '4', '4', '166', '996', '5'); -INSERT INTO cp_tree VALUES ('998', '3', '7', '166', '995', '10'); -INSERT INTO cp_tree VALUES ('999', '4', '8', '166', '998', '9'); -INSERT INTO cp_tree VALUES ('1000', '3', '11', '166', '995', '14'); -INSERT INTO cp_tree VALUES ('1001', '4', '12', '166', '1000', '13'); -INSERT INTO cp_tree VALUES ('1002', '3', '15', '166', '995', '18'); -INSERT INTO cp_tree VALUES ('1003', '4', '16', '166', '1002', '17'); -INSERT INTO cp_tree VALUES ('1004', '3', '19', '166', '995', '22'); -INSERT INTO cp_tree VALUES ('1005', '4', '20', '166', '1004', '21'); -INSERT INTO cp_tree VALUES ('1006', '3', '23', '166', '995', '26'); -INSERT INTO cp_tree VALUES ('1007', '4', '24', '166', '1006', '25'); -INSERT INTO cp_tree VALUES ('1008', '3', '27', '166', '995', '30'); -INSERT INTO cp_tree VALUES ('1009', '4', '28', '166', '1008', '29'); -INSERT INTO cp_tree VALUES ('1010', '3', '31', '166', '995', '34'); -INSERT INTO cp_tree VALUES ('1011', '4', '32', '166', '1010', '33'); -INSERT INTO cp_tree VALUES ('1012', '3', '35', '166', '995', '38'); -INSERT INTO cp_tree VALUES ('1013', '4', '36', '166', '1012', '37'); -INSERT INTO cp_tree VALUES ('1014', '2', '40', '166', '994', '53'); -INSERT INTO cp_tree VALUES ('1015', '3', '41', '166', '1014', '42'); -INSERT INTO cp_tree VALUES ('1016', '3', '43', '166', '1014', '44'); -INSERT INTO cp_tree VALUES ('1017', '3', '45', '166', '1014', '46'); -INSERT INTO cp_tree VALUES ('1018', '3', '47', '166', '1014', '48'); -INSERT INTO cp_tree VALUES ('1019', '3', '49', '166', '1014', '50'); -INSERT INTO cp_tree VALUES ('1020', '3', '51', '166', '1014', '52'); -INSERT INTO cp_tree VALUES ('1021', '2', '54', '166', '994', '67'); -INSERT INTO cp_tree VALUES ('1022', '3', '55', '166', '1021', '56'); -INSERT INTO cp_tree VALUES ('1023', '3', '57', '166', '1021', '58'); -INSERT INTO cp_tree VALUES ('1024', '3', '59', '166', '1021', '60'); -INSERT INTO cp_tree VALUES ('1025', '3', '61', '166', '1021', '62'); -INSERT INTO cp_tree VALUES ('1026', '3', '63', '166', '1021', '64'); -INSERT INTO cp_tree VALUES ('1027', '3', '65', '166', '1021', '66'); -INSERT INTO cp_tree VALUES ('1028', '2', '68', '166', '994', '81'); -INSERT INTO cp_tree VALUES ('1029', '3', '69', '166', '1028', '70'); -INSERT INTO cp_tree VALUES ('1030', '3', '71', '166', '1028', '72'); -INSERT INTO cp_tree VALUES ('1031', '3', '73', '166', '1028', '74'); -INSERT INTO cp_tree VALUES ('1032', '3', '75', '166', '1028', '76'); -INSERT INTO cp_tree VALUES ('1033', '3', '77', '166', '1028', '78'); -INSERT INTO cp_tree VALUES ('1034', '3', '79', '166', '1028', '80'); -INSERT INTO cp_tree VALUES ('1035', '2', '82', '166', '994', '95'); -INSERT INTO cp_tree VALUES ('1036', '3', '83', '166', '1035', '84'); -INSERT INTO cp_tree VALUES ('1037', '3', '85', '166', '1035', '86'); -INSERT INTO cp_tree VALUES ('1038', '3', '87', '166', '1035', '88'); -INSERT INTO cp_tree VALUES ('1039', '3', '89', '166', '1035', '90'); -INSERT INTO cp_tree VALUES ('1040', '3', '91', '166', '1035', '92'); -INSERT INTO cp_tree VALUES ('1041', '3', '93', '166', '1035', '94'); -INSERT INTO cp_tree VALUES ('1042', '2', '96', '166', '994', '109'); -INSERT INTO cp_tree VALUES ('1043', '3', '97', '166', '1042', '98'); -INSERT INTO cp_tree VALUES ('1044', '3', '99', '166', '1042', '100'); -INSERT INTO cp_tree VALUES ('1045', '3', '101', '166', '1042', '102'); -INSERT INTO cp_tree VALUES ('1046', '3', '103', '166', '1042', '104'); -INSERT INTO cp_tree VALUES ('1047', '3', '105', '166', '1042', '106'); -INSERT INTO cp_tree VALUES ('1048', '3', '107', '166', '1042', '108'); -INSERT INTO cp_tree VALUES ('1049', '2', '110', '166', '994', '123'); -INSERT INTO cp_tree VALUES ('1050', '3', '111', '166', '1049', '112'); -INSERT INTO cp_tree VALUES ('1051', '3', '113', '166', '1049', '114'); -INSERT INTO cp_tree VALUES ('1052', '3', '115', '166', '1049', '116'); -INSERT INTO cp_tree VALUES ('1053', '3', '117', '166', '1049', '118'); -INSERT INTO cp_tree VALUES ('1054', '3', '119', '166', '1049', '120'); -INSERT INTO cp_tree VALUES ('1055', '3', '121', '166', '1049', '122'); -INSERT INTO cp_tree VALUES ('1056', '2', '124', '166', '994', '137'); -INSERT INTO cp_tree VALUES ('1057', '3', '125', '166', '1056', '126'); -INSERT INTO cp_tree VALUES ('1058', '3', '127', '166', '1056', '128'); -INSERT INTO cp_tree VALUES ('1059', '3', '129', '166', '1056', '130'); -INSERT INTO cp_tree VALUES ('1060', '3', '131', '166', '1056', '132'); -INSERT INTO cp_tree VALUES ('1061', '3', '133', '166', '1056', '134'); -INSERT INTO cp_tree VALUES ('1062', '3', '135', '166', '1056', '136'); -INSERT INTO cp_tree VALUES ('1063', '2', '138', '166', '994', '151'); -INSERT INTO cp_tree VALUES ('1064', '3', '139', '166', '1063', '140'); -INSERT INTO cp_tree VALUES ('1065', '3', '141', '166', '1063', '142'); -INSERT INTO cp_tree VALUES ('1066', '3', '143', '166', '1063', '144'); -INSERT INTO cp_tree VALUES ('1067', '3', '145', '166', '1063', '146'); -INSERT INTO cp_tree VALUES ('1068', '3', '147', '166', '1063', '148'); -INSERT INTO cp_tree VALUES ('1069', '3', '149', '166', '1063', '150'); -INSERT INTO cp_tree VALUES ('1070', '2', '152', '166', '994', '165'); -INSERT INTO cp_tree VALUES ('1071', '3', '153', '166', '1070', '154'); -INSERT INTO cp_tree VALUES ('1072', '3', '155', '166', '1070', '156'); -INSERT INTO cp_tree VALUES ('1073', '3', '157', '166', '1070', '158'); -INSERT INTO cp_tree VALUES ('1074', '3', '159', '166', '1070', '160'); -INSERT INTO cp_tree VALUES ('1075', '3', '161', '166', '1070', '162'); -INSERT INTO cp_tree VALUES ('1076', '3', '163', '166', '1070', '164'); -INSERT INTO cp_tree VALUES ('1077', '2', '166', '166', '994', '169'); -INSERT INTO cp_tree VALUES ('1078', '3', '167', '166', '1077', '168'); -INSERT INTO cp_tree VALUES ('1079', '2', '170', '166', '994', '173'); -INSERT INTO cp_tree VALUES ('1080', '3', '171', '166', '1079', '172'); -INSERT INTO cp_tree VALUES ('1081', '2', '174', '166', '994', '177'); -INSERT INTO cp_tree VALUES ('1082', '3', '175', '166', '1081', '176'); -INSERT INTO cp_tree VALUES ('1083', '2', '178', '166', '994', '183'); -INSERT INTO cp_tree VALUES ('1084', '3', '179', '166', '1083', '180'); -INSERT INTO cp_tree VALUES ('1085', '3', '181', '166', '1083', '182'); -INSERT INTO cp_tree VALUES ('1086', '2', '184', '166', '994', '187'); -INSERT INTO cp_tree VALUES ('1087', '3', '185', '166', '1086', '186'); -INSERT INTO cp_tree VALUES ('1088', '2', '188', '166', '994', '191'); -INSERT INTO cp_tree VALUES ('1089', '3', '189', '166', '1088', '190'); -INSERT INTO cp_tree VALUES ('1090', '2', '192', '166', '994', '195'); -INSERT INTO cp_tree VALUES ('1091', '3', '193', '166', '1090', '194'); -INSERT INTO cp_tree VALUES ('1092', '2', '196', '166', '994', '199'); -INSERT INTO cp_tree VALUES ('1093', '3', '197', '166', '1092', '198'); -INSERT INTO cp_tree VALUES ('1094', '2', '200', '166', '994', '203'); -INSERT INTO cp_tree VALUES ('1095', '3', '201', '166', '1094', '202'); -INSERT INTO cp_tree VALUES ('1096', '2', '204', '166', '994', '207'); -INSERT INTO cp_tree VALUES ('1097', '3', '205', '166', '1096', '206'); -INSERT INTO cp_tree VALUES ('1098', '2', '208', '166', '994', '211'); -INSERT INTO cp_tree VALUES ('1099', '3', '209', '166', '1098', '210'); -INSERT INTO cp_tree VALUES ('1100', '2', '212', '166', '994', '215'); -INSERT INTO cp_tree VALUES ('1101', '3', '213', '166', '1100', '214'); -INSERT INTO cp_tree VALUES ('1102', '1', '1', '167', '0', '102'); -INSERT INTO cp_tree VALUES ('1103', '2', '2', '167', '1102', '19'); -INSERT INTO cp_tree VALUES ('1104', '3', '3', '167', '1103', '6'); -INSERT INTO cp_tree VALUES ('1105', '4', '4', '167', '1104', '5'); -INSERT INTO cp_tree VALUES ('1106', '3', '7', '167', '1103', '10'); -INSERT INTO cp_tree VALUES ('1107', '4', '8', '167', '1106', '9'); -INSERT INTO cp_tree VALUES ('1108', '3', '11', '167', '1103', '14'); -INSERT INTO cp_tree VALUES ('1109', '4', '12', '167', '1108', '13'); -INSERT INTO cp_tree VALUES ('1110', '3', '15', '167', '1103', '18'); -INSERT INTO cp_tree VALUES ('1111', '4', '16', '167', '1110', '17'); -INSERT INTO cp_tree VALUES ('1112', '2', '20', '167', '1102', '33'); -INSERT INTO cp_tree VALUES ('1113', '3', '21', '167', '1112', '22'); -INSERT INTO cp_tree VALUES ('1114', '3', '23', '167', '1112', '24'); -INSERT INTO cp_tree VALUES ('1115', '3', '25', '167', '1112', '26'); -INSERT INTO cp_tree VALUES ('1116', '3', '27', '167', '1112', '28'); -INSERT INTO cp_tree VALUES ('1117', '3', '29', '167', '1112', '30'); -INSERT INTO cp_tree VALUES ('1118', '3', '31', '167', '1112', '32'); -INSERT INTO cp_tree VALUES ('1119', '2', '34', '167', '1102', '47'); -INSERT INTO cp_tree VALUES ('1120', '3', '35', '167', '1119', '36'); -INSERT INTO cp_tree VALUES ('1121', '3', '37', '167', '1119', '38'); -INSERT INTO cp_tree VALUES ('1122', '3', '39', '167', '1119', '40'); -INSERT INTO cp_tree VALUES ('1123', '3', '41', '167', '1119', '42'); -INSERT INTO cp_tree VALUES ('1124', '3', '43', '167', '1119', '44'); -INSERT INTO cp_tree VALUES ('1125', '3', '45', '167', '1119', '46'); -INSERT INTO cp_tree VALUES ('1126', '2', '48', '167', '1102', '61'); -INSERT INTO cp_tree VALUES ('1127', '3', '49', '167', '1126', '50'); -INSERT INTO cp_tree VALUES ('1128', '3', '51', '167', '1126', '52'); -INSERT INTO cp_tree VALUES ('1129', '3', '53', '167', '1126', '54'); -INSERT INTO cp_tree VALUES ('1130', '3', '55', '167', '1126', '56'); -INSERT INTO cp_tree VALUES ('1131', '3', '57', '167', '1126', '58'); -INSERT INTO cp_tree VALUES ('1132', '3', '59', '167', '1126', '60'); -INSERT INTO cp_tree VALUES ('1133', '2', '62', '167', '1102', '75'); -INSERT INTO cp_tree VALUES ('1134', '3', '63', '167', '1133', '64'); -INSERT INTO cp_tree VALUES ('1135', '3', '65', '167', '1133', '66'); -INSERT INTO cp_tree VALUES ('1136', '3', '67', '167', '1133', '68'); -INSERT INTO cp_tree VALUES ('1137', '3', '69', '167', '1133', '70'); -INSERT INTO cp_tree VALUES ('1138', '3', '71', '167', '1133', '72'); -INSERT INTO cp_tree VALUES ('1139', '3', '73', '167', '1133', '74'); -INSERT INTO cp_tree VALUES ('1140', '2', '76', '167', '1102', '79'); -INSERT INTO cp_tree VALUES ('1141', '3', '77', '167', '1140', '78'); -INSERT INTO cp_tree VALUES ('1142', '2', '80', '167', '1102', '83'); -INSERT INTO cp_tree VALUES ('1143', '3', '81', '167', '1142', '82'); -INSERT INTO cp_tree VALUES ('1144', '2', '84', '167', '1102', '87'); -INSERT INTO cp_tree VALUES ('1145', '3', '85', '167', '1144', '86'); -INSERT INTO cp_tree VALUES ('1146', '2', '88', '167', '1102', '93'); -INSERT INTO cp_tree VALUES ('1147', '3', '89', '167', '1146', '90'); -INSERT INTO cp_tree VALUES ('1148', '3', '91', '167', '1146', '92'); -INSERT INTO cp_tree VALUES ('1149', '2', '94', '167', '1102', '97'); -INSERT INTO cp_tree VALUES ('1150', '3', '95', '167', '1149', '96'); -INSERT INTO cp_tree VALUES ('1151', '2', '98', '167', '1102', '101'); -INSERT INTO cp_tree VALUES ('1152', '3', '99', '167', '1151', '100'); -INSERT INTO cp_tree VALUES ('1153', '1', '1', '168', '0', '96'); -INSERT INTO cp_tree VALUES ('1154', '2', '2', '168', '1153', '45'); -INSERT INTO cp_tree VALUES ('1155', '3', '3', '168', '1154', '10'); -INSERT INTO cp_tree VALUES ('1156', '4', '4', '168', '1155', '5'); -INSERT INTO cp_tree VALUES ('1157', '4', '6', '168', '1155', '7'); -INSERT INTO cp_tree VALUES ('1158', '4', '8', '168', '1155', '9'); -INSERT INTO cp_tree VALUES ('1159', '3', '11', '168', '1154', '36'); -INSERT INTO cp_tree VALUES ('1160', '4', '12', '168', '1159', '19'); -INSERT INTO cp_tree VALUES ('1161', '5', '13', '168', '1160', '14'); -INSERT INTO cp_tree VALUES ('1162', '5', '15', '168', '1160', '16'); -INSERT INTO cp_tree VALUES ('1163', '5', '17', '168', '1160', '18'); -INSERT INTO cp_tree VALUES ('1164', '4', '20', '168', '1159', '27'); -INSERT INTO cp_tree VALUES ('1165', '5', '21', '168', '1164', '22'); -INSERT INTO cp_tree VALUES ('1166', '5', '23', '168', '1164', '24'); -INSERT INTO cp_tree VALUES ('1167', '5', '25', '168', '1164', '26'); -INSERT INTO cp_tree VALUES ('1168', '4', '28', '168', '1159', '35'); -INSERT INTO cp_tree VALUES ('1169', '5', '29', '168', '1168', '30'); -INSERT INTO cp_tree VALUES ('1170', '5', '31', '168', '1168', '32'); -INSERT INTO cp_tree VALUES ('1171', '5', '33', '168', '1168', '34'); -INSERT INTO cp_tree VALUES ('1172', '3', '37', '168', '1154', '44'); -INSERT INTO cp_tree VALUES ('1173', '4', '38', '168', '1172', '39'); -INSERT INTO cp_tree VALUES ('1174', '4', '40', '168', '1172', '41'); -INSERT INTO cp_tree VALUES ('1175', '4', '42', '168', '1172', '43'); -INSERT INTO cp_tree VALUES ('1176', '2', '46', '168', '1153', '59'); -INSERT INTO cp_tree VALUES ('1177', '3', '47', '168', '1176', '48'); -INSERT INTO cp_tree VALUES ('1178', '3', '49', '168', '1176', '50'); -INSERT INTO cp_tree VALUES ('1179', '3', '51', '168', '1176', '52'); -INSERT INTO cp_tree VALUES ('1180', '3', '53', '168', '1176', '54'); -INSERT INTO cp_tree VALUES ('1181', '3', '55', '168', '1176', '56'); -INSERT INTO cp_tree VALUES ('1182', '3', '57', '168', '1176', '58'); -INSERT INTO cp_tree VALUES ('1183', '2', '60', '168', '1153', '63'); -INSERT INTO cp_tree VALUES ('1184', '3', '61', '168', '1183', '62'); -INSERT INTO cp_tree VALUES ('1185', '2', '64', '168', '1153', '67'); -INSERT INTO cp_tree VALUES ('1186', '3', '65', '168', '1185', '66'); -INSERT INTO cp_tree VALUES ('1187', '2', '68', '168', '1153', '71'); -INSERT INTO cp_tree VALUES ('1188', '3', '69', '168', '1187', '70'); -INSERT INTO cp_tree VALUES ('1189', '2', '72', '168', '1153', '77'); -INSERT INTO cp_tree VALUES ('1190', '3', '73', '168', '1189', '74'); -INSERT INTO cp_tree VALUES ('1191', '3', '75', '168', '1189', '76'); -INSERT INTO cp_tree VALUES ('1192', '2', '78', '168', '1153', '81'); -INSERT INTO cp_tree VALUES ('1193', '3', '79', '168', '1192', '80'); -INSERT INTO cp_tree VALUES ('1194', '2', '82', '168', '1153', '85'); -INSERT INTO cp_tree VALUES ('1195', '3', '83', '168', '1194', '84'); -INSERT INTO cp_tree VALUES ('1196', '2', '86', '168', '1153', '87'); -INSERT INTO cp_tree VALUES ('1197', '2', '88', '168', '1153', '93'); -INSERT INTO cp_tree VALUES ('1198', '3', '89', '168', '1197', '92'); -INSERT INTO cp_tree VALUES ('1199', '4', '90', '168', '1198', '91'); -INSERT INTO cp_tree VALUES ('1200', '2', '94', '168', '1153', '95'); -INSERT INTO cp_tree VALUES ('1201', '1', '1', '169', '0', '100'); -INSERT INTO cp_tree VALUES ('1202', '2', '2', '169', '1201', '45'); -INSERT INTO cp_tree VALUES ('1203', '3', '3', '169', '1202', '10'); -INSERT INTO cp_tree VALUES ('1204', '4', '4', '169', '1203', '5'); -INSERT INTO cp_tree VALUES ('1205', '4', '6', '169', '1203', '7'); -INSERT INTO cp_tree VALUES ('1206', '4', '8', '169', '1203', '9'); -INSERT INTO cp_tree VALUES ('1207', '3', '11', '169', '1202', '36'); -INSERT INTO cp_tree VALUES ('1208', '4', '12', '169', '1207', '19'); -INSERT INTO cp_tree VALUES ('1209', '5', '13', '169', '1208', '14'); -INSERT INTO cp_tree VALUES ('1210', '5', '15', '169', '1208', '16'); -INSERT INTO cp_tree VALUES ('1211', '5', '17', '169', '1208', '18'); -INSERT INTO cp_tree VALUES ('1212', '4', '20', '169', '1207', '27'); -INSERT INTO cp_tree VALUES ('1213', '5', '21', '169', '1212', '22'); -INSERT INTO cp_tree VALUES ('1214', '5', '23', '169', '1212', '24'); -INSERT INTO cp_tree VALUES ('1215', '5', '25', '169', '1212', '26'); -INSERT INTO cp_tree VALUES ('1216', '4', '28', '169', '1207', '35'); -INSERT INTO cp_tree VALUES ('1217', '5', '29', '169', '1216', '30'); -INSERT INTO cp_tree VALUES ('1218', '5', '31', '169', '1216', '32'); -INSERT INTO cp_tree VALUES ('1219', '5', '33', '169', '1216', '34'); -INSERT INTO cp_tree VALUES ('1220', '3', '37', '169', '1202', '44'); -INSERT INTO cp_tree VALUES ('1221', '4', '38', '169', '1220', '39'); -INSERT INTO cp_tree VALUES ('1222', '4', '40', '169', '1220', '41'); -INSERT INTO cp_tree VALUES ('1223', '4', '42', '169', '1220', '43'); -INSERT INTO cp_tree VALUES ('1224', '2', '46', '169', '1201', '59'); -INSERT INTO cp_tree VALUES ('1225', '3', '47', '169', '1224', '48'); -INSERT INTO cp_tree VALUES ('1226', '3', '49', '169', '1224', '50'); -INSERT INTO cp_tree VALUES ('1227', '3', '51', '169', '1224', '52'); -INSERT INTO cp_tree VALUES ('1228', '3', '53', '169', '1224', '54'); -INSERT INTO cp_tree VALUES ('1229', '3', '55', '169', '1224', '56'); -INSERT INTO cp_tree VALUES ('1230', '3', '57', '169', '1224', '58'); -INSERT INTO cp_tree VALUES ('1231', '2', '60', '169', '1201', '63'); -INSERT INTO cp_tree VALUES ('1232', '3', '61', '169', '1231', '62'); -INSERT INTO cp_tree VALUES ('1233', '2', '64', '169', '1201', '67'); -INSERT INTO cp_tree VALUES ('1234', '3', '65', '169', '1233', '66'); -INSERT INTO cp_tree VALUES ('1235', '2', '68', '169', '1201', '71'); -INSERT INTO cp_tree VALUES ('1236', '3', '69', '169', '1235', '70'); -INSERT INTO cp_tree VALUES ('1237', '2', '72', '169', '1201', '77'); -INSERT INTO cp_tree VALUES ('1238', '3', '73', '169', '1237', '74'); -INSERT INTO cp_tree VALUES ('1239', '3', '75', '169', '1237', '76'); -INSERT INTO cp_tree VALUES ('1240', '2', '78', '169', '1201', '81'); -INSERT INTO cp_tree VALUES ('1241', '3', '79', '169', '1240', '80'); -INSERT INTO cp_tree VALUES ('1242', '2', '82', '169', '1201', '85'); -INSERT INTO cp_tree VALUES ('1243', '3', '83', '169', '1242', '84'); -INSERT INTO cp_tree VALUES ('1244', '2', '86', '169', '1201', '87'); -INSERT INTO cp_tree VALUES ('1245', '2', '88', '169', '1201', '89'); -INSERT INTO cp_tree VALUES ('1246', '2', '90', '169', '1201', '91'); -INSERT INTO cp_tree VALUES ('1247', '2', '92', '169', '1201', '97'); -INSERT INTO cp_tree VALUES ('1248', '3', '93', '169', '1247', '96'); -INSERT INTO cp_tree VALUES ('1249', '4', '94', '169', '1248', '95'); -INSERT INTO cp_tree VALUES ('1250', '2', '98', '169', '1201', '99'); -INSERT INTO cp_tree VALUES ('1251', '1', '1', '170', '0', '100'); -INSERT INTO cp_tree VALUES ('1252', '2', '2', '170', '1251', '45'); -INSERT INTO cp_tree VALUES ('1253', '3', '3', '170', '1252', '10'); -INSERT INTO cp_tree VALUES ('1254', '4', '4', '170', '1253', '5'); -INSERT INTO cp_tree VALUES ('1255', '4', '6', '170', '1253', '7'); -INSERT INTO cp_tree VALUES ('1256', '4', '8', '170', '1253', '9'); -INSERT INTO cp_tree VALUES ('1257', '3', '11', '170', '1252', '36'); -INSERT INTO cp_tree VALUES ('1258', '4', '12', '170', '1257', '19'); -INSERT INTO cp_tree VALUES ('1259', '5', '13', '170', '1258', '14'); -INSERT INTO cp_tree VALUES ('1260', '5', '15', '170', '1258', '16'); -INSERT INTO cp_tree VALUES ('1261', '5', '17', '170', '1258', '18'); -INSERT INTO cp_tree VALUES ('1262', '4', '20', '170', '1257', '27'); -INSERT INTO cp_tree VALUES ('1263', '5', '21', '170', '1262', '22'); -INSERT INTO cp_tree VALUES ('1264', '5', '23', '170', '1262', '24'); -INSERT INTO cp_tree VALUES ('1265', '5', '25', '170', '1262', '26'); -INSERT INTO cp_tree VALUES ('1266', '4', '28', '170', '1257', '35'); -INSERT INTO cp_tree VALUES ('1267', '5', '29', '170', '1266', '30'); -INSERT INTO cp_tree VALUES ('1268', '5', '31', '170', '1266', '32'); -INSERT INTO cp_tree VALUES ('1269', '5', '33', '170', '1266', '34'); -INSERT INTO cp_tree VALUES ('1270', '3', '37', '170', '1252', '44'); -INSERT INTO cp_tree VALUES ('1271', '4', '38', '170', '1270', '39'); -INSERT INTO cp_tree VALUES ('1272', '4', '40', '170', '1270', '41'); -INSERT INTO cp_tree VALUES ('1273', '4', '42', '170', '1270', '43'); -INSERT INTO cp_tree VALUES ('1274', '2', '46', '170', '1251', '59'); -INSERT INTO cp_tree VALUES ('1275', '3', '47', '170', '1274', '48'); -INSERT INTO cp_tree VALUES ('1276', '3', '49', '170', '1274', '50'); -INSERT INTO cp_tree VALUES ('1277', '3', '51', '170', '1274', '52'); -INSERT INTO cp_tree VALUES ('1278', '3', '53', '170', '1274', '54'); -INSERT INTO cp_tree VALUES ('1279', '3', '55', '170', '1274', '56'); -INSERT INTO cp_tree VALUES ('1280', '3', '57', '170', '1274', '58'); -INSERT INTO cp_tree VALUES ('1281', '2', '60', '170', '1251', '63'); -INSERT INTO cp_tree VALUES ('1282', '3', '61', '170', '1281', '62'); -INSERT INTO cp_tree VALUES ('1283', '2', '64', '170', '1251', '67'); -INSERT INTO cp_tree VALUES ('1284', '3', '65', '170', '1283', '66'); -INSERT INTO cp_tree VALUES ('1285', '2', '68', '170', '1251', '71'); -INSERT INTO cp_tree VALUES ('1286', '3', '69', '170', '1285', '70'); -INSERT INTO cp_tree VALUES ('1287', '2', '72', '170', '1251', '77'); -INSERT INTO cp_tree VALUES ('1288', '3', '73', '170', '1287', '74'); -INSERT INTO cp_tree VALUES ('1289', '3', '75', '170', '1287', '76'); -INSERT INTO cp_tree VALUES ('1290', '2', '78', '170', '1251', '81'); -INSERT INTO cp_tree VALUES ('1291', '3', '79', '170', '1290', '80'); -INSERT INTO cp_tree VALUES ('1292', '2', '82', '170', '1251', '85'); -INSERT INTO cp_tree VALUES ('1293', '3', '83', '170', '1292', '84'); -INSERT INTO cp_tree VALUES ('1294', '2', '86', '170', '1251', '87'); -INSERT INTO cp_tree VALUES ('1295', '2', '88', '170', '1251', '89'); -INSERT INTO cp_tree VALUES ('1296', '2', '90', '170', '1251', '91'); -INSERT INTO cp_tree VALUES ('1297', '2', '92', '170', '1251', '97'); -INSERT INTO cp_tree VALUES ('1298', '3', '93', '170', '1297', '96'); -INSERT INTO cp_tree VALUES ('1299', '4', '94', '170', '1298', '95'); -INSERT INTO cp_tree VALUES ('1300', '2', '98', '170', '1251', '99'); -INSERT INTO cp_tree VALUES ('1301', '1', '1', '171', '0', '68'); -INSERT INTO cp_tree VALUES ('1302', '2', '2', '171', '1301', '15'); -INSERT INTO cp_tree VALUES ('1303', '3', '3', '171', '1302', '4'); -INSERT INTO cp_tree VALUES ('1304', '3', '5', '171', '1302', '12'); -INSERT INTO cp_tree VALUES ('1305', '4', '6', '171', '1304', '7'); -INSERT INTO cp_tree VALUES ('1306', '4', '8', '171', '1304', '9'); -INSERT INTO cp_tree VALUES ('1307', '4', '10', '171', '1304', '11'); -INSERT INTO cp_tree VALUES ('1308', '3', '13', '171', '1302', '14'); -INSERT INTO cp_tree VALUES ('1309', '2', '16', '171', '1301', '29'); -INSERT INTO cp_tree VALUES ('1310', '3', '17', '171', '1309', '18'); -INSERT INTO cp_tree VALUES ('1311', '3', '19', '171', '1309', '20'); -INSERT INTO cp_tree VALUES ('1312', '3', '21', '171', '1309', '22'); -INSERT INTO cp_tree VALUES ('1313', '3', '23', '171', '1309', '24'); -INSERT INTO cp_tree VALUES ('1314', '3', '25', '171', '1309', '26'); -INSERT INTO cp_tree VALUES ('1315', '3', '27', '171', '1309', '28'); -INSERT INTO cp_tree VALUES ('1316', '2', '30', '171', '1301', '33'); -INSERT INTO cp_tree VALUES ('1317', '3', '31', '171', '1316', '32'); -INSERT INTO cp_tree VALUES ('1318', '2', '34', '171', '1301', '37'); -INSERT INTO cp_tree VALUES ('1319', '3', '35', '171', '1318', '36'); -INSERT INTO cp_tree VALUES ('1320', '2', '38', '171', '1301', '41'); -INSERT INTO cp_tree VALUES ('1321', '3', '39', '171', '1320', '40'); -INSERT INTO cp_tree VALUES ('1322', '2', '42', '171', '1301', '47'); -INSERT INTO cp_tree VALUES ('1323', '3', '43', '171', '1322', '44'); -INSERT INTO cp_tree VALUES ('1324', '3', '45', '171', '1322', '46'); -INSERT INTO cp_tree VALUES ('1325', '2', '48', '171', '1301', '51'); -INSERT INTO cp_tree VALUES ('1326', '3', '49', '171', '1325', '50'); -INSERT INTO cp_tree VALUES ('1327', '2', '52', '171', '1301', '55'); -INSERT INTO cp_tree VALUES ('1328', '3', '53', '171', '1327', '54'); -INSERT INTO cp_tree VALUES ('1329', '2', '56', '171', '1301', '57'); -INSERT INTO cp_tree VALUES ('1330', '2', '58', '171', '1301', '59'); -INSERT INTO cp_tree VALUES ('1331', '2', '60', '171', '1301', '65'); -INSERT INTO cp_tree VALUES ('1332', '3', '61', '171', '1331', '64'); -INSERT INTO cp_tree VALUES ('1333', '4', '62', '171', '1332', '63'); -INSERT INTO cp_tree VALUES ('1334', '2', '66', '171', '1301', '67'); -INSERT INTO cp_tree VALUES ('1335', '1', '1', '172', '0', '72'); -INSERT INTO cp_tree VALUES ('1336', '2', '2', '172', '1335', '15'); -INSERT INTO cp_tree VALUES ('1337', '3', '3', '172', '1336', '4'); -INSERT INTO cp_tree VALUES ('1338', '3', '5', '172', '1336', '12'); -INSERT INTO cp_tree VALUES ('1339', '4', '6', '172', '1338', '7'); -INSERT INTO cp_tree VALUES ('1340', '4', '8', '172', '1338', '9'); -INSERT INTO cp_tree VALUES ('1341', '4', '10', '172', '1338', '11'); -INSERT INTO cp_tree VALUES ('1342', '3', '13', '172', '1336', '14'); -INSERT INTO cp_tree VALUES ('1343', '2', '16', '172', '1335', '29'); -INSERT INTO cp_tree VALUES ('1344', '3', '17', '172', '1343', '18'); -INSERT INTO cp_tree VALUES ('1345', '3', '19', '172', '1343', '20'); -INSERT INTO cp_tree VALUES ('1346', '3', '21', '172', '1343', '22'); -INSERT INTO cp_tree VALUES ('1347', '3', '23', '172', '1343', '24'); -INSERT INTO cp_tree VALUES ('1348', '3', '25', '172', '1343', '26'); -INSERT INTO cp_tree VALUES ('1349', '3', '27', '172', '1343', '28'); -INSERT INTO cp_tree VALUES ('1350', '2', '30', '172', '1335', '33'); -INSERT INTO cp_tree VALUES ('1351', '3', '31', '172', '1350', '32'); -INSERT INTO cp_tree VALUES ('1352', '2', '34', '172', '1335', '37'); -INSERT INTO cp_tree VALUES ('1353', '3', '35', '172', '1352', '36'); -INSERT INTO cp_tree VALUES ('1354', '2', '38', '172', '1335', '41'); -INSERT INTO cp_tree VALUES ('1355', '3', '39', '172', '1354', '40'); -INSERT INTO cp_tree VALUES ('1356', '2', '42', '172', '1335', '47'); -INSERT INTO cp_tree VALUES ('1357', '3', '43', '172', '1356', '44'); -INSERT INTO cp_tree VALUES ('1358', '3', '45', '172', '1356', '46'); -INSERT INTO cp_tree VALUES ('1359', '2', '48', '172', '1335', '51'); -INSERT INTO cp_tree VALUES ('1360', '3', '49', '172', '1359', '50'); -INSERT INTO cp_tree VALUES ('1361', '2', '52', '172', '1335', '55'); -INSERT INTO cp_tree VALUES ('1362', '3', '53', '172', '1361', '54'); -INSERT INTO cp_tree VALUES ('1363', '2', '56', '172', '1335', '57'); -INSERT INTO cp_tree VALUES ('1364', '2', '58', '172', '1335', '69'); -INSERT INTO cp_tree VALUES ('1365', '3', '59', '172', '1364', '62'); -INSERT INTO cp_tree VALUES ('1366', '4', '60', '172', '1365', '61'); -INSERT INTO cp_tree VALUES ('1367', '3', '63', '172', '1364', '66'); -INSERT INTO cp_tree VALUES ('1368', '4', '64', '172', '1367', '65'); -INSERT INTO cp_tree VALUES ('1369', '3', '67', '172', '1364', '68'); -INSERT INTO cp_tree VALUES ('1370', '2', '70', '172', '1335', '71'); -INSERT INTO cp_tree VALUES ('1371', '1', '1', '173', '0', '102'); -INSERT INTO cp_tree VALUES ('1372', '2', '2', '173', '1371', '45'); -INSERT INTO cp_tree VALUES ('1373', '3', '3', '173', '1372', '10'); -INSERT INTO cp_tree VALUES ('1374', '4', '4', '173', '1373', '5'); -INSERT INTO cp_tree VALUES ('1375', '4', '6', '173', '1373', '7'); -INSERT INTO cp_tree VALUES ('1376', '4', '8', '173', '1373', '9'); -INSERT INTO cp_tree VALUES ('1377', '3', '11', '173', '1372', '36'); -INSERT INTO cp_tree VALUES ('1378', '4', '12', '173', '1377', '19'); -INSERT INTO cp_tree VALUES ('1379', '5', '13', '173', '1378', '14'); -INSERT INTO cp_tree VALUES ('1380', '5', '15', '173', '1378', '16'); -INSERT INTO cp_tree VALUES ('1381', '5', '17', '173', '1378', '18'); -INSERT INTO cp_tree VALUES ('1382', '4', '20', '173', '1377', '27'); -INSERT INTO cp_tree VALUES ('1383', '5', '21', '173', '1382', '22'); -INSERT INTO cp_tree VALUES ('1384', '5', '23', '173', '1382', '24'); -INSERT INTO cp_tree VALUES ('1385', '5', '25', '173', '1382', '26'); -INSERT INTO cp_tree VALUES ('1386', '4', '28', '173', '1377', '35'); -INSERT INTO cp_tree VALUES ('1387', '5', '29', '173', '1386', '30'); -INSERT INTO cp_tree VALUES ('1388', '5', '31', '173', '1386', '32'); -INSERT INTO cp_tree VALUES ('1389', '5', '33', '173', '1386', '34'); -INSERT INTO cp_tree VALUES ('1390', '3', '37', '173', '1372', '44'); -INSERT INTO cp_tree VALUES ('1391', '4', '38', '173', '1390', '39'); -INSERT INTO cp_tree VALUES ('1392', '4', '40', '173', '1390', '41'); -INSERT INTO cp_tree VALUES ('1393', '4', '42', '173', '1390', '43'); -INSERT INTO cp_tree VALUES ('1394', '2', '46', '173', '1371', '59'); -INSERT INTO cp_tree VALUES ('1395', '3', '47', '173', '1394', '48'); -INSERT INTO cp_tree VALUES ('1396', '3', '49', '173', '1394', '50'); -INSERT INTO cp_tree VALUES ('1397', '3', '51', '173', '1394', '52'); -INSERT INTO cp_tree VALUES ('1398', '3', '53', '173', '1394', '54'); -INSERT INTO cp_tree VALUES ('1399', '3', '55', '173', '1394', '56'); -INSERT INTO cp_tree VALUES ('1400', '3', '57', '173', '1394', '58'); -INSERT INTO cp_tree VALUES ('1401', '2', '60', '173', '1371', '63'); -INSERT INTO cp_tree VALUES ('1402', '3', '61', '173', '1401', '62'); -INSERT INTO cp_tree VALUES ('1403', '2', '64', '173', '1371', '67'); -INSERT INTO cp_tree VALUES ('1404', '3', '65', '173', '1403', '66'); -INSERT INTO cp_tree VALUES ('1405', '2', '68', '173', '1371', '71'); -INSERT INTO cp_tree VALUES ('1406', '3', '69', '173', '1405', '70'); -INSERT INTO cp_tree VALUES ('1407', '2', '72', '173', '1371', '77'); -INSERT INTO cp_tree VALUES ('1408', '3', '73', '173', '1407', '74'); -INSERT INTO cp_tree VALUES ('1409', '3', '75', '173', '1407', '76'); -INSERT INTO cp_tree VALUES ('1410', '2', '78', '173', '1371', '81'); -INSERT INTO cp_tree VALUES ('1411', '3', '79', '173', '1410', '80'); -INSERT INTO cp_tree VALUES ('1412', '2', '82', '173', '1371', '85'); -INSERT INTO cp_tree VALUES ('1413', '3', '83', '173', '1412', '84'); -INSERT INTO cp_tree VALUES ('1414', '2', '86', '173', '1371', '87'); -INSERT INTO cp_tree VALUES ('1415', '2', '88', '173', '1371', '99'); -INSERT INTO cp_tree VALUES ('1416', '3', '89', '173', '1415', '92'); -INSERT INTO cp_tree VALUES ('1417', '4', '90', '173', '1416', '91'); -INSERT INTO cp_tree VALUES ('1418', '3', '93', '173', '1415', '96'); -INSERT INTO cp_tree VALUES ('1419', '4', '94', '173', '1418', '95'); -INSERT INTO cp_tree VALUES ('1420', '3', '97', '173', '1415', '98'); -INSERT INTO cp_tree VALUES ('1421', '2', '100', '173', '1371', '101'); -INSERT INTO cp_tree VALUES ('1422', '1', '1', '174', '0', '106'); -INSERT INTO cp_tree VALUES ('1423', '2', '2', '174', '1422', '45'); -INSERT INTO cp_tree VALUES ('1424', '3', '3', '174', '1423', '10'); -INSERT INTO cp_tree VALUES ('1425', '4', '4', '174', '1424', '5'); -INSERT INTO cp_tree VALUES ('1426', '4', '6', '174', '1424', '7'); -INSERT INTO cp_tree VALUES ('1427', '4', '8', '174', '1424', '9'); -INSERT INTO cp_tree VALUES ('1428', '3', '11', '174', '1423', '36'); -INSERT INTO cp_tree VALUES ('1429', '4', '12', '174', '1428', '19'); -INSERT INTO cp_tree VALUES ('1430', '5', '13', '174', '1429', '14'); -INSERT INTO cp_tree VALUES ('1431', '5', '15', '174', '1429', '16'); -INSERT INTO cp_tree VALUES ('1432', '5', '17', '174', '1429', '18'); -INSERT INTO cp_tree VALUES ('1433', '4', '20', '174', '1428', '27'); -INSERT INTO cp_tree VALUES ('1434', '5', '21', '174', '1433', '22'); -INSERT INTO cp_tree VALUES ('1435', '5', '23', '174', '1433', '24'); -INSERT INTO cp_tree VALUES ('1436', '5', '25', '174', '1433', '26'); -INSERT INTO cp_tree VALUES ('1437', '4', '28', '174', '1428', '35'); -INSERT INTO cp_tree VALUES ('1438', '5', '29', '174', '1437', '30'); -INSERT INTO cp_tree VALUES ('1439', '5', '31', '174', '1437', '32'); -INSERT INTO cp_tree VALUES ('1440', '5', '33', '174', '1437', '34'); -INSERT INTO cp_tree VALUES ('1441', '3', '37', '174', '1423', '44'); -INSERT INTO cp_tree VALUES ('1442', '4', '38', '174', '1441', '39'); -INSERT INTO cp_tree VALUES ('1443', '4', '40', '174', '1441', '41'); -INSERT INTO cp_tree VALUES ('1444', '4', '42', '174', '1441', '43'); -INSERT INTO cp_tree VALUES ('1445', '2', '46', '174', '1422', '59'); -INSERT INTO cp_tree VALUES ('1446', '3', '47', '174', '1445', '48'); -INSERT INTO cp_tree VALUES ('1447', '3', '49', '174', '1445', '50'); -INSERT INTO cp_tree VALUES ('1448', '3', '51', '174', '1445', '52'); -INSERT INTO cp_tree VALUES ('1449', '3', '53', '174', '1445', '54'); -INSERT INTO cp_tree VALUES ('1450', '3', '55', '174', '1445', '56'); -INSERT INTO cp_tree VALUES ('1451', '3', '57', '174', '1445', '58'); -INSERT INTO cp_tree VALUES ('1452', '2', '60', '174', '1422', '63'); -INSERT INTO cp_tree VALUES ('1453', '3', '61', '174', '1452', '62'); -INSERT INTO cp_tree VALUES ('1454', '2', '64', '174', '1422', '67'); -INSERT INTO cp_tree VALUES ('1455', '3', '65', '174', '1454', '66'); -INSERT INTO cp_tree VALUES ('1456', '2', '68', '174', '1422', '71'); -INSERT INTO cp_tree VALUES ('1457', '3', '69', '174', '1456', '70'); -INSERT INTO cp_tree VALUES ('1458', '2', '72', '174', '1422', '77'); -INSERT INTO cp_tree VALUES ('1459', '3', '73', '174', '1458', '74'); -INSERT INTO cp_tree VALUES ('1460', '3', '75', '174', '1458', '76'); -INSERT INTO cp_tree VALUES ('1461', '2', '78', '174', '1422', '81'); -INSERT INTO cp_tree VALUES ('1462', '3', '79', '174', '1461', '80'); -INSERT INTO cp_tree VALUES ('1463', '2', '82', '174', '1422', '85'); -INSERT INTO cp_tree VALUES ('1464', '3', '83', '174', '1463', '84'); -INSERT INTO cp_tree VALUES ('1465', '2', '86', '174', '1422', '87'); -INSERT INTO cp_tree VALUES ('1466', '2', '88', '174', '1422', '103'); -INSERT INTO cp_tree VALUES ('1467', '3', '89', '174', '1466', '92'); -INSERT INTO cp_tree VALUES ('1468', '4', '90', '174', '1467', '91'); -INSERT INTO cp_tree VALUES ('1469', '3', '93', '174', '1466', '96'); -INSERT INTO cp_tree VALUES ('1470', '4', '94', '174', '1469', '95'); -INSERT INTO cp_tree VALUES ('1471', '3', '97', '174', '1466', '100'); -INSERT INTO cp_tree VALUES ('1472', '4', '98', '174', '1471', '99'); -INSERT INTO cp_tree VALUES ('1473', '3', '101', '174', '1466', '102'); -INSERT INTO cp_tree VALUES ('1474', '2', '104', '174', '1422', '105'); -INSERT INTO cp_tree VALUES ('1475', '1', '1', '175', '0', '86'); -INSERT INTO cp_tree VALUES ('1476', '2', '2', '175', '1475', '27'); -INSERT INTO cp_tree VALUES ('1477', '3', '3', '175', '1476', '10'); -INSERT INTO cp_tree VALUES ('1478', '4', '4', '175', '1477', '5'); -INSERT INTO cp_tree VALUES ('1479', '4', '6', '175', '1477', '7'); -INSERT INTO cp_tree VALUES ('1480', '4', '8', '175', '1477', '9'); -INSERT INTO cp_tree VALUES ('1481', '3', '11', '175', '1476', '18'); -INSERT INTO cp_tree VALUES ('1482', '4', '12', '175', '1481', '13'); -INSERT INTO cp_tree VALUES ('1483', '4', '14', '175', '1481', '15'); -INSERT INTO cp_tree VALUES ('1484', '4', '16', '175', '1481', '17'); -INSERT INTO cp_tree VALUES ('1485', '3', '19', '175', '1476', '26'); -INSERT INTO cp_tree VALUES ('1486', '4', '20', '175', '1485', '21'); -INSERT INTO cp_tree VALUES ('1487', '4', '22', '175', '1485', '23'); -INSERT INTO cp_tree VALUES ('1488', '4', '24', '175', '1485', '25'); -INSERT INTO cp_tree VALUES ('1489', '2', '28', '175', '1475', '41'); -INSERT INTO cp_tree VALUES ('1490', '3', '29', '175', '1489', '30'); -INSERT INTO cp_tree VALUES ('1491', '3', '31', '175', '1489', '32'); -INSERT INTO cp_tree VALUES ('1492', '3', '33', '175', '1489', '34'); -INSERT INTO cp_tree VALUES ('1493', '3', '35', '175', '1489', '36'); -INSERT INTO cp_tree VALUES ('1494', '3', '37', '175', '1489', '38'); -INSERT INTO cp_tree VALUES ('1495', '3', '39', '175', '1489', '40'); -INSERT INTO cp_tree VALUES ('1496', '2', '42', '175', '1475', '45'); -INSERT INTO cp_tree VALUES ('1497', '3', '43', '175', '1496', '44'); -INSERT INTO cp_tree VALUES ('1498', '2', '46', '175', '1475', '49'); -INSERT INTO cp_tree VALUES ('1499', '3', '47', '175', '1498', '48'); -INSERT INTO cp_tree VALUES ('1500', '2', '50', '175', '1475', '53'); -INSERT INTO cp_tree VALUES ('1501', '3', '51', '175', '1500', '52'); -INSERT INTO cp_tree VALUES ('1502', '2', '54', '175', '1475', '59'); -INSERT INTO cp_tree VALUES ('1503', '3', '55', '175', '1502', '56'); -INSERT INTO cp_tree VALUES ('1504', '3', '57', '175', '1502', '58'); -INSERT INTO cp_tree VALUES ('1505', '2', '60', '175', '1475', '63'); -INSERT INTO cp_tree VALUES ('1506', '3', '61', '175', '1505', '62'); -INSERT INTO cp_tree VALUES ('1507', '2', '64', '175', '1475', '67'); -INSERT INTO cp_tree VALUES ('1508', '3', '65', '175', '1507', '66'); -INSERT INTO cp_tree VALUES ('1509', '2', '68', '175', '1475', '73'); -INSERT INTO cp_tree VALUES ('1510', '3', '69', '175', '1509', '72'); -INSERT INTO cp_tree VALUES ('1511', '4', '70', '175', '1510', '71'); -INSERT INTO cp_tree VALUES ('1512', '2', '74', '175', '1475', '83'); -INSERT INTO cp_tree VALUES ('1513', '3', '75', '175', '1512', '78'); -INSERT INTO cp_tree VALUES ('1514', '4', '76', '175', '1513', '77'); -INSERT INTO cp_tree VALUES ('1515', '3', '79', '175', '1512', '82'); -INSERT INTO cp_tree VALUES ('1516', '4', '80', '175', '1515', '81'); -INSERT INTO cp_tree VALUES ('1517', '2', '84', '175', '1475', '85'); -INSERT INTO cp_tree VALUES ('1518', '1', '1', '176', '0', '86'); -INSERT INTO cp_tree VALUES ('1519', '2', '2', '176', '1518', '27'); -INSERT INTO cp_tree VALUES ('1520', '3', '3', '176', '1519', '10'); -INSERT INTO cp_tree VALUES ('1521', '4', '4', '176', '1520', '5'); -INSERT INTO cp_tree VALUES ('1522', '4', '6', '176', '1520', '7'); -INSERT INTO cp_tree VALUES ('1523', '4', '8', '176', '1520', '9'); -INSERT INTO cp_tree VALUES ('1524', '3', '11', '176', '1519', '18'); -INSERT INTO cp_tree VALUES ('1525', '4', '12', '176', '1524', '13'); -INSERT INTO cp_tree VALUES ('1526', '4', '14', '176', '1524', '15'); -INSERT INTO cp_tree VALUES ('1527', '4', '16', '176', '1524', '17'); -INSERT INTO cp_tree VALUES ('1528', '3', '19', '176', '1519', '26'); -INSERT INTO cp_tree VALUES ('1529', '4', '20', '176', '1528', '21'); -INSERT INTO cp_tree VALUES ('1530', '4', '22', '176', '1528', '23'); -INSERT INTO cp_tree VALUES ('1531', '4', '24', '176', '1528', '25'); -INSERT INTO cp_tree VALUES ('1532', '2', '28', '176', '1518', '41'); -INSERT INTO cp_tree VALUES ('1533', '3', '29', '176', '1532', '30'); -INSERT INTO cp_tree VALUES ('1534', '3', '31', '176', '1532', '32'); -INSERT INTO cp_tree VALUES ('1535', '3', '33', '176', '1532', '34'); -INSERT INTO cp_tree VALUES ('1536', '3', '35', '176', '1532', '36'); -INSERT INTO cp_tree VALUES ('1537', '3', '37', '176', '1532', '38'); -INSERT INTO cp_tree VALUES ('1538', '3', '39', '176', '1532', '40'); -INSERT INTO cp_tree VALUES ('1539', '2', '42', '176', '1518', '45'); -INSERT INTO cp_tree VALUES ('1540', '3', '43', '176', '1539', '44'); -INSERT INTO cp_tree VALUES ('1541', '2', '46', '176', '1518', '49'); -INSERT INTO cp_tree VALUES ('1542', '3', '47', '176', '1541', '48'); -INSERT INTO cp_tree VALUES ('1543', '2', '50', '176', '1518', '53'); -INSERT INTO cp_tree VALUES ('1544', '3', '51', '176', '1543', '52'); -INSERT INTO cp_tree VALUES ('1545', '2', '54', '176', '1518', '59'); -INSERT INTO cp_tree VALUES ('1546', '3', '55', '176', '1545', '56'); -INSERT INTO cp_tree VALUES ('1547', '3', '57', '176', '1545', '58'); -INSERT INTO cp_tree VALUES ('1548', '2', '60', '176', '1518', '63'); -INSERT INTO cp_tree VALUES ('1549', '3', '61', '176', '1548', '62'); -INSERT INTO cp_tree VALUES ('1550', '2', '64', '176', '1518', '67'); -INSERT INTO cp_tree VALUES ('1551', '3', '65', '176', '1550', '66'); -INSERT INTO cp_tree VALUES ('1552', '2', '68', '176', '1518', '73'); -INSERT INTO cp_tree VALUES ('1553', '3', '69', '176', '1552', '72'); -INSERT INTO cp_tree VALUES ('1554', '4', '70', '176', '1553', '71'); -INSERT INTO cp_tree VALUES ('1555', '2', '74', '176', '1518', '83'); -INSERT INTO cp_tree VALUES ('1556', '3', '75', '176', '1555', '78'); -INSERT INTO cp_tree VALUES ('1557', '4', '76', '176', '1556', '77'); -INSERT INTO cp_tree VALUES ('1558', '3', '79', '176', '1555', '82'); -INSERT INTO cp_tree VALUES ('1559', '4', '80', '176', '1558', '81'); -INSERT INTO cp_tree VALUES ('1560', '2', '84', '176', '1518', '85'); -INSERT INTO cp_tree VALUES ('1561', '1', '1', '177', '0', '86'); -INSERT INTO cp_tree VALUES ('1562', '2', '2', '177', '1561', '27'); -INSERT INTO cp_tree VALUES ('1563', '3', '3', '177', '1562', '10'); -INSERT INTO cp_tree VALUES ('1564', '4', '4', '177', '1563', '5'); -INSERT INTO cp_tree VALUES ('1565', '4', '6', '177', '1563', '7'); -INSERT INTO cp_tree VALUES ('1566', '4', '8', '177', '1563', '9'); -INSERT INTO cp_tree VALUES ('1567', '3', '11', '177', '1562', '18'); -INSERT INTO cp_tree VALUES ('1568', '4', '12', '177', '1567', '13'); -INSERT INTO cp_tree VALUES ('1569', '4', '14', '177', '1567', '15'); -INSERT INTO cp_tree VALUES ('1570', '4', '16', '177', '1567', '17'); -INSERT INTO cp_tree VALUES ('1571', '3', '19', '177', '1562', '26'); -INSERT INTO cp_tree VALUES ('1572', '4', '20', '177', '1571', '21'); -INSERT INTO cp_tree VALUES ('1573', '4', '22', '177', '1571', '23'); -INSERT INTO cp_tree VALUES ('1574', '4', '24', '177', '1571', '25'); -INSERT INTO cp_tree VALUES ('1575', '2', '28', '177', '1561', '41'); -INSERT INTO cp_tree VALUES ('1576', '3', '29', '177', '1575', '30'); -INSERT INTO cp_tree VALUES ('1577', '3', '31', '177', '1575', '32'); -INSERT INTO cp_tree VALUES ('1578', '3', '33', '177', '1575', '34'); -INSERT INTO cp_tree VALUES ('1579', '3', '35', '177', '1575', '36'); -INSERT INTO cp_tree VALUES ('1580', '3', '37', '177', '1575', '38'); -INSERT INTO cp_tree VALUES ('1581', '3', '39', '177', '1575', '40'); -INSERT INTO cp_tree VALUES ('1582', '2', '42', '177', '1561', '45'); -INSERT INTO cp_tree VALUES ('1583', '3', '43', '177', '1582', '44'); -INSERT INTO cp_tree VALUES ('1584', '2', '46', '177', '1561', '49'); -INSERT INTO cp_tree VALUES ('1585', '3', '47', '177', '1584', '48'); -INSERT INTO cp_tree VALUES ('1586', '2', '50', '177', '1561', '53'); -INSERT INTO cp_tree VALUES ('1587', '3', '51', '177', '1586', '52'); -INSERT INTO cp_tree VALUES ('1588', '2', '54', '177', '1561', '59'); -INSERT INTO cp_tree VALUES ('1589', '3', '55', '177', '1588', '56'); -INSERT INTO cp_tree VALUES ('1590', '3', '57', '177', '1588', '58'); -INSERT INTO cp_tree VALUES ('1591', '2', '60', '177', '1561', '63'); -INSERT INTO cp_tree VALUES ('1592', '3', '61', '177', '1591', '62'); -INSERT INTO cp_tree VALUES ('1593', '2', '64', '177', '1561', '67'); -INSERT INTO cp_tree VALUES ('1594', '3', '65', '177', '1593', '66'); -INSERT INTO cp_tree VALUES ('1595', '2', '68', '177', '1561', '73'); -INSERT INTO cp_tree VALUES ('1596', '3', '69', '177', '1595', '72'); -INSERT INTO cp_tree VALUES ('1597', '4', '70', '177', '1596', '71'); -INSERT INTO cp_tree VALUES ('1598', '2', '74', '177', '1561', '83'); -INSERT INTO cp_tree VALUES ('1599', '3', '75', '177', '1598', '78'); -INSERT INTO cp_tree VALUES ('1600', '4', '76', '177', '1599', '77'); -INSERT INTO cp_tree VALUES ('1601', '3', '79', '177', '1598', '82'); -INSERT INTO cp_tree VALUES ('1602', '4', '80', '177', '1601', '81'); -INSERT INTO cp_tree VALUES ('1603', '2', '84', '177', '1561', '85'); -INSERT INTO cp_tree VALUES ('1604', '1', '1', '178', '0', '90'); -INSERT INTO cp_tree VALUES ('1605', '2', '2', '178', '1604', '27'); -INSERT INTO cp_tree VALUES ('1606', '3', '3', '178', '1605', '10'); -INSERT INTO cp_tree VALUES ('1607', '4', '4', '178', '1606', '5'); -INSERT INTO cp_tree VALUES ('1608', '4', '6', '178', '1606', '7'); -INSERT INTO cp_tree VALUES ('1609', '4', '8', '178', '1606', '9'); -INSERT INTO cp_tree VALUES ('1610', '3', '11', '178', '1605', '18'); -INSERT INTO cp_tree VALUES ('1611', '4', '12', '178', '1610', '13'); -INSERT INTO cp_tree VALUES ('1612', '4', '14', '178', '1610', '15'); -INSERT INTO cp_tree VALUES ('1613', '4', '16', '178', '1610', '17'); -INSERT INTO cp_tree VALUES ('1614', '3', '19', '178', '1605', '26'); -INSERT INTO cp_tree VALUES ('1615', '4', '20', '178', '1614', '21'); -INSERT INTO cp_tree VALUES ('1616', '4', '22', '178', '1614', '23'); -INSERT INTO cp_tree VALUES ('1617', '4', '24', '178', '1614', '25'); -INSERT INTO cp_tree VALUES ('1618', '2', '28', '178', '1604', '41'); -INSERT INTO cp_tree VALUES ('1619', '3', '29', '178', '1618', '30'); -INSERT INTO cp_tree VALUES ('1620', '3', '31', '178', '1618', '32'); -INSERT INTO cp_tree VALUES ('1621', '3', '33', '178', '1618', '34'); -INSERT INTO cp_tree VALUES ('1622', '3', '35', '178', '1618', '36'); -INSERT INTO cp_tree VALUES ('1623', '3', '37', '178', '1618', '38'); -INSERT INTO cp_tree VALUES ('1624', '3', '39', '178', '1618', '40'); -INSERT INTO cp_tree VALUES ('1625', '2', '42', '178', '1604', '45'); -INSERT INTO cp_tree VALUES ('1626', '3', '43', '178', '1625', '44'); -INSERT INTO cp_tree VALUES ('1627', '2', '46', '178', '1604', '49'); -INSERT INTO cp_tree VALUES ('1628', '3', '47', '178', '1627', '48'); -INSERT INTO cp_tree VALUES ('1629', '2', '50', '178', '1604', '53'); -INSERT INTO cp_tree VALUES ('1630', '3', '51', '178', '1629', '52'); -INSERT INTO cp_tree VALUES ('1631', '2', '54', '178', '1604', '59'); -INSERT INTO cp_tree VALUES ('1632', '3', '55', '178', '1631', '56'); -INSERT INTO cp_tree VALUES ('1633', '3', '57', '178', '1631', '58'); -INSERT INTO cp_tree VALUES ('1634', '2', '60', '178', '1604', '63'); -INSERT INTO cp_tree VALUES ('1635', '3', '61', '178', '1634', '62'); -INSERT INTO cp_tree VALUES ('1636', '2', '64', '178', '1604', '67'); -INSERT INTO cp_tree VALUES ('1637', '3', '65', '178', '1636', '66'); -INSERT INTO cp_tree VALUES ('1638', '2', '68', '178', '1604', '75'); -INSERT INTO cp_tree VALUES ('1639', '3', '69', '178', '1638', '70'); -INSERT INTO cp_tree VALUES ('1640', '3', '71', '178', '1638', '74'); -INSERT INTO cp_tree VALUES ('1641', '4', '72', '178', '1640', '73'); -INSERT INTO cp_tree VALUES ('1642', '2', '76', '178', '1604', '87'); -INSERT INTO cp_tree VALUES ('1643', '3', '77', '178', '1642', '80'); -INSERT INTO cp_tree VALUES ('1644', '4', '78', '178', '1643', '79'); -INSERT INTO cp_tree VALUES ('1645', '3', '81', '178', '1642', '82'); -INSERT INTO cp_tree VALUES ('1646', '3', '83', '178', '1642', '86'); -INSERT INTO cp_tree VALUES ('1647', '4', '84', '178', '1646', '85'); -INSERT INTO cp_tree VALUES ('1648', '2', '88', '178', '1604', '89'); -INSERT INTO cp_tree VALUES ('1649', '1', '1', '179', '0', '72'); -INSERT INTO cp_tree VALUES ('1650', '2', '2', '179', '1649', '9'); -INSERT INTO cp_tree VALUES ('1651', '3', '3', '179', '1650', '4'); -INSERT INTO cp_tree VALUES ('1652', '3', '5', '179', '1650', '6'); -INSERT INTO cp_tree VALUES ('1653', '3', '7', '179', '1650', '8'); -INSERT INTO cp_tree VALUES ('1654', '2', '10', '179', '1649', '23'); -INSERT INTO cp_tree VALUES ('1655', '3', '11', '179', '1654', '12'); -INSERT INTO cp_tree VALUES ('1656', '3', '13', '179', '1654', '14'); -INSERT INTO cp_tree VALUES ('1657', '3', '15', '179', '1654', '16'); -INSERT INTO cp_tree VALUES ('1658', '3', '17', '179', '1654', '18'); -INSERT INTO cp_tree VALUES ('1659', '3', '19', '179', '1654', '20'); -INSERT INTO cp_tree VALUES ('1660', '3', '21', '179', '1654', '22'); -INSERT INTO cp_tree VALUES ('1661', '2', '24', '179', '1649', '27'); -INSERT INTO cp_tree VALUES ('1662', '3', '25', '179', '1661', '26'); -INSERT INTO cp_tree VALUES ('1663', '2', '28', '179', '1649', '31'); -INSERT INTO cp_tree VALUES ('1664', '3', '29', '179', '1663', '30'); -INSERT INTO cp_tree VALUES ('1665', '2', '32', '179', '1649', '35'); -INSERT INTO cp_tree VALUES ('1666', '3', '33', '179', '1665', '34'); -INSERT INTO cp_tree VALUES ('1667', '2', '36', '179', '1649', '41'); -INSERT INTO cp_tree VALUES ('1668', '3', '37', '179', '1667', '38'); -INSERT INTO cp_tree VALUES ('1669', '3', '39', '179', '1667', '40'); -INSERT INTO cp_tree VALUES ('1670', '2', '42', '179', '1649', '45'); -INSERT INTO cp_tree VALUES ('1671', '3', '43', '179', '1670', '44'); -INSERT INTO cp_tree VALUES ('1672', '2', '46', '179', '1649', '49'); -INSERT INTO cp_tree VALUES ('1673', '3', '47', '179', '1672', '48'); -INSERT INTO cp_tree VALUES ('1674', '2', '50', '179', '1649', '57'); -INSERT INTO cp_tree VALUES ('1675', '3', '51', '179', '1674', '52'); -INSERT INTO cp_tree VALUES ('1676', '3', '53', '179', '1674', '56'); -INSERT INTO cp_tree VALUES ('1677', '4', '54', '179', '1676', '55'); -INSERT INTO cp_tree VALUES ('1678', '2', '58', '179', '1649', '69'); -INSERT INTO cp_tree VALUES ('1679', '3', '59', '179', '1678', '62'); -INSERT INTO cp_tree VALUES ('1680', '4', '60', '179', '1679', '61'); -INSERT INTO cp_tree VALUES ('1681', '3', '63', '179', '1678', '64'); -INSERT INTO cp_tree VALUES ('1682', '3', '65', '179', '1678', '68'); -INSERT INTO cp_tree VALUES ('1683', '4', '66', '179', '1682', '67'); -INSERT INTO cp_tree VALUES ('1684', '2', '70', '179', '1649', '71'); -INSERT INTO cp_tree VALUES ('1685', '1', '1', '180', '0', '94'); -INSERT INTO cp_tree VALUES ('1686', '2', '2', '180', '1685', '27'); -INSERT INTO cp_tree VALUES ('1687', '3', '3', '180', '1686', '10'); -INSERT INTO cp_tree VALUES ('1688', '4', '4', '180', '1687', '5'); -INSERT INTO cp_tree VALUES ('1689', '4', '6', '180', '1687', '7'); -INSERT INTO cp_tree VALUES ('1690', '4', '8', '180', '1687', '9'); -INSERT INTO cp_tree VALUES ('1691', '3', '11', '180', '1686', '18'); -INSERT INTO cp_tree VALUES ('1692', '4', '12', '180', '1691', '13'); -INSERT INTO cp_tree VALUES ('1693', '4', '14', '180', '1691', '15'); -INSERT INTO cp_tree VALUES ('1694', '4', '16', '180', '1691', '17'); -INSERT INTO cp_tree VALUES ('1695', '3', '19', '180', '1686', '26'); -INSERT INTO cp_tree VALUES ('1696', '4', '20', '180', '1695', '21'); -INSERT INTO cp_tree VALUES ('1697', '4', '22', '180', '1695', '23'); -INSERT INTO cp_tree VALUES ('1698', '4', '24', '180', '1695', '25'); -INSERT INTO cp_tree VALUES ('1699', '2', '28', '180', '1685', '41'); -INSERT INTO cp_tree VALUES ('1700', '3', '29', '180', '1699', '30'); -INSERT INTO cp_tree VALUES ('1701', '3', '31', '180', '1699', '32'); -INSERT INTO cp_tree VALUES ('1702', '3', '33', '180', '1699', '34'); -INSERT INTO cp_tree VALUES ('1703', '3', '35', '180', '1699', '36'); -INSERT INTO cp_tree VALUES ('1704', '3', '37', '180', '1699', '38'); -INSERT INTO cp_tree VALUES ('1705', '3', '39', '180', '1699', '40'); -INSERT INTO cp_tree VALUES ('1706', '2', '42', '180', '1685', '45'); -INSERT INTO cp_tree VALUES ('1707', '3', '43', '180', '1706', '44'); -INSERT INTO cp_tree VALUES ('1708', '2', '46', '180', '1685', '49'); -INSERT INTO cp_tree VALUES ('1709', '3', '47', '180', '1708', '48'); -INSERT INTO cp_tree VALUES ('1710', '2', '50', '180', '1685', '53'); -INSERT INTO cp_tree VALUES ('1711', '3', '51', '180', '1710', '52'); -INSERT INTO cp_tree VALUES ('1712', '2', '54', '180', '1685', '59'); -INSERT INTO cp_tree VALUES ('1713', '3', '55', '180', '1712', '56'); -INSERT INTO cp_tree VALUES ('1714', '3', '57', '180', '1712', '58'); -INSERT INTO cp_tree VALUES ('1715', '2', '60', '180', '1685', '63'); -INSERT INTO cp_tree VALUES ('1716', '3', '61', '180', '1715', '62'); -INSERT INTO cp_tree VALUES ('1717', '2', '64', '180', '1685', '67'); -INSERT INTO cp_tree VALUES ('1718', '3', '65', '180', '1717', '66'); -INSERT INTO cp_tree VALUES ('1719', '2', '68', '180', '1685', '75'); -INSERT INTO cp_tree VALUES ('1720', '3', '69', '180', '1719', '70'); -INSERT INTO cp_tree VALUES ('1721', '3', '71', '180', '1719', '74'); -INSERT INTO cp_tree VALUES ('1722', '4', '72', '180', '1721', '73'); -INSERT INTO cp_tree VALUES ('1723', '2', '76', '180', '1685', '83'); -INSERT INTO cp_tree VALUES ('1724', '3', '77', '180', '1723', '78'); -INSERT INTO cp_tree VALUES ('1725', '3', '79', '180', '1723', '82'); -INSERT INTO cp_tree VALUES ('1726', '4', '80', '180', '1725', '81'); -INSERT INTO cp_tree VALUES ('1727', '2', '84', '180', '1685', '91'); -INSERT INTO cp_tree VALUES ('1728', '3', '85', '180', '1727', '86'); -INSERT INTO cp_tree VALUES ('1729', '3', '87', '180', '1727', '90'); -INSERT INTO cp_tree VALUES ('1730', '4', '88', '180', '1729', '89'); -INSERT INTO cp_tree VALUES ('1731', '2', '92', '180', '1685', '93'); -INSERT INTO cp_tree VALUES ('1732', '1', '1', '181', '0', '158'); -INSERT INTO cp_tree VALUES ('1733', '2', '2', '181', '1732', '63'); -INSERT INTO cp_tree VALUES ('1734', '3', '3', '181', '1733', '10'); -INSERT INTO cp_tree VALUES ('1735', '4', '4', '181', '1734', '5'); -INSERT INTO cp_tree VALUES ('1736', '4', '6', '181', '1734', '7'); -INSERT INTO cp_tree VALUES ('1737', '4', '8', '181', '1734', '9'); -INSERT INTO cp_tree VALUES ('1738', '3', '11', '181', '1733', '54'); -INSERT INTO cp_tree VALUES ('1739', '4', '12', '181', '1738', '37'); -INSERT INTO cp_tree VALUES ('1740', '5', '13', '181', '1739', '20'); -INSERT INTO cp_tree VALUES ('1741', '6', '14', '181', '1740', '15'); -INSERT INTO cp_tree VALUES ('1742', '6', '16', '181', '1740', '17'); -INSERT INTO cp_tree VALUES ('1743', '6', '18', '181', '1740', '19'); -INSERT INTO cp_tree VALUES ('1744', '5', '21', '181', '1739', '28'); -INSERT INTO cp_tree VALUES ('1745', '6', '22', '181', '1744', '23'); -INSERT INTO cp_tree VALUES ('1746', '6', '24', '181', '1744', '25'); -INSERT INTO cp_tree VALUES ('1747', '6', '26', '181', '1744', '27'); -INSERT INTO cp_tree VALUES ('1748', '5', '29', '181', '1739', '36'); -INSERT INTO cp_tree VALUES ('1749', '6', '30', '181', '1748', '31'); -INSERT INTO cp_tree VALUES ('1750', '6', '32', '181', '1748', '33'); -INSERT INTO cp_tree VALUES ('1751', '6', '34', '181', '1748', '35'); -INSERT INTO cp_tree VALUES ('1752', '4', '38', '181', '1738', '45'); -INSERT INTO cp_tree VALUES ('1753', '5', '39', '181', '1752', '40'); -INSERT INTO cp_tree VALUES ('1754', '5', '41', '181', '1752', '42'); -INSERT INTO cp_tree VALUES ('1755', '5', '43', '181', '1752', '44'); -INSERT INTO cp_tree VALUES ('1756', '4', '46', '181', '1738', '53'); -INSERT INTO cp_tree VALUES ('1757', '5', '47', '181', '1756', '48'); -INSERT INTO cp_tree VALUES ('1758', '5', '49', '181', '1756', '50'); -INSERT INTO cp_tree VALUES ('1759', '5', '51', '181', '1756', '52'); -INSERT INTO cp_tree VALUES ('1760', '3', '55', '181', '1733', '62'); -INSERT INTO cp_tree VALUES ('1761', '4', '56', '181', '1760', '57'); -INSERT INTO cp_tree VALUES ('1762', '4', '58', '181', '1760', '59'); -INSERT INTO cp_tree VALUES ('1763', '4', '60', '181', '1760', '61'); -INSERT INTO cp_tree VALUES ('1764', '2', '64', '181', '1732', '77'); -INSERT INTO cp_tree VALUES ('1765', '3', '65', '181', '1764', '66'); -INSERT INTO cp_tree VALUES ('1766', '3', '67', '181', '1764', '68'); -INSERT INTO cp_tree VALUES ('1767', '3', '69', '181', '1764', '70'); -INSERT INTO cp_tree VALUES ('1768', '3', '71', '181', '1764', '72'); -INSERT INTO cp_tree VALUES ('1769', '3', '73', '181', '1764', '74'); -INSERT INTO cp_tree VALUES ('1770', '3', '75', '181', '1764', '76'); -INSERT INTO cp_tree VALUES ('1771', '2', '78', '181', '1732', '81'); -INSERT INTO cp_tree VALUES ('1772', '3', '79', '181', '1771', '80'); -INSERT INTO cp_tree VALUES ('1773', '2', '82', '181', '1732', '85'); -INSERT INTO cp_tree VALUES ('1774', '3', '83', '181', '1773', '84'); -INSERT INTO cp_tree VALUES ('1775', '2', '86', '181', '1732', '89'); -INSERT INTO cp_tree VALUES ('1776', '3', '87', '181', '1775', '88'); -INSERT INTO cp_tree VALUES ('1777', '2', '90', '181', '1732', '95'); -INSERT INTO cp_tree VALUES ('1778', '3', '91', '181', '1777', '92'); -INSERT INTO cp_tree VALUES ('1779', '3', '93', '181', '1777', '94'); -INSERT INTO cp_tree VALUES ('1780', '2', '96', '181', '1732', '99'); -INSERT INTO cp_tree VALUES ('1781', '3', '97', '181', '1780', '98'); -INSERT INTO cp_tree VALUES ('1782', '2', '100', '181', '1732', '103'); -INSERT INTO cp_tree VALUES ('1783', '3', '101', '181', '1782', '102'); -INSERT INTO cp_tree VALUES ('1784', '2', '104', '181', '1732', '113'); -INSERT INTO cp_tree VALUES ('1785', '3', '105', '181', '1784', '108'); -INSERT INTO cp_tree VALUES ('1786', '4', '106', '181', '1785', '107'); -INSERT INTO cp_tree VALUES ('1787', '3', '109', '181', '1784', '112'); -INSERT INTO cp_tree VALUES ('1788', '4', '110', '181', '1787', '111'); -INSERT INTO cp_tree VALUES ('1789', '2', '114', '181', '1732', '123'); -INSERT INTO cp_tree VALUES ('1790', '3', '115', '181', '1789', '118'); -INSERT INTO cp_tree VALUES ('1791', '4', '116', '181', '1790', '117'); -INSERT INTO cp_tree VALUES ('1792', '3', '119', '181', '1789', '122'); -INSERT INTO cp_tree VALUES ('1793', '4', '120', '181', '1792', '121'); -INSERT INTO cp_tree VALUES ('1794', '2', '124', '181', '1732', '133'); -INSERT INTO cp_tree VALUES ('1795', '3', '125', '181', '1794', '128'); -INSERT INTO cp_tree VALUES ('1796', '4', '126', '181', '1795', '127'); -INSERT INTO cp_tree VALUES ('1797', '3', '129', '181', '1794', '132'); -INSERT INTO cp_tree VALUES ('1798', '4', '130', '181', '1797', '131'); -INSERT INTO cp_tree VALUES ('1799', '2', '134', '181', '1732', '143'); -INSERT INTO cp_tree VALUES ('1800', '3', '135', '181', '1799', '138'); -INSERT INTO cp_tree VALUES ('1801', '4', '136', '181', '1800', '137'); -INSERT INTO cp_tree VALUES ('1802', '3', '139', '181', '1799', '142'); -INSERT INTO cp_tree VALUES ('1803', '4', '140', '181', '1802', '141'); -INSERT INTO cp_tree VALUES ('1804', '2', '144', '181', '1732', '153'); -INSERT INTO cp_tree VALUES ('1805', '3', '145', '181', '1804', '148'); -INSERT INTO cp_tree VALUES ('1806', '4', '146', '181', '1805', '147'); -INSERT INTO cp_tree VALUES ('1807', '3', '149', '181', '1804', '152'); -INSERT INTO cp_tree VALUES ('1808', '4', '150', '181', '1807', '151'); -INSERT INTO cp_tree VALUES ('1809', '2', '154', '181', '1732', '155'); -INSERT INTO cp_tree VALUES ('1810', '2', '156', '181', '1732', '157'); -INSERT INTO cp_tree VALUES ('1811', '1', '1', '182', '0', '164'); -INSERT INTO cp_tree VALUES ('1812', '2', '2', '182', '1811', '63'); -INSERT INTO cp_tree VALUES ('1813', '3', '3', '182', '1812', '10'); -INSERT INTO cp_tree VALUES ('1814', '4', '4', '182', '1813', '5'); -INSERT INTO cp_tree VALUES ('1815', '4', '6', '182', '1813', '7'); -INSERT INTO cp_tree VALUES ('1816', '4', '8', '182', '1813', '9'); -INSERT INTO cp_tree VALUES ('1817', '3', '11', '182', '1812', '54'); -INSERT INTO cp_tree VALUES ('1818', '4', '12', '182', '1817', '37'); -INSERT INTO cp_tree VALUES ('1819', '5', '13', '182', '1818', '20'); -INSERT INTO cp_tree VALUES ('1820', '6', '14', '182', '1819', '15'); -INSERT INTO cp_tree VALUES ('1821', '6', '16', '182', '1819', '17'); -INSERT INTO cp_tree VALUES ('1822', '6', '18', '182', '1819', '19'); -INSERT INTO cp_tree VALUES ('1823', '5', '21', '182', '1818', '28'); -INSERT INTO cp_tree VALUES ('1824', '6', '22', '182', '1823', '23'); -INSERT INTO cp_tree VALUES ('1825', '6', '24', '182', '1823', '25'); -INSERT INTO cp_tree VALUES ('1826', '6', '26', '182', '1823', '27'); -INSERT INTO cp_tree VALUES ('1827', '5', '29', '182', '1818', '36'); -INSERT INTO cp_tree VALUES ('1828', '6', '30', '182', '1827', '31'); -INSERT INTO cp_tree VALUES ('1829', '6', '32', '182', '1827', '33'); -INSERT INTO cp_tree VALUES ('1830', '6', '34', '182', '1827', '35'); -INSERT INTO cp_tree VALUES ('1831', '4', '38', '182', '1817', '45'); -INSERT INTO cp_tree VALUES ('1832', '5', '39', '182', '1831', '40'); -INSERT INTO cp_tree VALUES ('1833', '5', '41', '182', '1831', '42'); -INSERT INTO cp_tree VALUES ('1834', '5', '43', '182', '1831', '44'); -INSERT INTO cp_tree VALUES ('1835', '4', '46', '182', '1817', '53'); -INSERT INTO cp_tree VALUES ('1836', '5', '47', '182', '1835', '48'); -INSERT INTO cp_tree VALUES ('1837', '5', '49', '182', '1835', '50'); -INSERT INTO cp_tree VALUES ('1838', '5', '51', '182', '1835', '52'); -INSERT INTO cp_tree VALUES ('1839', '3', '55', '182', '1812', '62'); -INSERT INTO cp_tree VALUES ('1840', '4', '56', '182', '1839', '57'); -INSERT INTO cp_tree VALUES ('1841', '4', '58', '182', '1839', '59'); -INSERT INTO cp_tree VALUES ('1842', '4', '60', '182', '1839', '61'); -INSERT INTO cp_tree VALUES ('1843', '2', '64', '182', '1811', '77'); -INSERT INTO cp_tree VALUES ('1844', '3', '65', '182', '1843', '66'); -INSERT INTO cp_tree VALUES ('1845', '3', '67', '182', '1843', '68'); -INSERT INTO cp_tree VALUES ('1846', '3', '69', '182', '1843', '70'); -INSERT INTO cp_tree VALUES ('1847', '3', '71', '182', '1843', '72'); -INSERT INTO cp_tree VALUES ('1848', '3', '73', '182', '1843', '74'); -INSERT INTO cp_tree VALUES ('1849', '3', '75', '182', '1843', '76'); -INSERT INTO cp_tree VALUES ('1850', '2', '78', '182', '1811', '81'); -INSERT INTO cp_tree VALUES ('1851', '3', '79', '182', '1850', '80'); -INSERT INTO cp_tree VALUES ('1852', '2', '82', '182', '1811', '85'); -INSERT INTO cp_tree VALUES ('1853', '3', '83', '182', '1852', '84'); -INSERT INTO cp_tree VALUES ('1854', '2', '86', '182', '1811', '89'); -INSERT INTO cp_tree VALUES ('1855', '3', '87', '182', '1854', '88'); -INSERT INTO cp_tree VALUES ('1856', '2', '90', '182', '1811', '95'); -INSERT INTO cp_tree VALUES ('1857', '3', '91', '182', '1856', '92'); -INSERT INTO cp_tree VALUES ('1858', '3', '93', '182', '1856', '94'); -INSERT INTO cp_tree VALUES ('1859', '2', '96', '182', '1811', '99'); -INSERT INTO cp_tree VALUES ('1860', '3', '97', '182', '1859', '98'); -INSERT INTO cp_tree VALUES ('1861', '2', '100', '182', '1811', '103'); -INSERT INTO cp_tree VALUES ('1862', '3', '101', '182', '1861', '102'); -INSERT INTO cp_tree VALUES ('1863', '2', '104', '182', '1811', '113'); -INSERT INTO cp_tree VALUES ('1864', '3', '105', '182', '1863', '108'); -INSERT INTO cp_tree VALUES ('1865', '4', '106', '182', '1864', '107'); -INSERT INTO cp_tree VALUES ('1866', '3', '109', '182', '1863', '112'); -INSERT INTO cp_tree VALUES ('1867', '4', '110', '182', '1866', '111'); -INSERT INTO cp_tree VALUES ('1868', '2', '114', '182', '1811', '123'); -INSERT INTO cp_tree VALUES ('1869', '3', '115', '182', '1868', '118'); -INSERT INTO cp_tree VALUES ('1870', '4', '116', '182', '1869', '117'); -INSERT INTO cp_tree VALUES ('1871', '3', '119', '182', '1868', '122'); -INSERT INTO cp_tree VALUES ('1872', '4', '120', '182', '1871', '121'); -INSERT INTO cp_tree VALUES ('1873', '2', '124', '182', '1811', '133'); -INSERT INTO cp_tree VALUES ('1874', '3', '125', '182', '1873', '128'); -INSERT INTO cp_tree VALUES ('1875', '4', '126', '182', '1874', '127'); -INSERT INTO cp_tree VALUES ('1876', '3', '129', '182', '1873', '132'); -INSERT INTO cp_tree VALUES ('1877', '4', '130', '182', '1876', '131'); -INSERT INTO cp_tree VALUES ('1878', '2', '134', '182', '1811', '143'); -INSERT INTO cp_tree VALUES ('1879', '3', '135', '182', '1878', '138'); -INSERT INTO cp_tree VALUES ('1880', '4', '136', '182', '1879', '137'); -INSERT INTO cp_tree VALUES ('1881', '3', '139', '182', '1878', '142'); -INSERT INTO cp_tree VALUES ('1882', '4', '140', '182', '1881', '141'); -INSERT INTO cp_tree VALUES ('1883', '2', '144', '182', '1811', '159'); -INSERT INTO cp_tree VALUES ('1884', '3', '145', '182', '1883', '150'); -INSERT INTO cp_tree VALUES ('1885', '4', '146', '182', '1884', '147'); -INSERT INTO cp_tree VALUES ('1886', '4', '148', '182', '1884', '149'); -INSERT INTO cp_tree VALUES ('1887', '3', '151', '182', '1883', '154'); -INSERT INTO cp_tree VALUES ('1888', '4', '152', '182', '1887', '153'); -INSERT INTO cp_tree VALUES ('1889', '3', '155', '182', '1883', '158'); -INSERT INTO cp_tree VALUES ('1890', '4', '156', '182', '1889', '157'); -INSERT INTO cp_tree VALUES ('1891', '2', '160', '182', '1811', '161'); -INSERT INTO cp_tree VALUES ('1892', '2', '162', '182', '1811', '163'); -INSERT INTO cp_tree VALUES ('1893', '1', '1', '183', '0', '138'); -INSERT INTO cp_tree VALUES ('1894', '2', '2', '183', '1893', '53'); -INSERT INTO cp_tree VALUES ('1895', '3', '3', '183', '1894', '10'); -INSERT INTO cp_tree VALUES ('1896', '4', '4', '183', '1895', '5'); -INSERT INTO cp_tree VALUES ('1897', '4', '6', '183', '1895', '7'); -INSERT INTO cp_tree VALUES ('1898', '4', '8', '183', '1895', '9'); -INSERT INTO cp_tree VALUES ('1899', '3', '11', '183', '1894', '18'); -INSERT INTO cp_tree VALUES ('1900', '4', '12', '183', '1899', '13'); -INSERT INTO cp_tree VALUES ('1901', '4', '14', '183', '1899', '15'); -INSERT INTO cp_tree VALUES ('1902', '4', '16', '183', '1899', '17'); -INSERT INTO cp_tree VALUES ('1903', '3', '19', '183', '1894', '44'); -INSERT INTO cp_tree VALUES ('1904', '4', '20', '183', '1903', '27'); -INSERT INTO cp_tree VALUES ('1905', '5', '21', '183', '1904', '22'); -INSERT INTO cp_tree VALUES ('1906', '5', '23', '183', '1904', '24'); -INSERT INTO cp_tree VALUES ('1907', '5', '25', '183', '1904', '26'); -INSERT INTO cp_tree VALUES ('1908', '4', '28', '183', '1903', '35'); -INSERT INTO cp_tree VALUES ('1909', '5', '29', '183', '1908', '30'); -INSERT INTO cp_tree VALUES ('1910', '5', '31', '183', '1908', '32'); -INSERT INTO cp_tree VALUES ('1911', '5', '33', '183', '1908', '34'); -INSERT INTO cp_tree VALUES ('1912', '4', '36', '183', '1903', '43'); -INSERT INTO cp_tree VALUES ('1913', '5', '37', '183', '1912', '38'); -INSERT INTO cp_tree VALUES ('1914', '5', '39', '183', '1912', '40'); -INSERT INTO cp_tree VALUES ('1915', '5', '41', '183', '1912', '42'); -INSERT INTO cp_tree VALUES ('1916', '3', '45', '183', '1894', '52'); -INSERT INTO cp_tree VALUES ('1917', '4', '46', '183', '1916', '47'); -INSERT INTO cp_tree VALUES ('1918', '4', '48', '183', '1916', '49'); -INSERT INTO cp_tree VALUES ('1919', '4', '50', '183', '1916', '51'); -INSERT INTO cp_tree VALUES ('1920', '2', '54', '183', '1893', '67'); -INSERT INTO cp_tree VALUES ('1921', '3', '55', '183', '1920', '56'); -INSERT INTO cp_tree VALUES ('1922', '3', '57', '183', '1920', '58'); -INSERT INTO cp_tree VALUES ('1923', '3', '59', '183', '1920', '60'); -INSERT INTO cp_tree VALUES ('1924', '3', '61', '183', '1920', '62'); -INSERT INTO cp_tree VALUES ('1925', '3', '63', '183', '1920', '64'); -INSERT INTO cp_tree VALUES ('1926', '3', '65', '183', '1920', '66'); -INSERT INTO cp_tree VALUES ('1927', '2', '68', '183', '1893', '71'); -INSERT INTO cp_tree VALUES ('1928', '3', '69', '183', '1927', '70'); -INSERT INTO cp_tree VALUES ('1929', '2', '72', '183', '1893', '75'); -INSERT INTO cp_tree VALUES ('1930', '3', '73', '183', '1929', '74'); -INSERT INTO cp_tree VALUES ('1931', '2', '76', '183', '1893', '79'); -INSERT INTO cp_tree VALUES ('1932', '3', '77', '183', '1931', '78'); -INSERT INTO cp_tree VALUES ('1933', '2', '80', '183', '1893', '85'); -INSERT INTO cp_tree VALUES ('1934', '3', '81', '183', '1933', '82'); -INSERT INTO cp_tree VALUES ('1935', '3', '83', '183', '1933', '84'); -INSERT INTO cp_tree VALUES ('1936', '2', '86', '183', '1893', '89'); -INSERT INTO cp_tree VALUES ('1937', '3', '87', '183', '1936', '88'); -INSERT INTO cp_tree VALUES ('1938', '2', '90', '183', '1893', '93'); -INSERT INTO cp_tree VALUES ('1939', '3', '91', '183', '1938', '92'); -INSERT INTO cp_tree VALUES ('1940', '2', '94', '183', '1893', '101'); -INSERT INTO cp_tree VALUES ('1941', '3', '95', '183', '1940', '100'); -INSERT INTO cp_tree VALUES ('1942', '4', '96', '183', '1941', '97'); -INSERT INTO cp_tree VALUES ('1943', '4', '98', '183', '1941', '99'); -INSERT INTO cp_tree VALUES ('1944', '2', '102', '183', '1893', '107'); -INSERT INTO cp_tree VALUES ('1945', '3', '103', '183', '1944', '106'); -INSERT INTO cp_tree VALUES ('1946', '4', '104', '183', '1945', '105'); -INSERT INTO cp_tree VALUES ('1947', '2', '108', '183', '1893', '113'); -INSERT INTO cp_tree VALUES ('1948', '3', '109', '183', '1947', '112'); -INSERT INTO cp_tree VALUES ('1949', '4', '110', '183', '1948', '111'); -INSERT INTO cp_tree VALUES ('1950', '2', '114', '183', '1893', '119'); -INSERT INTO cp_tree VALUES ('1951', '3', '115', '183', '1950', '118'); -INSERT INTO cp_tree VALUES ('1952', '4', '116', '183', '1951', '117'); -INSERT INTO cp_tree VALUES ('1953', '2', '120', '183', '1893', '125'); -INSERT INTO cp_tree VALUES ('1954', '3', '121', '183', '1953', '124'); -INSERT INTO cp_tree VALUES ('1955', '4', '122', '183', '1954', '123'); -INSERT INTO cp_tree VALUES ('1956', '2', '126', '183', '1893', '135'); -INSERT INTO cp_tree VALUES ('1957', '3', '127', '183', '1956', '130'); -INSERT INTO cp_tree VALUES ('1958', '4', '128', '183', '1957', '129'); -INSERT INTO cp_tree VALUES ('1959', '3', '131', '183', '1956', '134'); -INSERT INTO cp_tree VALUES ('1960', '4', '132', '183', '1959', '133'); -INSERT INTO cp_tree VALUES ('1961', '2', '136', '183', '1893', '137'); -INSERT INTO cp_tree VALUES ('1962', '1', '1', '184', '0', '104'); -INSERT INTO cp_tree VALUES ('1963', '2', '2', '184', '1962', '35'); -INSERT INTO cp_tree VALUES ('1964', '3', '3', '184', '1963', '10'); -INSERT INTO cp_tree VALUES ('1965', '4', '4', '184', '1964', '5'); -INSERT INTO cp_tree VALUES ('1966', '4', '6', '184', '1964', '7'); -INSERT INTO cp_tree VALUES ('1967', '4', '8', '184', '1964', '9'); -INSERT INTO cp_tree VALUES ('1968', '3', '11', '184', '1963', '18'); -INSERT INTO cp_tree VALUES ('1969', '4', '12', '184', '1968', '13'); -INSERT INTO cp_tree VALUES ('1970', '4', '14', '184', '1968', '15'); -INSERT INTO cp_tree VALUES ('1971', '4', '16', '184', '1968', '17'); -INSERT INTO cp_tree VALUES ('1972', '3', '19', '184', '1963', '26'); -INSERT INTO cp_tree VALUES ('1973', '4', '20', '184', '1972', '21'); -INSERT INTO cp_tree VALUES ('1974', '4', '22', '184', '1972', '23'); -INSERT INTO cp_tree VALUES ('1975', '4', '24', '184', '1972', '25'); -INSERT INTO cp_tree VALUES ('1976', '3', '27', '184', '1963', '34'); -INSERT INTO cp_tree VALUES ('1977', '4', '28', '184', '1976', '29'); -INSERT INTO cp_tree VALUES ('1978', '4', '30', '184', '1976', '31'); -INSERT INTO cp_tree VALUES ('1979', '4', '32', '184', '1976', '33'); -INSERT INTO cp_tree VALUES ('1980', '2', '36', '184', '1962', '49'); -INSERT INTO cp_tree VALUES ('1981', '3', '37', '184', '1980', '38'); -INSERT INTO cp_tree VALUES ('1982', '3', '39', '184', '1980', '40'); -INSERT INTO cp_tree VALUES ('1983', '3', '41', '184', '1980', '42'); -INSERT INTO cp_tree VALUES ('1984', '3', '43', '184', '1980', '44'); -INSERT INTO cp_tree VALUES ('1985', '3', '45', '184', '1980', '46'); -INSERT INTO cp_tree VALUES ('1986', '3', '47', '184', '1980', '48'); -INSERT INTO cp_tree VALUES ('1987', '2', '50', '184', '1962', '53'); -INSERT INTO cp_tree VALUES ('1988', '3', '51', '184', '1987', '52'); -INSERT INTO cp_tree VALUES ('1989', '2', '54', '184', '1962', '57'); -INSERT INTO cp_tree VALUES ('1990', '3', '55', '184', '1989', '56'); -INSERT INTO cp_tree VALUES ('1991', '2', '58', '184', '1962', '61'); -INSERT INTO cp_tree VALUES ('1992', '3', '59', '184', '1991', '60'); -INSERT INTO cp_tree VALUES ('1993', '2', '62', '184', '1962', '67'); -INSERT INTO cp_tree VALUES ('1994', '3', '63', '184', '1993', '64'); -INSERT INTO cp_tree VALUES ('1995', '3', '65', '184', '1993', '66'); -INSERT INTO cp_tree VALUES ('1996', '2', '68', '184', '1962', '71'); -INSERT INTO cp_tree VALUES ('1997', '3', '69', '184', '1996', '70'); -INSERT INTO cp_tree VALUES ('1998', '2', '72', '184', '1962', '75'); -INSERT INTO cp_tree VALUES ('1999', '3', '73', '184', '1998', '74'); -INSERT INTO cp_tree VALUES ('2000', '2', '76', '184', '1962', '81'); -INSERT INTO cp_tree VALUES ('2001', '3', '77', '184', '2000', '80'); -INSERT INTO cp_tree VALUES ('2002', '4', '78', '184', '2001', '79'); -INSERT INTO cp_tree VALUES ('2003', '2', '82', '184', '1962', '91'); -INSERT INTO cp_tree VALUES ('2004', '3', '83', '184', '2003', '86'); -INSERT INTO cp_tree VALUES ('2005', '4', '84', '184', '2004', '85'); -INSERT INTO cp_tree VALUES ('2006', '3', '87', '184', '2003', '90'); -INSERT INTO cp_tree VALUES ('2007', '4', '88', '184', '2006', '89'); -INSERT INTO cp_tree VALUES ('2008', '2', '92', '184', '1962', '101'); -INSERT INTO cp_tree VALUES ('2009', '3', '93', '184', '2008', '96'); -INSERT INTO cp_tree VALUES ('2010', '4', '94', '184', '2009', '95'); -INSERT INTO cp_tree VALUES ('2011', '3', '97', '184', '2008', '100'); -INSERT INTO cp_tree VALUES ('2012', '4', '98', '184', '2011', '99'); -INSERT INTO cp_tree VALUES ('2013', '2', '102', '184', '1962', '103'); -INSERT INTO cp_tree VALUES ('2014', '1', '1', '185', '0', '104'); -INSERT INTO cp_tree VALUES ('2015', '2', '2', '185', '2014', '35'); -INSERT INTO cp_tree VALUES ('2016', '3', '3', '185', '2015', '10'); -INSERT INTO cp_tree VALUES ('2017', '4', '4', '185', '2016', '5'); -INSERT INTO cp_tree VALUES ('2018', '4', '6', '185', '2016', '7'); -INSERT INTO cp_tree VALUES ('2019', '4', '8', '185', '2016', '9'); -INSERT INTO cp_tree VALUES ('2020', '3', '11', '185', '2015', '18'); -INSERT INTO cp_tree VALUES ('2021', '4', '12', '185', '2020', '13'); -INSERT INTO cp_tree VALUES ('2022', '4', '14', '185', '2020', '15'); -INSERT INTO cp_tree VALUES ('2023', '4', '16', '185', '2020', '17'); -INSERT INTO cp_tree VALUES ('2024', '3', '19', '185', '2015', '26'); -INSERT INTO cp_tree VALUES ('2025', '4', '20', '185', '2024', '21'); -INSERT INTO cp_tree VALUES ('2026', '4', '22', '185', '2024', '23'); -INSERT INTO cp_tree VALUES ('2027', '4', '24', '185', '2024', '25'); -INSERT INTO cp_tree VALUES ('2028', '3', '27', '185', '2015', '34'); -INSERT INTO cp_tree VALUES ('2029', '4', '28', '185', '2028', '29'); -INSERT INTO cp_tree VALUES ('2030', '4', '30', '185', '2028', '31'); -INSERT INTO cp_tree VALUES ('2031', '4', '32', '185', '2028', '33'); -INSERT INTO cp_tree VALUES ('2032', '2', '36', '185', '2014', '49'); -INSERT INTO cp_tree VALUES ('2033', '3', '37', '185', '2032', '38'); -INSERT INTO cp_tree VALUES ('2034', '3', '39', '185', '2032', '40'); -INSERT INTO cp_tree VALUES ('2035', '3', '41', '185', '2032', '42'); -INSERT INTO cp_tree VALUES ('2036', '3', '43', '185', '2032', '44'); -INSERT INTO cp_tree VALUES ('2037', '3', '45', '185', '2032', '46'); -INSERT INTO cp_tree VALUES ('2038', '3', '47', '185', '2032', '48'); -INSERT INTO cp_tree VALUES ('2039', '2', '50', '185', '2014', '53'); -INSERT INTO cp_tree VALUES ('2040', '3', '51', '185', '2039', '52'); -INSERT INTO cp_tree VALUES ('2041', '2', '54', '185', '2014', '57'); -INSERT INTO cp_tree VALUES ('2042', '3', '55', '185', '2041', '56'); -INSERT INTO cp_tree VALUES ('2043', '2', '58', '185', '2014', '61'); -INSERT INTO cp_tree VALUES ('2044', '3', '59', '185', '2043', '60'); -INSERT INTO cp_tree VALUES ('2045', '2', '62', '185', '2014', '67'); -INSERT INTO cp_tree VALUES ('2046', '3', '63', '185', '2045', '64'); -INSERT INTO cp_tree VALUES ('2047', '3', '65', '185', '2045', '66'); -INSERT INTO cp_tree VALUES ('2048', '2', '68', '185', '2014', '71'); -INSERT INTO cp_tree VALUES ('2049', '3', '69', '185', '2048', '70'); -INSERT INTO cp_tree VALUES ('2050', '2', '72', '185', '2014', '75'); -INSERT INTO cp_tree VALUES ('2051', '3', '73', '185', '2050', '74'); -INSERT INTO cp_tree VALUES ('2052', '2', '76', '185', '2014', '81'); -INSERT INTO cp_tree VALUES ('2053', '3', '77', '185', '2052', '80'); -INSERT INTO cp_tree VALUES ('2054', '4', '78', '185', '2053', '79'); -INSERT INTO cp_tree VALUES ('2055', '2', '82', '185', '2014', '91'); -INSERT INTO cp_tree VALUES ('2056', '3', '83', '185', '2055', '86'); -INSERT INTO cp_tree VALUES ('2057', '4', '84', '185', '2056', '85'); -INSERT INTO cp_tree VALUES ('2058', '3', '87', '185', '2055', '90'); -INSERT INTO cp_tree VALUES ('2059', '4', '88', '185', '2058', '89'); -INSERT INTO cp_tree VALUES ('2060', '2', '92', '185', '2014', '101'); -INSERT INTO cp_tree VALUES ('2061', '3', '93', '185', '2060', '96'); -INSERT INTO cp_tree VALUES ('2062', '4', '94', '185', '2061', '95'); -INSERT INTO cp_tree VALUES ('2063', '3', '97', '185', '2060', '100'); -INSERT INTO cp_tree VALUES ('2064', '4', '98', '185', '2063', '99'); -INSERT INTO cp_tree VALUES ('2065', '2', '102', '185', '2014', '103'); -INSERT INTO cp_tree VALUES ('2066', '1', '1', '186', '0', '86'); -INSERT INTO cp_tree VALUES ('2067', '2', '2', '186', '2066', '27'); -INSERT INTO cp_tree VALUES ('2068', '3', '3', '186', '2067', '10'); -INSERT INTO cp_tree VALUES ('2069', '4', '4', '186', '2068', '5'); -INSERT INTO cp_tree VALUES ('2070', '4', '6', '186', '2068', '7'); -INSERT INTO cp_tree VALUES ('2071', '4', '8', '186', '2068', '9'); -INSERT INTO cp_tree VALUES ('2072', '3', '11', '186', '2067', '18'); -INSERT INTO cp_tree VALUES ('2073', '4', '12', '186', '2072', '13'); -INSERT INTO cp_tree VALUES ('2074', '4', '14', '186', '2072', '15'); -INSERT INTO cp_tree VALUES ('2075', '4', '16', '186', '2072', '17'); -INSERT INTO cp_tree VALUES ('2076', '3', '19', '186', '2067', '26'); -INSERT INTO cp_tree VALUES ('2077', '4', '20', '186', '2076', '21'); -INSERT INTO cp_tree VALUES ('2078', '4', '22', '186', '2076', '23'); -INSERT INTO cp_tree VALUES ('2079', '4', '24', '186', '2076', '25'); -INSERT INTO cp_tree VALUES ('2080', '2', '28', '186', '2066', '41'); -INSERT INTO cp_tree VALUES ('2081', '3', '29', '186', '2080', '30'); -INSERT INTO cp_tree VALUES ('2082', '3', '31', '186', '2080', '32'); -INSERT INTO cp_tree VALUES ('2083', '3', '33', '186', '2080', '34'); -INSERT INTO cp_tree VALUES ('2084', '3', '35', '186', '2080', '36'); -INSERT INTO cp_tree VALUES ('2085', '3', '37', '186', '2080', '38'); -INSERT INTO cp_tree VALUES ('2086', '3', '39', '186', '2080', '40'); -INSERT INTO cp_tree VALUES ('2087', '2', '42', '186', '2066', '45'); -INSERT INTO cp_tree VALUES ('2088', '3', '43', '186', '2087', '44'); -INSERT INTO cp_tree VALUES ('2089', '2', '46', '186', '2066', '49'); -INSERT INTO cp_tree VALUES ('2090', '3', '47', '186', '2089', '48'); -INSERT INTO cp_tree VALUES ('2091', '2', '50', '186', '2066', '53'); -INSERT INTO cp_tree VALUES ('2092', '3', '51', '186', '2091', '52'); -INSERT INTO cp_tree VALUES ('2093', '2', '54', '186', '2066', '59'); -INSERT INTO cp_tree VALUES ('2094', '3', '55', '186', '2093', '56'); -INSERT INTO cp_tree VALUES ('2095', '3', '57', '186', '2093', '58'); -INSERT INTO cp_tree VALUES ('2096', '2', '60', '186', '2066', '63'); -INSERT INTO cp_tree VALUES ('2097', '3', '61', '186', '2096', '62'); -INSERT INTO cp_tree VALUES ('2098', '2', '64', '186', '2066', '67'); -INSERT INTO cp_tree VALUES ('2099', '3', '65', '186', '2098', '66'); -INSERT INTO cp_tree VALUES ('2100', '2', '68', '186', '2066', '73'); -INSERT INTO cp_tree VALUES ('2101', '3', '69', '186', '2100', '72'); -INSERT INTO cp_tree VALUES ('2102', '4', '70', '186', '2101', '71'); -INSERT INTO cp_tree VALUES ('2103', '2', '74', '186', '2066', '83'); -INSERT INTO cp_tree VALUES ('2104', '3', '75', '186', '2103', '78'); -INSERT INTO cp_tree VALUES ('2105', '4', '76', '186', '2104', '77'); -INSERT INTO cp_tree VALUES ('2106', '3', '79', '186', '2103', '82'); -INSERT INTO cp_tree VALUES ('2107', '4', '80', '186', '2106', '81'); -INSERT INTO cp_tree VALUES ('2108', '2', '84', '186', '2066', '85'); -INSERT INTO cp_tree VALUES ('2109', '1', '1', '187', '0', '112'); -INSERT INTO cp_tree VALUES ('2110', '2', '2', '187', '2109', '45'); -INSERT INTO cp_tree VALUES ('2111', '3', '3', '187', '2110', '10'); -INSERT INTO cp_tree VALUES ('2112', '4', '4', '187', '2111', '5'); -INSERT INTO cp_tree VALUES ('2113', '4', '6', '187', '2111', '7'); -INSERT INTO cp_tree VALUES ('2114', '4', '8', '187', '2111', '9'); -INSERT INTO cp_tree VALUES ('2115', '3', '11', '187', '2110', '36'); -INSERT INTO cp_tree VALUES ('2116', '4', '12', '187', '2115', '19'); -INSERT INTO cp_tree VALUES ('2117', '5', '13', '187', '2116', '14'); -INSERT INTO cp_tree VALUES ('2118', '5', '15', '187', '2116', '16'); -INSERT INTO cp_tree VALUES ('2119', '5', '17', '187', '2116', '18'); -INSERT INTO cp_tree VALUES ('2120', '4', '20', '187', '2115', '27'); -INSERT INTO cp_tree VALUES ('2121', '5', '21', '187', '2120', '22'); -INSERT INTO cp_tree VALUES ('2122', '5', '23', '187', '2120', '24'); -INSERT INTO cp_tree VALUES ('2123', '5', '25', '187', '2120', '26'); -INSERT INTO cp_tree VALUES ('2124', '4', '28', '187', '2115', '35'); -INSERT INTO cp_tree VALUES ('2125', '5', '29', '187', '2124', '30'); -INSERT INTO cp_tree VALUES ('2126', '5', '31', '187', '2124', '32'); -INSERT INTO cp_tree VALUES ('2127', '5', '33', '187', '2124', '34'); -INSERT INTO cp_tree VALUES ('2128', '3', '37', '187', '2110', '44'); -INSERT INTO cp_tree VALUES ('2129', '4', '38', '187', '2128', '39'); -INSERT INTO cp_tree VALUES ('2130', '4', '40', '187', '2128', '41'); -INSERT INTO cp_tree VALUES ('2131', '4', '42', '187', '2128', '43'); -INSERT INTO cp_tree VALUES ('2132', '2', '46', '187', '2109', '59'); -INSERT INTO cp_tree VALUES ('2133', '3', '47', '187', '2132', '48'); -INSERT INTO cp_tree VALUES ('2134', '3', '49', '187', '2132', '50'); -INSERT INTO cp_tree VALUES ('2135', '3', '51', '187', '2132', '52'); -INSERT INTO cp_tree VALUES ('2136', '3', '53', '187', '2132', '54'); -INSERT INTO cp_tree VALUES ('2137', '3', '55', '187', '2132', '56'); -INSERT INTO cp_tree VALUES ('2138', '3', '57', '187', '2132', '58'); -INSERT INTO cp_tree VALUES ('2139', '2', '60', '187', '2109', '63'); -INSERT INTO cp_tree VALUES ('2140', '3', '61', '187', '2139', '62'); -INSERT INTO cp_tree VALUES ('2141', '2', '64', '187', '2109', '67'); -INSERT INTO cp_tree VALUES ('2142', '3', '65', '187', '2141', '66'); -INSERT INTO cp_tree VALUES ('2143', '2', '68', '187', '2109', '71'); -INSERT INTO cp_tree VALUES ('2144', '3', '69', '187', '2143', '70'); -INSERT INTO cp_tree VALUES ('2145', '2', '72', '187', '2109', '77'); -INSERT INTO cp_tree VALUES ('2146', '3', '73', '187', '2145', '74'); -INSERT INTO cp_tree VALUES ('2147', '3', '75', '187', '2145', '76'); -INSERT INTO cp_tree VALUES ('2148', '2', '78', '187', '2109', '81'); -INSERT INTO cp_tree VALUES ('2149', '3', '79', '187', '2148', '80'); -INSERT INTO cp_tree VALUES ('2150', '2', '82', '187', '2109', '85'); -INSERT INTO cp_tree VALUES ('2151', '3', '83', '187', '2150', '84'); -INSERT INTO cp_tree VALUES ('2152', '2', '86', '187', '2109', '91'); -INSERT INTO cp_tree VALUES ('2153', '3', '87', '187', '2152', '90'); -INSERT INTO cp_tree VALUES ('2154', '4', '88', '187', '2153', '89'); -INSERT INTO cp_tree VALUES ('2155', '2', '92', '187', '2109', '109'); -INSERT INTO cp_tree VALUES ('2156', '3', '93', '187', '2155', '98'); -INSERT INTO cp_tree VALUES ('2157', '4', '94', '187', '2156', '95'); -INSERT INTO cp_tree VALUES ('2158', '4', '96', '187', '2156', '97'); -INSERT INTO cp_tree VALUES ('2159', '3', '99', '187', '2155', '104'); -INSERT INTO cp_tree VALUES ('2160', '4', '100', '187', '2159', '101'); -INSERT INTO cp_tree VALUES ('2161', '4', '102', '187', '2159', '103'); -INSERT INTO cp_tree VALUES ('2162', '3', '105', '187', '2155', '108'); -INSERT INTO cp_tree VALUES ('2163', '4', '106', '187', '2162', '107'); -INSERT INTO cp_tree VALUES ('2164', '2', '110', '187', '2109', '111'); -INSERT INTO cp_tree VALUES ('2165', '1', '1', '188', '0', '96'); -INSERT INTO cp_tree VALUES ('2166', '2', '2', '188', '2165', '27'); -INSERT INTO cp_tree VALUES ('2167', '3', '3', '188', '2166', '10'); -INSERT INTO cp_tree VALUES ('2168', '4', '4', '188', '2167', '5'); -INSERT INTO cp_tree VALUES ('2169', '4', '6', '188', '2167', '7'); -INSERT INTO cp_tree VALUES ('2170', '4', '8', '188', '2167', '9'); -INSERT INTO cp_tree VALUES ('2171', '3', '11', '188', '2166', '18'); -INSERT INTO cp_tree VALUES ('2172', '4', '12', '188', '2171', '13'); -INSERT INTO cp_tree VALUES ('2173', '4', '14', '188', '2171', '15'); -INSERT INTO cp_tree VALUES ('2174', '4', '16', '188', '2171', '17'); -INSERT INTO cp_tree VALUES ('2175', '3', '19', '188', '2166', '26'); -INSERT INTO cp_tree VALUES ('2176', '4', '20', '188', '2175', '21'); -INSERT INTO cp_tree VALUES ('2177', '4', '22', '188', '2175', '23'); -INSERT INTO cp_tree VALUES ('2178', '4', '24', '188', '2175', '25'); -INSERT INTO cp_tree VALUES ('2179', '2', '28', '188', '2165', '41'); -INSERT INTO cp_tree VALUES ('2180', '3', '29', '188', '2179', '30'); -INSERT INTO cp_tree VALUES ('2181', '3', '31', '188', '2179', '32'); -INSERT INTO cp_tree VALUES ('2182', '3', '33', '188', '2179', '34'); -INSERT INTO cp_tree VALUES ('2183', '3', '35', '188', '2179', '36'); -INSERT INTO cp_tree VALUES ('2184', '3', '37', '188', '2179', '38'); -INSERT INTO cp_tree VALUES ('2185', '3', '39', '188', '2179', '40'); -INSERT INTO cp_tree VALUES ('2186', '2', '42', '188', '2165', '45'); -INSERT INTO cp_tree VALUES ('2187', '3', '43', '188', '2186', '44'); -INSERT INTO cp_tree VALUES ('2188', '2', '46', '188', '2165', '49'); -INSERT INTO cp_tree VALUES ('2189', '3', '47', '188', '2188', '48'); -INSERT INTO cp_tree VALUES ('2190', '2', '50', '188', '2165', '53'); -INSERT INTO cp_tree VALUES ('2191', '3', '51', '188', '2190', '52'); -INSERT INTO cp_tree VALUES ('2192', '2', '54', '188', '2165', '59'); -INSERT INTO cp_tree VALUES ('2193', '3', '55', '188', '2192', '56'); -INSERT INTO cp_tree VALUES ('2194', '3', '57', '188', '2192', '58'); -INSERT INTO cp_tree VALUES ('2195', '2', '60', '188', '2165', '63'); -INSERT INTO cp_tree VALUES ('2196', '3', '61', '188', '2195', '62'); -INSERT INTO cp_tree VALUES ('2197', '2', '64', '188', '2165', '67'); -INSERT INTO cp_tree VALUES ('2198', '3', '65', '188', '2197', '66'); -INSERT INTO cp_tree VALUES ('2199', '2', '68', '188', '2165', '73'); -INSERT INTO cp_tree VALUES ('2200', '3', '69', '188', '2199', '72'); -INSERT INTO cp_tree VALUES ('2201', '4', '70', '188', '2200', '71'); -INSERT INTO cp_tree VALUES ('2202', '2', '74', '188', '2165', '85'); -INSERT INTO cp_tree VALUES ('2203', '3', '75', '188', '2202', '80'); -INSERT INTO cp_tree VALUES ('2204', '4', '76', '188', '2203', '77'); -INSERT INTO cp_tree VALUES ('2205', '4', '78', '188', '2203', '79'); -INSERT INTO cp_tree VALUES ('2206', '3', '81', '188', '2202', '84'); -INSERT INTO cp_tree VALUES ('2207', '4', '82', '188', '2206', '83'); -INSERT INTO cp_tree VALUES ('2208', '2', '86', '188', '2165', '93'); -INSERT INTO cp_tree VALUES ('2209', '3', '87', '188', '2208', '88'); -INSERT INTO cp_tree VALUES ('2210', '3', '89', '188', '2208', '92'); -INSERT INTO cp_tree VALUES ('2211', '4', '90', '188', '2210', '91'); -INSERT INTO cp_tree VALUES ('2212', '2', '94', '188', '2165', '95'); -INSERT INTO cp_tree VALUES ('2213', '1', '1', '189', '0', '94'); -INSERT INTO cp_tree VALUES ('2214', '2', '2', '189', '2213', '27'); -INSERT INTO cp_tree VALUES ('2215', '3', '3', '189', '2214', '10'); -INSERT INTO cp_tree VALUES ('2216', '4', '4', '189', '2215', '5'); -INSERT INTO cp_tree VALUES ('2217', '4', '6', '189', '2215', '7'); -INSERT INTO cp_tree VALUES ('2218', '4', '8', '189', '2215', '9'); -INSERT INTO cp_tree VALUES ('2219', '3', '11', '189', '2214', '18'); -INSERT INTO cp_tree VALUES ('2220', '4', '12', '189', '2219', '13'); -INSERT INTO cp_tree VALUES ('2221', '4', '14', '189', '2219', '15'); -INSERT INTO cp_tree VALUES ('2222', '4', '16', '189', '2219', '17'); -INSERT INTO cp_tree VALUES ('2223', '3', '19', '189', '2214', '26'); -INSERT INTO cp_tree VALUES ('2224', '4', '20', '189', '2223', '21'); -INSERT INTO cp_tree VALUES ('2225', '4', '22', '189', '2223', '23'); -INSERT INTO cp_tree VALUES ('2226', '4', '24', '189', '2223', '25'); -INSERT INTO cp_tree VALUES ('2227', '2', '28', '189', '2213', '41'); -INSERT INTO cp_tree VALUES ('2228', '3', '29', '189', '2227', '30'); -INSERT INTO cp_tree VALUES ('2229', '3', '31', '189', '2227', '32'); -INSERT INTO cp_tree VALUES ('2230', '3', '33', '189', '2227', '34'); -INSERT INTO cp_tree VALUES ('2231', '3', '35', '189', '2227', '36'); -INSERT INTO cp_tree VALUES ('2232', '3', '37', '189', '2227', '38'); -INSERT INTO cp_tree VALUES ('2233', '3', '39', '189', '2227', '40'); -INSERT INTO cp_tree VALUES ('2234', '2', '42', '189', '2213', '45'); -INSERT INTO cp_tree VALUES ('2235', '3', '43', '189', '2234', '44'); -INSERT INTO cp_tree VALUES ('2236', '2', '46', '189', '2213', '49'); -INSERT INTO cp_tree VALUES ('2237', '3', '47', '189', '2236', '48'); -INSERT INTO cp_tree VALUES ('2238', '2', '50', '189', '2213', '53'); -INSERT INTO cp_tree VALUES ('2239', '3', '51', '189', '2238', '52'); -INSERT INTO cp_tree VALUES ('2240', '2', '54', '189', '2213', '59'); -INSERT INTO cp_tree VALUES ('2241', '3', '55', '189', '2240', '56'); -INSERT INTO cp_tree VALUES ('2242', '3', '57', '189', '2240', '58'); -INSERT INTO cp_tree VALUES ('2243', '2', '60', '189', '2213', '63'); -INSERT INTO cp_tree VALUES ('2244', '3', '61', '189', '2243', '62'); -INSERT INTO cp_tree VALUES ('2245', '2', '64', '189', '2213', '67'); -INSERT INTO cp_tree VALUES ('2246', '3', '65', '189', '2245', '66'); -INSERT INTO cp_tree VALUES ('2247', '2', '68', '189', '2213', '73'); -INSERT INTO cp_tree VALUES ('2248', '3', '69', '189', '2247', '72'); -INSERT INTO cp_tree VALUES ('2249', '4', '70', '189', '2248', '71'); -INSERT INTO cp_tree VALUES ('2250', '2', '74', '189', '2213', '83'); -INSERT INTO cp_tree VALUES ('2251', '3', '75', '189', '2250', '78'); -INSERT INTO cp_tree VALUES ('2252', '4', '76', '189', '2251', '77'); -INSERT INTO cp_tree VALUES ('2253', '3', '79', '189', '2250', '82'); -INSERT INTO cp_tree VALUES ('2254', '4', '80', '189', '2253', '81'); -INSERT INTO cp_tree VALUES ('2255', '2', '84', '189', '2213', '91'); -INSERT INTO cp_tree VALUES ('2256', '3', '85', '189', '2255', '86'); -INSERT INTO cp_tree VALUES ('2257', '3', '87', '189', '2255', '90'); -INSERT INTO cp_tree VALUES ('2258', '4', '88', '189', '2257', '89'); -INSERT INTO cp_tree VALUES ('2259', '2', '92', '189', '2213', '93'); -INSERT INTO cp_tree VALUES ('2260', '1', '1', '190', '0', '128'); -INSERT INTO cp_tree VALUES ('2261', '2', '2', '190', '2260', '35'); -INSERT INTO cp_tree VALUES ('2262', '3', '3', '190', '2261', '10'); -INSERT INTO cp_tree VALUES ('2263', '4', '4', '190', '2262', '5'); -INSERT INTO cp_tree VALUES ('2264', '4', '6', '190', '2262', '7'); -INSERT INTO cp_tree VALUES ('2265', '4', '8', '190', '2262', '9'); -INSERT INTO cp_tree VALUES ('2266', '3', '11', '190', '2261', '18'); -INSERT INTO cp_tree VALUES ('2267', '4', '12', '190', '2266', '13'); -INSERT INTO cp_tree VALUES ('2268', '4', '14', '190', '2266', '15'); -INSERT INTO cp_tree VALUES ('2269', '4', '16', '190', '2266', '17'); -INSERT INTO cp_tree VALUES ('2270', '3', '19', '190', '2261', '26'); -INSERT INTO cp_tree VALUES ('2271', '4', '20', '190', '2270', '21'); -INSERT INTO cp_tree VALUES ('2272', '4', '22', '190', '2270', '23'); -INSERT INTO cp_tree VALUES ('2273', '4', '24', '190', '2270', '25'); -INSERT INTO cp_tree VALUES ('2274', '3', '27', '190', '2261', '34'); -INSERT INTO cp_tree VALUES ('2275', '4', '28', '190', '2274', '29'); -INSERT INTO cp_tree VALUES ('2276', '4', '30', '190', '2274', '31'); -INSERT INTO cp_tree VALUES ('2277', '4', '32', '190', '2274', '33'); -INSERT INTO cp_tree VALUES ('2278', '2', '36', '190', '2260', '49'); -INSERT INTO cp_tree VALUES ('2279', '3', '37', '190', '2278', '38'); -INSERT INTO cp_tree VALUES ('2280', '3', '39', '190', '2278', '40'); -INSERT INTO cp_tree VALUES ('2281', '3', '41', '190', '2278', '42'); -INSERT INTO cp_tree VALUES ('2282', '3', '43', '190', '2278', '44'); -INSERT INTO cp_tree VALUES ('2283', '3', '45', '190', '2278', '46'); -INSERT INTO cp_tree VALUES ('2284', '3', '47', '190', '2278', '48'); -INSERT INTO cp_tree VALUES ('2285', '2', '50', '190', '2260', '53'); -INSERT INTO cp_tree VALUES ('2286', '3', '51', '190', '2285', '52'); -INSERT INTO cp_tree VALUES ('2287', '2', '54', '190', '2260', '57'); -INSERT INTO cp_tree VALUES ('2288', '3', '55', '190', '2287', '56'); -INSERT INTO cp_tree VALUES ('2289', '2', '58', '190', '2260', '61'); -INSERT INTO cp_tree VALUES ('2290', '3', '59', '190', '2289', '60'); -INSERT INTO cp_tree VALUES ('2291', '2', '62', '190', '2260', '67'); -INSERT INTO cp_tree VALUES ('2292', '3', '63', '190', '2291', '64'); -INSERT INTO cp_tree VALUES ('2293', '3', '65', '190', '2291', '66'); -INSERT INTO cp_tree VALUES ('2294', '2', '68', '190', '2260', '71'); -INSERT INTO cp_tree VALUES ('2295', '3', '69', '190', '2294', '70'); -INSERT INTO cp_tree VALUES ('2296', '2', '72', '190', '2260', '75'); -INSERT INTO cp_tree VALUES ('2297', '3', '73', '190', '2296', '74'); -INSERT INTO cp_tree VALUES ('2298', '2', '76', '190', '2260', '81'); -INSERT INTO cp_tree VALUES ('2299', '3', '77', '190', '2298', '80'); -INSERT INTO cp_tree VALUES ('2300', '4', '78', '190', '2299', '79'); -INSERT INTO cp_tree VALUES ('2301', '2', '82', '190', '2260', '95'); -INSERT INTO cp_tree VALUES ('2302', '3', '83', '190', '2301', '86'); -INSERT INTO cp_tree VALUES ('2303', '4', '84', '190', '2302', '85'); -INSERT INTO cp_tree VALUES ('2304', '3', '87', '190', '2301', '90'); -INSERT INTO cp_tree VALUES ('2305', '4', '88', '190', '2304', '89'); -INSERT INTO cp_tree VALUES ('2306', '3', '91', '190', '2301', '94'); -INSERT INTO cp_tree VALUES ('2307', '4', '92', '190', '2306', '93'); -INSERT INTO cp_tree VALUES ('2308', '2', '96', '190', '2260', '111'); -INSERT INTO cp_tree VALUES ('2309', '3', '97', '190', '2308', '102'); -INSERT INTO cp_tree VALUES ('2310', '4', '98', '190', '2309', '99'); -INSERT INTO cp_tree VALUES ('2311', '4', '100', '190', '2309', '101'); -INSERT INTO cp_tree VALUES ('2312', '3', '103', '190', '2308', '106'); -INSERT INTO cp_tree VALUES ('2313', '4', '104', '190', '2312', '105'); -INSERT INTO cp_tree VALUES ('2314', '3', '107', '190', '2308', '110'); -INSERT INTO cp_tree VALUES ('2315', '4', '108', '190', '2314', '109'); -INSERT INTO cp_tree VALUES ('2316', '2', '112', '190', '2260', '125'); -INSERT INTO cp_tree VALUES ('2317', '3', '113', '190', '2316', '116'); -INSERT INTO cp_tree VALUES ('2318', '4', '114', '190', '2317', '115'); -INSERT INTO cp_tree VALUES ('2319', '3', '117', '190', '2316', '120'); -INSERT INTO cp_tree VALUES ('2320', '4', '118', '190', '2319', '119'); -INSERT INTO cp_tree VALUES ('2321', '3', '121', '190', '2316', '124'); -INSERT INTO cp_tree VALUES ('2322', '4', '122', '190', '2321', '123'); -INSERT INTO cp_tree VALUES ('2323', '2', '126', '190', '2260', '127'); -INSERT INTO cp_tree VALUES ('2324', '1', '1', '191', '0', '128'); -INSERT INTO cp_tree VALUES ('2325', '2', '2', '191', '2324', '35'); -INSERT INTO cp_tree VALUES ('2326', '3', '3', '191', '2325', '10'); -INSERT INTO cp_tree VALUES ('2327', '4', '4', '191', '2326', '5'); -INSERT INTO cp_tree VALUES ('2328', '4', '6', '191', '2326', '7'); -INSERT INTO cp_tree VALUES ('2329', '4', '8', '191', '2326', '9'); -INSERT INTO cp_tree VALUES ('2330', '3', '11', '191', '2325', '18'); -INSERT INTO cp_tree VALUES ('2331', '4', '12', '191', '2330', '13'); -INSERT INTO cp_tree VALUES ('2332', '4', '14', '191', '2330', '15'); -INSERT INTO cp_tree VALUES ('2333', '4', '16', '191', '2330', '17'); -INSERT INTO cp_tree VALUES ('2334', '3', '19', '191', '2325', '26'); -INSERT INTO cp_tree VALUES ('2335', '4', '20', '191', '2334', '21'); -INSERT INTO cp_tree VALUES ('2336', '4', '22', '191', '2334', '23'); -INSERT INTO cp_tree VALUES ('2337', '4', '24', '191', '2334', '25'); -INSERT INTO cp_tree VALUES ('2338', '3', '27', '191', '2325', '34'); -INSERT INTO cp_tree VALUES ('2339', '4', '28', '191', '2338', '29'); -INSERT INTO cp_tree VALUES ('2340', '4', '30', '191', '2338', '31'); -INSERT INTO cp_tree VALUES ('2341', '4', '32', '191', '2338', '33'); -INSERT INTO cp_tree VALUES ('2342', '2', '36', '191', '2324', '49'); -INSERT INTO cp_tree VALUES ('2343', '3', '37', '191', '2342', '38'); -INSERT INTO cp_tree VALUES ('2344', '3', '39', '191', '2342', '40'); -INSERT INTO cp_tree VALUES ('2345', '3', '41', '191', '2342', '42'); -INSERT INTO cp_tree VALUES ('2346', '3', '43', '191', '2342', '44'); -INSERT INTO cp_tree VALUES ('2347', '3', '45', '191', '2342', '46'); -INSERT INTO cp_tree VALUES ('2348', '3', '47', '191', '2342', '48'); -INSERT INTO cp_tree VALUES ('2349', '2', '50', '191', '2324', '53'); -INSERT INTO cp_tree VALUES ('2350', '3', '51', '191', '2349', '52'); -INSERT INTO cp_tree VALUES ('2351', '2', '54', '191', '2324', '57'); -INSERT INTO cp_tree VALUES ('2352', '3', '55', '191', '2351', '56'); -INSERT INTO cp_tree VALUES ('2353', '2', '58', '191', '2324', '61'); -INSERT INTO cp_tree VALUES ('2354', '3', '59', '191', '2353', '60'); -INSERT INTO cp_tree VALUES ('2355', '2', '62', '191', '2324', '67'); -INSERT INTO cp_tree VALUES ('2356', '3', '63', '191', '2355', '64'); -INSERT INTO cp_tree VALUES ('2357', '3', '65', '191', '2355', '66'); -INSERT INTO cp_tree VALUES ('2358', '2', '68', '191', '2324', '71'); -INSERT INTO cp_tree VALUES ('2359', '3', '69', '191', '2358', '70'); -INSERT INTO cp_tree VALUES ('2360', '2', '72', '191', '2324', '75'); -INSERT INTO cp_tree VALUES ('2361', '3', '73', '191', '2360', '74'); -INSERT INTO cp_tree VALUES ('2362', '2', '76', '191', '2324', '81'); -INSERT INTO cp_tree VALUES ('2363', '3', '77', '191', '2362', '80'); -INSERT INTO cp_tree VALUES ('2364', '4', '78', '191', '2363', '79'); -INSERT INTO cp_tree VALUES ('2365', '2', '82', '191', '2324', '95'); -INSERT INTO cp_tree VALUES ('2366', '3', '83', '191', '2365', '86'); -INSERT INTO cp_tree VALUES ('2367', '4', '84', '191', '2366', '85'); -INSERT INTO cp_tree VALUES ('2368', '3', '87', '191', '2365', '90'); -INSERT INTO cp_tree VALUES ('2369', '4', '88', '191', '2368', '89'); -INSERT INTO cp_tree VALUES ('2370', '3', '91', '191', '2365', '94'); -INSERT INTO cp_tree VALUES ('2371', '4', '92', '191', '2370', '93'); -INSERT INTO cp_tree VALUES ('2372', '2', '96', '191', '2324', '111'); -INSERT INTO cp_tree VALUES ('2373', '3', '97', '191', '2372', '102'); -INSERT INTO cp_tree VALUES ('2374', '4', '98', '191', '2373', '99'); -INSERT INTO cp_tree VALUES ('2375', '4', '100', '191', '2373', '101'); -INSERT INTO cp_tree VALUES ('2376', '3', '103', '191', '2372', '106'); -INSERT INTO cp_tree VALUES ('2377', '4', '104', '191', '2376', '105'); -INSERT INTO cp_tree VALUES ('2378', '3', '107', '191', '2372', '110'); -INSERT INTO cp_tree VALUES ('2379', '4', '108', '191', '2378', '109'); -INSERT INTO cp_tree VALUES ('2380', '2', '112', '191', '2324', '125'); -INSERT INTO cp_tree VALUES ('2381', '3', '113', '191', '2380', '116'); -INSERT INTO cp_tree VALUES ('2382', '4', '114', '191', '2381', '115'); -INSERT INTO cp_tree VALUES ('2383', '3', '117', '191', '2380', '120'); -INSERT INTO cp_tree VALUES ('2384', '4', '118', '191', '2383', '119'); -INSERT INTO cp_tree VALUES ('2385', '3', '121', '191', '2380', '124'); -INSERT INTO cp_tree VALUES ('2386', '4', '122', '191', '2385', '123'); -INSERT INTO cp_tree VALUES ('2387', '2', '126', '191', '2324', '127'); -INSERT INTO cp_tree VALUES ('2388', '1', '1', '192', '0', '110'); -INSERT INTO cp_tree VALUES ('2389', '2', '2', '192', '2388', '27'); -INSERT INTO cp_tree VALUES ('2390', '3', '3', '192', '2389', '10'); -INSERT INTO cp_tree VALUES ('2391', '4', '4', '192', '2390', '5'); -INSERT INTO cp_tree VALUES ('2392', '4', '6', '192', '2390', '7'); -INSERT INTO cp_tree VALUES ('2393', '4', '8', '192', '2390', '9'); -INSERT INTO cp_tree VALUES ('2394', '3', '11', '192', '2389', '18'); -INSERT INTO cp_tree VALUES ('2395', '4', '12', '192', '2394', '13'); -INSERT INTO cp_tree VALUES ('2396', '4', '14', '192', '2394', '15'); -INSERT INTO cp_tree VALUES ('2397', '4', '16', '192', '2394', '17'); -INSERT INTO cp_tree VALUES ('2398', '3', '19', '192', '2389', '26'); -INSERT INTO cp_tree VALUES ('2399', '4', '20', '192', '2398', '21'); -INSERT INTO cp_tree VALUES ('2400', '4', '22', '192', '2398', '23'); -INSERT INTO cp_tree VALUES ('2401', '4', '24', '192', '2398', '25'); -INSERT INTO cp_tree VALUES ('2402', '2', '28', '192', '2388', '41'); -INSERT INTO cp_tree VALUES ('2403', '3', '29', '192', '2402', '30'); -INSERT INTO cp_tree VALUES ('2404', '3', '31', '192', '2402', '32'); -INSERT INTO cp_tree VALUES ('2405', '3', '33', '192', '2402', '34'); -INSERT INTO cp_tree VALUES ('2406', '3', '35', '192', '2402', '36'); -INSERT INTO cp_tree VALUES ('2407', '3', '37', '192', '2402', '38'); -INSERT INTO cp_tree VALUES ('2408', '3', '39', '192', '2402', '40'); -INSERT INTO cp_tree VALUES ('2409', '2', '42', '192', '2388', '45'); -INSERT INTO cp_tree VALUES ('2410', '3', '43', '192', '2409', '44'); -INSERT INTO cp_tree VALUES ('2411', '2', '46', '192', '2388', '49'); -INSERT INTO cp_tree VALUES ('2412', '3', '47', '192', '2411', '48'); -INSERT INTO cp_tree VALUES ('2413', '2', '50', '192', '2388', '53'); -INSERT INTO cp_tree VALUES ('2414', '3', '51', '192', '2413', '52'); -INSERT INTO cp_tree VALUES ('2415', '2', '54', '192', '2388', '59'); -INSERT INTO cp_tree VALUES ('2416', '3', '55', '192', '2415', '56'); -INSERT INTO cp_tree VALUES ('2417', '3', '57', '192', '2415', '58'); -INSERT INTO cp_tree VALUES ('2418', '2', '60', '192', '2388', '63'); -INSERT INTO cp_tree VALUES ('2419', '3', '61', '192', '2418', '62'); -INSERT INTO cp_tree VALUES ('2420', '2', '64', '192', '2388', '67'); -INSERT INTO cp_tree VALUES ('2421', '3', '65', '192', '2420', '66'); -INSERT INTO cp_tree VALUES ('2422', '2', '68', '192', '2388', '77'); -INSERT INTO cp_tree VALUES ('2423', '3', '69', '192', '2422', '72'); -INSERT INTO cp_tree VALUES ('2424', '4', '70', '192', '2423', '71'); -INSERT INTO cp_tree VALUES ('2425', '3', '73', '192', '2422', '76'); -INSERT INTO cp_tree VALUES ('2426', '4', '74', '192', '2425', '75'); -INSERT INTO cp_tree VALUES ('2427', '2', '78', '192', '2388', '87'); -INSERT INTO cp_tree VALUES ('2428', '3', '79', '192', '2427', '82'); -INSERT INTO cp_tree VALUES ('2429', '4', '80', '192', '2428', '81'); -INSERT INTO cp_tree VALUES ('2430', '3', '83', '192', '2427', '86'); -INSERT INTO cp_tree VALUES ('2431', '4', '84', '192', '2430', '85'); -INSERT INTO cp_tree VALUES ('2432', '2', '88', '192', '2388', '99'); -INSERT INTO cp_tree VALUES ('2433', '3', '89', '192', '2432', '90'); -INSERT INTO cp_tree VALUES ('2434', '3', '91', '192', '2432', '94'); -INSERT INTO cp_tree VALUES ('2435', '4', '92', '192', '2434', '93'); -INSERT INTO cp_tree VALUES ('2436', '3', '95', '192', '2432', '98'); -INSERT INTO cp_tree VALUES ('2437', '4', '96', '192', '2436', '97'); -INSERT INTO cp_tree VALUES ('2438', '2', '100', '192', '2388', '109'); -INSERT INTO cp_tree VALUES ('2439', '3', '101', '192', '2438', '104'); -INSERT INTO cp_tree VALUES ('2440', '4', '102', '192', '2439', '103'); -INSERT INTO cp_tree VALUES ('2441', '3', '105', '192', '2438', '108'); -INSERT INTO cp_tree VALUES ('2442', '4', '106', '192', '2441', '107'); -INSERT INTO cp_tree VALUES ('2443', '1', '1', '193', '0', '110'); -INSERT INTO cp_tree VALUES ('2444', '2', '2', '193', '2443', '27'); -INSERT INTO cp_tree VALUES ('2445', '3', '3', '193', '2444', '10'); -INSERT INTO cp_tree VALUES ('2446', '4', '4', '193', '2445', '5'); -INSERT INTO cp_tree VALUES ('2447', '4', '6', '193', '2445', '7'); -INSERT INTO cp_tree VALUES ('2448', '4', '8', '193', '2445', '9'); -INSERT INTO cp_tree VALUES ('2449', '3', '11', '193', '2444', '18'); -INSERT INTO cp_tree VALUES ('2450', '4', '12', '193', '2449', '13'); -INSERT INTO cp_tree VALUES ('2451', '4', '14', '193', '2449', '15'); -INSERT INTO cp_tree VALUES ('2452', '4', '16', '193', '2449', '17'); -INSERT INTO cp_tree VALUES ('2453', '3', '19', '193', '2444', '26'); -INSERT INTO cp_tree VALUES ('2454', '4', '20', '193', '2453', '21'); -INSERT INTO cp_tree VALUES ('2455', '4', '22', '193', '2453', '23'); -INSERT INTO cp_tree VALUES ('2456', '4', '24', '193', '2453', '25'); -INSERT INTO cp_tree VALUES ('2457', '2', '28', '193', '2443', '41'); -INSERT INTO cp_tree VALUES ('2458', '3', '29', '193', '2457', '30'); -INSERT INTO cp_tree VALUES ('2459', '3', '31', '193', '2457', '32'); -INSERT INTO cp_tree VALUES ('2460', '3', '33', '193', '2457', '34'); -INSERT INTO cp_tree VALUES ('2461', '3', '35', '193', '2457', '36'); -INSERT INTO cp_tree VALUES ('2462', '3', '37', '193', '2457', '38'); -INSERT INTO cp_tree VALUES ('2463', '3', '39', '193', '2457', '40'); -INSERT INTO cp_tree VALUES ('2464', '2', '42', '193', '2443', '45'); -INSERT INTO cp_tree VALUES ('2465', '3', '43', '193', '2464', '44'); -INSERT INTO cp_tree VALUES ('2466', '2', '46', '193', '2443', '49'); -INSERT INTO cp_tree VALUES ('2467', '3', '47', '193', '2466', '48'); -INSERT INTO cp_tree VALUES ('2468', '2', '50', '193', '2443', '53'); -INSERT INTO cp_tree VALUES ('2469', '3', '51', '193', '2468', '52'); -INSERT INTO cp_tree VALUES ('2470', '2', '54', '193', '2443', '59'); -INSERT INTO cp_tree VALUES ('2471', '3', '55', '193', '2470', '56'); -INSERT INTO cp_tree VALUES ('2472', '3', '57', '193', '2470', '58'); -INSERT INTO cp_tree VALUES ('2473', '2', '60', '193', '2443', '63'); -INSERT INTO cp_tree VALUES ('2474', '3', '61', '193', '2473', '62'); -INSERT INTO cp_tree VALUES ('2475', '2', '64', '193', '2443', '67'); -INSERT INTO cp_tree VALUES ('2476', '3', '65', '193', '2475', '66'); -INSERT INTO cp_tree VALUES ('2477', '2', '68', '193', '2443', '77'); -INSERT INTO cp_tree VALUES ('2478', '3', '69', '193', '2477', '72'); -INSERT INTO cp_tree VALUES ('2479', '4', '70', '193', '2478', '71'); -INSERT INTO cp_tree VALUES ('2480', '3', '73', '193', '2477', '76'); -INSERT INTO cp_tree VALUES ('2481', '4', '74', '193', '2480', '75'); -INSERT INTO cp_tree VALUES ('2482', '2', '78', '193', '2443', '87'); -INSERT INTO cp_tree VALUES ('2483', '3', '79', '193', '2482', '82'); -INSERT INTO cp_tree VALUES ('2484', '4', '80', '193', '2483', '81'); -INSERT INTO cp_tree VALUES ('2485', '3', '83', '193', '2482', '86'); -INSERT INTO cp_tree VALUES ('2486', '4', '84', '193', '2485', '85'); -INSERT INTO cp_tree VALUES ('2487', '2', '88', '193', '2443', '99'); -INSERT INTO cp_tree VALUES ('2488', '3', '89', '193', '2487', '90'); -INSERT INTO cp_tree VALUES ('2489', '3', '91', '193', '2487', '94'); -INSERT INTO cp_tree VALUES ('2490', '4', '92', '193', '2489', '93'); -INSERT INTO cp_tree VALUES ('2491', '3', '95', '193', '2487', '98'); -INSERT INTO cp_tree VALUES ('2492', '4', '96', '193', '2491', '97'); -INSERT INTO cp_tree VALUES ('2493', '2', '100', '193', '2443', '109'); -INSERT INTO cp_tree VALUES ('2494', '3', '101', '193', '2493', '104'); -INSERT INTO cp_tree VALUES ('2495', '4', '102', '193', '2494', '103'); -INSERT INTO cp_tree VALUES ('2496', '3', '105', '193', '2493', '108'); -INSERT INTO cp_tree VALUES ('2497', '4', '106', '193', '2496', '107'); -INSERT INTO cp_tree VALUES ('2498', '1', '1', '194', '0', '74'); -INSERT INTO cp_tree VALUES ('2499', '2', '2', '194', '2498', '9'); -INSERT INTO cp_tree VALUES ('2500', '3', '3', '194', '2499', '4'); -INSERT INTO cp_tree VALUES ('2501', '3', '5', '194', '2499', '6'); -INSERT INTO cp_tree VALUES ('2502', '3', '7', '194', '2499', '8'); -INSERT INTO cp_tree VALUES ('2503', '2', '10', '194', '2498', '23'); -INSERT INTO cp_tree VALUES ('2504', '3', '11', '194', '2503', '12'); -INSERT INTO cp_tree VALUES ('2505', '3', '13', '194', '2503', '14'); -INSERT INTO cp_tree VALUES ('2506', '3', '15', '194', '2503', '16'); -INSERT INTO cp_tree VALUES ('2507', '3', '17', '194', '2503', '18'); -INSERT INTO cp_tree VALUES ('2508', '3', '19', '194', '2503', '20'); -INSERT INTO cp_tree VALUES ('2509', '3', '21', '194', '2503', '22'); -INSERT INTO cp_tree VALUES ('2510', '2', '24', '194', '2498', '27'); -INSERT INTO cp_tree VALUES ('2511', '3', '25', '194', '2510', '26'); -INSERT INTO cp_tree VALUES ('2512', '2', '28', '194', '2498', '31'); -INSERT INTO cp_tree VALUES ('2513', '3', '29', '194', '2512', '30'); -INSERT INTO cp_tree VALUES ('2514', '2', '32', '194', '2498', '35'); -INSERT INTO cp_tree VALUES ('2515', '3', '33', '194', '2514', '34'); -INSERT INTO cp_tree VALUES ('2516', '2', '36', '194', '2498', '41'); -INSERT INTO cp_tree VALUES ('2517', '3', '37', '194', '2516', '38'); -INSERT INTO cp_tree VALUES ('2518', '3', '39', '194', '2516', '40'); -INSERT INTO cp_tree VALUES ('2519', '2', '42', '194', '2498', '45'); -INSERT INTO cp_tree VALUES ('2520', '3', '43', '194', '2519', '44'); -INSERT INTO cp_tree VALUES ('2521', '2', '46', '194', '2498', '49'); -INSERT INTO cp_tree VALUES ('2522', '3', '47', '194', '2521', '48'); -INSERT INTO cp_tree VALUES ('2523', '2', '50', '194', '2498', '55'); -INSERT INTO cp_tree VALUES ('2524', '3', '51', '194', '2523', '54'); -INSERT INTO cp_tree VALUES ('2525', '4', '52', '194', '2524', '53'); -INSERT INTO cp_tree VALUES ('2526', '2', '56', '194', '2498', '65'); -INSERT INTO cp_tree VALUES ('2527', '3', '57', '194', '2526', '60'); -INSERT INTO cp_tree VALUES ('2528', '4', '58', '194', '2527', '59'); -INSERT INTO cp_tree VALUES ('2529', '3', '61', '194', '2526', '64'); -INSERT INTO cp_tree VALUES ('2530', '4', '62', '194', '2529', '63'); -INSERT INTO cp_tree VALUES ('2531', '2', '66', '194', '2498', '71'); -INSERT INTO cp_tree VALUES ('2532', '3', '67', '194', '2531', '70'); -INSERT INTO cp_tree VALUES ('2533', '4', '68', '194', '2532', '69'); -INSERT INTO cp_tree VALUES ('2534', '2', '72', '194', '2498', '73'); -INSERT INTO cp_tree VALUES ('2535', '1', '1', '195', '0', '92'); -INSERT INTO cp_tree VALUES ('2536', '2', '2', '195', '2535', '27'); -INSERT INTO cp_tree VALUES ('2537', '3', '3', '195', '2536', '10'); -INSERT INTO cp_tree VALUES ('2538', '4', '4', '195', '2537', '5'); -INSERT INTO cp_tree VALUES ('2539', '4', '6', '195', '2537', '7'); -INSERT INTO cp_tree VALUES ('2540', '4', '8', '195', '2537', '9'); -INSERT INTO cp_tree VALUES ('2541', '3', '11', '195', '2536', '18'); -INSERT INTO cp_tree VALUES ('2542', '4', '12', '195', '2541', '13'); -INSERT INTO cp_tree VALUES ('2543', '4', '14', '195', '2541', '15'); -INSERT INTO cp_tree VALUES ('2544', '4', '16', '195', '2541', '17'); -INSERT INTO cp_tree VALUES ('2545', '3', '19', '195', '2536', '26'); -INSERT INTO cp_tree VALUES ('2546', '4', '20', '195', '2545', '21'); -INSERT INTO cp_tree VALUES ('2547', '4', '22', '195', '2545', '23'); -INSERT INTO cp_tree VALUES ('2548', '4', '24', '195', '2545', '25'); -INSERT INTO cp_tree VALUES ('2549', '2', '28', '195', '2535', '41'); -INSERT INTO cp_tree VALUES ('2550', '3', '29', '195', '2549', '30'); -INSERT INTO cp_tree VALUES ('2551', '3', '31', '195', '2549', '32'); -INSERT INTO cp_tree VALUES ('2552', '3', '33', '195', '2549', '34'); -INSERT INTO cp_tree VALUES ('2553', '3', '35', '195', '2549', '36'); -INSERT INTO cp_tree VALUES ('2554', '3', '37', '195', '2549', '38'); -INSERT INTO cp_tree VALUES ('2555', '3', '39', '195', '2549', '40'); -INSERT INTO cp_tree VALUES ('2556', '2', '42', '195', '2535', '45'); -INSERT INTO cp_tree VALUES ('2557', '3', '43', '195', '2556', '44'); -INSERT INTO cp_tree VALUES ('2558', '2', '46', '195', '2535', '49'); -INSERT INTO cp_tree VALUES ('2559', '3', '47', '195', '2558', '48'); -INSERT INTO cp_tree VALUES ('2560', '2', '50', '195', '2535', '53'); -INSERT INTO cp_tree VALUES ('2561', '3', '51', '195', '2560', '52'); -INSERT INTO cp_tree VALUES ('2562', '2', '54', '195', '2535', '59'); -INSERT INTO cp_tree VALUES ('2563', '3', '55', '195', '2562', '56'); -INSERT INTO cp_tree VALUES ('2564', '3', '57', '195', '2562', '58'); -INSERT INTO cp_tree VALUES ('2565', '2', '60', '195', '2535', '63'); -INSERT INTO cp_tree VALUES ('2566', '3', '61', '195', '2565', '62'); -INSERT INTO cp_tree VALUES ('2567', '2', '64', '195', '2535', '67'); -INSERT INTO cp_tree VALUES ('2568', '3', '65', '195', '2567', '66'); -INSERT INTO cp_tree VALUES ('2569', '2', '68', '195', '2535', '73'); -INSERT INTO cp_tree VALUES ('2570', '3', '69', '195', '2569', '72'); -INSERT INTO cp_tree VALUES ('2571', '4', '70', '195', '2570', '71'); -INSERT INTO cp_tree VALUES ('2572', '2', '74', '195', '2535', '83'); -INSERT INTO cp_tree VALUES ('2573', '3', '75', '195', '2572', '78'); -INSERT INTO cp_tree VALUES ('2574', '4', '76', '195', '2573', '77'); -INSERT INTO cp_tree VALUES ('2575', '3', '79', '195', '2572', '82'); -INSERT INTO cp_tree VALUES ('2576', '4', '80', '195', '2575', '81'); -INSERT INTO cp_tree VALUES ('2577', '2', '84', '195', '2535', '89'); -INSERT INTO cp_tree VALUES ('2578', '3', '85', '195', '2577', '88'); -INSERT INTO cp_tree VALUES ('2579', '4', '86', '195', '2578', '87'); -INSERT INTO cp_tree VALUES ('2580', '2', '90', '195', '2535', '91'); -INSERT INTO cp_tree VALUES ('2581', '1', '1', '196', '0', '94'); -INSERT INTO cp_tree VALUES ('2582', '2', '2', '196', '2581', '27'); -INSERT INTO cp_tree VALUES ('2583', '3', '3', '196', '2582', '10'); -INSERT INTO cp_tree VALUES ('2584', '4', '4', '196', '2583', '5'); -INSERT INTO cp_tree VALUES ('2585', '4', '6', '196', '2583', '7'); -INSERT INTO cp_tree VALUES ('2586', '4', '8', '196', '2583', '9'); -INSERT INTO cp_tree VALUES ('2587', '3', '11', '196', '2582', '18'); -INSERT INTO cp_tree VALUES ('2588', '4', '12', '196', '2587', '13'); -INSERT INTO cp_tree VALUES ('2589', '4', '14', '196', '2587', '15'); -INSERT INTO cp_tree VALUES ('2590', '4', '16', '196', '2587', '17'); -INSERT INTO cp_tree VALUES ('2591', '3', '19', '196', '2582', '26'); -INSERT INTO cp_tree VALUES ('2592', '4', '20', '196', '2591', '21'); -INSERT INTO cp_tree VALUES ('2593', '4', '22', '196', '2591', '23'); -INSERT INTO cp_tree VALUES ('2594', '4', '24', '196', '2591', '25'); -INSERT INTO cp_tree VALUES ('2595', '2', '28', '196', '2581', '41'); -INSERT INTO cp_tree VALUES ('2596', '3', '29', '196', '2595', '30'); -INSERT INTO cp_tree VALUES ('2597', '3', '31', '196', '2595', '32'); -INSERT INTO cp_tree VALUES ('2598', '3', '33', '196', '2595', '34'); -INSERT INTO cp_tree VALUES ('2599', '3', '35', '196', '2595', '36'); -INSERT INTO cp_tree VALUES ('2600', '3', '37', '196', '2595', '38'); -INSERT INTO cp_tree VALUES ('2601', '3', '39', '196', '2595', '40'); -INSERT INTO cp_tree VALUES ('2602', '2', '42', '196', '2581', '45'); -INSERT INTO cp_tree VALUES ('2603', '3', '43', '196', '2602', '44'); -INSERT INTO cp_tree VALUES ('2604', '2', '46', '196', '2581', '49'); -INSERT INTO cp_tree VALUES ('2605', '3', '47', '196', '2604', '48'); -INSERT INTO cp_tree VALUES ('2606', '2', '50', '196', '2581', '53'); -INSERT INTO cp_tree VALUES ('2607', '3', '51', '196', '2606', '52'); -INSERT INTO cp_tree VALUES ('2608', '2', '54', '196', '2581', '59'); -INSERT INTO cp_tree VALUES ('2609', '3', '55', '196', '2608', '56'); -INSERT INTO cp_tree VALUES ('2610', '3', '57', '196', '2608', '58'); -INSERT INTO cp_tree VALUES ('2611', '2', '60', '196', '2581', '63'); -INSERT INTO cp_tree VALUES ('2612', '3', '61', '196', '2611', '62'); -INSERT INTO cp_tree VALUES ('2613', '2', '64', '196', '2581', '67'); -INSERT INTO cp_tree VALUES ('2614', '3', '65', '196', '2613', '66'); -INSERT INTO cp_tree VALUES ('2615', '2', '68', '196', '2581', '75'); -INSERT INTO cp_tree VALUES ('2616', '3', '69', '196', '2615', '72'); -INSERT INTO cp_tree VALUES ('2617', '4', '70', '196', '2616', '71'); -INSERT INTO cp_tree VALUES ('2618', '3', '73', '196', '2615', '74'); -INSERT INTO cp_tree VALUES ('2619', '2', '76', '196', '2581', '85'); -INSERT INTO cp_tree VALUES ('2620', '3', '77', '196', '2619', '80'); -INSERT INTO cp_tree VALUES ('2621', '4', '78', '196', '2620', '79'); -INSERT INTO cp_tree VALUES ('2622', '3', '81', '196', '2619', '84'); -INSERT INTO cp_tree VALUES ('2623', '4', '82', '196', '2622', '83'); -INSERT INTO cp_tree VALUES ('2624', '2', '86', '196', '2581', '91'); -INSERT INTO cp_tree VALUES ('2625', '3', '87', '196', '2624', '90'); -INSERT INTO cp_tree VALUES ('2626', '4', '88', '196', '2625', '89'); -INSERT INTO cp_tree VALUES ('2627', '2', '92', '196', '2581', '93'); -INSERT INTO cp_tree VALUES ('2628', '1', '1', '197', '0', '98'); -INSERT INTO cp_tree VALUES ('2629', '2', '2', '197', '2628', '27'); -INSERT INTO cp_tree VALUES ('2630', '3', '3', '197', '2629', '10'); -INSERT INTO cp_tree VALUES ('2631', '4', '4', '197', '2630', '5'); -INSERT INTO cp_tree VALUES ('2632', '4', '6', '197', '2630', '7'); -INSERT INTO cp_tree VALUES ('2633', '4', '8', '197', '2630', '9'); -INSERT INTO cp_tree VALUES ('2634', '3', '11', '197', '2629', '18'); -INSERT INTO cp_tree VALUES ('2635', '4', '12', '197', '2634', '13'); -INSERT INTO cp_tree VALUES ('2636', '4', '14', '197', '2634', '15'); -INSERT INTO cp_tree VALUES ('2637', '4', '16', '197', '2634', '17'); -INSERT INTO cp_tree VALUES ('2638', '3', '19', '197', '2629', '26'); -INSERT INTO cp_tree VALUES ('2639', '4', '20', '197', '2638', '21'); -INSERT INTO cp_tree VALUES ('2640', '4', '22', '197', '2638', '23'); -INSERT INTO cp_tree VALUES ('2641', '4', '24', '197', '2638', '25'); -INSERT INTO cp_tree VALUES ('2642', '2', '28', '197', '2628', '41'); -INSERT INTO cp_tree VALUES ('2643', '3', '29', '197', '2642', '30'); -INSERT INTO cp_tree VALUES ('2644', '3', '31', '197', '2642', '32'); -INSERT INTO cp_tree VALUES ('2645', '3', '33', '197', '2642', '34'); -INSERT INTO cp_tree VALUES ('2646', '3', '35', '197', '2642', '36'); -INSERT INTO cp_tree VALUES ('2647', '3', '37', '197', '2642', '38'); -INSERT INTO cp_tree VALUES ('2648', '3', '39', '197', '2642', '40'); -INSERT INTO cp_tree VALUES ('2649', '2', '42', '197', '2628', '45'); -INSERT INTO cp_tree VALUES ('2650', '3', '43', '197', '2649', '44'); -INSERT INTO cp_tree VALUES ('2651', '2', '46', '197', '2628', '49'); -INSERT INTO cp_tree VALUES ('2652', '3', '47', '197', '2651', '48'); -INSERT INTO cp_tree VALUES ('2653', '2', '50', '197', '2628', '53'); -INSERT INTO cp_tree VALUES ('2654', '3', '51', '197', '2653', '52'); -INSERT INTO cp_tree VALUES ('2655', '2', '54', '197', '2628', '59'); -INSERT INTO cp_tree VALUES ('2656', '3', '55', '197', '2655', '56'); -INSERT INTO cp_tree VALUES ('2657', '3', '57', '197', '2655', '58'); -INSERT INTO cp_tree VALUES ('2658', '2', '60', '197', '2628', '63'); -INSERT INTO cp_tree VALUES ('2659', '3', '61', '197', '2658', '62'); -INSERT INTO cp_tree VALUES ('2660', '2', '64', '197', '2628', '67'); -INSERT INTO cp_tree VALUES ('2661', '3', '65', '197', '2660', '66'); -INSERT INTO cp_tree VALUES ('2662', '2', '68', '197', '2628', '79'); -INSERT INTO cp_tree VALUES ('2663', '3', '69', '197', '2662', '72'); -INSERT INTO cp_tree VALUES ('2664', '4', '70', '197', '2663', '71'); -INSERT INTO cp_tree VALUES ('2665', '3', '73', '197', '2662', '74'); -INSERT INTO cp_tree VALUES ('2666', '3', '75', '197', '2662', '76'); -INSERT INTO cp_tree VALUES ('2667', '3', '77', '197', '2662', '78'); -INSERT INTO cp_tree VALUES ('2668', '2', '80', '197', '2628', '89'); -INSERT INTO cp_tree VALUES ('2669', '3', '81', '197', '2668', '84'); -INSERT INTO cp_tree VALUES ('2670', '4', '82', '197', '2669', '83'); -INSERT INTO cp_tree VALUES ('2671', '3', '85', '197', '2668', '88'); -INSERT INTO cp_tree VALUES ('2672', '4', '86', '197', '2671', '87'); -INSERT INTO cp_tree VALUES ('2673', '2', '90', '197', '2628', '95'); -INSERT INTO cp_tree VALUES ('2674', '3', '91', '197', '2673', '94'); -INSERT INTO cp_tree VALUES ('2675', '4', '92', '197', '2674', '93'); -INSERT INTO cp_tree VALUES ('2676', '2', '96', '197', '2628', '97'); -INSERT INTO cp_tree VALUES ('2677', '1', '1', '198', '0', '98'); -INSERT INTO cp_tree VALUES ('2678', '2', '2', '198', '2677', '27'); -INSERT INTO cp_tree VALUES ('2679', '3', '3', '198', '2678', '10'); -INSERT INTO cp_tree VALUES ('2680', '4', '4', '198', '2679', '5'); -INSERT INTO cp_tree VALUES ('2681', '4', '6', '198', '2679', '7'); -INSERT INTO cp_tree VALUES ('2682', '4', '8', '198', '2679', '9'); -INSERT INTO cp_tree VALUES ('2683', '3', '11', '198', '2678', '18'); -INSERT INTO cp_tree VALUES ('2684', '4', '12', '198', '2683', '13'); -INSERT INTO cp_tree VALUES ('2685', '4', '14', '198', '2683', '15'); -INSERT INTO cp_tree VALUES ('2686', '4', '16', '198', '2683', '17'); -INSERT INTO cp_tree VALUES ('2687', '3', '19', '198', '2678', '26'); -INSERT INTO cp_tree VALUES ('2688', '4', '20', '198', '2687', '21'); -INSERT INTO cp_tree VALUES ('2689', '4', '22', '198', '2687', '23'); -INSERT INTO cp_tree VALUES ('2690', '4', '24', '198', '2687', '25'); -INSERT INTO cp_tree VALUES ('2691', '2', '28', '198', '2677', '41'); -INSERT INTO cp_tree VALUES ('2692', '3', '29', '198', '2691', '30'); -INSERT INTO cp_tree VALUES ('2693', '3', '31', '198', '2691', '32'); -INSERT INTO cp_tree VALUES ('2694', '3', '33', '198', '2691', '34'); -INSERT INTO cp_tree VALUES ('2695', '3', '35', '198', '2691', '36'); -INSERT INTO cp_tree VALUES ('2696', '3', '37', '198', '2691', '38'); -INSERT INTO cp_tree VALUES ('2697', '3', '39', '198', '2691', '40'); -INSERT INTO cp_tree VALUES ('2698', '2', '42', '198', '2677', '45'); -INSERT INTO cp_tree VALUES ('2699', '3', '43', '198', '2698', '44'); -INSERT INTO cp_tree VALUES ('2700', '2', '46', '198', '2677', '49'); -INSERT INTO cp_tree VALUES ('2701', '3', '47', '198', '2700', '48'); -INSERT INTO cp_tree VALUES ('2702', '2', '50', '198', '2677', '53'); -INSERT INTO cp_tree VALUES ('2703', '3', '51', '198', '2702', '52'); -INSERT INTO cp_tree VALUES ('2704', '2', '54', '198', '2677', '59'); -INSERT INTO cp_tree VALUES ('2705', '3', '55', '198', '2704', '56'); -INSERT INTO cp_tree VALUES ('2706', '3', '57', '198', '2704', '58'); -INSERT INTO cp_tree VALUES ('2707', '2', '60', '198', '2677', '63'); -INSERT INTO cp_tree VALUES ('2708', '3', '61', '198', '2707', '62'); -INSERT INTO cp_tree VALUES ('2709', '2', '64', '198', '2677', '67'); -INSERT INTO cp_tree VALUES ('2710', '3', '65', '198', '2709', '66'); -INSERT INTO cp_tree VALUES ('2711', '2', '68', '198', '2677', '75'); -INSERT INTO cp_tree VALUES ('2712', '3', '69', '198', '2711', '70'); -INSERT INTO cp_tree VALUES ('2713', '3', '71', '198', '2711', '74'); -INSERT INTO cp_tree VALUES ('2714', '4', '72', '198', '2713', '73'); -INSERT INTO cp_tree VALUES ('2715', '2', '76', '198', '2677', '87'); -INSERT INTO cp_tree VALUES ('2716', '3', '77', '198', '2715', '80'); -INSERT INTO cp_tree VALUES ('2717', '4', '78', '198', '2716', '79'); -INSERT INTO cp_tree VALUES ('2718', '3', '81', '198', '2715', '82'); -INSERT INTO cp_tree VALUES ('2719', '3', '83', '198', '2715', '86'); -INSERT INTO cp_tree VALUES ('2720', '4', '84', '198', '2719', '85'); -INSERT INTO cp_tree VALUES ('2721', '2', '88', '198', '2677', '95'); -INSERT INTO cp_tree VALUES ('2722', '3', '89', '198', '2721', '90'); -INSERT INTO cp_tree VALUES ('2723', '3', '91', '198', '2721', '94'); -INSERT INTO cp_tree VALUES ('2724', '4', '92', '198', '2723', '93'); -INSERT INTO cp_tree VALUES ('2725', '2', '96', '198', '2677', '97'); -INSERT INTO cp_tree VALUES ('2726', '1', '1', '199', '0', '102'); -INSERT INTO cp_tree VALUES ('2727', '2', '2', '199', '2726', '27'); -INSERT INTO cp_tree VALUES ('2728', '3', '3', '199', '2727', '10'); -INSERT INTO cp_tree VALUES ('2729', '4', '4', '199', '2728', '5'); -INSERT INTO cp_tree VALUES ('2730', '4', '6', '199', '2728', '7'); -INSERT INTO cp_tree VALUES ('2731', '4', '8', '199', '2728', '9'); -INSERT INTO cp_tree VALUES ('2732', '3', '11', '199', '2727', '18'); -INSERT INTO cp_tree VALUES ('2733', '4', '12', '199', '2732', '13'); -INSERT INTO cp_tree VALUES ('2734', '4', '14', '199', '2732', '15'); -INSERT INTO cp_tree VALUES ('2735', '4', '16', '199', '2732', '17'); -INSERT INTO cp_tree VALUES ('2736', '3', '19', '199', '2727', '26'); -INSERT INTO cp_tree VALUES ('2737', '4', '20', '199', '2736', '21'); -INSERT INTO cp_tree VALUES ('2738', '4', '22', '199', '2736', '23'); -INSERT INTO cp_tree VALUES ('2739', '4', '24', '199', '2736', '25'); -INSERT INTO cp_tree VALUES ('2740', '2', '28', '199', '2726', '41'); -INSERT INTO cp_tree VALUES ('2741', '3', '29', '199', '2740', '30'); -INSERT INTO cp_tree VALUES ('2742', '3', '31', '199', '2740', '32'); -INSERT INTO cp_tree VALUES ('2743', '3', '33', '199', '2740', '34'); -INSERT INTO cp_tree VALUES ('2744', '3', '35', '199', '2740', '36'); -INSERT INTO cp_tree VALUES ('2745', '3', '37', '199', '2740', '38'); -INSERT INTO cp_tree VALUES ('2746', '3', '39', '199', '2740', '40'); -INSERT INTO cp_tree VALUES ('2747', '2', '42', '199', '2726', '45'); -INSERT INTO cp_tree VALUES ('2748', '3', '43', '199', '2747', '44'); -INSERT INTO cp_tree VALUES ('2749', '2', '46', '199', '2726', '49'); -INSERT INTO cp_tree VALUES ('2750', '3', '47', '199', '2749', '48'); -INSERT INTO cp_tree VALUES ('2751', '2', '50', '199', '2726', '53'); -INSERT INTO cp_tree VALUES ('2752', '3', '51', '199', '2751', '52'); -INSERT INTO cp_tree VALUES ('2753', '2', '54', '199', '2726', '59'); -INSERT INTO cp_tree VALUES ('2754', '3', '55', '199', '2753', '56'); -INSERT INTO cp_tree VALUES ('2755', '3', '57', '199', '2753', '58'); -INSERT INTO cp_tree VALUES ('2756', '2', '60', '199', '2726', '63'); -INSERT INTO cp_tree VALUES ('2757', '3', '61', '199', '2756', '62'); -INSERT INTO cp_tree VALUES ('2758', '2', '64', '199', '2726', '67'); -INSERT INTO cp_tree VALUES ('2759', '3', '65', '199', '2758', '66'); -INSERT INTO cp_tree VALUES ('2760', '2', '68', '199', '2726', '79'); -INSERT INTO cp_tree VALUES ('2761', '3', '69', '199', '2760', '70'); -INSERT INTO cp_tree VALUES ('2762', '3', '71', '199', '2760', '74'); -INSERT INTO cp_tree VALUES ('2763', '4', '72', '199', '2762', '73'); -INSERT INTO cp_tree VALUES ('2764', '3', '75', '199', '2760', '76'); -INSERT INTO cp_tree VALUES ('2765', '3', '77', '199', '2760', '78'); -INSERT INTO cp_tree VALUES ('2766', '2', '80', '199', '2726', '91'); -INSERT INTO cp_tree VALUES ('2767', '3', '81', '199', '2766', '84'); -INSERT INTO cp_tree VALUES ('2768', '4', '82', '199', '2767', '83'); -INSERT INTO cp_tree VALUES ('2769', '3', '85', '199', '2766', '86'); -INSERT INTO cp_tree VALUES ('2770', '3', '87', '199', '2766', '90'); -INSERT INTO cp_tree VALUES ('2771', '4', '88', '199', '2770', '89'); -INSERT INTO cp_tree VALUES ('2772', '2', '92', '199', '2726', '99'); -INSERT INTO cp_tree VALUES ('2773', '3', '93', '199', '2772', '94'); -INSERT INTO cp_tree VALUES ('2774', '3', '95', '199', '2772', '98'); -INSERT INTO cp_tree VALUES ('2775', '4', '96', '199', '2774', '97'); -INSERT INTO cp_tree VALUES ('2776', '2', '100', '199', '2726', '101'); -INSERT INTO cp_tree VALUES ('2777', '1', '1', '200', '0', '82'); -INSERT INTO cp_tree VALUES ('2778', '2', '2', '200', '2777', '27'); -INSERT INTO cp_tree VALUES ('2779', '3', '3', '200', '2778', '10'); -INSERT INTO cp_tree VALUES ('2780', '4', '4', '200', '2779', '5'); -INSERT INTO cp_tree VALUES ('2781', '4', '6', '200', '2779', '7'); -INSERT INTO cp_tree VALUES ('2782', '4', '8', '200', '2779', '9'); -INSERT INTO cp_tree VALUES ('2783', '3', '11', '200', '2778', '18'); -INSERT INTO cp_tree VALUES ('2784', '4', '12', '200', '2783', '13'); -INSERT INTO cp_tree VALUES ('2785', '4', '14', '200', '2783', '15'); -INSERT INTO cp_tree VALUES ('2786', '4', '16', '200', '2783', '17'); -INSERT INTO cp_tree VALUES ('2787', '3', '19', '200', '2778', '26'); -INSERT INTO cp_tree VALUES ('2788', '4', '20', '200', '2787', '21'); -INSERT INTO cp_tree VALUES ('2789', '4', '22', '200', '2787', '23'); -INSERT INTO cp_tree VALUES ('2790', '4', '24', '200', '2787', '25'); -INSERT INTO cp_tree VALUES ('2791', '2', '28', '200', '2777', '41'); -INSERT INTO cp_tree VALUES ('2792', '3', '29', '200', '2791', '30'); -INSERT INTO cp_tree VALUES ('2793', '3', '31', '200', '2791', '32'); -INSERT INTO cp_tree VALUES ('2794', '3', '33', '200', '2791', '34'); -INSERT INTO cp_tree VALUES ('2795', '3', '35', '200', '2791', '36'); -INSERT INTO cp_tree VALUES ('2796', '3', '37', '200', '2791', '38'); -INSERT INTO cp_tree VALUES ('2797', '3', '39', '200', '2791', '40'); -INSERT INTO cp_tree VALUES ('2798', '2', '42', '200', '2777', '45'); -INSERT INTO cp_tree VALUES ('2799', '3', '43', '200', '2798', '44'); -INSERT INTO cp_tree VALUES ('2800', '2', '46', '200', '2777', '49'); -INSERT INTO cp_tree VALUES ('2801', '3', '47', '200', '2800', '48'); -INSERT INTO cp_tree VALUES ('2802', '2', '50', '200', '2777', '53'); -INSERT INTO cp_tree VALUES ('2803', '3', '51', '200', '2802', '52'); -INSERT INTO cp_tree VALUES ('2804', '2', '54', '200', '2777', '59'); -INSERT INTO cp_tree VALUES ('2805', '3', '55', '200', '2804', '56'); -INSERT INTO cp_tree VALUES ('2806', '3', '57', '200', '2804', '58'); -INSERT INTO cp_tree VALUES ('2807', '2', '60', '200', '2777', '63'); -INSERT INTO cp_tree VALUES ('2808', '3', '61', '200', '2807', '62'); -INSERT INTO cp_tree VALUES ('2809', '2', '64', '200', '2777', '67'); -INSERT INTO cp_tree VALUES ('2810', '3', '65', '200', '2809', '66'); -INSERT INTO cp_tree VALUES ('2811', '2', '68', '200', '2777', '79'); -INSERT INTO cp_tree VALUES ('2812', '3', '69', '200', '2811', '74'); -INSERT INTO cp_tree VALUES ('2813', '4', '70', '200', '2812', '71'); -INSERT INTO cp_tree VALUES ('2814', '4', '72', '200', '2812', '73'); -INSERT INTO cp_tree VALUES ('2815', '3', '75', '200', '2811', '76'); -INSERT INTO cp_tree VALUES ('2816', '3', '77', '200', '2811', '78'); -INSERT INTO cp_tree VALUES ('2817', '2', '80', '200', '2777', '81'); -INSERT INTO cp_tree VALUES ('2818', '1', '1', '201', '0', '82'); -INSERT INTO cp_tree VALUES ('2819', '2', '2', '201', '2818', '27'); -INSERT INTO cp_tree VALUES ('2820', '3', '3', '201', '2819', '10'); -INSERT INTO cp_tree VALUES ('2821', '4', '4', '201', '2820', '5'); -INSERT INTO cp_tree VALUES ('2822', '4', '6', '201', '2820', '7'); -INSERT INTO cp_tree VALUES ('2823', '4', '8', '201', '2820', '9'); -INSERT INTO cp_tree VALUES ('2824', '3', '11', '201', '2819', '18'); -INSERT INTO cp_tree VALUES ('2825', '4', '12', '201', '2824', '13'); -INSERT INTO cp_tree VALUES ('2826', '4', '14', '201', '2824', '15'); -INSERT INTO cp_tree VALUES ('2827', '4', '16', '201', '2824', '17'); -INSERT INTO cp_tree VALUES ('2828', '3', '19', '201', '2819', '26'); -INSERT INTO cp_tree VALUES ('2829', '4', '20', '201', '2828', '21'); -INSERT INTO cp_tree VALUES ('2830', '4', '22', '201', '2828', '23'); -INSERT INTO cp_tree VALUES ('2831', '4', '24', '201', '2828', '25'); -INSERT INTO cp_tree VALUES ('2832', '2', '28', '201', '2818', '41'); -INSERT INTO cp_tree VALUES ('2833', '3', '29', '201', '2832', '30'); -INSERT INTO cp_tree VALUES ('2834', '3', '31', '201', '2832', '32'); -INSERT INTO cp_tree VALUES ('2835', '3', '33', '201', '2832', '34'); -INSERT INTO cp_tree VALUES ('2836', '3', '35', '201', '2832', '36'); -INSERT INTO cp_tree VALUES ('2837', '3', '37', '201', '2832', '38'); -INSERT INTO cp_tree VALUES ('2838', '3', '39', '201', '2832', '40'); -INSERT INTO cp_tree VALUES ('2839', '2', '42', '201', '2818', '45'); -INSERT INTO cp_tree VALUES ('2840', '3', '43', '201', '2839', '44'); -INSERT INTO cp_tree VALUES ('2841', '2', '46', '201', '2818', '49'); -INSERT INTO cp_tree VALUES ('2842', '3', '47', '201', '2841', '48'); -INSERT INTO cp_tree VALUES ('2843', '2', '50', '201', '2818', '53'); -INSERT INTO cp_tree VALUES ('2844', '3', '51', '201', '2843', '52'); -INSERT INTO cp_tree VALUES ('2845', '2', '54', '201', '2818', '59'); -INSERT INTO cp_tree VALUES ('2846', '3', '55', '201', '2845', '56'); -INSERT INTO cp_tree VALUES ('2847', '3', '57', '201', '2845', '58'); -INSERT INTO cp_tree VALUES ('2848', '2', '60', '201', '2818', '63'); -INSERT INTO cp_tree VALUES ('2849', '3', '61', '201', '2848', '62'); -INSERT INTO cp_tree VALUES ('2850', '2', '64', '201', '2818', '67'); -INSERT INTO cp_tree VALUES ('2851', '3', '65', '201', '2850', '66'); -INSERT INTO cp_tree VALUES ('2852', '2', '68', '201', '2818', '79'); -INSERT INTO cp_tree VALUES ('2853', '3', '69', '201', '2852', '74'); -INSERT INTO cp_tree VALUES ('2854', '4', '70', '201', '2853', '71'); -INSERT INTO cp_tree VALUES ('2855', '4', '72', '201', '2853', '73'); -INSERT INTO cp_tree VALUES ('2856', '3', '75', '201', '2852', '76'); -INSERT INTO cp_tree VALUES ('2857', '3', '77', '201', '2852', '78'); -INSERT INTO cp_tree VALUES ('2858', '2', '80', '201', '2818', '81'); -INSERT INTO cp_tree VALUES ('2859', '1', '1', '202', '0', '82'); -INSERT INTO cp_tree VALUES ('2860', '2', '2', '202', '2859', '27'); -INSERT INTO cp_tree VALUES ('2861', '3', '3', '202', '2860', '10'); -INSERT INTO cp_tree VALUES ('2862', '4', '4', '202', '2861', '5'); -INSERT INTO cp_tree VALUES ('2863', '4', '6', '202', '2861', '7'); -INSERT INTO cp_tree VALUES ('2864', '4', '8', '202', '2861', '9'); -INSERT INTO cp_tree VALUES ('2865', '3', '11', '202', '2860', '18'); -INSERT INTO cp_tree VALUES ('2866', '4', '12', '202', '2865', '13'); -INSERT INTO cp_tree VALUES ('2867', '4', '14', '202', '2865', '15'); -INSERT INTO cp_tree VALUES ('2868', '4', '16', '202', '2865', '17'); -INSERT INTO cp_tree VALUES ('2869', '3', '19', '202', '2860', '26'); -INSERT INTO cp_tree VALUES ('2870', '4', '20', '202', '2869', '21'); -INSERT INTO cp_tree VALUES ('2871', '4', '22', '202', '2869', '23'); -INSERT INTO cp_tree VALUES ('2872', '4', '24', '202', '2869', '25'); -INSERT INTO cp_tree VALUES ('2873', '2', '28', '202', '2859', '41'); -INSERT INTO cp_tree VALUES ('2874', '3', '29', '202', '2873', '30'); -INSERT INTO cp_tree VALUES ('2875', '3', '31', '202', '2873', '32'); -INSERT INTO cp_tree VALUES ('2876', '3', '33', '202', '2873', '34'); -INSERT INTO cp_tree VALUES ('2877', '3', '35', '202', '2873', '36'); -INSERT INTO cp_tree VALUES ('2878', '3', '37', '202', '2873', '38'); -INSERT INTO cp_tree VALUES ('2879', '3', '39', '202', '2873', '40'); -INSERT INTO cp_tree VALUES ('2880', '2', '42', '202', '2859', '45'); -INSERT INTO cp_tree VALUES ('2881', '3', '43', '202', '2880', '44'); -INSERT INTO cp_tree VALUES ('2882', '2', '46', '202', '2859', '49'); -INSERT INTO cp_tree VALUES ('2883', '3', '47', '202', '2882', '48'); -INSERT INTO cp_tree VALUES ('2884', '2', '50', '202', '2859', '53'); -INSERT INTO cp_tree VALUES ('2885', '3', '51', '202', '2884', '52'); -INSERT INTO cp_tree VALUES ('2886', '2', '54', '202', '2859', '59'); -INSERT INTO cp_tree VALUES ('2887', '3', '55', '202', '2886', '56'); -INSERT INTO cp_tree VALUES ('2888', '3', '57', '202', '2886', '58'); -INSERT INTO cp_tree VALUES ('2889', '2', '60', '202', '2859', '63'); -INSERT INTO cp_tree VALUES ('2890', '3', '61', '202', '2889', '62'); -INSERT INTO cp_tree VALUES ('2891', '2', '64', '202', '2859', '67'); -INSERT INTO cp_tree VALUES ('2892', '3', '65', '202', '2891', '66'); -INSERT INTO cp_tree VALUES ('2893', '2', '68', '202', '2859', '79'); -INSERT INTO cp_tree VALUES ('2894', '3', '69', '202', '2893', '74'); -INSERT INTO cp_tree VALUES ('2895', '4', '70', '202', '2894', '71'); -INSERT INTO cp_tree VALUES ('2896', '4', '72', '202', '2894', '73'); -INSERT INTO cp_tree VALUES ('2897', '3', '75', '202', '2893', '76'); -INSERT INTO cp_tree VALUES ('2898', '3', '77', '202', '2893', '78'); -INSERT INTO cp_tree VALUES ('2899', '2', '80', '202', '2859', '81'); -INSERT INTO cp_tree VALUES ('2900', '1', '1', '203', '0', '100'); -INSERT INTO cp_tree VALUES ('2901', '2', '2', '203', '2900', '35'); -INSERT INTO cp_tree VALUES ('2902', '3', '3', '203', '2901', '10'); -INSERT INTO cp_tree VALUES ('2903', '4', '4', '203', '2902', '5'); -INSERT INTO cp_tree VALUES ('2904', '4', '6', '203', '2902', '7'); -INSERT INTO cp_tree VALUES ('2905', '4', '8', '203', '2902', '9'); -INSERT INTO cp_tree VALUES ('2906', '3', '11', '203', '2901', '18'); -INSERT INTO cp_tree VALUES ('2907', '4', '12', '203', '2906', '13'); -INSERT INTO cp_tree VALUES ('2908', '4', '14', '203', '2906', '15'); -INSERT INTO cp_tree VALUES ('2909', '4', '16', '203', '2906', '17'); -INSERT INTO cp_tree VALUES ('2910', '3', '19', '203', '2901', '26'); -INSERT INTO cp_tree VALUES ('2911', '4', '20', '203', '2910', '21'); -INSERT INTO cp_tree VALUES ('2912', '4', '22', '203', '2910', '23'); -INSERT INTO cp_tree VALUES ('2913', '4', '24', '203', '2910', '25'); -INSERT INTO cp_tree VALUES ('2914', '3', '27', '203', '2901', '34'); -INSERT INTO cp_tree VALUES ('2915', '4', '28', '203', '2914', '29'); -INSERT INTO cp_tree VALUES ('2916', '4', '30', '203', '2914', '31'); -INSERT INTO cp_tree VALUES ('2917', '4', '32', '203', '2914', '33'); -INSERT INTO cp_tree VALUES ('2918', '2', '36', '203', '2900', '49'); -INSERT INTO cp_tree VALUES ('2919', '3', '37', '203', '2918', '38'); -INSERT INTO cp_tree VALUES ('2920', '3', '39', '203', '2918', '40'); -INSERT INTO cp_tree VALUES ('2921', '3', '41', '203', '2918', '42'); -INSERT INTO cp_tree VALUES ('2922', '3', '43', '203', '2918', '44'); -INSERT INTO cp_tree VALUES ('2923', '3', '45', '203', '2918', '46'); -INSERT INTO cp_tree VALUES ('2924', '3', '47', '203', '2918', '48'); -INSERT INTO cp_tree VALUES ('2925', '2', '50', '203', '2900', '53'); -INSERT INTO cp_tree VALUES ('2926', '3', '51', '203', '2925', '52'); -INSERT INTO cp_tree VALUES ('2927', '2', '54', '203', '2900', '57'); -INSERT INTO cp_tree VALUES ('2928', '3', '55', '203', '2927', '56'); -INSERT INTO cp_tree VALUES ('2929', '2', '58', '203', '2900', '61'); -INSERT INTO cp_tree VALUES ('2930', '3', '59', '203', '2929', '60'); -INSERT INTO cp_tree VALUES ('2931', '2', '62', '203', '2900', '67'); -INSERT INTO cp_tree VALUES ('2932', '3', '63', '203', '2931', '64'); -INSERT INTO cp_tree VALUES ('2933', '3', '65', '203', '2931', '66'); -INSERT INTO cp_tree VALUES ('2934', '2', '68', '203', '2900', '71'); -INSERT INTO cp_tree VALUES ('2935', '3', '69', '203', '2934', '70'); -INSERT INTO cp_tree VALUES ('2936', '2', '72', '203', '2900', '75'); -INSERT INTO cp_tree VALUES ('2937', '3', '73', '203', '2936', '74'); -INSERT INTO cp_tree VALUES ('2938', '2', '76', '203', '2900', '83'); -INSERT INTO cp_tree VALUES ('2939', '3', '77', '203', '2938', '78'); -INSERT INTO cp_tree VALUES ('2940', '3', '79', '203', '2938', '82'); -INSERT INTO cp_tree VALUES ('2941', '4', '80', '203', '2940', '81'); -INSERT INTO cp_tree VALUES ('2942', '2', '84', '203', '2900', '97'); -INSERT INTO cp_tree VALUES ('2943', '3', '85', '203', '2942', '90'); -INSERT INTO cp_tree VALUES ('2944', '4', '86', '203', '2943', '87'); -INSERT INTO cp_tree VALUES ('2945', '4', '88', '203', '2943', '89'); -INSERT INTO cp_tree VALUES ('2946', '3', '91', '203', '2942', '92'); -INSERT INTO cp_tree VALUES ('2947', '3', '93', '203', '2942', '96'); -INSERT INTO cp_tree VALUES ('2948', '4', '94', '203', '2947', '95'); -INSERT INTO cp_tree VALUES ('2949', '2', '98', '203', '2900', '99'); -INSERT INTO cp_tree VALUES ('2950', '1', '1', '204', '0', '100'); -INSERT INTO cp_tree VALUES ('2951', '2', '2', '204', '2950', '35'); -INSERT INTO cp_tree VALUES ('2952', '3', '3', '204', '2951', '10'); -INSERT INTO cp_tree VALUES ('2953', '4', '4', '204', '2952', '5'); -INSERT INTO cp_tree VALUES ('2954', '4', '6', '204', '2952', '7'); -INSERT INTO cp_tree VALUES ('2955', '4', '8', '204', '2952', '9'); -INSERT INTO cp_tree VALUES ('2956', '3', '11', '204', '2951', '18'); -INSERT INTO cp_tree VALUES ('2957', '4', '12', '204', '2956', '13'); -INSERT INTO cp_tree VALUES ('2958', '4', '14', '204', '2956', '15'); -INSERT INTO cp_tree VALUES ('2959', '4', '16', '204', '2956', '17'); -INSERT INTO cp_tree VALUES ('2960', '3', '19', '204', '2951', '26'); -INSERT INTO cp_tree VALUES ('2961', '4', '20', '204', '2960', '21'); -INSERT INTO cp_tree VALUES ('2962', '4', '22', '204', '2960', '23'); -INSERT INTO cp_tree VALUES ('2963', '4', '24', '204', '2960', '25'); -INSERT INTO cp_tree VALUES ('2964', '3', '27', '204', '2951', '34'); -INSERT INTO cp_tree VALUES ('2965', '4', '28', '204', '2964', '29'); -INSERT INTO cp_tree VALUES ('2966', '4', '30', '204', '2964', '31'); -INSERT INTO cp_tree VALUES ('2967', '4', '32', '204', '2964', '33'); -INSERT INTO cp_tree VALUES ('2968', '2', '36', '204', '2950', '49'); -INSERT INTO cp_tree VALUES ('2969', '3', '37', '204', '2968', '38'); -INSERT INTO cp_tree VALUES ('2970', '3', '39', '204', '2968', '40'); -INSERT INTO cp_tree VALUES ('2971', '3', '41', '204', '2968', '42'); -INSERT INTO cp_tree VALUES ('2972', '3', '43', '204', '2968', '44'); -INSERT INTO cp_tree VALUES ('2973', '3', '45', '204', '2968', '46'); -INSERT INTO cp_tree VALUES ('2974', '3', '47', '204', '2968', '48'); -INSERT INTO cp_tree VALUES ('2975', '2', '50', '204', '2950', '53'); -INSERT INTO cp_tree VALUES ('2976', '3', '51', '204', '2975', '52'); -INSERT INTO cp_tree VALUES ('2977', '2', '54', '204', '2950', '57'); -INSERT INTO cp_tree VALUES ('2978', '3', '55', '204', '2977', '56'); -INSERT INTO cp_tree VALUES ('2979', '2', '58', '204', '2950', '61'); -INSERT INTO cp_tree VALUES ('2980', '3', '59', '204', '2979', '60'); -INSERT INTO cp_tree VALUES ('2981', '2', '62', '204', '2950', '67'); -INSERT INTO cp_tree VALUES ('2982', '3', '63', '204', '2981', '64'); -INSERT INTO cp_tree VALUES ('2983', '3', '65', '204', '2981', '66'); -INSERT INTO cp_tree VALUES ('2984', '2', '68', '204', '2950', '71'); -INSERT INTO cp_tree VALUES ('2985', '3', '69', '204', '2984', '70'); -INSERT INTO cp_tree VALUES ('2986', '2', '72', '204', '2950', '75'); -INSERT INTO cp_tree VALUES ('2987', '3', '73', '204', '2986', '74'); -INSERT INTO cp_tree VALUES ('2988', '2', '76', '204', '2950', '83'); -INSERT INTO cp_tree VALUES ('2989', '3', '77', '204', '2988', '78'); -INSERT INTO cp_tree VALUES ('2990', '3', '79', '204', '2988', '82'); -INSERT INTO cp_tree VALUES ('2991', '4', '80', '204', '2990', '81'); -INSERT INTO cp_tree VALUES ('2992', '2', '84', '204', '2950', '97'); -INSERT INTO cp_tree VALUES ('2993', '3', '85', '204', '2992', '90'); -INSERT INTO cp_tree VALUES ('2994', '4', '86', '204', '2993', '87'); -INSERT INTO cp_tree VALUES ('2995', '4', '88', '204', '2993', '89'); -INSERT INTO cp_tree VALUES ('2996', '3', '91', '204', '2992', '92'); -INSERT INTO cp_tree VALUES ('2997', '3', '93', '204', '2992', '96'); -INSERT INTO cp_tree VALUES ('2998', '4', '94', '204', '2997', '95'); -INSERT INTO cp_tree VALUES ('2999', '2', '98', '204', '2950', '99'); -INSERT INTO cp_tree VALUES ('3000', '1', '1', '205', '0', '100'); -INSERT INTO cp_tree VALUES ('3001', '2', '2', '205', '3000', '35'); -INSERT INTO cp_tree VALUES ('3002', '3', '3', '205', '3001', '10'); -INSERT INTO cp_tree VALUES ('3003', '4', '4', '205', '3002', '5'); -INSERT INTO cp_tree VALUES ('3004', '4', '6', '205', '3002', '7'); -INSERT INTO cp_tree VALUES ('3005', '4', '8', '205', '3002', '9'); -INSERT INTO cp_tree VALUES ('3006', '3', '11', '205', '3001', '18'); -INSERT INTO cp_tree VALUES ('3007', '4', '12', '205', '3006', '13'); -INSERT INTO cp_tree VALUES ('3008', '4', '14', '205', '3006', '15'); -INSERT INTO cp_tree VALUES ('3009', '4', '16', '205', '3006', '17'); -INSERT INTO cp_tree VALUES ('3010', '3', '19', '205', '3001', '26'); -INSERT INTO cp_tree VALUES ('3011', '4', '20', '205', '3010', '21'); -INSERT INTO cp_tree VALUES ('3012', '4', '22', '205', '3010', '23'); -INSERT INTO cp_tree VALUES ('3013', '4', '24', '205', '3010', '25'); -INSERT INTO cp_tree VALUES ('3014', '3', '27', '205', '3001', '34'); -INSERT INTO cp_tree VALUES ('3015', '4', '28', '205', '3014', '29'); -INSERT INTO cp_tree VALUES ('3016', '4', '30', '205', '3014', '31'); -INSERT INTO cp_tree VALUES ('3017', '4', '32', '205', '3014', '33'); -INSERT INTO cp_tree VALUES ('3018', '2', '36', '205', '3000', '49'); -INSERT INTO cp_tree VALUES ('3019', '3', '37', '205', '3018', '38'); -INSERT INTO cp_tree VALUES ('3020', '3', '39', '205', '3018', '40'); -INSERT INTO cp_tree VALUES ('3021', '3', '41', '205', '3018', '42'); -INSERT INTO cp_tree VALUES ('3022', '3', '43', '205', '3018', '44'); -INSERT INTO cp_tree VALUES ('3023', '3', '45', '205', '3018', '46'); -INSERT INTO cp_tree VALUES ('3024', '3', '47', '205', '3018', '48'); -INSERT INTO cp_tree VALUES ('3025', '2', '50', '205', '3000', '53'); -INSERT INTO cp_tree VALUES ('3026', '3', '51', '205', '3025', '52'); -INSERT INTO cp_tree VALUES ('3027', '2', '54', '205', '3000', '57'); -INSERT INTO cp_tree VALUES ('3028', '3', '55', '205', '3027', '56'); -INSERT INTO cp_tree VALUES ('3029', '2', '58', '205', '3000', '61'); -INSERT INTO cp_tree VALUES ('3030', '3', '59', '205', '3029', '60'); -INSERT INTO cp_tree VALUES ('3031', '2', '62', '205', '3000', '67'); -INSERT INTO cp_tree VALUES ('3032', '3', '63', '205', '3031', '64'); -INSERT INTO cp_tree VALUES ('3033', '3', '65', '205', '3031', '66'); -INSERT INTO cp_tree VALUES ('3034', '2', '68', '205', '3000', '71'); -INSERT INTO cp_tree VALUES ('3035', '3', '69', '205', '3034', '70'); -INSERT INTO cp_tree VALUES ('3036', '2', '72', '205', '3000', '75'); -INSERT INTO cp_tree VALUES ('3037', '3', '73', '205', '3036', '74'); -INSERT INTO cp_tree VALUES ('3038', '2', '76', '205', '3000', '83'); -INSERT INTO cp_tree VALUES ('3039', '3', '77', '205', '3038', '78'); -INSERT INTO cp_tree VALUES ('3040', '3', '79', '205', '3038', '82'); -INSERT INTO cp_tree VALUES ('3041', '4', '80', '205', '3040', '81'); -INSERT INTO cp_tree VALUES ('3042', '2', '84', '205', '3000', '97'); -INSERT INTO cp_tree VALUES ('3043', '3', '85', '205', '3042', '90'); -INSERT INTO cp_tree VALUES ('3044', '4', '86', '205', '3043', '87'); -INSERT INTO cp_tree VALUES ('3045', '4', '88', '205', '3043', '89'); -INSERT INTO cp_tree VALUES ('3046', '3', '91', '205', '3042', '92'); -INSERT INTO cp_tree VALUES ('3047', '3', '93', '205', '3042', '96'); -INSERT INTO cp_tree VALUES ('3048', '4', '94', '205', '3047', '95'); -INSERT INTO cp_tree VALUES ('3049', '2', '98', '205', '3000', '99'); -INSERT INTO cp_tree VALUES ('3050', '1', '1', '206', '0', '138'); -INSERT INTO cp_tree VALUES ('3051', '2', '2', '206', '3050', '27'); -INSERT INTO cp_tree VALUES ('3052', '3', '3', '206', '3051', '10'); -INSERT INTO cp_tree VALUES ('3053', '4', '4', '206', '3052', '5'); -INSERT INTO cp_tree VALUES ('3054', '4', '6', '206', '3052', '7'); -INSERT INTO cp_tree VALUES ('3055', '4', '8', '206', '3052', '9'); -INSERT INTO cp_tree VALUES ('3056', '3', '11', '206', '3051', '18'); -INSERT INTO cp_tree VALUES ('3057', '4', '12', '206', '3056', '13'); -INSERT INTO cp_tree VALUES ('3058', '4', '14', '206', '3056', '15'); -INSERT INTO cp_tree VALUES ('3059', '4', '16', '206', '3056', '17'); -INSERT INTO cp_tree VALUES ('3060', '3', '19', '206', '3051', '26'); -INSERT INTO cp_tree VALUES ('3061', '4', '20', '206', '3060', '21'); -INSERT INTO cp_tree VALUES ('3062', '4', '22', '206', '3060', '23'); -INSERT INTO cp_tree VALUES ('3063', '4', '24', '206', '3060', '25'); -INSERT INTO cp_tree VALUES ('3064', '2', '28', '206', '3050', '41'); -INSERT INTO cp_tree VALUES ('3065', '3', '29', '206', '3064', '30'); -INSERT INTO cp_tree VALUES ('3066', '3', '31', '206', '3064', '32'); -INSERT INTO cp_tree VALUES ('3067', '3', '33', '206', '3064', '34'); -INSERT INTO cp_tree VALUES ('3068', '3', '35', '206', '3064', '36'); -INSERT INTO cp_tree VALUES ('3069', '3', '37', '206', '3064', '38'); -INSERT INTO cp_tree VALUES ('3070', '3', '39', '206', '3064', '40'); -INSERT INTO cp_tree VALUES ('3071', '2', '42', '206', '3050', '45'); -INSERT INTO cp_tree VALUES ('3072', '3', '43', '206', '3071', '44'); -INSERT INTO cp_tree VALUES ('3073', '2', '46', '206', '3050', '49'); -INSERT INTO cp_tree VALUES ('3074', '3', '47', '206', '3073', '48'); -INSERT INTO cp_tree VALUES ('3075', '2', '50', '206', '3050', '53'); -INSERT INTO cp_tree VALUES ('3076', '3', '51', '206', '3075', '52'); -INSERT INTO cp_tree VALUES ('3077', '2', '54', '206', '3050', '59'); -INSERT INTO cp_tree VALUES ('3078', '3', '55', '206', '3077', '56'); -INSERT INTO cp_tree VALUES ('3079', '3', '57', '206', '3077', '58'); -INSERT INTO cp_tree VALUES ('3080', '2', '60', '206', '3050', '63'); -INSERT INTO cp_tree VALUES ('3081', '3', '61', '206', '3080', '62'); -INSERT INTO cp_tree VALUES ('3082', '2', '64', '206', '3050', '67'); -INSERT INTO cp_tree VALUES ('3083', '3', '65', '206', '3082', '66'); -INSERT INTO cp_tree VALUES ('3084', '2', '68', '206', '3050', '87'); -INSERT INTO cp_tree VALUES ('3085', '3', '69', '206', '3084', '70'); -INSERT INTO cp_tree VALUES ('3086', '3', '71', '206', '3084', '74'); -INSERT INTO cp_tree VALUES ('3087', '4', '72', '206', '3086', '73'); -INSERT INTO cp_tree VALUES ('3088', '3', '75', '206', '3084', '78'); -INSERT INTO cp_tree VALUES ('3089', '4', '76', '206', '3088', '77'); -INSERT INTO cp_tree VALUES ('3090', '3', '79', '206', '3084', '82'); -INSERT INTO cp_tree VALUES ('3091', '4', '80', '206', '3090', '81'); -INSERT INTO cp_tree VALUES ('3092', '3', '83', '206', '3084', '86'); -INSERT INTO cp_tree VALUES ('3093', '4', '84', '206', '3092', '85'); -INSERT INTO cp_tree VALUES ('3094', '2', '88', '206', '3050', '111'); -INSERT INTO cp_tree VALUES ('3095', '3', '89', '206', '3094', '90'); -INSERT INTO cp_tree VALUES ('3096', '3', '91', '206', '3094', '94'); -INSERT INTO cp_tree VALUES ('3097', '4', '92', '206', '3096', '93'); -INSERT INTO cp_tree VALUES ('3098', '3', '95', '206', '3094', '98'); -INSERT INTO cp_tree VALUES ('3099', '4', '96', '206', '3098', '97'); -INSERT INTO cp_tree VALUES ('3100', '3', '99', '206', '3094', '102'); -INSERT INTO cp_tree VALUES ('3101', '4', '100', '206', '3100', '101'); -INSERT INTO cp_tree VALUES ('3102', '3', '103', '206', '3094', '106'); -INSERT INTO cp_tree VALUES ('3103', '4', '104', '206', '3102', '105'); -INSERT INTO cp_tree VALUES ('3104', '3', '107', '206', '3094', '110'); -INSERT INTO cp_tree VALUES ('3105', '4', '108', '206', '3104', '109'); -INSERT INTO cp_tree VALUES ('3106', '2', '112', '206', '3050', '135'); -INSERT INTO cp_tree VALUES ('3107', '3', '113', '206', '3106', '114'); -INSERT INTO cp_tree VALUES ('3108', '3', '115', '206', '3106', '118'); -INSERT INTO cp_tree VALUES ('3109', '4', '116', '206', '3108', '117'); -INSERT INTO cp_tree VALUES ('3110', '3', '119', '206', '3106', '122'); -INSERT INTO cp_tree VALUES ('3111', '4', '120', '206', '3110', '121'); -INSERT INTO cp_tree VALUES ('3112', '3', '123', '206', '3106', '126'); -INSERT INTO cp_tree VALUES ('3113', '4', '124', '206', '3112', '125'); -INSERT INTO cp_tree VALUES ('3114', '3', '127', '206', '3106', '130'); -INSERT INTO cp_tree VALUES ('3115', '4', '128', '206', '3114', '129'); -INSERT INTO cp_tree VALUES ('3116', '3', '131', '206', '3106', '134'); -INSERT INTO cp_tree VALUES ('3117', '4', '132', '206', '3116', '133'); -INSERT INTO cp_tree VALUES ('3118', '2', '136', '206', '3050', '137'); -INSERT INTO cp_tree VALUES ('3119', '1', '1', '207', '0', '150'); -INSERT INTO cp_tree VALUES ('3120', '2', '2', '207', '3119', '35'); -INSERT INTO cp_tree VALUES ('3121', '3', '3', '207', '3120', '10'); -INSERT INTO cp_tree VALUES ('3122', '4', '4', '207', '3121', '5'); -INSERT INTO cp_tree VALUES ('3123', '4', '6', '207', '3121', '7'); -INSERT INTO cp_tree VALUES ('3124', '4', '8', '207', '3121', '9'); -INSERT INTO cp_tree VALUES ('3125', '3', '11', '207', '3120', '18'); -INSERT INTO cp_tree VALUES ('3126', '4', '12', '207', '3125', '13'); -INSERT INTO cp_tree VALUES ('3127', '4', '14', '207', '3125', '15'); -INSERT INTO cp_tree VALUES ('3128', '4', '16', '207', '3125', '17'); -INSERT INTO cp_tree VALUES ('3129', '3', '19', '207', '3120', '26'); -INSERT INTO cp_tree VALUES ('3130', '4', '20', '207', '3129', '21'); -INSERT INTO cp_tree VALUES ('3131', '4', '22', '207', '3129', '23'); -INSERT INTO cp_tree VALUES ('3132', '4', '24', '207', '3129', '25'); -INSERT INTO cp_tree VALUES ('3133', '3', '27', '207', '3120', '34'); -INSERT INTO cp_tree VALUES ('3134', '4', '28', '207', '3133', '29'); -INSERT INTO cp_tree VALUES ('3135', '4', '30', '207', '3133', '31'); -INSERT INTO cp_tree VALUES ('3136', '4', '32', '207', '3133', '33'); -INSERT INTO cp_tree VALUES ('3137', '2', '36', '207', '3119', '49'); -INSERT INTO cp_tree VALUES ('3138', '3', '37', '207', '3137', '38'); -INSERT INTO cp_tree VALUES ('3139', '3', '39', '207', '3137', '40'); -INSERT INTO cp_tree VALUES ('3140', '3', '41', '207', '3137', '42'); -INSERT INTO cp_tree VALUES ('3141', '3', '43', '207', '3137', '44'); -INSERT INTO cp_tree VALUES ('3142', '3', '45', '207', '3137', '46'); -INSERT INTO cp_tree VALUES ('3143', '3', '47', '207', '3137', '48'); -INSERT INTO cp_tree VALUES ('3144', '2', '50', '207', '3119', '53'); -INSERT INTO cp_tree VALUES ('3145', '3', '51', '207', '3144', '52'); -INSERT INTO cp_tree VALUES ('3146', '2', '54', '207', '3119', '57'); -INSERT INTO cp_tree VALUES ('3147', '3', '55', '207', '3146', '56'); -INSERT INTO cp_tree VALUES ('3148', '2', '58', '207', '3119', '61'); -INSERT INTO cp_tree VALUES ('3149', '3', '59', '207', '3148', '60'); -INSERT INTO cp_tree VALUES ('3150', '2', '62', '207', '3119', '67'); -INSERT INTO cp_tree VALUES ('3151', '3', '63', '207', '3150', '64'); -INSERT INTO cp_tree VALUES ('3152', '3', '65', '207', '3150', '66'); -INSERT INTO cp_tree VALUES ('3153', '2', '68', '207', '3119', '71'); -INSERT INTO cp_tree VALUES ('3154', '3', '69', '207', '3153', '70'); -INSERT INTO cp_tree VALUES ('3155', '2', '72', '207', '3119', '75'); -INSERT INTO cp_tree VALUES ('3156', '3', '73', '207', '3155', '74'); -INSERT INTO cp_tree VALUES ('3157', '2', '76', '207', '3119', '95'); -INSERT INTO cp_tree VALUES ('3158', '3', '77', '207', '3157', '78'); -INSERT INTO cp_tree VALUES ('3159', '3', '79', '207', '3157', '80'); -INSERT INTO cp_tree VALUES ('3160', '3', '81', '207', '3157', '82'); -INSERT INTO cp_tree VALUES ('3161', '3', '83', '207', '3157', '84'); -INSERT INTO cp_tree VALUES ('3162', '3', '85', '207', '3157', '86'); -INSERT INTO cp_tree VALUES ('3163', '3', '87', '207', '3157', '90'); -INSERT INTO cp_tree VALUES ('3164', '4', '88', '207', '3163', '89'); -INSERT INTO cp_tree VALUES ('3165', '3', '91', '207', '3157', '94'); -INSERT INTO cp_tree VALUES ('3166', '4', '92', '207', '3165', '93'); -INSERT INTO cp_tree VALUES ('3167', '2', '96', '207', '3119', '113'); -INSERT INTO cp_tree VALUES ('3168', '3', '97', '207', '3167', '100'); -INSERT INTO cp_tree VALUES ('3169', '4', '98', '207', '3168', '99'); -INSERT INTO cp_tree VALUES ('3170', '3', '101', '207', '3167', '102'); -INSERT INTO cp_tree VALUES ('3171', '3', '103', '207', '3167', '104'); -INSERT INTO cp_tree VALUES ('3172', '3', '105', '207', '3167', '106'); -INSERT INTO cp_tree VALUES ('3173', '3', '107', '207', '3167', '110'); -INSERT INTO cp_tree VALUES ('3174', '4', '108', '207', '3173', '109'); -INSERT INTO cp_tree VALUES ('3175', '3', '111', '207', '3167', '112'); -INSERT INTO cp_tree VALUES ('3176', '2', '114', '207', '3119', '133'); -INSERT INTO cp_tree VALUES ('3177', '3', '115', '207', '3176', '116'); -INSERT INTO cp_tree VALUES ('3178', '3', '117', '207', '3176', '118'); -INSERT INTO cp_tree VALUES ('3179', '3', '119', '207', '3176', '122'); -INSERT INTO cp_tree VALUES ('3180', '4', '120', '207', '3179', '121'); -INSERT INTO cp_tree VALUES ('3181', '3', '123', '207', '3176', '126'); -INSERT INTO cp_tree VALUES ('3182', '4', '124', '207', '3181', '125'); -INSERT INTO cp_tree VALUES ('3183', '3', '127', '207', '3176', '130'); -INSERT INTO cp_tree VALUES ('3184', '4', '128', '207', '3183', '129'); -INSERT INTO cp_tree VALUES ('3185', '3', '131', '207', '3176', '132'); -INSERT INTO cp_tree VALUES ('3186', '2', '134', '207', '3119', '147'); -INSERT INTO cp_tree VALUES ('3187', '3', '135', '207', '3186', '136'); -INSERT INTO cp_tree VALUES ('3188', '3', '137', '207', '3186', '142'); -INSERT INTO cp_tree VALUES ('3189', '4', '138', '207', '3188', '139'); -INSERT INTO cp_tree VALUES ('3190', '4', '140', '207', '3188', '141'); -INSERT INTO cp_tree VALUES ('3191', '3', '143', '207', '3186', '146'); -INSERT INTO cp_tree VALUES ('3192', '4', '144', '207', '3191', '145'); -INSERT INTO cp_tree VALUES ('3193', '2', '148', '207', '3119', '149'); -INSERT INTO cp_tree VALUES ('3194', '1', '1', '208', '0', '144'); -INSERT INTO cp_tree VALUES ('3195', '2', '2', '208', '3194', '53'); -INSERT INTO cp_tree VALUES ('3196', '3', '3', '208', '3195', '10'); -INSERT INTO cp_tree VALUES ('3197', '4', '4', '208', '3196', '5'); -INSERT INTO cp_tree VALUES ('3198', '4', '6', '208', '3196', '7'); -INSERT INTO cp_tree VALUES ('3199', '4', '8', '208', '3196', '9'); -INSERT INTO cp_tree VALUES ('3200', '3', '11', '208', '3195', '18'); -INSERT INTO cp_tree VALUES ('3201', '4', '12', '208', '3200', '13'); -INSERT INTO cp_tree VALUES ('3202', '4', '14', '208', '3200', '15'); -INSERT INTO cp_tree VALUES ('3203', '4', '16', '208', '3200', '17'); -INSERT INTO cp_tree VALUES ('3204', '3', '19', '208', '3195', '36'); -INSERT INTO cp_tree VALUES ('3205', '4', '20', '208', '3204', '27'); -INSERT INTO cp_tree VALUES ('3206', '5', '21', '208', '3205', '22'); -INSERT INTO cp_tree VALUES ('3207', '5', '23', '208', '3205', '24'); -INSERT INTO cp_tree VALUES ('3208', '5', '25', '208', '3205', '26'); -INSERT INTO cp_tree VALUES ('3209', '4', '28', '208', '3204', '35'); -INSERT INTO cp_tree VALUES ('3210', '5', '29', '208', '3209', '30'); -INSERT INTO cp_tree VALUES ('3211', '5', '31', '208', '3209', '32'); -INSERT INTO cp_tree VALUES ('3212', '5', '33', '208', '3209', '34'); -INSERT INTO cp_tree VALUES ('3213', '3', '37', '208', '3195', '44'); -INSERT INTO cp_tree VALUES ('3214', '4', '38', '208', '3213', '39'); -INSERT INTO cp_tree VALUES ('3215', '4', '40', '208', '3213', '41'); -INSERT INTO cp_tree VALUES ('3216', '4', '42', '208', '3213', '43'); -INSERT INTO cp_tree VALUES ('3217', '3', '45', '208', '3195', '52'); -INSERT INTO cp_tree VALUES ('3218', '4', '46', '208', '3217', '47'); -INSERT INTO cp_tree VALUES ('3219', '4', '48', '208', '3217', '49'); -INSERT INTO cp_tree VALUES ('3220', '4', '50', '208', '3217', '51'); -INSERT INTO cp_tree VALUES ('3221', '2', '54', '208', '3194', '67'); -INSERT INTO cp_tree VALUES ('3222', '3', '55', '208', '3221', '56'); -INSERT INTO cp_tree VALUES ('3223', '3', '57', '208', '3221', '58'); -INSERT INTO cp_tree VALUES ('3224', '3', '59', '208', '3221', '60'); -INSERT INTO cp_tree VALUES ('3225', '3', '61', '208', '3221', '62'); -INSERT INTO cp_tree VALUES ('3226', '3', '63', '208', '3221', '64'); -INSERT INTO cp_tree VALUES ('3227', '3', '65', '208', '3221', '66'); -INSERT INTO cp_tree VALUES ('3228', '2', '68', '208', '3194', '71'); -INSERT INTO cp_tree VALUES ('3229', '3', '69', '208', '3228', '70'); -INSERT INTO cp_tree VALUES ('3230', '2', '72', '208', '3194', '75'); -INSERT INTO cp_tree VALUES ('3231', '3', '73', '208', '3230', '74'); -INSERT INTO cp_tree VALUES ('3232', '2', '76', '208', '3194', '79'); -INSERT INTO cp_tree VALUES ('3233', '3', '77', '208', '3232', '78'); -INSERT INTO cp_tree VALUES ('3234', '2', '80', '208', '3194', '85'); -INSERT INTO cp_tree VALUES ('3235', '3', '81', '208', '3234', '82'); -INSERT INTO cp_tree VALUES ('3236', '3', '83', '208', '3234', '84'); -INSERT INTO cp_tree VALUES ('3237', '2', '86', '208', '3194', '89'); -INSERT INTO cp_tree VALUES ('3238', '3', '87', '208', '3237', '88'); -INSERT INTO cp_tree VALUES ('3239', '2', '90', '208', '3194', '93'); -INSERT INTO cp_tree VALUES ('3240', '3', '91', '208', '3239', '92'); -INSERT INTO cp_tree VALUES ('3241', '2', '94', '208', '3194', '99'); -INSERT INTO cp_tree VALUES ('3242', '3', '95', '208', '3241', '98'); -INSERT INTO cp_tree VALUES ('3243', '4', '96', '208', '3242', '97'); -INSERT INTO cp_tree VALUES ('3244', '2', '100', '208', '3194', '105'); -INSERT INTO cp_tree VALUES ('3245', '3', '101', '208', '3244', '104'); -INSERT INTO cp_tree VALUES ('3246', '4', '102', '208', '3245', '103'); -INSERT INTO cp_tree VALUES ('3247', '2', '106', '208', '3194', '111'); -INSERT INTO cp_tree VALUES ('3248', '3', '107', '208', '3247', '110'); -INSERT INTO cp_tree VALUES ('3249', '4', '108', '208', '3248', '109'); -INSERT INTO cp_tree VALUES ('3250', '2', '112', '208', '3194', '117'); -INSERT INTO cp_tree VALUES ('3251', '3', '113', '208', '3250', '116'); -INSERT INTO cp_tree VALUES ('3252', '4', '114', '208', '3251', '115'); -INSERT INTO cp_tree VALUES ('3253', '2', '118', '208', '3194', '127'); -INSERT INTO cp_tree VALUES ('3254', '3', '119', '208', '3253', '122'); -INSERT INTO cp_tree VALUES ('3255', '4', '120', '208', '3254', '121'); -INSERT INTO cp_tree VALUES ('3256', '3', '123', '208', '3253', '126'); -INSERT INTO cp_tree VALUES ('3257', '4', '124', '208', '3256', '125'); -INSERT INTO cp_tree VALUES ('3258', '2', '128', '208', '3194', '141'); -INSERT INTO cp_tree VALUES ('3259', '3', '129', '208', '3258', '132'); -INSERT INTO cp_tree VALUES ('3260', '4', '130', '208', '3259', '131'); -INSERT INTO cp_tree VALUES ('3261', '3', '133', '208', '3258', '136'); -INSERT INTO cp_tree VALUES ('3262', '4', '134', '208', '3261', '135'); -INSERT INTO cp_tree VALUES ('3263', '3', '137', '208', '3258', '140'); -INSERT INTO cp_tree VALUES ('3264', '4', '138', '208', '3263', '139'); -INSERT INTO cp_tree VALUES ('3265', '2', '142', '208', '3194', '143'); -INSERT INTO cp_tree VALUES ('3266', '1', '1', '209', '0', '98'); -INSERT INTO cp_tree VALUES ('3267', '2', '2', '209', '3266', '45'); -INSERT INTO cp_tree VALUES ('3268', '3', '3', '209', '3267', '10'); -INSERT INTO cp_tree VALUES ('3269', '4', '4', '209', '3268', '5'); -INSERT INTO cp_tree VALUES ('3270', '4', '6', '209', '3268', '7'); -INSERT INTO cp_tree VALUES ('3271', '4', '8', '209', '3268', '9'); -INSERT INTO cp_tree VALUES ('3272', '3', '11', '209', '3267', '36'); -INSERT INTO cp_tree VALUES ('3273', '4', '12', '209', '3272', '19'); -INSERT INTO cp_tree VALUES ('3274', '5', '13', '209', '3273', '14'); -INSERT INTO cp_tree VALUES ('3275', '5', '15', '209', '3273', '16'); -INSERT INTO cp_tree VALUES ('3276', '5', '17', '209', '3273', '18'); -INSERT INTO cp_tree VALUES ('3277', '4', '20', '209', '3272', '27'); -INSERT INTO cp_tree VALUES ('3278', '5', '21', '209', '3277', '22'); -INSERT INTO cp_tree VALUES ('3279', '5', '23', '209', '3277', '24'); -INSERT INTO cp_tree VALUES ('3280', '5', '25', '209', '3277', '26'); -INSERT INTO cp_tree VALUES ('3281', '4', '28', '209', '3272', '35'); -INSERT INTO cp_tree VALUES ('3282', '5', '29', '209', '3281', '30'); -INSERT INTO cp_tree VALUES ('3283', '5', '31', '209', '3281', '32'); -INSERT INTO cp_tree VALUES ('3284', '5', '33', '209', '3281', '34'); -INSERT INTO cp_tree VALUES ('3285', '3', '37', '209', '3267', '44'); -INSERT INTO cp_tree VALUES ('3286', '4', '38', '209', '3285', '39'); -INSERT INTO cp_tree VALUES ('3287', '4', '40', '209', '3285', '41'); -INSERT INTO cp_tree VALUES ('3288', '4', '42', '209', '3285', '43'); -INSERT INTO cp_tree VALUES ('3289', '2', '46', '209', '3266', '59'); -INSERT INTO cp_tree VALUES ('3290', '3', '47', '209', '3289', '48'); -INSERT INTO cp_tree VALUES ('3291', '3', '49', '209', '3289', '50'); -INSERT INTO cp_tree VALUES ('3292', '3', '51', '209', '3289', '52'); -INSERT INTO cp_tree VALUES ('3293', '3', '53', '209', '3289', '54'); -INSERT INTO cp_tree VALUES ('3294', '3', '55', '209', '3289', '56'); -INSERT INTO cp_tree VALUES ('3295', '3', '57', '209', '3289', '58'); -INSERT INTO cp_tree VALUES ('3296', '2', '60', '209', '3266', '63'); -INSERT INTO cp_tree VALUES ('3297', '3', '61', '209', '3296', '62'); -INSERT INTO cp_tree VALUES ('3298', '2', '64', '209', '3266', '67'); -INSERT INTO cp_tree VALUES ('3299', '3', '65', '209', '3298', '66'); -INSERT INTO cp_tree VALUES ('3300', '2', '68', '209', '3266', '71'); -INSERT INTO cp_tree VALUES ('3301', '3', '69', '209', '3300', '70'); -INSERT INTO cp_tree VALUES ('3302', '2', '72', '209', '3266', '77'); -INSERT INTO cp_tree VALUES ('3303', '3', '73', '209', '3302', '74'); -INSERT INTO cp_tree VALUES ('3304', '3', '75', '209', '3302', '76'); -INSERT INTO cp_tree VALUES ('3305', '2', '78', '209', '3266', '81'); -INSERT INTO cp_tree VALUES ('3306', '3', '79', '209', '3305', '80'); -INSERT INTO cp_tree VALUES ('3307', '2', '82', '209', '3266', '85'); -INSERT INTO cp_tree VALUES ('3308', '3', '83', '209', '3307', '84'); -INSERT INTO cp_tree VALUES ('3309', '2', '86', '209', '3266', '95'); -INSERT INTO cp_tree VALUES ('3310', '3', '87', '209', '3309', '90'); -INSERT INTO cp_tree VALUES ('3311', '4', '88', '209', '3310', '89'); -INSERT INTO cp_tree VALUES ('3312', '3', '91', '209', '3309', '94'); -INSERT INTO cp_tree VALUES ('3313', '4', '92', '209', '3312', '93'); -INSERT INTO cp_tree VALUES ('3314', '2', '96', '209', '3266', '97'); -INSERT INTO cp_tree VALUES ('3315', '1', '1', '210', '0', '98'); -INSERT INTO cp_tree VALUES ('3316', '2', '2', '210', '3315', '45'); -INSERT INTO cp_tree VALUES ('3317', '3', '3', '210', '3316', '10'); -INSERT INTO cp_tree VALUES ('3318', '4', '4', '210', '3317', '5'); -INSERT INTO cp_tree VALUES ('3319', '4', '6', '210', '3317', '7'); -INSERT INTO cp_tree VALUES ('3320', '4', '8', '210', '3317', '9'); -INSERT INTO cp_tree VALUES ('3321', '3', '11', '210', '3316', '36'); -INSERT INTO cp_tree VALUES ('3322', '4', '12', '210', '3321', '19'); -INSERT INTO cp_tree VALUES ('3323', '5', '13', '210', '3322', '14'); -INSERT INTO cp_tree VALUES ('3324', '5', '15', '210', '3322', '16'); -INSERT INTO cp_tree VALUES ('3325', '5', '17', '210', '3322', '18'); -INSERT INTO cp_tree VALUES ('3326', '4', '20', '210', '3321', '27'); -INSERT INTO cp_tree VALUES ('3327', '5', '21', '210', '3326', '22'); -INSERT INTO cp_tree VALUES ('3328', '5', '23', '210', '3326', '24'); -INSERT INTO cp_tree VALUES ('3329', '5', '25', '210', '3326', '26'); -INSERT INTO cp_tree VALUES ('3330', '4', '28', '210', '3321', '35'); -INSERT INTO cp_tree VALUES ('3331', '5', '29', '210', '3330', '30'); -INSERT INTO cp_tree VALUES ('3332', '5', '31', '210', '3330', '32'); -INSERT INTO cp_tree VALUES ('3333', '5', '33', '210', '3330', '34'); -INSERT INTO cp_tree VALUES ('3334', '3', '37', '210', '3316', '44'); -INSERT INTO cp_tree VALUES ('3335', '4', '38', '210', '3334', '39'); -INSERT INTO cp_tree VALUES ('3336', '4', '40', '210', '3334', '41'); -INSERT INTO cp_tree VALUES ('3337', '4', '42', '210', '3334', '43'); -INSERT INTO cp_tree VALUES ('3338', '2', '46', '210', '3315', '59'); -INSERT INTO cp_tree VALUES ('3339', '3', '47', '210', '3338', '48'); -INSERT INTO cp_tree VALUES ('3340', '3', '49', '210', '3338', '50'); -INSERT INTO cp_tree VALUES ('3341', '3', '51', '210', '3338', '52'); -INSERT INTO cp_tree VALUES ('3342', '3', '53', '210', '3338', '54'); -INSERT INTO cp_tree VALUES ('3343', '3', '55', '210', '3338', '56'); -INSERT INTO cp_tree VALUES ('3344', '3', '57', '210', '3338', '58'); -INSERT INTO cp_tree VALUES ('3345', '2', '60', '210', '3315', '63'); -INSERT INTO cp_tree VALUES ('3346', '3', '61', '210', '3345', '62'); -INSERT INTO cp_tree VALUES ('3347', '2', '64', '210', '3315', '67'); -INSERT INTO cp_tree VALUES ('3348', '3', '65', '210', '3347', '66'); -INSERT INTO cp_tree VALUES ('3349', '2', '68', '210', '3315', '71'); -INSERT INTO cp_tree VALUES ('3350', '3', '69', '210', '3349', '70'); -INSERT INTO cp_tree VALUES ('3351', '2', '72', '210', '3315', '77'); -INSERT INTO cp_tree VALUES ('3352', '3', '73', '210', '3351', '74'); -INSERT INTO cp_tree VALUES ('3353', '3', '75', '210', '3351', '76'); -INSERT INTO cp_tree VALUES ('3354', '2', '78', '210', '3315', '81'); -INSERT INTO cp_tree VALUES ('3355', '3', '79', '210', '3354', '80'); -INSERT INTO cp_tree VALUES ('3356', '2', '82', '210', '3315', '85'); -INSERT INTO cp_tree VALUES ('3357', '3', '83', '210', '3356', '84'); -INSERT INTO cp_tree VALUES ('3358', '2', '86', '210', '3315', '95'); -INSERT INTO cp_tree VALUES ('3359', '3', '87', '210', '3358', '90'); -INSERT INTO cp_tree VALUES ('3360', '4', '88', '210', '3359', '89'); -INSERT INTO cp_tree VALUES ('3361', '3', '91', '210', '3358', '94'); -INSERT INTO cp_tree VALUES ('3362', '4', '92', '210', '3361', '93'); -INSERT INTO cp_tree VALUES ('3363', '2', '96', '210', '3315', '97'); -INSERT INTO cp_tree VALUES ('3364', '1', '1', '211', '0', '68'); -INSERT INTO cp_tree VALUES ('3365', '2', '2', '211', '3364', '15'); -INSERT INTO cp_tree VALUES ('3366', '3', '3', '211', '3365', '4'); -INSERT INTO cp_tree VALUES ('3367', '3', '5', '211', '3365', '12'); -INSERT INTO cp_tree VALUES ('3368', '4', '6', '211', '3367', '7'); -INSERT INTO cp_tree VALUES ('3369', '4', '8', '211', '3367', '9'); -INSERT INTO cp_tree VALUES ('3370', '4', '10', '211', '3367', '11'); -INSERT INTO cp_tree VALUES ('3371', '3', '13', '211', '3365', '14'); -INSERT INTO cp_tree VALUES ('3372', '2', '16', '211', '3364', '29'); -INSERT INTO cp_tree VALUES ('3373', '3', '17', '211', '3372', '18'); -INSERT INTO cp_tree VALUES ('3374', '3', '19', '211', '3372', '20'); -INSERT INTO cp_tree VALUES ('3375', '3', '21', '211', '3372', '22'); -INSERT INTO cp_tree VALUES ('3376', '3', '23', '211', '3372', '24'); -INSERT INTO cp_tree VALUES ('3377', '3', '25', '211', '3372', '26'); -INSERT INTO cp_tree VALUES ('3378', '3', '27', '211', '3372', '28'); -INSERT INTO cp_tree VALUES ('3379', '2', '30', '211', '3364', '33'); -INSERT INTO cp_tree VALUES ('3380', '3', '31', '211', '3379', '32'); -INSERT INTO cp_tree VALUES ('3381', '2', '34', '211', '3364', '37'); -INSERT INTO cp_tree VALUES ('3382', '3', '35', '211', '3381', '36'); -INSERT INTO cp_tree VALUES ('3383', '2', '38', '211', '3364', '41'); -INSERT INTO cp_tree VALUES ('3384', '3', '39', '211', '3383', '40'); -INSERT INTO cp_tree VALUES ('3385', '2', '42', '211', '3364', '47'); -INSERT INTO cp_tree VALUES ('3386', '3', '43', '211', '3385', '44'); -INSERT INTO cp_tree VALUES ('3387', '3', '45', '211', '3385', '46'); -INSERT INTO cp_tree VALUES ('3388', '2', '48', '211', '3364', '51'); -INSERT INTO cp_tree VALUES ('3389', '3', '49', '211', '3388', '50'); -INSERT INTO cp_tree VALUES ('3390', '2', '52', '211', '3364', '55'); -INSERT INTO cp_tree VALUES ('3391', '3', '53', '211', '3390', '54'); -INSERT INTO cp_tree VALUES ('3392', '2', '56', '211', '3364', '65'); -INSERT INTO cp_tree VALUES ('3393', '3', '57', '211', '3392', '60'); -INSERT INTO cp_tree VALUES ('3394', '4', '58', '211', '3393', '59'); -INSERT INTO cp_tree VALUES ('3395', '3', '61', '211', '3392', '64'); -INSERT INTO cp_tree VALUES ('3396', '4', '62', '211', '3395', '63'); -INSERT INTO cp_tree VALUES ('3397', '2', '66', '211', '3364', '67'); -INSERT INTO cp_tree VALUES ('3398', '1', '1', '212', '0', '98'); -INSERT INTO cp_tree VALUES ('3399', '2', '2', '212', '3398', '45'); -INSERT INTO cp_tree VALUES ('3400', '3', '3', '212', '3399', '10'); -INSERT INTO cp_tree VALUES ('3401', '4', '4', '212', '3400', '5'); -INSERT INTO cp_tree VALUES ('3402', '4', '6', '212', '3400', '7'); -INSERT INTO cp_tree VALUES ('3403', '4', '8', '212', '3400', '9'); -INSERT INTO cp_tree VALUES ('3404', '3', '11', '212', '3399', '36'); -INSERT INTO cp_tree VALUES ('3405', '4', '12', '212', '3404', '19'); -INSERT INTO cp_tree VALUES ('3406', '5', '13', '212', '3405', '14'); -INSERT INTO cp_tree VALUES ('3407', '5', '15', '212', '3405', '16'); -INSERT INTO cp_tree VALUES ('3408', '5', '17', '212', '3405', '18'); -INSERT INTO cp_tree VALUES ('3409', '4', '20', '212', '3404', '27'); -INSERT INTO cp_tree VALUES ('3410', '5', '21', '212', '3409', '22'); -INSERT INTO cp_tree VALUES ('3411', '5', '23', '212', '3409', '24'); -INSERT INTO cp_tree VALUES ('3412', '5', '25', '212', '3409', '26'); -INSERT INTO cp_tree VALUES ('3413', '4', '28', '212', '3404', '35'); -INSERT INTO cp_tree VALUES ('3414', '5', '29', '212', '3413', '30'); -INSERT INTO cp_tree VALUES ('3415', '5', '31', '212', '3413', '32'); -INSERT INTO cp_tree VALUES ('3416', '5', '33', '212', '3413', '34'); -INSERT INTO cp_tree VALUES ('3417', '3', '37', '212', '3399', '44'); -INSERT INTO cp_tree VALUES ('3418', '4', '38', '212', '3417', '39'); -INSERT INTO cp_tree VALUES ('3419', '4', '40', '212', '3417', '41'); -INSERT INTO cp_tree VALUES ('3420', '4', '42', '212', '3417', '43'); -INSERT INTO cp_tree VALUES ('3421', '2', '46', '212', '3398', '59'); -INSERT INTO cp_tree VALUES ('3422', '3', '47', '212', '3421', '48'); -INSERT INTO cp_tree VALUES ('3423', '3', '49', '212', '3421', '50'); -INSERT INTO cp_tree VALUES ('3424', '3', '51', '212', '3421', '52'); -INSERT INTO cp_tree VALUES ('3425', '3', '53', '212', '3421', '54'); -INSERT INTO cp_tree VALUES ('3426', '3', '55', '212', '3421', '56'); -INSERT INTO cp_tree VALUES ('3427', '3', '57', '212', '3421', '58'); -INSERT INTO cp_tree VALUES ('3428', '2', '60', '212', '3398', '63'); -INSERT INTO cp_tree VALUES ('3429', '3', '61', '212', '3428', '62'); -INSERT INTO cp_tree VALUES ('3430', '2', '64', '212', '3398', '67'); -INSERT INTO cp_tree VALUES ('3431', '3', '65', '212', '3430', '66'); -INSERT INTO cp_tree VALUES ('3432', '2', '68', '212', '3398', '71'); -INSERT INTO cp_tree VALUES ('3433', '3', '69', '212', '3432', '70'); -INSERT INTO cp_tree VALUES ('3434', '2', '72', '212', '3398', '77'); -INSERT INTO cp_tree VALUES ('3435', '3', '73', '212', '3434', '74'); -INSERT INTO cp_tree VALUES ('3436', '3', '75', '212', '3434', '76'); -INSERT INTO cp_tree VALUES ('3437', '2', '78', '212', '3398', '81'); -INSERT INTO cp_tree VALUES ('3438', '3', '79', '212', '3437', '80'); -INSERT INTO cp_tree VALUES ('3439', '2', '82', '212', '3398', '85'); -INSERT INTO cp_tree VALUES ('3440', '3', '83', '212', '3439', '84'); -INSERT INTO cp_tree VALUES ('3441', '2', '86', '212', '3398', '95'); -INSERT INTO cp_tree VALUES ('3442', '3', '87', '212', '3441', '90'); -INSERT INTO cp_tree VALUES ('3443', '4', '88', '212', '3442', '89'); -INSERT INTO cp_tree VALUES ('3444', '3', '91', '212', '3441', '94'); -INSERT INTO cp_tree VALUES ('3445', '4', '92', '212', '3444', '93'); -INSERT INTO cp_tree VALUES ('3446', '2', '96', '212', '3398', '97'); -INSERT INTO cp_tree VALUES ('3447', '1', '1', '213', '0', '102'); -INSERT INTO cp_tree VALUES ('3448', '2', '2', '213', '3447', '45'); -INSERT INTO cp_tree VALUES ('3449', '3', '3', '213', '3448', '10'); -INSERT INTO cp_tree VALUES ('3450', '4', '4', '213', '3449', '5'); -INSERT INTO cp_tree VALUES ('3451', '4', '6', '213', '3449', '7'); -INSERT INTO cp_tree VALUES ('3452', '4', '8', '213', '3449', '9'); -INSERT INTO cp_tree VALUES ('3453', '3', '11', '213', '3448', '36'); -INSERT INTO cp_tree VALUES ('3454', '4', '12', '213', '3453', '19'); -INSERT INTO cp_tree VALUES ('3455', '5', '13', '213', '3454', '14'); -INSERT INTO cp_tree VALUES ('3456', '5', '15', '213', '3454', '16'); -INSERT INTO cp_tree VALUES ('3457', '5', '17', '213', '3454', '18'); -INSERT INTO cp_tree VALUES ('3458', '4', '20', '213', '3453', '27'); -INSERT INTO cp_tree VALUES ('3459', '5', '21', '213', '3458', '22'); -INSERT INTO cp_tree VALUES ('3460', '5', '23', '213', '3458', '24'); -INSERT INTO cp_tree VALUES ('3461', '5', '25', '213', '3458', '26'); -INSERT INTO cp_tree VALUES ('3462', '4', '28', '213', '3453', '35'); -INSERT INTO cp_tree VALUES ('3463', '5', '29', '213', '3462', '30'); -INSERT INTO cp_tree VALUES ('3464', '5', '31', '213', '3462', '32'); -INSERT INTO cp_tree VALUES ('3465', '5', '33', '213', '3462', '34'); -INSERT INTO cp_tree VALUES ('3466', '3', '37', '213', '3448', '44'); -INSERT INTO cp_tree VALUES ('3467', '4', '38', '213', '3466', '39'); -INSERT INTO cp_tree VALUES ('3468', '4', '40', '213', '3466', '41'); -INSERT INTO cp_tree VALUES ('3469', '4', '42', '213', '3466', '43'); -INSERT INTO cp_tree VALUES ('3470', '2', '46', '213', '3447', '59'); -INSERT INTO cp_tree VALUES ('3471', '3', '47', '213', '3470', '48'); -INSERT INTO cp_tree VALUES ('3472', '3', '49', '213', '3470', '50'); -INSERT INTO cp_tree VALUES ('3473', '3', '51', '213', '3470', '52'); -INSERT INTO cp_tree VALUES ('3474', '3', '53', '213', '3470', '54'); -INSERT INTO cp_tree VALUES ('3475', '3', '55', '213', '3470', '56'); -INSERT INTO cp_tree VALUES ('3476', '3', '57', '213', '3470', '58'); -INSERT INTO cp_tree VALUES ('3477', '2', '60', '213', '3447', '63'); -INSERT INTO cp_tree VALUES ('3478', '3', '61', '213', '3477', '62'); -INSERT INTO cp_tree VALUES ('3479', '2', '64', '213', '3447', '67'); -INSERT INTO cp_tree VALUES ('3480', '3', '65', '213', '3479', '66'); -INSERT INTO cp_tree VALUES ('3481', '2', '68', '213', '3447', '71'); -INSERT INTO cp_tree VALUES ('3482', '3', '69', '213', '3481', '70'); -INSERT INTO cp_tree VALUES ('3483', '2', '72', '213', '3447', '77'); -INSERT INTO cp_tree VALUES ('3484', '3', '73', '213', '3483', '74'); -INSERT INTO cp_tree VALUES ('3485', '3', '75', '213', '3483', '76'); -INSERT INTO cp_tree VALUES ('3486', '2', '78', '213', '3447', '81'); -INSERT INTO cp_tree VALUES ('3487', '3', '79', '213', '3486', '80'); -INSERT INTO cp_tree VALUES ('3488', '2', '82', '213', '3447', '85'); -INSERT INTO cp_tree VALUES ('3489', '3', '83', '213', '3488', '84'); -INSERT INTO cp_tree VALUES ('3490', '2', '86', '213', '3447', '99'); -INSERT INTO cp_tree VALUES ('3491', '3', '87', '213', '3490', '90'); -INSERT INTO cp_tree VALUES ('3492', '4', '88', '213', '3491', '89'); -INSERT INTO cp_tree VALUES ('3493', '3', '91', '213', '3490', '94'); -INSERT INTO cp_tree VALUES ('3494', '4', '92', '213', '3493', '93'); -INSERT INTO cp_tree VALUES ('3495', '3', '95', '213', '3490', '98'); -INSERT INTO cp_tree VALUES ('3496', '4', '96', '213', '3495', '97'); -INSERT INTO cp_tree VALUES ('3497', '2', '100', '213', '3447', '101'); -INSERT INTO cp_tree VALUES ('3498', '1', '1', '214', '0', '102'); -INSERT INTO cp_tree VALUES ('3499', '2', '2', '214', '3498', '45'); -INSERT INTO cp_tree VALUES ('3500', '3', '3', '214', '3499', '10'); -INSERT INTO cp_tree VALUES ('3501', '4', '4', '214', '3500', '5'); -INSERT INTO cp_tree VALUES ('3502', '4', '6', '214', '3500', '7'); -INSERT INTO cp_tree VALUES ('3503', '4', '8', '214', '3500', '9'); -INSERT INTO cp_tree VALUES ('3504', '3', '11', '214', '3499', '36'); -INSERT INTO cp_tree VALUES ('3505', '4', '12', '214', '3504', '19'); -INSERT INTO cp_tree VALUES ('3506', '5', '13', '214', '3505', '14'); -INSERT INTO cp_tree VALUES ('3507', '5', '15', '214', '3505', '16'); -INSERT INTO cp_tree VALUES ('3508', '5', '17', '214', '3505', '18'); -INSERT INTO cp_tree VALUES ('3509', '4', '20', '214', '3504', '27'); -INSERT INTO cp_tree VALUES ('3510', '5', '21', '214', '3509', '22'); -INSERT INTO cp_tree VALUES ('3511', '5', '23', '214', '3509', '24'); -INSERT INTO cp_tree VALUES ('3512', '5', '25', '214', '3509', '26'); -INSERT INTO cp_tree VALUES ('3513', '4', '28', '214', '3504', '35'); -INSERT INTO cp_tree VALUES ('3514', '5', '29', '214', '3513', '30'); -INSERT INTO cp_tree VALUES ('3515', '5', '31', '214', '3513', '32'); -INSERT INTO cp_tree VALUES ('3516', '5', '33', '214', '3513', '34'); -INSERT INTO cp_tree VALUES ('3517', '3', '37', '214', '3499', '44'); -INSERT INTO cp_tree VALUES ('3518', '4', '38', '214', '3517', '39'); -INSERT INTO cp_tree VALUES ('3519', '4', '40', '214', '3517', '41'); -INSERT INTO cp_tree VALUES ('3520', '4', '42', '214', '3517', '43'); -INSERT INTO cp_tree VALUES ('3521', '2', '46', '214', '3498', '59'); -INSERT INTO cp_tree VALUES ('3522', '3', '47', '214', '3521', '48'); -INSERT INTO cp_tree VALUES ('3523', '3', '49', '214', '3521', '50'); -INSERT INTO cp_tree VALUES ('3524', '3', '51', '214', '3521', '52'); -INSERT INTO cp_tree VALUES ('3525', '3', '53', '214', '3521', '54'); -INSERT INTO cp_tree VALUES ('3526', '3', '55', '214', '3521', '56'); -INSERT INTO cp_tree VALUES ('3527', '3', '57', '214', '3521', '58'); -INSERT INTO cp_tree VALUES ('3528', '2', '60', '214', '3498', '63'); -INSERT INTO cp_tree VALUES ('3529', '3', '61', '214', '3528', '62'); -INSERT INTO cp_tree VALUES ('3530', '2', '64', '214', '3498', '67'); -INSERT INTO cp_tree VALUES ('3531', '3', '65', '214', '3530', '66'); -INSERT INTO cp_tree VALUES ('3532', '2', '68', '214', '3498', '71'); -INSERT INTO cp_tree VALUES ('3533', '3', '69', '214', '3532', '70'); -INSERT INTO cp_tree VALUES ('3534', '2', '72', '214', '3498', '77'); -INSERT INTO cp_tree VALUES ('3535', '3', '73', '214', '3534', '74'); -INSERT INTO cp_tree VALUES ('3536', '3', '75', '214', '3534', '76'); -INSERT INTO cp_tree VALUES ('3537', '2', '78', '214', '3498', '81'); -INSERT INTO cp_tree VALUES ('3538', '3', '79', '214', '3537', '80'); -INSERT INTO cp_tree VALUES ('3539', '2', '82', '214', '3498', '85'); -INSERT INTO cp_tree VALUES ('3540', '3', '83', '214', '3539', '84'); -INSERT INTO cp_tree VALUES ('3541', '2', '86', '214', '3498', '99'); -INSERT INTO cp_tree VALUES ('3542', '3', '87', '214', '3541', '90'); -INSERT INTO cp_tree VALUES ('3543', '4', '88', '214', '3542', '89'); -INSERT INTO cp_tree VALUES ('3544', '3', '91', '214', '3541', '94'); -INSERT INTO cp_tree VALUES ('3545', '4', '92', '214', '3544', '93'); -INSERT INTO cp_tree VALUES ('3546', '3', '95', '214', '3541', '98'); -INSERT INTO cp_tree VALUES ('3547', '4', '96', '214', '3546', '97'); -INSERT INTO cp_tree VALUES ('3548', '2', '100', '214', '3498', '101'); -INSERT INTO cp_tree VALUES ('3549', '1', '1', '215', '0', '104'); -INSERT INTO cp_tree VALUES ('3550', '2', '2', '215', '3549', '45'); -INSERT INTO cp_tree VALUES ('3551', '3', '3', '215', '3550', '10'); -INSERT INTO cp_tree VALUES ('3552', '4', '4', '215', '3551', '5'); -INSERT INTO cp_tree VALUES ('3553', '4', '6', '215', '3551', '7'); -INSERT INTO cp_tree VALUES ('3554', '4', '8', '215', '3551', '9'); -INSERT INTO cp_tree VALUES ('3555', '3', '11', '215', '3550', '36'); -INSERT INTO cp_tree VALUES ('3556', '4', '12', '215', '3555', '19'); -INSERT INTO cp_tree VALUES ('3557', '5', '13', '215', '3556', '14'); -INSERT INTO cp_tree VALUES ('3558', '5', '15', '215', '3556', '16'); -INSERT INTO cp_tree VALUES ('3559', '5', '17', '215', '3556', '18'); -INSERT INTO cp_tree VALUES ('3560', '4', '20', '215', '3555', '27'); -INSERT INTO cp_tree VALUES ('3561', '5', '21', '215', '3560', '22'); -INSERT INTO cp_tree VALUES ('3562', '5', '23', '215', '3560', '24'); -INSERT INTO cp_tree VALUES ('3563', '5', '25', '215', '3560', '26'); -INSERT INTO cp_tree VALUES ('3564', '4', '28', '215', '3555', '35'); -INSERT INTO cp_tree VALUES ('3565', '5', '29', '215', '3564', '30'); -INSERT INTO cp_tree VALUES ('3566', '5', '31', '215', '3564', '32'); -INSERT INTO cp_tree VALUES ('3567', '5', '33', '215', '3564', '34'); -INSERT INTO cp_tree VALUES ('3568', '3', '37', '215', '3550', '44'); -INSERT INTO cp_tree VALUES ('3569', '4', '38', '215', '3568', '39'); -INSERT INTO cp_tree VALUES ('3570', '4', '40', '215', '3568', '41'); -INSERT INTO cp_tree VALUES ('3571', '4', '42', '215', '3568', '43'); -INSERT INTO cp_tree VALUES ('3572', '2', '46', '215', '3549', '59'); -INSERT INTO cp_tree VALUES ('3573', '3', '47', '215', '3572', '48'); -INSERT INTO cp_tree VALUES ('3574', '3', '49', '215', '3572', '50'); -INSERT INTO cp_tree VALUES ('3575', '3', '51', '215', '3572', '52'); -INSERT INTO cp_tree VALUES ('3576', '3', '53', '215', '3572', '54'); -INSERT INTO cp_tree VALUES ('3577', '3', '55', '215', '3572', '56'); -INSERT INTO cp_tree VALUES ('3578', '3', '57', '215', '3572', '58'); -INSERT INTO cp_tree VALUES ('3579', '2', '60', '215', '3549', '63'); -INSERT INTO cp_tree VALUES ('3580', '3', '61', '215', '3579', '62'); -INSERT INTO cp_tree VALUES ('3581', '2', '64', '215', '3549', '67'); -INSERT INTO cp_tree VALUES ('3582', '3', '65', '215', '3581', '66'); -INSERT INTO cp_tree VALUES ('3583', '2', '68', '215', '3549', '71'); -INSERT INTO cp_tree VALUES ('3584', '3', '69', '215', '3583', '70'); -INSERT INTO cp_tree VALUES ('3585', '2', '72', '215', '3549', '77'); -INSERT INTO cp_tree VALUES ('3586', '3', '73', '215', '3585', '74'); -INSERT INTO cp_tree VALUES ('3587', '3', '75', '215', '3585', '76'); -INSERT INTO cp_tree VALUES ('3588', '2', '78', '215', '3549', '81'); -INSERT INTO cp_tree VALUES ('3589', '3', '79', '215', '3588', '80'); -INSERT INTO cp_tree VALUES ('3590', '2', '82', '215', '3549', '85'); -INSERT INTO cp_tree VALUES ('3591', '3', '83', '215', '3590', '84'); -INSERT INTO cp_tree VALUES ('3592', '2', '86', '215', '3549', '101'); -INSERT INTO cp_tree VALUES ('3593', '3', '87', '215', '3592', '90'); -INSERT INTO cp_tree VALUES ('3594', '4', '88', '215', '3593', '89'); -INSERT INTO cp_tree VALUES ('3595', '3', '91', '215', '3592', '94'); -INSERT INTO cp_tree VALUES ('3596', '4', '92', '215', '3595', '93'); -INSERT INTO cp_tree VALUES ('3597', '3', '95', '215', '3592', '100'); -INSERT INTO cp_tree VALUES ('3598', '4', '96', '215', '3597', '97'); -INSERT INTO cp_tree VALUES ('3599', '4', '98', '215', '3597', '99'); -INSERT INTO cp_tree VALUES ('3600', '2', '102', '215', '3549', '103'); -INSERT INTO cp_tree VALUES ('3601', '1', '1', '216', '0', '104'); -INSERT INTO cp_tree VALUES ('3602', '2', '2', '216', '3601', '45'); -INSERT INTO cp_tree VALUES ('3603', '3', '3', '216', '3602', '10'); -INSERT INTO cp_tree VALUES ('3604', '4', '4', '216', '3603', '5'); -INSERT INTO cp_tree VALUES ('3605', '4', '6', '216', '3603', '7'); -INSERT INTO cp_tree VALUES ('3606', '4', '8', '216', '3603', '9'); -INSERT INTO cp_tree VALUES ('3607', '3', '11', '216', '3602', '36'); -INSERT INTO cp_tree VALUES ('3608', '4', '12', '216', '3607', '19'); -INSERT INTO cp_tree VALUES ('3609', '5', '13', '216', '3608', '14'); -INSERT INTO cp_tree VALUES ('3610', '5', '15', '216', '3608', '16'); -INSERT INTO cp_tree VALUES ('3611', '5', '17', '216', '3608', '18'); -INSERT INTO cp_tree VALUES ('3612', '4', '20', '216', '3607', '27'); -INSERT INTO cp_tree VALUES ('3613', '5', '21', '216', '3612', '22'); -INSERT INTO cp_tree VALUES ('3614', '5', '23', '216', '3612', '24'); -INSERT INTO cp_tree VALUES ('3615', '5', '25', '216', '3612', '26'); -INSERT INTO cp_tree VALUES ('3616', '4', '28', '216', '3607', '35'); -INSERT INTO cp_tree VALUES ('3617', '5', '29', '216', '3616', '30'); -INSERT INTO cp_tree VALUES ('3618', '5', '31', '216', '3616', '32'); -INSERT INTO cp_tree VALUES ('3619', '5', '33', '216', '3616', '34'); -INSERT INTO cp_tree VALUES ('3620', '3', '37', '216', '3602', '44'); -INSERT INTO cp_tree VALUES ('3621', '4', '38', '216', '3620', '39'); -INSERT INTO cp_tree VALUES ('3622', '4', '40', '216', '3620', '41'); -INSERT INTO cp_tree VALUES ('3623', '4', '42', '216', '3620', '43'); -INSERT INTO cp_tree VALUES ('3624', '2', '46', '216', '3601', '59'); -INSERT INTO cp_tree VALUES ('3625', '3', '47', '216', '3624', '48'); -INSERT INTO cp_tree VALUES ('3626', '3', '49', '216', '3624', '50'); -INSERT INTO cp_tree VALUES ('3627', '3', '51', '216', '3624', '52'); -INSERT INTO cp_tree VALUES ('3628', '3', '53', '216', '3624', '54'); -INSERT INTO cp_tree VALUES ('3629', '3', '55', '216', '3624', '56'); -INSERT INTO cp_tree VALUES ('3630', '3', '57', '216', '3624', '58'); -INSERT INTO cp_tree VALUES ('3631', '2', '60', '216', '3601', '63'); -INSERT INTO cp_tree VALUES ('3632', '3', '61', '216', '3631', '62'); -INSERT INTO cp_tree VALUES ('3633', '2', '64', '216', '3601', '67'); -INSERT INTO cp_tree VALUES ('3634', '3', '65', '216', '3633', '66'); -INSERT INTO cp_tree VALUES ('3635', '2', '68', '216', '3601', '71'); -INSERT INTO cp_tree VALUES ('3636', '3', '69', '216', '3635', '70'); -INSERT INTO cp_tree VALUES ('3637', '2', '72', '216', '3601', '77'); -INSERT INTO cp_tree VALUES ('3638', '3', '73', '216', '3637', '74'); -INSERT INTO cp_tree VALUES ('3639', '3', '75', '216', '3637', '76'); -INSERT INTO cp_tree VALUES ('3640', '2', '78', '216', '3601', '81'); -INSERT INTO cp_tree VALUES ('3641', '3', '79', '216', '3640', '80'); -INSERT INTO cp_tree VALUES ('3642', '2', '82', '216', '3601', '85'); -INSERT INTO cp_tree VALUES ('3643', '3', '83', '216', '3642', '84'); -INSERT INTO cp_tree VALUES ('3644', '2', '86', '216', '3601', '101'); -INSERT INTO cp_tree VALUES ('3645', '3', '87', '216', '3644', '90'); -INSERT INTO cp_tree VALUES ('3646', '4', '88', '216', '3645', '89'); -INSERT INTO cp_tree VALUES ('3647', '3', '91', '216', '3644', '94'); -INSERT INTO cp_tree VALUES ('3648', '4', '92', '216', '3647', '93'); -INSERT INTO cp_tree VALUES ('3649', '3', '95', '216', '3644', '100'); -INSERT INTO cp_tree VALUES ('3650', '4', '96', '216', '3649', '97'); -INSERT INTO cp_tree VALUES ('3651', '4', '98', '216', '3649', '99'); -INSERT INTO cp_tree VALUES ('3652', '2', '102', '216', '3601', '103'); -INSERT INTO cp_tree VALUES ('3653', '1', '1', '217', '0', '104'); -INSERT INTO cp_tree VALUES ('3654', '2', '2', '217', '3653', '45'); -INSERT INTO cp_tree VALUES ('3655', '3', '3', '217', '3654', '10'); -INSERT INTO cp_tree VALUES ('3656', '4', '4', '217', '3655', '5'); -INSERT INTO cp_tree VALUES ('3657', '4', '6', '217', '3655', '7'); -INSERT INTO cp_tree VALUES ('3658', '4', '8', '217', '3655', '9'); -INSERT INTO cp_tree VALUES ('3659', '3', '11', '217', '3654', '36'); -INSERT INTO cp_tree VALUES ('3660', '4', '12', '217', '3659', '19'); -INSERT INTO cp_tree VALUES ('3661', '5', '13', '217', '3660', '14'); -INSERT INTO cp_tree VALUES ('3662', '5', '15', '217', '3660', '16'); -INSERT INTO cp_tree VALUES ('3663', '5', '17', '217', '3660', '18'); -INSERT INTO cp_tree VALUES ('3664', '4', '20', '217', '3659', '27'); -INSERT INTO cp_tree VALUES ('3665', '5', '21', '217', '3664', '22'); -INSERT INTO cp_tree VALUES ('3666', '5', '23', '217', '3664', '24'); -INSERT INTO cp_tree VALUES ('3667', '5', '25', '217', '3664', '26'); -INSERT INTO cp_tree VALUES ('3668', '4', '28', '217', '3659', '35'); -INSERT INTO cp_tree VALUES ('3669', '5', '29', '217', '3668', '30'); -INSERT INTO cp_tree VALUES ('3670', '5', '31', '217', '3668', '32'); -INSERT INTO cp_tree VALUES ('3671', '5', '33', '217', '3668', '34'); -INSERT INTO cp_tree VALUES ('3672', '3', '37', '217', '3654', '44'); -INSERT INTO cp_tree VALUES ('3673', '4', '38', '217', '3672', '39'); -INSERT INTO cp_tree VALUES ('3674', '4', '40', '217', '3672', '41'); -INSERT INTO cp_tree VALUES ('3675', '4', '42', '217', '3672', '43'); -INSERT INTO cp_tree VALUES ('3676', '2', '46', '217', '3653', '59'); -INSERT INTO cp_tree VALUES ('3677', '3', '47', '217', '3676', '48'); -INSERT INTO cp_tree VALUES ('3678', '3', '49', '217', '3676', '50'); -INSERT INTO cp_tree VALUES ('3679', '3', '51', '217', '3676', '52'); -INSERT INTO cp_tree VALUES ('3680', '3', '53', '217', '3676', '54'); -INSERT INTO cp_tree VALUES ('3681', '3', '55', '217', '3676', '56'); -INSERT INTO cp_tree VALUES ('3682', '3', '57', '217', '3676', '58'); -INSERT INTO cp_tree VALUES ('3683', '2', '60', '217', '3653', '63'); -INSERT INTO cp_tree VALUES ('3684', '3', '61', '217', '3683', '62'); -INSERT INTO cp_tree VALUES ('3685', '2', '64', '217', '3653', '67'); -INSERT INTO cp_tree VALUES ('3686', '3', '65', '217', '3685', '66'); -INSERT INTO cp_tree VALUES ('3687', '2', '68', '217', '3653', '71'); -INSERT INTO cp_tree VALUES ('3688', '3', '69', '217', '3687', '70'); -INSERT INTO cp_tree VALUES ('3689', '2', '72', '217', '3653', '77'); -INSERT INTO cp_tree VALUES ('3690', '3', '73', '217', '3689', '74'); -INSERT INTO cp_tree VALUES ('3691', '3', '75', '217', '3689', '76'); -INSERT INTO cp_tree VALUES ('3692', '2', '78', '217', '3653', '81'); -INSERT INTO cp_tree VALUES ('3693', '3', '79', '217', '3692', '80'); -INSERT INTO cp_tree VALUES ('3694', '2', '82', '217', '3653', '85'); -INSERT INTO cp_tree VALUES ('3695', '3', '83', '217', '3694', '84'); -INSERT INTO cp_tree VALUES ('3696', '2', '86', '217', '3653', '101'); -INSERT INTO cp_tree VALUES ('3697', '3', '87', '217', '3696', '90'); -INSERT INTO cp_tree VALUES ('3698', '4', '88', '217', '3697', '89'); -INSERT INTO cp_tree VALUES ('3699', '3', '91', '217', '3696', '94'); -INSERT INTO cp_tree VALUES ('3700', '4', '92', '217', '3699', '93'); -INSERT INTO cp_tree VALUES ('3701', '3', '95', '217', '3696', '100'); -INSERT INTO cp_tree VALUES ('3702', '4', '96', '217', '3701', '97'); -INSERT INTO cp_tree VALUES ('3703', '4', '98', '217', '3701', '99'); -INSERT INTO cp_tree VALUES ('3704', '2', '102', '217', '3653', '103'); -INSERT INTO cp_tree VALUES ('3705', '1', '1', '218', '0', '104'); -INSERT INTO cp_tree VALUES ('3706', '2', '2', '218', '3705', '45'); -INSERT INTO cp_tree VALUES ('3707', '3', '3', '218', '3706', '10'); -INSERT INTO cp_tree VALUES ('3708', '4', '4', '218', '3707', '5'); -INSERT INTO cp_tree VALUES ('3709', '4', '6', '218', '3707', '7'); -INSERT INTO cp_tree VALUES ('3710', '4', '8', '218', '3707', '9'); -INSERT INTO cp_tree VALUES ('3711', '3', '11', '218', '3706', '36'); -INSERT INTO cp_tree VALUES ('3712', '4', '12', '218', '3711', '19'); -INSERT INTO cp_tree VALUES ('3713', '5', '13', '218', '3712', '14'); -INSERT INTO cp_tree VALUES ('3714', '5', '15', '218', '3712', '16'); -INSERT INTO cp_tree VALUES ('3715', '5', '17', '218', '3712', '18'); -INSERT INTO cp_tree VALUES ('3716', '4', '20', '218', '3711', '27'); -INSERT INTO cp_tree VALUES ('3717', '5', '21', '218', '3716', '22'); -INSERT INTO cp_tree VALUES ('3718', '5', '23', '218', '3716', '24'); -INSERT INTO cp_tree VALUES ('3719', '5', '25', '218', '3716', '26'); -INSERT INTO cp_tree VALUES ('3720', '4', '28', '218', '3711', '35'); -INSERT INTO cp_tree VALUES ('3721', '5', '29', '218', '3720', '30'); -INSERT INTO cp_tree VALUES ('3722', '5', '31', '218', '3720', '32'); -INSERT INTO cp_tree VALUES ('3723', '5', '33', '218', '3720', '34'); -INSERT INTO cp_tree VALUES ('3724', '3', '37', '218', '3706', '44'); -INSERT INTO cp_tree VALUES ('3725', '4', '38', '218', '3724', '39'); -INSERT INTO cp_tree VALUES ('3726', '4', '40', '218', '3724', '41'); -INSERT INTO cp_tree VALUES ('3727', '4', '42', '218', '3724', '43'); -INSERT INTO cp_tree VALUES ('3728', '2', '46', '218', '3705', '59'); -INSERT INTO cp_tree VALUES ('3729', '3', '47', '218', '3728', '48'); -INSERT INTO cp_tree VALUES ('3730', '3', '49', '218', '3728', '50'); -INSERT INTO cp_tree VALUES ('3731', '3', '51', '218', '3728', '52'); -INSERT INTO cp_tree VALUES ('3732', '3', '53', '218', '3728', '54'); -INSERT INTO cp_tree VALUES ('3733', '3', '55', '218', '3728', '56'); -INSERT INTO cp_tree VALUES ('3734', '3', '57', '218', '3728', '58'); -INSERT INTO cp_tree VALUES ('3735', '2', '60', '218', '3705', '63'); -INSERT INTO cp_tree VALUES ('3736', '3', '61', '218', '3735', '62'); -INSERT INTO cp_tree VALUES ('3737', '2', '64', '218', '3705', '67'); -INSERT INTO cp_tree VALUES ('3738', '3', '65', '218', '3737', '66'); -INSERT INTO cp_tree VALUES ('3739', '2', '68', '218', '3705', '71'); -INSERT INTO cp_tree VALUES ('3740', '3', '69', '218', '3739', '70'); -INSERT INTO cp_tree VALUES ('3741', '2', '72', '218', '3705', '77'); -INSERT INTO cp_tree VALUES ('3742', '3', '73', '218', '3741', '74'); -INSERT INTO cp_tree VALUES ('3743', '3', '75', '218', '3741', '76'); -INSERT INTO cp_tree VALUES ('3744', '2', '78', '218', '3705', '81'); -INSERT INTO cp_tree VALUES ('3745', '3', '79', '218', '3744', '80'); -INSERT INTO cp_tree VALUES ('3746', '2', '82', '218', '3705', '85'); -INSERT INTO cp_tree VALUES ('3747', '3', '83', '218', '3746', '84'); -INSERT INTO cp_tree VALUES ('3748', '2', '86', '218', '3705', '101'); -INSERT INTO cp_tree VALUES ('3749', '3', '87', '218', '3748', '90'); -INSERT INTO cp_tree VALUES ('3750', '4', '88', '218', '3749', '89'); -INSERT INTO cp_tree VALUES ('3751', '3', '91', '218', '3748', '94'); -INSERT INTO cp_tree VALUES ('3752', '4', '92', '218', '3751', '93'); -INSERT INTO cp_tree VALUES ('3753', '3', '95', '218', '3748', '100'); -INSERT INTO cp_tree VALUES ('3754', '4', '96', '218', '3753', '97'); -INSERT INTO cp_tree VALUES ('3755', '4', '98', '218', '3753', '99'); -INSERT INTO cp_tree VALUES ('3756', '2', '102', '218', '3705', '103'); -INSERT INTO cp_tree VALUES ('3757', '1', '1', '219', '0', '104'); -INSERT INTO cp_tree VALUES ('3758', '2', '2', '219', '3757', '45'); -INSERT INTO cp_tree VALUES ('3759', '3', '3', '219', '3758', '10'); -INSERT INTO cp_tree VALUES ('3760', '4', '4', '219', '3759', '5'); -INSERT INTO cp_tree VALUES ('3761', '4', '6', '219', '3759', '7'); -INSERT INTO cp_tree VALUES ('3762', '4', '8', '219', '3759', '9'); -INSERT INTO cp_tree VALUES ('3763', '3', '11', '219', '3758', '36'); -INSERT INTO cp_tree VALUES ('3764', '4', '12', '219', '3763', '19'); -INSERT INTO cp_tree VALUES ('3765', '5', '13', '219', '3764', '14'); -INSERT INTO cp_tree VALUES ('3766', '5', '15', '219', '3764', '16'); -INSERT INTO cp_tree VALUES ('3767', '5', '17', '219', '3764', '18'); -INSERT INTO cp_tree VALUES ('3768', '4', '20', '219', '3763', '27'); -INSERT INTO cp_tree VALUES ('3769', '5', '21', '219', '3768', '22'); -INSERT INTO cp_tree VALUES ('3770', '5', '23', '219', '3768', '24'); -INSERT INTO cp_tree VALUES ('3771', '5', '25', '219', '3768', '26'); -INSERT INTO cp_tree VALUES ('3772', '4', '28', '219', '3763', '35'); -INSERT INTO cp_tree VALUES ('3773', '5', '29', '219', '3772', '30'); -INSERT INTO cp_tree VALUES ('3774', '5', '31', '219', '3772', '32'); -INSERT INTO cp_tree VALUES ('3775', '5', '33', '219', '3772', '34'); -INSERT INTO cp_tree VALUES ('3776', '3', '37', '219', '3758', '44'); -INSERT INTO cp_tree VALUES ('3777', '4', '38', '219', '3776', '39'); -INSERT INTO cp_tree VALUES ('3778', '4', '40', '219', '3776', '41'); -INSERT INTO cp_tree VALUES ('3779', '4', '42', '219', '3776', '43'); -INSERT INTO cp_tree VALUES ('3780', '2', '46', '219', '3757', '59'); -INSERT INTO cp_tree VALUES ('3781', '3', '47', '219', '3780', '48'); -INSERT INTO cp_tree VALUES ('3782', '3', '49', '219', '3780', '50'); -INSERT INTO cp_tree VALUES ('3783', '3', '51', '219', '3780', '52'); -INSERT INTO cp_tree VALUES ('3784', '3', '53', '219', '3780', '54'); -INSERT INTO cp_tree VALUES ('3785', '3', '55', '219', '3780', '56'); -INSERT INTO cp_tree VALUES ('3786', '3', '57', '219', '3780', '58'); -INSERT INTO cp_tree VALUES ('3787', '2', '60', '219', '3757', '63'); -INSERT INTO cp_tree VALUES ('3788', '3', '61', '219', '3787', '62'); -INSERT INTO cp_tree VALUES ('3789', '2', '64', '219', '3757', '67'); -INSERT INTO cp_tree VALUES ('3790', '3', '65', '219', '3789', '66'); -INSERT INTO cp_tree VALUES ('3791', '2', '68', '219', '3757', '71'); -INSERT INTO cp_tree VALUES ('3792', '3', '69', '219', '3791', '70'); -INSERT INTO cp_tree VALUES ('3793', '2', '72', '219', '3757', '77'); -INSERT INTO cp_tree VALUES ('3794', '3', '73', '219', '3793', '74'); -INSERT INTO cp_tree VALUES ('3795', '3', '75', '219', '3793', '76'); -INSERT INTO cp_tree VALUES ('3796', '2', '78', '219', '3757', '81'); -INSERT INTO cp_tree VALUES ('3797', '3', '79', '219', '3796', '80'); -INSERT INTO cp_tree VALUES ('3798', '2', '82', '219', '3757', '85'); -INSERT INTO cp_tree VALUES ('3799', '3', '83', '219', '3798', '84'); -INSERT INTO cp_tree VALUES ('3800', '2', '86', '219', '3757', '101'); -INSERT INTO cp_tree VALUES ('3801', '3', '87', '219', '3800', '90'); -INSERT INTO cp_tree VALUES ('3802', '4', '88', '219', '3801', '89'); -INSERT INTO cp_tree VALUES ('3803', '3', '91', '219', '3800', '94'); -INSERT INTO cp_tree VALUES ('3804', '4', '92', '219', '3803', '93'); -INSERT INTO cp_tree VALUES ('3805', '3', '95', '219', '3800', '100'); -INSERT INTO cp_tree VALUES ('3806', '4', '96', '219', '3805', '97'); -INSERT INTO cp_tree VALUES ('3807', '4', '98', '219', '3805', '99'); -INSERT INTO cp_tree VALUES ('3808', '2', '102', '219', '3757', '103'); -INSERT INTO cp_tree VALUES ('3809', '1', '1', '220', '0', '104'); -INSERT INTO cp_tree VALUES ('3810', '2', '2', '220', '3809', '45'); -INSERT INTO cp_tree VALUES ('3811', '3', '3', '220', '3810', '10'); -INSERT INTO cp_tree VALUES ('3812', '4', '4', '220', '3811', '5'); -INSERT INTO cp_tree VALUES ('3813', '4', '6', '220', '3811', '7'); -INSERT INTO cp_tree VALUES ('3814', '4', '8', '220', '3811', '9'); -INSERT INTO cp_tree VALUES ('3815', '3', '11', '220', '3810', '36'); -INSERT INTO cp_tree VALUES ('3816', '4', '12', '220', '3815', '19'); -INSERT INTO cp_tree VALUES ('3817', '5', '13', '220', '3816', '14'); -INSERT INTO cp_tree VALUES ('3818', '5', '15', '220', '3816', '16'); -INSERT INTO cp_tree VALUES ('3819', '5', '17', '220', '3816', '18'); -INSERT INTO cp_tree VALUES ('3820', '4', '20', '220', '3815', '27'); -INSERT INTO cp_tree VALUES ('3821', '5', '21', '220', '3820', '22'); -INSERT INTO cp_tree VALUES ('3822', '5', '23', '220', '3820', '24'); -INSERT INTO cp_tree VALUES ('3823', '5', '25', '220', '3820', '26'); -INSERT INTO cp_tree VALUES ('3824', '4', '28', '220', '3815', '35'); -INSERT INTO cp_tree VALUES ('3825', '5', '29', '220', '3824', '30'); -INSERT INTO cp_tree VALUES ('3826', '5', '31', '220', '3824', '32'); -INSERT INTO cp_tree VALUES ('3827', '5', '33', '220', '3824', '34'); -INSERT INTO cp_tree VALUES ('3828', '3', '37', '220', '3810', '44'); -INSERT INTO cp_tree VALUES ('3829', '4', '38', '220', '3828', '39'); -INSERT INTO cp_tree VALUES ('3830', '4', '40', '220', '3828', '41'); -INSERT INTO cp_tree VALUES ('3831', '4', '42', '220', '3828', '43'); -INSERT INTO cp_tree VALUES ('3832', '2', '46', '220', '3809', '59'); -INSERT INTO cp_tree VALUES ('3833', '3', '47', '220', '3832', '48'); -INSERT INTO cp_tree VALUES ('3834', '3', '49', '220', '3832', '50'); -INSERT INTO cp_tree VALUES ('3835', '3', '51', '220', '3832', '52'); -INSERT INTO cp_tree VALUES ('3836', '3', '53', '220', '3832', '54'); -INSERT INTO cp_tree VALUES ('3837', '3', '55', '220', '3832', '56'); -INSERT INTO cp_tree VALUES ('3838', '3', '57', '220', '3832', '58'); -INSERT INTO cp_tree VALUES ('3839', '2', '60', '220', '3809', '63'); -INSERT INTO cp_tree VALUES ('3840', '3', '61', '220', '3839', '62'); -INSERT INTO cp_tree VALUES ('3841', '2', '64', '220', '3809', '67'); -INSERT INTO cp_tree VALUES ('3842', '3', '65', '220', '3841', '66'); -INSERT INTO cp_tree VALUES ('3843', '2', '68', '220', '3809', '71'); -INSERT INTO cp_tree VALUES ('3844', '3', '69', '220', '3843', '70'); -INSERT INTO cp_tree VALUES ('3845', '2', '72', '220', '3809', '77'); -INSERT INTO cp_tree VALUES ('3846', '3', '73', '220', '3845', '74'); -INSERT INTO cp_tree VALUES ('3847', '3', '75', '220', '3845', '76'); -INSERT INTO cp_tree VALUES ('3848', '2', '78', '220', '3809', '81'); -INSERT INTO cp_tree VALUES ('3849', '3', '79', '220', '3848', '80'); -INSERT INTO cp_tree VALUES ('3850', '2', '82', '220', '3809', '85'); -INSERT INTO cp_tree VALUES ('3851', '3', '83', '220', '3850', '84'); -INSERT INTO cp_tree VALUES ('3852', '2', '86', '220', '3809', '101'); -INSERT INTO cp_tree VALUES ('3853', '3', '87', '220', '3852', '90'); -INSERT INTO cp_tree VALUES ('3854', '4', '88', '220', '3853', '89'); -INSERT INTO cp_tree VALUES ('3855', '3', '91', '220', '3852', '94'); -INSERT INTO cp_tree VALUES ('3856', '4', '92', '220', '3855', '93'); -INSERT INTO cp_tree VALUES ('3857', '3', '95', '220', '3852', '100'); -INSERT INTO cp_tree VALUES ('3858', '4', '96', '220', '3857', '97'); -INSERT INTO cp_tree VALUES ('3859', '4', '98', '220', '3857', '99'); -INSERT INTO cp_tree VALUES ('3860', '2', '102', '220', '3809', '103'); -INSERT INTO cp_tree VALUES ('3861', '1', '1', '221', '0', '74'); -INSERT INTO cp_tree VALUES ('3862', '2', '2', '221', '3861', '15'); -INSERT INTO cp_tree VALUES ('3863', '3', '3', '221', '3862', '4'); -INSERT INTO cp_tree VALUES ('3864', '3', '5', '221', '3862', '12'); -INSERT INTO cp_tree VALUES ('3865', '4', '6', '221', '3864', '7'); -INSERT INTO cp_tree VALUES ('3866', '4', '8', '221', '3864', '9'); -INSERT INTO cp_tree VALUES ('3867', '4', '10', '221', '3864', '11'); -INSERT INTO cp_tree VALUES ('3868', '3', '13', '221', '3862', '14'); -INSERT INTO cp_tree VALUES ('3869', '2', '16', '221', '3861', '29'); -INSERT INTO cp_tree VALUES ('3870', '3', '17', '221', '3869', '18'); -INSERT INTO cp_tree VALUES ('3871', '3', '19', '221', '3869', '20'); -INSERT INTO cp_tree VALUES ('3872', '3', '21', '221', '3869', '22'); -INSERT INTO cp_tree VALUES ('3873', '3', '23', '221', '3869', '24'); -INSERT INTO cp_tree VALUES ('3874', '3', '25', '221', '3869', '26'); -INSERT INTO cp_tree VALUES ('3875', '3', '27', '221', '3869', '28'); -INSERT INTO cp_tree VALUES ('3876', '2', '30', '221', '3861', '33'); -INSERT INTO cp_tree VALUES ('3877', '3', '31', '221', '3876', '32'); -INSERT INTO cp_tree VALUES ('3878', '2', '34', '221', '3861', '37'); -INSERT INTO cp_tree VALUES ('3879', '3', '35', '221', '3878', '36'); -INSERT INTO cp_tree VALUES ('3880', '2', '38', '221', '3861', '41'); -INSERT INTO cp_tree VALUES ('3881', '3', '39', '221', '3880', '40'); -INSERT INTO cp_tree VALUES ('3882', '2', '42', '221', '3861', '47'); -INSERT INTO cp_tree VALUES ('3883', '3', '43', '221', '3882', '44'); -INSERT INTO cp_tree VALUES ('3884', '3', '45', '221', '3882', '46'); -INSERT INTO cp_tree VALUES ('3885', '2', '48', '221', '3861', '51'); -INSERT INTO cp_tree VALUES ('3886', '3', '49', '221', '3885', '50'); -INSERT INTO cp_tree VALUES ('3887', '2', '52', '221', '3861', '55'); -INSERT INTO cp_tree VALUES ('3888', '3', '53', '221', '3887', '54'); -INSERT INTO cp_tree VALUES ('3889', '2', '56', '221', '3861', '71'); -INSERT INTO cp_tree VALUES ('3890', '3', '57', '221', '3889', '60'); -INSERT INTO cp_tree VALUES ('3891', '4', '58', '221', '3890', '59'); -INSERT INTO cp_tree VALUES ('3892', '3', '61', '221', '3889', '64'); -INSERT INTO cp_tree VALUES ('3893', '4', '62', '221', '3892', '63'); -INSERT INTO cp_tree VALUES ('3894', '3', '65', '221', '3889', '70'); -INSERT INTO cp_tree VALUES ('3895', '4', '66', '221', '3894', '67'); -INSERT INTO cp_tree VALUES ('3896', '4', '68', '221', '3894', '69'); -INSERT INTO cp_tree VALUES ('3897', '2', '72', '221', '3861', '73'); -INSERT INTO cp_tree VALUES ('3898', '1', '1', '222', '0', '104'); -INSERT INTO cp_tree VALUES ('3899', '2', '2', '222', '3898', '45'); -INSERT INTO cp_tree VALUES ('3900', '3', '3', '222', '3899', '10'); -INSERT INTO cp_tree VALUES ('3901', '4', '4', '222', '3900', '5'); -INSERT INTO cp_tree VALUES ('3902', '4', '6', '222', '3900', '7'); -INSERT INTO cp_tree VALUES ('3903', '4', '8', '222', '3900', '9'); -INSERT INTO cp_tree VALUES ('3904', '3', '11', '222', '3899', '36'); -INSERT INTO cp_tree VALUES ('3905', '4', '12', '222', '3904', '19'); -INSERT INTO cp_tree VALUES ('3906', '5', '13', '222', '3905', '14'); -INSERT INTO cp_tree VALUES ('3907', '5', '15', '222', '3905', '16'); -INSERT INTO cp_tree VALUES ('3908', '5', '17', '222', '3905', '18'); -INSERT INTO cp_tree VALUES ('3909', '4', '20', '222', '3904', '27'); -INSERT INTO cp_tree VALUES ('3910', '5', '21', '222', '3909', '22'); -INSERT INTO cp_tree VALUES ('3911', '5', '23', '222', '3909', '24'); -INSERT INTO cp_tree VALUES ('3912', '5', '25', '222', '3909', '26'); -INSERT INTO cp_tree VALUES ('3913', '4', '28', '222', '3904', '35'); -INSERT INTO cp_tree VALUES ('3914', '5', '29', '222', '3913', '30'); -INSERT INTO cp_tree VALUES ('3915', '5', '31', '222', '3913', '32'); -INSERT INTO cp_tree VALUES ('3916', '5', '33', '222', '3913', '34'); -INSERT INTO cp_tree VALUES ('3917', '3', '37', '222', '3899', '44'); -INSERT INTO cp_tree VALUES ('3918', '4', '38', '222', '3917', '39'); -INSERT INTO cp_tree VALUES ('3919', '4', '40', '222', '3917', '41'); -INSERT INTO cp_tree VALUES ('3920', '4', '42', '222', '3917', '43'); -INSERT INTO cp_tree VALUES ('3921', '2', '46', '222', '3898', '59'); -INSERT INTO cp_tree VALUES ('3922', '3', '47', '222', '3921', '48'); -INSERT INTO cp_tree VALUES ('3923', '3', '49', '222', '3921', '50'); -INSERT INTO cp_tree VALUES ('3924', '3', '51', '222', '3921', '52'); -INSERT INTO cp_tree VALUES ('3925', '3', '53', '222', '3921', '54'); -INSERT INTO cp_tree VALUES ('3926', '3', '55', '222', '3921', '56'); -INSERT INTO cp_tree VALUES ('3927', '3', '57', '222', '3921', '58'); -INSERT INTO cp_tree VALUES ('3928', '2', '60', '222', '3898', '63'); -INSERT INTO cp_tree VALUES ('3929', '3', '61', '222', '3928', '62'); -INSERT INTO cp_tree VALUES ('3930', '2', '64', '222', '3898', '67'); -INSERT INTO cp_tree VALUES ('3931', '3', '65', '222', '3930', '66'); -INSERT INTO cp_tree VALUES ('3932', '2', '68', '222', '3898', '71'); -INSERT INTO cp_tree VALUES ('3933', '3', '69', '222', '3932', '70'); -INSERT INTO cp_tree VALUES ('3934', '2', '72', '222', '3898', '77'); -INSERT INTO cp_tree VALUES ('3935', '3', '73', '222', '3934', '74'); -INSERT INTO cp_tree VALUES ('3936', '3', '75', '222', '3934', '76'); -INSERT INTO cp_tree VALUES ('3937', '2', '78', '222', '3898', '81'); -INSERT INTO cp_tree VALUES ('3938', '3', '79', '222', '3937', '80'); -INSERT INTO cp_tree VALUES ('3939', '2', '82', '222', '3898', '85'); -INSERT INTO cp_tree VALUES ('3940', '3', '83', '222', '3939', '84'); -INSERT INTO cp_tree VALUES ('3941', '2', '86', '222', '3898', '101'); -INSERT INTO cp_tree VALUES ('3942', '3', '87', '222', '3941', '90'); -INSERT INTO cp_tree VALUES ('3943', '4', '88', '222', '3942', '89'); -INSERT INTO cp_tree VALUES ('3944', '3', '91', '222', '3941', '94'); -INSERT INTO cp_tree VALUES ('3945', '4', '92', '222', '3944', '93'); -INSERT INTO cp_tree VALUES ('3946', '3', '95', '222', '3941', '100'); -INSERT INTO cp_tree VALUES ('3947', '4', '96', '222', '3946', '97'); -INSERT INTO cp_tree VALUES ('3948', '4', '98', '222', '3946', '99'); -INSERT INTO cp_tree VALUES ('3949', '2', '102', '222', '3898', '103'); -INSERT INTO cp_tree VALUES ('3950', '1', '1', '223', '0', '102'); -INSERT INTO cp_tree VALUES ('3951', '2', '2', '223', '3950', '45'); -INSERT INTO cp_tree VALUES ('3952', '3', '3', '223', '3951', '10'); -INSERT INTO cp_tree VALUES ('3953', '4', '4', '223', '3952', '5'); -INSERT INTO cp_tree VALUES ('3954', '4', '6', '223', '3952', '7'); -INSERT INTO cp_tree VALUES ('3955', '4', '8', '223', '3952', '9'); -INSERT INTO cp_tree VALUES ('3956', '3', '11', '223', '3951', '36'); -INSERT INTO cp_tree VALUES ('3957', '4', '12', '223', '3956', '19'); -INSERT INTO cp_tree VALUES ('3958', '5', '13', '223', '3957', '14'); -INSERT INTO cp_tree VALUES ('3959', '5', '15', '223', '3957', '16'); -INSERT INTO cp_tree VALUES ('3960', '5', '17', '223', '3957', '18'); -INSERT INTO cp_tree VALUES ('3961', '4', '20', '223', '3956', '27'); -INSERT INTO cp_tree VALUES ('3962', '5', '21', '223', '3961', '22'); -INSERT INTO cp_tree VALUES ('3963', '5', '23', '223', '3961', '24'); -INSERT INTO cp_tree VALUES ('3964', '5', '25', '223', '3961', '26'); -INSERT INTO cp_tree VALUES ('3965', '4', '28', '223', '3956', '35'); -INSERT INTO cp_tree VALUES ('3966', '5', '29', '223', '3965', '30'); -INSERT INTO cp_tree VALUES ('3967', '5', '31', '223', '3965', '32'); -INSERT INTO cp_tree VALUES ('3968', '5', '33', '223', '3965', '34'); -INSERT INTO cp_tree VALUES ('3969', '3', '37', '223', '3951', '44'); -INSERT INTO cp_tree VALUES ('3970', '4', '38', '223', '3969', '39'); -INSERT INTO cp_tree VALUES ('3971', '4', '40', '223', '3969', '41'); -INSERT INTO cp_tree VALUES ('3972', '4', '42', '223', '3969', '43'); -INSERT INTO cp_tree VALUES ('3973', '2', '46', '223', '3950', '59'); -INSERT INTO cp_tree VALUES ('3974', '3', '47', '223', '3973', '48'); -INSERT INTO cp_tree VALUES ('3975', '3', '49', '223', '3973', '50'); -INSERT INTO cp_tree VALUES ('3976', '3', '51', '223', '3973', '52'); -INSERT INTO cp_tree VALUES ('3977', '3', '53', '223', '3973', '54'); -INSERT INTO cp_tree VALUES ('3978', '3', '55', '223', '3973', '56'); -INSERT INTO cp_tree VALUES ('3979', '3', '57', '223', '3973', '58'); -INSERT INTO cp_tree VALUES ('3980', '2', '60', '223', '3950', '63'); -INSERT INTO cp_tree VALUES ('3981', '3', '61', '223', '3980', '62'); -INSERT INTO cp_tree VALUES ('3982', '2', '64', '223', '3950', '67'); -INSERT INTO cp_tree VALUES ('3983', '3', '65', '223', '3982', '66'); -INSERT INTO cp_tree VALUES ('3984', '2', '68', '223', '3950', '71'); -INSERT INTO cp_tree VALUES ('3985', '3', '69', '223', '3984', '70'); -INSERT INTO cp_tree VALUES ('3986', '2', '72', '223', '3950', '77'); -INSERT INTO cp_tree VALUES ('3987', '3', '73', '223', '3986', '74'); -INSERT INTO cp_tree VALUES ('3988', '3', '75', '223', '3986', '76'); -INSERT INTO cp_tree VALUES ('3989', '2', '78', '223', '3950', '81'); -INSERT INTO cp_tree VALUES ('3990', '3', '79', '223', '3989', '80'); -INSERT INTO cp_tree VALUES ('3991', '2', '82', '223', '3950', '85'); -INSERT INTO cp_tree VALUES ('3992', '3', '83', '223', '3991', '84'); -INSERT INTO cp_tree VALUES ('3993', '2', '86', '223', '3950', '99'); -INSERT INTO cp_tree VALUES ('3994', '3', '87', '223', '3993', '90'); -INSERT INTO cp_tree VALUES ('3995', '4', '88', '223', '3994', '89'); -INSERT INTO cp_tree VALUES ('3996', '3', '91', '223', '3993', '94'); -INSERT INTO cp_tree VALUES ('3997', '4', '92', '223', '3996', '93'); -INSERT INTO cp_tree VALUES ('3998', '3', '95', '223', '3993', '98'); -INSERT INTO cp_tree VALUES ('3999', '4', '96', '223', '3998', '97'); -INSERT INTO cp_tree VALUES ('4000', '2', '100', '223', '3950', '101'); -INSERT INTO cp_tree VALUES ('4001', '1', '1', '224', '0', '102'); -INSERT INTO cp_tree VALUES ('4002', '2', '2', '224', '4001', '45'); -INSERT INTO cp_tree VALUES ('4003', '3', '3', '224', '4002', '10'); -INSERT INTO cp_tree VALUES ('4004', '4', '4', '224', '4003', '5'); -INSERT INTO cp_tree VALUES ('4005', '4', '6', '224', '4003', '7'); -INSERT INTO cp_tree VALUES ('4006', '4', '8', '224', '4003', '9'); -INSERT INTO cp_tree VALUES ('4007', '3', '11', '224', '4002', '36'); -INSERT INTO cp_tree VALUES ('4008', '4', '12', '224', '4007', '19'); -INSERT INTO cp_tree VALUES ('4009', '5', '13', '224', '4008', '14'); -INSERT INTO cp_tree VALUES ('4010', '5', '15', '224', '4008', '16'); -INSERT INTO cp_tree VALUES ('4011', '5', '17', '224', '4008', '18'); -INSERT INTO cp_tree VALUES ('4012', '4', '20', '224', '4007', '27'); -INSERT INTO cp_tree VALUES ('4013', '5', '21', '224', '4012', '22'); -INSERT INTO cp_tree VALUES ('4014', '5', '23', '224', '4012', '24'); -INSERT INTO cp_tree VALUES ('4015', '5', '25', '224', '4012', '26'); -INSERT INTO cp_tree VALUES ('4016', '4', '28', '224', '4007', '35'); -INSERT INTO cp_tree VALUES ('4017', '5', '29', '224', '4016', '30'); -INSERT INTO cp_tree VALUES ('4018', '5', '31', '224', '4016', '32'); -INSERT INTO cp_tree VALUES ('4019', '5', '33', '224', '4016', '34'); -INSERT INTO cp_tree VALUES ('4020', '3', '37', '224', '4002', '44'); -INSERT INTO cp_tree VALUES ('4021', '4', '38', '224', '4020', '39'); -INSERT INTO cp_tree VALUES ('4022', '4', '40', '224', '4020', '41'); -INSERT INTO cp_tree VALUES ('4023', '4', '42', '224', '4020', '43'); -INSERT INTO cp_tree VALUES ('4024', '2', '46', '224', '4001', '59'); -INSERT INTO cp_tree VALUES ('4025', '3', '47', '224', '4024', '48'); -INSERT INTO cp_tree VALUES ('4026', '3', '49', '224', '4024', '50'); -INSERT INTO cp_tree VALUES ('4027', '3', '51', '224', '4024', '52'); -INSERT INTO cp_tree VALUES ('4028', '3', '53', '224', '4024', '54'); -INSERT INTO cp_tree VALUES ('4029', '3', '55', '224', '4024', '56'); -INSERT INTO cp_tree VALUES ('4030', '3', '57', '224', '4024', '58'); -INSERT INTO cp_tree VALUES ('4031', '2', '60', '224', '4001', '63'); -INSERT INTO cp_tree VALUES ('4032', '3', '61', '224', '4031', '62'); -INSERT INTO cp_tree VALUES ('4033', '2', '64', '224', '4001', '67'); -INSERT INTO cp_tree VALUES ('4034', '3', '65', '224', '4033', '66'); -INSERT INTO cp_tree VALUES ('4035', '2', '68', '224', '4001', '71'); -INSERT INTO cp_tree VALUES ('4036', '3', '69', '224', '4035', '70'); -INSERT INTO cp_tree VALUES ('4037', '2', '72', '224', '4001', '77'); -INSERT INTO cp_tree VALUES ('4038', '3', '73', '224', '4037', '74'); -INSERT INTO cp_tree VALUES ('4039', '3', '75', '224', '4037', '76'); -INSERT INTO cp_tree VALUES ('4040', '2', '78', '224', '4001', '81'); -INSERT INTO cp_tree VALUES ('4041', '3', '79', '224', '4040', '80'); -INSERT INTO cp_tree VALUES ('4042', '2', '82', '224', '4001', '85'); -INSERT INTO cp_tree VALUES ('4043', '3', '83', '224', '4042', '84'); -INSERT INTO cp_tree VALUES ('4044', '2', '86', '224', '4001', '99'); -INSERT INTO cp_tree VALUES ('4045', '3', '87', '224', '4044', '90'); -INSERT INTO cp_tree VALUES ('4046', '4', '88', '224', '4045', '89'); -INSERT INTO cp_tree VALUES ('4047', '3', '91', '224', '4044', '94'); -INSERT INTO cp_tree VALUES ('4048', '4', '92', '224', '4047', '93'); -INSERT INTO cp_tree VALUES ('4049', '3', '95', '224', '4044', '98'); -INSERT INTO cp_tree VALUES ('4050', '4', '96', '224', '4049', '97'); -INSERT INTO cp_tree VALUES ('4051', '2', '100', '224', '4001', '101'); -INSERT INTO cp_tree VALUES ('4052', '1', '1', '225', '0', '90'); -INSERT INTO cp_tree VALUES ('4053', '2', '2', '225', '4052', '37'); -INSERT INTO cp_tree VALUES ('4054', '3', '3', '225', '4053', '28'); -INSERT INTO cp_tree VALUES ('4055', '4', '4', '225', '4054', '11'); -INSERT INTO cp_tree VALUES ('4056', '5', '5', '225', '4055', '6'); -INSERT INTO cp_tree VALUES ('4057', '5', '7', '225', '4055', '8'); -INSERT INTO cp_tree VALUES ('4058', '5', '9', '225', '4055', '10'); -INSERT INTO cp_tree VALUES ('4059', '4', '12', '225', '4054', '19'); -INSERT INTO cp_tree VALUES ('4060', '5', '13', '225', '4059', '14'); -INSERT INTO cp_tree VALUES ('4061', '5', '15', '225', '4059', '16'); -INSERT INTO cp_tree VALUES ('4062', '5', '17', '225', '4059', '18'); -INSERT INTO cp_tree VALUES ('4063', '4', '20', '225', '4054', '27'); -INSERT INTO cp_tree VALUES ('4064', '5', '21', '225', '4063', '22'); -INSERT INTO cp_tree VALUES ('4065', '5', '23', '225', '4063', '24'); -INSERT INTO cp_tree VALUES ('4066', '5', '25', '225', '4063', '26'); -INSERT INTO cp_tree VALUES ('4067', '3', '29', '225', '4053', '36'); -INSERT INTO cp_tree VALUES ('4068', '4', '30', '225', '4067', '31'); -INSERT INTO cp_tree VALUES ('4069', '4', '32', '225', '4067', '33'); -INSERT INTO cp_tree VALUES ('4070', '4', '34', '225', '4067', '35'); -INSERT INTO cp_tree VALUES ('4071', '2', '38', '225', '4052', '51'); -INSERT INTO cp_tree VALUES ('4072', '3', '39', '225', '4071', '40'); -INSERT INTO cp_tree VALUES ('4073', '3', '41', '225', '4071', '42'); -INSERT INTO cp_tree VALUES ('4074', '3', '43', '225', '4071', '44'); -INSERT INTO cp_tree VALUES ('4075', '3', '45', '225', '4071', '46'); -INSERT INTO cp_tree VALUES ('4076', '3', '47', '225', '4071', '48'); -INSERT INTO cp_tree VALUES ('4077', '3', '49', '225', '4071', '50'); -INSERT INTO cp_tree VALUES ('4078', '2', '52', '225', '4052', '55'); -INSERT INTO cp_tree VALUES ('4079', '3', '53', '225', '4078', '54'); -INSERT INTO cp_tree VALUES ('4080', '2', '56', '225', '4052', '59'); -INSERT INTO cp_tree VALUES ('4081', '3', '57', '225', '4080', '58'); -INSERT INTO cp_tree VALUES ('4082', '2', '60', '225', '4052', '63'); -INSERT INTO cp_tree VALUES ('4083', '3', '61', '225', '4082', '62'); -INSERT INTO cp_tree VALUES ('4084', '2', '64', '225', '4052', '69'); -INSERT INTO cp_tree VALUES ('4085', '3', '65', '225', '4084', '66'); -INSERT INTO cp_tree VALUES ('4086', '3', '67', '225', '4084', '68'); -INSERT INTO cp_tree VALUES ('4087', '2', '70', '225', '4052', '73'); -INSERT INTO cp_tree VALUES ('4088', '3', '71', '225', '4087', '72'); -INSERT INTO cp_tree VALUES ('4089', '2', '74', '225', '4052', '77'); -INSERT INTO cp_tree VALUES ('4090', '3', '75', '225', '4089', '76'); -INSERT INTO cp_tree VALUES ('4091', '2', '78', '225', '4052', '87'); -INSERT INTO cp_tree VALUES ('4092', '3', '79', '225', '4091', '82'); -INSERT INTO cp_tree VALUES ('4093', '4', '80', '225', '4092', '81'); -INSERT INTO cp_tree VALUES ('4094', '3', '83', '225', '4091', '86'); -INSERT INTO cp_tree VALUES ('4095', '4', '84', '225', '4094', '85'); -INSERT INTO cp_tree VALUES ('4096', '2', '88', '225', '4052', '89'); -INSERT INTO cp_tree VALUES ('4097', '1', '1', '226', '0', '94'); -INSERT INTO cp_tree VALUES ('4098', '2', '2', '226', '4097', '37'); -INSERT INTO cp_tree VALUES ('4099', '3', '3', '226', '4098', '28'); -INSERT INTO cp_tree VALUES ('4100', '4', '4', '226', '4099', '11'); -INSERT INTO cp_tree VALUES ('4101', '5', '5', '226', '4100', '6'); -INSERT INTO cp_tree VALUES ('4102', '5', '7', '226', '4100', '8'); -INSERT INTO cp_tree VALUES ('4103', '5', '9', '226', '4100', '10'); -INSERT INTO cp_tree VALUES ('4104', '4', '12', '226', '4099', '19'); -INSERT INTO cp_tree VALUES ('4105', '5', '13', '226', '4104', '14'); -INSERT INTO cp_tree VALUES ('4106', '5', '15', '226', '4104', '16'); -INSERT INTO cp_tree VALUES ('4107', '5', '17', '226', '4104', '18'); -INSERT INTO cp_tree VALUES ('4108', '4', '20', '226', '4099', '27'); -INSERT INTO cp_tree VALUES ('4109', '5', '21', '226', '4108', '22'); -INSERT INTO cp_tree VALUES ('4110', '5', '23', '226', '4108', '24'); -INSERT INTO cp_tree VALUES ('4111', '5', '25', '226', '4108', '26'); -INSERT INTO cp_tree VALUES ('4112', '3', '29', '226', '4098', '36'); -INSERT INTO cp_tree VALUES ('4113', '4', '30', '226', '4112', '31'); -INSERT INTO cp_tree VALUES ('4114', '4', '32', '226', '4112', '33'); -INSERT INTO cp_tree VALUES ('4115', '4', '34', '226', '4112', '35'); -INSERT INTO cp_tree VALUES ('4116', '2', '38', '226', '4097', '51'); -INSERT INTO cp_tree VALUES ('4117', '3', '39', '226', '4116', '40'); -INSERT INTO cp_tree VALUES ('4118', '3', '41', '226', '4116', '42'); -INSERT INTO cp_tree VALUES ('4119', '3', '43', '226', '4116', '44'); -INSERT INTO cp_tree VALUES ('4120', '3', '45', '226', '4116', '46'); -INSERT INTO cp_tree VALUES ('4121', '3', '47', '226', '4116', '48'); -INSERT INTO cp_tree VALUES ('4122', '3', '49', '226', '4116', '50'); -INSERT INTO cp_tree VALUES ('4123', '2', '52', '226', '4097', '55'); -INSERT INTO cp_tree VALUES ('4124', '3', '53', '226', '4123', '54'); -INSERT INTO cp_tree VALUES ('4125', '2', '56', '226', '4097', '59'); -INSERT INTO cp_tree VALUES ('4126', '3', '57', '226', '4125', '58'); -INSERT INTO cp_tree VALUES ('4127', '2', '60', '226', '4097', '63'); -INSERT INTO cp_tree VALUES ('4128', '3', '61', '226', '4127', '62'); -INSERT INTO cp_tree VALUES ('4129', '2', '64', '226', '4097', '69'); -INSERT INTO cp_tree VALUES ('4130', '3', '65', '226', '4129', '66'); -INSERT INTO cp_tree VALUES ('4131', '3', '67', '226', '4129', '68'); -INSERT INTO cp_tree VALUES ('4132', '2', '70', '226', '4097', '73'); -INSERT INTO cp_tree VALUES ('4133', '3', '71', '226', '4132', '72'); -INSERT INTO cp_tree VALUES ('4134', '2', '74', '226', '4097', '77'); -INSERT INTO cp_tree VALUES ('4135', '3', '75', '226', '4134', '76'); -INSERT INTO cp_tree VALUES ('4136', '2', '78', '226', '4097', '91'); -INSERT INTO cp_tree VALUES ('4137', '3', '79', '226', '4136', '82'); -INSERT INTO cp_tree VALUES ('4138', '4', '80', '226', '4137', '81'); -INSERT INTO cp_tree VALUES ('4139', '3', '83', '226', '4136', '86'); -INSERT INTO cp_tree VALUES ('4140', '4', '84', '226', '4139', '85'); -INSERT INTO cp_tree VALUES ('4141', '3', '87', '226', '4136', '90'); -INSERT INTO cp_tree VALUES ('4142', '4', '88', '226', '4141', '89'); -INSERT INTO cp_tree VALUES ('4143', '2', '92', '226', '4097', '93'); -INSERT INTO cp_tree VALUES ('4144', '1', '1', '227', '0', '110'); -INSERT INTO cp_tree VALUES ('4145', '2', '2', '227', '4144', '45'); -INSERT INTO cp_tree VALUES ('4146', '3', '3', '227', '4145', '10'); -INSERT INTO cp_tree VALUES ('4147', '4', '4', '227', '4146', '5'); -INSERT INTO cp_tree VALUES ('4148', '4', '6', '227', '4146', '7'); -INSERT INTO cp_tree VALUES ('4149', '4', '8', '227', '4146', '9'); -INSERT INTO cp_tree VALUES ('4150', '3', '11', '227', '4145', '36'); -INSERT INTO cp_tree VALUES ('4151', '4', '12', '227', '4150', '19'); -INSERT INTO cp_tree VALUES ('4152', '5', '13', '227', '4151', '14'); -INSERT INTO cp_tree VALUES ('4153', '5', '15', '227', '4151', '16'); -INSERT INTO cp_tree VALUES ('4154', '5', '17', '227', '4151', '18'); -INSERT INTO cp_tree VALUES ('4155', '4', '20', '227', '4150', '27'); -INSERT INTO cp_tree VALUES ('4156', '5', '21', '227', '4155', '22'); -INSERT INTO cp_tree VALUES ('4157', '5', '23', '227', '4155', '24'); -INSERT INTO cp_tree VALUES ('4158', '5', '25', '227', '4155', '26'); -INSERT INTO cp_tree VALUES ('4159', '4', '28', '227', '4150', '35'); -INSERT INTO cp_tree VALUES ('4160', '5', '29', '227', '4159', '30'); -INSERT INTO cp_tree VALUES ('4161', '5', '31', '227', '4159', '32'); -INSERT INTO cp_tree VALUES ('4162', '5', '33', '227', '4159', '34'); -INSERT INTO cp_tree VALUES ('4163', '3', '37', '227', '4145', '44'); -INSERT INTO cp_tree VALUES ('4164', '4', '38', '227', '4163', '39'); -INSERT INTO cp_tree VALUES ('4165', '4', '40', '227', '4163', '41'); -INSERT INTO cp_tree VALUES ('4166', '4', '42', '227', '4163', '43'); -INSERT INTO cp_tree VALUES ('4167', '2', '46', '227', '4144', '59'); -INSERT INTO cp_tree VALUES ('4168', '3', '47', '227', '4167', '48'); -INSERT INTO cp_tree VALUES ('4169', '3', '49', '227', '4167', '50'); -INSERT INTO cp_tree VALUES ('4170', '3', '51', '227', '4167', '52'); -INSERT INTO cp_tree VALUES ('4171', '3', '53', '227', '4167', '54'); -INSERT INTO cp_tree VALUES ('4172', '3', '55', '227', '4167', '56'); -INSERT INTO cp_tree VALUES ('4173', '3', '57', '227', '4167', '58'); -INSERT INTO cp_tree VALUES ('4174', '2', '60', '227', '4144', '63'); -INSERT INTO cp_tree VALUES ('4175', '3', '61', '227', '4174', '62'); -INSERT INTO cp_tree VALUES ('4176', '2', '64', '227', '4144', '67'); -INSERT INTO cp_tree VALUES ('4177', '3', '65', '227', '4176', '66'); -INSERT INTO cp_tree VALUES ('4178', '2', '68', '227', '4144', '71'); -INSERT INTO cp_tree VALUES ('4179', '3', '69', '227', '4178', '70'); -INSERT INTO cp_tree VALUES ('4180', '2', '72', '227', '4144', '77'); -INSERT INTO cp_tree VALUES ('4181', '3', '73', '227', '4180', '74'); -INSERT INTO cp_tree VALUES ('4182', '3', '75', '227', '4180', '76'); -INSERT INTO cp_tree VALUES ('4183', '2', '78', '227', '4144', '81'); -INSERT INTO cp_tree VALUES ('4184', '3', '79', '227', '4183', '80'); -INSERT INTO cp_tree VALUES ('4185', '2', '82', '227', '4144', '85'); -INSERT INTO cp_tree VALUES ('4186', '3', '83', '227', '4185', '84'); -INSERT INTO cp_tree VALUES ('4187', '2', '86', '227', '4144', '91'); -INSERT INTO cp_tree VALUES ('4188', '3', '87', '227', '4187', '90'); -INSERT INTO cp_tree VALUES ('4189', '4', '88', '227', '4188', '89'); -INSERT INTO cp_tree VALUES ('4190', '2', '92', '227', '4144', '97'); -INSERT INTO cp_tree VALUES ('4191', '3', '93', '227', '4190', '96'); -INSERT INTO cp_tree VALUES ('4192', '4', '94', '227', '4191', '95'); -INSERT INTO cp_tree VALUES ('4193', '2', '98', '227', '4144', '107'); -INSERT INTO cp_tree VALUES ('4194', '3', '99', '227', '4193', '102'); -INSERT INTO cp_tree VALUES ('4195', '4', '100', '227', '4194', '101'); -INSERT INTO cp_tree VALUES ('4196', '3', '103', '227', '4193', '106'); -INSERT INTO cp_tree VALUES ('4197', '4', '104', '227', '4196', '105'); -INSERT INTO cp_tree VALUES ('4198', '2', '108', '227', '4144', '109'); -INSERT INTO cp_tree VALUES ('4199', '1', '1', '228', '0', '110'); -INSERT INTO cp_tree VALUES ('4200', '2', '2', '228', '4199', '45'); -INSERT INTO cp_tree VALUES ('4201', '3', '3', '228', '4200', '10'); -INSERT INTO cp_tree VALUES ('4202', '4', '4', '228', '4201', '5'); -INSERT INTO cp_tree VALUES ('4203', '4', '6', '228', '4201', '7'); -INSERT INTO cp_tree VALUES ('4204', '4', '8', '228', '4201', '9'); -INSERT INTO cp_tree VALUES ('4205', '3', '11', '228', '4200', '36'); -INSERT INTO cp_tree VALUES ('4206', '4', '12', '228', '4205', '19'); -INSERT INTO cp_tree VALUES ('4207', '5', '13', '228', '4206', '14'); -INSERT INTO cp_tree VALUES ('4208', '5', '15', '228', '4206', '16'); -INSERT INTO cp_tree VALUES ('4209', '5', '17', '228', '4206', '18'); -INSERT INTO cp_tree VALUES ('4210', '4', '20', '228', '4205', '27'); -INSERT INTO cp_tree VALUES ('4211', '5', '21', '228', '4210', '22'); -INSERT INTO cp_tree VALUES ('4212', '5', '23', '228', '4210', '24'); -INSERT INTO cp_tree VALUES ('4213', '5', '25', '228', '4210', '26'); -INSERT INTO cp_tree VALUES ('4214', '4', '28', '228', '4205', '35'); -INSERT INTO cp_tree VALUES ('4215', '5', '29', '228', '4214', '30'); -INSERT INTO cp_tree VALUES ('4216', '5', '31', '228', '4214', '32'); -INSERT INTO cp_tree VALUES ('4217', '5', '33', '228', '4214', '34'); -INSERT INTO cp_tree VALUES ('4218', '3', '37', '228', '4200', '44'); -INSERT INTO cp_tree VALUES ('4219', '4', '38', '228', '4218', '39'); -INSERT INTO cp_tree VALUES ('4220', '4', '40', '228', '4218', '41'); -INSERT INTO cp_tree VALUES ('4221', '4', '42', '228', '4218', '43'); -INSERT INTO cp_tree VALUES ('4222', '2', '46', '228', '4199', '59'); -INSERT INTO cp_tree VALUES ('4223', '3', '47', '228', '4222', '48'); -INSERT INTO cp_tree VALUES ('4224', '3', '49', '228', '4222', '50'); -INSERT INTO cp_tree VALUES ('4225', '3', '51', '228', '4222', '52'); -INSERT INTO cp_tree VALUES ('4226', '3', '53', '228', '4222', '54'); -INSERT INTO cp_tree VALUES ('4227', '3', '55', '228', '4222', '56'); -INSERT INTO cp_tree VALUES ('4228', '3', '57', '228', '4222', '58'); -INSERT INTO cp_tree VALUES ('4229', '2', '60', '228', '4199', '63'); -INSERT INTO cp_tree VALUES ('4230', '3', '61', '228', '4229', '62'); -INSERT INTO cp_tree VALUES ('4231', '2', '64', '228', '4199', '67'); -INSERT INTO cp_tree VALUES ('4232', '3', '65', '228', '4231', '66'); -INSERT INTO cp_tree VALUES ('4233', '2', '68', '228', '4199', '71'); -INSERT INTO cp_tree VALUES ('4234', '3', '69', '228', '4233', '70'); -INSERT INTO cp_tree VALUES ('4235', '2', '72', '228', '4199', '77'); -INSERT INTO cp_tree VALUES ('4236', '3', '73', '228', '4235', '74'); -INSERT INTO cp_tree VALUES ('4237', '3', '75', '228', '4235', '76'); -INSERT INTO cp_tree VALUES ('4238', '2', '78', '228', '4199', '81'); -INSERT INTO cp_tree VALUES ('4239', '3', '79', '228', '4238', '80'); -INSERT INTO cp_tree VALUES ('4240', '2', '82', '228', '4199', '85'); -INSERT INTO cp_tree VALUES ('4241', '3', '83', '228', '4240', '84'); -INSERT INTO cp_tree VALUES ('4242', '2', '86', '228', '4199', '91'); -INSERT INTO cp_tree VALUES ('4243', '3', '87', '228', '4242', '90'); -INSERT INTO cp_tree VALUES ('4244', '4', '88', '228', '4243', '89'); -INSERT INTO cp_tree VALUES ('4245', '2', '92', '228', '4199', '97'); -INSERT INTO cp_tree VALUES ('4246', '3', '93', '228', '4245', '96'); -INSERT INTO cp_tree VALUES ('4247', '4', '94', '228', '4246', '95'); -INSERT INTO cp_tree VALUES ('4248', '2', '98', '228', '4199', '107'); -INSERT INTO cp_tree VALUES ('4249', '3', '99', '228', '4248', '102'); -INSERT INTO cp_tree VALUES ('4250', '4', '100', '228', '4249', '101'); -INSERT INTO cp_tree VALUES ('4251', '3', '103', '228', '4248', '106'); -INSERT INTO cp_tree VALUES ('4252', '4', '104', '228', '4251', '105'); -INSERT INTO cp_tree VALUES ('4253', '2', '108', '228', '4199', '109'); -INSERT INTO cp_tree VALUES ('4254', '1', '1', '229', '0', '104'); -INSERT INTO cp_tree VALUES ('4255', '2', '2', '229', '4254', '45'); -INSERT INTO cp_tree VALUES ('4256', '3', '3', '229', '4255', '28'); -INSERT INTO cp_tree VALUES ('4257', '4', '4', '229', '4256', '11'); -INSERT INTO cp_tree VALUES ('4258', '5', '5', '229', '4257', '6'); -INSERT INTO cp_tree VALUES ('4259', '5', '7', '229', '4257', '8'); -INSERT INTO cp_tree VALUES ('4260', '5', '9', '229', '4257', '10'); -INSERT INTO cp_tree VALUES ('4261', '4', '12', '229', '4256', '19'); -INSERT INTO cp_tree VALUES ('4262', '5', '13', '229', '4261', '14'); -INSERT INTO cp_tree VALUES ('4263', '5', '15', '229', '4261', '16'); -INSERT INTO cp_tree VALUES ('4264', '5', '17', '229', '4261', '18'); -INSERT INTO cp_tree VALUES ('4265', '4', '20', '229', '4256', '27'); -INSERT INTO cp_tree VALUES ('4266', '5', '21', '229', '4265', '22'); -INSERT INTO cp_tree VALUES ('4267', '5', '23', '229', '4265', '24'); -INSERT INTO cp_tree VALUES ('4268', '5', '25', '229', '4265', '26'); -INSERT INTO cp_tree VALUES ('4269', '3', '29', '229', '4255', '36'); -INSERT INTO cp_tree VALUES ('4270', '4', '30', '229', '4269', '31'); -INSERT INTO cp_tree VALUES ('4271', '4', '32', '229', '4269', '33'); -INSERT INTO cp_tree VALUES ('4272', '4', '34', '229', '4269', '35'); -INSERT INTO cp_tree VALUES ('4273', '3', '37', '229', '4255', '44'); -INSERT INTO cp_tree VALUES ('4274', '4', '38', '229', '4273', '39'); -INSERT INTO cp_tree VALUES ('4275', '4', '40', '229', '4273', '41'); -INSERT INTO cp_tree VALUES ('4276', '4', '42', '229', '4273', '43'); -INSERT INTO cp_tree VALUES ('4277', '2', '46', '229', '4254', '59'); -INSERT INTO cp_tree VALUES ('4278', '3', '47', '229', '4277', '48'); -INSERT INTO cp_tree VALUES ('4279', '3', '49', '229', '4277', '50'); -INSERT INTO cp_tree VALUES ('4280', '3', '51', '229', '4277', '52'); -INSERT INTO cp_tree VALUES ('4281', '3', '53', '229', '4277', '54'); -INSERT INTO cp_tree VALUES ('4282', '3', '55', '229', '4277', '56'); -INSERT INTO cp_tree VALUES ('4283', '3', '57', '229', '4277', '58'); -INSERT INTO cp_tree VALUES ('4284', '2', '60', '229', '4254', '63'); -INSERT INTO cp_tree VALUES ('4285', '3', '61', '229', '4284', '62'); -INSERT INTO cp_tree VALUES ('4286', '2', '64', '229', '4254', '67'); -INSERT INTO cp_tree VALUES ('4287', '3', '65', '229', '4286', '66'); -INSERT INTO cp_tree VALUES ('4288', '2', '68', '229', '4254', '71'); -INSERT INTO cp_tree VALUES ('4289', '3', '69', '229', '4288', '70'); -INSERT INTO cp_tree VALUES ('4290', '2', '72', '229', '4254', '77'); -INSERT INTO cp_tree VALUES ('4291', '3', '73', '229', '4290', '74'); -INSERT INTO cp_tree VALUES ('4292', '3', '75', '229', '4290', '76'); -INSERT INTO cp_tree VALUES ('4293', '2', '78', '229', '4254', '81'); -INSERT INTO cp_tree VALUES ('4294', '3', '79', '229', '4293', '80'); -INSERT INTO cp_tree VALUES ('4295', '2', '82', '229', '4254', '85'); -INSERT INTO cp_tree VALUES ('4296', '3', '83', '229', '4295', '84'); -INSERT INTO cp_tree VALUES ('4297', '2', '86', '229', '4254', '91'); -INSERT INTO cp_tree VALUES ('4298', '3', '87', '229', '4297', '90'); -INSERT INTO cp_tree VALUES ('4299', '4', '88', '229', '4298', '89'); -INSERT INTO cp_tree VALUES ('4300', '2', '92', '229', '4254', '93'); -INSERT INTO cp_tree VALUES ('4301', '2', '94', '229', '4254', '103'); -INSERT INTO cp_tree VALUES ('4302', '3', '95', '229', '4301', '98'); -INSERT INTO cp_tree VALUES ('4303', '4', '96', '229', '4302', '97'); -INSERT INTO cp_tree VALUES ('4304', '3', '99', '229', '4301', '102'); -INSERT INTO cp_tree VALUES ('4305', '4', '100', '229', '4304', '101'); -INSERT INTO cp_tree VALUES ('4306', '1', '1', '230', '0', '134'); -INSERT INTO cp_tree VALUES ('4307', '2', '2', '230', '4306', '55'); -INSERT INTO cp_tree VALUES ('4308', '3', '3', '230', '4307', '10'); -INSERT INTO cp_tree VALUES ('4309', '4', '4', '230', '4308', '5'); -INSERT INTO cp_tree VALUES ('4310', '4', '6', '230', '4308', '7'); -INSERT INTO cp_tree VALUES ('4311', '4', '8', '230', '4308', '9'); -INSERT INTO cp_tree VALUES ('4312', '3', '11', '230', '4307', '46'); -INSERT INTO cp_tree VALUES ('4313', '4', '12', '230', '4312', '37'); -INSERT INTO cp_tree VALUES ('4314', '5', '13', '230', '4313', '20'); -INSERT INTO cp_tree VALUES ('4315', '6', '14', '230', '4314', '15'); -INSERT INTO cp_tree VALUES ('4316', '6', '16', '230', '4314', '17'); -INSERT INTO cp_tree VALUES ('4317', '6', '18', '230', '4314', '19'); -INSERT INTO cp_tree VALUES ('4318', '5', '21', '230', '4313', '28'); -INSERT INTO cp_tree VALUES ('4319', '6', '22', '230', '4318', '23'); -INSERT INTO cp_tree VALUES ('4320', '6', '24', '230', '4318', '25'); -INSERT INTO cp_tree VALUES ('4321', '6', '26', '230', '4318', '27'); -INSERT INTO cp_tree VALUES ('4322', '5', '29', '230', '4313', '36'); -INSERT INTO cp_tree VALUES ('4323', '6', '30', '230', '4322', '31'); -INSERT INTO cp_tree VALUES ('4324', '6', '32', '230', '4322', '33'); -INSERT INTO cp_tree VALUES ('4325', '6', '34', '230', '4322', '35'); -INSERT INTO cp_tree VALUES ('4326', '4', '38', '230', '4312', '45'); -INSERT INTO cp_tree VALUES ('4327', '5', '39', '230', '4326', '40'); -INSERT INTO cp_tree VALUES ('4328', '5', '41', '230', '4326', '42'); -INSERT INTO cp_tree VALUES ('4329', '5', '43', '230', '4326', '44'); -INSERT INTO cp_tree VALUES ('4330', '3', '47', '230', '4307', '54'); -INSERT INTO cp_tree VALUES ('4331', '4', '48', '230', '4330', '49'); -INSERT INTO cp_tree VALUES ('4332', '4', '50', '230', '4330', '51'); -INSERT INTO cp_tree VALUES ('4333', '4', '52', '230', '4330', '53'); -INSERT INTO cp_tree VALUES ('4334', '2', '56', '230', '4306', '69'); -INSERT INTO cp_tree VALUES ('4335', '3', '57', '230', '4334', '58'); -INSERT INTO cp_tree VALUES ('4336', '3', '59', '230', '4334', '60'); -INSERT INTO cp_tree VALUES ('4337', '3', '61', '230', '4334', '62'); -INSERT INTO cp_tree VALUES ('4338', '3', '63', '230', '4334', '64'); -INSERT INTO cp_tree VALUES ('4339', '3', '65', '230', '4334', '66'); -INSERT INTO cp_tree VALUES ('4340', '3', '67', '230', '4334', '68'); -INSERT INTO cp_tree VALUES ('4341', '2', '70', '230', '4306', '73'); -INSERT INTO cp_tree VALUES ('4342', '3', '71', '230', '4341', '72'); -INSERT INTO cp_tree VALUES ('4343', '2', '74', '230', '4306', '77'); -INSERT INTO cp_tree VALUES ('4344', '3', '75', '230', '4343', '76'); -INSERT INTO cp_tree VALUES ('4345', '2', '78', '230', '4306', '81'); -INSERT INTO cp_tree VALUES ('4346', '3', '79', '230', '4345', '80'); -INSERT INTO cp_tree VALUES ('4347', '2', '82', '230', '4306', '87'); -INSERT INTO cp_tree VALUES ('4348', '3', '83', '230', '4347', '84'); -INSERT INTO cp_tree VALUES ('4349', '3', '85', '230', '4347', '86'); -INSERT INTO cp_tree VALUES ('4350', '2', '88', '230', '4306', '91'); -INSERT INTO cp_tree VALUES ('4351', '3', '89', '230', '4350', '90'); -INSERT INTO cp_tree VALUES ('4352', '2', '92', '230', '4306', '95'); -INSERT INTO cp_tree VALUES ('4353', '3', '93', '230', '4352', '94'); -INSERT INTO cp_tree VALUES ('4354', '2', '96', '230', '4306', '117'); -INSERT INTO cp_tree VALUES ('4355', '3', '97', '230', '4354', '100'); -INSERT INTO cp_tree VALUES ('4356', '4', '98', '230', '4355', '99'); -INSERT INTO cp_tree VALUES ('4357', '3', '101', '230', '4354', '104'); -INSERT INTO cp_tree VALUES ('4358', '4', '102', '230', '4357', '103'); -INSERT INTO cp_tree VALUES ('4359', '3', '105', '230', '4354', '112'); -INSERT INTO cp_tree VALUES ('4360', '4', '106', '230', '4359', '107'); -INSERT INTO cp_tree VALUES ('4361', '4', '108', '230', '4359', '109'); -INSERT INTO cp_tree VALUES ('4362', '4', '110', '230', '4359', '111'); -INSERT INTO cp_tree VALUES ('4363', '3', '113', '230', '4354', '116'); -INSERT INTO cp_tree VALUES ('4364', '4', '114', '230', '4363', '115'); -INSERT INTO cp_tree VALUES ('4365', '2', '118', '230', '4306', '119'); -INSERT INTO cp_tree VALUES ('4366', '2', '120', '230', '4306', '131'); -INSERT INTO cp_tree VALUES ('4367', '3', '121', '230', '4366', '124'); -INSERT INTO cp_tree VALUES ('4368', '4', '122', '230', '4367', '123'); -INSERT INTO cp_tree VALUES ('4369', '3', '125', '230', '4366', '130'); -INSERT INTO cp_tree VALUES ('4370', '4', '126', '230', '4369', '127'); -INSERT INTO cp_tree VALUES ('4371', '4', '128', '230', '4369', '129'); -INSERT INTO cp_tree VALUES ('4372', '2', '132', '230', '4306', '133'); -INSERT INTO cp_tree VALUES ('4373', '1', '1', '231', '0', '138'); -INSERT INTO cp_tree VALUES ('4374', '2', '2', '231', '4373', '55'); -INSERT INTO cp_tree VALUES ('4375', '3', '3', '231', '4374', '10'); -INSERT INTO cp_tree VALUES ('4376', '4', '4', '231', '4375', '5'); -INSERT INTO cp_tree VALUES ('4377', '4', '6', '231', '4375', '7'); -INSERT INTO cp_tree VALUES ('4378', '4', '8', '231', '4375', '9'); -INSERT INTO cp_tree VALUES ('4379', '3', '11', '231', '4374', '46'); -INSERT INTO cp_tree VALUES ('4380', '4', '12', '231', '4379', '37'); -INSERT INTO cp_tree VALUES ('4381', '5', '13', '231', '4380', '20'); -INSERT INTO cp_tree VALUES ('4382', '6', '14', '231', '4381', '15'); -INSERT INTO cp_tree VALUES ('4383', '6', '16', '231', '4381', '17'); -INSERT INTO cp_tree VALUES ('4384', '6', '18', '231', '4381', '19'); -INSERT INTO cp_tree VALUES ('4385', '5', '21', '231', '4380', '28'); -INSERT INTO cp_tree VALUES ('4386', '6', '22', '231', '4385', '23'); -INSERT INTO cp_tree VALUES ('4387', '6', '24', '231', '4385', '25'); -INSERT INTO cp_tree VALUES ('4388', '6', '26', '231', '4385', '27'); -INSERT INTO cp_tree VALUES ('4389', '5', '29', '231', '4380', '36'); -INSERT INTO cp_tree VALUES ('4390', '6', '30', '231', '4389', '31'); -INSERT INTO cp_tree VALUES ('4391', '6', '32', '231', '4389', '33'); -INSERT INTO cp_tree VALUES ('4392', '6', '34', '231', '4389', '35'); -INSERT INTO cp_tree VALUES ('4393', '4', '38', '231', '4379', '45'); -INSERT INTO cp_tree VALUES ('4394', '5', '39', '231', '4393', '40'); -INSERT INTO cp_tree VALUES ('4395', '5', '41', '231', '4393', '42'); -INSERT INTO cp_tree VALUES ('4396', '5', '43', '231', '4393', '44'); -INSERT INTO cp_tree VALUES ('4397', '3', '47', '231', '4374', '54'); -INSERT INTO cp_tree VALUES ('4398', '4', '48', '231', '4397', '49'); -INSERT INTO cp_tree VALUES ('4399', '4', '50', '231', '4397', '51'); -INSERT INTO cp_tree VALUES ('4400', '4', '52', '231', '4397', '53'); -INSERT INTO cp_tree VALUES ('4401', '2', '56', '231', '4373', '69'); -INSERT INTO cp_tree VALUES ('4402', '3', '57', '231', '4401', '58'); -INSERT INTO cp_tree VALUES ('4403', '3', '59', '231', '4401', '60'); -INSERT INTO cp_tree VALUES ('4404', '3', '61', '231', '4401', '62'); -INSERT INTO cp_tree VALUES ('4405', '3', '63', '231', '4401', '64'); -INSERT INTO cp_tree VALUES ('4406', '3', '65', '231', '4401', '66'); -INSERT INTO cp_tree VALUES ('4407', '3', '67', '231', '4401', '68'); -INSERT INTO cp_tree VALUES ('4408', '2', '70', '231', '4373', '73'); -INSERT INTO cp_tree VALUES ('4409', '3', '71', '231', '4408', '72'); -INSERT INTO cp_tree VALUES ('4410', '2', '74', '231', '4373', '77'); -INSERT INTO cp_tree VALUES ('4411', '3', '75', '231', '4410', '76'); -INSERT INTO cp_tree VALUES ('4412', '2', '78', '231', '4373', '81'); -INSERT INTO cp_tree VALUES ('4413', '3', '79', '231', '4412', '80'); -INSERT INTO cp_tree VALUES ('4414', '2', '82', '231', '4373', '87'); -INSERT INTO cp_tree VALUES ('4415', '3', '83', '231', '4414', '84'); -INSERT INTO cp_tree VALUES ('4416', '3', '85', '231', '4414', '86'); -INSERT INTO cp_tree VALUES ('4417', '2', '88', '231', '4373', '91'); -INSERT INTO cp_tree VALUES ('4418', '3', '89', '231', '4417', '90'); -INSERT INTO cp_tree VALUES ('4419', '2', '92', '231', '4373', '95'); -INSERT INTO cp_tree VALUES ('4420', '3', '93', '231', '4419', '94'); -INSERT INTO cp_tree VALUES ('4421', '2', '96', '231', '4373', '97'); -INSERT INTO cp_tree VALUES ('4422', '2', '98', '231', '4373', '99'); -INSERT INTO cp_tree VALUES ('4423', '2', '100', '231', '4373', '101'); -INSERT INTO cp_tree VALUES ('4424', '2', '102', '231', '4373', '123'); -INSERT INTO cp_tree VALUES ('4425', '3', '103', '231', '4424', '106'); -INSERT INTO cp_tree VALUES ('4426', '4', '104', '231', '4425', '105'); -INSERT INTO cp_tree VALUES ('4427', '3', '107', '231', '4424', '110'); -INSERT INTO cp_tree VALUES ('4428', '4', '108', '231', '4427', '109'); -INSERT INTO cp_tree VALUES ('4429', '3', '111', '231', '4424', '118'); -INSERT INTO cp_tree VALUES ('4430', '4', '112', '231', '4429', '113'); -INSERT INTO cp_tree VALUES ('4431', '4', '114', '231', '4429', '115'); -INSERT INTO cp_tree VALUES ('4432', '4', '116', '231', '4429', '117'); -INSERT INTO cp_tree VALUES ('4433', '3', '119', '231', '4424', '122'); -INSERT INTO cp_tree VALUES ('4434', '4', '120', '231', '4433', '121'); -INSERT INTO cp_tree VALUES ('4435', '2', '124', '231', '4373', '135'); -INSERT INTO cp_tree VALUES ('4436', '3', '125', '231', '4435', '128'); -INSERT INTO cp_tree VALUES ('4437', '4', '126', '231', '4436', '127'); -INSERT INTO cp_tree VALUES ('4438', '3', '129', '231', '4435', '134'); -INSERT INTO cp_tree VALUES ('4439', '4', '130', '231', '4438', '131'); -INSERT INTO cp_tree VALUES ('4440', '4', '132', '231', '4438', '133'); -INSERT INTO cp_tree VALUES ('4441', '2', '136', '231', '4373', '137'); -INSERT INTO cp_tree VALUES ('4442', '1', '1', '232', '0', '108'); -INSERT INTO cp_tree VALUES ('4443', '2', '2', '232', '4442', '45'); -INSERT INTO cp_tree VALUES ('4444', '3', '3', '232', '4443', '10'); -INSERT INTO cp_tree VALUES ('4445', '4', '4', '232', '4444', '5'); -INSERT INTO cp_tree VALUES ('4446', '4', '6', '232', '4444', '7'); -INSERT INTO cp_tree VALUES ('4447', '4', '8', '232', '4444', '9'); -INSERT INTO cp_tree VALUES ('4448', '3', '11', '232', '4443', '36'); -INSERT INTO cp_tree VALUES ('4449', '4', '12', '232', '4448', '19'); -INSERT INTO cp_tree VALUES ('4450', '5', '13', '232', '4449', '14'); -INSERT INTO cp_tree VALUES ('4451', '5', '15', '232', '4449', '16'); -INSERT INTO cp_tree VALUES ('4452', '5', '17', '232', '4449', '18'); -INSERT INTO cp_tree VALUES ('4453', '4', '20', '232', '4448', '27'); -INSERT INTO cp_tree VALUES ('4454', '5', '21', '232', '4453', '22'); -INSERT INTO cp_tree VALUES ('4455', '5', '23', '232', '4453', '24'); -INSERT INTO cp_tree VALUES ('4456', '5', '25', '232', '4453', '26'); -INSERT INTO cp_tree VALUES ('4457', '4', '28', '232', '4448', '35'); -INSERT INTO cp_tree VALUES ('4458', '5', '29', '232', '4457', '30'); -INSERT INTO cp_tree VALUES ('4459', '5', '31', '232', '4457', '32'); -INSERT INTO cp_tree VALUES ('4460', '5', '33', '232', '4457', '34'); -INSERT INTO cp_tree VALUES ('4461', '3', '37', '232', '4443', '44'); -INSERT INTO cp_tree VALUES ('4462', '4', '38', '232', '4461', '39'); -INSERT INTO cp_tree VALUES ('4463', '4', '40', '232', '4461', '41'); -INSERT INTO cp_tree VALUES ('4464', '4', '42', '232', '4461', '43'); -INSERT INTO cp_tree VALUES ('4465', '2', '46', '232', '4442', '59'); -INSERT INTO cp_tree VALUES ('4466', '3', '47', '232', '4465', '48'); -INSERT INTO cp_tree VALUES ('4467', '3', '49', '232', '4465', '50'); -INSERT INTO cp_tree VALUES ('4468', '3', '51', '232', '4465', '52'); -INSERT INTO cp_tree VALUES ('4469', '3', '53', '232', '4465', '54'); -INSERT INTO cp_tree VALUES ('4470', '3', '55', '232', '4465', '56'); -INSERT INTO cp_tree VALUES ('4471', '3', '57', '232', '4465', '58'); -INSERT INTO cp_tree VALUES ('4472', '2', '60', '232', '4442', '63'); -INSERT INTO cp_tree VALUES ('4473', '3', '61', '232', '4472', '62'); -INSERT INTO cp_tree VALUES ('4474', '2', '64', '232', '4442', '67'); -INSERT INTO cp_tree VALUES ('4475', '3', '65', '232', '4474', '66'); -INSERT INTO cp_tree VALUES ('4476', '2', '68', '232', '4442', '71'); -INSERT INTO cp_tree VALUES ('4477', '3', '69', '232', '4476', '70'); -INSERT INTO cp_tree VALUES ('4478', '2', '72', '232', '4442', '77'); -INSERT INTO cp_tree VALUES ('4479', '3', '73', '232', '4478', '74'); -INSERT INTO cp_tree VALUES ('4480', '3', '75', '232', '4478', '76'); -INSERT INTO cp_tree VALUES ('4481', '2', '78', '232', '4442', '81'); -INSERT INTO cp_tree VALUES ('4482', '3', '79', '232', '4481', '80'); -INSERT INTO cp_tree VALUES ('4483', '2', '82', '232', '4442', '85'); -INSERT INTO cp_tree VALUES ('4484', '3', '83', '232', '4483', '84'); -INSERT INTO cp_tree VALUES ('4485', '2', '86', '232', '4442', '91'); -INSERT INTO cp_tree VALUES ('4486', '3', '87', '232', '4485', '90'); -INSERT INTO cp_tree VALUES ('4487', '4', '88', '232', '4486', '89'); -INSERT INTO cp_tree VALUES ('4488', '2', '92', '232', '4442', '105'); -INSERT INTO cp_tree VALUES ('4489', '3', '93', '232', '4488', '96'); -INSERT INTO cp_tree VALUES ('4490', '4', '94', '232', '4489', '95'); -INSERT INTO cp_tree VALUES ('4491', '3', '97', '232', '4488', '100'); -INSERT INTO cp_tree VALUES ('4492', '4', '98', '232', '4491', '99'); -INSERT INTO cp_tree VALUES ('4493', '3', '101', '232', '4488', '104'); -INSERT INTO cp_tree VALUES ('4494', '4', '102', '232', '4493', '103'); -INSERT INTO cp_tree VALUES ('4495', '2', '106', '232', '4442', '107'); -INSERT INTO cp_tree VALUES ('4496', '1', '1', '233', '0', '102'); -INSERT INTO cp_tree VALUES ('4497', '2', '2', '233', '4496', '45'); -INSERT INTO cp_tree VALUES ('4498', '3', '3', '233', '4497', '10'); -INSERT INTO cp_tree VALUES ('4499', '4', '4', '233', '4498', '5'); -INSERT INTO cp_tree VALUES ('4500', '4', '6', '233', '4498', '7'); -INSERT INTO cp_tree VALUES ('4501', '4', '8', '233', '4498', '9'); -INSERT INTO cp_tree VALUES ('4502', '3', '11', '233', '4497', '36'); -INSERT INTO cp_tree VALUES ('4503', '4', '12', '233', '4502', '19'); -INSERT INTO cp_tree VALUES ('4504', '5', '13', '233', '4503', '14'); -INSERT INTO cp_tree VALUES ('4505', '5', '15', '233', '4503', '16'); -INSERT INTO cp_tree VALUES ('4506', '5', '17', '233', '4503', '18'); -INSERT INTO cp_tree VALUES ('4507', '4', '20', '233', '4502', '27'); -INSERT INTO cp_tree VALUES ('4508', '5', '21', '233', '4507', '22'); -INSERT INTO cp_tree VALUES ('4509', '5', '23', '233', '4507', '24'); -INSERT INTO cp_tree VALUES ('4510', '5', '25', '233', '4507', '26'); -INSERT INTO cp_tree VALUES ('4511', '4', '28', '233', '4502', '35'); -INSERT INTO cp_tree VALUES ('4512', '5', '29', '233', '4511', '30'); -INSERT INTO cp_tree VALUES ('4513', '5', '31', '233', '4511', '32'); -INSERT INTO cp_tree VALUES ('4514', '5', '33', '233', '4511', '34'); -INSERT INTO cp_tree VALUES ('4515', '3', '37', '233', '4497', '44'); -INSERT INTO cp_tree VALUES ('4516', '4', '38', '233', '4515', '39'); -INSERT INTO cp_tree VALUES ('4517', '4', '40', '233', '4515', '41'); -INSERT INTO cp_tree VALUES ('4518', '4', '42', '233', '4515', '43'); -INSERT INTO cp_tree VALUES ('4519', '2', '46', '233', '4496', '59'); -INSERT INTO cp_tree VALUES ('4520', '3', '47', '233', '4519', '48'); -INSERT INTO cp_tree VALUES ('4521', '3', '49', '233', '4519', '50'); -INSERT INTO cp_tree VALUES ('4522', '3', '51', '233', '4519', '52'); -INSERT INTO cp_tree VALUES ('4523', '3', '53', '233', '4519', '54'); -INSERT INTO cp_tree VALUES ('4524', '3', '55', '233', '4519', '56'); -INSERT INTO cp_tree VALUES ('4525', '3', '57', '233', '4519', '58'); -INSERT INTO cp_tree VALUES ('4526', '2', '60', '233', '4496', '63'); -INSERT INTO cp_tree VALUES ('4527', '3', '61', '233', '4526', '62'); -INSERT INTO cp_tree VALUES ('4528', '2', '64', '233', '4496', '67'); -INSERT INTO cp_tree VALUES ('4529', '3', '65', '233', '4528', '66'); -INSERT INTO cp_tree VALUES ('4530', '2', '68', '233', '4496', '71'); -INSERT INTO cp_tree VALUES ('4531', '3', '69', '233', '4530', '70'); -INSERT INTO cp_tree VALUES ('4532', '2', '72', '233', '4496', '77'); -INSERT INTO cp_tree VALUES ('4533', '3', '73', '233', '4532', '74'); -INSERT INTO cp_tree VALUES ('4534', '3', '75', '233', '4532', '76'); -INSERT INTO cp_tree VALUES ('4535', '2', '78', '233', '4496', '81'); -INSERT INTO cp_tree VALUES ('4536', '3', '79', '233', '4535', '80'); -INSERT INTO cp_tree VALUES ('4537', '2', '82', '233', '4496', '85'); -INSERT INTO cp_tree VALUES ('4538', '3', '83', '233', '4537', '84'); -INSERT INTO cp_tree VALUES ('4539', '2', '86', '233', '4496', '99'); -INSERT INTO cp_tree VALUES ('4540', '3', '87', '233', '4539', '90'); -INSERT INTO cp_tree VALUES ('4541', '4', '88', '233', '4540', '89'); -INSERT INTO cp_tree VALUES ('4542', '3', '91', '233', '4539', '94'); -INSERT INTO cp_tree VALUES ('4543', '4', '92', '233', '4542', '93'); -INSERT INTO cp_tree VALUES ('4544', '3', '95', '233', '4539', '98'); -INSERT INTO cp_tree VALUES ('4545', '4', '96', '233', '4544', '97'); -INSERT INTO cp_tree VALUES ('4546', '2', '100', '233', '4496', '101'); -INSERT INTO cp_tree VALUES ('4547', '1', '1', '234', '0', '110'); -INSERT INTO cp_tree VALUES ('4548', '2', '2', '234', '4547', '45'); -INSERT INTO cp_tree VALUES ('4549', '3', '3', '234', '4548', '10'); -INSERT INTO cp_tree VALUES ('4550', '4', '4', '234', '4549', '5'); -INSERT INTO cp_tree VALUES ('4551', '4', '6', '234', '4549', '7'); -INSERT INTO cp_tree VALUES ('4552', '4', '8', '234', '4549', '9'); -INSERT INTO cp_tree VALUES ('4553', '3', '11', '234', '4548', '36'); -INSERT INTO cp_tree VALUES ('4554', '4', '12', '234', '4553', '19'); -INSERT INTO cp_tree VALUES ('4555', '5', '13', '234', '4554', '14'); -INSERT INTO cp_tree VALUES ('4556', '5', '15', '234', '4554', '16'); -INSERT INTO cp_tree VALUES ('4557', '5', '17', '234', '4554', '18'); -INSERT INTO cp_tree VALUES ('4558', '4', '20', '234', '4553', '27'); -INSERT INTO cp_tree VALUES ('4559', '5', '21', '234', '4558', '22'); -INSERT INTO cp_tree VALUES ('4560', '5', '23', '234', '4558', '24'); -INSERT INTO cp_tree VALUES ('4561', '5', '25', '234', '4558', '26'); -INSERT INTO cp_tree VALUES ('4562', '4', '28', '234', '4553', '35'); -INSERT INTO cp_tree VALUES ('4563', '5', '29', '234', '4562', '30'); -INSERT INTO cp_tree VALUES ('4564', '5', '31', '234', '4562', '32'); -INSERT INTO cp_tree VALUES ('4565', '5', '33', '234', '4562', '34'); -INSERT INTO cp_tree VALUES ('4566', '3', '37', '234', '4548', '44'); -INSERT INTO cp_tree VALUES ('4567', '4', '38', '234', '4566', '39'); -INSERT INTO cp_tree VALUES ('4568', '4', '40', '234', '4566', '41'); -INSERT INTO cp_tree VALUES ('4569', '4', '42', '234', '4566', '43'); -INSERT INTO cp_tree VALUES ('4570', '2', '46', '234', '4547', '59'); -INSERT INTO cp_tree VALUES ('4571', '3', '47', '234', '4570', '48'); -INSERT INTO cp_tree VALUES ('4572', '3', '49', '234', '4570', '50'); -INSERT INTO cp_tree VALUES ('4573', '3', '51', '234', '4570', '52'); -INSERT INTO cp_tree VALUES ('4574', '3', '53', '234', '4570', '54'); -INSERT INTO cp_tree VALUES ('4575', '3', '55', '234', '4570', '56'); -INSERT INTO cp_tree VALUES ('4576', '3', '57', '234', '4570', '58'); -INSERT INTO cp_tree VALUES ('4577', '2', '60', '234', '4547', '63'); -INSERT INTO cp_tree VALUES ('4578', '3', '61', '234', '4577', '62'); -INSERT INTO cp_tree VALUES ('4579', '2', '64', '234', '4547', '67'); -INSERT INTO cp_tree VALUES ('4580', '3', '65', '234', '4579', '66'); -INSERT INTO cp_tree VALUES ('4581', '2', '68', '234', '4547', '71'); -INSERT INTO cp_tree VALUES ('4582', '3', '69', '234', '4581', '70'); -INSERT INTO cp_tree VALUES ('4583', '2', '72', '234', '4547', '77'); -INSERT INTO cp_tree VALUES ('4584', '3', '73', '234', '4583', '74'); -INSERT INTO cp_tree VALUES ('4585', '3', '75', '234', '4583', '76'); -INSERT INTO cp_tree VALUES ('4586', '2', '78', '234', '4547', '81'); -INSERT INTO cp_tree VALUES ('4587', '3', '79', '234', '4586', '80'); -INSERT INTO cp_tree VALUES ('4588', '2', '82', '234', '4547', '85'); -INSERT INTO cp_tree VALUES ('4589', '3', '83', '234', '4588', '84'); -INSERT INTO cp_tree VALUES ('4590', '2', '86', '234', '4547', '89'); -INSERT INTO cp_tree VALUES ('4591', '3', '87', '234', '4590', '88'); -INSERT INTO cp_tree VALUES ('4592', '2', '90', '234', '4547', '91'); -INSERT INTO cp_tree VALUES ('4593', '2', '92', '234', '4547', '93'); -INSERT INTO cp_tree VALUES ('4594', '2', '94', '234', '4547', '107'); -INSERT INTO cp_tree VALUES ('4595', '3', '95', '234', '4594', '98'); -INSERT INTO cp_tree VALUES ('4596', '4', '96', '234', '4595', '97'); -INSERT INTO cp_tree VALUES ('4597', '3', '99', '234', '4594', '102'); -INSERT INTO cp_tree VALUES ('4598', '4', '100', '234', '4597', '101'); -INSERT INTO cp_tree VALUES ('4599', '3', '103', '234', '4594', '106'); -INSERT INTO cp_tree VALUES ('4600', '4', '104', '234', '4599', '105'); -INSERT INTO cp_tree VALUES ('4601', '2', '108', '234', '4547', '109'); -INSERT INTO cp_tree VALUES ('4602', '1', '1', '235', '0', '90'); -INSERT INTO cp_tree VALUES ('4603', '2', '2', '235', '4602', '29'); -INSERT INTO cp_tree VALUES ('4604', '3', '3', '235', '4603', '10'); -INSERT INTO cp_tree VALUES ('4605', '4', '4', '235', '4604', '5'); -INSERT INTO cp_tree VALUES ('4606', '4', '6', '235', '4604', '7'); -INSERT INTO cp_tree VALUES ('4607', '4', '8', '235', '4604', '9'); -INSERT INTO cp_tree VALUES ('4608', '3', '11', '235', '4603', '20'); -INSERT INTO cp_tree VALUES ('4609', '4', '12', '235', '4608', '19'); -INSERT INTO cp_tree VALUES ('4610', '5', '13', '235', '4609', '14'); -INSERT INTO cp_tree VALUES ('4611', '5', '15', '235', '4609', '16'); -INSERT INTO cp_tree VALUES ('4612', '5', '17', '235', '4609', '18'); -INSERT INTO cp_tree VALUES ('4613', '3', '21', '235', '4603', '28'); -INSERT INTO cp_tree VALUES ('4614', '4', '22', '235', '4613', '23'); -INSERT INTO cp_tree VALUES ('4615', '4', '24', '235', '4613', '25'); -INSERT INTO cp_tree VALUES ('4616', '4', '26', '235', '4613', '27'); -INSERT INTO cp_tree VALUES ('4617', '2', '30', '235', '4602', '43'); -INSERT INTO cp_tree VALUES ('4618', '3', '31', '235', '4617', '32'); -INSERT INTO cp_tree VALUES ('4619', '3', '33', '235', '4617', '34'); -INSERT INTO cp_tree VALUES ('4620', '3', '35', '235', '4617', '36'); -INSERT INTO cp_tree VALUES ('4621', '3', '37', '235', '4617', '38'); -INSERT INTO cp_tree VALUES ('4622', '3', '39', '235', '4617', '40'); -INSERT INTO cp_tree VALUES ('4623', '3', '41', '235', '4617', '42'); -INSERT INTO cp_tree VALUES ('4624', '2', '44', '235', '4602', '47'); -INSERT INTO cp_tree VALUES ('4625', '3', '45', '235', '4624', '46'); -INSERT INTO cp_tree VALUES ('4626', '2', '48', '235', '4602', '51'); -INSERT INTO cp_tree VALUES ('4627', '3', '49', '235', '4626', '50'); -INSERT INTO cp_tree VALUES ('4628', '2', '52', '235', '4602', '55'); -INSERT INTO cp_tree VALUES ('4629', '3', '53', '235', '4628', '54'); -INSERT INTO cp_tree VALUES ('4630', '2', '56', '235', '4602', '61'); -INSERT INTO cp_tree VALUES ('4631', '3', '57', '235', '4630', '58'); -INSERT INTO cp_tree VALUES ('4632', '3', '59', '235', '4630', '60'); -INSERT INTO cp_tree VALUES ('4633', '2', '62', '235', '4602', '65'); -INSERT INTO cp_tree VALUES ('4634', '3', '63', '235', '4633', '64'); -INSERT INTO cp_tree VALUES ('4635', '2', '66', '235', '4602', '69'); -INSERT INTO cp_tree VALUES ('4636', '3', '67', '235', '4635', '68'); -INSERT INTO cp_tree VALUES ('4637', '2', '70', '235', '4602', '87'); -INSERT INTO cp_tree VALUES ('4638', '3', '71', '235', '4637', '74'); -INSERT INTO cp_tree VALUES ('4639', '4', '72', '235', '4638', '73'); -INSERT INTO cp_tree VALUES ('4640', '3', '75', '235', '4637', '78'); -INSERT INTO cp_tree VALUES ('4641', '4', '76', '235', '4640', '77'); -INSERT INTO cp_tree VALUES ('4642', '3', '79', '235', '4637', '82'); -INSERT INTO cp_tree VALUES ('4643', '4', '80', '235', '4642', '81'); -INSERT INTO cp_tree VALUES ('4644', '3', '83', '235', '4637', '86'); -INSERT INTO cp_tree VALUES ('4645', '4', '84', '235', '4644', '85'); -INSERT INTO cp_tree VALUES ('4646', '2', '88', '235', '4602', '89'); -INSERT INTO cp_tree VALUES ('4647', '1', '1', '236', '0', '90'); -INSERT INTO cp_tree VALUES ('4648', '2', '2', '236', '4647', '29'); -INSERT INTO cp_tree VALUES ('4649', '3', '3', '236', '4648', '10'); -INSERT INTO cp_tree VALUES ('4650', '4', '4', '236', '4649', '5'); -INSERT INTO cp_tree VALUES ('4651', '4', '6', '236', '4649', '7'); -INSERT INTO cp_tree VALUES ('4652', '4', '8', '236', '4649', '9'); -INSERT INTO cp_tree VALUES ('4653', '3', '11', '236', '4648', '20'); -INSERT INTO cp_tree VALUES ('4654', '4', '12', '236', '4653', '19'); -INSERT INTO cp_tree VALUES ('4655', '5', '13', '236', '4654', '14'); -INSERT INTO cp_tree VALUES ('4656', '5', '15', '236', '4654', '16'); -INSERT INTO cp_tree VALUES ('4657', '5', '17', '236', '4654', '18'); -INSERT INTO cp_tree VALUES ('4658', '3', '21', '236', '4648', '28'); -INSERT INTO cp_tree VALUES ('4659', '4', '22', '236', '4658', '23'); -INSERT INTO cp_tree VALUES ('4660', '4', '24', '236', '4658', '25'); -INSERT INTO cp_tree VALUES ('4661', '4', '26', '236', '4658', '27'); -INSERT INTO cp_tree VALUES ('4662', '2', '30', '236', '4647', '43'); -INSERT INTO cp_tree VALUES ('4663', '3', '31', '236', '4662', '32'); -INSERT INTO cp_tree VALUES ('4664', '3', '33', '236', '4662', '34'); -INSERT INTO cp_tree VALUES ('4665', '3', '35', '236', '4662', '36'); -INSERT INTO cp_tree VALUES ('4666', '3', '37', '236', '4662', '38'); -INSERT INTO cp_tree VALUES ('4667', '3', '39', '236', '4662', '40'); -INSERT INTO cp_tree VALUES ('4668', '3', '41', '236', '4662', '42'); -INSERT INTO cp_tree VALUES ('4669', '2', '44', '236', '4647', '47'); -INSERT INTO cp_tree VALUES ('4670', '3', '45', '236', '4669', '46'); -INSERT INTO cp_tree VALUES ('4671', '2', '48', '236', '4647', '51'); -INSERT INTO cp_tree VALUES ('4672', '3', '49', '236', '4671', '50'); -INSERT INTO cp_tree VALUES ('4673', '2', '52', '236', '4647', '55'); -INSERT INTO cp_tree VALUES ('4674', '3', '53', '236', '4673', '54'); -INSERT INTO cp_tree VALUES ('4675', '2', '56', '236', '4647', '61'); -INSERT INTO cp_tree VALUES ('4676', '3', '57', '236', '4675', '58'); -INSERT INTO cp_tree VALUES ('4677', '3', '59', '236', '4675', '60'); -INSERT INTO cp_tree VALUES ('4678', '2', '62', '236', '4647', '65'); -INSERT INTO cp_tree VALUES ('4679', '3', '63', '236', '4678', '64'); -INSERT INTO cp_tree VALUES ('4680', '2', '66', '236', '4647', '69'); -INSERT INTO cp_tree VALUES ('4681', '3', '67', '236', '4680', '68'); -INSERT INTO cp_tree VALUES ('4682', '2', '70', '236', '4647', '87'); -INSERT INTO cp_tree VALUES ('4683', '3', '71', '236', '4682', '74'); -INSERT INTO cp_tree VALUES ('4684', '4', '72', '236', '4683', '73'); -INSERT INTO cp_tree VALUES ('4685', '3', '75', '236', '4682', '78'); -INSERT INTO cp_tree VALUES ('4686', '4', '76', '236', '4685', '77'); -INSERT INTO cp_tree VALUES ('4687', '3', '79', '236', '4682', '82'); -INSERT INTO cp_tree VALUES ('4688', '4', '80', '236', '4687', '81'); -INSERT INTO cp_tree VALUES ('4689', '3', '83', '236', '4682', '86'); -INSERT INTO cp_tree VALUES ('4690', '4', '84', '236', '4689', '85'); -INSERT INTO cp_tree VALUES ('4691', '2', '88', '236', '4647', '89'); -INSERT INTO cp_tree VALUES ('4692', '1', '1', '237', '0', '72'); -INSERT INTO cp_tree VALUES ('4693', '2', '2', '237', '4692', '15'); -INSERT INTO cp_tree VALUES ('4694', '3', '3', '237', '4693', '4'); -INSERT INTO cp_tree VALUES ('4695', '3', '5', '237', '4693', '12'); -INSERT INTO cp_tree VALUES ('4696', '4', '6', '237', '4695', '7'); -INSERT INTO cp_tree VALUES ('4697', '4', '8', '237', '4695', '9'); -INSERT INTO cp_tree VALUES ('4698', '4', '10', '237', '4695', '11'); -INSERT INTO cp_tree VALUES ('4699', '3', '13', '237', '4693', '14'); -INSERT INTO cp_tree VALUES ('4700', '2', '16', '237', '4692', '29'); -INSERT INTO cp_tree VALUES ('4701', '3', '17', '237', '4700', '18'); -INSERT INTO cp_tree VALUES ('4702', '3', '19', '237', '4700', '20'); -INSERT INTO cp_tree VALUES ('4703', '3', '21', '237', '4700', '22'); -INSERT INTO cp_tree VALUES ('4704', '3', '23', '237', '4700', '24'); -INSERT INTO cp_tree VALUES ('4705', '3', '25', '237', '4700', '26'); -INSERT INTO cp_tree VALUES ('4706', '3', '27', '237', '4700', '28'); -INSERT INTO cp_tree VALUES ('4707', '2', '30', '237', '4692', '33'); -INSERT INTO cp_tree VALUES ('4708', '3', '31', '237', '4707', '32'); -INSERT INTO cp_tree VALUES ('4709', '2', '34', '237', '4692', '37'); -INSERT INTO cp_tree VALUES ('4710', '3', '35', '237', '4709', '36'); -INSERT INTO cp_tree VALUES ('4711', '2', '38', '237', '4692', '41'); -INSERT INTO cp_tree VALUES ('4712', '3', '39', '237', '4711', '40'); -INSERT INTO cp_tree VALUES ('4713', '2', '42', '237', '4692', '47'); -INSERT INTO cp_tree VALUES ('4714', '3', '43', '237', '4713', '44'); -INSERT INTO cp_tree VALUES ('4715', '3', '45', '237', '4713', '46'); -INSERT INTO cp_tree VALUES ('4716', '2', '48', '237', '4692', '51'); -INSERT INTO cp_tree VALUES ('4717', '3', '49', '237', '4716', '50'); -INSERT INTO cp_tree VALUES ('4718', '2', '52', '237', '4692', '55'); -INSERT INTO cp_tree VALUES ('4719', '3', '53', '237', '4718', '54'); -INSERT INTO cp_tree VALUES ('4720', '2', '56', '237', '4692', '69'); -INSERT INTO cp_tree VALUES ('4721', '3', '57', '237', '4720', '60'); -INSERT INTO cp_tree VALUES ('4722', '4', '58', '237', '4721', '59'); -INSERT INTO cp_tree VALUES ('4723', '3', '61', '237', '4720', '64'); -INSERT INTO cp_tree VALUES ('4724', '4', '62', '237', '4723', '63'); -INSERT INTO cp_tree VALUES ('4725', '3', '65', '237', '4720', '68'); -INSERT INTO cp_tree VALUES ('4726', '4', '66', '237', '4725', '67'); -INSERT INTO cp_tree VALUES ('4727', '2', '70', '237', '4692', '71'); -INSERT INTO cp_tree VALUES ('4728', '1', '1', '238', '0', '124'); -INSERT INTO cp_tree VALUES ('4729', '2', '2', '238', '4728', '45'); -INSERT INTO cp_tree VALUES ('4730', '3', '3', '238', '4729', '10'); -INSERT INTO cp_tree VALUES ('4731', '4', '4', '238', '4730', '5'); -INSERT INTO cp_tree VALUES ('4732', '4', '6', '238', '4730', '7'); -INSERT INTO cp_tree VALUES ('4733', '4', '8', '238', '4730', '9'); -INSERT INTO cp_tree VALUES ('4734', '3', '11', '238', '4729', '36'); -INSERT INTO cp_tree VALUES ('4735', '4', '12', '238', '4734', '19'); -INSERT INTO cp_tree VALUES ('4736', '5', '13', '238', '4735', '14'); -INSERT INTO cp_tree VALUES ('4737', '5', '15', '238', '4735', '16'); -INSERT INTO cp_tree VALUES ('4738', '5', '17', '238', '4735', '18'); -INSERT INTO cp_tree VALUES ('4739', '4', '20', '238', '4734', '27'); -INSERT INTO cp_tree VALUES ('4740', '5', '21', '238', '4739', '22'); -INSERT INTO cp_tree VALUES ('4741', '5', '23', '238', '4739', '24'); -INSERT INTO cp_tree VALUES ('4742', '5', '25', '238', '4739', '26'); -INSERT INTO cp_tree VALUES ('4743', '4', '28', '238', '4734', '35'); -INSERT INTO cp_tree VALUES ('4744', '5', '29', '238', '4743', '30'); -INSERT INTO cp_tree VALUES ('4745', '5', '31', '238', '4743', '32'); -INSERT INTO cp_tree VALUES ('4746', '5', '33', '238', '4743', '34'); -INSERT INTO cp_tree VALUES ('4747', '3', '37', '238', '4729', '44'); -INSERT INTO cp_tree VALUES ('4748', '4', '38', '238', '4747', '39'); -INSERT INTO cp_tree VALUES ('4749', '4', '40', '238', '4747', '41'); -INSERT INTO cp_tree VALUES ('4750', '4', '42', '238', '4747', '43'); -INSERT INTO cp_tree VALUES ('4751', '2', '46', '238', '4728', '59'); -INSERT INTO cp_tree VALUES ('4752', '3', '47', '238', '4751', '48'); -INSERT INTO cp_tree VALUES ('4753', '3', '49', '238', '4751', '50'); -INSERT INTO cp_tree VALUES ('4754', '3', '51', '238', '4751', '52'); -INSERT INTO cp_tree VALUES ('4755', '3', '53', '238', '4751', '54'); -INSERT INTO cp_tree VALUES ('4756', '3', '55', '238', '4751', '56'); -INSERT INTO cp_tree VALUES ('4757', '3', '57', '238', '4751', '58'); -INSERT INTO cp_tree VALUES ('4758', '2', '60', '238', '4728', '63'); -INSERT INTO cp_tree VALUES ('4759', '3', '61', '238', '4758', '62'); -INSERT INTO cp_tree VALUES ('4760', '2', '64', '238', '4728', '67'); -INSERT INTO cp_tree VALUES ('4761', '3', '65', '238', '4760', '66'); -INSERT INTO cp_tree VALUES ('4762', '2', '68', '238', '4728', '71'); -INSERT INTO cp_tree VALUES ('4763', '3', '69', '238', '4762', '70'); -INSERT INTO cp_tree VALUES ('4764', '2', '72', '238', '4728', '77'); -INSERT INTO cp_tree VALUES ('4765', '3', '73', '238', '4764', '74'); -INSERT INTO cp_tree VALUES ('4766', '3', '75', '238', '4764', '76'); -INSERT INTO cp_tree VALUES ('4767', '2', '78', '238', '4728', '81'); -INSERT INTO cp_tree VALUES ('4768', '3', '79', '238', '4767', '80'); -INSERT INTO cp_tree VALUES ('4769', '2', '82', '238', '4728', '85'); -INSERT INTO cp_tree VALUES ('4770', '3', '83', '238', '4769', '84'); -INSERT INTO cp_tree VALUES ('4771', '2', '86', '238', '4728', '101'); -INSERT INTO cp_tree VALUES ('4772', '3', '87', '238', '4771', '88'); -INSERT INTO cp_tree VALUES ('4773', '3', '89', '238', '4771', '92'); -INSERT INTO cp_tree VALUES ('4774', '4', '90', '238', '4773', '91'); -INSERT INTO cp_tree VALUES ('4775', '3', '93', '238', '4771', '96'); -INSERT INTO cp_tree VALUES ('4776', '4', '94', '238', '4775', '95'); -INSERT INTO cp_tree VALUES ('4777', '3', '97', '238', '4771', '100'); -INSERT INTO cp_tree VALUES ('4778', '4', '98', '238', '4777', '99'); -INSERT INTO cp_tree VALUES ('4779', '2', '102', '238', '4728', '107'); -INSERT INTO cp_tree VALUES ('4780', '3', '103', '238', '4779', '106'); -INSERT INTO cp_tree VALUES ('4781', '4', '104', '238', '4780', '105'); -INSERT INTO cp_tree VALUES ('4782', '2', '108', '238', '4728', '121'); -INSERT INTO cp_tree VALUES ('4783', '3', '109', '238', '4782', '112'); -INSERT INTO cp_tree VALUES ('4784', '4', '110', '238', '4783', '111'); -INSERT INTO cp_tree VALUES ('4785', '3', '113', '238', '4782', '116'); -INSERT INTO cp_tree VALUES ('4786', '4', '114', '238', '4785', '115'); -INSERT INTO cp_tree VALUES ('4787', '3', '117', '238', '4782', '120'); -INSERT INTO cp_tree VALUES ('4788', '4', '118', '238', '4787', '119'); -INSERT INTO cp_tree VALUES ('4789', '2', '122', '238', '4728', '123'); -INSERT INTO cp_tree VALUES ('4790', '1', '1', '239', '0', '80'); -INSERT INTO cp_tree VALUES ('4791', '2', '2', '239', '4790', '27'); -INSERT INTO cp_tree VALUES ('4792', '3', '3', '239', '4791', '10'); -INSERT INTO cp_tree VALUES ('4793', '4', '4', '239', '4792', '5'); -INSERT INTO cp_tree VALUES ('4794', '4', '6', '239', '4792', '7'); -INSERT INTO cp_tree VALUES ('4795', '4', '8', '239', '4792', '9'); -INSERT INTO cp_tree VALUES ('4796', '3', '11', '239', '4791', '18'); -INSERT INTO cp_tree VALUES ('4797', '4', '12', '239', '4796', '13'); -INSERT INTO cp_tree VALUES ('4798', '4', '14', '239', '4796', '15'); -INSERT INTO cp_tree VALUES ('4799', '4', '16', '239', '4796', '17'); -INSERT INTO cp_tree VALUES ('4800', '3', '19', '239', '4791', '26'); -INSERT INTO cp_tree VALUES ('4801', '4', '20', '239', '4800', '21'); -INSERT INTO cp_tree VALUES ('4802', '4', '22', '239', '4800', '23'); -INSERT INTO cp_tree VALUES ('4803', '4', '24', '239', '4800', '25'); -INSERT INTO cp_tree VALUES ('4804', '2', '28', '239', '4790', '41'); -INSERT INTO cp_tree VALUES ('4805', '3', '29', '239', '4804', '30'); -INSERT INTO cp_tree VALUES ('4806', '3', '31', '239', '4804', '32'); -INSERT INTO cp_tree VALUES ('4807', '3', '33', '239', '4804', '34'); -INSERT INTO cp_tree VALUES ('4808', '3', '35', '239', '4804', '36'); -INSERT INTO cp_tree VALUES ('4809', '3', '37', '239', '4804', '38'); -INSERT INTO cp_tree VALUES ('4810', '3', '39', '239', '4804', '40'); -INSERT INTO cp_tree VALUES ('4811', '2', '42', '239', '4790', '45'); -INSERT INTO cp_tree VALUES ('4812', '3', '43', '239', '4811', '44'); -INSERT INTO cp_tree VALUES ('4813', '2', '46', '239', '4790', '49'); -INSERT INTO cp_tree VALUES ('4814', '3', '47', '239', '4813', '48'); -INSERT INTO cp_tree VALUES ('4815', '2', '50', '239', '4790', '53'); -INSERT INTO cp_tree VALUES ('4816', '3', '51', '239', '4815', '52'); -INSERT INTO cp_tree VALUES ('4817', '2', '54', '239', '4790', '59'); -INSERT INTO cp_tree VALUES ('4818', '3', '55', '239', '4817', '56'); -INSERT INTO cp_tree VALUES ('4819', '3', '57', '239', '4817', '58'); -INSERT INTO cp_tree VALUES ('4820', '2', '60', '239', '4790', '63'); -INSERT INTO cp_tree VALUES ('4821', '3', '61', '239', '4820', '62'); -INSERT INTO cp_tree VALUES ('4822', '2', '64', '239', '4790', '67'); -INSERT INTO cp_tree VALUES ('4823', '3', '65', '239', '4822', '66'); -INSERT INTO cp_tree VALUES ('4824', '2', '68', '239', '4790', '77'); -INSERT INTO cp_tree VALUES ('4825', '3', '69', '239', '4824', '72'); -INSERT INTO cp_tree VALUES ('4826', '4', '70', '239', '4825', '71'); -INSERT INTO cp_tree VALUES ('4827', '3', '73', '239', '4824', '76'); -INSERT INTO cp_tree VALUES ('4828', '4', '74', '239', '4827', '75'); -INSERT INTO cp_tree VALUES ('4829', '2', '78', '239', '4790', '79'); -INSERT INTO cp_tree VALUES ('4830', '1', '1', '240', '0', '78'); -INSERT INTO cp_tree VALUES ('4831', '2', '2', '240', '4830', '27'); -INSERT INTO cp_tree VALUES ('4832', '3', '3', '240', '4831', '10'); -INSERT INTO cp_tree VALUES ('4833', '4', '4', '240', '4832', '5'); -INSERT INTO cp_tree VALUES ('4834', '4', '6', '240', '4832', '7'); -INSERT INTO cp_tree VALUES ('4835', '4', '8', '240', '4832', '9'); -INSERT INTO cp_tree VALUES ('4836', '3', '11', '240', '4831', '18'); -INSERT INTO cp_tree VALUES ('4837', '4', '12', '240', '4836', '13'); -INSERT INTO cp_tree VALUES ('4838', '4', '14', '240', '4836', '15'); -INSERT INTO cp_tree VALUES ('4839', '4', '16', '240', '4836', '17'); -INSERT INTO cp_tree VALUES ('4840', '3', '19', '240', '4831', '26'); -INSERT INTO cp_tree VALUES ('4841', '4', '20', '240', '4840', '21'); -INSERT INTO cp_tree VALUES ('4842', '4', '22', '240', '4840', '23'); -INSERT INTO cp_tree VALUES ('4843', '4', '24', '240', '4840', '25'); -INSERT INTO cp_tree VALUES ('4844', '2', '28', '240', '4830', '41'); -INSERT INTO cp_tree VALUES ('4845', '3', '29', '240', '4844', '30'); -INSERT INTO cp_tree VALUES ('4846', '3', '31', '240', '4844', '32'); -INSERT INTO cp_tree VALUES ('4847', '3', '33', '240', '4844', '34'); -INSERT INTO cp_tree VALUES ('4848', '3', '35', '240', '4844', '36'); -INSERT INTO cp_tree VALUES ('4849', '3', '37', '240', '4844', '38'); -INSERT INTO cp_tree VALUES ('4850', '3', '39', '240', '4844', '40'); -INSERT INTO cp_tree VALUES ('4851', '2', '42', '240', '4830', '45'); -INSERT INTO cp_tree VALUES ('4852', '3', '43', '240', '4851', '44'); -INSERT INTO cp_tree VALUES ('4853', '2', '46', '240', '4830', '49'); -INSERT INTO cp_tree VALUES ('4854', '3', '47', '240', '4853', '48'); -INSERT INTO cp_tree VALUES ('4855', '2', '50', '240', '4830', '53'); -INSERT INTO cp_tree VALUES ('4856', '3', '51', '240', '4855', '52'); -INSERT INTO cp_tree VALUES ('4857', '2', '54', '240', '4830', '59'); -INSERT INTO cp_tree VALUES ('4858', '3', '55', '240', '4857', '56'); -INSERT INTO cp_tree VALUES ('4859', '3', '57', '240', '4857', '58'); -INSERT INTO cp_tree VALUES ('4860', '2', '60', '240', '4830', '63'); -INSERT INTO cp_tree VALUES ('4861', '3', '61', '240', '4860', '62'); -INSERT INTO cp_tree VALUES ('4862', '2', '64', '240', '4830', '67'); -INSERT INTO cp_tree VALUES ('4863', '3', '65', '240', '4862', '66'); -INSERT INTO cp_tree VALUES ('4864', '2', '68', '240', '4830', '75'); -INSERT INTO cp_tree VALUES ('4865', '3', '69', '240', '4864', '74'); -INSERT INTO cp_tree VALUES ('4866', '4', '70', '240', '4865', '71'); -INSERT INTO cp_tree VALUES ('4867', '4', '72', '240', '4865', '73'); -INSERT INTO cp_tree VALUES ('4868', '2', '76', '240', '4830', '77'); -INSERT INTO cp_tree VALUES ('4869', '1', '1', '241', '0', '240'); -INSERT INTO cp_tree VALUES ('4870', '2', '2', '241', '4869', '65'); -INSERT INTO cp_tree VALUES ('4871', '3', '3', '241', '4870', '10'); -INSERT INTO cp_tree VALUES ('4872', '4', '4', '241', '4871', '5'); -INSERT INTO cp_tree VALUES ('4873', '4', '6', '241', '4871', '7'); -INSERT INTO cp_tree VALUES ('4874', '4', '8', '241', '4871', '9'); -INSERT INTO cp_tree VALUES ('4875', '3', '11', '241', '4870', '18'); -INSERT INTO cp_tree VALUES ('4876', '4', '12', '241', '4875', '13'); -INSERT INTO cp_tree VALUES ('4877', '4', '14', '241', '4875', '15'); -INSERT INTO cp_tree VALUES ('4878', '4', '16', '241', '4875', '17'); -INSERT INTO cp_tree VALUES ('4879', '3', '19', '241', '4870', '64'); -INSERT INTO cp_tree VALUES ('4880', '4', '20', '241', '4879', '37'); -INSERT INTO cp_tree VALUES ('4881', '5', '21', '241', '4880', '28'); -INSERT INTO cp_tree VALUES ('4882', '6', '22', '241', '4881', '23'); -INSERT INTO cp_tree VALUES ('4883', '6', '24', '241', '4881', '25'); -INSERT INTO cp_tree VALUES ('4884', '6', '26', '241', '4881', '27'); -INSERT INTO cp_tree VALUES ('4885', '5', '29', '241', '4880', '36'); -INSERT INTO cp_tree VALUES ('4886', '6', '30', '241', '4885', '31'); -INSERT INTO cp_tree VALUES ('4887', '6', '32', '241', '4885', '33'); -INSERT INTO cp_tree VALUES ('4888', '6', '34', '241', '4885', '35'); -INSERT INTO cp_tree VALUES ('4889', '4', '38', '241', '4879', '55'); -INSERT INTO cp_tree VALUES ('4890', '5', '39', '241', '4889', '46'); -INSERT INTO cp_tree VALUES ('4891', '6', '40', '241', '4890', '41'); -INSERT INTO cp_tree VALUES ('4892', '6', '42', '241', '4890', '43'); -INSERT INTO cp_tree VALUES ('4893', '6', '44', '241', '4890', '45'); -INSERT INTO cp_tree VALUES ('4894', '5', '47', '241', '4889', '54'); -INSERT INTO cp_tree VALUES ('4895', '6', '48', '241', '4894', '49'); -INSERT INTO cp_tree VALUES ('4896', '6', '50', '241', '4894', '51'); -INSERT INTO cp_tree VALUES ('4897', '6', '52', '241', '4894', '53'); -INSERT INTO cp_tree VALUES ('4898', '4', '56', '241', '4879', '63'); -INSERT INTO cp_tree VALUES ('4899', '5', '57', '241', '4898', '58'); -INSERT INTO cp_tree VALUES ('4900', '5', '59', '241', '4898', '60'); -INSERT INTO cp_tree VALUES ('4901', '5', '61', '241', '4898', '62'); -INSERT INTO cp_tree VALUES ('4902', '2', '66', '241', '4869', '79'); -INSERT INTO cp_tree VALUES ('4903', '3', '67', '241', '4902', '68'); -INSERT INTO cp_tree VALUES ('4904', '3', '69', '241', '4902', '70'); -INSERT INTO cp_tree VALUES ('4905', '3', '71', '241', '4902', '72'); -INSERT INTO cp_tree VALUES ('4906', '3', '73', '241', '4902', '74'); -INSERT INTO cp_tree VALUES ('4907', '3', '75', '241', '4902', '76'); -INSERT INTO cp_tree VALUES ('4908', '3', '77', '241', '4902', '78'); -INSERT INTO cp_tree VALUES ('4909', '2', '80', '241', '4869', '83'); -INSERT INTO cp_tree VALUES ('4910', '3', '81', '241', '4909', '82'); -INSERT INTO cp_tree VALUES ('4911', '2', '84', '241', '4869', '87'); -INSERT INTO cp_tree VALUES ('4912', '3', '85', '241', '4911', '86'); -INSERT INTO cp_tree VALUES ('4913', '2', '88', '241', '4869', '91'); -INSERT INTO cp_tree VALUES ('4914', '3', '89', '241', '4913', '90'); -INSERT INTO cp_tree VALUES ('4915', '2', '92', '241', '4869', '97'); -INSERT INTO cp_tree VALUES ('4916', '3', '93', '241', '4915', '94'); -INSERT INTO cp_tree VALUES ('4917', '3', '95', '241', '4915', '96'); -INSERT INTO cp_tree VALUES ('4918', '2', '98', '241', '4869', '101'); -INSERT INTO cp_tree VALUES ('4919', '3', '99', '241', '4918', '100'); -INSERT INTO cp_tree VALUES ('4920', '2', '102', '241', '4869', '105'); -INSERT INTO cp_tree VALUES ('4921', '3', '103', '241', '4920', '104'); -INSERT INTO cp_tree VALUES ('4922', '2', '106', '241', '4869', '115'); -INSERT INTO cp_tree VALUES ('4923', '3', '107', '241', '4922', '110'); -INSERT INTO cp_tree VALUES ('4924', '4', '108', '241', '4923', '109'); -INSERT INTO cp_tree VALUES ('4925', '3', '111', '241', '4922', '114'); -INSERT INTO cp_tree VALUES ('4926', '4', '112', '241', '4925', '113'); -INSERT INTO cp_tree VALUES ('4927', '2', '116', '241', '4869', '125'); -INSERT INTO cp_tree VALUES ('4928', '3', '117', '241', '4927', '120'); -INSERT INTO cp_tree VALUES ('4929', '4', '118', '241', '4928', '119'); -INSERT INTO cp_tree VALUES ('4930', '3', '121', '241', '4927', '124'); -INSERT INTO cp_tree VALUES ('4931', '4', '122', '241', '4930', '123'); -INSERT INTO cp_tree VALUES ('4932', '2', '126', '241', '4869', '137'); -INSERT INTO cp_tree VALUES ('4933', '3', '127', '241', '4932', '130'); -INSERT INTO cp_tree VALUES ('4934', '4', '128', '241', '4933', '129'); -INSERT INTO cp_tree VALUES ('4935', '3', '131', '241', '4932', '132'); -INSERT INTO cp_tree VALUES ('4936', '3', '133', '241', '4932', '136'); -INSERT INTO cp_tree VALUES ('4937', '4', '134', '241', '4936', '135'); -INSERT INTO cp_tree VALUES ('4938', '2', '138', '241', '4869', '159'); -INSERT INTO cp_tree VALUES ('4939', '3', '139', '241', '4938', '142'); -INSERT INTO cp_tree VALUES ('4940', '4', '140', '241', '4939', '141'); -INSERT INTO cp_tree VALUES ('4941', '3', '143', '241', '4938', '148'); -INSERT INTO cp_tree VALUES ('4942', '4', '144', '241', '4941', '145'); -INSERT INTO cp_tree VALUES ('4943', '4', '146', '241', '4941', '147'); -INSERT INTO cp_tree VALUES ('4944', '3', '149', '241', '4938', '150'); -INSERT INTO cp_tree VALUES ('4945', '3', '151', '241', '4938', '154'); -INSERT INTO cp_tree VALUES ('4946', '4', '152', '241', '4945', '153'); -INSERT INTO cp_tree VALUES ('4947', '3', '155', '241', '4938', '158'); -INSERT INTO cp_tree VALUES ('4948', '4', '156', '241', '4947', '157'); -INSERT INTO cp_tree VALUES ('4949', '2', '160', '241', '4869', '161'); -INSERT INTO cp_tree VALUES ('4950', '2', '162', '241', '4869', '173'); -INSERT INTO cp_tree VALUES ('4951', '3', '163', '241', '4950', '166'); -INSERT INTO cp_tree VALUES ('4952', '4', '164', '241', '4951', '165'); -INSERT INTO cp_tree VALUES ('4953', '3', '167', '241', '4950', '168'); -INSERT INTO cp_tree VALUES ('4954', '3', '169', '241', '4950', '172'); -INSERT INTO cp_tree VALUES ('4955', '4', '170', '241', '4954', '171'); -INSERT INTO cp_tree VALUES ('4956', '2', '174', '241', '4869', '195'); -INSERT INTO cp_tree VALUES ('4957', '3', '175', '241', '4956', '178'); -INSERT INTO cp_tree VALUES ('4958', '4', '176', '241', '4957', '177'); -INSERT INTO cp_tree VALUES ('4959', '3', '179', '241', '4956', '184'); -INSERT INTO cp_tree VALUES ('4960', '4', '180', '241', '4959', '181'); -INSERT INTO cp_tree VALUES ('4961', '4', '182', '241', '4959', '183'); -INSERT INTO cp_tree VALUES ('4962', '3', '185', '241', '4956', '186'); -INSERT INTO cp_tree VALUES ('4963', '3', '187', '241', '4956', '190'); -INSERT INTO cp_tree VALUES ('4964', '4', '188', '241', '4963', '189'); -INSERT INTO cp_tree VALUES ('4965', '3', '191', '241', '4956', '194'); -INSERT INTO cp_tree VALUES ('4966', '4', '192', '241', '4965', '193'); -INSERT INTO cp_tree VALUES ('4967', '2', '196', '241', '4869', '197'); -INSERT INTO cp_tree VALUES ('4968', '2', '198', '241', '4869', '225'); -INSERT INTO cp_tree VALUES ('4969', '3', '199', '241', '4968', '202'); -INSERT INTO cp_tree VALUES ('4970', '4', '200', '241', '4969', '201'); -INSERT INTO cp_tree VALUES ('4971', '3', '203', '241', '4968', '204'); -INSERT INTO cp_tree VALUES ('4972', '3', '205', '241', '4968', '208'); -INSERT INTO cp_tree VALUES ('4973', '4', '206', '241', '4972', '207'); -INSERT INTO cp_tree VALUES ('4974', '3', '209', '241', '4968', '212'); -INSERT INTO cp_tree VALUES ('4975', '4', '210', '241', '4974', '211'); -INSERT INTO cp_tree VALUES ('4976', '3', '213', '241', '4968', '216'); -INSERT INTO cp_tree VALUES ('4977', '4', '214', '241', '4976', '215'); -INSERT INTO cp_tree VALUES ('4978', '3', '217', '241', '4968', '220'); -INSERT INTO cp_tree VALUES ('4979', '4', '218', '241', '4978', '219'); -INSERT INTO cp_tree VALUES ('4980', '3', '221', '241', '4968', '224'); -INSERT INTO cp_tree VALUES ('4981', '4', '222', '241', '4980', '223'); -INSERT INTO cp_tree VALUES ('4982', '2', '226', '241', '4869', '237'); -INSERT INTO cp_tree VALUES ('4983', '3', '227', '241', '4982', '230'); -INSERT INTO cp_tree VALUES ('4984', '4', '228', '241', '4983', '229'); -INSERT INTO cp_tree VALUES ('4985', '3', '231', '241', '4982', '232'); -INSERT INTO cp_tree VALUES ('4986', '3', '233', '241', '4982', '236'); -INSERT INTO cp_tree VALUES ('4987', '4', '234', '241', '4986', '235'); -INSERT INTO cp_tree VALUES ('4988', '2', '238', '241', '4869', '239'); -INSERT INTO cp_tree VALUES ('4989', '1', '1', '242', '0', '80'); -INSERT INTO cp_tree VALUES ('4990', '2', '2', '242', '4989', '27'); -INSERT INTO cp_tree VALUES ('4991', '3', '3', '242', '4990', '10'); -INSERT INTO cp_tree VALUES ('4992', '4', '4', '242', '4991', '5'); -INSERT INTO cp_tree VALUES ('4993', '4', '6', '242', '4991', '7'); -INSERT INTO cp_tree VALUES ('4994', '4', '8', '242', '4991', '9'); -INSERT INTO cp_tree VALUES ('4995', '3', '11', '242', '4990', '18'); -INSERT INTO cp_tree VALUES ('4996', '4', '12', '242', '4995', '13'); -INSERT INTO cp_tree VALUES ('4997', '4', '14', '242', '4995', '15'); -INSERT INTO cp_tree VALUES ('4998', '4', '16', '242', '4995', '17'); -INSERT INTO cp_tree VALUES ('4999', '3', '19', '242', '4990', '26'); -INSERT INTO cp_tree VALUES ('5000', '4', '20', '242', '4999', '21'); -INSERT INTO cp_tree VALUES ('5001', '4', '22', '242', '4999', '23'); -INSERT INTO cp_tree VALUES ('5002', '4', '24', '242', '4999', '25'); -INSERT INTO cp_tree VALUES ('5003', '2', '28', '242', '4989', '41'); -INSERT INTO cp_tree VALUES ('5004', '3', '29', '242', '5003', '30'); -INSERT INTO cp_tree VALUES ('5005', '3', '31', '242', '5003', '32'); -INSERT INTO cp_tree VALUES ('5006', '3', '33', '242', '5003', '34'); -INSERT INTO cp_tree VALUES ('5007', '3', '35', '242', '5003', '36'); -INSERT INTO cp_tree VALUES ('5008', '3', '37', '242', '5003', '38'); -INSERT INTO cp_tree VALUES ('5009', '3', '39', '242', '5003', '40'); -INSERT INTO cp_tree VALUES ('5010', '2', '42', '242', '4989', '45'); -INSERT INTO cp_tree VALUES ('5011', '3', '43', '242', '5010', '44'); -INSERT INTO cp_tree VALUES ('5012', '2', '46', '242', '4989', '49'); -INSERT INTO cp_tree VALUES ('5013', '3', '47', '242', '5012', '48'); -INSERT INTO cp_tree VALUES ('5014', '2', '50', '242', '4989', '53'); -INSERT INTO cp_tree VALUES ('5015', '3', '51', '242', '5014', '52'); -INSERT INTO cp_tree VALUES ('5016', '2', '54', '242', '4989', '59'); -INSERT INTO cp_tree VALUES ('5017', '3', '55', '242', '5016', '56'); -INSERT INTO cp_tree VALUES ('5018', '3', '57', '242', '5016', '58'); -INSERT INTO cp_tree VALUES ('5019', '2', '60', '242', '4989', '63'); -INSERT INTO cp_tree VALUES ('5020', '3', '61', '242', '5019', '62'); -INSERT INTO cp_tree VALUES ('5021', '2', '64', '242', '4989', '67'); -INSERT INTO cp_tree VALUES ('5022', '3', '65', '242', '5021', '66'); -INSERT INTO cp_tree VALUES ('5023', '2', '68', '242', '4989', '77'); -INSERT INTO cp_tree VALUES ('5024', '3', '69', '242', '5023', '72'); -INSERT INTO cp_tree VALUES ('5025', '4', '70', '242', '5024', '71'); -INSERT INTO cp_tree VALUES ('5026', '3', '73', '242', '5023', '76'); -INSERT INTO cp_tree VALUES ('5027', '4', '74', '242', '5026', '75'); -INSERT INTO cp_tree VALUES ('5028', '2', '78', '242', '4989', '79'); -INSERT INTO cp_tree VALUES ('5029', '1', '1', '243', '0', '88'); -INSERT INTO cp_tree VALUES ('5030', '2', '2', '243', '5029', '37'); -INSERT INTO cp_tree VALUES ('5031', '3', '3', '243', '5030', '28'); -INSERT INTO cp_tree VALUES ('5032', '4', '4', '243', '5031', '11'); -INSERT INTO cp_tree VALUES ('5033', '5', '5', '243', '5032', '6'); -INSERT INTO cp_tree VALUES ('5034', '5', '7', '243', '5032', '8'); -INSERT INTO cp_tree VALUES ('5035', '5', '9', '243', '5032', '10'); -INSERT INTO cp_tree VALUES ('5036', '4', '12', '243', '5031', '19'); -INSERT INTO cp_tree VALUES ('5037', '5', '13', '243', '5036', '14'); -INSERT INTO cp_tree VALUES ('5038', '5', '15', '243', '5036', '16'); -INSERT INTO cp_tree VALUES ('5039', '5', '17', '243', '5036', '18'); -INSERT INTO cp_tree VALUES ('5040', '4', '20', '243', '5031', '27'); -INSERT INTO cp_tree VALUES ('5041', '5', '21', '243', '5040', '22'); -INSERT INTO cp_tree VALUES ('5042', '5', '23', '243', '5040', '24'); -INSERT INTO cp_tree VALUES ('5043', '5', '25', '243', '5040', '26'); -INSERT INTO cp_tree VALUES ('5044', '3', '29', '243', '5030', '36'); -INSERT INTO cp_tree VALUES ('5045', '4', '30', '243', '5044', '31'); -INSERT INTO cp_tree VALUES ('5046', '4', '32', '243', '5044', '33'); -INSERT INTO cp_tree VALUES ('5047', '4', '34', '243', '5044', '35'); -INSERT INTO cp_tree VALUES ('5048', '2', '38', '243', '5029', '51'); -INSERT INTO cp_tree VALUES ('5049', '3', '39', '243', '5048', '40'); -INSERT INTO cp_tree VALUES ('5050', '3', '41', '243', '5048', '42'); -INSERT INTO cp_tree VALUES ('5051', '3', '43', '243', '5048', '44'); -INSERT INTO cp_tree VALUES ('5052', '3', '45', '243', '5048', '46'); -INSERT INTO cp_tree VALUES ('5053', '3', '47', '243', '5048', '48'); -INSERT INTO cp_tree VALUES ('5054', '3', '49', '243', '5048', '50'); -INSERT INTO cp_tree VALUES ('5055', '2', '52', '243', '5029', '55'); -INSERT INTO cp_tree VALUES ('5056', '3', '53', '243', '5055', '54'); -INSERT INTO cp_tree VALUES ('5057', '2', '56', '243', '5029', '59'); -INSERT INTO cp_tree VALUES ('5058', '3', '57', '243', '5057', '58'); -INSERT INTO cp_tree VALUES ('5059', '2', '60', '243', '5029', '63'); -INSERT INTO cp_tree VALUES ('5060', '3', '61', '243', '5059', '62'); -INSERT INTO cp_tree VALUES ('5061', '2', '64', '243', '5029', '69'); -INSERT INTO cp_tree VALUES ('5062', '3', '65', '243', '5061', '66'); -INSERT INTO cp_tree VALUES ('5063', '3', '67', '243', '5061', '68'); -INSERT INTO cp_tree VALUES ('5064', '2', '70', '243', '5029', '73'); -INSERT INTO cp_tree VALUES ('5065', '3', '71', '243', '5064', '72'); -INSERT INTO cp_tree VALUES ('5066', '2', '74', '243', '5029', '77'); -INSERT INTO cp_tree VALUES ('5067', '3', '75', '243', '5066', '76'); -INSERT INTO cp_tree VALUES ('5068', '2', '78', '243', '5029', '83'); -INSERT INTO cp_tree VALUES ('5069', '3', '79', '243', '5068', '82'); -INSERT INTO cp_tree VALUES ('5070', '4', '80', '243', '5069', '81'); -INSERT INTO cp_tree VALUES ('5071', '2', '84', '243', '5029', '85'); -INSERT INTO cp_tree VALUES ('5072', '2', '86', '243', '5029', '87'); -INSERT INTO cp_tree VALUES ('5073', '1', '1', '244', '0', '80'); -INSERT INTO cp_tree VALUES ('5074', '2', '2', '244', '5073', '29'); -INSERT INTO cp_tree VALUES ('5075', '3', '3', '244', '5074', '20'); -INSERT INTO cp_tree VALUES ('5076', '4', '4', '244', '5075', '11'); -INSERT INTO cp_tree VALUES ('5077', '5', '5', '244', '5076', '6'); -INSERT INTO cp_tree VALUES ('5078', '5', '7', '244', '5076', '8'); -INSERT INTO cp_tree VALUES ('5079', '5', '9', '244', '5076', '10'); -INSERT INTO cp_tree VALUES ('5080', '4', '12', '244', '5075', '19'); -INSERT INTO cp_tree VALUES ('5081', '5', '13', '244', '5080', '14'); -INSERT INTO cp_tree VALUES ('5082', '5', '15', '244', '5080', '16'); -INSERT INTO cp_tree VALUES ('5083', '5', '17', '244', '5080', '18'); -INSERT INTO cp_tree VALUES ('5084', '3', '21', '244', '5074', '28'); -INSERT INTO cp_tree VALUES ('5085', '4', '22', '244', '5084', '23'); -INSERT INTO cp_tree VALUES ('5086', '4', '24', '244', '5084', '25'); -INSERT INTO cp_tree VALUES ('5087', '4', '26', '244', '5084', '27'); -INSERT INTO cp_tree VALUES ('5088', '2', '30', '244', '5073', '43'); -INSERT INTO cp_tree VALUES ('5089', '3', '31', '244', '5088', '32'); -INSERT INTO cp_tree VALUES ('5090', '3', '33', '244', '5088', '34'); -INSERT INTO cp_tree VALUES ('5091', '3', '35', '244', '5088', '36'); -INSERT INTO cp_tree VALUES ('5092', '3', '37', '244', '5088', '38'); -INSERT INTO cp_tree VALUES ('5093', '3', '39', '244', '5088', '40'); -INSERT INTO cp_tree VALUES ('5094', '3', '41', '244', '5088', '42'); -INSERT INTO cp_tree VALUES ('5095', '2', '44', '244', '5073', '47'); -INSERT INTO cp_tree VALUES ('5096', '3', '45', '244', '5095', '46'); -INSERT INTO cp_tree VALUES ('5097', '2', '48', '244', '5073', '51'); -INSERT INTO cp_tree VALUES ('5098', '3', '49', '244', '5097', '50'); -INSERT INTO cp_tree VALUES ('5099', '2', '52', '244', '5073', '55'); -INSERT INTO cp_tree VALUES ('5100', '3', '53', '244', '5099', '54'); -INSERT INTO cp_tree VALUES ('5101', '2', '56', '244', '5073', '61'); -INSERT INTO cp_tree VALUES ('5102', '3', '57', '244', '5101', '58'); -INSERT INTO cp_tree VALUES ('5103', '3', '59', '244', '5101', '60'); -INSERT INTO cp_tree VALUES ('5104', '2', '62', '244', '5073', '65'); -INSERT INTO cp_tree VALUES ('5105', '3', '63', '244', '5104', '64'); -INSERT INTO cp_tree VALUES ('5106', '2', '66', '244', '5073', '69'); -INSERT INTO cp_tree VALUES ('5107', '3', '67', '244', '5106', '68'); -INSERT INTO cp_tree VALUES ('5108', '2', '70', '244', '5073', '75'); -INSERT INTO cp_tree VALUES ('5109', '3', '71', '244', '5108', '74'); -INSERT INTO cp_tree VALUES ('5110', '4', '72', '244', '5109', '73'); -INSERT INTO cp_tree VALUES ('5111', '2', '76', '244', '5073', '77'); -INSERT INTO cp_tree VALUES ('5112', '2', '78', '244', '5073', '79'); -INSERT INTO cp_tree VALUES ('5113', '1', '1', '245', '0', '88'); -INSERT INTO cp_tree VALUES ('5114', '2', '2', '245', '5113', '29'); -INSERT INTO cp_tree VALUES ('5115', '3', '3', '245', '5114', '20'); -INSERT INTO cp_tree VALUES ('5116', '4', '4', '245', '5115', '11'); -INSERT INTO cp_tree VALUES ('5117', '5', '5', '245', '5116', '6'); -INSERT INTO cp_tree VALUES ('5118', '5', '7', '245', '5116', '8'); -INSERT INTO cp_tree VALUES ('5119', '5', '9', '245', '5116', '10'); -INSERT INTO cp_tree VALUES ('5120', '4', '12', '245', '5115', '19'); -INSERT INTO cp_tree VALUES ('5121', '5', '13', '245', '5120', '14'); -INSERT INTO cp_tree VALUES ('5122', '5', '15', '245', '5120', '16'); -INSERT INTO cp_tree VALUES ('5123', '5', '17', '245', '5120', '18'); -INSERT INTO cp_tree VALUES ('5124', '3', '21', '245', '5114', '28'); -INSERT INTO cp_tree VALUES ('5125', '4', '22', '245', '5124', '23'); -INSERT INTO cp_tree VALUES ('5126', '4', '24', '245', '5124', '25'); -INSERT INTO cp_tree VALUES ('5127', '4', '26', '245', '5124', '27'); -INSERT INTO cp_tree VALUES ('5128', '2', '30', '245', '5113', '43'); -INSERT INTO cp_tree VALUES ('5129', '3', '31', '245', '5128', '32'); -INSERT INTO cp_tree VALUES ('5130', '3', '33', '245', '5128', '34'); -INSERT INTO cp_tree VALUES ('5131', '3', '35', '245', '5128', '36'); -INSERT INTO cp_tree VALUES ('5132', '3', '37', '245', '5128', '38'); -INSERT INTO cp_tree VALUES ('5133', '3', '39', '245', '5128', '40'); -INSERT INTO cp_tree VALUES ('5134', '3', '41', '245', '5128', '42'); -INSERT INTO cp_tree VALUES ('5135', '2', '44', '245', '5113', '47'); -INSERT INTO cp_tree VALUES ('5136', '3', '45', '245', '5135', '46'); -INSERT INTO cp_tree VALUES ('5137', '2', '48', '245', '5113', '51'); -INSERT INTO cp_tree VALUES ('5138', '3', '49', '245', '5137', '50'); -INSERT INTO cp_tree VALUES ('5139', '2', '52', '245', '5113', '55'); -INSERT INTO cp_tree VALUES ('5140', '3', '53', '245', '5139', '54'); -INSERT INTO cp_tree VALUES ('5141', '2', '56', '245', '5113', '61'); -INSERT INTO cp_tree VALUES ('5142', '3', '57', '245', '5141', '58'); -INSERT INTO cp_tree VALUES ('5143', '3', '59', '245', '5141', '60'); -INSERT INTO cp_tree VALUES ('5144', '2', '62', '245', '5113', '65'); -INSERT INTO cp_tree VALUES ('5145', '3', '63', '245', '5144', '64'); -INSERT INTO cp_tree VALUES ('5146', '2', '66', '245', '5113', '69'); -INSERT INTO cp_tree VALUES ('5147', '3', '67', '245', '5146', '68'); -INSERT INTO cp_tree VALUES ('5148', '2', '70', '245', '5113', '75'); -INSERT INTO cp_tree VALUES ('5149', '3', '71', '245', '5148', '74'); -INSERT INTO cp_tree VALUES ('5150', '4', '72', '245', '5149', '73'); -INSERT INTO cp_tree VALUES ('5151', '2', '76', '245', '5113', '85'); -INSERT INTO cp_tree VALUES ('5152', '3', '77', '245', '5151', '80'); -INSERT INTO cp_tree VALUES ('5153', '4', '78', '245', '5152', '79'); -INSERT INTO cp_tree VALUES ('5154', '3', '81', '245', '5151', '84'); -INSERT INTO cp_tree VALUES ('5155', '4', '82', '245', '5154', '83'); -INSERT INTO cp_tree VALUES ('5156', '2', '86', '245', '5113', '87'); -INSERT INTO cp_tree VALUES ('5157', '1', '1', '246', '0', '118'); -INSERT INTO cp_tree VALUES ('5158', '2', '2', '246', '5157', '53'); -INSERT INTO cp_tree VALUES ('5159', '3', '3', '246', '5158', '10'); -INSERT INTO cp_tree VALUES ('5160', '4', '4', '246', '5159', '5'); -INSERT INTO cp_tree VALUES ('5161', '4', '6', '246', '5159', '7'); -INSERT INTO cp_tree VALUES ('5162', '4', '8', '246', '5159', '9'); -INSERT INTO cp_tree VALUES ('5163', '3', '11', '246', '5158', '44'); -INSERT INTO cp_tree VALUES ('5164', '4', '12', '246', '5163', '19'); -INSERT INTO cp_tree VALUES ('5165', '5', '13', '246', '5164', '14'); -INSERT INTO cp_tree VALUES ('5166', '5', '15', '246', '5164', '16'); -INSERT INTO cp_tree VALUES ('5167', '5', '17', '246', '5164', '18'); -INSERT INTO cp_tree VALUES ('5168', '4', '20', '246', '5163', '27'); -INSERT INTO cp_tree VALUES ('5169', '5', '21', '246', '5168', '22'); -INSERT INTO cp_tree VALUES ('5170', '5', '23', '246', '5168', '24'); -INSERT INTO cp_tree VALUES ('5171', '5', '25', '246', '5168', '26'); -INSERT INTO cp_tree VALUES ('5172', '4', '28', '246', '5163', '35'); -INSERT INTO cp_tree VALUES ('5173', '5', '29', '246', '5172', '30'); -INSERT INTO cp_tree VALUES ('5174', '5', '31', '246', '5172', '32'); -INSERT INTO cp_tree VALUES ('5175', '5', '33', '246', '5172', '34'); -INSERT INTO cp_tree VALUES ('5176', '4', '36', '246', '5163', '43'); -INSERT INTO cp_tree VALUES ('5177', '5', '37', '246', '5176', '38'); -INSERT INTO cp_tree VALUES ('5178', '5', '39', '246', '5176', '40'); -INSERT INTO cp_tree VALUES ('5179', '5', '41', '246', '5176', '42'); -INSERT INTO cp_tree VALUES ('5180', '3', '45', '246', '5158', '52'); -INSERT INTO cp_tree VALUES ('5181', '4', '46', '246', '5180', '47'); -INSERT INTO cp_tree VALUES ('5182', '4', '48', '246', '5180', '49'); -INSERT INTO cp_tree VALUES ('5183', '4', '50', '246', '5180', '51'); -INSERT INTO cp_tree VALUES ('5184', '2', '54', '246', '5157', '67'); -INSERT INTO cp_tree VALUES ('5185', '3', '55', '246', '5184', '56'); -INSERT INTO cp_tree VALUES ('5186', '3', '57', '246', '5184', '58'); -INSERT INTO cp_tree VALUES ('5187', '3', '59', '246', '5184', '60'); -INSERT INTO cp_tree VALUES ('5188', '3', '61', '246', '5184', '62'); -INSERT INTO cp_tree VALUES ('5189', '3', '63', '246', '5184', '64'); -INSERT INTO cp_tree VALUES ('5190', '3', '65', '246', '5184', '66'); -INSERT INTO cp_tree VALUES ('5191', '2', '68', '246', '5157', '71'); -INSERT INTO cp_tree VALUES ('5192', '3', '69', '246', '5191', '70'); -INSERT INTO cp_tree VALUES ('5193', '2', '72', '246', '5157', '75'); -INSERT INTO cp_tree VALUES ('5194', '3', '73', '246', '5193', '74'); -INSERT INTO cp_tree VALUES ('5195', '2', '76', '246', '5157', '79'); -INSERT INTO cp_tree VALUES ('5196', '3', '77', '246', '5195', '78'); -INSERT INTO cp_tree VALUES ('5197', '2', '80', '246', '5157', '85'); -INSERT INTO cp_tree VALUES ('5198', '3', '81', '246', '5197', '82'); -INSERT INTO cp_tree VALUES ('5199', '3', '83', '246', '5197', '84'); -INSERT INTO cp_tree VALUES ('5200', '2', '86', '246', '5157', '89'); -INSERT INTO cp_tree VALUES ('5201', '3', '87', '246', '5200', '88'); -INSERT INTO cp_tree VALUES ('5202', '2', '90', '246', '5157', '93'); -INSERT INTO cp_tree VALUES ('5203', '3', '91', '246', '5202', '92'); -INSERT INTO cp_tree VALUES ('5204', '2', '94', '246', '5157', '101'); -INSERT INTO cp_tree VALUES ('5205', '3', '95', '246', '5204', '98'); -INSERT INTO cp_tree VALUES ('5206', '4', '96', '246', '5205', '97'); -INSERT INTO cp_tree VALUES ('5207', '3', '99', '246', '5204', '100'); -INSERT INTO cp_tree VALUES ('5208', '2', '102', '246', '5157', '107'); -INSERT INTO cp_tree VALUES ('5209', '3', '103', '246', '5208', '106'); -INSERT INTO cp_tree VALUES ('5210', '4', '104', '246', '5209', '105'); -INSERT INTO cp_tree VALUES ('5211', '2', '108', '246', '5157', '113'); -INSERT INTO cp_tree VALUES ('5212', '3', '109', '246', '5211', '112'); -INSERT INTO cp_tree VALUES ('5213', '4', '110', '246', '5212', '111'); -INSERT INTO cp_tree VALUES ('5214', '2', '114', '246', '5157', '115'); -INSERT INTO cp_tree VALUES ('5215', '2', '116', '246', '5157', '117'); -INSERT INTO cp_tree VALUES ('5216', '1', '1', '247', '0', '118'); -INSERT INTO cp_tree VALUES ('5217', '2', '2', '247', '5216', '53'); -INSERT INTO cp_tree VALUES ('5218', '3', '3', '247', '5217', '10'); -INSERT INTO cp_tree VALUES ('5219', '4', '4', '247', '5218', '5'); -INSERT INTO cp_tree VALUES ('5220', '4', '6', '247', '5218', '7'); -INSERT INTO cp_tree VALUES ('5221', '4', '8', '247', '5218', '9'); -INSERT INTO cp_tree VALUES ('5222', '3', '11', '247', '5217', '44'); -INSERT INTO cp_tree VALUES ('5223', '4', '12', '247', '5222', '19'); -INSERT INTO cp_tree VALUES ('5224', '5', '13', '247', '5223', '14'); -INSERT INTO cp_tree VALUES ('5225', '5', '15', '247', '5223', '16'); -INSERT INTO cp_tree VALUES ('5226', '5', '17', '247', '5223', '18'); -INSERT INTO cp_tree VALUES ('5227', '4', '20', '247', '5222', '27'); -INSERT INTO cp_tree VALUES ('5228', '5', '21', '247', '5227', '22'); -INSERT INTO cp_tree VALUES ('5229', '5', '23', '247', '5227', '24'); -INSERT INTO cp_tree VALUES ('5230', '5', '25', '247', '5227', '26'); -INSERT INTO cp_tree VALUES ('5231', '4', '28', '247', '5222', '35'); -INSERT INTO cp_tree VALUES ('5232', '5', '29', '247', '5231', '30'); -INSERT INTO cp_tree VALUES ('5233', '5', '31', '247', '5231', '32'); -INSERT INTO cp_tree VALUES ('5234', '5', '33', '247', '5231', '34'); -INSERT INTO cp_tree VALUES ('5235', '4', '36', '247', '5222', '43'); -INSERT INTO cp_tree VALUES ('5236', '5', '37', '247', '5235', '38'); -INSERT INTO cp_tree VALUES ('5237', '5', '39', '247', '5235', '40'); -INSERT INTO cp_tree VALUES ('5238', '5', '41', '247', '5235', '42'); -INSERT INTO cp_tree VALUES ('5239', '3', '45', '247', '5217', '52'); -INSERT INTO cp_tree VALUES ('5240', '4', '46', '247', '5239', '47'); -INSERT INTO cp_tree VALUES ('5241', '4', '48', '247', '5239', '49'); -INSERT INTO cp_tree VALUES ('5242', '4', '50', '247', '5239', '51'); -INSERT INTO cp_tree VALUES ('5243', '2', '54', '247', '5216', '67'); -INSERT INTO cp_tree VALUES ('5244', '3', '55', '247', '5243', '56'); -INSERT INTO cp_tree VALUES ('5245', '3', '57', '247', '5243', '58'); -INSERT INTO cp_tree VALUES ('5246', '3', '59', '247', '5243', '60'); -INSERT INTO cp_tree VALUES ('5247', '3', '61', '247', '5243', '62'); -INSERT INTO cp_tree VALUES ('5248', '3', '63', '247', '5243', '64'); -INSERT INTO cp_tree VALUES ('5249', '3', '65', '247', '5243', '66'); -INSERT INTO cp_tree VALUES ('5250', '2', '68', '247', '5216', '71'); -INSERT INTO cp_tree VALUES ('5251', '3', '69', '247', '5250', '70'); -INSERT INTO cp_tree VALUES ('5252', '2', '72', '247', '5216', '75'); -INSERT INTO cp_tree VALUES ('5253', '3', '73', '247', '5252', '74'); -INSERT INTO cp_tree VALUES ('5254', '2', '76', '247', '5216', '79'); -INSERT INTO cp_tree VALUES ('5255', '3', '77', '247', '5254', '78'); -INSERT INTO cp_tree VALUES ('5256', '2', '80', '247', '5216', '85'); -INSERT INTO cp_tree VALUES ('5257', '3', '81', '247', '5256', '82'); -INSERT INTO cp_tree VALUES ('5258', '3', '83', '247', '5256', '84'); -INSERT INTO cp_tree VALUES ('5259', '2', '86', '247', '5216', '89'); -INSERT INTO cp_tree VALUES ('5260', '3', '87', '247', '5259', '88'); -INSERT INTO cp_tree VALUES ('5261', '2', '90', '247', '5216', '93'); -INSERT INTO cp_tree VALUES ('5262', '3', '91', '247', '5261', '92'); -INSERT INTO cp_tree VALUES ('5263', '2', '94', '247', '5216', '99'); -INSERT INTO cp_tree VALUES ('5264', '3', '95', '247', '5263', '98'); -INSERT INTO cp_tree VALUES ('5265', '4', '96', '247', '5264', '97'); -INSERT INTO cp_tree VALUES ('5266', '2', '100', '247', '5216', '107'); -INSERT INTO cp_tree VALUES ('5267', '3', '101', '247', '5266', '104'); -INSERT INTO cp_tree VALUES ('5268', '4', '102', '247', '5267', '103'); -INSERT INTO cp_tree VALUES ('5269', '3', '105', '247', '5266', '106'); -INSERT INTO cp_tree VALUES ('5270', '2', '108', '247', '5216', '113'); -INSERT INTO cp_tree VALUES ('5271', '3', '109', '247', '5270', '112'); -INSERT INTO cp_tree VALUES ('5272', '4', '110', '247', '5271', '111'); -INSERT INTO cp_tree VALUES ('5273', '2', '114', '247', '5216', '115'); -INSERT INTO cp_tree VALUES ('5274', '2', '116', '247', '5216', '117'); -INSERT INTO cp_tree VALUES ('5275', '1', '1', '248', '0', '426'); -INSERT INTO cp_tree VALUES ('5276', '2', '2', '248', '5275', '261'); -INSERT INTO cp_tree VALUES ('5277', '3', '3', '248', '5276', '10'); -INSERT INTO cp_tree VALUES ('5278', '4', '4', '248', '5277', '5'); -INSERT INTO cp_tree VALUES ('5279', '4', '6', '248', '5277', '7'); -INSERT INTO cp_tree VALUES ('5280', '4', '8', '248', '5277', '9'); -INSERT INTO cp_tree VALUES ('5281', '3', '11', '248', '5276', '252'); -INSERT INTO cp_tree VALUES ('5282', '4', '12', '248', '5281', '91'); -INSERT INTO cp_tree VALUES ('5283', '5', '13', '248', '5282', '38'); -INSERT INTO cp_tree VALUES ('5284', '6', '14', '248', '5283', '21'); -INSERT INTO cp_tree VALUES ('5285', '7', '15', '248', '5284', '16'); -INSERT INTO cp_tree VALUES ('5286', '7', '17', '248', '5284', '18'); -INSERT INTO cp_tree VALUES ('5287', '7', '19', '248', '5284', '20'); -INSERT INTO cp_tree VALUES ('5288', '6', '22', '248', '5283', '29'); -INSERT INTO cp_tree VALUES ('5289', '7', '23', '248', '5288', '24'); -INSERT INTO cp_tree VALUES ('5290', '7', '25', '248', '5288', '26'); -INSERT INTO cp_tree VALUES ('5291', '7', '27', '248', '5288', '28'); -INSERT INTO cp_tree VALUES ('5292', '6', '30', '248', '5283', '37'); -INSERT INTO cp_tree VALUES ('5293', '7', '31', '248', '5292', '32'); -INSERT INTO cp_tree VALUES ('5294', '7', '33', '248', '5292', '34'); -INSERT INTO cp_tree VALUES ('5295', '7', '35', '248', '5292', '36'); -INSERT INTO cp_tree VALUES ('5296', '5', '39', '248', '5282', '64'); -INSERT INTO cp_tree VALUES ('5297', '6', '40', '248', '5296', '47'); -INSERT INTO cp_tree VALUES ('5298', '7', '41', '248', '5297', '42'); -INSERT INTO cp_tree VALUES ('5299', '7', '43', '248', '5297', '44'); -INSERT INTO cp_tree VALUES ('5300', '7', '45', '248', '5297', '46'); -INSERT INTO cp_tree VALUES ('5301', '6', '48', '248', '5296', '55'); -INSERT INTO cp_tree VALUES ('5302', '7', '49', '248', '5301', '50'); -INSERT INTO cp_tree VALUES ('5303', '7', '51', '248', '5301', '52'); -INSERT INTO cp_tree VALUES ('5304', '7', '53', '248', '5301', '54'); -INSERT INTO cp_tree VALUES ('5305', '6', '56', '248', '5296', '63'); -INSERT INTO cp_tree VALUES ('5306', '7', '57', '248', '5305', '58'); -INSERT INTO cp_tree VALUES ('5307', '7', '59', '248', '5305', '60'); -INSERT INTO cp_tree VALUES ('5308', '7', '61', '248', '5305', '62'); -INSERT INTO cp_tree VALUES ('5309', '5', '65', '248', '5282', '90'); -INSERT INTO cp_tree VALUES ('5310', '6', '66', '248', '5309', '73'); -INSERT INTO cp_tree VALUES ('5311', '7', '67', '248', '5310', '68'); -INSERT INTO cp_tree VALUES ('5312', '7', '69', '248', '5310', '70'); -INSERT INTO cp_tree VALUES ('5313', '7', '71', '248', '5310', '72'); -INSERT INTO cp_tree VALUES ('5314', '6', '74', '248', '5309', '81'); -INSERT INTO cp_tree VALUES ('5315', '7', '75', '248', '5314', '76'); -INSERT INTO cp_tree VALUES ('5316', '7', '77', '248', '5314', '78'); -INSERT INTO cp_tree VALUES ('5317', '7', '79', '248', '5314', '80'); -INSERT INTO cp_tree VALUES ('5318', '6', '82', '248', '5309', '89'); -INSERT INTO cp_tree VALUES ('5319', '7', '83', '248', '5318', '84'); -INSERT INTO cp_tree VALUES ('5320', '7', '85', '248', '5318', '86'); -INSERT INTO cp_tree VALUES ('5321', '7', '87', '248', '5318', '88'); -INSERT INTO cp_tree VALUES ('5322', '4', '92', '248', '5281', '171'); -INSERT INTO cp_tree VALUES ('5323', '5', '93', '248', '5322', '118'); -INSERT INTO cp_tree VALUES ('5324', '6', '94', '248', '5323', '101'); -INSERT INTO cp_tree VALUES ('5325', '7', '95', '248', '5324', '96'); -INSERT INTO cp_tree VALUES ('5326', '7', '97', '248', '5324', '98'); -INSERT INTO cp_tree VALUES ('5327', '7', '99', '248', '5324', '100'); -INSERT INTO cp_tree VALUES ('5328', '6', '102', '248', '5323', '109'); -INSERT INTO cp_tree VALUES ('5329', '7', '103', '248', '5328', '104'); -INSERT INTO cp_tree VALUES ('5330', '7', '105', '248', '5328', '106'); -INSERT INTO cp_tree VALUES ('5331', '7', '107', '248', '5328', '108'); -INSERT INTO cp_tree VALUES ('5332', '6', '110', '248', '5323', '117'); -INSERT INTO cp_tree VALUES ('5333', '7', '111', '248', '5332', '112'); -INSERT INTO cp_tree VALUES ('5334', '7', '113', '248', '5332', '114'); -INSERT INTO cp_tree VALUES ('5335', '7', '115', '248', '5332', '116'); -INSERT INTO cp_tree VALUES ('5336', '5', '119', '248', '5322', '144'); -INSERT INTO cp_tree VALUES ('5337', '6', '120', '248', '5336', '127'); -INSERT INTO cp_tree VALUES ('5338', '7', '121', '248', '5337', '122'); -INSERT INTO cp_tree VALUES ('5339', '7', '123', '248', '5337', '124'); -INSERT INTO cp_tree VALUES ('5340', '7', '125', '248', '5337', '126'); -INSERT INTO cp_tree VALUES ('5341', '6', '128', '248', '5336', '135'); -INSERT INTO cp_tree VALUES ('5342', '7', '129', '248', '5341', '130'); -INSERT INTO cp_tree VALUES ('5343', '7', '131', '248', '5341', '132'); -INSERT INTO cp_tree VALUES ('5344', '7', '133', '248', '5341', '134'); -INSERT INTO cp_tree VALUES ('5345', '6', '136', '248', '5336', '143'); -INSERT INTO cp_tree VALUES ('5346', '7', '137', '248', '5345', '138'); -INSERT INTO cp_tree VALUES ('5347', '7', '139', '248', '5345', '140'); -INSERT INTO cp_tree VALUES ('5348', '7', '141', '248', '5345', '142'); -INSERT INTO cp_tree VALUES ('5349', '5', '145', '248', '5322', '170'); -INSERT INTO cp_tree VALUES ('5350', '6', '146', '248', '5349', '153'); -INSERT INTO cp_tree VALUES ('5351', '7', '147', '248', '5350', '148'); -INSERT INTO cp_tree VALUES ('5352', '7', '149', '248', '5350', '150'); -INSERT INTO cp_tree VALUES ('5353', '7', '151', '248', '5350', '152'); -INSERT INTO cp_tree VALUES ('5354', '6', '154', '248', '5349', '161'); -INSERT INTO cp_tree VALUES ('5355', '7', '155', '248', '5354', '156'); -INSERT INTO cp_tree VALUES ('5356', '7', '157', '248', '5354', '158'); -INSERT INTO cp_tree VALUES ('5357', '7', '159', '248', '5354', '160'); -INSERT INTO cp_tree VALUES ('5358', '6', '162', '248', '5349', '169'); -INSERT INTO cp_tree VALUES ('5359', '7', '163', '248', '5358', '164'); -INSERT INTO cp_tree VALUES ('5360', '7', '165', '248', '5358', '166'); -INSERT INTO cp_tree VALUES ('5361', '7', '167', '248', '5358', '168'); -INSERT INTO cp_tree VALUES ('5362', '4', '172', '248', '5281', '251'); -INSERT INTO cp_tree VALUES ('5363', '5', '173', '248', '5362', '198'); -INSERT INTO cp_tree VALUES ('5364', '6', '174', '248', '5363', '181'); -INSERT INTO cp_tree VALUES ('5365', '7', '175', '248', '5364', '176'); -INSERT INTO cp_tree VALUES ('5366', '7', '177', '248', '5364', '178'); -INSERT INTO cp_tree VALUES ('5367', '7', '179', '248', '5364', '180'); -INSERT INTO cp_tree VALUES ('5368', '6', '182', '248', '5363', '189'); -INSERT INTO cp_tree VALUES ('5369', '7', '183', '248', '5368', '184'); -INSERT INTO cp_tree VALUES ('5370', '7', '185', '248', '5368', '186'); -INSERT INTO cp_tree VALUES ('5371', '7', '187', '248', '5368', '188'); -INSERT INTO cp_tree VALUES ('5372', '6', '190', '248', '5363', '197'); -INSERT INTO cp_tree VALUES ('5373', '7', '191', '248', '5372', '192'); -INSERT INTO cp_tree VALUES ('5374', '7', '193', '248', '5372', '194'); -INSERT INTO cp_tree VALUES ('5375', '7', '195', '248', '5372', '196'); -INSERT INTO cp_tree VALUES ('5376', '5', '199', '248', '5362', '224'); -INSERT INTO cp_tree VALUES ('5377', '6', '200', '248', '5376', '207'); -INSERT INTO cp_tree VALUES ('5378', '7', '201', '248', '5377', '202'); -INSERT INTO cp_tree VALUES ('5379', '7', '203', '248', '5377', '204'); -INSERT INTO cp_tree VALUES ('5380', '7', '205', '248', '5377', '206'); -INSERT INTO cp_tree VALUES ('5381', '6', '208', '248', '5376', '215'); -INSERT INTO cp_tree VALUES ('5382', '7', '209', '248', '5381', '210'); -INSERT INTO cp_tree VALUES ('5383', '7', '211', '248', '5381', '212'); -INSERT INTO cp_tree VALUES ('5384', '7', '213', '248', '5381', '214'); -INSERT INTO cp_tree VALUES ('5385', '6', '216', '248', '5376', '223'); -INSERT INTO cp_tree VALUES ('5386', '7', '217', '248', '5385', '218'); -INSERT INTO cp_tree VALUES ('5387', '7', '219', '248', '5385', '220'); -INSERT INTO cp_tree VALUES ('5388', '7', '221', '248', '5385', '222'); -INSERT INTO cp_tree VALUES ('5389', '5', '225', '248', '5362', '250'); -INSERT INTO cp_tree VALUES ('5390', '6', '226', '248', '5389', '233'); -INSERT INTO cp_tree VALUES ('5391', '7', '227', '248', '5390', '228'); -INSERT INTO cp_tree VALUES ('5392', '7', '229', '248', '5390', '230'); -INSERT INTO cp_tree VALUES ('5393', '7', '231', '248', '5390', '232'); -INSERT INTO cp_tree VALUES ('5394', '6', '234', '248', '5389', '241'); -INSERT INTO cp_tree VALUES ('5395', '7', '235', '248', '5394', '236'); -INSERT INTO cp_tree VALUES ('5396', '7', '237', '248', '5394', '238'); -INSERT INTO cp_tree VALUES ('5397', '7', '239', '248', '5394', '240'); -INSERT INTO cp_tree VALUES ('5398', '6', '242', '248', '5389', '249'); -INSERT INTO cp_tree VALUES ('5399', '7', '243', '248', '5398', '244'); -INSERT INTO cp_tree VALUES ('5400', '7', '245', '248', '5398', '246'); -INSERT INTO cp_tree VALUES ('5401', '7', '247', '248', '5398', '248'); -INSERT INTO cp_tree VALUES ('5402', '3', '253', '248', '5276', '260'); -INSERT INTO cp_tree VALUES ('5403', '4', '254', '248', '5402', '255'); -INSERT INTO cp_tree VALUES ('5404', '4', '256', '248', '5402', '257'); -INSERT INTO cp_tree VALUES ('5405', '4', '258', '248', '5402', '259'); -INSERT INTO cp_tree VALUES ('5406', '2', '262', '248', '5275', '275'); -INSERT INTO cp_tree VALUES ('5407', '3', '263', '248', '5406', '264'); -INSERT INTO cp_tree VALUES ('5408', '3', '265', '248', '5406', '266'); -INSERT INTO cp_tree VALUES ('5409', '3', '267', '248', '5406', '268'); -INSERT INTO cp_tree VALUES ('5410', '3', '269', '248', '5406', '270'); -INSERT INTO cp_tree VALUES ('5411', '3', '271', '248', '5406', '272'); -INSERT INTO cp_tree VALUES ('5412', '3', '273', '248', '5406', '274'); -INSERT INTO cp_tree VALUES ('5413', '2', '276', '248', '5275', '279'); -INSERT INTO cp_tree VALUES ('5414', '3', '277', '248', '5413', '278'); -INSERT INTO cp_tree VALUES ('5415', '2', '280', '248', '5275', '283'); -INSERT INTO cp_tree VALUES ('5416', '3', '281', '248', '5415', '282'); -INSERT INTO cp_tree VALUES ('5417', '2', '284', '248', '5275', '287'); -INSERT INTO cp_tree VALUES ('5418', '3', '285', '248', '5417', '286'); -INSERT INTO cp_tree VALUES ('5419', '2', '288', '248', '5275', '293'); -INSERT INTO cp_tree VALUES ('5420', '3', '289', '248', '5419', '290'); -INSERT INTO cp_tree VALUES ('5421', '3', '291', '248', '5419', '292'); -INSERT INTO cp_tree VALUES ('5422', '2', '294', '248', '5275', '297'); -INSERT INTO cp_tree VALUES ('5423', '3', '295', '248', '5422', '296'); -INSERT INTO cp_tree VALUES ('5424', '2', '298', '248', '5275', '301'); -INSERT INTO cp_tree VALUES ('5425', '3', '299', '248', '5424', '300'); -INSERT INTO cp_tree VALUES ('5426', '2', '302', '248', '5275', '303'); -INSERT INTO cp_tree VALUES ('5427', '2', '304', '248', '5275', '309'); -INSERT INTO cp_tree VALUES ('5428', '3', '305', '248', '5427', '308'); -INSERT INTO cp_tree VALUES ('5429', '4', '306', '248', '5428', '307'); -INSERT INTO cp_tree VALUES ('5430', '2', '310', '248', '5275', '315'); -INSERT INTO cp_tree VALUES ('5431', '3', '311', '248', '5430', '314'); -INSERT INTO cp_tree VALUES ('5432', '4', '312', '248', '5431', '313'); -INSERT INTO cp_tree VALUES ('5433', '2', '316', '248', '5275', '321'); -INSERT INTO cp_tree VALUES ('5434', '3', '317', '248', '5433', '320'); -INSERT INTO cp_tree VALUES ('5435', '4', '318', '248', '5434', '319'); -INSERT INTO cp_tree VALUES ('5436', '2', '322', '248', '5275', '327'); -INSERT INTO cp_tree VALUES ('5437', '3', '323', '248', '5436', '326'); -INSERT INTO cp_tree VALUES ('5438', '4', '324', '248', '5437', '325'); -INSERT INTO cp_tree VALUES ('5439', '2', '328', '248', '5275', '333'); -INSERT INTO cp_tree VALUES ('5440', '3', '329', '248', '5439', '332'); -INSERT INTO cp_tree VALUES ('5441', '4', '330', '248', '5440', '331'); -INSERT INTO cp_tree VALUES ('5442', '2', '334', '248', '5275', '339'); -INSERT INTO cp_tree VALUES ('5443', '3', '335', '248', '5442', '338'); -INSERT INTO cp_tree VALUES ('5444', '4', '336', '248', '5443', '337'); -INSERT INTO cp_tree VALUES ('5445', '2', '340', '248', '5275', '345'); -INSERT INTO cp_tree VALUES ('5446', '3', '341', '248', '5445', '344'); -INSERT INTO cp_tree VALUES ('5447', '4', '342', '248', '5446', '343'); -INSERT INTO cp_tree VALUES ('5448', '2', '346', '248', '5275', '351'); -INSERT INTO cp_tree VALUES ('5449', '3', '347', '248', '5448', '350'); -INSERT INTO cp_tree VALUES ('5450', '4', '348', '248', '5449', '349'); -INSERT INTO cp_tree VALUES ('5451', '2', '352', '248', '5275', '357'); -INSERT INTO cp_tree VALUES ('5452', '3', '353', '248', '5451', '356'); -INSERT INTO cp_tree VALUES ('5453', '4', '354', '248', '5452', '355'); -INSERT INTO cp_tree VALUES ('5454', '2', '358', '248', '5275', '367'); -INSERT INTO cp_tree VALUES ('5455', '3', '359', '248', '5454', '362'); -INSERT INTO cp_tree VALUES ('5456', '4', '360', '248', '5455', '361'); -INSERT INTO cp_tree VALUES ('5457', '3', '363', '248', '5454', '366'); -INSERT INTO cp_tree VALUES ('5458', '4', '364', '248', '5457', '365'); -INSERT INTO cp_tree VALUES ('5459', '2', '368', '248', '5275', '383'); -INSERT INTO cp_tree VALUES ('5460', '3', '369', '248', '5459', '370'); -INSERT INTO cp_tree VALUES ('5461', '3', '371', '248', '5459', '374'); -INSERT INTO cp_tree VALUES ('5462', '4', '372', '248', '5461', '373'); -INSERT INTO cp_tree VALUES ('5463', '3', '375', '248', '5459', '378'); -INSERT INTO cp_tree VALUES ('5464', '4', '376', '248', '5463', '377'); -INSERT INTO cp_tree VALUES ('5465', '3', '379', '248', '5459', '382'); -INSERT INTO cp_tree VALUES ('5466', '4', '380', '248', '5465', '381'); -INSERT INTO cp_tree VALUES ('5467', '2', '384', '248', '5275', '393'); -INSERT INTO cp_tree VALUES ('5468', '3', '385', '248', '5467', '388'); -INSERT INTO cp_tree VALUES ('5469', '4', '386', '248', '5468', '387'); -INSERT INTO cp_tree VALUES ('5470', '3', '389', '248', '5467', '392'); -INSERT INTO cp_tree VALUES ('5471', '4', '390', '248', '5470', '391'); -INSERT INTO cp_tree VALUES ('5472', '2', '394', '248', '5275', '403'); -INSERT INTO cp_tree VALUES ('5473', '3', '395', '248', '5472', '398'); -INSERT INTO cp_tree VALUES ('5474', '4', '396', '248', '5473', '397'); -INSERT INTO cp_tree VALUES ('5475', '3', '399', '248', '5472', '402'); -INSERT INTO cp_tree VALUES ('5476', '4', '400', '248', '5475', '401'); -INSERT INTO cp_tree VALUES ('5477', '2', '404', '248', '5275', '409'); -INSERT INTO cp_tree VALUES ('5478', '3', '405', '248', '5477', '408'); -INSERT INTO cp_tree VALUES ('5479', '4', '406', '248', '5478', '407'); -INSERT INTO cp_tree VALUES ('5480', '2', '410', '248', '5275', '419'); -INSERT INTO cp_tree VALUES ('5481', '3', '411', '248', '5480', '414'); -INSERT INTO cp_tree VALUES ('5482', '4', '412', '248', '5481', '413'); -INSERT INTO cp_tree VALUES ('5483', '3', '415', '248', '5480', '418'); -INSERT INTO cp_tree VALUES ('5484', '4', '416', '248', '5483', '417'); -INSERT INTO cp_tree VALUES ('5485', '2', '420', '248', '5275', '425'); -INSERT INTO cp_tree VALUES ('5486', '3', '421', '248', '5485', '424'); -INSERT INTO cp_tree VALUES ('5487', '4', '422', '248', '5486', '423'); -INSERT INTO cp_tree VALUES ('5488', '1', '1', '249', '0', '446'); -INSERT INTO cp_tree VALUES ('5489', '2', '2', '249', '5488', '261'); -INSERT INTO cp_tree VALUES ('5490', '3', '3', '249', '5489', '10'); -INSERT INTO cp_tree VALUES ('5491', '4', '4', '249', '5490', '5'); -INSERT INTO cp_tree VALUES ('5492', '4', '6', '249', '5490', '7'); -INSERT INTO cp_tree VALUES ('5493', '4', '8', '249', '5490', '9'); -INSERT INTO cp_tree VALUES ('5494', '3', '11', '249', '5489', '252'); -INSERT INTO cp_tree VALUES ('5495', '4', '12', '249', '5494', '91'); -INSERT INTO cp_tree VALUES ('5496', '5', '13', '249', '5495', '38'); -INSERT INTO cp_tree VALUES ('5497', '6', '14', '249', '5496', '21'); -INSERT INTO cp_tree VALUES ('5498', '7', '15', '249', '5497', '16'); -INSERT INTO cp_tree VALUES ('5499', '7', '17', '249', '5497', '18'); -INSERT INTO cp_tree VALUES ('5500', '7', '19', '249', '5497', '20'); -INSERT INTO cp_tree VALUES ('5501', '6', '22', '249', '5496', '29'); -INSERT INTO cp_tree VALUES ('5502', '7', '23', '249', '5501', '24'); -INSERT INTO cp_tree VALUES ('5503', '7', '25', '249', '5501', '26'); -INSERT INTO cp_tree VALUES ('5504', '7', '27', '249', '5501', '28'); -INSERT INTO cp_tree VALUES ('5505', '6', '30', '249', '5496', '37'); -INSERT INTO cp_tree VALUES ('5506', '7', '31', '249', '5505', '32'); -INSERT INTO cp_tree VALUES ('5507', '7', '33', '249', '5505', '34'); -INSERT INTO cp_tree VALUES ('5508', '7', '35', '249', '5505', '36'); -INSERT INTO cp_tree VALUES ('5509', '5', '39', '249', '5495', '64'); -INSERT INTO cp_tree VALUES ('5510', '6', '40', '249', '5509', '47'); -INSERT INTO cp_tree VALUES ('5511', '7', '41', '249', '5510', '42'); -INSERT INTO cp_tree VALUES ('5512', '7', '43', '249', '5510', '44'); -INSERT INTO cp_tree VALUES ('5513', '7', '45', '249', '5510', '46'); -INSERT INTO cp_tree VALUES ('5514', '6', '48', '249', '5509', '55'); -INSERT INTO cp_tree VALUES ('5515', '7', '49', '249', '5514', '50'); -INSERT INTO cp_tree VALUES ('5516', '7', '51', '249', '5514', '52'); -INSERT INTO cp_tree VALUES ('5517', '7', '53', '249', '5514', '54'); -INSERT INTO cp_tree VALUES ('5518', '6', '56', '249', '5509', '63'); -INSERT INTO cp_tree VALUES ('5519', '7', '57', '249', '5518', '58'); -INSERT INTO cp_tree VALUES ('5520', '7', '59', '249', '5518', '60'); -INSERT INTO cp_tree VALUES ('5521', '7', '61', '249', '5518', '62'); -INSERT INTO cp_tree VALUES ('5522', '5', '65', '249', '5495', '90'); -INSERT INTO cp_tree VALUES ('5523', '6', '66', '249', '5522', '73'); -INSERT INTO cp_tree VALUES ('5524', '7', '67', '249', '5523', '68'); -INSERT INTO cp_tree VALUES ('5525', '7', '69', '249', '5523', '70'); -INSERT INTO cp_tree VALUES ('5526', '7', '71', '249', '5523', '72'); -INSERT INTO cp_tree VALUES ('5527', '6', '74', '249', '5522', '81'); -INSERT INTO cp_tree VALUES ('5528', '7', '75', '249', '5527', '76'); -INSERT INTO cp_tree VALUES ('5529', '7', '77', '249', '5527', '78'); -INSERT INTO cp_tree VALUES ('5530', '7', '79', '249', '5527', '80'); -INSERT INTO cp_tree VALUES ('5531', '6', '82', '249', '5522', '89'); -INSERT INTO cp_tree VALUES ('5532', '7', '83', '249', '5531', '84'); -INSERT INTO cp_tree VALUES ('5533', '7', '85', '249', '5531', '86'); -INSERT INTO cp_tree VALUES ('5534', '7', '87', '249', '5531', '88'); -INSERT INTO cp_tree VALUES ('5535', '4', '92', '249', '5494', '171'); -INSERT INTO cp_tree VALUES ('5536', '5', '93', '249', '5535', '118'); -INSERT INTO cp_tree VALUES ('5537', '6', '94', '249', '5536', '101'); -INSERT INTO cp_tree VALUES ('5538', '7', '95', '249', '5537', '96'); -INSERT INTO cp_tree VALUES ('5539', '7', '97', '249', '5537', '98'); -INSERT INTO cp_tree VALUES ('5540', '7', '99', '249', '5537', '100'); -INSERT INTO cp_tree VALUES ('5541', '6', '102', '249', '5536', '109'); -INSERT INTO cp_tree VALUES ('5542', '7', '103', '249', '5541', '104'); -INSERT INTO cp_tree VALUES ('5543', '7', '105', '249', '5541', '106'); -INSERT INTO cp_tree VALUES ('5544', '7', '107', '249', '5541', '108'); -INSERT INTO cp_tree VALUES ('5545', '6', '110', '249', '5536', '117'); -INSERT INTO cp_tree VALUES ('5546', '7', '111', '249', '5545', '112'); -INSERT INTO cp_tree VALUES ('5547', '7', '113', '249', '5545', '114'); -INSERT INTO cp_tree VALUES ('5548', '7', '115', '249', '5545', '116'); -INSERT INTO cp_tree VALUES ('5549', '5', '119', '249', '5535', '144'); -INSERT INTO cp_tree VALUES ('5550', '6', '120', '249', '5549', '127'); -INSERT INTO cp_tree VALUES ('5551', '7', '121', '249', '5550', '122'); -INSERT INTO cp_tree VALUES ('5552', '7', '123', '249', '5550', '124'); -INSERT INTO cp_tree VALUES ('5553', '7', '125', '249', '5550', '126'); -INSERT INTO cp_tree VALUES ('5554', '6', '128', '249', '5549', '135'); -INSERT INTO cp_tree VALUES ('5555', '7', '129', '249', '5554', '130'); -INSERT INTO cp_tree VALUES ('5556', '7', '131', '249', '5554', '132'); -INSERT INTO cp_tree VALUES ('5557', '7', '133', '249', '5554', '134'); -INSERT INTO cp_tree VALUES ('5558', '6', '136', '249', '5549', '143'); -INSERT INTO cp_tree VALUES ('5559', '7', '137', '249', '5558', '138'); -INSERT INTO cp_tree VALUES ('5560', '7', '139', '249', '5558', '140'); -INSERT INTO cp_tree VALUES ('5561', '7', '141', '249', '5558', '142'); -INSERT INTO cp_tree VALUES ('5562', '5', '145', '249', '5535', '170'); -INSERT INTO cp_tree VALUES ('5563', '6', '146', '249', '5562', '153'); -INSERT INTO cp_tree VALUES ('5564', '7', '147', '249', '5563', '148'); -INSERT INTO cp_tree VALUES ('5565', '7', '149', '249', '5563', '150'); -INSERT INTO cp_tree VALUES ('5566', '7', '151', '249', '5563', '152'); -INSERT INTO cp_tree VALUES ('5567', '6', '154', '249', '5562', '161'); -INSERT INTO cp_tree VALUES ('5568', '7', '155', '249', '5567', '156'); -INSERT INTO cp_tree VALUES ('5569', '7', '157', '249', '5567', '158'); -INSERT INTO cp_tree VALUES ('5570', '7', '159', '249', '5567', '160'); -INSERT INTO cp_tree VALUES ('5571', '6', '162', '249', '5562', '169'); -INSERT INTO cp_tree VALUES ('5572', '7', '163', '249', '5571', '164'); -INSERT INTO cp_tree VALUES ('5573', '7', '165', '249', '5571', '166'); -INSERT INTO cp_tree VALUES ('5574', '7', '167', '249', '5571', '168'); -INSERT INTO cp_tree VALUES ('5575', '4', '172', '249', '5494', '251'); -INSERT INTO cp_tree VALUES ('5576', '5', '173', '249', '5575', '198'); -INSERT INTO cp_tree VALUES ('5577', '6', '174', '249', '5576', '181'); -INSERT INTO cp_tree VALUES ('5578', '7', '175', '249', '5577', '176'); -INSERT INTO cp_tree VALUES ('5579', '7', '177', '249', '5577', '178'); -INSERT INTO cp_tree VALUES ('5580', '7', '179', '249', '5577', '180'); -INSERT INTO cp_tree VALUES ('5581', '6', '182', '249', '5576', '189'); -INSERT INTO cp_tree VALUES ('5582', '7', '183', '249', '5581', '184'); -INSERT INTO cp_tree VALUES ('5583', '7', '185', '249', '5581', '186'); -INSERT INTO cp_tree VALUES ('5584', '7', '187', '249', '5581', '188'); -INSERT INTO cp_tree VALUES ('5585', '6', '190', '249', '5576', '197'); -INSERT INTO cp_tree VALUES ('5586', '7', '191', '249', '5585', '192'); -INSERT INTO cp_tree VALUES ('5587', '7', '193', '249', '5585', '194'); -INSERT INTO cp_tree VALUES ('5588', '7', '195', '249', '5585', '196'); -INSERT INTO cp_tree VALUES ('5589', '5', '199', '249', '5575', '224'); -INSERT INTO cp_tree VALUES ('5590', '6', '200', '249', '5589', '207'); -INSERT INTO cp_tree VALUES ('5591', '7', '201', '249', '5590', '202'); -INSERT INTO cp_tree VALUES ('5592', '7', '203', '249', '5590', '204'); -INSERT INTO cp_tree VALUES ('5593', '7', '205', '249', '5590', '206'); -INSERT INTO cp_tree VALUES ('5594', '6', '208', '249', '5589', '215'); -INSERT INTO cp_tree VALUES ('5595', '7', '209', '249', '5594', '210'); -INSERT INTO cp_tree VALUES ('5596', '7', '211', '249', '5594', '212'); -INSERT INTO cp_tree VALUES ('5597', '7', '213', '249', '5594', '214'); -INSERT INTO cp_tree VALUES ('5598', '6', '216', '249', '5589', '223'); -INSERT INTO cp_tree VALUES ('5599', '7', '217', '249', '5598', '218'); -INSERT INTO cp_tree VALUES ('5600', '7', '219', '249', '5598', '220'); -INSERT INTO cp_tree VALUES ('5601', '7', '221', '249', '5598', '222'); -INSERT INTO cp_tree VALUES ('5602', '5', '225', '249', '5575', '250'); -INSERT INTO cp_tree VALUES ('5603', '6', '226', '249', '5602', '233'); -INSERT INTO cp_tree VALUES ('5604', '7', '227', '249', '5603', '228'); -INSERT INTO cp_tree VALUES ('5605', '7', '229', '249', '5603', '230'); -INSERT INTO cp_tree VALUES ('5606', '7', '231', '249', '5603', '232'); -INSERT INTO cp_tree VALUES ('5607', '6', '234', '249', '5602', '241'); -INSERT INTO cp_tree VALUES ('5608', '7', '235', '249', '5607', '236'); -INSERT INTO cp_tree VALUES ('5609', '7', '237', '249', '5607', '238'); -INSERT INTO cp_tree VALUES ('5610', '7', '239', '249', '5607', '240'); -INSERT INTO cp_tree VALUES ('5611', '6', '242', '249', '5602', '249'); -INSERT INTO cp_tree VALUES ('5612', '7', '243', '249', '5611', '244'); -INSERT INTO cp_tree VALUES ('5613', '7', '245', '249', '5611', '246'); -INSERT INTO cp_tree VALUES ('5614', '7', '247', '249', '5611', '248'); -INSERT INTO cp_tree VALUES ('5615', '3', '253', '249', '5489', '260'); -INSERT INTO cp_tree VALUES ('5616', '4', '254', '249', '5615', '255'); -INSERT INTO cp_tree VALUES ('5617', '4', '256', '249', '5615', '257'); -INSERT INTO cp_tree VALUES ('5618', '4', '258', '249', '5615', '259'); -INSERT INTO cp_tree VALUES ('5619', '2', '262', '249', '5488', '275'); -INSERT INTO cp_tree VALUES ('5620', '3', '263', '249', '5619', '264'); -INSERT INTO cp_tree VALUES ('5621', '3', '265', '249', '5619', '266'); -INSERT INTO cp_tree VALUES ('5622', '3', '267', '249', '5619', '268'); -INSERT INTO cp_tree VALUES ('5623', '3', '269', '249', '5619', '270'); -INSERT INTO cp_tree VALUES ('5624', '3', '271', '249', '5619', '272'); -INSERT INTO cp_tree VALUES ('5625', '3', '273', '249', '5619', '274'); -INSERT INTO cp_tree VALUES ('5626', '2', '276', '249', '5488', '279'); -INSERT INTO cp_tree VALUES ('5627', '3', '277', '249', '5626', '278'); -INSERT INTO cp_tree VALUES ('5628', '2', '280', '249', '5488', '283'); -INSERT INTO cp_tree VALUES ('5629', '3', '281', '249', '5628', '282'); -INSERT INTO cp_tree VALUES ('5630', '2', '284', '249', '5488', '287'); -INSERT INTO cp_tree VALUES ('5631', '3', '285', '249', '5630', '286'); -INSERT INTO cp_tree VALUES ('5632', '2', '288', '249', '5488', '293'); -INSERT INTO cp_tree VALUES ('5633', '3', '289', '249', '5632', '290'); -INSERT INTO cp_tree VALUES ('5634', '3', '291', '249', '5632', '292'); -INSERT INTO cp_tree VALUES ('5635', '2', '294', '249', '5488', '297'); -INSERT INTO cp_tree VALUES ('5636', '3', '295', '249', '5635', '296'); -INSERT INTO cp_tree VALUES ('5637', '2', '298', '249', '5488', '301'); -INSERT INTO cp_tree VALUES ('5638', '3', '299', '249', '5637', '300'); -INSERT INTO cp_tree VALUES ('5639', '2', '302', '249', '5488', '303'); -INSERT INTO cp_tree VALUES ('5640', '2', '304', '249', '5488', '309'); -INSERT INTO cp_tree VALUES ('5641', '3', '305', '249', '5640', '308'); -INSERT INTO cp_tree VALUES ('5642', '4', '306', '249', '5641', '307'); -INSERT INTO cp_tree VALUES ('5643', '2', '310', '249', '5488', '315'); -INSERT INTO cp_tree VALUES ('5644', '3', '311', '249', '5643', '312'); -INSERT INTO cp_tree VALUES ('5645', '3', '313', '249', '5643', '314'); -INSERT INTO cp_tree VALUES ('5646', '2', '316', '249', '5488', '329'); -INSERT INTO cp_tree VALUES ('5647', '3', '317', '249', '5646', '318'); -INSERT INTO cp_tree VALUES ('5648', '3', '319', '249', '5646', '320'); -INSERT INTO cp_tree VALUES ('5649', '3', '321', '249', '5646', '322'); -INSERT INTO cp_tree VALUES ('5650', '3', '323', '249', '5646', '324'); -INSERT INTO cp_tree VALUES ('5651', '3', '325', '249', '5646', '326'); -INSERT INTO cp_tree VALUES ('5652', '3', '327', '249', '5646', '328'); -INSERT INTO cp_tree VALUES ('5653', '2', '330', '249', '5488', '335'); -INSERT INTO cp_tree VALUES ('5654', '3', '331', '249', '5653', '334'); -INSERT INTO cp_tree VALUES ('5655', '4', '332', '249', '5654', '333'); -INSERT INTO cp_tree VALUES ('5656', '2', '336', '249', '5488', '341'); -INSERT INTO cp_tree VALUES ('5657', '3', '337', '249', '5656', '340'); -INSERT INTO cp_tree VALUES ('5658', '4', '338', '249', '5657', '339'); -INSERT INTO cp_tree VALUES ('5659', '2', '342', '249', '5488', '347'); -INSERT INTO cp_tree VALUES ('5660', '3', '343', '249', '5659', '346'); -INSERT INTO cp_tree VALUES ('5661', '4', '344', '249', '5660', '345'); -INSERT INTO cp_tree VALUES ('5662', '2', '348', '249', '5488', '353'); -INSERT INTO cp_tree VALUES ('5663', '3', '349', '249', '5662', '352'); -INSERT INTO cp_tree VALUES ('5664', '4', '350', '249', '5663', '351'); -INSERT INTO cp_tree VALUES ('5665', '2', '354', '249', '5488', '359'); -INSERT INTO cp_tree VALUES ('5666', '3', '355', '249', '5665', '358'); -INSERT INTO cp_tree VALUES ('5667', '4', '356', '249', '5666', '357'); -INSERT INTO cp_tree VALUES ('5668', '2', '360', '249', '5488', '365'); -INSERT INTO cp_tree VALUES ('5669', '3', '361', '249', '5668', '364'); -INSERT INTO cp_tree VALUES ('5670', '4', '362', '249', '5669', '363'); -INSERT INTO cp_tree VALUES ('5671', '2', '366', '249', '5488', '371'); -INSERT INTO cp_tree VALUES ('5672', '3', '367', '249', '5671', '370'); -INSERT INTO cp_tree VALUES ('5673', '4', '368', '249', '5672', '369'); -INSERT INTO cp_tree VALUES ('5674', '2', '372', '249', '5488', '377'); -INSERT INTO cp_tree VALUES ('5675', '3', '373', '249', '5674', '376'); -INSERT INTO cp_tree VALUES ('5676', '4', '374', '249', '5675', '375'); -INSERT INTO cp_tree VALUES ('5677', '2', '378', '249', '5488', '387'); -INSERT INTO cp_tree VALUES ('5678', '3', '379', '249', '5677', '382'); -INSERT INTO cp_tree VALUES ('5679', '4', '380', '249', '5678', '381'); -INSERT INTO cp_tree VALUES ('5680', '3', '383', '249', '5677', '386'); -INSERT INTO cp_tree VALUES ('5681', '4', '384', '249', '5680', '385'); -INSERT INTO cp_tree VALUES ('5682', '2', '388', '249', '5488', '403'); -INSERT INTO cp_tree VALUES ('5683', '3', '389', '249', '5682', '390'); -INSERT INTO cp_tree VALUES ('5684', '3', '391', '249', '5682', '394'); -INSERT INTO cp_tree VALUES ('5685', '4', '392', '249', '5684', '393'); -INSERT INTO cp_tree VALUES ('5686', '3', '395', '249', '5682', '398'); -INSERT INTO cp_tree VALUES ('5687', '4', '396', '249', '5686', '397'); -INSERT INTO cp_tree VALUES ('5688', '3', '399', '249', '5682', '402'); -INSERT INTO cp_tree VALUES ('5689', '4', '400', '249', '5688', '401'); -INSERT INTO cp_tree VALUES ('5690', '2', '404', '249', '5488', '413'); -INSERT INTO cp_tree VALUES ('5691', '3', '405', '249', '5690', '408'); -INSERT INTO cp_tree VALUES ('5692', '4', '406', '249', '5691', '407'); -INSERT INTO cp_tree VALUES ('5693', '3', '409', '249', '5690', '412'); -INSERT INTO cp_tree VALUES ('5694', '4', '410', '249', '5693', '411'); -INSERT INTO cp_tree VALUES ('5695', '2', '414', '249', '5488', '423'); -INSERT INTO cp_tree VALUES ('5696', '3', '415', '249', '5695', '418'); -INSERT INTO cp_tree VALUES ('5697', '4', '416', '249', '5696', '417'); -INSERT INTO cp_tree VALUES ('5698', '3', '419', '249', '5695', '422'); -INSERT INTO cp_tree VALUES ('5699', '4', '420', '249', '5698', '421'); -INSERT INTO cp_tree VALUES ('5700', '2', '424', '249', '5488', '429'); -INSERT INTO cp_tree VALUES ('5701', '3', '425', '249', '5700', '428'); -INSERT INTO cp_tree VALUES ('5702', '4', '426', '249', '5701', '427'); -INSERT INTO cp_tree VALUES ('5703', '2', '430', '249', '5488', '439'); -INSERT INTO cp_tree VALUES ('5704', '3', '431', '249', '5703', '434'); -INSERT INTO cp_tree VALUES ('5705', '4', '432', '249', '5704', '433'); -INSERT INTO cp_tree VALUES ('5706', '3', '435', '249', '5703', '438'); -INSERT INTO cp_tree VALUES ('5707', '4', '436', '249', '5706', '437'); -INSERT INTO cp_tree VALUES ('5708', '2', '440', '249', '5488', '445'); -INSERT INTO cp_tree VALUES ('5709', '3', '441', '249', '5708', '444'); -INSERT INTO cp_tree VALUES ('5710', '4', '442', '249', '5709', '443'); -INSERT INTO cp_tree VALUES ('5711', '1', '1', '252', '0', '924'); -INSERT INTO cp_tree VALUES ('5712', '2', '2', '252', '5711', '15'); -INSERT INTO cp_tree VALUES ('5713', '3', '3', '252', '5712', '14'); -INSERT INTO cp_tree VALUES ('5714', '4', '4', '252', '5713', '5'); -INSERT INTO cp_tree VALUES ('5715', '4', '6', '252', '5713', '7'); -INSERT INTO cp_tree VALUES ('5716', '4', '8', '252', '5713', '9'); -INSERT INTO cp_tree VALUES ('5717', '4', '10', '252', '5713', '11'); -INSERT INTO cp_tree VALUES ('5718', '4', '12', '252', '5713', '13'); -INSERT INTO cp_tree VALUES ('5719', '2', '16', '252', '5711', '25'); -INSERT INTO cp_tree VALUES ('5720', '3', '17', '252', '5719', '18'); -INSERT INTO cp_tree VALUES ('5721', '3', '19', '252', '5719', '20'); -INSERT INTO cp_tree VALUES ('5722', '3', '21', '252', '5719', '22'); -INSERT INTO cp_tree VALUES ('5723', '3', '23', '252', '5719', '24'); -INSERT INTO cp_tree VALUES ('5724', '2', '26', '252', '5711', '35'); -INSERT INTO cp_tree VALUES ('5725', '3', '27', '252', '5724', '28'); -INSERT INTO cp_tree VALUES ('5726', '3', '29', '252', '5724', '30'); -INSERT INTO cp_tree VALUES ('5727', '3', '31', '252', '5724', '32'); -INSERT INTO cp_tree VALUES ('5728', '3', '33', '252', '5724', '34'); -INSERT INTO cp_tree VALUES ('5729', '2', '36', '252', '5711', '45'); -INSERT INTO cp_tree VALUES ('5730', '3', '37', '252', '5729', '38'); -INSERT INTO cp_tree VALUES ('5731', '3', '39', '252', '5729', '40'); -INSERT INTO cp_tree VALUES ('5732', '3', '41', '252', '5729', '42'); -INSERT INTO cp_tree VALUES ('5733', '3', '43', '252', '5729', '44'); -INSERT INTO cp_tree VALUES ('5734', '2', '46', '252', '5711', '55'); -INSERT INTO cp_tree VALUES ('5735', '3', '47', '252', '5734', '48'); -INSERT INTO cp_tree VALUES ('5736', '3', '49', '252', '5734', '50'); -INSERT INTO cp_tree VALUES ('5737', '3', '51', '252', '5734', '52'); -INSERT INTO cp_tree VALUES ('5738', '3', '53', '252', '5734', '54'); -INSERT INTO cp_tree VALUES ('5739', '2', '56', '252', '5711', '65'); -INSERT INTO cp_tree VALUES ('5740', '3', '57', '252', '5739', '58'); -INSERT INTO cp_tree VALUES ('5741', '3', '59', '252', '5739', '60'); -INSERT INTO cp_tree VALUES ('5742', '3', '61', '252', '5739', '62'); -INSERT INTO cp_tree VALUES ('5743', '3', '63', '252', '5739', '64'); -INSERT INTO cp_tree VALUES ('5744', '2', '66', '252', '5711', '73'); -INSERT INTO cp_tree VALUES ('5745', '3', '67', '252', '5744', '68'); -INSERT INTO cp_tree VALUES ('5746', '3', '69', '252', '5744', '70'); -INSERT INTO cp_tree VALUES ('5747', '3', '71', '252', '5744', '72'); -INSERT INTO cp_tree VALUES ('5748', '2', '74', '252', '5711', '83'); -INSERT INTO cp_tree VALUES ('5749', '3', '75', '252', '5748', '76'); -INSERT INTO cp_tree VALUES ('5750', '3', '77', '252', '5748', '78'); -INSERT INTO cp_tree VALUES ('5751', '3', '79', '252', '5748', '80'); -INSERT INTO cp_tree VALUES ('5752', '3', '81', '252', '5748', '82'); -INSERT INTO cp_tree VALUES ('5753', '2', '84', '252', '5711', '85'); -INSERT INTO cp_tree VALUES ('5754', '2', '86', '252', '5711', '223'); -INSERT INTO cp_tree VALUES ('5755', '3', '87', '252', '5754', '88'); -INSERT INTO cp_tree VALUES ('5756', '3', '89', '252', '5754', '90'); -INSERT INTO cp_tree VALUES ('5757', '3', '91', '252', '5754', '92'); -INSERT INTO cp_tree VALUES ('5758', '3', '93', '252', '5754', '94'); -INSERT INTO cp_tree VALUES ('5759', '3', '95', '252', '5754', '96'); -INSERT INTO cp_tree VALUES ('5760', '3', '97', '252', '5754', '98'); -INSERT INTO cp_tree VALUES ('5761', '3', '99', '252', '5754', '100'); -INSERT INTO cp_tree VALUES ('5762', '3', '101', '252', '5754', '102'); -INSERT INTO cp_tree VALUES ('5763', '3', '103', '252', '5754', '104'); -INSERT INTO cp_tree VALUES ('5764', '3', '105', '252', '5754', '106'); -INSERT INTO cp_tree VALUES ('5765', '3', '107', '252', '5754', '108'); -INSERT INTO cp_tree VALUES ('5766', '3', '109', '252', '5754', '110'); -INSERT INTO cp_tree VALUES ('5767', '3', '111', '252', '5754', '112'); -INSERT INTO cp_tree VALUES ('5768', '3', '113', '252', '5754', '114'); -INSERT INTO cp_tree VALUES ('5769', '3', '115', '252', '5754', '116'); -INSERT INTO cp_tree VALUES ('5770', '3', '117', '252', '5754', '118'); -INSERT INTO cp_tree VALUES ('5771', '3', '119', '252', '5754', '120'); -INSERT INTO cp_tree VALUES ('5772', '3', '121', '252', '5754', '122'); -INSERT INTO cp_tree VALUES ('5773', '3', '123', '252', '5754', '124'); -INSERT INTO cp_tree VALUES ('5774', '3', '125', '252', '5754', '126'); -INSERT INTO cp_tree VALUES ('5775', '3', '127', '252', '5754', '128'); -INSERT INTO cp_tree VALUES ('5776', '3', '129', '252', '5754', '130'); -INSERT INTO cp_tree VALUES ('5777', '3', '131', '252', '5754', '132'); -INSERT INTO cp_tree VALUES ('5778', '3', '133', '252', '5754', '134'); -INSERT INTO cp_tree VALUES ('5779', '3', '135', '252', '5754', '136'); -INSERT INTO cp_tree VALUES ('5780', '3', '137', '252', '5754', '138'); -INSERT INTO cp_tree VALUES ('5781', '3', '139', '252', '5754', '140'); -INSERT INTO cp_tree VALUES ('5782', '3', '141', '252', '5754', '142'); -INSERT INTO cp_tree VALUES ('5783', '3', '143', '252', '5754', '144'); -INSERT INTO cp_tree VALUES ('5784', '3', '145', '252', '5754', '146'); -INSERT INTO cp_tree VALUES ('5785', '3', '147', '252', '5754', '148'); -INSERT INTO cp_tree VALUES ('5786', '3', '149', '252', '5754', '150'); -INSERT INTO cp_tree VALUES ('5787', '3', '151', '252', '5754', '152'); -INSERT INTO cp_tree VALUES ('5788', '3', '153', '252', '5754', '154'); -INSERT INTO cp_tree VALUES ('5789', '3', '155', '252', '5754', '156'); -INSERT INTO cp_tree VALUES ('5790', '3', '157', '252', '5754', '158'); -INSERT INTO cp_tree VALUES ('5791', '3', '159', '252', '5754', '160'); -INSERT INTO cp_tree VALUES ('5792', '3', '161', '252', '5754', '162'); -INSERT INTO cp_tree VALUES ('5793', '3', '163', '252', '5754', '164'); -INSERT INTO cp_tree VALUES ('5794', '3', '165', '252', '5754', '166'); -INSERT INTO cp_tree VALUES ('5795', '3', '167', '252', '5754', '168'); -INSERT INTO cp_tree VALUES ('5796', '3', '169', '252', '5754', '170'); -INSERT INTO cp_tree VALUES ('5797', '3', '171', '252', '5754', '172'); -INSERT INTO cp_tree VALUES ('5798', '3', '173', '252', '5754', '174'); -INSERT INTO cp_tree VALUES ('5799', '3', '175', '252', '5754', '176'); -INSERT INTO cp_tree VALUES ('5800', '3', '177', '252', '5754', '178'); -INSERT INTO cp_tree VALUES ('5801', '3', '179', '252', '5754', '180'); -INSERT INTO cp_tree VALUES ('5802', '3', '181', '252', '5754', '182'); -INSERT INTO cp_tree VALUES ('5803', '3', '183', '252', '5754', '184'); -INSERT INTO cp_tree VALUES ('5804', '3', '185', '252', '5754', '186'); -INSERT INTO cp_tree VALUES ('5805', '3', '187', '252', '5754', '188'); -INSERT INTO cp_tree VALUES ('5806', '3', '189', '252', '5754', '190'); -INSERT INTO cp_tree VALUES ('5807', '3', '191', '252', '5754', '192'); -INSERT INTO cp_tree VALUES ('5808', '3', '193', '252', '5754', '194'); -INSERT INTO cp_tree VALUES ('5809', '3', '195', '252', '5754', '196'); -INSERT INTO cp_tree VALUES ('5810', '3', '197', '252', '5754', '198'); -INSERT INTO cp_tree VALUES ('5811', '3', '199', '252', '5754', '200'); -INSERT INTO cp_tree VALUES ('5812', '3', '201', '252', '5754', '202'); -INSERT INTO cp_tree VALUES ('5813', '3', '203', '252', '5754', '204'); -INSERT INTO cp_tree VALUES ('5814', '3', '205', '252', '5754', '206'); -INSERT INTO cp_tree VALUES ('5815', '3', '207', '252', '5754', '208'); -INSERT INTO cp_tree VALUES ('5816', '3', '209', '252', '5754', '210'); -INSERT INTO cp_tree VALUES ('5817', '3', '211', '252', '5754', '212'); -INSERT INTO cp_tree VALUES ('5818', '3', '213', '252', '5754', '214'); -INSERT INTO cp_tree VALUES ('5819', '3', '215', '252', '5754', '216'); -INSERT INTO cp_tree VALUES ('5820', '3', '217', '252', '5754', '218'); -INSERT INTO cp_tree VALUES ('5821', '3', '219', '252', '5754', '220'); -INSERT INTO cp_tree VALUES ('5822', '3', '221', '252', '5754', '222'); -INSERT INTO cp_tree VALUES ('5823', '2', '224', '252', '5711', '231'); -INSERT INTO cp_tree VALUES ('5824', '3', '225', '252', '5823', '226'); -INSERT INTO cp_tree VALUES ('5825', '3', '227', '252', '5823', '228'); -INSERT INTO cp_tree VALUES ('5826', '3', '229', '252', '5823', '230'); -INSERT INTO cp_tree VALUES ('5827', '2', '232', '252', '5711', '249'); -INSERT INTO cp_tree VALUES ('5828', '3', '233', '252', '5827', '234'); -INSERT INTO cp_tree VALUES ('5829', '3', '235', '252', '5827', '236'); -INSERT INTO cp_tree VALUES ('5830', '3', '237', '252', '5827', '238'); -INSERT INTO cp_tree VALUES ('5831', '3', '239', '252', '5827', '240'); -INSERT INTO cp_tree VALUES ('5832', '3', '241', '252', '5827', '242'); -INSERT INTO cp_tree VALUES ('5833', '3', '243', '252', '5827', '244'); -INSERT INTO cp_tree VALUES ('5834', '3', '245', '252', '5827', '246'); -INSERT INTO cp_tree VALUES ('5835', '3', '247', '252', '5827', '248'); -INSERT INTO cp_tree VALUES ('5836', '2', '250', '252', '5711', '251'); -INSERT INTO cp_tree VALUES ('5837', '2', '252', '252', '5711', '389'); -INSERT INTO cp_tree VALUES ('5838', '3', '253', '252', '5837', '254'); -INSERT INTO cp_tree VALUES ('5839', '3', '255', '252', '5837', '256'); -INSERT INTO cp_tree VALUES ('5840', '3', '257', '252', '5837', '258'); -INSERT INTO cp_tree VALUES ('5841', '3', '259', '252', '5837', '260'); -INSERT INTO cp_tree VALUES ('5842', '3', '261', '252', '5837', '262'); -INSERT INTO cp_tree VALUES ('5843', '3', '263', '252', '5837', '264'); -INSERT INTO cp_tree VALUES ('5844', '3', '265', '252', '5837', '266'); -INSERT INTO cp_tree VALUES ('5845', '3', '267', '252', '5837', '268'); -INSERT INTO cp_tree VALUES ('5846', '3', '269', '252', '5837', '270'); -INSERT INTO cp_tree VALUES ('5847', '3', '271', '252', '5837', '272'); -INSERT INTO cp_tree VALUES ('5848', '3', '273', '252', '5837', '274'); -INSERT INTO cp_tree VALUES ('5849', '3', '275', '252', '5837', '276'); -INSERT INTO cp_tree VALUES ('5850', '3', '277', '252', '5837', '278'); -INSERT INTO cp_tree VALUES ('5851', '3', '279', '252', '5837', '280'); -INSERT INTO cp_tree VALUES ('5852', '3', '281', '252', '5837', '282'); -INSERT INTO cp_tree VALUES ('5853', '3', '283', '252', '5837', '284'); -INSERT INTO cp_tree VALUES ('5854', '3', '285', '252', '5837', '286'); -INSERT INTO cp_tree VALUES ('5855', '3', '287', '252', '5837', '288'); -INSERT INTO cp_tree VALUES ('5856', '3', '289', '252', '5837', '290'); -INSERT INTO cp_tree VALUES ('5857', '3', '291', '252', '5837', '292'); -INSERT INTO cp_tree VALUES ('5858', '3', '293', '252', '5837', '294'); -INSERT INTO cp_tree VALUES ('5859', '3', '295', '252', '5837', '296'); -INSERT INTO cp_tree VALUES ('5860', '3', '297', '252', '5837', '298'); -INSERT INTO cp_tree VALUES ('5861', '3', '299', '252', '5837', '300'); -INSERT INTO cp_tree VALUES ('5862', '3', '301', '252', '5837', '302'); -INSERT INTO cp_tree VALUES ('5863', '3', '303', '252', '5837', '304'); -INSERT INTO cp_tree VALUES ('5864', '3', '305', '252', '5837', '306'); -INSERT INTO cp_tree VALUES ('5865', '3', '307', '252', '5837', '308'); -INSERT INTO cp_tree VALUES ('5866', '3', '309', '252', '5837', '310'); -INSERT INTO cp_tree VALUES ('5867', '3', '311', '252', '5837', '312'); -INSERT INTO cp_tree VALUES ('5868', '3', '313', '252', '5837', '314'); -INSERT INTO cp_tree VALUES ('5869', '3', '315', '252', '5837', '316'); -INSERT INTO cp_tree VALUES ('5870', '3', '317', '252', '5837', '318'); -INSERT INTO cp_tree VALUES ('5871', '3', '319', '252', '5837', '320'); -INSERT INTO cp_tree VALUES ('5872', '3', '321', '252', '5837', '322'); -INSERT INTO cp_tree VALUES ('5873', '3', '323', '252', '5837', '324'); -INSERT INTO cp_tree VALUES ('5874', '3', '325', '252', '5837', '326'); -INSERT INTO cp_tree VALUES ('5875', '3', '327', '252', '5837', '328'); -INSERT INTO cp_tree VALUES ('5876', '3', '329', '252', '5837', '330'); -INSERT INTO cp_tree VALUES ('5877', '3', '331', '252', '5837', '332'); -INSERT INTO cp_tree VALUES ('5878', '3', '333', '252', '5837', '334'); -INSERT INTO cp_tree VALUES ('5879', '3', '335', '252', '5837', '336'); -INSERT INTO cp_tree VALUES ('5880', '3', '337', '252', '5837', '338'); -INSERT INTO cp_tree VALUES ('5881', '3', '339', '252', '5837', '340'); -INSERT INTO cp_tree VALUES ('5882', '3', '341', '252', '5837', '342'); -INSERT INTO cp_tree VALUES ('5883', '3', '343', '252', '5837', '344'); -INSERT INTO cp_tree VALUES ('5884', '3', '345', '252', '5837', '346'); -INSERT INTO cp_tree VALUES ('5885', '3', '347', '252', '5837', '348'); -INSERT INTO cp_tree VALUES ('5886', '3', '349', '252', '5837', '350'); -INSERT INTO cp_tree VALUES ('5887', '3', '351', '252', '5837', '352'); -INSERT INTO cp_tree VALUES ('5888', '3', '353', '252', '5837', '354'); -INSERT INTO cp_tree VALUES ('5889', '3', '355', '252', '5837', '356'); -INSERT INTO cp_tree VALUES ('5890', '3', '357', '252', '5837', '358'); -INSERT INTO cp_tree VALUES ('5891', '3', '359', '252', '5837', '360'); -INSERT INTO cp_tree VALUES ('5892', '3', '361', '252', '5837', '362'); -INSERT INTO cp_tree VALUES ('5893', '3', '363', '252', '5837', '364'); -INSERT INTO cp_tree VALUES ('5894', '3', '365', '252', '5837', '366'); -INSERT INTO cp_tree VALUES ('5895', '3', '367', '252', '5837', '368'); -INSERT INTO cp_tree VALUES ('5896', '3', '369', '252', '5837', '370'); -INSERT INTO cp_tree VALUES ('5897', '3', '371', '252', '5837', '372'); -INSERT INTO cp_tree VALUES ('5898', '3', '373', '252', '5837', '374'); -INSERT INTO cp_tree VALUES ('5899', '3', '375', '252', '5837', '376'); -INSERT INTO cp_tree VALUES ('5900', '3', '377', '252', '5837', '378'); -INSERT INTO cp_tree VALUES ('5901', '3', '379', '252', '5837', '380'); -INSERT INTO cp_tree VALUES ('5902', '3', '381', '252', '5837', '382'); -INSERT INTO cp_tree VALUES ('5903', '3', '383', '252', '5837', '384'); -INSERT INTO cp_tree VALUES ('5904', '3', '385', '252', '5837', '386'); -INSERT INTO cp_tree VALUES ('5905', '3', '387', '252', '5837', '388'); -INSERT INTO cp_tree VALUES ('5906', '2', '390', '252', '5711', '397'); -INSERT INTO cp_tree VALUES ('5907', '3', '391', '252', '5906', '392'); -INSERT INTO cp_tree VALUES ('5908', '3', '393', '252', '5906', '394'); -INSERT INTO cp_tree VALUES ('5909', '3', '395', '252', '5906', '396'); -INSERT INTO cp_tree VALUES ('5910', '2', '398', '252', '5711', '423'); -INSERT INTO cp_tree VALUES ('5911', '3', '399', '252', '5910', '400'); -INSERT INTO cp_tree VALUES ('5912', '3', '401', '252', '5910', '402'); -INSERT INTO cp_tree VALUES ('5913', '3', '403', '252', '5910', '404'); -INSERT INTO cp_tree VALUES ('5914', '3', '405', '252', '5910', '406'); -INSERT INTO cp_tree VALUES ('5915', '3', '407', '252', '5910', '408'); -INSERT INTO cp_tree VALUES ('5916', '3', '409', '252', '5910', '410'); -INSERT INTO cp_tree VALUES ('5917', '3', '411', '252', '5910', '412'); -INSERT INTO cp_tree VALUES ('5918', '3', '413', '252', '5910', '414'); -INSERT INTO cp_tree VALUES ('5919', '3', '415', '252', '5910', '416'); -INSERT INTO cp_tree VALUES ('5920', '3', '417', '252', '5910', '418'); -INSERT INTO cp_tree VALUES ('5921', '3', '419', '252', '5910', '420'); -INSERT INTO cp_tree VALUES ('5922', '3', '421', '252', '5910', '422'); -INSERT INTO cp_tree VALUES ('5923', '2', '424', '252', '5711', '425'); -INSERT INTO cp_tree VALUES ('5924', '2', '426', '252', '5711', '563'); -INSERT INTO cp_tree VALUES ('5925', '3', '427', '252', '5924', '428'); -INSERT INTO cp_tree VALUES ('5926', '3', '429', '252', '5924', '430'); -INSERT INTO cp_tree VALUES ('5927', '3', '431', '252', '5924', '432'); -INSERT INTO cp_tree VALUES ('5928', '3', '433', '252', '5924', '434'); -INSERT INTO cp_tree VALUES ('5929', '3', '435', '252', '5924', '436'); -INSERT INTO cp_tree VALUES ('5930', '3', '437', '252', '5924', '438'); -INSERT INTO cp_tree VALUES ('5931', '3', '439', '252', '5924', '440'); -INSERT INTO cp_tree VALUES ('5932', '3', '441', '252', '5924', '442'); -INSERT INTO cp_tree VALUES ('5933', '3', '443', '252', '5924', '444'); -INSERT INTO cp_tree VALUES ('5934', '3', '445', '252', '5924', '446'); -INSERT INTO cp_tree VALUES ('5935', '3', '447', '252', '5924', '448'); -INSERT INTO cp_tree VALUES ('5936', '3', '449', '252', '5924', '450'); -INSERT INTO cp_tree VALUES ('5937', '3', '451', '252', '5924', '452'); -INSERT INTO cp_tree VALUES ('5938', '3', '453', '252', '5924', '454'); -INSERT INTO cp_tree VALUES ('5939', '3', '455', '252', '5924', '456'); -INSERT INTO cp_tree VALUES ('5940', '3', '457', '252', '5924', '458'); -INSERT INTO cp_tree VALUES ('5941', '3', '459', '252', '5924', '460'); -INSERT INTO cp_tree VALUES ('5942', '3', '461', '252', '5924', '462'); -INSERT INTO cp_tree VALUES ('5943', '3', '463', '252', '5924', '464'); -INSERT INTO cp_tree VALUES ('5944', '3', '465', '252', '5924', '466'); -INSERT INTO cp_tree VALUES ('5945', '3', '467', '252', '5924', '468'); -INSERT INTO cp_tree VALUES ('5946', '3', '469', '252', '5924', '470'); -INSERT INTO cp_tree VALUES ('5947', '3', '471', '252', '5924', '472'); -INSERT INTO cp_tree VALUES ('5948', '3', '473', '252', '5924', '474'); -INSERT INTO cp_tree VALUES ('5949', '3', '475', '252', '5924', '476'); -INSERT INTO cp_tree VALUES ('5950', '3', '477', '252', '5924', '478'); -INSERT INTO cp_tree VALUES ('5951', '3', '479', '252', '5924', '480'); -INSERT INTO cp_tree VALUES ('5952', '3', '481', '252', '5924', '482'); -INSERT INTO cp_tree VALUES ('5953', '3', '483', '252', '5924', '484'); -INSERT INTO cp_tree VALUES ('5954', '3', '485', '252', '5924', '486'); -INSERT INTO cp_tree VALUES ('5955', '3', '487', '252', '5924', '488'); -INSERT INTO cp_tree VALUES ('5956', '3', '489', '252', '5924', '490'); -INSERT INTO cp_tree VALUES ('5957', '3', '491', '252', '5924', '492'); -INSERT INTO cp_tree VALUES ('5958', '3', '493', '252', '5924', '494'); -INSERT INTO cp_tree VALUES ('5959', '3', '495', '252', '5924', '496'); -INSERT INTO cp_tree VALUES ('5960', '3', '497', '252', '5924', '498'); -INSERT INTO cp_tree VALUES ('5961', '3', '499', '252', '5924', '500'); -INSERT INTO cp_tree VALUES ('5962', '3', '501', '252', '5924', '502'); -INSERT INTO cp_tree VALUES ('5963', '3', '503', '252', '5924', '504'); -INSERT INTO cp_tree VALUES ('5964', '3', '505', '252', '5924', '506'); -INSERT INTO cp_tree VALUES ('5965', '3', '507', '252', '5924', '508'); -INSERT INTO cp_tree VALUES ('5966', '3', '509', '252', '5924', '510'); -INSERT INTO cp_tree VALUES ('5967', '3', '511', '252', '5924', '512'); -INSERT INTO cp_tree VALUES ('5968', '3', '513', '252', '5924', '514'); -INSERT INTO cp_tree VALUES ('5969', '3', '515', '252', '5924', '516'); -INSERT INTO cp_tree VALUES ('5970', '3', '517', '252', '5924', '518'); -INSERT INTO cp_tree VALUES ('5971', '3', '519', '252', '5924', '520'); -INSERT INTO cp_tree VALUES ('5972', '3', '521', '252', '5924', '522'); -INSERT INTO cp_tree VALUES ('5973', '3', '523', '252', '5924', '524'); -INSERT INTO cp_tree VALUES ('5974', '3', '525', '252', '5924', '526'); -INSERT INTO cp_tree VALUES ('5975', '3', '527', '252', '5924', '528'); -INSERT INTO cp_tree VALUES ('5976', '3', '529', '252', '5924', '530'); -INSERT INTO cp_tree VALUES ('5977', '3', '531', '252', '5924', '532'); -INSERT INTO cp_tree VALUES ('5978', '3', '533', '252', '5924', '534'); -INSERT INTO cp_tree VALUES ('5979', '3', '535', '252', '5924', '536'); -INSERT INTO cp_tree VALUES ('5980', '3', '537', '252', '5924', '538'); -INSERT INTO cp_tree VALUES ('5981', '3', '539', '252', '5924', '540'); -INSERT INTO cp_tree VALUES ('5982', '3', '541', '252', '5924', '542'); -INSERT INTO cp_tree VALUES ('5983', '3', '543', '252', '5924', '544'); -INSERT INTO cp_tree VALUES ('5984', '3', '545', '252', '5924', '546'); -INSERT INTO cp_tree VALUES ('5985', '3', '547', '252', '5924', '548'); -INSERT INTO cp_tree VALUES ('5986', '3', '549', '252', '5924', '550'); -INSERT INTO cp_tree VALUES ('5987', '3', '551', '252', '5924', '552'); -INSERT INTO cp_tree VALUES ('5988', '3', '553', '252', '5924', '554'); -INSERT INTO cp_tree VALUES ('5989', '3', '555', '252', '5924', '556'); -INSERT INTO cp_tree VALUES ('5990', '3', '557', '252', '5924', '558'); -INSERT INTO cp_tree VALUES ('5991', '3', '559', '252', '5924', '560'); -INSERT INTO cp_tree VALUES ('5992', '3', '561', '252', '5924', '562'); -INSERT INTO cp_tree VALUES ('5993', '2', '564', '252', '5711', '571'); -INSERT INTO cp_tree VALUES ('5994', '3', '565', '252', '5993', '566'); -INSERT INTO cp_tree VALUES ('5995', '3', '567', '252', '5993', '568'); -INSERT INTO cp_tree VALUES ('5996', '3', '569', '252', '5993', '570'); -INSERT INTO cp_tree VALUES ('5997', '2', '572', '252', '5711', '589'); -INSERT INTO cp_tree VALUES ('5998', '3', '573', '252', '5997', '574'); -INSERT INTO cp_tree VALUES ('5999', '3', '575', '252', '5997', '576'); -INSERT INTO cp_tree VALUES ('6000', '3', '577', '252', '5997', '578'); -INSERT INTO cp_tree VALUES ('6001', '3', '579', '252', '5997', '580'); -INSERT INTO cp_tree VALUES ('6002', '3', '581', '252', '5997', '582'); -INSERT INTO cp_tree VALUES ('6003', '3', '583', '252', '5997', '584'); -INSERT INTO cp_tree VALUES ('6004', '3', '585', '252', '5997', '586'); -INSERT INTO cp_tree VALUES ('6005', '3', '587', '252', '5997', '588'); -INSERT INTO cp_tree VALUES ('6006', '2', '590', '252', '5711', '591'); -INSERT INTO cp_tree VALUES ('6007', '2', '592', '252', '5711', '729'); -INSERT INTO cp_tree VALUES ('6008', '3', '593', '252', '6007', '594'); -INSERT INTO cp_tree VALUES ('6009', '3', '595', '252', '6007', '596'); -INSERT INTO cp_tree VALUES ('6010', '3', '597', '252', '6007', '598'); -INSERT INTO cp_tree VALUES ('6011', '3', '599', '252', '6007', '600'); -INSERT INTO cp_tree VALUES ('6012', '3', '601', '252', '6007', '602'); -INSERT INTO cp_tree VALUES ('6013', '3', '603', '252', '6007', '604'); -INSERT INTO cp_tree VALUES ('6014', '3', '605', '252', '6007', '606'); -INSERT INTO cp_tree VALUES ('6015', '3', '607', '252', '6007', '608'); -INSERT INTO cp_tree VALUES ('6016', '3', '609', '252', '6007', '610'); -INSERT INTO cp_tree VALUES ('6017', '3', '611', '252', '6007', '612'); -INSERT INTO cp_tree VALUES ('6018', '3', '613', '252', '6007', '614'); -INSERT INTO cp_tree VALUES ('6019', '3', '615', '252', '6007', '616'); -INSERT INTO cp_tree VALUES ('6020', '3', '617', '252', '6007', '618'); -INSERT INTO cp_tree VALUES ('6021', '3', '619', '252', '6007', '620'); -INSERT INTO cp_tree VALUES ('6022', '3', '621', '252', '6007', '622'); -INSERT INTO cp_tree VALUES ('6023', '3', '623', '252', '6007', '624'); -INSERT INTO cp_tree VALUES ('6024', '3', '625', '252', '6007', '626'); -INSERT INTO cp_tree VALUES ('6025', '3', '627', '252', '6007', '628'); -INSERT INTO cp_tree VALUES ('6026', '3', '629', '252', '6007', '630'); -INSERT INTO cp_tree VALUES ('6027', '3', '631', '252', '6007', '632'); -INSERT INTO cp_tree VALUES ('6028', '3', '633', '252', '6007', '634'); -INSERT INTO cp_tree VALUES ('6029', '3', '635', '252', '6007', '636'); -INSERT INTO cp_tree VALUES ('6030', '3', '637', '252', '6007', '638'); -INSERT INTO cp_tree VALUES ('6031', '3', '639', '252', '6007', '640'); -INSERT INTO cp_tree VALUES ('6032', '3', '641', '252', '6007', '642'); -INSERT INTO cp_tree VALUES ('6033', '3', '643', '252', '6007', '644'); -INSERT INTO cp_tree VALUES ('6034', '3', '645', '252', '6007', '646'); -INSERT INTO cp_tree VALUES ('6035', '3', '647', '252', '6007', '648'); -INSERT INTO cp_tree VALUES ('6036', '3', '649', '252', '6007', '650'); -INSERT INTO cp_tree VALUES ('6037', '3', '651', '252', '6007', '652'); -INSERT INTO cp_tree VALUES ('6038', '3', '653', '252', '6007', '654'); -INSERT INTO cp_tree VALUES ('6039', '3', '655', '252', '6007', '656'); -INSERT INTO cp_tree VALUES ('6040', '3', '657', '252', '6007', '658'); -INSERT INTO cp_tree VALUES ('6041', '3', '659', '252', '6007', '660'); -INSERT INTO cp_tree VALUES ('6042', '3', '661', '252', '6007', '662'); -INSERT INTO cp_tree VALUES ('6043', '3', '663', '252', '6007', '664'); -INSERT INTO cp_tree VALUES ('6044', '3', '665', '252', '6007', '666'); -INSERT INTO cp_tree VALUES ('6045', '3', '667', '252', '6007', '668'); -INSERT INTO cp_tree VALUES ('6046', '3', '669', '252', '6007', '670'); -INSERT INTO cp_tree VALUES ('6047', '3', '671', '252', '6007', '672'); -INSERT INTO cp_tree VALUES ('6048', '3', '673', '252', '6007', '674'); -INSERT INTO cp_tree VALUES ('6049', '3', '675', '252', '6007', '676'); -INSERT INTO cp_tree VALUES ('6050', '3', '677', '252', '6007', '678'); -INSERT INTO cp_tree VALUES ('6051', '3', '679', '252', '6007', '680'); -INSERT INTO cp_tree VALUES ('6052', '3', '681', '252', '6007', '682'); -INSERT INTO cp_tree VALUES ('6053', '3', '683', '252', '6007', '684'); -INSERT INTO cp_tree VALUES ('6054', '3', '685', '252', '6007', '686'); -INSERT INTO cp_tree VALUES ('6055', '3', '687', '252', '6007', '688'); -INSERT INTO cp_tree VALUES ('6056', '3', '689', '252', '6007', '690'); -INSERT INTO cp_tree VALUES ('6057', '3', '691', '252', '6007', '692'); -INSERT INTO cp_tree VALUES ('6058', '3', '693', '252', '6007', '694'); -INSERT INTO cp_tree VALUES ('6059', '3', '695', '252', '6007', '696'); -INSERT INTO cp_tree VALUES ('6060', '3', '697', '252', '6007', '698'); -INSERT INTO cp_tree VALUES ('6061', '3', '699', '252', '6007', '700'); -INSERT INTO cp_tree VALUES ('6062', '3', '701', '252', '6007', '702'); -INSERT INTO cp_tree VALUES ('6063', '3', '703', '252', '6007', '704'); -INSERT INTO cp_tree VALUES ('6064', '3', '705', '252', '6007', '706'); -INSERT INTO cp_tree VALUES ('6065', '3', '707', '252', '6007', '708'); -INSERT INTO cp_tree VALUES ('6066', '3', '709', '252', '6007', '710'); -INSERT INTO cp_tree VALUES ('6067', '3', '711', '252', '6007', '712'); -INSERT INTO cp_tree VALUES ('6068', '3', '713', '252', '6007', '714'); -INSERT INTO cp_tree VALUES ('6069', '3', '715', '252', '6007', '716'); -INSERT INTO cp_tree VALUES ('6070', '3', '717', '252', '6007', '718'); -INSERT INTO cp_tree VALUES ('6071', '3', '719', '252', '6007', '720'); -INSERT INTO cp_tree VALUES ('6072', '3', '721', '252', '6007', '722'); -INSERT INTO cp_tree VALUES ('6073', '3', '723', '252', '6007', '724'); -INSERT INTO cp_tree VALUES ('6074', '3', '725', '252', '6007', '726'); -INSERT INTO cp_tree VALUES ('6075', '3', '727', '252', '6007', '728'); -INSERT INTO cp_tree VALUES ('6076', '2', '730', '252', '5711', '737'); -INSERT INTO cp_tree VALUES ('6077', '3', '731', '252', '6076', '732'); -INSERT INTO cp_tree VALUES ('6078', '3', '733', '252', '6076', '734'); -INSERT INTO cp_tree VALUES ('6079', '3', '735', '252', '6076', '736'); -INSERT INTO cp_tree VALUES ('6080', '2', '738', '252', '5711', '747'); -INSERT INTO cp_tree VALUES ('6081', '3', '739', '252', '6080', '740'); -INSERT INTO cp_tree VALUES ('6082', '3', '741', '252', '6080', '742'); -INSERT INTO cp_tree VALUES ('6083', '3', '743', '252', '6080', '744'); -INSERT INTO cp_tree VALUES ('6084', '3', '745', '252', '6080', '746'); -INSERT INTO cp_tree VALUES ('6085', '2', '748', '252', '5711', '749'); -INSERT INTO cp_tree VALUES ('6086', '2', '750', '252', '5711', '887'); -INSERT INTO cp_tree VALUES ('6087', '3', '751', '252', '6086', '752'); -INSERT INTO cp_tree VALUES ('6088', '3', '753', '252', '6086', '754'); -INSERT INTO cp_tree VALUES ('6089', '3', '755', '252', '6086', '756'); -INSERT INTO cp_tree VALUES ('6090', '3', '757', '252', '6086', '758'); -INSERT INTO cp_tree VALUES ('6091', '3', '759', '252', '6086', '760'); -INSERT INTO cp_tree VALUES ('6092', '3', '761', '252', '6086', '762'); -INSERT INTO cp_tree VALUES ('6093', '3', '763', '252', '6086', '764'); -INSERT INTO cp_tree VALUES ('6094', '3', '765', '252', '6086', '766'); -INSERT INTO cp_tree VALUES ('6095', '3', '767', '252', '6086', '768'); -INSERT INTO cp_tree VALUES ('6096', '3', '769', '252', '6086', '770'); -INSERT INTO cp_tree VALUES ('6097', '3', '771', '252', '6086', '772'); -INSERT INTO cp_tree VALUES ('6098', '3', '773', '252', '6086', '774'); -INSERT INTO cp_tree VALUES ('6099', '3', '775', '252', '6086', '776'); -INSERT INTO cp_tree VALUES ('6100', '3', '777', '252', '6086', '778'); -INSERT INTO cp_tree VALUES ('6101', '3', '779', '252', '6086', '780'); -INSERT INTO cp_tree VALUES ('6102', '3', '781', '252', '6086', '782'); -INSERT INTO cp_tree VALUES ('6103', '3', '783', '252', '6086', '784'); -INSERT INTO cp_tree VALUES ('6104', '3', '785', '252', '6086', '786'); -INSERT INTO cp_tree VALUES ('6105', '3', '787', '252', '6086', '788'); -INSERT INTO cp_tree VALUES ('6106', '3', '789', '252', '6086', '790'); -INSERT INTO cp_tree VALUES ('6107', '3', '791', '252', '6086', '792'); -INSERT INTO cp_tree VALUES ('6108', '3', '793', '252', '6086', '794'); -INSERT INTO cp_tree VALUES ('6109', '3', '795', '252', '6086', '796'); -INSERT INTO cp_tree VALUES ('6110', '3', '797', '252', '6086', '798'); -INSERT INTO cp_tree VALUES ('6111', '3', '799', '252', '6086', '800'); -INSERT INTO cp_tree VALUES ('6112', '3', '801', '252', '6086', '802'); -INSERT INTO cp_tree VALUES ('6113', '3', '803', '252', '6086', '804'); -INSERT INTO cp_tree VALUES ('6114', '3', '805', '252', '6086', '806'); -INSERT INTO cp_tree VALUES ('6115', '3', '807', '252', '6086', '808'); -INSERT INTO cp_tree VALUES ('6116', '3', '809', '252', '6086', '810'); -INSERT INTO cp_tree VALUES ('6117', '3', '811', '252', '6086', '812'); -INSERT INTO cp_tree VALUES ('6118', '3', '813', '252', '6086', '814'); -INSERT INTO cp_tree VALUES ('6119', '3', '815', '252', '6086', '816'); -INSERT INTO cp_tree VALUES ('6120', '3', '817', '252', '6086', '818'); -INSERT INTO cp_tree VALUES ('6121', '3', '819', '252', '6086', '820'); -INSERT INTO cp_tree VALUES ('6122', '3', '821', '252', '6086', '822'); -INSERT INTO cp_tree VALUES ('6123', '3', '823', '252', '6086', '824'); -INSERT INTO cp_tree VALUES ('6124', '3', '825', '252', '6086', '826'); -INSERT INTO cp_tree VALUES ('6125', '3', '827', '252', '6086', '828'); -INSERT INTO cp_tree VALUES ('6126', '3', '829', '252', '6086', '830'); -INSERT INTO cp_tree VALUES ('6127', '3', '831', '252', '6086', '832'); -INSERT INTO cp_tree VALUES ('6128', '3', '833', '252', '6086', '834'); -INSERT INTO cp_tree VALUES ('6129', '3', '835', '252', '6086', '836'); -INSERT INTO cp_tree VALUES ('6130', '3', '837', '252', '6086', '838'); -INSERT INTO cp_tree VALUES ('6131', '3', '839', '252', '6086', '840'); -INSERT INTO cp_tree VALUES ('6132', '3', '841', '252', '6086', '842'); -INSERT INTO cp_tree VALUES ('6133', '3', '843', '252', '6086', '844'); -INSERT INTO cp_tree VALUES ('6134', '3', '845', '252', '6086', '846'); -INSERT INTO cp_tree VALUES ('6135', '3', '847', '252', '6086', '848'); -INSERT INTO cp_tree VALUES ('6136', '3', '849', '252', '6086', '850'); -INSERT INTO cp_tree VALUES ('6137', '3', '851', '252', '6086', '852'); -INSERT INTO cp_tree VALUES ('6138', '3', '853', '252', '6086', '854'); -INSERT INTO cp_tree VALUES ('6139', '3', '855', '252', '6086', '856'); -INSERT INTO cp_tree VALUES ('6140', '3', '857', '252', '6086', '858'); -INSERT INTO cp_tree VALUES ('6141', '3', '859', '252', '6086', '860'); -INSERT INTO cp_tree VALUES ('6142', '3', '861', '252', '6086', '862'); -INSERT INTO cp_tree VALUES ('6143', '3', '863', '252', '6086', '864'); -INSERT INTO cp_tree VALUES ('6144', '3', '865', '252', '6086', '866'); -INSERT INTO cp_tree VALUES ('6145', '3', '867', '252', '6086', '868'); -INSERT INTO cp_tree VALUES ('6146', '3', '869', '252', '6086', '870'); -INSERT INTO cp_tree VALUES ('6147', '3', '871', '252', '6086', '872'); -INSERT INTO cp_tree VALUES ('6148', '3', '873', '252', '6086', '874'); -INSERT INTO cp_tree VALUES ('6149', '3', '875', '252', '6086', '876'); -INSERT INTO cp_tree VALUES ('6150', '3', '877', '252', '6086', '878'); -INSERT INTO cp_tree VALUES ('6151', '3', '879', '252', '6086', '880'); -INSERT INTO cp_tree VALUES ('6152', '3', '881', '252', '6086', '882'); -INSERT INTO cp_tree VALUES ('6153', '3', '883', '252', '6086', '884'); -INSERT INTO cp_tree VALUES ('6154', '3', '885', '252', '6086', '886'); -INSERT INTO cp_tree VALUES ('6155', '2', '888', '252', '5711', '923'); -INSERT INTO cp_tree VALUES ('6156', '3', '889', '252', '6155', '890'); -INSERT INTO cp_tree VALUES ('6157', '3', '891', '252', '6155', '892'); -INSERT INTO cp_tree VALUES ('6158', '3', '893', '252', '6155', '894'); -INSERT INTO cp_tree VALUES ('6159', '3', '895', '252', '6155', '896'); -INSERT INTO cp_tree VALUES ('6160', '3', '897', '252', '6155', '898'); -INSERT INTO cp_tree VALUES ('6161', '3', '899', '252', '6155', '900'); -INSERT INTO cp_tree VALUES ('6162', '3', '901', '252', '6155', '902'); -INSERT INTO cp_tree VALUES ('6163', '3', '903', '252', '6155', '904'); -INSERT INTO cp_tree VALUES ('6164', '3', '905', '252', '6155', '906'); -INSERT INTO cp_tree VALUES ('6165', '3', '907', '252', '6155', '908'); -INSERT INTO cp_tree VALUES ('6166', '3', '909', '252', '6155', '910'); -INSERT INTO cp_tree VALUES ('6167', '3', '911', '252', '6155', '912'); -INSERT INTO cp_tree VALUES ('6168', '3', '913', '252', '6155', '914'); -INSERT INTO cp_tree VALUES ('6169', '3', '915', '252', '6155', '916'); -INSERT INTO cp_tree VALUES ('6170', '3', '917', '252', '6155', '918'); -INSERT INTO cp_tree VALUES ('6171', '3', '919', '252', '6155', '920'); -INSERT INTO cp_tree VALUES ('6172', '3', '921', '252', '6155', '922'); -INSERT INTO cp_tree VALUES ('6173', '1', '1', '253', '0', '402'); -INSERT INTO cp_tree VALUES ('6174', '2', '2', '253', '6173', '49'); -INSERT INTO cp_tree VALUES ('6175', '3', '3', '253', '6174', '4'); -INSERT INTO cp_tree VALUES ('6176', '3', '5', '253', '6174', '14'); -INSERT INTO cp_tree VALUES ('6177', '4', '6', '253', '6176', '7'); -INSERT INTO cp_tree VALUES ('6178', '4', '8', '253', '6176', '9'); -INSERT INTO cp_tree VALUES ('6179', '4', '10', '253', '6176', '11'); -INSERT INTO cp_tree VALUES ('6180', '4', '12', '253', '6176', '13'); -INSERT INTO cp_tree VALUES ('6181', '3', '15', '253', '6174', '22'); -INSERT INTO cp_tree VALUES ('6182', '4', '16', '253', '6181', '17'); -INSERT INTO cp_tree VALUES ('6183', '4', '18', '253', '6181', '19'); -INSERT INTO cp_tree VALUES ('6184', '4', '20', '253', '6181', '21'); -INSERT INTO cp_tree VALUES ('6185', '3', '23', '253', '6174', '28'); -INSERT INTO cp_tree VALUES ('6186', '4', '24', '253', '6185', '25'); -INSERT INTO cp_tree VALUES ('6187', '4', '26', '253', '6185', '27'); -INSERT INTO cp_tree VALUES ('6188', '3', '29', '253', '6174', '48'); -INSERT INTO cp_tree VALUES ('6189', '4', '30', '253', '6188', '31'); -INSERT INTO cp_tree VALUES ('6190', '4', '32', '253', '6188', '33'); -INSERT INTO cp_tree VALUES ('6191', '4', '34', '253', '6188', '35'); -INSERT INTO cp_tree VALUES ('6192', '4', '36', '253', '6188', '37'); -INSERT INTO cp_tree VALUES ('6193', '4', '38', '253', '6188', '39'); -INSERT INTO cp_tree VALUES ('6194', '4', '40', '253', '6188', '41'); -INSERT INTO cp_tree VALUES ('6195', '4', '42', '253', '6188', '43'); -INSERT INTO cp_tree VALUES ('6196', '4', '44', '253', '6188', '45'); -INSERT INTO cp_tree VALUES ('6197', '4', '46', '253', '6188', '47'); -INSERT INTO cp_tree VALUES ('6198', '2', '50', '253', '6173', '59'); -INSERT INTO cp_tree VALUES ('6199', '3', '51', '253', '6198', '52'); -INSERT INTO cp_tree VALUES ('6200', '3', '53', '253', '6198', '54'); -INSERT INTO cp_tree VALUES ('6201', '3', '55', '253', '6198', '56'); -INSERT INTO cp_tree VALUES ('6202', '3', '57', '253', '6198', '58'); -INSERT INTO cp_tree VALUES ('6203', '2', '60', '253', '6173', '75'); -INSERT INTO cp_tree VALUES ('6204', '3', '61', '253', '6203', '62'); -INSERT INTO cp_tree VALUES ('6205', '3', '63', '253', '6203', '64'); -INSERT INTO cp_tree VALUES ('6206', '3', '65', '253', '6203', '66'); -INSERT INTO cp_tree VALUES ('6207', '3', '67', '253', '6203', '68'); -INSERT INTO cp_tree VALUES ('6208', '3', '69', '253', '6203', '70'); -INSERT INTO cp_tree VALUES ('6209', '3', '71', '253', '6203', '72'); -INSERT INTO cp_tree VALUES ('6210', '3', '73', '253', '6203', '74'); -INSERT INTO cp_tree VALUES ('6211', '2', '76', '253', '6173', '109'); -INSERT INTO cp_tree VALUES ('6212', '3', '77', '253', '6211', '78'); -INSERT INTO cp_tree VALUES ('6213', '3', '79', '253', '6211', '80'); -INSERT INTO cp_tree VALUES ('6214', '3', '81', '253', '6211', '82'); -INSERT INTO cp_tree VALUES ('6215', '3', '83', '253', '6211', '84'); -INSERT INTO cp_tree VALUES ('6216', '3', '85', '253', '6211', '86'); -INSERT INTO cp_tree VALUES ('6217', '3', '87', '253', '6211', '88'); -INSERT INTO cp_tree VALUES ('6218', '3', '89', '253', '6211', '90'); -INSERT INTO cp_tree VALUES ('6219', '3', '91', '253', '6211', '92'); -INSERT INTO cp_tree VALUES ('6220', '3', '93', '253', '6211', '94'); -INSERT INTO cp_tree VALUES ('6221', '3', '95', '253', '6211', '96'); -INSERT INTO cp_tree VALUES ('6222', '3', '97', '253', '6211', '98'); -INSERT INTO cp_tree VALUES ('6223', '3', '99', '253', '6211', '100'); -INSERT INTO cp_tree VALUES ('6224', '3', '101', '253', '6211', '102'); -INSERT INTO cp_tree VALUES ('6225', '3', '103', '253', '6211', '104'); -INSERT INTO cp_tree VALUES ('6226', '3', '105', '253', '6211', '106'); -INSERT INTO cp_tree VALUES ('6227', '3', '107', '253', '6211', '108'); -INSERT INTO cp_tree VALUES ('6228', '2', '110', '253', '6173', '125'); -INSERT INTO cp_tree VALUES ('6229', '3', '111', '253', '6228', '112'); -INSERT INTO cp_tree VALUES ('6230', '3', '113', '253', '6228', '114'); -INSERT INTO cp_tree VALUES ('6231', '3', '115', '253', '6228', '116'); -INSERT INTO cp_tree VALUES ('6232', '3', '117', '253', '6228', '118'); -INSERT INTO cp_tree VALUES ('6233', '3', '119', '253', '6228', '120'); -INSERT INTO cp_tree VALUES ('6234', '3', '121', '253', '6228', '122'); -INSERT INTO cp_tree VALUES ('6235', '3', '123', '253', '6228', '124'); -INSERT INTO cp_tree VALUES ('6236', '2', '126', '253', '6173', '155'); -INSERT INTO cp_tree VALUES ('6237', '3', '127', '253', '6236', '128'); -INSERT INTO cp_tree VALUES ('6238', '3', '129', '253', '6236', '130'); -INSERT INTO cp_tree VALUES ('6239', '3', '131', '253', '6236', '132'); -INSERT INTO cp_tree VALUES ('6240', '3', '133', '253', '6236', '134'); -INSERT INTO cp_tree VALUES ('6241', '3', '135', '253', '6236', '136'); -INSERT INTO cp_tree VALUES ('6242', '3', '137', '253', '6236', '138'); -INSERT INTO cp_tree VALUES ('6243', '3', '139', '253', '6236', '140'); -INSERT INTO cp_tree VALUES ('6244', '3', '141', '253', '6236', '142'); -INSERT INTO cp_tree VALUES ('6245', '3', '143', '253', '6236', '144'); -INSERT INTO cp_tree VALUES ('6246', '3', '145', '253', '6236', '146'); -INSERT INTO cp_tree VALUES ('6247', '3', '147', '253', '6236', '148'); -INSERT INTO cp_tree VALUES ('6248', '3', '149', '253', '6236', '150'); -INSERT INTO cp_tree VALUES ('6249', '3', '151', '253', '6236', '152'); -INSERT INTO cp_tree VALUES ('6250', '3', '153', '253', '6236', '154'); -INSERT INTO cp_tree VALUES ('6251', '2', '156', '253', '6173', '179'); -INSERT INTO cp_tree VALUES ('6252', '3', '157', '253', '6251', '158'); -INSERT INTO cp_tree VALUES ('6253', '3', '159', '253', '6251', '160'); -INSERT INTO cp_tree VALUES ('6254', '3', '161', '253', '6251', '162'); -INSERT INTO cp_tree VALUES ('6255', '3', '163', '253', '6251', '164'); -INSERT INTO cp_tree VALUES ('6256', '3', '165', '253', '6251', '166'); -INSERT INTO cp_tree VALUES ('6257', '3', '167', '253', '6251', '168'); -INSERT INTO cp_tree VALUES ('6258', '3', '169', '253', '6251', '170'); -INSERT INTO cp_tree VALUES ('6259', '3', '171', '253', '6251', '172'); -INSERT INTO cp_tree VALUES ('6260', '3', '173', '253', '6251', '174'); -INSERT INTO cp_tree VALUES ('6261', '3', '175', '253', '6251', '176'); -INSERT INTO cp_tree VALUES ('6262', '3', '177', '253', '6251', '178'); -INSERT INTO cp_tree VALUES ('6263', '2', '180', '253', '6173', '203'); -INSERT INTO cp_tree VALUES ('6264', '3', '181', '253', '6263', '182'); -INSERT INTO cp_tree VALUES ('6265', '3', '183', '253', '6263', '184'); -INSERT INTO cp_tree VALUES ('6266', '3', '185', '253', '6263', '186'); -INSERT INTO cp_tree VALUES ('6267', '3', '187', '253', '6263', '188'); -INSERT INTO cp_tree VALUES ('6268', '3', '189', '253', '6263', '190'); -INSERT INTO cp_tree VALUES ('6269', '3', '191', '253', '6263', '192'); -INSERT INTO cp_tree VALUES ('6270', '3', '193', '253', '6263', '194'); -INSERT INTO cp_tree VALUES ('6271', '3', '195', '253', '6263', '196'); -INSERT INTO cp_tree VALUES ('6272', '3', '197', '253', '6263', '198'); -INSERT INTO cp_tree VALUES ('6273', '3', '199', '253', '6263', '200'); -INSERT INTO cp_tree VALUES ('6274', '3', '201', '253', '6263', '202'); -INSERT INTO cp_tree VALUES ('6275', '2', '204', '253', '6173', '227'); -INSERT INTO cp_tree VALUES ('6276', '3', '205', '253', '6275', '206'); -INSERT INTO cp_tree VALUES ('6277', '3', '207', '253', '6275', '208'); -INSERT INTO cp_tree VALUES ('6278', '3', '209', '253', '6275', '210'); -INSERT INTO cp_tree VALUES ('6279', '3', '211', '253', '6275', '212'); -INSERT INTO cp_tree VALUES ('6280', '3', '213', '253', '6275', '214'); -INSERT INTO cp_tree VALUES ('6281', '3', '215', '253', '6275', '216'); -INSERT INTO cp_tree VALUES ('6282', '3', '217', '253', '6275', '218'); -INSERT INTO cp_tree VALUES ('6283', '3', '219', '253', '6275', '220'); -INSERT INTO cp_tree VALUES ('6284', '3', '221', '253', '6275', '222'); -INSERT INTO cp_tree VALUES ('6285', '3', '223', '253', '6275', '224'); -INSERT INTO cp_tree VALUES ('6286', '3', '225', '253', '6275', '226'); -INSERT INTO cp_tree VALUES ('6287', '2', '228', '253', '6173', '269'); -INSERT INTO cp_tree VALUES ('6288', '3', '229', '253', '6287', '230'); -INSERT INTO cp_tree VALUES ('6289', '3', '231', '253', '6287', '232'); -INSERT INTO cp_tree VALUES ('6290', '3', '233', '253', '6287', '234'); -INSERT INTO cp_tree VALUES ('6291', '3', '235', '253', '6287', '236'); -INSERT INTO cp_tree VALUES ('6292', '3', '237', '253', '6287', '238'); -INSERT INTO cp_tree VALUES ('6293', '3', '239', '253', '6287', '240'); -INSERT INTO cp_tree VALUES ('6294', '3', '241', '253', '6287', '242'); -INSERT INTO cp_tree VALUES ('6295', '3', '243', '253', '6287', '244'); -INSERT INTO cp_tree VALUES ('6296', '3', '245', '253', '6287', '246'); -INSERT INTO cp_tree VALUES ('6297', '3', '247', '253', '6287', '248'); -INSERT INTO cp_tree VALUES ('6298', '3', '249', '253', '6287', '250'); -INSERT INTO cp_tree VALUES ('6299', '3', '251', '253', '6287', '252'); -INSERT INTO cp_tree VALUES ('6300', '3', '253', '253', '6287', '254'); -INSERT INTO cp_tree VALUES ('6301', '3', '255', '253', '6287', '256'); -INSERT INTO cp_tree VALUES ('6302', '3', '257', '253', '6287', '258'); -INSERT INTO cp_tree VALUES ('6303', '3', '259', '253', '6287', '260'); -INSERT INTO cp_tree VALUES ('6304', '3', '261', '253', '6287', '262'); -INSERT INTO cp_tree VALUES ('6305', '3', '263', '253', '6287', '264'); -INSERT INTO cp_tree VALUES ('6306', '3', '265', '253', '6287', '266'); -INSERT INTO cp_tree VALUES ('6307', '3', '267', '253', '6287', '268'); -INSERT INTO cp_tree VALUES ('6308', '2', '270', '253', '6173', '317'); -INSERT INTO cp_tree VALUES ('6309', '3', '271', '253', '6308', '272'); -INSERT INTO cp_tree VALUES ('6310', '3', '273', '253', '6308', '274'); -INSERT INTO cp_tree VALUES ('6311', '3', '275', '253', '6308', '276'); -INSERT INTO cp_tree VALUES ('6312', '3', '277', '253', '6308', '278'); -INSERT INTO cp_tree VALUES ('6313', '3', '279', '253', '6308', '280'); -INSERT INTO cp_tree VALUES ('6314', '3', '281', '253', '6308', '282'); -INSERT INTO cp_tree VALUES ('6315', '3', '283', '253', '6308', '284'); -INSERT INTO cp_tree VALUES ('6316', '3', '285', '253', '6308', '286'); -INSERT INTO cp_tree VALUES ('6317', '3', '287', '253', '6308', '288'); -INSERT INTO cp_tree VALUES ('6318', '3', '289', '253', '6308', '290'); -INSERT INTO cp_tree VALUES ('6319', '3', '291', '253', '6308', '292'); -INSERT INTO cp_tree VALUES ('6320', '3', '293', '253', '6308', '294'); -INSERT INTO cp_tree VALUES ('6321', '3', '295', '253', '6308', '296'); -INSERT INTO cp_tree VALUES ('6322', '3', '297', '253', '6308', '298'); -INSERT INTO cp_tree VALUES ('6323', '3', '299', '253', '6308', '300'); -INSERT INTO cp_tree VALUES ('6324', '3', '301', '253', '6308', '302'); -INSERT INTO cp_tree VALUES ('6325', '3', '303', '253', '6308', '304'); -INSERT INTO cp_tree VALUES ('6326', '3', '305', '253', '6308', '306'); -INSERT INTO cp_tree VALUES ('6327', '3', '307', '253', '6308', '308'); -INSERT INTO cp_tree VALUES ('6328', '3', '309', '253', '6308', '310'); -INSERT INTO cp_tree VALUES ('6329', '3', '311', '253', '6308', '312'); -INSERT INTO cp_tree VALUES ('6330', '3', '313', '253', '6308', '314'); -INSERT INTO cp_tree VALUES ('6331', '3', '315', '253', '6308', '316'); -INSERT INTO cp_tree VALUES ('6332', '2', '318', '253', '6173', '323'); -INSERT INTO cp_tree VALUES ('6333', '3', '319', '253', '6332', '320'); -INSERT INTO cp_tree VALUES ('6334', '3', '321', '253', '6332', '322'); -INSERT INTO cp_tree VALUES ('6335', '2', '324', '253', '6173', '329'); -INSERT INTO cp_tree VALUES ('6336', '3', '325', '253', '6335', '326'); -INSERT INTO cp_tree VALUES ('6337', '3', '327', '253', '6335', '328'); -INSERT INTO cp_tree VALUES ('6338', '2', '330', '253', '6173', '335'); -INSERT INTO cp_tree VALUES ('6339', '3', '331', '253', '6338', '332'); -INSERT INTO cp_tree VALUES ('6340', '3', '333', '253', '6338', '334'); -INSERT INTO cp_tree VALUES ('6341', '2', '336', '253', '6173', '341'); -INSERT INTO cp_tree VALUES ('6342', '3', '337', '253', '6341', '338'); -INSERT INTO cp_tree VALUES ('6343', '3', '339', '253', '6341', '340'); -INSERT INTO cp_tree VALUES ('6344', '2', '342', '253', '6173', '347'); -INSERT INTO cp_tree VALUES ('6345', '3', '343', '253', '6344', '344'); -INSERT INTO cp_tree VALUES ('6346', '3', '345', '253', '6344', '346'); -INSERT INTO cp_tree VALUES ('6347', '2', '348', '253', '6173', '353'); -INSERT INTO cp_tree VALUES ('6348', '3', '349', '253', '6347', '350'); -INSERT INTO cp_tree VALUES ('6349', '3', '351', '253', '6347', '352'); -INSERT INTO cp_tree VALUES ('6350', '2', '354', '253', '6173', '359'); -INSERT INTO cp_tree VALUES ('6351', '3', '355', '253', '6350', '356'); -INSERT INTO cp_tree VALUES ('6352', '3', '357', '253', '6350', '358'); -INSERT INTO cp_tree VALUES ('6353', '2', '360', '253', '6173', '365'); -INSERT INTO cp_tree VALUES ('6354', '3', '361', '253', '6353', '362'); -INSERT INTO cp_tree VALUES ('6355', '3', '363', '253', '6353', '364'); -INSERT INTO cp_tree VALUES ('6356', '2', '366', '253', '6173', '371'); -INSERT INTO cp_tree VALUES ('6357', '3', '367', '253', '6356', '368'); -INSERT INTO cp_tree VALUES ('6358', '3', '369', '253', '6356', '370'); -INSERT INTO cp_tree VALUES ('6359', '2', '372', '253', '6173', '373'); -INSERT INTO cp_tree VALUES ('6360', '2', '374', '253', '6173', '375'); -INSERT INTO cp_tree VALUES ('6361', '2', '376', '253', '6173', '377'); -INSERT INTO cp_tree VALUES ('6362', '2', '378', '253', '6173', '379'); -INSERT INTO cp_tree VALUES ('6363', '2', '380', '253', '6173', '387'); -INSERT INTO cp_tree VALUES ('6364', '3', '381', '253', '6363', '384'); -INSERT INTO cp_tree VALUES ('6365', '4', '382', '253', '6364', '383'); -INSERT INTO cp_tree VALUES ('6366', '3', '385', '253', '6363', '386'); -INSERT INTO cp_tree VALUES ('6367', '2', '388', '253', '6173', '401'); -INSERT INTO cp_tree VALUES ('6368', '3', '389', '253', '6367', '392'); -INSERT INTO cp_tree VALUES ('6369', '4', '390', '253', '6368', '391'); -INSERT INTO cp_tree VALUES ('6370', '3', '393', '253', '6367', '396'); -INSERT INTO cp_tree VALUES ('6371', '4', '394', '253', '6370', '395'); -INSERT INTO cp_tree VALUES ('6372', '3', '397', '253', '6367', '400'); -INSERT INTO cp_tree VALUES ('6373', '4', '398', '253', '6372', '399'); -INSERT INTO cp_tree VALUES ('6374', '1', '1', '279', '0', '456'); -INSERT INTO cp_tree VALUES ('6375', '2', '2', '279', '6374', '81'); -INSERT INTO cp_tree VALUES ('6376', '3', '3', '279', '6375', '6'); -INSERT INTO cp_tree VALUES ('6377', '4', '4', '279', '6376', '5'); -INSERT INTO cp_tree VALUES ('6378', '3', '7', '279', '6375', '12'); -INSERT INTO cp_tree VALUES ('6379', '4', '8', '279', '6378', '9'); -INSERT INTO cp_tree VALUES ('6380', '4', '10', '279', '6378', '11'); -INSERT INTO cp_tree VALUES ('6381', '3', '13', '279', '6375', '18'); -INSERT INTO cp_tree VALUES ('6382', '4', '14', '279', '6381', '15'); -INSERT INTO cp_tree VALUES ('6383', '4', '16', '279', '6381', '17'); -INSERT INTO cp_tree VALUES ('6384', '3', '19', '279', '6375', '24'); -INSERT INTO cp_tree VALUES ('6385', '4', '20', '279', '6384', '21'); -INSERT INTO cp_tree VALUES ('6386', '4', '22', '279', '6384', '23'); -INSERT INTO cp_tree VALUES ('6387', '3', '25', '279', '6375', '80'); -INSERT INTO cp_tree VALUES ('6388', '4', '26', '279', '6387', '31'); -INSERT INTO cp_tree VALUES ('6389', '5', '27', '279', '6388', '28'); -INSERT INTO cp_tree VALUES ('6390', '5', '29', '279', '6388', '30'); -INSERT INTO cp_tree VALUES ('6391', '4', '32', '279', '6387', '37'); -INSERT INTO cp_tree VALUES ('6392', '5', '33', '279', '6391', '34'); -INSERT INTO cp_tree VALUES ('6393', '5', '35', '279', '6391', '36'); -INSERT INTO cp_tree VALUES ('6394', '4', '38', '279', '6387', '43'); -INSERT INTO cp_tree VALUES ('6395', '5', '39', '279', '6394', '40'); -INSERT INTO cp_tree VALUES ('6396', '5', '41', '279', '6394', '42'); -INSERT INTO cp_tree VALUES ('6397', '4', '44', '279', '6387', '49'); -INSERT INTO cp_tree VALUES ('6398', '5', '45', '279', '6397', '46'); -INSERT INTO cp_tree VALUES ('6399', '5', '47', '279', '6397', '48'); -INSERT INTO cp_tree VALUES ('6400', '4', '50', '279', '6387', '55'); -INSERT INTO cp_tree VALUES ('6401', '5', '51', '279', '6400', '52'); -INSERT INTO cp_tree VALUES ('6402', '5', '53', '279', '6400', '54'); -INSERT INTO cp_tree VALUES ('6403', '4', '56', '279', '6387', '61'); -INSERT INTO cp_tree VALUES ('6404', '5', '57', '279', '6403', '58'); -INSERT INTO cp_tree VALUES ('6405', '5', '59', '279', '6403', '60'); -INSERT INTO cp_tree VALUES ('6406', '4', '62', '279', '6387', '67'); -INSERT INTO cp_tree VALUES ('6407', '5', '63', '279', '6406', '64'); -INSERT INTO cp_tree VALUES ('6408', '5', '65', '279', '6406', '66'); -INSERT INTO cp_tree VALUES ('6409', '4', '68', '279', '6387', '73'); -INSERT INTO cp_tree VALUES ('6410', '5', '69', '279', '6409', '70'); -INSERT INTO cp_tree VALUES ('6411', '5', '71', '279', '6409', '72'); -INSERT INTO cp_tree VALUES ('6412', '4', '74', '279', '6387', '79'); -INSERT INTO cp_tree VALUES ('6413', '5', '75', '279', '6412', '76'); -INSERT INTO cp_tree VALUES ('6414', '5', '77', '279', '6412', '78'); -INSERT INTO cp_tree VALUES ('6415', '2', '82', '279', '6374', '95'); -INSERT INTO cp_tree VALUES ('6416', '3', '83', '279', '6415', '84'); -INSERT INTO cp_tree VALUES ('6417', '3', '85', '279', '6415', '86'); -INSERT INTO cp_tree VALUES ('6418', '3', '87', '279', '6415', '88'); -INSERT INTO cp_tree VALUES ('6419', '3', '89', '279', '6415', '90'); -INSERT INTO cp_tree VALUES ('6420', '3', '91', '279', '6415', '92'); -INSERT INTO cp_tree VALUES ('6421', '3', '93', '279', '6415', '94'); -INSERT INTO cp_tree VALUES ('6422', '2', '96', '279', '6374', '189'); -INSERT INTO cp_tree VALUES ('6423', '3', '97', '279', '6422', '98'); -INSERT INTO cp_tree VALUES ('6424', '3', '99', '279', '6422', '100'); -INSERT INTO cp_tree VALUES ('6425', '3', '101', '279', '6422', '102'); -INSERT INTO cp_tree VALUES ('6426', '3', '103', '279', '6422', '104'); -INSERT INTO cp_tree VALUES ('6427', '3', '105', '279', '6422', '106'); -INSERT INTO cp_tree VALUES ('6428', '3', '107', '279', '6422', '108'); -INSERT INTO cp_tree VALUES ('6429', '3', '109', '279', '6422', '110'); -INSERT INTO cp_tree VALUES ('6430', '3', '111', '279', '6422', '112'); -INSERT INTO cp_tree VALUES ('6431', '3', '113', '279', '6422', '114'); -INSERT INTO cp_tree VALUES ('6432', '3', '115', '279', '6422', '116'); -INSERT INTO cp_tree VALUES ('6433', '3', '117', '279', '6422', '118'); -INSERT INTO cp_tree VALUES ('6434', '3', '119', '279', '6422', '120'); -INSERT INTO cp_tree VALUES ('6435', '3', '121', '279', '6422', '122'); -INSERT INTO cp_tree VALUES ('6436', '3', '123', '279', '6422', '124'); -INSERT INTO cp_tree VALUES ('6437', '3', '125', '279', '6422', '126'); -INSERT INTO cp_tree VALUES ('6438', '3', '127', '279', '6422', '128'); -INSERT INTO cp_tree VALUES ('6439', '3', '129', '279', '6422', '130'); -INSERT INTO cp_tree VALUES ('6440', '3', '131', '279', '6422', '132'); -INSERT INTO cp_tree VALUES ('6441', '3', '133', '279', '6422', '134'); -INSERT INTO cp_tree VALUES ('6442', '3', '135', '279', '6422', '136'); -INSERT INTO cp_tree VALUES ('6443', '3', '137', '279', '6422', '138'); -INSERT INTO cp_tree VALUES ('6444', '3', '139', '279', '6422', '140'); -INSERT INTO cp_tree VALUES ('6445', '3', '141', '279', '6422', '142'); -INSERT INTO cp_tree VALUES ('6446', '3', '143', '279', '6422', '144'); -INSERT INTO cp_tree VALUES ('6447', '3', '145', '279', '6422', '146'); -INSERT INTO cp_tree VALUES ('6448', '3', '147', '279', '6422', '148'); -INSERT INTO cp_tree VALUES ('6449', '3', '149', '279', '6422', '150'); -INSERT INTO cp_tree VALUES ('6450', '3', '151', '279', '6422', '152'); -INSERT INTO cp_tree VALUES ('6451', '3', '153', '279', '6422', '154'); -INSERT INTO cp_tree VALUES ('6452', '3', '155', '279', '6422', '156'); -INSERT INTO cp_tree VALUES ('6453', '3', '157', '279', '6422', '158'); -INSERT INTO cp_tree VALUES ('6454', '3', '159', '279', '6422', '160'); -INSERT INTO cp_tree VALUES ('6455', '3', '161', '279', '6422', '162'); -INSERT INTO cp_tree VALUES ('6456', '3', '163', '279', '6422', '164'); -INSERT INTO cp_tree VALUES ('6457', '3', '165', '279', '6422', '166'); -INSERT INTO cp_tree VALUES ('6458', '3', '167', '279', '6422', '168'); -INSERT INTO cp_tree VALUES ('6459', '3', '169', '279', '6422', '170'); -INSERT INTO cp_tree VALUES ('6460', '3', '171', '279', '6422', '172'); -INSERT INTO cp_tree VALUES ('6461', '3', '173', '279', '6422', '174'); -INSERT INTO cp_tree VALUES ('6462', '3', '175', '279', '6422', '176'); -INSERT INTO cp_tree VALUES ('6463', '3', '177', '279', '6422', '178'); -INSERT INTO cp_tree VALUES ('6464', '3', '179', '279', '6422', '180'); -INSERT INTO cp_tree VALUES ('6465', '3', '181', '279', '6422', '182'); -INSERT INTO cp_tree VALUES ('6466', '3', '183', '279', '6422', '184'); -INSERT INTO cp_tree VALUES ('6467', '3', '185', '279', '6422', '186'); -INSERT INTO cp_tree VALUES ('6468', '3', '187', '279', '6422', '188'); -INSERT INTO cp_tree VALUES ('6469', '2', '190', '279', '6374', '261'); -INSERT INTO cp_tree VALUES ('6470', '3', '191', '279', '6469', '192'); -INSERT INTO cp_tree VALUES ('6471', '3', '193', '279', '6469', '194'); -INSERT INTO cp_tree VALUES ('6472', '3', '195', '279', '6469', '196'); -INSERT INTO cp_tree VALUES ('6473', '3', '197', '279', '6469', '198'); -INSERT INTO cp_tree VALUES ('6474', '3', '199', '279', '6469', '200'); -INSERT INTO cp_tree VALUES ('6475', '3', '201', '279', '6469', '202'); -INSERT INTO cp_tree VALUES ('6476', '3', '203', '279', '6469', '204'); -INSERT INTO cp_tree VALUES ('6477', '3', '205', '279', '6469', '206'); -INSERT INTO cp_tree VALUES ('6478', '3', '207', '279', '6469', '208'); -INSERT INTO cp_tree VALUES ('6479', '3', '209', '279', '6469', '210'); -INSERT INTO cp_tree VALUES ('6480', '3', '211', '279', '6469', '212'); -INSERT INTO cp_tree VALUES ('6481', '3', '213', '279', '6469', '214'); -INSERT INTO cp_tree VALUES ('6482', '3', '215', '279', '6469', '216'); -INSERT INTO cp_tree VALUES ('6483', '3', '217', '279', '6469', '218'); -INSERT INTO cp_tree VALUES ('6484', '3', '219', '279', '6469', '220'); -INSERT INTO cp_tree VALUES ('6485', '3', '221', '279', '6469', '222'); -INSERT INTO cp_tree VALUES ('6486', '3', '223', '279', '6469', '224'); -INSERT INTO cp_tree VALUES ('6487', '3', '225', '279', '6469', '226'); -INSERT INTO cp_tree VALUES ('6488', '3', '227', '279', '6469', '228'); -INSERT INTO cp_tree VALUES ('6489', '3', '229', '279', '6469', '230'); -INSERT INTO cp_tree VALUES ('6490', '3', '231', '279', '6469', '232'); -INSERT INTO cp_tree VALUES ('6491', '3', '233', '279', '6469', '234'); -INSERT INTO cp_tree VALUES ('6492', '3', '235', '279', '6469', '236'); -INSERT INTO cp_tree VALUES ('6493', '3', '237', '279', '6469', '238'); -INSERT INTO cp_tree VALUES ('6494', '3', '239', '279', '6469', '240'); -INSERT INTO cp_tree VALUES ('6495', '3', '241', '279', '6469', '242'); -INSERT INTO cp_tree VALUES ('6496', '3', '243', '279', '6469', '244'); -INSERT INTO cp_tree VALUES ('6497', '3', '245', '279', '6469', '246'); -INSERT INTO cp_tree VALUES ('6498', '3', '247', '279', '6469', '248'); -INSERT INTO cp_tree VALUES ('6499', '3', '249', '279', '6469', '250'); -INSERT INTO cp_tree VALUES ('6500', '3', '251', '279', '6469', '252'); -INSERT INTO cp_tree VALUES ('6501', '3', '253', '279', '6469', '254'); -INSERT INTO cp_tree VALUES ('6502', '3', '255', '279', '6469', '256'); -INSERT INTO cp_tree VALUES ('6503', '3', '257', '279', '6469', '258'); -INSERT INTO cp_tree VALUES ('6504', '3', '259', '279', '6469', '260'); -INSERT INTO cp_tree VALUES ('6505', '2', '262', '279', '6374', '353'); -INSERT INTO cp_tree VALUES ('6506', '3', '263', '279', '6505', '264'); -INSERT INTO cp_tree VALUES ('6507', '3', '265', '279', '6505', '266'); -INSERT INTO cp_tree VALUES ('6508', '3', '267', '279', '6505', '268'); -INSERT INTO cp_tree VALUES ('6509', '3', '269', '279', '6505', '270'); -INSERT INTO cp_tree VALUES ('6510', '3', '271', '279', '6505', '272'); -INSERT INTO cp_tree VALUES ('6511', '3', '273', '279', '6505', '274'); -INSERT INTO cp_tree VALUES ('6512', '3', '275', '279', '6505', '276'); -INSERT INTO cp_tree VALUES ('6513', '3', '277', '279', '6505', '278'); -INSERT INTO cp_tree VALUES ('6514', '3', '279', '279', '6505', '280'); -INSERT INTO cp_tree VALUES ('6515', '3', '281', '279', '6505', '282'); -INSERT INTO cp_tree VALUES ('6516', '3', '283', '279', '6505', '284'); -INSERT INTO cp_tree VALUES ('6517', '3', '285', '279', '6505', '286'); -INSERT INTO cp_tree VALUES ('6518', '3', '287', '279', '6505', '288'); -INSERT INTO cp_tree VALUES ('6519', '3', '289', '279', '6505', '290'); -INSERT INTO cp_tree VALUES ('6520', '3', '291', '279', '6505', '292'); -INSERT INTO cp_tree VALUES ('6521', '3', '293', '279', '6505', '294'); -INSERT INTO cp_tree VALUES ('6522', '3', '295', '279', '6505', '296'); -INSERT INTO cp_tree VALUES ('6523', '3', '297', '279', '6505', '298'); -INSERT INTO cp_tree VALUES ('6524', '3', '299', '279', '6505', '300'); -INSERT INTO cp_tree VALUES ('6525', '3', '301', '279', '6505', '302'); -INSERT INTO cp_tree VALUES ('6526', '3', '303', '279', '6505', '304'); -INSERT INTO cp_tree VALUES ('6527', '3', '305', '279', '6505', '306'); -INSERT INTO cp_tree VALUES ('6528', '3', '307', '279', '6505', '308'); -INSERT INTO cp_tree VALUES ('6529', '3', '309', '279', '6505', '310'); -INSERT INTO cp_tree VALUES ('6530', '3', '311', '279', '6505', '312'); -INSERT INTO cp_tree VALUES ('6531', '3', '313', '279', '6505', '314'); -INSERT INTO cp_tree VALUES ('6532', '3', '315', '279', '6505', '316'); -INSERT INTO cp_tree VALUES ('6533', '3', '317', '279', '6505', '318'); -INSERT INTO cp_tree VALUES ('6534', '3', '319', '279', '6505', '320'); -INSERT INTO cp_tree VALUES ('6535', '3', '321', '279', '6505', '322'); -INSERT INTO cp_tree VALUES ('6536', '3', '323', '279', '6505', '324'); -INSERT INTO cp_tree VALUES ('6537', '3', '325', '279', '6505', '326'); -INSERT INTO cp_tree VALUES ('6538', '3', '327', '279', '6505', '328'); -INSERT INTO cp_tree VALUES ('6539', '3', '329', '279', '6505', '330'); -INSERT INTO cp_tree VALUES ('6540', '3', '331', '279', '6505', '332'); -INSERT INTO cp_tree VALUES ('6541', '3', '333', '279', '6505', '334'); -INSERT INTO cp_tree VALUES ('6542', '3', '335', '279', '6505', '336'); -INSERT INTO cp_tree VALUES ('6543', '3', '337', '279', '6505', '338'); -INSERT INTO cp_tree VALUES ('6544', '3', '339', '279', '6505', '340'); -INSERT INTO cp_tree VALUES ('6545', '3', '341', '279', '6505', '342'); -INSERT INTO cp_tree VALUES ('6546', '3', '343', '279', '6505', '344'); -INSERT INTO cp_tree VALUES ('6547', '3', '345', '279', '6505', '346'); -INSERT INTO cp_tree VALUES ('6548', '3', '347', '279', '6505', '348'); -INSERT INTO cp_tree VALUES ('6549', '3', '349', '279', '6505', '350'); -INSERT INTO cp_tree VALUES ('6550', '3', '351', '279', '6505', '352'); -INSERT INTO cp_tree VALUES ('6551', '2', '354', '279', '6374', '361'); -INSERT INTO cp_tree VALUES ('6552', '3', '355', '279', '6551', '356'); -INSERT INTO cp_tree VALUES ('6553', '3', '357', '279', '6551', '358'); -INSERT INTO cp_tree VALUES ('6554', '3', '359', '279', '6551', '360'); -INSERT INTO cp_tree VALUES ('6555', '2', '362', '279', '6374', '369'); -INSERT INTO cp_tree VALUES ('6556', '3', '363', '279', '6555', '364'); -INSERT INTO cp_tree VALUES ('6557', '3', '365', '279', '6555', '366'); -INSERT INTO cp_tree VALUES ('6558', '3', '367', '279', '6555', '368'); -INSERT INTO cp_tree VALUES ('6559', '2', '370', '279', '6374', '377'); -INSERT INTO cp_tree VALUES ('6560', '3', '371', '279', '6559', '372'); -INSERT INTO cp_tree VALUES ('6561', '3', '373', '279', '6559', '374'); -INSERT INTO cp_tree VALUES ('6562', '3', '375', '279', '6559', '376'); -INSERT INTO cp_tree VALUES ('6563', '2', '378', '279', '6374', '385'); -INSERT INTO cp_tree VALUES ('6564', '3', '379', '279', '6563', '380'); -INSERT INTO cp_tree VALUES ('6565', '3', '381', '279', '6563', '382'); -INSERT INTO cp_tree VALUES ('6566', '3', '383', '279', '6563', '384'); -INSERT INTO cp_tree VALUES ('6567', '2', '386', '279', '6374', '393'); -INSERT INTO cp_tree VALUES ('6568', '3', '387', '279', '6567', '388'); -INSERT INTO cp_tree VALUES ('6569', '3', '389', '279', '6567', '390'); -INSERT INTO cp_tree VALUES ('6570', '3', '391', '279', '6567', '392'); -INSERT INTO cp_tree VALUES ('6571', '2', '394', '279', '6374', '401'); -INSERT INTO cp_tree VALUES ('6572', '3', '395', '279', '6571', '396'); -INSERT INTO cp_tree VALUES ('6573', '3', '397', '279', '6571', '398'); -INSERT INTO cp_tree VALUES ('6574', '3', '399', '279', '6571', '400'); -INSERT INTO cp_tree VALUES ('6575', '2', '402', '279', '6374', '409'); -INSERT INTO cp_tree VALUES ('6576', '3', '403', '279', '6575', '404'); -INSERT INTO cp_tree VALUES ('6577', '3', '405', '279', '6575', '406'); -INSERT INTO cp_tree VALUES ('6578', '3', '407', '279', '6575', '408'); -INSERT INTO cp_tree VALUES ('6579', '2', '410', '279', '6374', '417'); -INSERT INTO cp_tree VALUES ('6580', '3', '411', '279', '6579', '412'); -INSERT INTO cp_tree VALUES ('6581', '3', '413', '279', '6579', '414'); -INSERT INTO cp_tree VALUES ('6582', '3', '415', '279', '6579', '416'); -INSERT INTO cp_tree VALUES ('6583', '2', '418', '279', '6374', '425'); -INSERT INTO cp_tree VALUES ('6584', '3', '419', '279', '6583', '420'); -INSERT INTO cp_tree VALUES ('6585', '3', '421', '279', '6583', '422'); -INSERT INTO cp_tree VALUES ('6586', '3', '423', '279', '6583', '424'); -INSERT INTO cp_tree VALUES ('6587', '2', '426', '279', '6374', '427'); -INSERT INTO cp_tree VALUES ('6588', '2', '428', '279', '6374', '429'); -INSERT INTO cp_tree VALUES ('6589', '2', '430', '279', '6374', '431'); -INSERT INTO cp_tree VALUES ('6590', '2', '432', '279', '6374', '433'); -INSERT INTO cp_tree VALUES ('6591', '2', '434', '279', '6374', '441'); -INSERT INTO cp_tree VALUES ('6592', '3', '435', '279', '6591', '438'); -INSERT INTO cp_tree VALUES ('6593', '4', '436', '279', '6592', '437'); -INSERT INTO cp_tree VALUES ('6594', '3', '439', '279', '6591', '440'); -INSERT INTO cp_tree VALUES ('6595', '2', '442', '279', '6374', '455'); -INSERT INTO cp_tree VALUES ('6596', '3', '443', '279', '6595', '446'); -INSERT INTO cp_tree VALUES ('6597', '4', '444', '279', '6596', '445'); -INSERT INTO cp_tree VALUES ('6598', '3', '447', '279', '6595', '450'); -INSERT INTO cp_tree VALUES ('6599', '4', '448', '279', '6598', '449'); -INSERT INTO cp_tree VALUES ('6600', '3', '451', '279', '6595', '454'); -INSERT INTO cp_tree VALUES ('6601', '4', '452', '279', '6600', '453'); -INSERT INTO cp_tree VALUES ('6602', '1', '1', '280', '0', '456'); -INSERT INTO cp_tree VALUES ('6603', '2', '2', '280', '6602', '81'); -INSERT INTO cp_tree VALUES ('6604', '3', '3', '280', '6603', '6'); -INSERT INTO cp_tree VALUES ('6605', '4', '4', '280', '6604', '5'); -INSERT INTO cp_tree VALUES ('6606', '3', '7', '280', '6603', '12'); -INSERT INTO cp_tree VALUES ('6607', '4', '8', '280', '6606', '9'); -INSERT INTO cp_tree VALUES ('6608', '4', '10', '280', '6606', '11'); -INSERT INTO cp_tree VALUES ('6609', '3', '13', '280', '6603', '18'); -INSERT INTO cp_tree VALUES ('6610', '4', '14', '280', '6609', '15'); -INSERT INTO cp_tree VALUES ('6611', '4', '16', '280', '6609', '17'); -INSERT INTO cp_tree VALUES ('6612', '3', '19', '280', '6603', '24'); -INSERT INTO cp_tree VALUES ('6613', '4', '20', '280', '6612', '21'); -INSERT INTO cp_tree VALUES ('6614', '4', '22', '280', '6612', '23'); -INSERT INTO cp_tree VALUES ('6615', '3', '25', '280', '6603', '80'); -INSERT INTO cp_tree VALUES ('6616', '4', '26', '280', '6615', '31'); -INSERT INTO cp_tree VALUES ('6617', '5', '27', '280', '6616', '28'); -INSERT INTO cp_tree VALUES ('6618', '5', '29', '280', '6616', '30'); -INSERT INTO cp_tree VALUES ('6619', '4', '32', '280', '6615', '37'); -INSERT INTO cp_tree VALUES ('6620', '5', '33', '280', '6619', '34'); -INSERT INTO cp_tree VALUES ('6621', '5', '35', '280', '6619', '36'); -INSERT INTO cp_tree VALUES ('6622', '4', '38', '280', '6615', '43'); -INSERT INTO cp_tree VALUES ('6623', '5', '39', '280', '6622', '40'); -INSERT INTO cp_tree VALUES ('6624', '5', '41', '280', '6622', '42'); -INSERT INTO cp_tree VALUES ('6625', '4', '44', '280', '6615', '49'); -INSERT INTO cp_tree VALUES ('6626', '5', '45', '280', '6625', '46'); -INSERT INTO cp_tree VALUES ('6627', '5', '47', '280', '6625', '48'); -INSERT INTO cp_tree VALUES ('6628', '4', '50', '280', '6615', '55'); -INSERT INTO cp_tree VALUES ('6629', '5', '51', '280', '6628', '52'); -INSERT INTO cp_tree VALUES ('6630', '5', '53', '280', '6628', '54'); -INSERT INTO cp_tree VALUES ('6631', '4', '56', '280', '6615', '61'); -INSERT INTO cp_tree VALUES ('6632', '5', '57', '280', '6631', '58'); -INSERT INTO cp_tree VALUES ('6633', '5', '59', '280', '6631', '60'); -INSERT INTO cp_tree VALUES ('6634', '4', '62', '280', '6615', '67'); -INSERT INTO cp_tree VALUES ('6635', '5', '63', '280', '6634', '64'); -INSERT INTO cp_tree VALUES ('6636', '5', '65', '280', '6634', '66'); -INSERT INTO cp_tree VALUES ('6637', '4', '68', '280', '6615', '73'); -INSERT INTO cp_tree VALUES ('6638', '5', '69', '280', '6637', '70'); -INSERT INTO cp_tree VALUES ('6639', '5', '71', '280', '6637', '72'); -INSERT INTO cp_tree VALUES ('6640', '4', '74', '280', '6615', '79'); -INSERT INTO cp_tree VALUES ('6641', '5', '75', '280', '6640', '76'); -INSERT INTO cp_tree VALUES ('6642', '5', '77', '280', '6640', '78'); -INSERT INTO cp_tree VALUES ('6643', '2', '82', '280', '6602', '95'); -INSERT INTO cp_tree VALUES ('6644', '3', '83', '280', '6643', '84'); -INSERT INTO cp_tree VALUES ('6645', '3', '85', '280', '6643', '86'); -INSERT INTO cp_tree VALUES ('6646', '3', '87', '280', '6643', '88'); -INSERT INTO cp_tree VALUES ('6647', '3', '89', '280', '6643', '90'); -INSERT INTO cp_tree VALUES ('6648', '3', '91', '280', '6643', '92'); -INSERT INTO cp_tree VALUES ('6649', '3', '93', '280', '6643', '94'); -INSERT INTO cp_tree VALUES ('6650', '2', '96', '280', '6602', '189'); -INSERT INTO cp_tree VALUES ('6651', '3', '97', '280', '6650', '98'); -INSERT INTO cp_tree VALUES ('6652', '3', '99', '280', '6650', '100'); -INSERT INTO cp_tree VALUES ('6653', '3', '101', '280', '6650', '102'); -INSERT INTO cp_tree VALUES ('6654', '3', '103', '280', '6650', '104'); -INSERT INTO cp_tree VALUES ('6655', '3', '105', '280', '6650', '106'); -INSERT INTO cp_tree VALUES ('6656', '3', '107', '280', '6650', '108'); -INSERT INTO cp_tree VALUES ('6657', '3', '109', '280', '6650', '110'); -INSERT INTO cp_tree VALUES ('6658', '3', '111', '280', '6650', '112'); -INSERT INTO cp_tree VALUES ('6659', '3', '113', '280', '6650', '114'); -INSERT INTO cp_tree VALUES ('6660', '3', '115', '280', '6650', '116'); -INSERT INTO cp_tree VALUES ('6661', '3', '117', '280', '6650', '118'); -INSERT INTO cp_tree VALUES ('6662', '3', '119', '280', '6650', '120'); -INSERT INTO cp_tree VALUES ('6663', '3', '121', '280', '6650', '122'); -INSERT INTO cp_tree VALUES ('6664', '3', '123', '280', '6650', '124'); -INSERT INTO cp_tree VALUES ('6665', '3', '125', '280', '6650', '126'); -INSERT INTO cp_tree VALUES ('6666', '3', '127', '280', '6650', '128'); -INSERT INTO cp_tree VALUES ('6667', '3', '129', '280', '6650', '130'); -INSERT INTO cp_tree VALUES ('6668', '3', '131', '280', '6650', '132'); -INSERT INTO cp_tree VALUES ('6669', '3', '133', '280', '6650', '134'); -INSERT INTO cp_tree VALUES ('6670', '3', '135', '280', '6650', '136'); -INSERT INTO cp_tree VALUES ('6671', '3', '137', '280', '6650', '138'); -INSERT INTO cp_tree VALUES ('6672', '3', '139', '280', '6650', '140'); -INSERT INTO cp_tree VALUES ('6673', '3', '141', '280', '6650', '142'); -INSERT INTO cp_tree VALUES ('6674', '3', '143', '280', '6650', '144'); -INSERT INTO cp_tree VALUES ('6675', '3', '145', '280', '6650', '146'); -INSERT INTO cp_tree VALUES ('6676', '3', '147', '280', '6650', '148'); -INSERT INTO cp_tree VALUES ('6677', '3', '149', '280', '6650', '150'); -INSERT INTO cp_tree VALUES ('6678', '3', '151', '280', '6650', '152'); -INSERT INTO cp_tree VALUES ('6679', '3', '153', '280', '6650', '154'); -INSERT INTO cp_tree VALUES ('6680', '3', '155', '280', '6650', '156'); -INSERT INTO cp_tree VALUES ('6681', '3', '157', '280', '6650', '158'); -INSERT INTO cp_tree VALUES ('6682', '3', '159', '280', '6650', '160'); -INSERT INTO cp_tree VALUES ('6683', '3', '161', '280', '6650', '162'); -INSERT INTO cp_tree VALUES ('6684', '3', '163', '280', '6650', '164'); -INSERT INTO cp_tree VALUES ('6685', '3', '165', '280', '6650', '166'); -INSERT INTO cp_tree VALUES ('6686', '3', '167', '280', '6650', '168'); -INSERT INTO cp_tree VALUES ('6687', '3', '169', '280', '6650', '170'); -INSERT INTO cp_tree VALUES ('6688', '3', '171', '280', '6650', '172'); -INSERT INTO cp_tree VALUES ('6689', '3', '173', '280', '6650', '174'); -INSERT INTO cp_tree VALUES ('6690', '3', '175', '280', '6650', '176'); -INSERT INTO cp_tree VALUES ('6691', '3', '177', '280', '6650', '178'); -INSERT INTO cp_tree VALUES ('6692', '3', '179', '280', '6650', '180'); -INSERT INTO cp_tree VALUES ('6693', '3', '181', '280', '6650', '182'); -INSERT INTO cp_tree VALUES ('6694', '3', '183', '280', '6650', '184'); -INSERT INTO cp_tree VALUES ('6695', '3', '185', '280', '6650', '186'); -INSERT INTO cp_tree VALUES ('6696', '3', '187', '280', '6650', '188'); -INSERT INTO cp_tree VALUES ('6697', '2', '190', '280', '6602', '261'); -INSERT INTO cp_tree VALUES ('6698', '3', '191', '280', '6697', '192'); -INSERT INTO cp_tree VALUES ('6699', '3', '193', '280', '6697', '194'); -INSERT INTO cp_tree VALUES ('6700', '3', '195', '280', '6697', '196'); -INSERT INTO cp_tree VALUES ('6701', '3', '197', '280', '6697', '198'); -INSERT INTO cp_tree VALUES ('6702', '3', '199', '280', '6697', '200'); -INSERT INTO cp_tree VALUES ('6703', '3', '201', '280', '6697', '202'); -INSERT INTO cp_tree VALUES ('6704', '3', '203', '280', '6697', '204'); -INSERT INTO cp_tree VALUES ('6705', '3', '205', '280', '6697', '206'); -INSERT INTO cp_tree VALUES ('6706', '3', '207', '280', '6697', '208'); -INSERT INTO cp_tree VALUES ('6707', '3', '209', '280', '6697', '210'); -INSERT INTO cp_tree VALUES ('6708', '3', '211', '280', '6697', '212'); -INSERT INTO cp_tree VALUES ('6709', '3', '213', '280', '6697', '214'); -INSERT INTO cp_tree VALUES ('6710', '3', '215', '280', '6697', '216'); -INSERT INTO cp_tree VALUES ('6711', '3', '217', '280', '6697', '218'); -INSERT INTO cp_tree VALUES ('6712', '3', '219', '280', '6697', '220'); -INSERT INTO cp_tree VALUES ('6713', '3', '221', '280', '6697', '222'); -INSERT INTO cp_tree VALUES ('6714', '3', '223', '280', '6697', '224'); -INSERT INTO cp_tree VALUES ('6715', '3', '225', '280', '6697', '226'); -INSERT INTO cp_tree VALUES ('6716', '3', '227', '280', '6697', '228'); -INSERT INTO cp_tree VALUES ('6717', '3', '229', '280', '6697', '230'); -INSERT INTO cp_tree VALUES ('6718', '3', '231', '280', '6697', '232'); -INSERT INTO cp_tree VALUES ('6719', '3', '233', '280', '6697', '234'); -INSERT INTO cp_tree VALUES ('6720', '3', '235', '280', '6697', '236'); -INSERT INTO cp_tree VALUES ('6721', '3', '237', '280', '6697', '238'); -INSERT INTO cp_tree VALUES ('6722', '3', '239', '280', '6697', '240'); -INSERT INTO cp_tree VALUES ('6723', '3', '241', '280', '6697', '242'); -INSERT INTO cp_tree VALUES ('6724', '3', '243', '280', '6697', '244'); -INSERT INTO cp_tree VALUES ('6725', '3', '245', '280', '6697', '246'); -INSERT INTO cp_tree VALUES ('6726', '3', '247', '280', '6697', '248'); -INSERT INTO cp_tree VALUES ('6727', '3', '249', '280', '6697', '250'); -INSERT INTO cp_tree VALUES ('6728', '3', '251', '280', '6697', '252'); -INSERT INTO cp_tree VALUES ('6729', '3', '253', '280', '6697', '254'); -INSERT INTO cp_tree VALUES ('6730', '3', '255', '280', '6697', '256'); -INSERT INTO cp_tree VALUES ('6731', '3', '257', '280', '6697', '258'); -INSERT INTO cp_tree VALUES ('6732', '3', '259', '280', '6697', '260'); -INSERT INTO cp_tree VALUES ('6733', '2', '262', '280', '6602', '353'); -INSERT INTO cp_tree VALUES ('6734', '3', '263', '280', '6733', '264'); -INSERT INTO cp_tree VALUES ('6735', '3', '265', '280', '6733', '266'); -INSERT INTO cp_tree VALUES ('6736', '3', '267', '280', '6733', '268'); -INSERT INTO cp_tree VALUES ('6737', '3', '269', '280', '6733', '270'); -INSERT INTO cp_tree VALUES ('6738', '3', '271', '280', '6733', '272'); -INSERT INTO cp_tree VALUES ('6739', '3', '273', '280', '6733', '274'); -INSERT INTO cp_tree VALUES ('6740', '3', '275', '280', '6733', '276'); -INSERT INTO cp_tree VALUES ('6741', '3', '277', '280', '6733', '278'); -INSERT INTO cp_tree VALUES ('6742', '3', '279', '280', '6733', '280'); -INSERT INTO cp_tree VALUES ('6743', '3', '281', '280', '6733', '282'); -INSERT INTO cp_tree VALUES ('6744', '3', '283', '280', '6733', '284'); -INSERT INTO cp_tree VALUES ('6745', '3', '285', '280', '6733', '286'); -INSERT INTO cp_tree VALUES ('6746', '3', '287', '280', '6733', '288'); -INSERT INTO cp_tree VALUES ('6747', '3', '289', '280', '6733', '290'); -INSERT INTO cp_tree VALUES ('6748', '3', '291', '280', '6733', '292'); -INSERT INTO cp_tree VALUES ('6749', '3', '293', '280', '6733', '294'); -INSERT INTO cp_tree VALUES ('6750', '3', '295', '280', '6733', '296'); -INSERT INTO cp_tree VALUES ('6751', '3', '297', '280', '6733', '298'); -INSERT INTO cp_tree VALUES ('6752', '3', '299', '280', '6733', '300'); -INSERT INTO cp_tree VALUES ('6753', '3', '301', '280', '6733', '302'); -INSERT INTO cp_tree VALUES ('6754', '3', '303', '280', '6733', '304'); -INSERT INTO cp_tree VALUES ('6755', '3', '305', '280', '6733', '306'); -INSERT INTO cp_tree VALUES ('6756', '3', '307', '280', '6733', '308'); -INSERT INTO cp_tree VALUES ('6757', '3', '309', '280', '6733', '310'); -INSERT INTO cp_tree VALUES ('6758', '3', '311', '280', '6733', '312'); -INSERT INTO cp_tree VALUES ('6759', '3', '313', '280', '6733', '314'); -INSERT INTO cp_tree VALUES ('6760', '3', '315', '280', '6733', '316'); -INSERT INTO cp_tree VALUES ('6761', '3', '317', '280', '6733', '318'); -INSERT INTO cp_tree VALUES ('6762', '3', '319', '280', '6733', '320'); -INSERT INTO cp_tree VALUES ('6763', '3', '321', '280', '6733', '322'); -INSERT INTO cp_tree VALUES ('6764', '3', '323', '280', '6733', '324'); -INSERT INTO cp_tree VALUES ('6765', '3', '325', '280', '6733', '326'); -INSERT INTO cp_tree VALUES ('6766', '3', '327', '280', '6733', '328'); -INSERT INTO cp_tree VALUES ('6767', '3', '329', '280', '6733', '330'); -INSERT INTO cp_tree VALUES ('6768', '3', '331', '280', '6733', '332'); -INSERT INTO cp_tree VALUES ('6769', '3', '333', '280', '6733', '334'); -INSERT INTO cp_tree VALUES ('6770', '3', '335', '280', '6733', '336'); -INSERT INTO cp_tree VALUES ('6771', '3', '337', '280', '6733', '338'); -INSERT INTO cp_tree VALUES ('6772', '3', '339', '280', '6733', '340'); -INSERT INTO cp_tree VALUES ('6773', '3', '341', '280', '6733', '342'); -INSERT INTO cp_tree VALUES ('6774', '3', '343', '280', '6733', '344'); -INSERT INTO cp_tree VALUES ('6775', '3', '345', '280', '6733', '346'); -INSERT INTO cp_tree VALUES ('6776', '3', '347', '280', '6733', '348'); -INSERT INTO cp_tree VALUES ('6777', '3', '349', '280', '6733', '350'); -INSERT INTO cp_tree VALUES ('6778', '3', '351', '280', '6733', '352'); -INSERT INTO cp_tree VALUES ('6779', '2', '354', '280', '6602', '361'); -INSERT INTO cp_tree VALUES ('6780', '3', '355', '280', '6779', '356'); -INSERT INTO cp_tree VALUES ('6781', '3', '357', '280', '6779', '358'); -INSERT INTO cp_tree VALUES ('6782', '3', '359', '280', '6779', '360'); -INSERT INTO cp_tree VALUES ('6783', '2', '362', '280', '6602', '369'); -INSERT INTO cp_tree VALUES ('6784', '3', '363', '280', '6783', '364'); -INSERT INTO cp_tree VALUES ('6785', '3', '365', '280', '6783', '366'); -INSERT INTO cp_tree VALUES ('6786', '3', '367', '280', '6783', '368'); -INSERT INTO cp_tree VALUES ('6787', '2', '370', '280', '6602', '377'); -INSERT INTO cp_tree VALUES ('6788', '3', '371', '280', '6787', '372'); -INSERT INTO cp_tree VALUES ('6789', '3', '373', '280', '6787', '374'); -INSERT INTO cp_tree VALUES ('6790', '3', '375', '280', '6787', '376'); -INSERT INTO cp_tree VALUES ('6791', '2', '378', '280', '6602', '385'); -INSERT INTO cp_tree VALUES ('6792', '3', '379', '280', '6791', '380'); -INSERT INTO cp_tree VALUES ('6793', '3', '381', '280', '6791', '382'); -INSERT INTO cp_tree VALUES ('6794', '3', '383', '280', '6791', '384'); -INSERT INTO cp_tree VALUES ('6795', '2', '386', '280', '6602', '393'); -INSERT INTO cp_tree VALUES ('6796', '3', '387', '280', '6795', '388'); -INSERT INTO cp_tree VALUES ('6797', '3', '389', '280', '6795', '390'); -INSERT INTO cp_tree VALUES ('6798', '3', '391', '280', '6795', '392'); -INSERT INTO cp_tree VALUES ('6799', '2', '394', '280', '6602', '401'); -INSERT INTO cp_tree VALUES ('6800', '3', '395', '280', '6799', '396'); -INSERT INTO cp_tree VALUES ('6801', '3', '397', '280', '6799', '398'); -INSERT INTO cp_tree VALUES ('6802', '3', '399', '280', '6799', '400'); -INSERT INTO cp_tree VALUES ('6803', '2', '402', '280', '6602', '409'); -INSERT INTO cp_tree VALUES ('6804', '3', '403', '280', '6803', '404'); -INSERT INTO cp_tree VALUES ('6805', '3', '405', '280', '6803', '406'); -INSERT INTO cp_tree VALUES ('6806', '3', '407', '280', '6803', '408'); -INSERT INTO cp_tree VALUES ('6807', '2', '410', '280', '6602', '417'); -INSERT INTO cp_tree VALUES ('6808', '3', '411', '280', '6807', '412'); -INSERT INTO cp_tree VALUES ('6809', '3', '413', '280', '6807', '414'); -INSERT INTO cp_tree VALUES ('6810', '3', '415', '280', '6807', '416'); -INSERT INTO cp_tree VALUES ('6811', '2', '418', '280', '6602', '425'); -INSERT INTO cp_tree VALUES ('6812', '3', '419', '280', '6811', '420'); -INSERT INTO cp_tree VALUES ('6813', '3', '421', '280', '6811', '422'); -INSERT INTO cp_tree VALUES ('6814', '3', '423', '280', '6811', '424'); -INSERT INTO cp_tree VALUES ('6815', '2', '426', '280', '6602', '427'); -INSERT INTO cp_tree VALUES ('6816', '2', '428', '280', '6602', '429'); -INSERT INTO cp_tree VALUES ('6817', '2', '430', '280', '6602', '431'); -INSERT INTO cp_tree VALUES ('6818', '2', '432', '280', '6602', '433'); -INSERT INTO cp_tree VALUES ('6819', '2', '434', '280', '6602', '441'); -INSERT INTO cp_tree VALUES ('6820', '3', '435', '280', '6819', '438'); -INSERT INTO cp_tree VALUES ('6821', '4', '436', '280', '6820', '437'); -INSERT INTO cp_tree VALUES ('6822', '3', '439', '280', '6819', '440'); -INSERT INTO cp_tree VALUES ('6823', '2', '442', '280', '6602', '455'); -INSERT INTO cp_tree VALUES ('6824', '3', '443', '280', '6823', '446'); -INSERT INTO cp_tree VALUES ('6825', '4', '444', '280', '6824', '445'); -INSERT INTO cp_tree VALUES ('6826', '3', '447', '280', '6823', '450'); -INSERT INTO cp_tree VALUES ('6827', '4', '448', '280', '6826', '449'); -INSERT INTO cp_tree VALUES ('6828', '3', '451', '280', '6823', '454'); -INSERT INTO cp_tree VALUES ('6829', '4', '452', '280', '6828', '453'); -INSERT INTO cp_tree VALUES ('6830', '1', '1', '281', '0', '202'); -INSERT INTO cp_tree VALUES ('6831', '2', '2', '281', '6830', '29'); -INSERT INTO cp_tree VALUES ('6832', '3', '3', '281', '6831', '4'); -INSERT INTO cp_tree VALUES ('6833', '3', '5', '281', '6831', '18'); -INSERT INTO cp_tree VALUES ('6834', '4', '6', '281', '6833', '15'); -INSERT INTO cp_tree VALUES ('6835', '5', '7', '281', '6834', '8'); -INSERT INTO cp_tree VALUES ('6836', '5', '9', '281', '6834', '10'); -INSERT INTO cp_tree VALUES ('6837', '5', '11', '281', '6834', '12'); -INSERT INTO cp_tree VALUES ('6838', '5', '13', '281', '6834', '14'); -INSERT INTO cp_tree VALUES ('6839', '4', '16', '281', '6833', '17'); -INSERT INTO cp_tree VALUES ('6840', '3', '19', '281', '6831', '26'); -INSERT INTO cp_tree VALUES ('6841', '4', '20', '281', '6840', '21'); -INSERT INTO cp_tree VALUES ('6842', '4', '22', '281', '6840', '23'); -INSERT INTO cp_tree VALUES ('6843', '4', '24', '281', '6840', '25'); -INSERT INTO cp_tree VALUES ('6844', '3', '27', '281', '6831', '28'); -INSERT INTO cp_tree VALUES ('6845', '2', '30', '281', '6830', '33'); -INSERT INTO cp_tree VALUES ('6846', '3', '31', '281', '6845', '32'); -INSERT INTO cp_tree VALUES ('6847', '2', '34', '281', '6830', '49'); -INSERT INTO cp_tree VALUES ('6848', '3', '35', '281', '6847', '36'); -INSERT INTO cp_tree VALUES ('6849', '3', '37', '281', '6847', '38'); -INSERT INTO cp_tree VALUES ('6850', '3', '39', '281', '6847', '40'); -INSERT INTO cp_tree VALUES ('6851', '3', '41', '281', '6847', '42'); -INSERT INTO cp_tree VALUES ('6852', '3', '43', '281', '6847', '44'); -INSERT INTO cp_tree VALUES ('6853', '3', '45', '281', '6847', '46'); -INSERT INTO cp_tree VALUES ('6854', '3', '47', '281', '6847', '48'); -INSERT INTO cp_tree VALUES ('6855', '2', '50', '281', '6830', '63'); -INSERT INTO cp_tree VALUES ('6856', '3', '51', '281', '6855', '52'); -INSERT INTO cp_tree VALUES ('6857', '3', '53', '281', '6855', '54'); -INSERT INTO cp_tree VALUES ('6858', '3', '55', '281', '6855', '56'); -INSERT INTO cp_tree VALUES ('6859', '3', '57', '281', '6855', '58'); -INSERT INTO cp_tree VALUES ('6860', '3', '59', '281', '6855', '60'); -INSERT INTO cp_tree VALUES ('6861', '3', '61', '281', '6855', '62'); -INSERT INTO cp_tree VALUES ('6862', '2', '64', '281', '6830', '79'); -INSERT INTO cp_tree VALUES ('6863', '3', '65', '281', '6862', '66'); -INSERT INTO cp_tree VALUES ('6864', '3', '67', '281', '6862', '68'); -INSERT INTO cp_tree VALUES ('6865', '3', '69', '281', '6862', '70'); -INSERT INTO cp_tree VALUES ('6866', '3', '71', '281', '6862', '72'); -INSERT INTO cp_tree VALUES ('6867', '3', '73', '281', '6862', '74'); -INSERT INTO cp_tree VALUES ('6868', '3', '75', '281', '6862', '76'); -INSERT INTO cp_tree VALUES ('6869', '3', '77', '281', '6862', '78'); -INSERT INTO cp_tree VALUES ('6870', '2', '80', '281', '6830', '95'); -INSERT INTO cp_tree VALUES ('6871', '3', '81', '281', '6870', '82'); -INSERT INTO cp_tree VALUES ('6872', '3', '83', '281', '6870', '84'); -INSERT INTO cp_tree VALUES ('6873', '3', '85', '281', '6870', '86'); -INSERT INTO cp_tree VALUES ('6874', '3', '87', '281', '6870', '88'); -INSERT INTO cp_tree VALUES ('6875', '3', '89', '281', '6870', '90'); -INSERT INTO cp_tree VALUES ('6876', '3', '91', '281', '6870', '92'); -INSERT INTO cp_tree VALUES ('6877', '3', '93', '281', '6870', '94'); -INSERT INTO cp_tree VALUES ('6878', '2', '96', '281', '6830', '109'); -INSERT INTO cp_tree VALUES ('6879', '3', '97', '281', '6878', '98'); -INSERT INTO cp_tree VALUES ('6880', '3', '99', '281', '6878', '100'); -INSERT INTO cp_tree VALUES ('6881', '3', '101', '281', '6878', '102'); -INSERT INTO cp_tree VALUES ('6882', '3', '103', '281', '6878', '104'); -INSERT INTO cp_tree VALUES ('6883', '3', '105', '281', '6878', '106'); -INSERT INTO cp_tree VALUES ('6884', '3', '107', '281', '6878', '108'); -INSERT INTO cp_tree VALUES ('6885', '2', '110', '281', '6830', '123'); -INSERT INTO cp_tree VALUES ('6886', '3', '111', '281', '6885', '112'); -INSERT INTO cp_tree VALUES ('6887', '3', '113', '281', '6885', '114'); -INSERT INTO cp_tree VALUES ('6888', '3', '115', '281', '6885', '116'); -INSERT INTO cp_tree VALUES ('6889', '3', '117', '281', '6885', '118'); -INSERT INTO cp_tree VALUES ('6890', '3', '119', '281', '6885', '120'); -INSERT INTO cp_tree VALUES ('6891', '3', '121', '281', '6885', '122'); -INSERT INTO cp_tree VALUES ('6892', '2', '124', '281', '6830', '137'); -INSERT INTO cp_tree VALUES ('6893', '3', '125', '281', '6892', '126'); -INSERT INTO cp_tree VALUES ('6894', '3', '127', '281', '6892', '128'); -INSERT INTO cp_tree VALUES ('6895', '3', '129', '281', '6892', '130'); -INSERT INTO cp_tree VALUES ('6896', '3', '131', '281', '6892', '132'); -INSERT INTO cp_tree VALUES ('6897', '3', '133', '281', '6892', '134'); -INSERT INTO cp_tree VALUES ('6898', '3', '135', '281', '6892', '136'); -INSERT INTO cp_tree VALUES ('6899', '2', '138', '281', '6830', '139'); -INSERT INTO cp_tree VALUES ('6900', '2', '140', '281', '6830', '145'); -INSERT INTO cp_tree VALUES ('6901', '3', '141', '281', '6900', '144'); -INSERT INTO cp_tree VALUES ('6902', '4', '142', '281', '6901', '143'); -INSERT INTO cp_tree VALUES ('6903', '2', '146', '281', '6830', '151'); -INSERT INTO cp_tree VALUES ('6904', '3', '147', '281', '6903', '150'); -INSERT INTO cp_tree VALUES ('6905', '4', '148', '281', '6904', '149'); -INSERT INTO cp_tree VALUES ('6906', '2', '152', '281', '6830', '157'); -INSERT INTO cp_tree VALUES ('6907', '3', '153', '281', '6906', '156'); -INSERT INTO cp_tree VALUES ('6908', '4', '154', '281', '6907', '155'); -INSERT INTO cp_tree VALUES ('6909', '2', '158', '281', '6830', '163'); -INSERT INTO cp_tree VALUES ('6910', '3', '159', '281', '6909', '162'); -INSERT INTO cp_tree VALUES ('6911', '4', '160', '281', '6910', '161'); -INSERT INTO cp_tree VALUES ('6912', '2', '164', '281', '6830', '171'); -INSERT INTO cp_tree VALUES ('6913', '3', '165', '281', '6912', '170'); -INSERT INTO cp_tree VALUES ('6914', '4', '166', '281', '6913', '167'); -INSERT INTO cp_tree VALUES ('6915', '4', '168', '281', '6913', '169'); -INSERT INTO cp_tree VALUES ('6916', '2', '172', '281', '6830', '177'); -INSERT INTO cp_tree VALUES ('6917', '3', '173', '281', '6916', '176'); -INSERT INTO cp_tree VALUES ('6918', '4', '174', '281', '6917', '175'); -INSERT INTO cp_tree VALUES ('6919', '2', '178', '281', '6830', '185'); -INSERT INTO cp_tree VALUES ('6920', '3', '179', '281', '6919', '184'); -INSERT INTO cp_tree VALUES ('6921', '4', '180', '281', '6920', '181'); -INSERT INTO cp_tree VALUES ('6922', '4', '182', '281', '6920', '183'); -INSERT INTO cp_tree VALUES ('6923', '2', '186', '281', '6830', '201'); -INSERT INTO cp_tree VALUES ('6924', '3', '187', '281', '6923', '188'); -INSERT INTO cp_tree VALUES ('6925', '3', '189', '281', '6923', '192'); -INSERT INTO cp_tree VALUES ('6926', '4', '190', '281', '6925', '191'); -INSERT INTO cp_tree VALUES ('6927', '3', '193', '281', '6923', '196'); -INSERT INTO cp_tree VALUES ('6928', '4', '194', '281', '6927', '195'); -INSERT INTO cp_tree VALUES ('6929', '3', '197', '281', '6923', '200'); -INSERT INTO cp_tree VALUES ('6930', '4', '198', '281', '6929', '199'); -INSERT INTO cp_tree VALUES ('6931', '1', '1', '283', '0', '202'); -INSERT INTO cp_tree VALUES ('6932', '2', '2', '283', '6931', '29'); -INSERT INTO cp_tree VALUES ('6933', '3', '3', '283', '6932', '4'); -INSERT INTO cp_tree VALUES ('6934', '3', '5', '283', '6932', '18'); -INSERT INTO cp_tree VALUES ('6935', '4', '6', '283', '6934', '15'); -INSERT INTO cp_tree VALUES ('6936', '5', '7', '283', '6935', '8'); -INSERT INTO cp_tree VALUES ('6937', '5', '9', '283', '6935', '10'); -INSERT INTO cp_tree VALUES ('6938', '5', '11', '283', '6935', '12'); -INSERT INTO cp_tree VALUES ('6939', '5', '13', '283', '6935', '14'); -INSERT INTO cp_tree VALUES ('6940', '4', '16', '283', '6934', '17'); -INSERT INTO cp_tree VALUES ('6941', '3', '19', '283', '6932', '26'); -INSERT INTO cp_tree VALUES ('6942', '4', '20', '283', '6941', '21'); -INSERT INTO cp_tree VALUES ('6943', '4', '22', '283', '6941', '23'); -INSERT INTO cp_tree VALUES ('6944', '4', '24', '283', '6941', '25'); -INSERT INTO cp_tree VALUES ('6945', '3', '27', '283', '6932', '28'); -INSERT INTO cp_tree VALUES ('6946', '2', '30', '283', '6931', '33'); -INSERT INTO cp_tree VALUES ('6947', '3', '31', '283', '6946', '32'); -INSERT INTO cp_tree VALUES ('6948', '2', '34', '283', '6931', '49'); -INSERT INTO cp_tree VALUES ('6949', '3', '35', '283', '6948', '36'); -INSERT INTO cp_tree VALUES ('6950', '3', '37', '283', '6948', '38'); -INSERT INTO cp_tree VALUES ('6951', '3', '39', '283', '6948', '40'); -INSERT INTO cp_tree VALUES ('6952', '3', '41', '283', '6948', '42'); -INSERT INTO cp_tree VALUES ('6953', '3', '43', '283', '6948', '44'); -INSERT INTO cp_tree VALUES ('6954', '3', '45', '283', '6948', '46'); -INSERT INTO cp_tree VALUES ('6955', '3', '47', '283', '6948', '48'); -INSERT INTO cp_tree VALUES ('6956', '2', '50', '283', '6931', '63'); -INSERT INTO cp_tree VALUES ('6957', '3', '51', '283', '6956', '52'); -INSERT INTO cp_tree VALUES ('6958', '3', '53', '283', '6956', '54'); -INSERT INTO cp_tree VALUES ('6959', '3', '55', '283', '6956', '56'); -INSERT INTO cp_tree VALUES ('6960', '3', '57', '283', '6956', '58'); -INSERT INTO cp_tree VALUES ('6961', '3', '59', '283', '6956', '60'); -INSERT INTO cp_tree VALUES ('6962', '3', '61', '283', '6956', '62'); -INSERT INTO cp_tree VALUES ('6963', '2', '64', '283', '6931', '79'); -INSERT INTO cp_tree VALUES ('6964', '3', '65', '283', '6963', '66'); -INSERT INTO cp_tree VALUES ('6965', '3', '67', '283', '6963', '68'); -INSERT INTO cp_tree VALUES ('6966', '3', '69', '283', '6963', '70'); -INSERT INTO cp_tree VALUES ('6967', '3', '71', '283', '6963', '72'); -INSERT INTO cp_tree VALUES ('6968', '3', '73', '283', '6963', '74'); -INSERT INTO cp_tree VALUES ('6969', '3', '75', '283', '6963', '76'); -INSERT INTO cp_tree VALUES ('6970', '3', '77', '283', '6963', '78'); -INSERT INTO cp_tree VALUES ('6971', '2', '80', '283', '6931', '95'); -INSERT INTO cp_tree VALUES ('6972', '3', '81', '283', '6971', '82'); -INSERT INTO cp_tree VALUES ('6973', '3', '83', '283', '6971', '84'); -INSERT INTO cp_tree VALUES ('6974', '3', '85', '283', '6971', '86'); -INSERT INTO cp_tree VALUES ('6975', '3', '87', '283', '6971', '88'); -INSERT INTO cp_tree VALUES ('6976', '3', '89', '283', '6971', '90'); -INSERT INTO cp_tree VALUES ('6977', '3', '91', '283', '6971', '92'); -INSERT INTO cp_tree VALUES ('6978', '3', '93', '283', '6971', '94'); -INSERT INTO cp_tree VALUES ('6979', '2', '96', '283', '6931', '109'); -INSERT INTO cp_tree VALUES ('6980', '3', '97', '283', '6979', '98'); -INSERT INTO cp_tree VALUES ('6981', '3', '99', '283', '6979', '100'); -INSERT INTO cp_tree VALUES ('6982', '3', '101', '283', '6979', '102'); -INSERT INTO cp_tree VALUES ('6983', '3', '103', '283', '6979', '104'); -INSERT INTO cp_tree VALUES ('6984', '3', '105', '283', '6979', '106'); -INSERT INTO cp_tree VALUES ('6985', '3', '107', '283', '6979', '108'); -INSERT INTO cp_tree VALUES ('6986', '2', '110', '283', '6931', '123'); -INSERT INTO cp_tree VALUES ('6987', '3', '111', '283', '6986', '112'); -INSERT INTO cp_tree VALUES ('6988', '3', '113', '283', '6986', '114'); -INSERT INTO cp_tree VALUES ('6989', '3', '115', '283', '6986', '116'); -INSERT INTO cp_tree VALUES ('6990', '3', '117', '283', '6986', '118'); -INSERT INTO cp_tree VALUES ('6991', '3', '119', '283', '6986', '120'); -INSERT INTO cp_tree VALUES ('6992', '3', '121', '283', '6986', '122'); -INSERT INTO cp_tree VALUES ('6993', '2', '124', '283', '6931', '137'); -INSERT INTO cp_tree VALUES ('6994', '3', '125', '283', '6993', '126'); -INSERT INTO cp_tree VALUES ('6995', '3', '127', '283', '6993', '128'); -INSERT INTO cp_tree VALUES ('6996', '3', '129', '283', '6993', '130'); -INSERT INTO cp_tree VALUES ('6997', '3', '131', '283', '6993', '132'); -INSERT INTO cp_tree VALUES ('6998', '3', '133', '283', '6993', '134'); -INSERT INTO cp_tree VALUES ('6999', '3', '135', '283', '6993', '136'); -INSERT INTO cp_tree VALUES ('7000', '2', '138', '283', '6931', '139'); -INSERT INTO cp_tree VALUES ('7001', '2', '140', '283', '6931', '145'); -INSERT INTO cp_tree VALUES ('7002', '3', '141', '283', '7001', '144'); -INSERT INTO cp_tree VALUES ('7003', '4', '142', '283', '7002', '143'); -INSERT INTO cp_tree VALUES ('7004', '2', '146', '283', '6931', '151'); -INSERT INTO cp_tree VALUES ('7005', '3', '147', '283', '7004', '150'); -INSERT INTO cp_tree VALUES ('7006', '4', '148', '283', '7005', '149'); -INSERT INTO cp_tree VALUES ('7007', '2', '152', '283', '6931', '157'); -INSERT INTO cp_tree VALUES ('7008', '3', '153', '283', '7007', '156'); -INSERT INTO cp_tree VALUES ('7009', '4', '154', '283', '7008', '155'); -INSERT INTO cp_tree VALUES ('7010', '2', '158', '283', '6931', '163'); -INSERT INTO cp_tree VALUES ('7011', '3', '159', '283', '7010', '162'); -INSERT INTO cp_tree VALUES ('7012', '4', '160', '283', '7011', '161'); -INSERT INTO cp_tree VALUES ('7013', '2', '164', '283', '6931', '171'); -INSERT INTO cp_tree VALUES ('7014', '3', '165', '283', '7013', '170'); -INSERT INTO cp_tree VALUES ('7015', '4', '166', '283', '7014', '167'); -INSERT INTO cp_tree VALUES ('7016', '4', '168', '283', '7014', '169'); -INSERT INTO cp_tree VALUES ('7017', '2', '172', '283', '6931', '177'); -INSERT INTO cp_tree VALUES ('7018', '3', '173', '283', '7017', '176'); -INSERT INTO cp_tree VALUES ('7019', '4', '174', '283', '7018', '175'); -INSERT INTO cp_tree VALUES ('7020', '2', '178', '283', '6931', '185'); -INSERT INTO cp_tree VALUES ('7021', '3', '179', '283', '7020', '184'); -INSERT INTO cp_tree VALUES ('7022', '4', '180', '283', '7021', '181'); -INSERT INTO cp_tree VALUES ('7023', '4', '182', '283', '7021', '183'); -INSERT INTO cp_tree VALUES ('7024', '2', '186', '283', '6931', '201'); -INSERT INTO cp_tree VALUES ('7025', '3', '187', '283', '7024', '188'); -INSERT INTO cp_tree VALUES ('7026', '3', '189', '283', '7024', '192'); -INSERT INTO cp_tree VALUES ('7027', '4', '190', '283', '7026', '191'); -INSERT INTO cp_tree VALUES ('7028', '3', '193', '283', '7024', '196'); -INSERT INTO cp_tree VALUES ('7029', '4', '194', '283', '7028', '195'); -INSERT INTO cp_tree VALUES ('7030', '3', '197', '283', '7024', '200'); -INSERT INTO cp_tree VALUES ('7031', '4', '198', '283', '7030', '199'); -INSERT INTO cp_tree VALUES ('7032', '1', '1', '284', '0', '1290'); -INSERT INTO cp_tree VALUES ('7033', '2', '2', '284', '7032', '19'); -INSERT INTO cp_tree VALUES ('7034', '3', '3', '284', '7033', '18'); -INSERT INTO cp_tree VALUES ('7035', '4', '4', '284', '7034', '5'); -INSERT INTO cp_tree VALUES ('7036', '4', '6', '284', '7034', '7'); -INSERT INTO cp_tree VALUES ('7037', '4', '8', '284', '7034', '9'); -INSERT INTO cp_tree VALUES ('7038', '4', '10', '284', '7034', '11'); -INSERT INTO cp_tree VALUES ('7039', '4', '12', '284', '7034', '13'); -INSERT INTO cp_tree VALUES ('7040', '4', '14', '284', '7034', '15'); -INSERT INTO cp_tree VALUES ('7041', '4', '16', '284', '7034', '17'); -INSERT INTO cp_tree VALUES ('7042', '2', '20', '284', '7032', '29'); -INSERT INTO cp_tree VALUES ('7043', '3', '21', '284', '7042', '22'); -INSERT INTO cp_tree VALUES ('7044', '3', '23', '284', '7042', '24'); -INSERT INTO cp_tree VALUES ('7045', '3', '25', '284', '7042', '26'); -INSERT INTO cp_tree VALUES ('7046', '3', '27', '284', '7042', '28'); -INSERT INTO cp_tree VALUES ('7047', '2', '30', '284', '7032', '39'); -INSERT INTO cp_tree VALUES ('7048', '3', '31', '284', '7047', '32'); -INSERT INTO cp_tree VALUES ('7049', '3', '33', '284', '7047', '34'); -INSERT INTO cp_tree VALUES ('7050', '3', '35', '284', '7047', '36'); -INSERT INTO cp_tree VALUES ('7051', '3', '37', '284', '7047', '38'); -INSERT INTO cp_tree VALUES ('7052', '2', '40', '284', '7032', '49'); -INSERT INTO cp_tree VALUES ('7053', '3', '41', '284', '7052', '42'); -INSERT INTO cp_tree VALUES ('7054', '3', '43', '284', '7052', '44'); -INSERT INTO cp_tree VALUES ('7055', '3', '45', '284', '7052', '46'); -INSERT INTO cp_tree VALUES ('7056', '3', '47', '284', '7052', '48'); -INSERT INTO cp_tree VALUES ('7057', '2', '50', '284', '7032', '59'); -INSERT INTO cp_tree VALUES ('7058', '3', '51', '284', '7057', '52'); -INSERT INTO cp_tree VALUES ('7059', '3', '53', '284', '7057', '54'); -INSERT INTO cp_tree VALUES ('7060', '3', '55', '284', '7057', '56'); -INSERT INTO cp_tree VALUES ('7061', '3', '57', '284', '7057', '58'); -INSERT INTO cp_tree VALUES ('7062', '2', '60', '284', '7032', '69'); -INSERT INTO cp_tree VALUES ('7063', '3', '61', '284', '7062', '62'); -INSERT INTO cp_tree VALUES ('7064', '3', '63', '284', '7062', '64'); -INSERT INTO cp_tree VALUES ('7065', '3', '65', '284', '7062', '66'); -INSERT INTO cp_tree VALUES ('7066', '3', '67', '284', '7062', '68'); -INSERT INTO cp_tree VALUES ('7067', '2', '70', '284', '7032', '79'); -INSERT INTO cp_tree VALUES ('7068', '3', '71', '284', '7067', '72'); -INSERT INTO cp_tree VALUES ('7069', '3', '73', '284', '7067', '74'); -INSERT INTO cp_tree VALUES ('7070', '3', '75', '284', '7067', '76'); -INSERT INTO cp_tree VALUES ('7071', '3', '77', '284', '7067', '78'); -INSERT INTO cp_tree VALUES ('7072', '2', '80', '284', '7032', '89'); -INSERT INTO cp_tree VALUES ('7073', '3', '81', '284', '7072', '82'); -INSERT INTO cp_tree VALUES ('7074', '3', '83', '284', '7072', '84'); -INSERT INTO cp_tree VALUES ('7075', '3', '85', '284', '7072', '86'); -INSERT INTO cp_tree VALUES ('7076', '3', '87', '284', '7072', '88'); -INSERT INTO cp_tree VALUES ('7077', '2', '90', '284', '7032', '97'); -INSERT INTO cp_tree VALUES ('7078', '3', '91', '284', '7077', '92'); -INSERT INTO cp_tree VALUES ('7079', '3', '93', '284', '7077', '94'); -INSERT INTO cp_tree VALUES ('7080', '3', '95', '284', '7077', '96'); -INSERT INTO cp_tree VALUES ('7081', '2', '98', '284', '7032', '121'); -INSERT INTO cp_tree VALUES ('7082', '3', '99', '284', '7081', '100'); -INSERT INTO cp_tree VALUES ('7083', '3', '101', '284', '7081', '102'); -INSERT INTO cp_tree VALUES ('7084', '3', '103', '284', '7081', '104'); -INSERT INTO cp_tree VALUES ('7085', '3', '105', '284', '7081', '106'); -INSERT INTO cp_tree VALUES ('7086', '3', '107', '284', '7081', '108'); -INSERT INTO cp_tree VALUES ('7087', '3', '109', '284', '7081', '110'); -INSERT INTO cp_tree VALUES ('7088', '3', '111', '284', '7081', '112'); -INSERT INTO cp_tree VALUES ('7089', '3', '113', '284', '7081', '114'); -INSERT INTO cp_tree VALUES ('7090', '3', '115', '284', '7081', '116'); -INSERT INTO cp_tree VALUES ('7091', '3', '117', '284', '7081', '118'); -INSERT INTO cp_tree VALUES ('7092', '3', '119', '284', '7081', '120'); -INSERT INTO cp_tree VALUES ('7093', '2', '122', '284', '7032', '125'); -INSERT INTO cp_tree VALUES ('7094', '3', '123', '284', '7093', '124'); -INSERT INTO cp_tree VALUES ('7095', '2', '126', '284', '7032', '263'); -INSERT INTO cp_tree VALUES ('7096', '3', '127', '284', '7095', '128'); -INSERT INTO cp_tree VALUES ('7097', '3', '129', '284', '7095', '130'); -INSERT INTO cp_tree VALUES ('7098', '3', '131', '284', '7095', '132'); -INSERT INTO cp_tree VALUES ('7099', '3', '133', '284', '7095', '134'); -INSERT INTO cp_tree VALUES ('7100', '3', '135', '284', '7095', '136'); -INSERT INTO cp_tree VALUES ('7101', '3', '137', '284', '7095', '138'); -INSERT INTO cp_tree VALUES ('7102', '3', '139', '284', '7095', '140'); -INSERT INTO cp_tree VALUES ('7103', '3', '141', '284', '7095', '142'); -INSERT INTO cp_tree VALUES ('7104', '3', '143', '284', '7095', '144'); -INSERT INTO cp_tree VALUES ('7105', '3', '145', '284', '7095', '146'); -INSERT INTO cp_tree VALUES ('7106', '3', '147', '284', '7095', '148'); -INSERT INTO cp_tree VALUES ('7107', '3', '149', '284', '7095', '150'); -INSERT INTO cp_tree VALUES ('7108', '3', '151', '284', '7095', '152'); -INSERT INTO cp_tree VALUES ('7109', '3', '153', '284', '7095', '154'); -INSERT INTO cp_tree VALUES ('7110', '3', '155', '284', '7095', '156'); -INSERT INTO cp_tree VALUES ('7111', '3', '157', '284', '7095', '158'); -INSERT INTO cp_tree VALUES ('7112', '3', '159', '284', '7095', '160'); -INSERT INTO cp_tree VALUES ('7113', '3', '161', '284', '7095', '162'); -INSERT INTO cp_tree VALUES ('7114', '3', '163', '284', '7095', '164'); -INSERT INTO cp_tree VALUES ('7115', '3', '165', '284', '7095', '166'); -INSERT INTO cp_tree VALUES ('7116', '3', '167', '284', '7095', '168'); -INSERT INTO cp_tree VALUES ('7117', '3', '169', '284', '7095', '170'); -INSERT INTO cp_tree VALUES ('7118', '3', '171', '284', '7095', '172'); -INSERT INTO cp_tree VALUES ('7119', '3', '173', '284', '7095', '174'); -INSERT INTO cp_tree VALUES ('7120', '3', '175', '284', '7095', '176'); -INSERT INTO cp_tree VALUES ('7121', '3', '177', '284', '7095', '178'); -INSERT INTO cp_tree VALUES ('7122', '3', '179', '284', '7095', '180'); -INSERT INTO cp_tree VALUES ('7123', '3', '181', '284', '7095', '182'); -INSERT INTO cp_tree VALUES ('7124', '3', '183', '284', '7095', '184'); -INSERT INTO cp_tree VALUES ('7125', '3', '185', '284', '7095', '186'); -INSERT INTO cp_tree VALUES ('7126', '3', '187', '284', '7095', '188'); -INSERT INTO cp_tree VALUES ('7127', '3', '189', '284', '7095', '190'); -INSERT INTO cp_tree VALUES ('7128', '3', '191', '284', '7095', '192'); -INSERT INTO cp_tree VALUES ('7129', '3', '193', '284', '7095', '194'); -INSERT INTO cp_tree VALUES ('7130', '3', '195', '284', '7095', '196'); -INSERT INTO cp_tree VALUES ('7131', '3', '197', '284', '7095', '198'); -INSERT INTO cp_tree VALUES ('7132', '3', '199', '284', '7095', '200'); -INSERT INTO cp_tree VALUES ('7133', '3', '201', '284', '7095', '202'); -INSERT INTO cp_tree VALUES ('7134', '3', '203', '284', '7095', '204'); -INSERT INTO cp_tree VALUES ('7135', '3', '205', '284', '7095', '206'); -INSERT INTO cp_tree VALUES ('7136', '3', '207', '284', '7095', '208'); -INSERT INTO cp_tree VALUES ('7137', '3', '209', '284', '7095', '210'); -INSERT INTO cp_tree VALUES ('7138', '3', '211', '284', '7095', '212'); -INSERT INTO cp_tree VALUES ('7139', '3', '213', '284', '7095', '214'); -INSERT INTO cp_tree VALUES ('7140', '3', '215', '284', '7095', '216'); -INSERT INTO cp_tree VALUES ('7141', '3', '217', '284', '7095', '218'); -INSERT INTO cp_tree VALUES ('7142', '3', '219', '284', '7095', '220'); -INSERT INTO cp_tree VALUES ('7143', '3', '221', '284', '7095', '222'); -INSERT INTO cp_tree VALUES ('7144', '3', '223', '284', '7095', '224'); -INSERT INTO cp_tree VALUES ('7145', '3', '225', '284', '7095', '226'); -INSERT INTO cp_tree VALUES ('7146', '3', '227', '284', '7095', '228'); -INSERT INTO cp_tree VALUES ('7147', '3', '229', '284', '7095', '230'); -INSERT INTO cp_tree VALUES ('7148', '3', '231', '284', '7095', '232'); -INSERT INTO cp_tree VALUES ('7149', '3', '233', '284', '7095', '234'); -INSERT INTO cp_tree VALUES ('7150', '3', '235', '284', '7095', '236'); -INSERT INTO cp_tree VALUES ('7151', '3', '237', '284', '7095', '238'); -INSERT INTO cp_tree VALUES ('7152', '3', '239', '284', '7095', '240'); -INSERT INTO cp_tree VALUES ('7153', '3', '241', '284', '7095', '242'); -INSERT INTO cp_tree VALUES ('7154', '3', '243', '284', '7095', '244'); -INSERT INTO cp_tree VALUES ('7155', '3', '245', '284', '7095', '246'); -INSERT INTO cp_tree VALUES ('7156', '3', '247', '284', '7095', '248'); -INSERT INTO cp_tree VALUES ('7157', '3', '249', '284', '7095', '250'); -INSERT INTO cp_tree VALUES ('7158', '3', '251', '284', '7095', '252'); -INSERT INTO cp_tree VALUES ('7159', '3', '253', '284', '7095', '254'); -INSERT INTO cp_tree VALUES ('7160', '3', '255', '284', '7095', '256'); -INSERT INTO cp_tree VALUES ('7161', '3', '257', '284', '7095', '258'); -INSERT INTO cp_tree VALUES ('7162', '3', '259', '284', '7095', '260'); -INSERT INTO cp_tree VALUES ('7163', '3', '261', '284', '7095', '262'); -INSERT INTO cp_tree VALUES ('7164', '2', '264', '284', '7032', '271'); -INSERT INTO cp_tree VALUES ('7165', '3', '265', '284', '7164', '266'); -INSERT INTO cp_tree VALUES ('7166', '3', '267', '284', '7164', '268'); -INSERT INTO cp_tree VALUES ('7167', '3', '269', '284', '7164', '270'); -INSERT INTO cp_tree VALUES ('7168', '2', '272', '284', '7032', '285'); -INSERT INTO cp_tree VALUES ('7169', '3', '273', '284', '7168', '274'); -INSERT INTO cp_tree VALUES ('7170', '3', '275', '284', '7168', '276'); -INSERT INTO cp_tree VALUES ('7171', '3', '277', '284', '7168', '278'); -INSERT INTO cp_tree VALUES ('7172', '3', '279', '284', '7168', '280'); -INSERT INTO cp_tree VALUES ('7173', '3', '281', '284', '7168', '282'); -INSERT INTO cp_tree VALUES ('7174', '3', '283', '284', '7168', '284'); -INSERT INTO cp_tree VALUES ('7175', '2', '286', '284', '7032', '289'); -INSERT INTO cp_tree VALUES ('7176', '3', '287', '284', '7175', '288'); -INSERT INTO cp_tree VALUES ('7177', '2', '290', '284', '7032', '427'); -INSERT INTO cp_tree VALUES ('7178', '3', '291', '284', '7177', '292'); -INSERT INTO cp_tree VALUES ('7179', '3', '293', '284', '7177', '294'); -INSERT INTO cp_tree VALUES ('7180', '3', '295', '284', '7177', '296'); -INSERT INTO cp_tree VALUES ('7181', '3', '297', '284', '7177', '298'); -INSERT INTO cp_tree VALUES ('7182', '3', '299', '284', '7177', '300'); -INSERT INTO cp_tree VALUES ('7183', '3', '301', '284', '7177', '302'); -INSERT INTO cp_tree VALUES ('7184', '3', '303', '284', '7177', '304'); -INSERT INTO cp_tree VALUES ('7185', '3', '305', '284', '7177', '306'); -INSERT INTO cp_tree VALUES ('7186', '3', '307', '284', '7177', '308'); -INSERT INTO cp_tree VALUES ('7187', '3', '309', '284', '7177', '310'); -INSERT INTO cp_tree VALUES ('7188', '3', '311', '284', '7177', '312'); -INSERT INTO cp_tree VALUES ('7189', '3', '313', '284', '7177', '314'); -INSERT INTO cp_tree VALUES ('7190', '3', '315', '284', '7177', '316'); -INSERT INTO cp_tree VALUES ('7191', '3', '317', '284', '7177', '318'); -INSERT INTO cp_tree VALUES ('7192', '3', '319', '284', '7177', '320'); -INSERT INTO cp_tree VALUES ('7193', '3', '321', '284', '7177', '322'); -INSERT INTO cp_tree VALUES ('7194', '3', '323', '284', '7177', '324'); -INSERT INTO cp_tree VALUES ('7195', '3', '325', '284', '7177', '326'); -INSERT INTO cp_tree VALUES ('7196', '3', '327', '284', '7177', '328'); -INSERT INTO cp_tree VALUES ('7197', '3', '329', '284', '7177', '330'); -INSERT INTO cp_tree VALUES ('7198', '3', '331', '284', '7177', '332'); -INSERT INTO cp_tree VALUES ('7199', '3', '333', '284', '7177', '334'); -INSERT INTO cp_tree VALUES ('7200', '3', '335', '284', '7177', '336'); -INSERT INTO cp_tree VALUES ('7201', '3', '337', '284', '7177', '338'); -INSERT INTO cp_tree VALUES ('7202', '3', '339', '284', '7177', '340'); -INSERT INTO cp_tree VALUES ('7203', '3', '341', '284', '7177', '342'); -INSERT INTO cp_tree VALUES ('7204', '3', '343', '284', '7177', '344'); -INSERT INTO cp_tree VALUES ('7205', '3', '345', '284', '7177', '346'); -INSERT INTO cp_tree VALUES ('7206', '3', '347', '284', '7177', '348'); -INSERT INTO cp_tree VALUES ('7207', '3', '349', '284', '7177', '350'); -INSERT INTO cp_tree VALUES ('7208', '3', '351', '284', '7177', '352'); -INSERT INTO cp_tree VALUES ('7209', '3', '353', '284', '7177', '354'); -INSERT INTO cp_tree VALUES ('7210', '3', '355', '284', '7177', '356'); -INSERT INTO cp_tree VALUES ('7211', '3', '357', '284', '7177', '358'); -INSERT INTO cp_tree VALUES ('7212', '3', '359', '284', '7177', '360'); -INSERT INTO cp_tree VALUES ('7213', '3', '361', '284', '7177', '362'); -INSERT INTO cp_tree VALUES ('7214', '3', '363', '284', '7177', '364'); -INSERT INTO cp_tree VALUES ('7215', '3', '365', '284', '7177', '366'); -INSERT INTO cp_tree VALUES ('7216', '3', '367', '284', '7177', '368'); -INSERT INTO cp_tree VALUES ('7217', '3', '369', '284', '7177', '370'); -INSERT INTO cp_tree VALUES ('7218', '3', '371', '284', '7177', '372'); -INSERT INTO cp_tree VALUES ('7219', '3', '373', '284', '7177', '374'); -INSERT INTO cp_tree VALUES ('7220', '3', '375', '284', '7177', '376'); -INSERT INTO cp_tree VALUES ('7221', '3', '377', '284', '7177', '378'); -INSERT INTO cp_tree VALUES ('7222', '3', '379', '284', '7177', '380'); -INSERT INTO cp_tree VALUES ('7223', '3', '381', '284', '7177', '382'); -INSERT INTO cp_tree VALUES ('7224', '3', '383', '284', '7177', '384'); -INSERT INTO cp_tree VALUES ('7225', '3', '385', '284', '7177', '386'); -INSERT INTO cp_tree VALUES ('7226', '3', '387', '284', '7177', '388'); -INSERT INTO cp_tree VALUES ('7227', '3', '389', '284', '7177', '390'); -INSERT INTO cp_tree VALUES ('7228', '3', '391', '284', '7177', '392'); -INSERT INTO cp_tree VALUES ('7229', '3', '393', '284', '7177', '394'); -INSERT INTO cp_tree VALUES ('7230', '3', '395', '284', '7177', '396'); -INSERT INTO cp_tree VALUES ('7231', '3', '397', '284', '7177', '398'); -INSERT INTO cp_tree VALUES ('7232', '3', '399', '284', '7177', '400'); -INSERT INTO cp_tree VALUES ('7233', '3', '401', '284', '7177', '402'); -INSERT INTO cp_tree VALUES ('7234', '3', '403', '284', '7177', '404'); -INSERT INTO cp_tree VALUES ('7235', '3', '405', '284', '7177', '406'); -INSERT INTO cp_tree VALUES ('7236', '3', '407', '284', '7177', '408'); -INSERT INTO cp_tree VALUES ('7237', '3', '409', '284', '7177', '410'); -INSERT INTO cp_tree VALUES ('7238', '3', '411', '284', '7177', '412'); -INSERT INTO cp_tree VALUES ('7239', '3', '413', '284', '7177', '414'); -INSERT INTO cp_tree VALUES ('7240', '3', '415', '284', '7177', '416'); -INSERT INTO cp_tree VALUES ('7241', '3', '417', '284', '7177', '418'); -INSERT INTO cp_tree VALUES ('7242', '3', '419', '284', '7177', '420'); -INSERT INTO cp_tree VALUES ('7243', '3', '421', '284', '7177', '422'); -INSERT INTO cp_tree VALUES ('7244', '3', '423', '284', '7177', '424'); -INSERT INTO cp_tree VALUES ('7245', '3', '425', '284', '7177', '426'); -INSERT INTO cp_tree VALUES ('7246', '2', '428', '284', '7032', '435'); -INSERT INTO cp_tree VALUES ('7247', '3', '429', '284', '7246', '430'); -INSERT INTO cp_tree VALUES ('7248', '3', '431', '284', '7246', '432'); -INSERT INTO cp_tree VALUES ('7249', '3', '433', '284', '7246', '434'); -INSERT INTO cp_tree VALUES ('7250', '2', '436', '284', '7032', '449'); -INSERT INTO cp_tree VALUES ('7251', '3', '437', '284', '7250', '438'); -INSERT INTO cp_tree VALUES ('7252', '3', '439', '284', '7250', '440'); -INSERT INTO cp_tree VALUES ('7253', '3', '441', '284', '7250', '442'); -INSERT INTO cp_tree VALUES ('7254', '3', '443', '284', '7250', '444'); -INSERT INTO cp_tree VALUES ('7255', '3', '445', '284', '7250', '446'); -INSERT INTO cp_tree VALUES ('7256', '3', '447', '284', '7250', '448'); -INSERT INTO cp_tree VALUES ('7257', '2', '450', '284', '7032', '453'); -INSERT INTO cp_tree VALUES ('7258', '3', '451', '284', '7257', '452'); -INSERT INTO cp_tree VALUES ('7259', '2', '454', '284', '7032', '591'); -INSERT INTO cp_tree VALUES ('7260', '3', '455', '284', '7259', '456'); -INSERT INTO cp_tree VALUES ('7261', '3', '457', '284', '7259', '458'); -INSERT INTO cp_tree VALUES ('7262', '3', '459', '284', '7259', '460'); -INSERT INTO cp_tree VALUES ('7263', '3', '461', '284', '7259', '462'); -INSERT INTO cp_tree VALUES ('7264', '3', '463', '284', '7259', '464'); -INSERT INTO cp_tree VALUES ('7265', '3', '465', '284', '7259', '466'); -INSERT INTO cp_tree VALUES ('7266', '3', '467', '284', '7259', '468'); -INSERT INTO cp_tree VALUES ('7267', '3', '469', '284', '7259', '470'); -INSERT INTO cp_tree VALUES ('7268', '3', '471', '284', '7259', '472'); -INSERT INTO cp_tree VALUES ('7269', '3', '473', '284', '7259', '474'); -INSERT INTO cp_tree VALUES ('7270', '3', '475', '284', '7259', '476'); -INSERT INTO cp_tree VALUES ('7271', '3', '477', '284', '7259', '478'); -INSERT INTO cp_tree VALUES ('7272', '3', '479', '284', '7259', '480'); -INSERT INTO cp_tree VALUES ('7273', '3', '481', '284', '7259', '482'); -INSERT INTO cp_tree VALUES ('7274', '3', '483', '284', '7259', '484'); -INSERT INTO cp_tree VALUES ('7275', '3', '485', '284', '7259', '486'); -INSERT INTO cp_tree VALUES ('7276', '3', '487', '284', '7259', '488'); -INSERT INTO cp_tree VALUES ('7277', '3', '489', '284', '7259', '490'); -INSERT INTO cp_tree VALUES ('7278', '3', '491', '284', '7259', '492'); -INSERT INTO cp_tree VALUES ('7279', '3', '493', '284', '7259', '494'); -INSERT INTO cp_tree VALUES ('7280', '3', '495', '284', '7259', '496'); -INSERT INTO cp_tree VALUES ('7281', '3', '497', '284', '7259', '498'); -INSERT INTO cp_tree VALUES ('7282', '3', '499', '284', '7259', '500'); -INSERT INTO cp_tree VALUES ('7283', '3', '501', '284', '7259', '502'); -INSERT INTO cp_tree VALUES ('7284', '3', '503', '284', '7259', '504'); -INSERT INTO cp_tree VALUES ('7285', '3', '505', '284', '7259', '506'); -INSERT INTO cp_tree VALUES ('7286', '3', '507', '284', '7259', '508'); -INSERT INTO cp_tree VALUES ('7287', '3', '509', '284', '7259', '510'); -INSERT INTO cp_tree VALUES ('7288', '3', '511', '284', '7259', '512'); -INSERT INTO cp_tree VALUES ('7289', '3', '513', '284', '7259', '514'); -INSERT INTO cp_tree VALUES ('7290', '3', '515', '284', '7259', '516'); -INSERT INTO cp_tree VALUES ('7291', '3', '517', '284', '7259', '518'); -INSERT INTO cp_tree VALUES ('7292', '3', '519', '284', '7259', '520'); -INSERT INTO cp_tree VALUES ('7293', '3', '521', '284', '7259', '522'); -INSERT INTO cp_tree VALUES ('7294', '3', '523', '284', '7259', '524'); -INSERT INTO cp_tree VALUES ('7295', '3', '525', '284', '7259', '526'); -INSERT INTO cp_tree VALUES ('7296', '3', '527', '284', '7259', '528'); -INSERT INTO cp_tree VALUES ('7297', '3', '529', '284', '7259', '530'); -INSERT INTO cp_tree VALUES ('7298', '3', '531', '284', '7259', '532'); -INSERT INTO cp_tree VALUES ('7299', '3', '533', '284', '7259', '534'); -INSERT INTO cp_tree VALUES ('7300', '3', '535', '284', '7259', '536'); -INSERT INTO cp_tree VALUES ('7301', '3', '537', '284', '7259', '538'); -INSERT INTO cp_tree VALUES ('7302', '3', '539', '284', '7259', '540'); -INSERT INTO cp_tree VALUES ('7303', '3', '541', '284', '7259', '542'); -INSERT INTO cp_tree VALUES ('7304', '3', '543', '284', '7259', '544'); -INSERT INTO cp_tree VALUES ('7305', '3', '545', '284', '7259', '546'); -INSERT INTO cp_tree VALUES ('7306', '3', '547', '284', '7259', '548'); -INSERT INTO cp_tree VALUES ('7307', '3', '549', '284', '7259', '550'); -INSERT INTO cp_tree VALUES ('7308', '3', '551', '284', '7259', '552'); -INSERT INTO cp_tree VALUES ('7309', '3', '553', '284', '7259', '554'); -INSERT INTO cp_tree VALUES ('7310', '3', '555', '284', '7259', '556'); -INSERT INTO cp_tree VALUES ('7311', '3', '557', '284', '7259', '558'); -INSERT INTO cp_tree VALUES ('7312', '3', '559', '284', '7259', '560'); -INSERT INTO cp_tree VALUES ('7313', '3', '561', '284', '7259', '562'); -INSERT INTO cp_tree VALUES ('7314', '3', '563', '284', '7259', '564'); -INSERT INTO cp_tree VALUES ('7315', '3', '565', '284', '7259', '566'); -INSERT INTO cp_tree VALUES ('7316', '3', '567', '284', '7259', '568'); -INSERT INTO cp_tree VALUES ('7317', '3', '569', '284', '7259', '570'); -INSERT INTO cp_tree VALUES ('7318', '3', '571', '284', '7259', '572'); -INSERT INTO cp_tree VALUES ('7319', '3', '573', '284', '7259', '574'); -INSERT INTO cp_tree VALUES ('7320', '3', '575', '284', '7259', '576'); -INSERT INTO cp_tree VALUES ('7321', '3', '577', '284', '7259', '578'); -INSERT INTO cp_tree VALUES ('7322', '3', '579', '284', '7259', '580'); -INSERT INTO cp_tree VALUES ('7323', '3', '581', '284', '7259', '582'); -INSERT INTO cp_tree VALUES ('7324', '3', '583', '284', '7259', '584'); -INSERT INTO cp_tree VALUES ('7325', '3', '585', '284', '7259', '586'); -INSERT INTO cp_tree VALUES ('7326', '3', '587', '284', '7259', '588'); -INSERT INTO cp_tree VALUES ('7327', '3', '589', '284', '7259', '590'); -INSERT INTO cp_tree VALUES ('7328', '2', '592', '284', '7032', '599'); -INSERT INTO cp_tree VALUES ('7329', '3', '593', '284', '7328', '594'); -INSERT INTO cp_tree VALUES ('7330', '3', '595', '284', '7328', '596'); -INSERT INTO cp_tree VALUES ('7331', '3', '597', '284', '7328', '598'); -INSERT INTO cp_tree VALUES ('7332', '2', '600', '284', '7032', '609'); -INSERT INTO cp_tree VALUES ('7333', '3', '601', '284', '7332', '602'); -INSERT INTO cp_tree VALUES ('7334', '3', '603', '284', '7332', '604'); -INSERT INTO cp_tree VALUES ('7335', '3', '605', '284', '7332', '606'); -INSERT INTO cp_tree VALUES ('7336', '3', '607', '284', '7332', '608'); -INSERT INTO cp_tree VALUES ('7337', '2', '610', '284', '7032', '613'); -INSERT INTO cp_tree VALUES ('7338', '3', '611', '284', '7337', '612'); -INSERT INTO cp_tree VALUES ('7339', '2', '614', '284', '7032', '751'); -INSERT INTO cp_tree VALUES ('7340', '3', '615', '284', '7339', '616'); -INSERT INTO cp_tree VALUES ('7341', '3', '617', '284', '7339', '618'); -INSERT INTO cp_tree VALUES ('7342', '3', '619', '284', '7339', '620'); -INSERT INTO cp_tree VALUES ('7343', '3', '621', '284', '7339', '622'); -INSERT INTO cp_tree VALUES ('7344', '3', '623', '284', '7339', '624'); -INSERT INTO cp_tree VALUES ('7345', '3', '625', '284', '7339', '626'); -INSERT INTO cp_tree VALUES ('7346', '3', '627', '284', '7339', '628'); -INSERT INTO cp_tree VALUES ('7347', '3', '629', '284', '7339', '630'); -INSERT INTO cp_tree VALUES ('7348', '3', '631', '284', '7339', '632'); -INSERT INTO cp_tree VALUES ('7349', '3', '633', '284', '7339', '634'); -INSERT INTO cp_tree VALUES ('7350', '3', '635', '284', '7339', '636'); -INSERT INTO cp_tree VALUES ('7351', '3', '637', '284', '7339', '638'); -INSERT INTO cp_tree VALUES ('7352', '3', '639', '284', '7339', '640'); -INSERT INTO cp_tree VALUES ('7353', '3', '641', '284', '7339', '642'); -INSERT INTO cp_tree VALUES ('7354', '3', '643', '284', '7339', '644'); -INSERT INTO cp_tree VALUES ('7355', '3', '645', '284', '7339', '646'); -INSERT INTO cp_tree VALUES ('7356', '3', '647', '284', '7339', '648'); -INSERT INTO cp_tree VALUES ('7357', '3', '649', '284', '7339', '650'); -INSERT INTO cp_tree VALUES ('7358', '3', '651', '284', '7339', '652'); -INSERT INTO cp_tree VALUES ('7359', '3', '653', '284', '7339', '654'); -INSERT INTO cp_tree VALUES ('7360', '3', '655', '284', '7339', '656'); -INSERT INTO cp_tree VALUES ('7361', '3', '657', '284', '7339', '658'); -INSERT INTO cp_tree VALUES ('7362', '3', '659', '284', '7339', '660'); -INSERT INTO cp_tree VALUES ('7363', '3', '661', '284', '7339', '662'); -INSERT INTO cp_tree VALUES ('7364', '3', '663', '284', '7339', '664'); -INSERT INTO cp_tree VALUES ('7365', '3', '665', '284', '7339', '666'); -INSERT INTO cp_tree VALUES ('7366', '3', '667', '284', '7339', '668'); -INSERT INTO cp_tree VALUES ('7367', '3', '669', '284', '7339', '670'); -INSERT INTO cp_tree VALUES ('7368', '3', '671', '284', '7339', '672'); -INSERT INTO cp_tree VALUES ('7369', '3', '673', '284', '7339', '674'); -INSERT INTO cp_tree VALUES ('7370', '3', '675', '284', '7339', '676'); -INSERT INTO cp_tree VALUES ('7371', '3', '677', '284', '7339', '678'); -INSERT INTO cp_tree VALUES ('7372', '3', '679', '284', '7339', '680'); -INSERT INTO cp_tree VALUES ('7373', '3', '681', '284', '7339', '682'); -INSERT INTO cp_tree VALUES ('7374', '3', '683', '284', '7339', '684'); -INSERT INTO cp_tree VALUES ('7375', '3', '685', '284', '7339', '686'); -INSERT INTO cp_tree VALUES ('7376', '3', '687', '284', '7339', '688'); -INSERT INTO cp_tree VALUES ('7377', '3', '689', '284', '7339', '690'); -INSERT INTO cp_tree VALUES ('7378', '3', '691', '284', '7339', '692'); -INSERT INTO cp_tree VALUES ('7379', '3', '693', '284', '7339', '694'); -INSERT INTO cp_tree VALUES ('7380', '3', '695', '284', '7339', '696'); -INSERT INTO cp_tree VALUES ('7381', '3', '697', '284', '7339', '698'); -INSERT INTO cp_tree VALUES ('7382', '3', '699', '284', '7339', '700'); -INSERT INTO cp_tree VALUES ('7383', '3', '701', '284', '7339', '702'); -INSERT INTO cp_tree VALUES ('7384', '3', '703', '284', '7339', '704'); -INSERT INTO cp_tree VALUES ('7385', '3', '705', '284', '7339', '706'); -INSERT INTO cp_tree VALUES ('7386', '3', '707', '284', '7339', '708'); -INSERT INTO cp_tree VALUES ('7387', '3', '709', '284', '7339', '710'); -INSERT INTO cp_tree VALUES ('7388', '3', '711', '284', '7339', '712'); -INSERT INTO cp_tree VALUES ('7389', '3', '713', '284', '7339', '714'); -INSERT INTO cp_tree VALUES ('7390', '3', '715', '284', '7339', '716'); -INSERT INTO cp_tree VALUES ('7391', '3', '717', '284', '7339', '718'); -INSERT INTO cp_tree VALUES ('7392', '3', '719', '284', '7339', '720'); -INSERT INTO cp_tree VALUES ('7393', '3', '721', '284', '7339', '722'); -INSERT INTO cp_tree VALUES ('7394', '3', '723', '284', '7339', '724'); -INSERT INTO cp_tree VALUES ('7395', '3', '725', '284', '7339', '726'); -INSERT INTO cp_tree VALUES ('7396', '3', '727', '284', '7339', '728'); -INSERT INTO cp_tree VALUES ('7397', '3', '729', '284', '7339', '730'); -INSERT INTO cp_tree VALUES ('7398', '3', '731', '284', '7339', '732'); -INSERT INTO cp_tree VALUES ('7399', '3', '733', '284', '7339', '734'); -INSERT INTO cp_tree VALUES ('7400', '3', '735', '284', '7339', '736'); -INSERT INTO cp_tree VALUES ('7401', '3', '737', '284', '7339', '738'); -INSERT INTO cp_tree VALUES ('7402', '3', '739', '284', '7339', '740'); -INSERT INTO cp_tree VALUES ('7403', '3', '741', '284', '7339', '742'); -INSERT INTO cp_tree VALUES ('7404', '3', '743', '284', '7339', '744'); -INSERT INTO cp_tree VALUES ('7405', '3', '745', '284', '7339', '746'); -INSERT INTO cp_tree VALUES ('7406', '3', '747', '284', '7339', '748'); -INSERT INTO cp_tree VALUES ('7407', '3', '749', '284', '7339', '750'); -INSERT INTO cp_tree VALUES ('7408', '2', '752', '284', '7032', '759'); -INSERT INTO cp_tree VALUES ('7409', '3', '753', '284', '7408', '754'); -INSERT INTO cp_tree VALUES ('7410', '3', '755', '284', '7408', '756'); -INSERT INTO cp_tree VALUES ('7411', '3', '757', '284', '7408', '758'); -INSERT INTO cp_tree VALUES ('7412', '2', '760', '284', '7032', '783'); -INSERT INTO cp_tree VALUES ('7413', '3', '761', '284', '7412', '762'); -INSERT INTO cp_tree VALUES ('7414', '3', '763', '284', '7412', '764'); -INSERT INTO cp_tree VALUES ('7415', '3', '765', '284', '7412', '766'); -INSERT INTO cp_tree VALUES ('7416', '3', '767', '284', '7412', '768'); -INSERT INTO cp_tree VALUES ('7417', '3', '769', '284', '7412', '770'); -INSERT INTO cp_tree VALUES ('7418', '3', '771', '284', '7412', '772'); -INSERT INTO cp_tree VALUES ('7419', '3', '773', '284', '7412', '774'); -INSERT INTO cp_tree VALUES ('7420', '3', '775', '284', '7412', '776'); -INSERT INTO cp_tree VALUES ('7421', '3', '777', '284', '7412', '778'); -INSERT INTO cp_tree VALUES ('7422', '3', '779', '284', '7412', '780'); -INSERT INTO cp_tree VALUES ('7423', '3', '781', '284', '7412', '782'); -INSERT INTO cp_tree VALUES ('7424', '2', '784', '284', '7032', '787'); -INSERT INTO cp_tree VALUES ('7425', '3', '785', '284', '7424', '786'); -INSERT INTO cp_tree VALUES ('7426', '2', '788', '284', '7032', '925'); -INSERT INTO cp_tree VALUES ('7427', '3', '789', '284', '7426', '790'); -INSERT INTO cp_tree VALUES ('7428', '3', '791', '284', '7426', '792'); -INSERT INTO cp_tree VALUES ('7429', '3', '793', '284', '7426', '794'); -INSERT INTO cp_tree VALUES ('7430', '3', '795', '284', '7426', '796'); -INSERT INTO cp_tree VALUES ('7431', '3', '797', '284', '7426', '798'); -INSERT INTO cp_tree VALUES ('7432', '3', '799', '284', '7426', '800'); -INSERT INTO cp_tree VALUES ('7433', '3', '801', '284', '7426', '802'); -INSERT INTO cp_tree VALUES ('7434', '3', '803', '284', '7426', '804'); -INSERT INTO cp_tree VALUES ('7435', '3', '805', '284', '7426', '806'); -INSERT INTO cp_tree VALUES ('7436', '3', '807', '284', '7426', '808'); -INSERT INTO cp_tree VALUES ('7437', '3', '809', '284', '7426', '810'); -INSERT INTO cp_tree VALUES ('7438', '3', '811', '284', '7426', '812'); -INSERT INTO cp_tree VALUES ('7439', '3', '813', '284', '7426', '814'); -INSERT INTO cp_tree VALUES ('7440', '3', '815', '284', '7426', '816'); -INSERT INTO cp_tree VALUES ('7441', '3', '817', '284', '7426', '818'); -INSERT INTO cp_tree VALUES ('7442', '3', '819', '284', '7426', '820'); -INSERT INTO cp_tree VALUES ('7443', '3', '821', '284', '7426', '822'); -INSERT INTO cp_tree VALUES ('7444', '3', '823', '284', '7426', '824'); -INSERT INTO cp_tree VALUES ('7445', '3', '825', '284', '7426', '826'); -INSERT INTO cp_tree VALUES ('7446', '3', '827', '284', '7426', '828'); -INSERT INTO cp_tree VALUES ('7447', '3', '829', '284', '7426', '830'); -INSERT INTO cp_tree VALUES ('7448', '3', '831', '284', '7426', '832'); -INSERT INTO cp_tree VALUES ('7449', '3', '833', '284', '7426', '834'); -INSERT INTO cp_tree VALUES ('7450', '3', '835', '284', '7426', '836'); -INSERT INTO cp_tree VALUES ('7451', '3', '837', '284', '7426', '838'); -INSERT INTO cp_tree VALUES ('7452', '3', '839', '284', '7426', '840'); -INSERT INTO cp_tree VALUES ('7453', '3', '841', '284', '7426', '842'); -INSERT INTO cp_tree VALUES ('7454', '3', '843', '284', '7426', '844'); -INSERT INTO cp_tree VALUES ('7455', '3', '845', '284', '7426', '846'); -INSERT INTO cp_tree VALUES ('7456', '3', '847', '284', '7426', '848'); -INSERT INTO cp_tree VALUES ('7457', '3', '849', '284', '7426', '850'); -INSERT INTO cp_tree VALUES ('7458', '3', '851', '284', '7426', '852'); -INSERT INTO cp_tree VALUES ('7459', '3', '853', '284', '7426', '854'); -INSERT INTO cp_tree VALUES ('7460', '3', '855', '284', '7426', '856'); -INSERT INTO cp_tree VALUES ('7461', '3', '857', '284', '7426', '858'); -INSERT INTO cp_tree VALUES ('7462', '3', '859', '284', '7426', '860'); -INSERT INTO cp_tree VALUES ('7463', '3', '861', '284', '7426', '862'); -INSERT INTO cp_tree VALUES ('7464', '3', '863', '284', '7426', '864'); -INSERT INTO cp_tree VALUES ('7465', '3', '865', '284', '7426', '866'); -INSERT INTO cp_tree VALUES ('7466', '3', '867', '284', '7426', '868'); -INSERT INTO cp_tree VALUES ('7467', '3', '869', '284', '7426', '870'); -INSERT INTO cp_tree VALUES ('7468', '3', '871', '284', '7426', '872'); -INSERT INTO cp_tree VALUES ('7469', '3', '873', '284', '7426', '874'); -INSERT INTO cp_tree VALUES ('7470', '3', '875', '284', '7426', '876'); -INSERT INTO cp_tree VALUES ('7471', '3', '877', '284', '7426', '878'); -INSERT INTO cp_tree VALUES ('7472', '3', '879', '284', '7426', '880'); -INSERT INTO cp_tree VALUES ('7473', '3', '881', '284', '7426', '882'); -INSERT INTO cp_tree VALUES ('7474', '3', '883', '284', '7426', '884'); -INSERT INTO cp_tree VALUES ('7475', '3', '885', '284', '7426', '886'); -INSERT INTO cp_tree VALUES ('7476', '3', '887', '284', '7426', '888'); -INSERT INTO cp_tree VALUES ('7477', '3', '889', '284', '7426', '890'); -INSERT INTO cp_tree VALUES ('7478', '3', '891', '284', '7426', '892'); -INSERT INTO cp_tree VALUES ('7479', '3', '893', '284', '7426', '894'); -INSERT INTO cp_tree VALUES ('7480', '3', '895', '284', '7426', '896'); -INSERT INTO cp_tree VALUES ('7481', '3', '897', '284', '7426', '898'); -INSERT INTO cp_tree VALUES ('7482', '3', '899', '284', '7426', '900'); -INSERT INTO cp_tree VALUES ('7483', '3', '901', '284', '7426', '902'); -INSERT INTO cp_tree VALUES ('7484', '3', '903', '284', '7426', '904'); -INSERT INTO cp_tree VALUES ('7485', '3', '905', '284', '7426', '906'); -INSERT INTO cp_tree VALUES ('7486', '3', '907', '284', '7426', '908'); -INSERT INTO cp_tree VALUES ('7487', '3', '909', '284', '7426', '910'); -INSERT INTO cp_tree VALUES ('7488', '3', '911', '284', '7426', '912'); -INSERT INTO cp_tree VALUES ('7489', '3', '913', '284', '7426', '914'); -INSERT INTO cp_tree VALUES ('7490', '3', '915', '284', '7426', '916'); -INSERT INTO cp_tree VALUES ('7491', '3', '917', '284', '7426', '918'); -INSERT INTO cp_tree VALUES ('7492', '3', '919', '284', '7426', '920'); -INSERT INTO cp_tree VALUES ('7493', '3', '921', '284', '7426', '922'); -INSERT INTO cp_tree VALUES ('7494', '3', '923', '284', '7426', '924'); -INSERT INTO cp_tree VALUES ('7495', '2', '926', '284', '7032', '933'); -INSERT INTO cp_tree VALUES ('7496', '3', '927', '284', '7495', '928'); -INSERT INTO cp_tree VALUES ('7497', '3', '929', '284', '7495', '930'); -INSERT INTO cp_tree VALUES ('7498', '3', '931', '284', '7495', '932'); -INSERT INTO cp_tree VALUES ('7499', '2', '934', '284', '7032', '951'); -INSERT INTO cp_tree VALUES ('7500', '3', '935', '284', '7499', '936'); -INSERT INTO cp_tree VALUES ('7501', '3', '937', '284', '7499', '938'); -INSERT INTO cp_tree VALUES ('7502', '3', '939', '284', '7499', '940'); -INSERT INTO cp_tree VALUES ('7503', '3', '941', '284', '7499', '942'); -INSERT INTO cp_tree VALUES ('7504', '3', '943', '284', '7499', '944'); -INSERT INTO cp_tree VALUES ('7505', '3', '945', '284', '7499', '946'); -INSERT INTO cp_tree VALUES ('7506', '3', '947', '284', '7499', '948'); -INSERT INTO cp_tree VALUES ('7507', '3', '949', '284', '7499', '950'); -INSERT INTO cp_tree VALUES ('7508', '2', '952', '284', '7032', '955'); -INSERT INTO cp_tree VALUES ('7509', '3', '953', '284', '7508', '954'); -INSERT INTO cp_tree VALUES ('7510', '2', '956', '284', '7032', '1093'); -INSERT INTO cp_tree VALUES ('7511', '3', '957', '284', '7510', '958'); -INSERT INTO cp_tree VALUES ('7512', '3', '959', '284', '7510', '960'); -INSERT INTO cp_tree VALUES ('7513', '3', '961', '284', '7510', '962'); -INSERT INTO cp_tree VALUES ('7514', '3', '963', '284', '7510', '964'); -INSERT INTO cp_tree VALUES ('7515', '3', '965', '284', '7510', '966'); -INSERT INTO cp_tree VALUES ('7516', '3', '967', '284', '7510', '968'); -INSERT INTO cp_tree VALUES ('7517', '3', '969', '284', '7510', '970'); -INSERT INTO cp_tree VALUES ('7518', '3', '971', '284', '7510', '972'); -INSERT INTO cp_tree VALUES ('7519', '3', '973', '284', '7510', '974'); -INSERT INTO cp_tree VALUES ('7520', '3', '975', '284', '7510', '976'); -INSERT INTO cp_tree VALUES ('7521', '3', '977', '284', '7510', '978'); -INSERT INTO cp_tree VALUES ('7522', '3', '979', '284', '7510', '980'); -INSERT INTO cp_tree VALUES ('7523', '3', '981', '284', '7510', '982'); -INSERT INTO cp_tree VALUES ('7524', '3', '983', '284', '7510', '984'); -INSERT INTO cp_tree VALUES ('7525', '3', '985', '284', '7510', '986'); -INSERT INTO cp_tree VALUES ('7526', '3', '987', '284', '7510', '988'); -INSERT INTO cp_tree VALUES ('7527', '3', '989', '284', '7510', '990'); -INSERT INTO cp_tree VALUES ('7528', '3', '991', '284', '7510', '992'); -INSERT INTO cp_tree VALUES ('7529', '3', '993', '284', '7510', '994'); -INSERT INTO cp_tree VALUES ('7530', '3', '995', '284', '7510', '996'); -INSERT INTO cp_tree VALUES ('7531', '3', '997', '284', '7510', '998'); -INSERT INTO cp_tree VALUES ('7532', '3', '999', '284', '7510', '1000'); -INSERT INTO cp_tree VALUES ('7533', '3', '1001', '284', '7510', '1002'); -INSERT INTO cp_tree VALUES ('7534', '3', '1003', '284', '7510', '1004'); -INSERT INTO cp_tree VALUES ('7535', '3', '1005', '284', '7510', '1006'); -INSERT INTO cp_tree VALUES ('7536', '3', '1007', '284', '7510', '1008'); -INSERT INTO cp_tree VALUES ('7537', '3', '1009', '284', '7510', '1010'); -INSERT INTO cp_tree VALUES ('7538', '3', '1011', '284', '7510', '1012'); -INSERT INTO cp_tree VALUES ('7539', '3', '1013', '284', '7510', '1014'); -INSERT INTO cp_tree VALUES ('7540', '3', '1015', '284', '7510', '1016'); -INSERT INTO cp_tree VALUES ('7541', '3', '1017', '284', '7510', '1018'); -INSERT INTO cp_tree VALUES ('7542', '3', '1019', '284', '7510', '1020'); -INSERT INTO cp_tree VALUES ('7543', '3', '1021', '284', '7510', '1022'); -INSERT INTO cp_tree VALUES ('7544', '3', '1023', '284', '7510', '1024'); -INSERT INTO cp_tree VALUES ('7545', '3', '1025', '284', '7510', '1026'); -INSERT INTO cp_tree VALUES ('7546', '3', '1027', '284', '7510', '1028'); -INSERT INTO cp_tree VALUES ('7547', '3', '1029', '284', '7510', '1030'); -INSERT INTO cp_tree VALUES ('7548', '3', '1031', '284', '7510', '1032'); -INSERT INTO cp_tree VALUES ('7549', '3', '1033', '284', '7510', '1034'); -INSERT INTO cp_tree VALUES ('7550', '3', '1035', '284', '7510', '1036'); -INSERT INTO cp_tree VALUES ('7551', '3', '1037', '284', '7510', '1038'); -INSERT INTO cp_tree VALUES ('7552', '3', '1039', '284', '7510', '1040'); -INSERT INTO cp_tree VALUES ('7553', '3', '1041', '284', '7510', '1042'); -INSERT INTO cp_tree VALUES ('7554', '3', '1043', '284', '7510', '1044'); -INSERT INTO cp_tree VALUES ('7555', '3', '1045', '284', '7510', '1046'); -INSERT INTO cp_tree VALUES ('7556', '3', '1047', '284', '7510', '1048'); -INSERT INTO cp_tree VALUES ('7557', '3', '1049', '284', '7510', '1050'); -INSERT INTO cp_tree VALUES ('7558', '3', '1051', '284', '7510', '1052'); -INSERT INTO cp_tree VALUES ('7559', '3', '1053', '284', '7510', '1054'); -INSERT INTO cp_tree VALUES ('7560', '3', '1055', '284', '7510', '1056'); -INSERT INTO cp_tree VALUES ('7561', '3', '1057', '284', '7510', '1058'); -INSERT INTO cp_tree VALUES ('7562', '3', '1059', '284', '7510', '1060'); -INSERT INTO cp_tree VALUES ('7563', '3', '1061', '284', '7510', '1062'); -INSERT INTO cp_tree VALUES ('7564', '3', '1063', '284', '7510', '1064'); -INSERT INTO cp_tree VALUES ('7565', '3', '1065', '284', '7510', '1066'); -INSERT INTO cp_tree VALUES ('7566', '3', '1067', '284', '7510', '1068'); -INSERT INTO cp_tree VALUES ('7567', '3', '1069', '284', '7510', '1070'); -INSERT INTO cp_tree VALUES ('7568', '3', '1071', '284', '7510', '1072'); -INSERT INTO cp_tree VALUES ('7569', '3', '1073', '284', '7510', '1074'); -INSERT INTO cp_tree VALUES ('7570', '3', '1075', '284', '7510', '1076'); -INSERT INTO cp_tree VALUES ('7571', '3', '1077', '284', '7510', '1078'); -INSERT INTO cp_tree VALUES ('7572', '3', '1079', '284', '7510', '1080'); -INSERT INTO cp_tree VALUES ('7573', '3', '1081', '284', '7510', '1082'); -INSERT INTO cp_tree VALUES ('7574', '3', '1083', '284', '7510', '1084'); -INSERT INTO cp_tree VALUES ('7575', '3', '1085', '284', '7510', '1086'); -INSERT INTO cp_tree VALUES ('7576', '3', '1087', '284', '7510', '1088'); -INSERT INTO cp_tree VALUES ('7577', '3', '1089', '284', '7510', '1090'); -INSERT INTO cp_tree VALUES ('7578', '3', '1091', '284', '7510', '1092'); -INSERT INTO cp_tree VALUES ('7579', '2', '1094', '284', '7032', '1101'); -INSERT INTO cp_tree VALUES ('7580', '3', '1095', '284', '7579', '1096'); -INSERT INTO cp_tree VALUES ('7581', '3', '1097', '284', '7579', '1098'); -INSERT INTO cp_tree VALUES ('7582', '3', '1099', '284', '7579', '1100'); -INSERT INTO cp_tree VALUES ('7583', '2', '1102', '284', '7032', '1111'); -INSERT INTO cp_tree VALUES ('7584', '3', '1103', '284', '7583', '1104'); -INSERT INTO cp_tree VALUES ('7585', '3', '1105', '284', '7583', '1106'); -INSERT INTO cp_tree VALUES ('7586', '3', '1107', '284', '7583', '1108'); -INSERT INTO cp_tree VALUES ('7587', '3', '1109', '284', '7583', '1110'); -INSERT INTO cp_tree VALUES ('7588', '2', '1112', '284', '7032', '1115'); -INSERT INTO cp_tree VALUES ('7589', '3', '1113', '284', '7588', '1114'); -INSERT INTO cp_tree VALUES ('7590', '2', '1116', '284', '7032', '1253'); -INSERT INTO cp_tree VALUES ('7591', '3', '1117', '284', '7590', '1118'); -INSERT INTO cp_tree VALUES ('7592', '3', '1119', '284', '7590', '1120'); -INSERT INTO cp_tree VALUES ('7593', '3', '1121', '284', '7590', '1122'); -INSERT INTO cp_tree VALUES ('7594', '3', '1123', '284', '7590', '1124'); -INSERT INTO cp_tree VALUES ('7595', '3', '1125', '284', '7590', '1126'); -INSERT INTO cp_tree VALUES ('7596', '3', '1127', '284', '7590', '1128'); -INSERT INTO cp_tree VALUES ('7597', '3', '1129', '284', '7590', '1130'); -INSERT INTO cp_tree VALUES ('7598', '3', '1131', '284', '7590', '1132'); -INSERT INTO cp_tree VALUES ('7599', '3', '1133', '284', '7590', '1134'); -INSERT INTO cp_tree VALUES ('7600', '3', '1135', '284', '7590', '1136'); -INSERT INTO cp_tree VALUES ('7601', '3', '1137', '284', '7590', '1138'); -INSERT INTO cp_tree VALUES ('7602', '3', '1139', '284', '7590', '1140'); -INSERT INTO cp_tree VALUES ('7603', '3', '1141', '284', '7590', '1142'); -INSERT INTO cp_tree VALUES ('7604', '3', '1143', '284', '7590', '1144'); -INSERT INTO cp_tree VALUES ('7605', '3', '1145', '284', '7590', '1146'); -INSERT INTO cp_tree VALUES ('7606', '3', '1147', '284', '7590', '1148'); -INSERT INTO cp_tree VALUES ('7607', '3', '1149', '284', '7590', '1150'); -INSERT INTO cp_tree VALUES ('7608', '3', '1151', '284', '7590', '1152'); -INSERT INTO cp_tree VALUES ('7609', '3', '1153', '284', '7590', '1154'); -INSERT INTO cp_tree VALUES ('7610', '3', '1155', '284', '7590', '1156'); -INSERT INTO cp_tree VALUES ('7611', '3', '1157', '284', '7590', '1158'); -INSERT INTO cp_tree VALUES ('7612', '3', '1159', '284', '7590', '1160'); -INSERT INTO cp_tree VALUES ('7613', '3', '1161', '284', '7590', '1162'); -INSERT INTO cp_tree VALUES ('7614', '3', '1163', '284', '7590', '1164'); -INSERT INTO cp_tree VALUES ('7615', '3', '1165', '284', '7590', '1166'); -INSERT INTO cp_tree VALUES ('7616', '3', '1167', '284', '7590', '1168'); -INSERT INTO cp_tree VALUES ('7617', '3', '1169', '284', '7590', '1170'); -INSERT INTO cp_tree VALUES ('7618', '3', '1171', '284', '7590', '1172'); -INSERT INTO cp_tree VALUES ('7619', '3', '1173', '284', '7590', '1174'); -INSERT INTO cp_tree VALUES ('7620', '3', '1175', '284', '7590', '1176'); -INSERT INTO cp_tree VALUES ('7621', '3', '1177', '284', '7590', '1178'); -INSERT INTO cp_tree VALUES ('7622', '3', '1179', '284', '7590', '1180'); -INSERT INTO cp_tree VALUES ('7623', '3', '1181', '284', '7590', '1182'); -INSERT INTO cp_tree VALUES ('7624', '3', '1183', '284', '7590', '1184'); -INSERT INTO cp_tree VALUES ('7625', '3', '1185', '284', '7590', '1186'); -INSERT INTO cp_tree VALUES ('7626', '3', '1187', '284', '7590', '1188'); -INSERT INTO cp_tree VALUES ('7627', '3', '1189', '284', '7590', '1190'); -INSERT INTO cp_tree VALUES ('7628', '3', '1191', '284', '7590', '1192'); -INSERT INTO cp_tree VALUES ('7629', '3', '1193', '284', '7590', '1194'); -INSERT INTO cp_tree VALUES ('7630', '3', '1195', '284', '7590', '1196'); -INSERT INTO cp_tree VALUES ('7631', '3', '1197', '284', '7590', '1198'); -INSERT INTO cp_tree VALUES ('7632', '3', '1199', '284', '7590', '1200'); -INSERT INTO cp_tree VALUES ('7633', '3', '1201', '284', '7590', '1202'); -INSERT INTO cp_tree VALUES ('7634', '3', '1203', '284', '7590', '1204'); -INSERT INTO cp_tree VALUES ('7635', '3', '1205', '284', '7590', '1206'); -INSERT INTO cp_tree VALUES ('7636', '3', '1207', '284', '7590', '1208'); -INSERT INTO cp_tree VALUES ('7637', '3', '1209', '284', '7590', '1210'); -INSERT INTO cp_tree VALUES ('7638', '3', '1211', '284', '7590', '1212'); -INSERT INTO cp_tree VALUES ('7639', '3', '1213', '284', '7590', '1214'); -INSERT INTO cp_tree VALUES ('7640', '3', '1215', '284', '7590', '1216'); -INSERT INTO cp_tree VALUES ('7641', '3', '1217', '284', '7590', '1218'); -INSERT INTO cp_tree VALUES ('7642', '3', '1219', '284', '7590', '1220'); -INSERT INTO cp_tree VALUES ('7643', '3', '1221', '284', '7590', '1222'); -INSERT INTO cp_tree VALUES ('7644', '3', '1223', '284', '7590', '1224'); -INSERT INTO cp_tree VALUES ('7645', '3', '1225', '284', '7590', '1226'); -INSERT INTO cp_tree VALUES ('7646', '3', '1227', '284', '7590', '1228'); -INSERT INTO cp_tree VALUES ('7647', '3', '1229', '284', '7590', '1230'); -INSERT INTO cp_tree VALUES ('7648', '3', '1231', '284', '7590', '1232'); -INSERT INTO cp_tree VALUES ('7649', '3', '1233', '284', '7590', '1234'); -INSERT INTO cp_tree VALUES ('7650', '3', '1235', '284', '7590', '1236'); -INSERT INTO cp_tree VALUES ('7651', '3', '1237', '284', '7590', '1238'); -INSERT INTO cp_tree VALUES ('7652', '3', '1239', '284', '7590', '1240'); -INSERT INTO cp_tree VALUES ('7653', '3', '1241', '284', '7590', '1242'); -INSERT INTO cp_tree VALUES ('7654', '3', '1243', '284', '7590', '1244'); -INSERT INTO cp_tree VALUES ('7655', '3', '1245', '284', '7590', '1246'); -INSERT INTO cp_tree VALUES ('7656', '3', '1247', '284', '7590', '1248'); -INSERT INTO cp_tree VALUES ('7657', '3', '1249', '284', '7590', '1250'); -INSERT INTO cp_tree VALUES ('7658', '3', '1251', '284', '7590', '1252'); -INSERT INTO cp_tree VALUES ('7659', '2', '1254', '284', '7032', '1289'); -INSERT INTO cp_tree VALUES ('7660', '3', '1255', '284', '7659', '1256'); -INSERT INTO cp_tree VALUES ('7661', '3', '1257', '284', '7659', '1258'); -INSERT INTO cp_tree VALUES ('7662', '3', '1259', '284', '7659', '1260'); -INSERT INTO cp_tree VALUES ('7663', '3', '1261', '284', '7659', '1262'); -INSERT INTO cp_tree VALUES ('7664', '3', '1263', '284', '7659', '1264'); -INSERT INTO cp_tree VALUES ('7665', '3', '1265', '284', '7659', '1266'); -INSERT INTO cp_tree VALUES ('7666', '3', '1267', '284', '7659', '1268'); -INSERT INTO cp_tree VALUES ('7667', '3', '1269', '284', '7659', '1270'); -INSERT INTO cp_tree VALUES ('7668', '3', '1271', '284', '7659', '1272'); -INSERT INTO cp_tree VALUES ('7669', '3', '1273', '284', '7659', '1274'); -INSERT INTO cp_tree VALUES ('7670', '3', '1275', '284', '7659', '1276'); -INSERT INTO cp_tree VALUES ('7671', '3', '1277', '284', '7659', '1278'); -INSERT INTO cp_tree VALUES ('7672', '3', '1279', '284', '7659', '1280'); -INSERT INTO cp_tree VALUES ('7673', '3', '1281', '284', '7659', '1282'); -INSERT INTO cp_tree VALUES ('7674', '3', '1283', '284', '7659', '1284'); -INSERT INTO cp_tree VALUES ('7675', '3', '1285', '284', '7659', '1286'); -INSERT INTO cp_tree VALUES ('7676', '3', '1287', '284', '7659', '1288'); -INSERT INTO cp_tree VALUES ('7677', '1', '1', '100', '0', '30'); -INSERT INTO cp_tree VALUES ('7678', '2', '2', '100', '7677', '25'); -INSERT INTO cp_tree VALUES ('7679', '3', '3', '100', '7678', '10'); -INSERT INTO cp_tree VALUES ('7680', '4', '4', '100', '7679', '5'); -INSERT INTO cp_tree VALUES ('7681', '4', '6', '100', '7679', '7'); -INSERT INTO cp_tree VALUES ('7682', '4', '8', '100', '7679', '9'); -INSERT INTO cp_tree VALUES ('7683', '3', '11', '100', '7678', '24'); -INSERT INTO cp_tree VALUES ('7684', '4', '12', '100', '7683', '13'); -INSERT INTO cp_tree VALUES ('7685', '4', '14', '100', '7683', '15'); -INSERT INTO cp_tree VALUES ('7686', '4', '16', '100', '7683', '19'); -INSERT INTO cp_tree VALUES ('7687', '5', '17', '100', '7686', '18'); -INSERT INTO cp_tree VALUES ('7688', '4', '20', '100', '7683', '21'); -INSERT INTO cp_tree VALUES ('7689', '4', '22', '100', '7683', '23'); -INSERT INTO cp_tree VALUES ('7690', '2', '26', '100', '7677', '27'); -INSERT INTO cp_tree VALUES ('7691', '2', '28', '100', '7677', '29'); -INSERT INTO cp_tree VALUES ('7692', '1', '1', '100', '0', '1290'); -INSERT INTO cp_tree VALUES ('7693', '2', '2', '100', '7692', '19'); -INSERT INTO cp_tree VALUES ('7694', '3', '3', '100', '7693', '18'); -INSERT INTO cp_tree VALUES ('7695', '4', '4', '100', '7694', '5'); -INSERT INTO cp_tree VALUES ('7696', '4', '6', '100', '7694', '7'); -INSERT INTO cp_tree VALUES ('7697', '4', '8', '100', '7694', '9'); -INSERT INTO cp_tree VALUES ('7698', '4', '10', '100', '7694', '11'); -INSERT INTO cp_tree VALUES ('7699', '4', '12', '100', '7694', '13'); -INSERT INTO cp_tree VALUES ('7700', '4', '14', '100', '7694', '15'); -INSERT INTO cp_tree VALUES ('7701', '4', '16', '100', '7694', '17'); -INSERT INTO cp_tree VALUES ('7702', '2', '20', '100', '7692', '29'); -INSERT INTO cp_tree VALUES ('7703', '3', '21', '100', '7702', '22'); -INSERT INTO cp_tree VALUES ('7704', '3', '23', '100', '7702', '24'); -INSERT INTO cp_tree VALUES ('7705', '3', '25', '100', '7702', '26'); -INSERT INTO cp_tree VALUES ('7706', '3', '27', '100', '7702', '28'); -INSERT INTO cp_tree VALUES ('7707', '2', '30', '100', '7692', '39'); -INSERT INTO cp_tree VALUES ('7708', '3', '31', '100', '7707', '32'); -INSERT INTO cp_tree VALUES ('7709', '3', '33', '100', '7707', '34'); -INSERT INTO cp_tree VALUES ('7710', '3', '35', '100', '7707', '36'); -INSERT INTO cp_tree VALUES ('7711', '3', '37', '100', '7707', '38'); -INSERT INTO cp_tree VALUES ('7712', '2', '40', '100', '7692', '49'); -INSERT INTO cp_tree VALUES ('7713', '3', '41', '100', '7712', '42'); -INSERT INTO cp_tree VALUES ('7714', '3', '43', '100', '7712', '44'); -INSERT INTO cp_tree VALUES ('7715', '3', '45', '100', '7712', '46'); -INSERT INTO cp_tree VALUES ('7716', '3', '47', '100', '7712', '48'); -INSERT INTO cp_tree VALUES ('7717', '2', '50', '100', '7692', '59'); -INSERT INTO cp_tree VALUES ('7718', '3', '51', '100', '7717', '52'); -INSERT INTO cp_tree VALUES ('7719', '3', '53', '100', '7717', '54'); -INSERT INTO cp_tree VALUES ('7720', '3', '55', '100', '7717', '56'); -INSERT INTO cp_tree VALUES ('7721', '3', '57', '100', '7717', '58'); -INSERT INTO cp_tree VALUES ('7722', '2', '60', '100', '7692', '69'); -INSERT INTO cp_tree VALUES ('7723', '3', '61', '100', '7722', '62'); -INSERT INTO cp_tree VALUES ('7724', '3', '63', '100', '7722', '64'); -INSERT INTO cp_tree VALUES ('7725', '3', '65', '100', '7722', '66'); -INSERT INTO cp_tree VALUES ('7726', '3', '67', '100', '7722', '68'); -INSERT INTO cp_tree VALUES ('7727', '2', '70', '100', '7692', '79'); -INSERT INTO cp_tree VALUES ('7728', '3', '71', '100', '7727', '72'); -INSERT INTO cp_tree VALUES ('7729', '3', '73', '100', '7727', '74'); -INSERT INTO cp_tree VALUES ('7730', '3', '75', '100', '7727', '76'); -INSERT INTO cp_tree VALUES ('7731', '3', '77', '100', '7727', '78'); -INSERT INTO cp_tree VALUES ('7732', '2', '80', '100', '7692', '89'); -INSERT INTO cp_tree VALUES ('7733', '3', '81', '100', '7732', '82'); -INSERT INTO cp_tree VALUES ('7734', '3', '83', '100', '7732', '84'); -INSERT INTO cp_tree VALUES ('7735', '3', '85', '100', '7732', '86'); -INSERT INTO cp_tree VALUES ('7736', '3', '87', '100', '7732', '88'); -INSERT INTO cp_tree VALUES ('7737', '2', '90', '100', '7692', '97'); -INSERT INTO cp_tree VALUES ('7738', '3', '91', '100', '7737', '92'); -INSERT INTO cp_tree VALUES ('7739', '3', '93', '100', '7737', '94'); -INSERT INTO cp_tree VALUES ('7740', '3', '95', '100', '7737', '96'); -INSERT INTO cp_tree VALUES ('7741', '2', '98', '100', '7692', '121'); -INSERT INTO cp_tree VALUES ('7742', '3', '99', '100', '7741', '100'); -INSERT INTO cp_tree VALUES ('7743', '3', '101', '100', '7741', '102'); -INSERT INTO cp_tree VALUES ('7744', '3', '103', '100', '7741', '104'); -INSERT INTO cp_tree VALUES ('7745', '3', '105', '100', '7741', '106'); -INSERT INTO cp_tree VALUES ('7746', '3', '107', '100', '7741', '108'); -INSERT INTO cp_tree VALUES ('7747', '3', '109', '100', '7741', '110'); -INSERT INTO cp_tree VALUES ('7748', '3', '111', '100', '7741', '112'); -INSERT INTO cp_tree VALUES ('7749', '3', '113', '100', '7741', '114'); -INSERT INTO cp_tree VALUES ('7750', '3', '115', '100', '7741', '116'); -INSERT INTO cp_tree VALUES ('7751', '3', '117', '100', '7741', '118'); -INSERT INTO cp_tree VALUES ('7752', '3', '119', '100', '7741', '120'); -INSERT INTO cp_tree VALUES ('7753', '2', '122', '100', '7692', '125'); -INSERT INTO cp_tree VALUES ('7754', '3', '123', '100', '7753', '124'); -INSERT INTO cp_tree VALUES ('7755', '2', '126', '100', '7692', '263'); -INSERT INTO cp_tree VALUES ('7756', '3', '127', '100', '7755', '128'); -INSERT INTO cp_tree VALUES ('7757', '3', '129', '100', '7755', '130'); -INSERT INTO cp_tree VALUES ('7758', '3', '131', '100', '7755', '132'); -INSERT INTO cp_tree VALUES ('7759', '3', '133', '100', '7755', '134'); -INSERT INTO cp_tree VALUES ('7760', '3', '135', '100', '7755', '136'); -INSERT INTO cp_tree VALUES ('7761', '3', '137', '100', '7755', '138'); -INSERT INTO cp_tree VALUES ('7762', '3', '139', '100', '7755', '140'); -INSERT INTO cp_tree VALUES ('7763', '3', '141', '100', '7755', '142'); -INSERT INTO cp_tree VALUES ('7764', '3', '143', '100', '7755', '144'); -INSERT INTO cp_tree VALUES ('7765', '3', '145', '100', '7755', '146'); -INSERT INTO cp_tree VALUES ('7766', '3', '147', '100', '7755', '148'); -INSERT INTO cp_tree VALUES ('7767', '3', '149', '100', '7755', '150'); -INSERT INTO cp_tree VALUES ('7768', '3', '151', '100', '7755', '152'); -INSERT INTO cp_tree VALUES ('7769', '3', '153', '100', '7755', '154'); -INSERT INTO cp_tree VALUES ('7770', '3', '155', '100', '7755', '156'); -INSERT INTO cp_tree VALUES ('7771', '3', '157', '100', '7755', '158'); -INSERT INTO cp_tree VALUES ('7772', '3', '159', '100', '7755', '160'); -INSERT INTO cp_tree VALUES ('7773', '3', '161', '100', '7755', '162'); -INSERT INTO cp_tree VALUES ('7774', '3', '163', '100', '7755', '164'); -INSERT INTO cp_tree VALUES ('7775', '3', '165', '100', '7755', '166'); -INSERT INTO cp_tree VALUES ('7776', '3', '167', '100', '7755', '168'); -INSERT INTO cp_tree VALUES ('7777', '3', '169', '100', '7755', '170'); -INSERT INTO cp_tree VALUES ('7778', '3', '171', '100', '7755', '172'); -INSERT INTO cp_tree VALUES ('7779', '3', '173', '100', '7755', '174'); -INSERT INTO cp_tree VALUES ('7780', '3', '175', '100', '7755', '176'); -INSERT INTO cp_tree VALUES ('7781', '3', '177', '100', '7755', '178'); -INSERT INTO cp_tree VALUES ('7782', '3', '179', '100', '7755', '180'); -INSERT INTO cp_tree VALUES ('7783', '3', '181', '100', '7755', '182'); -INSERT INTO cp_tree VALUES ('7784', '3', '183', '100', '7755', '184'); -INSERT INTO cp_tree VALUES ('7785', '3', '185', '100', '7755', '186'); -INSERT INTO cp_tree VALUES ('7786', '3', '187', '100', '7755', '188'); -INSERT INTO cp_tree VALUES ('7787', '3', '189', '100', '7755', '190'); -INSERT INTO cp_tree VALUES ('7788', '3', '191', '100', '7755', '192'); -INSERT INTO cp_tree VALUES ('7789', '3', '193', '100', '7755', '194'); -INSERT INTO cp_tree VALUES ('7790', '3', '195', '100', '7755', '196'); -INSERT INTO cp_tree VALUES ('7791', '3', '197', '100', '7755', '198'); -INSERT INTO cp_tree VALUES ('7792', '3', '199', '100', '7755', '200'); -INSERT INTO cp_tree VALUES ('7793', '3', '201', '100', '7755', '202'); -INSERT INTO cp_tree VALUES ('7794', '3', '203', '100', '7755', '204'); -INSERT INTO cp_tree VALUES ('7795', '3', '205', '100', '7755', '206'); -INSERT INTO cp_tree VALUES ('7796', '3', '207', '100', '7755', '208'); -INSERT INTO cp_tree VALUES ('7797', '3', '209', '100', '7755', '210'); -INSERT INTO cp_tree VALUES ('7798', '3', '211', '100', '7755', '212'); -INSERT INTO cp_tree VALUES ('7799', '3', '213', '100', '7755', '214'); -INSERT INTO cp_tree VALUES ('7800', '3', '215', '100', '7755', '216'); -INSERT INTO cp_tree VALUES ('7801', '3', '217', '100', '7755', '218'); -INSERT INTO cp_tree VALUES ('7802', '3', '219', '100', '7755', '220'); -INSERT INTO cp_tree VALUES ('7803', '3', '221', '100', '7755', '222'); -INSERT INTO cp_tree VALUES ('7804', '3', '223', '100', '7755', '224'); -INSERT INTO cp_tree VALUES ('7805', '3', '225', '100', '7755', '226'); -INSERT INTO cp_tree VALUES ('7806', '3', '227', '100', '7755', '228'); -INSERT INTO cp_tree VALUES ('7807', '3', '229', '100', '7755', '230'); -INSERT INTO cp_tree VALUES ('7808', '3', '231', '100', '7755', '232'); -INSERT INTO cp_tree VALUES ('7809', '3', '233', '100', '7755', '234'); -INSERT INTO cp_tree VALUES ('7810', '3', '235', '100', '7755', '236'); -INSERT INTO cp_tree VALUES ('7811', '3', '237', '100', '7755', '238'); -INSERT INTO cp_tree VALUES ('7812', '3', '239', '100', '7755', '240'); -INSERT INTO cp_tree VALUES ('7813', '3', '241', '100', '7755', '242'); -INSERT INTO cp_tree VALUES ('7814', '3', '243', '100', '7755', '244'); -INSERT INTO cp_tree VALUES ('7815', '3', '245', '100', '7755', '246'); -INSERT INTO cp_tree VALUES ('7816', '3', '247', '100', '7755', '248'); -INSERT INTO cp_tree VALUES ('7817', '3', '249', '100', '7755', '250'); -INSERT INTO cp_tree VALUES ('7818', '3', '251', '100', '7755', '252'); -INSERT INTO cp_tree VALUES ('7819', '3', '253', '100', '7755', '254'); -INSERT INTO cp_tree VALUES ('7820', '3', '255', '100', '7755', '256'); -INSERT INTO cp_tree VALUES ('7821', '3', '257', '100', '7755', '258'); -INSERT INTO cp_tree VALUES ('7822', '3', '259', '100', '7755', '260'); -INSERT INTO cp_tree VALUES ('7823', '3', '261', '100', '7755', '262'); -INSERT INTO cp_tree VALUES ('7824', '2', '264', '100', '7692', '271'); -INSERT INTO cp_tree VALUES ('7825', '3', '265', '100', '7824', '266'); -INSERT INTO cp_tree VALUES ('7826', '3', '267', '100', '7824', '268'); -INSERT INTO cp_tree VALUES ('7827', '3', '269', '100', '7824', '270'); -INSERT INTO cp_tree VALUES ('7828', '2', '272', '100', '7692', '285'); -INSERT INTO cp_tree VALUES ('7829', '3', '273', '100', '7828', '274'); -INSERT INTO cp_tree VALUES ('7830', '3', '275', '100', '7828', '276'); -INSERT INTO cp_tree VALUES ('7831', '3', '277', '100', '7828', '278'); -INSERT INTO cp_tree VALUES ('7832', '3', '279', '100', '7828', '280'); -INSERT INTO cp_tree VALUES ('7833', '3', '281', '100', '7828', '282'); -INSERT INTO cp_tree VALUES ('7834', '3', '283', '100', '7828', '284'); -INSERT INTO cp_tree VALUES ('7835', '2', '286', '100', '7692', '289'); -INSERT INTO cp_tree VALUES ('7836', '3', '287', '100', '7835', '288'); -INSERT INTO cp_tree VALUES ('7837', '2', '290', '100', '7692', '427'); -INSERT INTO cp_tree VALUES ('7838', '3', '291', '100', '7837', '292'); -INSERT INTO cp_tree VALUES ('7839', '3', '293', '100', '7837', '294'); -INSERT INTO cp_tree VALUES ('7840', '3', '295', '100', '7837', '296'); -INSERT INTO cp_tree VALUES ('7841', '3', '297', '100', '7837', '298'); -INSERT INTO cp_tree VALUES ('7842', '3', '299', '100', '7837', '300'); -INSERT INTO cp_tree VALUES ('7843', '3', '301', '100', '7837', '302'); -INSERT INTO cp_tree VALUES ('7844', '3', '303', '100', '7837', '304'); -INSERT INTO cp_tree VALUES ('7845', '3', '305', '100', '7837', '306'); -INSERT INTO cp_tree VALUES ('7846', '3', '307', '100', '7837', '308'); -INSERT INTO cp_tree VALUES ('7847', '3', '309', '100', '7837', '310'); -INSERT INTO cp_tree VALUES ('7848', '3', '311', '100', '7837', '312'); -INSERT INTO cp_tree VALUES ('7849', '3', '313', '100', '7837', '314'); -INSERT INTO cp_tree VALUES ('7850', '3', '315', '100', '7837', '316'); -INSERT INTO cp_tree VALUES ('7851', '3', '317', '100', '7837', '318'); -INSERT INTO cp_tree VALUES ('7852', '3', '319', '100', '7837', '320'); -INSERT INTO cp_tree VALUES ('7853', '3', '321', '100', '7837', '322'); -INSERT INTO cp_tree VALUES ('7854', '3', '323', '100', '7837', '324'); -INSERT INTO cp_tree VALUES ('7855', '3', '325', '100', '7837', '326'); -INSERT INTO cp_tree VALUES ('7856', '3', '327', '100', '7837', '328'); -INSERT INTO cp_tree VALUES ('7857', '3', '329', '100', '7837', '330'); -INSERT INTO cp_tree VALUES ('7858', '3', '331', '100', '7837', '332'); -INSERT INTO cp_tree VALUES ('7859', '3', '333', '100', '7837', '334'); -INSERT INTO cp_tree VALUES ('7860', '3', '335', '100', '7837', '336'); -INSERT INTO cp_tree VALUES ('7861', '3', '337', '100', '7837', '338'); -INSERT INTO cp_tree VALUES ('7862', '3', '339', '100', '7837', '340'); -INSERT INTO cp_tree VALUES ('7863', '3', '341', '100', '7837', '342'); -INSERT INTO cp_tree VALUES ('7864', '3', '343', '100', '7837', '344'); -INSERT INTO cp_tree VALUES ('7865', '3', '345', '100', '7837', '346'); -INSERT INTO cp_tree VALUES ('7866', '3', '347', '100', '7837', '348'); -INSERT INTO cp_tree VALUES ('7867', '3', '349', '100', '7837', '350'); -INSERT INTO cp_tree VALUES ('7868', '3', '351', '100', '7837', '352'); -INSERT INTO cp_tree VALUES ('7869', '3', '353', '100', '7837', '354'); -INSERT INTO cp_tree VALUES ('7870', '3', '355', '100', '7837', '356'); -INSERT INTO cp_tree VALUES ('7871', '3', '357', '100', '7837', '358'); -INSERT INTO cp_tree VALUES ('7872', '3', '359', '100', '7837', '360'); -INSERT INTO cp_tree VALUES ('7873', '3', '361', '100', '7837', '362'); -INSERT INTO cp_tree VALUES ('7874', '3', '363', '100', '7837', '364'); -INSERT INTO cp_tree VALUES ('7875', '3', '365', '100', '7837', '366'); -INSERT INTO cp_tree VALUES ('7876', '3', '367', '100', '7837', '368'); -INSERT INTO cp_tree VALUES ('7877', '3', '369', '100', '7837', '370'); -INSERT INTO cp_tree VALUES ('7878', '3', '371', '100', '7837', '372'); -INSERT INTO cp_tree VALUES ('7879', '3', '373', '100', '7837', '374'); -INSERT INTO cp_tree VALUES ('7880', '3', '375', '100', '7837', '376'); -INSERT INTO cp_tree VALUES ('7881', '3', '377', '100', '7837', '378'); -INSERT INTO cp_tree VALUES ('7882', '3', '379', '100', '7837', '380'); -INSERT INTO cp_tree VALUES ('7883', '3', '381', '100', '7837', '382'); -INSERT INTO cp_tree VALUES ('7884', '3', '383', '100', '7837', '384'); -INSERT INTO cp_tree VALUES ('7885', '3', '385', '100', '7837', '386'); -INSERT INTO cp_tree VALUES ('7886', '3', '387', '100', '7837', '388'); -INSERT INTO cp_tree VALUES ('7887', '3', '389', '100', '7837', '390'); -INSERT INTO cp_tree VALUES ('7888', '3', '391', '100', '7837', '392'); -INSERT INTO cp_tree VALUES ('7889', '3', '393', '100', '7837', '394'); -INSERT INTO cp_tree VALUES ('7890', '3', '395', '100', '7837', '396'); -INSERT INTO cp_tree VALUES ('7891', '3', '397', '100', '7837', '398'); -INSERT INTO cp_tree VALUES ('7892', '3', '399', '100', '7837', '400'); -INSERT INTO cp_tree VALUES ('7893', '3', '401', '100', '7837', '402'); -INSERT INTO cp_tree VALUES ('7894', '3', '403', '100', '7837', '404'); -INSERT INTO cp_tree VALUES ('7895', '3', '405', '100', '7837', '406'); -INSERT INTO cp_tree VALUES ('7896', '3', '407', '100', '7837', '408'); -INSERT INTO cp_tree VALUES ('7897', '3', '409', '100', '7837', '410'); -INSERT INTO cp_tree VALUES ('7898', '3', '411', '100', '7837', '412'); -INSERT INTO cp_tree VALUES ('7899', '3', '413', '100', '7837', '414'); -INSERT INTO cp_tree VALUES ('7900', '3', '415', '100', '7837', '416'); -INSERT INTO cp_tree VALUES ('7901', '3', '417', '100', '7837', '418'); -INSERT INTO cp_tree VALUES ('7902', '3', '419', '100', '7837', '420'); -INSERT INTO cp_tree VALUES ('7903', '3', '421', '100', '7837', '422'); -INSERT INTO cp_tree VALUES ('7904', '3', '423', '100', '7837', '424'); -INSERT INTO cp_tree VALUES ('7905', '3', '425', '100', '7837', '426'); -INSERT INTO cp_tree VALUES ('7906', '2', '428', '100', '7692', '435'); -INSERT INTO cp_tree VALUES ('7907', '3', '429', '100', '7906', '430'); -INSERT INTO cp_tree VALUES ('7908', '3', '431', '100', '7906', '432'); -INSERT INTO cp_tree VALUES ('7909', '3', '433', '100', '7906', '434'); -INSERT INTO cp_tree VALUES ('7910', '2', '436', '100', '7692', '449'); -INSERT INTO cp_tree VALUES ('7911', '3', '437', '100', '7910', '438'); -INSERT INTO cp_tree VALUES ('7912', '3', '439', '100', '7910', '440'); -INSERT INTO cp_tree VALUES ('7913', '3', '441', '100', '7910', '442'); -INSERT INTO cp_tree VALUES ('7914', '3', '443', '100', '7910', '444'); -INSERT INTO cp_tree VALUES ('7915', '3', '445', '100', '7910', '446'); -INSERT INTO cp_tree VALUES ('7916', '3', '447', '100', '7910', '448'); -INSERT INTO cp_tree VALUES ('7917', '2', '450', '100', '7692', '453'); -INSERT INTO cp_tree VALUES ('7918', '3', '451', '100', '7917', '452'); -INSERT INTO cp_tree VALUES ('7919', '2', '454', '100', '7692', '591'); -INSERT INTO cp_tree VALUES ('7920', '3', '455', '100', '7919', '456'); -INSERT INTO cp_tree VALUES ('7921', '3', '457', '100', '7919', '458'); -INSERT INTO cp_tree VALUES ('7922', '3', '459', '100', '7919', '460'); -INSERT INTO cp_tree VALUES ('7923', '3', '461', '100', '7919', '462'); -INSERT INTO cp_tree VALUES ('7924', '3', '463', '100', '7919', '464'); -INSERT INTO cp_tree VALUES ('7925', '3', '465', '100', '7919', '466'); -INSERT INTO cp_tree VALUES ('7926', '3', '467', '100', '7919', '468'); -INSERT INTO cp_tree VALUES ('7927', '3', '469', '100', '7919', '470'); -INSERT INTO cp_tree VALUES ('7928', '3', '471', '100', '7919', '472'); -INSERT INTO cp_tree VALUES ('7929', '3', '473', '100', '7919', '474'); -INSERT INTO cp_tree VALUES ('7930', '3', '475', '100', '7919', '476'); -INSERT INTO cp_tree VALUES ('7931', '3', '477', '100', '7919', '478'); -INSERT INTO cp_tree VALUES ('7932', '3', '479', '100', '7919', '480'); -INSERT INTO cp_tree VALUES ('7933', '3', '481', '100', '7919', '482'); -INSERT INTO cp_tree VALUES ('7934', '3', '483', '100', '7919', '484'); -INSERT INTO cp_tree VALUES ('7935', '3', '485', '100', '7919', '486'); -INSERT INTO cp_tree VALUES ('7936', '3', '487', '100', '7919', '488'); -INSERT INTO cp_tree VALUES ('7937', '3', '489', '100', '7919', '490'); -INSERT INTO cp_tree VALUES ('7938', '3', '491', '100', '7919', '492'); -INSERT INTO cp_tree VALUES ('7939', '3', '493', '100', '7919', '494'); -INSERT INTO cp_tree VALUES ('7940', '3', '495', '100', '7919', '496'); -INSERT INTO cp_tree VALUES ('7941', '3', '497', '100', '7919', '498'); -INSERT INTO cp_tree VALUES ('7942', '3', '499', '100', '7919', '500'); -INSERT INTO cp_tree VALUES ('7943', '3', '501', '100', '7919', '502'); -INSERT INTO cp_tree VALUES ('7944', '3', '503', '100', '7919', '504'); -INSERT INTO cp_tree VALUES ('7945', '3', '505', '100', '7919', '506'); -INSERT INTO cp_tree VALUES ('7946', '3', '507', '100', '7919', '508'); -INSERT INTO cp_tree VALUES ('7947', '3', '509', '100', '7919', '510'); -INSERT INTO cp_tree VALUES ('7948', '3', '511', '100', '7919', '512'); -INSERT INTO cp_tree VALUES ('7949', '3', '513', '100', '7919', '514'); -INSERT INTO cp_tree VALUES ('7950', '3', '515', '100', '7919', '516'); -INSERT INTO cp_tree VALUES ('7951', '3', '517', '100', '7919', '518'); -INSERT INTO cp_tree VALUES ('7952', '3', '519', '100', '7919', '520'); -INSERT INTO cp_tree VALUES ('7953', '3', '521', '100', '7919', '522'); -INSERT INTO cp_tree VALUES ('7954', '3', '523', '100', '7919', '524'); -INSERT INTO cp_tree VALUES ('7955', '3', '525', '100', '7919', '526'); -INSERT INTO cp_tree VALUES ('7956', '3', '527', '100', '7919', '528'); -INSERT INTO cp_tree VALUES ('7957', '3', '529', '100', '7919', '530'); -INSERT INTO cp_tree VALUES ('7958', '3', '531', '100', '7919', '532'); -INSERT INTO cp_tree VALUES ('7959', '3', '533', '100', '7919', '534'); -INSERT INTO cp_tree VALUES ('7960', '3', '535', '100', '7919', '536'); -INSERT INTO cp_tree VALUES ('7961', '3', '537', '100', '7919', '538'); -INSERT INTO cp_tree VALUES ('7962', '3', '539', '100', '7919', '540'); -INSERT INTO cp_tree VALUES ('7963', '3', '541', '100', '7919', '542'); -INSERT INTO cp_tree VALUES ('7964', '3', '543', '100', '7919', '544'); -INSERT INTO cp_tree VALUES ('7965', '3', '545', '100', '7919', '546'); -INSERT INTO cp_tree VALUES ('7966', '3', '547', '100', '7919', '548'); -INSERT INTO cp_tree VALUES ('7967', '3', '549', '100', '7919', '550'); -INSERT INTO cp_tree VALUES ('7968', '3', '551', '100', '7919', '552'); -INSERT INTO cp_tree VALUES ('7969', '3', '553', '100', '7919', '554'); -INSERT INTO cp_tree VALUES ('7970', '3', '555', '100', '7919', '556'); -INSERT INTO cp_tree VALUES ('7971', '3', '557', '100', '7919', '558'); -INSERT INTO cp_tree VALUES ('7972', '3', '559', '100', '7919', '560'); -INSERT INTO cp_tree VALUES ('7973', '3', '561', '100', '7919', '562'); -INSERT INTO cp_tree VALUES ('7974', '3', '563', '100', '7919', '564'); -INSERT INTO cp_tree VALUES ('7975', '3', '565', '100', '7919', '566'); -INSERT INTO cp_tree VALUES ('7976', '3', '567', '100', '7919', '568'); -INSERT INTO cp_tree VALUES ('7977', '3', '569', '100', '7919', '570'); -INSERT INTO cp_tree VALUES ('7978', '3', '571', '100', '7919', '572'); -INSERT INTO cp_tree VALUES ('7979', '3', '573', '100', '7919', '574'); -INSERT INTO cp_tree VALUES ('7980', '3', '575', '100', '7919', '576'); -INSERT INTO cp_tree VALUES ('7981', '3', '577', '100', '7919', '578'); -INSERT INTO cp_tree VALUES ('7982', '3', '579', '100', '7919', '580'); -INSERT INTO cp_tree VALUES ('7983', '3', '581', '100', '7919', '582'); -INSERT INTO cp_tree VALUES ('7984', '3', '583', '100', '7919', '584'); -INSERT INTO cp_tree VALUES ('7985', '3', '585', '100', '7919', '586'); -INSERT INTO cp_tree VALUES ('7986', '3', '587', '100', '7919', '588'); -INSERT INTO cp_tree VALUES ('7987', '3', '589', '100', '7919', '590'); -INSERT INTO cp_tree VALUES ('7988', '2', '592', '100', '7692', '599'); -INSERT INTO cp_tree VALUES ('7989', '3', '593', '100', '7988', '594'); -INSERT INTO cp_tree VALUES ('7990', '3', '595', '100', '7988', '596'); -INSERT INTO cp_tree VALUES ('7991', '3', '597', '100', '7988', '598'); -INSERT INTO cp_tree VALUES ('7992', '2', '600', '100', '7692', '609'); -INSERT INTO cp_tree VALUES ('7993', '3', '601', '100', '7992', '602'); -INSERT INTO cp_tree VALUES ('7994', '3', '603', '100', '7992', '604'); -INSERT INTO cp_tree VALUES ('7995', '3', '605', '100', '7992', '606'); -INSERT INTO cp_tree VALUES ('7996', '3', '607', '100', '7992', '608'); -INSERT INTO cp_tree VALUES ('7997', '2', '610', '100', '7692', '613'); -INSERT INTO cp_tree VALUES ('7998', '3', '611', '100', '7997', '612'); -INSERT INTO cp_tree VALUES ('7999', '2', '614', '100', '7692', '751'); -INSERT INTO cp_tree VALUES ('8000', '3', '615', '100', '7999', '616'); -INSERT INTO cp_tree VALUES ('8001', '3', '617', '100', '7999', '618'); -INSERT INTO cp_tree VALUES ('8002', '3', '619', '100', '7999', '620'); -INSERT INTO cp_tree VALUES ('8003', '3', '621', '100', '7999', '622'); -INSERT INTO cp_tree VALUES ('8004', '3', '623', '100', '7999', '624'); -INSERT INTO cp_tree VALUES ('8005', '3', '625', '100', '7999', '626'); -INSERT INTO cp_tree VALUES ('8006', '3', '627', '100', '7999', '628'); -INSERT INTO cp_tree VALUES ('8007', '3', '629', '100', '7999', '630'); -INSERT INTO cp_tree VALUES ('8008', '3', '631', '100', '7999', '632'); -INSERT INTO cp_tree VALUES ('8009', '3', '633', '100', '7999', '634'); -INSERT INTO cp_tree VALUES ('8010', '3', '635', '100', '7999', '636'); -INSERT INTO cp_tree VALUES ('8011', '3', '637', '100', '7999', '638'); -INSERT INTO cp_tree VALUES ('8012', '3', '639', '100', '7999', '640'); -INSERT INTO cp_tree VALUES ('8013', '3', '641', '100', '7999', '642'); -INSERT INTO cp_tree VALUES ('8014', '3', '643', '100', '7999', '644'); -INSERT INTO cp_tree VALUES ('8015', '3', '645', '100', '7999', '646'); -INSERT INTO cp_tree VALUES ('8016', '3', '647', '100', '7999', '648'); -INSERT INTO cp_tree VALUES ('8017', '3', '649', '100', '7999', '650'); -INSERT INTO cp_tree VALUES ('8018', '3', '651', '100', '7999', '652'); -INSERT INTO cp_tree VALUES ('8019', '3', '653', '100', '7999', '654'); -INSERT INTO cp_tree VALUES ('8020', '3', '655', '100', '7999', '656'); -INSERT INTO cp_tree VALUES ('8021', '3', '657', '100', '7999', '658'); -INSERT INTO cp_tree VALUES ('8022', '3', '659', '100', '7999', '660'); -INSERT INTO cp_tree VALUES ('8023', '3', '661', '100', '7999', '662'); -INSERT INTO cp_tree VALUES ('8024', '3', '663', '100', '7999', '664'); -INSERT INTO cp_tree VALUES ('8025', '3', '665', '100', '7999', '666'); -INSERT INTO cp_tree VALUES ('8026', '3', '667', '100', '7999', '668'); -INSERT INTO cp_tree VALUES ('8027', '3', '669', '100', '7999', '670'); -INSERT INTO cp_tree VALUES ('8028', '3', '671', '100', '7999', '672'); -INSERT INTO cp_tree VALUES ('8029', '3', '673', '100', '7999', '674'); -INSERT INTO cp_tree VALUES ('8030', '3', '675', '100', '7999', '676'); -INSERT INTO cp_tree VALUES ('8031', '3', '677', '100', '7999', '678'); -INSERT INTO cp_tree VALUES ('8032', '3', '679', '100', '7999', '680'); -INSERT INTO cp_tree VALUES ('8033', '3', '681', '100', '7999', '682'); -INSERT INTO cp_tree VALUES ('8034', '3', '683', '100', '7999', '684'); -INSERT INTO cp_tree VALUES ('8035', '3', '685', '100', '7999', '686'); -INSERT INTO cp_tree VALUES ('8036', '3', '687', '100', '7999', '688'); -INSERT INTO cp_tree VALUES ('8037', '3', '689', '100', '7999', '690'); -INSERT INTO cp_tree VALUES ('8038', '3', '691', '100', '7999', '692'); -INSERT INTO cp_tree VALUES ('8039', '3', '693', '100', '7999', '694'); -INSERT INTO cp_tree VALUES ('8040', '3', '695', '100', '7999', '696'); -INSERT INTO cp_tree VALUES ('8041', '3', '697', '100', '7999', '698'); -INSERT INTO cp_tree VALUES ('8042', '3', '699', '100', '7999', '700'); -INSERT INTO cp_tree VALUES ('8043', '3', '701', '100', '7999', '702'); -INSERT INTO cp_tree VALUES ('8044', '3', '703', '100', '7999', '704'); -INSERT INTO cp_tree VALUES ('8045', '3', '705', '100', '7999', '706'); -INSERT INTO cp_tree VALUES ('8046', '3', '707', '100', '7999', '708'); -INSERT INTO cp_tree VALUES ('8047', '3', '709', '100', '7999', '710'); -INSERT INTO cp_tree VALUES ('8048', '3', '711', '100', '7999', '712'); -INSERT INTO cp_tree VALUES ('8049', '3', '713', '100', '7999', '714'); -INSERT INTO cp_tree VALUES ('8050', '3', '715', '100', '7999', '716'); -INSERT INTO cp_tree VALUES ('8051', '3', '717', '100', '7999', '718'); -INSERT INTO cp_tree VALUES ('8052', '3', '719', '100', '7999', '720'); -INSERT INTO cp_tree VALUES ('8053', '3', '721', '100', '7999', '722'); -INSERT INTO cp_tree VALUES ('8054', '3', '723', '100', '7999', '724'); -INSERT INTO cp_tree VALUES ('8055', '3', '725', '100', '7999', '726'); -INSERT INTO cp_tree VALUES ('8056', '3', '727', '100', '7999', '728'); -INSERT INTO cp_tree VALUES ('8057', '3', '729', '100', '7999', '730'); -INSERT INTO cp_tree VALUES ('8058', '3', '731', '100', '7999', '732'); -INSERT INTO cp_tree VALUES ('8059', '3', '733', '100', '7999', '734'); -INSERT INTO cp_tree VALUES ('8060', '3', '735', '100', '7999', '736'); -INSERT INTO cp_tree VALUES ('8061', '3', '737', '100', '7999', '738'); -INSERT INTO cp_tree VALUES ('8062', '3', '739', '100', '7999', '740'); -INSERT INTO cp_tree VALUES ('8063', '3', '741', '100', '7999', '742'); -INSERT INTO cp_tree VALUES ('8064', '3', '743', '100', '7999', '744'); -INSERT INTO cp_tree VALUES ('8065', '3', '745', '100', '7999', '746'); -INSERT INTO cp_tree VALUES ('8066', '3', '747', '100', '7999', '748'); -INSERT INTO cp_tree VALUES ('8067', '3', '749', '100', '7999', '750'); -INSERT INTO cp_tree VALUES ('8068', '2', '752', '100', '7692', '759'); -INSERT INTO cp_tree VALUES ('8069', '3', '753', '100', '8068', '754'); -INSERT INTO cp_tree VALUES ('8070', '3', '755', '100', '8068', '756'); -INSERT INTO cp_tree VALUES ('8071', '3', '757', '100', '8068', '758'); -INSERT INTO cp_tree VALUES ('8072', '2', '760', '100', '7692', '783'); -INSERT INTO cp_tree VALUES ('8073', '3', '761', '100', '8072', '762'); -INSERT INTO cp_tree VALUES ('8074', '3', '763', '100', '8072', '764'); -INSERT INTO cp_tree VALUES ('8075', '3', '765', '100', '8072', '766'); -INSERT INTO cp_tree VALUES ('8076', '3', '767', '100', '8072', '768'); -INSERT INTO cp_tree VALUES ('8077', '3', '769', '100', '8072', '770'); -INSERT INTO cp_tree VALUES ('8078', '3', '771', '100', '8072', '772'); -INSERT INTO cp_tree VALUES ('8079', '3', '773', '100', '8072', '774'); -INSERT INTO cp_tree VALUES ('8080', '3', '775', '100', '8072', '776'); -INSERT INTO cp_tree VALUES ('8081', '3', '777', '100', '8072', '778'); -INSERT INTO cp_tree VALUES ('8082', '3', '779', '100', '8072', '780'); -INSERT INTO cp_tree VALUES ('8083', '3', '781', '100', '8072', '782'); -INSERT INTO cp_tree VALUES ('8084', '2', '784', '100', '7692', '787'); -INSERT INTO cp_tree VALUES ('8085', '3', '785', '100', '8084', '786'); -INSERT INTO cp_tree VALUES ('8086', '2', '788', '100', '7692', '925'); -INSERT INTO cp_tree VALUES ('8087', '3', '789', '100', '8086', '790'); -INSERT INTO cp_tree VALUES ('8088', '3', '791', '100', '8086', '792'); -INSERT INTO cp_tree VALUES ('8089', '3', '793', '100', '8086', '794'); -INSERT INTO cp_tree VALUES ('8090', '3', '795', '100', '8086', '796'); -INSERT INTO cp_tree VALUES ('8091', '3', '797', '100', '8086', '798'); -INSERT INTO cp_tree VALUES ('8092', '3', '799', '100', '8086', '800'); -INSERT INTO cp_tree VALUES ('8093', '3', '801', '100', '8086', '802'); -INSERT INTO cp_tree VALUES ('8094', '3', '803', '100', '8086', '804'); -INSERT INTO cp_tree VALUES ('8095', '3', '805', '100', '8086', '806'); -INSERT INTO cp_tree VALUES ('8096', '3', '807', '100', '8086', '808'); -INSERT INTO cp_tree VALUES ('8097', '3', '809', '100', '8086', '810'); -INSERT INTO cp_tree VALUES ('8098', '3', '811', '100', '8086', '812'); -INSERT INTO cp_tree VALUES ('8099', '3', '813', '100', '8086', '814'); -INSERT INTO cp_tree VALUES ('8100', '3', '815', '100', '8086', '816'); -INSERT INTO cp_tree VALUES ('8101', '3', '817', '100', '8086', '818'); -INSERT INTO cp_tree VALUES ('8102', '3', '819', '100', '8086', '820'); -INSERT INTO cp_tree VALUES ('8103', '3', '821', '100', '8086', '822'); -INSERT INTO cp_tree VALUES ('8104', '3', '823', '100', '8086', '824'); -INSERT INTO cp_tree VALUES ('8105', '3', '825', '100', '8086', '826'); -INSERT INTO cp_tree VALUES ('8106', '3', '827', '100', '8086', '828'); -INSERT INTO cp_tree VALUES ('8107', '3', '829', '100', '8086', '830'); -INSERT INTO cp_tree VALUES ('8108', '3', '831', '100', '8086', '832'); -INSERT INTO cp_tree VALUES ('8109', '3', '833', '100', '8086', '834'); -INSERT INTO cp_tree VALUES ('8110', '3', '835', '100', '8086', '836'); -INSERT INTO cp_tree VALUES ('8111', '3', '837', '100', '8086', '838'); -INSERT INTO cp_tree VALUES ('8112', '3', '839', '100', '8086', '840'); -INSERT INTO cp_tree VALUES ('8113', '3', '841', '100', '8086', '842'); -INSERT INTO cp_tree VALUES ('8114', '3', '843', '100', '8086', '844'); -INSERT INTO cp_tree VALUES ('8115', '3', '845', '100', '8086', '846'); -INSERT INTO cp_tree VALUES ('8116', '3', '847', '100', '8086', '848'); -INSERT INTO cp_tree VALUES ('8117', '3', '849', '100', '8086', '850'); -INSERT INTO cp_tree VALUES ('8118', '3', '851', '100', '8086', '852'); -INSERT INTO cp_tree VALUES ('8119', '3', '853', '100', '8086', '854'); -INSERT INTO cp_tree VALUES ('8120', '3', '855', '100', '8086', '856'); -INSERT INTO cp_tree VALUES ('8121', '3', '857', '100', '8086', '858'); -INSERT INTO cp_tree VALUES ('8122', '3', '859', '100', '8086', '860'); -INSERT INTO cp_tree VALUES ('8123', '3', '861', '100', '8086', '862'); -INSERT INTO cp_tree VALUES ('8124', '3', '863', '100', '8086', '864'); -INSERT INTO cp_tree VALUES ('8125', '3', '865', '100', '8086', '866'); -INSERT INTO cp_tree VALUES ('8126', '3', '867', '100', '8086', '868'); -INSERT INTO cp_tree VALUES ('8127', '3', '869', '100', '8086', '870'); -INSERT INTO cp_tree VALUES ('8128', '3', '871', '100', '8086', '872'); -INSERT INTO cp_tree VALUES ('8129', '3', '873', '100', '8086', '874'); -INSERT INTO cp_tree VALUES ('8130', '3', '875', '100', '8086', '876'); -INSERT INTO cp_tree VALUES ('8131', '3', '877', '100', '8086', '878'); -INSERT INTO cp_tree VALUES ('8132', '3', '879', '100', '8086', '880'); -INSERT INTO cp_tree VALUES ('8133', '3', '881', '100', '8086', '882'); -INSERT INTO cp_tree VALUES ('8134', '3', '883', '100', '8086', '884'); -INSERT INTO cp_tree VALUES ('8135', '3', '885', '100', '8086', '886'); -INSERT INTO cp_tree VALUES ('8136', '3', '887', '100', '8086', '888'); -INSERT INTO cp_tree VALUES ('8137', '3', '889', '100', '8086', '890'); -INSERT INTO cp_tree VALUES ('8138', '3', '891', '100', '8086', '892'); -INSERT INTO cp_tree VALUES ('8139', '3', '893', '100', '8086', '894'); -INSERT INTO cp_tree VALUES ('8140', '3', '895', '100', '8086', '896'); -INSERT INTO cp_tree VALUES ('8141', '3', '897', '100', '8086', '898'); -INSERT INTO cp_tree VALUES ('8142', '3', '899', '100', '8086', '900'); -INSERT INTO cp_tree VALUES ('8143', '3', '901', '100', '8086', '902'); -INSERT INTO cp_tree VALUES ('8144', '3', '903', '100', '8086', '904'); -INSERT INTO cp_tree VALUES ('8145', '3', '905', '100', '8086', '906'); -INSERT INTO cp_tree VALUES ('8146', '3', '907', '100', '8086', '908'); -INSERT INTO cp_tree VALUES ('8147', '3', '909', '100', '8086', '910'); -INSERT INTO cp_tree VALUES ('8148', '3', '911', '100', '8086', '912'); -INSERT INTO cp_tree VALUES ('8149', '3', '913', '100', '8086', '914'); -INSERT INTO cp_tree VALUES ('8150', '3', '915', '100', '8086', '916'); -INSERT INTO cp_tree VALUES ('8151', '3', '917', '100', '8086', '918'); -INSERT INTO cp_tree VALUES ('8152', '3', '919', '100', '8086', '920'); -INSERT INTO cp_tree VALUES ('8153', '3', '921', '100', '8086', '922'); -INSERT INTO cp_tree VALUES ('8154', '3', '923', '100', '8086', '924'); -INSERT INTO cp_tree VALUES ('8155', '2', '926', '100', '7692', '933'); -INSERT INTO cp_tree VALUES ('8156', '3', '927', '100', '8155', '928'); -INSERT INTO cp_tree VALUES ('8157', '3', '929', '100', '8155', '930'); -INSERT INTO cp_tree VALUES ('8158', '3', '931', '100', '8155', '932'); -INSERT INTO cp_tree VALUES ('8159', '2', '934', '100', '7692', '951'); -INSERT INTO cp_tree VALUES ('8160', '3', '935', '100', '8159', '936'); -INSERT INTO cp_tree VALUES ('8161', '3', '937', '100', '8159', '938'); -INSERT INTO cp_tree VALUES ('8162', '3', '939', '100', '8159', '940'); -INSERT INTO cp_tree VALUES ('8163', '3', '941', '100', '8159', '942'); -INSERT INTO cp_tree VALUES ('8164', '3', '943', '100', '8159', '944'); -INSERT INTO cp_tree VALUES ('8165', '3', '945', '100', '8159', '946'); -INSERT INTO cp_tree VALUES ('8166', '3', '947', '100', '8159', '948'); -INSERT INTO cp_tree VALUES ('8167', '3', '949', '100', '8159', '950'); -INSERT INTO cp_tree VALUES ('8168', '2', '952', '100', '7692', '955'); -INSERT INTO cp_tree VALUES ('8169', '3', '953', '100', '8168', '954'); -INSERT INTO cp_tree VALUES ('8170', '2', '956', '100', '7692', '1093'); -INSERT INTO cp_tree VALUES ('8171', '3', '957', '100', '8170', '958'); -INSERT INTO cp_tree VALUES ('8172', '3', '959', '100', '8170', '960'); -INSERT INTO cp_tree VALUES ('8173', '3', '961', '100', '8170', '962'); -INSERT INTO cp_tree VALUES ('8174', '3', '963', '100', '8170', '964'); -INSERT INTO cp_tree VALUES ('8175', '3', '965', '100', '8170', '966'); -INSERT INTO cp_tree VALUES ('8176', '3', '967', '100', '8170', '968'); -INSERT INTO cp_tree VALUES ('8177', '3', '969', '100', '8170', '970'); -INSERT INTO cp_tree VALUES ('8178', '3', '971', '100', '8170', '972'); -INSERT INTO cp_tree VALUES ('8179', '3', '973', '100', '8170', '974'); -INSERT INTO cp_tree VALUES ('8180', '3', '975', '100', '8170', '976'); -INSERT INTO cp_tree VALUES ('8181', '3', '977', '100', '8170', '978'); -INSERT INTO cp_tree VALUES ('8182', '3', '979', '100', '8170', '980'); -INSERT INTO cp_tree VALUES ('8183', '3', '981', '100', '8170', '982'); -INSERT INTO cp_tree VALUES ('8184', '3', '983', '100', '8170', '984'); -INSERT INTO cp_tree VALUES ('8185', '3', '985', '100', '8170', '986'); -INSERT INTO cp_tree VALUES ('8186', '3', '987', '100', '8170', '988'); -INSERT INTO cp_tree VALUES ('8187', '3', '989', '100', '8170', '990'); -INSERT INTO cp_tree VALUES ('8188', '3', '991', '100', '8170', '992'); -INSERT INTO cp_tree VALUES ('8189', '3', '993', '100', '8170', '994'); -INSERT INTO cp_tree VALUES ('8190', '3', '995', '100', '8170', '996'); -INSERT INTO cp_tree VALUES ('8191', '3', '997', '100', '8170', '998'); -INSERT INTO cp_tree VALUES ('8192', '3', '999', '100', '8170', '1000'); -INSERT INTO cp_tree VALUES ('8193', '3', '1001', '100', '8170', '1002'); -INSERT INTO cp_tree VALUES ('8194', '3', '1003', '100', '8170', '1004'); -INSERT INTO cp_tree VALUES ('8195', '3', '1005', '100', '8170', '1006'); -INSERT INTO cp_tree VALUES ('8196', '3', '1007', '100', '8170', '1008'); -INSERT INTO cp_tree VALUES ('8197', '3', '1009', '100', '8170', '1010'); -INSERT INTO cp_tree VALUES ('8198', '3', '1011', '100', '8170', '1012'); -INSERT INTO cp_tree VALUES ('8199', '3', '1013', '100', '8170', '1014'); -INSERT INTO cp_tree VALUES ('8200', '3', '1015', '100', '8170', '1016'); -INSERT INTO cp_tree VALUES ('8201', '3', '1017', '100', '8170', '1018'); -INSERT INTO cp_tree VALUES ('8202', '3', '1019', '100', '8170', '1020'); -INSERT INTO cp_tree VALUES ('8203', '3', '1021', '100', '8170', '1022'); -INSERT INTO cp_tree VALUES ('8204', '3', '1023', '100', '8170', '1024'); -INSERT INTO cp_tree VALUES ('8205', '3', '1025', '100', '8170', '1026'); -INSERT INTO cp_tree VALUES ('8206', '3', '1027', '100', '8170', '1028'); -INSERT INTO cp_tree VALUES ('8207', '3', '1029', '100', '8170', '1030'); -INSERT INTO cp_tree VALUES ('8208', '3', '1031', '100', '8170', '1032'); -INSERT INTO cp_tree VALUES ('8209', '3', '1033', '100', '8170', '1034'); -INSERT INTO cp_tree VALUES ('8210', '3', '1035', '100', '8170', '1036'); -INSERT INTO cp_tree VALUES ('8211', '3', '1037', '100', '8170', '1038'); -INSERT INTO cp_tree VALUES ('8212', '3', '1039', '100', '8170', '1040'); -INSERT INTO cp_tree VALUES ('8213', '3', '1041', '100', '8170', '1042'); -INSERT INTO cp_tree VALUES ('8214', '3', '1043', '100', '8170', '1044'); -INSERT INTO cp_tree VALUES ('8215', '3', '1045', '100', '8170', '1046'); -INSERT INTO cp_tree VALUES ('8216', '3', '1047', '100', '8170', '1048'); -INSERT INTO cp_tree VALUES ('8217', '3', '1049', '100', '8170', '1050'); -INSERT INTO cp_tree VALUES ('8218', '3', '1051', '100', '8170', '1052'); -INSERT INTO cp_tree VALUES ('8219', '3', '1053', '100', '8170', '1054'); -INSERT INTO cp_tree VALUES ('8220', '3', '1055', '100', '8170', '1056'); -INSERT INTO cp_tree VALUES ('8221', '3', '1057', '100', '8170', '1058'); -INSERT INTO cp_tree VALUES ('8222', '3', '1059', '100', '8170', '1060'); -INSERT INTO cp_tree VALUES ('8223', '3', '1061', '100', '8170', '1062'); -INSERT INTO cp_tree VALUES ('8224', '3', '1063', '100', '8170', '1064'); -INSERT INTO cp_tree VALUES ('8225', '3', '1065', '100', '8170', '1066'); -INSERT INTO cp_tree VALUES ('8226', '3', '1067', '100', '8170', '1068'); -INSERT INTO cp_tree VALUES ('8227', '3', '1069', '100', '8170', '1070'); -INSERT INTO cp_tree VALUES ('8228', '3', '1071', '100', '8170', '1072'); -INSERT INTO cp_tree VALUES ('8229', '3', '1073', '100', '8170', '1074'); -INSERT INTO cp_tree VALUES ('8230', '3', '1075', '100', '8170', '1076'); -INSERT INTO cp_tree VALUES ('8231', '3', '1077', '100', '8170', '1078'); -INSERT INTO cp_tree VALUES ('8232', '3', '1079', '100', '8170', '1080'); -INSERT INTO cp_tree VALUES ('8233', '3', '1081', '100', '8170', '1082'); -INSERT INTO cp_tree VALUES ('8234', '3', '1083', '100', '8170', '1084'); -INSERT INTO cp_tree VALUES ('8235', '3', '1085', '100', '8170', '1086'); -INSERT INTO cp_tree VALUES ('8236', '3', '1087', '100', '8170', '1088'); -INSERT INTO cp_tree VALUES ('8237', '3', '1089', '100', '8170', '1090'); -INSERT INTO cp_tree VALUES ('8238', '3', '1091', '100', '8170', '1092'); -INSERT INTO cp_tree VALUES ('8239', '2', '1094', '100', '7692', '1101'); -INSERT INTO cp_tree VALUES ('8240', '3', '1095', '100', '8239', '1096'); -INSERT INTO cp_tree VALUES ('8241', '3', '1097', '100', '8239', '1098'); -INSERT INTO cp_tree VALUES ('8242', '3', '1099', '100', '8239', '1100'); -INSERT INTO cp_tree VALUES ('8243', '2', '1102', '100', '7692', '1111'); -INSERT INTO cp_tree VALUES ('8244', '3', '1103', '100', '8243', '1104'); -INSERT INTO cp_tree VALUES ('8245', '3', '1105', '100', '8243', '1106'); -INSERT INTO cp_tree VALUES ('8246', '3', '1107', '100', '8243', '1108'); -INSERT INTO cp_tree VALUES ('8247', '3', '1109', '100', '8243', '1110'); -INSERT INTO cp_tree VALUES ('8248', '2', '1112', '100', '7692', '1115'); -INSERT INTO cp_tree VALUES ('8249', '3', '1113', '100', '8248', '1114'); -INSERT INTO cp_tree VALUES ('8250', '2', '1116', '100', '7692', '1253'); -INSERT INTO cp_tree VALUES ('8251', '3', '1117', '100', '8250', '1118'); -INSERT INTO cp_tree VALUES ('8252', '3', '1119', '100', '8250', '1120'); -INSERT INTO cp_tree VALUES ('8253', '3', '1121', '100', '8250', '1122'); -INSERT INTO cp_tree VALUES ('8254', '3', '1123', '100', '8250', '1124'); -INSERT INTO cp_tree VALUES ('8255', '3', '1125', '100', '8250', '1126'); -INSERT INTO cp_tree VALUES ('8256', '3', '1127', '100', '8250', '1128'); -INSERT INTO cp_tree VALUES ('8257', '3', '1129', '100', '8250', '1130'); -INSERT INTO cp_tree VALUES ('8258', '3', '1131', '100', '8250', '1132'); -INSERT INTO cp_tree VALUES ('8259', '3', '1133', '100', '8250', '1134'); -INSERT INTO cp_tree VALUES ('8260', '3', '1135', '100', '8250', '1136'); -INSERT INTO cp_tree VALUES ('8261', '3', '1137', '100', '8250', '1138'); -INSERT INTO cp_tree VALUES ('8262', '3', '1139', '100', '8250', '1140'); -INSERT INTO cp_tree VALUES ('8263', '3', '1141', '100', '8250', '1142'); -INSERT INTO cp_tree VALUES ('8264', '3', '1143', '100', '8250', '1144'); -INSERT INTO cp_tree VALUES ('8265', '3', '1145', '100', '8250', '1146'); -INSERT INTO cp_tree VALUES ('8266', '3', '1147', '100', '8250', '1148'); -INSERT INTO cp_tree VALUES ('8267', '3', '1149', '100', '8250', '1150'); -INSERT INTO cp_tree VALUES ('8268', '3', '1151', '100', '8250', '1152'); -INSERT INTO cp_tree VALUES ('8269', '3', '1153', '100', '8250', '1154'); -INSERT INTO cp_tree VALUES ('8270', '3', '1155', '100', '8250', '1156'); -INSERT INTO cp_tree VALUES ('8271', '3', '1157', '100', '8250', '1158'); -INSERT INTO cp_tree VALUES ('8272', '3', '1159', '100', '8250', '1160'); -INSERT INTO cp_tree VALUES ('8273', '3', '1161', '100', '8250', '1162'); -INSERT INTO cp_tree VALUES ('8274', '3', '1163', '100', '8250', '1164'); -INSERT INTO cp_tree VALUES ('8275', '3', '1165', '100', '8250', '1166'); -INSERT INTO cp_tree VALUES ('8276', '3', '1167', '100', '8250', '1168'); -INSERT INTO cp_tree VALUES ('8277', '3', '1169', '100', '8250', '1170'); -INSERT INTO cp_tree VALUES ('8278', '3', '1171', '100', '8250', '1172'); -INSERT INTO cp_tree VALUES ('8279', '3', '1173', '100', '8250', '1174'); -INSERT INTO cp_tree VALUES ('8280', '3', '1175', '100', '8250', '1176'); -INSERT INTO cp_tree VALUES ('8281', '3', '1177', '100', '8250', '1178'); -INSERT INTO cp_tree VALUES ('8282', '3', '1179', '100', '8250', '1180'); -INSERT INTO cp_tree VALUES ('8283', '3', '1181', '100', '8250', '1182'); -INSERT INTO cp_tree VALUES ('8284', '3', '1183', '100', '8250', '1184'); -INSERT INTO cp_tree VALUES ('8285', '3', '1185', '100', '8250', '1186'); -INSERT INTO cp_tree VALUES ('8286', '3', '1187', '100', '8250', '1188'); -INSERT INTO cp_tree VALUES ('8287', '3', '1189', '100', '8250', '1190'); -INSERT INTO cp_tree VALUES ('8288', '3', '1191', '100', '8250', '1192'); -INSERT INTO cp_tree VALUES ('8289', '3', '1193', '100', '8250', '1194'); -INSERT INTO cp_tree VALUES ('8290', '3', '1195', '100', '8250', '1196'); -INSERT INTO cp_tree VALUES ('8291', '3', '1197', '100', '8250', '1198'); -INSERT INTO cp_tree VALUES ('8292', '3', '1199', '100', '8250', '1200'); -INSERT INTO cp_tree VALUES ('8293', '3', '1201', '100', '8250', '1202'); -INSERT INTO cp_tree VALUES ('8294', '3', '1203', '100', '8250', '1204'); -INSERT INTO cp_tree VALUES ('8295', '3', '1205', '100', '8250', '1206'); -INSERT INTO cp_tree VALUES ('8296', '3', '1207', '100', '8250', '1208'); -INSERT INTO cp_tree VALUES ('8297', '3', '1209', '100', '8250', '1210'); -INSERT INTO cp_tree VALUES ('8298', '3', '1211', '100', '8250', '1212'); -INSERT INTO cp_tree VALUES ('8299', '3', '1213', '100', '8250', '1214'); -INSERT INTO cp_tree VALUES ('8300', '3', '1215', '100', '8250', '1216'); -INSERT INTO cp_tree VALUES ('8301', '3', '1217', '100', '8250', '1218'); -INSERT INTO cp_tree VALUES ('8302', '3', '1219', '100', '8250', '1220'); -INSERT INTO cp_tree VALUES ('8303', '3', '1221', '100', '8250', '1222'); -INSERT INTO cp_tree VALUES ('8304', '3', '1223', '100', '8250', '1224'); -INSERT INTO cp_tree VALUES ('8305', '3', '1225', '100', '8250', '1226'); -INSERT INTO cp_tree VALUES ('8306', '3', '1227', '100', '8250', '1228'); -INSERT INTO cp_tree VALUES ('8307', '3', '1229', '100', '8250', '1230'); -INSERT INTO cp_tree VALUES ('8308', '3', '1231', '100', '8250', '1232'); -INSERT INTO cp_tree VALUES ('8309', '3', '1233', '100', '8250', '1234'); -INSERT INTO cp_tree VALUES ('8310', '3', '1235', '100', '8250', '1236'); -INSERT INTO cp_tree VALUES ('8311', '3', '1237', '100', '8250', '1238'); -INSERT INTO cp_tree VALUES ('8312', '3', '1239', '100', '8250', '1240'); -INSERT INTO cp_tree VALUES ('8313', '3', '1241', '100', '8250', '1242'); -INSERT INTO cp_tree VALUES ('8314', '3', '1243', '100', '8250', '1244'); -INSERT INTO cp_tree VALUES ('8315', '3', '1245', '100', '8250', '1246'); -INSERT INTO cp_tree VALUES ('8316', '3', '1247', '100', '8250', '1248'); -INSERT INTO cp_tree VALUES ('8317', '3', '1249', '100', '8250', '1250'); -INSERT INTO cp_tree VALUES ('8318', '3', '1251', '100', '8250', '1252'); -INSERT INTO cp_tree VALUES ('8319', '2', '1254', '100', '7692', '1289'); -INSERT INTO cp_tree VALUES ('8320', '3', '1255', '100', '8319', '1256'); -INSERT INTO cp_tree VALUES ('8321', '3', '1257', '100', '8319', '1258'); -INSERT INTO cp_tree VALUES ('8322', '3', '1259', '100', '8319', '1260'); -INSERT INTO cp_tree VALUES ('8323', '3', '1261', '100', '8319', '1262'); -INSERT INTO cp_tree VALUES ('8324', '3', '1263', '100', '8319', '1264'); -INSERT INTO cp_tree VALUES ('8325', '3', '1265', '100', '8319', '1266'); -INSERT INTO cp_tree VALUES ('8326', '3', '1267', '100', '8319', '1268'); -INSERT INTO cp_tree VALUES ('8327', '3', '1269', '100', '8319', '1270'); -INSERT INTO cp_tree VALUES ('8328', '3', '1271', '100', '8319', '1272'); -INSERT INTO cp_tree VALUES ('8329', '3', '1273', '100', '8319', '1274'); -INSERT INTO cp_tree VALUES ('8330', '3', '1275', '100', '8319', '1276'); -INSERT INTO cp_tree VALUES ('8331', '3', '1277', '100', '8319', '1278'); -INSERT INTO cp_tree VALUES ('8332', '3', '1279', '100', '8319', '1280'); -INSERT INTO cp_tree VALUES ('8333', '3', '1281', '100', '8319', '1282'); -INSERT INTO cp_tree VALUES ('8334', '3', '1283', '100', '8319', '1284'); -INSERT INTO cp_tree VALUES ('8335', '3', '1285', '100', '8319', '1286'); -INSERT INTO cp_tree VALUES ('8336', '3', '1287', '100', '8319', '1288'); -INSERT INTO cp_tree VALUES ('8337', '1', '1', '100', '0', '30'); -INSERT INTO cp_tree VALUES ('8338', '2', '2', '100', '8337', '25'); -INSERT INTO cp_tree VALUES ('8339', '3', '3', '100', '8338', '10'); -INSERT INTO cp_tree VALUES ('8340', '4', '4', '100', '8339', '5'); -INSERT INTO cp_tree VALUES ('8341', '4', '6', '100', '8339', '7'); -INSERT INTO cp_tree VALUES ('8342', '4', '8', '100', '8339', '9'); -INSERT INTO cp_tree VALUES ('8343', '3', '11', '100', '8338', '24'); -INSERT INTO cp_tree VALUES ('8344', '4', '12', '100', '8343', '13'); -INSERT INTO cp_tree VALUES ('8345', '4', '14', '100', '8343', '15'); -INSERT INTO cp_tree VALUES ('8346', '4', '16', '100', '8343', '19'); -INSERT INTO cp_tree VALUES ('8347', '5', '17', '100', '8346', '18'); -INSERT INTO cp_tree VALUES ('8348', '4', '20', '100', '8343', '21'); -INSERT INTO cp_tree VALUES ('8349', '4', '22', '100', '8343', '23'); -INSERT INTO cp_tree VALUES ('8350', '2', '26', '100', '8337', '27'); -INSERT INTO cp_tree VALUES ('8351', '2', '28', '100', '8337', '29'); -INSERT INTO cp_tree VALUES ('8352', '1', '1', '100', '0', '30'); -INSERT INTO cp_tree VALUES ('8353', '2', '2', '100', '8352', '25'); -INSERT INTO cp_tree VALUES ('8354', '3', '3', '100', '8353', '10'); -INSERT INTO cp_tree VALUES ('8355', '4', '4', '100', '8354', '5'); -INSERT INTO cp_tree VALUES ('8356', '4', '6', '100', '8354', '7'); -INSERT INTO cp_tree VALUES ('8357', '4', '8', '100', '8354', '9'); -INSERT INTO cp_tree VALUES ('8358', '3', '11', '100', '8353', '24'); -INSERT INTO cp_tree VALUES ('8359', '4', '12', '100', '8358', '13'); -INSERT INTO cp_tree VALUES ('8360', '4', '14', '100', '8358', '15'); -INSERT INTO cp_tree VALUES ('8361', '4', '16', '100', '8358', '19'); -INSERT INTO cp_tree VALUES ('8362', '5', '17', '100', '8361', '18'); -INSERT INTO cp_tree VALUES ('8363', '4', '20', '100', '8358', '21'); -INSERT INTO cp_tree VALUES ('8364', '4', '22', '100', '8358', '23'); -INSERT INTO cp_tree VALUES ('8365', '2', '26', '100', '8352', '27'); -INSERT INTO cp_tree VALUES ('8366', '2', '28', '100', '8352', '29'); -INSERT INTO cp_tree VALUES ('8367', '1', '1', '100', '0', '30'); -INSERT INTO cp_tree VALUES ('8368', '2', '2', '100', '8367', '25'); -INSERT INTO cp_tree VALUES ('8369', '3', '3', '100', '8368', '10'); -INSERT INTO cp_tree VALUES ('8370', '4', '4', '100', '8369', '5'); -INSERT INTO cp_tree VALUES ('8371', '4', '6', '100', '8369', '7'); -INSERT INTO cp_tree VALUES ('8372', '4', '8', '100', '8369', '9'); -INSERT INTO cp_tree VALUES ('8373', '3', '11', '100', '8368', '24'); -INSERT INTO cp_tree VALUES ('8374', '4', '12', '100', '8373', '13'); -INSERT INTO cp_tree VALUES ('8375', '4', '14', '100', '8373', '15'); -INSERT INTO cp_tree VALUES ('8376', '4', '16', '100', '8373', '19'); -INSERT INTO cp_tree VALUES ('8377', '5', '17', '100', '8376', '18'); -INSERT INTO cp_tree VALUES ('8378', '4', '20', '100', '8373', '21'); -INSERT INTO cp_tree VALUES ('8379', '4', '22', '100', '8373', '23'); -INSERT INTO cp_tree VALUES ('8380', '2', '26', '100', '8367', '27'); -INSERT INTO cp_tree VALUES ('8381', '2', '28', '100', '8367', '29'); - - - diff --git a/components/ILIAS/Scorm2004/data/xmldb-mapping.xls b/components/ILIAS/Scorm2004/data/xmldb-mapping.xls deleted file mode 100755 index e88f928f6d52..000000000000 Binary files a/components/ILIAS/Scorm2004/data/xmldb-mapping.xls and /dev/null differ diff --git a/components/ILIAS/Scorm2004/resources/storeScorm.php b/components/ILIAS/Scorm2004/resources/storeScorm.php index 03d2c2311f06..a1679a290e52 100644 --- a/components/ILIAS/Scorm2004/resources/storeScorm.php +++ b/components/ILIAS/Scorm2004/resources/storeScorm.php @@ -21,7 +21,9 @@ require_once __DIR__ . "/../vendor/composer/vendor/autoload.php"; ilContext::init(ilContext::CONTEXT_SCORM); -ilInitialisation::initILIAS(); + +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); global $DIC; $packageId = $DIC->http()->wrapper()->query()->retrieve('package_id', $DIC->refinery()->kindlyTo()->int()); diff --git a/components/ILIAS/Scorm2004/resources/storeScorm2004.php b/components/ILIAS/Scorm2004/resources/storeScorm2004.php index 896a9c7aecd2..b89b251ed7eb 100644 --- a/components/ILIAS/Scorm2004/resources/storeScorm2004.php +++ b/components/ILIAS/Scorm2004/resources/storeScorm2004.php @@ -21,7 +21,9 @@ require_once __DIR__ . "/../vendor/composer/vendor/autoload.php"; ilContext::init(ilContext::CONTEXT_SCORM); -ilInitialisation::initILIAS(); + +require_once __DIR__ . '/../artifacts/bootstrap_default.php'; +entry_point('ILIAS Legacy Initialisation Adapter'); //conditions for storing data global $DIC; diff --git a/components/ILIAS/Scorm2004/scripts/buildrte/rte-min.js b/components/ILIAS/Scorm2004/scripts/buildrte/rte-min.js index a2ce695459bf..5d9c69d18bfa 100755 --- a/components/ILIAS/Scorm2004/scripts/buildrte/rte-min.js +++ b/components/ILIAS/Scorm2004/scripts/buildrte/rte-min.js @@ -1,4 +1,4 @@ -// Build: 20251002094555 +// Build: 2026205180244 /* +-----------------------------------------------------------------------------+ | ILIAS open source | @@ -10606,49 +10606,52 @@ function createHttpRequest() throw new Error('cannot create XMLHttpRequest'); } } -function sendAndLoad(url, data, callback, user, password, headers) -{ - function HttpResponse(xhttp) - { - this.status = Number(xhttp.status); - this.content = String(xhttp.responseText); - this.type = String(xhttp.getResponseHeader('Content-Type')); +function sendAndLoad( url, data, callback, user, password, headers ){ + function HttpResponse( xhttp ){ + this.status = Number( xhttp.status ); + this.content = String( xhttp.responseText ); + this.type = String( xhttp.getResponseHeader( 'Content-Type' ) ); } - function onStateChange() - { - if (xhttp.readyState === 4) { // COMPLETED - if (typeof callback === 'function') { - callback(new HttpResponse(xhttp)); - } else { - return new HttpResponse(xhttp); + function onStateChange(){ + if ( xhttp.readyState === 4 ){ // COMPLETED + if ( typeof callback === 'function' ){ + callback( new HttpResponse( xhttp ) ); } + else { + return new HttpResponse( xhttp ); + } + } + } + function sendData( data ){ + try { + xhttp.send( data ? String( data ) : '' ); + } + catch ( e ){ + console.log( 'Failed xhttp.send' ); + // add timed retries on failure? } } var xhttp = createHttpRequest(); var async = !!callback; var post = !!data; - xhttp.open(post ? 'POST' : 'GET', url, async, user, password); - if (typeof headers !== 'object') - { - headers = new Object(); + xhttp.open( post ? 'POST' : 'GET', url, async, user, password ); + if ( typeof headers !== 'object' ){ + headers = {}; } - if (post) - { - headers['Content-Type'] = 'application/x-www-form-urlencoded'; + if ( post ){ + headers[ 'Content-Type' ] = 'application/x-www-form-urlencoded'; } - if (headers && headers instanceof Object) - { - for (var k in headers) { - xhttp.setRequestHeader(k, headers[k]); + if ( headers && headers instanceof Object ){ + for ( var k in headers ){ + xhttp.setRequestHeader( k, headers[ k ] ); } } - if (async) - { + if ( async ){ xhttp.onreadystatechange = onStateChange; - xhttp.send(data ? String(data) : ''); - } else - { - xhttp.send(data ? String(data) : ''); + sendData( data ); + } + else { + sendData( data ); return onStateChange(); } } @@ -10729,7 +10732,7 @@ function sendJSONRequest (url, data, callback, user, password, headers) if (r.content) { if (r.content.indexOf("login.php")>-1 || r.content.indexOf("formlogin")>-1) { var thref=window.location.href; - thref=thref.substring(0,thref.indexOf('ilias.php'))+"Modules/Scorm2004/templates/default/session_timeout.html"; + thref=thref.substring(0,thref.indexOf('ilias.php'))+"components/ILIAS/Scorm2004/templates/default/session_timeout.html"; window.location.href = thref; } } diff --git a/components/ILIAS/Scorm2004/scripts/buildrte/rte.js b/components/ILIAS/Scorm2004/scripts/buildrte/rte.js index ec733139ba05..5d6c887bcf2f 100755 --- a/components/ILIAS/Scorm2004/scripts/buildrte/rte.js +++ b/components/ILIAS/Scorm2004/scripts/buildrte/rte.js @@ -1,4 +1,4 @@ -// Build: 20251002094555 +// Build: 2026205180244 /* +-----------------------------------------------------------------------------+ | ILIAS open source | @@ -12098,49 +12098,61 @@ function createHttpRequest() } } -function sendAndLoad(url, data, callback, user, password, headers) -{ - function HttpResponse(xhttp) - { - this.status = Number(xhttp.status); - this.content = String(xhttp.responseText); - this.type = String(xhttp.getResponseHeader('Content-Type')); +function sendAndLoad( url, data, callback, user, password, headers ){ + + function HttpResponse( xhttp ){ + this.status = Number( xhttp.status ); + this.content = String( xhttp.responseText ); + this.type = String( xhttp.getResponseHeader( 'Content-Type' ) ); } - function onStateChange() - { - if (xhttp.readyState === 4) { // COMPLETED - if (typeof callback === 'function') { - callback(new HttpResponse(xhttp)); - } else { - return new HttpResponse(xhttp); - } + + function onStateChange(){ + if ( xhttp.readyState === 4 ){ // COMPLETED + if ( typeof callback === 'function' ){ + callback( new HttpResponse( xhttp ) ); + } + else { + return new HttpResponse( xhttp ); + } } - } + } + + function sendData( data ){ + try { + xhttp.send( data ? String( data ) : '' ); + } + catch ( e ){ + console.log( 'Failed xhttp.send' ); + // add timed retries on failure? + } + } + var xhttp = createHttpRequest(); var async = !!callback; - var post = !!data; - xhttp.open(post ? 'POST' : 'GET', url, async, user, password); - if (typeof headers !== 'object') - { - headers = new Object(); + var post = !!data; + + xhttp.open( post ? 'POST' : 'GET', url, async, user, password ); + + if ( typeof headers !== 'object' ){ + headers = {}; } - if (post) - { - headers['Content-Type'] = 'application/x-www-form-urlencoded'; + + if ( post ){ + headers[ 'Content-Type' ] = 'application/x-www-form-urlencoded'; } - if (headers && headers instanceof Object) - { - for (var k in headers) { - xhttp.setRequestHeader(k, headers[k]); + + if ( headers && headers instanceof Object ){ + for ( var k in headers ){ + xhttp.setRequestHeader( k, headers[ k ] ); } } - if (async) - { + + if ( async ){ xhttp.onreadystatechange = onStateChange; - xhttp.send(data ? String(data) : ''); - } else - { - xhttp.send(data ? String(data) : ''); + sendData( data ); + } + else { + sendData( data ); return onStateChange(); } } @@ -12225,7 +12237,7 @@ function sendJSONRequest (url, data, callback, user, password, headers) if (r.content) { if (r.content.indexOf("login.php")>-1 || r.content.indexOf("formlogin")>-1) { var thref=window.location.href; - thref=thref.substring(0,thref.indexOf('ilias.php'))+"Modules/Scorm2004/templates/default/session_timeout.html"; + thref=thref.substring(0,thref.indexOf('ilias.php'))+"components/ILIAS/Scorm2004/templates/default/session_timeout.html"; window.location.href = thref; } } diff --git a/components/ILIAS/Scorm2004/scripts/rtemain/main.js b/components/ILIAS/Scorm2004/scripts/rtemain/main.js index e370a68beedc..c715474c7f90 100755 --- a/components/ILIAS/Scorm2004/scripts/rtemain/main.js +++ b/components/ILIAS/Scorm2004/scripts/rtemain/main.js @@ -1313,49 +1313,61 @@ function createHttpRequest() } } -function sendAndLoad(url, data, callback, user, password, headers) -{ - function HttpResponse(xhttp) - { - this.status = Number(xhttp.status); - this.content = String(xhttp.responseText); - this.type = String(xhttp.getResponseHeader('Content-Type')); +function sendAndLoad( url, data, callback, user, password, headers ){ + + function HttpResponse( xhttp ){ + this.status = Number( xhttp.status ); + this.content = String( xhttp.responseText ); + this.type = String( xhttp.getResponseHeader( 'Content-Type' ) ); } - function onStateChange() - { - if (xhttp.readyState === 4) { // COMPLETED - if (typeof callback === 'function') { - callback(new HttpResponse(xhttp)); - } else { - return new HttpResponse(xhttp); - } + + function onStateChange(){ + if ( xhttp.readyState === 4 ){ // COMPLETED + if ( typeof callback === 'function' ){ + callback( new HttpResponse( xhttp ) ); + } + else { + return new HttpResponse( xhttp ); + } } - } + } + + function sendData( data ){ + try { + xhttp.send( data ? String( data ) : '' ); + } + catch ( e ){ + console.log( 'Failed xhttp.send' ); + // add timed retries on failure? + } + } + var xhttp = createHttpRequest(); var async = !!callback; - var post = !!data; - xhttp.open(post ? 'POST' : 'GET', url, async, user, password); - if (typeof headers !== 'object') - { - headers = new Object(); + var post = !!data; + + xhttp.open( post ? 'POST' : 'GET', url, async, user, password ); + + if ( typeof headers !== 'object' ){ + headers = {}; } - if (post) - { - headers['Content-Type'] = 'application/x-www-form-urlencoded'; + + if ( post ){ + headers[ 'Content-Type' ] = 'application/x-www-form-urlencoded'; } - if (headers && headers instanceof Object) - { - for (var k in headers) { - xhttp.setRequestHeader(k, headers[k]); + + if ( headers && headers instanceof Object ){ + for ( var k in headers ){ + xhttp.setRequestHeader( k, headers[ k ] ); } } - if (async) - { + + if ( async ){ xhttp.onreadystatechange = onStateChange; - xhttp.send(data ? String(data) : ''); - } else - { - xhttp.send(data ? String(data) : ''); + sendData( data ); + } + else { + sendData( data ); return onStateChange(); } } @@ -1440,7 +1452,7 @@ function sendJSONRequest (url, data, callback, user, password, headers) if (r.content) { if (r.content.indexOf("login.php")>-1 || r.content.indexOf("formlogin")>-1) { var thref=window.location.href; - thref=thref.substring(0,thref.indexOf('ilias.php'))+"Modules/Scorm2004/templates/default/session_timeout.html"; + thref=thref.substring(0,thref.indexOf('ilias.php'))+"components/ILIAS/Scorm2004/templates/default/session_timeout.html"; window.location.href = thref; } } diff --git a/components/ILIAS/ScormAicc/ScormAicc.php b/components/ILIAS/ScormAicc/ScormAicc.php index efbf89d3d56e..1b0dbf9e7cca 100644 --- a/components/ILIAS/ScormAicc/ScormAicc.php +++ b/components/ILIAS/ScormAicc/ScormAicc.php @@ -43,5 +43,26 @@ public function getTarget(): string } }; + $contribute[Component\Resource\PublicAsset::class] = static fn() => new class () implements Component\Resource\PublicAsset { + public function getSource(): string + { + return "components/ILIAS/ScormAicc/templates/default/debug.html"; + } + public function getTarget(): string + { + return "components/ILIAS/ScormAicc/templates/default/debug.html"; + } + }; + + $contribute[Component\Resource\PublicAsset::class] = static fn() => new class () implements Component\Resource\PublicAsset { + public function getSource(): string + { + return "components/ILIAS/ScormAicc/templates/default/dummy.html"; + } + public function getTarget(): string + { + return "components/ILIAS/ScormAicc/templates/default/dummy.html"; + } + }; } } diff --git a/components/ILIAS/ScormAicc/classes/class.ilObjSAHSLearningModuleGUI.php b/components/ILIAS/ScormAicc/classes/class.ilObjSAHSLearningModuleGUI.php index f89c4c7819fd..f83c4081fe9b 100755 --- a/components/ILIAS/ScormAicc/classes/class.ilObjSAHSLearningModuleGUI.php +++ b/components/ILIAS/ScormAicc/classes/class.ilObjSAHSLearningModuleGUI.php @@ -429,7 +429,7 @@ public function uploadObject(): void $newObj->getDataDirectory(), false, false, - true + false ); } ilFileUtils::renameExecutables($newObj->getDataDirectory()); @@ -860,8 +860,7 @@ public function export(): mixed { $GLOBALS['DIC']->tabs()->setTabActive('export'); $exp_gui = new ilExportGUI($this); - // @todo: removed deprecated ilCtrl methods, this needs inspection by a maintainer. - // $this->ctrl->setCmd("listExportFiles"); + // Here used to be $this->ctrl->setCmd("listExportFiles") in <10 $exp_gui->addFormat("xml"); return $this->ctrl->forwardCommand($exp_gui); } diff --git a/components/ILIAS/ScormAicc/classes/class.ilScormMailTemplateLPContext.php b/components/ILIAS/ScormAicc/classes/class.ilScormMailTemplateLPContext.php index dc306f1399b6..2aaaa24235dc 100755 --- a/components/ILIAS/ScormAicc/classes/class.ilScormMailTemplateLPContext.php +++ b/components/ILIAS/ScormAicc/classes/class.ilScormMailTemplateLPContext.php @@ -136,10 +136,6 @@ public function resolveSpecificPlaceholder( global $DIC; $ilObjDataCache = $DIC['ilObjDataCache']; - if (!in_array($placeholder_id, ['sahs_title', 'sahs_link'])) { - return ''; - } - $obj_id = $ilObjDataCache->lookupObjId((int) $context_parameters['ref_id']); $tracking = new ilObjUserTracking(); @@ -154,6 +150,7 @@ public function resolveSpecificPlaceholder( if ($recipient === null) { return ''; } + $status = ilLPStatus::_lookupStatus($obj_id, $recipient->getId()); if (!$status) { $status = ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM; @@ -167,7 +164,9 @@ public function resolveSpecificPlaceholder( if ($recipient === null) { return ''; } + $mark = ilLPMarks::_lookupMark($recipient->getId(), $obj_id); + return trim($mark) !== '' ? $mark : '-'; case 'scorm_score': @@ -190,6 +189,7 @@ public function resolveSpecificPlaceholder( $scores[] = $item['title'] . ': ' . $item['score']; } } + return implode("\n", $scores); case 'scorm_time_spent': diff --git a/components/ILIAS/ScormAicc/scripts/basisAPI.js b/components/ILIAS/ScormAicc/scripts/basisAPI.js index ddb1e92852bb..adf4de64faaa 100755 --- a/components/ILIAS/ScormAicc/scripts/basisAPI.js +++ b/components/ILIAS/ScormAicc/scripts/basisAPI.js @@ -15,67 +15,77 @@ var iv={}, /* XMLHHTP functions */ -function sendRequest (url, data, callback, user, password, headers) { +function sendRequest( url, data, callback, user, password, headers ){ - function sendAndLoad(url, data, callback, user, password, headers) { - function createHttpRequest() { - try - { - return window.XMLHttpRequest + function sendAndLoad( url, data, callback, user, password, headers ){ + function createHttpRequest(){ + try { + return window.XMLHttpRequest ? new window.XMLHttpRequest() - : new window.ActiveXObject('MSXML2.XMLHTTP'); - } - catch (e) - { - throw new Error('cannot create XMLHttpRequest'); + : new window.ActiveXObject( 'MSXML2.XMLHTTP' ); } + catch ( e ){ + throw new Error( 'cannot create XMLHttpRequest' ); + } + } + + function HttpResponse( xhttp ){ + this.status = Number( xhttp.status ); + this.content = String( xhttp.responseText ); + this.type = String( xhttp.getResponseHeader( 'Content-Type' ) ); } - function HttpResponse(xhttp) - { - this.status = Number(xhttp.status); - this.content = String(xhttp.responseText); - this.type = String(xhttp.getResponseHeader('Content-Type')); + + function onStateChange(){ + if ( xhttp.readyState === 4 ){ // COMPLETED + if ( typeof callback === 'function' ){ + callback( new HttpResponse( xhttp ) ); + } + else { + return new HttpResponse( xhttp ); + } + } } - function onStateChange() - { - if (xhttp.readyState === 4) { // COMPLETED - if (typeof callback === 'function') { - callback(new HttpResponse(xhttp)); - } else { - return new HttpResponse(xhttp); - } + + function sendData( data ){ + try { + xhttp.send( data ? String( data ) : '' ); + } + catch ( e ){ + console.log( 'Failed xhttp.send' ); + // add timed retries on failure? } } + var xhttp = createHttpRequest(); var async = !!callback; - var post = !!data; - xhttp.open(post ? 'POST' : 'GET', url, async, user, password); - if (typeof headers !== 'object') - { - headers = new Object(); + var post = !!data; + + xhttp.open( post ? 'POST' : 'GET', url, async, user, password ); + + if ( typeof headers !== 'object' ){ + headers = {}; } - if (post) - { - headers['Content-Type'] = 'application/x-www-form-urlencoded'; + + if ( post ){ + headers[ 'Content-Type' ] = 'application/x-www-form-urlencoded'; } - if (headers && headers instanceof Object) - { - for (var k in headers) { - xhttp.setRequestHeader(k, headers[k]); + + if ( headers && headers instanceof Object ){ + for ( var k in headers ){ + xhttp.setRequestHeader( k, headers[ k ] ); } } - if (async) - { + + if ( async ){ xhttp.onreadystatechange = onStateChange; -// xhttp.send(data ? String(data) : ''); - xhttp.send(data); - } else - { - xhttp.send(data ? String(data) : ''); + sendData( data ); + } + else { + sendData( data ); return onStateChange(); } } - + function useSendBeacon() { if (navigator.userAgent.indexOf("Chrom") > -1) { var winev = null; diff --git a/components/ILIAS/ScormAicc/templates/default/tpl.sahs_pres_frameset_js_debug.html b/components/ILIAS/ScormAicc/templates/default/tpl.sahs_pres_frameset_js_debug.html index 8e78d243f259..70eeeaf54273 100755 --- a/components/ILIAS/ScormAicc/templates/default/tpl.sahs_pres_frameset_js_debug.html +++ b/components/ILIAS/ScormAicc/templates/default/tpl.sahs_pres_frameset_js_debug.html @@ -11,7 +11,7 @@ - + The editor interface requires a <b>frames-capable</b> web browser. diff --git a/components/ILIAS/ScormAicc/templates/default/tpl.sahs_pres_frameset_js_debug_one_page.html b/components/ILIAS/ScormAicc/templates/default/tpl.sahs_pres_frameset_js_debug_one_page.html index e523681ca1b9..965f0b168ae7 100755 --- a/components/ILIAS/ScormAicc/templates/default/tpl.sahs_pres_frameset_js_debug_one_page.html +++ b/components/ILIAS/ScormAicc/templates/default/tpl.sahs_pres_frameset_js_debug_one_page.html @@ -8,8 +8,8 @@ <meta name="viewport" content="user-scalable=yes, initial-scale=1.0, width=device-width"> </head> <frameset rows="75%,25%"> - <frame src="./Modules/ScormAicc/templates/default/dummy.html" name="sahs_content" marginwidth="0" marginheight="0" scrolling="auto" /> - <frame src="./Modules/ScormAicc/templates/default/debug.html" name="logframe" marginwidth="0" marginheight="0" scrolling="auto" /> + <frame src="./components/ILIAS/ScormAicc/templates/default/dummy.html" name="sahs_content" marginwidth="0" marginheight="0" scrolling="auto" /> + <frame src="./components/ILIAS/ScormAicc/templates/default/debug.html" name="logframe" marginwidth="0" marginheight="0" scrolling="auto" /> </frameset> <noframes> The editor interface requires a <b>frames-capable</b> web browser. diff --git a/components/ILIAS/ScormAicc/templates/default/tpl.sahs_pres_frameset_js_one_page.html b/components/ILIAS/ScormAicc/templates/default/tpl.sahs_pres_frameset_js_one_page.html index a795b162ddf6..5b3629b7913e 100755 --- a/components/ILIAS/ScormAicc/templates/default/tpl.sahs_pres_frameset_js_one_page.html +++ b/components/ILIAS/ScormAicc/templates/default/tpl.sahs_pres_frameset_js_one_page.html @@ -8,7 +8,7 @@ <meta name="viewport" content="user-scalable=yes, initial-scale=1.0, width=device-width"> </head> <frameset rows="*" frameborder="0" framespacing="0" border="0"> - <frame src="./Modules/ScormAicc/templates/default/dummy.html" name="sahs_content" marginwidth="0" marginheight="0" scrolling="auto" /> + <frame src="./components/ILIAS/ScormAicc/templates/default/dummy.html" name="sahs_content" marginwidth="0" marginheight="0" scrolling="auto" /> </frameset> <noframes> The editor interface requires a <b>frames-capable</b> web browser. diff --git a/components/ILIAS/Search/classes/Like/class.ilLikeUserDefinedFieldSearch.php b/components/ILIAS/Search/classes/Like/class.ilLikeUserDefinedFieldSearch.php index b91a4bf99f1a..b4da19619311 100755 --- a/components/ILIAS/Search/classes/Like/class.ilLikeUserDefinedFieldSearch.php +++ b/components/ILIAS/Search/classes/Like/class.ilLikeUserDefinedFieldSearch.php @@ -44,7 +44,7 @@ public function __createWhereCondition(): string $fields = $this->getFields(); $field = $fields[0]; - $and = " WHERE field_id = " . $this->db->quote((int) substr($field, 2), "integer") . " AND ( "; + $and = " WHERE field_id = " . $this->db->quote(substr($field, 6), ilDBConstants::T_TEXT) . " AND ( "; $counter = 0; foreach ($this->query_parser->getQuotedWords() as $word) { if ($counter++) { diff --git a/components/ILIAS/Search/classes/Provider/SearchMetaBarProvider.php b/components/ILIAS/Search/classes/Provider/SearchMetaBarProvider.php index a61ebc13a0be..08f51ab2eef4 100755 --- a/components/ILIAS/Search/classes/Provider/SearchMetaBarProvider.php +++ b/components/ILIAS/Search/classes/Provider/SearchMetaBarProvider.php @@ -71,8 +71,18 @@ public function getMetaBarItems(): array $html = $main_search->getHTML(); } + $ac_datasource = $main_search->getAutocompleteSource(); + $standard_search_action = $main_search->getStandardSearchAction(); + $user_search_action = $main_search->getUserSearchAction(); + return $this->dic->ui()->factory()->legacy()->content($uip->getHTML($html))->withAdditionalOnLoadCode( - fn($id) => 'il.SearchMainMenu.init()' + fn($id) => <<<JS + il.SearchMainMenu.init( + "$ac_datasource", + "$standard_search_action", + "$user_search_action" + ) + JS ); }; diff --git a/components/ILIAS/Search/classes/class.ilMainMenuSearchGUI.php b/components/ILIAS/Search/classes/class.ilMainMenuSearchGUI.php index 43c21d71e6f4..9713961fe160 100755 --- a/components/ILIAS/Search/classes/class.ilMainMenuSearchGUI.php +++ b/components/ILIAS/Search/classes/class.ilMainMenuSearchGUI.php @@ -36,13 +36,13 @@ class ilMainMenuSearchGUI protected ilTree $tree; protected ilCtrl $ctrl; protected ilObjUser $user; + protected ilGlobalTemplateInterface $global_template; private GlobalHttpState $http; private Factory $refinery; private int $ref_id; - private bool $isContainer = true; public function __construct() { @@ -56,7 +56,7 @@ public function __construct() $this->http = $DIC->http(); $this->refinery = $DIC->refinery(); - $DIC->ui()->mainTemplate()->addJavascript('assets/js/SearchMainMenu.js'); + $this->global_template = $DIC->ui()->mainTemplate(); $this->initRefIdFromQuery(); } @@ -76,6 +76,9 @@ public function getHTML(): string { iljQueryUtil::initjQuery(); + $this->global_template->addJavaScript('assets/js/legacyAutocomplete.js', true, 3); + $this->global_template->addJavascript('assets/js/SearchMainMenu.js'); + $this->tpl = new ilTemplate('tpl.main_menu_search.html', true, true, 'components/ILIAS/Search'); if ($this->user->getId() != ANONYMOUS_USER_ID) { $this->tpl->setVariable('LABEL_SEARCH_OPTIONS', $this->lng->txt("label_search_options")); @@ -109,10 +112,6 @@ public function getHTML(): string ); $this->tpl->setVariable('BTN_SEARCH', $this->lng->txt('search')); $this->tpl->setVariable('SEARCH_INPUT_LABEL', $this->lng->txt('search_field')); - $this->tpl->setVariable( - 'AC_DATASOURCE', - $this->buildSearchLink('autoComplete', true) - ); $this->tpl->setVariable('IMG_MM_SEARCH', ilUtil::img( ilUtil::getImagePath("standard/icon_seas.svg"), @@ -122,7 +121,7 @@ public function getHTML(): string if ($this->user->getId() != ANONYMOUS_USER_ID) { $this->tpl->setVariable( 'HREF_SEARCH_LINK', - $this->buildSearchLink('', false) + $this->buildSearchLink('') ); $this->tpl->setVariable('TXT_SEARCH_LINK', $this->lng->txt("last_search_result")); } @@ -131,26 +130,34 @@ public function getHTML(): string return $this->tpl->get(); } - protected function buildSearchLink(string $cmd, bool $async): string + protected function buildSearchLink(string $cmd): string { - $root_id = 0; - if ($this->http->wrapper()->post()->has('root_id')) { - $root_id = $this->http->wrapper()->post()->retrieve( - 'root_id', - $this->refinery->kindlyTo()->int() - ); - } - if ($root_id == ilSearchControllerGUI::TYPE_USER_SEARCH) { - $default = ilLuceneUserSearchGUI::class; - } else { - $default = ilSearchGUI::class; - } + return $this->ctrl->getLinkTargetByClass( + [strtolower(ilSearchControllerGUI::class), strtolower(ilSearchGUI::class)], + $cmd + ); + } + public function getStandardSearchAction(): string + { + return $this->buildSearchLink('remoteSearch'); + } + + public function getUserSearchAction(): string + { + return $this->ctrl->getLinkTargetByClass( + [strtolower(ilSearchControllerGUI::class), strtolower(ilLuceneUserSearchGUI::class)], + 'remoteSearch' + ); + } + + public function getAutocompleteSource(): string + { return $this->ctrl->getLinkTargetByClass( - [ilSearchControllerGUI::class, $default], - $cmd, + [strtolower(ilSearchControllerGUI::class)], + 'autoComplete', null, - $async + true ); } } diff --git a/components/ILIAS/Search/classes/class.ilRepositoryObjectDetailSearch.php b/components/ILIAS/Search/classes/class.ilRepositoryObjectDetailSearch.php index 2bd642501c48..20ec8b6b4bb4 100755 --- a/components/ILIAS/Search/classes/class.ilRepositoryObjectDetailSearch.php +++ b/components/ILIAS/Search/classes/class.ilRepositoryObjectDetailSearch.php @@ -103,9 +103,9 @@ protected function performLuceneSearch(): ilRepositoryObjectDetailSearchResult $detail_search_result->addResultSet( array( 'obj_id' => $this->getObjId(), - 'item_id' => $sub_id, - 'relevance' => $searcher->getHighlighter()->getRelevance($this->getObjId(), ...$sub_id), - 'content' => $searcher->getHighlighter()->getContent($this->getObjId(), ...$sub_id) + 'item_id' => $sub_id['id'], + 'relevance' => $searcher->getHighlighter()->getRelevance($this->getObjId(), $sub_id['id'], $sub_id['type']), + 'content' => $searcher->getHighlighter()->getContent($this->getObjId(), $sub_id['id'], $sub_id['type']) ) ); } diff --git a/components/ILIAS/Search/classes/class.ilRepositoryUserResultTableGUI.php b/components/ILIAS/Search/classes/class.ilRepositoryUserResultTableGUI.php index cabead4d31ab..66468d9b49cd 100755 --- a/components/ILIAS/Search/classes/class.ilRepositoryUserResultTableGUI.php +++ b/components/ILIAS/Search/classes/class.ilRepositoryUserResultTableGUI.php @@ -22,7 +22,6 @@ use ILIAS\HTTP\Services as HTTP; use ILIAS\Refinery\Factory as Refinery; use ILIAS\User\Profile\Profile; -use ILIAS\User\Profile\Data as ProfileData; /** * TableGUI class user search results @@ -216,14 +215,6 @@ protected function fillRow(array $a_set): void $this->tpl->parseCurrentBlock(); break; - case 'interests_general': - case 'interests_help_offered': - case 'interests_help_looking': - $this->tpl->setCurrentBlock('custom_fields'); - $this->tpl->setVariable('VAL_CUST', implode(', ', (array) $a_set[$field])); - $this->tpl->parseCurrentBlock(); - break; - case 'org_units': $this->tpl->setCurrentBlock('custom_fields'); $this->tpl->setVariable( @@ -248,8 +239,12 @@ protected function fillRow(array $a_set): void // no break default: + $value = $a_set[$field] ?? ''; + if (is_array($value)) { + $value = implode(', ', $value); + } $this->tpl->setCurrentBlock('custom_fields'); - $this->tpl->setVariable('VAL_CUST', (string) ($a_set[$field] ?: '')); + $this->tpl->setVariable('VAL_CUST', $value); $this->tpl->parseCurrentBlock(); break; } @@ -344,7 +339,7 @@ public function parseUserIds(array $a_user_ids): bool } $data = $this->profile->getDataFor((int) $set['usr_id']); foreach ($udf_ids as $udf_field) { - $users[$counter]['udf_' . $udf_field] = $data->getAdditionalFieldByIdentifier($udf_field); + $users[$counter]['udf_' . $udf_field] = implode(', ', $data->getAdditionalFieldByIdentifier($udf_field) ?? []); } ++$counter; } diff --git a/components/ILIAS/Search/classes/class.ilUserDefinedFieldSearch.php b/components/ILIAS/Search/classes/class.ilUserDefinedFieldSearch.php index 4789b7ca8928..b0274dd98bb1 100755 --- a/components/ILIAS/Search/classes/class.ilUserDefinedFieldSearch.php +++ b/components/ILIAS/Search/classes/class.ilUserDefinedFieldSearch.php @@ -34,7 +34,7 @@ public function performSearch(): ilSearchResult $query = "SELECT usr_id " . $locate . - "FROM udf_text " . + "FROM usr_profile_data " . $where; $res = $this->db->query($query); while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) { diff --git a/components/ILIAS/Search/classes/class.ilUserSearchCache.php b/components/ILIAS/Search/classes/class.ilUserSearchCache.php index 9b7139565bf2..b3bc10c544a7 100755 --- a/components/ILIAS/Search/classes/class.ilUserSearchCache.php +++ b/components/ILIAS/Search/classes/class.ilUserSearchCache.php @@ -427,7 +427,7 @@ private function read(): void $this->failed = (array) unserialize((string) $row->failed); } $this->page_number = (int) $row->page; - $this->setQuery(unserialize((string) $row->query)); + $this->setQuery((string) unserialize((string) $row->query)); $this->setRoot((int) $row->root); $this->setItemFilter((array) unserialize((string) $row->item_filter)); $this->setCreationFilter((array) unserialize((string) $row->creation_filter)); diff --git a/components/ILIAS/Search/classes/class.ilUserSearchOptions.php b/components/ILIAS/Search/classes/class.ilUserSearchOptions.php index f04b95d42013..67541eb442eb 100755 --- a/components/ILIAS/Search/classes/class.ilUserSearchOptions.php +++ b/components/ILIAS/Search/classes/class.ilUserSearchOptions.php @@ -31,15 +31,13 @@ */ class ilUserSearchOptions { - public const FIELD_TYPE_UDF_UNDEFINED = 0; - public const FIELD_TYPE_UDF_SELECT = 1; - public const FIELD_TYPE_UDF_TEXT = 2; - public const FIELD_TYPE_SELECT = 3; - public const FIELD_TYPE_TEXT = 4; - // begin-patch lok - public const FIELD_TYPE_MULTI = 5; - // end-patch lok - public const FIELD_TYPE_UDF_WYSIWYG = 6; + public const int FIELD_TYPE_UDF_UNDEFINED = 0; + public const int FIELD_TYPE_UDF_SELECT = 1; + public const int FIELD_TYPE_UDF_TEXT = 2; + public const int FIELD_TYPE_SELECT = 3; + public const int FIELD_TYPE_TEXT = 4; + public const int FIELD_TYPE_MULTI = 5; + public const int FIELD_TYPE_UDF_WYSIWYG = 6; /** @@ -118,9 +116,8 @@ public static function _getSearchableFieldsInfo(bool $a_admin = false): array ); break; - case 'sel_country': + case 'country': $fields[$counter]['type'] = self::FIELD_TYPE_SELECT; - $fields[$counter]['values'] = array(0 => $lng->txt('please_choose')); // #7843 -- see ilCountrySelectInputGUI $lng->loadLanguageModule('meta'); @@ -128,6 +125,7 @@ public static function _getSearchableFieldsInfo(bool $a_admin = false): array $fields[$counter]['values'][$c] = $lng->txt('meta_c_' . $c); } asort($fields[$counter]['values']); + array_unshift($fields[$counter]['values'], $lng->txt('please_choose')); break; case 'org_units': @@ -170,7 +168,6 @@ public static function _getPossibleFields(bool $a_admin = false): array 'zipcode', 'city', 'country', - 'sel_country', 'email', 'second_email', 'hobby', @@ -201,7 +198,7 @@ public static function _isEnabled($a_key): bool return true; } - return $profile->getFieldByIdentifier($a_key)->isSearchable(); + return $profile->getFieldByIdentifier($a_key)?->isSearchable() ?? false; } public static function _saveStatus(string $a_key, bool $a_enabled): bool @@ -220,25 +217,28 @@ public static function __appendUserDefinedFields(array $fields, int $counter): a $lng = $DIC->language(); foreach ($DIC['user']->getProfile()->getVisibleUserDefinedFields(Context::Search) as $field) { $input = $field->getLegacyInput($lng, Context::Search); - if ($input instanceof ilSelectInputGUI) { - $fields[$counter]['values'] = ilUserSearchOptions::__prepareValues($input->getOptions()); - $fields[$counter]['type'] = self::FIELD_TYPE_UDF_SELECT; - } $fields[$counter]['lang'] = $field->getLabel($lng); - $fields[$counter]['db'] = $field->getIdentifier(); + $fields[$counter]['db'] = "udf_{$field->getIdentifier()}"; - switch (get_class($input)) { + switch ($input::class) { case ilTextInputGUI::class: + case ilTextAreaInputGUI::class: $fields[$counter]['type'] = self::FIELD_TYPE_UDF_TEXT; break; - case ilTextAreaInputGUI::class: - $fields[$counter]['type'] = self::FIELD_TYPE_UDF_WYSIWYG; + case ilMultiSelectInputGUI::class: + $fields[$counter]['values'] = ilUserSearchOptions::__prepareValues($input->getOptions()); + $fields[$counter]['type'] = self::FIELD_TYPE_UDF_SELECT; + break; + + case ilSelectInputGUI::class: + $fields[$counter]['values'] = ilUserSearchOptions::__prepareValues($input->getOptions()); + $fields[$counter]['type'] = self::FIELD_TYPE_UDF_SELECT; break; default: // do not throw: udf plugin support - $fields[$counter]['type'] = get_class($input); + $fields[$counter]['type'] = $input::class; break; } ++$counter; diff --git a/components/ILIAS/Search/resources/SearchMainMenu.js b/components/ILIAS/Search/resources/SearchMainMenu.js index c9b893ab0f30..b1eb699f1f16 100755 --- a/components/ILIAS/Search/resources/SearchMainMenu.js +++ b/components/ILIAS/Search/resources/SearchMainMenu.js @@ -1,11 +1,36 @@ -/* eslint-env jquery */ +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + */ + il.SearchMainMenu = { - acDatasource: 'ilias.php?baseClass=ilSearchControllerGUI&cmd=autoComplete', + /** + * @param {string} acDatasource + * @param {string} standardSearchAction + * @param {string} userSearchAction + */ + init( + acDatasource, + standardSearchAction, + userSearchAction, + ) { + this.acDatasource = acDatasource; + this.standardSearchAction = standardSearchAction; + this.userSearchAction = userSearchAction; - init() { // we must bind the blur event before the autocomplete item is added this.suppressBlur(); - this.initAutocomplete(); + this.initAutocomplete(`${this.acDatasource}&search_type=4`); this.initChange(); }, @@ -16,46 +41,64 @@ il.SearchMainMenu = { ); }, - initAutocomplete() { - $('#main_menu_search').autocomplete({ - source: `${this.acDatasource}&search_type=4`, - appendTo: '#mm_search_menu_ac', - open() { - $('.ui-autocomplete').position({ - my: 'left top', - at: 'left top', - of: $('#mm_search_menu_ac'), - }); - }, - minLength: 3, + switchFormActionToUserSearch() { + const form = document.querySelector('#mm_search_form'); + form.action = this.userSearchAction; + }, + + switchFormActionToStandardSearch() { + const form = document.querySelector('#mm_search_form'); + form.action = this.standardSearchAction; + }, + + /** + * @param {string} dataSource + */ + initAutocomplete(dataSource) { + const autocomplete = document.querySelector('#main_menu_search'); + const target = document.querySelector('#mm_search_menu_ac'); + + il.LegacyForm.autocomplete.init(autocomplete, { + delimiter: null, + dataSource, + submitOnSelection: false, + autocompleteLength: 3, + submitUrl: null, + moreText: null, + appendTo: `#${target.id}`, }); }, initChange() { - $("#ilMMSearchMenu input[type='radio']").change(() => { - /* close current search */ - $('#main_menu_search').autocomplete('close'); - $('#main_menu_search').autocomplete('enable'); - - /* append search type */ - const checkedInput = $('input[name=root_id]:checked', '#mm_search_form'); - const typeVal = checkedInput.val(); - - /* disable autocomplete for search at current position */ - if (checkedInput[0].id === 'ilmmsc') { - $('#main_menu_search').autocomplete('disable'); - return; - } + document.querySelectorAll("#ilMMSearchMenu input[type='radio']").forEach(this.initChangeForRadio, this); + }, - $('#main_menu_search').autocomplete( - 'option', - { - source: `${this.acDatasource}&search_type=${typeVal}`, - }, - ); + /** + * @param {Node} radio + */ + initChangeForRadio(radio) { + radio.addEventListener( + 'change', + () => { + /* disabled autocomplete */ + const originalInput = document.querySelector('#main_menu_search'); + const autocomplete = originalInput.cloneNode(true); // clone attributes, value, etc. + originalInput.replaceWith(autocomplete); // replace the original input - /* start new search */ - $('#main_menu_search').autocomplete('search'); - }); + /* disable autocomplete for search at current position */ + const checkedInput = document.querySelector('#mm_search_form').querySelector('input[name=root_id]:checked'); + if (checkedInput.id !== 'ilmmsc') { + const typeVal = checkedInput.value; + this.initAutocomplete(`${this.acDatasource}&search_type=${typeVal}`); + } + + /* change search link according to mode */ + if (checkedInput.id === 'ilmmsu') { + this.switchFormActionToUserSearch(); + } else { + this.switchFormActionToStandardSearch(); + } + } + ); }, }; diff --git a/components/ILIAS/Search/templates/default/tpl.main_menu_search.html b/components/ILIAS/Search/templates/default/tpl.main_menu_search.html index 05fcc4b3ee28..d931a1b4da3c 100755 --- a/components/ILIAS/Search/templates/default/tpl.main_menu_search.html +++ b/components/ILIAS/Search/templates/default/tpl.main_menu_search.html @@ -1,7 +1,7 @@ <form class="" role="search" id="mm_search_form" action="{FORMACTION}" method="post" target="_top"> <div class="input-group"> - <input aria-label="{SEARCH_INPUT_LABEL}" id="main_menu_search" class="form-control" type="text" name="queryString"> <span class="input-group-btn"> - <input type="submit" class="btn btn-default" value="{BTN_SEARCH}"/> + <input aria-label="{SEARCH_INPUT_LABEL}" id="main_menu_search" class="form-control" type="text" name="queryString" autocomplete="off"> <span class="input-group-btn"> + <input type="submit" class="btn btn-default" value="{BTN_SEARCH}" /> </span> </div> <!-- BEGIN ov_head --> diff --git a/components/ILIAS/Session/classes/class.ilObjSessionAccess.php b/components/ILIAS/Session/classes/class.ilObjSessionAccess.php index 41f252ad2b1f..e0af5775a85b 100755 --- a/components/ILIAS/Session/classes/class.ilObjSessionAccess.php +++ b/components/ILIAS/Session/classes/class.ilObjSessionAccess.php @@ -133,11 +133,12 @@ public static function _lookupRegistration(int $a_obj_id): bool $ilDB = $DIC->database(); - if (!is_null(self::$registrations)) { + if (isset(self::$registrations[$a_obj_id])) { return (bool) self::$registrations[$a_obj_id]; } - $query = "SELECT registration,obj_id FROM event "; + $query = "SELECT registration,obj_id FROM event WHERE obj_id = " . + $ilDB->quote($a_obj_id, ilDBConstants::T_INTEGER); $res = $ilDB->query($query); while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) { self::$registrations[$row->obj_id] = (bool) $row->registration; @@ -145,6 +146,25 @@ public static function _lookupRegistration(int $a_obj_id): bool return (bool) self::$registrations[$a_obj_id]; } + /** + * @param int[] $a_obj_ids + */ + public static function preloadRegistrations(array $a_obj_ids): void + { + global $DIC; + + $ilDB = $DIC->database(); + + self::$registrations = []; + + $query = "SELECT registration,obj_id FROM event WHERE " . + $ilDB->in('obj_id', $a_obj_ids, false, ilDBConstants::T_INTEGER); + $res = $ilDB->query($query); + while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) { + self::$registrations[$row->obj_id] = (bool) $row->registration; + } + } + public static function _lookupRegistered(int $a_usr_id, int $a_obj_id): bool { global $DIC; @@ -169,13 +189,14 @@ public static function _preloadData($a_obj_ids, $a_ref_ids): void { global $DIC; + self::preloadRegistrations($a_obj_ids); self::$booking_repo = $DIC->bookingManager() ->internal() ->repo() ->reservationWithContextObjCache($a_obj_ids); } - public static function getBookingInfoRepo() : ?\ILIAS\BookingManager\Reservations\ReservationDBRepository + public static function getBookingInfoRepo(): ?\ILIAS\BookingManager\Reservations\ReservationDBRepository { if (self::$booking_repo instanceof \ILIAS\BookingManager\Reservations\ReservationDBRepository) { return self::$booking_repo; diff --git a/components/ILIAS/Session/classes/class.ilObjSessionGUI.php b/components/ILIAS/Session/classes/class.ilObjSessionGUI.php index 692689ac1f28..8c8a59209080 100755 --- a/components/ILIAS/Session/classes/class.ilObjSessionGUI.php +++ b/components/ILIAS/Session/classes/class.ilObjSessionGUI.php @@ -1410,8 +1410,6 @@ protected function initForm(string $a_mode): bool $object_service = $this->object_service; $this->lng->loadLanguageModule('dateplaner'); - ilYuiUtil::initDomEvent(); - $this->form = new ilPropertyFormGUI(); $this->form->setMultipart(true); $this->form->setTableWidth('600px'); diff --git a/components/ILIAS/Session/classes/class.ilSessionAppointment.php b/components/ILIAS/Session/classes/class.ilSessionAppointment.php index 9b79501b6f18..5860206fd4df 100755 --- a/components/ILIAS/Session/classes/class.ilSessionAppointment.php +++ b/components/ILIAS/Session/classes/class.ilSessionAppointment.php @@ -72,7 +72,11 @@ public static function _lookupAppointment(int $a_obj_id): array return $info; } - return []; + return [ + 'fullday' => 0, + 'start' => 0, + 'end' => 0, + ]; } /** diff --git a/components/ILIAS/Session/classes/class.ilSessionMembershipGUI.php b/components/ILIAS/Session/classes/class.ilSessionMembershipGUI.php index c096cca67c84..c786ae19b30d 100755 --- a/components/ILIAS/Session/classes/class.ilSessionMembershipGUI.php +++ b/components/ILIAS/Session/classes/class.ilSessionMembershipGUI.php @@ -246,8 +246,8 @@ protected function updateMembers(): void } $event_part = new ilEventParticipants($this->getParentObject()->getId()); $event_part->setUserId($part_id); - $event_part->setMark(ilUtil::stripSlashes($this->requested_mark[$part_id])); - $event_part->setComment(ilUtil::stripSlashes($this->requested_comment[$part_id])); + $event_part->setMark(ilUtil::stripSlashes($this->requested_mark[$part_id] ?? "")); + $event_part->setComment(ilUtil::stripSlashes($this->requested_comment[$part_id] ?? "")); $event_part->setNotificationEnabled((bool) ($this->requested_notification[$part_id] ?? false)); $event_part->setParticipated($participated); $event_part->setRegistered($registered); diff --git a/components/ILIAS/Setup/src/Objective/CalledFromRootObjective.php b/components/ILIAS/Setup/src/Objective/CalledFromRootObjective.php new file mode 100644 index 000000000000..e3e0505a51f5 --- /dev/null +++ b/components/ILIAS/Setup/src/Objective/CalledFromRootObjective.php @@ -0,0 +1,65 @@ +<?php + +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + * + *********************************************************************/ + +declare(strict_types=1); + +namespace ILIAS\Setup\Objective; + +use ILIAS\Setup; + +/** + * Verify that the setip is called from ILIAS root directory. + */ +class CalledFromRootObjective implements Setup\Objective +{ + public function getHash(): string + { + return hash("sha256", self::class); + } + + public function getLabel(): string + { + return "Verify that the setup is called from ilias' root-directory."; + } + + public function isNotable(): bool + { + return true; + } + + public function getPreconditions(Setup\Environment $environment): array + { + return []; + } + + public function achieve(Setup\Environment $environment): Setup\Environment + { + $ilroot = dirname(__DIR__, 5); + if (getcwd() !== $ilroot) { + $msg = "Please run the setup from ILIAS root - " + . "there are components using relative pathes."; + throw new Setup\UnachievableException($msg); + } + return $environment; + } + + public function isApplicable(Setup\Environment $environment): bool + { + return true; + } +} diff --git a/components/ILIAS/Skill/Access/class.SkillManagementAccess.php b/components/ILIAS/Skill/Access/class.SkillManagementAccess.php index 61cc684ca055..4f232fb5acc2 100755 --- a/components/ILIAS/Skill/Access/class.SkillManagementAccess.php +++ b/components/ILIAS/Skill/Access/class.SkillManagementAccess.php @@ -42,7 +42,7 @@ public function hasReadManagementPermission(int $a_usr_id = 0): bool if ($a_usr_id == 0) { $a_usr_id = $this->usr_id; } - return $this->access->checkAccessOfUser($a_usr_id, "visible,read", $this->skmg_ref_id); + return $this->access->checkAccessOfUser($a_usr_id, "read", $this->skmg_ref_id); } public function hasEditManagementSettingsPermission(int $a_usr_id = 0): bool diff --git a/components/ILIAS/Skill/Tree/class.ilVirtualSkillTreeExplorerGUI.php b/components/ILIAS/Skill/Tree/class.ilVirtualSkillTreeExplorerGUI.php index 3105648a94b5..253b7c1beb47 100755 --- a/components/ILIAS/Skill/Tree/class.ilVirtualSkillTreeExplorerGUI.php +++ b/components/ILIAS/Skill/Tree/class.ilVirtualSkillTreeExplorerGUI.php @@ -227,10 +227,11 @@ public function getNodeIconAlt($a_node): string return $lng->txt($a_node["type"]); } + /* see #45817, old implementation still needed for selection public function getHTML(): string { return $this->render(); - } + }*/ protected function render(): string { diff --git a/components/ILIAS/StaticURL/classes/Shortlinks/NodeRetrievalGUI.php b/components/ILIAS/StaticURL/classes/Shortlinks/NodeRetrievalGUI.php index 26ff2bfaec34..12cd0b87f41f 100644 --- a/components/ILIAS/StaticURL/classes/Shortlinks/NodeRetrievalGUI.php +++ b/components/ILIAS/StaticURL/classes/Shortlinks/NodeRetrievalGUI.php @@ -26,7 +26,7 @@ use ILIAS\Filesystem\Stream\Streams; use ILIAS\UI\Component\Input\Field\Node\NodeRetrieval as UINodeRetrieval; use ILIAS\UI\URLBuilder; -use ILIAS\StaticURL\Shortlinks\UI\NodeRetrieval; +use ILIAS\StaticURL\Shortlinks\UI\TreeSelectNodeRetrieval; /** * @author Fabian Schmid <fabian@sr.solutions> @@ -78,7 +78,7 @@ public function __construct() $branch_node_types = $object_definition->getExplorerContainerTypes(); $leaf_node_types = array_diff($object_definition->getAllRepositoryTypes(false), $branch_node_types); - $this->node_retrieval = new NodeRetrieval( + $this->node_retrieval = new TreeSelectNodeRetrieval( $DIC->language(), $data_factory, $this->async_node_id_parameter, @@ -125,6 +125,7 @@ protected function renderAsyncNodeChildren(int $parent_node_id): void $child_node_iterator = $this->node_retrieval->getNodes( $this->ui_factory->input()->field()->node(), $this->ui_factory->symbol()->icon(), + [], (string) $parent_node_id, ); diff --git a/components/ILIAS/StaticURL/classes/class.ilObjStaticUrlServiceGUI.php b/components/ILIAS/StaticURL/classes/class.ilObjStaticUrlServiceGUI.php index 237c7c0c7ad1..d6753d02d6d6 100755 --- a/components/ILIAS/StaticURL/classes/class.ilObjStaticUrlServiceGUI.php +++ b/components/ILIAS/StaticURL/classes/class.ilObjStaticUrlServiceGUI.php @@ -59,6 +59,7 @@ public function executeCommand(): void $this->prepareOutput(); $mediator = Pons::fromDIC(['stus', 'rbac', 'common', 'ui']); + $mediator->setGeneralLanguagePrefix('stus'); $tabs = $mediator->tabs(); $tabs->add( $view = $tabs diff --git a/components/ILIAS/StaticURL/src/Request/ShortlinkRequestBuilder.php b/components/ILIAS/StaticURL/src/Request/ShortlinkRequestBuilder.php index e42794ad5eb7..0a5588abecba 100755 --- a/components/ILIAS/StaticURL/src/Request/ShortlinkRequestBuilder.php +++ b/components/ILIAS/StaticURL/src/Request/ShortlinkRequestBuilder.php @@ -37,6 +37,7 @@ public function buildRequest(Services $http, Factory $refinery, array $handlers) if ( str_contains($requested_url, StandardURIBuilder::SHORT) || str_contains($requested_url, StandardURIBuilder::LONG) + || str_contains($requested_url, rtrim(StandardURIBuilder::LONG, '/')) ) { return null; } diff --git a/components/ILIAS/StaticURL/src/Request/StaticURLRequestBuilder.php b/components/ILIAS/StaticURL/src/Request/StaticURLRequestBuilder.php index f42ac1638d71..c07971a7a6e6 100755 --- a/components/ILIAS/StaticURL/src/Request/StaticURLRequestBuilder.php +++ b/components/ILIAS/StaticURL/src/Request/StaticURLRequestBuilder.php @@ -42,7 +42,9 @@ public function buildRequest(Services $http, Factory $refinery, array $handlers) $target_parts = explode('_', (string) $target); $namespace = array_shift($target_parts); - $reference_id = is_numeric($target_parts[0]) ? new ReferenceId((int) array_shift($target_parts)) : null; + $reference_id = is_numeric($target_parts[0] ?? null) + ? new ReferenceId((int) array_shift($target_parts)) + : null; $additional_parameters = []; foreach ($target_parts as $target_part) { $additional_parameters[] = urldecode($target_part); diff --git a/components/ILIAS/StaticURL/src/Response/Factory.php b/components/ILIAS/StaticURL/src/Response/Factory.php index 67efbae162d5..4b4e9ccd1ca5 100755 --- a/components/ILIAS/StaticURL/src/Response/Factory.php +++ b/components/ILIAS/StaticURL/src/Response/Factory.php @@ -40,9 +40,6 @@ public function loginFirst(): MaybeCanHandlerAfterLogin|CannotReach if ($this->context->isUserLoggedIn()) { return new CannotReach(); } - if (!$this->context->isUserLoggedIn() && !$this->context->isPublicSectionActive()) { - return new CannotReach(); - } return new MaybeCanHandlerAfterLogin(); } diff --git a/components/ILIAS/StaticURL/src/Shortlinks/UI/NodeRetrieval.php b/components/ILIAS/StaticURL/src/Shortlinks/UI/TreeSelectNodeRetrieval.php similarity index 62% rename from components/ILIAS/StaticURL/src/Shortlinks/UI/NodeRetrieval.php rename to components/ILIAS/StaticURL/src/Shortlinks/UI/TreeSelectNodeRetrieval.php index c4f5c8fba31c..5c1995bae8c1 100644 --- a/components/ILIAS/StaticURL/src/Shortlinks/UI/NodeRetrieval.php +++ b/components/ILIAS/StaticURL/src/Shortlinks/UI/TreeSelectNodeRetrieval.php @@ -13,26 +13,19 @@ * us at: * https://www.ilias.de * https://github.com/ILIAS-eLearning - * - *********************************************************************/ + */ declare(strict_types=1); namespace ILIAS\StaticURL\Shortlinks\UI; -use ILIAS\Language\Language; -use ILIAS\UI\URLBuilderToken; -use ILIAS\UI\URLBuilder; -use ILIAS\Data\URI; -use ILIAS\UI\Component\Symbol\Icon\Icon; -use ILIAS\UI\Component\Input\Field\Node\NodeRetrieval as UINodeRetrieval; -use ILIAS\UI\Component\Input\Field\Node\Factory as NodeFactory; -use ILIAS\UI\Component\Symbol\Icon\Factory as IconFactory; +use ILIAS\UI\Component\Input\Field; +use ILIAS\UI\Component\Symbol\Icon; /** - * @author Fabian Schmid <fabian@sr.solutions> + * @author Thibeau Fuhrer <thibeau@sr.solutions> */ -class NodeRetrieval implements UINodeRetrieval +readonly class TreeSelectNodeRetrieval implements Field\Node\NodeRetrieval { /** node attribute used to sort entries, @see ilTree::getChildsByTypeFilter() */ protected const string NODE_SORT_BY = 'title'; @@ -45,10 +38,10 @@ class NodeRetrieval implements UINodeRetrieval * @param string[] $leaf_object_type_list (object types which have no children) */ public function __construct( - protected Language $language, + protected \ILIAS\Language\Language $language, protected \ILIAS\Data\Factory $data_factory, - protected URLBuilderToken $async_node_id_parameter, - protected URLBuilder $async_node_url_builder, + protected \ILIAS\UI\URLBuilderToken $async_node_id_parameter, + protected \ILIAS\UI\URLBuilder $async_node_url_builder, protected \ilAccess $access, protected \ilTree $tree, protected array $branch_object_type_list, @@ -60,37 +53,44 @@ public function __construct( } public function getNodes( - NodeFactory $node_factory, - IconFactory $icon_factory, + Field\Node\Factory $node_factory, + Icon\Factory $icon_factory, + array $sync_node_id_whitelist = [], ?string $parent_id = null, ): \Generator { - yield from $this->createNodes($node_factory, $icon_factory, (int) ($parent_id ?? $this->root_node_id)); + yield from $this->createNodes( + $node_factory, + $icon_factory, + $sync_node_id_whitelist, + (int) ($parent_id ?? $this->root_node_id), + ); } public function getNodesAsLeaf( - NodeFactory $node_factory, - IconFactory $icon_factory, - array $node_ids, + Field\Node\Factory $node_factory, + Icon\Factory $icon_factory, + array $node_ids ): \Generator { foreach ($node_ids as $node_id) { try { $tree_node_data = $this->tree->getNodeData((int) $node_id); - [$object_ref_id, $object_type, $object_title] = $this->extractObjectDataOrAbort($tree_node_data); + [$object_path, $object_ref_id, $object_type, $object_title] = $this->extractObjectDataOrAbort($tree_node_data); yield $node_factory->leaf( - $object_ref_id, + $object_path, $object_title, $this->getObjectIcon($icon_factory, $object_ref_id, $object_type), ); } catch (\LogicException) { - yield $node_factory->leaf($node_id, $this->language->txt('unknown')); + yield $node_factory->leaf([$node_id], $this->language->txt('unknown')); } } } /** @return Field\Node\Node[] */ protected function createNodes( - NodeFactory $node_factory, - IconFactory $icon_factory, + Field\Node\Factory $node_factory, + Icon\Factory $icon_factory, + array $max_depth_node_id_whitelist, int $parent_object_id, int $depth = 0, ): array { @@ -102,31 +102,43 @@ protected function createNodes( $nodes = []; foreach ($children as $child) { - [$object_ref_id, $object_type, $object_title] = $this->extractObjectDataOrAbort($child); + [$object_path, $object_ref_id, $object_type, $object_title] = $this->extractObjectDataOrAbort($child); $is_object_visible = $this->isObjectVisible($object_ref_id, $object_type); $is_object_container = $this->isObjectContainer($object_type); // append visible children of an invisible branch node to the current node. if (!$is_object_visible && $is_object_container) { - $nodes = [...$nodes, ...$this->createNodes($node_factory, $icon_factory, $object_ref_id, $depth + 1)]; + $nodes = [...$nodes, ...$this->createNodes( + $node_factory, + $icon_factory, + $max_depth_node_id_whitelist, + $object_ref_id, + $depth + 1 + )]; continue; } $object_icon = $this->getObjectIcon($icon_factory, $object_ref_id, $object_type); if ($is_object_visible && $is_object_container) { - if ($depth < $this->max_branch_node_depth) { + if ($depth < $this->max_branch_node_depth || in_array($object_ref_id, $max_depth_node_id_whitelist, true)) { $nodes[] = $node_factory->branch( - $object_ref_id, + $object_path, $object_title, $object_icon, - ...$this->createNodes($node_factory, $icon_factory, $object_ref_id, $depth + 1), + ...$this->createNodes( + $node_factory, + $icon_factory, + $max_depth_node_id_whitelist, + $object_ref_id, + $depth + 1 + ), ); } else { $nodes[] = $node_factory->async( $this->getAsyncRenderUrl($object_ref_id), - $object_ref_id, + $object_path, $object_title, $object_icon, ); @@ -134,25 +146,26 @@ protected function createNodes( continue; } if ($is_object_visible && !$is_object_container) { - $nodes[] = $node_factory->leaf($object_ref_id, $object_title, $object_icon); + $nodes[] = $node_factory->leaf($object_path, $object_title, $object_icon); } } return $nodes; } - /** @return array{0: int, 1: string, 2: string} (object ref-id, type, title) */ + /** @return array{0: int[], 1: int, 2: string, 3: string} (object-path, ref-id, type, title) */ protected function extractObjectDataOrAbort(array $tree_node_data): array { - $object_ref_id = $tree_node_data['ref_id'] ?? null; + $object_path = array_map('intval', explode('.', (string) ($tree_node_data['path'] ?? ''))); + $object_ref_id = $tree_node_data['ref_id'] ?? $tree_node_data['child'] ?? null; $object_type = $tree_node_data['type'] ?? null; $object_title = $tree_node_data['title'] ?? null; - if (in_array(null, [$object_ref_id, $object_type, $object_title], true)) { + if (empty($object_path) || null === $object_ref_id || null === $object_type || null === $object_title) { throw new \LogicException("Object data is invalid"); } - return [$object_ref_id, $object_type, $object_title]; + return [$object_path, $object_ref_id, $object_type, $object_title]; } - protected function getAsyncRenderUrl(int $object_ref_id): URI + protected function getAsyncRenderUrl(int $object_ref_id): \ILIAS\Data\URI { $async_node_url_builder = $this->async_node_url_builder->withParameter( $this->async_node_id_parameter, @@ -161,17 +174,17 @@ protected function getAsyncRenderUrl(int $object_ref_id): URI return $this->data_factory->uri((string) $async_node_url_builder->buildURI()); } - protected function getObjectIcon(IconFactory $icon_factory, int $object_ref_id, string $object_type): Icon + protected function getObjectIcon(Icon\Factory $icon_factory, int $object_ref_id, string $object_type): Icon\Icon { // ensures plugin object types are properly handled as well. - $icon_path = \ilObject::_getIcon(\ilObject::_lookupObjectId($object_ref_id), Icon::SMALL); + $icon_path = \ilObject::_getIcon(\ilObject::_lookupObjectId($object_ref_id), Icon\Icon::SMALL); if ($this->tree->getRootId() >= $object_ref_id) { $alt_text = $this->language->txt('repository'); } else { $alt_text = $this->language->txt($object_type); } - return $icon_factory->custom($icon_path, $alt_text, Icon::SMALL); + return $icon_factory->custom($icon_path, $alt_text, Icon\Icon::SMALL); } protected function isObjectVisible(int $object_ref_id, string $object_type = ''): bool @@ -183,5 +196,4 @@ protected function isObjectContainer(string $object_type): bool { return in_array($object_type, $this->branch_object_type_list, true); } - } diff --git a/components/ILIAS/StudyProgramme/classes/class.ilObjStudyProgrammeSettingsGUI.php b/components/ILIAS/StudyProgramme/classes/class.ilObjStudyProgrammeSettingsGUI.php index db0c83d1a43f..454df7fadc27 100755 --- a/components/ILIAS/StudyProgramme/classes/class.ilObjStudyProgrammeSettingsGUI.php +++ b/components/ILIAS/StudyProgramme/classes/class.ilObjStudyProgrammeSettingsGUI.php @@ -23,6 +23,7 @@ use ILIAS\UI\Renderer; use ILIAS\MetaData\Services\ServicesInterface as LOMServices; use ILIAS\ILIASObject\Properties\Translations\Translations; +use ILIAS\ILIASObject\Properties\Translations\TranslationGUI; /** * @ilCtrl_Calls ilObjStudyProgrammeSettingsGUI: ilStudyProgrammeCommonSettingsGUI diff --git a/components/ILIAS/StudyProgramme/classes/class.ilStudyProgrammeDashboardViewGUI.php b/components/ILIAS/StudyProgramme/classes/class.ilStudyProgrammeDashboardViewGUI.php index eb5f5750c09e..989f0a9cd390 100755 --- a/components/ILIAS/StudyProgramme/classes/class.ilStudyProgrammeDashboardViewGUI.php +++ b/components/ILIAS/StudyProgramme/classes/class.ilStudyProgrammeDashboardViewGUI.php @@ -114,17 +114,7 @@ protected function getVisibleOnPDMode(): string public function getBlockType(): string { - return 'pdprg'; - } - - public function removeMultipleEnabled(): bool - { - return false; - } - - public function getRemoveMultipleActionText(): string - { - return ''; + return 'dash_sp'; } protected function maybeGetCertificateLink(int $usr_id, int $prg_obj_id, int $prg_ref_id): ?string diff --git a/components/ILIAS/Style/Content/Object/class.ObjectDBRepository.php b/components/ILIAS/Style/Content/Object/class.ObjectDBRepository.php index f55828759c1c..c4db47ec7fc7 100755 --- a/components/ILIAS/Style/Content/Object/class.ObjectDBRepository.php +++ b/components/ILIAS/Style/Content/Object/class.ObjectDBRepository.php @@ -114,4 +114,18 @@ public function countObjSelected(int $style_id): int return 0; } + public function move(int $from_style_id, int $to_style_id): void + { + $db = $this->db; + $db->update( + "style_usage", + [ + "style_id" => ["integer", $to_style_id] + ], + [ // where + "style_id" => ["integer", $from_style_id] + ] + ); + } + } diff --git a/components/ILIAS/Style/Content/Object/class.ObjectManager.php b/components/ILIAS/Style/Content/Object/class.ObjectManager.php index 30a3f084a368..e7f2787d4a61 100755 --- a/components/ILIAS/Style/Content/Object/class.ObjectManager.php +++ b/components/ILIAS/Style/Content/Object/class.ObjectManager.php @@ -252,4 +252,10 @@ public function countObjSelected(int $style_id): int return $this->object_repo->countObjSelected($style_id); } + public function move(int $from_style_id, int $to_style_id): void + { + $this->object_repo->move($from_style_id, $to_style_id); + } + + } diff --git a/components/ILIAS/Style/Content/README-technical.md b/components/ILIAS/Style/Content/README-technical.md index 4d123191afcd..2d3be6963f56 100755 --- a/components/ILIAS/Style/Content/README-technical.md +++ b/components/ILIAS/Style/Content/README-technical.md @@ -142,7 +142,7 @@ public function getXmlExportTailDependencies( $style_ids = array(); foreach ($a_ids as $id) { - $style_id = $this->content_style_domain->styleForObjId((int) $id)->getStyleId(); + $style_id = $this->content_style_domain->styleForObjId((int) $id)->getExportStyleId(); if ($style_id > 0) { $style_ids[] = $style_id; } @@ -162,3 +162,23 @@ public function getXmlExportTailDependencies( ``` + +To connect an exported style back to your object on import, the style component needs the following mapping being available: + +What the style object calls: + +```php + $obj_id = (int) $a_mapping->getMapping("components/ILIAS/ILIASObject", "obj", $a_rec["ObjId"]); +``` + +What you need to call when creating your new main object on import: + +```php + $a_mapping->addMapping("components/ILIAS/ILIASObject", "obj", $a_rec["Id"], $newObj->getId()); +``` + + + + + + diff --git a/components/ILIAS/Style/Content/Style/CSSBuilder.php b/components/ILIAS/Style/Content/Style/CSSBuilder.php index 5197a787398b..b0ec5c220ca5 100644 --- a/components/ILIAS/Style/Content/Style/CSSBuilder.php +++ b/components/ILIAS/Style/Content/Style/CSSBuilder.php @@ -32,7 +32,6 @@ public function __construct( public function getCss(): string { $style = $this->style->getStyle(); - $css = ""; $page_background = ""; @@ -40,7 +39,6 @@ public function getCss(): string foreach ($this->style->getMediaQueries() as $mq) { $mqs[] = $mq; } - // iterate all media queries foreach ($mqs as $mq) { if ($mq["id"] > 0) { @@ -76,25 +74,32 @@ public function getCss(): string if ($tag[0]["type"] == "text_block") { $css .= ",html.il-no-tiny-bg body#tinymce.ilc_text_block_" . $tag[0]["class"] . "\n"; } - if ($tag[0]["class"] == "VAccordCntr") { + if ($tag[0]["class"] == "VAccordCntr" && + $this->style->hasCharacteristic("va_cntr", "VAccordCntr")) { $css .= ",div.ilc_va_cntr_AccordCntr\n"; } - if ($tag[0]["class"] == "VAccordICntr") { + if ($tag[0]["class"] == "VAccordICntr" && + $this->style->hasCharacteristic("va_icntr", "VAccordICntr")) { $css .= ",div.ilc_va_icntr_AccordICntr\n"; } - if ($tag[0]["class"] == "VAccordICont") { + if ($tag[0]["class"] == "VAccordICont" && + $this->style->hasCharacteristic("va_icont", "VAccordICont")) { $css .= ",div.ilc_va_icont_AccordICont\n"; } - if ($tag[0]["class"] == "VAccordIHead") { + if ($tag[0]["class"] == "VAccordIHead" && + $this->style->hasCharacteristic("va_ihead", "VAccordIHead")) { $css .= ",div.ilc_va_ihead_AccordIHead\n"; } - if ($tag[0]["class"] == "VAccordIHead:hover") { + if ($tag[0]["class"] == "VAccordIHead:hover" && + $this->style->hasCharacteristic("va_ihead", "VAccordIHead")) { $css .= ",div.ilc_va_ihead_AccordIHead:hover\n"; } - if ($tag[0]["class"] == "VAccordIHeadActive") { + if ($tag[0]["class"] == "VAccordIHeadActive" && + $this->style->hasCharacteristic("va_iheada", "VAccordIHeadActive")) { $css .= ",div.ilc_va_iheada_AccordIHeadActive\n"; } - if ($tag[0]["class"] == "VAccordIHeadActive:hover") { + if ($tag[0]["class"] == "VAccordIHeadActive:hover" && + $this->style->hasCharacteristic("va_iheada", "VAccordIHeadActive")) { $css .= ",div.ilc_va_iheada_AccordIHeadActive:hover\n"; } $css .= "{\n"; diff --git a/components/ILIAS/Style/Content/classes/class.ilContentStyleSettingsGUI.php b/components/ILIAS/Style/Content/classes/class.ilContentStyleSettingsGUI.php index 59ea171eaea5..d86d7f8f1c2e 100755 --- a/components/ILIAS/Style/Content/classes/class.ilContentStyleSettingsGUI.php +++ b/components/ILIAS/Style/Content/classes/class.ilContentStyleSettingsGUI.php @@ -143,7 +143,7 @@ public function createStyle(): void */ public function edit(): void { - $this->checkPermission("visible,read"); + $this->checkPermission("read,sty_write_content"); // @todo: check these, they are checked later, but never (ILIAS 6) set $fixed_style = 0; @@ -170,7 +170,7 @@ public function edit(): void $data[-1] = array("title" => $this->lng->txt("sty_individual_styles"), "id" => 0, "lm_nr" => $this->domain->object(0)->countOverallOwned()); - $from_styles[-1] = $this->lng->txt("sty_individual_styles"); + //$from_styles[-1] = $this->lng->txt("sty_individual_styles"); } // number of default style (fallback default style) @@ -199,10 +199,7 @@ public function edit(): void $this->toolbar->addSeparator(); // from styles selector - $si = new ilSelectInputGUI( - $this->lng->txt("sty_move_obj_styles") . ": " . $this->lng->txt("sty_from"), - "from_style" - ); + $si = new ilSelectInputGUI($this->lng->txt("sty_move_obj_styles") . ": " . $this->lng->txt("sty_from"), "from_style"); $si->setOptions($from_styles); $this->toolbar->addInputItem($si, true); @@ -265,10 +262,7 @@ public function moveLMStyles(): void return; } - ilObjContentObject::_moveLMStyles( - $this->request->getFromStyleId(), - $this->request->getToStyleId() - ); + $this->domain->object(0)->move($this->request->getFromStyleId(), $this->request->getToStyleId()); $this->ctrl->redirect($this, "edit"); } diff --git a/components/ILIAS/Style/Content/classes/class.ilObjStyleSheet.php b/components/ILIAS/Style/Content/classes/class.ilObjStyleSheet.php index 313a0e49043d..e61037fe0578 100755 --- a/components/ILIAS/Style/Content/classes/class.ilObjStyleSheet.php +++ b/components/ILIAS/Style/Content/classes/class.ilObjStyleSheet.php @@ -373,7 +373,8 @@ class ilObjStyleSheet extends ilObject "a" => ["hover"], "div" => ["hover", "before"], "img" => ["hover"], - "li" => ["before"] + "li" => ["before"], + "input" => ["hover"], ]; // core styles these styles MUST exists -> see also basic_style/style.xml @@ -947,6 +948,12 @@ public function getCharacteristics( return $chars; } + public function hasCharacteristic(string $type, string $char): bool + { + $chars = $this->getCharacteristics($type); + return in_array($char, $chars); + } + public function setCharacteristics(array $a_chars): void { $this->chars = $a_chars; diff --git a/components/ILIAS/Style/System/classes/class.ilSystemStyleMainGUI.php b/components/ILIAS/Style/System/classes/class.ilSystemStyleMainGUI.php index 72247211f41e..74f56c4bb4e4 100755 --- a/components/ILIAS/Style/System/classes/class.ilSystemStyleMainGUI.php +++ b/components/ILIAS/Style/System/classes/class.ilSystemStyleMainGUI.php @@ -144,7 +144,6 @@ public function executeCommand(): void $this->setTabs($skin_id, $style_id); $this->tabs->activateSubTab('documentation'); $this->help->setSubScreenId('documentation'); - $read_only = !$this->checkPermission('sty_management', false); $node_id = ''; if ($this->request_wrapper->query()->has('node_id')) { $node_id = $this->request_wrapper->query()->retrieve( @@ -188,7 +187,7 @@ protected function executeDefaultCommand(ilSkinFactory $skin_factory, string $sk $this->help->setSubScreenId('overview'); $this->setTabs($skin_id, $style_id); $this->tabs->activateSubTab('overview'); - $this->checkPermission('visible,read'); + $this->checkPermission('read'); $read_only = !$this->checkPermission('sty_write_system', false); $management_enabled = true;//$this->checkPermission('sty_management', false); $system_styles_overview = new ilSystemStyleOverviewGUI( @@ -231,15 +230,19 @@ public function checkPermission(string $a_perm, bool $a_throw_exc = true): bool return true; } - protected function setTabs(string $skin_id, string $style_id, string $active = '') { + protected function setTabs(string $skin_id, string $style_id, string $active = '') + { $this->ctrl->setParameterByClass(ilSystemStyleDocumentationGUI::class, 'skin_id', $skin_id); $this->ctrl->setParameterByClass(ilSystemStyleDocumentationGUI::class, 'style_id', $style_id); $this->tabs->addSubTab( 'overview', $this->lng->txt('overview'), - $this->ctrl->getLinkTargetByClass(self::class), 'documentation'); - $this->tabs->addSubTab('documentation', + $this->ctrl->getLinkTargetByClass(self::class), + 'documentation' + ); + $this->tabs->addSubTab( + 'documentation', $this->lng->txt('documentation'), $this->ctrl->getLinkTargetByClass(ilSystemStyleDocumentationGUI::class, 'entries') ); diff --git a/components/ILIAS/Style/classes/class.ilObjStyleSettingsGUI.php b/components/ILIAS/Style/classes/class.ilObjStyleSettingsGUI.php index 76a3a478220b..6b0be8d23eb2 100755 --- a/components/ILIAS/Style/classes/class.ilObjStyleSettingsGUI.php +++ b/components/ILIAS/Style/classes/class.ilObjStyleSettingsGUI.php @@ -126,13 +126,18 @@ public function getTabs(): void $this->lng->txt("system_styles"), $this->ctrl->getLinkTargetByClass("ilsystemstylemaingui") ); + } + if ($this->rbac_system->checkAccess('read,sty_write_content', $this->object->getRefId())) { $this->tabs_gui->addTab( "content_styles", $this->lng->txt("content_styles"), $this->ctrl->getLinkTargetByClass("ilcontentstylesettingsgui", "edit") ); + } + + if ($this->rbac_system->checkAccess('read,sty_write_page_layout', $this->object->getRefId())) { $this->tabs_gui->addTab( "page_layouts", $this->lng->txt("page_layouts"), diff --git a/components/ILIAS/Style/classes/class.ilStyleExporter.php b/components/ILIAS/Style/classes/class.ilStyleExporter.php index 3aee9506dbff..6dc63143bef0 100755 --- a/components/ILIAS/Style/classes/class.ilStyleExporter.php +++ b/components/ILIAS/Style/classes/class.ilStyleExporter.php @@ -46,8 +46,7 @@ public function getValidSchemaVersions(string $a_entity): array "namespace" => "http://www.ilias.de/Services/Style/10_0", "xsd_file" => "ilias_style_10.xsd", "uses_dataset" => true, - "min" => "10.0", - "max" => "10.99"), + "min" => "10.0"), "8.0" => array( "namespace" => "http://www.ilias.de/Services/Style/8", "xsd_file" => "ilias_style_8.xsd", diff --git a/components/ILIAS/Survey/Constraints/class.SurveyConstraintsTableGUI.php b/components/ILIAS/Survey/Constraints/class.SurveyConstraintsTableGUI.php index d5245161fe4c..98856738d863 100755 --- a/components/ILIAS/Survey/Constraints/class.SurveyConstraintsTableGUI.php +++ b/components/ILIAS/Survey/Constraints/class.SurveyConstraintsTableGUI.php @@ -108,7 +108,7 @@ protected function initItems(ilObjSurvey $a_survey): void foreach ($constraints as $constraint) { $parsed[] = array( "id" => $constraint["id"], - "title" => $survey_questions[$constraint["question"]]["title"] . " " . + "title" => ($survey_questions[$constraint["question"]]["title"] ?? "") . " " . $constraint["short"] . " " . $constraint["valueoutput"] ); diff --git a/components/ILIAS/Survey/Editing/class.EditingGUIRequest.php b/components/ILIAS/Survey/Editing/class.EditingGUIRequest.php index cd5d8c59aca9..fbc5965cf2bf 100755 --- a/components/ILIAS/Survey/Editing/class.EditingGUIRequest.php +++ b/components/ILIAS/Survey/Editing/class.EditingGUIRequest.php @@ -146,7 +146,7 @@ public function getLang(): string public function getNrOfCodes(): int { - return $this->int("nrOfCodes"); + return (int) $this->str("nrOfCodes"); } /** @return string[] */ diff --git a/components/ILIAS/Survey/Editing/class.ilSurveyEditorGUI.php b/components/ILIAS/Survey/Editing/class.ilSurveyEditorGUI.php index ad1f2c1f33ab..aef367737f63 100755 --- a/components/ILIAS/Survey/Editing/class.ilSurveyEditorGUI.php +++ b/components/ILIAS/Survey/Editing/class.ilSurveyEditorGUI.php @@ -197,7 +197,12 @@ public function questionsObject(): void if (!in_array($this->request->getNewId(), $existing)) { $inserted = $this->object->insertQuestion($this->request->getNewId()); if (!$inserted) { - $this->tpl->setOnScreenMessage('failure', $this->lng->txt("survey_error_insert_incomplete_question")); + if (!$this->object->isQuestionInSurvey($this->request->getNewId())) { + $this->tpl->setOnScreenMessage( + 'failure', + $this->lng->txt("survey_error_insert_incomplete_question") + ); + } } else { // this ensures the status update of the survey, see #36162 $this->ctrl->redirect($this, "questions"); diff --git a/components/ILIAS/Survey/Editing/class.ilSurveyQuestionTableGUI.php b/components/ILIAS/Survey/Editing/class.ilSurveyQuestionTableGUI.php index 9a4f124f9bd1..dfca0992a9e3 100755 --- a/components/ILIAS/Survey/Editing/class.ilSurveyQuestionTableGUI.php +++ b/components/ILIAS/Survey/Editing/class.ilSurveyQuestionTableGUI.php @@ -305,7 +305,7 @@ protected function fillRow(array $a_set): void $actions = []; - if ($a_set["url"]) { + if ($a_set["url"] ?? false) { $actions[] = $ui_factory->link()->standard( $lng->txt("edit"), $a_set["url"] @@ -342,7 +342,7 @@ protected function fillRow(array $a_set): void $this->tpl->parseCurrentBlock(); // #11186 - if ($a_set["url"]) { + if ($a_set["url"] ?? false) { $this->tpl->setCurrentBlock("title_edit"); $this->tpl->setVariable("TITLE", $a_set["title"]); $this->tpl->setVariable("URL_TITLE", $a_set["url"]); diff --git a/components/ILIAS/Survey/Evaluation/class.EvaluationManager.php b/components/ILIAS/Survey/Evaluation/class.EvaluationManager.php index cc5502734827..a4b7bfbece8c 100755 --- a/components/ILIAS/Survey/Evaluation/class.EvaluationManager.php +++ b/components/ILIAS/Survey/Evaluation/class.EvaluationManager.php @@ -133,7 +133,6 @@ public function getSelectableAppraisees(): array public function getCurrentAppraisee(): int { $req_appr_id = $this->requested_appr_id; - // if no user is requested, request current user $user_id = $this->user_id; if ($req_appr_id === 0) { @@ -217,7 +216,6 @@ public function getFilteredFinishedIds(): ?array { $appr_id = $this->getCurrentAppraisee(); $finished_ids = null; - $filter = false; if ($appr_id > 0) { $filter = true; @@ -229,10 +227,11 @@ public function getFilteredFinishedIds(): ?array // see #36336, #36378 if ($this->survey->getMode() !== \ilObjSurvey::MODE_IND_FEEDB && $this->access->canEditSettings()) { - $filter = false; + if ($appr_id === 0) { // #44755 + $filter = false; + } } } - if ($filter) { $finished_ids = $this->survey->getFinishedIdsForAppraiseeId($appr_id); if (!count($finished_ids)) { diff --git a/components/ILIAS/Survey/Evaluation/class.ilSurveyEvaluationGUI.php b/components/ILIAS/Survey/Evaluation/class.ilSurveyEvaluationGUI.php index 8b271d6a6d36..c0b8e62297b4 100755 --- a/components/ILIAS/Survey/Evaluation/class.ilSurveyEvaluationGUI.php +++ b/components/ILIAS/Survey/Evaluation/class.ilSurveyEvaluationGUI.php @@ -778,6 +778,13 @@ public function evaluation( $this->log->debug("check access"); + if ($details == 0) { + $this->tabs->activateSubTab("svy_eval_cumulated"); + } else { + $this->tabs->activateSubTab("svy_eval_detail"); + } + + // auth if (!$this->hasResultsAccess()) { if (!$this->access->checkAccess('read', '', $this->object->getRefId())) { @@ -833,13 +840,9 @@ public function evaluation( if ($details) { //templates: results, table of contents $dtmpl = new ilTemplate("tpl.il_svy_svy_results_details.html", true, true, "components/ILIAS/Survey/Evaluation"); - $toc_tpl = new ilTemplate("tpl.svy_results_table_contents.html", true, true, "components/ILIAS/Survey/Evaluation"); $this->lng->loadLanguageModule("content"); - $toc_tpl->setVariable("TITLE_TOC", $this->lng->txt('cont_toc')); } - $finished_ids = $this->evaluation_manager->getFilteredFinishedIds(); - // parse answer data in evaluation results $listing = $this->gui->listing(); @@ -886,10 +889,8 @@ public function evaluation( } if ($details) { - $toc_tpl->setVariable("LIST", $listing->render()); - //TABLE OF CONTENTS - $panel_toc = $ui_factory->panel()->standard("", $ui_factory->legacy()->content($toc_tpl->get())); + $panel_toc = $ui_factory->panel()->standard($this->lng->txt('cont_toc'), $ui_factory->legacy()->content($listing->render())); $render_toc = $ui_renderer->render($panel_toc); $dtmpl->setVariable("PANEL_TOC", $render_toc); @@ -1146,6 +1147,15 @@ public function evaluationuser(): void $this->ctrl->redirectByClass("ilObjSurveyGUI", "infoScreen"); } + $this->ui_modifier->setResultsParticipantToolbar( + $this->object, + $ilToolbar, + $this->user->getId() + ); + + $ilToolbar->setFormAction($this->ctrl->getFormAction($this, "evaluationuser")); + + $modal = ""; $appr_id = null; $data = []; diff --git a/components/ILIAS/Survey/Mode/class.AbstractUIModifier.php b/components/ILIAS/Survey/Mode/class.AbstractUIModifier.php index 5f98d875570b..0e5963493d01 100755 --- a/components/ILIAS/Survey/Mode/class.AbstractUIModifier.php +++ b/components/ILIAS/Survey/Mode/class.AbstractUIModifier.php @@ -167,6 +167,21 @@ public function setResultsDetailToolbar( ); } + public function setResultsParticipantToolbar( + \ilObjSurvey $survey, + \ilToolbarGUI $toolbar, + int $user_id + ): void { + $config = $this->getInternalService()->domain()->modeFeatureConfig($survey->getMode()); + if ($config->usesAppraisees()) { + $this->addApprSelectionToToolbar( + $survey, + $toolbar, + $user_id + ); + } + } + protected function addExportAndPrintButton( \ilObjSurvey $survey, \ilToolbarGUI $toolbar, diff --git a/components/ILIAS/Survey/Mode/interface.UIModifier.php b/components/ILIAS/Survey/Mode/interface.UIModifier.php index c86417566ed7..4e1dba9b879e 100755 --- a/components/ILIAS/Survey/Mode/interface.UIModifier.php +++ b/components/ILIAS/Survey/Mode/interface.UIModifier.php @@ -75,6 +75,12 @@ public function setResultsDetailToolbar( \ilTemplate $eval_tpl ): void; + public function setResultsParticipantToolbar( + \ilObjSurvey $survey, + \ilToolbarGUI $toolbar, + int $user_id + ): void; + public function setResultsCompetenceToolbar( \ilObjSurvey $survey, \ilToolbarGUI $toolbar, diff --git a/components/ILIAS/Survey/Settings/class.SettingsFormGUI.php b/components/ILIAS/Survey/Settings/class.SettingsFormGUI.php index 633f2e10afba..5ba15dec9453 100755 --- a/components/ILIAS/Survey/Settings/class.SettingsFormGUI.php +++ b/components/ILIAS/Survey/Settings/class.SettingsFormGUI.php @@ -375,7 +375,7 @@ public function withAccess( // anonymization if ($feature_config->supportsAccessCodes()) { - $codes = new \ilCheckboxInputGUI($lng->txt("survey_access_codes"), "acc_codes"); + $codes = new \ilCheckboxInputGUI($lng->txt("survey_access_code"), "acc_codes"); $codes->setInfo($lng->txt("survey_access_codes_info")); $codes->setChecked(!$survey->isAccessibleWithoutCode()); $form->addItem($codes); diff --git a/components/ILIAS/Survey/classes/class.ilObjSurvey.php b/components/ILIAS/Survey/classes/class.ilObjSurvey.php index 66445f9d4da5..b5d0b36a68c0 100755 --- a/components/ILIAS/Survey/classes/class.ilObjSurvey.php +++ b/components/ILIAS/Survey/classes/class.ilObjSurvey.php @@ -553,7 +553,6 @@ public function insertQuestion( $ilDB = $this->db; $this->svy_log->debug("insert question, id:" . $question_id); - if (!SurveyQuestion::_isComplete($question_id)) { $this->svy_log->debug("question is not complete"); return false; @@ -758,7 +757,7 @@ public function saveToDb(): void $this->setSurveyId($next_id); } else { $affectedRows = $ilDB->update("svy_svy", array( - "author" => array("text", $this->getAuthor()), + "author" => array("text", ilStr::subStr($this->getAuthor(), 0, 50)), "introduction" => array("clob", ilRTE::_replaceMediaObjectImageSrc($this->getIntroduction(), 0)), "outro" => array("clob", ilRTE::_replaceMediaObjectImageSrc($this->getOutro(), 0)), "startdate" => array("text", $this->getStartDate()), diff --git a/components/ILIAS/SurveyQuestionPool/Questions/class.SurveyQuestionGUI.php b/components/ILIAS/SurveyQuestionPool/Questions/class.SurveyQuestionGUI.php index 64772ba4143c..b4625e42a833 100755 --- a/components/ILIAS/SurveyQuestionPool/Questions/class.SurveyQuestionGUI.php +++ b/components/ILIAS/SurveyQuestionPool/Questions/class.SurveyQuestionGUI.php @@ -27,6 +27,7 @@ */ abstract class SurveyQuestionGUI { + protected \ILIAS\Survey\InternalDomainService $domain; protected \ILIAS\Survey\InternalGUIService $gui; protected EditingGUIRequest $request; protected EditManager $edit_manager; @@ -88,6 +89,7 @@ public function __construct($a_id = -1) ->domain() ->editing(); $this->gui = $DIC->survey()->internal()->gui(); + $this->domain = $DIC->survey()->internal()->domain(); } abstract protected function initObject(): void; @@ -376,6 +378,15 @@ protected function save( $this->ctrl->redirect($this, 'originalSyncForm'); } + // if we got a survey, already save in survey + if ($this->request->getNewForSurvey() > 0) { + $survey = new ilObjSurvey($this->request->getNewForSurvey()); + $this->domain->sequence( + $survey->getSurveyId(), + $survey + )->appendQuestion($this->object->getId()); // will check if question is already in survey + } + $this->tpl->setOnScreenMessage('success', $this->lng->txt("msg_obj_modified"), true); $this->redirectAfterSaving($a_return); } diff --git a/components/ILIAS/Table/classes/class.ilTable2GUI.php b/components/ILIAS/Table/classes/class.ilTable2GUI.php index 56fc4688a8cd..825c4cb11c0f 100755 --- a/components/ILIAS/Table/classes/class.ilTable2GUI.php +++ b/components/ILIAS/Table/classes/class.ilTable2GUI.php @@ -1496,8 +1496,6 @@ private function renderFilter(): void return; } - ilYuiUtil::initConnection(); - $ccnt = 0; // render standard filter diff --git a/components/ILIAS/Tagging/classes/class.ilObjTaggingSettingsGUI.php b/components/ILIAS/Tagging/classes/class.ilObjTaggingSettingsGUI.php index 073d9619640b..b082b8965b2e 100755 --- a/components/ILIAS/Tagging/classes/class.ilObjTaggingSettingsGUI.php +++ b/components/ILIAS/Tagging/classes/class.ilObjTaggingSettingsGUI.php @@ -265,7 +265,9 @@ public function initForbiddenTagsForm(): ilPropertyFormGUI $ta->setValue($forb_str); $form->addItem($ta); - $form->addCommandButton("saveForbiddenTags", $lng->txt("save")); + if ($this->access->checkAccess("write", "", $this->object->getRefId())) { + $form->addCommandButton("saveForbiddenTags", $lng->txt("save")); + } $form->setTitle($lng->txt("tagging_forbidden_tags")); $form->setFormAction($ilCtrl->getFormAction($this)); diff --git a/components/ILIAS/Tagging/classes/class.ilTaggingGUI.php b/components/ILIAS/Tagging/classes/class.ilTaggingGUI.php index aaa39846102a..aee752caba00 100755 --- a/components/ILIAS/Tagging/classes/class.ilTaggingGUI.php +++ b/components/ILIAS/Tagging/classes/class.ilTaggingGUI.php @@ -274,7 +274,6 @@ public static function initJavascript( $lng->loadLanguageModule("tagging"); $lng->toJS("tagging_tags", $tpl); - ilYuiUtil::initConnection($tpl); iljQueryUtil::initjQuery($tpl); $tpl->addJavaScript("assets/js/ilTagging.js"); //$tpl->addJavaScript("../components/ILIAS/Tagging/resources/ilTagging.js"); diff --git a/components/ILIAS/Taxonomy/GlobalScreen/classes/class.ilTaxonomyGSToolProvider.php b/components/ILIAS/Taxonomy/GlobalScreen/classes/class.ilTaxonomyGSToolProvider.php index 504b7fd8cc77..e6bc46238de0 100755 --- a/components/ILIAS/Taxonomy/GlobalScreen/classes/class.ilTaxonomyGSToolProvider.php +++ b/components/ILIAS/Taxonomy/GlobalScreen/classes/class.ilTaxonomyGSToolProvider.php @@ -88,6 +88,14 @@ private function getEditTree(array $gui_path, int $tax_id, string $cmd, string $ $cmd ); + $gui = $this->dic->taxonomy()->internal()->gui(); + $params = $gui->http()->request()->getQueryParams(); + $current_tax_node = (int) ($params["tax_node"] ?? null); + if ($current_tax_node > 0) { + $tax_exp->setPathOpen($current_tax_node); + } + + return $tax_exp->getHTML(); } } diff --git a/components/ILIAS/Taxonomy/classes/class.ilObjTaxonomyGUI.php b/components/ILIAS/Taxonomy/classes/class.ilObjTaxonomyGUI.php index cb3f762972c2..b8e2e6ab3878 100755 --- a/components/ILIAS/Taxonomy/classes/class.ilObjTaxonomyGUI.php +++ b/components/ILIAS/Taxonomy/classes/class.ilObjTaxonomyGUI.php @@ -226,6 +226,7 @@ public function listNodes(): void */ public function createAssignedTaxonomy(): void { + $this->requested_new_type = "tax"; $this->create(); } @@ -336,6 +337,7 @@ public function createTaxNode(): void $tpl = $this->tpl; $ilHelp = $this->help; + $this->showTree(); $this->setTabs("list_items"); $ilHelp->setSubScreenId("create_node"); @@ -470,6 +472,7 @@ public function deleteItems(): void $ilCtrl = $this->ctrl; $ilHelp = $this->help; $body = $this->request->getParsedBody(); + $this->showTree(); if (!isset($body["id"])) { $this->tpl->setOnScreenMessage('failure', $this->lng->txt("no_checkbox"), true); @@ -775,6 +778,7 @@ public function editSettings(): void { $tpl = $this->tpl; + $this->showTree(); $this->setTabs("settings"); $form = $this->initSettingsForm(); diff --git a/components/ILIAS/TermsOfService/classes/Consumer.php b/components/ILIAS/TermsOfService/classes/Consumer.php index cff72d0ecbca..9f8692a4e000 100755 --- a/components/ILIAS/TermsOfService/classes/Consumer.php +++ b/components/ILIAS/TermsOfService/classes/Consumer.php @@ -63,7 +63,8 @@ public function uses(UseSlot $slot, LazyProvide $provide): UseSlot ->hasPublicApi($public_api); if (!$is_active) { - return $slot->hasPublicPage($blocks->notAvailable(...), self::GOTO_NAME); + return $slot->hasPublicPage($blocks->notAvailable(...), self::GOTO_NAME) + ->showInFooter($blocks->slot()->dummyFooter(...)); } $user = $build_user($this->container->user()); diff --git a/components/ILIAS/TermsOfService/classes/class.ilObjTermsOfServiceGUI.php b/components/ILIAS/TermsOfService/classes/class.ilObjTermsOfServiceGUI.php index a107eaf4757c..8dc7d3471914 100755 --- a/components/ILIAS/TermsOfService/classes/class.ilObjTermsOfServiceGUI.php +++ b/components/ILIAS/TermsOfService/classes/class.ilObjTermsOfServiceGUI.php @@ -28,10 +28,7 @@ use ILIAS\UI\Component\Input\Container\Form\Form; /** - * @author Michael Jansen <mjansen@databay.de> * @ilCtrl_Calls ilObjTermsOfServiceGUI: ilPermissionGUI - * @ilCtrl_Calls ilObjTermsOfServiceGUI: ilTermsOfServiceDocumentGUI - * @ilCtrl_Calls ilObjTermsOfServiceGUI: ilTermsOfServiceAcceptanceHistoryGUI * @ilCtrl_Calls ilObjTermsOfServiceGUI: ilLegalDocumentsAdministrationGUI * @ilCtrl_isCalledBy ilObjTermsOfServiceGUI: ilAdministrationGUI */ @@ -219,6 +216,7 @@ private function documents(): void private function confirmReset(): void { $this->legal_documents->admin()->requireEditable(); + $this->tabs_gui->activateTab('documents'); $this->legal_documents->admin()->setContent((new Confirmation($this->dic->language()))->render( $this->dic->ctrl()->getFormAction($this, 'resetNow'), 'resetNow', diff --git a/components/ILIAS/TermsOfService/tests/ConsumerTest.php b/components/ILIAS/TermsOfService/tests/ConsumerTest.php index 046105db8dac..c3da3532357e 100755 --- a/components/ILIAS/TermsOfService/tests/ConsumerTest.php +++ b/components/ILIAS/TermsOfService/tests/ConsumerTest.php @@ -63,6 +63,7 @@ public function testDisabledUses(): void $slot->expects(self::once())->method('hasHistory')->willReturn($slot); $slot->expects(self::once())->method('hasPublicApi')->willReturn($slot); $slot->expects(self::once())->method('hasPublicPage')->willReturn($slot); + $slot->expects(self::once())->method('showInFooter')->willReturn($slot); $instance = new Consumer($container); diff --git a/components/ILIAS/Test/classes/Tables/class.ilTestQuestionBrowserTableGUI.php b/components/ILIAS/Test/classes/Tables/class.ilTestQuestionBrowserTableGUI.php index 9411f62f2d88..43fdf31c8459 100755 --- a/components/ILIAS/Test/classes/Tables/class.ilTestQuestionBrowserTableGUI.php +++ b/components/ILIAS/Test/classes/Tables/class.ilTestQuestionBrowserTableGUI.php @@ -119,7 +119,7 @@ private function getQuestionsBrowserFilterComponent(string $parent_title = '', s $this->ui_service, $this->lng, $this->ui_factory, - 'question_browser_filter', + "question_browser_filter_{$this->testrequest->getRefId()}", $parent_title ))->getComponent($action, $this->http_state->request()); } diff --git a/components/ILIAS/Test/classes/class.ilObjTest.php b/components/ILIAS/Test/classes/class.ilObjTest.php index 58b5cfeac536..ab5a5f992d4a 100755 --- a/components/ILIAS/Test/classes/class.ilObjTest.php +++ b/components/ILIAS/Test/classes/class.ilObjTest.php @@ -26,7 +26,6 @@ use ILIAS\Test\Logging\TestLogger; use ILIAS\Test\Logging\TestLogViewer; use ILIAS\Test\ExportImport\Factory as ExportImportFactory; -use ILIAS\Test\ExportImport\Types as ExportImportTypes; use ILIAS\Test\Logging\TestAdministrationInteractionTypes; use ILIAS\Test\Logging\TestScoringInteractionTypes; use ILIAS\Test\Logging\AdditionalInformationGenerator; @@ -671,14 +670,9 @@ public function loadQuestions(int $active_id = 0, ?int $pass = null): void public function getIntroduction(): string { $page_id = $this->getMainSettings()->getIntroductionSettings()->getIntroductionPageId(); - if ($page_id !== null) { - return (new ilTestPageGUI('tst', $page_id))->showPage(); - } - - return ilRTE::_replaceMediaObjectImageSrc( - $this->getMainSettings()->getIntroductionSettings()->getIntroductionText(), - 1 - ); + return $page_id !== null + ? (new ilTestPageGUI('tst', $page_id))->showPage() + : ''; } private function cloneIntroduction(): ?int @@ -693,13 +687,9 @@ private function cloneIntroduction(): ?int public function getFinalStatement(): string { $page_id = $this->getMainSettings()->getFinishingSettings()->getConcludingRemarksPageId(); - if ($page_id !== null) { - return (new ilTestPageGUI('tst', $page_id))->showPage(); - } - return ilRTE::_replaceMediaObjectImageSrc( - $this->getMainSettings()->getFinishingSettings()->getConcludingRemarksText(), - 1 - ); + return $page_id !== null + ? (new ilTestPageGUI('tst', $page_id))->showPage() + : ''; } private function cloneConcludingRemarks(): ?int @@ -720,6 +710,16 @@ private function clonePage(int $source_page_id): int return $new_page_id; } + private function getPageContentFromPageId(int $page_id): ?string + { + $page = (new ilTestPageGUI('tst', $page_id)); + if ($page->getPageObject()->getXMLContent() === '<PageObject></PageObject>') { + return null; + } + + return $page->showPage(); + } + /** * Gets the database id of the additional test data */ @@ -2784,12 +2784,6 @@ public function getAvailableQuestions($arr_filter, $completeonly = 0): array */ public function fromXML(ilQTIAssessment $assessment, array $mappings): void { - if (($importdir = ilSession::get('path_to_container_import_file')) === null) { - $importdir = $this->buildImportDirectoryFromImportFile(ilSession::get('path_to_import_file')); - } - ilSession::clear('path_to_container_import_file'); - ilSession::clear('import_mob_xhtml'); - $this->saveToDb(true); $main_settings = $this->getMainSettings(); @@ -2808,7 +2802,6 @@ public function fromXML(ilQTIAssessment $assessment, array $mappings): void $introduction_settings = $this->addIntroductionToSettingsFromImport( $introduction_settings, $this->qtiMaterialToArray($material), - $importdir, $mappings ); } @@ -2822,7 +2815,6 @@ public function fromXML(ilQTIAssessment $assessment, array $mappings): void $this->qtiMaterialToArray( $assessment->getPresentationMaterial()->getFlowMat(0)->getMaterial(0) ), - $importdir, $mappings ); } @@ -3114,70 +3106,49 @@ public function fromXML(ilQTIAssessment $assessment, array $mappings): void private function addIntroductionToSettingsFromImport( SettingsIntroduction $settings, array $material, - string $importdir, array $mappings ): SettingsIntroduction { - $text = $material['text']; - $mobs = $material['mobs']; - if (str_starts_with($text, '<PageObject>')) { - $text = $this->replaceMobsInPageImports( - $text, - $mappings['components/ILIAS/MediaObjects']['mob'] ?? [] - ); - $text = $this->replaceFilesInPageImports( - $text, - $mappings['components/ILIAS/File']['file'] ?? [] - ); - $page_object = new ilTestPage(); - $page_object->setParentId($this->getId()); - $page_object->setXMLContent($text); - $new_page_id = $page_object->createPageWithNextId(); - return $settings->withIntroductionPageId($new_page_id); + if (!str_starts_with($material['text'], '<PageObject>')) { + return $settings; } - $text = $this->retrieveMobsFromLegacyImports($text, $mobs, $importdir); - - return new SettingsIntroduction( - $text !== '', - $text + $text = $this->replaceFilesInPageImports( + $this->replaceMobsInPageImports( + $material['text'], + $mappings['components/ILIAS/MediaObjects']['mob'] ?? [] + ), + $mappings['components/ILIAS/File']['file'] ?? [] ); + + $page_object = new ilTestPage(); + $page_object->setParentId($this->getId()); + $page_object->setXMLContent($text); + $new_page_id = $page_object->createPageWithNextId(); + return $settings->withIntroductionPageId($new_page_id); } private function addConcludingRemarksToSettingsFromImport( SettingsFinishing $settings, array $material, - string $importdir, array $mappings ): SettingsFinishing { - $file_to_import = ilSession::get('path_to_import_file'); - $text = $material['text']; - $mobs = $material['mobs']; - if (str_starts_with($text, '<PageObject>')) { - $text = $this->replaceMobsInPageImports( - $text, + if (!str_starts_with($material['text'], '<PageObject>')) { + return $settings; + } + + $text = $this->replaceFilesInPageImports( + $this->replaceMobsInPageImports( + $material['text'], $mappings['components/ILIAS/MediaObjects']['mob'] ?? [] - ); - $text = $this->replaceFilesInPageImports( - $text, - $mappings['components/ILIAS/File']['file'] ?? [] - ); - $page_object = new ilTestPage(); - $page_object->setParentId($this->getId()); - $page_object->setXMLContent($text); - $new_page_id = $page_object->createPageWithNextId(); - return $settings->withConcludingRemarksPageId($new_page_id); - } - - $text = $this->retrieveMobsFromLegacyImports($text, $mobs, $importdir); - - return new SettingsFinishing( - $settings->getShowAnswerOverview(), - strlen($text) > 0, - $text, - null, - $settings->getRedirectionMode(), - $settings->getRedirectionUrl(), + ), + $mappings['components/ILIAS/File']['file'] ?? [] ); + + $page_object = new ilTestPage(); + $page_object->setParentId($this->getId()); + $page_object->setXMLContent($text); + $new_page_id = $page_object->createPageWithNextId(); + return $settings->withConcludingRemarksPageId($new_page_id); } private function replaceMobsInPageImports(string $text, array $mappings): string @@ -3205,26 +3176,6 @@ private function replaceFilesInPageImports(string $text, array $mappings): strin return $text; } - private function retrieveMobsFromLegacyImports(string $text, array $mobs, string $importdir): string - { - foreach ($mobs as $mob) { - $importfile = $importdir . DIRECTORY_SEPARATOR . $mob['uri']; - if (file_exists($importfile)) { - $media_object = ilObjMediaObject::_saveTempFileAsMediaObject(basename($importfile), $importfile, false); - ilObjMediaObject::_saveUsage($media_object->getId(), 'tst:html', $this->getId()); - $text = ilRTE::_replaceMediaObjectImageSrc( - str_replace( - 'src="' . $mob['mob'] . '"', - 'src="' . 'il_' . IL_INST_ID . '_mob_' . $media_object->getId() . '"', - $text - ), - 1 - ); - } - } - return $text; - } - /** * Returns a QTI xml representation of the test * @@ -3262,7 +3213,7 @@ public function toXML(): string $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "anonymity"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", $main_settings->getGeneralSettings()->getAnonymity())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getGeneralSettings()->getAnonymity() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); @@ -3272,7 +3223,7 @@ public function toXML(): string $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "sequence_settings"); - $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getParticipantFunctionalitySettings()->getPostponedQuestionsMoveToEnd()); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getParticipantFunctionalitySettings()->getPostponedQuestionsMoveToEnd() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); @@ -3282,7 +3233,7 @@ public function toXML(): string $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "reset_processing_time"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $main_settings->getTestBehaviourSettings()->getResetProcessingTime()); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getTestBehaviourSettings()->getResetProcessingTime() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); @@ -3317,7 +3268,7 @@ public function toXML(): string $a_xml_writer->xmlStartTag('qtimetadatafield'); $a_xml_writer->xmlElement('fieldlabel', null, 'pass_deletion_allowed'); - $a_xml_writer->xmlElement('fieldentry', null, (int) $this->isPassDeletionAllowed()); + $a_xml_writer->xmlElement('fieldentry', null, $this->isPassDeletionAllowed() ? 1 : 0); $a_xml_writer->xmlEndTag('qtimetadatafield'); if ($this->getScoreSettings()->getResultSummarySettings()->getReportingDate() !== null) { @@ -3335,12 +3286,12 @@ public function toXML(): string $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "nr_of_tries"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", $main_settings->getTestBehaviourSettings()->getNumberOfTries())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getTestBehaviourSettings()->getNumberOfTries()); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag('qtimetadatafield'); $a_xml_writer->xmlElement('fieldlabel', null, 'block_after_passed'); - $a_xml_writer->xmlElement('fieldentry', null, (int) $main_settings->getTestBehaviourSettings()->getBlockAfterPassedEnabled()); + $a_xml_writer->xmlElement('fieldentry', null, $main_settings->getTestBehaviourSettings()->getBlockAfterPassedEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag('qtimetadatafield'); $a_xml_writer->xmlStartTag("qtimetadatafield"); @@ -3350,7 +3301,7 @@ public function toXML(): string $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "kiosk"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", $main_settings->getTestBehaviourSettings()->getKioskMode())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getTestBehaviourSettings()->getKioskMode()); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag('qtimetadatafield'); @@ -3365,130 +3316,133 @@ public function toXML(): string $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "use_previous_answers"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $main_settings->getParticipantFunctionalitySettings()->getUsePreviousAnswerAllowed()); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getParticipantFunctionalitySettings()->getUsePreviousAnswerAllowed() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag('qtimetadatafield'); $a_xml_writer->xmlElement('fieldlabel', null, 'question_list_enabled'); - $a_xml_writer->xmlElement('fieldentry', null, (int) $main_settings->getParticipantFunctionalitySettings()->getQuestionListEnabled()); + $a_xml_writer->xmlElement('fieldentry', null, $main_settings->getParticipantFunctionalitySettings()->getQuestionListEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag('qtimetadatafield'); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "title_output"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", $main_settings->getQuestionBehaviourSettings()->getQuestionTitleOutputMode())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getQuestionBehaviourSettings()->getQuestionTitleOutputMode()); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "results_presentation"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", $this->getScoreSettings()->getResultDetailsSettings()->getResultsPresentation())); + $a_xml_writer->xmlElement("fieldentry", null, $this->getScoreSettings()->getResultDetailsSettings()->getResultsPresentation()); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "examid_in_test_pass"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", $main_settings->getTestBehaviourSettings()->getExamIdInTestAttemptEnabled())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getTestBehaviourSettings()->getExamIdInTestAttemptEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "examid_in_test_res"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", $this->getScoreSettings()->getResultDetailsSettings()->getShowExamIdInTestResults())); + $a_xml_writer->xmlElement("fieldentry", null, $this->getScoreSettings()->getResultDetailsSettings()->getShowExamIdInTestResults() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "usr_pass_overview_mode"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", $main_settings->getParticipantFunctionalitySettings()->getUsrPassOverviewMode())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getParticipantFunctionalitySettings()->getUsrPassOverviewMode()); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "score_reporting"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", $this->getScoreSettings()->getResultSummarySettings()->getScoreReporting()->value)); + $a_xml_writer->xmlElement("fieldentry", null, $this->getScoreSettings()->getResultSummarySettings()->getScoreReporting()->value); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "show_solution_list_comparison"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $this->score_settings->getResultDetailsSettings()->getShowSolutionListComparison()); + $a_xml_writer->xmlElement("fieldentry", null, $this->score_settings->getResultDetailsSettings()->getShowSolutionListComparison() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "instant_verification"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", (int) $main_settings->getQuestionBehaviourSettings()->getInstantFeedbackSolutionEnabled())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getQuestionBehaviourSettings()->getInstantFeedbackSolutionEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "answer_feedback"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", (int) $main_settings->getQuestionBehaviourSettings()->getInstantFeedbackGenericEnabled())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getQuestionBehaviourSettings()->getInstantFeedbackGenericEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "instant_feedback_specific"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", (int) $main_settings->getQuestionBehaviourSettings()->getInstantFeedbackSpecificEnabled())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getQuestionBehaviourSettings()->getInstantFeedbackSpecificEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "answer_feedback_points"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", (int) $main_settings->getQuestionBehaviourSettings()->getInstantFeedbackPointsEnabled())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getQuestionBehaviourSettings()->getInstantFeedbackPointsEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "follow_qst_answer_fixation"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $main_settings->getQuestionBehaviourSettings()->getLockAnswerOnNextQuestionEnabled()); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getQuestionBehaviourSettings()->getLockAnswerOnNextQuestionEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "instant_feedback_answer_fixation"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $main_settings->getQuestionBehaviourSettings()->getLockAnswerOnInstantFeedbackEnabled()); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getQuestionBehaviourSettings()->getLockAnswerOnInstantFeedbackEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "force_instant_feedback"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $main_settings->getQuestionBehaviourSettings()->getForceInstantFeedbackOnNextQuestion()); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getQuestionBehaviourSettings()->getForceInstantFeedbackOnNextQuestion() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $highscore_metadata = [ - 'highscore_enabled' => ['value' => $this->getHighscoreEnabled()], - 'highscore_anon' => ['value' => $this->getHighscoreAnon()], - 'highscore_achieved_ts' => ['value' => $this->getHighscoreAchievedTS()], - 'highscore_score' => ['value' => $this->getHighscoreScore()], - 'highscore_percentage' => ['value' => $this->getHighscorePercentage()], - 'highscore_wtime' => ['value' => $this->getHighscoreWTime()], - 'highscore_own_table' => ['value' => $this->getHighscoreOwnTable()], - 'highscore_top_table' => ['value' => $this->getHighscoreTopTable()], - 'highscore_top_num' => ['value' => $this->getHighscoreTopNum()], + 'highscore_enabled' => $this->getHighscoreEnabled(), + 'highscore_anon' => $this->getHighscoreAnon(), + 'highscore_achieved_ts' => $this->getHighscoreAchievedTS(), + 'highscore_score' => $this->getHighscoreScore(), + 'highscore_percentage' => $this->getHighscorePercentage(), + 'highscore_wtime' => $this->getHighscoreWTime(), + 'highscore_own_table' => $this->getHighscoreOwnTable(), + 'highscore_top_table' => $this->getHighscoreTopTable(), ]; - foreach ($highscore_metadata as $label => $data) { + foreach ($highscore_metadata as $label => $value) { $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, $label); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", $data['value'])); + $a_xml_writer->xmlElement("fieldentry", null, $value ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); } + $a_xml_writer->xmlStartTag("qtimetadatafield"); + $a_xml_writer->xmlElement("fieldlabel", null, "highscore_top_num"); + $a_xml_writer->xmlElement("fieldentry", null, $this->getHighscoreTopNum()); + $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "suspend_test_allowed"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", (int) $main_settings->getParticipantFunctionalitySettings()->getSuspendTestAllowed())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getParticipantFunctionalitySettings()->getSuspendTestAllowed() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "show_marker"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", (int) $main_settings->getParticipantFunctionalitySettings()->getQuestionMarkingEnabled())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getParticipantFunctionalitySettings()->getQuestionMarkingEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "fixed_participants"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", (int) $main_settings->getAccessSettings()->getFixedParticipants())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getAccessSettings()->getFixedParticipants() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "show_introduction"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", (int) $main_settings->getIntroductionSettings()->getIntroductionEnabled())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getIntroductionSettings()->getIntroductionEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, 'exam_conditions'); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", (int) $main_settings->getIntroductionSettings()->getExamConditionsCheckboxEnabled())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getIntroductionSettings()->getExamConditionsCheckboxEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "show_concluding_remarks"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", (int) $main_settings->getFinishingSettings()->getConcludingRemarksEnabled())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getFinishingSettings()->getConcludingRemarksEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); @@ -3498,7 +3452,7 @@ public function toXML(): string $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "shuffle_questions"); - $a_xml_writer->xmlElement("fieldentry", null, sprintf("%d", (int) $main_settings->getQuestionBehaviourSettings()->getShuffleQuestions())); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getQuestionBehaviourSettings()->getShuffleQuestions() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); @@ -3508,12 +3462,12 @@ public function toXML(): string $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "enable_examview"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $main_settings->getFinishingSettings()->getShowAnswerOverview()); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getFinishingSettings()->getShowAnswerOverview() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "skill_service"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $main_settings->getAdditionalSettings()->getSkillsServiceEnabled()); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getAdditionalSettings()->getSkillsServiceEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); if ($this->getInstantFeedbackSolution() == 1) { @@ -3527,17 +3481,17 @@ public function toXML(): string $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "show_grading_status"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $this->isShowGradingStatusEnabled()); + $a_xml_writer->xmlElement("fieldentry", null, $this->isShowGradingStatusEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "show_grading_mark"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $this->isShowGradingMarkEnabled()); + $a_xml_writer->xmlElement("fieldentry", null, $this->isShowGradingMarkEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag('qtimetadatafield'); $a_xml_writer->xmlElement('fieldlabel', null, 'hide_info_tab'); - $a_xml_writer->xmlElement('fieldentry', null, (int) $this->getMainSettings()->getAdditionalSettings()->getHideInfoTab()); + $a_xml_writer->xmlElement('fieldentry', null, $this->getMainSettings()->getAdditionalSettings()->getHideInfoTab() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); if ($this->getStartingTime() > 0) { @@ -3568,7 +3522,7 @@ public function toXML(): string $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "autosave"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $main_settings->getQuestionBehaviourSettings()->getAutosaveEnabled()); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getQuestionBehaviourSettings()->getAutosaveEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); @@ -3578,17 +3532,17 @@ public function toXML(): string $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "instant_feedback_specific"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $main_settings->getQuestionBehaviourSettings()->getInstantFeedbackSpecificEnabled()); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getQuestionBehaviourSettings()->getInstantFeedbackSpecificEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "instant_feedback_answer_fixation"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $main_settings->getQuestionBehaviourSettings()->getLockAnswerOnInstantFeedbackEnabled()); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getQuestionBehaviourSettings()->getLockAnswerOnInstantFeedbackEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); $a_xml_writer->xmlStartTag("qtimetadatafield"); $a_xml_writer->xmlElement("fieldlabel", null, "enable_processing_time"); - $a_xml_writer->xmlElement("fieldentry", null, (int) $main_settings->getTestBehaviourSettings()->getProcessingTimeEnabled()); + $a_xml_writer->xmlElement("fieldentry", null, $main_settings->getTestBehaviourSettings()->getProcessingTimeEnabled() ? 1 : 0); $a_xml_writer->xmlEndTag("qtimetadatafield"); foreach ($this->getMarkSchema()->getMarkSteps() as $index => $mark) { @@ -3993,7 +3947,7 @@ public function cloneObject(int $target_id, int $copy_id = 0, bool $omit_tree = $this->getMainSettings()->getFinishingSettings()->withConcludingRemarksPageId( $this->cloneConcludingRemarks() ) - ); + )->withId(0); $new_main_settings = $this->getMainSettingsRepository()->store($new_main_settings, $new_obj->getTestId()); $this->getScoreSettingsRepository()->store( @@ -5319,7 +5273,6 @@ public function qtiMaterialToArray($a_material): array $result = $decoded_result; } - $this->logger->info(print_r(ilSession::get('import_mob_xhtml'), true)); return [ 'text' => $result, 'mobs' => $mobs @@ -5909,7 +5862,7 @@ public function getAggregatedResultsData(): array $results['overview']['tst_eval_total_passed_average_points'] = sprintf('%2.2f', $average_passed_reached) . ' ' . strtolower('of') . ' ' . sprintf('%2.2f', $average_passed_max); $results['overview']['tst_eval_total_passed_average_time'] = - $this->secondsToHoursMinutesSecondsString($average_passed_time); + $this->secondsToHoursMinutesSecondsString((int) $average_passed_time); } foreach ($data->getQuestionTitles() as $question_id => $question_title) { @@ -6394,7 +6347,12 @@ public function participantDataExist(): bool public function recalculateScores($preserve_manscoring = false) { - $scoring = new TestScoring($this, $this->user, $this->db, $this->lng); + $scoring = new TestScoring( + $this, + $this->user, + $this->db, + $this->test_result_repository + ); $scoring->setPreserveManualScores($preserve_manscoring); $scoring->recalculateSolutions(); } diff --git a/components/ILIAS/Test/classes/class.ilObjTestAccess.php b/components/ILIAS/Test/classes/class.ilObjTestAccess.php index c5747690dcd5..f38a17efd03f 100755 --- a/components/ILIAS/Test/classes/class.ilObjTestAccess.php +++ b/components/ILIAS/Test/classes/class.ilObjTestAccess.php @@ -106,20 +106,20 @@ public function _checkAccess(string $cmd, string $permission, int $ref_id, int $ } switch ($permission) { - case "visible": - case "read": + case 'visible': + case 'read': if (!ilObjTestAccess::lookupCreationComplete($obj_id) && !$is_admin) { - $this->access->addInfoItem(ilAccessInfo::IL_NO_OBJECT_ACCESS, $this->lng->txt("tst_warning_test_not_complete")); + $this->access->addInfoItem(ilAccessInfo::IL_NO_OBJECT_ACCESS, $this->lng->txt('tst_warning_test_not_complete')); return false; } break; } switch ($cmd) { - case "eval_stat": + case 'eval_stat': if (!ilObjTestAccess::lookupCreationComplete($obj_id)) { - $this->access->addInfoItem(ilAccessInfo::IL_NO_OBJECT_ACCESS, $this->lng->txt("tst_warning_test_not_complete")); + $this->access->addInfoItem(ilAccessInfo::IL_NO_OBJECT_ACCESS, $this->lng->txt('tst_warning_test_not_complete')); return false; } break; @@ -188,10 +188,27 @@ public static function _getCommands(): array $DIC->language()->loadLanguageModule('assessment'); return [ - ["permission" => "write", "cmd" => "questionsTabGateway", "lang_var" => "tst_edit_questions"], - ["permission" => "write", "cmd" => "ILIAS\Test\Settings\MainSettings\SettingsMainGUI::showForm", "lang_var" => "settings"], - ["permission" => "read", "cmd" => "ILIAS\Test\Presentation\TestScreenGUI::testScreen", "lang_var" => "tst_run", "default" => true], - ["permission" => "score_anon", "cmd" => "ILIAS\Test\Scoring\Manual\ConsecutiveScoringGUI::view", "lang_var" => "manscoring", "default" => true], + [ + 'permission' => 'write', + 'cmd' => 'questionsTabGateway', + 'lang_var' => 'tst_edit_questions' + ], + [ + 'permission' => 'write', + 'cmd' => 'ILIAS\Test\Settings\MainSettings\SettingsMainGUI::showForm', + 'lang_var' => 'settings' + ], + [ + 'permission' => 'read', + 'cmd' => 'ILIAS\Test\Presentation\TestScreenGUI::testScreen', + 'lang_var' => 'tst_run', + 'default' => true + ], + [ + 'permission' => 'score_anon', + 'cmd' => 'ILIAS\Test\Scoring\Manual\ConsecutiveScoringGUI::view', + 'lang_var' => 'manscoring' + ], ]; } @@ -212,8 +229,8 @@ private static function lookupCreationComplete(int $a_obj_id): bool global $DIC; $db = $DIC->database(); $result = $db->queryF( - "SELECT complete FROM tst_tests WHERE obj_fi=%s", - ['integer'], + 'SELECT complete FROM tst_tests WHERE obj_fi=%s', + [ilDBConstants::T_INTEGER], [$a_obj_id] ); return $result->numRows() > 0 && (bool) $db->fetchAssoc($result)['complete']; @@ -232,13 +249,13 @@ public static function _getTestIDFromObjectID(int $object_id): int|false $ilDB = $DIC['ilDB']; $test_id = false; $result = $ilDB->queryF( - "SELECT test_id FROM tst_tests WHERE obj_fi = %s", - ['integer'], + 'SELECT test_id FROM tst_tests WHERE obj_fi = %s', + [ilDBConstants::T_INTEGER], [$object_id] ); if ($result->numRows()) { $row = $ilDB->fetchAssoc($result); - $test_id = $row["test_id"]; + $test_id = $row['test_id']; } return $test_id; } @@ -255,15 +272,13 @@ public static function _getRandomTestsForQuestionPool(int $qpl_id): array global $DIC; $ilDB = $DIC['ilDB']; - $query = " - SELECT DISTINCT t.obj_fi - FROM tst_tests t - INNER JOIN tst_rnd_quest_set_qpls r - ON t.test_id = r.test_fi - WHERE r.pool_fi = %s - "; + $query = 'SELECT DISTINCT t.obj_fi' . PHP_EOL + . 'FROM tst_tests t' . PHP_EOL + . 'INNER JOIN tst_rnd_quest_set_qpls r' . PHP_EOL + . 'ON t.test_id = r.test_fi' . PHP_EOL + . 'WHERE r.pool_fi = %s' . PHP_EOL; - $result = $ilDB->queryF($query, ['integer'], [$qpl_id]); + $result = $ilDB->queryF($query, [ilDBConstants::T_INTEGER], [$qpl_id]); $tests = []; while ($row = $ilDB->fetchAssoc($result)) { @@ -288,7 +303,7 @@ public static function _getParticipantData(int $active_id): string $result_active = $ilDB->queryF( 'SELECT * FROM tst_active WHERE active_id = %s', - ['integer'], + [ilDBConstants::T_INTEGER], [$active_id] ); $row_active = $ilDB->fetchAssoc($result_active); @@ -306,15 +321,16 @@ public static function _getParticipantData(int $active_id): string $uname = ilObjUser::_lookupName($row_active['user_fi']); $result_test = $ilDB->queryF( - "SELECT obj_fi FROM tst_tests WHERE test_id = %s", - ["integer"], + 'SELECT obj_fi FROM tst_tests WHERE test_id = %s', + [ilDBConstants::T_INTEGER], [$row_active['test_fi']] ); $row_test = $ilDB->fetchAssoc($result_test); - $obj_id = $row_test["obj_fi"]; + $obj_id = $row_test['obj_fi']; - if (ilObjTest::_lookupAnonymity($obj_id)) { - return $lng->txt("anonymous"); + $test_obj = new ilObjTest($obj_id, false); + if ($test_obj->getAnonymity()) { + return $lng->txt('anonymous'); } if ($uname['firstname'] . $uname['lastname'] === '') { @@ -337,7 +353,7 @@ public static function _getParticipantId(int $active_id): int $result = $ilDB->queryF( 'SELECT user_fi FROM tst_active WHERE active_id = %s', - ['integer'], + [ilDBConstants::T_INTEGER], [$active_id] ); $row = $ilDB->fetchAssoc($result); @@ -352,14 +368,14 @@ public static function _checkGoto(string $target): bool global $DIC; $ilAccess = $DIC['ilAccess']; - $t_arr = explode("_", $target); + $t_arr = explode('_', $target); - if ($t_arr[0] != "tst" || ((int) $t_arr[1]) <= 0) { + if ($t_arr[0] != 'tst' || ((int) $t_arr[1]) <= 0) { return false; } - if ($ilAccess->checkAccess("read", "", (int) $t_arr[1]) || - $ilAccess->checkAccess("visible", "", (int) $t_arr[1])) { + if ($ilAccess->checkAccess('read', '', (int) $t_arr[1]) || + $ilAccess->checkAccess('visible', '', (int) $t_arr[1])) { return true; } return false; diff --git a/components/ILIAS/Test/classes/class.ilObjTestGUI.php b/components/ILIAS/Test/classes/class.ilObjTestGUI.php index 38343a5ea812..7a59ac284581 100755 --- a/components/ILIAS/Test/classes/class.ilObjTestGUI.php +++ b/components/ILIAS/Test/classes/class.ilObjTestGUI.php @@ -49,7 +49,6 @@ use ILIAS\Test\Participants\ParticipantRepository; use ILIAS\Test\Settings\MainSettings\SettingsMainGUI; use ILIAS\Test\Settings\ScoreReporting\SettingsScoringGUI; -use ILIAS\Test\Scoring\Settings\Settings as SettingsScoring; use ILIAS\Test\Scoring\Marks\MarkSchemaGUI; use ILIAS\Test\Scoring\Manual\ConsecutiveScoringGUI; use ILIAS\Test\Logging\LogTable; @@ -67,9 +66,6 @@ use ILIAS\TestQuestionPool\Import\TestQuestionsImportTrait; use ILIAS\Data\Factory as DataFactory; use ILIAS\UI\Component\Modal\Modal; -use ILIAS\UI\Factory as UIFactory; -use ILIAS\UI\Renderer as UIRenderer; -use ILIAS\HTTP\Services as HTTPServices; use ILIAS\UI\URLBuilder; use ILIAS\UI\Component\Input\Container\Form\Form; use ILIAS\UI\Component\Input\Input; @@ -370,10 +366,8 @@ public function executeCommand(): void $this->export_repository, $this->temp_file_system, $this->participant_access_filter_factory, - new ilTestHTMLGenerator(), - $selected_files, - $this->questionrepository, - $this->testrequest + $this->test_pass_result_repository, + new ilTestHTMLGenerator() ); $this->ctrl->forwardCommand($export_gui); break; @@ -642,7 +636,6 @@ public function executeCommand(): void $gui = new SettingsMainGUI( $this->tpl, - $this->toolbar, $this->ctrl, $this->access, $this->lng, @@ -892,6 +885,7 @@ public function executeCommand(): void $question->setObjId($this->getTestObject()->getId()); $question_gui->setObject($question); $question_gui->setQuestionTabs(); + $question_gui->setContextAllowsSyncToPool(true); $this->addQuestionTitleToObjectTitle($question->getTitleForHTMLOutput()); @@ -931,7 +925,8 @@ public function executeCommand(): void $this->getTestObject()->getTestLogger(), $this->testrequest, $this->getTestObject(), - $this->user + $this->user, + $this->test_pass_result_repository ); $this->ctrl->forwardCommand($gui); break; @@ -1378,8 +1373,13 @@ protected function importFile(string $file_to_import, string $path_to_uploaded_f $this->deleteUploadedImportFile($path_to_uploaded_file_in_temp_dir); $this->tpl->setOnScreenMessage('failure', $this->lng->txt('tst_import_non_ilias_zip'), true); } - $qtiParser = new ilQTIParser($importdir, $qtifile, ilQTIParser::IL_MO_VERIFY_QTI, 0, []); - $qtiParser->startParsing(); + $qtiParser = new ilQTIParser($importdir, $qtifile, ilQTIParser::IL_MO_VERIFY_QTI, 0, [], [], true); + try { + $qtiParser->startParsing(); + } catch (ilSaxParserException) { + $this->tpl->setOnScreenMessage('failure', $this->lng->txt('import_file_not_valid'), true); + $this->ctrl->redirect($this, 'create'); + } $founditems = $qtiParser->getFoundItems(); $complete = 0; @@ -1629,6 +1629,14 @@ public function createQuestionObject(): void $data = $data_with_section[0]; $qpl_mode = $data['pool_selection']['qpl_type']; + + if ($qpl_mode === self::QUESTION_CREATION_POOL_SELECTION_NEW_POOL + && ! $this->userCanCreatePoolAtCurrentLocation()) { + $this->tpl->setOnScreenMessage('failure', $this->lng->txt('permission_denied'), true); + $this->showQuestionsObject(); + return; + } + if ($qpl_mode === self::QUESTION_CREATION_POOL_SELECTION_NEW_POOL && $data['pool_selection']['title'] === '' || $qpl_mode === self::QUESTION_CREATION_POOL_SELECTION_EXISTING_POOL && $data['pool_selection']['pool_ref_id'] === 0) { $this->tpl->setOnScreenMessage('info', $this->lng->txt("questionpool_not_entered")); @@ -1794,7 +1802,9 @@ static function ($values) use ($kt): array { if ($return['qpl_type'] === self::QUESTION_CREATION_POOL_SELECTION_NEW_POOL) { return $return + ['title' => $kt->string()->transform($values[1][0])]; } - return $return + ['pool_ref_id' => $kt->int()->transform($values[1][0])]; + return $return + [ + 'pool_ref_id' => $kt->int()->transform($values[1][0]) + ]; } ); @@ -1807,15 +1817,23 @@ static function ($values) use ($kt): array { $inputs = [ self::QUESTION_CREATION_POOL_SELECTION_NO_POOL => $f->group([], $this->lng->txt('assessment_no_pool')), self::QUESTION_CREATION_POOL_SELECTION_EXISTING_POOL => $f->group( - [$f->select($this->lng->txt('select_questionpool'), $pools_data)], + [ + $f->select( + $this->lng->txt('select_questionpool'), + $pools_data + )->withRequired(true) + ], $this->lng->txt('assessment_existing_pool') - ), - self::QUESTION_CREATION_POOL_SELECTION_NEW_POOL => $f->group( - [$f->text($this->lng->txt('name'))], - $this->lng->txt('assessment_new_pool') ) ]; + if ($this->userCanCreatePoolAtCurrentLocation()) { + $inputs[self::QUESTION_CREATION_POOL_SELECTION_NEW_POOL] = $f->group( + [$f->text($this->lng->txt('name'))], + $this->lng->txt('assessment_new_pool') + ); + } + return $f->switchableGroup( $inputs, $this->lng->txt('assessment_pool_selection') @@ -1893,9 +1911,9 @@ private function setupToolBarAndMessage(bool $has_started_test_runs): void $message = $this->lng->txt('test_has_datasets_warning_page_view'); $massage_box = $this->ui_factory->messageBox()->info($message)->withLinks([$link]); - $this->tpl->setCurrentBlock('mess'); + $this->tpl->setCurrentBlock('pax_info_message'); $this->tpl->setVariable( - 'MESSAGE', + 'PAX_INFO_MESSAGE', $this->ui_renderer->render($massage_box) ); $this->tpl->parseCurrentBlock(); @@ -2761,4 +2779,10 @@ protected function getTable(): QuestionsTable $this->title_builder ); } + + private function userCanCreatePoolAtCurrentLocation(): bool + { + return $this->settings->get('obj_dis_creation_qpl') !== '1' + && $this->checkPermissionBool('create', '', 'qpl', $this->tree->getParentId($this->ref_id)); + } } diff --git a/components/ILIAS/Test/classes/class.ilTestArchiveService.php b/components/ILIAS/Test/classes/class.ilTestArchiveService.php index 28182f415f0c..7e7c2af3389a 100755 --- a/components/ILIAS/Test/classes/class.ilTestArchiveService.php +++ b/components/ILIAS/Test/classes/class.ilTestArchiveService.php @@ -71,9 +71,66 @@ public function archivePassesByActives($passesByActives): void public function archiveActivesPass(int $active_id, int $pass): void { - $content = $this->renderOverviewContent($active_id, $pass); + $participant_data = $this->getParticipantData(); + $user = $participant_data->getUserDataByActiveId($active_id); + + $tpl = new ilTemplate( + 'tpl.il_as_tst_archive_page.html', + true, + true, + 'components/ILIAS/Test' + ); + + $tpl->setVariable( + 'NAME', + sprintf( + $this->lng->txt('tst_result_user_name'), + $this->test_obj->buildName( + $user['user_id'], + $user['firstname'], + $user['lastname'] + ) + ) + ); + + if (!empty($user['matriculation']) && $this->test_obj->getAnonymity() === false) { + $tpl->setCurrentBlock('matriculation'); + $tpl->setVariable( + 'MATRICULATION_LABEL', + $this->lng->txt('matriculation') + ); + $tpl->setVariable( + 'MATRICULATION', + $user['matriculation'] + ); + $tpl->parseCurrentBlock(); + } + + $tpl->setVariable( + 'PASS_FINISH_DATE_LABEL', + $this->lng->txt('tst_pass_finished_on') + ); + + $finish_date = ilObjTest::lookupLastTestPassAccess($active_id, $pass); + $tpl->setVariable( + 'PASS_FINISH_DATE', + $finish_date === null + ? '' + : (new DateTimeImmutable( + "@{$finish_date}", + new DateTimeZone($this->user->getTimeZone()) + ))->format( + $this->user->getDateTimeFormat()->toString() + ) + ); + + $tpl->setVariable( + 'OVERVIEW', + $this->renderOverviewContent($active_id, $pass) + ); + $filename = $this->buildOverviewFilename($active_id, $pass); - $this->html_generator->generateHTML($content, $filename); + $this->html_generator->generateHTML($tpl->get(), $filename); $archiver = new ilTestArchiver( $this->lng, $this->db, diff --git a/components/ILIAS/Test/classes/class.ilTestArchiver.php b/components/ILIAS/Test/classes/class.ilTestArchiver.php index f5730b179d2b..199e28644071 100755 --- a/components/ILIAS/Test/classes/class.ilTestArchiver.php +++ b/components/ILIAS/Test/classes/class.ilTestArchiver.php @@ -29,6 +29,7 @@ use ILIAS\Data\Order; use ILIAS\Test\Results\Data\Repository as TestResultRepository; use ILIAS\ResourceStorage\Services as IRSS; +use ILIAS\ResourceStorage\Identification\ResourceIdentification; use Psr\Http\Message\ServerRequestInterface; /** @@ -170,31 +171,25 @@ public function handInParticipantUploadedResults( $questions = $tst_obj->getQuestionsOfPass($active_fi, $pass); foreach ($questions as $question) { $question = $tst_obj->getQuestionDataset($question['question_fi']); - if ($question->type_tag === 'assFileUpload') { - $this->ensureTestArchiveIsAvailable(); - $this->ensurePassDataDirectoryIsAvailable($active_fi, $pass); - $this->ensurePassMaterialsDirectoryIsAvailable($active_fi, $pass); - $pass_material_directory = $this->getPassMaterialsDirectory($active_fi, $pass); - $archive_folder = $pass_material_directory . DIRECTORY_SEPARATOR . $question->question_id . DIRECTORY_SEPARATOR; - if (!file_exists($archive_folder)) { - mkdir($archive_folder, 0777, true); - } - $resource_id = $tst_obj->getTextAnswer($active_fi, $question->question_id, $pass); - if ($resource_id === '') { - continue; - } - $irss_unique_id = $this->irss->manage()->find($resource_id); - if ($irss_unique_id != null) { - $resource = $this->irss->manage()->getResource($irss_unique_id); - $information = $resource->getCurrentRevision()->getInformation(); - $stream = $this->irss->consume()->stream($irss_unique_id); - // this feels unnecessary.. - $file_stream = fopen($stream->getStream()->getMetadata('uri'), 'r'); - $file_content = stream_get_contents($file_stream); - fclose($file_stream); - $target_destination = $archive_folder . $information->getTitle(); - file_put_contents($target_destination, $file_content); - } + if ($question->type_tag !== 'assFileUpload') { + continue; + } + + $this->ensureTestArchiveIsAvailable(); + $this->ensurePassDataDirectoryIsAvailable($active_fi, $pass); + $this->ensurePassMaterialsDirectoryIsAvailable($active_fi, $pass); + $pass_material_directory = $this->getPassMaterialsDirectory($active_fi, $pass); + $archive_folder = $pass_material_directory . DIRECTORY_SEPARATOR . $question->question_id . DIRECTORY_SEPARATOR; + if (!file_exists($archive_folder)) { + mkdir($archive_folder, 0777, true); + } + + $uploaded_files = assQuestion::instantiateQuestion($question->question_id)->getUploadedFiles($active_fi, $pass); + foreach ($uploaded_files as $uploaded_file) { + $this->addUploadedFilesToExport( + $this->irss->manage()->find($uploaded_file['value1']), + $archive_folder + ); } } } @@ -712,4 +707,22 @@ private function logArchivingProcess(string $message): void file_put_contents($archive, $content); } + + private function addUploadedFilesToExport( + ?ResourceIdentification $resource_id, + string $archive_folder + ): void { + if ($resource_id === null) { + return; + } + + $information = $this->irss->manage()->getResource($resource_id) + ->getCurrentRevision()->getInformation(); + $stream = $this->irss->consume()->stream($resource_id)->getStream(); + file_put_contents( + $archive_folder . $information->getTitle(), + $stream->getContents() + ); + $stream->close(); + } } diff --git a/components/ILIAS/Test/classes/class.ilTestCorrectionsGUI.php b/components/ILIAS/Test/classes/class.ilTestCorrectionsGUI.php index f6fb65e347b8..f5fef6533972 100755 --- a/components/ILIAS/Test/classes/class.ilTestCorrectionsGUI.php +++ b/components/ILIAS/Test/classes/class.ilTestCorrectionsGUI.php @@ -18,6 +18,7 @@ declare(strict_types=1); +use ILIAS\Test\Results\Data\Repository as TestResultRepository; use ILIAS\Test\Scoring\Manual\TestScoring; use ILIAS\Test\Logging\TestLogger; use ILIAS\Test\Logging\TestQuestionAdministrationInteractionTypes; @@ -51,6 +52,7 @@ public function __construct( private readonly RequestDataCollector $testrequest, private readonly ilObjTest $test_obj, private readonly ilObjUser $scorer, + private readonly TestResultRepository $test_result_repository, ) { $question_id = $this->testrequest->getQuestionId(); if ($question_id !== 0) { @@ -61,7 +63,8 @@ public function __construct( public function executeCommand() { - if (!$this->test_access->checkCorrectionsAccess() + if (!$this->test_obj->getGlobalSettings()->isAdjustingQuestionsWithResultsAllowed() + || !$this->test_access->checkCorrectionsAccess() || $this->question_gui !== null && !$this->checkQuestion()) { ilObjTestGUI::accessViolationRedirect(); @@ -101,7 +104,7 @@ protected function buildQuestionCorrectionForm(assQuestionGUI $question_gui): il $this->test_obj, $this->scorer, $this->database, - $this->language + $this->test_result_repository ); $scoring->setQuestionId($question_gui->getObject()->getId()); @@ -122,7 +125,7 @@ protected function confirmManualScoringReset() $this->test_obj, $this->scorer, $this->database, - $this->language + $this->test_result_repository ); $scoring->setQuestionId($this->question_gui->getObject()->getId()); @@ -167,7 +170,7 @@ protected function saveQuestion() $this->test_obj, $this->scorer, $this->database, - $this->language + $this->test_result_repository ); $scoring->setPreserveManualScores(false); $scoring->setQuestionId($question_gui->getObject()->getId()); @@ -296,7 +299,7 @@ protected function addAnswer() $this->test_obj, $this->scorer, $this->database, - $this->language + $this->test_result_repository ); $scoring->setPreserveManualScores(true); $scoring->setQuestionId($question_index); diff --git a/components/ILIAS/Test/classes/class.ilTestEvaluationGUI.php b/components/ILIAS/Test/classes/class.ilTestEvaluationGUI.php index fe52933b650e..124b515c524f 100755 --- a/components/ILIAS/Test/classes/class.ilTestEvaluationGUI.php +++ b/components/ILIAS/Test/classes/class.ilTestEvaluationGUI.php @@ -852,11 +852,11 @@ private function buildAttemptComponents( if ($for_print) { $signal = $results_presentation_table->getExpandAllSignal(); + $signal_options = json_encode(['options' => $signal->getOptions()]); $results_presentation_table = [ $results_presentation_table, - $this->ui_factory->legacy('')->withAdditionalOnLoadCode( - fn(string $id): string => "$(document).trigger('{$signal->getId()}'," - . '{"options" : ' . json_encode($signal->getOptions()) . '}); ' + $this->ui_factory->legacy()->content('')->withAdditionalOnLoadCode( + static fn(string $id): string => "$(document).trigger('{$signal->getId()}', $signal_options);" ) ]; } diff --git a/components/ILIAS/Test/classes/class.ilTestExportGUI.php b/components/ILIAS/Test/classes/class.ilTestExportGUI.php index e3240cbb2e39..88e324fde351 100755 --- a/components/ILIAS/Test/classes/class.ilTestExportGUI.php +++ b/components/ILIAS/Test/classes/class.ilTestExportGUI.php @@ -21,6 +21,7 @@ use ILIAS\Test\Scoring\Manual\TestScoring; use ILIAS\Test\ExportImport\DBRepository; use ILIAS\Test\ExportImport\ResultsExportStakeholder; +use ILIAS\Test\Results\Data\Repository as TestResultsRepository; use ILIAS\UI\Factory as UIFactory; use ILIAS\UI\Renderer as UIRenderer; use ILIAS\ResourceStorage\Services as IRSS; @@ -49,6 +50,7 @@ public function __construct( private readonly DBRepository $export_repository, private readonly Filesystem $temp_file_system, private readonly ilTestParticipantAccessFilterFactory $participant_access_filter_factory, + private readonly TestResultsRepository $test_results_repository, private readonly ilTestHTMLGenerator $html_generator ) { parent::__construct($parent_gui, null); @@ -153,7 +155,12 @@ public function createTestArchiveExport() $test_ref ); - $scoring = new TestScoring($this->obj, $this->user, $this->db, $this->lng); + $scoring = new TestScoring( + $this->obj, + $this->user, + $this->db, + $this->test_results_repository + ); $best_solution = $scoring->calculateBestSolutionForTest(); $tmpFileName = ilFileUtils::ilTempnam(); diff --git a/components/ILIAS/Test/classes/class.ilTestExportPlugin.php b/components/ILIAS/Test/classes/class.ilTestExportPlugin.php index 43ba1933beb1..a79452b50c8e 100755 --- a/components/ILIAS/Test/classes/class.ilTestExportPlugin.php +++ b/components/ILIAS/Test/classes/class.ilTestExportPlugin.php @@ -103,7 +103,7 @@ final public function deliver(): void return; } - $this->file_delivery->legacyDelivery()->attached( + $file_delivery->legacyDelivery()->attached( $file_name, null, null, @@ -114,7 +114,11 @@ final public function deliver(): void final public function write(): ?string { - return $this->createExportFile(); + /** @var ILIAS\DI\Container $DIC */ + global $DIC; + $main_tpl = $DIC['tpl']; + + return $this->createExportFile($main_tpl); } private function createExportFile(ilGlobalTemplateInterface $main_tpl): ?string diff --git a/components/ILIAS/Test/classes/class.ilTestFixedQuestionSetConfigGUI.php b/components/ILIAS/Test/classes/class.ilTestFixedQuestionSetConfigGUI.php index ee117ecc2c03..138efc410035 100755 --- a/components/ILIAS/Test/classes/class.ilTestFixedQuestionSetConfigGUI.php +++ b/components/ILIAS/Test/classes/class.ilTestFixedQuestionSetConfigGUI.php @@ -27,7 +27,6 @@ * * @package Modules/Test * - * @ilCtrl_Calls ilTestFixedQuestionSetConfigGUI: ilTestExpressPageObjectGUI * @ilCtrl_Calls ilTestFixedQuestionSetConfigGUI: ilPageEditorGUI * @ilCtrl_Calls ilTestFixedQuestionSetConfigGUI: ilAssQuestionPageGUI */ diff --git a/components/ILIAS/Test/classes/class.ilTestImporter.php b/components/ILIAS/Test/classes/class.ilTestImporter.php index 742f932b74db..6c195c2836ca 100755 --- a/components/ILIAS/Test/classes/class.ilTestImporter.php +++ b/components/ILIAS/Test/classes/class.ilTestImporter.php @@ -64,7 +64,6 @@ public function importXmlRepresentation( $new_obj = ilObjectFactory::getInstanceByObjId((int) $new_id, false); $new_obj->saveToDb(); - ilSession::set('path_to_container_import_file', $this->getImportDirectory()); [$importdir, $xmlfile, $qtifile] = $this->buildImportDirectoriesFromContainerImport( $this->getImportDirectory() ); diff --git a/components/ILIAS/Test/classes/class.ilTestParticipantList.php b/components/ILIAS/Test/classes/class.ilTestParticipantList.php index 35b80fc6491e..bd61cb6c2bd5 100755 --- a/components/ILIAS/Test/classes/class.ilTestParticipantList.php +++ b/components/ILIAS/Test/classes/class.ilTestParticipantList.php @@ -333,30 +333,25 @@ protected function lookupLastAccess(?int $active_id): string return $this->getTestObj()->_getLastAccess($active_id); } - protected function buildFullname(ilTestParticipant $participant): string + public function buildFullname(ilTestParticipant $participant): string { - if ($this->getTestObj()->getMainSettings()->getAccessSettings()->getFixedParticipants() && !$participant->getActiveId()) { - return $this->buildInviteeFullname($participant); - } - - return $this->buildParticipantsFullname($participant); + $active_id = $participant->getActiveId(); + $fixed_participants = $this->getTestObj()->getMainSettings()->getAccessSettings()->getFixedParticipants(); + return $fixed_participants && !$active_id + ? $this->buildInviteeFullname($participant) + : ilObjTestAccess::_getParticipantData($active_id); } protected function buildInviteeFullname(ilTestParticipant $participant): string { - if (strlen($participant->getFirstname() . $participant->getLastname()) == 0) { - return $this->lng->txt("deleted_user"); + if ("{$participant->getFirstname()}{$participant->getLastname()}" === '') { + return $this->lng->txt('deleted_user'); } if ($this->getTestObj()->getAnonymity()) { return $this->lng->txt('anonymous'); } - return trim($participant->getLastname() . ", " . $participant->getFirstname()); - } - - protected function buildParticipantsFullname(ilTestParticipant $participant): string - { - return ilObjTestAccess::_getParticipantData($participant->getActiveId()); + return trim("{$participant->getLastname()}, {$participant->getFirstname()}"); } } diff --git a/components/ILIAS/Test/classes/class.ilTestPlayerAbstractGUI.php b/components/ILIAS/Test/classes/class.ilTestPlayerAbstractGUI.php index 311f84b01937..5510825da065 100755 --- a/components/ILIAS/Test/classes/class.ilTestPlayerAbstractGUI.php +++ b/components/ILIAS/Test/classes/class.ilTestPlayerAbstractGUI.php @@ -355,14 +355,9 @@ public function saveQuestionSolution( return false; } - if ($this->canSaveResult() || $force) { - $saved = $this->save($question_obj, $authorized); - } - - if (!$saved - || ($question_obj instanceof QuestionPartiallySaveable - && !$question_obj->validateSolutionSubmit())) { + $saved = ($force || $this->canSaveResult()) && $this->save($question_obj, $authorized); + if (!$saved || ($question_obj instanceof QuestionPartiallySaveable && !$question_obj->validateSolutionSubmit())) { $this->ctrl->setParameter($this, 'save_error', '1'); ilSession::set('previouspost', $this->testrequest->getParsedBody()); } @@ -392,7 +387,8 @@ private function buildQuestionObject(): ?assQuestion if ($this->isParticipantsAnswerFixed($q_id)) { // should only be reached by firebugging the disabled form in ui - throw new ilTestException('not allowed request'); + $this->tpl->setOnScreenMessage(ilGlobalTemplateInterface::MESSAGE_TYPE_FAILURE, $this->lng->txt('tst_player_answer_saved_and_locked'), true); + $this->ctrl->redirect($this, ilTestPlayerCommands::SHOW_QUESTION); } if ($q_id === null) { diff --git a/components/ILIAS/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinition.php b/components/ILIAS/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinition.php index 501623f0d155..1e4674b3808a 100755 --- a/components/ILIAS/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinition.php +++ b/components/ILIAS/Test/classes/class.ilTestRandomQuestionSetSourcePoolDefinition.php @@ -183,7 +183,7 @@ public function mapTaxonomyFilter(ilQuestionPoolDuplicatedTaxonomiesKeysMap $tax $mapped_node_ids[] = $mapped_node_id; } } - $this->mapped_taxonomy_filter[] = $mapped_node_ids; + $this->mapped_taxonomy_filter[$mapped_taxonomy_id] = $mapped_node_ids; } } diff --git a/components/ILIAS/Test/classes/class.ilTestResultsImportParser.php b/components/ILIAS/Test/classes/class.ilTestResultsImportParser.php index c55ab970e300..86e4e3c68364 100755 --- a/components/ILIAS/Test/classes/class.ilTestResultsImportParser.php +++ b/components/ILIAS/Test/classes/class.ilTestResultsImportParser.php @@ -109,44 +109,44 @@ public function handlerBeginTag($a_xml_parser, $a_name, $a_attribs): void case 'tst_active': if (!$this->user_criteria_checked) { $this->user_criteria_checked = true; - if (isset($a_attribs['user_criteria']) - && $this->db->tableColumnExists('usr_data', $a_attribs['user_criteria'])) { - $analyzer = new ilDBAnalyzer(); - $info = $analyzer->getFieldInformation('usr_data'); - $this->user_criteria_field = $a_attribs['user_criteria']; - $this->user_criteria_type = $info[$a_attribs['user_criteria']]['type']; + $user_criteria = $a_attribs['user_criteria'] ?? null; + if ( + is_string($user_criteria) + && $this->db->tableColumnExists('usr_data', $user_criteria) + ) { + $info = (new ilDBAnalyzer())->getFieldInformation('usr_data'); + $this->user_criteria_field = $user_criteria; + $this->user_criteria_type = $info[$user_criteria]['type']; } } $usr_id = ANONYMOUS_USER_ID; if ($this->user_criteria_field !== '') { $result = $this->db->queryF( - 'SELECT usr_id FROM usr_data WHERE ' - . $this->user_criteria_field . ' = %s', + "SELECT usr_id FROM usr_data WHERE {$this->user_criteria_field} = %s", [$this->user_criteria_type], [$a_attribs[$this->user_criteria_field]] ); if ($result->numRows()) { - $row = $this->db->fetchAssoc($result); - $usr_id = $row['usr_id']; + $usr_id = $this->db->fetchAssoc($result)['usr_id']; } } - $next_id = $this->db->nextId('tst_active'); + $next_id = $this->db->nextId('tst_active'); $this->db->insert('tst_active', [ - 'active_id' => ['integer', $next_id], - 'user_fi' => ['integer', $usr_id], - 'anonymous_id' => ['text', strlen($a_attribs['anonymous_id']) ? $a_attribs['anonymous_id'] : null], - 'test_fi' => ['integer', $this->test_obj->getTestId()], - 'lastindex' => ['integer', $a_attribs['lastindex']], - 'tries' => ['integer', $a_attribs['tries']], - 'submitted' => ['integer', $a_attribs['submitted']], - 'submittimestamp' => ['timestamp', strlen($a_attribs['submittimestamp']) ? $a_attribs['submittimestamp'] : null], - 'tstamp' => ['integer', $a_attribs['tstamp']], - 'importname' => ['text', $a_attribs['fullname']], - 'last_finished_pass' => ['integer', $this->fetchLastFinishedPass($a_attribs)], - 'last_started_pass' => ['integer', $this->fetchLastStartedPass($a_attribs)], - 'answerstatusfilter' => ['integer', $this->fetchAttribute($a_attribs, 'answer_status_filter')], - 'objective_container' => ['integer', $this->fetchAttribute($a_attribs, 'objective_container')] + 'active_id' => [ilDBConstants::T_INTEGER, $next_id], + 'user_fi' => [ilDBConstants::T_INTEGER, $usr_id], + 'anonymous_id' => [ilDBConstants::T_TEXT, $a_attribs['anonymous_id'] ?: null], + 'test_fi' => [ilDBConstants::T_INTEGER, $this->test_obj->getTestId()], + 'lastindex' => [ilDBConstants::T_INTEGER, $a_attribs['lastindex']], + 'tries' => [ilDBConstants::T_INTEGER, $a_attribs['tries']], + 'submitted' => [ilDBConstants::T_INTEGER, $a_attribs['submitted']], + 'submittimestamp' => [ilDBConstants::T_TIMESTAMP, $a_attribs['submittimestamp'] ?: null], + 'tstamp' => [ilDBConstants::T_INTEGER, $a_attribs['tstamp']], + 'importname' => [ilDBConstants::T_TEXT, $a_attribs['fullname']], + 'last_finished_pass' => [ilDBConstants::T_INTEGER, $this->fetchLastFinishedPass($a_attribs)], + 'last_started_pass' => [ilDBConstants::T_INTEGER, $this->fetchLastStartedPass($a_attribs)], + 'answerstatusfilter' => [ilDBConstants::T_INTEGER, $this->fetchAttribute($a_attribs, 'answer_status_filter')], + 'objective_container' => [ilDBConstants::T_INTEGER, $this->fetchAttribute($a_attribs, 'objective_container')] ]); $this->active_id_mapping[$a_attribs['active_id']] = $next_id; break; diff --git a/components/ILIAS/Test/classes/class.ilTestResultsToXML.php b/components/ILIAS/Test/classes/class.ilTestResultsToXML.php index 9c9453c76e14..bc3a6d67888d 100755 --- a/components/ILIAS/Test/classes/class.ilTestResultsToXML.php +++ b/components/ILIAS/Test/classes/class.ilTestResultsToXML.php @@ -22,16 +22,17 @@ class ilTestResultsToXML extends ilXmlWriter { - private $active_ids; + private array $active_ids = []; protected bool $include_random_test_questions_enabled = false; public function __construct( - private int $test_id, - private ilDBInterface $db, - private ResourceStorage $irss, - private string $objects_export_directory, - private bool $anonymized = false + private readonly ilObjTest $test_obj, + private readonly ilDBInterface $db, + private readonly ResourceStorage $irss, + private readonly ilObjUser $user, + private readonly ilLanguage $lng, + private string $objects_export_directory ) { parent::__construct(); } @@ -48,30 +49,25 @@ public function setIncludeRandomTestQuestionsEnabled(bool $include_random_test_q protected function exportActiveIDs(): void { - $assessment_setting = new ilSetting('assessment'); - $user_criteria = $assessment_setting->get('user_criteria'); - if ($user_criteria === null || $user_criteria === '') { - $user_criteria = 'usr_id'; - } + $user_criteria = (new ilSetting('assessment'))->get('user_criteria', 'usr_id'); + + $query = $this->test_obj->getAnonymity() + ? 'SELECT * FROM tst_active WHERE test_fi = %s' + : "SELECT tst_active.*, usr_data.{$user_criteria} FROM tst_active, usr_data WHERE tst_active.test_fi = %s AND tst_active.user_fi = usr_data.usr_id"; + $result = $this->db->queryF($query, [ilDBConstants::T_INTEGER], [$this->test_obj->getTestId()]); + + $test_participant_list = new ilTestParticipantList($this->test_obj, $this->user, $this->lng, $this->db); + $test_participant_list->initializeFromDbRows($this->test_obj->getTestParticipants()); - if ($this->anonymized) { - $result = $this->db->queryF( - 'SELECT * FROM tst_active WHERE test_fi = %s', - ['integer'], - [$this->test_id] - ); - } else { - $result = $this->db->queryF( - 'SELECT tst_active.*, usr_data.' . $user_criteria . ' FROM tst_active, usr_data WHERE tst_active.test_fi = %s AND tst_active.user_fi = usr_data.usr_id', - ['integer'], - [$this->test_id] - ); - } $this->xmlStartTag('tst_active', null); while ($row = $this->db->fetchAssoc($result)) { + $this->active_ids[] = $row['active_id']; + $participant = $test_participant_list->getParticipantByActiveId($row['active_id']); + $attrs = [ 'active_id' => $row['active_id'], - 'user_fi' => $row['user_fi'] ?? '', + 'user_fi' => $this->test_obj->getAnonymity() ? '' : ($row['user_fi'] ?? ''), + 'fullname' => $participant ? $test_participant_list->buildFullname($participant) : '', 'anonymous_id' => $row['anonymous_id'] ?? '', 'test_fi' => $row['test_fi'], 'lastindex' => $row['lastindex'] ?? '', @@ -82,12 +78,12 @@ protected function exportActiveIDs(): void 'submittimestamp' => $row['submittimestamp'] ?? '', 'tstamp' => $row['tstamp'] ?? '' ]; - $attrs['fullname'] = ilObjTestAccess::_getParticipantData($row['active_id']); - if (!$this->anonymized) { + + if (!$this->test_obj->getAnonymity()) { $attrs['user_criteria'] = $user_criteria; $attrs[$user_criteria] = $row[$user_criteria]; } - array_push($this->active_ids, $row['active_id']); + $this->xmlElement('row', $attrs); } $this->xmlEndTag('tst_active'); diff --git a/components/ILIAS/Test/resources/ilTestPlayerQuestionEditControl.js b/components/ILIAS/Test/resources/ilTestPlayerQuestionEditControl.js index 41b06409e0b8..50c41712e954 100644 --- a/components/ILIAS/Test/resources/ilTestPlayerQuestionEditControl.js +++ b/components/ILIAS/Test/resources/ilTestPlayerQuestionEditControl.js @@ -376,9 +376,11 @@ il.TestPlayerQuestionEditControl = new function() { * @param jqXHR */ function detectBackgroundChangesFailure(jqXHR) { - $('#autosavemessage').text(jqXHR.responseText) - .fadeIn(500, function(){ - $('#autosavemessage').fadeOut(5000) + $('#autosavemessage').removeClass('sr-only').text(jqXHR.responseText) + .fadeTo(500, 1, function(){ + $(this).fadeTo(5000, 0, function(){ + $(this).removeAttr('style').addClass('sr-only'); + }); }); } @@ -708,9 +710,11 @@ il.TestPlayerQuestionEditControl = new function() { */ function autoSaveSuccess(responseText) { if (typeof responseText !== 'undefined' && responseText != '-IGNORE-') { - $('#autosavemessage').text(responseText) - .fadeIn(500, function(){ - $('#autosavemessage').fadeOut(5000) + $('#autosavemessage').removeClass('sr-only').text(responseText) + .fadeTo(500, 1, function(){ + $(this).fadeTo(5000, 0, function(){ + $(this).removeAttr('style').addClass('sr-only'); + }); }); } } @@ -725,9 +729,11 @@ il.TestPlayerQuestionEditControl = new function() { responseText = jqXHR.responseText ; } - $('#autosavemessage').text(responseText) - .fadeIn(500, function(){ - $('#autosavemessage').fadeOut(5000); + $('#autosavemessage').removeClass('sr-only').text(responseText) + .fadeTo(500, 1, function(){ + $(this).fadeTo(5000, 0, function(){ + $(this).removeAttr('style').addClass('sr-only'); + }); }); autoSavedData = ''; } diff --git a/components/ILIAS/Test/src/Certificate/CertificateTestTemplateDeleteAction.php b/components/ILIAS/Test/src/Certificate/CertificateTestTemplateDeleteAction.php index b66fb6491b2e..6e0080356973 100644 --- a/components/ILIAS/Test/src/Certificate/CertificateTestTemplateDeleteAction.php +++ b/components/ILIAS/Test/src/Certificate/CertificateTestTemplateDeleteAction.php @@ -18,11 +18,8 @@ declare(strict_types=1); -namespace ILIAS\Course\Certificate; +namespace ILIAS\Test\Certificate; -/** - * @author Niels Theen <ntheen@databay.de> - */ class CertificateTestTemplateDeleteAction implements \ilCertificateDeleteAction { public function __construct(private readonly \ilCertificateDeleteAction $deleteAction) diff --git a/components/ILIAS/Test/src/ExportImport/Export.php b/components/ILIAS/Test/src/ExportImport/Export.php index 22b528d4402e..0589f705b5d2 100755 --- a/components/ILIAS/Test/src/ExportImport/Export.php +++ b/components/ILIAS/Test/src/ExportImport/Export.php @@ -54,7 +54,7 @@ abstract class Export implements Exporter protected string $inst_id; public function __construct( - protected readonly Language $lng, + protected readonly \ilLanguage $lng, protected readonly \ilDBInterface $db, protected readonly \ilBenchmark $bench, protected readonly TestLogger $logger, @@ -63,7 +63,8 @@ public function __construct( protected readonly GeneralQuestionPropertiesRepository $questionrepository, protected readonly FileDeliveryServices $file_delivery, protected readonly \ilObjTest $test_obj, - protected readonly ResourceStorage $irss + protected readonly ResourceStorage $irss, + protected readonly \ilObjUser $user ) { $this->inst_id = (string) IL_INST_ID; $this->export_dir = $test_obj->getExportDirectory(); @@ -166,11 +167,12 @@ public function write(): ?string if ($this->isResultExportingEnabled()) { $resultwriter = new \ilTestResultsToXML( - $this->test_obj->getTestId(), + $this->test_obj, $this->db, $this->irss, - $this->export_dir . "/" . $this->subdir . "/objects", - $this->test_obj->getAnonymity() + $this->user, + $this->lng, + "{$this->export_dir}/{$this->subdir}/objects" ); $resultwriter->setIncludeRandomTestQuestionsEnabled($this->test_obj->isRandomTest()); $this->bench->start('TestExport', 'write_results'); diff --git a/components/ILIAS/Test/src/ExportImport/Factory.php b/components/ILIAS/Test/src/ExportImport/Factory.php index c9bdc60e7866..b1b3d9340e3c 100755 --- a/components/ILIAS/Test/src/ExportImport/Factory.php +++ b/components/ILIAS/Test/src/ExportImport/Factory.php @@ -85,10 +85,7 @@ public function getExporter( case Types::XML: case Types::XML_WITH_RESULTS: - $export_class = ExportFixedQuestionSet::class; - if (!$test_obj->isFixedTest()) { - $export_class = ExportRandomQuestionSet::class; - } + $export_class = $test_obj->isFixedTest() ? ExportFixedQuestionSet::class : ExportRandomQuestionSet::class; $export = new $export_class( $this->lng, @@ -100,13 +97,11 @@ public function getExporter( $this->questionrepository, $this->file_delivery, $test_obj, - $this->irss + $this->irss, + $this->current_user ); - if ($export_type === Types::XML_WITH_RESULTS) { - return $export->withResultExportingEnabled(true); - } - return $export; + return $export->withResultExportingEnabled($export_type === Types::XML_WITH_RESULTS); case Types::PLUGIN: if ($plugin_type === null) { diff --git a/components/ILIAS/Test/src/ExportImport/ResultsExportExcel.php b/components/ILIAS/Test/src/ExportImport/ResultsExportExcel.php index b3a9cf9bd268..4d8ff6860bac 100755 --- a/components/ILIAS/Test/src/ExportImport/ResultsExportExcel.php +++ b/components/ILIAS/Test/src/ExportImport/ResultsExportExcel.php @@ -461,9 +461,6 @@ private function addUserContent( $answers = implode("\n", $answers); } - $disable_strip_tags_for_answers = $question_obj instanceof \assTextQuestion - && $this->test_obj->getGlobalSettings()->getExportEssayQuestionsAsHtml(); - $correct_answers = $question_obj->getCorrectSolutionForTextOutput($active_id, $test_attempt->getPass()); if (is_array($correct_answers)) { $correct_answers = implode("\n", $correct_answers); @@ -472,7 +469,7 @@ private function addUserContent( $col = 0; $this->worksheet->setCell($current_row, $col++, $question_obj->getTitle()); $this->worksheet->setCell($current_row, $col++, $this->lng->txt($question_obj->getQuestionType())); - $this->worksheet->setCell($current_row, $col++, $answers, DataType::TYPE_STRING, $disable_strip_tags_for_answers); + $this->worksheet->setCell($current_row, $col++, $answers, DataType::TYPE_STRING); $this->worksheet->setCell($current_row, $col++, $correct_answers); $this->worksheet->setCell($current_row, $col++, implode(', ', $question_obj->getVariablesAsTextArray($active_id, $test_attempt->getPass()))); $this->worksheet->setCell($current_row, $col++, $test_attempt->getAnsweredQuestionByQuestionId($question_id)['reached'] ?? 0); diff --git a/components/ILIAS/Test/src/Logging/LogTable.php b/components/ILIAS/Test/src/Logging/LogTable.php index 8991cfc0ce49..d02c5ee9859a 100644 --- a/components/ILIAS/Test/src/Logging/LogTable.php +++ b/components/ILIAS/Test/src/Logging/LogTable.php @@ -99,7 +99,7 @@ public function getTable(): Table\Data return $this->ui_factory->table()->data( $this, $this->lng->txt('history'), - $this->getColums(), + $this->getColumns() )->withActions($this->getActions()); } @@ -149,9 +149,14 @@ private function initializeFilter(): void $active = array_fill(0, count($filter_inputs), true); + $log_table_filter_id = 'log_table_filter_id'; + if ($this->ref_id !== null) { + $log_table_filter_id .= "_{$this->ref_id}"; + } + $this->filter = $this->ui_service->filter()->standard( - 'log_table_filter_id', - $this->unmaskCmdNodesFromBuilder($this->url_builder->buildURI()->__toString()), + $log_table_filter_id, + $this->url_builder->buildURI()->__toString(), $filter_inputs, $active, true, @@ -160,7 +165,7 @@ private function initializeFilter(): void } - private function getColums(): array + private function getColumns(): array { $f = $this->ui_factory->table()->column(); @@ -309,10 +314,10 @@ private function showConfirmTestUserInteractionsDeletion(array $affected_items): $this->ui_factory->modal()->interruptive( $this->lng->txt('confirmation'), $this->lng->txt('confirm_log_deletion'), - $this->unmaskCmdNodesFromBuilder($this->url_builder + $this->url_builder ->withParameter($this->action_parameter_token, self::ACTION_DELETE) ->withParameter($this->row_id_token, $affected_items) - ->buildURI()->__toString()) + ->buildURI()->__toString() ) ); exit; @@ -537,18 +542,4 @@ private function extractIdsFromUserQuery(array $response): array $response['set'] ); } - - /** - * 2024-05-07 skergomard: This is a workaround as I didn't find another way - */ - private function unmaskCmdNodesFromBuilder(string $url): string - { - $matches = []; - preg_match('/cmdNode=([A-Za-z0-9]+%3)+[A-Za-z0-9]+&/i', $url, $matches); - if (empty($matches[0])) { - return $url; - } - $replacement = str_replace('%3', ':', $matches[0]); - return str_replace($matches[0], $replacement, $url); - } } diff --git a/components/ILIAS/Test/src/Participants/ParticipantTable.php b/components/ILIAS/Test/src/Participants/ParticipantTable.php index 54bcd78379f8..ff5ab5e4a9de 100644 --- a/components/ILIAS/Test/src/Participants/ParticipantTable.php +++ b/components/ILIAS/Test/src/Participants/ParticipantTable.php @@ -271,7 +271,7 @@ private function getFilterComponent(string $action, ServerRequestInterface $requ } return $this->ui_service->filter()->standard( - 'participant_filter', + "participant_filter_{$this->test_request->getRefId()}", $action, $filter_inputs, $is_input_initially_rendered, diff --git a/components/ILIAS/Test/src/Presentation/TabsManager.php b/components/ILIAS/Test/src/Presentation/TabsManager.php index f4f4e8df3ebc..80ad7392ce46 100755 --- a/components/ILIAS/Test/src/Presentation/TabsManager.php +++ b/components/ILIAS/Test/src/Presentation/TabsManager.php @@ -91,11 +91,19 @@ public function __construct( public function activateTab(string $tab_id): void { switch ($tab_id) { + case self::TAB_ID_QUESTIONS: case self::TAB_ID_PARTICIPANTS: case self::TAB_ID_YOUR_RESULTS: case self::TAB_ID_SETTINGS: + case self::TAB_ID_MANUAL_SCORING: + case self::TAB_ID_CORRECTION: case self::TAB_ID_TEST: + case self::TAB_ID_EXPORT: case self::TAB_ID_LEARNING_PROGRESS: + case self::TAB_ID_META_DATA: + case self::TAB_ID_PERMISSIONS: + case self::TAB_ID_HISTORY: + case self::TAB_ID_INFOSCREEN: $this->tabs->activateTab($tab_id); } } @@ -111,6 +119,8 @@ public function activateSubTab(string $sub_tab_id): void case self::SUBTAB_ID_QST_LIST_VIEW: case self::SUBTAB_ID_QST_PAGE_VIEW: + case self::QUESTIONS_SUBTAB_ID_RANDOM_SETTINGS: + case self::QUESTIONS_SUBTAB_ID_RANDOM_POOLS: case self::SETTINGS_SUBTAB_ID_GENERAL: case self::SETTINGS_SUBTAB_ID_MARK_SCHEMA: @@ -118,6 +128,8 @@ public function activateSubTab(string $sub_tab_id): void case self::SETTINGS_SUBTAB_ID_EDIT_INTRODUCTION_PAGE: case self::SETTINGS_SUBTAB_ID_EDIT_CONCLUSION_PAGE: case self::SETTINGS_SUBTAB_ID_CERTIFICATE: + case self::SETTINGS_SUBTAB_ID_ASSIGN_SKILL_TRESHOLDS: + case self::SETTINGS_SUBTAB_ID_ASSIGN_SKILLS_TO_QUESTIONS: case self::SETTINGS_SUBTAB_ID_PERSONAL_DEFAULT_SETTINGS: $this->tabs->activateSubTab($sub_tab_id); } @@ -440,7 +452,9 @@ protected function setupTabsGuiConfig(): void $this->ctrl->getLinkTargetByClass( [\ilObjTestGUI::class, ConsecutiveScoringGUI::class], ConsecutiveScoringGUI::DEFAULT_COMMAND - ) + ), + '', + [ConsecutiveScoringGUI::class] ); } } @@ -702,8 +716,10 @@ protected function getParticipantsTabTarget(): string public function needsYourResultsTab(): bool { return $this->test_session->reportableResultsAvailable($this->test_object) - || $this->test_session->getActiveId() !== 0 - && $this->test_object->canShowSolutionPrintview($this->test_session->getUserId()); + || ( + $this->test_session->getActiveId() !== 0 + && $this->test_object->canShowSolutionPrintview($this->test_session->getUserId()) + ); } protected function getYourResultsTabTarget(): string diff --git a/components/ILIAS/Test/src/Questions/Presentation/Printer.php b/components/ILIAS/Test/src/Questions/Presentation/Printer.php index 6c4bae5eceea..40d22ff383b3 100644 --- a/components/ILIAS/Test/src/Questions/Presentation/Printer.php +++ b/components/ILIAS/Test/src/Questions/Presentation/Printer.php @@ -98,13 +98,7 @@ public function printSelectedQuestions( $max_points += $question_gui->getObject()->getMaximumPoints(); } - $template->setVariable( - 'TITLE', - $this->refinery->encode()->htmlSpecialCharsAsEntities()->transform( - $this->test_obj->getTitle() - ) - ); - $template->setVariable('PRINT_TEST', $this->lng->txt('tst_print')); + $template->setVariable('PRINT_TEST', $this->lng->txt('print_view')); $template->setVariable('TXT_PRINT_DATE', $this->lng->txt('date')); $template->setVariable( 'VALUE_PRINT_DATE', diff --git a/components/ILIAS/Test/src/Questions/Presentation/QuestionsBrowserFilter.php b/components/ILIAS/Test/src/Questions/Presentation/QuestionsBrowserFilter.php index da9df304104c..8a79803341cf 100644 --- a/components/ILIAS/Test/src/Questions/Presentation/QuestionsBrowserFilter.php +++ b/components/ILIAS/Test/src/Questions/Presentation/QuestionsBrowserFilter.php @@ -88,7 +88,7 @@ private function getFields(FieldFactory $input): array 'parent_title' => [$input->text($this->lng->txt($this->parent_title)), true], 'taxonomy_title' => [$input->text($this->lng->txt('taxonomy_title')), true], 'taxonomy_node_title' => [$input->text($this->lng->txt('taxonomy_node_title')), true], - 'feedback' => [$input->select($this->lng->txt('feedback'), $yes_no_all_options), false], + 'feedback' => [$input->select($this->lng->txt('tst_feedback'), $yes_no_all_options), false], ]; } diff --git a/components/ILIAS/Test/src/Questions/Presentation/QuestionsBrowserTable.php b/components/ILIAS/Test/src/Questions/Presentation/QuestionsBrowserTable.php index 76115504f289..80cb7409eb49 100644 --- a/components/ILIAS/Test/src/Questions/Presentation/QuestionsBrowserTable.php +++ b/components/ILIAS/Test/src/Questions/Presentation/QuestionsBrowserTable.php @@ -99,7 +99,7 @@ public function getColumns(): array $this->lng->txt('qpl_settings_subtab_taxonomies') )->withIsOptional(false, true), 'feedback' => $column_factory->boolean( - $this->lng->txt('feedback'), + $this->lng->txt('tst_feedback'), $iconYes, $iconNo )->withIsOptional(true, false), @@ -124,10 +124,10 @@ public function getActions(): array private function getInsertAction(): TableAction { $url_builder = new URLBuilder($this->data_factory->uri( - ServerRequest::getUriFromGlobals() . $this->ctrl->getLinkTargetByClass( + ILIAS_HTTP_PATH . "/{$this->ctrl->getLinkTargetByClass( ilTestQuestionBrowserTableGUI::class, ilTestQuestionBrowserTableGUI::CMD_INSERT_QUESTIONS - ) + )}" )); [$url_builder, $row_id_token] = $url_builder->acquireParameters(['qlist'], 'q_id'); @@ -171,7 +171,7 @@ public function getTotalRowCount( ): int { $filter_data ??= []; $this->addFiltersToQuestionList($filter_data); - return $this->question_list->getTotalRowCount($filter_data, $additional_parameters); + return $this->question_list->getTotalRowCount($additional_viewcontrol_data, $filter_data, $additional_parameters); } public function loadRecords(array $filters = [], ?Order $order = null, ?Range $range = null): array diff --git a/components/ILIAS/Test/src/Questions/Presentation/QuestionsTable.php b/components/ILIAS/Test/src/Questions/Presentation/QuestionsTable.php index 9ee8926d9d58..810ba2f283b0 100644 --- a/components/ILIAS/Test/src/Questions/Presentation/QuestionsTable.php +++ b/components/ILIAS/Test/src/Questions/Presentation/QuestionsTable.php @@ -60,7 +60,8 @@ public function getTableComponent(): Ordering ->withActions($this->table_actions->getActions()) ->withRequest($this->request); - if ($this->test_obj->isRandomTest()) { + if ($this->test_obj->isRandomTest() + || $this->test_obj->evalTotalPersons() !== 0) { return $table->withOrderingDisabled(true); } diff --git a/components/ILIAS/Test/src/Questions/Presentation/QuestionsTableActions.php b/components/ILIAS/Test/src/Questions/Presentation/QuestionsTableActions.php index 46848edced91..2ba63254041c 100644 --- a/components/ILIAS/Test/src/Questions/Presentation/QuestionsTableActions.php +++ b/components/ILIAS/Test/src/Questions/Presentation/QuestionsTableActions.php @@ -78,22 +78,20 @@ public function setDisabledActions( || $this->is_in_test_with_results; return $row->withDisabledAction( - self::ACTION_DELETE, - $this->is_in_test_with_random_question_set && !$this->is_in_test_with_results - )->withDisabledAction(self::ACTION_COPY, $disable_default_actions) - ->withDisabledAction(self::ACTION_ADD_TO_POOL, $this->is_in_test_with_random_question_set) - ->withDisabledAction(self::ACTION_EDIT_QUESTION, $disable_default_actions) - ->withDisabledAction(self::ACTION_EDIT_PAGE, $disable_default_actions) - ->withDisabledAction( - self::ACTION_ADJUST, - $this->is_adjusting_questions_with_results_allowed && !$this->is_in_test_with_results - )->withDisabledAction(self::ACTION_FEEDBACK, $disable_default_actions) - ->withDisabledAction(self::ACTION_PRINT_ANSWERS, !$this->is_in_test_with_results) - ->withDisabledAction( - self::ACTION_DOWNLOAD_FILE_QUESTION_ANSWERS, - $row->getCellContent('type_tag') !== $this->lng->txt(\assFileUpload::class) - || !$this->questionrepository->questionHasAnswers((int) $row->getId()) - ); + self::ACTION_ADD_TO_POOL, + $this->is_in_test_with_random_question_set + )->withDisabledAction(self::ACTION_EDIT_QUESTION, $disable_default_actions) + ->withDisabledAction(self::ACTION_EDIT_PAGE, $disable_default_actions) + ->withDisabledAction( + self::ACTION_ADJUST, + !$this->is_adjusting_questions_with_results_allowed || !$this->is_in_test_with_results + )->withDisabledAction(self::ACTION_FEEDBACK, $disable_default_actions) + ->withDisabledAction(self::ACTION_PRINT_ANSWERS, !$this->is_in_test_with_results) + ->withDisabledAction( + self::ACTION_DOWNLOAD_FILE_QUESTION_ANSWERS, + $row->getCellContent('type_tag') !== $this->lng->txt(\assFileUpload::class) + || !$this->questionrepository->questionHasAnswers((int) $row->getId()) + ); } public function getOrderActionUrl(): URI @@ -120,13 +118,17 @@ public function getActions(): array self::ACTION_DOWNLOAD_FILE_QUESTION_ANSWERS => $ag('single', 'download_all_files', self::ACTION_DOWNLOAD_FILE_QUESTION_ANSWERS), ]; - if (!$this->test_obj->isRandomTest()) { + if (!$this->is_in_test_with_random_question_set + && (!$this->is_in_test_with_results || $this->is_adjusting_questions_with_results_allowed)) { $actions[self::ACTION_DELETE] = $ag('standard', 'delete', self::ACTION_DELETE) ->withAsync(); } + if (!$this->is_in_test_with_random_question_set && !$this->is_in_test_with_results) { + $actions[self::ACTION_COPY] = $ag('standard', 'copy', self::ACTION_COPY); + } + return $actions + [ - self::ACTION_COPY => $ag('standard', 'copy', self::ACTION_COPY), self::ACTION_ADD_TO_POOL => $ag('standard', 'copy_and_link_to_questionpool', self::ACTION_ADD_TO_POOL), self::ACTION_PRINT_QUESTIONS => $ag('multi', 'print', self::ACTION_PRINT_QUESTIONS) ]; @@ -155,6 +157,12 @@ public function handleCommand( switch ($cmd) { case self::ACTION_SAVE_ORDER: $protect_by_write_protection(); + + if ($this->is_in_test_with_random_question_set || $this->is_in_test_with_results) { + $this->tpl->setOnScreenMessage('failure', $this->lng->txt('questionlist_cannot_be_altered')); + return true; + } + $data = $get_table()->getTableComponent()->getData(); $this->test_obj->setQuestionOrder(array_flip($data), []); $this->tpl->setOnScreenMessage('success', $this->lng->txt('saved_successfully'), true); @@ -220,9 +228,17 @@ public function handleCommand( case self::ACTION_DELETE_CONFIRMED: $row_ids = $this->request->getParsedBody()['interruptive_items'] ?? []; if (array_filter($row_ids) === []) { - $this->tpl->setOnScreenMessage('failure', $this->lng->txt('msg_no_questions_selected')); + return true; } + + if ($this->is_in_test_with_random_question_set + || $this->is_in_test_with_results + && !$this->is_adjusting_questions_with_results_allowed) { + $this->tpl->setOnScreenMessage('failure', $this->lng->txt('questionlist_cannot_be_altered')); + return true; + } + $protect_by_write_protection(); if ($this->is_in_test_with_results) { $this->test_obj->removeQuestionsWithResults($row_ids); @@ -238,6 +254,12 @@ public function handleCommand( $this->tpl->setOnScreenMessage('failure', $this->lng->txt('msg_no_questions_selected')); return true; } + + if ($this->is_in_test_with_random_question_set || $this->is_in_test_with_results) { + $this->tpl->setOnScreenMessage('failure', $this->lng->txt('questionlist_cannot_be_altered')); + return true; + } + $protect_by_write_protection(); $this->test_obj->copyQuestions($row_ids); $this->tpl->setOnScreenMessage('success', $this->lng->txt('copy_questions_success'), true); diff --git a/components/ILIAS/Test/src/RequestDataCollector.php b/components/ILIAS/Test/src/RequestDataCollector.php index c06e798c5670..90efe1e23543 100755 --- a/components/ILIAS/Test/src/RequestDataCollector.php +++ b/components/ILIAS/Test/src/RequestDataCollector.php @@ -57,13 +57,13 @@ public function hasRefId(): bool public function getRefId(): int { - return $this->int("ref_id"); + return $this->int('ref_id'); } /** @return string[] */ public function getIds(): array { - return $this->strArray("id"); + return $this->strArray('id'); } public function hasQuestionId(): bool @@ -184,6 +184,15 @@ private function retrieveArrayFromPost(string $key, Transformation $transformati ); } + public function getRowIdParameter(string $key): string|int + { + return $this->get($key, $this->refinery->byTrying([ + $this->refinery->kindlyTo()->int(), + $this->refinery->kindlyTo()->string(), + $this->refinery->custom()->transformation(fn(array $v): string|int => $v[0]) + ])); + } + /** * @return array|string<int> */ diff --git a/components/ILIAS/Test/src/Results/Data/AttemptOverview.php b/components/ILIAS/Test/src/Results/Data/AttemptOverview.php index 937cc389a992..628f9d4a8101 100644 --- a/components/ILIAS/Test/src/Results/Data/AttemptOverview.php +++ b/components/ILIAS/Test/src/Results/Data/AttemptOverview.php @@ -133,11 +133,13 @@ public function getAsDescriptiveListing( UIFactory $ui_factory, array $environment ): DescriptiveListing { + $is_finished = $this->getStatusOfAttempt()->isFinished(); $items = [ - $lng->txt('tst_stat_result_resultspoints') => $this->reached_points - . ' ' . strtolower($lng->txt('of')) . ' ' . $this->available_points - . ' (' . sprintf('%2.2f', $this->getReachedPointsInPercent()) . ' %)', - $lng->txt('tst_stat_result_resultsmarks') => $this->mark?->getShortName() ?? '' + $lng->txt('tst_stat_result_resultspoints') => + "{$this->getReachedPoints()} " . strtolower($lng->txt('of')) . " {$this->getAvailablePoints()} (" . sprintf('%2.2f', $this->getReachedPointsInPercent()) . ' %)', + $lng->txt('tst_stat_result_resultsmarks') => $is_finished + ? $this->mark?->getShortName() ?? '-' + : '-' ]; return $ui_factory->listing()->descriptive( @@ -150,8 +152,8 @@ public function getAsDescriptiveListing( ?->setTimezone($environment['timezone']) ->format($environment['datetimeformat']) ?? '', $lng->txt('tst_nr_of_passes') => (string) $this->nr_of_attempts, - $lng->txt('scored_pass') => (string) ($this->scored_attempt + 1), - $lng->txt('tst_stat_result_rank_participant') => (string) $this->rank + $lng->txt('scored_pass') => $is_finished && $this->scored_attempt !== null ? (string) ($this->scored_attempt + 1) : '-', + $lng->txt('tst_stat_result_rank_participant') => $is_finished ? (string) $this->rank : '-', ] ); } diff --git a/components/ILIAS/Test/src/Settings/GlobalSettings/GlobalTestSettings.php b/components/ILIAS/Test/src/Settings/GlobalSettings/GlobalTestSettings.php index 09f856802ba8..28e98af25e99 100755 --- a/components/ILIAS/Test/src/Settings/GlobalSettings/GlobalTestSettings.php +++ b/components/ILIAS/Test/src/Settings/GlobalSettings/GlobalTestSettings.php @@ -33,7 +33,6 @@ public function __construct( private string $image_map_line_color = 'FF0000', private UserIdentifiers $user_identifier = UserIdentifiers::USER_ID, private int $skill_triggering_number_of_answers = 1, - private bool $export_essay_questions_as_html = false, private array $disabled_question_types = [], private bool $manual_scoring_enabled = false, private bool $adjusting_questions_with_results_allowed = false, @@ -122,18 +121,6 @@ public function withSkillTriggeringNumberOfAnswers(int $skill_triggering_number_ return $clone; } - public function getExportEssayQuestionsAsHtml(): bool - { - return $this->export_essay_questions_as_html; - } - - public function withExportEssayQuestionsAsHtml(bool $export_essay_questions_as_html): self - { - $clone = clone $this; - $clone->export_essay_questions_as_html = $export_essay_questions_as_html; - return $clone; - } - /** * @return array<int> */ @@ -203,7 +190,6 @@ static function ($vs) use ($all_question_types): self { substr($vs['general_settings']['image_map_line_color']->asHex(), 1), UserIdentifiers::from($vs['general_settings']['user_identifier']), $vs['general_settings']['skill_triggering_number_of_answers'], - $vs['general_settings']['export_essay_questions_as_html'], array_reduce( $all_question_types, static function (array $c, array $v) use ($vs): array { @@ -262,10 +248,7 @@ function (array $c, UserIdentifiers $v): array { 'skill_triggering_number_of_answers' => $ff->numeric($lng->txt('tst_skill_triggerings_num_req_answers')) ->withAdditionalTransformation($refinery->int()->isGreaterThan(0)) ->withByline($lng->txt('tst_skill_triggerings_num_req_answers_desc')) - ->withValue($this->skill_triggering_number_of_answers), - 'export_essay_questions_as_html' => $ff->checkbox($lng->txt('export_essay_qst_with_html')) - ->withByline($lng->txt('export_essay_qst_with_html_desc')) - ->withValue($this->export_essay_questions_as_html) + ->withValue($this->skill_triggering_number_of_answers) ], $lng->txt('settings') ); diff --git a/components/ILIAS/Test/src/Settings/GlobalSettings/Repository.php b/components/ILIAS/Test/src/Settings/GlobalSettings/Repository.php index a8d9164fe47d..2efe32d0164d 100644 --- a/components/ILIAS/Test/src/Settings/GlobalSettings/Repository.php +++ b/components/ILIAS/Test/src/Settings/GlobalSettings/Repository.php @@ -29,7 +29,6 @@ class Repository private const SETTINGS_KEY_IMAGE_MAP_LINE_COLOR = 'imap_line_color'; private const SETTINGS_KEY_UNIQUE_USER_IDENTIFIER = 'user_criteria'; private const SETTINGS_KEY_SKILL_TRIGGERING_NUMBER_OF_ANSWERS = 'ass_skl_trig_num_answ_barrier'; - private const SETTINGS_KEY_EXPORT_ESSAY_QUESTIONS_AS_HTML = 'export_essay_qst_with_html'; private const SETTINGS_KEY_DISABLED_QUESTION_TYPES = 'disabled_question_types'; private const SETTINGS_KEY_MANUAL_SCORING_ENABLED = 'manual_scoring'; private const SETTINGS_KEY_ADJUSTING_QUESTIONS_WITH_RESULTS_ALLOWED = 'assessment_adjustments_enabled'; @@ -81,10 +80,6 @@ private function buildGlobalTestSettings(): GlobalTestSettings $global_settings = $global_settings->withSkillTriggeringNumberOfAnswers((int) $skill_triggering_number_of_answers); } - if (($export_essay_questions_as_html = $this->settings_test->get(self::SETTINGS_KEY_EXPORT_ESSAY_QUESTIONS_AS_HTML)) !== null) { - $global_settings = $global_settings->withExportEssayQuestionsAsHtml($export_essay_questions_as_html === '1'); - } - if (($disabled_question_types_legacy = $this->settings_test->get(self::SETTINGS_KEY_DISABLED_QUESTION_TYPES_LEGACY)) !== null) { $this->migrateLegacyQuestionTypes($disabled_question_types_legacy); } @@ -118,7 +113,6 @@ public function storeGlobalSettings(GlobalTestSettings $global_settings): void $this->settings_test->set(self::SETTINGS_KEY_IMAGE_MAP_LINE_COLOR, $global_settings->getImageMapLineColor()); $this->settings_test->set(self::SETTINGS_KEY_UNIQUE_USER_IDENTIFIER, $global_settings->getUserIdentifier()->value); $this->settings_test->set(self::SETTINGS_KEY_SKILL_TRIGGERING_NUMBER_OF_ANSWERS, (string) $global_settings->getSkillTriggeringNumberOfAnswers()); - $this->settings_test->set(self::SETTINGS_KEY_EXPORT_ESSAY_QUESTIONS_AS_HTML, $global_settings->getExportEssayQuestionsAsHtml() ? '1' : '0'); $this->settings_test->set(self::SETTINGS_KEY_DISABLED_QUESTION_TYPES, implode(',', $global_settings->getDisabledQuestionTypes())); $this->settings_test->set(self::SETTINGS_KEY_MANUAL_SCORING_ENABLED, $global_settings->isManualScoringEnabled() ? '1' : '0'); $this->settings_test->set(self::SETTINGS_KEY_ADJUSTING_QUESTIONS_WITH_RESULTS_ALLOWED, $global_settings->isAdjustingQuestionsWithResultsAllowed() ? '1' : '0'); diff --git a/components/ILIAS/Test/src/Settings/MainSettings/SettingsFinishing.php b/components/ILIAS/Test/src/Settings/MainSettings/SettingsFinishing.php index 2f007ab539c2..3334bf32c421 100755 --- a/components/ILIAS/Test/src/Settings/MainSettings/SettingsFinishing.php +++ b/components/ILIAS/Test/src/Settings/MainSettings/SettingsFinishing.php @@ -33,7 +33,6 @@ class SettingsFinishing extends TestSettings implements Exportable public function __construct( protected bool $show_answer_overview = false, protected bool $concluding_remarks_enabled = false, - protected ?string $concluding_remarks_text = '', protected ?int $concluding_remarks_page_id = null, protected RedirectionModes $redirection_mode = RedirectionModes::NONE, protected ?string $redirection_url = null, @@ -160,7 +159,6 @@ public function toStorage(): array return [ 'enable_examview' => ['integer', (int) $this->getShowAnswerOverview()], 'showfinalstatement' => ['integer', (int) $this->getConcludingRemarksEnabled()], - 'finalstatement' => ['text', $this->getConcludingRemarksText()], 'concluding_remarks_page_id' => ['integer', $this->getConcludingRemarksPageId()], 'redirection_mode' => ['integer', $this->getRedirectionMode()->value], 'redirection_url' => ['text', $this->getRedirectionUrl()], @@ -220,11 +218,6 @@ public function withConcludingRemarksEnabled(bool $concluding_remarks_enabled): return $clone; } - public function getConcludingRemarksText(): string - { - return $this->concluding_remarks_text ?? ''; - } - public function getConcludingRemarksPageId(): ?int { return $this->concluding_remarks_page_id; @@ -266,7 +259,6 @@ public function toExport(): array return [ 'enable_examview' => $this->getShowAnswerOverview(), 'showfinalstatement' => $this->getConcludingRemarksEnabled(), - 'finalstatement' => $this->getConcludingRemarksText(), 'concluding_remarks_page_id' => $this->getConcludingRemarksPageId(), 'redirection_mode' => $this->getRedirectionMode()->value, 'redirection_url' => $this->getRedirectionUrl() @@ -278,7 +270,6 @@ public static function fromExport(array $data): static return new self( (bool) $data['enable_examview'], (bool) $data['showfinalstatement'], - $data['finalstatement'], $data['concluding_remarks_page_id'], RedirectionModes::from($data['redirection_mode']), $data['redirection_url'] diff --git a/components/ILIAS/Test/src/Settings/MainSettings/SettingsIntroduction.php b/components/ILIAS/Test/src/Settings/MainSettings/SettingsIntroduction.php index 2730875d8599..6ef0bded0d66 100755 --- a/components/ILIAS/Test/src/Settings/MainSettings/SettingsIntroduction.php +++ b/components/ILIAS/Test/src/Settings/MainSettings/SettingsIntroduction.php @@ -31,7 +31,6 @@ class SettingsIntroduction extends TestSettings implements Exportable { public function __construct( protected bool $introduction_enabled = false, - protected ?string $introduction_text = null, protected ?int $introduction_page_id = null, protected bool $conditions_checkbox_enabled = false, ) { @@ -61,7 +60,6 @@ public function toStorage(): array { return [ 'intro_enabled' => ['integer', (int) $this->getIntroductionEnabled()], - 'introduction' => ['text', $this->getIntroductionText()], 'introduction_page_id' => ['integer', $this->getIntroductionPageId()], 'conditions_checkbox_enabled' => ['integer', (int) $this->getExamConditionsCheckboxEnabled()], ]; @@ -89,17 +87,6 @@ public function withIntroductionEnabled(bool $introduction_enabled): self return $clone; } - public function getIntroductionText(): string - { - return $this->introduction_text ?? ''; - } - public function withIntroductionText(?string $introduction_text): self - { - $clone = clone $this; - $clone->introduction_text = $introduction_text; - return $clone; - } - public function getIntroductionPageId(): ?int { return $this->introduction_page_id; @@ -126,7 +113,6 @@ public function toExport(): array { return [ 'intro_enabled' => $this->getIntroductionEnabled(), - 'introduction' => $this->getIntroductionText(), 'introduction_page_id' => $this->getIntroductionPageId(), 'conditions_checkbox_enabled' => $this->getExamConditionsCheckboxEnabled() ]; @@ -136,7 +122,6 @@ public static function fromExport(array $data): static { return new self( (bool) $data['intro_enabled'], - $data['introduction'], $data['introduction_page_id'], (bool) $data['conditions_checkbox_enabled'], ); diff --git a/components/ILIAS/Test/src/Settings/MainSettings/SettingsQuestionBehaviour.php b/components/ILIAS/Test/src/Settings/MainSettings/SettingsQuestionBehaviour.php index d37458f3bd82..cffe0b59e240 100755 --- a/components/ILIAS/Test/src/Settings/MainSettings/SettingsQuestionBehaviour.php +++ b/components/ILIAS/Test/src/Settings/MainSettings/SettingsQuestionBehaviour.php @@ -311,7 +311,7 @@ private function getShuffleAndLockAnswersConstraint( return $refinery->custom()->constraint( function ($vs): bool { if ($vs['shuffle_questions'] === true - && $vs['lock_answers']['lock_answer_on_next_question']) { + && ($vs['lock_answers']['lock_answer_on_next_question'] ?? $this->getLockAnswerOnNextQuestionEnabled())) { return false; } return true; diff --git a/components/ILIAS/Test/src/Settings/MainSettings/SettingsTestBehaviour.php b/components/ILIAS/Test/src/Settings/MainSettings/SettingsTestBehaviour.php index 417e8dcfc99f..b322d130f013 100755 --- a/components/ILIAS/Test/src/Settings/MainSettings/SettingsTestBehaviour.php +++ b/components/ILIAS/Test/src/Settings/MainSettings/SettingsTestBehaviour.php @@ -249,8 +249,7 @@ static function (?array $vs): array { $sub_inputs_time_limit_for_completion['time_limit_for_completion_value'] = $f ->numeric( - $lng->txt('tst_processing_time_duration'), - $lng->txt('tst_processing_time_desc') + $lng->txt('tst_processing_time_duration') ) ->withRequired(true) ->withAdditionalTransformation($refinery->int()->isGreaterThan(0)) diff --git a/components/ILIAS/Test/src/Settings/MainSettings/class.SettingsMainGUI.php b/components/ILIAS/Test/src/Settings/MainSettings/class.SettingsMainGUI.php index a69fbb1be55d..5d97d7d39117 100755 --- a/components/ILIAS/Test/src/Settings/MainSettings/class.SettingsMainGUI.php +++ b/components/ILIAS/Test/src/Settings/MainSettings/class.SettingsMainGUI.php @@ -32,10 +32,8 @@ use ILIAS\UI\Component\Modal\Interruptive as InterruptiveModal; use ILIAS\UI\Component\Input\Field\Section; use ILIAS\UI\Component\Input\Field\Checkbox; -use ILIAS\UI\Component\Input\Field\OptionalGroup; use ILIAS\UI\Component\Input\Container\Form\Standard as StandardForm; use ILIAS\Refinery\Factory as Refinery; -use ILIAS\Refinery\Transformation as TransformationInterface; use Psr\Http\Message\ServerRequestInterface; use ILIAS\Refinery\Constraint; @@ -74,7 +72,6 @@ class SettingsMainGUI extends TestSettingsGUI public function __construct( private readonly \ilGlobalTemplateInterface $tpl, - private readonly \ilToolbarGUI $toolbar, private readonly \ilCtrlInterface $ctrl, private readonly \ilAccessHandler $access, private readonly \ilLanguage $lng, @@ -127,64 +124,12 @@ public function executeCommand() $this->object_data_cache->deleteCachedEntry($this->test_object->getId()); } - private function showOldIntroduction(): void - { - $this->toolbar->addComponent( - $this->ui_factory->link()->standard( - $this->lng->txt('back'), - $this->ctrl->getLinkTargetByClass(self::class, 'showForm') - ) - ); - - $this->tpl->setContent( - ilRTE::_replaceMediaObjectImageSrc( - $this->main_settings->getIntroductionSettings()->getIntroductionText(), - 1 - ) - ); - } - - private function showOldConcludingRemarks(): void - { - $this->toolbar->addComponent( - $this->ui_factory->link()->standard( - $this->lng->txt('back'), - $this->ctrl->getLinkTargetByClass(self::class, 'showForm') - ) - ); - - $this->tpl->setContent( - ilRTE::_replaceMediaObjectImageSrc( - $this->main_settings->getFinishingSettings()->getConcludingRemarksText(), - 1 - ) - ); - } - private function showForm(?StandardForm $form = null, ?InterruptiveModal $modal = null): void { if ($form === null) { $form = $this->buildForm(); } - if ($this->main_settings->getIntroductionSettings()->getIntroductionText() !== '') { - $this->toolbar->addComponent( - $this->ui_factory->link()->standard( - $this->lng->txt('show_old_introduction'), - $this->ctrl->getLinkTargetByClass(self::class, 'showOldIntroduction') - ) - ); - } - - if ($this->main_settings->getFinishingSettings()->getConcludingRemarksText() !== '') { - $this->toolbar->addComponent( - $this->ui_factory->link()->standard( - $this->lng->txt('show_old_concluding_remarks'), - $this->ctrl->getLinkTargetByClass(self::class, 'showOldConcludingRemarks') - ) - ); - } - $rendered_modal = ''; if ($modal !== null) { $rendered_modal = $this->ui_renderer->render($modal); @@ -347,11 +292,9 @@ private function getFormConstraints(): Constraint { return $this->refinery->custom()->constraint( function (array $vs): bool { - if ($vs[self::PARTICIPANTS_FUNCTIONALITY_SETTINGS_LABEL]['postponed_questions_behaviour'] === true - && $vs[self::QUESTION_BEHAVIOUR_SETTINGS_LABEL]['lock_answers']['lock_answer_on_next_question']) { - return false; - } - return true; + return $vs[self::PARTICIPANTS_FUNCTIONALITY_SETTINGS_LABEL]['postponed_questions_behaviour'] === false + || !($vs[self::QUESTION_BEHAVIOUR_SETTINGS_LABEL]['lock_answers']['lock_answer_on_next_question'] + ?? $this->main_settings->getQuestionBehaviourSettings()->getLockAnswerOnNextQuestionEnabled()); }, $this->lng->txt('tst_settings_conflict_postpone_and_lock') ); diff --git a/components/ILIAS/Test/src/Settings/ScoreReporting/SettingsResultSummary.php b/components/ILIAS/Test/src/Settings/ScoreReporting/SettingsResultSummary.php index 58d3cd141592..be067e6d41a9 100755 --- a/components/ILIAS/Test/src/Settings/ScoreReporting/SettingsResultSummary.php +++ b/components/ILIAS/Test/src/Settings/ScoreReporting/SettingsResultSummary.php @@ -293,7 +293,7 @@ public static function fromExport(array $data): static { return (new self()) ->withScoreReporting(ScoreReportingTypes::from($data['score_reporting'])) - ->withReportingDate($data['reporting_date'] !== 0 ? new \DateTimeImmutable($data['reporting_date']) : null) + ->withReportingDate($data['reporting_date'] ? new \DateTimeImmutable($data['reporting_date']) : null) ->withShowGradingStatusEnabled((bool) $data['show_grading_status']) ->withShowGradingMarkEnabled((bool) $data['show_grading_mark']) ->withShowPassDetails((bool) $data['show_pass_details']) diff --git a/components/ILIAS/Test/src/Settings/ScoreReporting/class.SettingsScoringGUI.php b/components/ILIAS/Test/src/Settings/ScoreReporting/class.SettingsScoringGUI.php index e95736a65ea2..3329e634c195 100755 --- a/components/ILIAS/Test/src/Settings/ScoreReporting/class.SettingsScoringGUI.php +++ b/components/ILIAS/Test/src/Settings/ScoreReporting/class.SettingsScoringGUI.php @@ -112,7 +112,6 @@ public function executeCommand() $this->saveForm(); break; case self::CMD_CONFIRMED_RECALC: - $this->saveForm(); $settings = $this->buildForm() ->withRequest($this->getRelayedRequest()) ->getData(); diff --git a/components/ILIAS/Test/src/Settings/SettingsFactory.php b/components/ILIAS/Test/src/Settings/SettingsFactory.php index 69bab2336dc7..d5d85cc9b3f5 100755 --- a/components/ILIAS/Test/src/Settings/SettingsFactory.php +++ b/components/ILIAS/Test/src/Settings/SettingsFactory.php @@ -50,7 +50,6 @@ public function createMainSettingsFromDBRow(array $row): MainSettings ), new SettingsIntroduction( (bool) $row['intro_enabled'], - $row['introduction'], $row['introduction_page_id'], (bool) $row['conditions_checkbox_enabled'], ), @@ -103,7 +102,6 @@ public function createMainSettingsFromDBRow(array $row): MainSettings new SettingsFinishing( (bool) $row['enable_examview'], (bool) $row['showfinalstatement'], - $row['finalstatement'], $row['concluding_remarks_page_id'], RedirectionModes::tryFrom($row['redirection_mode']) ?? RedirectionModes::NONE, $row['redirection_url'] diff --git a/components/ILIAS/Test/src/Setup/MoveSettingsTemplatesMigration.php b/components/ILIAS/Test/src/Setup/MoveSettingsTemplatesMigration.php index e3cac43860f4..43111599c4ed 100644 --- a/components/ILIAS/Test/src/Setup/MoveSettingsTemplatesMigration.php +++ b/components/ILIAS/Test/src/Setup/MoveSettingsTemplatesMigration.php @@ -83,7 +83,7 @@ public function step(Environment $environment): void ); // Migrate the legacy json decoded to a row in 'tst_mark' - $raw_marks = json_decode($row['marks'], true); + $raw_marks = json_decode($row['marks'] ?? '[]', true) ?? []; foreach ($raw_marks as $mark_data) { $mark_id = $this->db->nextId('tst_mark'); $this->db->insert( diff --git a/components/ILIAS/Test/src/Setup/MoveTestSettingsMigration.php b/components/ILIAS/Test/src/Setup/MoveTestSettingsMigration.php index a7998d906cb6..8e8e286e4591 100644 --- a/components/ILIAS/Test/src/Setup/MoveTestSettingsMigration.php +++ b/components/ILIAS/Test/src/Setup/MoveTestSettingsMigration.php @@ -21,6 +21,7 @@ namespace ILIAS\Test\Setup; use ILIAS\Setup; +use ILIAS\Setup\CLI\IOWrapper; use ILIAS\Setup\Environment; use ILIAS\Setup\Migration; @@ -29,6 +30,7 @@ class MoveTestSettingsMigration implements Migration use TestSettingsSetup; private \ilDBInterface $db; + private IOWrapper $io; public function getLabel(): string { @@ -48,6 +50,7 @@ public function getPreconditions(Environment $environment): array public function prepare(Environment $environment): void { $this->db = $environment->getResource(Setup\Environment::RESOURCE_DATABASE); + $this->io = $environment->getResource(Setup\Environment::RESOURCE_ADMIN_INTERACTION); } public function step(Environment $environment): void @@ -67,6 +70,12 @@ public function step(Environment $environment): void if ($column_name === 'reporting_date') { $value = $this->convertLegacyDate($value); } + if ($column_name === 'nr_of_tries' && $value > 127) { + $this->io->inform( + "ID {$settings_id}: Tried to set nr_of_tries to {$value}, which is too high. Setting it to 127 instead." + ); + $value = 127; + } // Convert legacy null values to 0 if ($column_def['type'] === \ilDBConstants::T_INTEGER && !$this->columnIsNullable($column_def)) { diff --git a/components/ILIAS/Test/src/Setup/Test10DBUpdateSteps.php b/components/ILIAS/Test/src/Setup/Test10DBUpdateSteps.php index 15f8527b7195..4d9078800d9f 100644 --- a/components/ILIAS/Test/src/Setup/Test10DBUpdateSteps.php +++ b/components/ILIAS/Test/src/Setup/Test10DBUpdateSteps.php @@ -349,6 +349,10 @@ public function step_5(): void } if (!$this->db->primaryExistsByFields('tst_addtime', ['user_fi', 'test_fi'])) { + $this->db->manipulate( + 'DELETE FROM tst_addtime WHERE test_fi = 0 OR user_fi = 0' + ); + $this->db->addPrimaryKey('tst_addtime', ['user_fi', 'test_fi']); } } diff --git a/components/ILIAS/Test/src/Setup/Test11DBUpdateSteps.php b/components/ILIAS/Test/src/Setup/Test11DBUpdateSteps.php index 0cdd9e93c20b..c6ea64f5c469 100644 --- a/components/ILIAS/Test/src/Setup/Test11DBUpdateSteps.php +++ b/components/ILIAS/Test/src/Setup/Test11DBUpdateSteps.php @@ -147,4 +147,29 @@ public function step_2(): void ); } } + + public function step_3(): void + { + $columns = ['reporting_date', 'starting_time', 'ending_time']; + foreach ($columns as $column) { + $this->db->modifyTableColumn('tst_test_settings', $column, ['length' => 8]); + } + } + + public function step_4(): void + { + $table = 'qpl_a_cloze'; + $column = 'answertext'; + if ($this->db->tableExists($table) && $this->db->tableColumnExists($table, $column)) { + $this->db->manipulate("UPDATE {$table} SET {$column} = '' WHERE {$column} IS NULL"); + $this->db->modifyTableColumn($table, $column, ['default' => '', 'notnull' => true]); + } + } + + public function step_5(): void + { + $this->db->manipulate( + 'DELETE FROM settings WHERE module="assessment" AND keyword="export_essay_qst_with_html"' + ); + } } diff --git a/components/ILIAS/Test/src/Setup/TestSettingsSetup.php b/components/ILIAS/Test/src/Setup/TestSettingsSetup.php index cc220d5da5f4..39b59337e4a8 100644 --- a/components/ILIAS/Test/src/Setup/TestSettingsSetup.php +++ b/components/ILIAS/Test/src/Setup/TestSettingsSetup.php @@ -22,7 +22,8 @@ const T_BOOLEAN = ['type' => \ilDBConstants::T_INTEGER, 'length' => 1, 'default' => 0]; const T_TINYINT = ['type' => \ilDBConstants::T_INTEGER, 'length' => 4, 'default' => 0]; -const T_BIGINT = ['type' => \ilDBConstants::T_INTEGER, 'default' => 0]; +const T_INT = ['type' => \ilDBConstants::T_INTEGER, 'default' => 0]; +const T_BIGINT = ['type' => \ilDBConstants::T_INTEGER, 'default' => 0, 'length' => 8]; const LEGACY_STORAGE_DATE_FORMAT = 'YmdHis'; @@ -38,7 +39,7 @@ trait TestSettingsSetup 'fixed_participants' => [T_BOOLEAN, 'fixed_participants'], 'suspend_test_allowed' => [T_BOOLEAN, 'ShowCancel'], 'anonymity' => [T_BOOLEAN, 'Anonymity'], - 'nr_of_tries' => [['type' => \ilDBConstants::T_INTEGER, 'length' => 8, 'default' => 0], 'NrOfTries'], + 'nr_of_tries' => [T_TINYINT, 'NrOfTries'], 'use_previous_answers' => [T_BOOLEAN, 'use_previous_answers'], 'title_output' => [T_TINYINT, 'TitleOutput'], 'processing_time' => [['type' => \ilDBConstants::T_TEXT, 'length' => 8, 'default' => null], 'ProcessingTime'], @@ -51,12 +52,12 @@ trait TestSettingsSetup 'pass_scoring' => [T_TINYINT, 'PassScoring'], 'password' => [['type' => \ilDBConstants::T_TEXT, 'length' => 20, 'default' => null], 'password'], 'results_presentation' => [['type' => \ilDBConstants::T_INTEGER, 'default' => 3], 'ResultsPresentation'], - 'usr_pass_overview_mode' => [T_BIGINT, 'ListOfQuestionsSettings'], + 'usr_pass_overview_mode' => [T_INT, 'ListOfQuestionsSettings'], 'show_marker' => [T_BOOLEAN, 'ShowMarker'], - 'kiosk' => [T_BIGINT, 'Kiosk'], + 'kiosk' => [T_INT, 'Kiosk'], 'finalstatement' => [['type' => \ilDBConstants::T_TEXT, 'length' => 4000, 'default' => null], null], 'showfinalstatement' => [T_BOOLEAN, 'ShowFinalStatement'], - 'exportsettings' => [T_BIGINT, null], + 'exportsettings' => [T_INT, null], 'print_bs_with_res' => [['type' => \ilDBConstants::T_INTEGER, 'length' => 1, 'default' => 0], 'show_solution_list_comparison'], 'highscore_enabled' => [T_BOOLEAN, 'highscore_enabled'], 'highscore_anon' => [T_BOOLEAN, 'highscore_anon'], @@ -66,10 +67,10 @@ trait TestSettingsSetup 'highscore_wtime' => [T_BOOLEAN, 'highscore_wtime'], 'highscore_own_table' => [T_BOOLEAN, 'highscore_own_table'], 'highscore_top_table' => [T_BOOLEAN, 'highscore_top_table'], - 'highscore_top_num' => [T_BIGINT, 'highscore_top_num'], + 'highscore_top_num' => [T_INT, 'highscore_top_num'], 'specific_feedback' => [T_BOOLEAN, 'SpecificAnswerFeedback'], 'autosave' => [T_BOOLEAN, 'autosave'], - 'autosave_ival' => [T_BIGINT, 'autosave_ival'], + 'autosave_ival' => [T_INT, 'autosave_ival'], 'pass_deletion_allowed' => [T_BOOLEAN, 'pass_deletion_allowed'], 'redirection_mode' => [T_TINYINT, 'redirection_mode'], 'redirection_url' => [['type' => \ilDBConstants::T_TEXT, 'length' => 4000, 'default' => null], 'redirection_url'], diff --git a/components/ILIAS/Test/templates/default/tpl.il_as_tst_archive_page.html b/components/ILIAS/Test/templates/default/tpl.il_as_tst_archive_page.html new file mode 100644 index 000000000000..93849b38cc50 --- /dev/null +++ b/components/ILIAS/Test/templates/default/tpl.il_as_tst_archive_page.html @@ -0,0 +1,6 @@ +<h1>{NAME}</h1> +<p> + <!-- BEGIN matriculation -->{MATRICULATION_LABEL}: {MATRICULATION}<br /><!-- END matriculation --> + {PASS_FINISH_DATE_LABEL}: {PASS_FINISH_DATE} +</p> +{OVERVIEW} \ No newline at end of file diff --git a/components/ILIAS/Test/templates/default/tpl.il_as_tst_output.html b/components/ILIAS/Test/templates/default/tpl.il_as_tst_output.html index 9ae03f5f804a..08e4c91c322d 100755 --- a/components/ILIAS/Test/templates/default/tpl.il_as_tst_output.html +++ b/components/ILIAS/Test/templates/default/tpl.il_as_tst_output.html @@ -97,4 +97,4 @@ <!-- BEGIN nav_while_edit_modal -->{NAV_WHILE_EDIT_MODAL}<!-- END nav_while_edit_modal --> </div> </div> -<div id="autosavemessage" class="tstAutosaveMsg alert alert-info"></div> +<div id="autosavemessage" role="status" aria-live="polite" class="tstAutosaveMsg alert alert-info"></div> diff --git a/components/ILIAS/Test/templates/default/tpl.il_as_tst_print_questions_preview.html b/components/ILIAS/Test/templates/default/tpl.il_as_tst_print_questions_preview.html index 3eb627fbe917..5ee5153b7d38 100755 --- a/components/ILIAS/Test/templates/default/tpl.il_as_tst_print_questions_preview.html +++ b/components/ILIAS/Test/templates/default/tpl.il_as_tst_print_questions_preview.html @@ -1,5 +1,4 @@ <h1>{PRINT_TEST}</h1> -<h3>{TITLE}</h3> <p>{TXT_PRINT_DATE}:&nbsp;{VALUE_PRINT_DATE}&nbsp;&nbsp;{TXT_MAXIMUM_POINTS}:&nbsp;{VALUE_MAXIMUM_POINTS}</p> <!-- BEGIN question --> <div class="questionPrintview clearfix"> diff --git a/components/ILIAS/Test/templates/default/tpl.il_as_tst_questions.html b/components/ILIAS/Test/templates/default/tpl.il_as_tst_questions.html index 0588c2e93369..cc6b34c23f30 100755 --- a/components/ILIAS/Test/templates/default/tpl.il_as_tst_questions.html +++ b/components/ILIAS/Test/templates/default/tpl.il_as_tst_questions.html @@ -1,3 +1,6 @@ +<!-- BEGIN pax_info_message --> +{PAX_INFO_MESSAGE} +<!-- END pax_info_message --> <form name="form_questions" method="POST" action="{ACTION_QUESTION_FORM}"> <!-- BEGIN move --> <input type="hidden" name="move_{MOVE_COUNTER}" value="{MOVE_VALUE}"> diff --git a/components/ILIAS/Test/tests/Certificate/CertificateTestTemplateDeleteActionTest.php b/components/ILIAS/Test/tests/Certificate/CertificateTestTemplateDeleteActionTest.php index c268f1e05385..de1d4b8138b2 100644 --- a/components/ILIAS/Test/tests/Certificate/CertificateTestTemplateDeleteActionTest.php +++ b/components/ILIAS/Test/tests/Certificate/CertificateTestTemplateDeleteActionTest.php @@ -21,32 +21,16 @@ namespace ILIAS\Test\Certificate; use PHPUnit\Framework\TestCase; -use ILIAS\Course\Certificate\CertificateTestTemplateDeleteAction; -/** - * @author Niels Theen <ntheen@databay.de> - */ class CertificateTestTemplateDeleteActionTest extends TestCase { - public function testDelete(): void + public function testDeletionIsDelegatedToWrappedAction(): void { - $delete_action = $this->getMockBuilder(\ilCertificateDeleteAction::class) - ->getMock(); - + $delete_action = $this->createMock(\ilCertificateDeleteAction::class); $delete_action ->expects($this->once()) ->method('delete'); - $object_helper = $this->getMockBuilder(\ilCertificateObjectHelper::class) - ->getMock(); - - $object = $this->getMockBuilder(\ilObjTest::class) - ->disableOriginalConstructor() - ->getMock(); - - $object_helper->method('getInstanceByObjId') - ->willReturn($object); - $action = new CertificateTestTemplateDeleteAction( $delete_action ); diff --git a/components/ILIAS/Test/tests/ExportImport/ExportFixedQuestionSetTest.php b/components/ILIAS/Test/tests/ExportImport/ExportFixedQuestionSetTest.php index cd87aeac6e75..7266ca3cab9d 100755 --- a/components/ILIAS/Test/tests/ExportImport/ExportFixedQuestionSetTest.php +++ b/components/ILIAS/Test/tests/ExportImport/ExportFixedQuestionSetTest.php @@ -39,7 +39,7 @@ protected function setUp(): void $this->addGlobal_resourceStorage(); $this->testObj = new ExportFixedQuestionSet( - $this->createMock(\ILIAS\Language\Language::class), + $this->createMock(\ilLanguage::class), $this->createMock(\ilDBInterface::class), $this->createMock(\ilBenchmark::class), $this->createMock(\ILIAS\Test\Logging\TestLogger::class), @@ -48,7 +48,8 @@ protected function setUp(): void $this->createMock(\ILIAS\TestQuestionPool\Questions\GeneralQuestionPropertiesRepository::class), $this->createMock(\ILIAS\FileDelivery\Services::class), $this->createMock(\ilObjTest::class), - $DIC['resource_storage'] + $DIC['resource_storage'], + $DIC['ilUser'] ); } diff --git a/components/ILIAS/Test/tests/ExportImport/ExportRandomQuestionSetTest.php b/components/ILIAS/Test/tests/ExportImport/ExportRandomQuestionSetTest.php index 6c10d8527cf0..acb3bbbaffd8 100755 --- a/components/ILIAS/Test/tests/ExportImport/ExportRandomQuestionSetTest.php +++ b/components/ILIAS/Test/tests/ExportImport/ExportRandomQuestionSetTest.php @@ -38,7 +38,7 @@ protected function setUp(): void $this->addGlobal_resourceStorage(); $this->testObj = new ExportRandomQuestionSet( - $this->createMock(\ILIAS\Language\Language::class), + $this->createMock(\ilLanguage::class), $this->createMock(\ilDBInterface::class), $this->createmOck(\ilBenchmark::class), $this->createMock(\ILIAS\Test\Logging\TestLogger::class), @@ -47,7 +47,8 @@ protected function setUp(): void $this->createMock(\ILIAS\TestQuestionPool\Questions\GeneralQuestionPropertiesRepository::class), $this->createMock(\ILIAS\FileDelivery\Services::class), $this->getTestObjMock(), - $DIC['resource_storage'] + $DIC['resource_storage'], + $DIC['ilUser'] ); } diff --git a/components/ILIAS/Test/tests/Scoring/Settings/ScoreSettingsTest.php b/components/ILIAS/Test/tests/Scoring/Settings/ScoreSettingsTest.php index 88132d15e0fb..c43aa12e1d76 100755 --- a/components/ILIAS/Test/tests/Scoring/Settings/ScoreSettingsTest.php +++ b/components/ILIAS/Test/tests/Scoring/Settings/ScoreSettingsTest.php @@ -291,7 +291,7 @@ public function testScoreSettingsSectionSummary(): void $i1_1_4_1 = $this->getFormWrappedHtml( 'date-time-field-input', - 'tst_reporting_date<span class="asterisk" aria-label="required_field">*</span>', + 'tst_reporting_date<span class="sr-only">required_field</span><span class="asterisk" aria-hidden="true">*</span>', '<div class="c-input-group"> <input id="id_6" type="datetime-local" class="c-field-datetime" /> </div>', @@ -303,7 +303,7 @@ public function testScoreSettingsSectionSummary(): void $i1_1_4 = $this->getFormWrappedHtml( 'group-field-input', - '<input type="radio" id="id_5" value="3" /><span>tst_results_access_date</span><span class="asterisk" aria-label="required_field">*</span>', + '<input type="radio" id="id_5" value="3" /><span>tst_results_access_date</span><span class="sr-only">required_field</span><span class="asterisk" aria-hidden="true">*</span>', $i1_1_4_1, 'tst_results_access_date_desc', 'id_5', @@ -313,7 +313,7 @@ public function testScoreSettingsSectionSummary(): void $i1_1 = $this->getFormWrappedHtml( 'switchable-group-field-input', - 'tst_results_access_setting<span class="asterisk" aria-label="required_field">*</span>', + 'tst_results_access_setting<span class="sr-only">required_field</span><span class="asterisk" aria-hidden="true">*</span>', $i1_1_1 . $i1_1_2 . $i1_1_3 . $i1_1_4, null, null, @@ -441,7 +441,7 @@ public function testScoreSettingsSectionGamification(): void $fields = $this->getFormWrappedHtml( 'radio-field-input', - 'tst_highscore_mode<span class="asterisk" aria-label="required_field">*</span>', + 'tst_highscore_mode<span class="sr-only">required_field</span><span class="asterisk" aria-hidden="true">*</span>', '<div class="c-field-radio"> <div class="c-field-radio__item"> <input type="radio" id="id_2_1_opt" value="1" /><label for="id_2_1_opt">tst_highscore_own_table</label><div class="c-input__help-byline">tst_highscore_own_table_description</div> @@ -460,7 +460,7 @@ public function testScoreSettingsSectionGamification(): void ); $fields .= $this->getFormWrappedHtml( 'numeric-field-input', - 'tst_highscore_top_num<span class="asterisk" aria-label="required_field">*</span>', + 'tst_highscore_top_num<span class="sr-only">required_field</span><span class="asterisk" aria-hidden="true">*</span>', '<input id="id_3" type="number" step="1" value="10" class="c-field-number" />', 'tst_highscore_top_num_description', 'id_3', diff --git a/components/ILIAS/Test/tests/Settings/MainSettings/SettingsFinishingTest.php b/components/ILIAS/Test/tests/Settings/MainSettings/SettingsFinishingTest.php index a7e5401b4168..ecfae3c19ff2 100644 --- a/components/ILIAS/Test/tests/Settings/MainSettings/SettingsFinishingTest.php +++ b/components/ILIAS/Test/tests/Settings/MainSettings/SettingsFinishingTest.php @@ -49,18 +49,6 @@ public function testGetAndWithConcludingRemarksEnabled(bool $io): void $this->assertEquals($io, $settings_finishing->getConcludingRemarksEnabled()); } - #[\PHPUnit\Framework\Attributes\DataProvider('getAndWithConcludingRemarksTextDataProvider')] - public function testGetAndWithConcludingRemarksText(?string $io): void - { - $settings_finishing = new SettingsFinishing( - false, - false, - $io - ); - - $this->assertEquals($io, $settings_finishing->getConcludingRemarksText()); - } - public static function getAndWithConcludingRemarksTextDataProvider(): array { return [ diff --git a/components/ILIAS/Test/tests/Settings/MainSettings/SettingsIntroductionTest.php b/components/ILIAS/Test/tests/Settings/MainSettings/SettingsIntroductionTest.php index 16c5d4f5c21c..addfce942cd7 100644 --- a/components/ILIAS/Test/tests/Settings/MainSettings/SettingsIntroductionTest.php +++ b/components/ILIAS/Test/tests/Settings/MainSettings/SettingsIntroductionTest.php @@ -39,15 +39,6 @@ public static function getAndWithIntroductionEnabledDataProvider(): array ]; } - #[\PHPUnit\Framework\Attributes\DataProvider('getAndWithIntroductionTextDataProvider')] - public function testGetAndWithIntroductionText(string $io): void - { - $settings_introduction = (new SettingsIntroduction())->withIntroductionText($io); - - $this->assertInstanceOf(SettingsIntroduction::class, $settings_introduction); - $this->assertEquals($io, $settings_introduction->getIntroductionText()); - } - public static function getAndWithIntroductionTextDataProvider(): array { return [ diff --git a/components/ILIAS/Test/tests/ilTestResultsToXMLTest.php b/components/ILIAS/Test/tests/ilTestResultsToXMLTest.php index 7dc6c6ecd4cf..9cb7405aab4f 100755 --- a/components/ILIAS/Test/tests/ilTestResultsToXMLTest.php +++ b/components/ILIAS/Test/tests/ilTestResultsToXMLTest.php @@ -32,11 +32,12 @@ protected function setUp(): void parent::setUp(); $this->testObj = new ilTestResultsToXML( - 0, + $this->createMock(ilObjTest::class), $DIC['ilDB'], $DIC['resource_storage'], - '', - false + $DIC['ilUser'], + $DIC['lng'], + '' ); } diff --git a/components/ILIAS/TestQuestionPool/classes/QTI/class.ilQTIItem.php b/components/ILIAS/TestQuestionPool/classes/QTI/class.ilQTIItem.php index c18ab199ac1a..b953b2ef3fad 100755 --- a/components/ILIAS/TestQuestionPool/classes/QTI/class.ilQTIItem.php +++ b/components/ILIAS/TestQuestionPool/classes/QTI/class.ilQTIItem.php @@ -94,6 +94,9 @@ class ilQTIItem protected ?string $iliasSourceNic = null; protected array $response = []; + private array $unit_categories = []; + private array $units = []; + public function setIdent(string $a_ident): void { $this->ident = $a_ident; @@ -284,6 +287,64 @@ public function determineQuestionType(): ?string return $this->questiontype; } + public function addUnitCategory(string $label, array $unit_category): void + { + $this->unit_categories[$label] = $unit_category; + } + + public function getUnitCategories(): array + { + return $this->unit_categories; + } + + /** + * @return assFormulaQuestionUnitCategory[] + */ + public function getUnitCategoryObjets(): array + { + $unit_categories = []; + foreach ($this->getUnitCategories() as $key => $unit_category) { + $formula_question_unit_category = new assFormulaQuestionUnitCategory(); + $formula_question_unit_category->setCategory($key); + $formula_question_unit_category->setId((int) $unit_category['id']); + $formula_question_unit_category->setQuestionFi((int) $unit_category['question_fi']); + $unit_categories[$key] = $formula_question_unit_category; + } + + return $unit_categories; + } + + public function addUnit(string $label, array $unit): void + { + $this->units[$label] = $unit; + } + + public function getUnits(): array + { + return $this->units; + } + + /** + * @return assFormulaQuestionUnit[] + */ + public function getUnitObjects(): array + { + $units = []; + foreach ($this->getUnits() as $key => $unit) { + $formula_question_unit = new assFormulaQuestionUnit(); + $formula_question_unit->setUnit($key); + $formula_question_unit->setId((int) $unit['id']); + $formula_question_unit->setSequence((int) $unit['sequence']); + $formula_question_unit->setFactor((float) $unit['factor']); + $formula_question_unit->setBaseUnit((int) $unit['base_unit']); + $formula_question_unit->setBaseunitTitle($unit['base_unit_title']); + $formula_question_unit->setCategory((int) $unit['category']); + $units[$key] = $formula_question_unit; + } + + return $units; + } + public function setAuthor(string $a_author): void { $this->author = $a_author; diff --git a/components/ILIAS/TestQuestionPool/classes/QTI/class.ilQTIParser.php b/components/ILIAS/TestQuestionPool/classes/QTI/class.ilQTIParser.php index 119aac226649..8ce58906eade 100755 --- a/components/ILIAS/TestQuestionPool/classes/QTI/class.ilQTIParser.php +++ b/components/ILIAS/TestQuestionPool/classes/QTI/class.ilQTIParser.php @@ -188,13 +188,16 @@ class ilQTIParser extends ilSaxParser protected QuestionFiles $questionfiles; + private array $attributes = []; + public function __construct( private readonly string $importdir, ?string $a_xml_file, int $a_mode = self::IL_MO_PARSE_QTI, int $a_qpl_id = 0, array $import_idents = [], - private array $mappings = [] + private array $mappings = [], + bool $throw_errors = false ) { /** @var ILIAS\DI\Container $DIC */ global $DIC; @@ -211,6 +214,7 @@ public function __construct( } $this->depth = $this->createParserStorage(); + $this->setThrowException($throw_errors); } public function isIgnoreItemsEnabled(): bool @@ -330,6 +334,9 @@ public function handlerParseBeginTag($a_xml_parser, string $a_name, array $a_att case "qtimetadatafield": $this->metadata = ["label" => "", "entry" => ""]; break; + case "fieldentry": + $this->attributes = $a_attribs; + break; case "flow": $this->flow++; break; @@ -623,6 +630,19 @@ public function handlerParseEndTag($a_xml_parser, string $a_name): void $this->assessment->addQtiMetadata($this->metadata); } $this->metadata = ["label" => "", "entry" => ""]; + break; + case "fieldentry": + $label = $this->metadata["label"]; + if ($label === "unit_categories") { + $this->item?->addUnitCategory($this->metadata["entry"], $this->attributes); + break; + } + + if ($label === "units") { + $this->item?->addUnit($this->metadata["entry"], $this->attributes); + break; + } + break; case "flow": $this->flow--; diff --git a/components/ILIAS/TestQuestionPool/classes/class.assClozeTest.php b/components/ILIAS/TestQuestionPool/classes/class.assClozeTest.php index 4e74cfa497a3..fa6520069c81 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.assClozeTest.php +++ b/components/ILIAS/TestQuestionPool/classes/class.assClozeTest.php @@ -311,24 +311,24 @@ protected function saveClozeTextGapRecordToDb( $this->db->manipulateF( 'INSERT INTO qpl_a_cloze (answer_id, question_fi, gap_id, answertext, points, aorder, cloze_type, gap_size) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)', [ - 'integer', - 'integer', - 'integer', - 'text', - 'float', - 'integer', - 'text', - 'integer' + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_TEXT, + ilDBConstants::T_FLOAT, + ilDBConstants::T_INTEGER, + ilDBConstants::T_TEXT, + ilDBConstants::T_INTEGER ], [ $next_id, $this->getId(), $key, - strlen($item->getAnswertext()) ? $item->getAnswertext() : '', + $item->getAnswertext(), $item->getPoints(), $item->getOrder(), $gap->getType(), - (int) $gap->getGapSize() + $gap->getGapSize() ] ); } @@ -342,24 +342,24 @@ protected function saveClozeSelectGapRecordToDb( $this->db->manipulateF( 'INSERT INTO qpl_a_cloze (answer_id, question_fi, gap_id, answertext, points, aorder, cloze_type, shuffle) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)', [ - 'integer', - 'integer', - 'integer', - 'text', - 'float', - 'integer', - 'text', - 'text' + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_TEXT, + ilDBConstants::T_FLOAT, + ilDBConstants::T_INTEGER, + ilDBConstants::T_TEXT, + ilDBConstants::T_TEXT ], [ $next_id, $this->getId(), $key, - strlen($item->getAnswertext()) ? $item->getAnswertext() : '', + $item->getAnswertext(), $item->getPoints(), $item->getOrder(), $gap->getType(), - ($gap->getShuffle()) ? '1' : '0' + $gap->getShuffle() ? '1' : '0' ] ); } @@ -375,32 +375,32 @@ protected function saveClozeNumericGapRecordToDb( $this->db->manipulateF( 'INSERT INTO qpl_a_cloze (answer_id, question_fi, gap_id, answertext, points, aorder, cloze_type, lowerlimit, upperlimit, gap_size) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)', [ - 'integer', - 'integer', - 'integer', - 'text', - 'float', - 'integer', - 'text', - 'text', - 'text', - 'integer' + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_INTEGER, + ilDBConstants::T_TEXT, + ilDBConstants::T_FLOAT, + ilDBConstants::T_INTEGER, + ilDBConstants::T_TEXT, + ilDBConstants::T_TEXT, + ilDBConstants::T_TEXT, + ilDBConstants::T_INTEGER ], [ $next_id, $this->getId(), $key, - strlen($item->getAnswertext()) ? $item->getAnswertext() : '', + $item->getAnswertext(), $item->getPoints(), $item->getOrder(), $gap->getType(), - ($eval->e($item->getLowerBound()) !== false && strlen( - $item->getLowerBound() - ) > 0) ? $item->getLowerBound() : $item->getAnswertext(), - ($eval->e($item->getUpperBound()) !== false && strlen( - $item->getUpperBound() - ) > 0) ? $item->getUpperBound() : $item->getAnswertext(), - (int) $gap->getGapSize() + ($eval->e($item->getLowerBound()) !== false && ($item->getLowerBound() ?? '') !== '') + ? $item->getLowerBound() + : $item->getAnswertext(), + ($eval->e($item->getUpperBound()) !== false && ($item->getUpperBound() ?? '') !== '') + ? $item->getUpperBound() + : $item->getAnswertext(), + $gap->getGapSize() ] ); } diff --git a/components/ILIAS/TestQuestionPool/classes/class.assErrorTextGUI.php b/components/ILIAS/TestQuestionPool/classes/class.assErrorTextGUI.php index c8994f6222bd..4fa6450c0f7b 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.assErrorTextGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/class.assErrorTextGUI.php @@ -237,7 +237,7 @@ public function getSolutionOutput( bool $show_question_text = true, bool $show_inline_feedback = true ): string { - $user_solutions = $this->getUsersSolutionFromPreviewOrDatabase($active_id, $pass); + $user_solutions = $this->getUsersSolutionFromPreviewOrDatabase($active_id, $pass, true); return $this->renderSolutionOutput( $user_solutions, $active_id, @@ -273,7 +273,7 @@ public function renderSolutionOutput( $selections = [ 'user' => $user_solutions ? $user_solutions : - $this->getUsersSolutionFromPreviewOrDatabase($active_id, $pass) + $this->getUsersSolutionFromPreviewOrDatabase($active_id, $pass, true) ]; $selections['best'] = $this->object->getBestSelection(); @@ -355,7 +355,7 @@ public function getTestOutput( bool $show_specific_inline_feedback = false ): string { $selections = [ - 'user' => $this->getUsersSolutionFromPreviewOrDatabase($active_id, $pass) + 'user' => $this->getUsersSolutionFromPreviewOrDatabase($active_id, $pass, false) ]; return $this->outQuestionPage( @@ -393,15 +393,20 @@ private function generateQuestionOutput($selections, $show_question_only): strin return $this->getILIASPage($questionoutput); } - private function getUsersSolutionFromPreviewOrDatabase(int $active_id = 0, ?int $pass = null): array - { + private function getUsersSolutionFromPreviewOrDatabase( + int $active_id = 0, + ?int $pass = null, + bool $only_authorized = false + ): array { if (is_object($this->getPreviewSession())) { return (array) $this->getPreviewSession()->getParticipantsSolution(); } if ($active_id > 0) { $selections = []; - $solutions = $this->object->getSolutionValues($active_id, $pass ?? 0, true); + $solutions = $only_authorized + ? $this->object->getSolutionValues($active_id, $pass ?? 0, true) + : $this->object->getUserSolutionPreferingIntermediate($active_id, $pass); foreach ($solutions as $solution) { $selections[] = $solution['value1']; } diff --git a/components/ILIAS/TestQuestionPool/classes/class.assFileUploadGUI.php b/components/ILIAS/TestQuestionPool/classes/class.assFileUploadGUI.php index 57d7e2401bbd..c8aa531e24f3 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.assFileUploadGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/class.assFileUploadGUI.php @@ -176,10 +176,7 @@ public function getSolutionOutput( // get the solution of the user for the active pass or from the last pass if allowed $template = new ilTemplate("tpl.il_as_qpl_fileupload_output_solution.html", true, true, "components/ILIAS/TestQuestionPool"); - $solutionvalue = ""; if (($active_id > 0) && (!$show_correct_solution)) { - $solutions = $this->object->getSolutionValues($active_id, $pass); - $files = ($show_manual_scoring) ? $this->object->getUploadedFilesForWeb($active_id, $pass) : $this->object->getUploadedFiles($active_id, $pass); $table_gui = new assFileUploadFileTableGUI($this, 'gotoquestion'); $table_gui->setTitle( diff --git a/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestion.php b/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestion.php index faa83bc2488e..f47d721ccda8 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestion.php +++ b/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestion.php @@ -127,6 +127,9 @@ public function addResultUnit( $this->resultunits[$result->getResult()][$unit->getId()] = $unit; } + /** + * @return assFormulaQuestionUnit[] + */ public function getResultUnits(assFormulaQuestionResult $result): array { if (!isset($this->resultunits[$result->getResult()])) { @@ -327,7 +330,7 @@ public function substituteVariables(array $userdata, bool $graphicalOutput = fal $text = $this->getQuestion(); foreach ($this->fetchAllVariables($this->getQuestion()) as $varObj) { - if (isset($userdata[$varObj->getVariable()]) && strlen($userdata[$varObj->getVariable()])) { + if (isset($userdata[$varObj->getVariable()]) && $userdata[$varObj->getVariable()] !== '') { $varObj->setValue($userdata[$varObj->getVariable()]); } @@ -335,7 +338,7 @@ public function substituteVariables(array $userdata, bool $graphicalOutput = fal $val = ''; if ($varObj->getValue() !== null) { - $val = (strlen($varObj->getValue()) > 8) ? strtoupper(sprintf("%e", $varObj->getValue())) : $varObj->getValue(); + $val = (strlen((string) $varObj->getValue()) > 8) ? strtoupper(sprintf("%e", $varObj->getValue())) : $varObj->getValue(); } $text = preg_replace('/\$' . substr($varObj->getVariable(), 1) . '(?![0-9]+)/', $val . ' ' . $unit . '\1', $text); @@ -387,13 +390,11 @@ public function substituteVariables(array $userdata, bool $graphicalOutput = fal if (is_array($userdata)) { foreach ($result_units as $unit) { if (isset($userdata[$result]["unit"]) && $userdata[$result]["unit"] == $unit->getId()) { - $units = $unit->getUnit(); + $units = $unit->getSanitizedUnit(); } } - } else { - if ($resObj->getUnit()) { - $units = $resObj->getUnit()->getUnit(); - } + } elseif ($resObj->getUnit()) { + $units = $resObj->getUnit()->getSanitizedUnit(); } } else { $units = '<select name="result_' . $result . '_unit">'; @@ -407,7 +408,7 @@ public function substituteVariables(array $userdata, bool $graphicalOutput = fal $units .= ' selected="selected"'; } } - $units .= '>' . $unit->getUnit() . '</option>'; + $units .= '>' . $unit->getSanitizedUnit() . '</option>'; } $units .= '</select>'; } @@ -450,7 +451,7 @@ public function substituteVariables(array $userdata, bool $graphicalOutput = fal $user_value = ''; if (is_array($userdata) && is_array($userdata[$result])) { if (isset($userdata[$result]["unit"]) && $userdata[$result]["unit"] > 0) { - $resunit = $this->getUnitrepository()->getUnit($userdata[$result]["unit"]); + $resunit = $this->getUnitrepository()->getUnit((int) $userdata[$result]["unit"]); } if (isset($userdata[$result]["value"])) { @@ -847,7 +848,11 @@ public function calculateReachedPointsFromPreviewSession(ilAssQuestionPreviewSes $points = 0; foreach ($this->getResults() as $result) { - $unit_id = $user_solution[$result->getResult() . '_unit'] ?? null; + $result_unit = "{$result->getResult()}_unit"; + $unit_id = isset($user_solution[$result_unit]) && is_numeric($user_solution[$result_unit]) + ? (int) $user_solution[$result_unit] + : null; + $points += $result->getReachedPoints( $this->getVariables(), $this->getResults(), @@ -888,7 +893,7 @@ public function saveWorkingData( function () use ($answer, $active_id, $pass, $authorized) { foreach ($answer as $key => $value) { $matches = null; - if (preg_match('/^result_(\$r\d+)$/', $key, $matches) !== false) { + if (preg_match('/^result_(\$r\d+)$/', $key, $matches) !== false && $matches !== []) { $queryResult = "SELECT solution_id FROM tst_solutions WHERE active_fi = %s AND pass = %s AND question_fi = %s AND authorized = %s AND " . $this->db->like('value1', 'clob', $matches[1]); if ($this->getStep() !== null) { @@ -1092,30 +1097,27 @@ public function getBestSolution(array $solutions): array if (!array_key_exists($matches[1], $user_solution)) { $user_solution[$matches[1]] = []; } - $user_solution[$matches[1]]['unit'] = $solution_value['value2']; + $user_solution[$matches[1]]['unit'] = (int) $solution_value['value2']; } } foreach ($this->getResults() as $result) { $resVal = $result->calculateFormula($this->getVariables(), $this->getResults(), $this->getId(), false); - if (is_object($result->getUnit())) { - $user_solution[$result->getResult()]['unit'] = $result->getUnit()->getId(); + $unit = $result->getUnit(); + if ($unit instanceof assFormulaQuestionUnit) { + $user_solution[$result->getResult()]['unit'] = $unit->getId(); $user_solution[$result->getResult()]['value'] = $resVal; - } elseif ($result->getUnit() === null) { + } elseif ($unit === null) { $unit_factor = 1; // there is no fix result_unit, any "available unit" is accepted - $available_units = $result->getAvailableResultUnits(parent::getId()); + $available_units = $result->getAvailableResultUnits($this->getId()); $result_name = $result->getResult(); - $check_unit = false; - if (array_key_exists($result_name, $available_units) && - $available_units[$result_name] !== null) { - $check_unit = in_array($user_solution[$result_name]['unit'] ?? null, $available_units[$result_name]); - } - - if ($check_unit == true) { - //get unit-factor + if ( + isset($available_units[$result_name]) + && in_array($user_solution[$result_name]['unit'] ?? null, $available_units[$result_name]) + ) { $unit_factor = assFormulaQuestionUnit::lookupUnitFactor($user_solution[$result_name]['unit']); } diff --git a/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestionGUI.php b/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestionGUI.php index bc0ffdd27698..d56216e7f4ad 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestionGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestionGUI.php @@ -612,16 +612,13 @@ public function editQuestion( $custom_errors = true; } - $int_precision = $form->getItemByPostVar('intprecision_' . $variable->getVariable()); - if (!$variable->isIntPrecisionValid($int_precision?->getValue(), $min_range_value, $max_range_value)) { - $int_precision?->setAlert($this->lng->txt('err_divider_too_big_specific')); - $custom_errors = true; - continue; - } - $decimal_spots = $form->getItemByPostVar('precision_' . $variable->getVariable()); + $int_precision = $form->getItemByPostVar('intprecision_' . $variable->getVariable()); if ($decimal_spots instanceof ilFormPropertyGUI && $decimal_spots->getValue() === 0) { - $int_precision?->setAlert($this->lng->txt('err_division')); + $txt = !$variable->isIntPrecisionValid($int_precision?->getValue(), $min_range_value, $max_range_value) + ? 'err_divider_too_big_specific' + : 'err_division'; + $int_precision?->setAlert($this->lng->txt($txt)); $custom_errors = true; } } @@ -982,7 +979,7 @@ public function getTestOutput( if (!array_key_exists($matches[1], $user_solution)) { $user_solution[$matches[1]] = []; } - $user_solution[$matches[1]][['unit']] = $solution_value['value2']; + $user_solution[$matches[1]]['unit'] = $solution_value['value2']; } if (preg_match('/^(\$r\d+)/', $solution_value['value1'], $matches) && !isset($user_solution[$matches[1]]['result_type'])) { $user_solution[$matches[1]]['result_type'] = assFormulaQuestionResult::getResultTypeByQstId($this->object->getId(), $solution_value['value1']); diff --git a/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestionUnit.php b/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestionUnit.php index 0fff97ff7458..959c8362192a 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestionUnit.php +++ b/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestionUnit.php @@ -40,7 +40,7 @@ public function initFormArray(array $data): void $this->factor = (float) $data['factor']; $this->baseunit = (int) $data['baseunit_fi']; $this->baseunit_title = $data['baseunit_title'] ?? null; - $this->category = (int) $data['category']; + $this->category = (int) $data['category_fi']; $this->sequence = (int) $data['sequence']; } @@ -64,6 +64,11 @@ public function getUnit(): string return $this->unit; } + public function getSanitizedUnit(): string + { + return htmlspecialchars($this->getUnit(), ENT_QUOTES | ENT_SUBSTITUTE, 'utf-8'); + } + public function setSequence(int $sequence): void { $this->sequence = $sequence; @@ -108,6 +113,11 @@ public function getBaseunitTitle(): ?string return $this->baseunit_title; } + public function getSanitizedBaseunitTitle(): ?string + { + return $this->sanitizeString($this->getBaseunitTitle() ?? ''); + } + public function setCategory(int $category): void { $this->category = $category; @@ -122,14 +132,11 @@ public function getDisplayString(): string { global $DIC; - $lng = $DIC->language(); - $unit = $this->getUnit(); - if (strcmp('-qpl_qst_formulaquestion_' . $unit . '-', $lng->txt('qpl_qst_formulaquestion_' . $unit)) !== 0) { - $unit = $lng->txt('qpl_qst_formulaquestion_' . $unit); - } - - return $unit; + $txt = $DIC->language()->txt("qpl_qst_formulaquestion_{$unit}"); + return strcmp("-qpl_qst_formulaquestion_{$unit}-", $txt) !== 0 + ? $this->sanitizeString($txt) + : $this->getSanitizedUnit(); } public static function lookupUnitFactor(int $a_unit_id): float @@ -147,4 +154,9 @@ public static function lookupUnitFactor(int $a_unit_id): float return (float) $row['factor']; } + + private function sanitizeString(string $string): string + { + return htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'utf-8'); + } } diff --git a/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestionUnitCategory.php b/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestionUnitCategory.php index 254ab0886d81..963c0d7637e5 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestionUnitCategory.php +++ b/components/ILIAS/TestQuestionPool/classes/class.assFormulaQuestionUnitCategory.php @@ -56,6 +56,11 @@ public function getCategory(): string return $this->category; } + public function getSanitizedCategory(): string + { + return $this->sanitizeString($this->getCategory()); + } + public function setQuestionFi(int $question_fi): void { $this->question_fi = $question_fi; @@ -70,13 +75,15 @@ public function getDisplayString(): string { global $DIC; - $lng = $DIC->language(); - $category = $this->getCategory(); - if (strcmp('-qpl_qst_formulaquestion_' . $category . '-', $lng->txt('qpl_qst_formulaquestion_' . $category)) !== 0) { - $category = $lng->txt('qpl_qst_formulaquestion_' . $category); - } + $txt = $DIC->language()->txt("qpl_qst_formulaquestion_{$category}"); + return strcmp("-qpl_qst_formulaquestion_{$category}-", $txt) !== 0 + ? $this->sanitizeString($txt) + : $this->getSanitizedCategory(); + } - return $category; + private function sanitizeString(string $string): string + { + return htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'utf-8'); } } diff --git a/components/ILIAS/TestQuestionPool/classes/class.assOrderingQuestionGUI.php b/components/ILIAS/TestQuestionPool/classes/class.assOrderingQuestionGUI.php index 54e55ae42d2a..2605757d2f4f 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.assOrderingQuestionGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/class.assOrderingQuestionGUI.php @@ -257,7 +257,6 @@ public function populateAnswerSpecificFormPart(ilPropertyFormGUI $form): ilPrope $form->addItem($header); $orderingElementInput = $this->object->buildOrderingElementInputGui(); - $orderingElementInput->setStylingDisabled($this->isRenderPurposePrintPdf()); $this->object->initOrderingElementAuthoringProperties($orderingElementInput); $list = $this->object->getOrderingElementList(); @@ -397,7 +396,6 @@ protected function buildNestingForm() $form->addItem($header); $orderingElementInput = $this->object->buildNestedOrderingElementInputGui(); - $orderingElementInput->setStylingDisabled($this->isRenderPurposePrintPdf()); $this->object->initOrderingElementAuthoringProperties($orderingElementInput); diff --git a/components/ILIAS/TestQuestionPool/classes/class.assQuestionGUI.php b/components/ILIAS/TestQuestionPool/classes/class.assQuestionGUI.php index 264f8d30348b..10eccce369b9 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.assQuestionGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/class.assQuestionGUI.php @@ -1102,7 +1102,7 @@ public function suggestedsolution(bool $save = false): void $options = $this->getTypeOptions(); $solution_type = $this->ctrl->getCmd() === 'cancelSuggestedSolution' - ? $solution->getType() + ? $solution?->getType() : $this->request_data_collector->string('solutiontype'); if ($solution_type === SuggestedSolution::TYPE_FILE && ($solution === null || $solution->getType() !== SuggestedSolution::TYPE_FILE) @@ -1603,12 +1603,16 @@ protected function getAdditionalEditQuestionCommands(): array protected function addTab_QuestionFeedback(ilTabsGUI $tabs): void { - $tabCommands = self::getCommandsFromClassConstants(ilAssQuestionFeedbackEditingGUI::class); - $this->ctrl->setParameterByClass(ilAssQuestionFeedbackEditingGUI::class, 'q_id', $this->object->getId()); - $tabLink = $this->ctrl->getLinkTargetByClass(ilAssQuestionFeedbackEditingGUI::class, ilAssQuestionFeedbackEditingGUI::CMD_SHOW); - $tabs->addTarget('feedback', $tabLink, $tabCommands, $this->ctrl->getCmdClass(), ''); + $tabs->addTab( + 'feedback', + $this->lng->txt('tst_feedback'), + $this->ctrl->getLinkTargetByClass( + ilAssQuestionFeedbackEditingGUI::class, + ilAssQuestionFeedbackEditingGUI::CMD_SHOW + ) + ); } protected function addTab_Question(ilTabsGUI $tabs_gui): void diff --git a/components/ILIAS/TestQuestionPool/classes/class.ilAssFileUploadUploadsExporter.php b/components/ILIAS/TestQuestionPool/classes/class.ilAssFileUploadUploadsExporter.php index 65929f97361c..0eee94544d66 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.ilAssFileUploadUploadsExporter.php +++ b/components/ILIAS/TestQuestionPool/classes/class.ilAssFileUploadUploadsExporter.php @@ -212,10 +212,9 @@ private function collectUploadedFiles(array $solution_data, ilTestParticipantDat $dir .= $this->getPassSubDirName($file['pass']) . '/'; // IRSS Version - if ($file['value2'] === 'rid') { - $revision = $this->irss->manage()->getCurrentRevision( - $rid = $this->irss->manage()->find($file['value1']) - ); + if ($file['value2'] === 'rid' + && ($rid = $this->irss->manage()->find($file['value1'])) !== null) { + $revision = $this->irss->manage()->getCurrentRevision($rid); $streams[$dir . $revision->getTitle()] = $this->irss->consume()->stream($rid)->getStream(); continue; } diff --git a/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionFeedbackEditingGUI.php b/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionFeedbackEditingGUI.php index 0f11796add46..77ed7bf43230 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionFeedbackEditingGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionFeedbackEditingGUI.php @@ -166,10 +166,6 @@ private function isSyncAfterSaveRequired(): bool return false; } - if ($this->question_obj->isAdditionalContentEditingModePageObject()) { - return false; - } - if (!$this->question_gui->needsSyncQuery()) { return false; } diff --git a/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionList.php b/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionList.php index 3e2ffeb6959e..31c6edfb9bae 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionList.php +++ b/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionList.php @@ -671,7 +671,7 @@ private function isActiveQuestionType(array $questionData): bool ->isActive(); } - public function getDataArrayForQuestionId(int $questionId) + public function getDataArrayForQuestionId(int $questionId): array { return $this->questions[$questionId]; } diff --git a/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSkillAssignmentList.php b/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSkillAssignmentList.php index 7dc7b4f836f2..3bad9658c401 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSkillAssignmentList.php +++ b/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSkillAssignmentList.php @@ -16,100 +16,55 @@ * *********************************************************************/ -/** - * @author Björn Heyser <bheyser@databay.de> - * @version $Id$ - * - * @package components\ILIAS/Test - */ +declare(strict_types=1); + class ilAssQuestionSkillAssignmentList { - /** - * @var ilDBInterface - */ - private $db; + private ?int $parent_obj_id = null; - /** - * @var integer - */ - private $parentObjId; + private array $assignments = []; - /** - * @var array - */ - private $assignments; + private array $num_assigns_by_skill = []; - /** - * @var array - */ - private $numAssignsBySkill; + private array $max_points_by_skill = []; - /** - * @var array - */ - private $maxPointsBySkill; + private ?int $question_id_filter = null; - /** - * @var integer - */ - private $questionIdFilter; - - public function __construct(ilDBInterface $db) - { - $this->db = $db; - - $this->parentObjId = null; - $this->assignments = []; - $this->numAssignsBySkill = []; - $this->maxPointsBySkill = []; - $this->questionIdFilter = null; + public function __construct( + private readonly ilDBInterface $db + ) { } - /** - * @param int $parentObjId - */ - public function setParentObjId($parentObjId): void + public function setParentObjId(?int $parent_obj_id): void { - $this->parentObjId = $parentObjId; + $this->parent_obj_id = $parent_obj_id; } - /** - * @return int - */ public function getParentObjId(): ?int { - return $this->parentObjId; + return $this->parent_obj_id; } - /** - * @return int - */ public function getQuestionIdFilter(): ?int { - return $this->questionIdFilter; + return $this->question_id_filter; } - /** - * @param int $questionIdFilter - */ - public function setQuestionIdFilter($questionIdFilter): void + public function setQuestionIdFilter(?int $question_id_filter): void { - $this->questionIdFilter = $questionIdFilter; + $this->question_id_filter = $question_id_filter; } public function reset(): void { $this->assignments = []; - $this->numAssignsBySkill = []; - $this->maxPointsBySkill = []; + $this->num_assigns_by_skill = []; + $this->max_points_by_skill = []; } public function addAssignment(ilAssQuestionSkillAssignment $assignment): void { - if (!isset($this->assignments[$assignment->getQuestionId()])) { - $this->assignments[$assignment->getQuestionId()] = []; - } - + $this->assignments[$assignment->getQuestionId()] ??= []; $this->assignments[$assignment->getQuestionId()][] = $assignment; } @@ -117,22 +72,16 @@ private function incrementNumAssignsBySkill(ilAssQuestionSkillAssignment $assign { $key = $this->buildSkillKey($assignment->getSkillBaseId(), $assignment->getSkillTrefId()); - if (!isset($this->numAssignsBySkill[$key])) { - $this->numAssignsBySkill[$key] = 0; - } - - $this->numAssignsBySkill[$key]++; + $this->num_assigns_by_skill[$key] ??= 0; + $this->num_assigns_by_skill[$key]++; } private function incrementMaxPointsBySkill(ilAssQuestionSkillAssignment $assignment): void { $key = $this->buildSkillKey($assignment->getSkillBaseId(), $assignment->getSkillTrefId()); - if (!isset($this->maxPointsBySkill[$key])) { - $this->maxPointsBySkill[$key] = 0; - } - - $this->maxPointsBySkill[$key] += $assignment->getMaxSkillPoints(); + $this->max_points_by_skill[$key] ??= 0; + $this->max_points_by_skill[$key] += $assignment->getMaxSkillPoints(); } public function loadFromDb(): void @@ -149,7 +98,7 @@ public function loadFromDb(): void $assignment = $this->buildSkillQuestionAssignmentByArray($row); if ($assignment->hasEvalModeBySolution()) { - $assignment->loadComparisonExpressions(); // db query + $assignment->loadComparisonExpressions(); } $this->addAssignment($assignment); @@ -160,22 +109,16 @@ public function loadFromDb(): void private function getWhereConditions(): string { - $conditions = [ - 'obj_fi = ' . $this->db->quote($this->getParentObjId(), 'integer') - ]; + $conditions = ["obj_fi = {$this->db->quote($this->getParentObjId(), ilDBConstants::T_INTEGER)}"]; if ($this->getQuestionIdFilter()) { - $conditions[] = 'question_fi = ' . $this->db->quote($this->getQuestionIdFilter(), 'integer'); + $conditions[] = "question_fi = {$this->db->quote($this->getQuestionIdFilter(), ilDBConstants::T_INTEGER)}"; } return implode(' AND ', $conditions); } - /** - * @param array $data - * @return ilAssQuestionSkillAssignment - */ - private function buildSkillQuestionAssignmentByArray($data): ilAssQuestionSkillAssignment + private function buildSkillQuestionAssignmentByArray(array $data): ilAssQuestionSkillAssignment { $assignment = new ilAssQuestionSkillAssignment($this->db); @@ -189,45 +132,40 @@ private function buildSkillQuestionAssignmentByArray($data): ilAssQuestionSkillA return $assignment; } - private function buildSkillKey($skillBaseId, $skillTrefId): string + private function buildSkillKey(int $skill_base_id, int $skill_tref_id): string { - return $skillBaseId . ':' . $skillTrefId; + return "{$skill_base_id}:{$skill_tref_id}"; } public function loadAdditionalSkillData(): void { - foreach ($this->assignments as $assignmentsByQuestion) { - foreach ($assignmentsByQuestion as $assignment) { + foreach ($this->assignments as $assignments_by_question) { + foreach ($assignments_by_question as $assignment) { $assignment->loadAdditionalSkillData(); } } } /** - * @param $questionId - * @return array of ilAssQuestionSkillAssignment + * @return ilAssQuestionSkillAssignment[] */ - public function getAssignmentsByQuestionId($questionId): array + public function getAssignmentsByQuestionId(int $question_id): array { - if (!isset($this->assignments[$questionId])) { - return []; - } - - return $this->assignments[$questionId]; + return $this->assignments[$question_id] ?? []; } - public function isAssignedToQuestionId($skillBaseId, $skillTrefId, $questionId): bool + public function isAssignedToQuestionId(int $skill_base_id, int $skill_tref_id, int $question_id): bool { - if (!isset($this->assignments[$questionId])) { + if (!isset($this->assignments[$question_id])) { return false; } - foreach ($this->assignments[$questionId] as $assignment) { - if ($assignment->getSkillBaseId() != $skillBaseId) { + foreach ($this->assignments[$question_id] as $assignment) { + if ($assignment->getSkillBaseId() !== $skill_base_id) { continue; } - if ($assignment->getSkillTrefId() != $skillTrefId) { + if ($assignment->getSkillTrefId() !== $skill_tref_id) { continue; } @@ -241,40 +179,38 @@ public function getUniqueAssignedSkills(): array { $skills = []; - foreach ($this->assignments as $assignmentsByQuestion) { - foreach ($assignmentsByQuestion as $assignment) { + foreach ($this->assignments as $assignments_by_question) { + foreach ($assignments_by_question as $assignment) { $key = $this->buildSkillKey($assignment->getSkillBaseId(), $assignment->getSkillTrefId()); - if (!isset($skills[$key])) { - $skills[$key] = [ - 'skill' => new ilBasicSkill($assignment->getSkillBaseId()), - 'skill_base_id' => $assignment->getSkillBaseId(), - 'skill_tref_id' => $assignment->getSkillTrefId(), - 'skill_title' => $assignment->getSkillTitle(), - 'skill_path' => $assignment->getSkillPath(), - 'num_assigns' => $this->getNumAssignsBySkill( - $assignment->getSkillBaseId(), - $assignment->getSkillTrefId() - ), - 'max_points' => $this->getMaxPointsBySkill( - $assignment->getSkillBaseId(), - $assignment->getSkillTrefId() - ) - ]; - } + $skills[$key] ??= [ + 'skill' => new ilBasicSkill($assignment->getSkillBaseId()), + 'skill_base_id' => $assignment->getSkillBaseId(), + 'skill_tref_id' => $assignment->getSkillTrefId(), + 'skill_title' => $assignment->getSkillTitle(), + 'skill_path' => $assignment->getSkillPath(), + 'num_assigns' => $this->getNumAssignsBySkill( + $assignment->getSkillBaseId(), + $assignment->getSkillTrefId() + ), + 'max_points' => $this->getMaxPointsBySkill( + $assignment->getSkillBaseId(), + $assignment->getSkillTrefId() + ) + ]; } } return $skills; } - public function isAssignedSkill($skillBaseId, $skillTrefId): bool + public function isAssignedSkill(int $skill_base_id, int $skill_tref_id): bool { foreach ($this->getUniqueAssignedSkills() as $assignedSkill) { - if ($assignedSkill['skill_base_id'] != $skillBaseId) { + if ($assignedSkill['skill_base_id'] !== $skill_base_id) { continue; } - if ($assignedSkill['skill_tref_id'] == $skillTrefId) { + if ($assignedSkill['skill_tref_id'] === $skill_tref_id) { return true; } } @@ -282,20 +218,22 @@ public function isAssignedSkill($skillBaseId, $skillTrefId): bool return false; } - public function getNumAssignsBySkill($skillBaseId, $skillTrefId) + public function getNumAssignsBySkill(int $skill_base_id, int $skill_tref_id) { - return $this->numAssignsBySkill[$this->buildSkillKey($skillBaseId, $skillTrefId)] ?? null; + return $this->num_assigns_by_skill[$this->buildSkillKey($skill_base_id, $skill_tref_id)] ?? null; } - public function getMaxPointsBySkill($skillBaseId, $skillTrefId) + public function getMaxPointsBySkill(int $skill_base_id, int $skill_tref_id) { - return $this->maxPointsBySkill[$this->buildSkillKey($skillBaseId, $skillTrefId)] ?? null; + return $this->max_points_by_skill[$this->buildSkillKey($skill_base_id, $skill_tref_id)] ?? null; } public function hasSkillsAssignedLowerThanBarrier(): bool { - $global_barrier = (new ilObjTestFolder())->getGlobalSettingsRepository() - ->getGlobalSettings()->getSkillTriggeringNumberOfAnswers(); + $global_barrier = (new ilObjTestFolder()) + ->getGlobalSettingsRepository() + ->getGlobalSettings() + ->getSkillTriggeringNumberOfAnswers(); foreach ($this->getUniqueAssignedSkills() as $skill_data) { if ($skill_data['num_assigns'] < $global_barrier) { diff --git a/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSkillAssignmentsGUI.php b/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSkillAssignmentsGUI.php index 72fae798974c..8608c25d0a5b 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSkillAssignmentsGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSkillAssignmentsGUI.php @@ -165,6 +165,8 @@ public function executeCommand(): void $this->ctrl->redirect($this, self::CMD_SHOW_SKILL_QUEST_ASSIGNS); } + $this->keepAssignmentParameters(); + if (in_array($command, [self::CMD_EDIT_SKILL_QUEST_ASSIGNS])) { $this->modifyTabs(); } @@ -276,6 +278,7 @@ private function saveSkillPointsCmd(): void private function updateSkillQuestionAssignmentsCmd(): void { + $this->keepAssignmentParameters(); $question_id = $this->request_data_collector->getQuestionId(); if ($this->isTestQuestion($question_id)) { @@ -339,12 +342,12 @@ private function updateSkillQuestionAssignmentsCmd(): void } } - $this->ctrl->redirect($this, self::CMD_EDIT_SKILL_QUEST_ASSIGNS); + $this->editSkillQuestionAssignmentCmd(); } private function showSkillSelectionCmd(): void { - $this->ctrl->saveParameter($this, 'q_id'); + $this->keepAssignmentParameters(); $question_id = $this->request_data_collector->getQuestionId(); $assignmentList = new ilAssQuestionSkillAssignmentList($this->db); @@ -390,8 +393,8 @@ private function showSkillQuestionAssignmentPropertiesFormCmd( $question_id = $this->request_data_collector->getQuestionId(); $question_gui ??= assQuestionGUI::_getQuestionGUI('', $question_id); - $row_id_parameter = $this->request_data_collector->strArray(EditSkillsOfQuestionTableActions::FULL_ROW_ID_PARAMETER); - [1 => $skill_base_id, 2 => $skill_tref_id] = explode('_', $row_id_parameter[0]); + $row_id_parameter = $this->request_data_collector->getRowIdParameter(EditSkillsOfQuestionTableActions::FULL_ROW_ID_PARAMETER); + [1 => $skill_base_id, 2 => $skill_tref_id] = explode('_', $row_id_parameter); $assignment ??= $this->buildQuestionSkillAssignment($question_id, (int) $skill_base_id, (int) $skill_tref_id); $form ??= $this->buildSkillQuestionAssignmentPropertiesForm($question_gui->getObject(), $assignment); @@ -406,7 +409,7 @@ private function saveSkillQuestionAssignmentPropertiesFormCmd(): void if ($this->isTestQuestion($question_id)) { $question_gui = assQuestionGUI::_getQuestionGUI('', $question_id); - $row_id_parameter = $this->request_data_collector->string(EditSkillsOfQuestionTableActions::FULL_ROW_ID_PARAMETER); + $row_id_parameter = $this->request_data_collector->getRowIdParameter(EditSkillsOfQuestionTableActions::FULL_ROW_ID_PARAMETER); [1 => $skill_base_id, 2 => $skill_tref_id] = explode('_', $row_id_parameter); $assignment = $this->buildQuestionSkillAssignment($question_id, (int) $skill_base_id, (int) $skill_tref_id); @@ -461,7 +464,7 @@ private function saveSkillQuestionAssignmentPropertiesFormCmd(): void } } - $this->ctrl->redirect($this, self::CMD_SHOW_SKILL_QUEST_ASSIGNS); + $this->ctrl->redirect($this, self::CMD_EDIT_SKILL_QUEST_ASSIGNS); } private function buildSkillQuestionAssignmentPropertiesForm( @@ -521,6 +524,8 @@ private function editSkillQuestionAssignmentCmd(): void $assignment_list->loadFromDb(); $assignment_list->loadAdditionalSkillData(); + $this->keepAssignmentParameters(); + $edit_uri = $this->data_factory->uri( ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTargetByClass( self::class, @@ -528,6 +533,11 @@ private function editSkillQuestionAssignmentCmd(): void ) ); + $this->ctrl->setParameterByClass( + ilAssQuestionSkillAssignmentsGUI::class, + 'q_id', + $this->request_data_collector->getQuestionId() + ); $this->toolbar->addComponent( $this->ui_factory->button()->standard( $this->lng->txt('tst_manage_competence_select_skills'), @@ -535,8 +545,9 @@ private function editSkillQuestionAssignmentCmd(): void [ilAssQuestionSkillAssignmentsGUI::class], self::CMD_SHOW_SKILL_SELECT ) - ) + )->withUnavailableAction(!$this->isAssignmentEditingEnabled()) ); + $this->ctrl->setParameterByClass(ilAssQuestionSkillAssignmentsGUI::class, 'q_id', null); $components = (new EditSkillsOfQuestionTable( $this->request_data_collector, @@ -545,14 +556,20 @@ private function editSkillQuestionAssignmentCmd(): void $this->lng, (new EditSkillsOfQuestionTableActions( $this->tpl, - [EditSkillsOfQuestionTableEditAction::ACTION_ID => new EditSkillsOfQuestionTableEditAction($this->ui_factory, $this->lng)] + [ + EditSkillsOfQuestionTableEditAction::ACTION_ID => new EditSkillsOfQuestionTableEditAction( + $this->ui_factory, + $this->lng, + $this->isAssignmentEditingEnabled() + ) + ] )) ))->getComponents(new URLBuilder($edit_uri)); $this->tpl->setContent($this->ui_renderer->render($components)); } - private function isSyncOriginalPossibleAndAllowed($questionId): bool + private function isSyncOriginalPossibleAndAllowed(int $questionId): bool { $questionData = $this->question_list->getDataArrayForQuestionId($questionId); @@ -583,7 +600,7 @@ private function showSyncOriginalConfirmationCmd(): void $confirmation->setFormAction($this->ctrl->getFormAction($this)); $confirmation->addHiddenItem('q_id', $this->request_data_collector->getQuestionId()); $confirmation->setConfirm($this->lng->txt('yes'), self::CMD_SYNC_ORIGINAL); - $confirmation->setCancel($this->lng->txt('no'), self::CMD_SHOW_SKILL_QUEST_ASSIGNS); + $confirmation->setCancel($this->lng->txt('no'), self::CMD_EDIT_SKILL_QUEST_ASSIGNS); $this->tpl->setContent($this->ctrl->getHTML($confirmation)); } @@ -604,7 +621,7 @@ private function syncOriginalCmd(): void $this->tpl->setOnScreenMessage('success', $this->lng->txt('qpl_qst_skl_assign_synced_to_orig'), true); } - $this->ctrl->redirect($this, self::CMD_SHOW_SKILL_QUEST_ASSIGNS); + $this->ctrl->redirect($this, self::CMD_EDIT_SKILL_QUEST_ASSIGNS); } private function buildSkillQuestionAssignmentList(): ilAssQuestionSkillAssignmentList @@ -775,11 +792,12 @@ private function handleAssignmentConfigurationHintMessage(): void } } - private function getSkillSelectorHeader($questionId): string + private function getSkillSelectorHeader(int $questionId): string { - $questionData = $this->question_list->getDataArrayForQuestionId($questionId); - - return sprintf($this->lng->txt('qpl_qst_skl_selection_for_question_header'), $questionData['title']); + return sprintf( + $this->lng->txt('qpl_qst_skl_selection_for_question_header'), + $this->question_list->getDataArrayForQuestionId($questionId)['title'] + ); } private function sortAlphabetically($array) diff --git a/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSolutionComparisonExpression.php b/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSolutionComparisonExpression.php index 97afbce9810c..3ba6845f11ae 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSolutionComparisonExpression.php +++ b/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSolutionComparisonExpression.php @@ -16,195 +16,107 @@ * *********************************************************************/ -/** - * @author Björn Heyser <bheyser@databay.de> - * @version $Id$ - * - * @package components\ILIAS/TestQuestionPool - */ +declare(strict_types=1); + class ilAssQuestionSolutionComparisonExpression { - /** - * @var ilDBInterface - */ - protected $db; - - /** - * @var integer - */ - private $questionId; - - /** - * @var integer - */ - private $skillBaseId; - - /** - * @var integer - */ - private $skillTrefId; - - /** - * @var integer - */ - private $orderIndex; - - /** - * @var string - */ - private $expression; - - /** - * @var integer - */ - private $points; - - /** - * Constructor - */ - public function __construct() - { - $this->questionId = null; - $this->skillBaseId = null; - $this->skillTrefId = null; - $this->orderIndex = null; - $this->expression = null; - $this->points = null; - } + protected ilDBInterface $db; + + private ?int $question_id = null; + + private ?int $skill_base_id = null; + + private ?int $skill_tref_id = null; + + private ?int $order_index = null; + + private ?string $expression = null; + + private ?int $points = null; public function save(): void { $this->db->replace( 'qpl_qst_skl_sol_expr', [ - 'question_fi' => ['integer', $this->getQuestionId()], - 'skill_base_fi' => ['integer', $this->getSkillBaseId()], - 'skill_tref_fi' => ['integer', $this->getSkillTrefId()], - 'order_index' => ['integer', $this->getOrderIndex()] + 'question_fi' => [ilDBConstants::T_INTEGER, $this->getQuestionId()], + 'skill_base_fi' => [ilDBConstants::T_INTEGER, $this->getSkillBaseId()], + 'skill_tref_fi' => [ilDBConstants::T_INTEGER, $this->getSkillTrefId()], + 'order_index' => [ilDBConstants::T_INTEGER, $this->getOrderIndex()] ], [ - 'expression' => ['text', $this->getExpression()], - 'points' => ['integer', $this->getPoints()] + 'expression' => [ilDBConstants::T_TEXT, $this->getExpression()], + 'points' => [ilDBConstants::T_INTEGER, $this->getPoints()] ] ); } - /** - * @return ilDBInterface - */ - public function getDb(): ilDBInterface - { - return $this->db; - } - - /** - * @param ilDBInterface $db - */ - public function setDb($db): void + public function setDb(ilDBInterface $db): void { $this->db = $db; } - /** - * @return int - */ public function getQuestionId(): ?int { - return $this->questionId; + return $this->question_id; } - /** - * @param int $questionId - */ - public function setQuestionId($questionId): void + public function setQuestionId(?int $question_id): void { - $this->questionId = $questionId; + $this->question_id = $question_id; } - /** - * @return int - */ public function getSkillBaseId(): ?int { - return $this->skillBaseId; + return $this->skill_base_id; } - /** - * @param int $skillBaseId - */ - public function setSkillBaseId($skillBaseId): void + public function setSkillBaseId(?int $skill_base_id): void { - $this->skillBaseId = $skillBaseId; + $this->skill_base_id = $skill_base_id; } - /** - * @return int - */ public function getSkillTrefId(): ?int { - return $this->skillTrefId; + return $this->skill_tref_id; } - /** - * @param int $skillTrefId - */ - public function setSkillTrefId($skillTrefId): void + public function setSkillTrefId(?int $skill_tref_id): void { - $this->skillTrefId = $skillTrefId; + $this->skill_tref_id = $skill_tref_id; } - /** - * @return int - */ public function getOrderIndex(): ?int { - return $this->orderIndex; + return $this->order_index; } - /** - * @param int $orderIndex - */ - public function setOrderIndex($orderIndex): void + public function setOrderIndex(?int $order_index): void { - $this->orderIndex = $orderIndex; + $this->order_index = $order_index; } - /** - * @return string - */ public function getExpression(): ?string { return $this->expression; } - /** - * @param string $expression - */ - public function setExpression($expression): void + public function setExpression(?string $expression): void { $this->expression = $expression; } - /** - * @return int - */ public function getPoints(): ?int { return $this->points; } - /** - * @param int $points - */ - public function setPoints($points): void + public function setPoints(?int $points): void { $this->points = $points; } - /** - * @param array $data - */ - public function initInstanceFromArray($data): void + public function initInstanceFromArray(array $data): void { $this->setQuestionId($data['question_fi']); $this->setSkillBaseId($data['skill_base_fi']); diff --git a/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSolutionComparisonExpressionList.php b/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSolutionComparisonExpressionList.php index 8929d6ffd290..bede1c958e5a 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSolutionComparisonExpressionList.php +++ b/components/ILIAS/TestQuestionPool/classes/class.ilAssQuestionSolutionComparisonExpressionList.php @@ -16,64 +16,28 @@ * *********************************************************************/ -/** - * @author Björn Heyser <bheyser@databay.de> - * @version $Id$ - * - * @package components\ILIAS/Test - */ +declare(strict_types=1); + class ilAssQuestionSolutionComparisonExpressionList { - /** - * @var ilDBInterface - */ - protected $db; - - /** - * @var integer - */ - private $questionId; - - /** - * @var integer - */ - private $skillBaseId; - - /** - * @var integer - */ - private $skillTrefId; - - /** - * @var array - */ - private $expressions; - - /** - * @param ilDBInterface $db - */ - public function __construct(ilDBInterface $db) - { - $this->db = $db; + private ?int $question_id = null; - $this->questionId = null; - $this->skillBaseId = null; - $this->skillTrefId = null; + private ?int $skill_base_id = null; - $this->expressions = []; + private ?int $skill_tref_id = null; + + private array $expressions = []; + + public function __construct( + protected readonly ilDBInterface $db + ) { } public function load(): void { - $query = " - SELECT * - FROM qpl_qst_skl_sol_expr - WHERE question_fi = %s AND skill_base_fi = %s AND skill_tref_fi = %s - "; - $res = $this->db->queryF( - $query, - ['integer', 'integer', 'integer'], + 'SELECT * FROM qpl_qst_skl_sol_expr WHERE question_fi = %s AND skill_base_fi = %s AND skill_tref_fi = %s', + [ilDBConstants::T_INTEGER, ilDBConstants::T_INTEGER, ilDBConstants::T_INTEGER], [$this->getQuestionId(), $this->getSkillBaseId(), $this->getSkillTrefId()] ); @@ -90,9 +54,8 @@ public function save(): void { $this->delete(); - foreach ($this->expressions as $orderIndex => $expression) { - /* @var ilAssQuestionSolutionComparisonExpression $expression */ - + /* @var ilAssQuestionSolutionComparisonExpression $expression */ + foreach ($this->expressions as $expression) { $expression->setQuestionId($this->getQuestionId()); $expression->save(); } @@ -100,14 +63,9 @@ public function save(): void public function delete(): void { - $query = " - DELETE FROM qpl_qst_skl_sol_expr - WHERE question_fi = %s AND skill_base_fi = %s AND skill_tref_fi = %s - "; - $this->db->manipulateF( - $query, - ['integer', 'integer', 'integer'], + 'DELETE FROM qpl_qst_skl_sol_expr WHERE question_fi = %s AND skill_base_fi = %s AND skill_tref_fi = %s', + [ilDBConstants::T_INTEGER, ilDBConstants::T_INTEGER, ilDBConstants::T_INTEGER], [$this->getQuestionId(), $this->getSkillBaseId(), $this->getSkillTrefId()] ); } @@ -132,51 +90,33 @@ public function reset(): void $this->expressions = []; } - /** - * @return int - */ public function getQuestionId(): ?int { - return $this->questionId; + return $this->question_id; } - /** - * @param int $questionId - */ - public function setQuestionId($questionId): void + public function setQuestionId(?int $question_id): void { - $this->questionId = $questionId; + $this->question_id = $question_id; } - /** - * @return int - */ public function getSkillBaseId(): ?int { - return $this->skillBaseId; + return $this->skill_base_id; } - /** - * @param int $skillBaseId - */ - public function setSkillBaseId($skillBaseId): void + public function setSkillBaseId(?int $skill_base_id): void { - $this->skillBaseId = $skillBaseId; + $this->skill_base_id = $skill_base_id; } - /** - * @return int - */ public function getSkillTrefId(): ?int { - return $this->skillTrefId; + return $this->skill_tref_id; } - /** - * @param int $skillTrefId - */ - public function setSkillTrefId($skillTrefId): void + public function setSkillTrefId(?int $skill_tref_id): void { - $this->skillTrefId = $skillTrefId; + $this->skill_tref_id = $skill_tref_id; } } diff --git a/components/ILIAS/TestQuestionPool/classes/class.ilBulkEditQuestionsGUI.php b/components/ILIAS/TestQuestionPool/classes/class.ilBulkEditQuestionsGUI.php index 4178685ae116..58c4856b3367 100644 --- a/components/ILIAS/TestQuestionPool/classes/class.ilBulkEditQuestionsGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/class.ilBulkEditQuestionsGUI.php @@ -25,7 +25,6 @@ use Psr\Http\Message\ServerRequestInterface; use ILIAS\HTTP\Wrapper\RequestWrapper; use ILIAS\UI\Component\Input\Container\Form; -use ILIAS\UI\Component\MessageBox\MessageBox; /** * @ilCtrl_Calls ilBulkEditQuestionsGUI: ilFormPropertyDispatchGUI diff --git a/components/ILIAS/TestQuestionPool/classes/class.ilLocalUnitConfigurationGUI.php b/components/ILIAS/TestQuestionPool/classes/class.ilLocalUnitConfigurationGUI.php index 61aae9cfa45e..5333b2657708 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.ilLocalUnitConfigurationGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/class.ilLocalUnitConfigurationGUI.php @@ -143,7 +143,9 @@ protected function confirmImportGlobalCategory(): void protected function confirmImportGlobalCategories(array $category_ids): void { // @todo: Confirmation Currently not implemented, so forward to import - $this->importGlobalCategories($category_ids); + $category_ids === [] + ? $this->showGlobalUnitCategories() + : $this->importGlobalCategories($category_ids); } protected function importGlobalCategories(array $category_ids): void @@ -171,9 +173,9 @@ protected function importGlobalCategories(array $category_ids): void if ($i) { $this->tpl->setOnScreenMessage('success', $this->lng->txt('saved_successfully'), true); + $this->ctrl->setParameter($this, 'question_fi', $this->request->getQuestionId()); } - $this->ctrl->setParameter($this, 'question_fi', 0); $this->ctrl->redirect($this, 'showLocalUnitCategories'); } } diff --git a/components/ILIAS/TestQuestionPool/classes/class.ilObjQuestionPoolGUI.php b/components/ILIAS/TestQuestionPool/classes/class.ilObjQuestionPoolGUI.php index 1ebb0b2481ab..98195c86b9e0 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.ilObjQuestionPoolGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/class.ilObjQuestionPoolGUI.php @@ -882,7 +882,6 @@ private function importQuestionPoolWithValidManifest( array $selected_questions, string $file_to_import ): void { - ilSession::set('qpl_import_selected_questions', $selected_questions); $imp = new ilImport($this->request_data_collector->getRefId()); $map = $imp->getMapping(); @@ -1307,8 +1306,10 @@ public function editQuestionForTestObject(): void protected function importQuestionsFile(string $path_to_uploaded_file_in_temp_dir): void { if (!$this->temp_file_system->hasDir($path_to_uploaded_file_in_temp_dir) - || ($files = $this->temp_file_system->listContents($path_to_uploaded_file_in_temp_dir)) === []) { - $this->tpl->setOnScreenMessage('failure', $this->lng->txt('obj_import_file_error')); + || ($files = $this->temp_file_system->listContents($path_to_uploaded_file_in_temp_dir)) === [] + || mb_stripos($files[0]->getPath(), 'tst') !== false) { + $this->tpl->setOnScreenMessage('failure', $this->lng->txt('obj_import_file_error'), true); + $this->ctrl->redirectByClass(self::class, self::DEFAULT_CMD); } $file_to_import = $this->import_temp_directory . DIRECTORY_SEPARATOR . $files[0]->getPath(); diff --git a/components/ILIAS/TestQuestionPool/classes/class.ilUnitConfigurationGUI.php b/components/ILIAS/TestQuestionPool/classes/class.ilUnitConfigurationGUI.php index 6fc930e7cd1c..2fdc9bc9fa5c 100755 --- a/components/ILIAS/TestQuestionPool/classes/class.ilUnitConfigurationGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/class.ilUnitConfigurationGUI.php @@ -80,15 +80,10 @@ public function executeCommand(): void { $cmd = $this->ctrl->getCmd($this->getDefaultCommand()); $this->checkPermissions($cmd); - switch ($cmd) { - case 'confirmImportGlobalCategories': - $category_ids = $this->request->raw('category_ids'); - $this->$cmd($category_ids); - break; - default: - $this->$cmd(); - break; - } + match ($cmd) { + 'confirmImportGlobalCategories' => $this->$cmd($this->request->getUnitCategoryIds()), + default => $this->$cmd(), + }; $this->handleSubtabs(); } @@ -482,8 +477,8 @@ protected function showUnitsOfCategory(): void /** @var assFormulaQuestionUnit $unit */ $data[] = [ 'unit_id' => $unit->getId(), - 'unit' => $unit->getUnit(), - 'baseunit' => $unit->getBaseunitTitle(), + 'unit' => $unit->getSanitizedUnit(), + 'baseunit' => $unit->getSanitizedBaseunitTitle(), 'baseunit_id' => $unit->getBaseUnit(), 'factor' => $unit->getFactor(), 'sequence' => $unit->getSequence(), diff --git a/components/ILIAS/TestQuestionPool/classes/export/qti12/class.assFormulaQuestionExport.php b/components/ILIAS/TestQuestionPool/classes/export/qti12/class.assFormulaQuestionExport.php index 97bb8528607a..75746c4f8761 100755 --- a/components/ILIAS/TestQuestionPool/classes/export/qti12/class.assFormulaQuestionExport.php +++ b/components/ILIAS/TestQuestionPool/classes/export/qti12/class.assFormulaQuestionExport.php @@ -66,6 +66,53 @@ public function toXML($a_include_header = true, $a_include_binary = true, $a_shu $a_xml_writer->xmlElement("fieldlabel", null, "points"); $a_xml_writer->xmlElement("fieldentry", null, $this->object->getPoints()); $a_xml_writer->xmlEndTag("qtimetadatafield"); + + /** @var assFormulaQuestion $object */ + $object = $this->object; + $unit_repository = $object->getUnitRepository(); + + $question_id = $this->object->getId(); + $unit_categories = array_filter( + $unit_repository->getAllUnitCategories(), + static fn(object $object): bool => $object->getQuestionFi() === $question_id, + ); + + $a_xml_writer->xmlStartTag("qtimetadatafield"); + $a_xml_writer->xmlElement("fieldlabel", null, "unit_categories"); + /** @var assFormulaQuestionUnitCategory $unit_category */ + foreach ($unit_categories as $unit_category) { + $a_xml_writer->xmlElement( + "fieldentry", + ["id" => $unit_category->getId(), "question_fi" => $unit_category->getQuestionFi()], + $unit_category->getCategory() + ); + } + $a_xml_writer->xmlEndTag("qtimetadatafield"); + + $categorized_units = array_filter( + $unit_repository->getCategorizedUnits(), + static fn(object $object): bool => $object instanceof assFormulaQuestionUnit, + ); + + $a_xml_writer->xmlStartTag("qtimetadatafield"); + $a_xml_writer->xmlElement("fieldlabel", null, "units"); + /** @var assFormulaQuestionUnit $categorized_unit */ + foreach ($categorized_units as $categorized_unit) { + $a_xml_writer->xmlElement( + "fieldentry", + [ + "id" => $categorized_unit->getId(), + "sequence" => $categorized_unit->getSequence(), + "factor" => $categorized_unit->getFactor(), + "base_unit" => $categorized_unit->getBaseUnit(), + "base_unit_title" => $categorized_unit->getBaseunitTitle(), + "category" => $categorized_unit->getCategory() + ], + $categorized_unit->getUnit() + ); + } + $a_xml_writer->xmlEndTag("qtimetadatafield"); + foreach ($this->object->getVariables() as $variable) { $var = [ "precision" => $variable->getPrecision(), diff --git a/components/ILIAS/TestQuestionPool/classes/feedback/class.ilAssClozeTestFeedback.php b/components/ILIAS/TestQuestionPool/classes/feedback/class.ilAssClozeTestFeedback.php index 55b64245b31f..904101ec42f9 100755 --- a/components/ILIAS/TestQuestionPool/classes/feedback/class.ilAssClozeTestFeedback.php +++ b/components/ILIAS/TestQuestionPool/classes/feedback/class.ilAssClozeTestFeedback.php @@ -651,10 +651,10 @@ private function cloneSpecificFeedbackSetting( ); } - protected function cloneSpecificFeedback(int $originalQuestionId, int $duplicateQuestionId): void + protected function cloneSpecificFeedback(int $original_question_id, int $duplicate_question_id): void { - $this->cloneSpecificFeedbackSetting($originalQuestionId, $duplicateQuestionId); - parent::cloneSpecificFeedback($originalQuestionId, $duplicateQuestionId); + $this->cloneSpecificFeedbackSetting($original_question_id, $duplicate_question_id); + parent::cloneSpecificFeedback($original_question_id, $duplicate_question_id); } /** diff --git a/components/ILIAS/TestQuestionPool/classes/feedback/class.ilAssMultiOptionQuestionFeedback.php b/components/ILIAS/TestQuestionPool/classes/feedback/class.ilAssMultiOptionQuestionFeedback.php index caf120520d6c..27dd46e480ca 100755 --- a/components/ILIAS/TestQuestionPool/classes/feedback/class.ilAssMultiOptionQuestionFeedback.php +++ b/components/ILIAS/TestQuestionPool/classes/feedback/class.ilAssMultiOptionQuestionFeedback.php @@ -239,31 +239,28 @@ public function deleteSpecificAnswerFeedbacks(int $question_id, bool $is_additio protected function cloneSpecificFeedback(int $source_question_id, int $target_question_id): void { - // delete specific feedback of the original - $this->db->manipulateF( - "DELETE FROM {$this->getSpecificFeedbackTableName()} WHERE question_fi = %s", - ['integer'], - [$source_question_id] + $this->deleteFeedbackOfOriginalQuestion( + $this->getSpecificFeedbackTableName(), + $target_question_id, + $this->getSpecificAnswerFeedbackPageObjectType() ); - // get specific feedback of the actual question $res = $this->db->queryF( "SELECT * FROM {$this->getSpecificFeedbackTableName()} WHERE question_fi = %s", - ['integer'], - [$target_question_id] + [ilDBConstants::T_INTEGER], + [$source_question_id] ); - // save specific feedback to the original while ($row = $this->db->fetchAssoc($res)) { $next_id = $this->db->nextId($this->getSpecificFeedbackTableName()); $this->db->insert($this->getSpecificFeedbackTableName(), [ - 'feedback_id' => ['integer', $next_id], - 'question_fi' => ['integer', $source_question_id], - 'question' => ['integer', $row['question']], - 'answer' => ['integer', $row['answer']], - 'feedback' => ['text', $row['feedback']], - 'tstamp' => ['integer', time()] + 'feedback_id' => [ilDBConstants::T_INTEGER, $next_id], + 'question_fi' => [ilDBConstants::T_INTEGER, $target_question_id], + 'question' => [ilDBConstants::T_INTEGER, $row['question']], + 'answer' => [ilDBConstants::T_INTEGER, $row['answer']], + 'feedback' => [ilDBConstants::T_TEXT, $row['feedback']], + 'tstamp' => [ilDBConstants::T_INTEGER, time()] ]); if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) { diff --git a/components/ILIAS/TestQuestionPool/classes/feedback/class.ilAssQuestionFeedback.php b/components/ILIAS/TestQuestionPool/classes/feedback/class.ilAssQuestionFeedback.php index a478b101d99e..dbb491956c0d 100755 --- a/components/ILIAS/TestQuestionPool/classes/feedback/class.ilAssQuestionFeedback.php +++ b/components/ILIAS/TestQuestionPool/classes/feedback/class.ilAssQuestionFeedback.php @@ -433,50 +433,80 @@ private function duplicateGenericFeedback(int $originalQuestionId, int $duplicat * duplicates the SPECIFIC feedback relating to the given original question id * and saves it for the given duplicate question id */ - abstract protected function cloneSpecificFeedback(int $originalQuestionId, int $duplicateQuestionId): void; + abstract protected function cloneSpecificFeedback(int $source_question_id, int $target_question_id): void; /** * syncs the feedback from a duplicated question back to the original question */ - final public function cloneFeedback(int $originalQuestionId, int $duplicateQuestionId): void + final public function cloneFeedback(int $original_question_id, int $duplicate_question_id): void { - $this->cloneGenericFeedback($originalQuestionId, $duplicateQuestionId); - $this->cloneSpecificFeedback($originalQuestionId, $duplicateQuestionId); + $this->cloneGenericFeedback($original_question_id, $duplicate_question_id); + $this->cloneSpecificFeedback($duplicate_question_id, $original_question_id); } /** * syncs the GENERIC feedback from a duplicated question back to the original question */ - private function cloneGenericFeedback(int $originalQuestionId, int $duplicateQuestionId): void + private function cloneGenericFeedback(int $original_question_id, int $duplicate_question_id): void { - // delete generic feedback of the original question - $this->db->manipulateF( - "DELETE FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s", - ['integer'], - [$originalQuestionId] + $this->deleteFeedbackOfOriginalQuestion( + $this->getGenericFeedbackTableName(), + $original_question_id, + $this->getGenericFeedbackPageObjectType() ); // get generic feedback of the actual (duplicated) question $result = $this->db->queryF( "SELECT * FROM {$this->getGenericFeedbackTableName()} WHERE question_fi = %s", - ['integer'], - [$duplicateQuestionId] + [ilDBConstants::T_INTEGER], + [$duplicate_question_id] ); // save generic feedback to the original question while ($row = $this->db->fetchAssoc($result)) { - $nextId = $this->db->nextId($this->getGenericFeedbackTableName()); + $next_id = $this->db->nextId($this->getGenericFeedbackTableName()); $this->db->insert($this->getGenericFeedbackTableName(), [ - 'feedback_id' => ['integer', $nextId], - 'question_fi' => ['integer', $originalQuestionId], - 'correctness' => ['text', $row['correctness']], - 'feedback' => ['clob', $row['feedback']], - 'tstamp' => ['integer', time()] + 'feedback_id' => [ilDBConstants::T_INTEGER, $next_id], + 'question_fi' => [ilDBConstants::T_INTEGER, $original_question_id], + 'correctness' => [ilDBConstants::T_TEXT, $row['correctness']], + 'feedback' => [ilDBConstants::T_CLOB, $row['feedback']], + 'tstamp' => [ilDBConstants::T_INTEGER, time()] ]); + + if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) { + $page_object_type = $this->getGenericFeedbackPageObjectType(); + $this->clonePageObject($page_object_type, $row['feedback_id'], $next_id, $original_question_id); + } } } + protected function deleteFeedbackOfOriginalQuestion( + string $table_name, + int $original_question_id, + string $page_object_type + ): void { + if ($this->questionOBJ->isAdditionalContentEditingModePageObject()) { + $original_result = $this->db->queryF( + "SELECT feedback_id FROM {$table_name} WHERE question_fi = %s", + [ilDBConstants::T_INTEGER], + [$original_question_id] + ); + while ($original_row = $this->db->fetchAssoc($original_result)) { + $this->ensurePageObjectDeleted( + $page_object_type, + (int) $original_row['feedback_id'] + ); + } + } + + $this->db->manipulateF( + "DELETE FROM {$table_name} WHERE question_fi = %s", + [ilDBConstants::T_INTEGER], + [$original_question_id] + ); + } + /** * returns the SPECIFIC answer feedback ID for a given question id and answer index. */ diff --git a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssAnswerCorrectionsInputGUI.php b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssAnswerCorrectionsInputGUI.php index f52443a7676c..1201c315c605 100755 --- a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssAnswerCorrectionsInputGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssAnswerCorrectionsInputGUI.php @@ -41,6 +41,10 @@ public function setHidePointsEnabled(bool $hide_points_enabled): void public function setValue($a_value): void { foreach ($this->forms_helper->transformPoints($a_value) as $index => $value) { + if ($value === null) { + return; + } + $this->values[$index]->setPoints($value); } } diff --git a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssClozeTestCombinationVariantsInputGUI.php b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssClozeTestCombinationVariantsInputGUI.php index 7640660ffb31..2f99be071e89 100755 --- a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssClozeTestCombinationVariantsInputGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssClozeTestCombinationVariantsInputGUI.php @@ -29,6 +29,10 @@ class ilAssClozeTestCombinationVariantsInputGUI extends ilAnswerWizardInputGUI public function setValue($a_value): void { foreach ($this->forms_helper->transformPoints($a_value) as $index => $value) { + if ($value === null) { + return; + } + $this->values[$index]['points'] = $value; } } diff --git a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssErrorTextCorrectionsInputGUI.php b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssErrorTextCorrectionsInputGUI.php index 03818987220d..818bbdc7a985 100755 --- a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssErrorTextCorrectionsInputGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssErrorTextCorrectionsInputGUI.php @@ -29,6 +29,10 @@ class ilAssErrorTextCorrectionsInputGUI extends ilErrorTextWizardInputGUI public function setValue($a_value): void { foreach ($this->forms_helper->transformPoints($a_value) as $index => $points) { + if ($points === null) { + return; + } + $this->values[$index] = $this->values[$index]->withPoints($points); } } diff --git a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssMatchingPairCorrectionsInputGUI.php b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssMatchingPairCorrectionsInputGUI.php index 088647b5593c..96101dee3e93 100755 --- a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssMatchingPairCorrectionsInputGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssMatchingPairCorrectionsInputGUI.php @@ -40,6 +40,10 @@ public function setThumbsWebPathWithPrefix(string $path_including_prefix): void public function setValue($a_value): void { foreach ($this->forms_helper->transformPoints($a_value) as $index => $value) { + if ($value === null) { + return; + } + $this->pairs[$index] = $this->pairs[$index]->withPoints($value); } } diff --git a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssMultipleChoiceCorrectionsInputGUI.php b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssMultipleChoiceCorrectionsInputGUI.php index 7cf09bf39f3f..0658c7ed0cc7 100755 --- a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssMultipleChoiceCorrectionsInputGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssMultipleChoiceCorrectionsInputGUI.php @@ -37,6 +37,10 @@ public function setValue($a_value): void $points_unchecked = $this->forms_helper->transformPoints($a_value, 'points_unchecked'); foreach ($this->values as $index => $value) { + if ($value === null) { + return; + } + $this->values[$index]->setPoints($points[$index] ?? 0.0); $this->values[$index]->setPointsUnchecked($points_unchecked[$index] ?? 0.0); } diff --git a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssNestedOrderingElementsInputGUI.php b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssNestedOrderingElementsInputGUI.php index dbd0f215cff7..06a676b89e9f 100755 --- a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssNestedOrderingElementsInputGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssNestedOrderingElementsInputGUI.php @@ -41,7 +41,6 @@ class ilAssNestedOrderingElementsInputGUI extends ilIdentifiedMultiValuesInputGU private ?ilAssOrderingElementList $correctness_true_element_list = null; private bool $interaction_enabled = true; private bool $nesting_enabled = true; - private bool $styling_disabled = false; private ?ilTemplate $list_tpl = null; private UIFactory $ui_factory; @@ -70,11 +69,6 @@ public function setNestingEnabled(bool $nesting_enabled): void $this->nesting_enabled = $nesting_enabled; } - public function setStylingDisabled(bool $styling_disabled): void - { - $this->styling_disabled = $styling_disabled; - } - private function getGlobalTpl() { return isset($GLOBALS['DIC']) ? $GLOBALS['DIC']['tpl'] : $GLOBALS['tpl']; @@ -383,10 +377,6 @@ function (string $c, array $v) use ($sort_closure): string { public function render(string $a_mode = ''): string { - if (!$this->styling_disabled) { - $this->getGlobalTpl()->addCss('assets/css/content.css'); - } - if ($this->interaction_enabled) { $this->initializePlayerJS(); } diff --git a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssOrderingImagesInputGUI.php b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssOrderingImagesInputGUI.php index cf043bca8aad..a947f6ccbcfa 100755 --- a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssOrderingImagesInputGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssOrderingImagesInputGUI.php @@ -1,4 +1,5 @@ <?php + /** * This file is part of ILIAS, a powerful learning management system * published by ILIAS open source e-Learning e.V. @@ -40,25 +41,6 @@ public function __construct(ilAssOrderingFormValuesObjectsConverter $converter, public static $instanceCounter = 0; - /** - * FOR COMPATIBILITY ONLY - * - * @param $stylingDisabled - */ - public function setStylingDisabled($stylingDisabled): void - { - } - - /** - * FOR COMPATIBILITY ONLY - * - * @return bool - */ - public function getStylingDisabled(): bool - { - return false; - } - /** * @param ilAssOrderingElementList $elementList */ diff --git a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssOrderingTextsInputGUI.php b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssOrderingTextsInputGUI.php index e7e1fa304c1a..6df9c10ecf6a 100755 --- a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssOrderingTextsInputGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssOrderingTextsInputGUI.php @@ -37,25 +37,6 @@ public function __construct(ilAssOrderingFormValuesObjectsConverter $converter, $this->addFormValuesManipulator($converter); } - /** - * FOR COMPATIBILITY ONLY - * - * @param $stylingDisabled - */ - public function setStylingDisabled($stylingDisabled): void - { - } - - /** - * FOR COMPATIBILITY ONLY - * - * @return bool - */ - public function getStylingDisabled(): bool - { - return false; - } - /** * @param ilAssOrderingElementList $elementList */ diff --git a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssQuestionSkillAssignmentPropertyFormGUI.php b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssQuestionSkillAssignmentPropertyFormGUI.php index ec211720763a..f7692ccc7e7d 100755 --- a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssQuestionSkillAssignmentPropertyFormGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssQuestionSkillAssignmentPropertyFormGUI.php @@ -96,12 +96,12 @@ public function build(): void ); $this->addCommandButton( - ilAssQuestionSkillAssignmentsGUI::CMD_SHOW_SKILL_QUEST_ASSIGNS, + ilAssQuestionSkillAssignmentsGUI::CMD_EDIT_SKILL_QUEST_ASSIGNS, $this->lng->txt('cancel') ); } else { $this->addCommandButton( - ilAssQuestionSkillAssignmentsGUI::CMD_SHOW_SKILL_QUEST_ASSIGNS, + ilAssQuestionSkillAssignmentsGUI::CMD_EDIT_SKILL_QUEST_ASSIGNS, $this->lng->txt('back') ); } @@ -208,6 +208,7 @@ private function buildResultSkillPointsInputField(): ilNumberInputGUI $questResultSkillPoints->setMinValue(1); $questResultSkillPoints->allowDecimals(false); $questResultSkillPoints->setValue((string) $this->assignment->getSkillPoints()); + if (!$this->isManipulationEnabled()) { $questResultSkillPoints->setDisabled(true); } diff --git a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssSingleChoiceCorrectionsInputGUI.php b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssSingleChoiceCorrectionsInputGUI.php index 43c53c19bf6f..fe86752c779c 100755 --- a/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssSingleChoiceCorrectionsInputGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/forms/class.ilAssSingleChoiceCorrectionsInputGUI.php @@ -34,6 +34,10 @@ class ilAssSingleChoiceCorrectionsInputGUI extends ilSingleChoiceWizardInputGUI public function setValue($a_value): void { foreach ($this->forms_helper->transformPoints($a_value) as $index => $value) { + if ($value === null) { + return; + } + $this->values[$index]->setPoints($value); } } diff --git a/components/ILIAS/TestQuestionPool/classes/forms/class.ilImagemapCorrectionsInputGUI.php b/components/ILIAS/TestQuestionPool/classes/forms/class.ilImagemapCorrectionsInputGUI.php index fff4252e1621..ae4fc191c87a 100755 --- a/components/ILIAS/TestQuestionPool/classes/forms/class.ilImagemapCorrectionsInputGUI.php +++ b/components/ILIAS/TestQuestionPool/classes/forms/class.ilImagemapCorrectionsInputGUI.php @@ -37,6 +37,10 @@ public function setAreasByArray($a_areas): void $points_unchecked = $this->forms_helper->transformPoints($a_areas, 'points_unchecked'); foreach (array_keys($this->areas) as $index) { + if ($points[$index] === null) { + return; + } + $points_unchecked[$index] = $this->getPointsUncheckedFieldEnabled() && isset($points_unchecked[$index]) ? $points_unchecked[$index] : 0.0; diff --git a/components/ILIAS/TestQuestionPool/classes/ilTestLegacyFormsHelper.php b/components/ILIAS/TestQuestionPool/classes/ilTestLegacyFormsHelper.php index e0f3236f61a5..ef851f7d9962 100644 --- a/components/ILIAS/TestQuestionPool/classes/ilTestLegacyFormsHelper.php +++ b/components/ILIAS/TestQuestionPool/classes/ilTestLegacyFormsHelper.php @@ -85,7 +85,7 @@ public function transformArray($data, string $key, Transformation $transformatio } return $this->refinery->byTrying([ - $this->refinery->kindlyTo()->listOf($transformation), + $this->refinery->kindlyTo()->dictOf($transformation), $this->refinery->always([]) ])->transform($data[$key]); } diff --git a/components/ILIAS/TestQuestionPool/classes/import/qti12/class.assFormulaQuestionImport.php b/components/ILIAS/TestQuestionPool/classes/import/qti12/class.assFormulaQuestionImport.php index abdc136edeb9..5fb30a0a6003 100755 --- a/components/ILIAS/TestQuestionPool/classes/import/qti12/class.assFormulaQuestionImport.php +++ b/components/ILIAS/TestQuestionPool/classes/import/qti12/class.assFormulaQuestionImport.php @@ -84,6 +84,9 @@ public function fromXML( $this->fetchAdditionalContentEditingModeInformation($item) ); $this->object->saveToDb(); + + $this->importUnitsAndUnitCategories($item); + // handle the import of media objects in XHTML code $questiontext = $this->object->getQuestion(); $feedbacksgeneric = $this->getFeedbackGeneric($item); @@ -124,4 +127,79 @@ public function fromXML( ); return $import_mapping; } + + private function importUnitsAndUnitCategories(ilQTIItem $item): void + { + /** @var ilUnitConfigurationRepository $unit_repository */ + $unit_repository = $this->object->getUnitrepository(); + foreach ($item->getUnitCategoryObjets() as $unit_category) { + $old_category_id = $unit_category->getId(); + + $unit_category->setQuestionFi($this->object->getId()); + $unit_repository->saveNewUnitCategory($unit_category); + + $units = []; + $base_unit_map = []; + + foreach ($item->getUnitObjects() as $unit) { + if ($unit->getCategory() !== $old_category_id) { + continue; + } + + $old_unit_id = $unit->getId(); + $old_base_unit_id = $unit->getBaseUnit(); + $old_unit_factor = $unit->getFactor(); + $old_sequence = $unit->getSequence(); + + $unit->setCategory($unit_category->getId()); + $unit->setFactor($old_unit_factor); + $unit->setSequence($old_sequence); + + $unit_repository->createNewUnit($unit); + $unit->setBaseUnit($old_base_unit_id); + + $units[] = $unit; + $base_unit_map[$old_unit_id] = $unit->getId(); + + $this->mapAssignedVariableUnits($unit, $old_unit_id); + $this->mapAssignedResultUnits($unit, $old_unit_id); + } + + foreach ($units as $unit) { + $unit->setBaseUnit($base_unit_map[$unit->getBaseUnit()] ?? 0); + $unit_repository->saveUnit($unit); + } + } + } + + private function mapAssignedVariableUnits(assFormulaQuestionUnit $unit, int $old_unit_id): void + { + /** @var assFormulaQuestionVariable $variable */ + foreach ($this->object->getVariables() as $variable) { + $variable_unit = $variable->getUnit(); + if ($variable_unit instanceof assFormulaQuestionUnit && $variable_unit->getId() === $old_unit_id) { + $variable_unit->setId($unit->getId()); + } + } + } + + private function mapAssignedResultUnits(assFormulaQuestionUnit $unit, int $old_unit_id): void + { + /** @var assFormulaQuestionResult $result */ + foreach ($this->object->getResults() as $result) { + $result_unit = $result->getUnit(); + if ($result_unit instanceof assFormulaQuestionUnit && $result_unit->getId() === $old_unit_id) { + $result_unit->setId($unit->getId()); + } + } + + /** @var assFormulaQuestionUnit[] $result */ + foreach ($this->object->getAllResultUnits() as $result) { + foreach ($result as $result_unit) { + if ($result_unit instanceof assFormulaQuestionUnit && $result_unit->getId() === $old_unit_id) { + $result_unit->setId($unit->getId()); + } + } + } + } } diff --git a/components/ILIAS/TestQuestionPool/resources/js/dist/longMenuQuestion.js b/components/ILIAS/TestQuestionPool/resources/js/dist/longMenuQuestion.js index f49a3ab413cf..b9a7feb6d01b 100644 --- a/components/ILIAS/TestQuestionPool/resources/js/dist/longMenuQuestion.js +++ b/components/ILIAS/TestQuestionPool/resources/js/dist/longMenuQuestion.js @@ -382,7 +382,7 @@ var longMenuQuestion = (function () { pro.redrawAnswerList = function(question_id) { pro.checkAnswersArray(question_id); - const answer_options_element = document.querySelector('#ilGapModal .modal_answer_options'); + const answer_options_element = document.querySelector(`#${pub.gap_modal_id} .modal_answer_options`); answer_options_element.innerHTML = ''; if (pro.inputFieldsStillPossible(question_id)) diff --git a/components/ILIAS/TestQuestionPool/resources/js/dist/question_handling.js b/components/ILIAS/TestQuestionPool/resources/js/dist/question_handling.js index 0204171c678f..511b9ae98838 100755 --- a/components/ILIAS/TestQuestionPool/resources/js/dist/question_handling.js +++ b/components/ILIAS/TestQuestionPool/resources/js/dist/question_handling.js @@ -48,7 +48,8 @@ ilias.questions.enhancedQuestionTypes = [ ]; ilias.questions.questionTypesSupportingPartialScoring = [ - "assKprimChoice" + "assKprimChoice", + "assClozeTest" ]; ilias.questions.init = function() { @@ -56,16 +57,14 @@ ilias.questions.init = function() { }; ilias.questions.refresh_lang = function() { - jQuery(".ilc_qinput_ClozeGapSelect").each(function(){ - $(this).prepend("<option id='-1' value='-1' selected='selected'>-- "+ - ilias.questions.txt.please_select+" --</option>"); - - $(this).val(""); + if (!$(this).prop("disabled")) { + $(this).prepend(`<option id='-1' value='-1' selected='selected'>-- ${ilias.questions.txt.please_select} --</option>`); + $(this).val(""); + } }); jQuery("input[value='TXT_SUBMIT_ANSWERS']").val(ilias.questions.txt.submit_answers); - }; ilias.questions.shuffleAll = function() { @@ -98,13 +97,14 @@ ilias.questions.swapper = function(a) } }; -ilias.questions.initAnswer = function(a_id, tries, passed) { +ilias.questions.initAnswer = function(a_id, tries, passed, scored_points = null) { if (!answers[a_id]) { // to keep answers[a_id].areas intact if initialized before answers[a_id] = {}; } answers[a_id].tries = tries; answers[a_id].wrong = 0; answers[a_id].passed = passed; + answers[a_id].scored_points = scored_points; answers[a_id].answer = new Array(); answers[a_id].interactionId=null; if (tries > 0 && (answers[a_id].tries >= questions[a_id].nr_of_tries || passed)) { @@ -535,77 +535,99 @@ ilias.questions.assTextSubset = function(a_id) { ilias.questions.assClozeTest = function(a_id) { - answers[a_id].wrong = 0; - answers[a_id].passed = true; - answers[a_id].choice = []; + let value_found; + let a_node; + answers[a_id].wrong = 0; + answers[a_id].passed = true; + answers[a_id].isBestSolution = true; + answers[a_id].choice = []; + + const gaps = questions[a_id].gaps; + for (let i = 0; i < gaps.length; i++) { + const gap = gaps[i]; + const type = gap.type; + + if (type !== 1) { + a_node = jQuery(`input#${a_id}_${i}`).get(0); + value_found = false; + } - for (var i=0;i<questions[a_id].gaps.length;i++) - { - var type = questions[a_id].gaps[i].type; - // select - if (type==1) { - var a_node = jQuery('select#'+a_id+"_"+i).get(0); - var selected = a_node.options[a_node.selectedIndex].id; - if (parseInt(selected) < 0 || questions[a_id].gaps[i].item[selected].points <= 0) { - answers[a_id].passed = false; - answers[a_id].wrong++; - answers[a_id].answer[i]=false; - } else { - answers[a_id].answer[i]=true; - } - if (parseInt(selected) >= 0) { - answers[a_id].choice.push(questions[a_id].gaps[i].item[selected].order); - } - } - else - { - var a_node = jQuery('input#'+a_id+"_"+i).get(0); - var value_found = false; + let j; + const items = gap.item; + const max_points = Math.max(...items.map(item => item.points)); + let points = 0; + switch (type) { + case 0: + for (j = 0; j < items.length; j++) { + if (items[j].value !== a_node.value) { + continue; + } + + value_found = true; + if (items[j].points <= 0) { + answers[a_id].passed = false; + answers[a_id].wrong++; + answers[a_id].answer[i] = false; + continue; + } + + answers[a_id].answer[i] = true; + points = items[j].points; + } + break + case 1: + a_node = jQuery(`select#${a_id}_${i}`).get(0); + const selected = a_node.options[a_node.selectedIndex].id; + + if (parseInt(selected) < 0 || items[selected].points <= 0) { + answers[a_id].passed = false; + answers[a_id].wrong++; + answers[a_id].answer[i] = false; + } else { + answers[a_id].answer[i] = true; + points = items[selected].points; + } - // text - if (type==0) { - for(var j=0;j<questions[a_id].gaps[i].item.length;j++) - { - if (questions[a_id].gaps[i].item[j].value == a_node.value) { - value_found=true; - if (questions[a_id].gaps[i].item[j].points <= 0) { - answers[a_id].passed = false; - answers[a_id].wrong++; - answers[a_id].answer[i]=false; - } else { - answers[a_id].answer[i]=true; - } - } - } - } - // numeric - else if (type==2) { - for(var j=0;j<questions[a_id].gaps[i].item.length;j++) - { - a_node.value = a_node.value.replace(',', '.'); - var lb = parseFloat(questions[a_id].gaps[i].item[j].lowerbound), - ub = parseFloat(questions[a_id].gaps[i].item[j].upperbound), - val = parseFloat(a_node.value); - - if (!isNaN(a_node.value) && lb <= val && ub >= val) { - value_found=true; - if (questions[a_id].gaps[i].item[j].points <= 0) { - answers[a_id].passed = false; - answers[a_id].wrong++; - answers[a_id].answer[i]=false; - } else { - answers[a_id].answer[i]=true; - } - } - } + if (parseInt(selected) >= 0) { + answers[a_id].choice.push(items[selected].order); + } + break; + case 2: + for (let j = 0; j < items.length; j++) { + a_node.value = a_node.value.replace(',', '.'); + const lb = parseFloat(items[j].lowerbound); + const ub = parseFloat(items[j].upperbound); + const val = parseFloat(a_node.value); + + if (!isNaN(a_node.value) && lb <= val && ub >= val) { + value_found = true; + if (items[j].points <= 0) { + answers[a_id].passed = false; + answers[a_id].wrong++; + answers[a_id].answer[i] = false; + } else { + answers[a_id].answer[i] = true; + points = items[j].points; + } + } + } + break; + } - } + if (type !== 1) { + answers[a_id].choice.push(a_node.value); + if (value_found === false) { + answers[a_id].passed = false; + answers[a_id].wrong++; + answers[a_id].answer[i] = false; + } + } - answers[a_id].choice.push(a_node.value); - if (value_found==false) {answers[a_id].passed = false; answers[a_id].wrong++; answers[a_id].answer[i]=false;} - } - } - ilias.questions.showFeedback(a_id); + if (points !== max_points) { + answers[a_id].isBestSolution = false; + } + } + ilias.questions.showFeedback(a_id); }; ilias.questions.initClozeTest = function(a_id) { @@ -832,11 +854,20 @@ ilias.questions.showFeedback = function(a_id) { answers[a_id].wrong ; } - if(jQuery.inArray(questions[a_id].type, ilias.questions.questionTypesSupportingPartialScoring) == -1) - { + if (jQuery.inArray(questions[a_id].type, ilias.questions.questionTypesSupportingPartialScoring) === -1) { answers[a_id].isBestSolution = answers[a_id].passed; } + if (questions[a_id].type === "assClozeTest" && answers[a_id].isBestSolution === undefined) { + let total_max_points = 0; + const gaps = questions[a_id].gaps; + for (let i = 0; i < gaps.length; i++) { + total_max_points += Math.max(...gaps[i].item.map(item => item.points)); + } + + answers[a_id].isBestSolution = total_max_points === answers[a_id].scored_points; + } + jQuery('#feedback'+a_id).removeClass("ilc_qfeedw_FeedbackWrong"); jQuery('#feedback'+a_id).removeClass("ilc_qfeedr_FeedbackRight"); @@ -848,7 +879,7 @@ ilias.questions.showFeedback = function(a_id) { if (answers[a_id].passed===true) { jQuery('#feedback'+a_id).addClass("ilc_qfeedr_FeedbackRight"); - if( answers[a_id].isBestSolution ) { + if (answers[a_id].isBestSolution) { if (ilias.questions.default_feedback) { fbtext = '<b>' + ilias.questions.txt.all_answers_correct + '</b><br />'; } @@ -857,15 +888,15 @@ ilias.questions.showFeedback = function(a_id) { fbtext += questions[a_id].feedback['allcorrect']; } - if( jQuery.inArray(questions[a_id].type, ilias.questions.enhancedQuestionTypes) == -1 ) { + if (jQuery.inArray(questions[a_id].type, ilias.questions.enhancedQuestionTypes) === -1) { ilias.questions.showCorrectAnswers(a_id); } } else { if (ilias.questions.default_feedback) { fbtext = '<b>' + ilias.questions.txt.enough_answers_correct + '</b><br />' + txt_wrong_answers + '<br />' + ilias.questions.txt.correct_answers_shown; - } else if (questions[a_id].feedback['allcorrect']) { - fbtext += questions[a_id].feedback['allcorrect']; + } else if (questions[a_id].feedback['onenotcorrect']) { + fbtext += questions[a_id].feedback['onenotcorrect']; } ilias.questions.showCorrectAnswers(a_id); @@ -1154,36 +1185,34 @@ ilias.questions.showCorrectAnswers =function(a_id) { break; //end assMatchingQuestion - case 'assClozeTest': - for (var i=0;i<questions[a_id].gaps.length;i++) { - var type = questions[a_id].gaps[i].type; - if (type==1) { - var cid; - //look for correct solution - for (var j=0;j<questions[a_id].gaps[i].item.length;j++) - { - if (questions[a_id].gaps[i].item[j].points>=1) - { - cid=j; - } - } - //jQuery('select#'+a_id+"_"+i+" option[id="+cid+"]").attr("selected","selected"); - jQuery('select#'+a_id+"_"+i+" option[id="+cid+"]").prop('selected', true); - jQuery('select#'+a_id+"_"+i).prop("disabled",true); - } - if (type==0 || type==2) { - var cvalue; - //look for correct solution - for (var j=0;j<questions[a_id].gaps[i].item.length;j++) - { - if (questions[a_id].gaps[i].item[j].points > 0) - { - cvalue = questions[a_id].gaps[i].item[j].value; - } - } - jQuery('input#'+a_id+"_"+i).val(cvalue); - jQuery('input#'+a_id+"_"+i).prop("disabled",true); - } + case 'assClozeTest': + for (let i = 0; i < questions[a_id].gaps.length; i++) { + const gap = questions[a_id].gaps[i]; + const type = gap.type; + const items = gap.item; + const maxPoints = Math.max(...items.map(item => item.points)); + const input = jQuery(`input#${a_id}_${i}`); + const select = jQuery(`select#${a_id}_${i}`); + let best_values; + + switch (type) { + case 0: + best_values = items.filter(item => item.points === maxPoints).map(item => item.value); + input.val(best_values.join(' / ')); + input.prop('disabled', true); + break; + case 1: + best_values = items.filter(item => item.points === maxPoints).map(item => item.value); + const option = jQuery(`select#${a_id}_${i} option[id="1"]`); + option.prop('selected', true); + option.text(best_values.join(' / ')); + select.prop('disabled', true); + break; + case 2: + const best_value = items.find(item => item.points === maxPoints).value; + input.val(best_value); + input.prop('disabled', true); + } } break; //end assClozeTest diff --git a/components/ILIAS/TestQuestionPool/src/Questions/GeneralQuestionPropertiesRepository.php b/components/ILIAS/TestQuestionPool/src/Questions/GeneralQuestionPropertiesRepository.php index 614beb9b99ad..8b31bfdcafe5 100755 --- a/components/ILIAS/TestQuestionPool/src/Questions/GeneralQuestionPropertiesRepository.php +++ b/components/ILIAS/TestQuestionPool/src/Questions/GeneralQuestionPropertiesRepository.php @@ -363,7 +363,7 @@ private function getForWhereClause(string $where): array $questions = []; while ($db_record = $this->db->fetchObject($query_result)) { - if (!$this->isQuestionTypeAvailable($db_record->plugin_name)) { + if (!$this->isQuestionTypeAvailable((bool) $db_record->is_plugin, $db_record->type_tag)) { continue; } $questions[$db_record->question_id] = $this @@ -372,12 +372,9 @@ private function getForWhereClause(string $where): array return $questions; } - /* - * $param array<stdClass> $question_data - */ - private function isQuestionTypeAvailable(?string $plugin_name): bool + private function isQuestionTypeAvailable(bool $is_plugin, string $question_type): bool { - if ($plugin_name === null) { + if ($is_plugin === false) { return true; } @@ -386,10 +383,10 @@ private function isQuestionTypeAvailable(?string $plugin_name): bool 'TestQuestionPool' )->getPluginSlotById('qst'); - if (!$plugin_slot->hasPluginName($plugin_name)) { + if (!$plugin_slot->hasPluginName($question_type)) { return false; } - return $plugin_slot->getPluginByName($plugin_name)->isActive(); + return $plugin_slot->getPluginByName($question_type)->isActive(); } } diff --git a/components/ILIAS/TestQuestionPool/src/Questions/Presentation/QuestionTable.php b/components/ILIAS/TestQuestionPool/src/Questions/Presentation/QuestionTable.php index 8a8db51d96ac..a7018262d284 100755 --- a/components/ILIAS/TestQuestionPool/src/Questions/Presentation/QuestionTable.php +++ b/components/ILIAS/TestQuestionPool/src/Questions/Presentation/QuestionTable.php @@ -63,7 +63,7 @@ public function getTable(): Table\Data return $this->ui_factory->table()->data( $this, $this->lng->txt('questions'), - $this->getColums(), + $this->getColumns() ) ->withActions($this->getActions()) ->withId('qpt' . $this->parent_obj_id . '_' . $this->request_ref_id); @@ -136,7 +136,7 @@ public function getFilter(\ilUIService $ui_service, string $action): Filter $active = array_fill(0, count($filter_inputs), true); $filter = $ui_service->filter()->standard( - 'question_table_filter_id', + "question_table_filter_{$this->request_ref_id}", $action, $filter_inputs, $active, @@ -147,7 +147,7 @@ public function getFilter(\ilUIService $ui_service, string $action): Filter } - public function getColums(): array + public function getColumns(): array { $f = $this->ui_factory->table()->column(); $df = $this->data_factory->dateFormat(); @@ -162,7 +162,7 @@ public function getColums(): array 'author' => $f->text($this->lng->txt('author'))->withIsOptional(true, true), 'lifecycle' => $f->text($this->lng->txt('qst_lifecycle'))->withIsOptional(true, true), 'taxonomies' => $f->text($this->lng->txt('qpl_settings_subtab_taxonomies'))->withIsOptional(true, true), - 'feedback' => $f->boolean($this->lng->txt('feedback'), $icon_yes, $icon_no)->withIsOptional(true, true), + 'feedback' => $f->boolean($this->lng->txt('tst_feedback'), $icon_yes, $icon_no)->withIsOptional(true, true), 'created' => $f->date( $this->lng->txt('create_date'), $this->current_user->getDateTimeFormat() @@ -330,27 +330,27 @@ protected function getActions(): array { $write_access = $this->rbac->checkAccess('write', $this->request_ref_id); return array_merge( - $this->buildAction('copy', 'standard'), - $write_access ? $this->buildAction('move', 'standard') : [], - $write_access ? $this->buildAction('delete', 'standard') : [], - $this->buildAction('export', 'multi'), - $this->buildAction('preview', 'single'), - $this->buildAction('statistics', 'single'), - $write_access ? $this->buildAction('edit_question', 'single') : [], - $write_access ? $this->buildAction('edit_page', 'single') : [], - $write_access ? $this->buildAction('feedback', 'single') : [], - $write_access ? $this->buildAction(\ilBulkEditQuestionsGUI::CMD_EDITTAUTHOR, 'multi') : [], - $write_access ? $this->buildAction(\ilBulkEditQuestionsGUI::CMD_EDITLIFECYCLE, 'multi') : [], - $write_access ? $this->buildAction(\ilBulkEditQuestionsGUI::CMD_EDITTAXONOMIES, 'multi') : [], - $this->showCommentAction() ? $this->buildAction('comments', 'single', true) : [] + $this->buildAction('copy', 'copy', 'standard'), + $write_access ? $this->buildAction('move', 'move', 'standard') : [], + $write_access ? $this->buildAction('delete', 'delete', 'standard') : [], + $this->buildAction('export', 'export', 'multi'), + $this->buildAction('preview', 'preview', 'single'), + $this->buildAction('statistics', 'statistics', 'single'), + $write_access ? $this->buildAction('edit_question', 'edit_question', 'single') : [], + $write_access ? $this->buildAction('edit_page', 'edit_page', 'single') : [], + $write_access ? $this->buildAction('feedback', 'tst_feedback', 'single') : [], + $write_access ? $this->buildAction(\ilBulkEditQuestionsGUI::CMD_EDITTAUTHOR, 'bulkedit_author', 'multi') : [], + $write_access ? $this->buildAction(\ilBulkEditQuestionsGUI::CMD_EDITLIFECYCLE, 'bulkedit_lifecycle', 'multi') : [], + $write_access ? $this->buildAction(\ilBulkEditQuestionsGUI::CMD_EDITTAXONOMIES, 'bulkedit_taxonomies', 'multi') : [], + $this->showCommentAction() ? $this->buildAction('comments', 'comments', 'single', true) : [] ); } - protected function buildAction(string $act, string $type, bool $async = false): array + protected function buildAction(string $act, string $lng_var, string $type, bool $async = false): array { $action = $this->ui_factory->table()->action() ->$type( - $this->lng->txt($act), + $this->lng->txt($lng_var), $this->url_builder->withParameter($this->action_parameter_token, $act), $this->row_id_token ); diff --git a/components/ILIAS/TestQuestionPool/src/RequestDataCollector.php b/components/ILIAS/TestQuestionPool/src/RequestDataCollector.php index 26801bb7042b..dd4a08784419 100755 --- a/components/ILIAS/TestQuestionPool/src/RequestDataCollector.php +++ b/components/ILIAS/TestQuestionPool/src/RequestDataCollector.php @@ -245,6 +245,15 @@ public function rawArray(string $key): array return $this->retrieveArray($key, 1, $this->refinery->identity()); } + public function getRowIdParameter(string $key): string|int + { + return $this->get($key, $this->refinery->byTrying([ + $this->refinery->kindlyTo()->int(), + $this->refinery->kindlyTo()->string(), + $this->refinery->custom()->transformation(fn(array $v): string|int => $v[0]) + ])); + } + /** * @return array<int>|string */ diff --git a/components/ILIAS/TestQuestionPool/src/RequestDataCollectorInterface.php b/components/ILIAS/TestQuestionPool/src/RequestDataCollectorInterface.php index ebecb6fa70ac..c92e13064b95 100644 --- a/components/ILIAS/TestQuestionPool/src/RequestDataCollectorInterface.php +++ b/components/ILIAS/TestQuestionPool/src/RequestDataCollectorInterface.php @@ -54,4 +54,6 @@ public function getPostKeys(): array; * @return array|string<int> */ public function getMultiSelectionIds(string $key): array|string; + + public function getRowIdParameter(string $key): string|int; } diff --git a/components/ILIAS/TestQuestionPool/src/Skills/EditSkillsOfQuestionTable.php b/components/ILIAS/TestQuestionPool/src/Skills/EditSkillsOfQuestionTable.php index 28422fd4d64e..a09a11b9c688 100644 --- a/components/ILIAS/TestQuestionPool/src/Skills/EditSkillsOfQuestionTable.php +++ b/components/ILIAS/TestQuestionPool/src/Skills/EditSkillsOfQuestionTable.php @@ -22,7 +22,7 @@ use ILIAS\Data\Order; use ILIAS\Data\Range; -use ILIAS\TestQuestionPool\RequestDataCollector; +use ILIAS\TestQuestionPool\RequestDataCollectorInterface; use ILIAS\UI\Component\Table\DataRetrieval; use ILIAS\UI\Component\Table\DataRowBuilder; use ILIAS\UI\Factory as UIFactory; @@ -33,7 +33,7 @@ class EditSkillsOfQuestionTable implements DataRetrieval public const string ID = 'ska'; public function __construct( - private readonly RequestDataCollector $pool_request, + private readonly RequestDataCollectorInterface $pool_request, private readonly \ilAssQuestionSkillAssignmentList $assignment_list, private readonly UIFactory $ui_factory, private readonly \ilLanguage $lng, @@ -46,7 +46,7 @@ public function __construct( */ public function getComponents(URLBuilder $url_builder): array { - $question = \assQuestionGUI::_getQuestionGUI('', $this->pool_request->getQuestionId())->getObject(); + $question = \assQuestion::instantiateQuestion($this->pool_request->getQuestionId()); return [ $this->ui_factory->table()->data( $this, @@ -80,7 +80,7 @@ public function getRows( 'eval_mode' => $this->lng->txt($record->hasEvalModeBySolution() ? 'qpl_skill_point_eval_mode_solution_compare' : 'qpl_skill_point_eval_mode_quest_result'), - 'points' => $record->getSkillPoints(), + 'points' => $record->getMaxSkillPoints(), ] ), $record diff --git a/components/ILIAS/TestQuestionPool/src/Skills/EditSkillsOfQuestionTableEditAction.php b/components/ILIAS/TestQuestionPool/src/Skills/EditSkillsOfQuestionTableEditAction.php index 8e130d00ffd7..8c2865822e32 100644 --- a/components/ILIAS/TestQuestionPool/src/Skills/EditSkillsOfQuestionTableEditAction.php +++ b/components/ILIAS/TestQuestionPool/src/Skills/EditSkillsOfQuestionTableEditAction.php @@ -31,7 +31,8 @@ class EditSkillsOfQuestionTableEditAction implements EditSkillsOfQuestionTableAc public function __construct( private readonly UIFactory $ui_factory, - private readonly \ilLanguage $lng + private readonly \ilLanguage $lng, + private readonly bool $assignment_editing_enabled ) { } @@ -52,7 +53,7 @@ public function getTableAction( URLBuilderToken $action_type_token ): Action { return $this->ui_factory->table()->action()->single( - $this->lng->txt('tst_edit_competence_assign'), + $this->lng->txt($this->assignment_editing_enabled ? 'tst_edit_competence_assign' : 'tst_view_competence_assign'), $url_builder ->withParameter($action_token, self::ACTION_ID) ->withParameter($action_type_token, EditSkillsOfQuestionTableActions::SHOW_ACTION), diff --git a/components/ILIAS/TestQuestionPool/src/Skills/SkillUsagesTable.php b/components/ILIAS/TestQuestionPool/src/Skills/SkillUsagesTable.php index bde874700acf..a01274ebf0b5 100644 --- a/components/ILIAS/TestQuestionPool/src/Skills/SkillUsagesTable.php +++ b/components/ILIAS/TestQuestionPool/src/Skills/SkillUsagesTable.php @@ -51,6 +51,7 @@ public function getColumns(): array return [ 'skill_title' => $column_factory->text($this->lng->txt('qpl_qst_skl_usg_skill_col')), + 'skill_path' => $column_factory->text($this->lng->txt('tst_competence_tree')), 'num_assigns' => $column_factory->number($this->lng->txt('qpl_qst_skl_usg_numq_col')), 'max_points' => $column_factory->number($this->lng->txt('qpl_qst_skl_usg_sklpnt_col')) ]; diff --git a/components/ILIAS/TestQuestionPool/src/Skills/SkillsByQuestionOverviewTable.php b/components/ILIAS/TestQuestionPool/src/Skills/SkillsByQuestionOverviewTable.php index d0d90e1604af..d6c233baabf5 100644 --- a/components/ILIAS/TestQuestionPool/src/Skills/SkillsByQuestionOverviewTable.php +++ b/components/ILIAS/TestQuestionPool/src/Skills/SkillsByQuestionOverviewTable.php @@ -68,7 +68,7 @@ private function mapRow(PresentationRow $row, SkillAssignments $record, URI $edi : 'qpl_skill_point_eval_mode_quest_result' ) ) - ->withProperty($this->lng->txt('tst_comp_points'), (string) $skill_assignment->getSkillPoints()); + ->withProperty($this->lng->txt('tst_comp_points'), (string) $skill_assignment->getMaxSkillPoints()); } $row = $row diff --git a/components/ILIAS/TestQuestionPool/templates/default/tpl.il_as_qpl_mc_mr_output_solution.html b/components/ILIAS/TestQuestionPool/templates/default/tpl.il_as_qpl_mc_mr_output_solution.html index 026b30ff8794..93f8c4240e3e 100755 --- a/components/ILIAS/TestQuestionPool/templates/default/tpl.il_as_qpl_mc_mr_output_solution.html +++ b/components/ILIAS/TestQuestionPool/templates/default/tpl.il_as_qpl_mc_mr_output_solution.html @@ -5,7 +5,7 @@ <div class="ilc_qanswer_Answer"> <div> <!-- BEGIN solution_image --> - <img src="{SOLUTION_IMAGE}" alt="{SOLUTION_ALT}" title="{SOLUTION_ALT}" /> + <img src="{SOLUTION_IMAGE}" alt="{SOLUTION_ALT}" title="{SOLUTION_ALT}" class="ilc_solution_image" /> <!-- END solution_image --> <!-- BEGIN solution_field --> <input type="checkbox" name="multiple_choice_result_q{QID}_{SUFFIX}" value="{SOLUTION_VALUE}" readonly disabled {SOLUTION_CHECKED} /> @@ -35,4 +35,4 @@ <!-- END feedback --> <!-- END answer_row --> </div> -</div> \ No newline at end of file +</div> diff --git a/components/ILIAS/TestQuestionPool/templates/default/tpl.il_as_qpl_mc_sr_output_solution.html b/components/ILIAS/TestQuestionPool/templates/default/tpl.il_as_qpl_mc_sr_output_solution.html index 6480d19741d7..24d3e5af75d9 100755 --- a/components/ILIAS/TestQuestionPool/templates/default/tpl.il_as_qpl_mc_sr_output_solution.html +++ b/components/ILIAS/TestQuestionPool/templates/default/tpl.il_as_qpl_mc_sr_output_solution.html @@ -5,7 +5,7 @@ <div class="ilc_qanswer_Answer"> <div> <!-- BEGIN solution_image --> - <img src="{SOLUTION_IMAGE}" alt="{SOLUTION_ALT}" title="{SOLUTION_ALT}" /> + <img src="{SOLUTION_IMAGE}" alt="{SOLUTION_ALT}" title="{SOLUTION_ALT}" class="ilc_solution_image" /> <!-- END solution_image --> <!-- BEGIN solution_field --> <input type="radio" name="multiple_choice_result_q{QID}_{SUFFIX}" value="{SOLUTION_VALUE}" readonly disabled {SOLUTION_CHECKED} /> @@ -31,4 +31,4 @@ <!-- END feedback --> <!-- END answer_row --> </div> -</div> \ No newline at end of file +</div> diff --git a/components/ILIAS/TestQuestionPool/templates/default/tpl.il_as_qpl_text_question_output_solution.html b/components/ILIAS/TestQuestionPool/templates/default/tpl.il_as_qpl_text_question_output_solution.html index 56dfd8176783..e0c3c29e5976 100755 --- a/components/ILIAS/TestQuestionPool/templates/default/tpl.il_as_qpl_text_question_output_solution.html +++ b/components/ILIAS/TestQuestionPool/templates/default/tpl.il_as_qpl_text_question_output_solution.html @@ -7,7 +7,7 @@ <!-- END question_text --> <div class="ilc_answers answers ilClearFloat"> <!-- BEGIN essay_div --> - <div class="ilc_qanswer_Answer solutionbox">{DIV_ESSAY}</div> + <div class="ilc_qanswer_Answer">{DIV_ESSAY}</div> <!-- END essay_div --> <!-- BEGIN essay_textarea --> <div class="fullwidth textarea" spellcheck="false">{TA_ESSAY}</div> diff --git a/components/ILIAS/Tracking/classes/Setup/ProgressBlockUpdateSteps11.php b/components/ILIAS/Tracking/classes/Setup/ProgressBlockUpdateSteps11.php index 282c3d1181f8..e5afef749a2d 100644 --- a/components/ILIAS/Tracking/classes/Setup/ProgressBlockUpdateSteps11.php +++ b/components/ILIAS/Tracking/classes/Setup/ProgressBlockUpdateSteps11.php @@ -57,4 +57,27 @@ public function step_1(): void ]); $this->db->addPrimaryKey('ut_progress_block', ['obj_id']); } + + /** + * Fix column types in progress block table + */ + public function step_2(): void + { + if ( + !$this->db->tableExists('ut_progress_block') || + !$this->db->tableColumnExists('ut_progress_block', 'obj_id') + ) { + return; + } + $this->db->modifyTableColumn( + 'ut_progress_block', + 'obj_id', + [ + 'type' => ilDBConstants::T_INTEGER, + 'length' => 4, + 'default' => 0, + 'notnull' => true + ] + ); + } } diff --git a/components/ILIAS/Tracking/classes/class.ilLPProgressBlockGUI.php b/components/ILIAS/Tracking/classes/class.ilLPProgressBlockGUI.php index 4cdbcafa6542..80894e93a3c9 100644 --- a/components/ILIAS/Tracking/classes/class.ilLPProgressBlockGUI.php +++ b/components/ILIAS/Tracking/classes/class.ilLPProgressBlockGUI.php @@ -43,6 +43,7 @@ public function __construct() $this->setBlockId('lpprogress_' . $this->ctrl->getContextObjId()); $this->setTitle($this->lng->txt('trac_progress_block_title')); $this->setPresentation(self::PRES_SEC_LEG); + $this->setActions(); } public function getBlockType(): string @@ -81,4 +82,29 @@ protected function getLegacyContent(): string $mode_and_status ]); } + + protected function setActions(): void + { + $read_only_allowed = true; + if ($this->supportsMembers($this->requested_ref_id)) { + $read_only_allowed = ilParticipants::_isParticipant($this->requested_ref_id, $this->user->getId()); + } + if (!ilLearningProgressAccess::checkAccess($this->requested_ref_id, $read_only_allowed)) { + return; + } + $this->ctrl->setParameterByClass(ilLearningProgressGUI::class, 'ref_id', $this->requested_ref_id); + $link = $this->ctrl->getLinkTargetByClass(ilLearningProgressGUI::class); + $this->ctrl->clearParameterByClass(ilLearningProgressGUI::class, 'ref_id'); + $this->addBlockCommand($link, $this->lng->txt('trac_progress_block_details')); + } + + protected function supportsMembers(int $ref_id): bool + { + try { + ilParticipants::getInstance($ref_id); + return true; + } catch (Exception) { + return false; + } + } } diff --git a/components/ILIAS/Tracking/classes/class.ilLPTableBaseGUI.php b/components/ILIAS/Tracking/classes/class.ilLPTableBaseGUI.php index f31d186c119a..9f34b1d7bf49 100755 --- a/components/ILIAS/Tracking/classes/class.ilLPTableBaseGUI.php +++ b/components/ILIAS/Tracking/classes/class.ilLPTableBaseGUI.php @@ -32,7 +32,7 @@ */ class ilLPTableBaseGUI extends ilTable2GUI { - public const HIT_LIMIT = 5000; + public const int HIT_LIMIT = 5000; protected RefineryFactory $refinery; protected HttpService $http; @@ -190,20 +190,6 @@ public function executeCommand(): bool $obj->writeToSession(); } - if ($this->requested_tmpl_create !== "") { - $this->ctrl->setParameter( - $this->parent_obj, - "tbltplcrt", - $this->requested_tmpl_create - ); - } - if ($this->requested_tmpl_delete !== "") { - $this->ctrl->setParameter( - $this->parent_obj, - "tbltpldel", - $this->requested_tmpl_delete - ); - } $this->ctrl->redirect($this->parent_obj, $this->parent_cmd); } else { // e.g. repository selector @@ -656,7 +642,6 @@ public function getCurrentFilter(bool $as_query = false): array $item = $this->getFilterItemByPostVar($id); switch ($id) { case "title": - case "country": case "gender": case "city": case "language": @@ -671,7 +656,7 @@ public function getCurrentFilter(bool $as_query = false): array case "zipcode": case "email": case "matriculation": - case "sel_country": + case "country": case "query": case "type": case "area": @@ -1029,11 +1014,10 @@ protected function getSelectableUserColumns( ): array { $cols = $privacy_fields = array(); - $this->profile->skipGroup(AvailableSections::Interests); if ($a_in_course === 1) { - $ufs = $this->profile->getVisibleFields(Context::Course); + $ufs = $this->profile->getVisibleFields(Context::Course, null, [AvailableSections::Interests]); } elseif ($a_in_group === 1) { - $ufs = $this->profile->getVisibleFields(Context::Group); + $ufs = $this->profile->getVisibleFields(Context::Group, null, [AvailableSections::Interests]); } else { $ufs = $this->profile->getFields(); } @@ -1138,6 +1122,9 @@ protected function getSelectableUserColumns( )) { // other user profile fields foreach ($ufs as $fd) { + if ($fd->isCustom()) { + continue; + } $f = $fd->getIdentifier(); if (!isset($cols[$f]) && $f !== "username" && !$fd->hiddenInLists()) { $cols[$f] = array( diff --git a/components/ILIAS/Tracking/classes/class.ilLearningProgressBaseGUI.php b/components/ILIAS/Tracking/classes/class.ilLearningProgressBaseGUI.php index f27eaaf6f893..1debd834d1de 100755 --- a/components/ILIAS/Tracking/classes/class.ilLearningProgressBaseGUI.php +++ b/components/ILIAS/Tracking/classes/class.ilLearningProgressBaseGUI.php @@ -514,7 +514,7 @@ public function __appendLPDetails( } $info->addProperty( - $this->lng->txt('trac_visits'), + $this->lng->txt('trac_visits_nr'), (string) ($progress['visits'] ?? "") ); diff --git a/components/ILIAS/Tracking/classes/class.ilTrQuery.php b/components/ILIAS/Tracking/classes/class.ilTrQuery.php index 2109df97b16e..e09cb6114565 100755 --- a/components/ILIAS/Tracking/classes/class.ilTrQuery.php +++ b/components/ILIAS/Tracking/classes/class.ilTrQuery.php @@ -185,24 +185,24 @@ public static function getSCOsStatusForUser( foreach ($a_sco_ids as $sco_id) { // #9719 - can have in_progress AND failed/completed if (in_array($a_user_id, $status_info["failed"][$sco_id])) { - $status = ilLPStatus::LP_STATUS_FAILED; + $status = ilLPStatus::LP_STATUS_FAILED_NUM; } elseif (in_array( $a_user_id, $status_info["completed"][$sco_id] )) { - $status = ilLPStatus::LP_STATUS_COMPLETED; + $status = ilLPStatus::LP_STATUS_COMPLETED_NUM; } elseif (in_array( $a_user_id, $status_info["in_progress"][$sco_id] )) { - $status = ilLPStatus::LP_STATUS_IN_PROGRESS; + $status = ilLPStatus::LP_STATUS_IN_PROGRESS_NUM; } else { - $status = ilLPStatus::LP_STATUS_NOT_ATTEMPTED; + $status = ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM; } $items[$sco_id] = array( "title" => $status_info["scos_title"][$sco_id], - "status" => (int) $status, + "status" => $status, "type" => "sahs", "score" => (int) ($scores[$sco_id] ?? 0) ); @@ -880,9 +880,8 @@ protected static function getSummaryDataForObject( } if ($valid) { - $result["country"] = self::getSummaryPercentages("country", $query); - $result["sel_country"] = self::getSummaryPercentages( - "sel_country", + $result["country"] = self::getSummaryPercentages( + "country", $query ); $result["city"] = self::getSummaryPercentages("city", $query); @@ -1131,7 +1130,6 @@ protected static function buildFilters( case "street": case "email": case "matriculation": - case "country": case "city": case "title": $where[] = $ilDB->like( @@ -1143,7 +1141,7 @@ protected static function buildFilters( case "gender": case "zipcode": - case "sel_country": + case "country": $where[] = "usr_data." . $id . " = " . $ilDB->quote( $value, "text" diff --git a/components/ILIAS/Tracking/classes/object_statistics/class.ilLPObjectStatisticsAdminTableGUI.php b/components/ILIAS/Tracking/classes/object_statistics/class.ilLPObjectStatisticsAdminTableGUI.php index 85992d1ecf4a..afdb1d2e1560 100755 --- a/components/ILIAS/Tracking/classes/object_statistics/class.ilLPObjectStatisticsAdminTableGUI.php +++ b/components/ILIAS/Tracking/classes/object_statistics/class.ilLPObjectStatisticsAdminTableGUI.php @@ -77,6 +77,11 @@ public function getItems(): void $this->setData($data); } + public function numericOrdering(string $a_field): bool + { + return $a_field === "count"; + } + /** * Fill table row */ diff --git a/components/ILIAS/Tracking/classes/repository_statistics/class.ilTrMatrixTableGUI.php b/components/ILIAS/Tracking/classes/repository_statistics/class.ilTrMatrixTableGUI.php index bd066b7fcc8d..608526e15b60 100755 --- a/components/ILIAS/Tracking/classes/repository_statistics/class.ilTrMatrixTableGUI.php +++ b/components/ILIAS/Tracking/classes/repository_statistics/class.ilTrMatrixTableGUI.php @@ -705,7 +705,7 @@ protected function fillRowExcel( case (substr($c, 0, 4) == "obj_"): $obj_id = substr($c, 4); $val = ilLearningProgressBaseGUI::_getStatusText( - (int) $a_set[$c] + (int) ($a_set[$c] ?? ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM) ); $a_excel->setCell($a_row, $cnt, $val); @@ -723,7 +723,7 @@ protected function fillRowExcel( case (substr($c, 0, 7) == "objsco_"): case (substr($c, 0, 7) == "objsub_"): $val = ilLearningProgressBaseGUI::_getStatusText( - (int) $a_set[$c] + (int) ($a_set[$c] ?? ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM) ); $a_excel->setCell($a_row, $cnt, $val); break; @@ -789,7 +789,7 @@ protected function fillRowCSV(ilCSVWriter $a_csv, array $a_set): void case (substr($c, 0, 4) == "obj_"): $obj_id = substr($c, 4); $val = ilLearningProgressBaseGUI::_getStatusText( - (int) $a_set[$c] + (int) ($a_set[$c] ?? ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM) ); $a_csv->addColumn($val); @@ -806,7 +806,7 @@ protected function fillRowCSV(ilCSVWriter $a_csv, array $a_set): void case (substr($c, 0, 7) == "objsco_"): case (substr($c, 0, 7) == "objsub_"): $val = ilLearningProgressBaseGUI::_getStatusText( - (int) $a_set[$c] + (int) ($a_set[$c] ?? ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM) ); $a_csv->addColumn($val); break; diff --git a/components/ILIAS/Tracking/classes/repository_statistics/class.ilTrObjectUsersPropsTableGUI.php b/components/ILIAS/Tracking/classes/repository_statistics/class.ilTrObjectUsersPropsTableGUI.php index 56ba89d466d3..0531e014a4aa 100755 --- a/components/ILIAS/Tracking/classes/repository_statistics/class.ilTrObjectUsersPropsTableGUI.php +++ b/components/ILIAS/Tracking/classes/repository_statistics/class.ilTrObjectUsersPropsTableGUI.php @@ -258,7 +258,6 @@ public function initFilter(): void case "street": case "zipcode": case "city": - case "country": case "email": case "matriculation": case "login": @@ -326,9 +325,9 @@ public function initFilter(): void $this->filter["gender"] = $item->getValue(); break; - case "sel_country": + case "country": $item = $this->addFilterItemByMetaType( - "sel_country", + "country", ilTable2GUI::FILTER_SELECT, true, $meta["txt"] @@ -343,7 +342,7 @@ public function initFilter(): void array("" => $this->lng->txt("trac_all")) + $options ); - $this->filter["sel_country"] = $item->getValue(); + $this->filter["country"] = $item->getValue(); break; case "status": diff --git a/components/ILIAS/Tracking/classes/repository_statistics/class.ilTrSummaryTableGUI.php b/components/ILIAS/Tracking/classes/repository_statistics/class.ilTrSummaryTableGUI.php index 764400d0cdde..e0dd3486de70 100755 --- a/components/ILIAS/Tracking/classes/repository_statistics/class.ilTrSummaryTableGUI.php +++ b/components/ILIAS/Tracking/classes/repository_statistics/class.ilTrSummaryTableGUI.php @@ -93,7 +93,7 @@ public function __construct( $labels = $this->getSelectableColumns(); foreach ($this->getSelectedColumns() as $c) { // see bug #35119; these column list percentage lists and are not sortable - if (in_array($c, ["status", "mark", "language", "country", "gender", "city", "sel_country"])) { + if (in_array($c, ["status", "mark", "language", "gender", "city", "country"])) { $this->addColumn($labels[$c]["txt"]); } else { $this->addColumn($labels[$c]["txt"], $c); @@ -184,7 +184,7 @@ public function getSelectableColumns(): array $all[] = "mark"; } - $privacy = array("gender", "city", "country", "sel_country"); + $privacy = array("gender", "city", "country"); foreach ($privacy as $field) { if ( ($this->is_in_course && $this->setting->get("usr_settings_course_export_" . $field)) || @@ -386,18 +386,10 @@ public function initFilter(): void $this->filter["city"] = $item->getValue(); } + if ($this->setting->get("usr_settings_course_export_country")) { $item = $this->addFilterItemByMetaType( "country", - ilTable2GUI::FILTER_TEXT, - true - ); - $this->filter["country"] = $item->getValue(); - } - - if ($this->setting->get("usr_settings_course_export_sel_country")) { - $item = $this->addFilterItemByMetaType( - "sel_country", ilTable2GUI::FILTER_SELECT, true ); @@ -407,7 +399,7 @@ public function initFilter(): void ) ) + $this->getSelCountryCodes() ); - $this->filter["sel_country"] = $item->getValue(); + $this->filter["country"] = $item->getValue(); } $item = $this->addFilterItemByMetaType( @@ -573,10 +565,6 @@ public function getItems(int $a_object_id, int $a_ref_id): void // percentages $users_no = $result["user_total"]; - $data["set"][$idx]["country"] = $this->getItemsPercentages( - $result["country"], - $users_no - ); $data["set"][$idx]["gender"] = $this->getItemsPercentages( $result["gender"], $users_no, @@ -590,8 +578,8 @@ public function getItems(int $a_object_id, int $a_ref_id): void $result["city"], $users_no ); - $data["set"][$idx]["sel_country"] = $this->getItemsPercentages( - $result["sel_country"], + $data["set"][$idx]["country"] = $this->getItemsPercentages( + $result["country"], $users_no, $this->getSelCountryCodes() ); @@ -830,13 +818,12 @@ protected function fillRow(array $a_set): void foreach ($this->getSelectedColumns() as $c) { switch ($c) { - case "country": case "gender": case "city": case "language": case "status": case "mark": - case "sel_country": + case "country": $this->renderPercentages($c, $a_set[$c]); break; @@ -960,13 +947,13 @@ protected function isArrayColumn(string $a_name): bool { if (in_array( $a_name, - array("country", + array( "gender", "city", "language", "status", "mark", - 'sel_country' + 'country' ) )) { return true; diff --git a/components/ILIAS/Tracking/classes/status/class.ilLPStatusTestPassed.php b/components/ILIAS/Tracking/classes/status/class.ilLPStatusTestPassed.php index 5e26a7c0b6ba..f8d991e89de1 100755 --- a/components/ILIAS/Tracking/classes/status/class.ilLPStatusTestPassed.php +++ b/components/ILIAS/Tracking/classes/status/class.ilLPStatusTestPassed.php @@ -19,6 +19,7 @@ declare(strict_types=0); use ILIAS\Test\Results\Data\Repository; +use ILIAS\Test\Participants\ParticipantRepository; use ILIAS\Test\TestDIC; /** @@ -71,9 +72,27 @@ private static function getUserIdsByResultArrayStatus( public static function _getStatusInfo(int $a_obj_id): array { - /** @var Repository $test_result_repository */ - $test_result_repository = TestDIC::dic()['results.data.repository']; - $status_info['results'] = $test_result_repository->getPassedParticipants($a_obj_id); + /** @var ParticipantRepository $participant_repository */ + $participant_repository = TestDIC::dic()['participant.repository']; + $test_id = ilObjTestAccess::_getTestIDFromObjectID($a_obj_id); + + $lp_status = new self($a_obj_id); + $results = []; + + foreach ($participant_repository->getParticipants($test_id) as $participant) { + $user_id = $participant->getUserId(); + $status = $lp_status->determineStatus($a_obj_id, $user_id); + + $results[] = [ + 'user_id' => $user_id, + 'passed' => ($status === self::LP_STATUS_COMPLETED_NUM), + 'failed' => ($status === self::LP_STATUS_FAILED_NUM), + 'in_progress' => ($status === self::LP_STATUS_IN_PROGRESS_NUM), + 'not_attempted' => ($status === self::LP_STATUS_NOT_ATTEMPTED_NUM) + ]; + } + + $status_info['results'] = $results; return $status_info; } diff --git a/components/ILIAS/Tracking/templates/default/tpl.trac_summary_row.html b/components/ILIAS/Tracking/templates/default/tpl.trac_summary_row.html index 2198871f71cd..68df0f7ceaff 100755 --- a/components/ILIAS/Tracking/templates/default/tpl.trac_summary_row.html +++ b/components/ILIAS/Tracking/templates/default/tpl.trac_summary_row.html @@ -6,7 +6,7 @@ </div> <!-- END status_bl --> <!-- BEGIN simple_path_bl --> - <div class="il_info">{COLL_PATH}</div> + <div class="il_info">{COLL_PATH}</div> <!-- END simple_path_bl --> </td> <!-- BEGIN user_total --> @@ -85,17 +85,6 @@ <!-- END country_percentages --> </td> <!-- END country --> - <!-- BEGIN sel_country --> - <td class="std small"> - <!-- BEGIN sel_country_percentages --> - <ul style="margin:0; padding:0; padding-left: 15px;"> - <!-- BEGIN sel_country_row --> - <li>{CAPTION}: {ABSOLUTE} ({PERCENTAGE}%)</li> - <!-- END sel_country_row --> - </ul> - <!-- END sel_country_percentages --> - </td> - <!-- END sel_country --> <!-- BEGIN language --> <td class="std small"> <!-- BEGIN language_percentages --> @@ -123,7 +112,7 @@ <td class="std small"> <!-- BEGIN item_path --> <p>{PATH_ITEM}<br/><a href="{URL_DETAILS}">{TXT_DETAILS}</a></p> - <!-- END item_path --> + <!-- END item_path --> </td> <!-- BEGIN column_action --> <td class="std" nowrap="nowrap"> diff --git a/components/ILIAS/Tree/classes/class.ilPathGUI.php b/components/ILIAS/Tree/classes/class.ilPathGUI.php index f932b4874749..0c1dec308807 100755 --- a/components/ILIAS/Tree/classes/class.ilPathGUI.php +++ b/components/ILIAS/Tree/classes/class.ilPathGUI.php @@ -33,6 +33,7 @@ class ilPathGUI protected ilCtrlInterface $ctrl; protected ilObjectDefinition $objectDefinition; protected \ILIAS\Refinery\Factory $refinery; + private ilAccessHandler $access; /** * Constructor @@ -48,6 +49,7 @@ public function __construct() $this->ctrl = $DIC['ilCtrl']; $this->objectDefinition = $DIC['objDefinition']; $this->refinery = $DIC->refinery(); + $this->access = $DIC->access(); } /** @@ -194,7 +196,9 @@ protected function getHTML(): string $tpl->parseCurrentBlock(); } - if (!$this->tree->isDeleted($ref_id)) { + if (!$this->tree->isDeleted($ref_id) && + ($this->access->checkAccess('visible', '', (int) $ref_id) + || $this->access->checkAccess('read', '', (int) $ref_id))) { $tpl->setCurrentBlock('locator_item'); $tpl->setVariable('LINK_ITEM', $this->buildLink($ref_id, $type)); $tpl->setVariable('ITEM', $title); diff --git a/components/ILIAS/UI/resources/images/object/marked.svg b/components/ILIAS/UI/resources/images/object/marked.svg old mode 100755 new mode 100644 index 937bb5e52949..b710f36ebbea --- a/components/ILIAS/UI/resources/images/object/marked.svg +++ b/components/ILIAS/UI/resources/images/object/marked.svg @@ -1,21 +1,26 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> -<g> - <defs> - <polygon id="SVGID_1_" points="16,2.7 10.6,10 2,12.9 7.2,20.2 7.3,29.3 16,26.6 24.7,29.3 24.8,20.2 30,12.9 21.4,10 "/> - </defs> - <clipPath id="SVGID_2_"> - <use xlink:href="#SVGID_1_" overflow="visible"/> - </clipPath> - - <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="0.9643" y1="33.6071" x2="1.9643" y2="33.6071" gradientTransform="matrix(-28 0 0 -28 57 957)"> - <stop offset="0" style="stop-color:#FF8E2C"/> - <stop offset="1.000000e-02" style="stop-color:#FF8E2C"/> - <stop offset="1" style="stop-color:#E66E1E"/> - </linearGradient> - <rect x="2" y="2.7" clip-path="url(#SVGID_2_)" fill="url(#SVGID_3_)" width="28" height="26.6"/> -</g> -</svg> +<?xml version="1.0" encoding="UTF-8"?> +<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 320 320"> + <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) --> + <defs> + <style> + .st0 { + fill: none; + } + + .st1 { + fill: #4c6586; + } + + .st2 { + clip-path: url(#clippath); + } + </style> + <clipPath id="clippath"> + <rect class="st0" x="110" y="40" width="100" height="240"/> + </clipPath> + </defs> + <rect class="st0" width="320" height="320"/> + <g class="st2"> + <path class="st1" d="M170,70c0,5.5-4.5,10-10,10s-10-4.5-10-10,4.5-10,10-10,10,4.5,10,10M210,280V40h-100v240l50-35.2,50,35.2Z"/> + </g> +</svg> \ No newline at end of file diff --git a/components/ILIAS/UI/resources/images/object/marked_.svg b/components/ILIAS/UI/resources/images/object/marked_.svg old mode 100755 new mode 100644 index 6c9911af60a3..2fb126c455d6 --- a/components/ILIAS/UI/resources/images/object/marked_.svg +++ b/components/ILIAS/UI/resources/images/object/marked_.svg @@ -1,7 +1,26 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve"> -<polygon fill="#CAD0DF" points="16,2.7 21.4,10 30,12.9 24.8,20.2 24.7,29.3 16,26.6 7.3,29.3 7.2,20.2 2,12.9 10.6,10 "/> -</svg> +<?xml version="1.0" encoding="UTF-8"?> +<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 320 320"> + <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) --> + <defs> + <style> + .st0 { + fill: none; + } + + .st1 { + fill: #CAD0DF; + } + + .st2 { + clip-path: url(#clippath); + } + </style> + <clipPath id="clippath"> + <rect class="st0" x="110" y="40" width="100" height="240"/> + </clipPath> + </defs> + <rect class="st0" width="320" height="320"/> + <g class="st2"> + <path class="st1" d="M170,70c0,5.5-4.5,10-10,10s-10-4.5-10-10,4.5-10,10-10,10,4.5,10,10M210,280V40h-100v240l50-35.2,50,35.2Z"/> + </g> +</svg> \ No newline at end of file diff --git a/components/ILIAS/UI/resources/images/standard/icon_attach.svg b/components/ILIAS/UI/resources/images/standard/icon_attach.svg new file mode 100644 index 000000000000..24b39134104d --- /dev/null +++ b/components/ILIAS/UI/resources/images/standard/icon_attach.svg @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 320 320"> + <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) --> + <defs> + <style> + .st0 { + fill: none; + } + + .st1 { + fill: #4c6586; + } + + .st2 { + clip-path: url(#clippath); + } + </style> + <clipPath id="clippath"> + <rect class="st0" x="100" y="53.2" width="120" height="213.5"/> + </clipPath> + </defs> + <g class="st2"> + <path class="st1" d="M145,194.6,174.5,196.6s0,0,0,0h0ZM159.6,204.2h0s0,0,0,0M159.4,251.7h0s0,0,0,0M160.6,251.7s0,0,0,0h0ZM160,266.8c-2.9,0-5.7-.7-8.1-2l-43.8-25c-4.7-2.7-8.1-8.6-8.1-14v-117.5c0-4.1,3.4-7.5,7.5-7.5s7.5,3.4,7.5,7.5v117.4c0,.3.4.9.7,1.1l43.7,24.9c.3.1,1,.1,1.4,0l43.7-24.9c.2-.2.6-.8.7-1.1V68.2h-60v126.4c0,.4.4,1,.7,1.3l13.8,8.3c.3.1,1,.1,1.3,0l13.6-7.6c.2-.2.5-.7.6-1v-87.4c0-4.1,3.4-7.5,7.5-7.5s7.5,3.4,7.5,7.5v87.5c0,5.5-3.5,11.4-8.3,14l-13.7,7.6c-4.8,2.6-11.6,2.5-16.2-.3l-13.9-8.3c-4.6-2.8-7.9-8.7-7.9-14V65.7c0-6.9,5.6-12.5,12.5-12.5h65c6.9,0,12.5,5.6,12.5,12.5v160c0,5.4-3.4,11.3-8.1,14l-43.8,25c-2.3,1.3-5.2,2-8.1,2"/> + </g> + <rect class="st0" width="320" height="320"/> +</svg> \ No newline at end of file diff --git a/components/ILIAS/UI/resources/images/standard/icon_drafts.svg b/components/ILIAS/UI/resources/images/standard/icon_drafts.svg old mode 100755 new mode 100644 index c6a6a11532c6..2c980d720d30 --- a/components/ILIAS/UI/resources/images/standard/icon_drafts.svg +++ b/components/ILIAS/UI/resources/images/standard/icon_drafts.svg @@ -1,22 +1,26 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Generator: Adobe Illustrator 26.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - viewBox="0 0 320 320" style="enable-background:new 0 0 320 320;" xml:space="preserve"> -<style type="text/css"> - .st0{clip-path:url(#SVGID_00000075122491593332644510000014574227245275879810_);fill:#4C6586;} -</style> -<g> - <g> - <defs> - <rect id="SVGID_1_" width="320" height="320"/> - </defs> - <clipPath id="SVGID_00000010293120344611478740000010171371134618315455_"> - <use xlink:href="#SVGID_1_" style="overflow:visible;"/> - </clipPath> - <path style="clip-path:url(#SVGID_00000010293120344611478740000010171371134618315455_);fill:#4C6586;" d="M280,122.7h-35v139.8 - h35V122.7z M119.8,150h-40v15h40V150z M149.8,120h-70v15h70V120z M169.8,90h-90v15h90V90z M204.8,255h-150V65h150V255z M220,265 - V55c0-2.8-2.2-5-5-5H45c-2.8,0-5,2.2-5,5v210c0,2.8,2.2,5,5,5h170C217.8,270,220,267.8,220,265 M280,111.9l-5.7-16.2l-8.4-24.1 - c-1.9-5.5-5-5.5-6.9,0L248.4,102l0,0l-3.4,9.9h8.7l0,0H269H280z"/> - </g> -</g> -</svg> +<?xml version="1.0" encoding="UTF-8"?> +<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 320 320"> + <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) --> + <defs> + <style> + .st0 { + fill: none; + } + + .st1 { + fill: #4c6586; + } + + .st2 { + clip-path: url(#clippath); + } + </style> + <clipPath id="clippath"> + <rect class="st0" x="32.5" y="95.5" width="255" height="184.5"/> + </clipPath> + </defs> + <g class="st2"> + <path class="st1" d="M106,189.6h44.2v-10.5h-44.2v10.5ZM212.5,268.7H43.8v-95l56.8,42.8c1,.7,2.2,1.1,3.4,1.1h48.5c1.2,0,2.4-.4,3.4-1.1l56.8-42.8v95ZM162.8,165.8v31.4l-12.3,9.3h-44.7l-12.3-9.3v-31.4h69.4ZM209.4,162.1l-35.3,26.6v-34.1h-91.9v34.1l-35.3-26.6,81.3-54.2,81.3,54.2ZM223.8,270.3v-107.8c0-.3,0-.5,0-.8.2-2-.7-4.1-2.4-5.3l-90-60c-1.9-1.3-4.3-1.3-6.2,0l-90,60c-1.8,1.2-2.7,3.3-2.4,5.3,0,.3,0,.5,0,.8v107.8c0,4.7,3.4,9.7,9.8,9.7h171.7c4.7,0,9.8-3.4,9.8-9.7M287.5,150h-40v130h40v-130ZM287.5,140l-6.5-15.1-9.6-22.4c-2.2-5.1-5.7-5.1-7.9,0l-12.1,28.3s0,0,0,0l-3.9,9.2h40Z"/> + </g> + <rect class="st0" width="320" height="320"/> +</svg> \ No newline at end of file diff --git a/components/ILIAS/UI/resources/images/standard/icon_mailr.svg b/components/ILIAS/UI/resources/images/standard/icon_mailr.svg index 93d113f8d1d3..0de7634f686d 100644 --- a/components/ILIAS/UI/resources/images/standard/icon_mailr.svg +++ b/components/ILIAS/UI/resources/images/standard/icon_mailr.svg @@ -1 +1,26 @@ -<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="320" height="320" viewBox="0 0 320 320"><defs><style>.cls-1{fill:none;}.cls-1,.cls-2{stroke-width:0px;}.cls-2{fill:#4c6586;}</style></defs><path class="cls-2" d="M285.29,287.93H34.71c-6.12,0-11.11-5.2-11.11-11.59V115.42c0-2.31,1.33-4.41,3.41-5.41,2.08-1,4.55-.71,6.35.74l124.54,100.29c1.42,1.14,3.48,1.14,4.9,0l123.83-100.27c1.8-1.46,4.27-1.75,6.36-.75s3.42,3.1,3.42,5.42v160.91c0,6.39-4.98,11.59-11.11,11.59ZM35.6,275.93h248.8v-147.92l-114.05,92.36c-5.78,4.68-14.18,4.69-19.98.03L35.6,127.96v147.97ZM58.22,106.06h-12V38.07c0-3.31,2.69-6,6-6h216.14c3.31,0,6,2.69,6,6v67.97h-12v-61.97H58.22v61.99Z"/><rect class="cls-2" x="115.67" y="72.85" width="90" height="15"/><rect class="cls-2" x="115.67" y="102.85" width="90" height="15"/><rect class="cls-2" x="115.67" y="132.85" width="40" height="15"/><rect class="cls-1" x="0" y="0" width="320" height="320"/></svg> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8"?> +<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 320 320"> + <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) --> + <defs> + <style> + .st0 { + fill: none; + } + + .st1 { + fill: #4c6586; + } + + .st2 { + clip-path: url(#clippath); + } + </style> + <clipPath id="clippath"> + <rect class="st0" x="32.5" y="34" width="255" height="246"/> + </clipPath> + </defs> + <g class="st2"> + <path class="st1" d="M130.5,159.5h59v-14h-59v14ZM272.5,265H47.5v-126.6l75.7,57c1.3,1,2.9,1.5,4.5,1.5h64.6c1.6,0,3.2-.5,4.5-1.5l75.7-57v126.6ZM206.2,127.7v41.8l-16.4,12.4h-59.6l-16.4-12.4v-41.8h92.5ZM268.3,122.7l-47.1,35.5v-45.5h-122.5v45.5l-47.1-35.5,108.3-72.2,108.3,72.2ZM287.5,123.3c0-.4,0-.7,0-1.1.3-2.7-.9-5.4-3.3-7l-120-80c-2.5-1.7-5.8-1.7-8.3,0L35.8,115.3c-2.4,1.6-3.5,4.3-3.3,7,0,.3,0,.7,0,1.1v143.7c0,6.3,4.6,13,13.1,13h228.9c6.3,0,13.1-4.5,13.1-13V123.3Z"/> + </g> + <rect class="st0" width="320" height="320"/> +</svg> \ No newline at end of file diff --git a/components/ILIAS/UI/resources/images/standard/icon_outbox.svg b/components/ILIAS/UI/resources/images/standard/icon_outbox.svg index 17dcc1bfeb85..ffd890fea748 100644 --- a/components/ILIAS/UI/resources/images/standard/icon_outbox.svg +++ b/components/ILIAS/UI/resources/images/standard/icon_outbox.svg @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 320 320"> - <!-- Generator: Adobe Illustrator 29.6.1, SVG Export Plug-In . SVG Version: 2.1.1 Build 9) --> +<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 320 320"> + <!-- Generator: Adobe Illustrator 30.0.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 123) --> <defs> <style> .st0 { @@ -10,17 +10,8 @@ .st1 { fill: #4c6586; } - - .st2 { - clip-path: url(#clippath); - } </style> - <clipPath id="clippath"> - <rect class="st0" width="320" height="320"/> - </clipPath> </defs> - <polygon class="st1" points="140 125 140 185 180 185 180 125 210 125 160 85 110 125 140 125"/> - <g class="st2"> - <path class="st1" d="M250,230v-85h-15v75H85v-75h-15v85c0,2.8,2.2,5,5,5h170c2.8,0,5-2.2,5-5"/> - </g> + <path class="st1" d="M265,180v60H55v-60h-20v80h250v-80h-20ZM160,65l-59.3,55.6h34.5v69.4h49.5v-69.4h34.5l-59.3-55.6Z"/> + <rect class="st0" width="320" height="320"/> </svg> \ No newline at end of file diff --git a/components/ILIAS/UI/resources/js/Input/Field/dist/input.factory.min.js b/components/ILIAS/UI/resources/js/Input/Field/dist/input.factory.min.js index 57e92857b846..04d1d0b07553 100644 --- a/components/ILIAS/UI/resources/js/Input/Field/dist/input.factory.min.js +++ b/components/ILIAS/UI/resources/js/Input/Field/dist/input.factory.min.js @@ -12,7 +12,7 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning */ -!function(t,e,n){"use strict";class i{textarea;remainder=null;constructor(t){if(this.textarea=document.getElementById(t),null===this.textarea)throw new Error(`Could not find textarea for input-id '${t}'.`);if(this.shouldShowRemainder()){if(this.remainder=this.textarea.parentNode.querySelector('[data-action="remainder"]'),!this.remainder instanceof HTMLSpanElement)throw new Error(`Could not find remainder-element for input-id '${t}'.`);this.textarea.addEventListener("input",(()=>{this.updateRemainderCountHook()}))}}updateRemainderCountHook(){this.shouldShowRemainder()&&null!==this.remainder&&(this.remainder.innerHTML=(this.textarea.maxLength-this.textarea.value.length).toString())}updateTextareaContent(t,e=null,n=null){if(!this.isDisabled()){if(this.isContentTooLarge(t))return this.updateRemainderCountHook(),void this.textarea.focus();e=e??this.textarea.selectionStart,n=n??this.textarea.selectionEnd,this.textarea.value=t,e<t.length&&(this.textarea.selectionStart=e),n<t.length&&(this.textarea.selectionEnd=n),this.updateRemainderCountHook(),this.textarea.focus()}}insertCharactersAroundSelection(t,e){const n=this.getTextBeforeSelection()+t+this.getTextOfSelection()+e+this.getTextAfterSelection(),i=this.getAbsoluteSelectionStart()+t.length,s=this.getAbsoluteSelectionEnd()+t.length;this.updateTextareaContent(n,i,s)}getAbsoluteSelectionStart(){return this.textarea.selectionStart<this.textarea.selectionEnd?this.textarea.selectionStart:this.textarea.selectionEnd}getAbsoluteSelectionEnd(){return this.textarea.selectionStart>this.textarea.selectionEnd?this.textarea.selectionStart:this.textarea.selectionEnd}getLinesBeforeSelection(){return a(this.textarea.value).slice(0,s(this.getTextBeforeSelection()))}getLinesAfterSelection(){const t=a(this.textarea.value);return t.slice(s(this.getTextBeforeSelection()+this.getTextOfSelection())+1,t.length)}getLinesOfSelection(){const t=a(this.textarea.value);return t.slice(this.getLinesBeforeSelection().length,t.length-this.getLinesAfterSelection().length)}isContentTooLarge(t){const e=this.getMaxLength();return!(e<0)&&e<t.length}getTextBeforeSelection(){return this.textarea.value.substring(0,this.getAbsoluteSelectionStart())}getTextAfterSelection(){return this.textarea.value.substring(this.getAbsoluteSelectionEnd(),this.textarea.value.length)}getTextOfSelection(){return this.textarea.value.substring(this.getAbsoluteSelectionStart(),this.getAbsoluteSelectionEnd())}isMultilineTextSelected(){return this.getTextOfSelection().includes("\n")}isTextSelected(){return this.textarea.selectionStart!==this.textarea.selectionEnd}shouldShowRemainder(){return this.getMaxLength()>0}getMaxLength(){return Number(this.textarea.getAttribute("maxlength")??-1)}isDisabled(){return this.textarea.disabled}}function s(t){return(t.match(/\n/g)??[]).length}function a(t){return t.split(/\n/)}class o{instances=[];init(t){if(void 0!==this.instances[t])throw new Error(`Textarea with input-id '${t}' has already been initialized.`);this.instances[t]=new i(t)}get(t){return this.instances[t]??null}}class r{preview_parameter;preview_url;constructor(t,e){this.preview_parameter=t,this.preview_url=e}async getPreviewHtmlOf(t){if(0===t.length)return"";let e=new FormData;return e.append(this.preview_parameter,t),(await fetch(this.preview_url,{method:"POST",body:e})).text()}}const l="textarea",d="preview";class c extends i{preview_history=[];preview_renderer;content_wrappers;view_controls;actions;constructor(t,e){super(e);const n=this.textarea.closest(".c-field-markdown");if(null===n)throw new Error(`Could not find input-wrapper for input-id '${e}'.`);this.preview_renderer=t,this.content_wrappers=function(t){const e=new Map;return e.set(l,t.querySelector("textarea")),e.set(d,t.querySelector(".c-field-markdown__preview")),e.forEach((t=>{if(null===t)throw new Error("Could not find all content-wrappers for markdown-input.")})),e}(n),this.view_controls=function(t){const e=t.querySelector(".il-viewcontrol-mode")?.getElementsByTagName("button");if(!e instanceof HTMLCollection||2!==e.length)throw new Error("Could not find exactly two view-controls.");return[...e]}(n),this.actions=function(t){const e=t.querySelector(".c-field-markdown__actions")?.getElementsByTagName("button");if(e instanceof HTMLCollection)return[...e];return[]}(n);let i=!0;this.textarea.addEventListener("keydown",(t=>{i=this.handleEnterKeyBeforeInsertionHook(t)})),this.textarea.addEventListener("keyup",(t=>{this.handleEnterKeyAfterInsertionHook(t,i)})),this.actions.forEach((t=>{t.addEventListener("click",(t=>{this.performMarkdownActionHook(t)}))})),this.view_controls.forEach((t=>{t.addEventListener("click",(()=>{this.toggleViewingModeHook()}))}))}handleEnterKeyAfterInsertionHook(t,e){if(!e||!p(t))return;const n=this.getLinesBeforeSelection().pop();void 0!==n&&m(n)?this.applyTransformationToSelection(u):void 0!==n&&v(n)&&this.insertSingleEnumeration()}handleEnterKeyBeforeInsertionHook(t){if(!p(t))return!1;const e=this.getLinesOfSelection().shift();if(void 0===e||!((e.match(/((^(\s*-)|(^(\s*\d+\.)))\s*)$/g)??[]).length>0))return!0;let n=this.getLinesBeforeSelection().join("\n"),i=this.getLinesAfterSelection().join("\n");return n.length>0&&(n+="\n"),i.length>0&&(i=`\n${i}`),this.updateTextareaContent(n+i,this.getAbsoluteSelectionStart()-e.length,this.getAbsoluteSelectionEnd()-e.length),t.preventDefault(),!1}performMarkdownActionHook(t){const e=function(t){const e=t.closest("span[data-action]");if(!e instanceof HTMLSpanElement)return null;if(!e.hasAttribute("data-action"))return null;return e.dataset.action}(t.target);switch(e){case"insert-heading":this.insertCharactersAroundSelection("# ","");break;case"insert-link":this.insertCharactersAroundSelection("[","](url)");break;case"insert-bold":this.insertCharactersAroundSelection("**","**");break;case"insert-italic":this.insertCharactersAroundSelection("_","_");break;case"insert-bullet-points":this.applyTransformationToSelection(u);break;case"insert-enumeration":this.isMultilineTextSelected()?this.applyTransformationToSelection(h):this.insertSingleEnumeration();break;default:throw new Error(`Could not perform markdown-action '${e}'.`)}}toggleViewingModeHook(){this.content_wrappers.forEach((t=>{g(t,"hidden")})),this.view_controls.forEach((t=>{g(t,"engaged")})),this.isDisabled()||this.actions.forEach((t=>{t.disabled=!t.disabled;const e=t.querySelector(".glyph");null!==e&&g(e,"disabled")})),this.maybeUpdatePreviewContent()}insertSingleEnumeration(){const t=this.getLinesOfSelection();if(1!==t.length)return void this.textarea.focus();const e=this.getLinesBeforeSelection(),n=e.length-1;let i=n>=0?function(t){const e=t.match(/([0-9]+)/);if(null!==e)return parseInt(e[0]);return null}(e[n])??0:0;const s=h(t,++i),a=function(t,e=0){if(t.length<1)return[];const n=[];for(const i of t){if(!v(i))break;n.push(i.replace(/([0-9]+)/,(++e).toString()))}n.length>0&&(t=n.concat(t.slice(n.length)));return t}(this.getLinesAfterSelection(),i);let o=e.join("\n");const r=a.join("\n");let l=s.join("\n");o.length>0&&l.length>0&&(o+="\n"),l.length>0&&r.length>0&&(l+="\n");const d=o+l+r,c=d.length-this.textarea.value.length;this.updateTextareaContent(d,this.getAbsoluteSelectionStart()+c,this.getAbsoluteSelectionEnd()+c)}applyTransformationToSelection(t){if(!t instanceof Function)throw new Error(`Transformation must be an instance of Function, ${typeof t} given.`);const e=t(this.getLinesOfSelection());if(!e instanceof Array)throw new Error(`Transformation must return an instance of Array, ${typeof e} returned.`);const n=e.length>1;let i=this.getLinesBeforeSelection().join("\n");const s=this.getLinesAfterSelection().join("\n");let a=e.join("\n");i.length>0&&a.length>0&&(i+="\n"),a.length>0&&s.length>0&&(a+="\n");const o=i+a+s,r=o.length-this.textarea.value.length,l=n?i.length:this.getAbsoluteSelectionStart()+r,d=n?l+a.length-1:this.getAbsoluteSelectionEnd()+r;this.updateTextareaContent(o,l,d)}maybeUpdatePreviewContent(){const t=this.preview_history[this.preview_history.length-1]??"",e=this.textarea.value;e!==t&&(this.preview_history.push(e),this.preview_renderer.getPreviewHtmlOf(e).then((t=>{this.content_wrappers.get(d).innerHTML=t})))}getBulletPointTransformation(){return u}getEnumerationTransformation(){return h}}function u(t){const e=[],n=!m(t[0]??"");for(const i of t)e.push(n?`- ${i}`:f(i));return e}function h(t,e=1){const n=[],i=!v(t[0]??"");for(const s of t)n.push(i?`${e++}. ${s}`:f(s));return n}function g(t,e){t.classList.contains(e)?t.classList.remove(e):t.classList.add(e)}function p(t){return t instanceof KeyboardEvent&&"Enter"===t.code}function f(t){return t.replace(/((^(\s*[-])|(^(\s*\d+\.)))\s*)/g,"")}function m(t){return(t.match(/^(\s*[-])/g)??[]).length>0}function v(t){return(t.match(/^(\s*\d+\.)/g)??[]).length>0}class w{instances=[];init(t,e,n){if(void 0!==this.instances[t])throw new Error(`Markdown with input-id '${t}' has already been initialized.`);this.instances[t]=new c(new r(n,e),t)}get(t){return this.instances[t]??null}}class y{constructor(t,e,n,i,s,a=null,o=null,r=null){this.id=t,this.name=e,this.element=n,this.selectButton=i,this.drilldownParentLevel=s,this.drilldownButton=a,this.listElement=o,this.renderUrl=r}}const b="data-node-id",T="data-node-name",S="data-render-url",x="data-ddindex",E="c-input-node",O="c-input-tree_select",D=`${E}__async`,C=`${E}__leaf`,I=`${E}--selected`,A="hidden",M="disabled",N=".glyph",_=`.${E}`,L=`.${O}`,k=`.${O}__selection`,B='[data-action="remove"]',P='[data-action="select"]',j=`.${E}__select`,V=".c-drilldown__menulevel--trigger";function F(t){return function(t){return t.classList.contains(D)}(t)&&t.hasAttribute(S)?t.getAttribute(S):null}function q(t){return!t.classList.contains(C)&&t.classList.contains(E)}function H(t,e=null){return t.reduce(((t,e)=>{const n=function(t){const e=t.getAttribute(b);if(null===e)throw new Error("Could not find data-node-id attribute.");return e}(e);if(t.has(n))throw new Error(`Node '${n}' has already been parsed. There might be a rendering issue.`);return t.set(n,new y(n,function(t){const e=t.querySelector(`[${T}]`);if(null===e)throw new Error("Could not find element with data-node-name attribute.");return e.textContent}(e),e,function(t){const e=t.querySelector(`:scope > ${j}`);if(null===e)throw new Error("Could not find node select button.");return e}(e),function(t){const e=t.closest(`ul[${x}]`);if(null===e)throw new Error("Could not find drilldown menu of node.");return e.getAttribute(x)}(e),function(t){if(!q(t))return null;const e=t.querySelector(`${V}`);if(null===e)throw new Error("Could not find drilldown menu button of branch node.");return e}(e),function(t){if(!q(t))return null;const e=t.querySelector("ul");if(null===e)throw new Error("Could not find list element of branch node.");return e}(e),F(e)))}),new Map(e??[]))}function R(t,e){for(let n=0;n<t.length;n+=1)e(t[n],n)}function $(t,...e){const n=[...e];return t.replace(/%s/g,(()=>n.shift()??""))}function U(t,e){t.classList.toggle(I,e)}class W{#t;#e=new Set;#n=new Set;#i=new Set;#s;#a;#o;#r;#l;#d;#c;#u;#h;#g;#p;constructor(t,e,n,i,s,a,o,r,l,d,c,u,h){this.#t=t,this.#s=n,this.#a=i,this.#o=s,this.#r=a,this.#l=o,this.#d=r,this.#c=l,this.#u=d,this.#h=c,this.#g=u,this.#p=h,e.on(this.#p.ownerDocument,this.#r.getBackSignal(),(()=>{this.#f()})),this.#p.querySelectorAll('[data-action="close"]').forEach((t=>{t.addEventListener("click",(()=>{this.#m()}))})),this.#c.querySelectorAll("li").forEach((t=>{const e=function(t){const e=t.getAttribute(b);if(null===e)throw new Error(`Could not find '${b}' attribbute of element.`);return e}(t);this.#v(t,e),this.#w(e)})),this.#r.addEngageListener((t=>{this.#y(t)})),this.#g.addEventListener("click",(()=>{this.#b()})),this.#t.forEach((t=>{this.#T(t)})),this.#S()}unselectNode(t){if(this.#x(t),this.#S(),this.#E(t),this.#t.has(t)){const e=this.#t.get(t);U(e.element,!1),this.#O(e.selectButton,e.name),this.updateNodeSelectButtonStates()}}selectNode(t){if(this.#w(t),this.#S(),this.#t.has(t)){const e=this.#t.get(t);U(e.element,!0),this.#D(e.selectButton,e.name),this.#C(e),this.updateNodeSelectButtonStates()}}updateNodeSelectButtonStates(){this.#t.forEach(((t,e)=>{this.#e.size>0?(t.selectButton.disabled=!this.#e.has(e),t.selectButton.querySelector(N).classList.toggle(M,!this.#e.has(e))):(t.selectButton.disabled=!1,t.selectButton.querySelector(N).classList.toggle(M,!1))}))}getSelection(){return new Set(this.#e)}getNodes(){return new Map(this.#t)}async#I(t){var e,n,i;if(!this.#n.has(t.id)&&!this.#i.has(t.id))try{this.#i.add(t.id);const s=await this.#a.loadContent(t.renderUrl);t.listElement.append(...s.children),this.#r.parseLevels();const a=H((i=t.listElement,Array.from(i.querySelectorAll(_))),this.#t),o=(e=a,n=this.#t,Array.from(e.entries()).filter((([t])=>!n.has(t))).map((([,t])=>t)));this.#t=a,R(o,(t=>{this.#e.has(t.id)?this.selectNode(t.id):this.unselectNode(t.id),this.#T(t)})),this.#n.add(t.id)}catch(t){throw new Error(`Could not render async node children: ${t.message}`)}finally{this.#i.delete(t.id)}}#A(t){R(function(t,e,n=255){const i=[];let s=t;for(let t=0;t<n;t+=1){const t=s.closest(e);if(t&&i.push(t),!t||!t.parentElement)break;s=t.parentElement}return i.reverse()}(t.element,_),(t=>{const e=t.getAttribute(b);if(null===e||!this.#t.has(e))throw new Error(`Could not find '${b}' of node element.`);const n=this.#t.get(e);this.#M(n)}))}#M(t){const e=this.#s.createContent(this.#d).querySelector(".crumb");e.setAttribute(x,t.drilldownParentLevel),e.firstElementChild.textContent=t.name,e.addEventListener("click",(()=>{this.#r.engageLevel(t.drilldownParentLevel),t.drilldownButton.click()})),this.#l.append(e)}#f(){const t=this.#l.querySelectorAll(".crumb");t.item(t.length-1)?.remove()}#N(){R(this.#l.querySelectorAll(".crumb"),(t=>{t.remove()}))}#y(t){if("0"===t)return void this.#N();const e=this.#p.querySelector(`ul[${x}="${t}"]`)?.closest(_)?.getAttribute(b);if(null===e||!this.#t.has(e))throw new Error(`Could not find node for drilldown-level '${t}'.`);this.#N(),this.#A(this.#t.get(e))}#_(t,e){t.addEventListener("click",(()=>{null!==e.renderUrl&&this.#I(e)}))}#v(t,e){t.querySelector(B)?.addEventListener("click",(()=>{this.unselectNode(e),t.remove()}))}#L(t,e){t.addEventListener("click",(()=>{this.#e.has(e.id)?this.unselectNode(e.id):this.selectNode(e.id)}))}#C(t){if(null!==this.#c.querySelector(`li[${b}="${t.id}"]`))return;const e=this.#s.createContent(this.#u),n=e.querySelector("[data-node-id]");n.setAttribute(b,t.id),n.querySelector(`[${T}]`).textContent=t.name,n.querySelector("input").value=t.id,this.#v(n,t.id),this.#c.append(...e.children)}#E(t){this.#c.querySelector(`li[${b}="${t}"]`)?.remove()}#T(t){this.#L(t.selectButton,t),null!==t.drilldownButton&&this.#_(t.drilldownButton,t)}#O(t,e){t.querySelector(B)?.classList.add(A),t.querySelector(P)?.classList.remove(A),t.setAttribute("aria-label",this.#k("select_node",e))}#D(t,e){t.querySelector(P)?.classList.add(A),t.querySelector(B)?.classList.remove(A),t.setAttribute("aria-label",this.#k("unselect_node",e))}#S(){this.#h.disabled=this.#e.size<=0}#x(t){this.#e.has(t)&&this.#e.delete(t)}#w(t){this.#e.has(t)||this.#e.add(t)}#k(t,...e){return $(this.#o.txt(t),e)}#m(){this.#p.close()}#b(){this.#p.showModal()}}class K extends W{#B;constructor(t,e,n,i,s,a,o,r,l,d,c,u,h,g){super(t,e,n,i,s,a,o,r,l,d,c,u,h),this.#B=g}selectNode(t){if(!this.#B){const e=Array.from(this.getSelection().add(t));this.#P(e,this.getNodes())}super.selectNode(t)}updateNodeSelectButtonStates(){if(this.#B)return;const t=this.getNodes();t.forEach((t=>{t.selectButton.disabled=!1,t.selectButton.querySelector(N).classList.remove(M)})),this.getSelection().forEach((e=>{const n=t.get(e);null!==n&&null!==n.listElement&&n.listElement.querySelectorAll(j).forEach((t=>{t.disabled=!0,t.querySelector(N).classList.add(M)}))}))}#P(t,e){for(let i=0;i<t.length;i+=1)for(let s=0;s<t.length;s+=1){const a=t[s],o=t[i];i!==s&&e.has(o)&&e.has(a)&&(n=e.get(o),null!==e.get(a).element.querySelector(`[${b}="${n.id}"]`)&&this.unselectNode(o))}var n}}function z(t,e){const n=t.createDocumentFragment();return n.append(...e),n}function X(t,e,n){t.querySelectorAll(`[${n}]`).forEach((t=>{const i=t.getAttribute(n);if(!e.has(i))throw new Error(`Element references '${i}' which does not exist.`);t.setAttribute(n,e.get(i))}))}class J{#j;constructor(t){this.#j=t}createContent(t){const e=t.content.cloneNode(!0),n=new Map;return e.querySelectorAll("[id]").forEach((t=>{const e=function(t=""){return`${t}${Date.now().toString(36)}_${Math.random().toString(36).substring(2)}`}("il_ui_fw_");n.set(t.id,e),t.id=e})),e.querySelectorAll("[for]").forEach((t=>{t.htmlFor=n.get(t.htmlFor)})),X(e,n,"aria-describedby"),X(e,n,"aria-labelledby"),X(e,n,"aria-controls"),X(e,n,"aria-owns"),z(this.#j,e.children)}}class Q{#j;constructor(t){this.#j=t}loadContent(t){return fetch(t.toString()).then((t=>t.text())).then((t=>this.#V(t))).then((t=>z(this.#j,t))).catch((e=>{throw new Error(`Could not render element(s) from '${t}': ${e.message}`)}))}#F(t){const e=this.#j.createElement("script");return t.hasAttribute("type")&&e.setAttribute("type",t.getAttribute("type")),t.hasAttribute("src")&&e.setAttribute("src",t.getAttribute("src")),t.textContent.length>0&&(e.textContent=t.textContent),e}#V(t){const e=this.#j.createElement("div");return e.innerHTML=t.trim(),e.querySelectorAll("script").forEach((t=>{const e=this.#F(t);t.replaceWith(e)})),e.children}}function G(t){return Array.from(t.querySelectorAll(_))}class Y{#q=new Map;#H;#R;#o;#j;constructor(t,e,n,i){this.#H=t,this.#R=e,this.#o=n,this.#j=i}initTreeMultiSelect(t,e){if(this.#q.has(t))throw new Error(`TreeSelect '${t}' already exists.`);const[n,i,s,a,o,r,l,d]=this.#$(t),c=this.#U(i),u=new K(H(G(l)),this.#H,new J(this.#j),new Q(this.#j),this.#o,c,s,a,o,r,d,n,l,e);return this.#q.set(t,u),u}initTreeSelect(t){if(this.#q.has(t))throw new Error(`TreeSelect '${t}' already exists.`);const[e,n,i,s,a,o,r,l]=this.#$(t),d=this.#U(n),c=new W(H(G(r)),this.#H,new J(this.#j),new Q(this.#j),this.#o,d,i,s,a,o,l,e,r);return this.#q.set(t,c),c}getInstance(t){return this.#q.has(t)?this.#q.get(t):null}#$(t){const e=this.#j.getElementById(t),n=e?.closest(L),i=n?.querySelector(".breadcrumb"),s=n?.querySelector(".modal-body > template"),a=n?.querySelector(k),o=a?.querySelector(":scope > template"),r=n?.querySelector("dialog"),l=r?.querySelector(".btn-primary");if(null===i||null===s||null===a||null===o||null===l||null===e||null===r)throw new Error(`Could not find some element(s) for Tree Select Input '${t}'.`);return[e,n,i,s,a,o,r,l]}#U(t){const e=t.querySelector(".c-drilldown");if(null===e||!e.hasAttribute("id"))throw new Error("Could not find drilldown element.");const n=this.#R.getInstance(e.id);if(null===e)throw new Error("Could not find drilldown instance.");return n}}class Z{#W;constructor(t){this.#W=t}on(t,e,n){this.#W(t).on(e,n)}off(t,e,n){this.#W(t).off(e,n)}} +!function(t,e,n){"use strict";class i{textarea;remainder=null;constructor(t){if(this.textarea=document.getElementById(t),null===this.textarea)throw new Error(`Could not find textarea for input-id '${t}'.`);if(this.shouldShowRemainder()){if(this.remainder=this.textarea.parentNode.querySelector('[data-action="remainder"]'),!this.remainder instanceof HTMLSpanElement)throw new Error(`Could not find remainder-element for input-id '${t}'.`);this.textarea.addEventListener("input",(()=>{this.updateRemainderCountHook()}))}}updateRemainderCountHook(){this.shouldShowRemainder()&&null!==this.remainder&&(this.remainder.innerHTML=(this.textarea.maxLength-this.textarea.value.length).toString())}updateTextareaContent(t,e=null,n=null){if(!this.isDisabled()){if(this.isContentTooLarge(t))return this.updateRemainderCountHook(),void this.textarea.focus();e=e??this.textarea.selectionStart,n=n??this.textarea.selectionEnd,this.textarea.value=t,e<t.length&&(this.textarea.selectionStart=e),n<t.length&&(this.textarea.selectionEnd=n),this.updateRemainderCountHook(),this.textarea.focus()}}insertCharactersAroundSelection(t,e){const n=this.getTextBeforeSelection()+t+this.getTextOfSelection()+e+this.getTextAfterSelection(),i=this.getAbsoluteSelectionStart()+t.length,s=this.getAbsoluteSelectionEnd()+t.length;this.updateTextareaContent(n,i,s)}getAbsoluteSelectionStart(){return this.textarea.selectionStart<this.textarea.selectionEnd?this.textarea.selectionStart:this.textarea.selectionEnd}getAbsoluteSelectionEnd(){return this.textarea.selectionStart>this.textarea.selectionEnd?this.textarea.selectionStart:this.textarea.selectionEnd}getLinesBeforeSelection(){return a(this.textarea.value).slice(0,s(this.getTextBeforeSelection()))}getLinesAfterSelection(){const t=a(this.textarea.value);return t.slice(s(this.getTextBeforeSelection()+this.getTextOfSelection())+1,t.length)}getLinesOfSelection(){const t=a(this.textarea.value);return t.slice(this.getLinesBeforeSelection().length,t.length-this.getLinesAfterSelection().length)}isContentTooLarge(t){const e=this.getMaxLength();return!(e<0)&&e<t.length}getTextBeforeSelection(){return this.textarea.value.substring(0,this.getAbsoluteSelectionStart())}getTextAfterSelection(){return this.textarea.value.substring(this.getAbsoluteSelectionEnd(),this.textarea.value.length)}getTextOfSelection(){return this.textarea.value.substring(this.getAbsoluteSelectionStart(),this.getAbsoluteSelectionEnd())}isMultilineTextSelected(){return this.getTextOfSelection().includes("\n")}isTextSelected(){return this.textarea.selectionStart!==this.textarea.selectionEnd}shouldShowRemainder(){return this.getMaxLength()>0}getMaxLength(){return Number(this.textarea.getAttribute("maxlength")??-1)}isDisabled(){return this.textarea.disabled}}function s(t){return(t.match(/\n/g)??[]).length}function a(t){return t.split(/\n/)}class o{instances=[];init(t){if(void 0!==this.instances[t])throw new Error(`Textarea with input-id '${t}' has already been initialized.`);this.instances[t]=new i(t)}get(t){return this.instances[t]??null}}class r{preview_parameter;preview_url;constructor(t,e){this.preview_parameter=t,this.preview_url=e}async getPreviewHtmlOf(t){if(0===t.length)return"";let e=new FormData;return e.append(this.preview_parameter,t),(await fetch(this.preview_url,{method:"POST",body:e})).text()}}const l="textarea",d="preview";class c extends i{preview_history=[];preview_renderer;content_wrappers;view_controls;actions;constructor(t,e){super(e);const n=this.textarea.closest(".c-field-markdown");if(null===n)throw new Error(`Could not find input-wrapper for input-id '${e}'.`);this.preview_renderer=t,this.content_wrappers=function(t){const e=new Map;return e.set(l,t.querySelector("textarea")),e.set(d,t.querySelector(".c-field-markdown__preview")),e.forEach((t=>{if(null===t)throw new Error("Could not find all content-wrappers for markdown-input.")})),e}(n),this.view_controls=function(t){const e=t.querySelector(".il-viewcontrol-mode")?.getElementsByTagName("button");if(!e instanceof HTMLCollection||2!==e.length)throw new Error("Could not find exactly two view-controls.");return[...e]}(n),this.actions=function(t){const e=t.querySelector(".c-field-markdown__actions")?.getElementsByTagName("button");if(e instanceof HTMLCollection)return[...e];return[]}(n);let i=!0;this.textarea.addEventListener("keydown",(t=>{i=this.handleEnterKeyBeforeInsertionHook(t)})),this.textarea.addEventListener("keyup",(t=>{this.handleEnterKeyAfterInsertionHook(t,i)})),this.actions.forEach((t=>{t.addEventListener("click",(t=>{this.performMarkdownActionHook(t)}))})),this.view_controls.forEach((t=>{t.addEventListener("click",(()=>{this.toggleViewingModeHook()}))}))}handleEnterKeyAfterInsertionHook(t,e){if(!e||!p(t))return;const n=this.getLinesBeforeSelection().pop();void 0!==n&&m(n)?this.applyTransformationToSelection(u):void 0!==n&&v(n)&&this.insertSingleEnumeration()}handleEnterKeyBeforeInsertionHook(t){if(!p(t))return!1;const e=this.getLinesOfSelection().shift();if(void 0===e||!((e.match(/((^(\s*-)|(^(\s*\d+\.)))\s*)$/g)??[]).length>0))return!0;let n=this.getLinesBeforeSelection().join("\n"),i=this.getLinesAfterSelection().join("\n");return n.length>0&&(n+="\n"),i.length>0&&(i=`\n${i}`),this.updateTextareaContent(n+i,this.getAbsoluteSelectionStart()-e.length,this.getAbsoluteSelectionEnd()-e.length),t.preventDefault(),!1}performMarkdownActionHook(t){const e=function(t){const e=t.closest("span[data-action]");if(!e instanceof HTMLSpanElement)return null;if(!e.hasAttribute("data-action"))return null;return e.dataset.action}(t.target);switch(e){case"insert-heading":this.insertCharactersAroundSelection("# ","");break;case"insert-link":this.insertCharactersAroundSelection("[","](url)");break;case"insert-bold":this.insertCharactersAroundSelection("**","**");break;case"insert-italic":this.insertCharactersAroundSelection("_","_");break;case"insert-bullet-points":this.applyTransformationToSelection(u);break;case"insert-enumeration":this.isMultilineTextSelected()?this.applyTransformationToSelection(h):this.insertSingleEnumeration();break;default:throw new Error(`Could not perform markdown-action '${e}'.`)}}toggleViewingModeHook(){this.content_wrappers.forEach((t=>{g(t,"hidden")})),this.view_controls.forEach((t=>{g(t,"engaged")})),this.isDisabled()||this.actions.forEach((t=>{t.disabled=!t.disabled;const e=t.querySelector(".glyph");null!==e&&g(e,"disabled")})),this.maybeUpdatePreviewContent()}insertSingleEnumeration(){const t=this.getLinesOfSelection();if(1!==t.length)return void this.textarea.focus();const e=this.getLinesBeforeSelection(),n=e.length-1;let i=n>=0?function(t){const e=t.match(/([0-9]+)/);if(null!==e)return parseInt(e[0]);return null}(e[n])??0:0;const s=h(t,++i),a=function(t,e=0){if(t.length<1)return[];const n=[];for(const i of t){if(!v(i))break;n.push(i.replace(/([0-9]+)/,(++e).toString()))}n.length>0&&(t=n.concat(t.slice(n.length)));return t}(this.getLinesAfterSelection(),i);let o=e.join("\n");const r=a.join("\n");let l=s.join("\n");o.length>0&&l.length>0&&(o+="\n"),l.length>0&&r.length>0&&(l+="\n");const d=o+l+r,c=d.length-this.textarea.value.length;this.updateTextareaContent(d,this.getAbsoluteSelectionStart()+c,this.getAbsoluteSelectionEnd()+c)}applyTransformationToSelection(t){if(!t instanceof Function)throw new Error(`Transformation must be an instance of Function, ${typeof t} given.`);const e=t(this.getLinesOfSelection());if(!e instanceof Array)throw new Error(`Transformation must return an instance of Array, ${typeof e} returned.`);const n=e.length>1;let i=this.getLinesBeforeSelection().join("\n");const s=this.getLinesAfterSelection().join("\n");let a=e.join("\n");i.length>0&&a.length>0&&(i+="\n"),a.length>0&&s.length>0&&(a+="\n");const o=i+a+s,r=o.length-this.textarea.value.length,l=n?i.length:this.getAbsoluteSelectionStart()+r,d=n?l+a.length-1:this.getAbsoluteSelectionEnd()+r;this.updateTextareaContent(o,l,d)}maybeUpdatePreviewContent(){const t=this.preview_history[this.preview_history.length-1]??"",e=this.textarea.value;e!==t&&(this.preview_history.push(e),this.preview_renderer.getPreviewHtmlOf(e).then((t=>{this.content_wrappers.get(d).innerHTML=t})))}getBulletPointTransformation(){return u}getEnumerationTransformation(){return h}}function u(t){const e=[],n=!m(t[0]??"");for(const i of t)e.push(n?`- ${i}`:f(i));return e}function h(t,e=1){const n=[],i=!v(t[0]??"");for(const s of t)n.push(i?`${e++}. ${s}`:f(s));return n}function g(t,e){t.classList.contains(e)?t.classList.remove(e):t.classList.add(e)}function p(t){return t instanceof KeyboardEvent&&"Enter"===t.code}function f(t){return t.replace(/((^(\s*[-])|(^(\s*\d+\.)))\s*)/g,"")}function m(t){return(t.match(/^(\s*[-])/g)??[]).length>0}function v(t){return(t.match(/^(\s*\d+\.)/g)??[]).length>0}class w{instances=[];init(t,e,n){if(void 0!==this.instances[t])throw new Error(`Markdown with input-id '${t}' has already been initialized.`);this.instances[t]=new c(new r(n,e),t)}get(t){return this.instances[t]??null}}class y{constructor(t,e,n,i,s,a=null,o=null,r=null){this.id=t,this.name=e,this.element=n,this.selectButton=i,this.drilldownParentLevel=s,this.drilldownButton=a,this.listElement=o,this.renderUrl=r}}const b="data-node-id",T="data-node-name",S="data-render-url",x="data-ddindex",E="c-input-node",O="c-input-tree_select",D=`${E}__async`,C=`${E}__leaf`,I=`${E}--selected`,A="hidden",M="disabled",N=".glyph",_=`.${E}`,L=`.${O}`,k=`.${O}__selection`,P='[data-action="remove"]',B='[data-action="select"]',j=`.${E}__select`,V=".c-drilldown__menulevel--trigger";function F(t){return function(t){return t.classList.contains(D)}(t)&&t.hasAttribute(S)?t.getAttribute(S):null}function H(t){return!t.classList.contains(C)&&t.classList.contains(E)}function q(t,e=null){return t.reduce(((t,e)=>{const n=function(t){const e=t.getAttribute(b);if(null===e)throw new Error("Could not find data-node-id attribute.");return e}(e);if(t.has(n))throw new Error(`Node '${n}' has already been parsed. There might be a rendering issue.`);return t.set(n,new y(n,function(t){const e=t.querySelector(`[${T}]`);if(null===e)throw new Error("Could not find element with data-node-name attribute.");return e.textContent}(e),e,function(t){const e=t.querySelector(`:scope > ${j}`);if(null===e)throw new Error("Could not find node select button.");return e}(e),function(t){const e=t.closest(`ul[${x}]`);if(null===e)throw new Error("Could not find drilldown menu of node.");return e.getAttribute(x)}(e),function(t){if(!H(t))return null;const e=t.querySelector(`${V}`);if(null===e)throw new Error("Could not find drilldown menu button of branch node.");return e}(e),function(t){if(!H(t))return null;const e=t.querySelector("ul");if(null===e)throw new Error("Could not find list element of branch node.");return e}(e),F(e)))}),new Map(e??[]))}function R(t,e){for(let n=0;n<t.length;n+=1)e(t[n],n)}function $(t,...e){const n=[...e];return t.replace(/%s/g,(()=>n.shift()??""))}function U(t,e){t.classList.toggle(I,e)}class W{#t;#e=new Set;#n=new Set;#i=new Set;#s;#a;#o;#r;#l;#d;#c;#u;#h;#g;#p;#f;constructor(t,e,n,i,s,a,o,r,l,d,c,u,h,g){this.#t=t,this.#s=n,this.#a=i,this.#o=s,this.#r=a,this.#l=o,this.#d=r,this.#c=l,this.#u=d,this.#h=c,this.#g=u,this.#p=h,this.#f=g,e.on(this.#p.ownerDocument,this.#r.getBackSignal(),(()=>{this.#m()})),this.#p.querySelectorAll('[data-action="close"]').forEach((t=>{t.addEventListener("click",(()=>{this.#v()}))})),this.#r.addEngageListener((t=>{this.#w(t)})),this.#g.addEventListener("click",(()=>{this.#y()})),this.#t.forEach((t=>{this.#b(t)})),this.#c.querySelectorAll("li").forEach((t=>{const e=function(t){const e=t.getAttribute(b);if(null===e)throw new Error(`Could not find '${b}' attribbute of element.`);return e}(t);this.#T(t,e),this.selectNode(e)})),this.#w(this.#r.getCurrentLevel()),this.#S()}unselectNode(t){if(this.#x(t),this.#S(),this.#E(t),this.#t.has(t)){const e=this.#t.get(t);U(e.element,!1),this.#O(e.selectButton,e.name)}this.#f(this)}selectNode(t){if(this.#D(t),this.#S(),this.#t.has(t)){const e=this.#t.get(t);U(e.element,!0),this.#C(e.selectButton,e.name),this.#I(e)}this.#f(this)}engageNode(t){if(!this.#t.has(t))return;const e=this.#t.get(t).drilldownParentLevel;this.#r.getCurrentLevel()!==e&&this.#r.getParentLevel()!==e&&this.#r.engageLevel(e)}getSelection(){return new Set(this.#e)}getNodes(){return new Map(this.#t)}async#A(t){var e,n,i;if(!this.#n.has(t.id)&&!this.#i.has(t.id))try{this.#i.add(t.id);const s=await this.#a.loadContent(t.renderUrl);t.listElement.append(...s.children),this.#r.parseLevels();const a=q((i=t.listElement,Array.from(i.querySelectorAll(_))),this.#t),o=(e=a,n=this.#t,Array.from(e.entries()).filter((([t])=>!n.has(t))).map((([,t])=>t)));this.#t=a,R(o,(t=>{this.#e.has(t.id)?this.selectNode(t.id):this.unselectNode(t.id),this.#b(t)})),this.#n.add(t.id)}catch(t){throw new Error(`Could not render async node children: ${t.message}`)}finally{this.#i.delete(t.id)}}#M(t){R(function(t,e,n=255){const i=[];let s=t;for(let t=0;t<n;t+=1){const t=s.closest(e);if(t&&i.push(t),!t||!t.parentElement)break;s=t.parentElement}return i.reverse()}(t.element,_),(t=>{const e=t.getAttribute(b);if(null===e||!this.#t.has(e))throw new Error(`Could not find '${b}' of node element.`);const n=this.#t.get(e);this.#N(n)}))}#N(t){const e=this.#s.createContent(this.#d).querySelector(".crumb");e.setAttribute(x,t.drilldownParentLevel),e.firstElementChild.textContent=t.name,e.addEventListener("click",(()=>{this.#r.engageLevel(t.drilldownParentLevel),t.drilldownButton.click()})),this.#l.append(e)}#m(){const t=this.#l.querySelectorAll(".crumb");t.item(t.length-1)?.remove()}#_(){R(this.#l.querySelectorAll(".crumb"),(t=>{t.remove()}))}#w(t){if("0"===t)return void this.#_();const e=this.#p.querySelector(`ul[${x}="${t}"]`)?.closest(_)?.getAttribute(b);if(null===e||!this.#t.has(e))throw new Error(`Could not find node for drilldown-level '${t}'.`);const n=this.#t.get(e);this.#_(),this.#M(n),null!==n.renderUrl&&this.#A(n)}#T(t,e){t.querySelector(P)?.addEventListener("click",(()=>{this.unselectNode(e),t.remove()}))}#L(t,e){t.addEventListener("click",(()=>{this.#e.has(e.id)?this.unselectNode(e.id):this.selectNode(e.id)}))}#I(t){if(null!==this.#c.querySelector(`li[${b}="${t.id}"]`))return;const e=this.#s.createContent(this.#u),n=e.querySelector("[data-node-id]");n.setAttribute(b,t.id),n.querySelector(`[${T}]`).textContent=t.name,n.querySelector("input").value=t.id,this.#T(n,t.id),this.#c.append(...e.children)}#E(t){this.#c.querySelector(`li[${b}="${t}"]`)?.remove()}#b(t){this.#L(t.selectButton,t)}#O(t,e){t.querySelector(P)?.classList.add(A),t.querySelector(B)?.classList.remove(A),t.setAttribute("aria-label",this.#k("select_node",e))}#C(t,e){t.querySelector(B)?.classList.add(A),t.querySelector(P)?.classList.remove(A),t.setAttribute("aria-label",this.#k("unselect_node",e))}#S(){this.#h.disabled=this.#e.size<=0}#x(t){this.#e.has(t)&&this.#e.delete(t)}#D(t){this.#e.has(t)||this.#e.add(t)}#k(t,...e){return $(this.#o.txt(t),e)}#v(){this.#p.close()}#y(){this.#p.showModal()}}function z(t,e){const n=t.createDocumentFragment();return n.append(...e),n}function K(t,e,n){t.querySelectorAll(`[${n}]`).forEach((t=>{const i=t.getAttribute(n);if(!e.has(i))throw new Error(`Element references '${i}' which does not exist.`);t.setAttribute(n,e.get(i))}))}class X{#P;constructor(t){this.#P=t}createContent(t){const e=t.content.cloneNode(!0),n=new Map;return e.querySelectorAll("[id]").forEach((t=>{const e=function(t=""){return`${t}${Date.now().toString(36)}_${Math.random().toString(36).substring(2)}`}("il_ui_fw_");n.set(t.id,e),t.id=e})),e.querySelectorAll("[for]").forEach((t=>{t.htmlFor=n.get(t.htmlFor)})),K(e,n,"aria-describedby"),K(e,n,"aria-labelledby"),K(e,n,"aria-controls"),K(e,n,"aria-owns"),z(this.#P,e.children)}}class J{#P;constructor(t){this.#P=t}loadContent(t){return fetch(t.toString()).then((t=>t.text())).then((t=>this.#B(t))).then((t=>z(this.#P,t))).catch((e=>{throw new Error(`Could not render element(s) from '${t}': ${e.message}`)}))}#j(t){const e=this.#P.createElement("script");return t.hasAttribute("type")&&e.setAttribute("type",t.getAttribute("type")),t.hasAttribute("src")&&e.setAttribute("src",t.getAttribute("src")),t.textContent.length>0&&(e.textContent=t.textContent),e}#B(t){const e=this.#P.createElement("div");return e.innerHTML=t.trim(),e.querySelectorAll("script").forEach((t=>{const e=this.#j(t);t.replaceWith(e)})),e.children}}function Q(t){return Array.from(t.querySelectorAll(_))}function G(){return t=>{!function(t){const e=t.getNodes(),n=t.getSelection();e.forEach(((t,e)=>{n.size>0?(t.selectButton.disabled=!n.has(e),t.selectButton.querySelector(N).classList.toggle(M,!n.has(e))):(t.selectButton.disabled=!1,t.selectButton.querySelector(N).classList.toggle(M,!1))}))}(t),function(t){const e=t.getSelection();if(1===e.size){const n=e.values()?.next()?.value;t.getNodes().has(n)&&t.engageNode(n)}}(t)}}function Y(t){return t?()=>{}:t=>{!function(t){const e=Array.from(t.getSelection()),n=t.getNodes();for(let s=0;s<e.length;s+=1)for(let a=0;a<e.length;a+=1){const o=e[a],r=e[s];s!==a&&n.has(r)&&n.has(o)&&(i=n.get(r),null!==n.get(o).element.querySelector(`[${b}="${i.id}"]`))&&t.unselectNode(r)}var i}(t),function(t){const e=t.getNodes(),n=t.getSelection();e.forEach((t=>{t.selectButton.disabled=!1,t.selectButton.querySelector(N).classList.remove(M)})),n.forEach((t=>{const n=e.get(t);null!==n&&null!==n.listElement&&n.listElement.querySelectorAll(j).forEach((t=>{t.disabled=!0,t.querySelector(N).classList.add(M)}))}))}(t)}}class Z{#V=new Map;#F;#H;#o;#P;constructor(t,e,n,i){this.#F=t,this.#H=e,this.#o=n,this.#P=i}initTreeMultiSelect(t,e){if(this.#V.has(t))throw new Error(`TreeSelect '${t}' already exists.`);const[n,i,s,a,o,r,l,d]=this.#q(t),c=this.#R(i),u=new W(q(Q(l)),this.#F,new X(this.#P),new J(this.#P),this.#o,c,s,a,o,r,d,n,l,Y(e));return this.#V.set(t,u),u}initTreeSelect(t){if(this.#V.has(t))throw new Error(`TreeSelect '${t}' already exists.`);const[e,n,i,s,a,o,r,l]=this.#q(t),d=this.#R(n),c=new W(q(Q(r)),this.#F,new X(this.#P),new J(this.#P),this.#o,d,i,s,a,o,l,e,r,G());return this.#V.set(t,c),c}getInstance(t){return this.#V.has(t)?this.#V.get(t):null}#q(t){const e=this.#P.getElementById(t),n=e?.closest(L),i=n?.querySelector(".breadcrumb"),s=n?.querySelector(".modal-body > template"),a=n?.querySelector(k),o=a?.querySelector(":scope > template"),r=n?.querySelector("dialog"),l=r?.querySelector(".btn-primary");if(null===i||null===s||null===a||null===o||null===l||null===e||null===r)throw new Error(`Could not find some element(s) for Tree Select Input '${t}'.`);return[e,n,i,s,a,o,r,l]}#R(t){const e=t.querySelector(".c-drilldown");if(null===e||!e.hasAttribute("id"))throw new Error("Could not find drilldown element.");const n=this.#H.getInstance(e.id);if(null===e)throw new Error("Could not find drilldown instance.");return n}}class tt{#$;constructor(t){this.#$=t}on(t,e,n){this.#$(t).on(e,n)}off(t,e,n){this.#$(t).off(e,n)}} /* Tagify v4.33.2 - tags input component By: Yair Even-Or <vsync.design@gmail.com> @@ -38,4 +38,4 @@ This Software may not be rebranded and sold as a library under any other name other than "Tagify" (by owner) or as part of another library. - */var tt="&#8203;";function et(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function nt(t){return function(t){if(Array.isArray(t))return et(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return et(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?et(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var it={isEnabled:function(){var t;return null===(t=window.TAGIFY_DEBUG)||void 0===t||t},log:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i;this.isEnabled()&&(i=console).log.apply(i,["[Tagify]:"].concat(nt(e)))},warn:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i;this.isEnabled()&&(i=console).warn.apply(i,["[Tagify]:"].concat(nt(e)))}},st=function(t,e,n,i){return t=""+t,e=""+e,i&&(t=t.trim(),e=e.trim()),n?t==e:t.toLowerCase()==e.toLowerCase()},at=function(t,e){return t&&Array.isArray(t)&&t.map((function(t){return ot(t,e)}))};function ot(t,e){var n,i={};for(n in t)e.indexOf(n)<0&&(i[n]=t[n]);return i}function rt(t){return(new DOMParser).parseFromString(t.trim(),"text/html").body.firstElementChild}function lt(t,e){for(e=e||"previous";t=t[e+"Sibling"];)if(3==t.nodeType)return t}function dt(t){return"string"==typeof t?t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/`|'/g,"&#039;"):t}function ct(t){var e=Object.prototype.toString.call(t).split(" ")[1].slice(0,-1);return t===Object(t)&&"Array"!=e&&"Function"!=e&&"RegExp"!=e&&"HTMLUnknownElement"!=e}function ut(t,e,n){var i,s;function a(t,e){for(var n in e)if(e.hasOwnProperty(n)){if(ct(e[n])){ct(t[n])?a(t[n],e[n]):t[n]=Object.assign({},e[n]);continue}if(Array.isArray(e[n])){t[n]=Object.assign([],e[n]);continue}t[n]=e[n]}}return i=t,(null!=(s=Object)&&"undefined"!=typeof Symbol&&s[Symbol.hasInstance]?s[Symbol.hasInstance](i):i instanceof s)||(t={}),a(t,e),n&&a(t,n),t}function ht(){var t=[],e={},n=!0,i=!1,s=void 0;try{for(var a,o=arguments[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var r=a.value,l=!0,d=!1,c=void 0;try{for(var u,h=r[Symbol.iterator]();!(l=(u=h.next()).done);l=!0){var g=u.value;ct(g)?e[g.value]||(t.push(g),e[g.value]=1):t.includes(g)||t.push(g)}}catch(t){d=!0,c=t}finally{try{l||null==h.return||h.return()}finally{if(d)throw c}}}}catch(t){i=!0,s=t}finally{try{n||null==o.return||o.return()}finally{if(i)throw s}}return t}function gt(t){return String.prototype.normalize?"string"==typeof t?t.normalize("NFD").replace(/[\u0300-\u036f]/g,""):void 0:t}var pt=function(){return/(?=.*chrome)(?=.*android)/i.test(navigator.userAgent)};function ft(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(t){return(t^crypto.getRandomValues(new Uint8Array(1))[0]&15>>t/4).toString(16)}))}function mt(t){var e;return wt.call(this,t)&&(null==t||null===(e=t.classList)||void 0===e?void 0:e.contains(this.settings.classNames.tag))}function vt(t){return wt.call(this,t)&&(null==t?void 0:t.closest(this.settings.classNames.tagSelector))}function wt(t){var e;return(null==t||null===(e=t.closest)||void 0===e?void 0:e.call(t,this.settings.classNames.namespaceSelector))===this.DOM.scope}function yt(t,e){var n=window.getSelection();return e=e||n.getRangeAt(0),"string"==typeof t&&(t=document.createTextNode(t)),e&&(e.deleteContents(),e.insertNode(t)),t}function bt(t,e,n){return t?(e&&(t.__tagifyTagData=n?e:ut({},t.__tagifyTagData||{},e)),t.__tagifyTagData):(it.warn("tag element doesn't exist",{tagElm:t,data:e}),e)}function Tt(t){if(t&&t.parentNode){var e=t,n=window.getSelection(),i=n.getRangeAt(0);n.rangeCount&&(i.setStartAfter(e),i.collapse(!0),n.removeAllRanges(),n.addRange(i))}}function St(t,e){t.forEach((function(t){if(bt(t.previousSibling)||!t.previousSibling){var n=document.createTextNode("​");t.before(n),e&&Tt(n)}}))}var xt={delimiters:",",pattern:null,tagTextProp:"value",maxTags:1/0,callbacks:{},addTagOnBlur:!0,addTagOn:["blur","tab","enter"],onChangeAfterBlur:!0,duplicates:!1,whitelist:[],blacklist:[],enforceWhitelist:!1,userInput:!0,focusable:!0,keepInvalidTags:!1,createInvalidTags:!0,mixTagsAllowedAfter:/,|\.|\:|\s/,mixTagsInterpolator:["[[","]]"],backspace:!0,skipInvalid:!1,pasteAsTags:!0,editTags:{clicks:2,keepInvalid:!0},transformTag:function(){},trim:!0,a11y:{focusableTags:!1},mixMode:{insertAfterTag:" "},autoComplete:{enabled:!0,rightKey:!1,tabKey:!1},classNames:{namespace:"tagify",mixMode:"tagify--mix",selectMode:"tagify--select",input:"tagify__input",focus:"tagify--focus",tagNoAnimation:"tagify--noAnim",tagInvalid:"tagify--invalid",tagNotAllowed:"tagify--notAllowed",scopeLoading:"tagify--loading",hasMaxTags:"tagify--hasMaxTags",hasNoTags:"tagify--noTags",empty:"tagify--empty",inputInvalid:"tagify__input--invalid",dropdown:"tagify__dropdown",dropdownWrapper:"tagify__dropdown__wrapper",dropdownHeader:"tagify__dropdown__header",dropdownFooter:"tagify__dropdown__footer",dropdownItem:"tagify__dropdown__item",dropdownItemActive:"tagify__dropdown__item--active",dropdownItemHidden:"tagify__dropdown__item--hidden",dropdownItemSelected:"tagify__dropdown__item--selected",dropdownInital:"tagify__dropdown--initial",tag:"tagify__tag",tagText:"tagify__tag-text",tagX:"tagify__tag__removeBtn",tagLoading:"tagify__tag--loading",tagEditing:"tagify__tag--editable",tagFlash:"tagify__tag--flash",tagHide:"tagify__tag--hide"},dropdown:{classname:"",enabled:2,maxItems:10,searchKeys:["value","searchBy"],fuzzySearch:!0,caseSensitive:!1,accentedSearch:!0,includeSelectedTags:!1,escapeHTML:!0,highlightFirst:!0,closeOnSelect:!0,clearOnSelect:!0,position:"all",appendTarget:null},hooks:{beforeRemoveTag:function(){return Promise.resolve()},beforePaste:function(){return Promise.resolve()},suggestionClick:function(){return Promise.resolve()},beforeKeyDown:function(){return Promise.resolve()}}};function Et(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Ot(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},i=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(n).filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable})))),i.forEach((function(e){Et(t,e,n[e])}))}return t}function Dt(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n.push.apply(n,i)}return n}(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})),t}function Ct(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function It(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function At(){for(var t in this.dropdown={},this._dropdown)this.dropdown[t]="function"==typeof this._dropdown[t]?this._dropdown[t].bind(this):this._dropdown[t];this.dropdown.refs(),this.DOM.dropdown.__tagify=this}var Mt,Nt,_t=(Mt=function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},i=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(n).filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable})))),i.forEach((function(e){It(t,e,n[e])}))}return t}({},{events:{binding:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=this.dropdown.events.callbacks,n=this.listeners.dropdown=this.listeners.dropdown||{position:this.dropdown.position.bind(this,null),onKeyDown:e.onKeyDown.bind(this),onMouseOver:e.onMouseOver.bind(this),onMouseLeave:e.onMouseLeave.bind(this),onClick:e.onClick.bind(this),onScroll:e.onScroll.bind(this)},i=t?"addEventListener":"removeEventListener";"manual"!=this.settings.dropdown.position&&(document[i]("scroll",n.position,!0),window[i]("resize",n.position),window[i]("keydown",n.onKeyDown)),this.DOM.dropdown[i]("mouseover",n.onMouseOver),this.DOM.dropdown[i]("mouseleave",n.onMouseLeave),this.DOM.dropdown[i]("mousedown",n.onClick),this.DOM.dropdown.content[i]("scroll",n.onScroll)},callbacks:{onKeyDown:function(t){var e=this;if(this.state.hasFocus&&!this.state.composing){var n=this.settings,i=n.dropdown.includeSelectedTags,s=this.DOM.dropdown.querySelector(n.classNames.dropdownItemActiveSelector),a=this.dropdown.getSuggestionDataByNode(s),o="mix"==n.mode,r="select"==n.mode;n.hooks.beforeKeyDown(t,{tagify:this}).then((function(l){switch(t.key){case"ArrowDown":case"ArrowUp":case"Down":case"Up":t.preventDefault();var d=e.dropdown.getAllSuggestionsRefs(),c="ArrowUp"==t.key||"Up"==t.key;s&&(s=e.dropdown.getNextOrPrevOption(s,!c)),s&&s.matches(n.classNames.dropdownItemSelector)||(s=d[c?d.length-1:0]),e.dropdown.highlightOption(s,!0);break;case"PageUp":case"PageDown":var u;t.preventDefault();var h=e.dropdown.getAllSuggestionsRefs(),g=Math.floor(e.DOM.dropdown.content.clientHeight/(null===(u=h[0])||void 0===u?void 0:u.offsetHeight))||1,p="PageUp"===t.key;if(s){var f=h.indexOf(s),m=p?Math.max(0,f-g):Math.min(h.length-1,f+g);s=h[m]}else s=h[0];e.dropdown.highlightOption(s,!0);break;case"Home":case"End":t.preventDefault();var v=e.dropdown.getAllSuggestionsRefs();s=v["Home"===t.key?0:v.length-1],e.dropdown.highlightOption(s,!0);break;case"Escape":case"Esc":e.dropdown.hide();break;case"ArrowRight":if(e.state.actions.ArrowLeft||n.autoComplete.rightKey)return;case"Tab":var w=!n.autoComplete.rightKey||!n.autoComplete.tabKey;if(!o&&!r&&s&&w&&!e.state.editing&&a){t.preventDefault();var y=e.dropdown.getMappedValue(a);return e.state.autoCompleteData=a,e.input.autocomplete.set.call(e,y),!1}return!0;case"Enter":t.preventDefault(),e.state.actions.selectOption=!0,setTimeout((function(){return e.state.actions.selectOption=!1}),100),n.hooks.suggestionClick(t,{tagify:e,tagData:a,suggestionElm:s}).then((function(){if(s){var n=i?s:e.dropdown.getNextOrPrevOption(s,!c);e.dropdown.selectOption(s,t,(function(){if(n){var t=n.getAttribute("value");n=e.dropdown.getSuggestionNodeByValue(t),e.dropdown.highlightOption(n)}}))}else e.dropdown.hide(),o||e.addTags(e.state.inputText.trim(),!0)})).catch((function(t){return it.warn(t)}));break;case"Backspace":if(o||e.state.editing.scope)return;var b=e.input.raw.call(e);""!=b&&8203!=b.charCodeAt(0)||(!0===n.backspace?e.removeTags():"edit"==n.backspace&&setTimeout(e.editTag.bind(e),0))}}))}},onMouseOver:function(t){var e=t.target.closest(this.settings.classNames.dropdownItemSelector);this.dropdown.highlightOption(e)},onMouseLeave:function(t){this.dropdown.highlightOption()},onClick:function(t){var e=this;if(0==t.button&&t.target!=this.DOM.dropdown&&t.target!=this.DOM.dropdown.content){var n=t.target.closest(this.settings.classNames.dropdownItemSelector),i=this.dropdown.getSuggestionDataByNode(n);this.state.actions.selectOption=!0,setTimeout((function(){return e.state.actions.selectOption=!1}),100),this.settings.hooks.suggestionClick(t,{tagify:this,tagData:i,suggestionElm:n}).then((function(){n?e.dropdown.selectOption(n,t):e.dropdown.hide()})).catch((function(t){return it.warn(t)}))}},onScroll:function(t){var e=t.target,n=e.scrollTop/(e.scrollHeight-e.parentNode.clientHeight)*100;this.trigger("dropdown:scroll",{percentage:Math.round(n)})}}},refilter:function(t){t=t||this.state.dropdown.query||"",this.suggestedListItems=this.dropdown.filterListItems(t),this.dropdown.fill(),this.suggestedListItems.length||this.dropdown.hide(),this.trigger("dropdown:updated",this.DOM.dropdown)},getSuggestionDataByNode:function(t){for(var e,n=t&&t.getAttribute("value"),i=this.suggestedListItems.length;i--;){if(ct(e=this.suggestedListItems[i])&&e.value==n)return e;if(e==n)return{value:e}}},getSuggestionNodeByValue:function(t){return this.dropdown.getAllSuggestionsRefs().find((function(e){return e.getAttribute("value")===t}))},getNextOrPrevOption:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.dropdown.getAllSuggestionsRefs(),i=n.findIndex((function(e){return e===t}));return e?n[i+1]:n[i-1]},highlightOption:function(t,e){var n,i=this.settings.classNames.dropdownItemActive;if(this.state.ddItemElm&&(this.state.ddItemElm.classList.remove(i),this.state.ddItemElm.removeAttribute("aria-selected")),!t)return this.state.ddItemData=null,this.state.ddItemElm=null,void this.input.autocomplete.suggest.call(this);n=this.dropdown.getSuggestionDataByNode(t),this.state.ddItemData=n,this.state.ddItemElm=t,t.classList.add(i),t.setAttribute("aria-selected",!0),e&&(t.parentNode.scrollTop=t.clientHeight+t.offsetTop-t.parentNode.clientHeight),this.settings.autoComplete&&(this.input.autocomplete.suggest.call(this,n),this.dropdown.position())},selectOption:function(t,e,n){var i=this,s=this.settings,a=s.dropdown.includeSelectedTags,o=s.dropdown,r=o.clearOnSelect,l=o.closeOnSelect;if(!t)return this.addTags(this.state.inputText,!0),void(l&&this.dropdown.hide());e=e||{};var d=t.getAttribute("value"),c="noMatch"==d,u="mix"==s.mode,h=this.suggestedListItems.find((function(t){var e;return(null!==(e=t.value)&&void 0!==e?e:t)==d}));if(this.trigger("dropdown:select",{data:h,elm:t,event:e}),h||c){if(this.state.editing){var g=this.normalizeTags([h])[0];h=s.transformTag.call(this,g)||g,this.onEditTagDone(null,ut({__isValid:!0},h))}else this[u?"addMixTags":"addTags"]([h||this.input.raw.call(this)],r);(u||this.DOM.input.parentNode)&&(setTimeout((function(){i.DOM.input.focus(),i.toggleFocusClass(!0)})),l&&setTimeout(this.dropdown.hide.bind(this)),a?n&&n():(t.addEventListener("transitionend",(function(){i.dropdown.fillHeaderFooter(),setTimeout((function(){t.remove(),i.dropdown.refilter(),n&&n()}),100)}),{once:!0}),t.classList.add(this.settings.classNames.dropdownItemHidden)))}else l&&setTimeout(this.dropdown.hide.bind(this))},selectAll:function(t){this.suggestedListItems.length=0,this.dropdown.hide(),this.dropdown.filterListItems("");var e=this.dropdown.filterListItems("");return t||(e=this.state.dropdown.suggestions),this.addTags(e,!0),this},filterListItems:function(t,e){var n,i,s,a,o,r,l=function(){var t,l,d=void 0,c=void 0;t=p[y],i=(null!=(l=Object)&&"undefined"!=typeof Symbol&&l[Symbol.hasInstance]?l[Symbol.hasInstance](t):t instanceof l)?p[y]:{value:p[y]};var f,m=Object.keys(i).some((function(t){return w.includes(t)}))?w:["value"];u.fuzzySearch&&!e.exact?(a=m.reduce((function(t,e){return t+" "+(i[e]||"")}),"").toLowerCase().trim(),u.accentedSearch&&(a=gt(a),r=gt(r)),d=0==a.indexOf(r),c=a===r,f=a,s=r.toLowerCase().split(" ").every((function(t){return f.includes(t.toLowerCase())}))):(d=!0,s=m.some((function(t){var n=""+(i[t]||"");return u.accentedSearch&&(n=gt(n),r=gt(r)),u.caseSensitive||(n=n.toLowerCase()),c=n===r,e.exact?n===r:0==n.indexOf(r)}))),o=!u.includeSelectedTags&&n.isTagDuplicate(ct(i)?i.value:i),s&&!o&&(c&&d?g.push(i):"startsWith"==u.sortby&&d?h.unshift(i):h.push(i))},d=this,c=this.settings,u=c.dropdown,h=(e=e||{},[]),g=[],p=c.whitelist,f=u.maxItems>=0?u.maxItems:1/0,m=u.includeSelectedTags,v="function"==typeof u.sortby,w=u.searchKeys,y=0;if(!(t="select"==c.mode&&this.value.length&&this.value[0][c.tagTextProp]==t?"":t)||!w.length){h=m?p:p.filter((function(t){return!d.isTagDuplicate(ct(t)?t.value:t)}));var b=v?u.sortby(h,r):h.slice(0,f);return this.state.dropdown.suggestions=b,b}for(r=u.caseSensitive?""+t:(""+t).toLowerCase();y<p.length;y++)n=this,l();return this.state.dropdown.suggestions=g.concat(h),b=v?u.sortby(g.concat(h),r):g.concat(h).slice(0,f),this.state.dropdown.suggestions=b,b},getMappedValue:function(t){var e=this.settings.dropdown.mapValueTo;return e?"function"==typeof e?e(t):t[e]||t.value:t.value},createListHTML:function(t){var e=this;return ut([],t).map((function(t,n){"string"!=typeof t&&"number"!=typeof t||(t={value:t});var i=e.dropdown.getMappedValue(t);return i="string"==typeof i&&e.settings.dropdown.escapeHTML?dt(i):i,e.settings.templates.dropdownItem.apply(e,[Dt(Ot({},t),{mappedValue:i}),e])})).join("")}}),Nt=null!=(Nt={refs:function(){this.DOM.dropdown=this.parseTemplate("dropdown",[this.settings]),this.DOM.dropdown.content=this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-wrapper']")},getHeaderRef:function(){return this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-header']")},getFooterRef:function(){return this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-footer']")},getAllSuggestionsRefs:function(){return function(t){return function(t){if(Array.isArray(t))return Ct(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Ct(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ct(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(this.DOM.dropdown.content.querySelectorAll(this.settings.classNames.dropdownItemSelector))},show:function(t){var e,n,i,s=this,a=this.settings,o="mix"==a.mode&&!a.enforceWhitelist,r=!a.whitelist||!a.whitelist.length,l="manual"==a.dropdown.position;if(t=void 0===t?this.state.inputText:t,!(r&&!o&&!a.templates.dropdownItemNoMatch||!1===a.dropdown.enabled||this.state.isLoading||this.settings.readonly)){if(clearTimeout(this.dropdownHide__bindEventsTimeout),this.suggestedListItems=this.dropdown.filterListItems(t),t&&!this.suggestedListItems.length&&(this.trigger("dropdown:noMatch",t),a.templates.dropdownItemNoMatch&&(i=a.templates.dropdownItemNoMatch.call(this,{value:t}))),!i){if(this.suggestedListItems.length)t&&o&&!this.state.editing.scope&&!st(this.suggestedListItems[0].value,t)&&this.suggestedListItems.unshift({value:t});else{if(!t||!o||this.state.editing.scope)return this.input.autocomplete.suggest.call(this),void this.dropdown.hide();this.suggestedListItems=[{value:t}]}n=""+(ct(e=this.suggestedListItems[0])?e.value:e),a.autoComplete&&n&&0==n.indexOf(t)&&this.input.autocomplete.suggest.call(this,e)}this.dropdown.fill(i),a.dropdown.highlightFirst&&this.dropdown.highlightOption(this.DOM.dropdown.content.querySelector(a.classNames.dropdownItemSelector)),this.state.dropdown.visible||setTimeout(this.dropdown.events.binding.bind(this)),this.state.dropdown.visible=t||!0,this.state.dropdown.query=t,this.setStateSelection(),l||setTimeout((function(){s.dropdown.position(),s.dropdown.render()})),setTimeout((function(){s.trigger("dropdown:show",s.DOM.dropdown)}))}},hide:function(t){var e=this,n=this.DOM,i=n.scope,s=n.dropdown,a="manual"==this.settings.dropdown.position&&!t;if(s&&document.body.contains(s)&&!a)return window.removeEventListener("resize",this.dropdown.position),this.dropdown.events.binding.call(this,!1),i.setAttribute("aria-expanded",!1),s.parentNode.removeChild(s),setTimeout((function(){e.state.dropdown.visible=!1}),100),this.state.dropdown.query=this.state.ddItemData=this.state.ddItemElm=this.state.selection=null,this.state.tag&&this.state.tag.value.length&&(this.state.flaggedTags[this.state.tag.baseOffset]=this.state.tag),this.trigger("dropdown:hide",s),this},toggle:function(t){this.dropdown[this.state.dropdown.visible&&!t?"hide":"show"]()},getAppendTarget:function(){var t=this.settings.dropdown;return"function"==typeof t.appendTarget?t.appendTarget():t.appendTarget},render:function(){var t,e,n=this,i=((e=this.DOM.dropdown.cloneNode(!0)).style.cssText="position:fixed; top:-9999px; opacity:0",document.body.appendChild(e),t=e.clientHeight,e.parentNode.removeChild(e),t),s=this.settings,a=this.dropdown.getAppendTarget();return!1===s.dropdown.enabled||(this.DOM.scope.setAttribute("aria-expanded",!0),document.body.contains(this.DOM.dropdown)||(this.DOM.dropdown.classList.add(s.classNames.dropdownInital),this.dropdown.position(i),a.appendChild(this.DOM.dropdown),setTimeout((function(){return n.DOM.dropdown.classList.remove(s.classNames.dropdownInital)})))),this},fill:function(t){t="string"==typeof t?t:this.dropdown.createListHTML(t||this.suggestedListItems);var e,n=this.settings.templates.dropdownContent.call(this,t);this.DOM.dropdown.content.innerHTML=(e=n)?e.replace(/\>[\r\n ]+\</g,"><").split(/>\s+</).join("><").trim():""},fillHeaderFooter:function(){var t=this.dropdown.filterListItems(this.state.dropdown.query),e=this.parseTemplate("dropdownHeader",[t]),n=this.parseTemplate("dropdownFooter",[t]),i=this.dropdown.getHeaderRef(),s=this.dropdown.getFooterRef();e&&(null==i||i.parentNode.replaceChild(e,i)),n&&(null==s||s.parentNode.replaceChild(n,s))},position:function(t){var e=this.settings.dropdown,n=this.dropdown.getAppendTarget();if("manual"!=e.position&&n){var i,s,a,o,r,l,d,c,u,h,g=this.DOM.dropdown,p=e.RTL,f=n===document.body,m=n===this.DOM.scope,v=f?window.pageYOffset:n.scrollTop,w=document.fullscreenElement||document.webkitFullscreenElement||document.documentElement,y=w.clientHeight,b=Math.max(w.clientWidth||0,window.innerWidth||0),T=b>480?e.position:"all",S=this.DOM["input"==T?"input":"scope"];if(t=t||g.clientHeight,this.state.dropdown.visible){if("text"==T?(a=(i=function(){var t=document.getSelection();if(t.rangeCount){var e,n,i=t.getRangeAt(0),s=i.startContainer,a=i.startOffset;if(a>0)return(n=document.createRange()).setStart(s,a-1),n.setEnd(s,a),{left:(e=n.getBoundingClientRect()).right,top:e.top,bottom:e.bottom};if(s.getBoundingClientRect)return s.getBoundingClientRect()}return{left:-9999,top:-9999}}()).bottom,s=i.top,o=i.left,r="auto"):(l=function(t){var e=0,n=0;for(t=t.parentNode;t&&t!=w;)e+=t.offsetTop||0,n+=t.offsetLeft||0,t=t.parentNode;return{top:e,left:n}}(n),i=S.getBoundingClientRect(),s=m?-1:i.top-l.top,a=(m?i.height:i.bottom-l.top)-1,o=m?-1:i.left-l.left,r=i.width+"px"),!f){var x=function(){for(var t=0,n=e.appendTarget.parentNode;n;)t+=n.scrollTop||0,n=n.parentNode;return t}();s+=x,a+=x}var E;s=Math.floor(s),a=Math.ceil(a),c=b-o<120,u=((d=null!==(E=e.placeAbove)&&void 0!==E?E:y-i.bottom<t)?s:a)+v,h=o+(p&&i.width||0)+window.pageXOffset,h="text"==T&&c?"right: 0;":"left: ".concat(h,"px;"),g.style.cssText="".concat(h," top: ").concat(u,"px; min-width: ").concat(r,"; max-width: ").concat(r),g.setAttribute("placement",d?"top":"bottom"),g.setAttribute("position",T)}}}})?Nt:{},Object.getOwnPropertyDescriptors?Object.defineProperties(Mt,Object.getOwnPropertyDescriptors(Nt)):function(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n.push.apply(n,i)}return n}(Object(Nt)).forEach((function(t){Object.defineProperty(Mt,t,Object.getOwnPropertyDescriptor(Nt,t))})),Mt),Lt="@yaireo/tagify/",kt={empty:"empty",exceed:"number of tags exceeded",pattern:"pattern mismatch",duplicate:"already exists",notAllowed:"not allowed"},Bt={wrapper:function(t,e){return'<tags class="'.concat(e.classNames.namespace," ").concat(e.mode?"".concat(e.classNames[e.mode+"Mode"]):""," ").concat(t.className,'"\n ').concat(e.readonly?"readonly":"","\n ").concat(e.disabled?"disabled":"","\n ").concat(e.required?"required":"","\n ").concat("select"===e.mode?"spellcheck='false'":"",'\n tabIndex="-1">\n ').concat(this.settings.templates.input.call(this),"\n ").concat(tt,"\n </tags>")},input:function(){var t=this.settings,e=t.placeholder||tt;return"<span ".concat(!t.readonly&&t.userInput?"contenteditable":"",' tabIndex="0" data-placeholder="').concat(e,'" aria-placeholder="').concat(t.placeholder||"",'"\n class="').concat(t.classNames.input,'"\n role="textbox"\n autocapitalize="false"\n autocorrect="off"\n aria-autocomplete="both"\n aria-multiline="').concat("mix"==t.mode,'"></span>')},tag:function(t,e){var n=e.settings;return'<tag title="'.concat(t.title||t.value,"\"\n contenteditable='false'\n tabIndex=\"").concat(n.a11y.focusableTags?0:-1,'"\n class="').concat(n.classNames.tag," ").concat(t.class||"",'"\n ').concat(this.getAttributes(t),">\n <x title='' tabIndex=\"").concat(n.a11y.focusableTags?0:-1,'" class="').concat(n.classNames.tagX,"\" role='button' aria-label='remove tag'></x>\n <div>\n <span ").concat("select"===n.mode&&n.userInput?"contenteditable='true'":"",' autocapitalize="false" autocorrect="off" spellcheck=\'false\' class="').concat(n.classNames.tagText,'">').concat(t[n.tagTextProp]||t.value,"</span>\n </div>\n </tag>")},dropdown:function(t){var e=t.dropdown,n="manual"==e.position;return'<div class="'.concat(n?"":t.classNames.dropdown," ").concat(e.classname,'" role="listbox" aria-labelledby="dropdown" dir="').concat(e.RTL?"rtl":"","\">\n <div data-selector='tagify-suggestions-wrapper' class=\"").concat(t.classNames.dropdownWrapper,'"></div>\n </div>')},dropdownContent:function(t){var e=this.settings.templates,n=this.state.dropdown.suggestions;return"\n ".concat(e.dropdownHeader.call(this,n),"\n ").concat(t,"\n ").concat(e.dropdownFooter.call(this,n),"\n ")},dropdownItem:function(t){return"<div ".concat(this.getAttributes(t),"\n class='").concat(this.settings.classNames.dropdownItem," ").concat(this.isTagDuplicate(t.value)?this.settings.classNames.dropdownItemSelected:""," ").concat(t.class||"",'\'\n tabindex="0"\n role="option">').concat(t.mappedValue||t.value,"</div>")},dropdownHeader:function(t){return"<header data-selector='tagify-suggestions-header' class=\"".concat(this.settings.classNames.dropdownHeader,'"></header>')},dropdownFooter:function(t){var e=t.length-this.settings.dropdown.maxItems;return e>0?"<footer data-selector='tagify-suggestions-footer' class=\"".concat(this.settings.classNames.dropdownFooter,'">\n ').concat(e," more items. Refine your search.\n </footer>"):""},dropdownItemNoMatch:null};function Pt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function jt(t,e){return null!=e&&"undefined"!=typeof Symbol&&e[Symbol.hasInstance]?!!e[Symbol.hasInstance](t):t instanceof e}function Vt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function Ft(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function qt(t,e){return null!=e&&"undefined"!=typeof Symbol&&e[Symbol.hasInstance]?!!e[Symbol.hasInstance](t):t instanceof e}function Ht(t){return function(t){if(Array.isArray(t))return Vt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Vt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Vt(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var Rt={customBinding:function(){var t=this;this.customEventsList.forEach((function(e){t.on(e,t.settings.callbacks[e])}))},binding:function(){var t,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],n=this.settings,i=this.events.callbacks,s=e?"addEventListener":"removeEventListener";if(!this.state.mainEvents||!e){for(var a in this.state.mainEvents=e,e&&!this.listeners.main&&(this.events.bindGlobal.call(this),this.settings.isJQueryPlugin&&jQuery(this.DOM.originalInput).on("tagify.removeAllTags",this.removeAllTags.bind(this))),t=this.listeners.main=this.listeners.main||{keydown:["input",i.onKeydown.bind(this)],click:["scope",i.onClickScope.bind(this)],dblclick:"select"!=n.mode&&["scope",i.onDoubleClickScope.bind(this)],paste:["input",i.onPaste.bind(this)],drop:["input",i.onDrop.bind(this)],compositionstart:["input",i.onCompositionStart.bind(this)],compositionend:["input",i.onCompositionEnd.bind(this)]})t[a]&&this.DOM[t[a][0]][s](a,t[a][1]);var o=this.listeners.main.inputMutationObserver||new MutationObserver(i.onInputDOMChange.bind(this));o.disconnect(),"mix"==n.mode&&o.observe(this.DOM.input,{childList:!0}),this.events.bindOriginaInputListener.call(this)}},bindOriginaInputListener:function(t){var e=(t||0)+500;this.listeners.main&&(clearInterval(this.listeners.main.originalInputValueObserverInterval),this.listeners.main.originalInputValueObserverInterval=setInterval(this.events.callbacks.observeOriginalInputValue.bind(this),e))},bindGlobal:function(t){var e,n=this.events.callbacks,i=t?"removeEventListener":"addEventListener";if(this.listeners&&(t||!this.listeners.global)){this.listeners.global=this.listeners.global||[{type:this.isIE?"keydown":"input",target:this.DOM.input,cb:n[this.isIE?"onInputIE":"onInput"].bind(this)},{type:"keydown",target:window,cb:n.onWindowKeyDown.bind(this)},{type:"focusin",target:this.DOM.scope,cb:n.onFocusBlur.bind(this)},{type:"focusout",target:this.DOM.scope,cb:n.onFocusBlur.bind(this)},{type:"click",target:document,cb:n.onClickAnywhere.bind(this),useCapture:!0}];var s=!0,a=!1,o=void 0;try{for(var r,l=this.listeners.global[Symbol.iterator]();!(s=(r=l.next()).done);s=!0)(e=r.value).target[i](e.type,e.cb,!!e.useCapture)}catch(t){a=!0,o=t}finally{try{s||null==l.return||l.return()}finally{if(a)throw o}}}},unbindGlobal:function(){this.events.bindGlobal.call(this,!0)},callbacks:{onFocusBlur:function(t){var e,n,i=this.settings,s=vt.call(this,t.relatedTarget),a=mt.call(this,t.relatedTarget),o=t.target.classList.contains(i.classNames.tagX),r="focusin"==t.type,l="focusout"==t.type;o&&"mix"!=i.mode&&this.DOM.input.focus(),s&&r&&!a&&!o&&this.toggleFocusClass(this.state.hasFocus=+new Date);var d=t.target?this.trim(this.DOM.input.textContent):"",c=null===(n=this.value)||void 0===n||null===(e=n[0])||void 0===e?void 0:e[i.tagTextProp],u=i.dropdown.enabled>=0,h={relatedTarget:t.relatedTarget},g=this.state.actions.selectOption&&(u||!i.dropdown.closeOnSelect),p=this.state.actions.addNew&&u;if(l){if(t.relatedTarget===this.DOM.scope)return this.dropdown.hide(),void this.DOM.input.focus();this.postUpdate(),i.onChangeAfterBlur&&this.triggerChangeEvent()}if(!(g||p||o))if(this.state.hasFocus=!(!r&&!s)&&+new Date,this.toggleFocusClass(this.state.hasFocus),"mix"!=i.mode){if(r){if(!i.focusable)return;var f=0===i.dropdown.enabled&&!this.state.dropdown.visible,m=!a||"select"===i.mode,v=this.DOM.scope.querySelector(this.settings.classNames.tagTextSelector);return this.trigger("focus",h),void(f&&m&&(this.dropdown.show(this.value.length?"":void 0),this.setRangeAtStartEnd(!1,v)))}if(l){if(this.trigger("blur",h),this.loading(!1),"select"==i.mode){if(this.value.length){var w=this.getTagElms()[0];d=this.trim(w.textContent)}c===d&&(d="")}d&&!this.state.actions.selectOption&&i.addTagOnBlur&&i.addTagOn.includes("blur")&&this.addTags(d,!0)}s||(this.DOM.input.removeAttribute("style"),this.dropdown.hide())}else r?this.trigger("focus",h):l&&(this.trigger("blur",h),this.loading(!1),this.dropdown.hide(),this.state.dropdown.visible=void 0,this.setStateSelection())},onCompositionStart:function(t){this.state.composing=!0},onCompositionEnd:function(t){this.state.composing=!1},onWindowKeyDown:function(t){var e,n=this.settings,i=document.activeElement,s=vt.call(this,i)&&this.DOM.scope.contains(i),a=i===this.DOM.input,o=s&&i.hasAttribute("readonly"),r=this.DOM.scope.querySelector(this.settings.classNames.tagTextSelector),l=this.state.dropdown.visible;if(("Tab"===t.key&&l||this.state.hasFocus||s&&!o)&&!a){e=i.nextElementSibling;var d=t.target.classList.contains(n.classNames.tagX);switch(t.key){case"Backspace":n.readonly||this.state.editing||(this.removeTags(i),(e||this.DOM.input).focus());break;case"Enter":if(d)return void this.removeTags(t.target.parentNode);n.a11y.focusableTags&&mt.call(this,i)&&setTimeout(this.editTag.bind(this),0,i);break;case"ArrowDown":this.state.dropdown.visible||"mix"==n.mode||this.dropdown.show();break;case"Tab":null==r||r.focus()}}},onKeydown:function(t){var e=this,n=this.settings;if(!this.state.composing&&n.userInput){"select"==n.mode&&n.enforceWhitelist&&this.value.length&&"Tab"!=t.key&&t.preventDefault();var i=this.trim(t.target.textContent);this.trigger("keydown",{event:t}),n.hooks.beforeKeyDown(t,{tagify:this}).then((function(s){if("mix"==n.mode){switch(t.key){case"Left":case"ArrowLeft":e.state.actions.ArrowLeft=!0;break;case"Delete":case"Backspace":if(e.state.editing)return;var a=document.getSelection(),o="Delete"==t.key&&a.anchorOffset==(a.anchorNode.length||0),r=a.anchorNode.previousSibling,l=1==a.anchorNode.nodeType||!a.anchorOffset&&r&&1==r.nodeType&&a.anchorNode.previousSibling;!function(t){var e=document.createElement("div");t.replace(/\&#?[0-9a-z]+;/gi,(function(t){return e.innerHTML=t,e.innerText}))}(e.DOM.input.innerHTML);var d,c,u,h=e.getTagElms(),g=1===a.anchorNode.length&&a.anchorNode.nodeValue==String.fromCharCode(8203);if("edit"==n.backspace&&l)return d=1==a.anchorNode.nodeType?null:a.anchorNode.previousElementSibling,setTimeout(e.editTag.bind(e),0,d),void t.preventDefault();if(pt()&&qt(l,Element))return u=lt(l),l.hasAttribute("readonly")||l.remove(),e.DOM.input.focus(),void setTimeout((function(){Tt(u),e.DOM.input.click()}));if("BR"==a.anchorNode.nodeName)return;if((o||l)&&1==a.anchorNode.nodeType?c=0==a.anchorOffset?o?h[0]:null:h[Math.min(h.length,a.anchorOffset)-1]:o?c=a.anchorNode.nextElementSibling:qt(l,Element)&&(c=l),3==a.anchorNode.nodeType&&!a.anchorNode.nodeValue&&a.anchorNode.previousElementSibling&&t.preventDefault(),(l||o)&&!n.backspace)return void t.preventDefault();if("Range"!=a.type&&!a.anchorOffset&&a.anchorNode==e.DOM.input&&"Delete"!=t.key)return void t.preventDefault();if("Range"!=a.type&&c&&c.hasAttribute("readonly"))return void Tt(lt(c));"Delete"==t.key&&g&&bt(a.anchorNode.nextSibling)&&e.removeTags(a.anchorNode.nextSibling)}return!0}var p="manual"==n.dropdown.position;switch(t.key){case"Backspace":"select"==n.mode&&n.enforceWhitelist&&e.value.length?e.removeTags():e.state.dropdown.visible&&"manual"!=n.dropdown.position||""!=t.target.textContent&&8203!=i.charCodeAt(0)||(!0===n.backspace?e.removeTags():"edit"==n.backspace&&setTimeout(e.editTag.bind(e),0));break;case"Esc":case"Escape":if(e.state.dropdown.visible)return;t.target.blur();break;case"Down":case"ArrowDown":e.state.dropdown.visible||e.dropdown.show();break;case"ArrowRight":var f=e.state.inputSuggestion||e.state.ddItemData;if(f&&n.autoComplete.rightKey)return void e.addTags([f],!0);break;case"Tab":return!0;case"Enter":if(e.state.dropdown.visible&&!p)return;t.preventDefault();var m=e.state.autoCompleteData||i;setTimeout((function(){e.state.dropdown.visible&&!p||e.state.actions.selectOption||!n.addTagOn.includes(t.key.toLowerCase())||(e.addTags([m],!0),e.state.autoCompleteData=null)}))}})).catch((function(t){return t}))}},onInput:function(t){this.postUpdate();var e=this.settings;if("mix"==e.mode)return this.events.callbacks.onMixTagsInput.call(this,t);var n=this.input.normalize.call(this,void 0,{trim:!1}),i=n.length>=e.dropdown.enabled,s={value:n,inputElm:this.DOM.input},a=this.validateTag({value:n});"select"==e.mode&&this.toggleScopeValidation(a),s.isValid=a,this.state.inputText!=n&&(this.input.set.call(this,n,!1),-1!=n.search(e.delimiters)?this.addTags(n)&&this.input.set.call(this):e.dropdown.enabled>=0&&this.dropdown[i?"show":"hide"](n),this.trigger("input",s))},onMixTagsInput:function(t){var e,n,i,s,a,o,r,l,d=this,c=this.settings,u=this.value.length,h=this.getTagElms(),g=document.createDocumentFragment(),p=window.getSelection().getRangeAt(0),f=[].map.call(h,(function(t){return bt(t).value}));if("deleteContentBackward"==t.inputType&&pt()&&this.events.callbacks.onKeydown.call(this,{target:t.target,key:"Backspace"}),St(this.getTagElms()),this.value.slice().forEach((function(t){t.readonly&&!f.includes(t.value)&&g.appendChild(d.createTagElem(t))})),g.childNodes.length&&(p.insertNode(g),this.setRangeAtStartEnd(!1,g.lastChild)),h.length!=u)return this.value=[].map.call(this.getTagElms(),(function(t){return bt(t)})),void this.update({withoutChangeEvent:!0});if(this.hasMaxTags())return!0;if(window.getSelection&&(o=window.getSelection()).rangeCount>0&&3==o.anchorNode.nodeType){if((p=o.getRangeAt(0).cloneRange()).collapse(!0),p.setStart(o.focusNode,0),i=(e=p.toString().slice(0,p.endOffset)).split(c.pattern).length-1,(n=e.match(c.pattern))&&(s=e.slice(e.lastIndexOf(n[n.length-1]))),s){if(this.state.actions.ArrowLeft=!1,this.state.tag={prefix:s.match(c.pattern)[0],value:s.replace(c.pattern,"")},this.state.tag.baseOffset=o.baseOffset-this.state.tag.value.length,l=this.state.tag.value.match(c.delimiters))return this.state.tag.value=this.state.tag.value.replace(c.delimiters,""),this.state.tag.delimiters=l[0],this.addTags(this.state.tag.value,c.dropdown.clearOnSelect),void this.dropdown.hide();a=this.state.tag.value.length>=c.dropdown.enabled;try{r=(r=this.state.flaggedTags[this.state.tag.baseOffset]).prefix==this.state.tag.prefix&&r.value[0]==this.state.tag.value[0],this.state.flaggedTags[this.state.tag.baseOffset]&&!this.state.tag.value&&delete this.state.flaggedTags[this.state.tag.baseOffset]}catch(t){}(r||i<this.state.mixMode.matchedPatternCount)&&(a=!1)}else this.state.flaggedTags={};this.state.mixMode.matchedPatternCount=i}setTimeout((function(){d.update({withoutChangeEvent:!0}),d.trigger("input",ut({},d.state.tag,{textContent:d.DOM.input.textContent})),d.state.tag&&d.dropdown[a?"show":"hide"](d.state.tag.value)}),10)},onInputIE:function(t){var e=this;setTimeout((function(){e.events.callbacks.onInput.call(e,t)}))},observeOriginalInputValue:function(){this.DOM.originalInput.parentNode||this.destroy(),this.DOM.originalInput.value!=this.DOM.originalInput.tagifyValue&&this.loadOriginalValues()},onClickAnywhere:function(t){if(t.target!=this.DOM.scope&&!this.DOM.scope.contains(t.target)){this.toggleFocusClass(!1),this.state.hasFocus=!1;var e=t.target.closest(this.settings.classNames.dropdownSelector);(null==e?void 0:e.__tagify)!=this&&this.dropdown.hide()}},onClickScope:function(t){var e=this.settings,n=t.target.closest("."+e.classNames.tag),i=t.target===this.DOM.scope,s=+new Date-this.state.hasFocus;if(i&&"select"!=e.mode)this.DOM.input.focus();else{if(!t.target.classList.contains(e.classNames.tagX))return n&&!this.state.editing?(this.trigger("click",{tag:n,index:this.getNodeIndex(n),data:bt(n),event:t}),void(1!==e.editTags&&1!==e.editTags.clicks&&"select"!=e.mode||this.events.callbacks.onDoubleClickScope.call(this,t))):void(t.target==this.DOM.input&&("mix"==e.mode&&this.fixFirefoxLastTagNoCaret(),s>500||!e.focusable)?this.state.dropdown.visible?this.dropdown.hide():0===e.dropdown.enabled&&"mix"!=e.mode&&this.dropdown.show(this.value.length?"":void 0):"select"!=e.mode||0!==e.dropdown.enabled||this.state.dropdown.visible||(this.events.callbacks.onDoubleClickScope.call(this,function(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n.push.apply(n,i)}return n}(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})),t}(function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},i=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(n).filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable})))),i.forEach((function(e){Ft(t,e,n[e])}))}return t}({},t),{target:this.getTagElms()[0]})),!e.userInput&&this.dropdown.show()));this.removeTags(t.target.parentNode)}},onPaste:function(t){var e=this;t.preventDefault();var n,i,s,a=this.settings;if(!a.userInput)return!1;a.readonly||(i=t.clipboardData||window.clipboardData,s=i.getData("Text"),a.hooks.beforePaste(t,{tagify:this,pastedText:s,clipboardData:i}).then((function(a){void 0===a&&(a=s),a&&(e.injectAtCaret(a,window.getSelection().getRangeAt(0)),"mix"==e.settings.mode?e.events.callbacks.onMixTagsInput.call(e,t):e.settings.pasteAsTags?n=e.addTags(e.state.inputText+a,!0):(e.state.inputText=a,e.dropdown.show(a))),e.trigger("paste",{event:t,pastedText:s,clipboardData:i,tagsElems:n})})).catch((function(t){return t})))},onDrop:function(t){t.preventDefault()},onEditTagInput:function(t,e){var n,i=t.closest("."+this.settings.classNames.tag),s=this.getNodeIndex(i),a=bt(i),o=this.input.normalize.call(this,t),r=(Ft(n={},this.settings.tagTextProp,o),Ft(n,"__tagId",a.__tagId),n),l=this.validateTag(r);this.editTagChangeDetected(ut(a,r))||!0!==t.originalIsValid||(l=!0),i.classList.toggle(this.settings.classNames.tagInvalid,!0!==l),a.__isValid=l,i.title=!0===l?a.title||a.value:l,o.length>=this.settings.dropdown.enabled&&(this.state.editing&&(this.state.editing.value=o),this.dropdown.show(o)),this.trigger("edit:input",{tag:i,index:s,data:ut({},this.value[s],{newValue:o}),event:e})},onEditTagPaste:function(t,e){var n=(e.clipboardData||window.clipboardData).getData("Text");e.preventDefault();var i=yt(n);this.setRangeAtStartEnd(!1,i)},onEditTagClick:function(t,e){this.events.callbacks.onClickScope.call(this,e)},onEditTagFocus:function(t){this.state.editing={scope:t,input:t.querySelector("[contenteditable]")}},onEditTagBlur:function(t,e){var n=mt.call(this,e.relatedTarget);if("select"==this.settings.mode&&n&&e.relatedTarget.contains(e.target))this.dropdown.hide();else if(this.state.editing&&(this.state.hasFocus||this.toggleFocusClass(),this.DOM.scope.contains(document.activeElement)||this.trigger("blur",{}),this.DOM.scope.contains(t))){var i,s,a,o=this.settings,r=t.closest("."+o.classNames.tag),l=bt(r),d=this.input.normalize.call(this,t),c=(Ft(i={},o.tagTextProp,d),Ft(i,"__tagId",l.__tagId),i),u=l.__originalData,h=this.editTagChangeDetected(ut(l,c)),g=this.validateTag(c);if(d)if(h){var p;if(s=this.hasMaxTags(),a=ut({},u,(Ft(p={},o.tagTextProp,this.trim(d)),Ft(p,"__isValid",g),p)),o.transformTag.call(this,a,u),!0!==(g=(!s||!0===u.__isValid)&&this.validateTag(a))){if(this.trigger("invalid",{data:a,tag:r,message:g}),o.editTags.keepInvalid)return;o.keepInvalidTags?a.__isValid=g:a=u}else o.keepInvalidTags&&(delete a.title,delete a["aria-invalid"],delete a.class);this.onEditTagDone(r,a)}else this.onEditTagDone(r,u);else this.onEditTagDone(r)}},onEditTagkeydown:function(t,e){if(!this.state.composing)switch(this.trigger("edit:keydown",{event:t}),t.key){case"Esc":case"Escape":this.state.editing=!1,e.__tagifyTagData.__originalData.value?e.parentNode.replaceChild(e.__tagifyTagData.__originalHTML,e):e.remove();break;case"Enter":case"Tab":t.preventDefault(),setTimeout((function(){return t.target.blur()}),0)}},onDoubleClickScope:function(t){var e=t.target.closest("."+this.settings.classNames.tag);if(e){var n,i,s=bt(e),a=this.settings;!1!==(null==s?void 0:s.editable)&&(n=e.classList.contains(this.settings.classNames.tagEditing),i=e.hasAttribute("readonly"),a.readonly||n||i||!this.settings.editTags||!a.userInput||(this.events.callbacks.onEditTagFocus.call(this,e),this.editTag(e)),this.toggleFocusClass(!0),"select"!=a.mode&&this.trigger("dblclick",{tag:e,index:this.getNodeIndex(e),data:bt(e)}))}},onInputDOMChange:function(t){var e=this;t.forEach((function(t){t.addedNodes.forEach((function(t){if("<div><br></div>"==t.outerHTML)t.replaceWith(document.createElement("br"));else if(1==t.nodeType&&t.querySelector(e.settings.classNames.tagSelector)){var n,i=document.createTextNode("");3==t.childNodes[0].nodeType&&"BR"!=t.previousSibling.nodeName&&(i=document.createTextNode("\n")),(n=t).replaceWith.apply(n,Ht([i].concat(Ht(Ht(t.childNodes).slice(0,-1))))),Tt(i)}else if(mt.call(e,t)){var s;if(3!=(null===(s=t.previousSibling)||void 0===s?void 0:s.nodeType)||t.previousSibling.textContent||t.previousSibling.remove(),t.previousSibling&&"BR"==t.previousSibling.nodeName){t.previousSibling.replaceWith("\n​");for(var a=t.nextSibling,o="";a;)o+=a.textContent,a=a.nextSibling;o.trim()&&Tt(t.previousSibling)}else t.previousSibling&&!bt(t.previousSibling)||t.before("​")}})),t.removedNodes.forEach((function(t){t&&"BR"==t.nodeName&&mt.call(e,n)&&(e.removeTags(n),e.fixFirefoxLastTagNoCaret())}))}));var n=this.DOM.input.lastChild;n&&""==n.nodeValue&&n.remove(),n&&"BR"==n.nodeName||this.DOM.input.appendChild(document.createElement("br"))}}};function $t(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function Ut(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Wt(t,e){return null!=e&&"undefined"!=typeof Symbol&&e[Symbol.hasInstance]?!!e[Symbol.hasInstance](t):t instanceof e}function Kt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},i=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(n).filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable})))),i.forEach((function(e){Ut(t,e,n[e])}))}return t}function zt(t){return function(t){if(Array.isArray(t))return $t(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return $t(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$t(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Xt(t,e){if(!t){it.warn("input element not found",t);var n=new Proxy(this,{get:function(){return function(){return n}}});return n}if(t.__tagify)return it.warn("input element is already Tagified - Same instance is returned.",t),t.__tagify;var i;ut(this,function(t){var e=document.createTextNode(""),n={};function i(t,n,i){i&&n.split(/\s+/g).forEach((function(n){return e[t+"EventListener"].call(e,n,i)}))}return{removeAllCustomListeners:function(){Object.entries(n).forEach((function(t){var e=function(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var i,s,a=[],o=!0,r=!1;try{for(n=n.call(t);!(o=(i=n.next()).done)&&(a.push(i.value),!e||a.length!==e);o=!0);}catch(t){r=!0,s=t}finally{try{o||null==n.return||n.return()}finally{if(r)throw s}}return a}}(t,e)||function(t,e){if(t){if("string"==typeof t)return Pt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Pt(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(t,2),n=e[0];e[1].forEach((function(t){return i("remove",n,t)}))})),n={}},off:function(t,e){return t&&(e?i("remove",t,e):t.split(/\s+/g).forEach((function(t){var e;null===(e=n[t])||void 0===e||e.forEach((function(e){return i("remove",t,e)})),delete n[t]}))),this},on:function(t,e){return e&&"function"==typeof e&&(t.split(/\s+/g).forEach((function(t){Array.isArray(n[t])?n[t].push(e):n[t]=[e]})),i("add",t,e)),this},trigger:function(n,i,s){var a;if(s=s||{cloneData:!0},n)if(t.settings.isJQueryPlugin)"remove"==n&&(n="removeTag"),jQuery(t.DOM.originalInput).triggerHandler(n,[i]);else{try{var o="object"==typeof i?i:{value:i};if((o=s.cloneData?ut({},o):o).tagify=this,i.event&&(o.event=this.cloneEvent(i.event)),jt(i,Object))for(var r in i)jt(i[r],HTMLElement)&&(o[r]=i[r]);a=new CustomEvent(n,{detail:o})}catch(t){it.warn(t)}e.dispatchEvent(a)}}}}(this)),this.isFirefox=/firefox|fxios/i.test(navigator.userAgent)&&!/seamonkey/i.test(navigator.userAgent),this.isIE=window.document.documentMode,e=e||{},this.getPersistedData=(i=e.id,function(t){var e;if(i){var n,s="/"+t;if(1===(null===(e=localStorage)||void 0===e?void 0:e.getItem(Lt+i+"/v")))try{n=JSON.parse(localStorage[Lt+i+s])}catch(t){}return n}}),this.setPersistedData=function(t){var e;return t?(null===(e=localStorage)||void 0===e||e.setItem(Lt+t+"/v",1),function(e,n){var i,s="/"+n,a=JSON.stringify(e);e&&n&&(null===(i=localStorage)||void 0===i||i.setItem(Lt+t+s,a),dispatchEvent(new Event("storage")))}):function(){}}(e.id),this.clearPersistedData=function(t){return function(e){var n=Lt+"/"+t+"/";if(e)localStorage.removeItem(n+e);else for(var i in localStorage)i.includes(n)&&localStorage.removeItem(i)}}(e.id),this.applySettings(t,e),this.state={inputText:"",editing:!1,composing:!1,actions:{},mixMode:{},dropdown:{},flaggedTags:{}},this.value=[],this.listeners={},this.DOM={},this.build(t),At.call(this),this.getCSSVars(),this.loadOriginalValues(),this.events.customBinding.call(this),this.events.binding.call(this),t.autofocus&&this.DOM.input.focus(),t.__tagify=this}let Jt,Qt;function Gt(t,e,n,i,s,a){const o=new t(e,function(t,e){return{id:t,whitelist:e.options,enforceWhitelist:!e.userInput,duplicates:e.allowDuplicates,maxTags:e.maxItems,delimiters:null,originalInputValueFormat:t=>t.map((t=>t.value)),dropdown:{enabled:e.dropdownSuggestionsStartAfter,maxItems:e.dropdownMaxItems,closeOnSelect:e.dropdownCloseOnSelect,highlightFirst:e.highlight},transformTag(t){t.display||(t.display=t.value,t.value=encodeURIComponent(t.value)),t.display=t.display.replace(/</g,"&lt;").replace(/>/g,"&gt;")},templates:{wrapper(t,e){return`<div class="${e.classNames.namespace} ${e.mode?`${e.classNames[`${e.mode}Mode`]}`:""} ${t.className}"\n ${e.readonly?"readonly":""}\n ${e.disabled?"disabled":""}\n ${e.required?"required":""}\n ${"select"===e.mode?"spellcheck='false'":""}\n tabIndex="-1">\n ${this.settings.templates.input.call(this)}\n ​\n </div>`},tag:t=>`<div contenteditable='false'\n spellcheck="false" class='tagify__tag'\n value="${t.value}"\n tabindex="0">\n <span title='remove tag' class='tagify__tag__removeBtn'></span>\n <div>\n <span class='tagify__tag-text'>${t.display}</span>\n </div>\n </div>`,dropdownItem:t=>`<div class='tagify__dropdown__item' tagifySuggestionIdx="${t.tagifySuggestionIdx}" value="${t.value}">\n <span>${t.display}</span>\n </div>`}}}(e.id,n));o.addTags(i),void 0!==s&&o.on("input",(t=>{!function(t,e,n,i,s,a){Jt instanceof AbortController&&Jt.abort(),Jt=new AbortController,t.whitelist=null,void 0!==Qt&&(t.DOM.scope.ownerDocument.defaultView.clearTimeout(Qt),Qt=void 0),s.detail.value.length<e||(Qt=t.DOM.scope.ownerDocument.defaultView.setTimeout((()=>{const e=s.detail.value;n.writeParameter(i,e),t.loading(!0),fetch(n.getUrl().toString(),{signal:Jt.signal}).then((t=>t.json())).catch((()=>{})).then((n=>{t.whitelist=n,t.loading(!1).dropdown.show(e)}))}),a))}(o,n.suggestionStarts,s,a,t,n.autocompleteTriggerTimeout)}))}Xt.prototype={_dropdown:_t,placeCaretAfterNode:Tt,getSetTagData:bt,helpers:{sameStr:st,removeCollectionProp:at,omit:ot,isObject:ct,parseHTML:rt,escapeHTML:dt,extend:ut,concatWithoutDups:ht,getUID:ft,isNodeTag:mt},customEventsList:["change","add","remove","invalid","input","paste","click","keydown","focus","blur","edit:input","edit:beforeUpdate","edit:updated","edit:start","edit:keydown","dropdown:show","dropdown:hide","dropdown:select","dropdown:updated","dropdown:noMatch","dropdown:scroll"],dataProps:["__isValid","__removed","__originalData","__originalHTML","__tagId"],trim:function(t){return this.settings.trim&&t&&"string"==typeof t?t.trim():t},parseHTML:rt,templates:Bt,parseTemplate:function(t,e){return rt((t=this.settings.templates[t]||t).apply(this,e))},set whitelist(t){var e=t&&Array.isArray(t);this.settings.whitelist=e?t:[],this.setPersistedData(e?t:[],"whitelist")},get whitelist(){return this.settings.whitelist},set userInput(t){this.settings.userInput=!!t,this.setContentEditable(!!t)},get userInput(){return this.settings.userInput},generateClassSelectors:function(t){var e=function(e){var n=e;Object.defineProperty(t,n+"Selector",{get:function(){return"."+this[n].split(" ")[0]}})};for(var n in t)e(n)},applySettings:function(t,e){var n,i;xt.templates=this.templates;var s=ut({},xt,"mix"==e.mode?{dropdown:{position:"text"}}:{}),a=this.settings=ut({},s,e);if(a.disabled=t.hasAttribute("disabled"),a.readonly=a.readonly||t.hasAttribute("readonly"),a.placeholder=dt(t.getAttribute("placeholder")||a.placeholder||""),a.required=t.hasAttribute("required"),this.generateClassSelectors(a.classNames),this.isIE&&(a.autoComplete=!1),["whitelist","blacklist"].forEach((function(e){var n=t.getAttribute("data-"+e);n&&Wt(n=n.split(a.delimiters),Array)&&(a[e]=n)})),"autoComplete"in e&&!ct(e.autoComplete)&&(a.autoComplete=xt.autoComplete,a.autoComplete.enabled=e.autoComplete),"mix"==a.mode&&(a.pattern=a.pattern||/@/,a.autoComplete.rightKey=!0,a.delimiters=e.delimiters||null,a.tagTextProp&&!a.dropdown.searchKeys.includes(a.tagTextProp)&&a.dropdown.searchKeys.push(a.tagTextProp)),t.pattern)try{a.pattern=new RegExp(t.pattern)}catch(t){}if(a.delimiters){a._delimiters=a.delimiters;try{a.delimiters=new RegExp(this.settings.delimiters,"g")}catch(t){}}a.disabled&&(a.userInput=!1),this.TEXTS=Kt({},kt,a.texts||{}),"select"==a.mode&&(a.dropdown.includeSelectedTags=!0),("select"!=a.mode||(null===(n=e.dropdown)||void 0===n?void 0:n.enabled))&&a.userInput||(a.dropdown.enabled=0),a.dropdown.appendTarget=(null===(i=e.dropdown)||void 0===i?void 0:i.appendTarget)||document.body,void 0===a.dropdown.includeSelectedTags&&(a.dropdown.includeSelectedTags=a.duplicates);var o=this.getPersistedData("whitelist");Array.isArray(o)&&(this.whitelist=Array.isArray(a.whitelist)?ht(a.whitelist,o):o)},getAttributes:function(t){var e,n=this.getCustomAttributes(t),i="";for(e in n)i+=" "+e+(void 0!==t[e]?'="'.concat(n[e],'"'):"");return i},getCustomAttributes:function(t){if(!ct(t))return"";var e,n={};for(e in t)"__"!=e.slice(0,2)&&"class"!=e&&t.hasOwnProperty(e)&&void 0!==t[e]&&(n[e]=dt(t[e]));return n},setStateSelection:function(){var t=window.getSelection(),e={anchorOffset:t.anchorOffset,anchorNode:t.anchorNode,range:t.getRangeAt&&t.rangeCount&&t.getRangeAt(0)};return this.state.selection=e,e},getCSSVars:function(){var t,e,n=getComputedStyle(this.DOM.scope,null);this.CSSVars={tagHideTransition:(t=function(t){if(!t)return{};var e=(t=t.trim().split(" ")[0]).split(/\d+/g).filter((function(t){return t})).pop().trim();return{value:+t.split(e).filter((function(t){return t}))[0].trim(),unit:e}}(("tag-hide-transition",n.getPropertyValue("--tag-hide-transition"))),e=t.value,"s"==t.unit?1e3*e:e)}},build:function(t){var e=this.DOM,n=t.closest("label");this.settings.mixMode.integrated?(e.originalInput=null,e.scope=t,e.input=t):(e.originalInput=t,e.originalInput_tabIndex=t.tabIndex,e.scope=this.parseTemplate("wrapper",[t,this.settings]),e.input=e.scope.querySelector(this.settings.classNames.inputSelector),t.parentNode.insertBefore(e.scope,t),t.tabIndex=-1),n&&n.setAttribute("for","")},destroy:function(){var t;this.events.unbindGlobal.call(this),null===(t=this.DOM.scope.parentNode)||void 0===t||t.removeChild(this.DOM.scope),this.DOM.originalInput.tabIndex=this.DOM.originalInput_tabIndex,delete this.DOM.originalInput.__tagify,this.dropdown.hide(!0),this.removeAllCustomListeners(),clearTimeout(this.dropdownHide__bindEventsTimeout),clearInterval(this.listeners.main.originalInputValueObserverInterval)},loadOriginalValues:function(t){var e,n=this.settings;if(this.state.blockChangeEvent=!0,void 0===t){var i=this.getPersistedData("value");t=i&&!this.DOM.originalInput.value?i:n.mixMode.integrated?this.DOM.input.textContent:this.DOM.originalInput.value}if(this.removeAllTags(),t)if("mix"==n.mode)this.parseMixTags(t),(e=this.DOM.input.lastChild)&&"BR"==e.tagName||this.DOM.input.insertAdjacentHTML("beforeend","<br>");else{try{Wt(JSON.parse(t),Array)&&(t=JSON.parse(t))}catch(t){}this.addTags(t,!0).forEach((function(t){return t&&t.classList.add(n.classNames.tagNoAnimation)}))}else this.postUpdate();this.state.lastOriginalValueReported=n.mixMode.integrated?"":this.DOM.originalInput.value},cloneEvent:function(t){var e={};for(var n in t)"path"!=n&&(e[n]=t[n]);return e},loading:function(t){return this.state.isLoading=t,this.DOM.scope.classList[t?"add":"remove"](this.settings.classNames.scopeLoading),this},tagLoading:function(t,e){return t&&t.classList[e?"add":"remove"](this.settings.classNames.tagLoading),this},toggleClass:function(t,e){"string"==typeof t&&this.DOM.scope.classList.toggle(t,e)},toggleScopeValidation:function(t){var e=!0===t||void 0===t;!this.settings.required&&t&&t===this.TEXTS.empty&&(e=!0),this.toggleClass(this.settings.classNames.tagInvalid,!e),this.DOM.scope.title=e?"":t},toggleFocusClass:function(t){this.toggleClass(this.settings.classNames.focus,!!t)},setPlaceholder:function(t){var e=this;["data","aria"].forEach((function(n){return e.DOM.input.setAttribute("".concat(n,"-placeholder"),t)}))},triggerChangeEvent:function(){if(!this.settings.mixMode.integrated){var t=this.DOM.originalInput,e=this.state.lastOriginalValueReported!==t.value,n=new CustomEvent("change",{bubbles:!0});e&&(this.state.lastOriginalValueReported=t.value,n.simulated=!0,t._valueTracker&&t._valueTracker.setValue(Math.random()),t.dispatchEvent(n),this.trigger("change",this.state.lastOriginalValueReported),t.value=this.state.lastOriginalValueReported)}},events:Rt,fixFirefoxLastTagNoCaret:function(){},setRangeAtStartEnd:function(t,e){if(e){t="number"==typeof t?t:!!t,e=e.lastChild||e;var n=document.getSelection();if(Wt(n.focusNode,Element)&&!this.DOM.input.contains(n.focusNode))return!0;try{n.rangeCount>=1&&["Start","End"].forEach((function(i){return n.getRangeAt(0)["set"+i](e,t||e.length)}))}catch(t){console.warn(t)}}},insertAfterTag:function(t,e){if(e=e||this.settings.mixMode.insertAfterTag,t&&t.parentNode&&e)return e="string"==typeof e?document.createTextNode(e):e,t.parentNode.insertBefore(e,t.nextSibling),e},editTagChangeDetected:function(t){var e=t.__originalData;for(var n in e)if(!this.dataProps.includes(n)&&t[n]!=e[n])return!0;return!1},getTagTextNode:function(t){return t.querySelector(this.settings.classNames.tagTextSelector)},setTagTextNode:function(t,e){this.getTagTextNode(t).innerHTML=dt(e)},editTag:function(t,e){var n=this;t=t||this.getLastTag(),e=e||{};var i=this.settings,s=this.getTagTextNode(t),a=this.getNodeIndex(t),o=bt(t),r=this.events.callbacks,l=!0,d="select"==i.mode;if(!d&&this.dropdown.hide(),s){if(!Wt(o,Object)||!("editable"in o)||o.editable)return o=bt(t,{__originalData:ut({},o),__originalHTML:t.cloneNode(!0)}),bt(o.__originalHTML,o.__originalData),s.setAttribute("contenteditable",!0),t.classList.add(i.classNames.tagEditing),this.events.callbacks.onEditTagFocus.call(this,t),s.addEventListener("click",r.onEditTagClick.bind(this,t)),s.addEventListener("blur",r.onEditTagBlur.bind(this,this.getTagTextNode(t))),s.addEventListener("input",r.onEditTagInput.bind(this,s)),s.addEventListener("paste",r.onEditTagPaste.bind(this,s)),s.addEventListener("keydown",(function(e){return r.onEditTagkeydown.call(n,e,t)})),s.addEventListener("compositionstart",r.onCompositionStart.bind(this)),s.addEventListener("compositionend",r.onCompositionEnd.bind(this)),e.skipValidation||(l=this.editTagToggleValidity(t)),s.originalIsValid=l,this.trigger("edit:start",{tag:t,index:a,data:o,isValid:l}),s.focus(),!d&&this.setRangeAtStartEnd(!1,s),0===i.dropdown.enabled&&!d&&this.dropdown.show(),this.state.hasFocus=!0,this}else it.warn("Cannot find element in Tag template: .",i.classNames.tagTextSelector)},editTagToggleValidity:function(t,e){var n;if(e=e||bt(t))return(n=!("__isValid"in e)||!0===e.__isValid)||this.removeTagsFromValue(t),this.update(),t.classList.toggle(this.settings.classNames.tagNotAllowed,!n),e.__isValid=n,e.__isValid;it.warn("tag has no data: ",t,e)},onEditTagDone:function(t,e){t=t||this.state.editing.scope,e=e||{};var n,i,s=this.settings,a={tag:t,index:this.getNodeIndex(t),previousData:bt(t),data:e};this.trigger("edit:beforeUpdate",a,{cloneData:!1}),this.state.editing=!1,delete e.__originalData,delete e.__originalHTML,t&&t.parentNode&&((void 0!==(i=e[s.tagTextProp])?null===(n=(i+="").trim)||void 0===n?void 0:n.call(i):s.tagTextProp in e?void 0:e.value)?(t=this.replaceTag(t,e),this.editTagToggleValidity(t,e),s.a11y.focusableTags?t.focus():"select"!=s.mode&&Tt(t)):this.removeTags(t)),this.trigger("edit:updated",a),s.dropdown.closeOnSelect&&this.dropdown.hide(),this.settings.keepInvalidTags&&this.reCheckInvalidTags()},replaceTag:function(t,e){e&&""!==e.value&&void 0!==e.value||(e=t.__tagifyTagData),e.__isValid&&1!=e.__isValid&&ut(e,this.getInvalidTagAttrs(e,e.__isValid));var n=this.createTagElem(e);return t.parentNode.replaceChild(n,t),this.updateValueByDOMTags(),n},updateValueByDOMTags:function(){var t=this;this.value.length=0;var e=this.settings.classNames,n=[e.tagNotAllowed.split(" ")[0],e.tagHide];[].forEach.call(this.getTagElms(),(function(e){zt(e.classList).some((function(t){return n.includes(t)}))||t.value.push(bt(e))})),this.update(),this.dropdown.refilter()},injectAtCaret:function(t,e){var n;if(e=e||(null===(n=this.state.selection)||void 0===n?void 0:n.range),"string"==typeof t&&(t=document.createTextNode(t)),!e&&t)return this.appendMixTags(t),this;var i=yt(t,e);return this.setRangeAtStartEnd(!1,i),this.updateValueByDOMTags(),this.update(),this},input:{set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.settings,i=n.dropdown.closeOnSelect;this.state.inputText=t,e&&(this.DOM.input.innerHTML=dt(""+t),t&&this.toggleClass(n.classNames.empty,!this.DOM.input.innerHTML)),!t&&i&&this.dropdown.hide.bind(this),this.input.autocomplete.suggest.call(this),this.input.validate.call(this)},raw:function(){return this.DOM.input.textContent},validate:function(){var t=!this.state.inputText||!0===this.validateTag({value:this.state.inputText});return this.DOM.input.classList.toggle(this.settings.classNames.inputInvalid,!t),t},normalize:function(t,e){var n=t||this.DOM.input,i=[];n.childNodes.forEach((function(t){return 3==t.nodeType&&i.push(t.nodeValue)})),i=i.join("\n");try{i=i.replace(/(?:\r\n|\r|\n)/g,this.settings.delimiters.source.charAt(0))}catch(t){}return i=i.replace(/\s/g," "),(null==e?void 0:e.trim)?this.trim(i):i},autocomplete:{suggest:function(t){if(this.settings.autoComplete.enabled){"object"!=typeof(t=t||{value:""})&&(t={value:t});var e=this.dropdown.getMappedValue(t);if("number"!=typeof e){var n=this.state.inputText.toLowerCase(),i=e.substr(0,this.state.inputText.length).toLowerCase(),s=e.substring(this.state.inputText.length);e&&this.state.inputText&&i==n?(this.DOM.input.setAttribute("data-suggest",s),this.state.inputSuggestion=t):(this.DOM.input.removeAttribute("data-suggest"),delete this.state.inputSuggestion)}}},set:function(t){var e=this.DOM.input.getAttribute("data-suggest"),n=t||(e?this.state.inputText+e:null);return!!n&&("mix"==this.settings.mode?this.replaceTextWithNode(document.createTextNode(this.state.tag.prefix+n)):(this.input.set.call(this,n),this.setRangeAtStartEnd(!1,this.DOM.input)),this.input.autocomplete.suggest.call(this),this.dropdown.hide(),!0)}}},getTagIdx:function(t){return this.value.findIndex((function(e){return e.__tagId==(t||{}).__tagId}))},getNodeIndex:function(t){var e=0;if(t)for(;t=t.previousElementSibling;)e++;return e},getTagElms:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i="."+zt(this.settings.classNames.tag.split(" ")).concat(zt(e)).join(".");return[].slice.call(this.DOM.scope.querySelectorAll(i))},getLastTag:function(){var t=this.settings.classNames,e=this.DOM.scope.querySelectorAll("".concat(t.tagSelector,":not(.").concat(t.tagHide,"):not([readonly])"));return e[e.length-1]},isTagDuplicate:function(t,e,n){var i=0,s=!0,a=!1,o=void 0;try{for(var r,l=this.value[Symbol.iterator]();!(s=(r=l.next()).done);s=!0){var d=r.value;st(this.trim(""+t),d.value,e)&&n!=d.__tagId&&i++}}catch(t){a=!0,o=t}finally{try{s||null==l.return||l.return()}finally{if(a)throw o}}return i},getTagIndexByValue:function(t){var e=this,n=[],i=this.settings.dropdown.caseSensitive;return this.getTagElms().forEach((function(s,a){s.__tagifyTagData&&st(e.trim(s.__tagifyTagData.value),t,i)&&n.push(a)})),n},getTagElmByValue:function(t){var e=this.getTagIndexByValue(t)[0];return this.getTagElms()[e]},flashTag:function(t){var e=this;t&&(t.classList.add(this.settings.classNames.tagFlash),setTimeout((function(){t.classList.remove(e.settings.classNames.tagFlash)}),100))},isTagBlacklisted:function(t){return t=this.trim(t.toLowerCase()),this.settings.blacklist.filter((function(e){return(""+e).toLowerCase()==t})).length},isTagWhitelisted:function(t){return!!this.getWhitelistItem(t)},getWhitelistItem:function(t,e,n){e=e||"value";var i,s=this.settings;return(n=n||s.whitelist).some((function(n){var a="object"==typeof n?n[e]||n.value:n;if(st(a,t,s.dropdown.caseSensitive,s.trim))return i="object"==typeof n?n:{value:n},!0})),i||"value"!=e||"value"==s.tagTextProp||(i=this.getWhitelistItem(t,s.tagTextProp,n)),i},validateTag:function(t){var e=this.settings,n="value"in t?"value":e.tagTextProp,i=this.trim(t[n]+"");return(t[n]+"").trim()?"mix"!=e.mode&&e.pattern&&Wt(e.pattern,RegExp)&&!e.pattern.test(i)?this.TEXTS.pattern:!e.duplicates&&this.isTagDuplicate(i,e.dropdown.caseSensitive,t.__tagId)?this.TEXTS.duplicate:this.isTagBlacklisted(i)||e.enforceWhitelist&&!this.isTagWhitelisted(i)?this.TEXTS.notAllowed:!e.validate||e.validate(t):this.TEXTS.empty},getInvalidTagAttrs:function(t,e){return{"aria-invalid":!0,class:"".concat(t.class||""," ").concat(this.settings.classNames.tagNotAllowed).trim(),title:e}},hasMaxTags:function(){return this.value.length>=this.settings.maxTags&&this.TEXTS.exceed},setReadonly:function(t,e){var n=this.settings;this.DOM.scope.contains(document.activeElement)&&document.activeElement.blur(),n[e||"readonly"]=t,this.DOM.scope[(t?"set":"remove")+"Attribute"](e||"readonly",!0),this.settings.userInput=!0,this.setContentEditable(!t)},setContentEditable:function(t){this.DOM.input.contentEditable=t,this.DOM.input.tabIndex=t?0:-1},setDisabled:function(t){this.setReadonly(t,"disabled")},normalizeTags:function(t){var e=this,n=this.settings,i=n.whitelist,s=n.delimiters,a=n.mode,o=n.tagTextProp,r=[],l=!!i&&Wt(i[0],Object),d=Array.isArray(t),c=d&&t[0].value,u=function(t){return(t+"").split(s).reduce((function(t,n){var i,s=e.trim(n);return s&&t.push((Ut(i={},o,s),Ut(i,"value",s),i)),t}),[])};if("number"==typeof t&&(t=t.toString()),"string"==typeof t){if(!t.trim())return[];t=u(t)}else d&&(t=t.reduce((function(t,n){if(ct(n)){var i=ut({},n);o in i||(o="value"),i[o]=e.trim(i[o]),(i[o]||0===i[o])&&t.push(i)}else if(null!=n&&""!==n&&void 0!==n){var s;(s=t).push.apply(s,zt(u(n)))}return t}),[]));return l&&!c&&(t.forEach((function(t){var n=r.map((function(t){return t.value})),i=e.dropdown.filterListItems.call(e,t[o],{exact:!0});e.settings.duplicates||(i=i.filter((function(t){return!n.includes(t.value)})));var s=i.length>1?e.getWhitelistItem(t[o],o,i):i[0];s&&Wt(s,Object)?r.push(s):"mix"!=a&&(null==t.value&&(t.value=t[o]),r.push(t))})),r.length&&(t=r)),t},parseMixTags:function(t){var e=this,n=this.settings,i=n.mixTagsInterpolator,s=n.duplicates,a=n.transformTag,o=n.enforceWhitelist,r=n.maxTags,l=n.tagTextProp,d=[];t=t.split(i[0]).map((function(t,n){var c,u,h,g=t.split(i[1]),p=g[0],f=d.length==r;try{if(p==+p)throw Error;u=JSON.parse(p)}catch(t){u=e.normalizeTags(p)[0]||{value:p}}if(a.call(e,u),f||!(g.length>1)||o&&!e.isTagWhitelisted(u.value)||!s&&e.isTagDuplicate(u.value)){if(t)return n?i[0]+t:t}else u[c=u[l]?l:"value"]=e.trim(u[c]),h=e.createTagElem(u),d.push(u),h.classList.add(e.settings.classNames.tagNoAnimation),g[0]=h.outerHTML,e.value.push(u);return g.join("")})).join(""),this.DOM.input.innerHTML=t,this.DOM.input.appendChild(document.createTextNode("")),this.DOM.input.normalize();var c=this.getTagElms();return c.forEach((function(t,e){return bt(t,d[e])})),this.update({withoutChangeEvent:!0}),St(c,this.state.hasFocus),t},replaceTextWithNode:function(t,e){if(this.state.tag||e){e=e||this.state.tag.prefix+this.state.tag.value;var n,i,s=this.state.selection||window.getSelection(),a=s.anchorNode,o=this.state.tag.delimiters?this.state.tag.delimiters.length:0;return a.splitText(s.anchorOffset-o),-1==(n=a.nodeValue.lastIndexOf(e))||(i=a.splitText(n),t&&a.parentNode.replaceChild(t,i)),!0}},prepareNewTagNode:function(t,e){e=e||{};var n=this.settings,i=[],s={},a=Object.assign({},t,{value:t.value+""});if(t=Object.assign({},a),n.transformTag.call(this,t),t.__isValid=this.hasMaxTags()||this.validateTag(t),!0!==t.__isValid){if(e.skipInvalid)return;if(ut(s,this.getInvalidTagAttrs(t,t.__isValid),{__preInvalidData:a}),t.__isValid==this.TEXTS.duplicate&&this.flashTag(this.getTagElmByValue(t.value)),!n.createInvalidTags)return void i.push(t.value)}return"readonly"in t&&(t.readonly?s["aria-readonly"]=!0:delete t.readonly),{tagElm:this.createTagElem(t,s),tagData:t,aggregatedInvalidInput:i}},postProcessNewTagNode:function(t,e){var n=this,i=this.settings,s=e.__isValid;s&&!0===s?this.value.push(e):(this.trigger("invalid",{data:e,index:this.value.length,tag:t,message:s}),i.keepInvalidTags||setTimeout((function(){return n.removeTags(t,!0)}),1e3)),this.dropdown.position()},selectTag:function(t,e){var n=this;if(!this.settings.enforceWhitelist||this.isTagWhitelisted(e.value)){this.state.actions.selectOption&&setTimeout((function(){return n.setRangeAtStartEnd(!1,n.DOM.input)}));var i=this.getLastTag();return i?this.replaceTag(i,e):this.appendTag(t),this.value[0]=e,this.update(),this.trigger("add",{tag:t,data:e}),[t]}},addEmptyTag:function(t){var e=ut({value:""},t||{}),n=this.createTagElem(e);bt(n,e),this.appendTag(n),this.editTag(n,{skipValidation:!0}),this.toggleFocusClass(!0)},addTags:function(t,e,n){var i=this,s=[],a=this.settings,o=[],r=document.createDocumentFragment(),l=[];if(!t||0==t.length)return s;switch(t=this.normalizeTags(t),a.mode){case"mix":return this.addMixTags(t);case"select":e=!1,this.removeAllTags()}return this.DOM.input.removeAttribute("style"),t.forEach((function(t){var e=i.prepareNewTagNode(t,{skipInvalid:n||a.skipInvalid});if(e){var d=e.tagElm;if(t=e.tagData,o=e.aggregatedInvalidInput,s.push(d),"select"==a.mode)return i.selectTag(d,t);r.appendChild(d),i.postProcessNewTagNode(d,t),l.push({tagElm:d,tagData:t})}})),this.appendTag(r),l.forEach((function(t){var e=t.tagElm,n=t.tagData;return i.trigger("add",{tag:e,index:i.getTagIdx(n),data:n})})),this.update(),t.length&&e&&(this.input.set.call(this,a.createInvalidTags?"":o.join(a._delimiters)),this.setRangeAtStartEnd(!1,this.DOM.input)),this.dropdown.refilter(),s},addMixTags:function(t){var e=this;if((t=this.normalizeTags(t))[0].prefix||this.state.tag)return this.prefixedTextToTag(t[0]);var n=document.createDocumentFragment();return t.forEach((function(t){var i=e.prepareNewTagNode(t);n.appendChild(i.tagElm),e.insertAfterTag(i.tagElm),e.postProcessNewTagNode(i.tagElm,i.tagData)})),this.appendMixTags(n),n.children},appendMixTags:function(t){var e=!!this.state.selection;e?this.injectAtCaret(t):(this.DOM.input.focus(),(e=this.setStateSelection()).range.setStart(this.DOM.input,e.range.endOffset),e.range.setEnd(this.DOM.input,e.range.endOffset),this.DOM.input.appendChild(t),this.updateValueByDOMTags(),this.update())},prefixedTextToTag:function(t){var e,n,i,s=this,a=this.settings,o=null===(e=this.state.tag)||void 0===e?void 0:e.delimiters;if(t.prefix=t.prefix||this.state.tag?this.state.tag.prefix:(a.pattern.source||a.pattern)[0],i=this.prepareNewTagNode(t),n=i.tagElm,this.replaceTextWithNode(n)||this.DOM.input.appendChild(n),setTimeout((function(){return n.classList.add(s.settings.classNames.tagNoAnimation)}),300),this.update(),!o){var r=this.insertAfterTag(n)||n;setTimeout(Tt,0,r)}return this.state.tag=null,this.postProcessNewTagNode(n,i.tagData),n},appendTag:function(t){var e=this.DOM,n=e.input;e.scope.insertBefore(t,n)},createTagElem:function(t,e){t.__tagId=ft();var n,i=ut({},t,Kt({value:dt(t.value+"")},e));return function(t){for(var e,n=document.createNodeIterator(t,NodeFilter.SHOW_TEXT,null,!1);e=n.nextNode();)e.textContent.trim()||e.parentNode.removeChild(e)}(n=this.parseTemplate("tag",[i,this])),bt(n,t),n},reCheckInvalidTags:function(){var t=this,e=this.settings;this.getTagElms(e.classNames.tagNotAllowed).forEach((function(n,i){var s=bt(n),a=t.hasMaxTags(),o=t.validateTag(s),r=!0===o&&!a;if("select"==e.mode&&t.toggleScopeValidation(o),r)return s=s.__preInvalidData?s.__preInvalidData:{value:s.value},t.replaceTag(n,s);n.title=a||o}))},removeTags:function(t,e,n){var i,s=this,a=this.settings;if(t=t&&Wt(t,HTMLElement)?[t]:Wt(t,Array)?t:t?[t]:[this.getLastTag()].filter((function(t){return t})),i=t.reduce((function(t,e){e&&"string"==typeof e&&(e=s.getTagElmByValue(e));var n=bt(e);return e&&n&&!n.readonly&&t.push({node:e,idx:s.getTagIdx(n),data:bt(e,{__removed:!0})}),t}),[]),n="number"==typeof n?n:this.CSSVars.tagHideTransition,"select"==a.mode&&(n=0,this.input.set.call(this)),1==i.length&&"select"!=a.mode&&i[0].node.classList.contains(a.classNames.tagNotAllowed)&&(e=!0),i.length)return a.hooks.beforeRemoveTag(i,{tagify:this}).then((function(){var t=function(t){t.node.parentNode&&(t.node.parentNode.removeChild(t.node),e?a.keepInvalidTags&&this.trigger("remove",{tag:t.node,index:t.idx}):(this.trigger("remove",{tag:t.node,index:t.idx,data:t.data}),this.dropdown.refilter(),this.dropdown.position(),this.DOM.input.normalize(),a.keepInvalidTags&&this.reCheckInvalidTags()))};n&&n>10&&1==i.length?function(e){e.node.style.width=parseFloat(window.getComputedStyle(e.node).width)+"px",document.body.clientTop,e.node.classList.add(a.classNames.tagHide),setTimeout(t.bind(this),n,e)}.call(s,i[0]):i.forEach(t.bind(s)),e||(s.removeTagsFromValue(i.map((function(t){return t.node}))),s.update(),"select"==a.mode&&a.userInput&&s.setContentEditable(!0))})).catch((function(t){}))},removeTagsFromDOM:function(){this.getTagElms().forEach((function(t){return t.remove()}))},removeTagsFromValue:function(t){var e=this;(t=Array.isArray(t)?t:[t]).forEach((function(t){var n=bt(t),i=e.getTagIdx(n);i>-1&&e.value.splice(i,1)}))},removeAllTags:function(t){var e=this;t=t||{},this.value=[],"mix"==this.settings.mode?this.DOM.input.innerHTML="":this.removeTagsFromDOM(),this.dropdown.refilter(),this.dropdown.position(),this.state.dropdown.visible&&setTimeout((function(){e.DOM.input.focus()})),"select"==this.settings.mode&&(this.input.set.call(this),this.settings.userInput&&this.setContentEditable(!0)),this.update(t)},postUpdate:function(){this.state.blockChangeEvent=!1;var t,e,n=this.settings,i=n.classNames,s="mix"==n.mode?n.mixMode.integrated?this.DOM.input.textContent:this.DOM.originalInput.value.trim():this.value.length+this.input.raw.call(this).length;this.toggleClass(i.hasMaxTags,this.value.length>=n.maxTags),this.toggleClass(i.hasNoTags,!this.value.length),this.toggleClass(i.empty,!s),"select"==n.mode&&this.toggleScopeValidation(null===(e=this.value)||void 0===e||null===(t=e[0])||void 0===t?void 0:t.__isValid)},setOriginalInputValue:function(t){var e=this.DOM.originalInput;this.settings.mixMode.integrated||(e.value=t,e.tagifyValue=e.value,this.setPersistedData(t,"value"))},update:function(t){clearTimeout(this.debouncedUpdateTimeout),this.debouncedUpdateTimeout=setTimeout(function(){var e=this.getInputValue();this.setOriginalInputValue(e),this.settings.onChangeAfterBlur&&(t||{}).withoutChangeEvent||this.state.blockChangeEvent||this.triggerChangeEvent(),this.postUpdate()}.bind(this),100),this.events.bindOriginaInputListener.call(this,100)},getInputValue:function(){var t=this.getCleanValue();return"mix"==this.settings.mode?this.getMixedTagsAsString(t):t.length?this.settings.originalInputValueFormat?this.settings.originalInputValueFormat(t):JSON.stringify(t):""},getCleanValue:function(t){return at(t||this.value,this.dataProps)},getMixedTagsAsString:function(){var t="",e=this,n=this.settings,i=n.originalInputValueFormat||JSON.stringify,s=n.mixTagsInterpolator;return function n(a){a.childNodes.forEach((function(a){if(1==a.nodeType){var o=bt(a);if("BR"==a.tagName&&(t+="\r\n"),o&&mt.call(e,a)){if(o.__removed)return;t+=s[0]+i(ot(o,e.dataProps))+s[1]}else a.getAttribute("style")||["B","I","U"].includes(a.tagName)?t+=a.textContent:"DIV"!=a.tagName&&"P"!=a.tagName||(t+="\r\n",n(a))}else t+=a.textContent}))}(this.DOM.input),t}},Xt.prototype.removeTag=Xt.prototype.removeTags;class Yt{#K;#z;#X;#J;#Q;#G;#Y;#Z;#tt;#et;#nt;#it;#st;#at;#ot;#rt=null;constructor(t,e,n,i,s,a,o,r,l,d,c,u){this.#K=t,this.#et=e,this.#z=n,this.#X=i,this.#J=s,this.#Q=a,this.#st=o,this.#at=u,this.#ot=this.#at.innerHTML,this.#tt=r,this.#G=l,this.#Y=d,this.#Z=c,this.#it=!1,this.#nt=!1,this.#z.addEventListener("input",(t=>{this.filterItemsSearch(t)})),this.#tt.addEventListener("click",(()=>{this.setFiltered(!1)})),this.#G.addEventListener("click",(()=>{this.toggleVisibility()})),"radio-field-input"===this.#X&&this.#Q.forEach((t=>{t.addEventListener("change",(()=>{this.scrollListToTop()}))}))}isEngaged(){return this.#it}isFiltered(){return this.#nt}setFiltered(t){this.#nt!==t&&(this.#nt=t,t?(this.#tt.style.removeProperty("display"),this.#at.style.removeProperty("display")):(this.#z.value="",this.#tt.style.display="none",this.#at.style.display="none",this.#st.style.display="none",this.#lt()))}toggleVisibility(){this.isEngaged()?(this.#it=!1,this.#K.classList.remove("engaged"),this.setFiltered(!1),this.#G.setAttribute("aria-expanded","false"),this.#Y.style.removeProperty("display"),this.#Z.style.display="none"):(this.#it=!0,this.#K.classList.add("engaged"),this.#G.setAttribute("aria-expanded","true"),this.#Y.style.display="none",this.#Z.style.removeProperty("display"))}#dt(t){this.#K.ownerDocument.defaultView.clearTimeout(this.#rt),this.#rt=this.#K.ownerDocument.defaultView.setTimeout((()=>{this.#at.textContent="",this.#K.ownerDocument.defaultView.requestAnimationFrame((()=>{this.#at.textContent=t}))}),500)}#ct(t){const e=$(this.#ot,t);this.#dt(e)}filterItemsSearch(t){const e=t.target.value.toLowerCase();this.setFiltered(!!e);let n=0,i=!1;this.#Q.forEach((t=>{t.textContent.toLowerCase().includes(e)?(n+=1,i=!0,Zt(t)):function(t){t.style.display="none"}(t)})),this.#ct(n.toString()),""!==e&&!1===i?this.#st.style.removeProperty("display"):(""===e||i)&&(this.#st.style.display="none")}#lt(){this.#Q.forEach((t=>Zt(t)))}scrollListToTop(){this.#et.scrollTo({top:0,behavior:"smooth"})}}function Zt(t){t.style.removeProperty("display")}class te{#q=new Map;init(t){if(void 0===t)throw new TypeError("During init of an InputHasOptionFilter an undefined element was passed to the factory.");if(this.#q.has(t.id))throw new Error(`A InputHasOptionFilter with id '${t.id}' has already been initialized.`);const e=t,n=e.querySelector(".c-input--has-option-filter__field"),i=e.querySelector(".c-input--has-option-filter__search-input input"),s=e.getAttribute("data-il-ui-component"),a=e.querySelector(".c-field--has-option-filter__list"),o=a.querySelectorAll(".c-field--has-option-filter__item"),r=e.querySelector(".message-no-match"),l=e.querySelector('.c-input--has-option-filter__synopsis [role="status"]'),d=e.querySelector(".c-input--has-option-filter__clear-search"),c=e.querySelector(".c-input--has-option-filter__visibility-toggle"),u=c.querySelector(".text-expand"),h=c.querySelector(".text-collapse"),g=new Yt(t,n,i,s,a,o,r,d,c,u,h,l);return this.#q.set(t.id,g),g}get(t){return this.#q.has(t)?this.#q.get(t):null}}var ee;e.UI=e.UI||{},e.UI.Input=e.UI.Input||{},(ee=e.UI.Input).textarea=new o,ee.mustacheVariables={init:(t,e)=>function(t,e){e.querySelectorAll(".c-input--has-mustache-variables__definitions > li > a").forEach((e=>{const n=function(t){const e=t.textContent.match(/^\s*\{\{([^}]+)\}\}\s*$/);return e?e[1].trim():null}(e);e.addEventListener("click",(()=>{t.insertCharactersAroundSelection(`{{${n}}}`,"")}))}))}(t,e)},ee.markdown=new w,ee.optionFilter=new te,ee.treeSelect=new Y(new Z(t),e.UI.menu.drilldown,{txt:t=>e.Language.txt(t)},n),ee.tagInput=ee.tag||{},ee.tagInput.init=(t,e,n,i,s)=>Gt(Xt,t,e,n,i,s)}($,il,document); + */var et="&#8203;";function nt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function it(t){return function(t){if(Array.isArray(t))return nt(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return nt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?nt(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var st={isEnabled:function(){var t;return null===(t=window.TAGIFY_DEBUG)||void 0===t||t},log:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i;this.isEnabled()&&(i=console).log.apply(i,["[Tagify]:"].concat(it(e)))},warn:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i;this.isEnabled()&&(i=console).warn.apply(i,["[Tagify]:"].concat(it(e)))}},at=function(t,e,n,i){return t=""+t,e=""+e,i&&(t=t.trim(),e=e.trim()),n?t==e:t.toLowerCase()==e.toLowerCase()},ot=function(t,e){return t&&Array.isArray(t)&&t.map((function(t){return rt(t,e)}))};function rt(t,e){var n,i={};for(n in t)e.indexOf(n)<0&&(i[n]=t[n]);return i}function lt(t){return(new DOMParser).parseFromString(t.trim(),"text/html").body.firstElementChild}function dt(t,e){for(e=e||"previous";t=t[e+"Sibling"];)if(3==t.nodeType)return t}function ct(t){return"string"==typeof t?t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/`|'/g,"&#039;"):t}function ut(t){var e=Object.prototype.toString.call(t).split(" ")[1].slice(0,-1);return t===Object(t)&&"Array"!=e&&"Function"!=e&&"RegExp"!=e&&"HTMLUnknownElement"!=e}function ht(t,e,n){var i,s;function a(t,e){for(var n in e)if(e.hasOwnProperty(n)){if(ut(e[n])){ut(t[n])?a(t[n],e[n]):t[n]=Object.assign({},e[n]);continue}if(Array.isArray(e[n])){t[n]=Object.assign([],e[n]);continue}t[n]=e[n]}}return i=t,(null!=(s=Object)&&"undefined"!=typeof Symbol&&s[Symbol.hasInstance]?s[Symbol.hasInstance](i):i instanceof s)||(t={}),a(t,e),n&&a(t,n),t}function gt(){var t=[],e={},n=!0,i=!1,s=void 0;try{for(var a,o=arguments[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var r=a.value,l=!0,d=!1,c=void 0;try{for(var u,h=r[Symbol.iterator]();!(l=(u=h.next()).done);l=!0){var g=u.value;ut(g)?e[g.value]||(t.push(g),e[g.value]=1):t.includes(g)||t.push(g)}}catch(t){d=!0,c=t}finally{try{l||null==h.return||h.return()}finally{if(d)throw c}}}}catch(t){i=!0,s=t}finally{try{n||null==o.return||o.return()}finally{if(i)throw s}}return t}function pt(t){return String.prototype.normalize?"string"==typeof t?t.normalize("NFD").replace(/[\u0300-\u036f]/g,""):void 0:t}var ft=function(){return/(?=.*chrome)(?=.*android)/i.test(navigator.userAgent)};function mt(){return([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(t){return(t^crypto.getRandomValues(new Uint8Array(1))[0]&15>>t/4).toString(16)}))}function vt(t){var e;return yt.call(this,t)&&(null==t||null===(e=t.classList)||void 0===e?void 0:e.contains(this.settings.classNames.tag))}function wt(t){return yt.call(this,t)&&(null==t?void 0:t.closest(this.settings.classNames.tagSelector))}function yt(t){var e;return(null==t||null===(e=t.closest)||void 0===e?void 0:e.call(t,this.settings.classNames.namespaceSelector))===this.DOM.scope}function bt(t,e){var n=window.getSelection();return e=e||n.getRangeAt(0),"string"==typeof t&&(t=document.createTextNode(t)),e&&(e.deleteContents(),e.insertNode(t)),t}function Tt(t,e,n){return t?(e&&(t.__tagifyTagData=n?e:ht({},t.__tagifyTagData||{},e)),t.__tagifyTagData):(st.warn("tag element doesn't exist",{tagElm:t,data:e}),e)}function St(t){if(t&&t.parentNode){var e=t,n=window.getSelection(),i=n.getRangeAt(0);n.rangeCount&&(i.setStartAfter(e),i.collapse(!0),n.removeAllRanges(),n.addRange(i))}}function xt(t,e){t.forEach((function(t){if(Tt(t.previousSibling)||!t.previousSibling){var n=document.createTextNode("​");t.before(n),e&&St(n)}}))}var Et={delimiters:",",pattern:null,tagTextProp:"value",maxTags:1/0,callbacks:{},addTagOnBlur:!0,addTagOn:["blur","tab","enter"],onChangeAfterBlur:!0,duplicates:!1,whitelist:[],blacklist:[],enforceWhitelist:!1,userInput:!0,focusable:!0,keepInvalidTags:!1,createInvalidTags:!0,mixTagsAllowedAfter:/,|\.|\:|\s/,mixTagsInterpolator:["[[","]]"],backspace:!0,skipInvalid:!1,pasteAsTags:!0,editTags:{clicks:2,keepInvalid:!0},transformTag:function(){},trim:!0,a11y:{focusableTags:!1},mixMode:{insertAfterTag:" "},autoComplete:{enabled:!0,rightKey:!1,tabKey:!1},classNames:{namespace:"tagify",mixMode:"tagify--mix",selectMode:"tagify--select",input:"tagify__input",focus:"tagify--focus",tagNoAnimation:"tagify--noAnim",tagInvalid:"tagify--invalid",tagNotAllowed:"tagify--notAllowed",scopeLoading:"tagify--loading",hasMaxTags:"tagify--hasMaxTags",hasNoTags:"tagify--noTags",empty:"tagify--empty",inputInvalid:"tagify__input--invalid",dropdown:"tagify__dropdown",dropdownWrapper:"tagify__dropdown__wrapper",dropdownHeader:"tagify__dropdown__header",dropdownFooter:"tagify__dropdown__footer",dropdownItem:"tagify__dropdown__item",dropdownItemActive:"tagify__dropdown__item--active",dropdownItemHidden:"tagify__dropdown__item--hidden",dropdownItemSelected:"tagify__dropdown__item--selected",dropdownInital:"tagify__dropdown--initial",tag:"tagify__tag",tagText:"tagify__tag-text",tagX:"tagify__tag__removeBtn",tagLoading:"tagify__tag--loading",tagEditing:"tagify__tag--editable",tagFlash:"tagify__tag--flash",tagHide:"tagify__tag--hide"},dropdown:{classname:"",enabled:2,maxItems:10,searchKeys:["value","searchBy"],fuzzySearch:!0,caseSensitive:!1,accentedSearch:!0,includeSelectedTags:!1,escapeHTML:!0,highlightFirst:!0,closeOnSelect:!0,clearOnSelect:!0,position:"all",appendTarget:null},hooks:{beforeRemoveTag:function(){return Promise.resolve()},beforePaste:function(){return Promise.resolve()},suggestionClick:function(){return Promise.resolve()},beforeKeyDown:function(){return Promise.resolve()}}};function Ot(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Dt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},i=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(n).filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable})))),i.forEach((function(e){Ot(t,e,n[e])}))}return t}function Ct(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n.push.apply(n,i)}return n}(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})),t}function It(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function At(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Mt(){for(var t in this.dropdown={},this._dropdown)this.dropdown[t]="function"==typeof this._dropdown[t]?this._dropdown[t].bind(this):this._dropdown[t];this.dropdown.refs(),this.DOM.dropdown.__tagify=this}var Nt,_t,Lt=(Nt=function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},i=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(n).filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable})))),i.forEach((function(e){At(t,e,n[e])}))}return t}({},{events:{binding:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],e=this.dropdown.events.callbacks,n=this.listeners.dropdown=this.listeners.dropdown||{position:this.dropdown.position.bind(this,null),onKeyDown:e.onKeyDown.bind(this),onMouseOver:e.onMouseOver.bind(this),onMouseLeave:e.onMouseLeave.bind(this),onClick:e.onClick.bind(this),onScroll:e.onScroll.bind(this)},i=t?"addEventListener":"removeEventListener";"manual"!=this.settings.dropdown.position&&(document[i]("scroll",n.position,!0),window[i]("resize",n.position),window[i]("keydown",n.onKeyDown)),this.DOM.dropdown[i]("mouseover",n.onMouseOver),this.DOM.dropdown[i]("mouseleave",n.onMouseLeave),this.DOM.dropdown[i]("mousedown",n.onClick),this.DOM.dropdown.content[i]("scroll",n.onScroll)},callbacks:{onKeyDown:function(t){var e=this;if(this.state.hasFocus&&!this.state.composing){var n=this.settings,i=n.dropdown.includeSelectedTags,s=this.DOM.dropdown.querySelector(n.classNames.dropdownItemActiveSelector),a=this.dropdown.getSuggestionDataByNode(s),o="mix"==n.mode,r="select"==n.mode;n.hooks.beforeKeyDown(t,{tagify:this}).then((function(l){switch(t.key){case"ArrowDown":case"ArrowUp":case"Down":case"Up":t.preventDefault();var d=e.dropdown.getAllSuggestionsRefs(),c="ArrowUp"==t.key||"Up"==t.key;s&&(s=e.dropdown.getNextOrPrevOption(s,!c)),s&&s.matches(n.classNames.dropdownItemSelector)||(s=d[c?d.length-1:0]),e.dropdown.highlightOption(s,!0);break;case"PageUp":case"PageDown":var u;t.preventDefault();var h=e.dropdown.getAllSuggestionsRefs(),g=Math.floor(e.DOM.dropdown.content.clientHeight/(null===(u=h[0])||void 0===u?void 0:u.offsetHeight))||1,p="PageUp"===t.key;if(s){var f=h.indexOf(s),m=p?Math.max(0,f-g):Math.min(h.length-1,f+g);s=h[m]}else s=h[0];e.dropdown.highlightOption(s,!0);break;case"Home":case"End":t.preventDefault();var v=e.dropdown.getAllSuggestionsRefs();s=v["Home"===t.key?0:v.length-1],e.dropdown.highlightOption(s,!0);break;case"Escape":case"Esc":e.dropdown.hide();break;case"ArrowRight":if(e.state.actions.ArrowLeft||n.autoComplete.rightKey)return;case"Tab":var w=!n.autoComplete.rightKey||!n.autoComplete.tabKey;if(!o&&!r&&s&&w&&!e.state.editing&&a){t.preventDefault();var y=e.dropdown.getMappedValue(a);return e.state.autoCompleteData=a,e.input.autocomplete.set.call(e,y),!1}return!0;case"Enter":t.preventDefault(),e.state.actions.selectOption=!0,setTimeout((function(){return e.state.actions.selectOption=!1}),100),n.hooks.suggestionClick(t,{tagify:e,tagData:a,suggestionElm:s}).then((function(){if(s){var n=i?s:e.dropdown.getNextOrPrevOption(s,!c);e.dropdown.selectOption(s,t,(function(){if(n){var t=n.getAttribute("value");n=e.dropdown.getSuggestionNodeByValue(t),e.dropdown.highlightOption(n)}}))}else e.dropdown.hide(),o||e.addTags(e.state.inputText.trim(),!0)})).catch((function(t){return st.warn(t)}));break;case"Backspace":if(o||e.state.editing.scope)return;var b=e.input.raw.call(e);""!=b&&8203!=b.charCodeAt(0)||(!0===n.backspace?e.removeTags():"edit"==n.backspace&&setTimeout(e.editTag.bind(e),0))}}))}},onMouseOver:function(t){var e=t.target.closest(this.settings.classNames.dropdownItemSelector);this.dropdown.highlightOption(e)},onMouseLeave:function(t){this.dropdown.highlightOption()},onClick:function(t){var e=this;if(0==t.button&&t.target!=this.DOM.dropdown&&t.target!=this.DOM.dropdown.content){var n=t.target.closest(this.settings.classNames.dropdownItemSelector),i=this.dropdown.getSuggestionDataByNode(n);this.state.actions.selectOption=!0,setTimeout((function(){return e.state.actions.selectOption=!1}),100),this.settings.hooks.suggestionClick(t,{tagify:this,tagData:i,suggestionElm:n}).then((function(){n?e.dropdown.selectOption(n,t):e.dropdown.hide()})).catch((function(t){return st.warn(t)}))}},onScroll:function(t){var e=t.target,n=e.scrollTop/(e.scrollHeight-e.parentNode.clientHeight)*100;this.trigger("dropdown:scroll",{percentage:Math.round(n)})}}},refilter:function(t){t=t||this.state.dropdown.query||"",this.suggestedListItems=this.dropdown.filterListItems(t),this.dropdown.fill(),this.suggestedListItems.length||this.dropdown.hide(),this.trigger("dropdown:updated",this.DOM.dropdown)},getSuggestionDataByNode:function(t){for(var e,n=t&&t.getAttribute("value"),i=this.suggestedListItems.length;i--;){if(ut(e=this.suggestedListItems[i])&&e.value==n)return e;if(e==n)return{value:e}}},getSuggestionNodeByValue:function(t){return this.dropdown.getAllSuggestionsRefs().find((function(e){return e.getAttribute("value")===t}))},getNextOrPrevOption:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.dropdown.getAllSuggestionsRefs(),i=n.findIndex((function(e){return e===t}));return e?n[i+1]:n[i-1]},highlightOption:function(t,e){var n,i=this.settings.classNames.dropdownItemActive;if(this.state.ddItemElm&&(this.state.ddItemElm.classList.remove(i),this.state.ddItemElm.removeAttribute("aria-selected")),!t)return this.state.ddItemData=null,this.state.ddItemElm=null,void this.input.autocomplete.suggest.call(this);n=this.dropdown.getSuggestionDataByNode(t),this.state.ddItemData=n,this.state.ddItemElm=t,t.classList.add(i),t.setAttribute("aria-selected",!0),e&&(t.parentNode.scrollTop=t.clientHeight+t.offsetTop-t.parentNode.clientHeight),this.settings.autoComplete&&(this.input.autocomplete.suggest.call(this,n),this.dropdown.position())},selectOption:function(t,e,n){var i=this,s=this.settings,a=s.dropdown.includeSelectedTags,o=s.dropdown,r=o.clearOnSelect,l=o.closeOnSelect;if(!t)return this.addTags(this.state.inputText,!0),void(l&&this.dropdown.hide());e=e||{};var d=t.getAttribute("value"),c="noMatch"==d,u="mix"==s.mode,h=this.suggestedListItems.find((function(t){var e;return(null!==(e=t.value)&&void 0!==e?e:t)==d}));if(this.trigger("dropdown:select",{data:h,elm:t,event:e}),h||c){if(this.state.editing){var g=this.normalizeTags([h])[0];h=s.transformTag.call(this,g)||g,this.onEditTagDone(null,ht({__isValid:!0},h))}else this[u?"addMixTags":"addTags"]([h||this.input.raw.call(this)],r);(u||this.DOM.input.parentNode)&&(setTimeout((function(){i.DOM.input.focus(),i.toggleFocusClass(!0)})),l&&setTimeout(this.dropdown.hide.bind(this)),a?n&&n():(t.addEventListener("transitionend",(function(){i.dropdown.fillHeaderFooter(),setTimeout((function(){t.remove(),i.dropdown.refilter(),n&&n()}),100)}),{once:!0}),t.classList.add(this.settings.classNames.dropdownItemHidden)))}else l&&setTimeout(this.dropdown.hide.bind(this))},selectAll:function(t){this.suggestedListItems.length=0,this.dropdown.hide(),this.dropdown.filterListItems("");var e=this.dropdown.filterListItems("");return t||(e=this.state.dropdown.suggestions),this.addTags(e,!0),this},filterListItems:function(t,e){var n,i,s,a,o,r,l=function(){var t,l,d=void 0,c=void 0;t=p[y],i=(null!=(l=Object)&&"undefined"!=typeof Symbol&&l[Symbol.hasInstance]?l[Symbol.hasInstance](t):t instanceof l)?p[y]:{value:p[y]};var f,m=Object.keys(i).some((function(t){return w.includes(t)}))?w:["value"];u.fuzzySearch&&!e.exact?(a=m.reduce((function(t,e){return t+" "+(i[e]||"")}),"").toLowerCase().trim(),u.accentedSearch&&(a=pt(a),r=pt(r)),d=0==a.indexOf(r),c=a===r,f=a,s=r.toLowerCase().split(" ").every((function(t){return f.includes(t.toLowerCase())}))):(d=!0,s=m.some((function(t){var n=""+(i[t]||"");return u.accentedSearch&&(n=pt(n),r=pt(r)),u.caseSensitive||(n=n.toLowerCase()),c=n===r,e.exact?n===r:0==n.indexOf(r)}))),o=!u.includeSelectedTags&&n.isTagDuplicate(ut(i)?i.value:i),s&&!o&&(c&&d?g.push(i):"startsWith"==u.sortby&&d?h.unshift(i):h.push(i))},d=this,c=this.settings,u=c.dropdown,h=(e=e||{},[]),g=[],p=c.whitelist,f=u.maxItems>=0?u.maxItems:1/0,m=u.includeSelectedTags,v="function"==typeof u.sortby,w=u.searchKeys,y=0;if(!(t="select"==c.mode&&this.value.length&&this.value[0][c.tagTextProp]==t?"":t)||!w.length){h=m?p:p.filter((function(t){return!d.isTagDuplicate(ut(t)?t.value:t)}));var b=v?u.sortby(h,r):h.slice(0,f);return this.state.dropdown.suggestions=b,b}for(r=u.caseSensitive?""+t:(""+t).toLowerCase();y<p.length;y++)n=this,l();return this.state.dropdown.suggestions=g.concat(h),b=v?u.sortby(g.concat(h),r):g.concat(h).slice(0,f),this.state.dropdown.suggestions=b,b},getMappedValue:function(t){var e=this.settings.dropdown.mapValueTo;return e?"function"==typeof e?e(t):t[e]||t.value:t.value},createListHTML:function(t){var e=this;return ht([],t).map((function(t,n){"string"!=typeof t&&"number"!=typeof t||(t={value:t});var i=e.dropdown.getMappedValue(t);return i="string"==typeof i&&e.settings.dropdown.escapeHTML?ct(i):i,e.settings.templates.dropdownItem.apply(e,[Ct(Dt({},t),{mappedValue:i}),e])})).join("")}}),_t=null!=(_t={refs:function(){this.DOM.dropdown=this.parseTemplate("dropdown",[this.settings]),this.DOM.dropdown.content=this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-wrapper']")},getHeaderRef:function(){return this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-header']")},getFooterRef:function(){return this.DOM.dropdown.querySelector("[data-selector='tagify-suggestions-footer']")},getAllSuggestionsRefs:function(){return function(t){return function(t){if(Array.isArray(t))return It(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return It(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?It(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(this.DOM.dropdown.content.querySelectorAll(this.settings.classNames.dropdownItemSelector))},show:function(t){var e,n,i,s=this,a=this.settings,o="mix"==a.mode&&!a.enforceWhitelist,r=!a.whitelist||!a.whitelist.length,l="manual"==a.dropdown.position;if(t=void 0===t?this.state.inputText:t,!(r&&!o&&!a.templates.dropdownItemNoMatch||!1===a.dropdown.enabled||this.state.isLoading||this.settings.readonly)){if(clearTimeout(this.dropdownHide__bindEventsTimeout),this.suggestedListItems=this.dropdown.filterListItems(t),t&&!this.suggestedListItems.length&&(this.trigger("dropdown:noMatch",t),a.templates.dropdownItemNoMatch&&(i=a.templates.dropdownItemNoMatch.call(this,{value:t}))),!i){if(this.suggestedListItems.length)t&&o&&!this.state.editing.scope&&!at(this.suggestedListItems[0].value,t)&&this.suggestedListItems.unshift({value:t});else{if(!t||!o||this.state.editing.scope)return this.input.autocomplete.suggest.call(this),void this.dropdown.hide();this.suggestedListItems=[{value:t}]}n=""+(ut(e=this.suggestedListItems[0])?e.value:e),a.autoComplete&&n&&0==n.indexOf(t)&&this.input.autocomplete.suggest.call(this,e)}this.dropdown.fill(i),a.dropdown.highlightFirst&&this.dropdown.highlightOption(this.DOM.dropdown.content.querySelector(a.classNames.dropdownItemSelector)),this.state.dropdown.visible||setTimeout(this.dropdown.events.binding.bind(this)),this.state.dropdown.visible=t||!0,this.state.dropdown.query=t,this.setStateSelection(),l||setTimeout((function(){s.dropdown.position(),s.dropdown.render()})),setTimeout((function(){s.trigger("dropdown:show",s.DOM.dropdown)}))}},hide:function(t){var e=this,n=this.DOM,i=n.scope,s=n.dropdown,a="manual"==this.settings.dropdown.position&&!t;if(s&&document.body.contains(s)&&!a)return window.removeEventListener("resize",this.dropdown.position),this.dropdown.events.binding.call(this,!1),i.setAttribute("aria-expanded",!1),s.parentNode.removeChild(s),setTimeout((function(){e.state.dropdown.visible=!1}),100),this.state.dropdown.query=this.state.ddItemData=this.state.ddItemElm=this.state.selection=null,this.state.tag&&this.state.tag.value.length&&(this.state.flaggedTags[this.state.tag.baseOffset]=this.state.tag),this.trigger("dropdown:hide",s),this},toggle:function(t){this.dropdown[this.state.dropdown.visible&&!t?"hide":"show"]()},getAppendTarget:function(){var t=this.settings.dropdown;return"function"==typeof t.appendTarget?t.appendTarget():t.appendTarget},render:function(){var t,e,n=this,i=((e=this.DOM.dropdown.cloneNode(!0)).style.cssText="position:fixed; top:-9999px; opacity:0",document.body.appendChild(e),t=e.clientHeight,e.parentNode.removeChild(e),t),s=this.settings,a=this.dropdown.getAppendTarget();return!1===s.dropdown.enabled||(this.DOM.scope.setAttribute("aria-expanded",!0),document.body.contains(this.DOM.dropdown)||(this.DOM.dropdown.classList.add(s.classNames.dropdownInital),this.dropdown.position(i),a.appendChild(this.DOM.dropdown),setTimeout((function(){return n.DOM.dropdown.classList.remove(s.classNames.dropdownInital)})))),this},fill:function(t){t="string"==typeof t?t:this.dropdown.createListHTML(t||this.suggestedListItems);var e,n=this.settings.templates.dropdownContent.call(this,t);this.DOM.dropdown.content.innerHTML=(e=n)?e.replace(/\>[\r\n ]+\</g,"><").split(/>\s+</).join("><").trim():""},fillHeaderFooter:function(){var t=this.dropdown.filterListItems(this.state.dropdown.query),e=this.parseTemplate("dropdownHeader",[t]),n=this.parseTemplate("dropdownFooter",[t]),i=this.dropdown.getHeaderRef(),s=this.dropdown.getFooterRef();e&&(null==i||i.parentNode.replaceChild(e,i)),n&&(null==s||s.parentNode.replaceChild(n,s))},position:function(t){var e=this.settings.dropdown,n=this.dropdown.getAppendTarget();if("manual"!=e.position&&n){var i,s,a,o,r,l,d,c,u,h,g=this.DOM.dropdown,p=e.RTL,f=n===document.body,m=n===this.DOM.scope,v=f?window.pageYOffset:n.scrollTop,w=document.fullscreenElement||document.webkitFullscreenElement||document.documentElement,y=w.clientHeight,b=Math.max(w.clientWidth||0,window.innerWidth||0),T=b>480?e.position:"all",S=this.DOM["input"==T?"input":"scope"];if(t=t||g.clientHeight,this.state.dropdown.visible){if("text"==T?(a=(i=function(){var t=document.getSelection();if(t.rangeCount){var e,n,i=t.getRangeAt(0),s=i.startContainer,a=i.startOffset;if(a>0)return(n=document.createRange()).setStart(s,a-1),n.setEnd(s,a),{left:(e=n.getBoundingClientRect()).right,top:e.top,bottom:e.bottom};if(s.getBoundingClientRect)return s.getBoundingClientRect()}return{left:-9999,top:-9999}}()).bottom,s=i.top,o=i.left,r="auto"):(l=function(t){var e=0,n=0;for(t=t.parentNode;t&&t!=w;)e+=t.offsetTop||0,n+=t.offsetLeft||0,t=t.parentNode;return{top:e,left:n}}(n),i=S.getBoundingClientRect(),s=m?-1:i.top-l.top,a=(m?i.height:i.bottom-l.top)-1,o=m?-1:i.left-l.left,r=i.width+"px"),!f){var x=function(){for(var t=0,n=e.appendTarget.parentNode;n;)t+=n.scrollTop||0,n=n.parentNode;return t}();s+=x,a+=x}var E;s=Math.floor(s),a=Math.ceil(a),c=b-o<120,u=((d=null!==(E=e.placeAbove)&&void 0!==E?E:y-i.bottom<t)?s:a)+v,h=o+(p&&i.width||0)+window.pageXOffset,h="text"==T&&c?"right: 0;":"left: ".concat(h,"px;"),g.style.cssText="".concat(h," top: ").concat(u,"px; min-width: ").concat(r,"; max-width: ").concat(r),g.setAttribute("placement",d?"top":"bottom"),g.setAttribute("position",T)}}}})?_t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(Nt,Object.getOwnPropertyDescriptors(_t)):function(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n.push.apply(n,i)}return n}(Object(_t)).forEach((function(t){Object.defineProperty(Nt,t,Object.getOwnPropertyDescriptor(_t,t))})),Nt),kt="@yaireo/tagify/",Pt={empty:"empty",exceed:"number of tags exceeded",pattern:"pattern mismatch",duplicate:"already exists",notAllowed:"not allowed"},Bt={wrapper:function(t,e){return'<tags class="'.concat(e.classNames.namespace," ").concat(e.mode?"".concat(e.classNames[e.mode+"Mode"]):""," ").concat(t.className,'"\n ').concat(e.readonly?"readonly":"","\n ").concat(e.disabled?"disabled":"","\n ").concat(e.required?"required":"","\n ").concat("select"===e.mode?"spellcheck='false'":"",'\n tabIndex="-1">\n ').concat(this.settings.templates.input.call(this),"\n ").concat(et,"\n </tags>")},input:function(){var t=this.settings,e=t.placeholder||et;return"<span ".concat(!t.readonly&&t.userInput?"contenteditable":"",' tabIndex="0" data-placeholder="').concat(e,'" aria-placeholder="').concat(t.placeholder||"",'"\n class="').concat(t.classNames.input,'"\n role="textbox"\n autocapitalize="false"\n autocorrect="off"\n aria-autocomplete="both"\n aria-multiline="').concat("mix"==t.mode,'"></span>')},tag:function(t,e){var n=e.settings;return'<tag title="'.concat(t.title||t.value,"\"\n contenteditable='false'\n tabIndex=\"").concat(n.a11y.focusableTags?0:-1,'"\n class="').concat(n.classNames.tag," ").concat(t.class||"",'"\n ').concat(this.getAttributes(t),">\n <x title='' tabIndex=\"").concat(n.a11y.focusableTags?0:-1,'" class="').concat(n.classNames.tagX,"\" role='button' aria-label='remove tag'></x>\n <div>\n <span ").concat("select"===n.mode&&n.userInput?"contenteditable='true'":"",' autocapitalize="false" autocorrect="off" spellcheck=\'false\' class="').concat(n.classNames.tagText,'">').concat(t[n.tagTextProp]||t.value,"</span>\n </div>\n </tag>")},dropdown:function(t){var e=t.dropdown,n="manual"==e.position;return'<div class="'.concat(n?"":t.classNames.dropdown," ").concat(e.classname,'" role="listbox" aria-labelledby="dropdown" dir="').concat(e.RTL?"rtl":"","\">\n <div data-selector='tagify-suggestions-wrapper' class=\"").concat(t.classNames.dropdownWrapper,'"></div>\n </div>')},dropdownContent:function(t){var e=this.settings.templates,n=this.state.dropdown.suggestions;return"\n ".concat(e.dropdownHeader.call(this,n),"\n ").concat(t,"\n ").concat(e.dropdownFooter.call(this,n),"\n ")},dropdownItem:function(t){return"<div ".concat(this.getAttributes(t),"\n class='").concat(this.settings.classNames.dropdownItem," ").concat(this.isTagDuplicate(t.value)?this.settings.classNames.dropdownItemSelected:""," ").concat(t.class||"",'\'\n tabindex="0"\n role="option">').concat(t.mappedValue||t.value,"</div>")},dropdownHeader:function(t){return"<header data-selector='tagify-suggestions-header' class=\"".concat(this.settings.classNames.dropdownHeader,'"></header>')},dropdownFooter:function(t){var e=t.length-this.settings.dropdown.maxItems;return e>0?"<footer data-selector='tagify-suggestions-footer' class=\"".concat(this.settings.classNames.dropdownFooter,'">\n ').concat(e," more items. Refine your search.\n </footer>"):""},dropdownItemNoMatch:null};function jt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function Vt(t,e){return null!=e&&"undefined"!=typeof Symbol&&e[Symbol.hasInstance]?!!e[Symbol.hasInstance](t):t instanceof e}function Ft(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function Ht(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function qt(t,e){return null!=e&&"undefined"!=typeof Symbol&&e[Symbol.hasInstance]?!!e[Symbol.hasInstance](t):t instanceof e}function Rt(t){return function(t){if(Array.isArray(t))return Ft(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Ft(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ft(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var $t={customBinding:function(){var t=this;this.customEventsList.forEach((function(e){t.on(e,t.settings.callbacks[e])}))},binding:function(){var t,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],n=this.settings,i=this.events.callbacks,s=e?"addEventListener":"removeEventListener";if(!this.state.mainEvents||!e){for(var a in this.state.mainEvents=e,e&&!this.listeners.main&&(this.events.bindGlobal.call(this),this.settings.isJQueryPlugin&&jQuery(this.DOM.originalInput).on("tagify.removeAllTags",this.removeAllTags.bind(this))),t=this.listeners.main=this.listeners.main||{keydown:["input",i.onKeydown.bind(this)],click:["scope",i.onClickScope.bind(this)],dblclick:"select"!=n.mode&&["scope",i.onDoubleClickScope.bind(this)],paste:["input",i.onPaste.bind(this)],drop:["input",i.onDrop.bind(this)],compositionstart:["input",i.onCompositionStart.bind(this)],compositionend:["input",i.onCompositionEnd.bind(this)]})t[a]&&this.DOM[t[a][0]][s](a,t[a][1]);var o=this.listeners.main.inputMutationObserver||new MutationObserver(i.onInputDOMChange.bind(this));o.disconnect(),"mix"==n.mode&&o.observe(this.DOM.input,{childList:!0}),this.events.bindOriginaInputListener.call(this)}},bindOriginaInputListener:function(t){var e=(t||0)+500;this.listeners.main&&(clearInterval(this.listeners.main.originalInputValueObserverInterval),this.listeners.main.originalInputValueObserverInterval=setInterval(this.events.callbacks.observeOriginalInputValue.bind(this),e))},bindGlobal:function(t){var e,n=this.events.callbacks,i=t?"removeEventListener":"addEventListener";if(this.listeners&&(t||!this.listeners.global)){this.listeners.global=this.listeners.global||[{type:this.isIE?"keydown":"input",target:this.DOM.input,cb:n[this.isIE?"onInputIE":"onInput"].bind(this)},{type:"keydown",target:window,cb:n.onWindowKeyDown.bind(this)},{type:"focusin",target:this.DOM.scope,cb:n.onFocusBlur.bind(this)},{type:"focusout",target:this.DOM.scope,cb:n.onFocusBlur.bind(this)},{type:"click",target:document,cb:n.onClickAnywhere.bind(this),useCapture:!0}];var s=!0,a=!1,o=void 0;try{for(var r,l=this.listeners.global[Symbol.iterator]();!(s=(r=l.next()).done);s=!0)(e=r.value).target[i](e.type,e.cb,!!e.useCapture)}catch(t){a=!0,o=t}finally{try{s||null==l.return||l.return()}finally{if(a)throw o}}}},unbindGlobal:function(){this.events.bindGlobal.call(this,!0)},callbacks:{onFocusBlur:function(t){var e,n,i=this.settings,s=wt.call(this,t.relatedTarget),a=vt.call(this,t.relatedTarget),o=t.target.classList.contains(i.classNames.tagX),r="focusin"==t.type,l="focusout"==t.type;o&&"mix"!=i.mode&&this.DOM.input.focus(),s&&r&&!a&&!o&&this.toggleFocusClass(this.state.hasFocus=+new Date);var d=t.target?this.trim(this.DOM.input.textContent):"",c=null===(n=this.value)||void 0===n||null===(e=n[0])||void 0===e?void 0:e[i.tagTextProp],u=i.dropdown.enabled>=0,h={relatedTarget:t.relatedTarget},g=this.state.actions.selectOption&&(u||!i.dropdown.closeOnSelect),p=this.state.actions.addNew&&u;if(l){if(t.relatedTarget===this.DOM.scope)return this.dropdown.hide(),void this.DOM.input.focus();this.postUpdate(),i.onChangeAfterBlur&&this.triggerChangeEvent()}if(!(g||p||o))if(this.state.hasFocus=!(!r&&!s)&&+new Date,this.toggleFocusClass(this.state.hasFocus),"mix"!=i.mode){if(r){if(!i.focusable)return;var f=0===i.dropdown.enabled&&!this.state.dropdown.visible,m=!a||"select"===i.mode,v=this.DOM.scope.querySelector(this.settings.classNames.tagTextSelector);return this.trigger("focus",h),void(f&&m&&(this.dropdown.show(this.value.length?"":void 0),this.setRangeAtStartEnd(!1,v)))}if(l){if(this.trigger("blur",h),this.loading(!1),"select"==i.mode){if(this.value.length){var w=this.getTagElms()[0];d=this.trim(w.textContent)}c===d&&(d="")}d&&!this.state.actions.selectOption&&i.addTagOnBlur&&i.addTagOn.includes("blur")&&this.addTags(d,!0)}s||(this.DOM.input.removeAttribute("style"),this.dropdown.hide())}else r?this.trigger("focus",h):l&&(this.trigger("blur",h),this.loading(!1),this.dropdown.hide(),this.state.dropdown.visible=void 0,this.setStateSelection())},onCompositionStart:function(t){this.state.composing=!0},onCompositionEnd:function(t){this.state.composing=!1},onWindowKeyDown:function(t){var e,n=this.settings,i=document.activeElement,s=wt.call(this,i)&&this.DOM.scope.contains(i),a=i===this.DOM.input,o=s&&i.hasAttribute("readonly"),r=this.DOM.scope.querySelector(this.settings.classNames.tagTextSelector),l=this.state.dropdown.visible;if(("Tab"===t.key&&l||this.state.hasFocus||s&&!o)&&!a){e=i.nextElementSibling;var d=t.target.classList.contains(n.classNames.tagX);switch(t.key){case"Backspace":n.readonly||this.state.editing||(this.removeTags(i),(e||this.DOM.input).focus());break;case"Enter":if(d)return void this.removeTags(t.target.parentNode);n.a11y.focusableTags&&vt.call(this,i)&&setTimeout(this.editTag.bind(this),0,i);break;case"ArrowDown":this.state.dropdown.visible||"mix"==n.mode||this.dropdown.show();break;case"Tab":null==r||r.focus()}}},onKeydown:function(t){var e=this,n=this.settings;if(!this.state.composing&&n.userInput){"select"==n.mode&&n.enforceWhitelist&&this.value.length&&"Tab"!=t.key&&t.preventDefault();var i=this.trim(t.target.textContent);this.trigger("keydown",{event:t}),n.hooks.beforeKeyDown(t,{tagify:this}).then((function(s){if("mix"==n.mode){switch(t.key){case"Left":case"ArrowLeft":e.state.actions.ArrowLeft=!0;break;case"Delete":case"Backspace":if(e.state.editing)return;var a=document.getSelection(),o="Delete"==t.key&&a.anchorOffset==(a.anchorNode.length||0),r=a.anchorNode.previousSibling,l=1==a.anchorNode.nodeType||!a.anchorOffset&&r&&1==r.nodeType&&a.anchorNode.previousSibling;!function(t){var e=document.createElement("div");t.replace(/\&#?[0-9a-z]+;/gi,(function(t){return e.innerHTML=t,e.innerText}))}(e.DOM.input.innerHTML);var d,c,u,h=e.getTagElms(),g=1===a.anchorNode.length&&a.anchorNode.nodeValue==String.fromCharCode(8203);if("edit"==n.backspace&&l)return d=1==a.anchorNode.nodeType?null:a.anchorNode.previousElementSibling,setTimeout(e.editTag.bind(e),0,d),void t.preventDefault();if(ft()&&qt(l,Element))return u=dt(l),l.hasAttribute("readonly")||l.remove(),e.DOM.input.focus(),void setTimeout((function(){St(u),e.DOM.input.click()}));if("BR"==a.anchorNode.nodeName)return;if((o||l)&&1==a.anchorNode.nodeType?c=0==a.anchorOffset?o?h[0]:null:h[Math.min(h.length,a.anchorOffset)-1]:o?c=a.anchorNode.nextElementSibling:qt(l,Element)&&(c=l),3==a.anchorNode.nodeType&&!a.anchorNode.nodeValue&&a.anchorNode.previousElementSibling&&t.preventDefault(),(l||o)&&!n.backspace)return void t.preventDefault();if("Range"!=a.type&&!a.anchorOffset&&a.anchorNode==e.DOM.input&&"Delete"!=t.key)return void t.preventDefault();if("Range"!=a.type&&c&&c.hasAttribute("readonly"))return void St(dt(c));"Delete"==t.key&&g&&Tt(a.anchorNode.nextSibling)&&e.removeTags(a.anchorNode.nextSibling)}return!0}var p="manual"==n.dropdown.position;switch(t.key){case"Backspace":"select"==n.mode&&n.enforceWhitelist&&e.value.length?e.removeTags():e.state.dropdown.visible&&"manual"!=n.dropdown.position||""!=t.target.textContent&&8203!=i.charCodeAt(0)||(!0===n.backspace?e.removeTags():"edit"==n.backspace&&setTimeout(e.editTag.bind(e),0));break;case"Esc":case"Escape":if(e.state.dropdown.visible)return;t.target.blur();break;case"Down":case"ArrowDown":e.state.dropdown.visible||e.dropdown.show();break;case"ArrowRight":var f=e.state.inputSuggestion||e.state.ddItemData;if(f&&n.autoComplete.rightKey)return void e.addTags([f],!0);break;case"Tab":return!0;case"Enter":if(e.state.dropdown.visible&&!p)return;t.preventDefault();var m=e.state.autoCompleteData||i;setTimeout((function(){e.state.dropdown.visible&&!p||e.state.actions.selectOption||!n.addTagOn.includes(t.key.toLowerCase())||(e.addTags([m],!0),e.state.autoCompleteData=null)}))}})).catch((function(t){return t}))}},onInput:function(t){this.postUpdate();var e=this.settings;if("mix"==e.mode)return this.events.callbacks.onMixTagsInput.call(this,t);var n=this.input.normalize.call(this,void 0,{trim:!1}),i=n.length>=e.dropdown.enabled,s={value:n,inputElm:this.DOM.input},a=this.validateTag({value:n});"select"==e.mode&&this.toggleScopeValidation(a),s.isValid=a,this.state.inputText!=n&&(this.input.set.call(this,n,!1),-1!=n.search(e.delimiters)?this.addTags(n)&&this.input.set.call(this):e.dropdown.enabled>=0&&this.dropdown[i?"show":"hide"](n),this.trigger("input",s))},onMixTagsInput:function(t){var e,n,i,s,a,o,r,l,d=this,c=this.settings,u=this.value.length,h=this.getTagElms(),g=document.createDocumentFragment(),p=window.getSelection().getRangeAt(0),f=[].map.call(h,(function(t){return Tt(t).value}));if("deleteContentBackward"==t.inputType&&ft()&&this.events.callbacks.onKeydown.call(this,{target:t.target,key:"Backspace"}),xt(this.getTagElms()),this.value.slice().forEach((function(t){t.readonly&&!f.includes(t.value)&&g.appendChild(d.createTagElem(t))})),g.childNodes.length&&(p.insertNode(g),this.setRangeAtStartEnd(!1,g.lastChild)),h.length!=u)return this.value=[].map.call(this.getTagElms(),(function(t){return Tt(t)})),void this.update({withoutChangeEvent:!0});if(this.hasMaxTags())return!0;if(window.getSelection&&(o=window.getSelection()).rangeCount>0&&3==o.anchorNode.nodeType){if((p=o.getRangeAt(0).cloneRange()).collapse(!0),p.setStart(o.focusNode,0),i=(e=p.toString().slice(0,p.endOffset)).split(c.pattern).length-1,(n=e.match(c.pattern))&&(s=e.slice(e.lastIndexOf(n[n.length-1]))),s){if(this.state.actions.ArrowLeft=!1,this.state.tag={prefix:s.match(c.pattern)[0],value:s.replace(c.pattern,"")},this.state.tag.baseOffset=o.baseOffset-this.state.tag.value.length,l=this.state.tag.value.match(c.delimiters))return this.state.tag.value=this.state.tag.value.replace(c.delimiters,""),this.state.tag.delimiters=l[0],this.addTags(this.state.tag.value,c.dropdown.clearOnSelect),void this.dropdown.hide();a=this.state.tag.value.length>=c.dropdown.enabled;try{r=(r=this.state.flaggedTags[this.state.tag.baseOffset]).prefix==this.state.tag.prefix&&r.value[0]==this.state.tag.value[0],this.state.flaggedTags[this.state.tag.baseOffset]&&!this.state.tag.value&&delete this.state.flaggedTags[this.state.tag.baseOffset]}catch(t){}(r||i<this.state.mixMode.matchedPatternCount)&&(a=!1)}else this.state.flaggedTags={};this.state.mixMode.matchedPatternCount=i}setTimeout((function(){d.update({withoutChangeEvent:!0}),d.trigger("input",ht({},d.state.tag,{textContent:d.DOM.input.textContent})),d.state.tag&&d.dropdown[a?"show":"hide"](d.state.tag.value)}),10)},onInputIE:function(t){var e=this;setTimeout((function(){e.events.callbacks.onInput.call(e,t)}))},observeOriginalInputValue:function(){this.DOM.originalInput.parentNode||this.destroy(),this.DOM.originalInput.value!=this.DOM.originalInput.tagifyValue&&this.loadOriginalValues()},onClickAnywhere:function(t){if(t.target!=this.DOM.scope&&!this.DOM.scope.contains(t.target)){this.toggleFocusClass(!1),this.state.hasFocus=!1;var e=t.target.closest(this.settings.classNames.dropdownSelector);(null==e?void 0:e.__tagify)!=this&&this.dropdown.hide()}},onClickScope:function(t){var e=this.settings,n=t.target.closest("."+e.classNames.tag),i=t.target===this.DOM.scope,s=+new Date-this.state.hasFocus;if(i&&"select"!=e.mode)this.DOM.input.focus();else{if(!t.target.classList.contains(e.classNames.tagX))return n&&!this.state.editing?(this.trigger("click",{tag:n,index:this.getNodeIndex(n),data:Tt(n),event:t}),void(1!==e.editTags&&1!==e.editTags.clicks&&"select"!=e.mode||this.events.callbacks.onDoubleClickScope.call(this,t))):void(t.target==this.DOM.input&&("mix"==e.mode&&this.fixFirefoxLastTagNoCaret(),s>500||!e.focusable)?this.state.dropdown.visible?this.dropdown.hide():0===e.dropdown.enabled&&"mix"!=e.mode&&this.dropdown.show(this.value.length?"":void 0):"select"!=e.mode||0!==e.dropdown.enabled||this.state.dropdown.visible||(this.events.callbacks.onDoubleClickScope.call(this,function(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);n.push.apply(n,i)}return n}(Object(e)).forEach((function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))})),t}(function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},i=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(n).filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable})))),i.forEach((function(e){Ht(t,e,n[e])}))}return t}({},t),{target:this.getTagElms()[0]})),!e.userInput&&this.dropdown.show()));this.removeTags(t.target.parentNode)}},onPaste:function(t){var e=this;t.preventDefault();var n,i,s,a=this.settings;if(!a.userInput)return!1;a.readonly||(i=t.clipboardData||window.clipboardData,s=i.getData("Text"),a.hooks.beforePaste(t,{tagify:this,pastedText:s,clipboardData:i}).then((function(a){void 0===a&&(a=s),a&&(e.injectAtCaret(a,window.getSelection().getRangeAt(0)),"mix"==e.settings.mode?e.events.callbacks.onMixTagsInput.call(e,t):e.settings.pasteAsTags?n=e.addTags(e.state.inputText+a,!0):(e.state.inputText=a,e.dropdown.show(a))),e.trigger("paste",{event:t,pastedText:s,clipboardData:i,tagsElems:n})})).catch((function(t){return t})))},onDrop:function(t){t.preventDefault()},onEditTagInput:function(t,e){var n,i=t.closest("."+this.settings.classNames.tag),s=this.getNodeIndex(i),a=Tt(i),o=this.input.normalize.call(this,t),r=(Ht(n={},this.settings.tagTextProp,o),Ht(n,"__tagId",a.__tagId),n),l=this.validateTag(r);this.editTagChangeDetected(ht(a,r))||!0!==t.originalIsValid||(l=!0),i.classList.toggle(this.settings.classNames.tagInvalid,!0!==l),a.__isValid=l,i.title=!0===l?a.title||a.value:l,o.length>=this.settings.dropdown.enabled&&(this.state.editing&&(this.state.editing.value=o),this.dropdown.show(o)),this.trigger("edit:input",{tag:i,index:s,data:ht({},this.value[s],{newValue:o}),event:e})},onEditTagPaste:function(t,e){var n=(e.clipboardData||window.clipboardData).getData("Text");e.preventDefault();var i=bt(n);this.setRangeAtStartEnd(!1,i)},onEditTagClick:function(t,e){this.events.callbacks.onClickScope.call(this,e)},onEditTagFocus:function(t){this.state.editing={scope:t,input:t.querySelector("[contenteditable]")}},onEditTagBlur:function(t,e){var n=vt.call(this,e.relatedTarget);if("select"==this.settings.mode&&n&&e.relatedTarget.contains(e.target))this.dropdown.hide();else if(this.state.editing&&(this.state.hasFocus||this.toggleFocusClass(),this.DOM.scope.contains(document.activeElement)||this.trigger("blur",{}),this.DOM.scope.contains(t))){var i,s,a,o=this.settings,r=t.closest("."+o.classNames.tag),l=Tt(r),d=this.input.normalize.call(this,t),c=(Ht(i={},o.tagTextProp,d),Ht(i,"__tagId",l.__tagId),i),u=l.__originalData,h=this.editTagChangeDetected(ht(l,c)),g=this.validateTag(c);if(d)if(h){var p;if(s=this.hasMaxTags(),a=ht({},u,(Ht(p={},o.tagTextProp,this.trim(d)),Ht(p,"__isValid",g),p)),o.transformTag.call(this,a,u),!0!==(g=(!s||!0===u.__isValid)&&this.validateTag(a))){if(this.trigger("invalid",{data:a,tag:r,message:g}),o.editTags.keepInvalid)return;o.keepInvalidTags?a.__isValid=g:a=u}else o.keepInvalidTags&&(delete a.title,delete a["aria-invalid"],delete a.class);this.onEditTagDone(r,a)}else this.onEditTagDone(r,u);else this.onEditTagDone(r)}},onEditTagkeydown:function(t,e){if(!this.state.composing)switch(this.trigger("edit:keydown",{event:t}),t.key){case"Esc":case"Escape":this.state.editing=!1,e.__tagifyTagData.__originalData.value?e.parentNode.replaceChild(e.__tagifyTagData.__originalHTML,e):e.remove();break;case"Enter":case"Tab":t.preventDefault(),setTimeout((function(){return t.target.blur()}),0)}},onDoubleClickScope:function(t){var e=t.target.closest("."+this.settings.classNames.tag);if(e){var n,i,s=Tt(e),a=this.settings;!1!==(null==s?void 0:s.editable)&&(n=e.classList.contains(this.settings.classNames.tagEditing),i=e.hasAttribute("readonly"),a.readonly||n||i||!this.settings.editTags||!a.userInput||(this.events.callbacks.onEditTagFocus.call(this,e),this.editTag(e)),this.toggleFocusClass(!0),"select"!=a.mode&&this.trigger("dblclick",{tag:e,index:this.getNodeIndex(e),data:Tt(e)}))}},onInputDOMChange:function(t){var e=this;t.forEach((function(t){t.addedNodes.forEach((function(t){if("<div><br></div>"==t.outerHTML)t.replaceWith(document.createElement("br"));else if(1==t.nodeType&&t.querySelector(e.settings.classNames.tagSelector)){var n,i=document.createTextNode("");3==t.childNodes[0].nodeType&&"BR"!=t.previousSibling.nodeName&&(i=document.createTextNode("\n")),(n=t).replaceWith.apply(n,Rt([i].concat(Rt(Rt(t.childNodes).slice(0,-1))))),St(i)}else if(vt.call(e,t)){var s;if(3!=(null===(s=t.previousSibling)||void 0===s?void 0:s.nodeType)||t.previousSibling.textContent||t.previousSibling.remove(),t.previousSibling&&"BR"==t.previousSibling.nodeName){t.previousSibling.replaceWith("\n​");for(var a=t.nextSibling,o="";a;)o+=a.textContent,a=a.nextSibling;o.trim()&&St(t.previousSibling)}else t.previousSibling&&!Tt(t.previousSibling)||t.before("​")}})),t.removedNodes.forEach((function(t){t&&"BR"==t.nodeName&&vt.call(e,n)&&(e.removeTags(n),e.fixFirefoxLastTagNoCaret())}))}));var n=this.DOM.input.lastChild;n&&""==n.nodeValue&&n.remove(),n&&"BR"==n.nodeName||this.DOM.input.appendChild(document.createElement("br"))}}};function Ut(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function Wt(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function zt(t,e){return null!=e&&"undefined"!=typeof Symbol&&e[Symbol.hasInstance]?!!e[Symbol.hasInstance](t):t instanceof e}function Kt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},i=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(n).filter((function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable})))),i.forEach((function(e){Wt(t,e,n[e])}))}return t}function Xt(t){return function(t){if(Array.isArray(t))return Ut(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Ut(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ut(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Jt(t,e){if(!t){st.warn("input element not found",t);var n=new Proxy(this,{get:function(){return function(){return n}}});return n}if(t.__tagify)return st.warn("input element is already Tagified - Same instance is returned.",t),t.__tagify;var i;ht(this,function(t){var e=document.createTextNode(""),n={};function i(t,n,i){i&&n.split(/\s+/g).forEach((function(n){return e[t+"EventListener"].call(e,n,i)}))}return{removeAllCustomListeners:function(){Object.entries(n).forEach((function(t){var e=function(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var i,s,a=[],o=!0,r=!1;try{for(n=n.call(t);!(o=(i=n.next()).done)&&(a.push(i.value),!e||a.length!==e);o=!0);}catch(t){r=!0,s=t}finally{try{o||null==n.return||n.return()}finally{if(r)throw s}}return a}}(t,e)||function(t,e){if(t){if("string"==typeof t)return jt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?jt(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(t,2),n=e[0];e[1].forEach((function(t){return i("remove",n,t)}))})),n={}},off:function(t,e){return t&&(e?i("remove",t,e):t.split(/\s+/g).forEach((function(t){var e;null===(e=n[t])||void 0===e||e.forEach((function(e){return i("remove",t,e)})),delete n[t]}))),this},on:function(t,e){return e&&"function"==typeof e&&(t.split(/\s+/g).forEach((function(t){Array.isArray(n[t])?n[t].push(e):n[t]=[e]})),i("add",t,e)),this},trigger:function(n,i,s){var a;if(s=s||{cloneData:!0},n)if(t.settings.isJQueryPlugin)"remove"==n&&(n="removeTag"),jQuery(t.DOM.originalInput).triggerHandler(n,[i]);else{try{var o="object"==typeof i?i:{value:i};if((o=s.cloneData?ht({},o):o).tagify=this,i.event&&(o.event=this.cloneEvent(i.event)),Vt(i,Object))for(var r in i)Vt(i[r],HTMLElement)&&(o[r]=i[r]);a=new CustomEvent(n,{detail:o})}catch(t){st.warn(t)}e.dispatchEvent(a)}}}}(this)),this.isFirefox=/firefox|fxios/i.test(navigator.userAgent)&&!/seamonkey/i.test(navigator.userAgent),this.isIE=window.document.documentMode,e=e||{},this.getPersistedData=(i=e.id,function(t){var e;if(i){var n,s="/"+t;if(1===(null===(e=localStorage)||void 0===e?void 0:e.getItem(kt+i+"/v")))try{n=JSON.parse(localStorage[kt+i+s])}catch(t){}return n}}),this.setPersistedData=function(t){var e;return t?(null===(e=localStorage)||void 0===e||e.setItem(kt+t+"/v",1),function(e,n){var i,s="/"+n,a=JSON.stringify(e);e&&n&&(null===(i=localStorage)||void 0===i||i.setItem(kt+t+s,a),dispatchEvent(new Event("storage")))}):function(){}}(e.id),this.clearPersistedData=function(t){return function(e){var n=kt+"/"+t+"/";if(e)localStorage.removeItem(n+e);else for(var i in localStorage)i.includes(n)&&localStorage.removeItem(i)}}(e.id),this.applySettings(t,e),this.state={inputText:"",editing:!1,composing:!1,actions:{},mixMode:{},dropdown:{},flaggedTags:{}},this.value=[],this.listeners={},this.DOM={},this.build(t),Mt.call(this),this.getCSSVars(),this.loadOriginalValues(),this.events.customBinding.call(this),this.events.binding.call(this),t.autofocus&&this.DOM.input.focus(),t.__tagify=this}let Qt,Gt;function Yt(t,e,n,i,s,a){const o=new t(e,function(t,e){return{id:t,whitelist:e.options,enforceWhitelist:!e.userInput,duplicates:e.allowDuplicates,maxTags:e.maxItems,delimiters:null,originalInputValueFormat:t=>t.map((t=>t.value)),dropdown:{enabled:e.dropdownSuggestionsStartAfter,maxItems:e.dropdownMaxItems,closeOnSelect:e.dropdownCloseOnSelect,highlightFirst:e.highlight},transformTag(t){t.display||(t.display=t.value,t.value=encodeURIComponent(t.value)),t.display=t.display.replace(/</g,"&lt;").replace(/>/g,"&gt;")},templates:{wrapper(t,e){return`<div class="${e.classNames.namespace} ${e.mode?`${e.classNames[`${e.mode}Mode`]}`:""} ${t.className}"\n ${e.readonly?"readonly":""}\n ${e.disabled?"disabled":""}\n ${e.required?"required":""}\n ${"select"===e.mode?"spellcheck='false'":""}\n tabIndex="-1">\n ${this.settings.templates.input.call(this)}\n ​\n </div>`},tag:t=>`<div contenteditable='false'\n spellcheck="false" class='tagify__tag'\n value="${t.value}"\n tabindex="0">\n <span title='remove tag' class='tagify__tag__removeBtn'></span>\n <div>\n <span class='tagify__tag-text'>${t.display}</span>\n </div>\n </div>`,dropdownItem:t=>`<div class='tagify__dropdown__item' tagifySuggestionIdx="${t.tagifySuggestionIdx}" value="${t.value}">\n <span>${t.display}</span>\n </div>`}}}(e.id,n));o.addTags(i),void 0!==s&&o.on("input",(t=>{!function(t,e,n,i,s,a){Qt instanceof AbortController&&Qt.abort(),Qt=new AbortController,t.whitelist=null,void 0!==Gt&&(t.DOM.scope.ownerDocument.defaultView.clearTimeout(Gt),Gt=void 0),s.detail.value.length<e||(Gt=t.DOM.scope.ownerDocument.defaultView.setTimeout((()=>{const e=s.detail.value;n.writeParameter(i,e),t.loading(!0),fetch(n.getUrl().toString(),{signal:Qt.signal}).then((t=>t.json())).catch((()=>{})).then((n=>{t.whitelist=n,t.loading(!1).dropdown.show(e)}))}),a))}(o,n.suggestionStarts,s,a,t,n.autocompleteTriggerTimeout)}))}Jt.prototype={_dropdown:Lt,placeCaretAfterNode:St,getSetTagData:Tt,helpers:{sameStr:at,removeCollectionProp:ot,omit:rt,isObject:ut,parseHTML:lt,escapeHTML:ct,extend:ht,concatWithoutDups:gt,getUID:mt,isNodeTag:vt},customEventsList:["change","add","remove","invalid","input","paste","click","keydown","focus","blur","edit:input","edit:beforeUpdate","edit:updated","edit:start","edit:keydown","dropdown:show","dropdown:hide","dropdown:select","dropdown:updated","dropdown:noMatch","dropdown:scroll"],dataProps:["__isValid","__removed","__originalData","__originalHTML","__tagId"],trim:function(t){return this.settings.trim&&t&&"string"==typeof t?t.trim():t},parseHTML:lt,templates:Bt,parseTemplate:function(t,e){return lt((t=this.settings.templates[t]||t).apply(this,e))},set whitelist(t){var e=t&&Array.isArray(t);this.settings.whitelist=e?t:[],this.setPersistedData(e?t:[],"whitelist")},get whitelist(){return this.settings.whitelist},set userInput(t){this.settings.userInput=!!t,this.setContentEditable(!!t)},get userInput(){return this.settings.userInput},generateClassSelectors:function(t){var e=function(e){var n=e;Object.defineProperty(t,n+"Selector",{get:function(){return"."+this[n].split(" ")[0]}})};for(var n in t)e(n)},applySettings:function(t,e){var n,i;Et.templates=this.templates;var s=ht({},Et,"mix"==e.mode?{dropdown:{position:"text"}}:{}),a=this.settings=ht({},s,e);if(a.disabled=t.hasAttribute("disabled"),a.readonly=a.readonly||t.hasAttribute("readonly"),a.placeholder=ct(t.getAttribute("placeholder")||a.placeholder||""),a.required=t.hasAttribute("required"),this.generateClassSelectors(a.classNames),this.isIE&&(a.autoComplete=!1),["whitelist","blacklist"].forEach((function(e){var n=t.getAttribute("data-"+e);n&&zt(n=n.split(a.delimiters),Array)&&(a[e]=n)})),"autoComplete"in e&&!ut(e.autoComplete)&&(a.autoComplete=Et.autoComplete,a.autoComplete.enabled=e.autoComplete),"mix"==a.mode&&(a.pattern=a.pattern||/@/,a.autoComplete.rightKey=!0,a.delimiters=e.delimiters||null,a.tagTextProp&&!a.dropdown.searchKeys.includes(a.tagTextProp)&&a.dropdown.searchKeys.push(a.tagTextProp)),t.pattern)try{a.pattern=new RegExp(t.pattern)}catch(t){}if(a.delimiters){a._delimiters=a.delimiters;try{a.delimiters=new RegExp(this.settings.delimiters,"g")}catch(t){}}a.disabled&&(a.userInput=!1),this.TEXTS=Kt({},Pt,a.texts||{}),"select"==a.mode&&(a.dropdown.includeSelectedTags=!0),("select"!=a.mode||(null===(n=e.dropdown)||void 0===n?void 0:n.enabled))&&a.userInput||(a.dropdown.enabled=0),a.dropdown.appendTarget=(null===(i=e.dropdown)||void 0===i?void 0:i.appendTarget)||document.body,void 0===a.dropdown.includeSelectedTags&&(a.dropdown.includeSelectedTags=a.duplicates);var o=this.getPersistedData("whitelist");Array.isArray(o)&&(this.whitelist=Array.isArray(a.whitelist)?gt(a.whitelist,o):o)},getAttributes:function(t){var e,n=this.getCustomAttributes(t),i="";for(e in n)i+=" "+e+(void 0!==t[e]?'="'.concat(n[e],'"'):"");return i},getCustomAttributes:function(t){if(!ut(t))return"";var e,n={};for(e in t)"__"!=e.slice(0,2)&&"class"!=e&&t.hasOwnProperty(e)&&void 0!==t[e]&&(n[e]=ct(t[e]));return n},setStateSelection:function(){var t=window.getSelection(),e={anchorOffset:t.anchorOffset,anchorNode:t.anchorNode,range:t.getRangeAt&&t.rangeCount&&t.getRangeAt(0)};return this.state.selection=e,e},getCSSVars:function(){var t,e,n=getComputedStyle(this.DOM.scope,null);this.CSSVars={tagHideTransition:(t=function(t){if(!t)return{};var e=(t=t.trim().split(" ")[0]).split(/\d+/g).filter((function(t){return t})).pop().trim();return{value:+t.split(e).filter((function(t){return t}))[0].trim(),unit:e}}(("tag-hide-transition",n.getPropertyValue("--tag-hide-transition"))),e=t.value,"s"==t.unit?1e3*e:e)}},build:function(t){var e=this.DOM,n=t.closest("label");this.settings.mixMode.integrated?(e.originalInput=null,e.scope=t,e.input=t):(e.originalInput=t,e.originalInput_tabIndex=t.tabIndex,e.scope=this.parseTemplate("wrapper",[t,this.settings]),e.input=e.scope.querySelector(this.settings.classNames.inputSelector),t.parentNode.insertBefore(e.scope,t),t.tabIndex=-1),n&&n.setAttribute("for","")},destroy:function(){var t;this.events.unbindGlobal.call(this),null===(t=this.DOM.scope.parentNode)||void 0===t||t.removeChild(this.DOM.scope),this.DOM.originalInput.tabIndex=this.DOM.originalInput_tabIndex,delete this.DOM.originalInput.__tagify,this.dropdown.hide(!0),this.removeAllCustomListeners(),clearTimeout(this.dropdownHide__bindEventsTimeout),clearInterval(this.listeners.main.originalInputValueObserverInterval)},loadOriginalValues:function(t){var e,n=this.settings;if(this.state.blockChangeEvent=!0,void 0===t){var i=this.getPersistedData("value");t=i&&!this.DOM.originalInput.value?i:n.mixMode.integrated?this.DOM.input.textContent:this.DOM.originalInput.value}if(this.removeAllTags(),t)if("mix"==n.mode)this.parseMixTags(t),(e=this.DOM.input.lastChild)&&"BR"==e.tagName||this.DOM.input.insertAdjacentHTML("beforeend","<br>");else{try{zt(JSON.parse(t),Array)&&(t=JSON.parse(t))}catch(t){}this.addTags(t,!0).forEach((function(t){return t&&t.classList.add(n.classNames.tagNoAnimation)}))}else this.postUpdate();this.state.lastOriginalValueReported=n.mixMode.integrated?"":this.DOM.originalInput.value},cloneEvent:function(t){var e={};for(var n in t)"path"!=n&&(e[n]=t[n]);return e},loading:function(t){return this.state.isLoading=t,this.DOM.scope.classList[t?"add":"remove"](this.settings.classNames.scopeLoading),this},tagLoading:function(t,e){return t&&t.classList[e?"add":"remove"](this.settings.classNames.tagLoading),this},toggleClass:function(t,e){"string"==typeof t&&this.DOM.scope.classList.toggle(t,e)},toggleScopeValidation:function(t){var e=!0===t||void 0===t;!this.settings.required&&t&&t===this.TEXTS.empty&&(e=!0),this.toggleClass(this.settings.classNames.tagInvalid,!e),this.DOM.scope.title=e?"":t},toggleFocusClass:function(t){this.toggleClass(this.settings.classNames.focus,!!t)},setPlaceholder:function(t){var e=this;["data","aria"].forEach((function(n){return e.DOM.input.setAttribute("".concat(n,"-placeholder"),t)}))},triggerChangeEvent:function(){if(!this.settings.mixMode.integrated){var t=this.DOM.originalInput,e=this.state.lastOriginalValueReported!==t.value,n=new CustomEvent("change",{bubbles:!0});e&&(this.state.lastOriginalValueReported=t.value,n.simulated=!0,t._valueTracker&&t._valueTracker.setValue(Math.random()),t.dispatchEvent(n),this.trigger("change",this.state.lastOriginalValueReported),t.value=this.state.lastOriginalValueReported)}},events:$t,fixFirefoxLastTagNoCaret:function(){},setRangeAtStartEnd:function(t,e){if(e){t="number"==typeof t?t:!!t,e=e.lastChild||e;var n=document.getSelection();if(zt(n.focusNode,Element)&&!this.DOM.input.contains(n.focusNode))return!0;try{n.rangeCount>=1&&["Start","End"].forEach((function(i){return n.getRangeAt(0)["set"+i](e,t||e.length)}))}catch(t){console.warn(t)}}},insertAfterTag:function(t,e){if(e=e||this.settings.mixMode.insertAfterTag,t&&t.parentNode&&e)return e="string"==typeof e?document.createTextNode(e):e,t.parentNode.insertBefore(e,t.nextSibling),e},editTagChangeDetected:function(t){var e=t.__originalData;for(var n in e)if(!this.dataProps.includes(n)&&t[n]!=e[n])return!0;return!1},getTagTextNode:function(t){return t.querySelector(this.settings.classNames.tagTextSelector)},setTagTextNode:function(t,e){this.getTagTextNode(t).innerHTML=ct(e)},editTag:function(t,e){var n=this;t=t||this.getLastTag(),e=e||{};var i=this.settings,s=this.getTagTextNode(t),a=this.getNodeIndex(t),o=Tt(t),r=this.events.callbacks,l=!0,d="select"==i.mode;if(!d&&this.dropdown.hide(),s){if(!zt(o,Object)||!("editable"in o)||o.editable)return o=Tt(t,{__originalData:ht({},o),__originalHTML:t.cloneNode(!0)}),Tt(o.__originalHTML,o.__originalData),s.setAttribute("contenteditable",!0),t.classList.add(i.classNames.tagEditing),this.events.callbacks.onEditTagFocus.call(this,t),s.addEventListener("click",r.onEditTagClick.bind(this,t)),s.addEventListener("blur",r.onEditTagBlur.bind(this,this.getTagTextNode(t))),s.addEventListener("input",r.onEditTagInput.bind(this,s)),s.addEventListener("paste",r.onEditTagPaste.bind(this,s)),s.addEventListener("keydown",(function(e){return r.onEditTagkeydown.call(n,e,t)})),s.addEventListener("compositionstart",r.onCompositionStart.bind(this)),s.addEventListener("compositionend",r.onCompositionEnd.bind(this)),e.skipValidation||(l=this.editTagToggleValidity(t)),s.originalIsValid=l,this.trigger("edit:start",{tag:t,index:a,data:o,isValid:l}),s.focus(),!d&&this.setRangeAtStartEnd(!1,s),0===i.dropdown.enabled&&!d&&this.dropdown.show(),this.state.hasFocus=!0,this}else st.warn("Cannot find element in Tag template: .",i.classNames.tagTextSelector)},editTagToggleValidity:function(t,e){var n;if(e=e||Tt(t))return(n=!("__isValid"in e)||!0===e.__isValid)||this.removeTagsFromValue(t),this.update(),t.classList.toggle(this.settings.classNames.tagNotAllowed,!n),e.__isValid=n,e.__isValid;st.warn("tag has no data: ",t,e)},onEditTagDone:function(t,e){t=t||this.state.editing.scope,e=e||{};var n,i,s=this.settings,a={tag:t,index:this.getNodeIndex(t),previousData:Tt(t),data:e};this.trigger("edit:beforeUpdate",a,{cloneData:!1}),this.state.editing=!1,delete e.__originalData,delete e.__originalHTML,t&&t.parentNode&&((void 0!==(i=e[s.tagTextProp])?null===(n=(i+="").trim)||void 0===n?void 0:n.call(i):s.tagTextProp in e?void 0:e.value)?(t=this.replaceTag(t,e),this.editTagToggleValidity(t,e),s.a11y.focusableTags?t.focus():"select"!=s.mode&&St(t)):this.removeTags(t)),this.trigger("edit:updated",a),s.dropdown.closeOnSelect&&this.dropdown.hide(),this.settings.keepInvalidTags&&this.reCheckInvalidTags()},replaceTag:function(t,e){e&&""!==e.value&&void 0!==e.value||(e=t.__tagifyTagData),e.__isValid&&1!=e.__isValid&&ht(e,this.getInvalidTagAttrs(e,e.__isValid));var n=this.createTagElem(e);return t.parentNode.replaceChild(n,t),this.updateValueByDOMTags(),n},updateValueByDOMTags:function(){var t=this;this.value.length=0;var e=this.settings.classNames,n=[e.tagNotAllowed.split(" ")[0],e.tagHide];[].forEach.call(this.getTagElms(),(function(e){Xt(e.classList).some((function(t){return n.includes(t)}))||t.value.push(Tt(e))})),this.update(),this.dropdown.refilter()},injectAtCaret:function(t,e){var n;if(e=e||(null===(n=this.state.selection)||void 0===n?void 0:n.range),"string"==typeof t&&(t=document.createTextNode(t)),!e&&t)return this.appendMixTags(t),this;var i=bt(t,e);return this.setRangeAtStartEnd(!1,i),this.updateValueByDOMTags(),this.update(),this},input:{set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this.settings,i=n.dropdown.closeOnSelect;this.state.inputText=t,e&&(this.DOM.input.innerHTML=ct(""+t),t&&this.toggleClass(n.classNames.empty,!this.DOM.input.innerHTML)),!t&&i&&this.dropdown.hide.bind(this),this.input.autocomplete.suggest.call(this),this.input.validate.call(this)},raw:function(){return this.DOM.input.textContent},validate:function(){var t=!this.state.inputText||!0===this.validateTag({value:this.state.inputText});return this.DOM.input.classList.toggle(this.settings.classNames.inputInvalid,!t),t},normalize:function(t,e){var n=t||this.DOM.input,i=[];n.childNodes.forEach((function(t){return 3==t.nodeType&&i.push(t.nodeValue)})),i=i.join("\n");try{i=i.replace(/(?:\r\n|\r|\n)/g,this.settings.delimiters.source.charAt(0))}catch(t){}return i=i.replace(/\s/g," "),(null==e?void 0:e.trim)?this.trim(i):i},autocomplete:{suggest:function(t){if(this.settings.autoComplete.enabled){"object"!=typeof(t=t||{value:""})&&(t={value:t});var e=this.dropdown.getMappedValue(t);if("number"!=typeof e){var n=this.state.inputText.toLowerCase(),i=e.substr(0,this.state.inputText.length).toLowerCase(),s=e.substring(this.state.inputText.length);e&&this.state.inputText&&i==n?(this.DOM.input.setAttribute("data-suggest",s),this.state.inputSuggestion=t):(this.DOM.input.removeAttribute("data-suggest"),delete this.state.inputSuggestion)}}},set:function(t){var e=this.DOM.input.getAttribute("data-suggest"),n=t||(e?this.state.inputText+e:null);return!!n&&("mix"==this.settings.mode?this.replaceTextWithNode(document.createTextNode(this.state.tag.prefix+n)):(this.input.set.call(this,n),this.setRangeAtStartEnd(!1,this.DOM.input)),this.input.autocomplete.suggest.call(this),this.dropdown.hide(),!0)}}},getTagIdx:function(t){return this.value.findIndex((function(e){return e.__tagId==(t||{}).__tagId}))},getNodeIndex:function(t){var e=0;if(t)for(;t=t.previousElementSibling;)e++;return e},getTagElms:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var i="."+Xt(this.settings.classNames.tag.split(" ")).concat(Xt(e)).join(".");return[].slice.call(this.DOM.scope.querySelectorAll(i))},getLastTag:function(){var t=this.settings.classNames,e=this.DOM.scope.querySelectorAll("".concat(t.tagSelector,":not(.").concat(t.tagHide,"):not([readonly])"));return e[e.length-1]},isTagDuplicate:function(t,e,n){var i=0,s=!0,a=!1,o=void 0;try{for(var r,l=this.value[Symbol.iterator]();!(s=(r=l.next()).done);s=!0){var d=r.value;at(this.trim(""+t),d.value,e)&&n!=d.__tagId&&i++}}catch(t){a=!0,o=t}finally{try{s||null==l.return||l.return()}finally{if(a)throw o}}return i},getTagIndexByValue:function(t){var e=this,n=[],i=this.settings.dropdown.caseSensitive;return this.getTagElms().forEach((function(s,a){s.__tagifyTagData&&at(e.trim(s.__tagifyTagData.value),t,i)&&n.push(a)})),n},getTagElmByValue:function(t){var e=this.getTagIndexByValue(t)[0];return this.getTagElms()[e]},flashTag:function(t){var e=this;t&&(t.classList.add(this.settings.classNames.tagFlash),setTimeout((function(){t.classList.remove(e.settings.classNames.tagFlash)}),100))},isTagBlacklisted:function(t){return t=this.trim(t.toLowerCase()),this.settings.blacklist.filter((function(e){return(""+e).toLowerCase()==t})).length},isTagWhitelisted:function(t){return!!this.getWhitelistItem(t)},getWhitelistItem:function(t,e,n){e=e||"value";var i,s=this.settings;return(n=n||s.whitelist).some((function(n){var a="object"==typeof n?n[e]||n.value:n;if(at(a,t,s.dropdown.caseSensitive,s.trim))return i="object"==typeof n?n:{value:n},!0})),i||"value"!=e||"value"==s.tagTextProp||(i=this.getWhitelistItem(t,s.tagTextProp,n)),i},validateTag:function(t){var e=this.settings,n="value"in t?"value":e.tagTextProp,i=this.trim(t[n]+"");return(t[n]+"").trim()?"mix"!=e.mode&&e.pattern&&zt(e.pattern,RegExp)&&!e.pattern.test(i)?this.TEXTS.pattern:!e.duplicates&&this.isTagDuplicate(i,e.dropdown.caseSensitive,t.__tagId)?this.TEXTS.duplicate:this.isTagBlacklisted(i)||e.enforceWhitelist&&!this.isTagWhitelisted(i)?this.TEXTS.notAllowed:!e.validate||e.validate(t):this.TEXTS.empty},getInvalidTagAttrs:function(t,e){return{"aria-invalid":!0,class:"".concat(t.class||""," ").concat(this.settings.classNames.tagNotAllowed).trim(),title:e}},hasMaxTags:function(){return this.value.length>=this.settings.maxTags&&this.TEXTS.exceed},setReadonly:function(t,e){var n=this.settings;this.DOM.scope.contains(document.activeElement)&&document.activeElement.blur(),n[e||"readonly"]=t,this.DOM.scope[(t?"set":"remove")+"Attribute"](e||"readonly",!0),this.settings.userInput=!0,this.setContentEditable(!t)},setContentEditable:function(t){this.DOM.input.contentEditable=t,this.DOM.input.tabIndex=t?0:-1},setDisabled:function(t){this.setReadonly(t,"disabled")},normalizeTags:function(t){var e=this,n=this.settings,i=n.whitelist,s=n.delimiters,a=n.mode,o=n.tagTextProp,r=[],l=!!i&&zt(i[0],Object),d=Array.isArray(t),c=d&&t[0].value,u=function(t){return(t+"").split(s).reduce((function(t,n){var i,s=e.trim(n);return s&&t.push((Wt(i={},o,s),Wt(i,"value",s),i)),t}),[])};if("number"==typeof t&&(t=t.toString()),"string"==typeof t){if(!t.trim())return[];t=u(t)}else d&&(t=t.reduce((function(t,n){if(ut(n)){var i=ht({},n);o in i||(o="value"),i[o]=e.trim(i[o]),(i[o]||0===i[o])&&t.push(i)}else if(null!=n&&""!==n&&void 0!==n){var s;(s=t).push.apply(s,Xt(u(n)))}return t}),[]));return l&&!c&&(t.forEach((function(t){var n=r.map((function(t){return t.value})),i=e.dropdown.filterListItems.call(e,t[o],{exact:!0});e.settings.duplicates||(i=i.filter((function(t){return!n.includes(t.value)})));var s=i.length>1?e.getWhitelistItem(t[o],o,i):i[0];s&&zt(s,Object)?r.push(s):"mix"!=a&&(null==t.value&&(t.value=t[o]),r.push(t))})),r.length&&(t=r)),t},parseMixTags:function(t){var e=this,n=this.settings,i=n.mixTagsInterpolator,s=n.duplicates,a=n.transformTag,o=n.enforceWhitelist,r=n.maxTags,l=n.tagTextProp,d=[];t=t.split(i[0]).map((function(t,n){var c,u,h,g=t.split(i[1]),p=g[0],f=d.length==r;try{if(p==+p)throw Error;u=JSON.parse(p)}catch(t){u=e.normalizeTags(p)[0]||{value:p}}if(a.call(e,u),f||!(g.length>1)||o&&!e.isTagWhitelisted(u.value)||!s&&e.isTagDuplicate(u.value)){if(t)return n?i[0]+t:t}else u[c=u[l]?l:"value"]=e.trim(u[c]),h=e.createTagElem(u),d.push(u),h.classList.add(e.settings.classNames.tagNoAnimation),g[0]=h.outerHTML,e.value.push(u);return g.join("")})).join(""),this.DOM.input.innerHTML=t,this.DOM.input.appendChild(document.createTextNode("")),this.DOM.input.normalize();var c=this.getTagElms();return c.forEach((function(t,e){return Tt(t,d[e])})),this.update({withoutChangeEvent:!0}),xt(c,this.state.hasFocus),t},replaceTextWithNode:function(t,e){if(this.state.tag||e){e=e||this.state.tag.prefix+this.state.tag.value;var n,i,s=this.state.selection||window.getSelection(),a=s.anchorNode,o=this.state.tag.delimiters?this.state.tag.delimiters.length:0;return a.splitText(s.anchorOffset-o),-1==(n=a.nodeValue.lastIndexOf(e))||(i=a.splitText(n),t&&a.parentNode.replaceChild(t,i)),!0}},prepareNewTagNode:function(t,e){e=e||{};var n=this.settings,i=[],s={},a=Object.assign({},t,{value:t.value+""});if(t=Object.assign({},a),n.transformTag.call(this,t),t.__isValid=this.hasMaxTags()||this.validateTag(t),!0!==t.__isValid){if(e.skipInvalid)return;if(ht(s,this.getInvalidTagAttrs(t,t.__isValid),{__preInvalidData:a}),t.__isValid==this.TEXTS.duplicate&&this.flashTag(this.getTagElmByValue(t.value)),!n.createInvalidTags)return void i.push(t.value)}return"readonly"in t&&(t.readonly?s["aria-readonly"]=!0:delete t.readonly),{tagElm:this.createTagElem(t,s),tagData:t,aggregatedInvalidInput:i}},postProcessNewTagNode:function(t,e){var n=this,i=this.settings,s=e.__isValid;s&&!0===s?this.value.push(e):(this.trigger("invalid",{data:e,index:this.value.length,tag:t,message:s}),i.keepInvalidTags||setTimeout((function(){return n.removeTags(t,!0)}),1e3)),this.dropdown.position()},selectTag:function(t,e){var n=this;if(!this.settings.enforceWhitelist||this.isTagWhitelisted(e.value)){this.state.actions.selectOption&&setTimeout((function(){return n.setRangeAtStartEnd(!1,n.DOM.input)}));var i=this.getLastTag();return i?this.replaceTag(i,e):this.appendTag(t),this.value[0]=e,this.update(),this.trigger("add",{tag:t,data:e}),[t]}},addEmptyTag:function(t){var e=ht({value:""},t||{}),n=this.createTagElem(e);Tt(n,e),this.appendTag(n),this.editTag(n,{skipValidation:!0}),this.toggleFocusClass(!0)},addTags:function(t,e,n){var i=this,s=[],a=this.settings,o=[],r=document.createDocumentFragment(),l=[];if(!t||0==t.length)return s;switch(t=this.normalizeTags(t),a.mode){case"mix":return this.addMixTags(t);case"select":e=!1,this.removeAllTags()}return this.DOM.input.removeAttribute("style"),t.forEach((function(t){var e=i.prepareNewTagNode(t,{skipInvalid:n||a.skipInvalid});if(e){var d=e.tagElm;if(t=e.tagData,o=e.aggregatedInvalidInput,s.push(d),"select"==a.mode)return i.selectTag(d,t);r.appendChild(d),i.postProcessNewTagNode(d,t),l.push({tagElm:d,tagData:t})}})),this.appendTag(r),l.forEach((function(t){var e=t.tagElm,n=t.tagData;return i.trigger("add",{tag:e,index:i.getTagIdx(n),data:n})})),this.update(),t.length&&e&&(this.input.set.call(this,a.createInvalidTags?"":o.join(a._delimiters)),this.setRangeAtStartEnd(!1,this.DOM.input)),this.dropdown.refilter(),s},addMixTags:function(t){var e=this;if((t=this.normalizeTags(t))[0].prefix||this.state.tag)return this.prefixedTextToTag(t[0]);var n=document.createDocumentFragment();return t.forEach((function(t){var i=e.prepareNewTagNode(t);n.appendChild(i.tagElm),e.insertAfterTag(i.tagElm),e.postProcessNewTagNode(i.tagElm,i.tagData)})),this.appendMixTags(n),n.children},appendMixTags:function(t){var e=!!this.state.selection;e?this.injectAtCaret(t):(this.DOM.input.focus(),(e=this.setStateSelection()).range.setStart(this.DOM.input,e.range.endOffset),e.range.setEnd(this.DOM.input,e.range.endOffset),this.DOM.input.appendChild(t),this.updateValueByDOMTags(),this.update())},prefixedTextToTag:function(t){var e,n,i,s=this,a=this.settings,o=null===(e=this.state.tag)||void 0===e?void 0:e.delimiters;if(t.prefix=t.prefix||this.state.tag?this.state.tag.prefix:(a.pattern.source||a.pattern)[0],i=this.prepareNewTagNode(t),n=i.tagElm,this.replaceTextWithNode(n)||this.DOM.input.appendChild(n),setTimeout((function(){return n.classList.add(s.settings.classNames.tagNoAnimation)}),300),this.update(),!o){var r=this.insertAfterTag(n)||n;setTimeout(St,0,r)}return this.state.tag=null,this.postProcessNewTagNode(n,i.tagData),n},appendTag:function(t){var e=this.DOM,n=e.input;e.scope.insertBefore(t,n)},createTagElem:function(t,e){t.__tagId=mt();var n,i=ht({},t,Kt({value:ct(t.value+"")},e));return function(t){for(var e,n=document.createNodeIterator(t,NodeFilter.SHOW_TEXT,null,!1);e=n.nextNode();)e.textContent.trim()||e.parentNode.removeChild(e)}(n=this.parseTemplate("tag",[i,this])),Tt(n,t),n},reCheckInvalidTags:function(){var t=this,e=this.settings;this.getTagElms(e.classNames.tagNotAllowed).forEach((function(n,i){var s=Tt(n),a=t.hasMaxTags(),o=t.validateTag(s),r=!0===o&&!a;if("select"==e.mode&&t.toggleScopeValidation(o),r)return s=s.__preInvalidData?s.__preInvalidData:{value:s.value},t.replaceTag(n,s);n.title=a||o}))},removeTags:function(t,e,n){var i,s=this,a=this.settings;if(t=t&&zt(t,HTMLElement)?[t]:zt(t,Array)?t:t?[t]:[this.getLastTag()].filter((function(t){return t})),i=t.reduce((function(t,e){e&&"string"==typeof e&&(e=s.getTagElmByValue(e));var n=Tt(e);return e&&n&&!n.readonly&&t.push({node:e,idx:s.getTagIdx(n),data:Tt(e,{__removed:!0})}),t}),[]),n="number"==typeof n?n:this.CSSVars.tagHideTransition,"select"==a.mode&&(n=0,this.input.set.call(this)),1==i.length&&"select"!=a.mode&&i[0].node.classList.contains(a.classNames.tagNotAllowed)&&(e=!0),i.length)return a.hooks.beforeRemoveTag(i,{tagify:this}).then((function(){var t=function(t){t.node.parentNode&&(t.node.parentNode.removeChild(t.node),e?a.keepInvalidTags&&this.trigger("remove",{tag:t.node,index:t.idx}):(this.trigger("remove",{tag:t.node,index:t.idx,data:t.data}),this.dropdown.refilter(),this.dropdown.position(),this.DOM.input.normalize(),a.keepInvalidTags&&this.reCheckInvalidTags()))};n&&n>10&&1==i.length?function(e){e.node.style.width=parseFloat(window.getComputedStyle(e.node).width)+"px",document.body.clientTop,e.node.classList.add(a.classNames.tagHide),setTimeout(t.bind(this),n,e)}.call(s,i[0]):i.forEach(t.bind(s)),e||(s.removeTagsFromValue(i.map((function(t){return t.node}))),s.update(),"select"==a.mode&&a.userInput&&s.setContentEditable(!0))})).catch((function(t){}))},removeTagsFromDOM:function(){this.getTagElms().forEach((function(t){return t.remove()}))},removeTagsFromValue:function(t){var e=this;(t=Array.isArray(t)?t:[t]).forEach((function(t){var n=Tt(t),i=e.getTagIdx(n);i>-1&&e.value.splice(i,1)}))},removeAllTags:function(t){var e=this;t=t||{},this.value=[],"mix"==this.settings.mode?this.DOM.input.innerHTML="":this.removeTagsFromDOM(),this.dropdown.refilter(),this.dropdown.position(),this.state.dropdown.visible&&setTimeout((function(){e.DOM.input.focus()})),"select"==this.settings.mode&&(this.input.set.call(this),this.settings.userInput&&this.setContentEditable(!0)),this.update(t)},postUpdate:function(){this.state.blockChangeEvent=!1;var t,e,n=this.settings,i=n.classNames,s="mix"==n.mode?n.mixMode.integrated?this.DOM.input.textContent:this.DOM.originalInput.value.trim():this.value.length+this.input.raw.call(this).length;this.toggleClass(i.hasMaxTags,this.value.length>=n.maxTags),this.toggleClass(i.hasNoTags,!this.value.length),this.toggleClass(i.empty,!s),"select"==n.mode&&this.toggleScopeValidation(null===(e=this.value)||void 0===e||null===(t=e[0])||void 0===t?void 0:t.__isValid)},setOriginalInputValue:function(t){var e=this.DOM.originalInput;this.settings.mixMode.integrated||(e.value=t,e.tagifyValue=e.value,this.setPersistedData(t,"value"))},update:function(t){clearTimeout(this.debouncedUpdateTimeout),this.debouncedUpdateTimeout=setTimeout(function(){var e=this.getInputValue();this.setOriginalInputValue(e),this.settings.onChangeAfterBlur&&(t||{}).withoutChangeEvent||this.state.blockChangeEvent||this.triggerChangeEvent(),this.postUpdate()}.bind(this),100),this.events.bindOriginaInputListener.call(this,100)},getInputValue:function(){var t=this.getCleanValue();return"mix"==this.settings.mode?this.getMixedTagsAsString(t):t.length?this.settings.originalInputValueFormat?this.settings.originalInputValueFormat(t):JSON.stringify(t):""},getCleanValue:function(t){return ot(t||this.value,this.dataProps)},getMixedTagsAsString:function(){var t="",e=this,n=this.settings,i=n.originalInputValueFormat||JSON.stringify,s=n.mixTagsInterpolator;return function n(a){a.childNodes.forEach((function(a){if(1==a.nodeType){var o=Tt(a);if("BR"==a.tagName&&(t+="\r\n"),o&&vt.call(e,a)){if(o.__removed)return;t+=s[0]+i(rt(o,e.dataProps))+s[1]}else a.getAttribute("style")||["B","I","U"].includes(a.tagName)?t+=a.textContent:"DIV"!=a.tagName&&"P"!=a.tagName||(t+="\r\n",n(a))}else t+=a.textContent}))}(this.DOM.input),t}},Jt.prototype.removeTag=Jt.prototype.removeTags;class Zt{#U;#W;#z;#K;#X;#J;#Q;#G;#Y;#Z;#tt;#et;#nt;#it;#st;#at=null;constructor(t,e,n,i,s,a,o,r,l,d,c,u){this.#U=t,this.#Z=e,this.#W=n,this.#z=i,this.#K=s,this.#X=a,this.#nt=o,this.#it=u,this.#st=this.#it.innerHTML,this.#Y=r,this.#J=l,this.#Q=d,this.#G=c,this.#et=!1,this.#tt=!1,this.#W.addEventListener("input",(t=>{this.filterItemsSearch(t)})),this.#Y.addEventListener("click",(()=>{this.setFiltered(!1)})),this.#J.addEventListener("click",(()=>{this.toggleVisibility()})),"radio-field-input"===this.#z&&this.#X.forEach((t=>{t.addEventListener("change",(()=>{this.scrollListToTop()}))}))}isEngaged(){return this.#et}isFiltered(){return this.#tt}setFiltered(t){this.#tt!==t&&(this.#tt=t,t?(this.#Y.style.removeProperty("display"),this.#it.style.removeProperty("display")):(this.#W.value="",this.#Y.style.display="none",this.#it.style.display="none",this.#nt.style.display="none",this.#ot()))}toggleVisibility(){this.isEngaged()?(this.#et=!1,this.#U.classList.remove("engaged"),this.setFiltered(!1),this.#J.setAttribute("aria-expanded","false"),this.#Q.style.removeProperty("display"),this.#G.style.display="none"):(this.#et=!0,this.#U.classList.add("engaged"),this.#J.setAttribute("aria-expanded","true"),this.#Q.style.display="none",this.#G.style.removeProperty("display"))}#rt(t){this.#U.ownerDocument.defaultView.clearTimeout(this.#at),this.#at=this.#U.ownerDocument.defaultView.setTimeout((()=>{this.#it.textContent="",this.#U.ownerDocument.defaultView.requestAnimationFrame((()=>{this.#it.textContent=t}))}),500)}#lt(t){const e=$(this.#st,t);this.#rt(e)}filterItemsSearch(t){const e=t.target.value.toLowerCase();this.setFiltered(!!e);let n=0,i=!1;this.#X.forEach((t=>{t.textContent.toLowerCase().includes(e)?(n+=1,i=!0,te(t)):function(t){t.style.display="none"}(t)})),this.#lt(n.toString()),""!==e&&!1===i?this.#nt.style.removeProperty("display"):(""===e||i)&&(this.#nt.style.display="none")}#ot(){this.#X.forEach((t=>te(t)))}scrollListToTop(){this.#Z.scrollTo({top:0,behavior:"smooth"})}}function te(t){t.style.removeProperty("display")}class ee{#V=new Map;init(t){if(void 0===t)throw new TypeError("During init of an InputHasOptionFilter an undefined element was passed to the factory.");if(this.#V.has(t.id))throw new Error(`A InputHasOptionFilter with id '${t.id}' has already been initialized.`);const e=t,n=e.querySelector(".c-input--has-option-filter__field"),i=e.querySelector(".c-input--has-option-filter__search-input input"),s=e.getAttribute("data-il-ui-component"),a=e.querySelector(".c-field--has-option-filter__list"),o=a.querySelectorAll(".c-field--has-option-filter__item"),r=e.querySelector(".message-no-match"),l=e.querySelector('.c-input--has-option-filter__synopsis [role="status"]'),d=e.querySelector(".c-input--has-option-filter__clear-search"),c=e.querySelector(".c-input--has-option-filter__visibility-toggle"),u=c.querySelector(".text-expand"),h=c.querySelector(".text-collapse"),g=new Zt(t,n,i,s,a,o,r,d,c,u,h,l);return this.#V.set(t.id,g),g}get(t){return this.#V.has(t)?this.#V.get(t):null}}var ne;e.UI=e.UI||{},e.UI.Input=e.UI.Input||{},(ne=e.UI.Input).textarea=new o,ne.mustacheVariables={init:(t,e)=>function(t,e){e.querySelectorAll(".c-input--has-mustache-variables__definitions > li > a").forEach((e=>{const n=function(t){const e=t.textContent.match(/^\s*\{\{([^}]+)\}\}\s*$/);return e?e[1].trim():null}(e);e.addEventListener("click",(()=>{t.insertCharactersAroundSelection(`{{${n}}}`,"")}))}))}(t,e)},ne.markdown=new w,ne.optionFilter=new ee,ne.treeSelect=new Z(new tt(t),e.UI.menu.drilldown,{txt:t=>e.Language.txt(t)},n),ne.tagInput=ne.tag||{},ne.tagInput.init=(t,e,n,i,s)=>Yt(Jt,t,e,n,i,s)}($,il,document); diff --git a/components/ILIAS/UI/resources/js/Input/Field/file.js b/components/ILIAS/UI/resources/js/Input/Field/file.js index bc9572a8246b..87e742db5d88 100755 --- a/components/ILIAS/UI/resources/js/Input/Field/file.js +++ b/components/ILIAS/UI/resources/js/Input/Field/file.js @@ -103,6 +103,12 @@ il.UI.Input = il.UI.Input || {}; */ let submitter_button = {}; + /** + * Holds initialised forms, prevents duplicate submission handlers. + * @type {WeakSet<HTMLFormElement>} + */ + let initialised_forms_set = new WeakSet(); + /** * @param {string} input_id * @param {string} upload_url @@ -211,11 +217,16 @@ il.UI.Input = il.UI.Input || {}; * @param {Dropzone} dropzone */ let initDropzoneEventListeners = function (dropzone) { - document.getElementById(dropzone.options.input_id) - .closest('form') - .addEventListener('submit', (event) => { - processFormSubmissionHook(dropzone, event); - }); + const form = document + .getElementById(dropzone.options.input_id) + .closest('form'); + + if (!initialised_forms_set.has(form)) { + form.addEventListener('submit', (event) => { + processFormSubmissionHook(dropzone, event); + }); + initialised_forms_set.add(form); + } dropzone.on('maxfilesexceeded', alertMaxFilesReachedHook); dropzone.on('maxfilesreached', disableActionButtonHook); @@ -419,10 +430,10 @@ il.UI.Input = il.UI.Input || {}; } let submitCurrentFormHook = function (dropzone) { + // mark one dropzone as finished + current_dropzone++; // submit the current form only if all dropzones // were processed. - console.log(current_dropzone); - console.log(current_dropzone_count); if (dropzone.options.form.should_submit === true && current_dropzone >= current_dropzone_count) { setSubmitterButtonFormAction(dropzone.options.form); dropzone.options.form.submit(); @@ -642,39 +653,28 @@ il.UI.Input = il.UI.Input || {}; } let processCurrentFormDropzones = function (form, event) { - // retrieve all file inputs of the current form. - let file_inputs = $(form).find(`${SELECTOR.file_fieldset}, ${SELECTOR.image_fieldset}`); - current_dropzone_count = file_inputs.length; - - if (typeof file_inputs[Symbol.iterator] === 'function') { - let total_files = 0; - for (let i = 0; i < file_inputs.length; i++) { - let input_id = $(file_inputs[i]).attr('id'); - let dropzone = dropzones[input_id]; - const queue = dropzone.getQueuedFiles(); - processRemovals(input_id, event); - total_files += dropzone.files.length; - if (queue.length !== 0) { - dropzone.processQueue(); - } - current_dropzone++; - } - // handle case if no files selected. - if (total_files === 0) { - setSubmitterButtonFormAction(form); - form.submit(); - } - } else { - let input_id = file_inputs.attr('id'); - let dropzone = dropzones[input_id]; - processRemovals(input_id, event); - if (0 !== dropzone.getQueuedFiles().length) { - dropzone.processQueue(); - } else { - setSubmitterButtonFormAction(form); - form.submit(); - } - } + // retrieve all file inputs of the current form. + const file_inputs = form.querySelectorAll(`${SELECTOR.file_fieldset}, ${SELECTOR.image_fieldset}`); + + const dropzones_to_process = new Map(); + file_inputs.forEach((file_input) => { + const dropzone = dropzones[file_input.id]; + if (dropzone.getQueuedFiles().length > 0) { + dropzones_to_process.set(file_input.id, dropzone); + } + }); + + current_dropzone_count = dropzones_to_process.size; + if (current_dropzone_count < 1) { + setSubmitterButtonFormAction(form); + form.submit(); + return; + } + + dropzones_to_process.forEach((dropzone, input_id) => { + processRemovals(input_id, event); + dropzone.processQueue(); + }); } /** diff --git a/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/TreeMultiSelect.js b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/TreeMultiSelect.js deleted file mode 100644 index 97069edf2c92..000000000000 --- a/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/TreeMultiSelect.js +++ /dev/null @@ -1,149 +0,0 @@ -/** - * This file is part of ILIAS, a powerful learning management system - * published by ILIAS open source e-Learning e.V. - * - * ILIAS is licensed with the GPL-3.0, - * see https://www.gnu.org/licenses/gpl-3.0.en.html - * You should have received a copy of said license along with the - * source code, too. - * - * If this is not the case or you just want to try ILIAS, you'll find - * us at: - * https://www.ilias.de - * https://github.com/ILIAS-eLearning - */ - -import TreeSelect from './TreeSelect.js'; -import * as CONSTANTS from './constants.js'; - -/** - * @param {TreeSelectNode} child - * @param {TreeSelectNode} parent - * @returns {boolean} - */ -function isNodeChildOf(child, parent) { - return parent.element.querySelector(`[${CONSTANTS.NODE_ID}="${child.id}"]`) !== null; -} - -/** - * @author Thibeau Fuhrer <thibeau@sr.solutions> - */ -export default class TreeMultiSelect extends TreeSelect { - /** @type {boolean} */ - #canSelectChildNodes; - - /** - * @param {Map<string, TreeSelectNode>} nodeMap (node-id => node) - * @param {JQueryEventListener} jqueryEventListener - * @param {TemplateRenderer} templateRenderer - * @param {AsyncRenderer} asyncRenderer - * @param {{txt: function(string): string}} language - * @param {Drilldown} drilldownComponent - * @param {HTMLElement} breadcrumbsElement - * @param {HTMLTemplateElement} breadcrumbTemplate - * @param {HTMLUListElement} nodeSelectionElement - * @param {HTMLTemplateElement} nodeSelectionTemplate - * @param {HTMLButtonElement} dialogSelectButton - * @param {HTMLButtonElement} dialogOpenButton - * @param {HTMLDialogElement} dialogElement - * @param {boolean} canSelectChildNodes - */ - constructor( - nodeMap, - jqueryEventListener, - templateRenderer, - asyncRenderer, - language, - drilldownComponent, - breadcrumbsElement, - breadcrumbTemplate, - nodeSelectionElement, - nodeSelectionTemplate, - dialogSelectButton, - dialogOpenButton, - dialogElement, - canSelectChildNodes, - ) { - super( - nodeMap, - jqueryEventListener, - templateRenderer, - asyncRenderer, - language, - drilldownComponent, - breadcrumbsElement, - breadcrumbTemplate, - nodeSelectionElement, - nodeSelectionTemplate, - dialogSelectButton, - dialogOpenButton, - dialogElement, - ); - - this.#canSelectChildNodes = canSelectChildNodes; - } - - /** - * @inheritDoc - */ - selectNode(nodeId) { - if (!this.#canSelectChildNodes) { - // provide selection with new node-id already - const newSelection = Array.from(this.getSelection().add(nodeId)); - this.#unselectChildNodes(newSelection, this.getNodes()); - } - super.selectNode(nodeId); - } - - /** - * Updates the TreeSelectNode.selectButton state in the following manner: - * - if one or more node is selected, disable their descendant buttons and enable all others - * - if no node is selected, enable all buttons - */ - updateNodeSelectButtonStates() { - if (this.#canSelectChildNodes) { - return; - } - const nodeMap = this.getNodes(); - nodeMap.forEach((node) => { - node.selectButton.disabled = false; - node.selectButton.querySelector(CONSTANTS.GLYPH).classList.remove(CONSTANTS.DISABLED_CLASS); - }); - this.getSelection().forEach((nodeId) => { - const node = nodeMap.get(nodeId); - // ignore nodes which have not been loaded (yet) and leaf nodes - if (null === node || node.listElement === null) { - return; - } - // disable all descending select buttons - node.listElement - .querySelectorAll(CONSTANTS.NODE_SELECT_BUTTON) - .forEach((button) => { - button.disabled = true; - button.querySelector(CONSTANTS.GLYPH).classList.add(CONSTANTS.DISABLED_CLASS); - }); - }); - } - - /** - * Calls unselectNode() for each node-id which is selected in a nested manner (parent-child). - * - * @param {string[]} selection (node-ids) - * @param {Map<string, TreeSelectNode>} nodeMap (node-id => node) - */ - #unselectChildNodes(selection, nodeMap) { - for (let childIndex = 0; childIndex < selection.length; childIndex += 1) { - for (let parentIndex = 0; parentIndex < selection.length; parentIndex += 1) { - const parentNodeId = selection[parentIndex]; - const childNodeId = selection[childIndex]; - // skip same index or if one of both node-ids does not (yet) exist. - if (childIndex === parentIndex || !nodeMap.has(childNodeId) || !nodeMap.has(parentNodeId)) { - continue; - } - if (isNodeChildOf(nodeMap.get(childNodeId), nodeMap.get(parentNodeId))) { - this.unselectNode(childNodeId); - } - } - } - } -} diff --git a/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/TreeSelect.js b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/TreeSelect.js index 9ac7e525ea5b..31bcefecdf12 100644 --- a/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/TreeSelect.js +++ b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/TreeSelect.js @@ -111,6 +111,9 @@ export default class TreeSelect { /** @type {HTMLDialogElement} */ #dialogElement; + /** @type {function(TreeSelect): void} */ + #selectionHandler; + /** * @param {Map<string, TreeSelectNode>} nodeMap (node-id => node) * @param {JQueryEventListener} jqueryEventListener @@ -125,6 +128,7 @@ export default class TreeSelect { * @param {HTMLButtonElement} dialogSelectButton * @param {HTMLButtonElement} dialogOpenButton * @param {HTMLDialogElement} dialogElement + * @param {function(TreeSelect): void} selectionHandler */ constructor( nodeMap, @@ -140,6 +144,7 @@ export default class TreeSelect { dialogSelectButton, dialogOpenButton, dialogElement, + selectionHandler, ) { this.#nodeMap = nodeMap; this.#templateRenderer = templateRenderer; @@ -153,6 +158,7 @@ export default class TreeSelect { this.#dialogSelectButton = dialogSelectButton; this.#dialogOpenButton = dialogOpenButton; this.#dialogElement = dialogElement; + this.#selectionHandler = selectionHandler; jqueryEventListener.on( this.#dialogElement.ownerDocument, @@ -168,13 +174,6 @@ export default class TreeSelect { this.#closeDialog(); }); }); - this.#nodeSelectionElement - .querySelectorAll('li') - .forEach((entry) => { - const nodeId = getNodeIdOrAbort(entry); - this.#addRemoveNodeSelectionEntryClickHandler(entry, nodeId); - this.#addNodeSelectionId(nodeId); - }); this.#drilldownComponent.addEngageListener((drilldownLevel) => { this.#engageDrilldownLevelHandler(drilldownLevel); }); @@ -184,7 +183,16 @@ export default class TreeSelect { this.#nodeMap.forEach((node) => { this.#hydrateNode(node); }); + this.#nodeSelectionElement + .querySelectorAll('li') + .forEach((entry) => { + const nodeId = getNodeIdOrAbort(entry); + this.#addRemoveNodeSelectionEntryClickHandler(entry, nodeId); + this.selectNode(nodeId); + }); + // trigger drilldown engage listenerfor already engaged level once. + this.#engageDrilldownLevelHandler(this.#drilldownComponent.getCurrentLevel()); this.#updateDialogSelectButton(); } @@ -195,13 +203,13 @@ export default class TreeSelect { this.#removeNodeSelectionId(nodeId); this.#updateDialogSelectButton(); this.#removeNodeSelectionEntry(nodeId); - // check in case the node was not yet loaded (async). + // check in case the node does not exist anymore (Input::withValue()). if (this.#nodeMap.has(nodeId)) { const node = this.#nodeMap.get(nodeId); toggleSelectedNodeElementClass(node.element, false); this.#changeNodeSelectButtonToSelect(node.selectButton, node.name); - this.updateNodeSelectButtonStates(); } + this.#selectionHandler(this); } /** @@ -210,37 +218,29 @@ export default class TreeSelect { selectNode(nodeId) { this.#addNodeSelectionId(nodeId); this.#updateDialogSelectButton(); - // check in case the node was not yet loaded (async). + // check in case the node does not exist anymore (Input::withValue()). if (this.#nodeMap.has(nodeId)) { const node = this.#nodeMap.get(nodeId); toggleSelectedNodeElementClass(node.element, true); this.#changeNodeSelectButtonToUnselect(node.selectButton, node.name); this.#renderNodeSelectionEntry(node); - this.updateNodeSelectButtonStates(); } + this.#selectionHandler(this); } /** - * Updates the TreeSelectNode.selectButton state in the following manner: - * - if no node is selected, enable all buttons - * - if a node is selected, disable all other buttons + * @param {string} nodeId */ - updateNodeSelectButtonStates() { - this.#nodeMap.forEach((node, nodeId) => { - if (this.#nodeSelectionSet.size > 0) { - node.selectButton.disabled = !this.#nodeSelectionSet.has(nodeId); - node.selectButton.querySelector(CONSTANTS.GLYPH).classList.toggle( - CONSTANTS.DISABLED_CLASS, - !this.#nodeSelectionSet.has(nodeId), - ); - } else { - node.selectButton.disabled = false; - node.selectButton.querySelector(CONSTANTS.GLYPH).classList.toggle( - CONSTANTS.DISABLED_CLASS, - false, - ); - } - }); + engageNode(nodeId) { + if (!this.#nodeMap.has(nodeId)) { + return; + } + const parentLevel = this.#nodeMap.get(nodeId).drilldownParentLevel; + if (this.#drilldownComponent.getCurrentLevel() !== parentLevel + && this.#drilldownComponent.getParentLevel() !== parentLevel + ) { + this.#drilldownComponent.engageLevel(parentLevel); + } } /** @@ -362,20 +362,12 @@ export default class TreeSelect { if (engagedNodeId === null || !this.#nodeMap.has(engagedNodeId)) { throw new Error(`Could not find node for drilldown-level '${drilldownLevel}'.`); } + const node = this.#nodeMap.get(engagedNodeId); this.#removeAllBreadcrumbs(); - this.#renderAllBreadcrumbs(this.#nodeMap.get(engagedNodeId)); - } - - /** - * @param {HTMLButtonElement} button - * @param {TreeSelectNode} node - */ - #addNodeDrilldownButtonClickHandler(button, node) { - button.addEventListener('click', () => { - if (node.renderUrl !== null) { - this.#renderAsyncNodeChildren(node); - } - }); + this.#renderAllBreadcrumbs(node); + if (node.renderUrl !== null) { + this.#renderAsyncNodeChildren(node); + } } /** @@ -436,9 +428,6 @@ export default class TreeSelect { */ #hydrateNode(node) { this.#addNodeSelectButtonClickHandler(node.selectButton, node); - if (node.drilldownButton !== null) { - this.#addNodeDrilldownButtonClickHandler(node.drilldownButton, node); - } } /** diff --git a/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/TreeSelectFactory.js b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/TreeSelectFactory.js index 418a83b6a821..8f7bc555bda3 100644 --- a/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/TreeSelectFactory.js +++ b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/TreeSelectFactory.js @@ -14,10 +14,13 @@ */ import TreeSelect from './TreeSelect.js'; -import TreeMultiSelect from './TreeMultiSelect.js'; import TemplateRenderer from '../../../../Core/src/TemplateRenderer.js'; import AsyncRenderer from '../../../../Core/src/AsyncRenderer.js'; +import updateSingleSelectButtonStates from './updateSingleSelectButtonStates.js'; +import updateMultiSelectButtonStates from './updateMultiSelectButtonStates.js'; +import engageParentDrilldownLevel from './engageParentDrilldownLevel.js'; import createTreeSelectNodes from './createTreeSelectNodes.js'; +import unselectChildNodes from './unselectChildNodes.js'; import * as CONSTANTS from './constants.js'; /** @@ -28,6 +31,30 @@ function getNodeElements(element) { return Array.from(element.querySelectorAll(CONSTANTS.NODE)); } +/** + * @returns {function(TreeSelect): void} + */ +function getSingleSelectionHandler() { + return (treeSelectComponent) => { + updateSingleSelectButtonStates(treeSelectComponent); + engageParentDrilldownLevel(treeSelectComponent); + }; +} + +/** + * @param {boolean} canSelectSubNodes + * @returns {function(TreeSelect): void} + */ +function getMultiSelectionHandler(canSelectSubNodes) { + if (canSelectSubNodes) { + return () => {}; + } + return (treeSelectComponent) => { + unselectChildNodes(treeSelectComponent); + updateMultiSelectButtonStates(treeSelectComponent); + }; +} + /** * @author Thibeau Fuhrer <thibeau@sr.solutions> */ @@ -88,7 +115,7 @@ export default class TreeSelectFactory { const drilldownComponent = this.#getDrilldown(treeSelectElement); - const treeMultiSelect = new TreeMultiSelect( + const treeMultiSelect = new TreeSelect( createTreeSelectNodes(getNodeElements(dialogElement)), this.#jqueryEventListener, new TemplateRenderer(this.#document), @@ -102,7 +129,7 @@ export default class TreeSelectFactory { dialogSelectButton, dialogOpenButton, dialogElement, - canSelectChildNodes, + getMultiSelectionHandler(canSelectChildNodes), ); this.#instances.set(inputId, treeMultiSelect); @@ -146,6 +173,7 @@ export default class TreeSelectFactory { dialogSelectButton, dialogOpenButton, dialogElement, + getSingleSelectionHandler(), ); this.#instances.set(inputId, treeSelect); diff --git a/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/engageParentDrilldownLevel.js b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/engageParentDrilldownLevel.js new file mode 100644 index 000000000000..0544f728773b --- /dev/null +++ b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/engageParentDrilldownLevel.js @@ -0,0 +1,29 @@ +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + * + * @author Thibeau Fuhrer <thibeau@sr.solutions> + */ + +/** + * @param {TreeSelect} treeSelectComponent + */ +export default function engageParentDrilldownLevel(treeSelectComponent) { + const nodeSelectionSet = treeSelectComponent.getSelection(); + if (nodeSelectionSet.size === 1) { + const nodeId = nodeSelectionSet.values()?.next()?.value; + if (treeSelectComponent.getNodes().has(nodeId)) { + treeSelectComponent.engageNode(nodeId); + } + } +} diff --git a/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/unselectChildNodes.js b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/unselectChildNodes.js new file mode 100644 index 000000000000..d7a10d8e8c65 --- /dev/null +++ b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/unselectChildNodes.js @@ -0,0 +1,51 @@ +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + * + * @author Thibeau Fuhrer <thibeau@sr.solutions> + */ + +import * as CONSTANTS from './constants.js'; + +/** + * @param {TreeSelectNode} child + * @param {TreeSelectNode} parent + * @returns {boolean} + */ +function isNodeChildOf(child, parent) { + return parent.element.querySelector(`[${CONSTANTS.NODE_ID}="${child.id}"]`) !== null; +} + +/** + * Calls unselectNode() for each node-id which is selected in a nested manner (parent-child). + * + * @param {TreeSelect} treeSelectComponent + */ +export default function unselectChildNodes(treeSelectComponent) { + const selection = Array.from(treeSelectComponent.getSelection()); + const nodeMap = treeSelectComponent.getNodes(); + for (let childIndex = 0; childIndex < selection.length; childIndex += 1) { + for (let parentIndex = 0; parentIndex < selection.length; parentIndex += 1) { + const parentNodeId = selection[parentIndex]; + const childNodeId = selection[childIndex]; + // ignore same index and if one of both node-ids does not (yet) exist. + if (childIndex !== parentIndex + && nodeMap.has(childNodeId) + && nodeMap.has(parentNodeId) + && isNodeChildOf(nodeMap.get(childNodeId), nodeMap.get(parentNodeId)) + ) { + treeSelectComponent.unselectNode(childNodeId); + } + } + } +} diff --git a/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/updateMultiSelectButtonStates.js b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/updateMultiSelectButtonStates.js new file mode 100644 index 000000000000..afcdbabcd882 --- /dev/null +++ b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/updateMultiSelectButtonStates.js @@ -0,0 +1,48 @@ +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + * + * @author Thibeau Fuhrer <thibeau@sr.solutions> + */ + +import * as CONSTANTS from './constants.js'; + +/** + * Updates the TreeSelectNode.selectButton state in the following manner: + * - if one or more nodes are selected, disable their descendant buttons and enable all others + * - if no node is selected, enable all buttons + * + * @param {TreeSelect} treeSelectComponent + */ +export default function updateMultiSelectButtonStates(treeSelectComponent) { + const nodeMap = treeSelectComponent.getNodes(); + const nodeSelectionSet = treeSelectComponent.getSelection(); + nodeMap.forEach((node) => { + node.selectButton.disabled = false; + node.selectButton.querySelector(CONSTANTS.GLYPH).classList.remove(CONSTANTS.DISABLED_CLASS); + }); + nodeSelectionSet.forEach((nodeId) => { + const node = nodeMap.get(nodeId); + // ignore nodes which have not been loaded (yet) and leaf nodes + if (node === null || node.listElement === null) { + return; + } + // disable all descending select buttons + node.listElement + .querySelectorAll(CONSTANTS.NODE_SELECT_BUTTON) + .forEach((button) => { + button.disabled = true; + button.querySelector(CONSTANTS.GLYPH).classList.add(CONSTANTS.DISABLED_CLASS); + }); + }); +} diff --git a/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/updateSingleSelectButtonStates.js b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/updateSingleSelectButtonStates.js new file mode 100644 index 000000000000..3c208ab76662 --- /dev/null +++ b/components/ILIAS/UI/resources/js/Input/Field/src/TreeSelect/updateSingleSelectButtonStates.js @@ -0,0 +1,45 @@ +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + * + * @author Thibeau Fuhrer <thibeau@sr.solutions> + */ + +import * as CONSTANTS from './constants.js'; + +/** + * Updates the TreeSelectNode.selectButton state in the following manner: + * - if no node is selected, enable all buttons + * - if a node is selected, disable all other buttons + * + * @param {TreeSelect} treeSelectComponent + */ +export default function updateSingleSelectButtonStates(treeSelectComponent) { + const nodeMap = treeSelectComponent.getNodes(); + const nodeSelectionSet = treeSelectComponent.getSelection(); + nodeMap.forEach((node, nodeId) => { + if (nodeSelectionSet.size > 0) { + node.selectButton.disabled = !nodeSelectionSet.has(nodeId); + node.selectButton.querySelector(CONSTANTS.GLYPH).classList.toggle( + CONSTANTS.DISABLED_CLASS, + !nodeSelectionSet.has(nodeId), + ); + } else { + node.selectButton.disabled = false; + node.selectButton.querySelector(CONSTANTS.GLYPH).classList.toggle( + CONSTANTS.DISABLED_CLASS, + false, + ); + } + }); +} diff --git a/components/ILIAS/UI/resources/js/Input/ViewControl/dist/input.viewcontrols.min.js b/components/ILIAS/UI/resources/js/Input/ViewControl/dist/input.viewcontrols.min.js index 962f59905817..4953628a39c9 100644 --- a/components/ILIAS/UI/resources/js/Input/ViewControl/dist/input.viewcontrols.min.js +++ b/components/ILIAS/UI/resources/js/Input/ViewControl/dist/input.viewcontrols.min.js @@ -12,4 +12,4 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning */ -!function(e,t){"use strict";const n=new class{#e;constructor(e){this.#e=e}dispatch(e,t,n){this.#e(e).trigger(t,n)}register(e,t,n){this.#e(e).on(t,n)}}(t);e.UI=e.UI||{},e.UI.Input=e.UI.Input||{},e.UI.Input.Viewcontrols=e.UI.Input.Viewcontrols||{},e.UI.Input.Viewcontrols.FieldSelection=new class{#t;constructor(e){this.#t=e}init(e,t,n,i){this.#t.register(e.ownerDocument,t,(t=>{const r=t.target.closest(".il-viewcontrol-fieldselection"),o=r.querySelectorAll("input[type=checkbox]"),s=r.querySelector(".il-viewcontrol-value"),c=Object.values(o).map((e=>e.checked?e.value:""));return s.innerHTML="",c.forEach((t=>{const n=e.ownerDocument.createElement("input");n.type="hidden",n.name=`${i}[]`,n.value=t,s.appendChild(n)})),this.#t.dispatch(t.target,n),!1}))}}(n),e.UI.Input.Viewcontrols.Sortation=new class{#t;constructor(e){this.#t=e}init(e,t,n){this.#t.register(e.ownerDocument,t,((t,i)=>{let r=t.target.closest(".il-viewcontrol-fieldselection");r=i.options.parent_container?e.ownerDocument.querySelector(`#${i.options.parent_container} .il-viewcontrol-sortation`):t.target.closest(".il-viewcontrol-sortation");const o=r.querySelectorAll(".il-viewcontrol-value > input"),s=i.options.value.split(":");return[o[0].value,o[1].value]=s,this.#t.dispatch(t.target,n),!1}))}}(n),e.UI.Input.Viewcontrols.Pagination=new class{#t;constructor(e){this.#t=e}init(e,t,n){this.#t.register(e.ownerDocument,t,((e,t)=>{const i=e.target.closest(".il-viewcontrol-pagination").querySelectorAll(".il-viewcontrol-value input");return i[0].value=t.options.offset,i[1].value=t.options.limit,this.#t.dispatch(e.target,n),!1}))}}(n),e.UI.Input.Viewcontrols.Mode=new class{#t;constructor(e){this.#t=e}init(e,t,n){e.addEventListener("click",(e=>{const i=e.target;return i.parentElement.querySelectorAll("button").forEach((e=>e.classList.remove("engaged"))),i.classList.add("engaged"),i.closest(".il-viewcontrol").querySelector(".il-viewcontrol-value > input").value=t,this.#t.dispatch(e.target,n),!1}))}}(n)}(il,$); +!function(e,t){"use strict";const n=new class{#e;constructor(e){this.#e=e}dispatch(e,t,n){this.#e(e).trigger(t,n)}register(e,t,n){this.#e(e).on(t,n)}}(t);e.UI=e.UI||{},e.UI.Input=e.UI.Input||{},e.UI.Input.Viewcontrols=e.UI.Input.Viewcontrols||{},e.UI.Input.Viewcontrols.FieldSelection=new class{#t;constructor(e){this.#t=e}init(e,t,n,i){this.#t.register(e.ownerDocument,t,(t=>{const r=t.target.closest(".il-viewcontrol-fieldselection"),o=r.querySelectorAll("input[type=checkbox]"),s=r.querySelector(".il-viewcontrol-value"),c=Object.values(o).map((e=>e.checked?e.value:""));return s.innerHTML="",c.forEach((t=>{const n=e.ownerDocument.createElement("input");n.type="hidden",n.name=`${i}[]`,n.value=t,s.appendChild(n)})),this.#t.dispatch(t.target,n),!1}))}}(n),e.UI.Input.Viewcontrols.Sortation=new class{#t;constructor(e){this.#t=e}init(e,t,n){this.#t.register(e.ownerDocument,t,((t,i)=>{let r;r=i.options.parent_container?e.ownerDocument.querySelector(`#${i.options.parent_container} .il-viewcontrol-sortation`):t.target.closest(".il-viewcontrol-sortation");const o=r.querySelectorAll(".il-viewcontrol-value > input"),s=Array.isArray(i.options.value)?i.options.value:i.options.value.split(":");return[o[0].value,o[1].value]=s,this.#t.dispatch(t.target,n),!1}))}}(n),e.UI.Input.Viewcontrols.Pagination=new class{#t;constructor(e){this.#t=e}init(e,t,n){this.#t.register(e.ownerDocument,t,((e,t)=>{const i=e.target.closest(".il-viewcontrol-pagination").querySelectorAll(".il-viewcontrol-value input");return i[0].value=t.options.offset,i[1].value=t.options.limit,this.#t.dispatch(e.target,n),!1}))}}(n),e.UI.Input.Viewcontrols.Mode=new class{#t;constructor(e){this.#t=e}init(e,t,n){e.addEventListener("click",(e=>{const i=e.target;return i.parentElement.querySelectorAll("button").forEach((e=>e.classList.remove("engaged"))),i.classList.add("engaged"),i.closest(".il-viewcontrol").querySelector(".il-viewcontrol-value > input").value=t,this.#t.dispatch(e.target,n),!1}))}}(n)}(il,$); diff --git a/components/ILIAS/UI/resources/js/MainControls/dist/mainbar.js b/components/ILIAS/UI/resources/js/MainControls/dist/mainbar.js index f6febba37737..1c349d92a953 100644 --- a/components/ILIAS/UI/resources/js/MainControls/dist/mainbar.js +++ b/components/ILIAS/UI/resources/js/MainControls/dist/mainbar.js @@ -730,7 +730,6 @@ var persistence = function() { ,page_has_engaged_slated: 'with-mainbar-slates-engaged' ,tools_btn: 'il-mainbar-tools-button' ,toolentries_wrapper: 'il-mainbar-tools-entries' - ,remover_class: 'il-mainbar-remove-tool' ,mainbar: 'il-mainbar' ,mainbar_buttons: '.il-mainbar .il-mainbar-entries .btn-bulky, .il-mainbar .il-mainbar-entries .link-bulky' ,mainbar_entries: 'il-mainbar-entries' @@ -802,7 +801,10 @@ var persistence = function() { element.attr('aria-hidden', false); //https://www.w3.org/TR/wai-aria-practices-1.1/examples/accordion/accordion.html - element.attr('role', 'region'); + var currentRole = element.attr('role'); + if (!currentRole || currentRole === 'region') { + element.attr('role', 'region'); + } if(isInView && !thrown) { element.trigger('in_view'); //this is most important for async loading of slates, //it triggers the GlobalScreen-Service. @@ -815,8 +817,11 @@ var persistence = function() { additional_disengage: function(){ var entry_id = dom_ref_to_element[this.html_id]; thrown_for[entry_id] = false; - this.getElement().attr('aria-hidden', true); - this.getElement().removeAttr('role', 'region'); + var element = this.getElement(); + element.attr('aria-hidden', true); + if (element.attr('role') === 'region') { + element.removeAttr('role'); + } } }), remover: Object.assign({}, dom_element, { @@ -836,15 +841,6 @@ var persistence = function() { } } }, - removers: { - getElement: function(){ - return $('.' + css.remover_class); - }, - mb_hide: function() { - this.getElement().hide(); - } - - }, tools_area: Object.assign({}, dom_element, { getElement: function(){ return $(' .' + css.toolentries_wrapper); diff --git a/components/ILIAS/UI/resources/js/MainControls/dist/maincontrols.min.js b/components/ILIAS/UI/resources/js/MainControls/dist/maincontrols.min.js index 5f37bc629541..26f255abbb77 100644 --- a/components/ILIAS/UI/resources/js/MainControls/dist/maincontrols.min.js +++ b/components/ILIAS/UI/resources/js/MainControls/dist/maincontrols.min.js @@ -12,4 +12,4 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning */ -!function(t,e){"use strict";const n="engaged",s="il-maincontrols-metabar",a="il-metabar-slates",i="il-metabar-more-button",o="il-metabar-more-slate",r="il-maincontrols-slate",l="engaged";function c(t){t.removeClass(n),t.attr("aria-expanded",!1)}class u{#t;#e;#n;#s;#a;#i;#o;constructor(t,e,n,s,a,i){this.#t=t,this.#e=e,this.#s=n,this.#a=s,this.#i=a,this.#o=i}registerSignals(t,e){this.#t(document).on(t,((t,e)=>(this.#r(t,e),this.#s()&&this.#i(),!1))),this.#t(document).on(e,(()=>(this.onClickDisengageAll(),!1))),this.#t(`.${s}`).on("click",(()=>{this.#n=!0})),this.#t("body").on("click",(()=>{this.#n?this.#n=!1:this.onClickDisengageAll()})),this.#t(`.${a} > .${r}`).on("focusout",(t=>{if(!this.#s()){const e=t.relatedTarget,n=t.currentTarget;null===e||n.contains(e)||this.onClickDisengageAll()}}))}#r(t,e){const s=e.triggerer;!function(t){return t.hasClass(n)}(s)?(this.disengageAll(),function(t){t.addClass(n),t.attr("aria-expanded",!0)}(s),setTimeout((()=>{const t=s[0];this.focusInEngagedSlate(t)}),10)):c(s)}onClickDisengageAll(){this.disengageAllButtons(),this.disengageAllSlates()}disengageAllButtons(){document.querySelectorAll(`#${this.#e}.${s} > li > .btn.${n}`).forEach((t=>{c($(t))}));document.querySelectorAll(`#${this.#e}.${s} > li > .${a} > .${o} > .il-maincontrols-slate-content > .btn.${n}`).forEach((t=>{c($(t))}))}disengageAllSlates(){this.getEngagedSlates().each(((t,e)=>{this.#o(this.#t(e))}))}disengageAll(){this.disengageAllSlates(),this.disengageAllButtons()}getEngagedSlates(){const t=`#${this.#e} .${r}.${l}`;return this.#t(t)}focusInEngagedSlate(t){const e=function(t,e){let n=t.parentElement;for(;n&&!n.classList.contains(e);)n=n.parentElement;return n||console.warn(`No parent element with class "${e}" found.`),n}(t,s);if(e){const t=e.querySelector(`.${r}.${l}`);if(t){const e=t.querySelector("input, button");e&&e.focus()}}}init(){this.#l(),this.#c(),this.#s()?this.#u():this.#h(),this.#t(`.${s}`).css("visibility","visible"),this.#t(`#${this.#e} .${a}`).children(`.${r}`).attr("aria-hidden",!0)}#u(){this.#g(),this.#d().hide(),this.getMoreButton().show(),this.#y()}#h(){this.getMoreButton().hide(),this.#d().show()}#l(){if(0===this.getMoreButton().length){const t=this.#t(`#${this.#e}.${s}`).find(".btn, .il-link").last();this.#t(t).addClass(i)}}#c(){if(0===this.#S().length){const t=this.#t(`#${this.#e} .${a}`).children(`.${r}`).last();this.#t(t).addClass(o)}}getMoreButton(){return this.#t(`.${i}`)}#S(){return this.#t(`.${o}`)}#d(){return this.#t(`#${this.#e}.${s}`).children("li").children(".btn, .il-link").not(`.${i}`)}#g(){const t=this.#S().children(".il-maincontrols-slate-content");0===t.children().length&&this.#d().clone(!0,!0).appendTo(t)}#y(){const t=this.#a.getCounterObjectOrNull(this.#S());t&&this.#a.getCounterObject(this.getMoreButton()).setNoveltyTo(t.getNoveltyCount()).setStatusTo(t.getStatusCount())}}const h="engaged",g="disengaged";function d(t){return t.hasClass(h)}function y(t){t.removeClass(g),t.addClass(h),t.attr("aria-expanded","true"),t.attr("aria-hidden","false")}function S(t){t.removeClass(h),t.addClass(g),t.attr("aria-expanded","false"),t.attr("aria-hidden","true")}function m(t){d(t)?S(t):y(t)}var f=function(t){var e="il-counter",n={getCounterObject:function(t){let e;return e=s(t),console.assert(e.length>0,"Passed jQuery Object does not contain a counter"),a(e)},getCounterObjectOrNull:function(t){let e;return e=s(t),0===e.length?null:a(e)}},s=function(n){console.assert(n instanceof t,"$object_containing_counter is not a jQuery Object, param: "+n);var s=n;return n.hasClass(e)||(s=n.find("."+e)),s},a=function(e){return b.bind({})(e,t)};return n},b=function(t,e){const n=" Counter does not exist in the DOM. Make sure the respective Counter type has been rendered before applying this operations.",s=" is not a number";this.getStatusCount=function(){return r(o(t))},this.getNoveltyCount=function(){return r(i(t))},this.hasNoveltyObject=function(){return i(t).length>0},this.hasStatusObject=function(){return o(t).length>0},this.setNoveltyTo=function(e){console.assert(this.hasNoveltyObject(),"Novelty "+n),console.assert("number"==typeof e,e+s);var a=i(t);return a.html(e),0===e?a.hide():a.show(),this},this.setStatusTo=function(e){console.assert(this.hasStatusObject(),"Status "+n),console.assert("number"==typeof e,e+s);var a=o(t);return a.html(e),0===e?a.hide():a.show(),this},this.incrementNoveltyCount=function(e){return console.assert(this.hasNoveltyObject(),"Novelty "+n),console.assert("number"==typeof e,e+s),l((function(t){t.hasNoveltyObject()&&t.setNoveltyTo(t.getNoveltyCount()+e)}),t),this},this.decrementNoveltyCount=function(e){return console.assert(this.hasNoveltyObject(),"Novelty "+n),console.assert("number"==typeof e,e+s),l((function(t){t.hasNoveltyObject()&&t.setNoveltyTo(t.getNoveltyCount()-e)}),t),this},this.incrementStatusCount=function(e){return console.assert(this.hasStatusObject(),"Status "+n),console.assert("number"==typeof e,e+s),l((function(t){t.hasStatusObject()&&t.setStatusTo(t.getStatusCount()+e)}),t),this},this.decrementStatusCount=function(e){return console.assert(this.hasStatusObject(),"Status "+n),console.assert("number"==typeof e,e+s),l((function(t){t.hasStatusObject()&&t.setStatusTo(t.getStatusCount()-e)}),t),this},this.setTotalNoveltyToStatusCount=function(){return console.assert(this.hasStatusObject(),"Status "+n),console.assert(this.hasNoveltyObject(),"Novelty "+n),this.incrementStatusCount(this.getNoveltyCount()).setNoveltyTo(0)};var a={getNoveltyCount:this.getNoveltyCount,getStatusCount:this.getStatusCount,hasNoveltyObject:this.hasNoveltyObject,hasStatusObject:this.hasStatusObject,setNoveltyTo:this.setNoveltyTo,setStatusTo:this.setStatusTo,incrementNoveltyCount:this.incrementNoveltyCount,decrementNoveltyCount:this.decrementNoveltyCount,incrementStatusCount:this.incrementStatusCount,decrementStatusCount:this.decrementStatusCount,setTotalNoveltyToStatusCount:this.setTotalNoveltyToStatusCount},i=function(t){return t.find(".il-counter-novelty")},o=function(t){return t.find(".il-counter-status")},r=function(t){var n=0;return t.each((function(){var t=e(this).text();n+=parseInt(t)})),n},l=function(t,n){n.each((function(){var n=f(e).getCounterObject(e(this));t(n,e(this))}))};return a};t.UI=t.UI||{},t.UI.maincontrols=t.UI.maincontrols||{},t.UI.maincontrols.metabar=new class{#t;#m=[];#s;#a;#i;#o;constructor(t,e,n,s,a){this.#t=t,this.#s=e,this.#a=n,this.#i=s,this.#o=a}init(t){if(void 0!==this.#m[t])throw new Error(`Metabar with id '${t}' has already been initialized.`);this.#m[t]=new u(this.#t,t,this.#s,this.#a,this.#i,this.#o)}get(t){return this.#m[t]??null}disengageAll(){Object.values(this.#m).forEach((t=>t.disengageAll()))}}(e,(()=>t.UI.page.isSmallScreen()),f(e),(()=>t.UI.maincontrols.mainbar.disengageAll()),(e=>t.UI.maincontrols.slate.disengage(e))),t.UI.maincontrols.slate=new class{#t;#f;#b;constructor(t,e,n){this.#t=t,this.#f=e,this.#b=n}onSignal(t,e,n,s){const a=this.#t(`#${s}`),{triggerer:i}=n,o=i.parents(".il-metabar-more-slate").length>0;if("toggle"===t)this.#p(a,i,o);else if("engage"===t)y(a);else{if("replace"!==t)throw new Error(`No such SignalType: ${t}`);this.#C(s,n)}}#p(t,e,n){const s=t.closest(".il-maincontrols-metabar").attr("id"),a=this.#b.get(s);e.attr("id")!==a.getMoreButton().attr("id")?(m(t),n||(d(t)?(e.addClass(h),e.removeClass(g),t.trigger("in_view")):(e.removeClass(h),e.addClass(g)))):a.getEngagedSlates().length>0?a.disengageAllSlates():m(t)}disengage=S;#C(t,e){const{url:n}=e.options;this.#f(t,n,"content")}}(e,function(t){return function(e,n,s){t.ajax({url:n,dataType:"html"}).done((function(n){var a=t("<div>"+n+"</div>"),i=a.find("[data-replace-marker='"+s+"']").first();0==i.length?t("#"+e+" [data-replace-marker='"+s+"']").html(n):(t("#"+e+" [data-replace-marker='"+s+"']").first().replaceWith(i),t("#"+e+" [data-replace-marker='"+s+"']").first().after(a.find("[data-replace-marker='script']")))}))}}(e),t.UI.maincontrols.metabar)}(il,$); +!function(t,e){"use strict";const n="engaged",s="il-maincontrols-metabar",a="il-metabar-slates",i="il-metabar-more-button",o="il-metabar-more-slate",r="il-maincontrols-slate",l="engaged";function c(t){t.removeClass(n),t.attr("aria-expanded",!1)}class u{#t;#e;#n;#s;#a;#i;#o;constructor(t,e,n,s,a,i){this.#t=t,this.#e=e,this.#s=n,this.#a=s,this.#i=a,this.#o=i}registerSignals(t,e){this.#t(document).on(t,((t,e)=>(this.#r(t,e),this.#s()&&this.#i(),!1))),this.#t(document).on(e,(()=>(this.onClickDisengageAll(),!1))),this.#t(`.${s}`).on("click",(()=>{this.#n=!0})),this.#t("body").on("click",(()=>{this.#n?this.#n=!1:this.onClickDisengageAll()})),this.#t(`.${a} > .${r}`).on("focusout",(t=>{if(!this.#s()){const e=t.relatedTarget,n=t.currentTarget;null===e||n.contains(e)||this.onClickDisengageAll()}}))}#r(t,e){const s=e.triggerer;!function(t){return t.hasClass(n)}(s)?(this.disengageAll(),function(t){t.addClass(n),t.attr("aria-expanded",!0)}(s),setTimeout((()=>{const t=s[0];this.focusInEngagedSlate(t)}),10)):c(s)}onClickDisengageAll(){this.disengageAllButtons(),this.disengageAllSlates()}disengageAllButtons(){document.querySelectorAll(`#${this.#e}.${s} > li > .btn.${n}`).forEach((t=>{c($(t))}));document.querySelectorAll(`#${this.#e}.${s} > li > .${a} > .${o} > .il-maincontrols-slate-content > .btn.${n}`).forEach((t=>{c($(t))}))}disengageAllSlates(){this.getEngagedSlates().each(((t,e)=>{this.#o(this.#t(e))}))}disengageAll(){this.disengageAllSlates(),this.disengageAllButtons()}getEngagedSlates(){const t=`#${this.#e} .${r}.${l}`;return this.#t(t)}focusInEngagedSlate(t){const e=function(t,e){let n=t.parentElement;for(;n&&!n.classList.contains(e);)n=n.parentElement;return n||console.warn(`No parent element with class "${e}" found.`),n}(t,s);if(e){const t=e.querySelector(`.${r}.${l}`);if(t){const e=t.querySelector("input, button");e&&e.focus()}}}init(){this.#l(),this.#c(),this.#s()?this.#u():this.#h(),this.#t(`.${s}`).css("visibility","visible"),this.#t(`#${this.#e} .${a}`).children(`.${r}`).attr("aria-hidden",!0)}#u(){this.#g(),this.#d().hide(),this.getMoreButton().show(),this.#y()}#h(){this.getMoreButton().hide(),this.#d().show()}#l(){if(0===this.getMoreButton().length){const t=this.#t(`#${this.#e}.${s}`).find(".btn, .il-link").last();this.#t(t).addClass(i)}}#c(){if(0===this.#S().length){const t=this.#t(`#${this.#e} .${a}`).children(`.${r}`).last();this.#t(t).addClass(o)}}getMoreButton(){return this.#t(`.${i}`)}#S(){return this.#t(`.${o}`)}#d(){return this.#t(`#${this.#e}.${s}`).children("li").children(".btn, .il-link").not(`.${i}`)}#g(){const t=this.#S().children(".il-maincontrols-slate-content");0===t.children().length&&this.#d().clone(!0,!0).appendTo(t)}#y(){const t=this.#a.getCounterObjectOrNull(this.#S());t&&this.#a.getCounterObject(this.getMoreButton()).setNoveltyTo(t.getNoveltyCount()).setStatusTo(t.getStatusCount())}}const h="engaged",g="disengaged";function d(t){return t.hasClass(h)}function y(t){t.removeClass(g),t.addClass(h),t.attr("aria-expanded","true"),t.attr("aria-hidden","false")}function S(t){t.removeClass(h),t.addClass(g),t.attr("aria-expanded","false"),t.attr("aria-hidden","true")}function m(t){d(t)?S(t):y(t)}var f=function(t){var e="il-counter",n={getCounterObject:function(t){let e;return e=s(t),console.assert(e.length>0,"Passed jQuery Object does not contain a counter"),a(e)},getCounterObjectOrNull:function(t){let e;return e=s(t),0===e.length?null:a(e)}},s=function(n){console.assert(n instanceof t,"$object_containing_counter is not a jQuery Object, param: "+n);var s=n;return n.hasClass(e)||(s=n.find("."+e)),s},a=function(e){return b.bind({})(e,t)};return n},b=function(t,e){const n=" Counter does not exist in the DOM. Make sure the respective Counter type has been rendered before applying this operations.",s=" is not a number";this.getStatusCount=function(){return r(o(t))},this.getNoveltyCount=function(){return r(i(t))},this.hasNoveltyObject=function(){return i(t).length>0},this.hasStatusObject=function(){return o(t).length>0},this.setNoveltyTo=function(e){console.assert(this.hasNoveltyObject(),"Novelty "+n),console.assert("number"==typeof e,e+s);var a=i(t);return a.html(e),0===e?a.hide():a.show(),this},this.setStatusTo=function(e){console.assert(this.hasStatusObject(),"Status "+n),console.assert("number"==typeof e,e+s);var a=o(t);return a.html(e),0===e?a.hide():a.show(),this},this.incrementNoveltyCount=function(e){return console.assert(this.hasNoveltyObject(),"Novelty "+n),console.assert("number"==typeof e,e+s),l((function(t){t.hasNoveltyObject()&&t.setNoveltyTo(t.getNoveltyCount()+e)}),t),this},this.decrementNoveltyCount=function(e){return console.assert(this.hasNoveltyObject(),"Novelty "+n),console.assert("number"==typeof e,e+s),l((function(t){t.hasNoveltyObject()&&t.setNoveltyTo(t.getNoveltyCount()-e)}),t),this},this.incrementStatusCount=function(e){return console.assert(this.hasStatusObject(),"Status "+n),console.assert("number"==typeof e,e+s),l((function(t){t.hasStatusObject()&&t.setStatusTo(t.getStatusCount()+e)}),t),this},this.decrementStatusCount=function(e){return console.assert(this.hasStatusObject(),"Status "+n),console.assert("number"==typeof e,e+s),l((function(t){t.hasStatusObject()&&t.setStatusTo(t.getStatusCount()-e)}),t),this},this.setTotalNoveltyToStatusCount=function(){return console.assert(this.hasStatusObject(),"Status "+n),console.assert(this.hasNoveltyObject(),"Novelty "+n),this.incrementStatusCount(this.getNoveltyCount()).setNoveltyTo(0)};var a={getNoveltyCount:this.getNoveltyCount,getStatusCount:this.getStatusCount,hasNoveltyObject:this.hasNoveltyObject,hasStatusObject:this.hasStatusObject,setNoveltyTo:this.setNoveltyTo,setStatusTo:this.setStatusTo,incrementNoveltyCount:this.incrementNoveltyCount,decrementNoveltyCount:this.decrementNoveltyCount,incrementStatusCount:this.incrementStatusCount,decrementStatusCount:this.decrementStatusCount,setTotalNoveltyToStatusCount:this.setTotalNoveltyToStatusCount},i=function(t){return t.find(".il-counter-novelty")},o=function(t){return t.find(".il-counter-status")},r=function(t){var n=0;return t.each((function(){var t=e(this).text();n+=parseInt(t)})),n},l=function(t,n){n.each((function(){var n=f(e).getCounterObject(e(this));t(n,e(this))}))};return a};t.UI=t.UI||{},t.UI.maincontrols=t.UI.maincontrols||{},t.UI.maincontrols.metabar=new class{#t;#m=[];#s;#a;#i;#o;constructor(t,e,n,s,a){this.#t=t,this.#s=e,this.#a=n,this.#i=s,this.#o=a}init(t){if(void 0!==this.#m[t])throw new Error(`Metabar with id '${t}' has already been initialized.`);this.#m[t]=new u(this.#t,t,this.#s,this.#a,this.#i,this.#o)}get(t){return this.#m[t]??null}disengageAll(){Object.values(this.#m).forEach((t=>t.disengageAll()))}}(e,(()=>t.UI.page.isSmallScreen()),f(e),(()=>t.UI.maincontrols.mainbar.disengageAll()),(e=>t.UI.maincontrols.slate.disengage(e))),t.UI.maincontrols.slate=new class{#t;#f;#b;constructor(t,e,n){this.#t=t,this.#f=e,this.#b=n}onSignal(t,e,n,s){const a=this.#t(`#${s}`),{triggerer:i}=n,o=i.parents(".il-metabar-more-slate").length>0;if("toggle"===t)this.#p(a,i,o);else if("engage"===t)y(a);else{if("replace"!==t)throw new Error(`No such SignalType: ${t}`);this.#C(s,n)}}#p(t,e,n){const s=t.closest(".il-maincontrols-metabar").attr("id"),a=this.#b.get(s);a instanceof u&&e.attr("id")===a.getMoreButton().attr("id")?a.getEngagedSlates().length>0?a.disengageAllSlates():m(t):(m(t),n||(d(t)?(e.addClass(h),e.removeClass(g),t.trigger("in_view")):(e.removeClass(h),e.addClass(g))))}disengage=S;#C(t,e){const{url:n}=e.options;this.#f(t,n,"content")}}(e,function(t){return function(e,n,s){t.ajax({url:n,dataType:"html"}).done((function(n){var a=t("<div>"+n+"</div>"),i=a.find("[data-replace-marker='"+s+"']").first();0==i.length?t("#"+e+" [data-replace-marker='"+s+"']").html(n):(t("#"+e+" [data-replace-marker='"+s+"']").first().replaceWith(i),t("#"+e+" [data-replace-marker='"+s+"']").first().after(a.find("[data-replace-marker='script']")))}))}}(e),t.UI.maincontrols.metabar)}(il,$); diff --git a/components/ILIAS/UI/resources/js/MainControls/src/mainbar.renderer.js b/components/ILIAS/UI/resources/js/MainControls/src/mainbar.renderer.js index da537876f190..0cc38a685ee8 100755 --- a/components/ILIAS/UI/resources/js/MainControls/src/mainbar.renderer.js +++ b/components/ILIAS/UI/resources/js/MainControls/src/mainbar.renderer.js @@ -95,7 +95,10 @@ element.attr('aria-hidden', false); //https://www.w3.org/TR/wai-aria-practices-1.1/examples/accordion/accordion.html - element.attr('role', 'region'); + var currentRole = element.attr('role'); + if (!currentRole || currentRole === 'region') { + element.attr('role', 'region'); + } if(isInView && !thrown) { element.trigger('in_view'); //this is most important for async loading of slates, //it triggers the GlobalScreen-Service. @@ -108,8 +111,11 @@ additional_disengage: function(){ var entry_id = dom_ref_to_element[this.html_id]; thrown_for[entry_id] = false; - this.getElement().attr('aria-hidden', true); - this.getElement().removeAttr('role', 'region'); + var element = this.getElement(); + element.attr('aria-hidden', true); + if (element.attr('role') === 'region') { + element.removeAttr('role'); + } } }), remover: Object.assign({}, dom_element, { diff --git a/components/ILIAS/UI/resources/js/MainControls/src/metabar.class.js b/components/ILIAS/UI/resources/js/MainControls/src/metabar.class.js index c15a5adf2c34..ca5fbcd20415 100755 --- a/components/ILIAS/UI/resources/js/MainControls/src/metabar.class.js +++ b/components/ILIAS/UI/resources/js/MainControls/src/metabar.class.js @@ -356,23 +356,14 @@ export default class Metabar { } } - /** - * @return {void} - */ getMoreButton() { return this.#jquery(`.${classForMoreBtn}`); } - /** - * @return {void} - */ #getMoreSlate() { return this.#jquery(`.${classForMoreSlate}`); } - /** - * @return {void} - */ #getMetabarEntries() { return this.#jquery(`#${this.#id}.${classForEntries}`) .children('li').children('.btn, .il-link') diff --git a/components/ILIAS/UI/resources/js/MainControls/src/slate.class.js b/components/ILIAS/UI/resources/js/MainControls/src/slate.class.js index 53f849501886..ce2d1a3077e5 100755 --- a/components/ILIAS/UI/resources/js/MainControls/src/slate.class.js +++ b/components/ILIAS/UI/resources/js/MainControls/src/slate.class.js @@ -14,6 +14,8 @@ * ******************************************************************** */ +import Metabar from './metabar.class.js'; + /** * @type {string} */ @@ -133,7 +135,7 @@ export default class Slate { const metabarId = slate.closest('.il-maincontrols-metabar').attr('id'); const metabar = this.#metabarFactory.get(metabarId); - if (triggerer.attr('id') === metabar.getMoreButton().attr('id')) { + if (metabar instanceof Metabar && triggerer.attr('id') === metabar.getMoreButton().attr('id')) { if (metabar.getEngagedSlates().length > 0) { metabar.disengageAllSlates(); } else { diff --git a/components/ILIAS/UI/resources/js/MainControls/system_info.js b/components/ILIAS/UI/resources/js/MainControls/system_info.js index dfae4a6f2a38..b12c8e0cb79f 100755 --- a/components/ILIAS/UI/resources/js/MainControls/system_info.js +++ b/components/ILIAS/UI/resources/js/MainControls/system_info.js @@ -1,3 +1,18 @@ +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + */ + il = il || {}; il.UI = il.UI || {}; il.UI.maincontrols = il.UI.maincontrols || {}; @@ -19,7 +34,7 @@ il.UI.maincontrols = il.UI.maincontrols || {}; maybeShowMoreButton(item, more_button); $(window).resize(() => { if (!calculating) { - maybeShowMoreButton(item); + maybeShowMoreButton(item, more_button); } }); }; diff --git a/components/ILIAS/UI/resources/js/Menu/dist/drilldown.js b/components/ILIAS/UI/resources/js/Menu/dist/drilldown.js index a73f7a407257..d5ad247b5346 100644 --- a/components/ILIAS/UI/resources/js/Menu/dist/drilldown.js +++ b/components/ILIAS/UI/resources/js/Menu/dist/drilldown.js @@ -12,4 +12,4 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning */ -!function(e,t,s,i){"use strict";class l{#e;#t;#s;constructor(e,t,s,i,l){this.#e=t,this.#t=s,this.#s=i,e(document).on(l,(()=>{this.#i()})),this.#s.setFilterHandler((e=>{"Tab"!==e.key&&"Shift"!==e.key&&this.#l(e)})),this.#s.setResizeHandler((()=>{this.#r()})),this.#s.parseLevel(((e,t,s)=>this.#t.addLevel(e,t,s)),((e,t)=>this.#t.buildLeaf(e,t)),(e=>{this.#n(e)})),this.#n(this.#e.read())}#n(e){this.#t.engageLevel(e),this.#r()}#l(e){this.#t.engageLevel(0),this.#t.filter(e),this.#s.setFiltered(this.#t.getFiltered()),e.target.focus()}#i(){this.#t.upLevel(),this.#r()}#r(){const e=this.#t.getCurrent(),t=this.#t.getParent();let s=2;null===e.parent?s=0:"0"===e.parent&&(s=1),this.#s.setEngaged(e.id),this.#e.store(e.id),this.#s.setHeader(e.headerDisplayElement,t.headerDisplayElement),this.#s.setHeaderBacknav(s),this.#s.correctRightColumnPositionAndHeight(e.id)}}class r{#a="level_id";#d;constructor(e){this.#d=e}#h(){return this.#d}read(){return this.#d.items[this.#a]??0}store(e){this.#d.add(this.#a,e),this.#d.store()}}class n{#c={id:null,parent:null,engaged:!1,headerDisplayElement:"",leaves:[]};#o={index:null,text:null,filtered:!1};#E=[];#m(e,t,s,i){const l={...this.#c};return l.id=e,l.parent=s,l.headerDisplayElement=t,l.leaves=i,l}buildLeaf(e,t){const s={...this.#o};return s.index=e,s.text=t,s}addLevel(e,t,s){const i=this.#E.length.toString(),l=this.#m(i,e,t,s);return this.#E[l.id]=l,this.#E[l.id]}engageLevel(e){this.#E.forEach((t=>{const s=t;s.engaged=!1,t.id===e&&(s.engaged=!0)}))}getCurrent(){const e=this.#E.find((e=>e.engaged));return void 0!==e?e:this.#E[0]}getParent(){const e=this.getCurrent();return e.parent?this.#E[e.parent]:{}}upLevel(){const e=this.getCurrent();e.parent&&this.engageLevel(this.#E[e.parent].id)}#u(e){null!==e&&0!==e||(this.#E[e].filtered=!1,null!==this.#E[e].parent&&0!==this.#E[e].parent&&this.#u(this.#E[e].parent))}filter(e){const t=e.target.value.toLowerCase();this.#E.forEach((e=>{e.leaves.forEach((e=>{const s=e;""!==t?!1!==s.text.toLowerCase().includes(t)?s.filtered=!1:s.filtered=!0:s.filtered=!1}))}))}getFiltered(){const e=[];return this.#E.forEach((t=>{const s=t.leaves.filter((e=>e.filtered));if(s.length>0){const i=this.#m(t.id,t.headerDisplayElement,t.parent,[...s]);e.push(i)}})),e}}class a{#g={DRILLDOWN:"c-drilldown",MENU:"c-drilldown__menu",MENU_FILTERED:"c-drilldown--filtered",HEADER_ELEMENT:"c-drilldown__menulevel--trigger",MENU_BRANCH:"c-drilldown__branch",MENU_LEAF:"c-drilldown__leaf",FILTER:"c-drilldown__filter",ACTIVE:"c-drilldown__menulevel--engaged",ACTIVE_ITEM:"c-drilldown__menuitem--engaged",ACTIVE_PARENT:"c-drilldown__menulevel--engagedparent",FILTERED:"c-drilldown__menuitem--filtered",WITH_BACKLINK_ONE_COL:"c-drilldown__header--showbacknav",WITH_BACKLINK_TWO_COL:"c-drilldown__header--showbacknavtwocol",HEADER_TAG:"header",LIST_TAG:"ul",LIST_ELEMENT_TAG:"li",ID_ATTRIBUTE:"data-ddindex"};#L={dd:null,header:null,levels:[]};#p;#v;constructor(e,t,s){this.#p=e,this.#v=t,this.#L.dd=e.getElementById(s),[this.#L.header]=this.#L.dd.getElementsByTagName(this.#g.HEADER_TAG)}#_(){return this.#L.dd.querySelector(`.${this.#g.MENU}`)}setFilterHandler(e){this.#L.header.querySelector(`.${this.#g.FILTER} > input`).addEventListener("keyup",e)}setResizeHandler(e){this.#p.defaultView.addEventListener("resize",e)}parseLevel(e,t,s){this.#_().querySelectorAll(this.#g.LIST_TAG).forEach((i=>{const l=e(this.#T(i),this.#I(i),this.#f(i,t));this.#A(i,l.id),a.registerClickHandler(i,s,l.id),this.#L.levels[l.id]=i}))}#A(e,t){e.setAttribute(this.#g.ID_ATTRIBUTE,t)}#T(e){const t=e.previousElementSibling;if(null===t)return null;let s=null;return s=this.#p.createElement("h2"),s.innerText=t.childNodes[0].nodeValue,s}#I(e){return e.parentElement.parentElement.getAttribute(this.#g.ID_ATTRIBUTE)}#f(e,t){const s=e.querySelectorAll(`:scope >.${this.#g.MENU_LEAF}`),i=[];return s.forEach(((e,s)=>{i.push(t(s,e.firstElementChild.innerText))})),i}static registerClickHandler(e,t,s){const i=e.previousElementSibling;null!==i&&i.addEventListener("click",(()=>{t(s)}))}setEngaged(e){this.#L.dd.querySelector(`.${this.#g.ACTIVE}`)?.classList.remove(`${this.#g.ACTIVE}`),this.#L.dd.querySelector(`.${this.#g.ACTIVE_ITEM}`)?.classList.remove(`${this.#g.ACTIVE_ITEM}`),this.#L.dd.querySelector(`.${this.#g.ACTIVE_PARENT}`)?.classList.remove(`${this.#g.ACTIVE_PARENT}`);const t=this.#L.levels[e];t.classList.add(this.#g.ACTIVE);const s=t.parentElement.parentElement;"UL"===s.nodeName?(t.parentElement.classList.add(this.#g.ACTIVE_ITEM),s.classList.add(this.#g.ACTIVE_PARENT)):t.classList.add(this.#g.ACTIVE_PARENT);this.#L.levels[e].children[0].children[0].focus()}setFiltered(e){const t=this.#L.dd.querySelectorAll(`${this.#g.LIST_TAG}`),s=this.#L.dd.querySelectorAll(`.${this.#g.MENU_LEAF}`),i=e.map((e=>e.id)),l=this.#L.dd.querySelectorAll(`.${this.#g.MENU} > ul > .${this.#g.MENU_BRANCH}`);if(this.#L.levels.forEach((e=>{const t=e;t.style.removeProperty("top"),t.style.removeProperty("height")})),s.forEach((e=>{e.classList.remove(this.#g.FILTERED)})),0===e.length)return this.#L.dd.classList.remove(this.#g.MENU_FILTERED),l.forEach((e=>{const t=e;t.firstElementChild.disabled=!1,t.classList.remove(this.#g.FILTERED)})),void this.correctRightColumnPositionAndHeight("0");this.setEngaged(0),this.#L.dd.classList.add(this.#g.MENU_FILTERED),l.forEach((e=>{const t=e;t.firstElementChild.disabled=!0,t.classList.remove(this.#g.FILTERED)})),i.forEach(((s,i)=>{const[l]=[...t].filter((e=>e.getAttribute(this.#g.ID_ATTRIBUTE)===s)),r=l.querySelectorAll(`:scope >.${this.#g.MENU_LEAF}`);e[i].leaves.forEach((e=>r[e.index].classList.add(this.#g.FILTERED)))})),l.forEach((e=>{if(0===e.querySelectorAll(`.${this.#g.MENU_LEAF}:not(.${this.#g.FILTERED})`).length){e.classList.add(this.#g.FILTERED)}}))}setHeader(e,t){this.#L.header.children[1].replaceWith(this.#p.createElement("div")),null!==e?(this.#L.header.firstElementChild.replaceWith(e),null!==t&&this.#L.header.children[1].replaceWith(t)):this.#L.header.firstElementChild.replaceWith(this.#p.createElement("div"))}setHeaderBacknav(e){this.#L.header.classList.remove(this.#g.WITH_BACKLINK_TWO_COL),this.#L.header.classList.remove(this.#g.WITH_BACKLINK_ONE_COL),0!==e&&(e>1&&this.#L.header.classList.add(this.#g.WITH_BACKLINK_TWO_COL),this.#L.header.classList.add(this.#g.WITH_BACKLINK_ONE_COL))}correctRightColumnPositionAndHeight(e){let t=this.#L.levels[e];const s=this.#L.dd.querySelector(`.${this.#g.MENU}`),i=this.#L.dd.querySelector(`.${this.#g.MENU}`).offsetHeight;if(0!==i)this.#L.levels.forEach((e=>{const t=e;t.style.removeProperty("top"),t.style.removeProperty("height")})),"0"===e&&(t=t.querySelector(`:scope > .${this.#g.MENU_BRANCH} > ul`)),0!==t.offsetHeight&&(t.style.top=`-${t.offsetTop}px`,t.style.height=`${i}px`);else{const t=new this.#v((i=>{i[0].target.offsetHeight>0&&(this.correctRightColumnPositionAndHeight(e),t.unobserve(s))}));t.observe(s)}}}i.UI=i.UI||{},i.UI.menu=i.UI.menu||{},i.UI.menu.drilldown=new class{#C=[];#p;#v;#y;#N;constructor(e,t,s,i){this.#p=e,this.#v=t,this.#y=s,this.#N=i}init(e,t,s){if(void 0!==this.#C[e])throw new Error(`Drilldown with id '${e}' has already been initialized.`);null!==this.#p.getElementById(e)&&(this.#C[e]=new l(this.#y,new r(new this.#N.Utilities.CookieStorage(s)),new n,new a(this.#p,this.#v,e),t))}}(e,t,s,i)}(document,ResizeObserver,$,il); +!function(e,t,s,i){"use strict";class l{#e;#t;#s;constructor(e,t,s,i,l,r){this.#e=s,this.#t=i,this.#s=l,e(t).on(r,(()=>{this.#i()})),this.#s.setFilterHandler((e=>{"Tab"===e.key||"Shift"===e.key||e.isComposing||this.#l(e)})),this.#s.setResizeHandler((()=>{this.#r()})),this.#s.parseLevel(((e,t,s)=>this.#t.addLevel(e,t,s)),((e,t)=>this.#t.buildLeaf(e,t)),(e=>{this.#n(e)})),this.#n(this.#e.read())}#n(e){this.#t.engageLevel(e),this.#r()}#l(e){this.#t.engageLevel(0),this.#t.filter(e),this.#s.setFiltered(this.#t.getFiltered()),e.target.focus()}#i(){this.#t.upLevel(),this.#r()}#r(){const e=this.#t.getCurrent(),t=this.#t.getParent();let s=2;null===e.parent?s=0:"0"===e.parent&&(s=1),this.#s.setEngaged(e.id),this.#e.store(e.id),this.#s.setHeader(e.headerDisplayElement,t.headerDisplayElement),this.#s.setHeaderBacknav(s),this.#s.correctRightColumnPositionAndHeight(e.id)}}class r{#a="level_id";#d;constructor(e){this.#d=e}#h(){return this.#d}read(){return this.#d.items[this.#a]??0}store(e){this.#d.add(this.#a,e),this.#d.store()}}class n{#c={id:null,parent:null,engaged:!1,headerDisplayElement:"",leaves:[]};#o={index:null,text:null,filtered:!1};#E=[];#m(e,t,s,i){const l={...this.#c};return l.id=e,l.parent=s,l.headerDisplayElement=t,l.leaves=i,l}buildLeaf(e,t){const s={...this.#o};return s.index=e,s.text=t,s}addLevel(e,t,s){const i=this.#E.length.toString(),l=this.#m(i,e,t,s);return this.#E[l.id]=l,this.#E[l.id]}engageLevel(e){this.#E.forEach((t=>{const s=t;s.engaged=!1,t.id===e&&(s.engaged=!0)}))}getCurrent(){const e=this.#E.find((e=>e.engaged));return void 0!==e?e:this.#E[0]}getParent(){const e=this.getCurrent();return e.parent?this.#E[e.parent]:{}}upLevel(){const e=this.getCurrent();e.parent&&this.engageLevel(this.#E[e.parent].id)}#u(e){null!==e&&0!==e||(this.#E[e].filtered=!1,null!==this.#E[e].parent&&0!==this.#E[e].parent&&this.#u(this.#E[e].parent))}filter(e){const t=e.target.value.toLowerCase();this.#E.forEach((e=>{e.leaves.forEach((e=>{const s=e;""!==t?!1!==s.text.toLowerCase().includes(t)?s.filtered=!1:s.filtered=!0:s.filtered=!1}))}))}getFiltered(){const e=[];return this.#E.forEach((t=>{const s=t.leaves.filter((e=>e.filtered));if(s.length>0){const i=this.#m(t.id,t.headerDisplayElement,t.parent,[...s]);e.push(i)}})),e}}class a{#g={DRILLDOWN:"c-drilldown",MENU:"c-drilldown__menu",MENU_FILTERED:"c-drilldown--filtered",HEADER_ELEMENT:"c-drilldown__menulevel--trigger",MENU_BRANCH:"c-drilldown__branch",MENU_LEAF:"c-drilldown__leaf",FILTER:"c-drilldown__filter",ACTIVE:"c-drilldown__menulevel--engaged",ACTIVE_ITEM:"c-drilldown__menuitem--engaged",ACTIVE_PARENT:"c-drilldown__menulevel--engagedparent",FILTERED:"c-drilldown__menuitem--filtered",WITH_BACKLINK_ONE_COL:"c-drilldown__header--showbacknav",WITH_BACKLINK_TWO_COL:"c-drilldown__header--showbacknavtwocol",HEADER_TAG:"header",LIST_TAG:"ul",LIST_ELEMENT_TAG:"li",ID_ATTRIBUTE:"data-ddindex"};#L={dd:null,header:null,levels:[]};#p;#v;constructor(e,t,s){this.#p=e,this.#v=t,this.#L.dd=e.getElementById(s),[this.#L.header]=this.#L.dd.getElementsByTagName(this.#g.HEADER_TAG)}#_(){return this.#L.dd.querySelector(`.${this.#g.MENU}`)}setFilterHandler(e){this.#L.header.querySelector(`.${this.#g.FILTER} > input`).addEventListener("keyup",e)}setResizeHandler(e){this.#p.defaultView.addEventListener("resize",e)}parseLevel(e,t,s){this.#_().querySelectorAll(this.#g.LIST_TAG).forEach((i=>{const l=e(this.#T(i),this.#I(i),this.#f(i,t));this.#A(i,l.id),a.registerClickHandler(i,s,l.id),this.#L.levels[l.id]=i}))}#A(e,t){e.setAttribute(this.#g.ID_ATTRIBUTE,t)}#T(e){const t=e.previousElementSibling;if(null===t)return null;let s=null;return s=this.#p.createElement("h2"),s.innerText=t.childNodes[0].nodeValue,s}#I(e){return e.parentElement.parentElement.getAttribute(this.#g.ID_ATTRIBUTE)}#f(e,t){const s=e.querySelectorAll(`:scope >.${this.#g.MENU_LEAF}`),i=[];return s.forEach(((e,s)=>{i.push(t(s,e.firstElementChild.innerText))})),i}static registerClickHandler(e,t,s){const i=e.previousElementSibling;null!==i&&i.addEventListener("click",(()=>{t(s)}))}setEngaged(e){this.#L.dd.querySelector(`.${this.#g.ACTIVE}`)?.classList.remove(`${this.#g.ACTIVE}`),this.#L.dd.querySelector(`.${this.#g.ACTIVE_ITEM}`)?.classList.remove(`${this.#g.ACTIVE_ITEM}`),this.#L.dd.querySelector(`.${this.#g.ACTIVE_PARENT}`)?.classList.remove(`${this.#g.ACTIVE_PARENT}`);const t=this.#L.levels[e];t.classList.add(this.#g.ACTIVE);const s=t.parentElement.parentElement;"UL"===s.nodeName?(t.parentElement.classList.add(this.#g.ACTIVE_ITEM),s.classList.add(this.#g.ACTIVE_PARENT)):t.classList.add(this.#g.ACTIVE_PARENT);this.#L.levels[e].children[0].children[0].focus()}setFiltered(e){const t=this.#L.dd.querySelectorAll(`${this.#g.LIST_TAG}`),s=this.#L.dd.querySelectorAll(`.${this.#g.MENU_LEAF}`),i=e.map((e=>e.id)),l=this.#L.dd.querySelectorAll(`.${this.#g.MENU} > ul > .${this.#g.MENU_BRANCH}`);if(this.#L.levels.forEach((e=>{const t=e;t.style.removeProperty("top"),t.style.removeProperty("height")})),s.forEach((e=>{e.classList.remove(this.#g.FILTERED)})),0===e.length)return this.#L.dd.classList.remove(this.#g.MENU_FILTERED),l.forEach((e=>{const t=e;t.firstElementChild.disabled=!1,t.classList.remove(this.#g.FILTERED)})),void this.correctRightColumnPositionAndHeight("0");this.setEngaged(0),this.#L.dd.classList.add(this.#g.MENU_FILTERED),l.forEach((e=>{const t=e;t.firstElementChild.disabled=!0,t.classList.remove(this.#g.FILTERED)})),i.forEach(((s,i)=>{const[l]=[...t].filter((e=>e.getAttribute(this.#g.ID_ATTRIBUTE)===s)),r=l.querySelectorAll(`:scope >.${this.#g.MENU_LEAF}`);e[i].leaves.forEach((e=>r[e.index].classList.add(this.#g.FILTERED)))})),l.forEach((e=>{if(0===e.querySelectorAll(`.${this.#g.MENU_LEAF}:not(.${this.#g.FILTERED})`).length){e.classList.add(this.#g.FILTERED)}}))}setHeader(e,t){this.#L.header.children[1].replaceWith(this.#p.createElement("div")),null!==e?(this.#L.header.firstElementChild.replaceWith(e),null!==t&&this.#L.header.children[1].replaceWith(t)):this.#L.header.firstElementChild.replaceWith(this.#p.createElement("div"))}setHeaderBacknav(e){this.#L.header.classList.remove(this.#g.WITH_BACKLINK_TWO_COL),this.#L.header.classList.remove(this.#g.WITH_BACKLINK_ONE_COL),0!==e&&(e>1&&this.#L.header.classList.add(this.#g.WITH_BACKLINK_TWO_COL),this.#L.header.classList.add(this.#g.WITH_BACKLINK_ONE_COL))}correctRightColumnPositionAndHeight(e){let t=this.#L.levels[e];const s=this.#L.dd.querySelector(`.${this.#g.MENU}`),i=this.#L.dd.querySelector(`.${this.#g.MENU}`).offsetHeight;if(0!==i)this.#L.levels.forEach((e=>{const t=e;t.style.removeProperty("top"),t.style.removeProperty("height")})),"0"===e&&(t=t.querySelector(`:scope > .${this.#g.MENU_BRANCH} > ul`)),0!==t.offsetHeight&&(t.style.top=`-${t.offsetTop}px`,t.style.height=`${i}px`);else{const t=new this.#v((i=>{i[0].target.offsetHeight>0&&(this.correctRightColumnPositionAndHeight(e),t.unobserve(s))}));t.observe(s)}}}i.UI=i.UI||{},i.UI.menu=i.UI.menu||{},i.UI.menu.drilldown=new class{#C=[];#p;#v;#y;#N;constructor(e,t,s,i){this.#p=e,this.#v=t,this.#y=s,this.#N=i}init(e,t,s){if(void 0!==this.#C[e])throw new Error(`Drilldown with id '${e}' has already been initialized.`);null!==this.#p.getElementById(e)&&(this.#C[e]=new l(this.#y,this.#p,new r(new this.#N.Utilities.CookieStorage(s)),new n,new a(this.#p,this.#v,e),t))}}(e,t,s,i)}(document,ResizeObserver,$,il); diff --git a/components/ILIAS/UI/resources/js/Menu/dist/drilldown.min.js b/components/ILIAS/UI/resources/js/Menu/dist/drilldown.min.js index c7e1c5b4e43f..cf730357d0c7 100644 --- a/components/ILIAS/UI/resources/js/Menu/dist/drilldown.min.js +++ b/components/ILIAS/UI/resources/js/Menu/dist/drilldown.min.js @@ -12,4 +12,4 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning */ -!function(e,t,s){"use strict";class i{#e=new Set;#t;#s;#i;#l;constructor(e,t,s,i,l,n){this.#t=s,this.#s=i,this.#i=l,this.#l=n,e.on(t,this.#l,(()=>{this.#n()})),this.#i.maybeAddFilterHandler((e=>{"Tab"!==e.key&&"Shift"!==e.key&&this.#r(e)})),this.parseLevels(),this.engageLevel(this.#t.read())}parseLevels(){this.#i.parseLevel(((e,t,s,i,l)=>this.#s.addLevel(e,t,s,i,l)),((e,t)=>this.#s.buildLeaf(e,t)),(e=>{this.engageLevel(e)}))}removeEngageListener(e){this.#e.has(e)&&this.#e.delete(e)}addEngageListener(e){this.#e.has(e)||this.#e.add(e)}getBackSignal(){return this.#l}engageLevel(e){this.#s.engageLevel(e),this.#a(),this.#e.forEach((t=>{t(e)}))}#r(e){this.#s.engageLevel(0),this.#s.filter(e),this.#i.setFiltered(this.#s.getFiltered()),e.target.focus()}#n(){this.#s.upLevel(),this.engageLevel(this.#s.getCurrent().id)}#a(){const e=this.#s.getCurrent(),t=this.#s.getParent();let s=2;null===e.parent?s=0:"0"===e.parent&&(s=1),this.#i.setEngaged(e.id),this.#t.store(e.id),this.#i.setHeader(e.headerDisplayElement,t.headerDisplayElement),this.#i.setHeaderBacknav(s),this.#i.correctRightColumnPositionAndHeight(e.id)}}class l{#d="level_id";#h;constructor(e){this.#h=e}#c(){return this.#h}read(){return this.#h.items[this.#d]??0}store(e){this.#h.add(this.#d,e),this.#h.store()}}class n{#o={id:null,parent:null,engaged:!1,headerDisplayElement:"",leaves:[]};#E={index:null,text:null,filtered:!1};#u=[];#g(e,t,s,i){const l={...this.#o};return l.id=e,l.parent=s,l.headerDisplayElement=t,l.leaves=i,l}buildLeaf(e,t){const s={...this.#E};return s.index=e,s.text=t,s}addLevel(e,t,s,i=null){let l=i;if(null===l){l=this.#u.length.toString();const i=this.#g(l,e,t,s);this.#u[i.id]=i}else this.#u[l].leaves=s;return this.#u[l]}engageLevel(e){this.#u.forEach((t=>{t.engaged=t.id===e}))}getLevel(e){const t=this.#u.find((t=>t.id===e));return t||null}getCurrent(){const e=this.#u.find((e=>e.engaged));return void 0!==e?e:this.#u[0]}getParent(){const e=this.getCurrent();return e.parent?this.getLevel(e.parent):{}}upLevel(){const e=this.getCurrent();e.parent&&this.engageLevel(this.getLevel(e.parent).id)}#m(e){null!==e&&0!==e||(this.#u[e].filtered=!1,null!==this.#u[e].parent&&0!==this.#u[e].parent&&this.#m(this.#u[e].parent))}filter(e){const t=e.target.value.toLowerCase();this.#u.forEach((e=>{e.leaves.forEach((e=>{const s=e;""!==t?!1!==s.text.toLowerCase().includes(t)?s.filtered=!1:s.filtered=!0:s.filtered=!1}))}))}getFiltered(){const e=[];return this.#u.forEach((t=>{const s=t.leaves.filter((e=>e.filtered));if(s.length>0){const i=this.#g(t.id,t.headerDisplayElement,t.parent,[...s]);e.push(i)}})),e}}function r(e,t){for(let s=0;s<e.length;s+=1)t(e[s],s)}class a{#L={DRILLDOWN:"c-drilldown",MENU:"c-drilldown__menu",MENU_FILTERED:"c-drilldown--filtered",HEADER_ELEMENT:"c-drilldown__menulevel--trigger",MENU_BRANCH:"c-drilldown__branch",MENU_LEAF:"c-drilldown__leaf",FILTER:"c-drilldown__filter",ACTIVE:"c-drilldown__menulevel--engaged",ACTIVE_ITEM:"c-drilldown__menuitem--engaged",ACTIVE_PARENT:"c-drilldown__menulevel--engagedparent",FILTERED:"c-drilldown__menuitem--filtered",WITH_BACKLINK_ONE_COL:"c-drilldown__header--showbacknav",WITH_BACKLINK_TWO_COL:"c-drilldown__header--showbacknavtwocol",HEADER_TAG:"header",LIST_TAG:"ul",LIST_ELEMENT_TAG:"li",ID_ATTRIBUTE:"data-ddindex"};#v={dd:null,header:null,levels:[]};#p;#T;constructor(e,t,s){this.#p=e,this.#T=t,this.#v.dd=e.getElementById(s),[this.#v.header]=this.#v.dd.getElementsByTagName(this.#L.HEADER_TAG)}#_(){return this.#v.dd.querySelector(`.${this.#L.MENU}`)}maybeAddFilterHandler(e){this.#v.header.querySelector(`.${this.#L.FILTER} > input`)?.addEventListener("keyup",e)}parseLevel(e,t,s){r(this.#_().querySelectorAll(this.#L.LIST_TAG),(i=>{const l=i.getAttribute(this.#L.ID_ATTRIBUTE),n=e(this.#f(i),this.#I(i),this.#A(i,t),l);null===l&&(this.#y(i,n.id),this.registerHandler(i,s,n.id),this.#v.levels[n.id]=i)}))}#y(e,t){e.setAttribute(this.#L.ID_ATTRIBUTE,t)}#f(e){const t=e.parentElement.querySelector(`:scope > .${this.#L.HEADER_ELEMENT}`);if(null===t)return null;let s=null;return s=this.#p.createElement("h2"),s.textContent=t.innerText,s}#I(e){return e.parentElement.parentElement.getAttribute(this.#L.ID_ATTRIBUTE)}#A(e,t){const s=e.querySelectorAll(`:scope >.${this.#L.MENU_LEAF}`),i=[];return r(s,((e,s)=>{i.push(t(s,e.firstElementChild.innerText))})),i}registerHandler(e,t,s){const i=e.parentElement.querySelector(`:scope > .${this.#L.HEADER_ELEMENT}`);null!==i&&i.addEventListener("click",(()=>{t(s)}))}setEngaged(e){this.#v.dd.querySelector(`.${this.#L.ACTIVE}`)?.classList.remove(`${this.#L.ACTIVE}`),this.#v.dd.querySelector(`.${this.#L.ACTIVE_ITEM}`)?.classList.remove(`${this.#L.ACTIVE_ITEM}`),this.#v.dd.querySelector(`.${this.#L.ACTIVE_PARENT}`)?.classList.remove(`${this.#L.ACTIVE_PARENT}`);const t=this.#v.levels[e];t.classList.add(this.#L.ACTIVE);const s=t.parentElement.parentElement;"UL"===s.nodeName?(t.parentElement.classList.add(this.#L.ACTIVE_ITEM),s.classList.add(this.#L.ACTIVE_PARENT)):t.classList.add(this.#L.ACTIVE_PARENT);const i=this.#v.levels[e].querySelector(":scope > li")?.firstElementChild;i?.focus()}setFiltered(e){const t=this.#v.dd.querySelectorAll(`${this.#L.LIST_TAG}`),s=this.#v.dd.querySelectorAll(`.${this.#L.MENU_LEAF}`),i=e.map((e=>e.id)),l=this.#v.dd.querySelectorAll(`.${this.#L.MENU} > ul > .${this.#L.MENU_BRANCH}`);if(this.#v.levels.forEach((e=>{const t=e;t.style.removeProperty("top"),t.style.removeProperty("height")})),s.forEach((e=>{e.classList.remove(this.#L.FILTERED)})),0===e.length)return this.#v.dd.classList.remove(this.#L.MENU_FILTERED),l.forEach((e=>{const t=e;t.firstElementChild.disabled=!1,t.classList.remove(this.#L.FILTERED)})),void this.correctRightColumnPositionAndHeight("0");this.setEngaged(0),this.#v.dd.classList.add(this.#L.MENU_FILTERED),l.forEach((e=>{const t=e;t.firstElementChild.disabled=!0,t.classList.remove(this.#L.FILTERED)})),i.forEach(((s,i)=>{const[l]=[...t].filter((e=>e.getAttribute(this.#L.ID_ATTRIBUTE)===s)),n=l.querySelectorAll(`:scope >.${this.#L.MENU_LEAF}`);e[i].leaves.forEach((e=>n[e.index].classList.add(this.#L.FILTERED)))})),l.forEach((e=>{if(0===e.querySelectorAll(`.${this.#L.MENU_LEAF}:not(.${this.#L.FILTERED})`).length){e.classList.add(this.#L.FILTERED)}}))}setHeader(e,t){this.#v.header.children[1].replaceWith(this.#p.createElement("div")),null!==e?(this.#v.header.firstElementChild.replaceWith(e),null!==t&&this.#v.header.children[1].replaceWith(t)):this.#v.header.firstElementChild.replaceWith(this.#p.createElement("div"))}setHeaderBacknav(e){this.#v.header.classList.remove(this.#L.WITH_BACKLINK_TWO_COL),this.#v.header.classList.remove(this.#L.WITH_BACKLINK_ONE_COL),0!==e&&(e>1&&this.#v.header.classList.add(this.#L.WITH_BACKLINK_TWO_COL),this.#v.header.classList.add(this.#L.WITH_BACKLINK_ONE_COL))}correctRightColumnPositionAndHeight(e){let t=this.#v.levels[e];const s=this.#v.dd.querySelector(`.${this.#L.MENU}`),i=this.#v.dd.querySelector(`.${this.#L.MENU}`).offsetHeight;if(0!==i)this.#v.levels.forEach((e=>{const t=e;t.style.removeProperty("top"),t.style.removeProperty("height")})),"0"===e&&(t=t.querySelector(`:scope > .${this.#L.MENU_BRANCH} > ul`)),0!==t.offsetHeight&&(t.style.top=`-${t.offsetTop}px`,t.style.height=`${i}px`);else{const t=new this.#T((i=>{i[0].target.offsetHeight>0&&(this.correctRightColumnPositionAndHeight(e),t.unobserve(s))}));t.observe(s)}}}s.UI=s.UI||{},s.UI.menu=s.UI.menu||{},s.UI.menu.drilldown=new class{#C=[];#p;#T;#N;#R;constructor(e,t,s,i){this.#N=e,this.#T=t,this.#p=s,this.#R=i}init(e,t,s){if(void 0!==this.#C[e])throw new Error(`Drilldown with id '${e}' has already been initialized.`);null!==this.#p.getElementById(e)&&(this.#C[e]=new i(this.#N,this.#p,new l(new this.#R.Utilities.CookieStorage(s)),new n,new a(this.#p,this.#T,e),t))}getInstance(e){return void 0!==this.#C[e]?this.#C[e]:null}}(new class{#S;constructor(e){this.#S=e}on(e,t,s){this.#S(e).on(t,s)}off(e,t,s){this.#S(e).off(t,s)}}(t),e.defaultView.ResizeObserver,e,s)}(document,$,il); +!function(e,t,s){"use strict";class i{#e=new Set;#t;#s;#i;#l;constructor(e,t,s,i,l,r){this.#t=s,this.#s=i,this.#i=l,this.#l=r,e.on(t,this.#l,(()=>{this.#r()})),this.#i.maybeAddFilterHandler((e=>{"Tab"===e.key||"Shift"===e.key||e.isComposing||this.#n(e)})),this.parseLevels(),this.engageLevel(this.#t.read())}parseLevels(){this.#i.parseLevel(((e,t,s,i,l)=>this.#s.addLevel(e,t,s,i,l)),((e,t)=>this.#s.buildLeaf(e,t)),(e=>{this.engageLevel(e)}))}removeEngageListener(e){this.#e.has(e)&&this.#e.delete(e)}addEngageListener(e){this.#e.has(e)||this.#e.add(e)}getBackSignal(){return this.#l}engageLevel(e){this.#s.engageLevel(e),this.#a(),this.#e.forEach((t=>{t(e)}))}getParentLevel(){return this.#s.getCurrent()?.parent??null}getCurrentLevel(){return this.#s.getCurrent().id}#n(e){this.#s.engageLevel(0),this.#s.filter(e),this.#i.setFiltered(this.#s.getFiltered()),e.target.focus()}#r(){this.#s.upLevel(),this.engageLevel(this.#s.getCurrent().id)}#a(){const e=this.#s.getCurrent(),t=this.#s.getParent();let s=2;null===e.parent?s=0:"0"===e.parent&&(s=1),this.#i.setEngaged(e.id),this.#t.store(e.id),this.#i.setHeader(e.headerDisplayElement,t.headerDisplayElement),this.#i.setHeaderBacknav(s),this.#i.correctRightColumnPositionAndHeight(e.id)}}class l{#d="level_id";#h;constructor(e){this.#h=e}#c(){return this.#h}read(){return this.#h.items[this.#d]??"0"}store(e){this.#h.add(this.#d,e),this.#h.store()}}class r{#o={id:null,parent:null,engaged:!1,headerDisplayElement:"",leaves:[]};#E={index:null,text:null,filtered:!1};#u=[];#g(e,t,s,i){const l={...this.#o};return l.id=e,l.parent=s,l.headerDisplayElement=t,l.leaves=i,l}buildLeaf(e,t){const s={...this.#E};return s.index=e,s.text=t,s}addLevel(e,t,s,i=null){let l=i;if(null===l){l=this.#u.length.toString();const i=this.#g(l,e,t,s);this.#u[i.id]=i}else this.#u[l].leaves=s;return this.#u[l]}engageLevel(e){this.#u.forEach((t=>{t.engaged=t.id===e}))}getLevel(e){const t=this.#u.find((t=>t.id===e));return t||null}getCurrent(){const e=this.#u.find((e=>e.engaged));return void 0!==e?e:this.#u[0]}getParent(){const e=this.getCurrent();return e.parent?this.getLevel(e.parent):{}}upLevel(){const e=this.getCurrent();e.parent&&this.engageLevel(this.getLevel(e.parent).id)}#m(e){null!==e&&0!==e||(this.#u[e].filtered=!1,null!==this.#u[e].parent&&0!==this.#u[e].parent&&this.#m(this.#u[e].parent))}filter(e){const t=e.target.value.toLowerCase();this.#u.forEach((e=>{e.leaves.forEach((e=>{const s=e;""!==t?!1!==s.text.toLowerCase().includes(t)?s.filtered=!1:s.filtered=!0:s.filtered=!1}))}))}getFiltered(){const e=[];return this.#u.forEach((t=>{const s=t.leaves.filter((e=>e.filtered));if(s.length>0){const i=this.#g(t.id,t.headerDisplayElement,t.parent,[...s]);e.push(i)}})),e}}function n(e,t){for(let s=0;s<e.length;s+=1)t(e[s],s)}class a{#L={DRILLDOWN:"c-drilldown",MENU:"c-drilldown__menu",MENU_FILTERED:"c-drilldown--filtered",HEADER_ELEMENT:"c-drilldown__menulevel--trigger",MENU_BRANCH:"c-drilldown__branch",MENU_LEAF:"c-drilldown__leaf",FILTER:"c-drilldown__filter",ACTIVE:"c-drilldown__menulevel--engaged",ACTIVE_ITEM:"c-drilldown__menuitem--engaged",ACTIVE_PARENT:"c-drilldown__menulevel--engagedparent",FILTERED:"c-drilldown__menuitem--filtered",WITH_BACKLINK_ONE_COL:"c-drilldown__header--showbacknav",WITH_BACKLINK_TWO_COL:"c-drilldown__header--showbacknavtwocol",HEADER_TAG:"header",LIST_TAG:"ul",LIST_ELEMENT_TAG:"li",ID_ATTRIBUTE:"data-ddindex"};#v={dd:null,header:null,levels:[]};#p;#T;constructor(e,t,s){this.#p=e,this.#T=t,this.#v.dd=e.getElementById(s),[this.#v.header]=this.#v.dd.getElementsByTagName(this.#L.HEADER_TAG)}#_(){return this.#v.dd.querySelector(`.${this.#L.MENU}`)}maybeAddFilterHandler(e){this.#v.header.querySelector(`.${this.#L.FILTER} > input`)?.addEventListener("keyup",e)}parseLevel(e,t,s){n(this.#_().querySelectorAll(this.#L.LIST_TAG),(i=>{const l=i.getAttribute(this.#L.ID_ATTRIBUTE),r=e(this.#f(i),this.#I(i),this.#A(i,t),l);null===l&&(this.#y(i,r.id),this.registerHandler(i,s,r.id),this.#v.levels[r.id]=i)}))}#y(e,t){e.setAttribute(this.#L.ID_ATTRIBUTE,t)}#f(e){const t=e.parentElement.querySelector(`:scope > .${this.#L.HEADER_ELEMENT}`);if(null===t)return null;let s=null;return s=this.#p.createElement("h2"),s.textContent=t.innerText,s}#I(e){return e.parentElement.parentElement.getAttribute(this.#L.ID_ATTRIBUTE)}#A(e,t){const s=e.querySelectorAll(`:scope >.${this.#L.MENU_LEAF}`),i=[];return n(s,((e,s)=>{i.push(t(s,e.firstElementChild.innerText))})),i}registerHandler(e,t,s){const i=e.parentElement.querySelector(`:scope > .${this.#L.HEADER_ELEMENT}`);null!==i&&i.addEventListener("click",(()=>{t(s)}))}setEngaged(e){this.#v.dd.querySelector(`.${this.#L.ACTIVE}`)?.classList.remove(`${this.#L.ACTIVE}`),this.#v.dd.querySelector(`.${this.#L.ACTIVE_ITEM}`)?.classList.remove(`${this.#L.ACTIVE_ITEM}`),this.#v.dd.querySelector(`.${this.#L.ACTIVE_PARENT}`)?.classList.remove(`${this.#L.ACTIVE_PARENT}`);const t=this.#v.levels[e];t.classList.add(this.#L.ACTIVE);const s=t.parentElement.parentElement;"UL"===s.nodeName?(t.parentElement.classList.add(this.#L.ACTIVE_ITEM),s.classList.add(this.#L.ACTIVE_PARENT)):t.classList.add(this.#L.ACTIVE_PARENT);const i=this.#v.levels[e].querySelector(":scope > li")?.firstElementChild;i?.focus()}setFiltered(e){const t=this.#v.dd.querySelectorAll(`${this.#L.LIST_TAG}`),s=this.#v.dd.querySelectorAll(`.${this.#L.MENU_LEAF}`),i=e.map((e=>e.id)),l=this.#v.dd.querySelectorAll(`.${this.#L.MENU} > ul > .${this.#L.MENU_BRANCH}`);if(this.#v.levels.forEach((e=>{const t=e;t.style.removeProperty("top"),t.style.removeProperty("height")})),s.forEach((e=>{e.classList.remove(this.#L.FILTERED)})),0===e.length)return this.#v.dd.classList.remove(this.#L.MENU_FILTERED),l.forEach((e=>{const t=e;t.firstElementChild.disabled=!1,t.classList.remove(this.#L.FILTERED)})),void this.correctRightColumnPositionAndHeight("0");this.setEngaged(0),this.#v.dd.classList.add(this.#L.MENU_FILTERED),l.forEach((e=>{const t=e;t.firstElementChild.disabled=!0,t.classList.remove(this.#L.FILTERED)})),i.forEach(((s,i)=>{const[l]=[...t].filter((e=>e.getAttribute(this.#L.ID_ATTRIBUTE)===s)),r=l.querySelectorAll(`:scope >.${this.#L.MENU_LEAF}`);e[i].leaves.forEach((e=>r[e.index].classList.add(this.#L.FILTERED)))})),l.forEach((e=>{if(0===e.querySelectorAll(`.${this.#L.MENU_LEAF}:not(.${this.#L.FILTERED})`).length){e.classList.add(this.#L.FILTERED)}}))}setHeader(e,t){this.#v.header.children[1].replaceWith(this.#p.createElement("div")),null!==e?(this.#v.header.firstElementChild.replaceWith(e),null!==t&&this.#v.header.children[1].replaceWith(t)):this.#v.header.firstElementChild.replaceWith(this.#p.createElement("div"))}setHeaderBacknav(e){this.#v.header.classList.remove(this.#L.WITH_BACKLINK_TWO_COL),this.#v.header.classList.remove(this.#L.WITH_BACKLINK_ONE_COL),0!==e&&(e>1&&this.#v.header.classList.add(this.#L.WITH_BACKLINK_TWO_COL),this.#v.header.classList.add(this.#L.WITH_BACKLINK_ONE_COL))}correctRightColumnPositionAndHeight(e){let t=this.#v.levels[e];const s=this.#v.dd.querySelector(`.${this.#L.MENU}`),i=this.#v.dd.querySelector(`.${this.#L.MENU}`).offsetHeight;if(0!==i)this.#v.levels.forEach((e=>{const t=e;t.style.removeProperty("top"),t.style.removeProperty("height")})),"0"===e&&(t=t.querySelector(`:scope > .${this.#L.MENU_BRANCH} > ul`)),0!==t.offsetHeight&&(t.style.top=`-${t.offsetTop}px`,t.style.height=`${i}px`);else{const t=new this.#T((i=>{i[0].target.offsetHeight>0&&(this.correctRightColumnPositionAndHeight(e),t.unobserve(s))}));t.observe(s)}}}s.UI=s.UI||{},s.UI.menu=s.UI.menu||{},s.UI.menu.drilldown=new class{#C=[];#p;#T;#N;#R;constructor(e,t,s,i){this.#N=e,this.#T=t,this.#p=s,this.#R=i}init(e,t,s){if(void 0!==this.#C[e])throw new Error(`Drilldown with id '${e}' has already been initialized.`);null!==this.#p.getElementById(e)&&(this.#C[e]=new i(this.#N,this.#p,new l(new this.#R.Utilities.CookieStorage(s)),new r,new a(this.#p,this.#T,e),t))}getInstance(e){return void 0!==this.#C[e]?this.#C[e]:null}}(new class{#S;constructor(e){this.#S=e}on(e,t,s){this.#S(e).on(t,s)}off(e,t,s){this.#S(e).off(t,s)}}(t),e.defaultView.ResizeObserver,e,s)}(document,$,il); diff --git a/components/ILIAS/UI/resources/js/Menu/src/drilldown.main.js b/components/ILIAS/UI/resources/js/Menu/src/drilldown.main.js index 991084bdfa17..84394deb992f 100755 --- a/components/ILIAS/UI/resources/js/Menu/src/drilldown.main.js +++ b/components/ILIAS/UI/resources/js/Menu/src/drilldown.main.js @@ -56,7 +56,7 @@ export default class Drilldown { jqueryEventListener.on(document, this.#backSignal, () => { this.#upLevel(); }); this.#mapping.maybeAddFilterHandler( (e) => { - if (e.key !== 'Tab' && e.key !== 'Shift') { + if (e.key !== 'Tab' && e.key !== 'Shift' && !e.isComposing) { this.#filter(e); } }, @@ -115,6 +115,20 @@ export default class Drilldown { }); } + /** + * @returns {string|number|null} + */ + getParentLevel() { + return this.#model.getCurrent()?.parent ?? null; + } + + /** + * @returns {string|number} + */ + getCurrentLevel() { + return this.#model.getCurrent().id; + } + /** * @param {Event} e * @returns {void} diff --git a/components/ILIAS/UI/src/Component/Input/Field/Factory.php b/components/ILIAS/UI/src/Component/Input/Field/Factory.php index 8f027889af57..3c9c4294d376 100755 --- a/components/ILIAS/UI/src/Component/Input/Field/Factory.php +++ b/components/ILIAS/UI/src/Component/Input/Field/Factory.php @@ -293,6 +293,9 @@ public function checkbox(string $label, ?string $byline = null): Checkbox; * A Tag Input MUST NOT be used when a User has to choose from a finite list of options * which can't be extended by users Input, a Multi Select MUST be used in this case * 5: The tags provided SHOULD NOT have long titles (50 characters). + * 6: > + * If withoutStripTags is set, the consumer MUST make sure the value + * is proberly sanitized before outputing it. * * --- * @param string $label diff --git a/components/ILIAS/UI/src/Component/Input/Field/Node/Factory.php b/components/ILIAS/UI/src/Component/Input/Field/Node/Factory.php index 9c3e0a5a826e..4838ec6afd00 100644 --- a/components/ILIAS/UI/src/Component/Input/Field/Node/Factory.php +++ b/components/ILIAS/UI/src/Component/Input/Field/Node/Factory.php @@ -44,14 +44,14 @@ interface Factory * Icons SHOULD reflect the kind of data a node represents as closely as possible. * If there is only one kind of data, an icon SHOULD NOT be provided. * --- - * @param string|int $id + * @param array<string|int> $full_node_path (root to node path (ASC)) * @param string $name * @param \ILIAS\UI\Component\Input\Field\Node\Node $children * @param \ILIAS\UI\Component\Symbol\Glyph\Glyph|null $icon * @return \ILIAS\UI\Component\Input\Field\Node\Node */ public function branch( - string|int $id, + array $full_node_path, string $name, ?Icon $icon = null, Node ...$children, @@ -77,12 +77,12 @@ public function branch( * If there is only one kind of data, an icon SHOULD NOT be provided. * --- * @param \ILIAS\Data\URI $render_url - * @param string|int $id + * @param array<string|int> $full_node_path (root to node path (ASC)) * @param string $name * @param \ILIAS\UI\Component\Symbol\Glyph\Glyph|null $icon * @return \ILIAS\UI\Component\Input\Field\Node\Async */ - public function async(URI $render_url, string|int $id, string $name, ?Icon $icon = null): Async; + public function async(URI $render_url, array $full_node_path, string $name, ?Icon $icon = null): Async; /** * --- @@ -103,10 +103,10 @@ public function async(URI $render_url, string|int $id, string $name, ?Icon $icon * Icons SHOULD reflect the kind of data a node represents as closely as possible. * If there is only one kind of data, an icon SHOULD NOT be provided. * --- - * @param string|int $id + * @param array<string|int> $full_node_path (root to node path (ASC)) * @param string $name * @param \ILIAS\UI\Component\Symbol\Glyph\Glyph|null $icon * @return \ILIAS\UI\Component\Input\Field\Node\Leaf */ - public function leaf(string|int $id, string $name, ?Icon $icon = null): Leaf; + public function leaf(array $full_node_path, string $name, ?Icon $icon = null): Leaf; } diff --git a/components/ILIAS/UI/src/Component/Input/Field/Node/Node.php b/components/ILIAS/UI/src/Component/Input/Field/Node/Node.php index 965d552f60eb..d1ec7d162b49 100644 --- a/components/ILIAS/UI/src/Component/Input/Field/Node/Node.php +++ b/components/ILIAS/UI/src/Component/Input/Field/Node/Node.php @@ -25,4 +25,9 @@ */ interface Node extends Component { + /** + * Returns the unique identifier of this Node. A Node may be passed between + * components or other layers, so they need a way to identify them. + */ + public function getId(): string|int; } diff --git a/components/ILIAS/UI/src/Component/Input/Field/Node/NodeRetrieval.php b/components/ILIAS/UI/src/Component/Input/Field/Node/NodeRetrieval.php index 681e4f1d6da3..413c74c36e3f 100644 --- a/components/ILIAS/UI/src/Component/Input/Field/Node/NodeRetrieval.php +++ b/components/ILIAS/UI/src/Component/Input/Field/Node/NodeRetrieval.php @@ -26,7 +26,7 @@ interface NodeRetrieval { /** - * This method will be called by the tree select input and multi tree select input + * This method will be called by the tree select input and tree multi select input * to generate the tree which is displayed on the client. * * Parts of the tree can be rendered asynchronously, by generating an @see Async node, @@ -36,11 +36,20 @@ interface NodeRetrieval * can recursively continue. Please generate child-nodes during this process by using an * instance of this retrieval and provide the appropriate $parent_id parameter. * + * When this method is provided with a $sync_node_id_whitelist by the UI framework, you + * MUST generate a complete path from the root to each node (id) in the whitelist. The + * whitelist is derived from selected node-ids and already contains every node-id on the + * path leading to a selected node. You can therefore treat it as a "max-depth-whitelist" + * while building the tree. At every level of these paths all sibling nodes must be included. + * Sibling branches that are not part of any path MAY be represented as an @see Async node. + * + * @param array<string|int> $sync_node_id_whitelist * @return \Generator<Node> */ public function getNodes( NodeFactory $node_factory, IconFactory $icon_factory, + array $sync_node_id_whitelist = [], ?string $parent_id = null, ): \Generator; diff --git a/components/ILIAS/UI/src/Component/Input/Field/Tag.php b/components/ILIAS/UI/src/Component/Input/Field/Tag.php index ddf276ae2689..368dd8541674 100755 --- a/components/ILIAS/UI/src/Component/Input/Field/Tag.php +++ b/components/ILIAS/UI/src/Component/Input/Field/Tag.php @@ -70,6 +70,11 @@ public function withMaxTags(int $max_tags): self; */ public function withAsyncAutocomplete(URLBuilder $autocomplete_endpoint, URLBuilderToken $term_token): self; + /** + * Disable stripping tags from user input. + */ + public function withoutStripTags(): self; + // Events public function withAdditionalOnTagAdded(Signal $signal): self; diff --git a/components/ILIAS/UI/src/Implementation/Component/Button/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Button/Renderer.php index 13388a37a685..9e2457f2f9bf 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Button/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Button/Renderer.php @@ -37,6 +37,9 @@ class Renderer extends AbstractComponentRenderer */ public function render(Component\Component $component, RendererInterface $default_renderer): string { + if ($component instanceof Component\Triggerer) { + $component = $this->addTriggererOnLoadCode($component); + } if ($component instanceof Component\Button\Close) { return $this->renderClose($component); } elseif ($component instanceof Component\Button\Minimize) { diff --git a/components/ILIAS/UI/src/Implementation/Component/Card/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Card/Renderer.php index 695a3cd114a5..ba826fa1c131 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Card/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Card/Renderer.php @@ -39,6 +39,9 @@ public function render(Component\Component $component, RendererInterface $defaul $this->cannotHandleComponent($component); } + /** @var $component Component\Card\Card */ + $component = $this->addTriggererOnLoadCode($component); + $tpl = $this->getTemplate("tpl.card.html", true, true); $title = $component->getTitle(); diff --git a/components/ILIAS/UI/src/Implementation/Component/Dropdown/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Dropdown/Renderer.php index c98d6fa73cdf..1a2adae90013 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Dropdown/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Dropdown/Renderer.php @@ -34,6 +34,9 @@ class Renderer extends AbstractComponentRenderer */ public function render(Component\Component $component, RendererInterface $default_renderer): string { + if ($component instanceof Component\Triggerer) { + $component = $this->addTriggererOnLoadCode($component); + } if ($component instanceof Component\Dropdown\Dropdown) { return $this->renderDropdown($component, $default_renderer); } diff --git a/components/ILIAS/UI/src/Implementation/Component/Dropzone/File/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Dropzone/File/Renderer.php index c6340601a905..d339ead8b166 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Dropzone/File/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Dropzone/File/Renderer.php @@ -37,6 +37,9 @@ class Renderer extends AbstractComponentRenderer { public function render(Component $component, RenderInterface $default_renderer): string { + if ($component instanceof \ILIAS\UI\Component\Triggerer) { + $component = $this->addTriggererOnLoadCode($component); + } if ($component instanceof \ILIAS\UI\Component\Dropzone\File\Wrapper) { return $this->renderWrapper($component, $default_renderer); } diff --git a/components/ILIAS/UI/src/Implementation/Component/Image/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Image/Renderer.php index cf606d48c22f..11b7f119c0ba 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Image/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Image/Renderer.php @@ -40,6 +40,9 @@ public function render(Component\Component $component, RendererInterface $defaul $this->cannotHandleComponent($component); } + /** @var $component Component\Image\Image */ + $component = $this->addTriggererOnLoadCode($component); + $tpl = $this->getTemplate("tpl.image.html", true, true); if (($sources = $component->getAdditionalHighResSources()) !== []) { diff --git a/components/ILIAS/UI/src/Implementation/Component/Input/Container/Form/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Input/Container/Form/Renderer.php index 5871981dfe04..0f3a5194229e 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Input/Container/Form/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Input/Container/Form/Renderer.php @@ -52,11 +52,6 @@ protected function renderStandard(Form\Standard $component, RendererInterface $d $additional_form_actions = $component->getAdditionalFormActions(); foreach ($additional_form_actions as $action => $label) { - $tpl->setCurrentBlock('with_additional_form_action_top'); - $tpl->setVariable('ACTION_TOP', $action); - $tpl->setVariable('ACTION_LABEL_TOP', $label); - $tpl->parseCurrentBlock(); - $tpl->setCurrentBlock('with_additional_form_action_bottom'); $tpl->setVariable('ACTION_BOTTOM', $action); $tpl->setVariable('ACTION_LABEL_BOTTOM', $label); @@ -74,7 +69,6 @@ protected function renderStandard(Form\Standard $component, RendererInterface $d "" ); - $tpl->setVariable("BUTTONS_TOP", $default_renderer->render($main_submit_button)); $tpl->setVariable("BUTTONS_BOTTOM", $default_renderer->render($main_submit_button)); $tpl->setVariable("INPUTS", $default_renderer->render($component->getInputGroup())); diff --git a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Factory.php b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Factory.php index 4d7170a879fe..71fed74d932c 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Factory.php +++ b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Factory.php @@ -53,21 +53,25 @@ public function numeric(string $label, ?string $byline = null): Numeric public function group(array $inputs, string $label = '', ?string $byline = null): Group { + $this->lng->loadLanguageModule('ui'); return new Group($this->data_factory, $this->refinery, $this->lng, $inputs, $label, $byline); } public function optionalGroup(array $inputs, string $label, ?string $byline = null): OptionalGroup { + $this->lng->loadLanguageModule('ui'); return new OptionalGroup($this->data_factory, $this->refinery, $this->lng, $inputs, $label, $byline); } public function switchableGroup(array $inputs, string $label, ?string $byline = null): SwitchableGroup { + $this->lng->loadLanguageModule('ui'); return new SwitchableGroup($this->data_factory, $this->refinery, $this->lng, $inputs, $label, $byline); } public function section(array $inputs, string $label, ?string $byline = null): Section { + $this->lng->loadLanguageModule('ui'); return new Section($this->data_factory, $this->refinery, $this->lng, $inputs, $label, $byline); } @@ -113,6 +117,7 @@ public function dateTime(string $label, ?string $byline = null): DateTime public function duration(string $label, ?string $byline = null): Duration { + $this->lng->loadLanguageModule('ui'); return new Duration($this->data_factory, $this->refinery, $this->lng, $this, $label, $byline); } @@ -122,6 +127,7 @@ public function file( ?string $byline = null, ?FormInput $metadata_input = null ): File { + $this->lng->loadLanguageModule('ui'); return new File( $this->lng, $this->data_factory, @@ -142,6 +148,7 @@ public function image( ?string $byline = null, ?FormInput $metadata_input = null ): Image { + $this->lng->loadLanguageModule('ui'); return new Image( $this->lng, $this->data_factory, @@ -163,6 +170,7 @@ public function url(string $label, ?string $byline = null): Url public function link(string $label, ?string $byline = null): Link { + $this->lng->loadLanguageModule('ui'); return new Link($this->data_factory, $this->refinery, $this->lng, $this, $label, $byline); } @@ -191,6 +199,7 @@ public function treeSelect( string $label, ?string $byline = null ): TreeSelect { + $this->lng->loadLanguageModule('ui'); return new TreeSelect( $this->lng, $this->data_factory, @@ -207,6 +216,7 @@ public function treeMultiSelect( string $label, ?string $byline = null, ): TreeMultiSelect { + $this->lng->loadLanguageModule('ui'); return new TreeMultiSelect( $this->lng, $this->data_factory, diff --git a/components/ILIAS/UI/src/Implementation/Component/Input/Field/FilterContextRenderer.php b/components/ILIAS/UI/src/Implementation/Component/Input/Field/FilterContextRenderer.php index 2716b06e1085..47295fd44c77 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Input/Field/FilterContextRenderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Input/Field/FilterContextRenderer.php @@ -42,6 +42,9 @@ class FilterContextRenderer extends Renderer public function render(Component\Component $component, RendererInterface $default_renderer): string { + if ($component instanceof Component\Triggerer) { + $component = $this->addTriggererOnLoadCode($component); + } if ($component instanceof FilterInput) { $component = $this->setSignals($component); } diff --git a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Async.php b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Async.php index 9302f1088080..5e10f2693551 100644 --- a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Async.php +++ b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Async.php @@ -27,13 +27,14 @@ */ class Async extends Node implements C\Input\Field\Node\Async { + /** @inheritDoc */ public function __construct( protected URI $render_url, - int|string $id, + array $full_node_path, string $name, ?C\Symbol\Icon\Icon $icon ) { - parent::__construct($id, $name, $icon); + parent::__construct($full_node_path, $name, $icon); } public function getRenderUrl(): URI diff --git a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Branch.php b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Branch.php index 1276cea963a8..b8a355d4ef15 100644 --- a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Branch.php +++ b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Branch.php @@ -27,15 +27,16 @@ class Branch extends Node implements C\Input\Field\Node\Branch { /** + * @inheritDoc * @param C\Input\Field\Node\Node[] $children */ public function __construct( - int|string $id, + array $full_node_path, string $name, ?C\Symbol\Icon\Icon $icon, protected array $children, ) { - parent::__construct($id, $name, $icon); + parent::__construct($full_node_path, $name, $icon); } /** diff --git a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Factory.php b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Factory.php index 633ec51c15e8..ac6f4fe57752 100644 --- a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Factory.php +++ b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Factory.php @@ -29,21 +29,21 @@ class Factory implements Field\Node\Factory { public function branch( - string|int $id, + array $full_node_path, string $name, ?Symbol\Icon\Icon $icon = null, Field\Node\Node ...$children ): Branch { - return new Branch($id, $name, $icon, $children); + return new Branch($full_node_path, $name, $icon, $children); } - public function async(URI $render_url, string|int $id, string $name, ?Symbol\Icon\Icon $icon = null): Async + public function async(URI $render_url, array $full_node_path, string $name, ?Symbol\Icon\Icon $icon = null): Async { - return new Async($render_url, $id, $name, $icon); + return new Async($render_url, $full_node_path, $name, $icon); } - public function leaf(string|int $id, string $name, ?Symbol\Icon\Icon $icon = null): Leaf + public function leaf(array $full_node_path, string $name, ?Symbol\Icon\Icon $icon = null): Leaf { - return new Leaf($id, $name, $icon); + return new Leaf($full_node_path, $name, $icon); } } diff --git a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Node.php b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Node.php index 4fa86cb62e14..2b2458272472 100644 --- a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Node.php +++ b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Node/Node.php @@ -14,7 +14,7 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning */ - + declare(strict_types=1); namespace ILIAS\UI\Implementation\Component\Input\Field\Node; @@ -29,21 +29,42 @@ abstract class Node implements C\Input\Field\Node\Node { use ComponentHelper; + protected string|int $id; + + /** @var array<string|int> */ + protected array $parent_ids; + + /** @param array<string|int> $full_node_path */ public function __construct( - protected string|int $id, + protected array $full_node_path, protected string $name, protected ?C\Symbol\Icon\Icon $icon, ) { + if (empty($full_node_path)) { + throw new \InvalidArgumentException("\$full_node_path MUST contain at least one node-id."); + } + $this->checkArgListElements('full_node_path', $full_node_path, ['string', 'int']); + $this->id = array_pop($full_node_path); + $this->parent_ids = $full_node_path; } - /** - * Returns the unique identifier of this node. - */ public function getId(): string|int { return $this->id; } + /** @return array<string|int> */ + public function getFullPath(): array + { + return $this->full_node_path; + } + + /** @return array<string|int> */ + public function getParentIds(): array + { + return $this->parent_ids; + } + /** * Returns the display value of this node. */ diff --git a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Renderer.php index 8f034dc1d0b3..7c731d09bfd6 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Renderer.php @@ -87,6 +87,10 @@ class Renderer extends AbstractComponentRenderer */ public function render(Component\Component $component, RendererInterface $default_renderer): string { + if ($component instanceof Component\Triggerer) { + $component = $this->addTriggererOnLoadCode($component); + } + $component = $this->setSignals($component); switch (true) { @@ -907,7 +911,9 @@ protected function renderFileField(F\File $input, RendererInterface $default_ren // display the action button (to choose files). $template->setVariable('ACTION_BUTTON', $default_renderer->render( $this->getUIFactory()->button()->shy( - $this->txt('select_files_from_computer'), + $input->getMaxFiles() <= 1 + ? $this->txt('select_file_from_computer') + : $this->txt('select_files_from_computer'), '#' ) )); @@ -967,12 +973,12 @@ protected function setSignals(F\FormInput $input) if ($signals !== null) { $signals = json_encode($signals); - $input = $input->withAdditionalOnLoadCode(function ($id) use ($signals) { + $input = $input->withAdditionalOnLoadCode($input->getUpdateOnLoadCode()); + + $input = $input->withAdditionalOnLoadCode(static function ($id) use ($signals) { $code = "il.UI.input.setSignalsForId('$id', $signals);"; return $code; }); - - $input = $input->withAdditionalOnLoadCode($input->getUpdateOnLoadCode()); } return $input; } @@ -1203,23 +1209,6 @@ protected function prepareTreeSelectTemplate( $this->getUIFactory()->breadcrumbs([]) )); - $node_factory = $this->getUIFactory()->input()->field()->node(); - $node_generator = $component->getNodeRetrieval()->getNodes( - $node_factory, - $this->getUIFactory()->symbol()->icon(), - ); - - $nodes = []; - foreach ($node_generator as $node) { - // check against public interface, will be delegated to rendering chain. - $this->checkArgInstanceOf('node', $node, Component\Input\Field\Node\Node::class); - $nodes[] = $node; - } - - $template->setVariable('DRILLDOWN', $default_renderer->render( - $this->getUIFactory()->menu()->drilldown($component->getLabel(), $nodes) - )); - /** @var $dynamic_inputs_generator \Generator<FormInput> */ $dynamic_inputs_generator = (static fn() => yield from $component->getGeneratedDynamicInputs())(); @@ -1230,6 +1219,7 @@ protected function prepareTreeSelectTemplate( ); $lockstep_iterator = $this->iterateGeneratorsInLockstep($leaf_generator, $dynamic_inputs_generator); + $sync_node_id_whitelst = []; foreach ($lockstep_iterator as [$leaf, $dynamic_input]) { // check against internal interface, will not be delegated to rendering chain. @@ -1247,8 +1237,32 @@ protected function prepareTreeSelectTemplate( $template->setCurrentBlock('with_value'); $template->setVariable('VALUE', $value_template->get('with_value_template')); $template->parseCurrentBlock(); + + foreach ($leaf->getFullPath() as $node_id) { + // deduplicate overlaping node ids by using them as offset + $sync_node_id_whitelst[$node_id] = $node_id; + } } + $node_factory = $this->getUIFactory()->input()->field()->node(); + $node_generator = $component->getNodeRetrieval()->getNodes( + $node_factory, + $this->getUIFactory()->symbol()->icon(), + array_values($sync_node_id_whitelst), + null, + ); + + $nodes = []; + foreach ($node_generator as $node) { + // check against public interface, will be delegated to rendering chain. + $this->checkArgInstanceOf('node', $node, Component\Input\Field\Node\Node::class); + $nodes[] = $node; + } + + $template->setVariable('DRILLDOWN', $default_renderer->render( + $this->getUIFactory()->menu()->drilldown($component->getLabel(), $nodes) + )); + $this->toJS('unselect_node'); $this->toJS('select_node'); diff --git a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Tag.php b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Tag.php index f6f5a442abe3..76cf64fa4f0e 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Input/Field/Tag.php +++ b/components/ILIAS/UI/src/Implementation/Component/Input/Field/Tag.php @@ -34,6 +34,7 @@ use ILIAS\UI\Implementation\Component\Triggerer; use ILIAS\UI\URLBuilder; use ILIAS\UI\URLBuilderToken; +use Generator; /** * Class TagInput @@ -59,6 +60,8 @@ class Tag extends FormInput implements C\Input\Field\Tag protected ?URLBuilder $async_autocomplete_endpoint = null; protected ?URLBuilderToken $async_autocomplete_token = null; + private bool $strip_tags = true; + public function __construct( DataFactory $data_factory, \ILIAS\Refinery\Factory $refinery, @@ -74,14 +77,8 @@ public function __construct( protected function addAdditionalTransformations(): void { - $this->setAdditionalTransformation($this->refinery->string()->splitString(',')); - $this->setAdditionalTransformation($this->refinery->custom()->transformation(function (array $v) { - if (count($v) == 1 && $v[0] === '') { - return []; - } - $array = array_map('rawurldecode', $v); - return array_map('strip_tags', $array); - })); + $map = static fn(string $s): array => array_filter(array_map('rawurldecode', explode(',', $s))); + $this->setAdditionalTransformation($this->refinery->custom()->transformation($map)); } public function getConfiguration(): stdClass @@ -349,4 +346,21 @@ public function getUpdateOnLoadCode(): Closure }); il.UI.input.onFieldUpdate(event, '$id', $('#$id').val());"; } + + public function withoutStripTags(): self + { + $clone = clone $this; + $clone->strip_tags = false; + return $clone; + } + + protected function getOperations(): Generator + { + yield from parent::getOperations(); + if ($this->strip_tags) { + yield $this->refinery->container()->mapValues( + $this->refinery->custom()->transformation(strip_tags(...)) + ); + } + } } diff --git a/components/ILIAS/UI/src/Implementation/Component/Input/ViewControl/Factory.php b/components/ILIAS/UI/src/Implementation/Component/Input/ViewControl/Factory.php index f290ef1bbfb3..ed7755e0e312 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Input/ViewControl/Factory.php +++ b/components/ILIAS/UI/src/Implementation/Component/Input/ViewControl/Factory.php @@ -71,6 +71,7 @@ public function pagination(): Pagination public function group(array $view_controls): Group { + $this->language->loadLanguageModule('ui'); return new Group( $this->data_factory, $this->refinery, diff --git a/components/ILIAS/UI/src/Implementation/Component/Input/ViewControl/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Input/ViewControl/Renderer.php index 87a907a4206e..dc702a5e3f0d 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Input/ViewControl/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Input/ViewControl/Renderer.php @@ -37,6 +37,10 @@ class Renderer extends AbstractComponentRenderer public function render(Component\Component $component, RendererInterface $default_renderer): string { + if ($component instanceof Component\Triggerer) { + $component = $this->addTriggererOnLoadCode($component); + } + switch (true) { case ($component instanceof FieldSelection): return $this->renderFieldSelection($component, $default_renderer); diff --git a/components/ILIAS/UI/src/Implementation/Component/MainControls/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/MainControls/Renderer.php index 76d1623ca97f..abdaa4466ef6 100755 --- a/components/ILIAS/UI/src/Implementation/Component/MainControls/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/MainControls/Renderer.php @@ -313,6 +313,7 @@ protected function renderSystemInfo( switch ($component->getDenotation()) { case Component\MainControls\SystemInfo::DENOTATION_NEUTRAL: case Component\MainControls\SystemInfo::DENOTATION_IMPORTANT: + $tpl->setVariable('ROLE', 'role="status"'); $tpl->setVariable('LIVE', 'aria-live="polite"'); break; case Component\MainControls\SystemInfo::DENOTATION_BREAKING: diff --git a/components/ILIAS/UI/src/Implementation/Component/MainControls/Slate/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/MainControls/Slate/Renderer.php index 7f59e547dc1b..07adfd864bff 100755 --- a/components/ILIAS/UI/src/Implementation/Component/MainControls/Slate/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/MainControls/Slate/Renderer.php @@ -34,6 +34,9 @@ public function render(Component\Component $component, RendererInterface $defaul $this->cannotHandleComponent($component); } + /** @var $component ISlate\slate */ + $component = $this->addTriggererOnLoadCode($component); + switch (true) { case ($component instanceof ISlate\Notification): return $this->renderNotificationSlate($component, $default_renderer); diff --git a/components/ILIAS/UI/src/Implementation/Component/Modal/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Modal/Renderer.php index 7465a35a928a..3f987d347bea 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Modal/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Modal/Renderer.php @@ -44,6 +44,9 @@ public function render(Component\Component $component, RendererInterface $defaul $this->cannotHandleComponent($component); } + /** @var $component Component\Modal\Modal */ + $component = $this->addTriggererOnLoadCode($component); + // If the modal is rendered async, we just create a fake container which will be // replaced by the modal upon successful ajax request if ($component->getAsyncRenderUrl()) { diff --git a/components/ILIAS/UI/src/Implementation/Component/Player/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Player/Renderer.php index ef80eae52335..9489d4788a3e 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Player/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Player/Renderer.php @@ -45,9 +45,6 @@ public function renderAudio(Component\Component $component, RendererInterface $d { $tpl = $this->getTemplate("tpl.audio.html", true, true); - $component = $component->withAdditionalOnLoadCode(function ($id) { - return "$('#$id').mediaelementplayer({stretching: 'responsive'});"; - }); $id = $this->bindJavaScript($component); if ($component->getTranscription() != "") { @@ -75,11 +72,60 @@ public function renderVideo( Component\Component $component, RendererInterface $default_renderer ): string { + if ($this->isVimeo($component)) { + return $this->renderVimeo( + $component, + $default_renderer + ); + } elseif ($this->isYoutube($component)) { + return $this->renderYoutube( + $component, + $default_renderer + ); + } + return $this->renderNative( + $component, + $default_renderer + ); + } + + public function renderVimeo( + Component\Component $component, + RendererInterface $default_renderer + ): string { + + $tpl = $this->getTemplate("tpl.video_vimeo.html", true, true); + + $id = $this->bindJavaScript($component); + + $tpl->setVariable("ID", $id); + $tpl->setVariable("SOURCE", $component->getSource()); + + return $tpl->get(); + } + + public function renderYoutube( + Component\Component $component, + RendererInterface $default_renderer + ): string { + + $tpl = $this->getTemplate("tpl.video_youtube.html", true, true); + + $id = $this->bindJavaScript($component); + + $tpl->setVariable("ID", $id); + $tpl->setVariable("SOURCE", $component->getSource()); + + return $tpl->get(); + } + + public function renderNative( + Component\Component $component, + RendererInterface $default_renderer + ): string { + $tpl = $this->getTemplate("tpl.video.html", true, true); - $component = $component->withAdditionalOnLoadCode(function ($id) { - return "$('#$id').mediaelementplayer();"; - }); $id = $this->bindJavaScript($component); foreach ($component->getSubtitleFiles() as $lang_key => $file) { @@ -101,11 +147,21 @@ public function renderVideo( return $tpl->get(); } - public function registerResources(\ILIAS\UI\Implementation\Render\ResourceRegistry $registry): void - { - parent::registerResources($registry); - $registry->register('./assets/js/mediaelement-and-player.min.js'); - $registry->register('./assets/css/mediaelementplayer.min.css'); - $registry->register('./assets/js/vimeo.min.js'); + protected function isVimeo( + Component\Component $component + ): bool { + if (is_int(strpos($component->getSource(), 'vimeo.com'))) { + return true; + } + return false; + } + + protected function isYoutube( + Component\Component $component + ): bool { + if (is_int(strpos($component->getSource(), 'youtube.com'))) { + return true; + } + return false; } } diff --git a/components/ILIAS/UI/src/Implementation/Component/Progress/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Progress/Renderer.php index 555968e92f90..5721e21fb3ed 100644 --- a/components/ILIAS/UI/src/Implementation/Component/Progress/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Progress/Renderer.php @@ -40,6 +40,9 @@ public function registerResources(ResourceRegistry $registry): void public function render(Component $component, RendererInterface $default_renderer): string { + if ($component instanceof \ILIAS\UI\Component\Triggerer) { + $component = $this->addTriggererOnLoadCode($component); + } if ($component instanceof Bar) { return $this->renderProgressBar($component, $default_renderer); } diff --git a/components/ILIAS/UI/src/Implementation/Component/Symbol/Glyph/GlyphRendererFactory.php b/components/ILIAS/UI/src/Implementation/Component/Symbol/Glyph/GlyphRendererFactory.php index 417c37e3549f..0b8c11008f5b 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Symbol/Glyph/GlyphRendererFactory.php +++ b/components/ILIAS/UI/src/Implementation/Component/Symbol/Glyph/GlyphRendererFactory.php @@ -27,8 +27,10 @@ class GlyphRendererFactory extends Render\DefaultRendererFactory { /** - * components which render glyphs inside an HTML <button> element, where only - * palpable content is allowed. + * components which render glyphs inside an HTML <button> element (or equivalent), + * where only palpable content is allowed (no <a>). + * Any glyph rendered anywhere within these components' subtree will use the + * ButtonContextRenderer. * @see https://html.spec.whatwg.org/#palpable-content */ protected const array USE_BUTTON_CONTEXT_RENDERER_FOR = [ @@ -45,9 +47,24 @@ class GlyphRendererFactory extends Render\DefaultRendererFactory 'RadioFieldInput', ]; + /** + * Components that render glyphs inside an HTML <button> element themselves + * but also contain child components whose glyphs should NOT use the + * ButtonContextRenderer. Only glyphs that are direct children of these + * components (i.e. these components are the immediate parent context) will + * use the ButtonContextRenderer. This prevents false-positives for glyphs + * in nested child components. + */ + protected const array USE_BUTTON_CONTEXT_RENDERER_FOR_DIRECT_CONTEXT = [ + 'StandardFilterContainerInput', + ]; + public function getRendererInContext(Component\Component $component, array $contexts): ComponentRenderer { - if (count(array_intersect(self::USE_BUTTON_CONTEXT_RENDERER_FOR, $contexts)) > 0) { + if ( + $this->isDirectContextMatch($contexts) || + count(array_intersect(self::USE_BUTTON_CONTEXT_RENDERER_FOR, $contexts)) > 0 + ) { return new ButtonContextRenderer( $this->ui_factory, $this->tpl_factory, @@ -70,4 +87,22 @@ public function getRendererInContext(Component\Component $component, array $cont $this->upload_limit_resolver ); } + + /** + * Checks whether the immediate parent context (the component that directly + * renders this glyph) matches one of the DIRECT_CONTEXT components. + * The context array has the current component (glyph) as the last element, + * so the immediate parent is the second-to-last element. + * + * @param string[] $contexts + */ + private function isDirectContextMatch(array $contexts): bool + { + $count = count($contexts); + if ($count < 2) { + return false; + } + $immediate_parent = $contexts[$count - 2]; + return in_array($immediate_parent, self::USE_BUTTON_CONTEXT_RENDERER_FOR_DIRECT_CONTEXT, true); + } } diff --git a/components/ILIAS/UI/src/Implementation/Component/Symbol/Glyph/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Symbol/Glyph/Renderer.php index 278d9a3f5988..83195849394c 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Symbol/Glyph/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Symbol/Glyph/Renderer.php @@ -43,6 +43,9 @@ public function render(Component\Component $component, RendererInterface $defaul $this->cannotHandleComponent($component); } + /** @var $component Component\Symbol\Glyph\Glyph */ + $component = $this->addTriggererOnLoadCode($component); + $tpl_file = $this->getTemplateFilename(); $tpl = $this->getTemplate($tpl_file, true, true); diff --git a/components/ILIAS/UI/src/Implementation/Component/Table/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Table/Renderer.php index 0b2c91768a07..5f11031c401d 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Table/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Table/Renderer.php @@ -204,7 +204,6 @@ public function renderDataTable(Component\Table\Data $component, RendererInterfa $component = $this->registerActions($component); [$component, $view_controls] = $component->applyViewControls( - $component->getAdditionalViewControlData(), $component->getFilter(), $component->getAdditionalParameters() ); diff --git a/components/ILIAS/UI/src/Implementation/Component/Tree/Node/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/Tree/Node/Renderer.php index 7b09d8ee3d60..1c72dbf842ad 100755 --- a/components/ILIAS/UI/src/Implementation/Component/Tree/Node/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/Tree/Node/Renderer.php @@ -38,6 +38,9 @@ public function render(Component\Component $component, RendererInterface $defaul $this->cannotHandleComponent($component); } + /** @var $component Component\Button\Button */ + $component = $this->addTriggererOnLoadCode($component); + $tpl_name = "tpl.node.html"; $tpl = $this->getTemplate($tpl_name, true, true); diff --git a/components/ILIAS/UI/src/Implementation/Component/ViewControl/Renderer.php b/components/ILIAS/UI/src/Implementation/Component/ViewControl/Renderer.php index 06579b16f89c..55d0e7a6f646 100644 --- a/components/ILIAS/UI/src/Implementation/Component/ViewControl/Renderer.php +++ b/components/ILIAS/UI/src/Implementation/Component/ViewControl/Renderer.php @@ -38,6 +38,9 @@ class Renderer extends AbstractComponentRenderer public function render(Component\Component $component, RendererInterface $default_renderer): string { + if ($component instanceof Component\Triggerer) { + $component = $this->addTriggererOnLoadCode($component); + } if ($component instanceof Component\ViewControl\Mode) { return $this->renderMode($component, $default_renderer); } diff --git a/components/ILIAS/UI/src/Implementation/Render/AbstractComponentRenderer.php b/components/ILIAS/UI/src/Implementation/Render/AbstractComponentRenderer.php index 28c3708eb9c9..08cdeba0c471 100755 --- a/components/ILIAS/UI/src/Implementation/Render/AbstractComponentRenderer.php +++ b/components/ILIAS/UI/src/Implementation/Render/AbstractComponentRenderer.php @@ -153,9 +153,6 @@ private function getTemplateRaw(string $path, bool $purge_unfilled_vars, bool $p */ final protected function bindJavaScript(JavaScriptBindable $component): ?string { - if ($component instanceof Triggerer) { - $component = $this->addTriggererOnLoadCode($component); - } return $this->bindOnloadCode($component); } @@ -201,7 +198,7 @@ private function bindOnloadCode(JavaScriptBindable $component): ?string /** * Add onload-code for triggerer. */ - private function addTriggererOnLoadCode(Triggerer $triggerer): JavaScriptBindable + final protected function addTriggererOnLoadCode(Triggerer $triggerer): Triggerer { $triggered_signals = $triggerer->getTriggeredSignals(); if (count($triggered_signals) == 0) { diff --git a/components/ILIAS/UI/src/examples/Input/Field/File/in_form.php b/components/ILIAS/UI/src/examples/Input/Field/File/in_form.php index b205531713b3..47b32ed100c2 100755 --- a/components/ILIAS/UI/src/examples/Input/Field/File/in_form.php +++ b/components/ILIAS/UI/src/examples/Input/Field/File/in_form.php @@ -20,6 +20,8 @@ namespace ILIAS\UI\examples\Input\Field\File; +use ILIAS\UI\URLBuilder; + /** * --- * description: > @@ -44,19 +46,29 @@ function in_form() // Step 0: Declare dependencies global $DIC; $ui = $DIC->ui()->factory(); + $http = $DIC->http(); $renderer = $DIC->ui()->renderer(); $request = $DIC->http()->request(); + $get_request = $http->wrapper()->query(); + $data_factory = new \ILIAS\Data\Factory(); + + $example_uri = $data_factory->uri((string) $http->request()->getUri()); + $url_builder = new URLBuilder($example_uri); + [$process_form_url_builder, $process_form_parameter] = $url_builder->acquireParameter(explode('\\', __NAMESPACE__), "process_single"); // Step 1: Define the input field. // See the implementation of a UploadHandler in components/ILIAS/UI_/classes/class.ilUIDemoFileUploadHandlerGUI.php $file = $ui->input()->field()->file(new \ilUIDemoFileUploadHandlerGUI(), "File Upload", "You can drop your files here"); // Step 2: Define the form and attach the field. - $form = $ui->input()->container()->form()->standard('#', ['file' => $file]); + $form = $ui->input()->container()->form()->standard( + (string) $process_form_url_builder->withParameter($process_form_parameter, '1')->buildURI(), + ['file' => $file] + ); // Step 3: Define some data processing. $result = ''; - if ($request->getMethod() == "POST") { + if ($get_request->has($process_form_parameter->getName())) { $form = $form->withRequest($request); $result = $form->getData(); } diff --git a/components/ILIAS/UI/src/examples/Input/Field/File/multiple.php b/components/ILIAS/UI/src/examples/Input/Field/File/multiple.php index 16fc1f981fe0..3cd787d9264c 100755 --- a/components/ILIAS/UI/src/examples/Input/Field/File/multiple.php +++ b/components/ILIAS/UI/src/examples/Input/Field/File/multiple.php @@ -1,5 +1,20 @@ <?php +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + */ + declare(strict_types=1); namespace ILIAS\UI\examples\Input\Field\File; @@ -29,7 +44,7 @@ function multiple(): string $example_uri = $data_factory->uri((string) $http->request()->getUri()); $url_builder = new URLBuilder($example_uri); - [$process_form_url_builder, $process_form_parameter] = $url_builder->acquireParameter(explode('\\', __NAMESPACE__), "process"); + [$process_form_url_builder, $process_form_parameter] = $url_builder->acquireParameter(explode('\\', __NAMESPACE__), "process_multiple"); $file_input_one = $factory->input()->field()->file(new \ilUIDemoFileUploadHandlerGUI(), "Upload File"); $file_input_two = $factory->input()->field()->file(new \ilUIDemoFileUploadHandlerGUI(), "Upload More"); diff --git a/components/ILIAS/UI/src/examples/Input/Field/TreeMultiSelect/base.php b/components/ILIAS/UI/src/examples/Input/Field/TreeMultiSelect/base.php index cdf16fab94fd..6d913d8490d6 100644 --- a/components/ILIAS/UI/src/examples/Input/Field/TreeMultiSelect/base.php +++ b/components/ILIAS/UI/src/examples/Input/Field/TreeMultiSelect/base.php @@ -1,5 +1,20 @@ <?php +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + */ + declare(strict_types=1); namespace ILIAS\UI\examples\Input\Field\TreeMultiSelect; @@ -57,8 +72,14 @@ function base(): string $example_uri = $data_factory->uri((string) $http->request()->getUri()); $base_url_builder = new URLBuilder($example_uri); - [$node_id_url_builder, $node_id_parameter] = $base_url_builder->acquireParameter(explode('\\', __NAMESPACE__), "node_id"); - [$process_form_url_builder ,$process_form_parameter] = $base_url_builder->acquireParameter(explode('\\', __NAMESPACE__), "process"); + [$node_id_url_builder, $node_id_parameter] = $base_url_builder->acquireParameter( + explode('\\', __NAMESPACE__), + "node_id" + ); + [$process_form_url_builder, $process_form_parameter] = $base_url_builder->acquireParameter( + explode('\\', __NAMESPACE__), + "process" + ); $node_retrieval = new TreeMultiSelectExampleNodeRetrieval($node_id_url_builder, $node_id_parameter); @@ -72,6 +93,7 @@ function base(): string $node_generator = $node_retrieval->getNodes( $factory->input()->field()->node(), $factory->symbol()->icon(), + [], $parent_node_id ); @@ -120,16 +142,20 @@ public function __construct( ) { } - public function getNodes(NodeFactory $node_factory, IconFactory $icon_factory, ?string $parent_id = null): \Generator - { + public function getNodes( + NodeFactory $node_factory, + IconFactory $icon_factory, + array $sync_node_id_whitelist = [], + ?string $parent_id = null + ): \Generator { if (null !== $parent_id) { yield $this->getExampleNodeChildren($node_factory, $parent_id); return; } - yield $node_factory->branch('1', 'branch 1', null, ...$this->getExampleNodeChildren($node_factory, '1')); - yield $node_factory->branch('2', 'branch 2', null, ...$this->getExampleNodeChildren($node_factory, '2')); - yield $node_factory->leaf('3', 'leaf 3'); + yield $node_factory->branch(['1'], 'branch 1', null, ...$this->getExampleNodeChildren($node_factory, '1')); + yield $node_factory->branch(['2'], 'branch 2', null, ...$this->getExampleNodeChildren($node_factory, '2')); + yield $node_factory->leaf(['3'], 'leaf 3'); } public function getNodesAsLeaf( @@ -138,28 +164,50 @@ public function getNodesAsLeaf( array $node_ids, ): \Generator { foreach ($node_ids as $node_id) { - yield $node_factory->leaf($node_id, "dummy leaf node $node_id"); + yield $node_factory->leaf([$node_id], "dummy leaf node $node_id"); } } - protected function getExampleNodeChildren(NodeFactory $node_factory, string|int $parent_id): array + protected function getExampleNodeChildren(NodeFactory $node_factory, string $parent_id): array { return [ - $node_factory->branch("$parent_id.1", "branch $parent_id.1", null, - $node_factory->leaf("$parent_id.1.1", "leaf $parent_id.1.1"), - $node_factory->leaf("$parent_id.1.2", "leaf $parent_id.1.2"), - $node_factory->leaf("$parent_id.1.3", "leaf $parent_id.1.3"), + $node_factory->branch( + $this->getFullNodePath($parent_id, "1"), + "branch $parent_id.1", + null, + $node_factory->leaf($this->getFullNodePath($parent_id, "1.1"), "leaf $parent_id.1.1"), + $node_factory->leaf($this->getFullNodePath($parent_id, "1.2"), "leaf $parent_id.1.2"), + $node_factory->leaf($this->getFullNodePath($parent_id, "1.3"), "leaf $parent_id.1.3"), + ), + $node_factory->branch( + $this->getFullNodePath($parent_id, "2"), + "branch $parent_id.2", + null, + $node_factory->leaf($this->getFullNodePath($parent_id, "2.1"), "leaf $parent_id.2.1"), + $node_factory->leaf($this->getFullNodePath($parent_id, "2.2"), "leaf $parent_id.2.2"), + $node_factory->leaf($this->getFullNodePath($parent_id, "2.3"), "leaf $parent_id.2.3"), ), - $node_factory->branch("$parent_id.2", "branch $parent_id.2", null, - $node_factory->leaf("$parent_id.2.1", "leaf $parent_id.2.1"), - $node_factory->leaf("$parent_id.2.2", "leaf $parent_id.2.2"), - $node_factory->leaf("$parent_id.2.3", "leaf $parent_id.2.3"), + $node_factory->async( + $this->getAsyncNodeRenderUrl("$parent_id.3"), + $this->getFullNodePath($parent_id, "3"), + "async branch $parent_id.3" ), - $node_factory->async($this->getAsyncNodeRenderUrl("$parent_id.3"),"$parent_id.3", "async branch $parent_id.3"), - $node_factory->leaf("$parent_id.4", "leaf $parent_id.4"), + $node_factory->leaf($this->getFullNodePath($parent_id, "4"), "leaf $parent_id.4"), ]; } + /** @return string[] */ + protected function getFullNodePath(string $parent_id, string $child_id): array + { + $parts = explode(".", $parent_id); + $paths = []; + for ($index = 1, $count = count($parts); $index <= $count; $index++) { + $paths[] = implode(".", array_slice($parts, 0, $index)); + } + $paths[] = "{$paths[$count - 1]}.$child_id"; + return $paths; + } + protected function getAsyncNodeRenderUrl(int|string $node_id): URI { return $this->builder->withParameter($this->node_id_parameter, (string) $node_id)->buildURI(); diff --git a/components/ILIAS/UI/src/examples/Input/Field/TreeMultiSelect/with_select_child_nodes.php b/components/ILIAS/UI/src/examples/Input/Field/TreeMultiSelect/with_select_child_nodes.php index 8c4c4582507a..86a83e0b7c61 100644 --- a/components/ILIAS/UI/src/examples/Input/Field/TreeMultiSelect/with_select_child_nodes.php +++ b/components/ILIAS/UI/src/examples/Input/Field/TreeMultiSelect/with_select_child_nodes.php @@ -1,5 +1,20 @@ <?php +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + */ + declare(strict_types=1); namespace ILIAS\UI\examples\Input\Field\TreeMultiSelect; @@ -33,16 +48,24 @@ function with_select_child_nodes(): string public function getNodes( NodeFactory $node_factory, IconFactory $icon_factory, + array $sync_node_id_whitelist = [], ?string $parent_id = null, ): \Generator { - yield $node_factory->branch('1', 'branch node 1', null, - $node_factory->branch('1.1', 'branch node 1.1', null, - $node_factory->leaf('1.1.1', 'leaf node 1.1.1'), - $node_factory->leaf('1.1.2', 'leaf node 1.1.2'), + yield $node_factory->branch( + ['1'], + 'branch node 1', + null, + $node_factory->branch( + ['1', '1.1'], + 'branch node 1.1', + null, + $node_factory->leaf(['1', '1.1', '1.1.1'], 'leaf node 1.1.1'), + $node_factory->leaf(['1', '1.1', '1.1.2'], 'leaf node 1.1.2'), ), - $node_factory->leaf('1.2', 'leaf node 1.2'), + $node_factory->leaf(['1', '1.2'], 'leaf node 1.2'), ); } + public function getNodesAsLeaf( NodeFactory $node_factory, IconFactory $icon_factory, diff --git a/components/ILIAS/UI/src/examples/Input/Field/TreeMultiSelect/with_value.php b/components/ILIAS/UI/src/examples/Input/Field/TreeMultiSelect/with_value.php index 5c15222afbbb..ce6e8c2ed38d 100644 --- a/components/ILIAS/UI/src/examples/Input/Field/TreeMultiSelect/with_value.php +++ b/components/ILIAS/UI/src/examples/Input/Field/TreeMultiSelect/with_value.php @@ -1,5 +1,20 @@ <?php +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + */ + declare(strict_types=1); namespace ILIAS\UI\examples\Input\Field\TreeMultiSelect; @@ -32,9 +47,10 @@ function with_value(): string public function getNodes( NodeFactory $node_factory, IconFactory $icon_factory, + array $sync_node_id_whitelist = [], ?string $parent_id = null, ): \Generator { - yield from []; + yield from $this->getNodesAsLeaf($node_factory, $icon_factory, $sync_node_id_whitelist); } public function getNodesAsLeaf( NodeFactory $node_factory, @@ -42,7 +58,7 @@ public function getNodesAsLeaf( array $node_ids, ): \Generator { foreach ($node_ids as $node_id) { - yield $node_factory->leaf($node_id, "dummy leaf node $node_id"); + yield $node_factory->leaf([$node_id], "dummy leaf node $node_id"); } } }; diff --git a/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/base.php b/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/base.php index 318897526bba..aecf5f4961cd 100644 --- a/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/base.php +++ b/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/base.php @@ -1,5 +1,20 @@ <?php +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + */ + declare(strict_types=1); namespace ILIAS\UI\examples\Input\Field\TreeSelect; @@ -55,8 +70,14 @@ function base(): string $example_uri = $data_factory->uri((string) $http->request()->getUri()); $base_url_builder = new URLBuilder($example_uri); - [$node_id_url_builder, $node_id_parameter] = $base_url_builder->acquireParameter(explode('\\', __NAMESPACE__), "node_id"); - [$process_form_url_builder ,$process_form_parameter] = $base_url_builder->acquireParameter(explode('\\', __NAMESPACE__), "process"); + [$node_id_url_builder, $node_id_parameter] = $base_url_builder->acquireParameter( + explode('\\', __NAMESPACE__), + "node_id" + ); + [$process_form_url_builder, $process_form_parameter] = $base_url_builder->acquireParameter( + explode('\\', __NAMESPACE__), + "process" + ); $node_retrieval = new TreeSelectExampleNodeRetrieval($node_id_url_builder, $node_id_parameter); @@ -70,6 +91,7 @@ function base(): string $node_generator = $node_retrieval->getNodes( $factory->input()->field()->node(), $factory->symbol()->icon(), + [], $parent_node_id ); @@ -118,16 +140,20 @@ public function __construct( ) { } - public function getNodes(NodeFactory $node_factory, IconFactory $icon_factory, ?string $parent_id = null): \Generator - { + public function getNodes( + NodeFactory $node_factory, + IconFactory $icon_factory, + array $sync_node_id_whitelist = [], + ?string $parent_id = null + ): \Generator { if (null !== $parent_id) { yield $this->getExampleNodeChildren($node_factory, $parent_id); return; } - yield $node_factory->branch('1', 'branch 1', null, ...$this->getExampleNodeChildren($node_factory, '1')); - yield $node_factory->branch('2', 'branch 2', null, ...$this->getExampleNodeChildren($node_factory, '2')); - yield $node_factory->leaf('3', 'leaf 3'); + yield $node_factory->branch(['1'], 'branch 1', null, ...$this->getExampleNodeChildren($node_factory, '1')); + yield $node_factory->branch(['2'], 'branch 2', null, ...$this->getExampleNodeChildren($node_factory, '2')); + yield $node_factory->leaf(['3'], 'leaf 3'); } public function getNodesAsLeaf( @@ -136,28 +162,50 @@ public function getNodesAsLeaf( array $node_ids, ): \Generator { foreach ($node_ids as $node_id) { - yield $node_factory->leaf($node_id, "dummy leaf node $node_id"); + yield $node_factory->leaf([$node_id], "dummy leaf node $node_id"); } } - protected function getExampleNodeChildren(NodeFactory $node_factory, string|int $parent_id): array + protected function getExampleNodeChildren(NodeFactory $node_factory, string $parent_id): array { return [ - $node_factory->branch("$parent_id.1", "branch $parent_id.1", null, - $node_factory->leaf("$parent_id.1.1", "leaf $parent_id.1.1"), - $node_factory->leaf("$parent_id.1.2", "leaf $parent_id.1.2"), - $node_factory->leaf("$parent_id.1.3", "leaf $parent_id.1.3"), + $node_factory->branch( + $this->getFullNodePath($parent_id, "1"), + "branch $parent_id.1", + null, + $node_factory->leaf($this->getFullNodePath($parent_id, "1.1"), "leaf $parent_id.1.1"), + $node_factory->leaf($this->getFullNodePath($parent_id, "1.2"), "leaf $parent_id.1.2"), + $node_factory->leaf($this->getFullNodePath($parent_id, "1.3"), "leaf $parent_id.1.3"), + ), + $node_factory->branch( + $this->getFullNodePath($parent_id, "2"), + "branch $parent_id.2", + null, + $node_factory->leaf($this->getFullNodePath($parent_id, "2.1"), "leaf $parent_id.2.1"), + $node_factory->leaf($this->getFullNodePath($parent_id, "2.2"), "leaf $parent_id.2.2"), + $node_factory->leaf($this->getFullNodePath($parent_id, "2.3"), "leaf $parent_id.2.3"), ), - $node_factory->branch("$parent_id.2", "branch $parent_id.2", null, - $node_factory->leaf("$parent_id.2.1", "leaf $parent_id.2.1"), - $node_factory->leaf("$parent_id.2.2", "leaf $parent_id.2.2"), - $node_factory->leaf("$parent_id.2.3", "leaf $parent_id.2.3"), + $node_factory->async( + $this->getAsyncNodeRenderUrl("$parent_id.3"), + $this->getFullNodePath($parent_id, "3"), + "async branch $parent_id.3" ), - $node_factory->async($this->getAsyncNodeRenderUrl("$parent_id.3"),"$parent_id.3", "async branch $parent_id.3"), - $node_factory->leaf("$parent_id.4", "leaf $parent_id.4"), + $node_factory->leaf($this->getFullNodePath($parent_id, "4"), "leaf $parent_id.4"), ]; } + /** @return string[] */ + protected function getFullNodePath(string $parent_id, string $child_id): array + { + $parts = explode(".", $parent_id); + $paths = []; + for ($index = 1, $count = count($parts); $index <= $count; $index++) { + $paths[] = implode(".", array_slice($parts, 0, $index)); + } + $paths[] = "{$paths[$count - 1]}.$child_id"; + return $paths; + } + protected function getAsyncNodeRenderUrl(int|string $node_id): URI { return $this->builder->withParameter($this->node_id_parameter, (string) $node_id)->buildURI(); diff --git a/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/with_disabled.php b/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/with_disabled.php index efe0838877cb..5d55e3a589d7 100644 --- a/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/with_disabled.php +++ b/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/with_disabled.php @@ -1,5 +1,20 @@ <?php +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + */ + declare(strict_types=1); namespace ILIAS\UI\examples\Input\Field\TreeSelect; @@ -32,6 +47,7 @@ function with_disabled(): string public function getNodes( NodeFactory $node_factory, IconFactory $icon_factory, + array $sync_node_id_whitelist = [], ?string $parent_id = null, ): \Generator { yield from []; diff --git a/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/with_required.php b/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/with_required.php index 897e0f8c19a6..7bca6b4bd6e8 100644 --- a/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/with_required.php +++ b/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/with_required.php @@ -1,5 +1,20 @@ <?php +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + */ + declare(strict_types=1); namespace ILIAS\UI\examples\Input\Field\TreeSelect; @@ -32,6 +47,7 @@ function with_required(): string public function getNodes( NodeFactory $node_factory, IconFactory $icon_factory, + array $sync_node_id_whitelist = [], ?string $parent_id = null, ): \Generator { yield from []; diff --git a/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/with_value.php b/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/with_value.php index 6330f526f397..347f3d03cdb0 100644 --- a/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/with_value.php +++ b/components/ILIAS/UI/src/examples/Input/Field/TreeSelect/with_value.php @@ -1,5 +1,20 @@ <?php +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + */ + declare(strict_types=1); namespace ILIAS\UI\examples\Input\Field\TreeSelect; @@ -32,9 +47,10 @@ function with_value(): string public function getNodes( NodeFactory $node_factory, IconFactory $icon_factory, + array $sync_node_id_whitelist = [], ?string $parent_id = null, ): \Generator { - yield from []; + yield from $this->getNodesAsLeaf($node_factory, $icon_factory, $sync_node_id_whitelist); } public function getNodesAsLeaf( NodeFactory $node_factory, @@ -42,7 +58,7 @@ public function getNodesAsLeaf( array $node_ids, ): \Generator { foreach ($node_ids as $node_id) { - yield $node_factory->leaf($node_id, "dummy leaf node $node_id"); + yield $node_factory->leaf([$node_id], "dummy leaf node $node_id"); } } }; @@ -59,4 +75,3 @@ public function getNodesAsLeaf( return $renderer->render($form); } - diff --git a/components/ILIAS/UI/src/examples/Layout/Page/Standard/ui.php b/components/ILIAS/UI/src/examples/Layout/Page/Standard/ui.php index 6c3b7eaeef21..fd7172c2915d 100755 --- a/components/ILIAS/UI/src/examples/Layout/Page/Standard/ui.php +++ b/components/ILIAS/UI/src/examples/Layout/Page/Standard/ui.php @@ -516,14 +516,14 @@ function getDemoEntryTools(\ILIAS\UI\Factory $f): array $slate = $f->maincontrols()->slate()->legacy( 'Initially hidden', $symbol, - $f->legacy(loremIpsum()) + $f->legacy()->content(loremIpsum()) ); $tools['tool3'] = $slate; $slate = $f->maincontrols()->slate()->legacy( 'Closable Tool', $symbol, - $f->legacy(loremIpsum()) + $f->legacy()->content(loremIpsum()) ); $tools['tool4'] = $slate; diff --git a/components/ILIAS/UI/src/examples/MainControls/Slate/Combined/combined.php b/components/ILIAS/UI/src/examples/MainControls/Slate/Combined/combined.php index 49dd742cfd7b..94448ad7c025 100755 --- a/components/ILIAS/UI/src/examples/MainControls/Slate/Combined/combined.php +++ b/components/ILIAS/UI/src/examples/MainControls/Slate/Combined/combined.php @@ -22,6 +22,9 @@ /** * --- + * description: > + * Pressing the slate reveals more slates, bulky buttons or horizontal dividers. + * * expected output: > * ILIAS shows the rendered Component. * --- diff --git a/components/ILIAS/UI/src/examples/MainControls/Slate/Drilldown/drilldownslate.php b/components/ILIAS/UI/src/examples/MainControls/Slate/Drilldown/drilldownslate.php index 7a07fdca3456..378b9812a941 100755 --- a/components/ILIAS/UI/src/examples/MainControls/Slate/Drilldown/drilldownslate.php +++ b/components/ILIAS/UI/src/examples/MainControls/Slate/Drilldown/drilldownslate.php @@ -20,10 +20,11 @@ namespace ILIAS\UI\examples\MainControls\Slate\Drilldown; -use ILIAS\UI\examples\Menu\Drilldown; - /** * --- + * description: > + * Pressing the slate reveals a drilldown component. + * * expected output: > * ILIAS shows the rendered Component. * --- diff --git a/components/ILIAS/UI/src/examples/MainControls/Slate/Legacy/legacy.php b/components/ILIAS/UI/src/examples/MainControls/Slate/Legacy/legacy.php index f4343477ee4a..b7c5e1c8b514 100755 --- a/components/ILIAS/UI/src/examples/MainControls/Slate/Legacy/legacy.php +++ b/components/ILIAS/UI/src/examples/MainControls/Slate/Legacy/legacy.php @@ -22,6 +22,9 @@ /** * --- + * description: > + * Pressing the slate reveals any legacy component. + * * expected output: > * ILIAS shows the rendered Component. * --- diff --git a/components/ILIAS/UI/src/examples/Modal/Interruptive/show_modal_on_button_click.php b/components/ILIAS/UI/src/examples/Modal/Interruptive/show_modal_on_button_click.php index db7d1661f9cf..fba3afb4a5b4 100755 --- a/components/ILIAS/UI/src/examples/Modal/Interruptive/show_modal_on_button_click.php +++ b/components/ILIAS/UI/src/examples/Modal/Interruptive/show_modal_on_button_click.php @@ -20,6 +20,8 @@ namespace ILIAS\UI\examples\Modal\Interruptive; +use ILIAS\UI\Component\Panel\Standard; + /** * --- * description: > @@ -64,9 +66,10 @@ function show_modal_on_button_click() $request_wrapper->retrieve('modal_nr', $refinery->kindlyTo()->string()) === '1' ) { $out[] = $post_wrapper->retrieve('interruptive_items', $refinery->custom()->transformation( - function ($item_keys) use ($factory, $post_wrapper) { - return $factory->panel()->standard('Items deleted', $factory->legacy("Number of items deleted: ".count($item_keys))); - } + static fn(array $item_keys): Standard => $factory->panel()->standard( + 'Items deleted', + $factory->legacy()->content('Number of items deleted: ' . count($item_keys)) + ) )); } diff --git a/components/ILIAS/UI/src/examples/Player/Video/video_vimeo.php b/components/ILIAS/UI/src/examples/Player/Video/video_vimeo.php index 2f8b67efaa52..a905e54a03e9 100755 --- a/components/ILIAS/UI/src/examples/Player/Video/video_vimeo.php +++ b/components/ILIAS/UI/src/examples/Player/Video/video_vimeo.php @@ -42,7 +42,7 @@ function video_vimeo(): string $renderer = $DIC->ui()->renderer(); $f = $DIC->ui()->factory(); - $video = $f->player()->video("https://vimeo.com/669475821?controls=0"); + $video = $f->player()->video("https://player.vimeo.com/video/669475821"); return $renderer->render($video); } diff --git a/components/ILIAS/UI/src/examples/Player/Video/video_youtube.php b/components/ILIAS/UI/src/examples/Player/Video/video_youtube.php index 447825e1c4ab..ca644f4ab0ce 100755 --- a/components/ILIAS/UI/src/examples/Player/Video/video_youtube.php +++ b/components/ILIAS/UI/src/examples/Player/Video/video_youtube.php @@ -44,7 +44,7 @@ function video_youtube(): string $renderer = $DIC->ui()->renderer(); $f = $DIC->ui()->factory(); - $video = $f->player()->video("https://www.youtube.com/watch?v=YSN2osYbshQ"); + $video = $f->player()->video("https://www.youtube.com/embed/YSN2osYbshQ"); return $renderer->render($video); } diff --git a/components/ILIAS/UI/src/examples/Table/Ordering/large.php b/components/ILIAS/UI/src/examples/Table/Ordering/large.php index 7e455a22d4cc..44764383f4eb 100644 --- a/components/ILIAS/UI/src/examples/Table/Ordering/large.php +++ b/components/ILIAS/UI/src/examples/Table/Ordering/large.php @@ -1,13 +1,27 @@ <?php +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + * + *********************************************************************/ + declare(strict_types=1); namespace ILIAS\UI\examples\Table\Ordering; -use ILIAS\UI\Implementation\Component\Table as T; use ILIAS\UI\Component\Table as I; use ILIAS\UI\URLBuilder; -use Psr\Http\Message\ServerRequestInterface; use ILIAS\Data\URI; /** @@ -135,7 +149,7 @@ public function setOrder(array $ordered): void && $request_wrapper->retrieve('ordering_example', $refinery->kindlyTo()->int()) === 4 ) { if ($data = $table->getData()) { - $out[] = $f->legacy('<pre>' . print_r($data, true) . '</pre>'); + $out[] = $f->legacy()->content('<pre>' . print_r($data, true) . '</pre>'); } $data_retrieval->setOrder($data); } diff --git a/components/ILIAS/UI/src/templates/default/Input/tpl.context_form.html b/components/ILIAS/UI/src/templates/default/Input/tpl.context_form.html index 116c46e1112f..490bada52cc3 100755 --- a/components/ILIAS/UI/src/templates/default/Input/tpl.context_form.html +++ b/components/ILIAS/UI/src/templates/default/Input/tpl.context_form.html @@ -1,6 +1,6 @@ <fieldset class="c-input" data-il-ui-component="{UI_COMPONENT_NAME}" data-il-ui-input-name="{INPUT_NAME}"<!-- BEGIN disabled --> disabled="disabled"<!-- END disabled --><!-- BEGIN described --> aria-describedby="{ERROR_ID}"<!-- END described --><!-- BEGIN binding --> id="{BINDING_ID}"<!-- END binding --><!-- BEGIN tabindex --> tabindex="0"<!-- END tabindex -->> - <label <!-- BEGIN for --> for="{ID}"<!-- END for -->>{LABEL}<!-- BEGIN required --><span class="asterisk" aria-label="{REQUIRED_ARIA}">*</span><!-- END required --></label> + <label <!-- BEGIN for --> for="{ID}"<!-- END for -->>{LABEL}<!-- BEGIN required --><span class="sr-only">{REQUIRED_ARIA}</span><span class="asterisk" aria-hidden="true">*</span><!-- END required --></label> <div class="c-input__field"> {INPUT} diff --git a/components/ILIAS/UI/src/templates/default/Input/tpl.standard.html b/components/ILIAS/UI/src/templates/default/Input/tpl.standard.html index 5c5a797b0c24..09b76eb03d0c 100755 --- a/components/ILIAS/UI/src/templates/default/Input/tpl.standard.html +++ b/components/ILIAS/UI/src/templates/default/Input/tpl.standard.html @@ -1,11 +1,5 @@ <form class="c-form c-form--horizontal" enctype="multipart/form-data" {NAME}<!-- BEGIN action --> action="{URL}"<!-- END action --> method="post"> <div class="c-form__header"> - <div class="c-form__actions"> - <!-- BEGIN with_additional_form_action_top --> - <button class="btn btn-default btn-standard" formaction="{ACTION_TOP}">{ACTION_LABEL_TOP}</button> - <!-- END with_additional_form_action_top --> - {BUTTONS_TOP} - </div> <!-- BEGIN required_text_top --> <div class="c-form__required"> <span class="asterisk">*</span><span class="small"> {TXT_REQUIRED_TOP}</span> diff --git a/components/ILIAS/UI/src/templates/default/Input/tpl.textarea.html b/components/ILIAS/UI/src/templates/default/Input/tpl.textarea.html index 27e2301b6e08..b17ad363a036 100755 --- a/components/ILIAS/UI/src/templates/default/Input/tpl.textarea.html +++ b/components/ILIAS/UI/src/templates/default/Input/tpl.textarea.html @@ -7,7 +7,7 @@ <!-- BEGIN with_max_limit -->maxlength="{MAX_LIMIT}"<!-- END with_max_limit --> ><!-- BEGIN value -->{VALUE}<!-- END value --></textarea> <!-- BEGIN remainder --> -<div class="ui-input-textarea-remainder"> +<div class="ui-input-textarea-remainder" aria-live="polite"> {REMAINDER_TEXT} <span data-action="remainder">{REMAINDER}</span> </div> <!-- END remainder --> diff --git a/components/ILIAS/UI/src/templates/default/MessageBox/tpl.messagebox.html b/components/ILIAS/UI/src/templates/default/MessageBox/tpl.messagebox.html index 02aca61075a5..c9e97ad999f4 100755 --- a/components/ILIAS/UI/src/templates/default/MessageBox/tpl.messagebox.html +++ b/components/ILIAS/UI/src/templates/default/MessageBox/tpl.messagebox.html @@ -1,4 +1,4 @@ <!-- BEGIN message_box --> <div class="alert <!-- BEGIN failure_class -->alert-danger<!-- END failure_class --><!-- BEGIN success_class -->alert-success<!-- END success_class --><!-- BEGIN info_class -->alert-info<!-- END info_class --><!-- BEGIN confirmation_class -->alert-warning<!-- END confirmation_class -->" role="{ROLE}"> - <div class="ilAccHeadingHidden"><a name="il_message_focus">{ACC_TEXT}</a></div>{MESSAGE_TEXT}<!-- BEGIN buttons --><div>{BUTTONS}</div><!-- END buttons -->{LINK_LIST}</div> + <div class="ilAccHeadingHidden">{ACC_TEXT}</div>{MESSAGE_TEXT}<!-- BEGIN buttons --><div>{BUTTONS}</div><!-- END buttons -->{LINK_LIST}</div> <!-- END message_box --> \ No newline at end of file diff --git a/components/ILIAS/UI/src/templates/default/Modal/tpl.lightbox.html b/components/ILIAS/UI/src/templates/default/Modal/tpl.lightbox.html index 0bece8755ccf..642332a907f1 100755 --- a/components/ILIAS/UI/src/templates/default/Modal/tpl.lightbox.html +++ b/components/ILIAS/UI/src/templates/default/Modal/tpl.lightbox.html @@ -31,11 +31,11 @@ <h1 class="modal-title">{TITLE}</h1> </div> <!-- BEGIN controls --> - <button class="left carousel-control btn-link" href="#{ID_CAROUSEL3}" role="button" data-slide="prev"> + <button class="left carousel-control btn-link" href="#{ID_CAROUSEL3}" role="button" type="button" data-slide="prev"> <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> <span class="sr-only">Previous</span> </button> - <button class="right carousel-control btn-link" href="#{ID_CAROUSEL3}" role="button" data-slide="next"> + <button class="right carousel-control btn-link" href="#{ID_CAROUSEL3}" role="button" type="button" data-slide="next"> <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> <span class="sr-only">Next</span> </button> diff --git a/components/ILIAS/UI/src/templates/default/Player/tpl.audio.html b/components/ILIAS/UI/src/templates/default/Player/tpl.audio.html index 3efe80c1c2e9..6302eccc951f 100755 --- a/components/ILIAS/UI/src/templates/default/Player/tpl.audio.html +++ b/components/ILIAS/UI/src/templates/default/Player/tpl.audio.html @@ -1,5 +1,5 @@ <div class="il-audio-container"> - <audio class="il-audio-player" id="{ID}" src="{SOURCE}" preload="metadata"></audio> + <audio controls="controls" class="il-audio-player" id="{ID}" src="{SOURCE}" preload="metadata"></audio> <!-- BEGIN transcription --> {BUTTON_AND_MODAL} <!-- END transcription --> diff --git a/components/ILIAS/UI/src/templates/default/Player/tpl.video.html b/components/ILIAS/UI/src/templates/default/Player/tpl.video.html index c8c5253e69b0..8e7eb44b465b 100755 --- a/components/ILIAS/UI/src/templates/default/Player/tpl.video.html +++ b/components/ILIAS/UI/src/templates/default/Player/tpl.video.html @@ -1,5 +1,5 @@ <div class="il-video-container"> - <video class="il-video-player" id="{ID}" src="{SOURCE}" style="max-width: 100%;" preload="metadata" <!-- BEGIN poster -->poster="{POSTER_SOURCE}"<!-- END poster -->> + <video controls="controls" class="il-video-player" id="{ID}" src="{SOURCE}" preload="metadata" <!-- BEGIN poster -->poster="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" style="background-image:url('{POSTER_SOURCE}')"<!-- END poster -->> <!-- BEGIN track --><track kind="subtitles" src="{TRACK_SOURCE}" srclang="{TRACK_LANG}" /><!-- END track --> </video> </div> \ No newline at end of file diff --git a/components/ILIAS/UI/src/templates/default/Player/tpl.video_vimeo.html b/components/ILIAS/UI/src/templates/default/Player/tpl.video_vimeo.html new file mode 100755 index 000000000000..17b6bcb7ed95 --- /dev/null +++ b/components/ILIAS/UI/src/templates/default/Player/tpl.video_vimeo.html @@ -0,0 +1,3 @@ +<div class="il-video-container"> + <iframe id="{ID}" src="{SOURCE}" allow="fullscreen; autoplay; picture-in-picture;" referrerpolicy="strict-origin-when-cross-origin"></iframe> +</div> \ No newline at end of file diff --git a/components/ILIAS/UI/src/templates/default/Player/tpl.video_youtube.html b/components/ILIAS/UI/src/templates/default/Player/tpl.video_youtube.html new file mode 100755 index 000000000000..17b6bcb7ed95 --- /dev/null +++ b/components/ILIAS/UI/src/templates/default/Player/tpl.video_youtube.html @@ -0,0 +1,3 @@ +<div class="il-video-container"> + <iframe id="{ID}" src="{SOURCE}" allow="fullscreen; autoplay; picture-in-picture;" referrerpolicy="strict-origin-when-cross-origin"></iframe> +</div> \ No newline at end of file diff --git a/components/ILIAS/UI/tests/Client/Input/Field/TreeMultiSelect.js b/components/ILIAS/UI/tests/Client/Input/Field/TreeMultiSelect.js index 9e13dfc475d2..723a1d256166 100644 --- a/components/ILIAS/UI/tests/Client/Input/Field/TreeMultiSelect.js +++ b/components/ILIAS/UI/tests/Client/Input/Field/TreeMultiSelect.js @@ -17,10 +17,13 @@ import { beforeEach, describe, it } from 'node:test'; import { strict } from 'node:assert/strict'; -import TreeMultiSelect from '../../../../resources/js/Input/Field/src/TreeSelect/TreeMultiSelect.js'; - -describe('TreeMultiSelect', function () { +import TreeSelect from '../../../../resources/js/Input/Field/src/TreeSelect/TreeSelect.js'; +import unselectChildNodes + from '../../../../resources/js/Input/Field/src/TreeSelect/unselectChildNodes.js'; +import updateMultiSelectButtonStates + from '../../../../resources/js/Input/Field/src/TreeSelect/updateMultiSelectButtonStates.js'; +describe('TreeMultiSelect', () => { let jQueryEventListenerMock; let templateRendererMock; let asyncRendererMock; @@ -29,7 +32,7 @@ describe('TreeMultiSelect', function () { let basicElementMock; let elementWithClassListMock; - beforeEach(function () { + beforeEach(() => { jQueryEventListenerMock = { on: () => {}, }; @@ -45,6 +48,8 @@ describe('TreeMultiSelect', function () { drilldownMock = { getBackSignal: () => '', addEngageListener: () => {}, + getCurrentLevel: () => '0', + getParentLevel: () => null, }; basicElementMock = { remove: () => {}, @@ -52,7 +57,7 @@ describe('TreeMultiSelect', function () { querySelectorAll: () => [], querySelector() { return this; - } + }, }; elementWithClassListMock = { toggle: () => {}, @@ -60,11 +65,11 @@ describe('TreeMultiSelect', function () { add: () => {}, get classList() { return this; - } + }, }; }); - it('updates select button states and selection (cannot select child nodes)', function () { + it('updates select button states and selection (cannot select child nodes)', () => { const parentBranchNode = { id: 'node-id-1', name: 'node name 1', @@ -111,7 +116,7 @@ describe('TreeMultiSelect', function () { nodeMapMock.set(parentBranchNode.id, parentBranchNode); nodeMapMock.set(childLeafNode.id, childLeafNode); - const component = new TreeMultiSelect( + const component = new TreeSelect( nodeMapMock, jQueryEventListenerMock, templateRendererMock, @@ -125,13 +130,12 @@ describe('TreeMultiSelect', function () { basicElementMock, basicElementMock, basicElementMock, - false, + (treeSelectComponent) => { + unselectChildNodes(treeSelectComponent); + updateMultiSelectButtonStates(treeSelectComponent); + }, ); - // ensure nothing happens if nothing changes - strict.equal(parentBranchNode.selectButton.disabled, false); - strict.equal(childLeafNode.selectButton.disabled, false); - component.updateNodeSelectButtonStates(); strict.equal(parentBranchNode.selectButton.disabled, false); strict.equal(childLeafNode.selectButton.disabled, false); // ensure child nodes are disabled @@ -145,12 +149,12 @@ describe('TreeMultiSelect', function () { strict.equal(childLeafNode.selectButton.disabled, false); // ensure child nodes are unselected and disabled component.selectNode(parentBranchNode.id); - strict.equal(component.getSelection().has(childLeafNode.id), false) + strict.equal(component.getSelection().has(childLeafNode.id), false); strict.equal(parentBranchNode.selectButton.disabled, false); strict.equal(childLeafNode.selectButton.disabled, true); }); - it('updates select button states (can select child nodes)', function () { + it('updates select button states (can select child nodes)', () => { const parentBranchNode = { id: 'node-id-1', name: 'node name 1', @@ -197,7 +201,7 @@ describe('TreeMultiSelect', function () { nodeMapMock.set(parentBranchNode.id, parentBranchNode); nodeMapMock.set(childLeafNode.id, childLeafNode); - const component = new TreeMultiSelect( + const component = new TreeSelect( nodeMapMock, jQueryEventListenerMock, templateRendererMock, @@ -211,13 +215,9 @@ describe('TreeMultiSelect', function () { basicElementMock, basicElementMock, basicElementMock, - true, + () => {}, ); - // ensure nothing happens if nothing changes - strict.equal(parentBranchNode.selectButton.disabled, false); - strict.equal(childLeafNode.selectButton.disabled, false); - component.updateNodeSelectButtonStates(); strict.equal(parentBranchNode.selectButton.disabled, false); strict.equal(childLeafNode.selectButton.disabled, false); // ensure child nodes are not disabled @@ -231,9 +231,8 @@ describe('TreeMultiSelect', function () { strict.equal(childLeafNode.selectButton.disabled, false); // ensure nothing gets unselected or disabled component.selectNode(parentBranchNode.id); - strict.equal(component.getSelection().has(childLeafNode.id), true) + strict.equal(component.getSelection().has(childLeafNode.id), true); strict.equal(parentBranchNode.selectButton.disabled, false); strict.equal(childLeafNode.selectButton.disabled, false); }); - }); diff --git a/components/ILIAS/UI/tests/Client/Input/Field/TreeSelect.js b/components/ILIAS/UI/tests/Client/Input/Field/TreeSelect.js index 6a7a44da9beb..0b2623ce3b37 100644 --- a/components/ILIAS/UI/tests/Client/Input/Field/TreeSelect.js +++ b/components/ILIAS/UI/tests/Client/Input/Field/TreeSelect.js @@ -18,9 +18,12 @@ import { beforeEach, describe, it } from 'node:test'; import { strict } from 'node:assert/strict'; import TreeSelect from '../../../../resources/js/Input/Field/src/TreeSelect/TreeSelect.js'; +import updateSingleSelectButtonStates + from '../../../../resources/js/Input/Field/src/TreeSelect/updateSingleSelectButtonStates.js'; +import engageParentDrilldownLevel + from '../../../../resources/js/Input/Field/src/TreeSelect/engageParentDrilldownLevel.js'; -describe('TreeSelect', function () { - +describe('TreeSelect', () => { let jQueryEventListenerMock; let templateRendererMock; let asyncRendererMock; @@ -28,7 +31,7 @@ describe('TreeSelect', function () { let drilldownMock; let basicElementMock; - beforeEach(function () { + beforeEach(() => { jQueryEventListenerMock = { on: () => {}, }; @@ -44,6 +47,8 @@ describe('TreeSelect', function () { drilldownMock = { getBackSignal: () => '', addEngageListener: () => {}, + getCurrentLevel: () => '0', + getParentLevel: () => null, }; basicElementMock = { remove: () => {}, @@ -51,11 +56,11 @@ describe('TreeSelect', function () { querySelectorAll: () => [], querySelector() { return this; - } + }, }; }); - it('getSelection() returns a copy', function () { + it('getSelection() returns a copy', () => { const component = new TreeSelect( new Map(), jQueryEventListenerMock, @@ -70,6 +75,7 @@ describe('TreeSelect', function () { basicElementMock, basicElementMock, basicElementMock, + () => {}, ); const actual = component.getSelection(); @@ -77,7 +83,7 @@ describe('TreeSelect', function () { strict.notDeepEqual(actual, component.getSelection()); }); - it('getNodes() returns a copy', function () { + it('getNodes() returns a copy', () => { const emptyNodeMap = new Map(); const component = new TreeSelect( @@ -94,6 +100,7 @@ describe('TreeSelect', function () { basicElementMock, basicElementMock, basicElementMock, + () => {}, ); const actual = component.getNodes(); @@ -101,13 +108,13 @@ describe('TreeSelect', function () { strict.notDeepEqual(actual, emptyNodeMap); }); - it('initial leaf nodes are hydrated', function () { + it('initial leaf nodes are hydrated', () => { const nodeMapMock = new Map(); const selectButtonMock = { data: [], addEventListener(event, handler) { - this.data.push({event: event, handler: handler}); + this.data.push({ event, handler }); }, }; @@ -139,6 +146,7 @@ describe('TreeSelect', function () { basicElementMock, basicElementMock, basicElementMock, + () => {}, ); strict.equal(selectButtonMock.data.length, 1); @@ -146,19 +154,13 @@ describe('TreeSelect', function () { strict.equal((selectButtonMock.data[0].handler instanceof Function), true); }); - it('initial async and branch nodes are hydrated', function () { + it('initial async and branch nodes are hydrated', () => { const nodeMapMock = new Map(); const selectButtonMock = { data: [], addEventListener(event, handler) { - this.data.push({event: event, handler: handler}); - }, - }; - const drilldownButtonMock = { - data: [], - addEventListener(event, handler) { - this.data.push({event: event, handler: handler}); + this.data.push({ event, handler }); }, }; @@ -169,7 +171,7 @@ describe('TreeSelect', function () { element: basicElementMock, selectButton: selectButtonMock, drilldownParentLevel: '0', - drilldownButton: drilldownButtonMock, + drilldownButton: basicElementMock, listElement: basicElementMock, renderUrl: null, }; @@ -190,18 +192,15 @@ describe('TreeSelect', function () { basicElementMock, basicElementMock, basicElementMock, + () => {}, ); strict.equal(selectButtonMock.data.length, 1); strict.equal(selectButtonMock.data[0].event, 'click'); strict.equal((selectButtonMock.data[0].handler instanceof Function), true); - - strict.equal(drilldownButtonMock.data.length, 1); - strict.equal(drilldownButtonMock.data[0].event, 'click'); - strict.equal((drilldownButtonMock.data[0].handler instanceof Function), true); }); - it('breadcrumbs are removed and rendered', function () { + it('breadcrumbs are removed and rendered', () => { const newBreadcrumbElementMock = { id: 'some-html-id-to-verify', attributes: new Map(), @@ -211,11 +210,11 @@ describe('TreeSelect', function () { }, addEventListener: () => {}, setAttribute(attribute, value) { - this.attributes.set(attribute, value) + this.attributes.set(attribute, value); }, querySelector() { return this; - } + }, }; const templateRendererMock = { createContent: () => newBreadcrumbElementMock, @@ -229,7 +228,7 @@ describe('TreeSelect', function () { } this.isReturned = true; return this; - } + }, }; /** @type {TreeSelectNode} */ const engagedBranchNode = { @@ -249,6 +248,8 @@ describe('TreeSelect', function () { addEngageListener(listener) { this.engageListener = listener; }, + getCurrentLevel: () => '0', + getParentLevel: () => null, }; const breadcrumbElementMock = { isRemoved: false, @@ -261,7 +262,7 @@ describe('TreeSelect', function () { querySelectorAll: () => [breadcrumbElementMock], append(element) { this.appended.push(element); - } + }, }; const dialogElementMock = { querySelectorAll: () => [], @@ -291,6 +292,7 @@ describe('TreeSelect', function () { basicElementMock, basicElementMock, dialogElementMock, + () => {}, ); // ensure drilldown engage listener is set @@ -305,14 +307,14 @@ describe('TreeSelect', function () { strict.equal(newBreadcrumbElementMock.textContent, engagedBranchNode.name); }); - it('can select and unselect nodes', function () { + it('can select and unselect nodes', () => { const elementWithClassListMock = { toggle: () => {}, remove: () => {}, add: () => {}, get classList() { return this; - } + }, }; const nodeElementMock = { get classList() { @@ -352,6 +354,10 @@ describe('TreeSelect', function () { basicElementMock, basicElementMock, basicElementMock, + (treeSelectComponent) => { + updateSingleSelectButtonStates(treeSelectComponent); + engageParentDrilldownLevel(treeSelectComponent); + }, ); component.selectNode(initialLeafNode.id); @@ -361,14 +367,14 @@ describe('TreeSelect', function () { strict.equal(component.getSelection().has(initialLeafNode.id), false); }); - it('can update node select button states', function () { + it('can update node select button states', () => { const elementWithClassListMock = { toggle: () => {}, remove: () => {}, add: () => {}, get classList() { return this; - } + }, }; /** @type {TreeSelectNode} */ const leafNode1 = { @@ -420,16 +426,16 @@ describe('TreeSelect', function () { basicElementMock, basicElementMock, basicElementMock, + (treeSelectComponent) => { + updateSingleSelectButtonStates(treeSelectComponent); + engageParentDrilldownLevel(treeSelectComponent); + }, ); - strict.equal(leafNode1.selectButton.disabled, false); - strict.equal(leafNode2.selectButton.disabled, false); - component.updateNodeSelectButtonStates(); strict.equal(leafNode1.selectButton.disabled, false); strict.equal(leafNode2.selectButton.disabled, false); component.selectNode(leafNode1.id); strict.equal(leafNode1.selectButton.disabled, false); strict.equal(leafNode2.selectButton.disabled, true); }); - }); diff --git a/components/ILIAS/UI/tests/Client/Input/Field/TreeSelectFactory.js b/components/ILIAS/UI/tests/Client/Input/Field/TreeSelectFactory.js index fd0800404b54..697818b28290 100644 --- a/components/ILIAS/UI/tests/Client/Input/Field/TreeSelectFactory.js +++ b/components/ILIAS/UI/tests/Client/Input/Field/TreeSelectFactory.js @@ -18,13 +18,10 @@ import { beforeEach, describe, it } from 'node:test'; import { strict } from 'node:assert/strict'; import TreeSelect from '../../../../resources/js/Input/Field/src/TreeSelect/TreeSelect.js'; -import TreeMultiSelect - from '../../../../resources/js/Input/Field/src/TreeSelect/TreeMultiSelect.js'; import TreeSelectFactory from '../../../../resources/js/Input/Field/src/TreeSelect/TreeSelectFactory.js'; -describe('TreeSelectFactory', function () { - +describe('TreeSelectFactory', () => { let elementMock; let documentMock; let languageMock; @@ -32,7 +29,7 @@ describe('TreeSelectFactory', function () { let drilldownFactoryMock; let jQueryEventListenerMock; - beforeEach(function () { + beforeEach(() => { elementMock = { querySelectorAll() { return []; @@ -55,6 +52,8 @@ describe('TreeSelectFactory', function () { drilldownMock = { getBackSignal: () => '', addEngageListener: () => {}, + getCurrentLevel: () => '0', + getParentLevel: () => null, }; drilldownFactoryMock = { getInstance: () => drilldownMock, @@ -64,7 +63,7 @@ describe('TreeSelectFactory', function () { }; }); - it('returns TreeSelect instances', function () { + it('returns TreeSelect instances', () => { const factory = new TreeSelectFactory( jQueryEventListenerMock, drilldownFactoryMock, @@ -76,7 +75,7 @@ describe('TreeSelectFactory', function () { strict.equal((component instanceof TreeSelect), true); }); - it('returns TreeMultiSelect instances', function () { + it('returns TreeMultiSelect instances', () => { const factory = new TreeSelectFactory( jQueryEventListenerMock, drilldownFactoryMock, @@ -85,10 +84,10 @@ describe('TreeSelectFactory', function () { ); const component = factory.initTreeMultiSelect('some-id', false); - strict.equal((component instanceof TreeMultiSelect), true); + strict.equal((component instanceof TreeSelect), true); }); - it('stores TreeSelect instances', function () { + it('stores TreeSelect instances', () => { const factory = new TreeSelectFactory( jQueryEventListenerMock, drilldownFactoryMock, @@ -104,7 +103,7 @@ describe('TreeSelectFactory', function () { strict.deepEqual(component2, component1); }); - it('stores TreeMultiSelect instances', function () { + it('stores TreeMultiSelect instances', () => { const factory = new TreeSelectFactory( jQueryEventListenerMock, drilldownFactoryMock, @@ -115,9 +114,8 @@ describe('TreeSelectFactory', function () { const htmlId = 'some-id'; const component1 = factory.initTreeMultiSelect(htmlId, false); const component2 = factory.getInstance(htmlId); - strict.equal((component1 instanceof TreeMultiSelect), true); - strict.equal((component2 instanceof TreeMultiSelect), true); + strict.equal((component1 instanceof TreeSelect), true); + strict.equal((component2 instanceof TreeSelect), true); strict.deepEqual(component2, component1); }); - }); diff --git a/components/ILIAS/UI/tests/Component/Input/Container/Filter/StandardFilterTest.php b/components/ILIAS/UI/tests/Component/Input/Container/Filter/StandardFilterTest.php index 99f20a3d5fbc..04ce9e3ae1d7 100755 --- a/components/ILIAS/UI/tests/Component/Input/Container/Filter/StandardFilterTest.php +++ b/components/ILIAS/UI/tests/Component/Input/Container/Filter/StandardFilterTest.php @@ -184,14 +184,14 @@ public function testRenderActivatedCollapsed(): void <button type="button" aria-expanded="false" aria-controls="active_inputs_id_1 section_inputs_id_1" id="opener_id_1"> <span> <span data-collapse-glyph-visibility="0"> - <a class="glyph" aria-label="collapse_content"> + <span class="glyph" aria-label="collapse_content" role="img"> <span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true"></span> - </a> + </span> </span> <span data-expand-glyph-visibility="1"> - <a class="glyph" aria-label="expand_content"> + <span class="glyph" aria-label="expand_content" role="img"> <span class="glyphicon glyphicon-triangle-right" aria-hidden="true"></span> - </a> + </span> </span> filter </span> </button> @@ -322,14 +322,14 @@ public function testRenderDeactivatedCollapsed(): void <button type="button" aria-expanded="false" aria-controls="active_inputs_id_1 section_inputs_id_1" id="opener_id_1"> <span> <span data-collapse-glyph-visibility="0"> - <a class="glyph" aria-label="collapse_content"> + <span class="glyph" aria-label="collapse_content" role="img"> <span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true"></span> - </a> + </span> </span> <span data-expand-glyph-visibility="1"> - <a class="glyph" aria-label="expand_content"> + <span class="glyph" aria-label="expand_content" role="img"> <span class="glyphicon glyphicon-triangle-right" aria-hidden="true"></span> - </a> + </span> </span> filter </span> </button> @@ -460,14 +460,14 @@ public function testRenderActivatedExpanded(): void <button type="button" aria-expanded="true" aria-controls="active_inputs_id_1 section_inputs_id_1" id="opener_id_1"> <span> <span data-collapse-glyph-visibility="1"> - <a class="glyph" aria-label="collapse_content"> + <span class="glyph" aria-label="collapse_content" role="img"> <span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true"></span> - </a> + </span> </span> <span data-expand-glyph-visibility="0"> - <a class="glyph" aria-label="expand_content"> + <span class="glyph" aria-label="expand_content" role="img"> <span class="glyphicon glyphicon-triangle-right" aria-hidden="true"></span> - </a> + </span> </span> filter </span> </button> @@ -598,14 +598,14 @@ public function testRenderDeactivatedExpanded(): void <button type="button" aria-expanded="true" aria-controls="active_inputs_id_1 section_inputs_id_1" id="opener_id_1"> <span> <span data-collapse-glyph-visibility="1"> - <a class="glyph" aria-label="collapse_content"> + <span class="glyph" aria-label="collapse_content" role="img"> <span class="glyphicon glyphicon-triangle-bottom" aria-hidden="true"></span> - </a> + </span> </span> <span data-expand-glyph-visibility="0"> - <a class="glyph" aria-label="expand_content"> + <span class="glyph" aria-label="expand_content" role="img"> <span class="glyphicon glyphicon-triangle-right" aria-hidden="true"></span> - </a> + </span> </span> filter </span> </button> diff --git a/components/ILIAS/UI/tests/Component/Input/Container/Form/StandardFormTest.php b/components/ILIAS/UI/tests/Component/Input/Container/Form/StandardFormTest.php index c50961ee797d..f9db51cac6af 100755 --- a/components/ILIAS/UI/tests/Component/Input/Container/Form/StandardFormTest.php +++ b/components/ILIAS/UI/tests/Component/Input/Container/Form/StandardFormTest.php @@ -126,12 +126,11 @@ public function testRender(): void ]); $r = $this->getDefaultRenderer(); - $html = $this->getDefaultRenderer()->render($form); + $html = $this->brutallyTrimHTML($this->getDefaultRenderer()->render($form)); $expected = $this->brutallyTrimHTML(' <form class="c-form c-form--horizontal" enctype="multipart/form-data" action="MY_URL" method="post"> <div class="c-form__header"> - <div class="c-form__actions"><button class="btn btn-default" data-action="">save</button></div> </div>' . $this->getTextFieldHtml() . '<div class="c-form__footer"> @@ -176,7 +175,6 @@ public function testSubmitCaptionRender(): void $expected = $this->brutallyTrimHTML(' <form class="c-form c-form--horizontal" enctype="multipart/form-data" action="MY_URL" method="post"> <div class="c-form__header"> - <div class="c-form__actions"><button class="btn btn-default" data-action="">create</button></div> </div>' . $this->getTextFieldHtml() . '<div class="c-form__footer"> @@ -203,9 +201,6 @@ public function testRenderNoUrl(): void $expected = $this->brutallyTrimHTML(' <form class="c-form c-form--horizontal" enctype="multipart/form-data" method="post"> <div class="c-form__header"> - <div class="c-form__actions"> - <button class="btn btn-default" data-action="">save</button> - </div> </div>' . $this->getTextFieldHtml() . '<div class="c-form__footer"> @@ -264,9 +259,6 @@ public function testRenderWithErrorOnField(): void $expected = $this->brutallyTrimHTML(' <form class="c-form c-form--horizontal" enctype="multipart/form-data" method="post"> <div class="c-form__header"> - <div class="c-form__actions"> - <button class="btn btn-default" data-action="">save</button> - </div> </div> <div class="c-form__error-msg alert alert-danger"><span class="sr-only">ui_error:</span>testing error message @@ -341,7 +333,6 @@ public function testRenderWithErrorOnForm(): void $expected = $this->brutallyTrimHTML(' <form class="c-form c-form--horizontal" enctype="multipart/form-data" method="post"> <div class="c-form__header"> - <div class="c-form__actions"><button class="btn btn-default" data-action="">save</button></div> </div> <div class="c-form__error-msg alert alert-danger"><span class="sr-only">ui_error:</span>This is a fail on form.</div> ' . $field_html . ' @@ -366,7 +357,7 @@ public function testStandardFormRenderWithRequired(): void $field_html = $this->getFormWrappedHtml( 'text-field-input', - 'label<span class="asterisk" aria-label="required_field">*</span>', + 'label<span class="sr-only">required_field</span><span class="asterisk" aria-hidden="true">*</span>', '<input id="id_1" type="text" name="form/input_0" class="c-field-text" />', 'byline', 'id_1', @@ -377,7 +368,6 @@ public function testStandardFormRenderWithRequired(): void $expected = $this->brutallyTrimHTML(' <form class="c-form c-form--horizontal" enctype="multipart/form-data" action="MY_URL" method="post"> <div class="c-form__header"> - <div class="c-form__actions"><button class="btn btn-default" data-action="">save</button></div> <div class="c-form__required"> <span class="asterisk">*</span><span class="small"> required_field</span> </div> diff --git a/components/ILIAS/UI/tests/Component/Input/Field/CommonFieldRendering.php b/components/ILIAS/UI/tests/Component/Input/Field/CommonFieldRendering.php index 167f1d3e02dd..7affdef80ba1 100644 --- a/components/ILIAS/UI/tests/Component/Input/Field/CommonFieldRendering.php +++ b/components/ILIAS/UI/tests/Component/Input/Field/CommonFieldRendering.php @@ -60,7 +60,7 @@ protected function testWithError(FormInput $component): void protected function testWithRequired(FormInput $component): void { - $expected = '<span class="asterisk" aria-label="required_field">*</span></label>'; + $expected = '<span class="sr-only">required_field</span><span class="asterisk" aria-hidden="true">*</span></label>'; $this->assertStringContainsString($expected, $this->render($component->withRequired(true))); } diff --git a/components/ILIAS/UI/tests/Component/Input/Field/FileInputTest.php b/components/ILIAS/UI/tests/Component/Input/Field/FileInputTest.php index 3f07fd1abb46..4d8a24a2b145 100755 --- a/components/ILIAS/UI/tests/Component/Input/Field/FileInputTest.php +++ b/components/ILIAS/UI/tests/Component/Input/Field/FileInputTest.php @@ -169,7 +169,7 @@ class="ui-input-file-input-error-msg" data-dz-error-msg></span></div> </template> </div> <div class="ui-input-file-input-dropzone"> - <button class="btn btn-link" data-action="#" id="id_2">select_files_from_computer</button> + <button class="btn btn-link" data-action="#" id="id_2">select_file_from_computer</button> <span class="ui-input-file-input-error-msg" data-dz-error-msg></span> </div> <div class="help-block"> file_notice 0 B | ui_file_upload_max_nr 1</div> @@ -253,7 +253,7 @@ class="ui-input-file-input-error-msg" data-dz-error-msg></span></div> </template> </div> <div class="ui-input-file-input-dropzone"> - <button class="btn btn-link" data-action="#" id="id_3">select_files_from_computer</button> + <button class="btn btn-link" data-action="#" id="id_3">select_file_from_computer</button> <span class="ui-input-file-input-error-msg" data-dz-error-msg></span> </div> <div class="help-block"> file_notice 0 B | ui_file_upload_max_nr 1</div> @@ -340,7 +340,7 @@ class="c-field-text" /></div> </template> </div> <div class="ui-input-file-input-dropzone"><button class="btn btn-link" data-action="#" - id="id_5">select_files_from_computer</button><span class="ui-input-file-input-error-msg" + id="id_5">select_file_from_computer</button><span class="ui-input-file-input-error-msg" data-dz-error-msg></span></div> <div class="help-block"> file_notice 0 B | ui_file_upload_max_nr 1</div> </div> @@ -435,7 +435,7 @@ class="c-field-text" /></div> </template> </div> <div class="ui-input-file-input-dropzone"><button class="btn btn-link" data-action="#" - id="id_5">select_files_from_computer</button><span class="ui-input-file-input-error-msg" + id="id_5">select_file_from_computer</button><span class="ui-input-file-input-error-msg" data-dz-error-msg></span></div> <div class="help-block"> file_notice 0 B | ui_file_upload_max_nr 1</div> </div> diff --git a/components/ILIAS/UI/tests/Component/Input/Field/MarkdownTest.php b/components/ILIAS/UI/tests/Component/Input/Field/MarkdownTest.php index 2d7afe672527..363bfa10c336 100755 --- a/components/ILIAS/UI/tests/Component/Input/Field/MarkdownTest.php +++ b/components/ILIAS/UI/tests/Component/Input/Field/MarkdownTest.php @@ -273,7 +273,7 @@ public function testRenderWithLimits(): void </div> <div class=\"c-field-markdown__preview hidden\"></div> <textarea id=\"id_1\" class=\"c-field-textarea\" name=\"name_0\" minlength=\"$min\" maxlength=\"$max\"></textarea> - <div class=\"ui-input-textarea-remainder\"> ui_chars_remaining<span data-action=\"remainder\">$max</span></div> + <div class=\"ui-input-textarea-remainder\" aria-live=\"polite\"> ui_chars_remaining<span data-action=\"remainder\">$max</span></div> </div> </div> @@ -357,7 +357,7 @@ public function testRenderWithRequired(): void $expected = $this->brutallyTrimHTML( " <fieldset class=\"c-input\" data-il-ui-component=\"markdown-field-input\" data-il-ui-input-name=\"name_0\" id=\"id_8\" tabindex=\"0\"> - <label>$label<span class=\"asterisk\" aria-label=\"required_field\">*</span></label> + <label>$label<span class=\"sr-only\">required_field</span><span class=\"asterisk\" aria-hidden=\"true\">*</span></label> <div class=\"c-input__field\"> <div class=\"c-field-markdown\"> diff --git a/components/ILIAS/UI/tests/Component/Input/Field/Node/FieldAsyncNodeTest.php b/components/ILIAS/UI/tests/Component/Input/Field/Node/FieldAsyncNodeTest.php index 1f66d746c34a..2f848a1c0082 100644 --- a/components/ILIAS/UI/tests/Component/Input/Field/Node/FieldAsyncNodeTest.php +++ b/components/ILIAS/UI/tests/Component/Input/Field/Node/FieldAsyncNodeTest.php @@ -22,6 +22,7 @@ use ILIAS\UI\Implementation\Component\Input\Field; use ILIAS\UI\Implementation\Component; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\Attributes\DataProvider; require_once(__DIR__ . "/../../../../../../../../vendor/composer/vendor/autoload.php"); require_once(__DIR__ . "/../../../../Base.php"); @@ -96,7 +97,7 @@ public function testRenderWithUrl(): void $node_id = 'some-existing-node-id'; $node_name = 'some existing node name'; - $component = $this->getNodeFactory()->async($this->uri_stub, $node_id, $node_name); + $component = $this->getNodeFactory()->async($this->uri_stub, [$node_id], $node_name); $renderer = $this->getDefaultRenderer(); $expected = <<<HTML @@ -125,7 +126,7 @@ protected function testRenderWithIcon(): void { [$icon_stub, $icon_html] = $this->createSimpleRenderingStub(Component\Symbol\Icon\Custom::class); - $component = $this->getNodeFactory()->async($this->uri_stub, '', $icon_stub); + $component = $this->getNodeFactory()->async($this->uri_stub, [''], $icon_stub); $renderer = $this->getDefaultRenderer(null, [$icon_stub]); $actual = $renderer->render($component); @@ -141,7 +142,7 @@ public function testRenderWithoutIcon(): void $this->icon_factory->expects($this->once())->method('standard'); $this->icon_stub->expects($this->once())->method('withAbbreviation')->with($first_node_name_letter); - $component = $this->getNodeFactory()->async($this->uri_stub, '', $node_name); + $component = $this->getNodeFactory()->async($this->uri_stub, [''], $node_name); $renderer = $this->getDefaultRenderer(); $actual = $renderer->render($component); @@ -149,6 +150,38 @@ public function testRenderWithoutIcon(): void $this->assertTrue(str_contains($actual, $this->icon_html)); } + protected function testConstructorWithValidNodePath(): void + { + $root_node_id = 0; + $level_one_node_id = 1; + $level_two_node_id = 2; + $parent_ids = [$root_node_id, $level_one_node_id]; + $full_node_path = [...$parent_ids, $level_two_node_id]; + + $node = $this->getNodeFactory()->async($this->uri_stub, $full_node_path, ""); + + $this->assertEquals($full_node_path, $node->getFullPath()); + $this->assertEquals($parent_ids, $node->getParentIds()); + $this->assertEquals($level_two_node_id, $node->getId()); + } + + #[DataProvider('provideInvalidNodePaths')] + protected function testConstructorWithInvalidNodePath(array $path): void + { + $this->expectException(\InvalidArgumentException::class); + $this->getNodeFactory()->async($this->uri_stub, $path, ""); + } + + public static function provideInvalidNodePaths(): array + { + return [ + [1.0], + [false], + [null], + [], + ]; + } + protected function getNodeFactory(): Field\Node\Factory { return new Field\Node\Factory(); diff --git a/components/ILIAS/UI/tests/Component/Input/Field/Node/FieldBranchNodeTest.php b/components/ILIAS/UI/tests/Component/Input/Field/Node/FieldBranchNodeTest.php index f98d96f0e7c5..375557757064 100644 --- a/components/ILIAS/UI/tests/Component/Input/Field/Node/FieldBranchNodeTest.php +++ b/components/ILIAS/UI/tests/Component/Input/Field/Node/FieldBranchNodeTest.php @@ -22,6 +22,7 @@ use ILIAS\UI\Implementation\Component\Input\Field; use ILIAS\UI\Implementation\Component; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\Attributes\DataProvider; require_once(__DIR__ . "/../../../../../../../../vendor/composer/vendor/autoload.php"); require_once(__DIR__ . "/../../../../Base.php"); @@ -92,7 +93,7 @@ public function testRenderWithChildren(): void [$child_node_stub, $child_node_html] = $this->createSimpleRenderingStub(Field\Node\Leaf::class); - $component = $this->getNodeFactory()->branch($node_id, $node_name, null, $child_node_stub); + $component = $this->getNodeFactory()->branch([$node_id], $node_name, null, $child_node_stub); $renderer = $this->getDefaultRenderer(null, [$child_node_stub]); $expected = <<<HTML @@ -119,7 +120,7 @@ public function testRenderWithChildren(): void public function testRenderWithoutChildren(): void { - $component = $this->getNodeFactory()->branch('', ''); + $component = $this->getNodeFactory()->branch([''], ''); $renderer = $this->getDefaultRenderer(); $actual = $renderer->render($component); @@ -131,7 +132,7 @@ protected function testRenderWithIcon(): void { [$icon_stub, $icon_html] = $this->createSimpleRenderingStub(Component\Symbol\Icon\Custom::class); - $component = $this->getNodeFactory()->branch('', ''); + $component = $this->getNodeFactory()->branch([''], ''); $renderer = $this->getDefaultRenderer(null, [$icon_stub]); $actual = $renderer->render($component); @@ -147,7 +148,7 @@ public function testRenderWithoutIcon(): void $this->icon_factory->expects($this->once())->method('standard'); $this->icon_stub->expects($this->once())->method('withAbbreviation')->with($first_node_name_letter); - $component = $this->getNodeFactory()->branch('', $node_name); + $component = $this->getNodeFactory()->branch([''], $node_name); $renderer = $this->getDefaultRenderer(); $actual = $renderer->render($component); @@ -155,6 +156,38 @@ public function testRenderWithoutIcon(): void $this->assertTrue(str_contains($actual, $this->icon_html)); } + protected function testConstructorWithValidNodePath(): void + { + $root_node_id = 0; + $level_one_node_id = 1; + $level_two_node_id = 2; + $parent_ids = [$root_node_id, $level_one_node_id]; + $full_node_path = [...$parent_ids, $level_two_node_id]; + + $node = $this->getNodeFactory()->branch($full_node_path, ""); + + $this->assertEquals($full_node_path, $node->getFullPath()); + $this->assertEquals($parent_ids, $node->getParentIds()); + $this->assertEquals($level_two_node_id, $node->getId()); + } + + #[DataProvider('provideInvalidNodePaths')] + protected function testConstructorWithInvalidNodePath(array $path): void + { + $this->expectException(\InvalidArgumentException::class); + $this->getNodeFactory()->branch($path, ""); + } + + public static function provideInvalidNodePaths(): array + { + return [ + [1.0], + [false], + [null], + [], + ]; + } + protected function getNodeFactory(): Field\Node\Factory { return new Field\Node\Factory(); diff --git a/components/ILIAS/UI/tests/Component/Input/Field/Node/FieldLeafNodeTest.php b/components/ILIAS/UI/tests/Component/Input/Field/Node/FieldLeafNodeTest.php index 52fedd0beff6..f34947942e39 100644 --- a/components/ILIAS/UI/tests/Component/Input/Field/Node/FieldLeafNodeTest.php +++ b/components/ILIAS/UI/tests/Component/Input/Field/Node/FieldLeafNodeTest.php @@ -22,6 +22,7 @@ use ILIAS\UI\Implementation\Component\Input\Field; use ILIAS\UI\Implementation\Component; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\Attributes\DataProvider; require_once(__DIR__ . "/../../../../../../../../vendor/composer/vendor/autoload.php"); require_once(__DIR__ . "/../../../../Base.php"); @@ -90,7 +91,7 @@ public function testRender(): void $node_id = 'some-existing-node-id'; $node_name = 'some existing node name'; - $component = $this->getNodeFactory()->leaf($node_id, $node_name); + $component = $this->getNodeFactory()->leaf([$node_id], $node_name); $renderer = $this->getDefaultRenderer(); $expected = <<<HTML @@ -117,7 +118,7 @@ protected function testRenderWithIcon(): void { [$icon_stub, $icon_html] = $this->createSimpleRenderingStub(Component\Symbol\Icon\Custom::class); - $component = $this->getNodeFactory()->leaf('', ''); + $component = $this->getNodeFactory()->leaf([''], ''); $renderer = $this->getDefaultRenderer(null, [$icon_stub]); $actual = $renderer->render($component); @@ -133,7 +134,7 @@ public function testRenderWithoutIcon(): void $this->icon_factory->expects($this->once())->method('standard'); $this->icon_stub->expects($this->once())->method('withAbbreviation')->with($first_node_name_letter); - $component = $this->getNodeFactory()->leaf('', $node_name); + $component = $this->getNodeFactory()->leaf([''], $node_name); $renderer = $this->getDefaultRenderer(); $actual = $renderer->render($component); @@ -141,6 +142,38 @@ public function testRenderWithoutIcon(): void $this->assertTrue(str_contains($actual, $this->icon_html)); } + protected function testConstructorWithValidNodePath(): void + { + $root_node_id = 0; + $level_one_node_id = 1; + $level_two_node_id = 2; + $parent_ids = [$root_node_id, $level_one_node_id]; + $full_node_path = [...$parent_ids, $level_two_node_id]; + + $node = $this->getNodeFactory()->leaf($full_node_path, ""); + + $this->assertEquals($full_node_path, $node->getFullPath()); + $this->assertEquals($parent_ids, $node->getParentIds()); + $this->assertEquals($level_two_node_id, $node->getId()); + } + + #[DataProvider('provideInvalidNodePaths')] + protected function testConstructorWithInvalidNodePath(array $path): void + { + $this->expectException(\InvalidArgumentException::class); + $this->getNodeFactory()->leaf($path, ""); + } + + public static function provideInvalidNodePaths(): array + { + return [ + [1.0], + [false], + [null], + [], + ]; + } + protected function getNodeFactory(): Field\Node\Factory { return new Field\Node\Factory(); diff --git a/components/ILIAS/UI/tests/Component/Input/Field/TagInputTest.php b/components/ILIAS/UI/tests/Component/Input/Field/TagInputTest.php index 5b9bb9811916..8f711dac013e 100755 --- a/components/ILIAS/UI/tests/Component/Input/Field/TagInputTest.php +++ b/components/ILIAS/UI/tests/Component/Input/Field/TagInputTest.php @@ -303,4 +303,16 @@ public function testTagWithAutocompleteEndpointJSAdded(): void $renderer = $this->getDefaultRenderer(); $renderer->render($tag); } + + public function testWithoutStripTags(): void + { + $tag = $this->getFieldFactory()->tag('my_tag', []) + ->withoutStripTags() + ->withNameFrom($this->name_source) + ->withInput(new DefInputData(['name_0' => '<member>'])); + + $result = $tag->getContent(); + $this->assertTrue($result->isOk()); + $this->assertSame(['<member>'], $result->value()); + } } diff --git a/components/ILIAS/UI/tests/Component/Input/Field/TextareaTest.php b/components/ILIAS/UI/tests/Component/Input/Field/TextareaTest.php index cdaca0bb3e01..099af3705183 100755 --- a/components/ILIAS/UI/tests/Component/Input/Field/TextareaTest.php +++ b/components/ILIAS/UI/tests/Component/Input/Field/TextareaTest.php @@ -178,7 +178,7 @@ public function testRendererWithMaxLimit(): void $label, ' <textarea id="id_1" class="c-field-textarea" name="name_0" maxlength="20"></textarea> - <div class="ui-input-textarea-remainder"> ui_chars_remaining<span data-action="remainder">20</span></div> + <div class="ui-input-textarea-remainder" aria-live="polite"> ui_chars_remaining<span data-action="remainder">20</span></div> ', $byline, 'id_1', @@ -203,7 +203,7 @@ public function testRendererWithMinAndMaxLimit(): void $expected = $this->brutallyTrimHTML(" <textarea id=\"$id\" class=\"c-field-textarea\" name=\"$name\" minlength=\"5\" maxlength=\"20\"></textarea> - <div class=\"ui-input-textarea-remainder\"> ui_chars_remaining <span data-action=\"remainder\">$max</span> </div> + <div class=\"ui-input-textarea-remainder\" aria-live=\"polite\"> ui_chars_remaining <span data-action=\"remainder\">$max</span> </div> "); $this->assertStringContainsString($expected, $this->render($textarea)); } diff --git a/components/ILIAS/UI/tests/Component/Input/Field/TreeMultiSelectTest.php b/components/ILIAS/UI/tests/Component/Input/Field/TreeMultiSelectTest.php index 061f117e5882..912ffa38f81f 100644 --- a/components/ILIAS/UI/tests/Component/Input/Field/TreeMultiSelectTest.php +++ b/components/ILIAS/UI/tests/Component/Input/Field/TreeMultiSelectTest.php @@ -223,7 +223,7 @@ public function testRenderWithRequired(): void $renderer = $this->getDefaultRenderer(); $expected_html = <<<HTML -<label for="id_2"><span class="asterisk" aria-label="required_field">*</span></label> +<label for="id_2"><span class="sr-only">required_field</span><span class="asterisk" aria-hidden="true">*</span></label> HTML; $actual_html = $renderer->render($component); diff --git a/components/ILIAS/UI/tests/Component/Input/Field/TreeSelectTest.php b/components/ILIAS/UI/tests/Component/Input/Field/TreeSelectTest.php index e13ce55d8499..70da6eb1e99b 100644 --- a/components/ILIAS/UI/tests/Component/Input/Field/TreeSelectTest.php +++ b/components/ILIAS/UI/tests/Component/Input/Field/TreeSelectTest.php @@ -223,7 +223,7 @@ public function testRenderWithRequired(): void $renderer = $this->getDefaultRenderer(); $expected_html = <<<HTML -<label for="id_2"><span class="asterisk" aria-label="required_field">*</span></label> +<label for="id_2"><span class="sr-only">required_field</span><span class="asterisk" aria-hidden="true">*</span></label> HTML; $actual_html = $renderer->render($component); diff --git a/components/ILIAS/UI/tests/Component/Item/ItemTest.php b/components/ILIAS/UI/tests/Component/Item/ItemTest.php index 7c79bd856ea1..a5bdc97ee7c7 100755 --- a/components/ILIAS/UI/tests/Component/Item/ItemTest.php +++ b/components/ILIAS/UI/tests/Component/Item/ItemTest.php @@ -642,7 +642,7 @@ public function testRenderAudioPlayer(): void <div class="il-item il-std-item "> <h4 class="il-item-title">title</h4> <div class="il-item-audio"><div class="il-audio-container"> - <audio class="il-audio-player" id="id_1" src="src" preload="metadata"></audio> + <audio controls="controls" class="il-audio-player" id="" src="src" preload="metadata"></audio> </div></div> </div> EOT; diff --git a/components/ILIAS/UI/tests/Component/MainControls/SystemInfoTest.php b/components/ILIAS/UI/tests/Component/MainControls/SystemInfoTest.php index 7dff87d8b757..192b76ceb4ce 100755 --- a/components/ILIAS/UI/tests/Component/MainControls/SystemInfoTest.php +++ b/components/ILIAS/UI/tests/Component/MainControls/SystemInfoTest.php @@ -51,7 +51,7 @@ public function testRenderingDefault(): void // Neutral $expected = <<<EOT -<div id="id" class="container-fluid il-system-info il-system-info-neutral" data-close-uri="" aria-live="polite" aria-labelledby="id_headline" aria-describedby="id_description"> +<div id="id" class="container-fluid il-system-info il-system-info-neutral" data-close-uri="" role="status" aria-live="polite" aria-labelledby="id_headline" aria-describedby="id_description"> <div class="il-system-info-content-wrapper"> <div class="il-system-info-content"> <div id="id_headline" class="il-system-info-headline">$headline</div> @@ -84,7 +84,7 @@ public function testRenderingNeutral(): void // Neutral $expected = <<<EOT -<div id="id" class="container-fluid il-system-info il-system-info-neutral" data-close-uri="" aria-live="polite" aria-labelledby="id_headline" aria-describedby="id_description"> +<div id="id" class="container-fluid il-system-info il-system-info-neutral" data-close-uri="" role="status" aria-live="polite" aria-labelledby="id_headline" aria-describedby="id_description"> <div class="il-system-info-content-wrapper"> <div class="il-system-info-content"> <div id="id_headline" class="il-system-info-headline">$headline</div> @@ -117,7 +117,7 @@ public function testRenderingImportant(): void $actual = $r->render($system_info); $expected = <<<EOT -<div id="id" class="container-fluid il-system-info il-system-info-important" data-close-uri="" aria-live="polite" aria-labelledby="id_headline" aria-describedby="id_description"> +<div id="id" class="container-fluid il-system-info il-system-info-important" data-close-uri="" role="status" aria-live="polite" aria-labelledby="id_headline" aria-describedby="id_description"> <div class="il-system-info-content-wrapper"> <div class="il-system-info-content"> <div id="id_headline" class="il-system-info-headline">$headline</div> @@ -184,7 +184,7 @@ public function testRenderingCloseAction(): void ->withDismissAction($action); $expected = <<<EOT -<div id="id" class="container-fluid il-system-info il-system-info-neutral" data-close-uri="$uri_string" aria-live="polite" aria-labelledby="id_headline" aria-describedby="id_description"> +<div id="id" class="container-fluid il-system-info il-system-info-neutral" data-close-uri="$uri_string" role="status" aria-live="polite" aria-labelledby="id_headline" aria-describedby="id_description"> <div class="il-system-info-content-wrapper"> <div class="il-system-info-content"> <div id="id_headline" class="il-system-info-headline">$headline</div> diff --git a/components/ILIAS/UI/tests/Component/MessageBox/MessageBoxTest.php b/components/ILIAS/UI/tests/Component/MessageBox/MessageBoxTest.php index cdd7344d74ca..3d727f2265e5 100755 --- a/components/ILIAS/UI/tests/Component/MessageBox/MessageBoxTest.php +++ b/components/ILIAS/UI/tests/Component/MessageBox/MessageBoxTest.php @@ -167,8 +167,8 @@ public function testRenderSimple(string $factory_method): void $html = $this->normalizeHTML($r->render($g)); $expected = "<div class=\"alert $css_classes\" role=\"$role_type\">" . - "<div class=\"ilAccHeadingHidden\"><a name=\"il_message_focus\">" . - $g->getType() . "_message</a></div>Lorem ipsum dolor sit amet.</div>"; + "<div class=\"ilAccHeadingHidden\">" . + $g->getType() . "_message</div>Lorem ipsum dolor sit amet.</div>"; $this->assertHTMLEquals($expected, $html); } @@ -187,8 +187,8 @@ public function testRenderWithButtons(string $factory_method): void $html = $this->normalizeHTML($r->render($g)); $expected = "<div class=\"alert $css_classes\" role=\"$role_type\">" . - "<div class=\"ilAccHeadingHidden\"><a name=\"il_message_focus\">" . - $g->getType() . "_message</a></div>Lorem ipsum dolor sit amet." . + "<div class=\"ilAccHeadingHidden\">" . + $g->getType() . "_message</div>Lorem ipsum dolor sit amet." . "<div><button class=\"btn btn-default\" data-action=\"#\" id=\"id_1\">Confirm</button>" . "<button class=\"btn btn-default\" data-action=\"#\" id=\"id_2\">Cancel</button></div></div>"; $this->assertHTMLEquals($expected, $html); @@ -212,8 +212,8 @@ public function testRenderWithLinks(string $factory_method): void $html = $this->normalizeHTML($r->render($g)); $expected = "<div class=\"alert $css_classes\" role=\"$role_type\">" . - "<div class=\"ilAccHeadingHidden\"><a name=\"il_message_focus\">" . - $g->getType() . "_message</a></div>Lorem ipsum dolor sit amet." . + "<div class=\"ilAccHeadingHidden\">" . + $g->getType() . "_message</div>Lorem ipsum dolor sit amet." . "<ul><li><a href=\"#\" >Open Exercise Assignment</a></li>" . "<li><a href=\"#\" >Open other screen</a></li></ul></div>"; $this->assertHTMLEquals($expected, $html); @@ -239,8 +239,8 @@ public function testRenderWithButtonsAndLinks(string $factory_method): void $html = $this->normalizeHTML($r->render($g)); $expected = "<div class=\"alert $css_classes\" role=\"$role_type\">" . - "<div class=\"ilAccHeadingHidden\"><a name=\"il_message_focus\">" . - $g->getType() . "_message</a></div>Lorem ipsum dolor sit amet." . + "<div class=\"ilAccHeadingHidden\">" . + $g->getType() . "_message</div>Lorem ipsum dolor sit amet." . "<div><button class=\"btn btn-default\" data-action=\"#\" id=\"id_1\">Confirm</button>" . "<button class=\"btn btn-default\" data-action=\"#\" id=\"id_2\">Cancel</button></div>" . "<ul><li><a href=\"#\" >Open Exercise Assignment</a></li>" . diff --git a/components/ILIAS/UI/tests/Component/Modal/LightboxTest.php b/components/ILIAS/UI/tests/Component/Modal/LightboxTest.php index 108e4c92827f..e587b2760eee 100755 --- a/components/ILIAS/UI/tests/Component/Modal/LightboxTest.php +++ b/components/ILIAS/UI/tests/Component/Modal/LightboxTest.php @@ -183,11 +183,11 @@ protected static function getExpectedMixedPagesHTML(): string </div> </div> - <button class="left carousel-control btn-link" href="#id_1_carousel" role="button" data-slide="prev"> + <button class="left carousel-control btn-link" href="#id_1_carousel" role="button" type="button" data-slide="prev"> <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> <span class="sr-only">Previous</span> </button> - <button class="right carousel-control btn-link" href="#id_1_carousel" role="button" data-slide="next"> + <button class="right carousel-control btn-link" href="#id_1_carousel" role="button" type="button" data-slide="next"> <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> <span class="sr-only">Next</span> </button> diff --git a/components/ILIAS/UI/tests/Component/Player/PlayerAudioTest.php b/components/ILIAS/UI/tests/Component/Player/PlayerAudioTest.php index 2fe81bb5057b..4ce1d49f55f6 100755 --- a/components/ILIAS/UI/tests/Component/Player/PlayerAudioTest.php +++ b/components/ILIAS/UI/tests/Component/Player/PlayerAudioTest.php @@ -100,7 +100,7 @@ public function testRenderAudio(): void $expected = <<<EOT <div class="il-audio-container"> - <audio class="il-audio-player" id="id_1" src="/foo" preload="metadata"></audio> + <audio controls="controls" class="il-audio-player" id="" src="/foo" preload="metadata"></audio> </div> EOT; $this->assertHTMLEquals( diff --git a/components/ILIAS/UI/tests/Component/Player/PlayerVideoTest.php b/components/ILIAS/UI/tests/Component/Player/PlayerVideoTest.php index f5809800b186..27b963f10575 100755 --- a/components/ILIAS/UI/tests/Component/Player/PlayerVideoTest.php +++ b/components/ILIAS/UI/tests/Component/Player/PlayerVideoTest.php @@ -108,7 +108,7 @@ public function testRenderVideo(): void $html = $r->render($video); $expected = <<<EOT <div class="il-video-container"> - <video class="il-video-player" id="id_1" src="/foo" style="max-width: 100%;" preload="metadata" > + <video controls="controls" class="il-video-player" id="" src="/foo" preload="metadata" > </video> </div> EOT; @@ -126,10 +126,9 @@ public function testRenderWithPoster(): void $video = $f->video("/foo")->withPoster("bar.jpg"); $html = $r->render($video); - $expected = <<<EOT <div class="il-video-container"> - <video class="il-video-player" id="id_1" src="/foo" style="max-width: 100%;" preload="metadata" poster="bar.jpg"> + <video controls="controls" class="il-video-player" id="" src="/foo" preload="metadata" poster="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" style="background-image:url('bar.jpg')"> </video> </div> EOT; @@ -149,10 +148,50 @@ public function testRenderWithSubtitles(): void $html = $r->render($video); $expected = <<<EOT <div class="il-video-container"> - <video class="il-video-player" id="id_1" src="/foo" style="max-width: 100%;" preload="metadata" > + <video controls="controls" class="il-video-player" id="" src="/foo" preload="metadata" > <track kind="subtitles" src="subtitles.vtt" srclang="en" /> </video> </div> +EOT; + $this->assertHTMLEquals( + $this->brutallyTrimHTML($expected), + $this->brutallyTrimHTML($html) + ); + } + + public function testRenderYoutube(): void + { + $f = $this->getFactory(); + $r = $this->getDefaultRenderer(); + + $video = $f->video("https://www.youtube.com/embed/YSN2osYbshQ"); + + $html = $r->render($video); + + $expected = <<<EOT +<div class="il-video-container"> + <iframe id="" src="https://www.youtube.com/embed/YSN2osYbshQ" allow="fullscreen; autoplay; picture-in-picture;" referrerpolicy="strict-origin-when-cross-origin"></iframe> +</div> +EOT; + $this->assertHTMLEquals( + $this->brutallyTrimHTML($expected), + $this->brutallyTrimHTML($html) + ); + } + + public function testRenderVimeo(): void + { + $f = $this->getFactory(); + $r = $this->getDefaultRenderer(); + + $video = $f->video("https://player.vimeo.com/video/669475821"); + + $html = $r->render($video); + + $expected = <<<EOT +<div class="il-video-container"> + <iframe id="" src="https://player.vimeo.com/video/669475821" allow="fullscreen; autoplay; picture-in-picture;" referrerpolicy="strict-origin-when-cross-origin"></iframe> +</div> EOT; $this->assertHTMLEquals( $this->brutallyTrimHTML($expected), diff --git a/components/ILIAS/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php b/components/ILIAS/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php index ffcc07862cb4..d45aee147572 100755 --- a/components/ILIAS/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php +++ b/components/ILIAS/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php @@ -395,9 +395,6 @@ public function getAdditionalToggleElement(): ?array public function setAsynch(bool $a_val): void { - if ($a_val) { - ilYuiUtil::initConnection(); - } $this->asynch = $a_val; } diff --git a/components/ILIAS/UIComponent/Explorer/classes/class.ilExplorer.php b/components/ILIAS/UIComponent/Explorer/classes/class.ilExplorer.php index c92945765c81..9d03f34203f2 100755 --- a/components/ILIAS/UIComponent/Explorer/classes/class.ilExplorer.php +++ b/components/ILIAS/UIComponent/Explorer/classes/class.ilExplorer.php @@ -513,7 +513,6 @@ public function forceExpanded($a_obj_id): bool public function getMaximumTreeDepth(): int { - $this->tree->getMaximumDepth(); return 0; // seems to not return the value... } @@ -531,7 +530,6 @@ public function getOutput(): string $this->createLines($i); } - ilYuiUtil::initConnection(); $tpl->addJavaScript("assets/js/ilExplorer.js"); //echo "hh"; diff --git a/components/ILIAS/UIComponent/Explorer2/classes/class.ilExplorerBaseGUI.php b/components/ILIAS/UIComponent/Explorer2/classes/class.ilExplorerBaseGUI.php index d06af7c8e25a..634666a78009 100755 --- a/components/ILIAS/UIComponent/Explorer2/classes/class.ilExplorerBaseGUI.php +++ b/components/ILIAS/UIComponent/Explorer2/classes/class.ilExplorerBaseGUI.php @@ -93,7 +93,6 @@ public function __construct( $this->requested_searchterm = ($params["searchterm"] ?? ""); $this->nodeOnclickEnabled = true; - ilYuiUtil::initConnection(); } public function setChildLimit(int $a_val): void @@ -601,7 +600,6 @@ public static function init(?ilGlobalTemplateInterface $a_main_tpl = null): void $tpl = $a_main_tpl ?? $DIC["tpl"]; - ilYuiUtil::initConnection(); iljQueryUtil::initjQuery($tpl); $tpl->addJavaScript(self::getLocalExplorerJsPath()); diff --git a/components/ILIAS/UIComponent/Explorer2/classes/class.ilTreeExplorerGUI.php b/components/ILIAS/UIComponent/Explorer2/classes/class.ilTreeExplorerGUI.php index a38fb0b75a34..5f2d7404ef03 100755 --- a/components/ILIAS/UIComponent/Explorer2/classes/class.ilTreeExplorerGUI.php +++ b/components/ILIAS/UIComponent/Explorer2/classes/class.ilTreeExplorerGUI.php @@ -408,6 +408,10 @@ public function build( }); } + $node = $node->withHighlighted( + $this->isNodeHighlighted($record) + ); + return $node; } diff --git a/components/ILIAS/UIComponent/SyntaxHighlighter/classes/class.ilSyntaxHighlighter.php b/components/ILIAS/UIComponent/SyntaxHighlighter/classes/class.ilSyntaxHighlighter.php deleted file mode 100755 index da185990a99b..000000000000 --- a/components/ILIAS/UIComponent/SyntaxHighlighter/classes/class.ilSyntaxHighlighter.php +++ /dev/null @@ -1,144 +0,0 @@ -<?php - -/** - * This file is part of ILIAS, a powerful learning management system - * published by ILIAS open source e-Learning e.V. - * - * ILIAS is licensed with the GPL-3.0, - * see https://www.gnu.org/licenses/gpl-3.0.en.html - * You should have received a copy of said license along with the - * source code, too. - * - * If this is not the case or you just want to try ILIAS, you'll find - * us at: - * https://www.ilias.de - * https://github.com/ILIAS-eLearning - * - *********************************************************************/ - -/** - * Syntax highlighter wrapper class - * - * @author Alexander Killing <killing@leifos.de> - * - * @deprecated with ILIAS 12 - */ -class ilSyntaxHighlighter -{ - public const JAVA = "java"; - public const PHP = "php"; - public const C = "c"; - public const CPP = "cpp"; - public const HTML = "html4strict"; - public const XML = "xml"; - public const VISUAL_BASIC = "vb"; - public const LATEX = "latex"; - public const DELPHI = "delphi"; - public const PYTHON = "python"; - public const CSS = "css"; - public const JAVASCRIPT = "javascript"; - public const SQL = "sql"; - public const BASH = "bash"; - public const POWERSHELL = "powershell"; - - /** - * @var string[] - */ - protected static array $langs = array( - self::BASH => "Bash", - self::C => "C", - self::CPP => "C++", - self::CSS => "CSS", - self::DELPHI => "Delphi", - self::HTML => "HTML", - self::JAVA => "Java", - self::JAVASCRIPT => "Javascript", - self::LATEX => "LaTeX", - self::PHP => "PHP", - self::POWERSHELL => "Powershell", - self::PYTHON => "Python", - self::SQL => "SQL", - self::VISUAL_BASIC => "Visual Basic", - self::XML => "XML" - ); - - /** - * @var string[] - */ - protected static array $v51_map = array( - "php3" => "php", - "java122" => "java", - "html" => "html4strict" - ); - - protected string $lang; - - protected function __construct(string $a_lang) - { - $this->lang = $a_lang; - } - - public static function getInstance(string $a_lang): self - { - return new self($a_lang); - } - - /** - * Get supported languages (keys are internal values, values are for representation) - * @return string[] - */ - public static function getSupportedLanguages(): array - { - return self::$langs; - } - - /** - * Is language supported? - */ - public static function isSupported(string $a_lang): bool - { - return isset(self::$langs[$a_lang]); - } - - /** - * Get new language id (for an old one) - */ - public static function getNewLanguageId(string $a_old_lang_id): string - { - return self::$v51_map[$a_old_lang_id] ?? $a_old_lang_id; - } - - - /** - * Get supported languages (keys are ILIAS <= 5.1 internal values, values are for representation) - */ - public static function getSupportedLanguagesV51(): array - { - $langs = array(); - $map = array_flip(self::$v51_map); - foreach (self::$langs as $k => $v) { - if (isset($map[$k])) { - $k = $map[$k]; - } - $langs[$k] = $v; - } - return $langs; - } - - public function highlight(string $a_code): string - { - include_once("./vendor/composer/vendor/geshi/geshi/src/geshi.php"); - $geshi = new Geshi(html_entity_decode($a_code), $this->lang); - - //var_dump($geshi->get_supported_languages()); exit; - - //$geshi->set_header_type(GESHI_HEADER_NONE); // does not work as expected, see below - $a_code = $geshi->parse_code(); - - // remove geshi pre tag (setting GESHI_HEADER_NONE gives us undesired br tags) - $a_code = substr($a_code, strpos($a_code, ">") + 1); - $a_code = substr($a_code, 0, strrpos($a_code, "<")); - - return $a_code; - } -} diff --git a/components/ILIAS/UIComponent/Toolbar/classes/class.ilToolbarGUI.php b/components/ILIAS/UIComponent/Toolbar/classes/class.ilToolbarGUI.php index f8f8fdd19609..ecd3ac58b3b7 100755 --- a/components/ILIAS/UIComponent/Toolbar/classes/class.ilToolbarGUI.php +++ b/components/ILIAS/UIComponent/Toolbar/classes/class.ilToolbarGUI.php @@ -466,6 +466,16 @@ public function setItems(array $items): void $this->items = $items; } + public function getStickyItems(): array + { + return $this->sticky_items; + } + + public function setStickyItems(array $items): void + { + $this->sticky_items = $items; + } + /** * If the toolbar consists of only one button, make it sticky * Note: Atm this is only possible for buttons. If we are dealing with objects implementing the ilToolbarItem diff --git a/components/ILIAS/UICore/classes/Path/class.ilCtrlExistingPath.php b/components/ILIAS/UICore/classes/Path/class.ilCtrlExistingPath.php index 061223889de5..c777bdb1ed4f 100755 --- a/components/ILIAS/UICore/classes/Path/class.ilCtrlExistingPath.php +++ b/components/ILIAS/UICore/classes/Path/class.ilCtrlExistingPath.php @@ -36,5 +36,28 @@ public function __construct(ilCtrlStructureInterface $structure, string $cid_pat parent::__construct($structure); $this->cid_path = $cid_path; + $this->ensureValidCidPath(); + } + + /** + * Ensures each consecutive pair of CIDs must have a valid parent–child relationship. + * CID-paths with <= 1 CID are to be considered valid. + */ + protected function ensureValidCidPath(): void + { + $cid_array = $this->getCidArray(SORT_ASC); + $cid_count = count($cid_array); + if ($cid_count <= 1) { + return; + } + for ($current = 0, $max = ($cid_count - 1); $current < $max; $current++) { + $parent_cid = $cid_array[$current]; + $child_cid = $cid_array[$current + 1]; + $child_class = $this->structure->getClassNameByCid($child_cid); + $allowed_children = $this->structure->getChildrenByCid($parent_cid) ?? []; + if (null === $child_class || !in_array($child_class, $allowed_children, true)) { + throw new RuntimeException('ilCtrl: invalid ' . ilCtrlInterface::PARAM_CID_PATH . ' parameter requested.'); + } + } } } diff --git a/components/ILIAS/UICore/classes/Structure/class.ilCtrlStructureMapper.php b/components/ILIAS/UICore/classes/Structure/class.ilCtrlStructureMapper.php index 0bd3cc5d44cd..76d9c2292310 100755 --- a/components/ILIAS/UICore/classes/Structure/class.ilCtrlStructureMapper.php +++ b/components/ILIAS/UICore/classes/Structure/class.ilCtrlStructureMapper.php @@ -19,8 +19,6 @@ declare(strict_types=1); /** - * Class ilCtrlStructureMapper - * * @author Thibeau Fuhrer <thf@studer-raimann.ch> */ class ilCtrlStructureMapper @@ -64,6 +62,8 @@ public function getStructure(): array private function addViseVersaMappingByClass(string $class_name, string $key_ref_from, string $key_ref_to): void { if (!empty($this->ctrl_structure[$class_name][$key_ref_from])) { + $invalid_indices = []; + foreach ($this->ctrl_structure[$class_name][$key_ref_from] as $index => $reference) { $is_reference_available = isset($this->ctrl_structure[$reference]); $is_reference_valid = $this->isStructureEntryValid($reference); @@ -85,9 +85,11 @@ private function addViseVersaMappingByClass(string $class_name, string $key_ref_ // if the referenced class does not exist within the current // structure, the reference is removed from the reference list. if (!$is_reference_available || !$is_reference_valid) { - $this->removeReference($this->ctrl_structure[$class_name][$key_ref_from], $index); + $invalid_indices[] = $index; } } + + $this->removeInvalidReferences($invalid_indices, $class_name, $key_ref_from); } } @@ -119,19 +121,20 @@ private function mapStructure(): void } /** - * Removes an entry within the given reference list for the - * given index and re-indexes the reference list afterwards. - * - * @param array $reference_list - * @param string|int $index + * @param list<int> $invalid_indices */ - private function removeReference(array &$reference_list, $index): void + private function removeInvalidReferences(array $invalid_indices, string $class_name, string $key_ref_from): void { - // remove the reference of the current index. - unset($reference_list[$index]); + foreach ($invalid_indices as $index) { + unset($this->ctrl_structure[$class_name][$key_ref_from][$index]); + } - // re-index the reference list. - $reference_list = array_values($reference_list); + // Re-index the array once after all removals + if (!empty($invalid_indices)) { + $this->ctrl_structure[$class_name][$key_ref_from] = array_values( + $this->ctrl_structure[$class_name][$key_ref_from] + ); + } } /** diff --git a/components/ILIAS/UICore/classes/class.ilCtrlContext.php b/components/ILIAS/UICore/classes/class.ilCtrlContext.php index b620ab712402..71b0c2ef856b 100755 --- a/components/ILIAS/UICore/classes/class.ilCtrlContext.php +++ b/components/ILIAS/UICore/classes/class.ilCtrlContext.php @@ -298,7 +298,7 @@ protected function adoptRequestParameters(): void // if an existing path is provided use it by default. $existing_path = $this->getQueryParam(ilCtrlInterface::PARAM_CID_PATH); if (null !== $existing_path) { - $this->path = $this->path_factory->existing($existing_path); + $this->path = $this->path_factory->existing(rawurldecode($existing_path)); } // set the provided baseclass, which might override the diff --git a/components/ILIAS/UICore/classes/class.ilGlobalTemplate.php b/components/ILIAS/UICore/classes/class.ilGlobalTemplate.php index fb1d0ef29dc6..b218923e4c1c 100755 --- a/components/ILIAS/UICore/classes/class.ilGlobalTemplate.php +++ b/components/ILIAS/UICore/classes/class.ilGlobalTemplate.php @@ -128,7 +128,6 @@ public function __construct( public function printToString(string $part = self::DEFAULT_BLOCK): string { global $DIC; - ilYuiUtil::initDom(); return $this->renderPage($part, true, false, $DIC); } @@ -1006,9 +1005,6 @@ public function printToStdout( ): void { global $DIC; - // include yahoo dom per default - ilYuiUtil::initDom(); - header('P3P: CP="CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa OUR BUS IND UNI COM NAV INT CNT STA PRE"'); header("Content-type: text/html; charset=UTF-8"); diff --git a/components/ILIAS/UICore/classes/class.ilTemplate.php b/components/ILIAS/UICore/classes/class.ilTemplate.php index aa20abbacedc..64a9fda521d6 100755 --- a/components/ILIAS/UICore/classes/class.ilTemplate.php +++ b/components/ILIAS/UICore/classes/class.ilTemplate.php @@ -356,10 +356,17 @@ protected function getTemplatePath(string $a_tplname, string $a_in_module = ''): if (str_starts_with($a_tplname, $ilias_root)) { $a_tplname = str_replace($ilias_root, '', $a_tplname); } - if (strpos($a_tplname, 'public/Customizing/global/plugins')) { + + // Special Cases for plugins + if (str_starts_with($a_tplname, 'Customizing/global/plugins/')) { + $a_tplname = "public/$a_tplname"; + } + + if (str_contains($a_tplname, 'public/Customizing/global/plugins')) { $tpl_sub_path = ''; } + // Proceed with skin lookup $base_path = $ilias_root; $default = $base_path . $a_in_module . $tpl_sub_path . $a_tplname; diff --git a/components/ILIAS/UICore/tests/ilTemplateTest.php b/components/ILIAS/UICore/tests/ilTemplateTest.php index 0d303cded05d..4c0b00a7e996 100644 --- a/components/ILIAS/UICore/tests/ilTemplateTest.php +++ b/components/ILIAS/UICore/tests/ilTemplateTest.php @@ -93,9 +93,9 @@ public static function templatePathDataProvider(): array ], 'plugin template_file_no_component' => [ 'skin' => 'default', 'style' => 'delos', 'file_exists' => true, - 'tpl_filename' => $il_root . '/components/ILIAS/Component/classes/../../../../public/Customizing/global/plugins/Services/User/UDFDefinition/CascadingSelect/templates/tpl.prop_cascading_select.html', + 'tpl_filename' => $il_root . '/public/Customizing/global/plugins/Services/User/UDFDefinition/CascadingSelect/templates/tpl.prop_cascading_select.html', 'component' => '', - 'expected' => $il_root . '/components/ILIAS/Component/classes/../../../../public/Customizing/global/plugins/Services/User/UDFDefinition/CascadingSelect/templates/tpl.prop_cascading_select.html', + 'expected' => $il_root . '/public/Customizing/global/plugins/Services/User/UDFDefinition/CascadingSelect/templates/tpl.prop_cascading_select.html', ], 'custom skin' => [ 'skin' => 'mySkin', 'style' => 'myStyle', 'file_exists' => true, diff --git a/components/ILIAS/User/classes/Actions/class.ilUserActionAdminGUI.php b/components/ILIAS/User/classes/Actions/class.ilUserActionAdminGUI.php index 18796790a22a..82ef6498c233 100755 --- a/components/ILIAS/User/classes/Actions/class.ilUserActionAdminGUI.php +++ b/components/ILIAS/User/classes/Actions/class.ilUserActionAdminGUI.php @@ -22,7 +22,7 @@ use ILIAS\UI\Factory as UIFactory; use ILIAS\UI\Renderer as UIRenderer; use ILIAS\UI\Component\Input\Container\Form\Standard as StandardForm; - +use ILIAS\UI\Component\MessageBox\MessageBox; use Psr\Http\Message\ServerRequestInterface; /** @@ -87,20 +87,12 @@ public function executeCommand(): void public function show(): void { - if (!$this->rbabsystem->checkAccess('write', $this->ref_id)) { - $this->ctrl->redirect($this, 'show'); + if (!$this->rbabsystem->checkAccess('read', $this->ref_id)) { + $this->ctrl->redirectByClass(ilObjRootFolderGUI::class); } $this->tpl->setOnScreenMessage('info', $this->lng->txt('user_actions_activation_info')); - $inputs = []; - - foreach($this->getActions() as $action) { - $inputs["{$action['action_comp_id']}:{$action['action_type_id']}"] = - $this->ui_factory->input()->field()->checkbox($action["action_type_name"]) - ->withValue($action['active']); - } - $this->tpl->setContent( $this->ui_renderer->render( $this->buildForm() @@ -112,10 +104,12 @@ private function buildForm(): StandardForm { $inputs = []; - foreach($this->getActions() as $action) { + foreach ($this->getActions() as $action) { $inputs["{$action['action_comp_id']}:{$action['action_type_id']}"] = $this->ui_factory->input()->field()->checkbox($action["action_type_name"]) - ->withValue($action['active']); + ->withDisabled( + !$this->rbabsystem->checkAccess('write', $this->ref_id) + )->withValue($action['active']); } return $this->ui_factory->input()->container()->form()->standard( @@ -127,7 +121,12 @@ private function buildForm(): StandardForm public function save(): void { if (!$this->rbabsystem->checkAccess('write', $this->ref_id)) { - $this->ctrl->redirect($this, 'show'); + $this->tpl->setOnScreenMessage( + MessageBox::FAILURE, + $this->lng->txt('no_permission'), + true + ); + $this->ctrl->redirectByClass(self::class, 'show'); } $form = $this->buildForm()->withRequest($this->request); diff --git a/components/ILIAS/User/classes/Actions/class.ilUserUserActionProvider.php b/components/ILIAS/User/classes/Actions/class.ilUserUserActionProvider.php index 5a2478ccafd3..eb2b87f2ea1c 100755 --- a/components/ILIAS/User/classes/Actions/class.ilUserUserActionProvider.php +++ b/components/ILIAS/User/classes/Actions/class.ilUserUserActionProvider.php @@ -16,15 +16,30 @@ * *********************************************************************/ +declare(strict_types=1); + +use ILIAS\User\StaticURLHandler; +use ILIAS\StaticURL\Services as StaticURLServices; + /** * Adds link to profile * @author Alexander Killing <killing@leifos.de> */ class ilUserUserActionProvider extends ilUserActionProvider { + private readonly StaticURLServices $static_url; + + public function __construct() + { + global $DIC; + $this->static_url = $DIC['static_url']; + + parent::__construct(); + } + public function getComponentId(): string { - return "user"; + return 'user'; } /** @@ -37,12 +52,11 @@ public function getActionTypes(): array ]; } - public function collectActionsForTargetUser(int $a_target_user): ilUserActionCollection + public function collectActionsForTargetUser(int $target_user): ilUserActionCollection { $coll = new ilUserActionCollection(); - if (!in_array( - ilObjUser::_lookupPref($a_target_user, "public_profile"), + ilObjUser::_lookupPref($target_user, "public_profile"), ["y", "g"] )) { return $coll; @@ -51,7 +65,13 @@ public function collectActionsForTargetUser(int $a_target_user): ilUserActionCol $f = new ilUserAction(); $f->setType("profile"); $f->setText($this->lng->txt('profile')); - $f->setHref("./goto.php?target=usr_" . $a_target_user); + $f->setHref( + $this->static_url->builder()->build( + StaticURLHandler::NAMESPACE, + null, + [$target_user] + )->__toString() + ); $coll->addAction($f); return $coll; diff --git a/components/ILIAS/User/classes/Avatar/class.ilUserAvatarResolver.php b/components/ILIAS/User/classes/Avatar/class.ilUserAvatarResolver.php index 238958dfa3de..a6ad2a6f414c 100755 --- a/components/ILIAS/User/classes/Avatar/class.ilUserAvatarResolver.php +++ b/components/ILIAS/User/classes/Avatar/class.ilUserAvatarResolver.php @@ -65,7 +65,7 @@ public function __construct( private function readUserSettings(): void { - $in = $this->db->in('usr_pref.keyword', ['public_upload', 'public_profile'], false, 'text'); + $in = $this->db->in('usr_pref.keyword', ['public_avatar', 'public_profile'], false, 'text'); $res = $this->db->queryF( " SELECT usr_data.rid, usr_pref.* @@ -78,7 +78,7 @@ private function readUserSettings(): void while ($row = $this->db->fetchAssoc($res)) { // MUST be loop $this->rid = $row['rid'] ?? null; switch ($row['keyword']) { - case 'public_upload': + case 'public_avatar': $this->has_public_upload = $row['value'] === 'y'; break; case 'public_profile': diff --git a/components/ILIAS/User/classes/class.ilObjUser.php b/components/ILIAS/User/classes/class.ilObjUser.php index 01e6f5b5e050..1efc2d2fec73 100755 --- a/components/ILIAS/User/classes/class.ilObjUser.php +++ b/components/ILIAS/User/classes/class.ilObjUser.php @@ -17,6 +17,7 @@ *********************************************************************/ use ILIAS\User\LocalDIC; +use ILIAS\User\Context; use ILIAS\User\Profile\Data; use ILIAS\User\Profile\DataRepository as ProfileDataRepository; use ILIAS\User\Profile\Fields\ConfigurationRepository as ProfileConfigurationRepository; @@ -77,6 +78,7 @@ class ilObjUser extends ilObject private string $last_profile_prompt = ''; // timestamp private string $first_login = ''; // timestamp private bool $profile_incomplete = false; + private array $last_visited = []; private Data $profile_data; private ProfileDataRepository $profile_data_repository; @@ -234,6 +236,7 @@ private function assignSystemInformationFromDB(array $data): void $this->auth_mode = $data['auth_mode']; $this->ext_account = $data['ext_account'] ?? ''; $this->is_self_registered = $data['is_self_registered']; + $this->last_visited = $data['last_visited']; } private function buildSystemInformationArrayForDB(): array @@ -263,6 +266,7 @@ private function buildSystemInformationArrayForDB(): array 'is_self_registered' => $this->is_self_registered, 'last_update' => $this->last_update, 'create_date' => $this->create_date, + 'last_visited' => $this->last_visited ]; } @@ -317,7 +321,7 @@ public function getLastHistoryData(): ?array ]; } - public function updateLogin(string $login): bool + public function updateLogin(string $login, Context $context): bool { if ($login === '' || $login === $this->profile_data->getAlias()) { return false; @@ -325,8 +329,10 @@ public function updateLogin(string $login): bool $last_history_entry = $this->getLastHistoryData(); - if (!$this->profile_configuration_repository - ->getByClass(Alias::class)->isChangeableByUser()) { + if (!$context->isFieldChangeable( + $this->profile_configuration_repository->getByClass(Alias::class), + $this + )) { throw new ilUserException($this->lng->txt('permission_denied')); } @@ -486,7 +492,15 @@ public function delete(): bool ilSession::_destroyByUserId($this->getId()); ilLDAPRoleGroupMapping::_getInstance()->deleteUser($this->getId()); - $this->rbac_admin->removeUser($this->getId()); + + /** + * skergomard, 2025-12-01: Ok, this is not right, but we can sadly not change this + * as the User is initialized before RbacAdmin, so that the corresponding property + * that actually does exist, is never initialized in this class. + */ + /** @var ILIAS\DI\Container $DIC */ + global $DIC; + $DIC['rbacadmin']->removeUser($this->getId()); (ilOrgUnitUserAssignmentQueries::getInstance())->deleteAllAssignmentsOfUser($this->getId()); $mailbox = new ilMailbox($this->getId()); @@ -997,6 +1011,17 @@ public function getLastUpdate(): string return $this->last_update; } + public function getLastVisited(): array + { + return $this->last_visited; + } + + public function updateLastVisited(array $last_visited): void + { + $this->last_visited = $last_visited; + $this->profile_data_repository->storeLastVisitedFor($this->id, $last_visited); + } + /** * set date the user account was activated * null indicates that the user has not yet been activated @@ -1173,9 +1198,9 @@ public function isPasswordExpired(): bool return false; } - public function getPasswordAge(): int + public function getPasswordAgeInDays(): int { - return (int) (time() - $this->getLastPasswordChangeTS() / 86400); + return (int) floor((time() - $this->getLastPasswordChangeTS()) / 86400); } public function setLastPasswordChangeToNow(): void @@ -3054,13 +3079,13 @@ public static function _getAvatar(int $a_usr_id): Avatar } public static function _getPersonalPicturePath( - int $a_usr_id, - string $a_size = 'small', - bool $a_force_pic = false + int $usr_id, + string $size = 'small', + bool $force_pic = false ): string { - $define = new ilUserAvatarResolver($a_usr_id); - $define->setForcePicture($a_force_pic); - $define->setSize($a_size); + $define = new ilUserAvatarResolver($usr_id); + $define->setForcePicture($force_pic); + $define->setSize($size); return $define->getLegacyPictureURL(); } diff --git a/components/ILIAS/User/classes/class.ilObjUserAccess.php b/components/ILIAS/User/classes/class.ilObjUserAccess.php index 53454f7b491e..32f704ea6105 100755 --- a/components/ILIAS/User/classes/class.ilObjUserAccess.php +++ b/components/ILIAS/User/classes/class.ilObjUserAccess.php @@ -79,7 +79,7 @@ public function canBeDelivered(ilWACPath $ilWACPath): bool } // check if image is in the public profile - $public_upload = ilObjUser::_lookupPref($usr_id, 'public_upload'); + $public_upload = ilObjUser::_lookupPref($usr_id, 'public_avatar'); if ($public_upload != 'y') { return false; } diff --git a/components/ILIAS/User/classes/class.ilObjUserFolder.php b/components/ILIAS/User/classes/class.ilObjUserFolder.php index 379134ed3f90..552572046b3a 100755 --- a/components/ILIAS/User/classes/class.ilObjUserFolder.php +++ b/components/ILIAS/User/classes/class.ilObjUserFolder.php @@ -19,11 +19,12 @@ declare(strict_types=1); use ILIAS\User\LocalDIC; -use ILIAS\User\Context; +use ILIAS\User\BuildExportFieldArray; use ILIAS\User\Profile\Profile; -use ILIAS\User\Profile\Fields\Custom\Custom; use ILIAS\User\Profile\Fields\Standard\Roles; use ILIAS\User\Profile\Fields\Standard\Alias; +use ILIAS\User\Settings\Settings; +use ILIAS\User\Settings\SettingsImplementation; /** * Class ilObjUserFolder @@ -32,6 +33,8 @@ class ilObjUserFolder extends ilObject { + use BuildExportFieldArray; + public const string PERM_READ_ALL = 'read_all_accounts'; public const string PERM_READ_ALL_AND_WRITE = 'read_all_accounts,write'; @@ -41,15 +44,17 @@ class ilObjUserFolder extends ilObject public const FILE_TYPE_XML = 'userfolder_export_xml'; private Profile $profile; + private SettingsImplementation $settings; public function __construct( int $a_id, bool $a_call_by_reference = true ) { - $this->type = "usrf"; + $this->type = 'usrf'; parent::__construct($a_id, $a_call_by_reference); $this->profile = LocalDIC::dic()[Profile::class]; + $this->settings = LocalDIC::dic()[Settings::class]; } @@ -61,20 +66,20 @@ public function delete(): bool public function getExportFilename( string $a_mode = self::FILE_TYPE_EXCEL ): string { - $filename = ""; + $filename = ''; $inst_id = IL_INST_ID; $date = time(); switch ($a_mode) { case self::FILE_TYPE_EXCEL: - $filename = $date . "__" . $inst_id . "__xls_usrf"; + $filename = $date . '__' . $inst_id . '__xls_usrf'; break; case self::FILE_TYPE_CSV: - $filename = $date . "__" . $inst_id . "__csv_usrf.csv"; + $filename = $date . '__' . $inst_id . '__csv_usrf.csv'; break; case self::FILE_TYPE_XML: - $filename = $date . "__" . $inst_id . "__xml_usrf.xml"; + $filename = $date . '__' . $inst_id . '__xml_usrf.xml'; break; } return $filename; @@ -82,7 +87,7 @@ public function getExportFilename( public function getExportDirectory(): string { - $export_dir = ilFileUtils::getDataDir() . "/usrf_data/export"; + $export_dir = ilFileUtils::getDataDir() . '/usrf_data/export'; return $export_dir; } @@ -96,8 +101,8 @@ public function getExportFiles(): array $dir = $this->getExportDirectory(); // quit if export dir not available - if (!is_dir($dir) or - !is_writable($dir)) { + if (!is_dir($dir) + || !is_writable($dir)) { return []; } @@ -109,11 +114,11 @@ public function getExportFiles(): array // get files and save the in the array while ($entry = $dir->read()) { - if ($entry != "." and - $entry != ".." and - preg_match("/^[0-9]{10}_{2}[0-9]+_{2}([a-z0-9]{3})_usrf\.[a-z]{1,4}\$/", $entry, $matches)) { - $filearray["filename"] = $entry; - $filearray["filesize"] = filesize($this->getExportDirectory() . "/" . $entry); + if ($entry !== '.' + && $entry !== '..' + && preg_match('/^[0-9]{10}_{2}[0-9]+_{2}([a-z0-9]{3})_usrf\.[a-z]{1,4}$/', $entry, $matches)) { + $filearray['filename'] = $entry; + $filearray['filesize'] = filesize($this->getExportDirectory() . '/' . $entry); $file[] = $filearray; } } @@ -133,13 +138,15 @@ protected function escapeXML(string $value): string } protected function createXMLExport( - array $settings, + array $fields_to_export, array $data, string $filename ): void { $xml_writer = new ilUserXMLWriter(); $xml_writer->setObjects($data); - $xml_writer->setSettings($settings); + $xml_writer->setFieldsToExport( + array_merge(array_keys($fields_to_export), ['time_limit_owner']) + ); $xml_writer->setAttachRoles(true); if ($xml_writer->start()) { @@ -147,32 +154,20 @@ protected function createXMLExport( } } - protected function getUserDefinedExportFields(): array // Missing array type. - { - return array_map( - fn(Field $v): array => [ - 'name' => $v->getLabel($this->lng), - 'id' => $v->getIdentifier() - ], - $this->profile->getVisibleUserDefinedFields(Context::Export) - ); - } - protected function createCSVExport( - array $settings, + array $fields_to_export, array $data, string $filename ): void { $headerrow = []; $udf_ex_fields = $this->getUserDefinedExportFields(); - foreach ($settings as $value) { // standard fields + foreach ($fields_to_export as $value) { // standard fields $headerrow[] = $this->lng->txt($value); } foreach ($udf_ex_fields as $f) { // custom fields - $headerrow[] = $f["name"]; + $headerrow[] = $f['name']; } - $separator = ";"; $file = fopen($filename, 'wb'); fwrite($file, $this->processCSVRow($headerrow) . "\n"); foreach ($data as $row) { @@ -180,7 +175,7 @@ protected function createCSVExport( foreach ($settings as $header) { // standard fields // multi-text if (isset($row[$header]) && is_array($row[$header])) { - $row[$header] = implode(", ", $row[$header]); + $row[$header] = implode(', ', $row[$header]); } $csvrow[] = $row[$header] ?? ''; @@ -189,9 +184,9 @@ protected function createCSVExport( // custom fields reset($udf_ex_fields); if (count($udf_ex_fields) > 0) { - $udf = new ilUserDefinedData($row["usr_id"]); + $udf = $this->profile->getDataFor($row['usr_id']); foreach ($udf_ex_fields as $f) { // custom fields - $csvrow[] = $udf->get("f_" . $f["id"]); + $csvrow[] = $udf->get('f_' . $f['id']); } } @@ -201,149 +196,69 @@ protected function createCSVExport( } protected function createExcelExport( - array $settings, + array $fields_to_export, array $data, string $filename ): void { $worksheet = new ilExcel(); - $worksheet->addSheet($this->lng->txt("users")); + $worksheet->addSheet($this->lng->txt('users')); $row = 1; $col = 0; - $udf_ex_fields = $this->getUserDefinedExportFields(); - // title row - foreach ($settings as $value) { // standard fields - if ($value == 'ext_account') { - $value = 'user_ext_account'; - } - $worksheet->setCell($row, $col, $this->lng->txt($value)); - $col++; - } - foreach ($udf_ex_fields as $f) { // custom fields - $worksheet->setCell($row, $col, $f["name"]); + foreach ($fields_to_export as $label) { // standard fields + $worksheet->setCell($row, $col, $label); $col++; } - $worksheet->setBold("A1:" . $worksheet->getColumnCoord($col - 1) . "1"); + $worksheet->setBold('A1:' . $worksheet->getColumnCoord($col - 1) . '1'); - $this->lng->loadLanguageModule("meta"); - foreach ($data as $index => $rowdata) { + $this->lng->loadLanguageModule('meta'); + foreach ($data as $rowdata) { $row++; $col = 0; // standard fields - foreach ($settings as $fieldname) { - $value = $rowdata[$fieldname] ?? ""; + foreach (array_keys($fields_to_export) as $fieldname) { + $value = $rowdata[$fieldname] ?? ''; switch ($fieldname) { - case "language": - $worksheet->setCell($row, $col, $this->lng->txt("meta_l_" . $value)); + case 'language': + $worksheet->setCell($row, $col, $this->lng->txt('meta_l_' . $value)); break; - case "time_limit_from": - case "time_limit_until": + case 'time_limit_from': + case 'time_limit_until': $value = $value ? new ilDateTime($value, IL_CAL_UNIX) : null; $worksheet->setCell($row, $col, $value); break; - case "last_login": - case "last_update": - case "create_date": - case "approve_date": - case "agree_date": + case 'last_login': + case 'last_update': + case 'create_date': + case 'approve_date': + case 'agree_date': $value = $value ? new ilDateTime($value, IL_CAL_DATETIME) : null; $worksheet->setCell($row, $col, $value); break; - case "interests_general": - case "interests_help_offered": - case "interests_help_looking": - if (is_array($value) && count($value)) { - $value = implode(", ", $value); - } else { - $value = null; - } - // fallthrough - - // no break default: - $worksheet->setCell($row, $col, $value); - break; + $worksheet->setCell( + $row, + $col, + is_array($value) && $value !== [] + ? implode(', ', $value) + : $value + ); } $col++; } - - // custom fields - reset($udf_ex_fields); - if (count($udf_ex_fields) > 0) { - $udf = new ilUserDefinedData($rowdata["usr_id"]); - foreach ($udf_ex_fields as $f) { // custom fields - $worksheet->setCell($row, $col, $udf->get("f_" . $f["id"])); - $col++; - } - } } $worksheet->writeToFile($filename); } - /** - * @return array of exportable fields - */ - public static function getExportSettings(): array // Missing array type. - { - global $DIC; - - $ilDB = $DIC['ilDB']; - - $db_settings = []; - - $up = LocalDIC::dic()[Profile::class]; - $profile_fields = $up->getFields([], [Roles::class]); - - $query = "SELECT * FROM settings WHERE " . - $ilDB->like("keyword", "text", '%usr_settings_export_%'); - $result = $ilDB->query($query); - while ($row = $result->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) { - if ($row["value"] == "1") { - if (preg_match("/usr_settings_export_(.*)/", $row["keyword"], $setting)) { - $db_settings[] = $setting[1]; - } - } - } - $export_settings = []; - foreach ($profile_fields as $key => $value) { - if (in_array($key, $db_settings)) { - if (strcmp($key, "password") == 0) { - // we do not support password export with ILIAS >= 4.5.x - continue; - } else { - $export_settings[] = $key; - } - } - } - $export_settings[] = "usr_id"; - $export_settings[] = "login"; - $export_settings[] = "last_login"; - $export_settings[] = "last_update"; - $export_settings[] = "create_date"; - $export_settings[] = "time_limit_owner"; - $export_settings[] = "time_limit_unlimited"; - $export_settings[] = "time_limit_from"; - $export_settings[] = "time_limit_until"; - $export_settings[] = "time_limit_message"; - $export_settings[] = "active"; - $export_settings[] = "approve_date"; - $export_settings[] = "agree_date"; - $export_settings[] = "client_ip"; - $export_settings[] = "auth_mode"; - $export_settings[] = "ext_account"; - $export_settings[] = "feedhash"; - return $export_settings; - } - /** * build xml export file */ @@ -352,77 +267,34 @@ public function buildExportFile( ?array $user_data_filter = null, bool $use_temp_dir = false ): string { - global $DIC; - - $ilDB = $DIC['ilDB']; - $lng = $DIC['lng']; - if ($use_temp_dir) { - $expDir = ilFileUtils::ilTempnam(); - $fullname = $expDir; + $export_dir = ilFileUtils::ilTempnam(); + $fullname = $export_dir; } else { - $expDir = $this->getExportDirectory(); + $export_dir = $this->getExportDirectory(); // create export directory if needed $this->createExportDirectory(); - $fullname = $expDir . "/" . $this->getExportFilename($a_mode); - } - - //get data - //$expLog->write(date("[y-m-d H:i:s] ")."User data export: build an array of all user data entries"); - $settings = self::getExportSettings(); - - // user languages - $query = "SELECT * FROM usr_pref WHERE keyword = " . $ilDB->quote('language', 'text'); - $res = $ilDB->query($query); - $languages = []; - while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) { - $languages[$row['usr_id']] = $row['value']; - } - - // multi-text - $multi = []; - $set = $ilDB->query("SELECT * FROM usr_profile_data"); - while ($row = $ilDB->fetchAssoc($set)) { - if (!is_array($user_data_filter) || - in_array($row["usr_id"], $user_data_filter)) { - $multi[$row["usr_id"]][$row["field_id"]][] = $row["value"]; - } + $fullname = $export_dir . '/' . $this->getExportFilename($a_mode); } - $data = []; - $query = "SELECT usr_data.* FROM usr_data " . - " ORDER BY usr_data.lastname, usr_data.firstname"; - $result = $ilDB->query($query); - while ($row = $ilDB->fetchAssoc($result)) { - if (isset($languages[$row['usr_id']])) { - $row['language'] = $languages[$row['usr_id']]; - } else { - $row['language'] = $lng->getDefaultLanguage(); - } - - if (isset($multi[$row["usr_id"]])) { - $row = array_merge($row, $multi[$row["usr_id"]]); - } - - if (is_array($user_data_filter)) { - if (in_array($row["usr_id"], $user_data_filter)) { - $data[] = $row; - } - } else { - $data[] = $row; - } - } - //$expLog->write(date("[y-m-d H:i:s] ")."User data export: build an array of all user data entries"); + $fields_to_export = $this->getExportFieldArray( + $this->lng, + $this->profile, + $this->settings + ); + $data = $this->retrieveExportDataArray( + $this->buildWhereForUserDataFilterArray($user_data_filter ?? []) + ); switch ($a_mode) { case self::FILE_TYPE_EXCEL: - $this->createExcelExport($settings, $data, $fullname); + $this->createExcelExport($fields_to_export, $data, $fullname); break; case self::FILE_TYPE_CSV: - $this->createCSVExport($settings, $data, $fullname); + $this->createCSVExport($fields_to_export, $data, $fullname); break; case self::FILE_TYPE_XML: - $this->createXMLExport($settings, $data, $fullname); + $this->createXMLExport($fields_to_export, $data, $fullname); break; } return $fullname; @@ -441,25 +313,78 @@ private function processCSVRow(array $row): array return implode(';', $resultarray); } + private function retrieveExportDataArray(string $usr_ids_where): array + { + $query = "SELECT * FROM usr_pref WHERE keyword = {$this->db->quote('language', 'text')}"; + if ($usr_ids_where !== '') { + $query .= "AND {$usr_ids_where}"; + } + $res = $this->db->query($query); + $languages = []; + while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) { + $languages[$row['usr_id']] = $row['value']; + } + + // multi-text + $multi = $this->retrieveMultiRowDataArray($usr_ids_where); + + $query = 'SELECT usr_data.* FROM usr_data '; + if ($usr_ids_where !== '') { + $query .= "WHERE {$usr_ids_where} "; + } + $set = $this->db->query("{$query} ORDER BY usr_data.lastname, usr_data.firstname"); + + $data = []; + while ($row = $this->db->fetchAssoc($set)) { + $row['language'] = $languages[$row['usr_id']] ?? $this->lng->getDefaultLanguage(); + $data[] = array_merge($row, $multi[$row['usr_id']] ?? []); + } + + return $data; + } + + private function retrieveMultiRowDataArray(string $usr_ids_where): array + { + $query = 'SELECT * FROM usr_profile_data'; + if ($usr_ids_where !== '') { + $query .= " WHERE {$usr_ids_where}"; + } + $set = $this->db->query($query); + $multi = []; + while ($row = $this->db->fetchAssoc($set)) { + $multi[$row['usr_id']][$row['field_id']][] = $row['value']; + } + return $multi; + } + + private function buildWhereForUserDataFilterArray(array $user_data_filter): string + { + if ($user_data_filter === []) { + return ''; + } + + return $this->db->in('usr_id', $user_data_filter, false, ilDBConstants::T_INTEGER); + } + /** * creates data directory for export files */ - protected function createExportDirectory(): void + private function createExportDirectory(): void { if (!is_dir($this->getExportDirectory())) { - $usrf_data_dir = ilFileUtils::getDataDir() . "/usrf_data"; + $usrf_data_dir = ilFileUtils::getDataDir() . '/usrf_data'; ilFileUtils::makeDir($usrf_data_dir); if (!is_writable($usrf_data_dir)) { - $this->ilias->raiseError("Userfolder data directory (" . $usrf_data_dir - . ") not writeable.", $this->ilias->error_obj->MESSAGE); + $this->ilias->raiseError('Userfolder data directory (' . $usrf_data_dir + . ') not writeable.', $this->ilias->error_obj->MESSAGE); } // create Export subdirectory (data_dir/lm_data/lm_<id>/Export) - $export_dir = $usrf_data_dir . "/export"; + $export_dir = $usrf_data_dir . '/export'; ilFileUtils::makeDir($export_dir); if (!is_dir($export_dir)) { - $this->ilias->raiseError("Creation of Userfolder Export Directory failed.", $this->ilias->error_obj->MESSAGE); + $this->ilias->raiseError('Creation of Userfolder Export Directory failed.', $this->ilias->error_obj->MESSAGE); } } } @@ -490,8 +415,8 @@ public static function _updateUserFolderAssignment( $ilDB = $DIC['ilDB']; - $query = "UPDATE usr_data SET time_limit_owner = " . $ilDB->quote($a_new_id, "integer") . " " . - "WHERE time_limit_owner = " . $ilDB->quote($a_old_id, "integer") . " "; + $query = 'UPDATE usr_data SET time_limit_owner = ' . $ilDB->quote($a_new_id, ilDBConstants::T_INTEGER) . ' ' . + 'WHERE time_limit_owner = ' . $ilDB->quote($a_old_id, ilDBConstants::T_INTEGER) . ' '; $ilDB->manipulate($query); } } diff --git a/components/ILIAS/User/classes/class.ilObjUserFolderGUI.php b/components/ILIAS/User/classes/class.ilObjUserFolderGUI.php index e3e181339cab..095b13388f1d 100755 --- a/components/ILIAS/User/classes/class.ilObjUserFolderGUI.php +++ b/components/ILIAS/User/classes/class.ilObjUserFolderGUI.php @@ -1865,7 +1865,7 @@ public function confirmDeleteExportFileObject(): void public function cancelDeleteExportFileObject(): void { $this->ctrl->redirectByClass( - 'ilobjuserfoldergui', + [self::class, ilExportGUI::class], 'export' ); } @@ -1884,7 +1884,7 @@ public function deleteExportFileObject(): void } } $this->ctrl->redirectByClass( - 'ilobjuserfoldergui', + [self::class, ilExportGUI::class], 'export' ); } @@ -1898,8 +1898,8 @@ protected function performExportObject(): void $this->checkPermission(\ilObjUserFolder::PERM_READ_ALL_AND_WRITE); $this->object->buildExportFile($this->user_request->getExportType()); - $this->ctrl->redirect( - $this, + $this->ctrl->redirectByClass( + [self::class, ilExportGUI::class], 'export' ); } @@ -2114,8 +2114,8 @@ protected function usrExportX86Object(): void $user_ids = $this->getActionUserIds(); if (!$user_ids) { $this->tpl->setOnScreenMessage('failure', $this->lng->txt('select_one'), true); - $this->ctrl->redirect( - $this, + $this->ctrl->redirectByClass( + self::class, 'view' ); } @@ -2126,7 +2126,7 @@ protected function usrExportX86Object(): void $user_ids ); $this->ctrl->redirectByClass( - 'ilobjuserfoldergui', + [self::class, ilExportGUI::class], 'export' ); } elseif ($this->checkUserManipulationAccessBool()) { @@ -2186,8 +2186,8 @@ protected function usrExportXmlObject(): void $user_ids = $this->getActionUserIds(); if (!$user_ids) { $this->tpl->setOnScreenMessage('failure', $this->lng->txt('select_one'), true); - $this->ctrl->redirect( - $this, + $this->ctrl->redirectByClass( + self::class, 'view' ); } @@ -2197,7 +2197,7 @@ protected function usrExportXmlObject(): void $user_ids ); $this->ctrl->redirectByClass( - 'ilobjuserfoldergui', + [self::class, ilExportGUI::class], 'export' ); } elseif ($this->checkUserManipulationAccessBool()) { diff --git a/components/ILIAS/User/classes/class.ilObjUserGUI.php b/components/ILIAS/User/classes/class.ilObjUserGUI.php index 6b17b44c70ad..0df0768d4d28 100755 --- a/components/ILIAS/User/classes/class.ilObjUserGUI.php +++ b/components/ILIAS/User/classes/class.ilObjUserGUI.php @@ -429,7 +429,8 @@ public function updateObject(): void $profile_maybe_incomplete = $this->retrieveAllowIncompleteProfileFromPost(); $this->initForm(!$profile_maybe_incomplete, $this->object); - if (!$this->form_gui->checkInput()) { + if (!$this->form_gui->checkInput() + || !$this->isAccessRangeInputValid()) { $this->form_gui->setValuesByPost(); $this->tabs_gui->activateTab('properties'); $this->renderForm(); @@ -437,7 +438,7 @@ public function updateObject(): void } try { - $this->object->updateLogin($this->form_gui->getInput('username')); + $this->object->updateLogin($this->form_gui->getInput('username'), $this->context); } catch (ilUserException $e) { $this->tpl->setOnScreenMessage('failure', $e->getMessage()); $this->form_gui->setValuesByPost(); @@ -445,16 +446,20 @@ public function updateObject(): void return; } + $this->object->setAuthMode($this->form_gui->getInput('auth_mode')); + $this->object = $this->user_profile->addFormValuesToUser( $this->form_gui, $this->context, $this->object ); - if ($this->user->getId() === (int) SYSTEM_USER_ID - || !in_array(SYSTEM_ROLE_ID, $this->rbac_review->assignedRoles($this->object->getId())) - || in_array(SYSTEM_ROLE_ID, $this->rbac_review->assignedRoles($this->user->getId()))) { - $this->object->setPasswd($this->form_gui->getInput('passwd'), ilObjUser::PASSWD_PLAIN); + $passwd = $this->form_gui->getInput('passwd'); + if (($this->user->getId() === (int) SYSTEM_USER_ID + || !in_array(SYSTEM_ROLE_ID, $this->rbac_review->assignedRoles($this->object->getId())) + || in_array(SYSTEM_ROLE_ID, $this->rbac_review->assignedRoles($this->user->getId()))) + && !empty($passwd)) { + $this->object->setPasswd($passwd, ilObjUser::PASSWD_PLAIN); } if (ilAuthUtils::_isExternalAccountEnabled()) { $this->object->setExternalAccount($this->form_gui->getInput('ext_account')); @@ -643,8 +648,8 @@ private function buildLoginInput( $this->context, $user ); - $input->setDisabled(!$this->context->isFieldChangeableInType($field, $user)); - $input->setRequired($this->context->isFieldChangeableInType($field, $user)); + $input->setDisabled(!$this->context->isFieldChangeable($field, $user)); + $input->setRequired($this->context->isFieldChangeable($field, $user)); return $input; } @@ -810,8 +815,11 @@ private function addStatisticalInformationToForm( $this->form_gui->addItem($input); } - foreach ($this->legal_documents->userManagementFields($this->object) as $input) { - $this->form_gui->addItem($input); + foreach ($this->legal_documents->userManagementFields($this->object) as $identifier => $value) { + if (is_string($value)) { + $value = $this->buildNonEditableInput($identifier, $value); + } + $this->form_gui->addItem($value); } } @@ -1400,4 +1408,19 @@ private function redirectDependingOnParent(): void $this->redirectToRefId($this->usrf_ref_id); } + + private function isAccessRangeInputValid(): bool + { + if ($this->form_gui->getInput('time_limit_unlimited') === '1') { + return true; + } + $timefrom = $this->form_gui->getItemByPostVar('time_limit_from'); + $timeuntil = $this->form_gui->getItemByPostVar('time_limit_until'); + if ($timeuntil->getDate()->get(IL_CAL_UNIX) <= $timefrom->getDate()->get(IL_CAL_UNIX)) { + $this->tpl->setOnScreenMessage('failure', $this->lng->txt('form_input_not_valid')); + $timeuntil->setAlert($this->lng->txt('time_limit_not_valid')); + return false; + } + return true; + } } diff --git a/components/ILIAS/User/classes/class.ilPublicProfileBaseClassGUI.php b/components/ILIAS/User/classes/class.ilPublicProfileBaseClassGUI.php new file mode 100644 index 000000000000..f78f42c66249 --- /dev/null +++ b/components/ILIAS/User/classes/class.ilPublicProfileBaseClassGUI.php @@ -0,0 +1,41 @@ +<?php + +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + * + *********************************************************************/ + +declare(strict_types=1); + +use ILIAS\User\Profile\PublicProfileGUI; + +/** + * This class is just a connector as base classes cannot be namespaced. + * + * @ilCtrl_Calls ilPublicProfileBaseClassGUI: ILIAS\User\Profile\PublicProfileGUI + */ +class ilPublicProfileBaseClassGUI implements \ilCtrlBaseClassInterface +{ + public function executeCommand(): void + { + /** @var \ILIAS\DI\Container $DIC */ + global $DIC; + + $DIC['ilCtrl']->forwardCommand( + new PublicProfileGUI() + ); + + $DIC['tpl']->printToStdout(); + } +} diff --git a/components/ILIAS/User/classes/class.ilRoleAssignmentTableGUI.php b/components/ILIAS/User/classes/class.ilRoleAssignmentTableGUI.php index 393dd18ff550..00bb7c7b8b58 100755 --- a/components/ILIAS/User/classes/class.ilRoleAssignmentTableGUI.php +++ b/components/ILIAS/User/classes/class.ilRoleAssignmentTableGUI.php @@ -26,6 +26,7 @@ class ilRoleAssignmentTableGUI extends ilTable2GUI protected array $filter; // Missing array type. protected \ILIAS\UI\Factory $factory; protected \ILIAS\UI\Renderer $renderer; + protected ilAccess $access; protected ilObjectDefinition $objectDefinition; protected bool $edit_access; @@ -42,7 +43,7 @@ public function __construct( $this->objectDefinition = $DIC['objDefinition']; $this->factory = $DIC->ui()->factory(); $this->renderer = $DIC->ui()->renderer(); - + $this->access = $DIC['ilAccess']; $lng->loadLanguageModule('rbac'); $this->setId("usrroleass"); @@ -122,19 +123,22 @@ protected function fillRow(array $a_set): void // Missing array type. $this->ctrl->setParameterByClass("ilobjrolegui", "ref_id", $a_set['ref_id']); $this->ctrl->setParameterByClass("ilobjrolegui", "obj_id", $a_set["obj_id"]); - $this->tpl->setVariable( - 'ROLE', - $this->renderer->render( + $role = ilObjRole::_getTranslation($a_set['title']); + if ($this->access->checkAccess('edit_permission', '', (int) $a_set['ref_id'])) { + $role = $this->renderer->render( $this->factory->link()->standard( ilObjRole::_getTranslation($a_set['title']), $this->ctrl->getLinkTargetByClass(ilObjRoleGUI::class, 'perm') ) - ) - ); + ); + } + $this->tpl->setVariable('ROLE', $role); $this->tpl->setVariable('DESCRIPTION', $a_set['description']); // Add link to objector local Rores $context = $a_set['context']; - if ($a_set['role_type'] === 'local') { + if ($a_set['role_type'] === 'local' && + ($this->access->checkAccess('visible', '', (int) $a_set['ref_id']) || + $this->access->checkAccess('read', '', (int) $a_set['ref_id']))) { $context = $this->renderer->render( $this->factory->link()->standard( $context, diff --git a/components/ILIAS/User/classes/class.ilUserDataSet.php b/components/ILIAS/User/classes/class.ilUserDataSet.php index 3c587f9274cc..f6f0d237a077 100755 --- a/components/ILIAS/User/classes/class.ilUserDataSet.php +++ b/components/ILIAS/User/classes/class.ilUserDataSet.php @@ -255,7 +255,7 @@ public function readData(string $a_entity, string $a_version, array $a_ids): voi "public_fax", "public_gender", "public_hobby", "public_im_aim", "public_im_icq", "public_im_jabber", "public_im_msn", "public_im_skype", "public_im_voip", "public_im_yahoo", "public_institution", "public_location", "public_matriculation", "public_phone_home", "public_phone_mobile", "public_phone_office", - "public_profile", "public_sel_country", "public_street", "public_title", "public_upload", "public_zipcode", + "public_profile", "public_sel_country", "public_street", "public_title", "public_avatar", "public_zipcode", "screen_reader_optimization", "show_users_online", "store_last_visited", "time_format", "user_tz", "weekstart", "session_reminder_lead_time", "usr_starting_point", diff --git a/components/ILIAS/User/classes/class.ilUserImportParser.php b/components/ILIAS/User/classes/class.ilUserImportParser.php index 793c2629796f..5432ea909492 100755 --- a/components/ILIAS/User/classes/class.ilUserImportParser.php +++ b/components/ILIAS/User/classes/class.ilUserImportParser.php @@ -19,6 +19,7 @@ declare(strict_types=1); use ILIAS\User\LocalDIC; +use ILIAS\User\Context; use ILIAS\User\UserGUIRequest; use ILIAS\User\Profile\Profile; use ILIAS\User\Profile\Data as ProfileData; @@ -412,7 +413,9 @@ public function importBeginTag( } $this->user_obj->setLanguage($a_attribs['Language'] ?? ''); $this->user_obj->setImportId($a_attribs['Id'] ?? ''); - $this->action = (is_null($a_attribs['Action'])) ? 'Insert' : $a_attribs['Action']; + $this->action = isset($a_attribs['Action']) + ? $a_attribs['Action'] + : 'Insert'; $this->current_user_password = null; $this->current_user_password_type = null; $this->currActive = null; @@ -1115,7 +1118,7 @@ public function importEndTag( if ($this->tagContained('PostalCode')) { $update_user->setZipcode($this->user_obj->getZipcode()); } - if ($this->tagContained('SelCountry')) { + if ($this->tagContained('SelCountry') && mb_strlen($this->cdata) === 2) { $update_user->setCountry($this->user_obj->getCountry()); } if ($this->tagContained('PhoneOffice')) { @@ -1224,7 +1227,7 @@ public function importEndTag( // update login if ($this->tagContained('Login') && $this->user_id != -1) { try { - $update_user->updateLogin($this->user_obj->getLogin()); + $update_user->updateLogin($this->user_obj->getLogin(), Context::UserAdministration); } catch (ilUserException $e) { } } @@ -1336,11 +1339,11 @@ public function importEndTag( break; case 'Country': - $this->user_obj->setCountry($this->getCDataWithoutTags($this->cdata)); - break; - case 'SelCountry': - $this->user_obj->setSelectedCountry($this->getCDataWithoutTags($this->cdata)); + if (mb_strlen($this->cdata) !== 2) { + break; + } + $this->user_obj->setCountry($this->getCDataWithoutTags($this->cdata)); break; case 'PhoneOffice': @@ -1687,17 +1690,11 @@ public function verifyEndTag( break; case 'Country': - $this->user_obj->setCountry($this->cdata); - break; - case 'SelCountry': if (mb_strlen($this->cdata) !== 2) { - $this->logFailure( - $this->user_obj->getLogin(), - sprintf($this->lng->txt('usrimport_xml_element_content_illegal'), 'SelCountry', $this->stripTags($this->cdata)) - ); + break; } - $this->user_obj->setSelectedCountry($this->cdata); + $this->user_obj->setCountry($this->cdata); break; case 'PhoneOffice': @@ -2103,6 +2100,7 @@ private function verifyPref(string $key, string $value): void case 'public_phone_office': case 'public_street': case 'public_upload': + case 'public_avatar': case 'public_zip': case 'public_interests_general': case 'public_interests_help_offered': diff --git a/components/ILIAS/User/classes/class.ilUserQuery.php b/components/ILIAS/User/classes/class.ilUserQuery.php index 42894ff2e5fe..fcadd13324cf 100755 --- a/components/ILIAS/User/classes/class.ilUserQuery.php +++ b/components/ILIAS/User/classes/class.ilUserQuery.php @@ -19,8 +19,9 @@ declare(strict_types=1); use ILIAS\User\LocalDIC; -use ILIAS\User\Profile\Fields\Field as ProfileField; +use ILIAS\User\Profile\DataQuery; use ILIAS\User\Profile\Fields\ConfigurationRepository as ProfileFieldsConfigurationRepository; +use ILIAS\User\Profile\DataRepository as ProfileDataRepository; use ILIAS\Language\Language; /** @@ -32,7 +33,28 @@ class ilUserQuery { public const DEFAULT_ORDER_FIELD = 'login'; + private const array DEFAULT_MULTI_FIELDS = [ + 'interests_general', + 'interests_help_offered', + 'interests_help_looking' + ]; + + private const array DEFAULT_FIELDS = [ + 'usr_id', + 'login', + 'firstname', + 'lastname', + 'email', + 'second_email', + 'time_limit_until', + 'time_limit_unlimited', + 'time_limit_owner', + 'last_login', + 'active' + ]; + private Language $lng; + private ilDBInterface $db; private string $order_field = self::DEFAULT_ORDER_FIELD; private string $order_dir = 'asc'; @@ -46,36 +68,27 @@ class ilUserQuery private bool $no_groups = false; private int $crs_grp = 0; private int $role = 0; - private ?array $user_folder = null; // Missing array type. - private array $additional_fields = []; // Missing array type. - private array $users = []; // Missing array type. + private array $user_folder = []; + private array $additional_fields = []; + private array $users = []; private string $first_letter = ''; private bool $has_access = false; private string $authentication_method = ''; - protected array $udf_filter = []; // Missing array type. - /** @var string[] */ - private array $default_fields = [ - "usr_id", - "login", - "firstname", - "lastname", - "email", - "second_email", - "time_limit_until", - "time_limit_unlimited", - "time_limit_owner", - "last_login", - "active" - ]; + protected array $udf_filter = []; private ProfileFieldsConfigurationRepository $profile_fields_repository; + private ProfileDataRepository $profile_data_repository; public function __construct() { /** @var ILIAS\DI\Container $DIC */ global $DIC; $this->lng = $DIC['lng']; - $this->profile_fields_repository = LocalDIC::dic()[ProfileFieldsConfigurationRepository::class]; + $this->db = $DIC['ilDB']; + + $local_dic = LocalDIC::dic(); + $this->profile_fields_repository = $local_dic[ProfileFieldsConfigurationRepository::class]; + $this->profile_data_repository = $local_dic[ProfileDataRepository::class]; } /** @@ -84,26 +97,17 @@ public function __construct() */ public function setUdfFilter(array $filter_array): void // Missing array type. { - $field_names = array_reduce( - $this->profile_fields_repository->get(), - function (array $c, ProfileField $v): array { - if (!$v->isCustom()) { + $this->udf_filter = array_reduce( + array_keys($filter_array), + function (array $c, string $v) use ($filter_array): array { + if ($filter_array[$v] === '') { return $c; } - $c[] = $v->getLabel($this->lng); + $c[mb_substr($v, 4)] = $filter_array[$v]; return $c; }, [] ); - - $valid_udfs = []; - foreach ($filter_array as $udf_name => $udf_value) { - [, $udf_id] = explode('_', $udf_name); - if (in_array($udf_id, $field_names)) { - $valid_udfs[$udf_name] = $udf_value; - } - } - $this->udf_filter = $valid_udfs; } /** @@ -209,17 +213,17 @@ public function setRoleFilter(int $a_role_id): void * Set user folder filter * reference id of user folder or category (local user administration) */ - public function setUserFolder(?array $a_fold_id): void // Missing array type. + public function setUserFolder(?array $user_folder_id): void { - $this->user_folder = $a_fold_id; + $this->user_folder = $user_folder_id ?? []; } /** * Set additional fields (columns in usr_data or 'online_time') */ - public function setAdditionalFields(array $a_add): void // Missing array type. + public function setAdditionalFields(array $additional_fields): void { - $this->additional_fields = $a_add; + $this->additional_fields = $additional_fields; } /** @@ -261,307 +265,207 @@ public function setAuthenticationFilter(string $a_authentication): void */ public function query(): array { - global $DIC; - - $ilDB = $DIC['ilDB']; - - - $udf_fields = []; - $usr_ids = []; - - $join = ""; - - if (is_array($this->additional_fields)) { - foreach ($this->additional_fields as $f) { - if (!in_array($f, $this->default_fields)) { - if ($f === "online_time") { - $this->default_fields[] = "ut_online.online_time"; - $join = " LEFT JOIN ut_online ON (usr_data.usr_id = ut_online.usr_id) "; - } elseif ($f === 'dpro_agreed_on') { - $this->default_fields[] = 'dpro.dpro_agreed_on'; - $join = ' LEFT JOIN (SELECT value AS dpro_agreed_on, usr_id FROM usr_pref WHERE keyword = "dpro_agree_date") AS dpro' . - ' ON (usr_data.usr_id = dpro.usr_id)'; - } elseif (substr($f, 0, 4) === "udf_") { - $udf_fields[] = (int) substr($f, 4); - } else { - $this->default_fields[] = $f; - } - } - } - } - - // if udf fields are involved we need the definitions - $udf_def = []; - // join udf table - foreach ($udf_fields as $id) { - $join .= " LEFT JOIN udf_clob ud_" . $id . " ON (ud_" . $id . ".field_id=" . $ilDB->quote($id) . " AND ud_" . $id . ".usr_id = usr_data.usr_id) "; - } - - // count query - $count_query = "SELECT count(usr_data.usr_id) cnt" . - " FROM usr_data"; - - $all_multi_fields = ["interests_general", "interests_help_offered", "interests_help_looking"]; - $multi_fields = []; - - $sql_fields = []; - foreach ($this->default_fields as $idx => $field) { - if (!$field) { - continue; - } - - if (in_array($field, $all_multi_fields)) { - $multi_fields[] = $field; - } elseif (strpos($field, ".") === false) { - $sql_fields[] = "usr_data." . $field; - } else { - $sql_fields[] = $field; - } - } - - // udf fields - foreach ($udf_fields as $id) { - $sql_fields[] = "ud_" . $id . ".value udf_" . $id; - } - - // basic query - $query = "SELECT " . implode(",", $sql_fields) . - " FROM usr_data" . - $join; - - $count_query .= " " . $join; - - // filter - $query .= " WHERE usr_data.usr_id <> " . $ilDB->quote(ANONYMOUS_USER_ID, "integer"); + /** @var \ILIAS\User\Profile\DataQuery $query */ + $query = $this->addUdfFilterToQuery( + $this->addOrderToQuery( + array_reduce( + $this->additional_fields, + function (DataQuery $c, string $v): DataQuery { + if (in_array($v, self::DEFAULT_FIELDS)) { + return $c; + } + + if (in_array($v, self::DEFAULT_MULTI_FIELDS)) { + return $c->withAdditionalMultiField($v); + } + + if ($v === 'online_time') { + return $c->withAdditionalAdditionalTableSelectField('ut_online.online_time') + ->withAdditionalJoin('LEFT JOIN ut_online ON (usr_data.usr_id = ut_online.usr_id)'); + } + + if ($v === 'dpro_agreed_on') { + return $c->withAdditionalAdditionalTableSelectField('dpro.dpro_agreed_on') + ->withAdditionalJoin( + 'LEFT JOIN (SELECT value AS dpro_agreed_on, usr_id' . PHP_EOL + . 'FROM usr_pref WHERE keyword = "dpro_agree_date") AS dpro' . PHP_EOL + . 'ON (usr_data.usr_id = dpro.usr_id)' + ); + } + + if (str_starts_with($v, 'udf_')) { + return $c->withAdditionalUdfField( + $this->profile_fields_repository->getByIdentifier(mb_substr($v, 4)) + ); + } + + return $c->withAdditionalDefaultTableSelectField($v); + }, + $this->profile_data_repository->getProfileDataQuery(self::DEFAULT_FIELDS) + ) + )->withLimitedUsers($this->users) + ); - // User filter - $count_query .= " WHERE 1 = 1 "; - $count_user_filter = "usr_data.usr_id != " . $ilDB->quote(ANONYMOUS_USER_ID, "integer"); - if ($this->users && is_array(($this->users))) { - $query .= ' AND ' . $ilDB->in('usr_data.usr_id', $this->users, false, 'integer'); - $count_user_filter = $ilDB->in('usr_data.usr_id', $this->users, false, 'integer'); + if ($this->first_letter !== '') { + $query = $query->withAdditionalWhere( + "({$this->db->upper($this->db->substr('usr_data.lastname', 1, 1))})" + ); } - $count_query .= " AND " . $count_user_filter . " "; - $where = " AND"; - - if ($this->first_letter != "") { - $add = $where . " (" . $ilDB->upper($ilDB->substr("usr_data.lastname", 1, 1)) . " = " . $ilDB->upper($ilDB->quote($this->first_letter, "text")) . ") "; - $query .= $add; - $count_query .= $add; - $where = " AND"; + if ($this->text_filter !== '') { // email, name, login + $query = $query->withAdditionalWhere( + "({$this->db->like('usr_data.login', ilDBConstants::T_TEXT, '%' . $this->text_filter . '%')} " + . "OR {$this->db->like('usr_data.firstname', ilDBConstants::T_TEXT, '%' . $this->text_filter . '%')} " + . "OR {$this->db->like('usr_data.lastname', ilDBConstants::T_TEXT, '%' . $this->text_filter . '%')} " + . "OR {$this->db->like('usr_data.second_email', ilDBConstants::T_TEXT, '%' . $this->text_filter . '%')} " + . "OR {$this->db->like('usr_data.email', ilDBConstants::T_TEXT, '%' . $this->text_filter . '%')})" + ); } - if ($this->text_filter != "") { // email, name, login - $add = $where . " (" . $ilDB->like("usr_data.login", "text", "%" . $this->text_filter . "%") . " " . - "OR " . $ilDB->like("usr_data.firstname", "text", "%" . $this->text_filter . "%") . " " . - "OR " . $ilDB->like("usr_data.lastname", "text", "%" . $this->text_filter . "%") . " " . - "OR " . $ilDB->like("usr_data.second_email", "text", "%" . $this->text_filter . "%") . " " . - "OR " . $ilDB->like("usr_data.email", "text", "%" . $this->text_filter . "%") . ") "; - $query .= $add; - $count_query .= $add; - $where = " AND"; + if ($this->activation === 'inactive') { + $query = $query->withAdditionalWhere( + "usr_data.active = {$this->db->quote(0, ilDBConstants::T_INTEGER)}" + ); } - if ($this->activation != "") { // activation - if ($this->activation === "inactive") { - $add = $where . " usr_data.active = " . $ilDB->quote(0, "integer") . " "; - } else { - $add = $where . " usr_data.active = " . $ilDB->quote(1, "integer") . " "; - } - $query .= $add; - $count_query .= $add; - $where = " AND"; + if ($this->activation === 'active') { + $query = $query->withAdditionalWhere( + "usr_data.active = {$this->db->quote(1, ilDBConstants::T_INTEGER)}" + ); } if ($this->last_login instanceof ilDateTime) { // last login if (ilDateTime::_before($this->last_login, new ilDateTime(time() + (60 * 60 * 24), IL_CAL_UNIX), IL_CAL_DAY)) { - $add = $where . " usr_data.last_login < " . - $ilDB->quote($this->last_login->get(IL_CAL_DATETIME), "timestamp"); - $query .= $add; - $count_query .= $add; - $where = " AND"; + $query = $query->withAdditionalWhere( + "usr_data.last_login < {$this->db->quote($this->last_login->get(IL_CAL_DATETIME), ilDBConstants::T_TIMESTAMP)}" + ); } } - if ($this->limited_access) { // limited access - $add = $where . " usr_data.time_limit_unlimited= " . $ilDB->quote(0, "integer"); - $query .= $add; - $count_query .= $add; - $where = " AND"; + if ($this->limited_access) { + $query = $query->withAdditionalWhere( + "usr_data.time_limit_unlimited= {$this->db->quote(0, ilDBConstants::T_INTEGER)}" + ); } - // udf filter - foreach ($this->getUdfFilter() as $k => $f) { - if ($f !== '') { - $udf_id = explode('_', $k)[1]; - $add = "{$where} ud_{$udf_id}.value = {$ilDB->quote($f, 'text')}"; - if ($udf_def[$udf_id]['field_type'] === UDF_TYPE_TEXT) { - $add = "{$where} {$ilDB->like("ud_{$udf_id}.value", 'text', "%{$f}%")}"; - } - $query .= $add; - $count_query .= $add; - $where = ' AND'; - } + if ($this->has_access) { + $query = $query->withAdditionalWhere( + "(time_limit_unlimited = {$this->db->quote(1, ilDBConstants::T_INTEGER)} " + . "OR (time_limit_from < {$this->db->quote(time(), ilDBConstants::T_INTEGER)} " + . "AND time_limit_until > {$this->db->quote(time(), ilDBConstants::T_INTEGER)}))" + ); } - if ($this->has_access) { //user is limited but has access - $unlimited = "time_limit_unlimited = " . $ilDB->quote(1, 'integer'); - $from = "time_limit_from < " . $ilDB->quote(time(), 'integer'); - $until = "time_limit_until > " . $ilDB->quote(time(), 'integer'); - - $add = $where . ' (' . $unlimited . ' OR (' . $from . ' AND ' . $until . '))'; - $query .= $add; - $count_query .= $add; - $where = " AND"; - } - if ($this->no_courses) { // no courses assigned - $add = $where . " usr_data.usr_id NOT IN (" . - "SELECT DISTINCT ud.usr_id " . - "FROM usr_data ud join rbac_ua ON (ud.usr_id = rbac_ua.usr_id) " . - "JOIN object_data od ON (rbac_ua.rol_id = od.obj_id) " . - "JOIN rbac_fa ON (rbac_ua.rol_id = rbac_fa.rol_id) " . - "JOIN tree ON (rbac_fa.parent = tree.child) " . - "WHERE od.title LIKE 'il_crs_%' " . - "AND rbac_fa.assign = 'y' " . - "AND tree.tree > 0)"; - $query .= $add; - $count_query .= $add; - $where = " AND"; + if ($this->no_courses) { + $query = $query->withAdditionalWhere( + 'usr_data.usr_id NOT IN (' + . 'SELECT DISTINCT ud.usr_id ' + . 'FROM usr_data ud join rbac_ua ON (ud.usr_id = rbac_ua.usr_id) ' + . 'JOIN object_data od ON (rbac_ua.rol_id = od.obj_id) ' + . 'JOIN rbac_fa ON (rbac_ua.rol_id = rbac_fa.rol_id) ' + . 'JOIN tree ON (rbac_fa.parent = tree.child) ' + . 'WHERE od.title LIKE "il_crs_%" ' + . 'AND rbac_fa.assign = "y" ' + . 'AND tree.tree > 0)' + ); } - if ($this->no_groups) { // no groups assigned - $add = $where . " usr_data.usr_id NOT IN (" . - "SELECT DISTINCT ud.usr_id " . - "FROM usr_data ud join rbac_ua ON (ud.usr_id = rbac_ua.usr_id) " . - "JOIN object_data od ON (rbac_ua.rol_id = od.obj_id) " . - "JOIN rbac_fa ON (rbac_ua.rol_id = rbac_fa.rol_id) " . - "JOIN tree ON (rbac_fa.parent = tree.child) " . - "WHERE od.title LIKE 'il_grp_%' " . - "AND rbac_fa.assign = 'y' " . - "AND tree.tree > 0)"; - $query .= $add; - $count_query .= $add; - $where = " AND"; + + if ($this->no_groups) { + $query = $query->withAdditionalWhere( + 'usr_data.usr_id NOT IN (' + . 'SELECT DISTINCT ud.usr_id ' + . 'FROM usr_data ud join rbac_ua ON (ud.usr_id = rbac_ua.usr_id) ' + . 'JOIN object_data od ON (rbac_ua.rol_id = od.obj_id) ' + . 'JOIN rbac_fa ON (rbac_ua.rol_id = rbac_fa.rol_id) ' + . 'JOIN tree ON (rbac_fa.parent = tree.child) ' + . 'WHERE od.title LIKE "il_grp_%" ' + . 'AND rbac_fa.assign = "y" ' + . 'AND tree.tree > 0)' + ); } - if ($this->crs_grp > 0) { // members of course/group + + if ($this->crs_grp > 0) { $cgtype = ilObject::_lookupType($this->crs_grp, true); - $add = $where . " usr_data.usr_id IN (" . - "SELECT DISTINCT ud.usr_id " . - "FROM usr_data ud join rbac_ua ON (ud.usr_id = rbac_ua.usr_id) " . - "JOIN object_data od ON (rbac_ua.rol_id = od.obj_id) " . - "WHERE od.title = " . $ilDB->quote("il_" . $cgtype . "_member_" . $this->crs_grp, "text") . ")"; - $query .= $add; - $count_query .= $add; - $where = " AND"; + $query = $query->withAdditionalWhere( + 'usr_data.usr_id IN (' + . 'SELECT DISTINCT ud.usr_id ' + . 'FROM usr_data ud join rbac_ua ON (ud.usr_id = rbac_ua.usr_id) ' + . 'JOIN object_data od ON (rbac_ua.rol_id = od.obj_id) ' + . "WHERE od.title = {$this->db->quote("il_{$cgtype}_member_{$this->crs_grp}", ilDBConstants::T_TEXT)})" + ); } - if ($this->role > 0) { // global role - $add = $where . " usr_data.usr_id IN (" . - "SELECT DISTINCT ud.usr_id " . - "FROM usr_data ud join rbac_ua ON (ud.usr_id = rbac_ua.usr_id) " . - "WHERE rbac_ua.rol_id = " . $ilDB->quote($this->role, "integer") . ")"; - $query .= $add; - $count_query .= $add; - $where = " AND"; + + if ($this->role > 0) { + $query = $query->withAdditionalWhere( + 'usr_data.usr_id IN (' + . 'SELECT DISTINCT ud.usr_id ' + . 'FROM usr_data ud join rbac_ua ON (ud.usr_id = rbac_ua.usr_id) ' + . "WHERE rbac_ua.rol_id = {$this->db->quote($this->role, ilDBConstants::T_INTEGER)})" + ); } - if ($this->user_folder) { - $add = $where . " " . $ilDB->in('usr_data.time_limit_owner', $this->user_folder, false, 'integer'); - $query .= $add; - $count_query .= $add; - $where = " AND"; + if ($this->user_folder !== []) { + $query = $query->withAdditionalWhere( + $this->db->in('usr_data.time_limit_owner', $this->user_folder, false, ilDBConstants::T_INTEGER) + ); } - if ($this->authentication_method != "") { // authentication - $add = $where . " usr_data.auth_mode = " . $ilDB->quote($this->authentication_method, "text") . " "; - $query .= $add; - $count_query .= $add; - $where = " AND"; + if ($this->authentication_method !== '') { + $query = $query->withAdditionalWhere( + "usr_data.auth_mode = {$this->db->quote($this->authentication_method, ilDBConstants::T_TEXT)}" + ); } - // order by + return $this->profile_data_repository->getCountAndRecordsForQuery( + $query, + $this->offset, + $this->limit + ); + } + + private function addOrderToQuery(DataQuery $query): DataQuery + { + $direction = $this->order_dir === 'desc' ? 'DESC' : 'ASC'; switch ($this->order_field) { - case "access_until": - if ($this->order_dir === "desc") { - $query .= " ORDER BY usr_data.active DESC, usr_data.time_limit_unlimited DESC, usr_data.time_limit_until DESC"; - } else { - $query .= " ORDER BY usr_data.active ASC, usr_data.time_limit_unlimited ASC, usr_data.time_limit_until ASC"; - } - break; + case 'access_until': + return $query->withDefaultTableOrderFields( + ['active', 'time_limit_unlimited', 'time_limit_until'], + $direction + ); - case "online_time": - if ($this->order_dir === "desc") { - $query .= " ORDER BY ut_online.online_time DESC"; - } else { - $query .= " ORDER BY ut_online.online_time ASC"; - } - break; + case 'online_time': + return $query->withAdditionalTableOrder("ORDER BY ut_online.online_time {$direction}"); default: - if ($this->order_dir !== "asc" && $this->order_dir !== "desc") { - $this->order_dir = "asc"; - } - if (substr($this->order_field, 0, 4) === "udf_") { - // #25311 check if order field is in field list - if (is_array($this->getUdfFilter()) && array_key_exists($this->order_field, $this->getUdfFilter())) { - $query .= " ORDER BY ud_" . ((int) substr($this->order_field, 4)) . ".value " . strtoupper($this->order_dir); - } else { - $query .= ' ORDER BY ' . self::DEFAULT_ORDER_FIELD . ' ' . strtoupper($this->order_dir); - } - } else { - if (!in_array($this->order_field, $this->default_fields)) { - $this->order_field = "login"; - } - $query .= " ORDER BY usr_data." . $this->order_field . " " . strtoupper($this->order_dir); + if (!in_array($this->order_field, array_merge(self::DEFAULT_FIELDS, $this->additional_fields))) { + $this->order_field = 'login'; } - break; - } - // count query - $set = $ilDB->query($count_query); - $cnt = 0; - if ($rec = $ilDB->fetchAssoc($set)) { - $cnt = $rec["cnt"]; - } - - $offset = $this->offset; - $limit = $this->limit; - - // #9866: validate offset against rowcount - if ($offset >= $cnt) { - $offset = 0; - } - - $ilDB->setLimit($limit, $offset); + if (in_array($this->order_field, self::DEFAULT_MULTI_FIELDS) + || str_starts_with($this->order_field, 'udf_')) { + return $query->withMultiDataTableOrder($this->order_field, $this->order_dir); + } - if (count($multi_fields)) { - $usr_ids = []; + return $query->withDefaultTableOrderFields([$this->order_field], $this->order_dir); } + } - // set query - $set = $ilDB->query($query); - $result = []; - - while ($rec = $ilDB->fetchAssoc($set)) { - $result[] = $rec; - if (count($multi_fields)) { - $usr_ids[] = (int) $rec["usr_id"]; - } + private function addUdfFilterToQuery(DataQuery $query): DataQuery + { + if ($this->getUdfFilter() === []) { + return $query; } - // add multi-field-values to user-data - if (count($multi_fields) && count($usr_ids)) { - $usr_multi = []; - $set = $ilDB->query("SELECT * FROM usr_profile_data" . - " WHERE " . $ilDB->in("usr_id", $usr_ids, "", "integer")); - while ($row = $ilDB->fetchAssoc($set)) { - $usr_multi[(int) $row["usr_id"]][$row["field_id"]][] = $row["value"]; - } - foreach ($result as $idx => $item) { - if (isset($usr_multi[$item["usr_id"]])) { - $result[$idx] = array_merge($item, $usr_multi[(int) $item["usr_id"]]); - } - } - } - return ["cnt" => $cnt, "set" => $result]; + $udf_filter = $this->getUdfFilter(); + return array_reduce( + array_keys( + array_filter($udf_filter) + ), + fn(DataQuery $c, string $v): DataQuery => $c->withAdditionalMultiDataWhere( + $v, + $udf_filter[$v] + ), + $query->withJoinedMultiDataTable() + ); } diff --git a/components/ILIAS/User/classes/class.ilUserTableGUI.php b/components/ILIAS/User/classes/class.ilUserTableGUI.php index b191b88ff63c..b3aead7b3631 100755 --- a/components/ILIAS/User/classes/class.ilUserTableGUI.php +++ b/components/ILIAS/User/classes/class.ilUserTableGUI.php @@ -21,6 +21,7 @@ use ILIAS\User\LocalDIC; use ILIAS\User\UserGUIRequest; use ILIAS\User\Profile\Profile; +use ILIAS\User\Profile\Fields\Field as ProfileField; use ILIAS\User\Context as ProfileContext; /** @@ -37,10 +38,14 @@ class ilUserTableGUI extends ilTable2GUI private int $user_folder_id = 0; private bool $with_write_access = false; + protected Profile $user_profile; protected UserGUIRequest $user_request; protected array $udf_fields = []; protected array $filter = []; + private ilRbacReview $rbac_review; + private ilObjUser $current_user; + public function __construct( object $a_parent_obj, string $a_parent_cmd, @@ -49,8 +54,12 @@ public function __construct( ) { /** @var ILIAS\DI\Container $DIC */ global $DIC; + $this->lng = $DIC['lng']; + $this->rbac_review = $DIC['rbacreview']; + $this->current_user = $DIC['ilUser']; $this->user_folder_id = $a_parent_obj->getObject()->getRefId(); + $this->user_profile = LocalDIC::dic()[Profile::class]; if ($DIC['ilAccess']->checkPositionAccess(ilObjUserFolder::ORG_OP_EDIT_USER_ACCOUNTS, $this->user_folder_id) || $DIC['rbacsystem']->checkAccess('write', $this->user_folder_id) @@ -61,14 +70,20 @@ public function __construct( $this->setMode($a_mode); $this->setId("user{$this->getUserFolderId()}"); + [ + 'selectable_columns' => $this->selectable_columns, + 'udfs' => $this->udf_fields + ] = $this->buildSelectableColumnsAndUdfs(); parent::__construct($a_parent_obj, $a_parent_cmd); - // $this->setTitle($this->lng->txt("users")); - $this->addColumn("", "", "1", true); - $this->addColumn($this->lng->txt("login"), "login"); + $this->addColumn('', '', '1', true); + $this->addColumn($this->lng->txt('login'), 'username'); foreach ($this->getSelectedColumns() as $c) { - $this->addColumn($this->lng->txt($c), $c); + $this->addColumn( + $this->selectable_columns[$c]['txt'] ?? $this->lng->txt($c), + (string) $c + ); } if ($this->getMode() == self::MODE_LOCAL_USER) { @@ -81,16 +96,15 @@ public function __construct( $this->setExternalSegmentation(true); $this->setEnableHeader(true); - $this->setFormAction($DIC['ilCtrl']->getFormAction($this->parent_obj, "applyFilter")); - $this->setRowTemplate("tpl.user_list_row.html", "components/ILIAS/User"); - //$this->disable("footer"); + $this->setFormAction($this->ctrl->getFormAction($this->parent_obj, 'applyFilter')); + $this->setRowTemplate('tpl.user_list_row.html', 'components/ILIAS/User'); $this->setEnableTitle(true); $this->initFilter(); - $this->setFilterCommand("applyFilter"); - $this->setDefaultOrderField("login"); - $this->setDefaultOrderDirection("asc"); + $this->setFilterCommand('applyFilter'); + $this->setDefaultOrderField('username'); + $this->setDefaultOrderDirection('asc'); - $this->setSelectAllCheckbox("id[]"); + $this->setSelectAllCheckbox('id[]'); $this->setTopCommands(true); $this->user_request = new UserGUIRequest( @@ -106,7 +120,7 @@ public function __construct( $this->addMultiCommand($cmd, $caption); } } else { - $this->addMultiCommand("deleteUsers", $DIC['lng']->txt("delete")); + $this->addMultiCommand('deleteUsers', $this->lng->txt('delete')); } if ($a_load_items) { @@ -129,85 +143,96 @@ protected function getUserFolderId(): int return $this->user_folder_id; } - public function getSelectableColumns(): array // Missing array type. + public function getSelectableColumns(): array { - global $DIC; + return $this->selectable_columns; + } - $lng = $DIC['lng']; - - $up = LocalDIC::dic()[Profile::class]; - - // default fields - $cols = []; - - // first and last name cannot be hidden - $cols["firstname"] = [ - "txt" => $lng->txt("firstname"), - "default" => true]; - $cols["lastname"] = [ - "txt" => $lng->txt("lastname"), - "default" => true]; - - $cols["access_until"] = [ - "txt" => $lng->txt("access_until"), - "default" => true]; - $cols["last_login"] = [ - "txt" => $lng->txt("last_login"), - "default" => true]; - - // #13967 - $cols["create_date"] = [ - "txt" => $lng->txt("create_date")]; - $cols["approve_date"] = [ - "txt" => $lng->txt("approve_date")]; - $cols["agree_date"] = [ - "txt" => $lng->txt("agree_date")]; - $cols['dpro_agreed_on'] = [ - 'txt' => $lng->txt('dpro_agreed_on')]; - - $context = ProfileContext::LocalUserAdministration; - if ($this->getMode() === self::MODE_USER_FOLDER) { - $context = ProfileContext::UserAdministration; - } + private function buildSelectableColumnsAndUdfs(): array + { - $ufs = $up->getVisibleFields($context); - // email should be the 1st "optional" field (can be hidden) - if (isset($ufs['email'])) { - $cols['email'] = [ - 'txt' => $lng->txt('email'), - 'default' => true]; - } - if (isset($ufs['second_email'])) { - $cols['second_email'] = [ - 'txt' => $lng->txt('second_email'), - 'default' => true]; - } + $ufs = $this->user_profile->getVisibleFields($this->getFormContext()); - foreach ($ufs as $f => $fd) { - if (isset($cols[$f])) { - continue; - } - $cols[$f] = [ - 'txt' => $fd->getLabel($this->lng), - 'default' => false]; - } - - $cols['auth_mode'] = [ - 'txt' => $lng->txt('auth_mode'), - 'default' => false]; + $udfs = []; + $cols = array_reduce( + $ufs, + function (array $c, ProfileField $v) use (&$udfs): array { + $identifier = $v->getIdentifier(); + if ($v->isCustom()) { + $udfs[] = $v; + $identifier = "udf_{$identifier}"; + $c[$identifier] = null; + } - foreach ($this->udf_fields as $k => $field) { - if ($field->hiddenInLists()) { - continue; - } - $cols[$k] = $field; - } + if (!array_key_exists($identifier, $c)) { + return $c; + } - // fields that are always shown - unset($cols['username']); + $c[$identifier] = [ + 'txt' => $v->getLabel($this->lng), + 'default' => false + ]; + return $c; + }, + [ + 'firstname' => null, + 'lastname' => null, + 'time_limit_until' => [ + 'txt' => $this->lng->txt('access_until'), + 'default' => false + ], + 'last_login' => [ + 'txt' => $this->lng->txt('last_access'), + 'default' => true + ], + 'create_date' => [ + 'txt' => $this->lng->txt('create_date'), + 'default' => false + ], + 'approve_date' => [ + 'txt' => $this->lng->txt('approve_date'), + 'default' => false + ], + 'agree_date' => [ + 'txt' => $this->lng->txt('agree_date'), + 'default' => false + ], + 'dpro_agreed_on' => [ + 'txt' => $this->lng->txt('dpro_agreed_on'), + 'default' => false + ], + 'email' => null, + 'second_email' => null, + 'title' => null, + 'birthday' => null, + 'gender' => null, + 'institution' => null, + 'department' => null, + 'street' => null, + 'zipcode' => null, + 'city' => null, + 'country' => null, + 'phone_office' => null, + 'phone_home' => null, + 'phone_mobile' => null, + 'fax' => null, + 'matriculation' => null, + 'interests_general' => null, + 'interests_help_offered' => null, + 'interests_help_looking' => null, + 'auth_mode' => [ + 'txt' => $this->lng->txt('auth_mode'), + 'default' => false + ], + 'org_units' => null + ] + ); - return $cols; + return [ + 'selectable_columns' => array_filter($cols), + 'udfs' => $udfs + ]; } protected function buildUserQuery(): ilUserQuery @@ -231,10 +256,6 @@ protected function buildUserQuery(): ilUserQuery public function getItems(): void { - global $DIC; - - $lng = $DIC['lng']; - $this->determineOffsetAndOrder(); if ($this->getMode() == self::MODE_USER_FOLDER) { // All accessible users @@ -248,10 +269,7 @@ public function getItems(): void } } - - - //#13221 don't show all users if user filter is empty! - if (!count($user_filter)) { + if ($user_filter === []) { $this->setMaxCount(0); $this->setData([]); return; @@ -265,25 +283,25 @@ public function getItems(): void $additional_fields = $this->getSelectedColumns(); unset( - $additional_fields["firstname"], - $additional_fields["lastname"], - $additional_fields["email"], - $additional_fields["second_email"], - $additional_fields["last_login"], - $additional_fields["access_until"], + $additional_fields['firstname'], + $additional_fields['lastname'], + $additional_fields['email'], + $additional_fields['second_email'], + $additional_fields['last_login'], + $additional_fields['access_until'], $additional_fields['org_units'] ); $udf_filter = []; foreach ($this->filter as $k => $v) { - if (strpos($k, "udf_") === 0) { + if (strpos($k, 'udf_') === 0) { $udf_filter[$k] = $v; } } $query = $this->buildUserQuery(); $order_field = $this->getOrderField(); - if (strpos($order_field, "udf_") !== 0 || isset($additional_fields[$order_field])) { + if (strpos($order_field, 'udf_') !== 0 || isset($additional_fields[$order_field])) { $query->setOrderField($order_field); $query->setOrderDirection($this->getOrderDirection()); } @@ -307,17 +325,17 @@ public function getItems(): void $current_time = time(); if ($user['active']) { if ($user['time_limit_unlimited']) { - $txt_access = $lng->txt('access_unlimited'); + $txt_access = $this->lng->txt('access_unlimited'); $usr_data['set'][$k]['access_class'] = 'smallgreen'; } elseif ($user['time_limit_until'] < $current_time) { - $txt_access = $lng->txt('access_expired'); + $txt_access = $this->lng->txt('access_expired'); $usr_data['set'][$k]['access_class'] = 'smallred'; } else { $txt_access = ilDatePresentation::formatDate(new ilDateTime($user['time_limit_until'], IL_CAL_UNIX)); $usr_data['set'][$k]['access_class'] = 'small'; } } else { - $txt_access = $lng->txt('inactive'); + $txt_access = $this->lng->txt('inactive'); $usr_data['set'][$k]['access_class'] = 'smallred'; } $usr_data['set'][$k]['access_until'] = $txt_access; @@ -360,10 +378,10 @@ public function getUserIdsForFilter(): array // Missing array type. $user_ids = []; - foreach ($usr_data["set"] as $item) { + foreach ($usr_data['set'] as $item) { // #11632 - if ($item["usr_id"] != SYSTEM_USER_ID) { - $user_ids[] = $item["usr_id"]; + if ($item['usr_id'] != SYSTEM_USER_ID) { + $user_ids[] = $item['usr_id']; } } return $user_ids; @@ -371,25 +389,17 @@ public function getUserIdsForFilter(): array // Missing array type. public function initFilter(): void { - global $DIC; - - $lng = $DIC['lng']; - $rbacreview = $DIC['rbacreview']; - $ilUser = $DIC['ilUser']; - $ilCtrl = $DIC['ilCtrl']; - - // Show context filter if ($this->getMode() == self::MODE_LOCAL_USER) { $parent_ids = ilLocalUser::_getFolderIds(); if (count($parent_ids) > 1) { - $co = new ilSelectInputGUI($lng->txt('context'), 'time_limit_owner'); + $co = new ilSelectInputGUI($this->lng->txt('context'), 'time_limit_owner'); $ref_id = $this->getUserFolderId(); $opt[0] = $this->lng->txt('all_users'); - $opt[$this->getUserFolderId()] = $lng->txt('users') . ' (' . ilObject::_lookupTitle(ilObject::_lookupObjId($this->getUserFolderId())) . ')'; + $opt[$this->getUserFolderId()] = $this->lng->txt('users') . ' (' . ilObject::_lookupTitle(ilObject::_lookupObjId($this->getUserFolderId())) . ')'; foreach ($parent_ids as $parent_id) { if ($parent_id == $this->getUserFolderId()) { @@ -397,11 +407,11 @@ public function initFilter(): void } switch ($parent_id) { case USER_FOLDER_ID: - $opt[USER_FOLDER_ID] = $lng->txt('global_user'); + $opt[USER_FOLDER_ID] = $this->lng->txt('global_user'); break; default: - $opt[$parent_id] = $lng->txt('users') . ' (' . ilObject::_lookupTitle(ilObject::_lookupObjId($parent_id)) . ')'; + $opt[$parent_id] = $this->lng->txt('users') . ' (' . ilObject::_lookupTitle(ilObject::_lookupObjId($parent_id)) . ')'; break; } } @@ -413,231 +423,174 @@ public function initFilter(): void } // User name, login, email filter - $ul = new ilTextInputGUI($lng->txt("login") . "/" . $lng->txt("email") . "/" . - $lng->txt("name"), "query"); - $ul->setDataSource($ilCtrl->getLinkTarget( + $ul = new ilTextInputGUI($this->lng->txt('login') . '/' . $this->lng->txt('email') . '/' . + $this->lng->txt('name'), 'query'); + $ul->setDataSource($this->ctrl->getLinkTarget( $this->getParentObject(), - "addUserAutoComplete", - "", + 'addUserAutoComplete', + '', true )); $ul->setSize(20); $ul->setSubmitFormOnEnter(true); $this->addFilterItem($ul); $ul->readFromSession(); - $this->filter["query"] = $ul->getValue(); + $this->filter['query'] = $ul->getValue(); // activation $options = [ - "" => $lng->txt("user_all"), - "active" => $lng->txt("active"), - "inactive" => $lng->txt("inactive"), + '' => $this->lng->txt('user_all'), + 'active' => $this->lng->txt('active'), + 'inactive' => $this->lng->txt('inactive'), ]; - $si = new ilSelectInputGUI($this->lng->txt("user_activation"), "activation"); + $si = new ilSelectInputGUI($this->lng->txt('user_activation'), 'activation'); $si->setOptions($options); $this->addFilterItem($si); $si->readFromSession(); - $this->filter["activation"] = $si->getValue(); + $this->filter['activation'] = $si->getValue(); // limited access - $cb = new ilCheckboxInputGUI($this->lng->txt("user_limited_access"), "limited_access"); + $cb = new ilCheckboxInputGUI($this->lng->txt('user_limited_access'), 'limited_access'); $this->addFilterItem($cb); $cb->readFromSession(); - $this->filter["limited_access"] = $cb->getChecked(); + $this->filter['limited_access'] = $cb->getChecked(); // last login - $di = new ilDateTimeInputGUI($this->lng->txt("user_last_login_before"), "last_login"); + $di = new ilDateTimeInputGUI($this->lng->txt('user_last_login_before'), 'last_login'); $default_date = new ilDateTime(time(), IL_CAL_UNIX); $default_date->increment(IL_CAL_DAY, 1); $di->setDate($default_date); $this->addFilterItem($di); $di->readFromSession(); - $this->filter["last_login"] = $di->getDate(); + $this->filter['last_login'] = $di->getDate(); if ($this->getMode() == self::MODE_USER_FOLDER) { // no assigned courses - $cb = new ilCheckboxInputGUI($this->lng->txt("user_no_courses"), "no_courses"); + $cb = new ilCheckboxInputGUI($this->lng->txt('user_no_courses'), 'no_courses'); $this->addFilterItem($cb); $cb->readFromSession(); - $this->filter["no_courses"] = $cb->getChecked(); + $this->filter['no_courses'] = $cb->getChecked(); // no assigned groups - $ng = new ilCheckboxInputGUI($this->lng->txt("user_no_groups"), "no_groups"); + $ng = new ilCheckboxInputGUI($this->lng->txt('user_no_groups'), 'no_groups'); $this->addFilterItem($ng); $ng->readFromSession(); $this->filter['no_groups'] = $ng->getChecked(); // course/group members - $rs = new ilRepositorySelectorInputGUI($lng->txt("user_member_of_course_group"), "course_group"); - $rs->setSelectText($lng->txt("user_select_course_group")); - $rs->setHeaderMessage($lng->txt("user_please_select_course_group")); - $rs->setClickableTypes(["crs", "grp"]); + $rs = new ilRepositorySelectorInputGUI($this->lng->txt('user_member_of_course_group'), 'course_group'); + $rs->setSelectText($this->lng->txt('user_select_course_group')); + $rs->setHeaderMessage($this->lng->txt('user_please_select_course_group')); + $rs->setClickableTypes(['crs', 'grp']); $this->addFilterItem($rs); $rs->readFromSession(); - $this->filter["course_group"] = $rs->getValue(); + $this->filter['course_group'] = $rs->getValue(); } // global roles $options = [ - "" => $lng->txt("user_any"), + '' => $this->lng->txt('user_any'), ]; - foreach ($rbacreview->getRolesByFilter(2, $ilUser->getId()) as $role) { - $options[$role["rol_id"]] = $role["title"]; + foreach ($this->rbac_review->getRolesByFilter(2, $this->current_user->getId()) as $role) { + $options[$role['rol_id']] = $role['title']; } - $si = new ilSelectInputGUI($this->lng->txt("user_global_role"), "global_role"); + $si = new ilSelectInputGUI($this->lng->txt('user_global_role'), 'global_role'); $si->setOptions($options); $this->addFilterItem($si); $si->readFromSession(); - $this->filter["global_role"] = $si->getValue(); + $this->filter['global_role'] = $si->getValue(); // authentication mode $auth_methods = ilAuthUtils::_getActiveAuthModes(); $options = [ - "" => $lng->txt("user_any"), + '' => $this->lng->txt('user_any'), ]; foreach ($auth_methods as $method => $value) { if ($method == 'default') { - $options[$method] = $this->lng->txt('auth_' . $method) . " (" . $this->lng->txt('auth_' . ilAuthUtils::_getAuthModeName($value)) . ")"; + $options[$method] = $this->lng->txt('auth_' . $method) . ' (' . $this->lng->txt('auth_' . ilAuthUtils::_getAuthModeName($value)) . ')'; } else { $options[$method] = ilAuthUtils::getAuthModeTranslation((string) $value); } } - $si = new ilSelectInputGUI($this->lng->txt("auth_mode"), "authentication_method"); + $si = new ilSelectInputGUI($this->lng->txt('auth_mode'), 'authentication_method'); $si->setOptions($options); $this->addFilterItem($si); $si->readFromSession(); - $this->filter["authentication"] = $si->getValue(); + $this->filter['authentication'] = $si->getValue(); // udf fields - foreach ($this->udf_fields as $id => $f) { - $this->addFilterItemByUdfType($id, $f["type"], true, $f["txt"], $f["options"]); + foreach ($this->udf_fields as $f) { + $this->addFilterItemByUdfType($f); } } /** * Add filter by standard type */ - public function addFilterItemByUdfType( - string $id, - string $type, - bool $a_optional = false, - ?string $caption = null, - array $a_options = [] + private function addFilterItemByUdfType( + ProfileField $field ): ?ilFormPropertyGUI { - global $DIC; - - $lng = $DIC['lng']; - - if (!$caption) { - $caption = $lng->txt($id); - } - - switch ($type) { - case UDF_TYPE_SELECT: - $item = new ilSelectInputGUI($caption, $id); - $sel_options = ["" => $this->lng->txt("user_all")]; - foreach ($a_options as $o) { - $sel_options[$o] = $o; - } - $item->setOptions($sel_options); - break; - - case UDF_TYPE_TEXT: - $item = new ilTextInputGUI($caption, $id); - $item->setMaxLength(64); - $item->setSize(20); - // $item->setSubmitFormOnEnter(true); - break; - - default: - return null; - } - - if ($item) { - $this->addFilterItem($item, $a_optional); - $item->readFromSession(); - $this->filter[$id] = $item->getValue(); - } + $id = "udf_{$field->getIdentifier()}"; + $item = $field->getLegacyInput($this->lng, $this->getFormContext()); + $item->setRequired(false); + if (!($item instanceof ilTableFilterItem)) { + $item = new ilTextInputGUI($field->getLabel($this->lng)); + } + $item->setPostVar($id); + $this->addFilterItem($item, true); + $item->readFromSession(); + $this->filter[$id] = $item->getValue(); return $item; } protected function fillRow(array $a_set): void // Missing array type. { - global $DIC; - - $ilCtrl = $DIC['ilCtrl']; - $lng = $DIC['lng']; - - $ilCtrl->setParameterByClass("ilobjusergui", "letter", $this->user_request->getLetter()); + $this->ctrl->setParameterByClass('ilobjusergui', 'letter', $this->user_request->getLetter()); foreach ($this->getSelectedColumns() as $c) { - if ($c == "access_until") { - $this->tpl->setCurrentBlock("access_until"); - $this->tpl->setVariable("VAL_ACCESS_UNTIL", $a_set["access_until"]); - $this->tpl->setVariable("CLASS_ACCESS_UNTIL", $a_set["access_class"]); - } elseif ($c == "last_login") { - $this->tpl->setCurrentBlock("last_login"); + if ($c == 'time_limit_until') { + $this->tpl->setCurrentBlock('access_until'); + $this->tpl->setVariable('VAL_ACCESS_UNTIL', $a_set['access_until']); + $this->tpl->setVariable('CLASS_ACCESS_UNTIL', $a_set['access_class']); + } elseif ($c == 'last_login') { + $this->tpl->setCurrentBlock('last_login'); $this->tpl->setVariable( - "VAL_LAST_LOGIN", + 'VAL_LAST_LOGIN', ilDatePresentation::formatDate(new ilDateTime($a_set['last_login'], IL_CAL_DATETIME)) ); - } elseif (in_array($c, ["firstname", "lastname"])) { + } elseif (in_array($c, ['firstname', 'lastname'])) { $this->tpl->setCurrentBlock($c); - $this->tpl->setVariable("VAL_" . strtoupper($c), (string) $a_set[$c]); + $this->tpl->setVariable('VAL_' . strtoupper($c), (string) $a_set[$c]); } elseif ($c == 'auth_mode') { $this->tpl->setCurrentBlock('user_field'); $this->tpl->setVariable('VAL_UF', ilAuthUtils::getAuthModeTranslation((string) ilAuthUtils::_getAuthMode($a_set['auth_mode']))); $this->tpl->parseCurrentBlock(); } else { // all other fields - $this->tpl->setCurrentBlock("user_field"); - $val = (trim($a_set[$c] ?? '') == "") - ? " " - : $a_set[$c]; - if ($a_set[$c] != "") { - switch ($c) { - case "birthday": - $val = ilDatePresentation::formatDate(new ilDate($val, IL_CAL_DATE)); - break; - - case "gender": - $val = $lng->txt("gender_" . $a_set[$c]); - break; - - case "create_date": - case "agree_date": - case "approve_date": - // $val = ilDatePresentation::formatDate(new ilDateTime($val,IL_CAL_DATETIME)); - $val = ilDatePresentation::formatDate(new ilDate($val, IL_CAL_DATE)); - break; - case 'dpro_agreed_on': - $val = ilDatePresentation::formatDate(new ilDate($val, IL_CAL_UNIX)); - break; - } - } - $this->tpl->setVariable("VAL_UF", $val); + $this->tpl->setCurrentBlock('user_field'); + $this->tpl->setVariable('VAL_UF', $this->buildUserFieldValue($c, $a_set[$c] ?? '')); } $this->tpl->parseCurrentBlock(); } - if ($a_set["usr_id"] != 6 + if ($a_set['usr_id'] != 6 && ($this->getMode() == self::MODE_USER_FOLDER || $a_set['time_limit_owner'] == $this->getUserFolderId())) { - $this->tpl->setCurrentBlock("checkb"); - $this->tpl->setVariable("ID", $a_set["usr_id"]); + $this->tpl->setCurrentBlock('checkb'); + $this->tpl->setVariable('ID', $a_set['usr_id']); $this->tpl->parseCurrentBlock(); } if ($this->with_write_access && ($this->getMode() === self::MODE_USER_FOLDER || $a_set['time_limit_owner'] == $this->getUserFolderId())) { - $this->tpl->setVariable("VAL_LOGIN", $a_set["login"]); - $ilCtrl->setParameterByClass("ilobjusergui", "obj_id", $a_set["usr_id"]); + $this->tpl->setVariable('VAL_LOGIN', $a_set['login']); + $this->ctrl->setParameterByClass('ilobjusergui', 'obj_id', $a_set['usr_id']); $this->tpl->setVariable( - "HREF_LOGIN", - $ilCtrl->getLinkTargetByClass("ilobjusergui", "view") + 'HREF_LOGIN', + $this->ctrl->getLinkTargetByClass('ilobjusergui', 'view') ); - $ilCtrl->setParameterByClass("ilobjusergui", "obj_id", ""); + $this->ctrl->setParameterByClass('ilobjusergui', 'obj_id', ''); } else { $this->tpl->setVariable('VAL_LOGIN_PLAIN', $a_set['login']); } @@ -651,11 +604,48 @@ protected function fillRow(array $a_set): void // Missing array type. $this->tpl->parseCurrentBlock(); $this->tpl->setCurrentBlock('roles'); - $ilCtrl->setParameter($this->getParentObject(), 'obj_id', $a_set['usr_id']); - $this->tpl->setVariable('ROLE_LINK', $ilCtrl->getLinkTarget($this->getParentObject(), 'assignRoles')); + $this->ctrl->setParameter($this->getParentObject(), 'obj_id', $a_set['usr_id']); + $this->tpl->setVariable('ROLE_LINK', $this->ctrl->getLinkTarget($this->getParentObject(), 'assignRoles')); $this->tpl->setVariable('TXT_ROLES', $this->lng->txt('edit')); - $ilCtrl->clearParameters($this->getParentObject()); + $this->ctrl->clearParameters($this->getParentObject()); $this->tpl->parseCurrentBlock(); } } + + private function buildUserFieldValue(string $key, array|string $value): string + { + switch ($key) { + case 'birthday': + return ilDatePresentation::formatDate(new ilDate($value, IL_CAL_DATE)); + + case 'gender': + return $value === '' ? '' : $this->lng->txt('gender_' . $value); + + case 'create_date': + case 'agree_date': + case 'approve_date': + return ilDatePresentation::formatDate(new ilDate($value, IL_CAL_DATE)); + + case 'dpro_agreed_on': + return ilDatePresentation::formatDate(new ilDate($value, IL_CAL_UNIX)); + } + + if (is_array($value)) { + return implode(', ', $value); + } + + if (trim($value) === '') { + return ' '; + } + + return $value; + } + + private function getFormContext(): ProfileContext + { + if ($this->getMode() === self::MODE_USER_FOLDER) { + return ProfileContext::UserAdministration; + } + return ProfileContext::LocalUserAdministration; + } } diff --git a/components/ILIAS/User/classes/class.ilUserUtil.php b/components/ILIAS/User/classes/class.ilUserUtil.php index a62256e8c1a8..709a413a545c 100755 --- a/components/ILIAS/User/classes/class.ilUserUtil.php +++ b/components/ILIAS/User/classes/class.ilUserUtil.php @@ -18,7 +18,7 @@ use ILIAS\User\LocalDIC; use ILIAS\User\Settings\StartingPoint\Repository as StartingPointRepository; -use PublicProfileGUILIAS\User\Profile\PublicProfileGUI; +use ILIAS\User\Profile\PublicProfileGUI; /** * Class ilUserUtil @@ -55,7 +55,10 @@ public static function getNamePresentation( $ilDB = $DIC['ilDB']; if ($a_ctrl_path === null) { - $a_ctrl_path = strtolower(PublicProfileGUI::class); + $a_ctrl_path = [ + strtolower(ilPublicProfileBaseClassGUI::class), + strtolower(PublicProfileGUI::class) + ]; } if (!is_array($a_ctrl_path)) { @@ -206,7 +209,10 @@ public static function getProfileLink(int $a_usr_id): string } $ctrl->setParameterByClass(PublicProfileGUI::class, 'user', $a_usr_id); - return $ctrl->getLinkTargetByClass(PublicProfileGUI::class, 'getHTML'); + return $ctrl->getLinkTargetByClass( + [ilPublicProfileBaseClassGUI::class, PublicProfileGUI::class], + 'getHTML' + ); } public static function getStartingPointAsUrl(): string diff --git a/components/ILIAS/User/classes/class.ilUserXMLWriter.php b/components/ILIAS/User/classes/class.ilUserXMLWriter.php index 7099694101f5..7eebb46c6aae 100755 --- a/components/ILIAS/User/classes/class.ilUserXMLWriter.php +++ b/components/ILIAS/User/classes/class.ilUserXMLWriter.php @@ -20,8 +20,11 @@ use ILIAS\User\LocalDIC; use ILIAS\User\Context; +use ILIAS\User\BuildExportFieldArray; use ILIAS\User\Profile\Profile; use ILIAS\User\Settings\DataRepository as UserSettingsDataRepository; +use ILIAS\User\Settings\Settings; +use ILIAS\User\Settings\SettingsImplementation; use ILIAS\Language\Language; /** @@ -35,10 +38,13 @@ */ class ilUserXMLWriter extends ilXmlWriter { + use BuildExportFieldArray; + private readonly ILIAS $ilias; private readonly ilDBInterface $db; private readonly Language $lng; private readonly Profile $user_profile; + private readonly SettingsImplementation $user_settings; private readonly UserSettingsDataRepository $user_settings_data_repo; private array $users; // Missing array type. private int $user_id = 0; @@ -49,7 +55,7 @@ class ilUserXMLWriter extends ilXmlWriter * fields to be exported * */ - private array $settings = []; + private array $fields_to_export = []; public function __construct() { @@ -63,6 +69,7 @@ public function __construct() $local_dic = LocalDIC::dic(); $this->user_profile = $local_dic[Profile::class]; + $this->user_settings = LocalDIC::dic()[Settings::class]; $this->user_settings_data_repo = $local_dic[UserSettingsDataRepository::class]; @@ -123,8 +130,17 @@ public function __buildFooter(): void public function __handleUser(array $row): void // Missing array type. { - if ($this->settings === []) { - $this->setSettings(ilObjUserFolder::getExportSettings()); + if ($this->fields_to_export === []) { + $this->setFieldsToExport( + array_merge( + $this->getExportFieldArray( + $this->lng, + $this->user_profile, + $this->user_settings + ), + ['time_limit_owner'] + ) + ); } $settings = $this->user_settings_data_repo->getFor($row['usr_id']); @@ -197,7 +213,6 @@ public function __handleUser(array $row): void // Missing array type. $this->__addElement('City', $row['city']); $this->__addElement('PostalCode', $row['zipcode'], null, 'zipcode'); $this->__addElement('Country', $row['country']); - $this->__addElement('SelCountry', $row['sel_country'], null, 'sel_country'); $this->__addElement('PhoneOffice', $row['phone_office'], null, 'phone_office'); $this->__addElement('PhoneHome', $row['phone_home'], null, 'phone_home'); $this->__addElement('PhoneMobile', $row['phone_mobile'], null, 'phone_mobile'); @@ -213,11 +228,10 @@ public function __handleUser(array $row): void // Missing array type. $this->__addElement('Matriculation', $row['matriculation']); $this->__addElement('Active', $row['active'] ? 'true' : 'false'); $this->__addElement('ClientIP', $row['client_ip'], null, 'client_ip'); - $this->__addElement('TimeLimitOwner', $row['time_limit_owner'], null, 'time_limit_owner'); - $this->__addElement('TimeLimitUnlimited', $row['time_limit_unlimited'], null, 'time_limit_unlimited'); - $this->__addElement('TimeLimitFrom', $row['time_limit_from'], null, 'time_limit_from'); - $this->__addElement('TimeLimitUntil', $row['time_limit_until'], null, 'time_limit_until'); - $this->__addElement('TimeLimitMessage', $row['time_limit_message'], null, 'time_limit_message'); + $this->__addElement('TimeLimitOwner', (string) $row['time_limit_owner'], null, 'time_limit_owner'); + $this->__addElement('TimeLimitUnlimited', (string) $row['time_limit_unlimited'], null, 'time_limit_unlimited'); + $this->__addElement('TimeLimitFrom', (string) $row['time_limit_from'], null, 'time_limit_from'); + $this->__addElement('TimeLimitUntil', (string) $row['time_limit_until'], null, 'time_limit_until'); $this->__addElement('ApproveDate', $row['approve_date'], null, 'approve_date'); $this->__addElement('AgreeDate', $row['agree_date'], null, 'agree_date'); @@ -317,14 +331,14 @@ private function canExport( string $tagname, ?string $settingsname = null ): bool { - return $this->settings === [] - || in_array(strtolower($tagname), $this->settings) !== false - || in_array($settingsname, $this->settings) !== false; + return $this->fields_to_export === [] + || in_array(strtolower($tagname), $this->fields_to_export) !== false + || in_array($settingsname, $this->fields_to_export) !== false; } - public function setSettings(array $settings): void // Missing array type. + public function setFieldsToExport(array $fields_to_export): void // Missing array type. { - $this->settings = $settings; + $this->fields_to_export = $fields_to_export; } /** @@ -366,11 +380,14 @@ private function getPictureValue(int $usr_id): ?array private function addUDFsToXML(): void { foreach ($this->user_profile->getVisibleFields(Context::Export) as $field) { + if (!$field->isCustom()) { + continue; + } $this->xmlElement( 'UserDefinedField', [ 'Id' => $field->getIdentifier(), - 'Name' => $field->getName($this->lng) + 'Name' => $field->getLabel($this->lng) ], (string) ($this->user_data['f_' . $field->getIdentifier()] ?? '') ); @@ -398,7 +415,7 @@ public static function getExportablePreferences(): array // Missing array type. 'public_phone_office', 'public_profile', 'public_street', - 'public_upload', + 'public_avatar', 'public_zip', 'send_info_mails', /*'show_users_online',*/ diff --git a/components/ILIAS/User/src/Account/class.DeleteAccountGUI.php b/components/ILIAS/User/src/Account/class.DeleteAccountGUI.php index 77369095a375..ae1858286c6c 100755 --- a/components/ILIAS/User/src/Account/class.DeleteAccountGUI.php +++ b/components/ILIAS/User/src/Account/class.DeleteAccountGUI.php @@ -24,6 +24,7 @@ use ILIAS\Language\Language; use ILIAS\UI\Factory as UIFactory; use ILIAS\UI\Renderer as UIRenderer; +use ILIAS\User\StaticURLHandler; class DeleteAccountGUI { @@ -96,7 +97,10 @@ protected function deleteOwnAccountLogout(): void \ilSession::setClosingContext(\ilSession::SESSION_CLOSE_USER); $this->auth_session->logout(); - $this->ctrl->redirectToURL('login.php?cmd=force_login&target=usr_' . md5('usrdelown')); + $this->ctrl->redirectToURL( + 'login.php?cmd=force_login&target=usr_' + . StaticURLHandler::DEL_OWN_ACCOUNT_OPERATION + ); } protected function deleteOwnAccountStep2(): void diff --git a/components/ILIAS/User/src/Badges/ProfileBadge.php b/components/ILIAS/User/src/Badges/ProfileBadge.php index d3c7dbe57ffe..9ce0f18d2621 100644 --- a/components/ILIAS/User/src/Badges/ProfileBadge.php +++ b/components/ILIAS/User/src/Badges/ProfileBadge.php @@ -85,12 +85,7 @@ public function evaluate(int $user_id, array $params, ?array $config): bool } foreach ($config['profile'] as $long_field_id) { - $field_id = substr($long_field_id, 4); - if (substr($field_id, 0, 4) === 'udf_') { - $field_id = substr($field_id, 4); - } - - $field = $this->profile->getFieldByIdentifier($field_id); + $field = $this->profile->getFieldByIdentifier(mb_substr($long_field_id, 4)); if ($field === null) { continue; } diff --git a/components/ILIAS/User/src/BuildExportFieldArray.php b/components/ILIAS/User/src/BuildExportFieldArray.php new file mode 100644 index 000000000000..76e1b6319251 --- /dev/null +++ b/components/ILIAS/User/src/BuildExportFieldArray.php @@ -0,0 +1,57 @@ +<?php + +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Scripting/EmptyPHP.php to edit this template + */ + +declare(strict_types=1); + +namespace ILIAS\User; + +use ILIAS\User\Context; +use ILIAS\User\Property; +use ILIAS\User\Profile\Profile; +use ILIAS\User\Settings\SettingsImplementation; +use ILIAS\Language\Language; + +trait BuildExportFieldArray +{ + /** + * @return array<string, string> of exportable fields and there text + * representation in the language of the current user; + */ + private function getExportFieldArray( + Language $lng, + Profile $profile, + SettingsImplementation $settings + ): array { + return array_reduce( + array_merge( + $profile->getVisibleFields(Context::Export), + $settings->getExportableSettings() + ), + function (array $c, Property $v) use ($lng): array { + $c[$v->getIdentifier()] = $v->getLabel($lng); + return $c; + }, + [ + 'usr_id' => $lng->txt('usr_id'), + 'login' => $lng->txt('login'), + 'last_login' => $lng->txt('last_login'), + 'last_update' => $lng->txt('last_update'), + 'create_date' => $lng->txt('create_date'), + 'time_limit_unlimited' => $lng->txt('time_limit_unlimited'), + 'time_limit_from' => $lng->txt('time_limit_from'), + 'time_limit_until' => $lng->txt('time_limit_until'), + 'time_limit_message' => $lng->txt('time_limit_message'), + 'active' => $lng->txt('active'), + 'approve_date' => $lng->txt('approve_date'), + 'agree_date' => $lng->txt('agree_date'), + 'auth_mode' => $lng->txt('auth_mode'), + 'ext_account' => $lng->txt('user_ext_account'), + 'feedhash' => $lng->txt('feedhash') + ] + ); + } +} diff --git a/components/ILIAS/User/src/Context.php b/components/ILIAS/User/src/Context.php index 32d69a7b4a9c..d53282efd1ec 100644 --- a/components/ILIAS/User/src/Context.php +++ b/components/ILIAS/User/src/Context.php @@ -32,11 +32,12 @@ enum Context case Certificate; case Course; case Group; + case LearningSequence; case StudyProgramme; case Search; case Export; - public function isFieldVisibleInType( + public function isFieldVisible( Field $field, ?\ilObjUser $user ): bool { @@ -52,11 +53,12 @@ public function isFieldVisibleInType( self::StudyProgramme => $field->isVisibleInStudyProgrammes(), self::Search => $field->isSearchable(), self::Export => $field->export(), - self::UserAdministration => true + self::UserAdministration => true, + default => false }; } - public function isFieldChangeableInType( + public function isFieldChangeable( Field $field, ?\ilObjUser $user ): bool { @@ -71,7 +73,7 @@ public function isFieldChangeableInType( }; } - public function isSettingAvailableInType( + public function isSettingAvailable( Setting $setting ): bool { return match($this) { @@ -89,6 +91,7 @@ public static function buildFromObjectType(string $type): ?self 'crs' => self::Course, 'grp' => self::Group, 'prg' => self::StudyProgramme, + 'lso' => self::LearningSequence, default => null }; } diff --git a/components/ILIAS/User/src/LocalDIC.php b/components/ILIAS/User/src/LocalDIC.php index c79560b2d3f9..2c2bb1f0c3c0 100755 --- a/components/ILIAS/User/src/LocalDIC.php +++ b/components/ILIAS/User/src/LocalDIC.php @@ -149,6 +149,7 @@ private function init(ILIASContainer $DIC): void new Standard\Hobby(), new Standard\ReferralComment(), new Standard\Matriculation(), + new Standard\ClientIP(), \ilMapUtil::isActivated() ? new Standard\Location() : null ]) ); diff --git a/components/ILIAS/User/src/Profile/ChangeMail/Token.php b/components/ILIAS/User/src/Profile/ChangeMail/Token.php index fe193c55fee4..662bc093bb1c 100755 --- a/components/ILIAS/User/src/Profile/ChangeMail/Token.php +++ b/components/ILIAS/User/src/Profile/ChangeMail/Token.php @@ -81,7 +81,7 @@ public function getUriForStatus(URIBuilder $uri_builder): URI return $uri_builder->build( StaticURLHandler::NAMESPACE, null, - [StaticUrlHandler::CHANGE_EMAIL_OPERATIONS, $this->token] + [StaticUrlHandler::CHANGE_EMAIL_OPERATION, $this->token] ); } diff --git a/components/ILIAS/User/src/Profile/Data.php b/components/ILIAS/User/src/Profile/Data.php index 0db89a2a9557..4bd76890b3df 100644 --- a/components/ILIAS/User/src/Profile/Data.php +++ b/components/ILIAS/User/src/Profile/Data.php @@ -25,7 +25,7 @@ class Data { - private array $system_information; + private array $system_information = []; public function __construct( private ?int $id = null, @@ -88,7 +88,7 @@ public function getAvatarRid(): ?ResourceIdentification public function withAvatarRid(?ResourceIdentification $avatar_rid): self { $clone = clone $this; - $clone->avatar_rid = $this->avatar_rid; + $clone->avatar_rid = $avatar_rid; return $clone; } diff --git a/components/ILIAS/User/src/Profile/DataQuery.php b/components/ILIAS/User/src/Profile/DataQuery.php new file mode 100644 index 000000000000..fbea97a2e975 --- /dev/null +++ b/components/ILIAS/User/src/Profile/DataQuery.php @@ -0,0 +1,232 @@ +<?php + +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + * + *********************************************************************/ + +declare(strict_types=1); + +namespace ILIAS\User\Profile; + +use ILIAS\User\Profile\Fields\Field; + +class DataQuery +{ + private const string ARRAY_SEPARATOR = '##!:!##'; + private const string RECORDS_QUERY_INIT = 'SELECT '; + + private string $cnt_query_init; + + private array $multi_fields = []; + private array $select_fields; + private array $udf_fields = []; + private array $join = []; + private array $where = []; + private string $order = ''; + private bool $multi_data_table_joined = false; + private bool $additional_fields_processed = false; + + public function __construct( + private readonly \ilDBInterface $db, + private readonly string $user_base_table_name, + private readonly string $user_values_table_name, + array $select_fields + ) { + $this->cnt_query_init = 'SELECT COUNT(DISTINCT ' . $this->user_base_table_name + . '.usr_id) cnt FROM ' . $this->user_base_table_name; + $this->select_fields = array_map( + fn(string $v): string => $this->user_base_table_name . '.' . $v, + $select_fields + ); + } + + public function withAdditionalAdditionalTableSelectField(string $field_name): self + { + $clone = clone $this; + $clone->select_fields[] = $field_name; + return $clone; + } + + public function withAdditionalDefaultTableSelectField(string $field_name): self + { + $clone = clone $this; + $clone->select_fields[] = $this->user_base_table_name . '.' . $field_name; + return $clone; + } + + public function withAdditionalUdfField(Field $field): self + { + $clone = clone $this; + $clone->udf_fields[] = $field; + return $clone; + } + + public function withAdditionalMultiField(string $field_name): self + { + $clone = clone $this; + $clone->multi_fields[] = $field_name; + return $clone; + } + + public function withAdditionalJoin(string $join): self + { + $clone = clone $this; + $clone->join[] = $join; + return $clone; + } + + public function withAdditionalWhere(string $where): self + { + $clone = clone $this; + $clone->where[] = $where; + return $clone; + } + + public function withAdditionalMultiDataWhere(string $identifier, string|array $value): self + { + if (is_array($value)) { + $value_query = $this->db->in($this->user_values_table_name . '.value', $value, false, \ilDBConstants::T_TEXT); + } else { + $value_query = $this->db->like($this->user_values_table_name . '.value', \ilDBConstants::T_TEXT, "%{$value}%"); + } + $clone = clone $this; + $clone->where[] = $this->user_values_table_name . ".field_id = '{$identifier}' AND {$value_query}"; + return $clone; + } + + public function withAdditionalTableOrder(string $order): self + { + $clone = clone $this; + $clone->order = $order; + return $clone; + } + + public function withMultiDataTableOrder(string $order_field, string $direction): self + { + $clone = clone $this; + $clone->order = "ORDER BY `{$order_field}` {$direction}"; + return $clone; + } + + public function withDefaultTableOrderFields(array $order_fields, string $direction): self + { + $clone = clone $this; + $clone->order = 'ORDER BY ' . implode(', ', array_reduce( + $order_fields, + function (array $c, string $v) use ($direction): array { + $c[] = $this->user_base_table_name . ".`{$v}` {$direction}"; + return $c; + }, + [] + )); + return $clone; + } + + public function withLimitedUsers(array $users): self + { + if ($users === []) { + return $this; + } + $clone = clone $this; + $clone->where[] = $this->db->in('usr_data.usr_id', $users, false, \ilDBConstants::T_INTEGER); + return $clone; + } + + public function withJoinedMultiDataTable(): self + { + $clone = clone $this; + $clone->join[] = $this->buildJoinForMultiDataTable(); + $clone->multi_data_table_joined = true; + return $clone; + } + + public function buildRecordsQueryString(): string + { + return self::RECORDS_QUERY_INIT . implode(', ', $this->select_fields) . PHP_EOL + . 'FROM usr_data' . PHP_EOL + . implode(PHP_EOL, $this->join) . PHP_EOL + . 'WHERE usr_data.usr_id <> ' . $this->db->quote(ANONYMOUS_USER_ID, \ilDBConstants::T_INTEGER) . PHP_EOL + . $this->buildWhere() + . 'GROUP BY ' . $this->user_base_table_name . '.usr_id' . PHP_EOL + . $this->order; + } + + public function buildCntQueryString(): string + { + return $this->cnt_query_init . PHP_EOL + . implode(PHP_EOL, $this->join) . PHP_EOL + . 'WHERE usr_data.usr_id <> ' . $this->db->quote(ANONYMOUS_USER_ID, \ilDBConstants::T_INTEGER) . PHP_EOL + . $this->buildWhere(); + } + + public function withAdditionalSelectAndJoinForUdfAndMultiValueFields(): self + { + if ($this->additional_fields_processed + || $this->multi_fields === [] && $this->udf_fields === []) { + return $this; + } + + $clone = clone $this; + if (!$this->multi_data_table_joined) { + $clone->join[] = $this->buildJoinForMultiDataTable(); + $clone->multi_data_table_joined = true; + } + + foreach ($this->multi_fields as $field) { + $clone->select_fields[] = 'GROUP_CONCAT(DISTINCT IF(' . $this->user_values_table_name + . ".field_id = {$this->db->quote($field, \ilDBConstants::T_TEXT)}, " + . $this->user_values_table_name . '.value, NULL) ' + . "SEPARATOR '" . self::ARRAY_SEPARATOR . "') `{$field}`"; + } + + foreach ($this->udf_fields as $field) { + $clone->select_fields[] = 'GROUP_CONCAT(DISTINCT IF(' . $this->user_values_table_name + . ".field_id = {$this->db->quote($field->getIdentifier(), \ilDBConstants::T_TEXT)}, " + . $this->user_values_table_name . '.value, NULL) ' + . "SEPARATOR '" . self::ARRAY_SEPARATOR . "') `udf_{$field->getIdentifier()}`"; + } + + $clone->additional_fields_processed = true; + return $clone; + } + + public function explodeArrayValues(array $row): array + { + return array_map( + static function (mixed $v): mixed { + if (!is_string($v) || mb_stristr($v, self::ARRAY_SEPARATOR) === false) { + return $v; + } + + return explode(self::ARRAY_SEPARATOR, $v); + }, + $row + ); + } + + private function buildWhere(): string + { + if ($this->where === []) { + return ''; + } + return 'AND ' . implode(PHP_EOL . 'AND ', $this->where) . PHP_EOL; + } + + private function buildJoinForMultiDataTable(): string + { + return 'LEFT JOIN ' . $this->user_values_table_name . ' ON ' + . $this->user_values_table_name . '.usr_id = ' . $this->user_base_table_name . '.usr_id'; + } +} diff --git a/components/ILIAS/User/src/Profile/DataRepository.php b/components/ILIAS/User/src/Profile/DataRepository.php index 506b3d01495a..7987b5f60dee 100644 --- a/components/ILIAS/User/src/Profile/DataRepository.php +++ b/components/ILIAS/User/src/Profile/DataRepository.php @@ -48,9 +48,24 @@ public function storeLoginFor( int $usr_id, string $login ): void; + public function storeLastVisitedFor( + int $usr_id, + array $last_visited + ); public function searchUsers( SettingsDataRepository $settings_data_repository, ProfileFieldsConfigurationRepository $profile_fields_config_repo, AutocompleteQuery $search_term ): array; + + public function getProfileDataQuery(array $select_fields): DataQuery; + + /** + * @return array{cnt: int, set: array{string, mixed}} + */ + public function getCountAndRecordsForQuery( + DataQuery $query, + int $offset, + int $limit + ): array; } diff --git a/components/ILIAS/User/src/Profile/DatabaseDataRepository.php b/components/ILIAS/User/src/Profile/DatabaseDataRepository.php index b9a6b82b6ecd..1a36f3d79079 100644 --- a/components/ILIAS/User/src/Profile/DatabaseDataRepository.php +++ b/components/ILIAS/User/src/Profile/DatabaseDataRepository.php @@ -67,8 +67,15 @@ public function getSingle(int $id): Data 'SELECT field_id, value FROM ' . self::USER_VALUES_TABLE . " WHERE usr_id = {$id}" ); + $base_data = $this->db->fetchObject($base_query); + if ($base_data === null) { + throw \InvalidArgumentException( + 'This user does not exist.' + ); + } + return $this->buildFromData( - $this->db->fetchObject($base_query), + $base_data, $this->db->fetchAll( $additional_query, \ilDBConstants::FETCHMODE_OBJECT @@ -81,7 +88,7 @@ public function getMultiple(array $user_ids): \Generator { $query = $this->db->query( 'SELECT * FROM ' . self::USER_BASE_TABLE - . " WHERE {$this->db->in('usr_id', $user_ids)}" + . " WHERE {$this->db->in('usr_id', $user_ids, false, \ilDBConstants::T_INTEGER)}" ); $prepared_query = $this->db->prepare('SELECT field_id, value FROM ' @@ -91,7 +98,7 @@ public function getMultiple(array $user_ids): \Generator yield $this->buildFromData( $base_data, $this->db->fetchAll( - $this->db->execute($prepared_query, $base_data->usr_id), + $this->db->execute($prepared_query, [$base_data->usr_id]), \ilDBConstants::FETCHMODE_OBJECT ) ); @@ -169,6 +176,10 @@ public function store(Data $user_data): void 'is_self_registered' => [\ilDBConstants::T_INTEGER, $system_information['is_self_registered'] ? 1 : 0], 'last_update' => [\ilDBConstants::T_TIMESTAMP, date('Y-m-d H:i:s')], 'create_date' => [\ilDBConstants::T_TIMESTAMP, $system_information['create_date']], + 'last_visited' => [ + \ilDBConstants::T_TEXT, + $system_information['last_visited'] === [] ? null : serialize($system_information['last_visited']) + ] ] ); @@ -220,6 +231,20 @@ public function storeLoginFor( ); } + public function storeLastVisitedFor( + int $usr_id, + array $last_visited + ): void { + $this->db->manipulateF( + 'UPDATE ' . self::USER_BASE_TABLE . ' SET last_visited = %s WHERE usr_id = %s', + [\ilDBConstants::T_TEXT, \ilDBConstants::T_INTEGER], + [ + $last_visited === [] ? null : serialize($last_visited), + $usr_id + ] + ); + } + /** * @return list<\ILIAS\User\Search\AutocompleteItem> */ @@ -257,6 +282,42 @@ public function searchUsers( return $results; } + public function getProfileDataQuery( + array $select_fields + ): DataQuery { + return new DataQuery( + $this->db, + self::USER_BASE_TABLE, + self::USER_VALUES_TABLE, + $select_fields + ); + } + + /** + * @return array{cnt: int, set: array{string, mixed}} + */ + public function getCountAndRecordsForQuery( + DataQuery $query, + int $offset, + int $limit + ): array { + $prepared_query = $query->withAdditionalSelectAndJoinForUdfAndMultiValueFields(); + $cnt = $this->db->fetchObject( + $this->db->query($prepared_query->buildCntQueryString()) + )->cnt ?? 0; + + if ($offset >= $cnt) { + $offset = 0; + } + + $this->db->setLimit($limit, $offset); + + return [ + 'cnt' => $cnt, + 'set' => $this->retrieveRecordsFromQuery($prepared_query) + ]; + } + private function buildFromData( \stdClass $base_data, array $additional_data @@ -330,6 +391,7 @@ static function (array $c, \stdClass $v): array { 'is_self_registered' => $base_data->is_self_registered === 1, 'last_update' => $base_data->last_update ?? '', 'create_date' => $base_data->create_date ?? '', + 'last_visited' => $this->buildLastVisited($base_data->last_visited) ]); } @@ -418,4 +480,31 @@ private function getSearchFieldsWithAvailability( ] ); } + + private function buildLastVisited(?string $last_visited): array + { + if ($last_visited === null) { + return []; + } + + $unserialized = unserialize($last_visited, ['allowed_classes' => false]); + + if (!is_array($unserialized)) { + return []; + } + + return $unserialized; + } + + private function retrieveRecordsFromQuery(DataQuery $query): array + { + $statement = $this->db->query($query->buildRecordsQueryString()); + + $result = []; + while (($row = $this->db->fetchAssoc($statement)) !== null) { + $row['usr_id'] = (int) $row['usr_id']; + $result[] = $query->explodeArrayValues($row); + } + return $result; + } } diff --git a/components/ILIAS/User/src/Profile/Fields/CachedConfigurationRepository.php b/components/ILIAS/User/src/Profile/Fields/CachedConfigurationRepository.php index 39603f983342..e0c7950a6564 100644 --- a/components/ILIAS/User/src/Profile/Fields/CachedConfigurationRepository.php +++ b/components/ILIAS/User/src/Profile/Fields/CachedConfigurationRepository.php @@ -20,7 +20,6 @@ namespace ILIAS\User\Profile\Fields; -use ILIAS\User\Profile\DataRepository; use ILIAS\Data\UUID\Factory as UUIDFactory; class CachedConfigurationRepository implements ConfigurationRepository @@ -180,7 +179,7 @@ public function deleteCustomField(Field $field): void return; } $this->db->manipulate( - 'DELETE FROM ' . DataRepository::USER_VALUES_TABLE + 'DELETE FROM ' . self::USER_FIELD_CONFIGURATION_TABLE . " WHERE field_id={$this->db->quote($field->getIdentifier(), \ilDBConstants::T_TEXT)}" ); $this->db->manipulate( diff --git a/components/ILIAS/User/src/Profile/Fields/Custom/Custom.php b/components/ILIAS/User/src/Profile/Fields/Custom/Custom.php index 7be6237f3a32..83092e1413d6 100644 --- a/components/ILIAS/User/src/Profile/Fields/Custom/Custom.php +++ b/components/ILIAS/User/src/Profile/Fields/Custom/Custom.php @@ -156,16 +156,16 @@ public function addValueToUserObject( return $user->withProfileData( $user->getProfileData()->withAdditionalFieldByIdentifier( $this->getIdentifier(), - $this->type->prepareUserInputForStorage($input) + $this->type->prepareUserInputForStorage($input, $this->additional_edit_form_data) ) ); } public function retrieveValueFromUser(\ilObjUser $user): string { - return $this->type->buildPresentationValueFromUserValue( - $user->getProfileData()->getAdditionalFieldByIdentifier($this->getIdentifier()) ?? [], - $this->additional_edit_form_data + return implode( + ', ', + $user->getProfileData()->getAdditionalFieldByIdentifier($this->getIdentifier()) ?? [] ); } } diff --git a/components/ILIAS/User/src/Profile/Fields/Custom/Select.php b/components/ILIAS/User/src/Profile/Fields/Custom/Select.php index 7f87bab117ac..b450936a6d79 100644 --- a/components/ILIAS/User/src/Profile/Fields/Custom/Select.php +++ b/components/ILIAS/User/src/Profile/Fields/Custom/Select.php @@ -63,58 +63,36 @@ public function getLegacyInput( ?string $data ): \ilFormPropertyGUI { $parsed_data = $this->parseData($data); - if ($parsed_data['allow_multiple']) { - $input = new \ilMultiSelectInputGUI($label); - $input->setOptions($this->parseData($data)['options']); - $input->setValue($user_value); + if (!$parsed_data['allow_multiple']) { + $input = new \ilSelectInputGUI($label); + $input->setOptions( + ['' => $lng->txt('please_select')] + + array_combine($parsed_data['options'], $parsed_data['options']) + ); + $input->setValue($user_value[0] ?? ''); return $input; } - $input = new \ilSelectInputGUI($label); - $input->setOptions(['' => $lng->txt('please_select')] + $this->parseData($data)['options']); - $input->setValue($user_value[0] ?? ''); + $input = new \ilMultiSelectInputGUI($label); + $input->setOptions( + array_combine($parsed_data['options'], $parsed_data['options']) + ); + $input->setValue($user_value); return $input; - } - public function prepareUserInputForStorage(mixed $input): array - { - if (is_array($input)) { - return $input; - } - return [$input]; } - public function buildPresentationValueFromUserValue( - array $input, - ?string $data - ): string { - if ($data === null || $input === []) { - return ''; - } - + public function prepareUserInputForStorage(mixed $input, ?string $data): array + { $options = $this->parseData($data)['options']; + if (!is_array($input)) { + $input = [$input]; + } - return implode( - ', ', - array_reduce( - $input, - static function (array $c, string|int $v) use ($options): array { - if (array_key_exists($v, $options)) { - $c[] = $options[$v]; - return $c; - } - - $value = array_search($v, $options); - if ($value === false) { - return $c; - } - - $c[] = $v; - return $c; - }, - [] - ) + return array_filter( + $input, + fn(string $v): bool => in_array($v, $options) ); } diff --git a/components/ILIAS/User/src/Profile/Fields/Custom/Text.php b/components/ILIAS/User/src/Profile/Fields/Custom/Text.php index 543e7ccc7316..ddf9d764ef86 100644 --- a/components/ILIAS/User/src/Profile/Fields/Custom/Text.php +++ b/components/ILIAS/User/src/Profile/Fields/Custom/Text.php @@ -54,15 +54,8 @@ public function getLegacyInput( return $input; } - public function prepareUserInputForStorage(mixed $input): array + public function prepareUserInputForStorage(mixed $input, ?string $data): array { return [$input]; } - - public function buildPresentationValueFromUserValue( - array $input, - ?string $data - ): string { - return $input[0] ?? ''; - } } diff --git a/components/ILIAS/User/src/Profile/Fields/Custom/TextArea.php b/components/ILIAS/User/src/Profile/Fields/Custom/TextArea.php index c6a7d2699178..71828b36a601 100644 --- a/components/ILIAS/User/src/Profile/Fields/Custom/TextArea.php +++ b/components/ILIAS/User/src/Profile/Fields/Custom/TextArea.php @@ -54,15 +54,8 @@ public function getLegacyInput( return $input; } - public function prepareUserInputForStorage(mixed $input): array + public function prepareUserInputForStorage(mixed $input, ?string $data): array { return [$input]; } - - public function buildPresentationValueFromUserValue( - array $input, - ?string $data - ): string { - return $input[0] ?? ''; - } } diff --git a/components/ILIAS/User/src/Profile/Fields/Custom/Type.php b/components/ILIAS/User/src/Profile/Fields/Custom/Type.php index e8183a4862f9..8ff035ddb5bb 100644 --- a/components/ILIAS/User/src/Profile/Fields/Custom/Type.php +++ b/components/ILIAS/User/src/Profile/Fields/Custom/Type.php @@ -62,15 +62,5 @@ public function getLegacyInput( * @return array|null Returning null will lead to the deletion of all * current values. */ - public function prepareUserInputForStorage(mixed $input): ?array; - - /** - * If you have a value that has a $key => $value structure, e.g. because you - * implemented ad select-input that returns $key, but needs $value for - * presentation, it needs to return the $value, if the input is $key or $value. - */ - public function buildPresentationValueFromUserValue( - array $input, - ?string $data - ): string; + public function prepareUserInputForStorage(mixed $input, ?string $data): ?array; } diff --git a/components/ILIAS/User/src/Profile/Fields/Field.php b/components/ILIAS/User/src/Profile/Fields/Field.php index eb96e4b9397a..1ee7dd5fcde5 100644 --- a/components/ILIAS/User/src/Profile/Fields/Field.php +++ b/components/ILIAS/User/src/Profile/Fields/Field.php @@ -322,7 +322,7 @@ public function getLegacyInput( ): \ilFormPropertyGUI { $input = $this->definition->getLegacyInput($lng, $context, $user); $input->setPostVar($this->definition->getIdentifier()); - $input->setRequired($this->required); + $input->setRequired($input->getRequired() || $this->isRequired()); return $input; } @@ -332,7 +332,7 @@ public function addValueToUserObject( mixed $input, ?\ilPropertyFormGUI $form = null ): \ilObjUser { - if (!$context->isFieldChangeableInType($this, $user)) { + if (!$context->isFieldChangeable($this, $user)) { throw new \Exception('It is not possible to Change this from here!'); } return $this->definition->addValueToUserObject($user, $input, $form); diff --git a/components/ILIAS/User/src/Profile/Fields/Standard/Avatar.php b/components/ILIAS/User/src/Profile/Fields/Standard/Avatar.php index f41366a1dd41..49102781f6dd 100644 --- a/components/ILIAS/User/src/Profile/Fields/Standard/Avatar.php +++ b/components/ILIAS/User/src/Profile/Fields/Standard/Avatar.php @@ -121,7 +121,7 @@ public function getLegacyInput( return $input; } - $picture_path = $user->getPersonalPicturePath(); + $picture_path = $user->getPersonalPicturePath('small', true); if ($picture_path !== '') { $input->setImage($picture_path); $input->setAlt($this->getLabel($lng)); @@ -139,12 +139,14 @@ public function addValueToUserObject( public function retrieveValueFromUser(\ilObjUser $user): string { - $define = new \ilUserAvatarResolver($user->getId()); - if (!$define->hasProfilePicture()) { + + if ($user->getAvatarRid() === null) { return ''; } + $define = new \ilUserAvatarResolver($user->getId()); $define->setSize('xsmall'); - return $this->ui_renderer->render($define->getAvatar()); + $define->setForcePicture(true); + return $define->getLegacyPictureURL(); } /** @@ -270,7 +272,7 @@ private function moveStreamToStorage( private function retrieveCapture(): ?string { $from_upload = $this->post_wrapper->retrieve( - 'upload_capture', + 'avatar_capture', $this->refinery->byTrying([ $this->refinery->kindlyTo()->string(), $this->refinery->always('') diff --git a/components/ILIAS/User/src/Profile/Fields/Standard/BuildAutocompletionUrl.php b/components/ILIAS/User/src/Profile/Fields/Standard/BuildAutocompletionUrl.php index a907136e03d8..394f15d9b4d4 100644 --- a/components/ILIAS/User/src/Profile/Fields/Standard/BuildAutocompletionUrl.php +++ b/components/ILIAS/User/src/Profile/Fields/Standard/BuildAutocompletionUrl.php @@ -15,6 +15,12 @@ trait BuildAutocompletionUrl { private function getAutocompleteUrl(\ilCtrl $ctrl): string { - return $ctrl->getLinkTargetByClass(PublicProfileGUI::class, 'doProfileAutoComplete'); + return $ctrl->getLinkTargetByClass( + [ + \ilPublicProfileBaseClassGUI::class, + PublicProfileGUI::class + ], + 'doProfileAutoComplete' + ); } } diff --git a/components/ILIAS/User/src/Profile/Fields/Standard/ClientIP.php b/components/ILIAS/User/src/Profile/Fields/Standard/ClientIP.php new file mode 100644 index 000000000000..2c927623aace --- /dev/null +++ b/components/ILIAS/User/src/Profile/Fields/Standard/ClientIP.php @@ -0,0 +1,135 @@ +<?php + +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + * + *********************************************************************/ + +declare(strict_types=1); + +namespace ILIAS\User\Profile\Fields\Standard; + +use ILIAS\User\Context; +use ILIAS\User\Profile\Fields\NoOverrides; +use ILIAS\User\Profile\Fields\FieldDefinition; +use ILIAS\User\Profile\Fields\AvailableSections; +use ILIAS\Language\Language; + +class ClientIP implements FieldDefinition +{ + use NoOverrides; + + public function getIdentifier(): string + { + return 'client_ip'; + } + + public function getLabel(Language $lng): string + { + return $lng->txt($this->getIdentifier()); + } + + public function getSection(): AvailableSections + { + return AvailableSections::Other; + } + + public function hiddenInLists(): bool + { + return true; + } + + public function visibleInRegistrationForcedTo(): ?bool + { + return false; + } + + public function visibleToUserForcedTo(): ?bool + { + return false; + } + + public function visibleInLocalUserAdministrationForcedTo(): ?bool + { + return false; + } + + public function visibleInCoursesForcedTo(): ?bool + { + return false; + } + + public function visibleInGroupsForcedTo(): ?bool + { + return false; + } + + public function visibleInStudyProgrammesForcedTo(): ?bool + { + return false; + } + + public function changeableByUserForcedTo(): ?bool + { + return false; + } + + public function requiredForcedTo(): ?bool + { + return false; + } + + public function searchableForcedTo(): ?bool + { + return false; + } + + public function availableInCertificatesForcedTo(): ?bool + { + return false; + } + + public function getLegacyInput( + Language $lng, + Context $context, + ?\ilObjUser $user = null + ): \ilFormPropertyGUI { + $input = new \ilTextInputGUI($this->getLabel($lng)); + $input->setSize(40); + $input->setMaxLength(255); + $input->setInfo($lng->txt('current_ip') . ' ' . $_SERVER['REMOTE_ADDR'] . ' <br />' . + '<span class="warning">' . $lng->txt('current_ip_alert') . '</span>'); + if ($user === null) { + return $input; + } + $input->setValue( + $this->retrieveValueFromUser($user) + ); + return $input; + } + + public function addValueToUserObject( + \ilObjUser $user, + mixed $input, + ?\ilPropertyFormGUI $form = null + ): \ilObjUser { + $user->setClientIP($input); + return $user; + } + + public function retrieveValueFromUser(\ilObjUser $user): string + { + return $user->getClientIP(); + } +} diff --git a/components/ILIAS/User/src/Profile/Fields/Standard/Email.php b/components/ILIAS/User/src/Profile/Fields/Standard/Email.php index 69fad6eb56b0..af16e9599ff4 100644 --- a/components/ILIAS/User/src/Profile/Fields/Standard/Email.php +++ b/components/ILIAS/User/src/Profile/Fields/Standard/Email.php @@ -58,6 +58,7 @@ public function getLegacyInput( $input = new \ilEMailInputGUI($this->getLabel($lng)); $input->setMaxLength(128); if ($context === Context::Registration) { + $input->setRequired(true); $input->setRetype(true); } if ($user === null) { diff --git a/components/ILIAS/User/src/Profile/Fields/Standard/OrganisationalUnits.php b/components/ILIAS/User/src/Profile/Fields/Standard/OrganisationalUnits.php index d884c4d3ee4a..50a51fa8e60c 100644 --- a/components/ILIAS/User/src/Profile/Fields/Standard/OrganisationalUnits.php +++ b/components/ILIAS/User/src/Profile/Fields/Standard/OrganisationalUnits.php @@ -70,11 +70,6 @@ public function requiredForcedTo(): ?bool return false; } - public function searchableForcedTo(): ?bool - { - return false; - } - public function availableInCertificatesForcedTo(): ?bool { return false; diff --git a/components/ILIAS/User/src/Profile/Fields/Standard/Roles.php b/components/ILIAS/User/src/Profile/Fields/Standard/Roles.php index 17741113ef35..5325f83de59d 100644 --- a/components/ILIAS/User/src/Profile/Fields/Standard/Roles.php +++ b/components/ILIAS/User/src/Profile/Fields/Standard/Roles.php @@ -55,14 +55,19 @@ public function hiddenInLists(): bool return true; } + public function visibleInRegistrationForcedTo(): ?bool + { + return false; + } + public function visibleInCoursesForcedTo(): ?bool { - return true; + return false; } public function visibleInGroupsForcedTo(): ?bool { - return true; + return false; } public function visibleInStudyProgrammesForcedTo(): ?bool @@ -82,7 +87,7 @@ public function changeableByUserForcedTo(): ?bool public function requiredForcedTo(): ?bool { - return true; + return false; } public function searchableForcedTo(): ?bool @@ -168,6 +173,7 @@ function (array $c, array $v): array { [] ), ); + $input->setRequired(true); return $input; } diff --git a/components/ILIAS/User/src/Profile/Fields/Standard/ZipCode.php b/components/ILIAS/User/src/Profile/Fields/Standard/ZipCode.php index 878d51477189..1dfde89f8d8d 100644 --- a/components/ILIAS/User/src/Profile/Fields/Standard/ZipCode.php +++ b/components/ILIAS/User/src/Profile/Fields/Standard/ZipCode.php @@ -56,7 +56,7 @@ public function getLegacyInput( ?\ilObjUser $user = null ): \ilFormPropertyGUI { $input = new \ilTextInputGUI($this->getLabel($lng)); - $input->setMaxLength(40); + $input->setMaxLength(10); if ($user === null) { return $input; } diff --git a/components/ILIAS/User/src/Profile/Fields/class.ConfigurationGUI.php b/components/ILIAS/User/src/Profile/Fields/class.ConfigurationGUI.php index 55f4d88109a2..d12e4fab3699 100755 --- a/components/ILIAS/User/src/Profile/Fields/class.ConfigurationGUI.php +++ b/components/ILIAS/User/src/Profile/Fields/class.ConfigurationGUI.php @@ -51,6 +51,13 @@ class ConfigurationGUI implements DataRetrieval private const string CHANGED_ATTRIBUTES_PARAMETER = 'ca'; + private const string DEFAULT_CMD = 'show'; + private const string CMD_SAVE = 'save'; + private const string CMD_CREATE = 'create'; + private const string CMD_SAVE_AFTER_LISTENER_CONFIRMATION = 'saveAfterListenerConfirmation'; + private const string CMD_DELETE = 'delete'; + private const string CMD_PERFORM_TABLE_ACTION = 'action'; + private const string ACTION_EDIT = 'edit'; private const string ACTION_DELETE = 'delete'; @@ -83,7 +90,7 @@ public function __construct( new URI( ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTargetByClass( [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, self::class], - 'action' + self::CMD_PERFORM_TABLE_ACTION ) ) ); @@ -173,7 +180,7 @@ public function saveCmd(): void $this->storeField($data['field']); $this->ctrl->redirectByClass( [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, self::class], - 'show' + self::DEFAULT_CMD ); } @@ -197,7 +204,10 @@ public function createCmd(): void } $this->storeField($data['field']); - $this->showCmd(); + $this->ctrl->redirectByClass( + [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, self::class], + self::DEFAULT_CMD + ); } public function saveAfterListenerConfirmationCmd(): void @@ -247,7 +257,10 @@ public function deleteCmd(): void ); $this->available_fields = $this->repository->get(); $this->tpl->setOnScreenMessage('success', $this->lng->txt('udf_field_deleted'), true); - $this->showCmd(); + $this->ctrl->redirectByClass( + [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, self::class], + self::DEFAULT_CMD + ); } public function getRows( @@ -462,7 +475,7 @@ private function buildEditModal( ), $this->ctrl->getFormActionByClass( [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, self::class], - 'save' + self::CMD_SAVE ) ); } @@ -484,7 +497,7 @@ private function buildCreateModal(): RoundTripModal ), $this->ctrl->getFormActionByClass( [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, self::class], - 'create' + self::CMD_CREATE ) ); } @@ -524,7 +537,7 @@ private function buildChangeListenerConfirmationModal( ), $this->ctrl->getFormActionByClass( [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, self::class], - 'saveAfterListenerConfirmation' + self::CMD_SAVE_AFTER_LISTENER_CONFIRMATION ) ); } @@ -537,7 +550,7 @@ private function buildDeleteConfirmationModal( $this->lng->txt('udf_delete_sure'), $this->ctrl->getFormActionByClass( [\ilAdministrationGUI::class, \ilObjUserFolderGUI::class, self::class], - 'delete' + self::CMD_DELETE ) )->withAffectedItems([ $this->ui_factory->modal()->interruptiveItem()->standard( diff --git a/components/ILIAS/User/src/Profile/Profile.php b/components/ILIAS/User/src/Profile/Profile.php index eeba1549ccf3..32c3593e1c1b 100755 --- a/components/ILIAS/User/src/Profile/Profile.php +++ b/components/ILIAS/User/src/Profile/Profile.php @@ -27,7 +27,7 @@ interface Profile * @return array<\ILIAS\User\Profile\Fields\Field> */ public function getFields( - array $groups_to_skip = [], + array $sections_to_skip = [], array $fields_to_skip = [] ): array; @@ -37,7 +37,7 @@ public function getFields( public function getVisibleFields( Context $context, ?\ilObjUser $user = null, - array $groups_to_skip = [], + array $sections_to_skip = [], array $fields_to_skip = [] ): array; diff --git a/components/ILIAS/User/src/Profile/ProfileImplementation.php b/components/ILIAS/User/src/Profile/ProfileImplementation.php index 8986a0592967..936efc44b0d8 100644 --- a/components/ILIAS/User/src/Profile/ProfileImplementation.php +++ b/components/ILIAS/User/src/Profile/ProfileImplementation.php @@ -42,13 +42,13 @@ public function __construct( * @return array<\ILIAS\User\Profile\Fields\Field> */ public function getFields( - array $groups_to_skip = [], + array $sections_to_skip = [], array $fields_to_skip = [] ): array { return array_reduce( $this->user_fields, - function (array $c, ProfileField $v) use ($groups_to_skip, $fields_to_skip): array { - if (!in_array($v->getSection(), $groups_to_skip) + function (array $c, ProfileField $v) use ($sections_to_skip, $fields_to_skip): array { + if (!in_array($v->getSection(), $sections_to_skip) && !in_array(get_class($v->getDefinition()), $fields_to_skip)) { $c[$v->getIdentifier()] = $v; } @@ -64,14 +64,14 @@ function (array $c, ProfileField $v) use ($groups_to_skip, $fields_to_skip): arr public function getVisibleFields( Context $context, ?\ilObjUser $user = null, - array $groups_to_skip = [], + array $sections_to_skip = [], array $fields_to_skip = [] ): array { return array_filter( $this->user_fields, - fn(ProfileField $v) => !in_array($v->getSection(), $groups_to_skip) - && !in_array(get_class($v->getDefinition()), $fields_to_skip) - && $context->isFieldVisibleInType($v, $user) + fn(ProfileField $v) => !in_array($v->getSection(), $sections_to_skip) + && !in_array($v->getDefinition()::class, $fields_to_skip) + && $context->isFieldVisible($v, $user) ? true : false ); } @@ -81,6 +81,11 @@ public function getFieldByIdentifier(string $identifier): ?ProfileField return $this->profile_fields_repository->getByIdentifier($identifier); } + public function getFieldByClass(string $class): ?ProfileField + { + return $this->profile_fields_repository->getByClass($class); + } + public function addFieldsToForm( \ilPropertyFormGUI $form, Context $context, @@ -103,10 +108,11 @@ function (\ilPropertyFormGUI $c, array $v) use ($context, $user, $do_require): \ public function addFormValuesToUser( \ilPropertyFormGUI $form, Context $context, - \ilObjUser $user + \ilObjUser $user, + array $skip_fields = [] ): \ilObjUser { return array_reduce( - $this->getVisibleFields($context, $user), + $this->getVisibleFields($context, $user, [], $skip_fields), static function (\ilObjUser $c, ProfileField $v) use ($form, $context, $user): \ilObjUser { if ($form->getItemByPostVar($v->getIdentifier())->getDisabled()) { return $c; @@ -268,8 +274,8 @@ private function addSectionFieldsToForm( $fields, function (\ilPropertyFormGUI $form, ProfileField $v) use ($context, $user, $do_require): \ilPropertyFormGUI { $input = $v->getLegacyInput($this->lng, $context, $user); - $input->setDisabled(!$context->isFieldChangeableInType($v, $user)); - $input->setRequired($do_require && $v->isRequired()); + $input->setDisabled(!$context->isFieldChangeable($v, $user)); + $input->setRequired($do_require && $input->getRequired()); $form->addItem($input); return $form; }, diff --git a/components/ILIAS/User/src/Profile/VCard.php b/components/ILIAS/User/src/Profile/VCard.php index eea30c03c7eb..63b4f364236a 100755 --- a/components/ILIAS/User/src/Profile/VCard.php +++ b/components/ILIAS/User/src/Profile/VCard.php @@ -221,25 +221,25 @@ public function buildVCard(): string $adr = 'ADR'; $adr_types = []; if ($address['TYPE'] > 0) { - if (($address['TYPE'] & ADR_TYPE_DOM) > 0) { + if (($address['TYPE'] & self::ADR_TYPE_DOM) > 0) { $adr_types[] = 'dom'; } - if (($address['TYPE'] & ADR_TYPE_INTL) > 0) { + if (($address['TYPE'] & self::ADR_TYPE_INTL) > 0) { $adr_types[] = 'intl'; } - if (($address['TYPE'] & ADR_TYPE_POSTAL) > 0) { + if (($address['TYPE'] & self::ADR_TYPE_POSTAL) > 0) { $adr_types[] = 'postal'; } - if (($address['TYPE'] & ADR_TYPE_PARCEL) > 0) { + if (($address['TYPE'] & self::ADR_TYPE_PARCEL) > 0) { $adr_types[] = 'parcel'; } - if (($address['TYPE'] & ADR_TYPE_HOME) > 0) { + if (($address['TYPE'] & self::ADR_TYPE_HOME) > 0) { $adr_types[] = 'home'; } - if (($address['TYPE'] & ADR_TYPE_WORK) > 0) { + if (($address['TYPE'] & self::ADR_TYPE_WORK) > 0) { $adr_types[] = 'work'; } - if (($address['TYPE'] & ADR_TYPE_PREF) > 0) { + if (($address['TYPE'] & self::ADR_TYPE_PREF) > 0) { $adr_types[] = 'pref'; } $adr .= ';TYPE=' . implode(',', $adr_types); diff --git a/components/ILIAS/User/src/Profile/class.PersonalProfileGUI.php b/components/ILIAS/User/src/Profile/class.PersonalProfileGUI.php index 5b7c6d99f17b..20c3dab84c25 100755 --- a/components/ILIAS/User/src/Profile/class.PersonalProfileGUI.php +++ b/components/ILIAS/User/src/Profile/class.PersonalProfileGUI.php @@ -29,6 +29,12 @@ use ILIAS\User\Profile\ChangeMail\Mail as ChangeMailMail; use ILIAS\User\Profile\Prompt\Repository as PromptRepository; use ILIAS\User\Profile\Fields\Field as ProfileField; +use ILIAS\User\Profile\Fields\Standard\FirstName; +use ILIAS\User\Profile\Fields\Standard\LastName; +use ILIAS\User\Profile\Fields\Standard\Alias; +use ILIAS\User\Profile\Fields\Standard\OrganisationalUnits; +use ILIAS\User\Profile\Fields\Standard\Roles; +use ILIAS\User\Profile\Fields\Standard\Email; use ILIAS\User\Settings\Settings as UserSettings; use ILIAS\Language\Language; use ILIAS\FileUpload\FileUpload; @@ -75,7 +81,7 @@ class PersonalProfileGUI private ChangeMailRepository $change_mail_token_repo; private PromptRepository $prompt_repository; private GUIRequest $profile_request; - private Profile $profile; + private ProfileImplementation $profile; private UserSettings $user_settings; private \ilLogger $logger; @@ -360,9 +366,10 @@ public function savePersonalData(): void private function emailChanged(): bool { - $email_input = $this->form->getItemByPostVar('usr_email'); + $identifier_email = $this->profile->getFieldByClass(Email::class)->getIdentifier(); + $email_input = $this->form->getItemByPostVar($identifier_email); if ($email_input !== null && !$email_input->getDisabled() - && $this->form->getInput('usr_email') !== $this->user->getEmail()) { + && $this->form->getInput($identifier_email) !== $this->user->getEmail()) { return true; } @@ -374,7 +381,7 @@ private function emailCompletionForced(): bool $current_email = $this->user->getEmail(); if ( $this->user->getProfileIncomplete() - && $this->settings->get('require_email') === '1' + && $this->profile->getFieldByClass(Email::class)->isRequired() && ($current_email === null || $current_email === '') ) { return true; @@ -436,7 +443,7 @@ private function updateLoginOrSetErrorMessages(): bool } try { - $this->user->updateLogin($login); + $this->user->updateLogin($login, Context::User); return true; } catch (\ilUserException $e) { $this->tpl->setOnScreenMessage('failure', $this->lng->txt('form_input_not_valid')); @@ -454,7 +461,7 @@ public function goToEmailConfirmation(): void $this->showPersonalData(true); return; } - $this->addDataFromFormToUser(); + $this->addDataFromFormToUser([Email::class]); $this->user->update(); \ilSession::setClosingContext(\ilSession::SESSION_CLOSE_USER); @@ -462,7 +469,9 @@ public function goToEmailConfirmation(): void session_unset(); $token = $this->change_mail_token_repo->getNewTokenForUser( $this->user, - $this->form->getInput('usr_email'), + $this->form->getInput( + $this->profile->getFieldByClass(Email::class)->getIdentifier() + ), time() ); $this->ctrl->redirectToURL( @@ -470,9 +479,10 @@ public function goToEmailConfirmation(): void ); } - private function addDataFromFormToUser(): void - { - $this->user = $this->profile->addFormValuesToUser($this->form, Context::User, $this->user); + private function addDataFromFormToUser( + array $skip_fields = [] + ): void { + $this->user = $this->profile->addFormValuesToUser($this->form, Context::User, $this->user, $skip_fields); $this->user->setProfileIncomplete(false); $this->user->setTitle($this->user->getFullname()); @@ -615,10 +625,10 @@ public function showPublicProfileFields( Context::User, null, [], - [FirstName::class, LastName::class] + [FirstName::class, LastName::class, Alias::class, OrganisationalUnits::class, Roles::class] ) as $field) { $value = $field->retrieveValueFromUser($this->user); - if (!$anonymized && ($value === '' || $value === '-')) { + if (!$anonymized && ($value === '' || $value === '-' || $value === null)) { continue; } if ($anonymized) { @@ -628,12 +638,11 @@ public function showPublicProfileFields( if ($field->isVisibleToUser()) { // #18795 - we should use ilUserProfile switch ($field->getIdentifier()) { - case 'upload': - $caption = 'personal_picture'; - break; - - case 'title': - $caption = 'person_title'; + case 'avatar': + $caption = $this->lng->txt('personal_picture'); + $value = $value !== null + ? "<img src='{$value}' alt='{$this->lng->txt('user_avatar')}' />" + : null; break; default: diff --git a/components/ILIAS/User/src/Profile/class.PublicProfileGUI.php b/components/ILIAS/User/src/Profile/class.PublicProfileGUI.php index e18844b44d50..067e3b00ca0d 100755 --- a/components/ILIAS/User/src/Profile/class.PublicProfileGUI.php +++ b/components/ILIAS/User/src/Profile/class.PublicProfileGUI.php @@ -30,8 +30,10 @@ * @author Alexander Killing <killing@leifos.de> * @ilCtrl_Calls ILIAS\User\Profile\PublicProfileGUI: ilObjPortfolioGUI */ -class PublicProfileGUI implements \ilCtrlBaseClassInterface +class PublicProfileGUI { + public const string DEFAULT_CMD = 'view'; + private bool $offline = false; private GUIRequest $profile_request; private int $userid = 0; @@ -190,10 +192,6 @@ public function executeCommand(): string break; } - // only for direct links - if (strtolower($this->profile_request->getBaseClass()) === strtolower(self::class)) { - $this->tpl->printToStdout(); - } return (string) $ret; } @@ -350,13 +348,15 @@ public function getEmbeddable(bool $a_add_goto = false): string $tpl->setVariable('HREF_VCARD', $this->ctrl->getLinkTarget($this, 'deliverVCard')); } - $imagefile = \ilObjUser::_getPersonalPicturePath($user->getId(), 'big', false, true); - if ($this->getPublicPref($user, 'public_upload') === 'y' && $imagefile !== '' + if ($this->getPublicPref($user, 'public_avatar') === 'y' && ($this->current_user->getId() !== ANONYMOUS_USER_ID || $user->getPref('public_profile') === 'g')) { + $define = new \ilUserAvatarResolver($user->getId()); + $define->setForcePicture(false); + $define->setSize('big'); $tpl->setCurrentBlock('image'); $tpl->setVariable('TXT_IMAGE', $this->lng->txt('image')); - $tpl->setVariable('IMAGE_PATH', $imagefile); + $tpl->setVariable('IMAGE_PATH', $define->getLegacyPictureURL()); $tpl->setVariable('IMAGE_ALT', $this->lng->txt('personal_picture')); $tpl->parseCurrentBlock(); } @@ -517,7 +517,7 @@ public function getEmbeddable(bool $a_add_goto = false): string $tpl->setVariable('TXT_LOCATION', $this->lng->txt('location')); $map_gui = \ilMapUtil::getMapGUI(); - $map_gui->setMapId('user_map_' . md5($user->login)) + $map_gui->setMapId('user_map_' . md5($user->getLogin())) ->setWidth('350px') ->setHeight('230px') ->setLatitude($user->getLatitude()) @@ -530,14 +530,14 @@ public function getEmbeddable(bool $a_add_goto = false): string } foreach ($this->profile->getVisibleUserDefinedFields(Context::User) as $field) { - // public setting - if ($this->getPublicPref($user, 'public_udf_' . $field->getIdentifier()) === 'y' - && !empty(($value = $field->retrieveValueFromUser($user)))) { - $tpl->setCurrentBlock('udf_data'); - $tpl->setVariable('TXT_UDF_DATA', $field->getLabel($this->lng)); - $tpl->setVariable('UDF_DATA', $value); - $tpl->parseCurrentBlock(); + $value = $field->retrieveValueFromUser($user); + if ($value === '' || $value === '-' || $value === null) { + continue; } + $tpl->setCurrentBlock('udf_data'); + $tpl->setVariable('TXT_UDF_DATA', $field->getLabel($this->lng)); + $tpl->setVariable('UDF_DATA', $value); + $tpl->parseCurrentBlock(); } foreach ($this->getAdditional() as $key => $val) { @@ -681,25 +681,25 @@ public function deliverVCard(): void /** * Check if given user id is valid */ - protected function validateUser(int $usrId): bool + protected function validateUser(int $usr_id): bool { - if (\ilObject::_lookupType($usrId) != 'usr') { + if (\ilObject::_lookupType($usr_id) !== 'usr') { return false; } - $user = new \ilObjUser($usrId); + $user = new \ilObjUser($usr_id); if ($this->current_user->isAnonymous()) { if (strtolower($this->ctrl->getCmd()) == strtolower('approveContactRequest')) { - $this->ctrl->redirectToURL('login.php?cmd=force_login&target=usr_' . $usrId . '_contact_approved'); + $this->ctrl->redirectToURL('login.php?cmd=force_login&target=usr_' . $usr_id . '_contact_approved'); } elseif (strtolower($this->ctrl->getCmd()) == strtolower('ignoreContactRequest')) { - $this->ctrl->redirectToURL('login.php?cmd=force_login&target=usr_' . $usrId . '_contact_ignored'); + $this->ctrl->redirectToURL('login.php?cmd=force_login&target=usr_' . $usr_id . '_contact_ignored'); } if ($user->getPref('public_profile') != 'g') { // #12151 if ($user->getPref('public_profile') == 'y') { - $this->ctrl->redirectToURL('login.php?cmd=force_login&target=usr_' . $usrId); + $this->ctrl->redirectToURL('login.php?cmd=force_login&target=usr_' . $usr_id); } return false; diff --git a/components/ILIAS/User/src/Search/Search.php b/components/ILIAS/User/src/Search/Search.php index ac6bf07f641d..7ddd03301fdb 100644 --- a/components/ILIAS/User/src/Search/Search.php +++ b/components/ILIAS/User/src/Search/Search.php @@ -44,7 +44,8 @@ public function getInput( return $this->ui_factory->input()->field()->tag($label, [], $byline) ->withSuggestionsStartAfter($endpoint->getSuggestionsStartAfter()) - ->withAsyncAutocomplete(...$endpoint->acquireBuilderAndToken()); + ->withAsyncAutocomplete(...$endpoint->acquireBuilderAndToken()) + ->withoutStripTags(); } /** diff --git a/components/ILIAS/User/src/Search/class.EndpointGUI.php b/components/ILIAS/User/src/Search/class.EndpointGUI.php index 64eea85b7c1a..e61ef4adb64e 100644 --- a/components/ILIAS/User/src/Search/class.EndpointGUI.php +++ b/components/ILIAS/User/src/Search/class.EndpointGUI.php @@ -100,18 +100,25 @@ private function buildResponse(): string ]) ); - $response = array_map( - static fn(AutocompleteItem $v) => $v->getTagArray(), - array_merge( - $this->endpoint_configurator->getAdditionalAnswerElements( - $this->current_user, - $autocomplete_query + $response = array_values( + array_reduce( + array_merge( + $this->endpoint_configurator->getAdditionalAnswerElements( + $this->current_user, + $autocomplete_query + ), + $this->profile_data_repository->searchUsers( + $this->settings_data_repository, + $this->field_configuration_repository, + $autocomplete_query + ) ), - $this->profile_data_repository->searchUsers( - $this->settings_data_repository, - $this->field_configuration_repository, - $autocomplete_query - ) + static function (array $c, AutocompleteItem $v): array { + $tag_array = $v->getTagArray(); + $c[$tag_array['display']] = $tag_array; + return $c; + }, + [] ) ); diff --git a/components/ILIAS/User/src/Settings/Administration/class.SettingsGUI.php b/components/ILIAS/User/src/Settings/Administration/class.SettingsGUI.php index f12d7bb8735e..cce4031aa827 100644 --- a/components/ILIAS/User/src/Settings/Administration/class.SettingsGUI.php +++ b/components/ILIAS/User/src/Settings/Administration/class.SettingsGUI.php @@ -476,7 +476,8 @@ private function buildCheckPasswordMinLengthConstraint(): Constraint private function buildCheckPasswordMaxLengthConstraint(): Constraint { return $this->refinery->custom()->constraint( - static fn(array $vs): bool => $vs['password_min_length'] > $vs['password_max_length'], + static fn(array $vs): bool => $vs['password_max_length'] === 0 || + $vs['password_min_length'] < $vs['password_max_length'], $this->lng->txt('ps_error_message_password_max_less_min') ); } diff --git a/components/ILIAS/User/src/Settings/NewAccountMail/Repository.php b/components/ILIAS/User/src/Settings/NewAccountMail/Repository.php index 7e0e88ef1a30..7ca7e49f5d68 100644 --- a/components/ILIAS/User/src/Settings/NewAccountMail/Repository.php +++ b/components/ILIAS/User/src/Settings/NewAccountMail/Repository.php @@ -45,11 +45,11 @@ public function getFor(string $lang_code): Mail return new MailImplementation( $result_object->lang, - trim($result_object->subject), + trim($result_object->subject ?? ''), trim($result_object->body ?? ''), - trim($result_object->sal_g), - trim($result_object->sal_m), - trim($result_object->sal_f), + trim($result_object->sal_g ?? ''), + trim($result_object->sal_m ?? ''), + trim($result_object->sal_f ?? ''), $result_object->att_rid, $result_object->att_file ?? null ); diff --git a/components/ILIAS/User/src/Settings/NewAccountMail/class.SettingsGUI.php b/components/ILIAS/User/src/Settings/NewAccountMail/class.SettingsGUI.php index fc143f4452db..15cf1be3a024 100755 --- a/components/ILIAS/User/src/Settings/NewAccountMail/class.SettingsGUI.php +++ b/components/ILIAS/User/src/Settings/NewAccountMail/class.SettingsGUI.php @@ -165,9 +165,7 @@ private function buildForm(): StandardForm $this->buildConvertCurlyBracesTrafo() )->withAdditionalTransformation( $this->buildValidateMailBodyConstraint() - )->withValue( - $this->convertCurlyBracesForFormOutput($account_mail->getSubject()) - ), + )->withValue($this->convertCurlyBracesForFormOutput($account_mail->getSubject())), 'salutation_none_specific' => $ff->text($this->lng->txt('mail_salutation_general')) ->withValue($account_mail->getSalutationNoneSpecific()), 'salutation_female' => $ff->text($this->lng->txt('mail_salutation_female')) @@ -179,9 +177,7 @@ private function buildForm(): StandardForm $this->buildConvertCurlyBracesTrafo() )->withAdditionalTransformation( $this->buildValidateMailBodyConstraint() - )->withValue( - $this->convertCurlyBracesForFormOutput($account_mail->getBody()) - ), + )->withValue($account_mail->getBody()), 'attachment' => $ff->file($this->upload_handler_gui, $this->lng->txt('attachment')) ->withValue( $account_mail->getAttachmentRid() === null @@ -210,7 +206,7 @@ function ($v): bool { try { $this->mail_mustache_factory->getBasicEngine()->render($v, []); return true; - } catch (Exception) { + } catch (\Exception) { return false; } }, diff --git a/components/ILIAS/User/src/Settings/Setting.php b/components/ILIAS/User/src/Settings/Setting.php index b1d7eccb7a15..d2d46356ba23 100644 --- a/components/ILIAS/User/src/Settings/Setting.php +++ b/components/ILIAS/User/src/Settings/Setting.php @@ -165,7 +165,7 @@ public function persistUserInput( mixed $input, ?\ilPropertyFormGUI $form = null ): \ilObjUser { - if (!$context->isSettingAvailableInType($this)) { + if (!$context->isSettingAvailable($this)) { throw \Exception('It is not possible to Change this from here!'); } return $this->definition->persistUserInput($user, $input, $form); diff --git a/components/ILIAS/User/src/Settings/SettingsImplementation.php b/components/ILIAS/User/src/Settings/SettingsImplementation.php index 70dcc487c0dd..eeb88d466a0b 100644 --- a/components/ILIAS/User/src/Settings/SettingsImplementation.php +++ b/components/ILIAS/User/src/Settings/SettingsImplementation.php @@ -170,7 +170,7 @@ public function getValueFromLegacyFormByDefinitionClass( public function settingAvailableToUser( string $definition_class ): bool { - return Context::User->isSettingAvailableInType( + return Context::User->isSettingAvailable( $this->getSettingByDefinitionClass($definition_class) ); } @@ -180,6 +180,15 @@ public function getSettingValueFor(int $user_id, string $key): ?string return $this->user_settings_data_repository->getFor($user_id)[$key] ?? null; } + public function getExportableSettings(): array + { + $context = Context::Export; + return array_filter( + $this->user_settings_configuration_repository->get(), + fn(Setting $v): bool => $context->isSettingAvailable($v) + ); + } + /** * @param array<ILIAS\User\Settings\AvailablePages> $pages */ @@ -336,7 +345,7 @@ private function filterSettingsInSectionForAvailability( return array_values( array_filter( $settings, - static fn(Setting $v): bool => $context->isSettingAvailableInType($v) + static fn(Setting $v): bool => $context->isSettingAvailable($v) ) ); } diff --git a/components/ILIAS/User/src/Settings/StartingPoint/Repository.php b/components/ILIAS/User/src/Settings/StartingPoint/Repository.php index 3277f28e7196..5223ebf7ff58 100755 --- a/components/ILIAS/User/src/Settings/StartingPoint/Repository.php +++ b/components/ILIAS/User/src/Settings/StartingPoint/Repository.php @@ -528,7 +528,7 @@ public function getSystemDefaultCalendarView(): int */ public function getSystemDefaultCalendarPeriod(): int { - return (int) $this->settings->get('user_cal_period'); + return (int) $this->settings->get('user_calendar_period'); } /** diff --git a/components/ILIAS/User/src/Settings/StartingPoint/Setting.php b/components/ILIAS/User/src/Settings/StartingPoint/Setting.php index 9adf828e9783..17254d021545 100644 --- a/components/ILIAS/User/src/Settings/StartingPoint/Setting.php +++ b/components/ILIAS/User/src/Settings/StartingPoint/Setting.php @@ -185,7 +185,7 @@ public function getDefaultValueForDisplay( if ($default_starting_point !== Repository::START_REPOSITORY_OBJ || ($ref_id = $this->starting_point_repository->getSystemDefaultStartingObject()) === null || ($obj_id = \ilObject::_lookupObjId($ref_id)) === 0) { - return $starting_point; + return $lng->txt($starting_point); } return $lng->txt('obj_' . \ilObject::_lookupType($obj_id)) . ' - ' . \ilObject::_lookupTitle($obj_id); } diff --git a/components/ILIAS/User/src/Settings/User/SessionReminder.php b/components/ILIAS/User/src/Settings/User/SessionReminder.php index ab726fcccbaa..9f1e66b3b781 100644 --- a/components/ILIAS/User/src/Settings/User/SessionReminder.php +++ b/components/ILIAS/User/src/Settings/User/SessionReminder.php @@ -144,6 +144,7 @@ public function persistUserInput( public function retrieveValueFromUser(\ilObjUser $user): int { - return $this->session_reminder->getEffectiveLeadTime(); + return (int) ($user->getPref('session_reminder_lead_time') + ?? $this->session_reminder->getGlobalSessionReminderLeadTime()); } } diff --git a/components/ILIAS/User/src/Setup/DBUpdateSteps11.php b/components/ILIAS/User/src/Setup/DBUpdateSteps11.php index 3d5b2a704040..4575e9f49b8e 100755 --- a/components/ILIAS/User/src/Setup/DBUpdateSteps11.php +++ b/components/ILIAS/User/src/Setup/DBUpdateSteps11.php @@ -66,6 +66,38 @@ private function insertSetting( ); } + private function migrateBadges( + string $old_value, + string $new_value + ): void { + $query = $this->db->query("SELECT id, conf FROM badge_badge WHERE type_id='user/profile' AND conf LIKE '%$old_value%'"); + while (($badge = $this->db->fetchObject($query)) !== null) { + $config_array = unserialize($badge->conf, ['allowed_classes' => false]); + if (!array_key_exists('profile', $config_array)) { + continue; + } + $config_array['profile'] = array_map( + static function (string $v) use ($old_value, $new_value): string { + if ($v !== "chk_{$old_value}") { + return $v; + } + + return "chk_{$new_value}"; + }, + $config_array['profile'] + ); + $this->db->update( + 'badge_badge', + [ + 'conf' => [\ilDBConstants::T_TEXT, serialize($config_array)] + ], + [ + 'id' => [\ilDBConstants::T_INTEGER, $badge->id] + ] + ); + } + } + public function step_1(): void { if (!$this->db->tableColumnExists('mail_template', 'att_rid')) { @@ -144,6 +176,8 @@ public function step_3(): void $this->db->manipulate( "UPDATE settings SET keyword = 'pumap_udf_{$uuid}' WHERE keyword = 'pumap_udf_{$row->old_field_id}'" ); + + $this->migrateBadges("udf_{$row->old_field_id}", $uuid); } $this->db->dropTableColumn('udf_definition', 'old_field_id'); $this->db->addPrimaryKey('udf_definition', ['field_id']); @@ -410,6 +444,9 @@ public function step_8(): void ); } } + + $this->migrateBadges('upload', 'avatar'); + $this->migrateBadges('selcountry', 'country'); } public function step_9(): void @@ -505,4 +542,13 @@ public function step_12(): void $this->insertSetting("usr_settings_export_{$setting}", '1'); } } + + public function step_13(): void + { + $this->db->update( + 'usr_pref', + ['keyword' => [\ilDBConstants::T_TEXT, 'public_avatar']], + ['keyword' => [\ilDBConstants::T_TEXT, 'public_upload']] + ); + } } diff --git a/components/ILIAS/User/src/StaticURLHandler.php b/components/ILIAS/User/src/StaticURLHandler.php index e825c6bb6441..64fbe5950f21 100755 --- a/components/ILIAS/User/src/StaticURLHandler.php +++ b/components/ILIAS/User/src/StaticURLHandler.php @@ -20,7 +20,14 @@ namespace ILIAS\User; +use ILIAS\User\LocalDIC; +use ILIAS\User\Account\DeleteAccountGUI; use ILIAS\User\Profile\PersonalProfileGUI; +use ILIAS\User\Profile\PublicProfileGUI; +use ILIAS\User\Settings\PersonalSettingsGUI; +use ILIAS\User\Settings\StartingPoint\Repository as StartingPointRepository; +use ILIAS\Data\ReferenceId; +use ILIAS\LegalDocuments\Conductor as LegalDocumentsConductor; use ILIAS\StaticURL\Handler\Handler; use ILIAS\StaticURL\Request\Request; use ILIAS\StaticURL\Context; @@ -32,8 +39,26 @@ class StaticURLHandler extends BaseHandler implements Handler { - public const NAMESPACE = 'user'; - public const CHANGE_EMAIL_OPERATIONS = 'email'; + public const NAMESPACE = 'usr'; + public const CHANGE_EMAIL_OPERATION = 'email'; + public const REGISTRATION_OPERATION = 'registration'; + public const USERNAME_ASSIST_OPERATION = 'nameassist'; + public const PASSWORD_ASSIST_OPERATION = 'pwassist'; + public const DEL_OWN_ACCOUNT_OPERATION = 'delown'; + public const CONTACT_APPROVE_OPERATION = '_contact_approved'; + public const CONTACT_IGNORE_OPERATION = '_contact_ignored'; + + private readonly LegalDocumentsConductor $legal_documents; + private readonly \ilObjUser $user; + private readonly StartingPointRepository $starting_point_repository; + + public function __construct() + { + global $DIC; + $this->legal_documents = $DIC['legalDocuments']; + $this->user = $DIC['ilUser']; + $this->starting_point_repository = LocalDIC::dic()[StartingPointRepository::class]; + } public function getNamespace(): string { @@ -46,12 +71,40 @@ public function handle( Factory $response_factory ): Response { $additional_params = $request->getAdditionalParameters(); + $cmd = $additional_params[0] ?? ''; - $uri = match ($additional_params[0] ?? 'default') { - self::CHANGE_EMAIL_OPERATIONS => $context->isUserLoggedIn() + $uri = match ($cmd) { + self::CHANGE_EMAIL_OPERATION => $context->isUserLoggedIn() ? $this->buildChangeEmailUrl($additional_params[1], $context->ctrl()) : $this->getLoginUrl($request, $context), - default => $context->ctrl()->getLinkTargetByClass([\ilDashboardGUI::class], 'jumpToProfile'), + self::REGISTRATION_OPERATION => $context->ctrl()->redirectByClass( + [\ilStartUpGUI::class, \ilAccountRegistrationGUI::class], + '' + ), + self::USERNAME_ASSIST_OPERATION => $context->ctrl()->redirectByClass( + [\ilStartUpGUI::class, \ilPasswordAssistanceGUI::class], + 'showUsernameAssistanceForm' + ), + self::PASSWORD_ASSIST_OPERATION => $context->ctrl()->redirectByClass( + [\ilStartUpGUI::class, \ilPasswordAssistanceGUI::class], + '' + ), + self::CONTACT_APPROVE_OPERATION => $this->buildProfileUrl( + $context->ctrl(), + $request->getReferenceId(), + 'approveContactRequest' + ), + self::CONTACT_IGNORE_OPERATION => $this->buildProfileUrl( + $context->ctrl(), + $request->getReferenceId(), + 'ignoreContactRequest' + ), + self::DEL_OWN_ACCOUNT_OPERATION => $this->buildDeleteUsrUrl($context), + default => $this->getRedirectToOtherComponentsOrProfile( + $context->ctrl(), + $request->getReferenceId(), + $cmd + ) }; return $response_factory->can($uri); @@ -80,4 +133,71 @@ private function getLoginUrl( . '&cmd=force_login&lang=' . $context->getUserLanguage(); } + + private function buildDeleteUsrUrl( + Context $context + ): string { + if ($context->getUserId() !== ANONYMOUS_USER_ID + && $this->user->hasDeletionFlag()) { + $context->ctrl()->setTargetScript('ilias.php'); + return $context->ctrl()->getLinkTargetByClass( + [\ilDashboardGUI::class, PersonalSettingsGUI::class, DeleteAccountGUI::class], + 'deleteOwnAccountStep2' + ); + } + + $context->mainTemplate()->setOnScreenMessage( + 'failure', + $context->lng()->txt('account_not_flagged_for_deletion'), + true + ); + return $this->starting_point_repository->getValidAndAccessibleStartingPointAsUrl(); + } + + private function getRedirectToOtherComponentsOrProfile( + \ilCtrl $ctrl, + ?ReferenceId $target_user_id, + string $cmd + ): string { + if (str_starts_with($cmd, '_bdg')) { + return $ctrl->getLinkTargetByClass(\ilDashboardGUI::class, 'jumpToBadges'); + } + + $legal_documents_target = $this->legal_documents->findGotoLink($cmd); + if ($legal_documents_target->isOK()) { + $ctrl->setTargetScript('ilias.php'); + foreach ($legal_documents_target->value()->queryParams() as $key => $value) { + $ctrl->setParameterByClass( + $legal_documents_target->value()->guiName(), + (string) $key, + $value + ); + } + return $ctrl->getLinkTargetByClass( + $legal_documents_target->value()->guiPath(), + $legal_documents_target->value()->command() + ); + } + + return $this->buildProfileUrl( + $ctrl, + $target_user_id, + PublicProfileGUI::DEFAULT_CMD + ); + } + + private function buildProfileUrl( + \ilCtrl $ctrl, + ?ReferenceId $target_user_id, + string $cmd + ): string { + if ($target_user_id === null) { + return $ctrl->getLinkTargetByClass( + [\ilDashboardGUI::class], + 'jumpToProfile' + ); + } + $ctrl->setParameterByClass(PublicProfileGUI::class, 'user_id', $target_user_id->toInt()); + return $ctrl->getLinkTargetByClass([\ilPublicProfileBaseClassGUI::class, PublicProfileGUI::class], $cmd); + } } diff --git a/components/ILIAS/WebAccessChecker/classes/class.ilWebAccessChecker.php b/components/ILIAS/WebAccessChecker/classes/class.ilWebAccessChecker.php index faf45eb81371..868cf1495570 100755 --- a/components/ILIAS/WebAccessChecker/classes/class.ilWebAccessChecker.php +++ b/components/ILIAS/WebAccessChecker/classes/class.ilWebAccessChecker.php @@ -154,7 +154,9 @@ public function initILIAS(): void ilContext::init(ilContext::CONTEXT_WAC); try { - ilInitialisation::initILIAS(); + require_once(__DIR__ . "/../../../../artifacts/bootstrap_default.php"); + entry_point("ILIAS Legacy Initialisation Adapter"); + $this->checkUser(); $this->checkPublicSection(); } catch (Exception $e) { diff --git a/components/ILIAS/WebDAV/classes/class.ilObjWebDAVGUI.php b/components/ILIAS/WebDAV/classes/class.ilObjWebDAVGUI.php index a73a973b1705..92d4bd76faf2 100755 --- a/components/ILIAS/WebDAV/classes/class.ilObjWebDAVGUI.php +++ b/components/ILIAS/WebDAV/classes/class.ilObjWebDAVGUI.php @@ -108,6 +108,7 @@ protected function initSettingsForm(): ilPropertyFormGUI $form->setTitle($this->lng->txt("settings")); $cb_prop = new ilCheckboxInputGUI($this->lng->txt("enable_webdav"), "enable_webdav"); + $cb_prop->setInfo($this->lng->txt("enable_webdav_info")); $cb_prop->setValue('1'); $cb_prop->setChecked($this->object->isWebdavEnabled()); $form->addItem($cb_prop); diff --git a/components/ILIAS/WebDAV/classes/class.ilWebDAVDIC.php b/components/ILIAS/WebDAV/classes/class.ilWebDAVDIC.php index f6d49a5970bf..25124aef720a 100755 --- a/components/ILIAS/WebDAV/classes/class.ilWebDAVDIC.php +++ b/components/ILIAS/WebDAV/classes/class.ilWebDAVDIC.php @@ -97,7 +97,6 @@ public function init(ILIASContainer $DIC): void $DIC->language(), $DIC->rbac()->system(), $DIC["ilErr"], - ilLoggerFactory::getLogger('webdav'), $DIC->toolbar(), $DIC->http(), $DIC->refinery(), diff --git a/components/ILIAS/WebDAV/classes/mount_instructions/class.ilWebDAVMountInstructionsGUI.php b/components/ILIAS/WebDAV/classes/mount_instructions/class.ilWebDAVMountInstructionsGUI.php index 654651b2df8a..62f4b39c2520 100755 --- a/components/ILIAS/WebDAV/classes/mount_instructions/class.ilWebDAVMountInstructionsGUI.php +++ b/components/ILIAS/WebDAV/classes/mount_instructions/class.ilWebDAVMountInstructionsGUI.php @@ -52,7 +52,7 @@ public function buildGUIFromGivenMountInstructions(array $mount_instructions, bo $components = []; - $js_function_legacy = $f->legacy( + $js_function_legacy = $f->legacy()->content( '<script>' . 'il.UI.showMountInstructions = function (e, id){' . "obj = $(e['target']);" @@ -64,7 +64,7 @@ public function buildGUIFromGivenMountInstructions(array $mount_instructions, bo ); if (count($mount_instructions) === 1) { - $content = $f->legacy("<div class='instructions'>" . array_shift($mount_instructions) . "</div>"); + $content = $f->legacy()->content("<div class='instructions'>" . array_shift($mount_instructions) . "</div>"); return $render_async ? $r->renderAsync($content) : $r->render($content); } @@ -75,7 +75,7 @@ public function buildGUIFromGivenMountInstructions(array $mount_instructions, bo foreach ($mount_instructions as $title => $text) { foreach ($os as $os_string) { - if (stristr($title, (string) $os_string) !== false) { + if (stristr((string) $title, (string) $os_string) !== false) { $selected = $title; break 2; } @@ -85,7 +85,7 @@ public function buildGUIFromGivenMountInstructions(array $mount_instructions, bo foreach ($mount_instructions as $title => $text) { $hidden = $title == $selected ? '' : 'style="display: none;"'; - $legacy = $f->legacy("<div id='$title' class='instructions' $hidden>$text</div>") + $legacy = $f->legacy()->content("<div id='$title' class='instructions' $hidden>$text</div>") ->withCustomSignal($title, "il.UI.showMountInstructions(event, '$title');"); $view_control_actions[$title] = $legacy->getCustomSignal($title); @@ -99,9 +99,9 @@ public function buildGUIFromGivenMountInstructions(array $mount_instructions, bo // Add view control and legacy add the beginning of the array (so they will be rendered first) $header_components = [ - $f->legacy("<div class='webdav-view-control'>"), + $f->legacy()->content("<div class='webdav-view-control'>"), $view_control, - $f->legacy("</div>"), + $f->legacy()->content("</div>"), $js_function_legacy ]; diff --git a/components/ILIAS/WebDAV/classes/mount_instructions/class.ilWebDAVMountInstructionsUploadGUI.php b/components/ILIAS/WebDAV/classes/mount_instructions/class.ilWebDAVMountInstructionsUploadGUI.php index c9a142a4f05c..361d8d22a2b1 100755 --- a/components/ILIAS/WebDAV/classes/mount_instructions/class.ilWebDAVMountInstructionsUploadGUI.php +++ b/components/ILIAS/WebDAV/classes/mount_instructions/class.ilWebDAVMountInstructionsUploadGUI.php @@ -34,6 +34,7 @@ class ilWebDAVMountInstructionsUploadGUI { public const ACTION_SAVE_ADD_DOCUMENT_FORM = 'saveAddDocumentForm'; public const ACTION_SAVE_EDIT_DOCUMENT_FORM = 'saveEditDocumentForm'; + private const string P_DOCUMENT_ID = 'document_id'; private UIFactory $ui_factory; private Renderer $ui_renderer; private int $webdav_object_ref_id; @@ -45,7 +46,6 @@ public function __construct( private ilLanguage $lng, private ilRbacSystem $rbacsystem, private ilErrorHandling $error, - private ilLogger $log, private ilToolbarGUI $toolbar, private Services $http, private RefineryFactory $refinery, @@ -121,7 +121,7 @@ protected function getDocumentForm( ilWebDAVMountInstructionsDocument $a_document ): ilWebDAVMountInstructionsDocumentFormGUI { if ($a_document->getId() > 0) { - $this->ctrl->setParameter($this, 'doc_id', $a_document->getId()); + $this->ctrl->setParameter($this, self::P_DOCUMENT_ID, $a_document->getId()); $form_action = $this->ctrl->getFormAction($this, self::ACTION_SAVE_EDIT_DOCUMENT_FORM); $save_command = self::ACTION_SAVE_EDIT_DOCUMENT_FORM; @@ -130,7 +130,7 @@ protected function getDocumentForm( $save_command = self::ACTION_SAVE_ADD_DOCUMENT_FORM; } - $form = new ilWebDAVMountInstructionsDocumentFormGUI( + return new ilWebDAVMountInstructionsDocumentFormGUI( $a_document, $this->mount_instructions_repository, new ilWebDAVMountInstructionsDocumentPurifier(), @@ -142,8 +142,6 @@ protected function getDocumentForm( 'showDocuments', $this->rbacsystem->checkAccess('write', $this->webdav_object_ref_id) ); - - return $form; } protected function showAddDocumentForm(): void @@ -162,7 +160,7 @@ protected function showEditDocumentForm(): void $this->error->raiseError($this->lng->txt('permission_denied'), $this->error->MESSAGE); } - $document_id = $this->http->wrapper()->query()->retrieve('document_id', $this->refinery->kindlyTo()->int()); + $document_id = $this->http->wrapper()->query()->retrieve(self::P_DOCUMENT_ID, $this->refinery->kindlyTo()->int()); $document = $this->mount_instructions_repository->getMountInstructionsDocumentById($document_id); $form = $this->getDocumentForm($document); $this->tpl->setContent($form->getHTML()); @@ -201,7 +199,7 @@ protected function saveEditDocumentForm(): void $this->error->raiseError($this->lng->txt('permission_denied'), $this->error->MESSAGE); } - $document_id = $this->http->wrapper()->query()->retrieve('document_id', $this->refinery->kindlyTo()->int()); + $document_id = $this->http->wrapper()->query()->retrieve(self::P_DOCUMENT_ID, $this->refinery->kindlyTo()->int()); $form = $this->getDocumentForm( $this->mount_instructions_repository->getMountInstructionsDocumentById($document_id) ); @@ -225,7 +223,7 @@ protected function deleteDocument(): void $this->error->raiseError($this->lng->txt('permission_denied'), $this->error->MESSAGE); } - $document_id = $this->http->wrapper()->query()->retrieve('document_id', $this->refinery->kindlyTo()->int()); + $document_id = $this->http->wrapper()->query()->retrieve(self::P_DOCUMENT_ID, $this->refinery->kindlyTo()->int()); $this->mount_instructions_repository->deleteMountInstructionsById($document_id); $this->tpl->setOnScreenMessage('success', $this->lng->txt('deleted_successfully'), true); diff --git a/components/ILIAS/WebDAV/resources/webdav.php b/components/ILIAS/WebDAV/resources/webdav.php index 634927fff86f..0e23ebed5634 100644 --- a/components/ILIAS/WebDAV/resources/webdav.php +++ b/components/ILIAS/WebDAV/resources/webdav.php @@ -19,6 +19,7 @@ declare(strict_types=1); require_once __DIR__ . '/../vendor/composer/vendor/autoload.php'; +require_once("../artifacts/bootstrap_default.php"); $path_info_components = explode('/', (string) $_SERVER['PATH_INFO']); $client_id = $path_info_components[1]; @@ -26,12 +27,10 @@ try { ilAuthFactory::setContext(ilAuthFactory::CONTEXT_HTTP); - $_GET["client_id"] = $client_id; - $context = ilContext::CONTEXT_WEBDAV; - ilContext::init($context); + ilContext::init(ilContext::CONTEXT_WEBDAV); $post_array = $_POST; - ilInitialisation::initILIAS(); + entry_point("ILIAS Legacy Initialisation Adapter"); } catch (InvalidArgumentException) { header("HTTP/1.1 400 Bad Request"); header("X-WebDAV-Status: 400 Bad Request", true); diff --git a/components/ILIAS/WebResource/classes/class.ilObjLinkResourceGUI.php b/components/ILIAS/WebResource/classes/class.ilObjLinkResourceGUI.php index fa665f3cfbfb..e1711ad590cc 100755 --- a/components/ILIAS/WebResource/classes/class.ilObjLinkResourceGUI.php +++ b/components/ILIAS/WebResource/classes/class.ilObjLinkResourceGUI.php @@ -1321,7 +1321,6 @@ protected function showToolbar(string $a_tpl_var): void protected function confirmDeleteLink(): void { $this->checkPermission('write'); - $this->activateTabs('content', 'id_content_view'); $link_ids = []; if ($this->http->wrapper()->query()->has('link_id')) { @@ -1345,6 +1344,7 @@ protected function confirmDeleteLink(): void $this->view(); return; } + $this->activateTabs('content', 'id_content_manage'); $confirm = new ilConfirmationGUI(); $confirm->setFormAction($this->ctrl->getFormAction($this, 'view')); diff --git a/components/ILIAS/WebServices/ECS/classes/class.ilECSParticipantSettings.php b/components/ILIAS/WebServices/ECS/classes/class.ilECSParticipantSettings.php index 3a02fc82b8b0..791198ac94c9 100755 --- a/components/ILIAS/WebServices/ECS/classes/class.ilECSParticipantSettings.php +++ b/components/ILIAS/WebServices/ECS/classes/class.ilECSParticipantSettings.php @@ -114,7 +114,7 @@ private function read(): void public function isImportAllowed(array $a_mids): bool { foreach ($a_mids as $mid) { - if ($this->import[$mid]) { + if (($this->import[$mid] ?? 0) == 1) { return true; } } diff --git a/components/ILIAS/WebServices/ECS/classes/class.ilECSResult.php b/components/ILIAS/WebServices/ECS/classes/class.ilECSResult.php index c0c8d4f88999..c4a56cc47dec 100755 --- a/components/ILIAS/WebServices/ECS/classes/class.ilECSResult.php +++ b/components/ILIAS/WebServices/ECS/classes/class.ilECSResult.php @@ -109,8 +109,9 @@ private function init(string $result_string, int $result_type): void { switch ($result_type) { case self::RESULT_TYPE_JSON: - if ($result_string) { - $this->result = json_decode($result_string, false, 512, JSON_THROW_ON_ERROR); + $payload = trim($result_string); + if ($payload !== '') { + $this->result = json_decode($payload, false, 512, JSON_THROW_ON_ERROR); } else { $this->result = []; } diff --git a/components/ILIAS/WebServices/ECS/classes/class.ilRemoteObjectBase.php b/components/ILIAS/WebServices/ECS/classes/class.ilRemoteObjectBase.php index 7eb0f888b410..943a5c0b08a6 100755 --- a/components/ILIAS/WebServices/ECS/classes/class.ilRemoteObjectBase.php +++ b/components/ILIAS/WebServices/ECS/classes/class.ilRemoteObjectBase.php @@ -380,7 +380,7 @@ public function updateFromECSContent(ilECSSetting $a_server, object $a_ecs_conte $this->setMID($a_owner); // obsolete? $this->setOrganization($organisation); $this->setTitle($a_ecs_content->title); - $this->setDescription($a_ecs_content->abstract); + $this->setDescription($a_ecs_content->abstract ?? ''); $this->setRemoteLink($a_ecs_content->url); $this->logger->info('updateCustomFromECSContent'); diff --git a/components/ILIAS/WebServices/RPC/lib/pom.xml b/components/ILIAS/WebServices/RPC/lib/pom.xml index 65efce6976a3..98192c0aa1b8 100755 --- a/components/ILIAS/WebServices/RPC/lib/pom.xml +++ b/components/ILIAS/WebServices/RPC/lib/pom.xml @@ -5,7 +5,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>de.ilias.ilserver</groupId> <artifactId>ilServer</artifactId> - <version>10.0.4</version> + <version>11.0.2</version> <build> <finalName>ilServer</finalName> <plugins> @@ -79,6 +79,24 @@ </plugin> </plugins> </build> + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.apache.tika</groupId> + <artifactId>tika-bom</artifactId> + <version>3.2.3</version> + <type>pom</type> + <scope>import</scope> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-bom</artifactId> + <version>2.25.3</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> <dependencies> <!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient --> <dependency> @@ -90,31 +108,26 @@ <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> - <version>2.23.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> - <version>2.23.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-jcl --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-jcl</artifactId> - <version>2.23.1</version> </dependency> <!-- required for commons-configuration2 logging --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> - <version>2.23.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-1.2-api --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-1.2-api</artifactId> - <version>2.23.1</version> </dependency> <!-- used for ilServer.ini parsing --> <dependency> @@ -184,37 +197,30 @@ <dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-core</artifactId> - <version>2.9.4</version> </dependency> <dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parser-html-module</artifactId> - <version>2.9.4</version> </dependency> <dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parser-microsoft-module</artifactId> - <version>2.9.4</version> </dependency> <dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parser-miscoffice-module</artifactId> - <version>2.9.4</version> </dependency> <dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parser-pdf-module</artifactId> - <version>2.9.4</version> </dependency> <dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parser-text-module</artifactId> - <version>2.9.4</version> </dependency> <dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parser-xml-module</artifactId> - <version>2.9.4</version> </dependency> <!-- fop pdf generation: all in one jar produces class duplication warnings --> <dependency> diff --git a/components/ILIAS/Wiki/Page/ImportResolver.php b/components/ILIAS/Wiki/Page/ImportResolver.php new file mode 100644 index 000000000000..0d09255e7237 --- /dev/null +++ b/components/ILIAS/Wiki/Page/ImportResolver.php @@ -0,0 +1,48 @@ +<?php + +/** + * This file is part of ILIAS, a powerful learning management system + * published by ILIAS open source e-Learning e.V. + * + * ILIAS is licensed with the GPL-3.0, + * see https://www.gnu.org/licenses/gpl-3.0.en.html + * You should have received a copy of said license along with the + * source code, too. + * + * If this is not the case or you just want to try ILIAS, you'll find + * us at: + * https://www.ilias.de + * https://github.com/ILIAS-eLearning + * + *********************************************************************/ + +declare(strict_types=1); + +namespace ILIAS\Wiki\Page; + +use ILIAS\Wiki\InternalDataService; + +class ImportResolver +{ + public function __construct( + protected InternalDataService $data, + protected PageDBRepository $page_repo + ) { + } + + /** + * Get latest non-trashed wiki page with import id + */ + public function getIdForImportId(string $import_id): int + { + foreach ($this->page_repo->getPageIdsForImportId($import_id) as $wpage_id) { + $wiki_id = \ilWikiPage::lookupWikiId($wpage_id); + $ref_ids = \ilObject::_getAllReferences($wiki_id); // will be 0 if import of lm is in progress (new import) + if (count($ref_ids) === 0 || \ilObject::_hasUntrashedReference($wiki_id)) { + return $wpage_id; + } + } + return 0; + } + +} diff --git a/components/ILIAS/Wiki/Page/PageDBRepository.php b/components/ILIAS/Wiki/Page/PageDBRepository.php index 72c99917f660..706a6fcc4c1e 100755 --- a/components/ILIAS/Wiki/Page/PageDBRepository.php +++ b/components/ILIAS/Wiki/Page/PageDBRepository.php @@ -330,4 +330,31 @@ public function getWikiIdByPageId( return null; } + public function writeImportId(int $id, string $lang, string $import_id): void + { + $this->db->update( + "il_wiki_page", + [ + "import_id" => ["text", $import_id] + ], + [ // where + "id" => ["integer", $id], + "lang" => ["text", $lang], + ] + ); + } + + public function getPageIdsForImportId(string $import_id): \Generator + { + $set = $this->db->queryF( + "SELECT id FROM il_wiki_page " . + " WHERE import_id = %s ORDER BY create_date DESC", + ["text"], + [$import_id] + ); + while ($rec = $this->db->fetchAssoc($set)) { + yield (int) $rec["id"]; + } + } + } diff --git a/components/ILIAS/Wiki/Page/PageManager.php b/components/ILIAS/Wiki/Page/PageManager.php index e57a2afa6d3d..96790d593694 100755 --- a/components/ILIAS/Wiki/Page/PageManager.php +++ b/components/ILIAS/Wiki/Page/PageManager.php @@ -298,4 +298,10 @@ public function belongsToWiki( return $this->page_repo->getWikiIdByPageId($id) === $this->getWikiId(); } + public function writeImportId(int $id, string $lang, string $import_id): void + { + $this->page_repo->writeImportId($id, $lang, $import_id); + } + + } diff --git a/components/ILIAS/Wiki/Page/Service/DomainService.php b/components/ILIAS/Wiki/Page/Service/DomainService.php index 5419f399fe90..7101849c1c90 100755 --- a/components/ILIAS/Wiki/Page/Service/DomainService.php +++ b/components/ILIAS/Wiki/Page/Service/DomainService.php @@ -70,4 +70,12 @@ public function page( ); } + public function importResolver(): ImportResolver + { + return new ImportResolver( + $this->data_service, + $this->repo_service->page() + ); + } + } diff --git a/components/ILIAS/Wiki/Setup/class.ilWikiDBUpdateSteps.php b/components/ILIAS/Wiki/Setup/class.ilWikiDBUpdateSteps.php index 7f56727e8f1f..44cdeaeef133 100755 --- a/components/ILIAS/Wiki/Setup/class.ilWikiDBUpdateSteps.php +++ b/components/ILIAS/Wiki/Setup/class.ilWikiDBUpdateSteps.php @@ -144,4 +144,27 @@ public function step_6(): void } + public function step_7(): void + { + $db = $this->db; + if (!$db->tableColumnExists('il_wiki_page', 'create_date')) { + $this->db->addTableColumn('il_wiki_page', 'create_date', array( + 'type' => 'timestamp', + 'notnull' => false + )); + } + } + + public function step_8(): void + { + $db = $this->db; + if (!$db->tableColumnExists('il_wiki_page', 'import_id')) { + $this->db->addTableColumn('il_wiki_page', 'import_id', array( + 'type' => 'text', + 'notnull' => false, + 'length' => 50 + )); + } + } + } diff --git a/components/ILIAS/Wiki/classes/class.ilWikiDataSet.php b/components/ILIAS/Wiki/classes/class.ilWikiDataSet.php index 75992f1bafd3..c2985f634512 100755 --- a/components/ILIAS/Wiki/classes/class.ilWikiDataSet.php +++ b/components/ILIAS/Wiki/classes/class.ilWikiDataSet.php @@ -27,6 +27,7 @@ */ class ilWikiDataSet extends ilDataSet { + protected \ILIAS\Wiki\InternalRepoService $wiki_repo; protected \ILIAS\Wiki\Navigation\ImportantPageDBRepository $imp_page_repo; protected ?ilObjWiki $current_obj = null; protected ilLogger $wiki_log; @@ -39,6 +40,7 @@ public function __construct() parent::__construct(); $this->wiki_log = ilLoggerFactory::getLogger('wiki'); $this->imp_page_repo = $DIC->wiki()->internal()->repo()->importantPage(); + $this->wiki_repo = $DIC->wiki()->internal()->repo(); } public function getSupportedVersions(): array @@ -178,7 +180,8 @@ protected function getTypes(string $a_entity, string $a_version): array "Rating" => "integer", "TemplateNewPages" => "integer", "TemplateAddToPage" => "integer", - "Lang" => "text" + "Lang" => "text", + "ImportId" => "text" ); } } @@ -201,7 +204,6 @@ protected function getTypes(string $a_entity, string $a_version): array public function readData(string $a_entity, string $a_version, array $a_ids): void { $ilDB = $this->db; - if (!is_array($a_ids)) { $a_ids = array($a_ids); } @@ -304,6 +306,7 @@ public function readData(string $a_entity, string $a_version, array $a_ids): voi $this->data[$k]["TemplateNewPages"] = $rec["new_pages"]; $this->data[$k]["TemplateAddToPage"] = $rec["add_to_page"]; } + $this->data[$k]["ImportId"] = "il_" . IL_INST_ID . "_wpage_" . $v["Id"]; } break; } @@ -409,6 +412,14 @@ public function importRecord( $wpage->create(true); + if (isset($a_rec["ImportId"])) { + $this->wiki_repo->page()->writeImportId( + $wpage->getId(), + ($lang === "") ? "-" : $lang, + (string) $a_rec["ImportId"] + ); + } + if (isset($a_rec["TemplateNewPages"]) || isset($a_rec["TemplateAddToPage"])) { $wtpl = new ilWikiPageTemplate($wiki_id); $wtpl->save($wpage->getId(), (int) $a_rec["TemplateNewPages"], (int) $a_rec["TemplateAddToPage"]); diff --git a/components/ILIAS/Wiki/classes/class.ilWikiExporter.php b/components/ILIAS/Wiki/classes/class.ilWikiExporter.php index f70f3d6e0314..1b8abf73b033 100755 --- a/components/ILIAS/Wiki/classes/class.ilWikiExporter.php +++ b/components/ILIAS/Wiki/classes/class.ilWikiExporter.php @@ -163,6 +163,12 @@ public function getXmlRepresentation( public function getValidSchemaVersions(string $a_entity): array { return array( + "8.0" => array( + "namespace" => "https://www.ilias.de/Modules/Wiki/wiki/8", + "xsd_file" => "ilias_wiki_8.xsd", + "uses_dataset" => true, + "min" => "8.0", + "max" => ""), "5.4.0" => array( "namespace" => "https://www.ilias.de/Modules/Wiki/wiki/5_4", "xsd_file" => "ilias_wiki_5_4.xsd", diff --git a/components/ILIAS/Wiki/classes/class.ilWikiPage.php b/components/ILIAS/Wiki/classes/class.ilWikiPage.php index 1e18899f5dd8..cbb41160a948 100755 --- a/components/ILIAS/Wiki/classes/class.ilWikiPage.php +++ b/components/ILIAS/Wiki/classes/class.ilWikiPage.php @@ -155,6 +155,7 @@ public function create( ", rating" . ", hide_adv_md" . ", lang" . + ", create_date" . " ) VALUES (" . $ilDB->quote($this->getId(), "integer") . "," . $ilDB->quote($this->getTitle(), "text") @@ -163,6 +164,7 @@ public function create( . "," . $ilDB->quote((int) $this->getRating(), "integer") . "," . $ilDB->quote((int) $this->isAdvancedMetadataHidden(), "integer") . "," . $ilDB->quote($this->getLanguage(), "text") + . "," . $ilDB->now() . ")"; $this->wiki_log->debug($query); $ilDB->manipulate($query); @@ -356,8 +358,10 @@ public static function deleteAllPagesOfWiki(int $a_wiki_id): void $set = $ilDB->query($query); while ($rec = $ilDB->fetchAssoc($set)) { - $wiki_page = new ilWikiPage($rec["id"], 0, $rec["lang"]); - $wiki_page->delete(); + if (ilWikiPage::_exists("wpg", $rec["id"], 0, $rec["lang"])) { + $wiki_page = new ilWikiPage($rec["id"], 0, $rec["lang"]); + $wiki_page->delete(); + } } } diff --git a/components/ILIAS/Wiki/classes/class.ilWikiPagesTableGUI.php b/components/ILIAS/Wiki/classes/class.ilWikiPagesTableGUI.php index f19f0a10a777..c07c260ccd06 100755 --- a/components/ILIAS/Wiki/classes/class.ilWikiPagesTableGUI.php +++ b/components/ILIAS/Wiki/classes/class.ilWikiPagesTableGUI.php @@ -277,7 +277,10 @@ protected function fillRow(array $a_set): void ); if ($this->ot->getContentTranslationActivated() && $this->pg_list_mode !== IL_WIKI_WHAT_LINKS_HERE) { $this->tpl->setCurrentBlock("lang"); - $this->tpl->setVariable("LANG", implode(", ", $this->pm->getLanguages($a_set["id"]))); + $langs = array_filter($this->pm->getLanguages($a_set["id"]), function ($l) { + return in_array($l, array_map(fn($l) => $l->getLanguageCode(), $this->ot->getLanguages())); + }); + $this->tpl->setVariable("LANG", implode(", ", $langs)); $this->tpl->parseCurrentBlock(); } } diff --git a/components/ILIAS/WorkspaceFolder/classes/class.ilObjWorkspaceFolderGUI.php b/components/ILIAS/WorkspaceFolder/classes/class.ilObjWorkspaceFolderGUI.php index fc9640b8b595..7eecd90df081 100755 --- a/components/ILIAS/WorkspaceFolder/classes/class.ilObjWorkspaceFolderGUI.php +++ b/components/ILIAS/WorkspaceFolder/classes/class.ilObjWorkspaceFolderGUI.php @@ -267,6 +267,13 @@ public function update(): void $this->tabs_gui->activateSubTab("settings"); } + public function clear(): void + { + $this->tpl->setOnScreenMessage('success', $this->lng->txt("msg_clear_clipboard"), true); + $this->session_repo->clearClipboard(); + $this->ctrl->redirect($this); + } + public function cut(): void { $item_ids = $this->std_request->getItemIds(); diff --git a/components/ILIAS/YUI/ROADMAP.md b/components/ILIAS/YUI/ROADMAP.md deleted file mode 100755 index 2574be8c0e79..000000000000 --- a/components/ILIAS/YUI/ROADMAP.md +++ /dev/null @@ -1,62 +0,0 @@ -# ROADMAP - -This service is deprecated. - -## Usages - -Event (util.Event) -- Form -> HierarchyForm, flashAddParam -- Scorm2004 (not used?) -- TestQuestionPool - - -Dom -- DataCollection -- GlobalTemplate -- PropertyForm -- ... - -DragDrop -- Survey -- Calendar -- COPage -- HierarchyForm - -DomEvent -- Session -- Test -- Calendar - - -Panel -- Test -- TermsOfService - - -Connection -- Cloud -- DataCollection -- LearningModule -- Accordion -- Block -- COPage -- Help -- Link -- MainMenu -- MediaObjects -- Table -- AdvancedSelectionList -- Explorer -- Explorer2 - -ConnectionWithAnimation -- Test -- Form - -Overlay -- Test -- TermsOfService -- AdvancedSelectionList - -Cookie -- Authentication (SessionReminder) diff --git a/components/ILIAS/YUI/YUI.php b/components/ILIAS/YUI/YUI.php deleted file mode 100644 index 7503db9e4fdc..000000000000 --- a/components/ILIAS/YUI/YUI.php +++ /dev/null @@ -1,67 +0,0 @@ -<?php - -/** - * This file is part of ILIAS, a powerful learning management system - * published by ILIAS open source e-Learning e.V. - * - * ILIAS is licensed with the GPL-3.0, - * see https://www.gnu.org/licenses/gpl-3.0.en.html - * You should have received a copy of said license along with the - * source code, too. - * - * If this is not the case or you just want to try ILIAS, you'll find - * us at: - * https://www.ilias.de - * https://github.com/ILIAS-eLearning - * - *********************************************************************/ - -declare(strict_types=1); - -namespace ILIAS; - -class YUI implements Component\Component -{ - public function init( - array | \ArrayAccess &$define, - array | \ArrayAccess &$implement, - array | \ArrayAccess &$use, - array | \ArrayAccess &$contribute, - array | \ArrayAccess &$seek, - array | \ArrayAccess &$provide, - array | \ArrayAccess &$pull, - array | \ArrayAccess &$internal, - ): void { - /* This library was missing after discussing dependencies for ILIAS 10 - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/yahoo-dom-event/yahoo-dom-event.js"); - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/connection/connection-min.js"); - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/dragdrop/dragdrop-min.js"); - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/element/element-min.js"); - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/container/container-min.js"); - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/utilities/utilities.js"); - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/resize/resize-min.js"); - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/container/container_core-min.js"); - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/menu/menu-min.js"); - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/button/button-min.js"); - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/cookie/cookie.js"); - - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/container/assets/skins/sam/container.css"); - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/button/assets/skins/sam/button.css"); - $contribute[Component\Resource\PublicAsset::class] = static fn() => - new Component\Resource\NodeModule("yui2/build/menu/assets/skins/sam/menu.css"); - */ - } -} diff --git a/components/ILIAS/YUI/classes/class.ilYuiUtil.php b/components/ILIAS/YUI/classes/class.ilYuiUtil.php deleted file mode 100755 index 07f2c98701b3..000000000000 --- a/components/ILIAS/YUI/classes/class.ilYuiUtil.php +++ /dev/null @@ -1,198 +0,0 @@ -<?php - -/** - * This file is part of ILIAS, a powerful learning management system - * published by ILIAS open source e-Learning e.V. - * - * ILIAS is licensed with the GPL-3.0, - * see https://www.gnu.org/licenses/gpl-3.0.en.html - * You should have received a copy of said license along with the - * source code, too. - * - * If this is not the case or you just want to try ILIAS, you'll find - * us at: - * https://www.ilias.de - * https://github.com/ILIAS-eLearning - * - *********************************************************************/ - -/** - * Yahoo YUI Library Utility functions - * @author Alexander Killing <killing@leifos.de> - */ -class ilYuiUtil -{ - protected const YUI_BASE = "./node_modules/yui2/build"; - - private static function ensureGlobalTemplate( - ?ilGlobalTemplateInterface $main_tpl = null - ): ilGlobalTemplateInterface { - global $DIC; - return $main_tpl === null ? $DIC->ui()->mainTemplate() : $main_tpl; - } - - /** - * Init YUI Connection module - */ - public static function initConnection( - ?ilGlobalTemplateInterface $a_main_tpl = null - ): void { - $tpl = self::ensureGlobalTemplate($a_main_tpl); - $tpl->addJavaScript("assets/js/yahoo-dom-event.js"); - $tpl->addJavaScript("assets/js/connection-min.js"); - } - - - /** - * Init YUI Event - */ - public static function initEvent( - ?ilGlobalTemplateInterface $a_main_tpl = null - ): void { - $tpl = self::ensureGlobalTemplate($a_main_tpl); - $tpl->addJavaScript("assets/js/yahoo-dom-event.js"); - } - - - /** - * Init YUI Dom - */ - public static function initDom( - ?ilGlobalTemplateInterface $a_main_tpl = null - ): void { - $tpl = self::ensureGlobalTemplate($a_main_tpl); - $tpl->addJavaScript("assets/js/yahoo-dom-event.js"); - } - - - /** - * Init YUI Drag and Drop - * used in Modules/Survey, Services/Calendar, Services/COPage, Services/Form (Jan 2022) - * @deprecated - */ - public static function initDragDrop( - ?ilGlobalTemplateInterface $a_main_tpl = null - ): void { - $tpl = self::ensureGlobalTemplate($a_main_tpl); - $tpl->addJavaScript("assets/js/yahoo-dom-event.js"); - $tpl->addJavaScript("assets/js/dragdrop-min.js"); - $tpl->addJavaScript("assets/js/element-min.js"); - } - - - /** - * Init YUI DomEvent - * used in Services/Calendar, Modules/Session, Modules/Test (Jan 2022) - * @deprecated - */ - public static function initDomEvent( - ?ilGlobalTemplateInterface $a_main_tpl = null - ): void { - $tpl = self::ensureGlobalTemplate($a_main_tpl); - $tpl->addJavaScript("assets/js/yahoo-dom-event.js"); - } - - /** - * Init yui panel - * used in Modules/Test, Services/TermsOfService (Jan 2022) - * @deprecated - */ - public static function initPanel( - bool $a_resize = false, - ?ilGlobalTemplateInterface $a_main_tpl = null - ): void { - $tpl = self::ensureGlobalTemplate($a_main_tpl); - $tpl->addJavaScript("assets/js/yahoo-dom-event.js"); - $tpl->addJavaScript("assets/js/container-min.js"); - self::addContainerCss($tpl); - $tpl->addCss("./components/ILIAS/Calendar/css/panel_min.css"); - - if ($a_resize) { - $tpl->addCss(self::YUI_BASE . "/resize/assets/skins/sam/resize.css"); - $tpl->addJavaScript("assets/js/utilities.js"); - $tpl->addJavaScript("assets/js/resize-min.js"); - } - } - - - /** - * Init YUI connection and animation module - * used in Modules/Test (Jan 2022) - * @deprecated - */ - public static function initConnectionWithAnimation(): void - { - $tpl = self::ensureGlobalTemplate(); - $tpl->addJavaScript("assets/js/yahoo-dom-event.js"); - $tpl->addJavaScript("assets/js/animation-min.js"); - $tpl->addJavaScript("assets/js/connection-min.js"); - } - - - - /** - * Init YUI Overlay module - * used in Modules/Test, Services/TermsOfService, Services/Tracking, Services/UIComponent - * @deprecated - */ - public static function initOverlay( - ?ilGlobalTemplateInterface $a_main_tpl = null - ): void { - $tpl = self::ensureGlobalTemplate($a_main_tpl); - $tpl->addJavaScript("assets/js/yahoo-dom-event.js"); - $tpl->addJavaScript("assets/js/container_core-min.js"); - self::addContainerCss($tpl); - } - - - /** - * init button control - * In the moment used for calendar color picker button - */ - public static function initButtonControl(): void - { - $tpl = self::ensureGlobalTemplate(); - $tpl->addJavaScript("assets/js/yahoo-dom-event.js"); - $tpl->addJavaScript("assets/js/element-min.js"); - - $tpl->addJavaScript("assets/js/container_core-min.js"); - $tpl->addJavaScript("assets/js/menu-min.js"); - - $tpl->addJavaScript("assets/js/button-min.js"); - - $tpl->addCss("assets/css/button.css"); - $tpl->addCss("assets/css/menu.css"); - } - - /** - * used in Services/Authentication (Session Reminder) Jan 2022 - * @deprecated - */ - public static function initCookie(): void - { - $tpl = self::ensureGlobalTemplate(); - $tpl->addJavaScript("assets/js/yahoo-min.js", 1); - $tpl->addJavaScript("assets/js/cookie.js", 1); - } - - - /** - * Get local path of a YUI js file - */ - public static function getLocalPath(string $a_name = ""): string - { - return self::YUI_BASE . "/" . $a_name; - } - - - /** - * Add container css - */ - protected static function addContainerCss( - ?ilGlobalTemplateInterface $a_main_tpl = null - ): void { - $tpl = self::ensureGlobalTemplate($a_main_tpl); - $tpl->addCss("assets/css/container.css"); - - } -} diff --git a/components/ILIAS/YUI/maintenance.json b/components/ILIAS/YUI/maintenance.json deleted file mode 100755 index cecb2960d30b..000000000000 --- a/components/ILIAS/YUI/maintenance.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "maintenance_model": "Classic", - "first_maintainer": "", - "second_maintainer": "", - "implicit_maintainers": [ - "" - ], - "coordinator": [ - "" - ], - "tester": "", - "testcase_writer": "", - "path": "Services/YUI", - "belong_to_component": "None", - "used_in_components": [] -} \ No newline at end of file diff --git a/components/ILIAS/YUI/templates/default/DragDropList.css b/components/ILIAS/YUI/templates/default/DragDropList.css deleted file mode 100755 index 0d54e4f47a59..000000000000 --- a/components/ILIAS/YUI/templates/default/DragDropList.css +++ /dev/null @@ -1,52 +0,0 @@ -div.workarea { padding:10px; float:left } - -div.workarea h3 { - font-size: 100%; -} - -ul.draglist { - position: relative; - width: 200px; - height:240px; - background: #f7f7f7; - border: 1px solid gray; - list-style: none; - margin:0; - padding:0; - overflow: auto; -} - -ul.draglist li { - margin: 1px; - cursor: move; -} - -ul.draglist_alt { - position: relative; - width: 200px; - list-style: none; - margin:0; - padding:0; - /* - The bottom padding provides the cushion that makes the empty - list targetable. Alternatively, we could leave the padding - off by default, adding it when we detect that the list is empty. - */ - padding-bottom:20px; -} - -ul.draglist_alt li { - margin: 1px; - cursor: move; -} - - -li.list1 { - background-color: #D1E6EC; - border:1px solid #7EA6B2; -} - -li.list2 { - background-color: #D1E6EC; - border:1px solid #7EA6B2; -} diff --git a/components/ILIAS/YUI/templates/default/tpl.dragdroplist.html b/components/ILIAS/YUI/templates/default/tpl.dragdroplist.html deleted file mode 100755 index a00b610e70cd..000000000000 --- a/components/ILIAS/YUI/templates/default/tpl.dragdroplist.html +++ /dev/null @@ -1,157 +0,0 @@ -<div class="workarea"> - <h3>{TITLE_LIST_1}</h3> - <ul id="{LIST_1}" class="draglist"> -<!-- BEGIN source_element --> - <li class="list1" id="{ELEMENT_ID}">{ELEMENT_NAME}</li> -<!-- END source_element --> - </ul> -</div> - -<div class="workarea"> - <h3>{TITLE_LIST_2}</h3> - <ul id="{LIST_2}" class="draglist"> -<!-- BEGIN dest_element --> - <li class="list2" id="{ELEMENT_ID}">{ELEMENT_NAME}</li> -<!-- END dest_element --> - </ul> -</div> - -<script type="text/javascript"> - -(function() { - -var Dom = YAHOO.util.Dom; -var Event = YAHOO.util.Event; -var DDM = YAHOO.util.DragDropMgr; - -DDApp = { - init: function() { - new YAHOO.util.DDTarget("{LIST_1}"); - new YAHOO.util.DDTarget("{LIST_2}"); - -<!-- BEGIN element --> - new DDList("{ELEMENT_ID}"); -<!-- END element --> - } -}; - -DDList = function(id, sGroup, config) { - - DDList.superclass.constructor.call(this, id, sGroup, config); - - var el = this.getDragEl(); - Dom.setStyle(el, "opacity", 0.67); // The proxy is slightly transparent - - this.goingUp = false; - this.lastY = 0; -}; - -YAHOO.extend(DDList, YAHOO.util.DDProxy, { - - startDrag: function(x, y) { - // make the proxy look like the source element - var dragEl = this.getDragEl(); - var clickEl = this.getEl(); - Dom.setStyle(clickEl, "visibility", "hidden"); - - dragEl.innerHTML = clickEl.innerHTML; - - Dom.setStyle(dragEl, "color", Dom.getStyle(clickEl, "color")); - Dom.setStyle(dragEl, "backgroundColor", Dom.getStyle(clickEl, "backgroundColor")); - Dom.setStyle(dragEl, "border", "2px solid gray"); - }, - - endDrag: function(e) { - - var srcEl = this.getEl(); - var proxy = this.getDragEl(); - - // Show the proxy element and animate it to the src element's location - Dom.setStyle(proxy, "visibility", ""); - var a = new YAHOO.util.Motion( - proxy, { - points: { - to: Dom.getXY(srcEl) - } - }, - 0.2, - YAHOO.util.Easing.easeOut - ) - var proxyid = proxy.id; - var thisid = this.id; - - // Hide the proxy and show the source element when finished with the animation - a.onComplete.subscribe(function() { - Dom.setStyle(proxyid, "visibility", "hidden"); - Dom.setStyle(thisid, "visibility", ""); - }); - a.animate(); - }, - - onDragDrop: function(e, id) { - - // If there is one drop interaction, the li was dropped either on the list, - // or it was dropped on the current location of the source element. - if (DDM.interactionInfo.drop.length === 1) { - - // The position of the cursor at the time of the drop (YAHOO.util.Point) - var pt = DDM.interactionInfo.point; - - // The region occupied by the source element at the time of the drop - var region = DDM.interactionInfo.sourceRegion; - - // Check to see if we are over the source element's location. We will - // append to the bottom of the list once we are sure it was a drop in - // the negative space (the area of the list without any list items) - if (!region.intersect(pt)) { - var destEl = Dom.get(id); - var destDD = DDM.getDDById(id); - destEl.appendChild(this.getEl()); - destDD.isEmpty = false; - DDM.refreshCache(); - } - - } - }, - - onDrag: function(e) { - - // Keep track of the direction of the drag for use during onDragOver - var y = Event.getPageY(e); - - if (y < this.lastY) { - this.goingUp = true; - } else if (y > this.lastY) { - this.goingUp = false; - } - - this.lastY = y; - }, - - onDragOver: function(e, id) { - - var srcEl = this.getEl(); - var destEl = Dom.get(id); - - // We are only concerned with list items, we ignore the dragover - // notifications for the list. - if (destEl.nodeName.toLowerCase() == "li") { - var orig_p = srcEl.parentNode; - var p = destEl.parentNode; - - if (this.goingUp) { - p.insertBefore(srcEl, destEl); // insert above - } else { - p.insertBefore(srcEl, destEl.nextSibling); // insert below - } - - DDM.refreshCache(); - } - } -}); - -Event.onDOMReady(DDApp.init, DDApp, true); - -})(); - -</script> \ No newline at end of file diff --git a/components/ILIAS/YUI/templates/default/tpl.simpledialog.css b/components/ILIAS/YUI/templates/default/tpl.simpledialog.css deleted file mode 100755 index 76ab92b019cc..000000000000 --- a/components/ILIAS/YUI/templates/default/tpl.simpledialog.css +++ /dev/null @@ -1,48 +0,0 @@ -.yui-simple-dialog .bd span.blckicon { - background: none; -} - -.yui-simple-dialog .bd span.alrticon { - background: none; -} - -.yui-simple-dialog .bd span.hlpicon { - background: none; -} - -.yui-simple-dialog .bd span.infoicon { - background: none; -} - -.yui-simple-dialog .bd span.warnicon { - background: none; -} - -.yui-simple-dialog .bd span.tipicon { - background: none; -} - -.yui-panel .container-close { - position:absolute; - top:5px; - right:4px; - z-index:6; - height:16px; - width:16px; - margin:0px; - padding:0px; - cursor:pointer; - visibility:inherit; -} - -.yui-panel .hd { - background-color:#3d77cb; - color:black; - font-size:100%; - line-height:100%; - border:1px solid #FFF; - border-bottom:1px solid #000; - font-weight:bold; - overflow:hidden; - padding:4px; -} diff --git a/components/ILIAS/soap/classes/class.ilSoapObjectAdministration.php b/components/ILIAS/soap/classes/class.ilSoapObjectAdministration.php index dc9ad668dca5..6ca6cb56e500 100755 --- a/components/ILIAS/soap/classes/class.ilSoapObjectAdministration.php +++ b/components/ILIAS/soap/classes/class.ilSoapObjectAdministration.php @@ -1,4 +1,5 @@ <?php + /** * This file is part of ILIAS, a powerful learning management system * published by ILIAS open source e-Learning e.V. @@ -459,7 +460,8 @@ public function getXMLTree(string $sid, int $ref_id, ?array $types = null, ?int !$objDefinition->isSystemObject($node['type']) && ($all || !in_array($node['type'], $filter, true)) && $access->checkAccess("read", "", (int) $node['ref_id']) && - ($tmp = ilObjectFactory::getInstanceByRefId($node['ref_id'], false))) { + ($tmp = ilObjectFactory::getInstanceByRefId($node['ref_id'], false)) + ) { $nodes[] = $tmp; } } @@ -582,8 +584,10 @@ public function addObject(string $sid, int $a_target_id, string $a_xml) $newObj = new $class_constr(); if (isset($object_data['owner']) && $object_data['owner'] != '') { if ((int) $object_data['owner']) { - if (ilObject::_exists((int) $object_data['owner']) && - $ilObjDataCache->lookupType((int) $object_data['owner']) === 'usr') { + if ( + ilObject::_exists((int) $object_data['owner']) && + $ilObjDataCache->lookupType((int) $object_data['owner']) === 'usr' + ) { $newObj->setOwner((int) $object_data['owner']); } } else { @@ -599,12 +603,13 @@ public function addObject(string $sid, int $a_target_id, string $a_xml) $newObj->setImportId($object_data['import_id']); } - if ($objDefinition->supportsOfflineHandling($newObj->getType())) { - $newObj->setOfflineStatus((bool) $object_data['offline']); - } $newObj->setTitle($object_data['title']); $newObj->setDescription($object_data['description']); $newObj->create(); // true for upload + if ($objDefinition->supportsOfflineHandling($newObj->getType()) && isset($object_data['offline'])) { + $newObj->setOfflineStatus((bool) $object_data['offline']); + $newObj->update(); + } $newObj->createReference(); $newObj->putInTree($a_target_id); $newObj->setPermissions($a_target_id); @@ -675,9 +680,11 @@ public function addReference(string $sid, int $a_source_id, int $a_target_id) ); } - if (!$objDefinition->allowLink($source_obj->getType()) and + if ( + !$objDefinition->allowLink($source_obj->getType()) and $source_obj->getType() !== 'cat' and - $source_obj->getType() !== 'crs') { + $source_obj->getType() !== 'crs' + ) { return $this->raiseError( 'Linking of object type: ' . $source_obj->getType() . ' is not allowed', 'Client' @@ -1274,11 +1281,13 @@ private function validateReferences(string $a_action, array $a_object_data, int return true; } if ($a_action === 'create') { - if (count($a_object_data['references']) > 1 && in_array( - $a_object_data['type'], - ['cat', 'crs', 'grp', 'fold'], - true - )) { + if ( + count($a_object_data['references']) > 1 && in_array( + $a_object_data['type'], + ['cat', 'crs', 'grp', 'fold'], + true + ) + ) { return $this->raiseError( "Cannot create references for type " . $a_object_data['type'], 'Client' diff --git a/components/ILIAS/soap/classes/class.ilSoapUserAdministration.php b/components/ILIAS/soap/classes/class.ilSoapUserAdministration.php index 333abc4fce77..846b6bc241ae 100755 --- a/components/ILIAS/soap/classes/class.ilSoapUserAdministration.php +++ b/components/ILIAS/soap/classes/class.ilSoapUserAdministration.php @@ -1,4 +1,5 @@ <?php + /** * This file is part of ILIAS, a powerful learning management system * published by ILIAS open source e-Learning e.V. @@ -21,6 +22,7 @@ * @version $Id$ * @package ilias */ + class ilSoapUserAdministration extends ilSoapAdministration { public const USER_FOLDER_ID = 7; @@ -152,20 +154,22 @@ public function importUsers(string $sid, int $folder_id, string $usr_xml, int $c $ilUser = $DIC['ilUser']; $ilLog = $DIC['ilLog']; - // this takes time but is nescessary - $error = false; - // validate to prevent wrong XMLs - @domxml_open_mem($usr_xml, DOMXML_LOAD_PARSING, $error); - if ($error) { - $msg = array(); - if (is_array($error)) { - foreach ($error as $err) { - $msg [] = "(" . $err["line"] . "," . $err["col"] . "): " . $err["errormessage"]; - } - } else { - $msg[] = $error; + $usr_xml = ltrim($usr_xml); // Remove leading whitespace (including BOM if needed) + + $doc = new DOMDocument(); + libxml_use_internal_errors(true); // Capture parsing errors + + $is_loadable = $doc->loadXML($usr_xml); + $errors = libxml_get_errors(); + libxml_clear_errors(); + + if (!$is_loadable) { + $msg = []; + foreach ($errors as $err) { + $msg[] = "(" . $err->line . "," . $err->column . "): " . trim($err->message); } + libxml_clear_errors(); $msg = implode("\n", $msg); return $this->raiseError($msg, "Client"); } diff --git a/composer.json b/composer.json index 443716a32782..9be3c56504b3 100755 --- a/composer.json +++ b/composer.json @@ -66,19 +66,20 @@ "phpoffice/phpspreadsheet": "^3.5", "pimple/pimple" : "^3.0", "ramsey/uuid": "^4.7", - "sabre/dav": "4.6.0", + "sabre/dav": "^4.7", "seld/jsonlint": "^1.11", "simplesamlphp/simplesamlphp": "^2.3.7", "symfony/console" : "^6.4", "psr/http-message": "^2.0", - "jumbojett/openid-connect-php": "dev-master#bc719cc9930990a4a9916cc127b839b4ed1c89ad" + "jumbojett/openid-connect-php": "dev-master#bc719cc9930990a4a9916cc127b839b4ed1c89ad", + "phpunit/phpunit": "^11.5", + "phiki/phiki": "^2.0" }, "require-dev": { "captainhook/captainhook": "^5.24", "friendsofphp/php-cs-fixer": "^3.65", "mikey179/vfsstream": "^1.6", - "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^11.5" + "phpstan/phpstan": "^2.0" }, "autoload": { "psr-4" : { diff --git a/composer.lock b/composer.lock index 06009e57be28..afc8ebd55dc1 100644 --- a/composer.lock +++ b/composer.lock @@ -4,29 +4,29 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "60882785b9edd9338f71a4b759c9eab5", + "content-hash": "60d21ae6286d7188f17bdf7c77530e91", "packages": [ { "name": "brick/math", - "version": "0.13.1", + "version": "0.14.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04" + "reference": "f05858549e5f9d7bb45875a75583240a38a281d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04", - "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04", + "url": "https://api.github.com/repos/brick/math/zipball/f05858549e5f9d7bb45875a75583240a38a281d0", + "reference": "f05858549e5f9d7bb45875a75583240a38a281d0", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^8.2" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "6.8.8" + "phpstan/phpstan": "2.1.22", + "phpunit/phpunit": "^11.5" }, "type": "library", "autoload": { @@ -56,7 +56,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.13.1" + "source": "https://github.com/brick/math/tree/0.14.1" }, "funding": [ { @@ -64,7 +64,7 @@ "type": "github" } ], - "time": "2025-03-29T13:50:30+00:00" + "time": "2025-11-24T14:40:29+00:00" }, { "name": "celtic/lti", @@ -329,20 +329,20 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.18.0", + "version": "v4.19.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b" + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/b287d2a16aceffbf6e0295559b39662612b77fcf", + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -384,22 +384,22 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.19.0" }, - "time": "2024-11-01T03:51:45+00:00" + "time": "2025-10-17T16:34:55+00:00" }, { "name": "filp/whoops", - "version": "2.18.3", + "version": "2.18.4", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "59a123a3d459c5a23055802237cb317f609867e5" + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/59a123a3d459c5a23055802237cb317f609867e5", - "reference": "59a123a3d459c5a23055802237cb317f609867e5", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", "shasum": "" }, "require": { @@ -449,7 +449,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.18.3" + "source": "https://github.com/filp/whoops/tree/2.18.4" }, "funding": [ { @@ -457,7 +457,7 @@ "type": "github" } ], - "time": "2025-06-16T00:02:10+00:00" + "time": "2025-08-08T12:00:00+00:00" }, { "name": "firebase/php-jwt", @@ -922,16 +922,16 @@ }, { "name": "james-heinrich/getid3", - "version": "v1.9.23", + "version": "v1.9.24", "source": { "type": "git", "url": "https://github.com/JamesHeinrich/getID3.git", - "reference": "06c7482532ff2b3f9111b011d880ca6699c8542b" + "reference": "1e11b9b6eb468b522fe604a42a9fdc8ee759bf8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/06c7482532ff2b3f9111b011d880ca6699c8542b", - "reference": "06c7482532ff2b3f9111b011d880ca6699c8542b", + "url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/1e11b9b6eb468b522fe604a42a9fdc8ee759bf8a", + "reference": "1e11b9b6eb468b522fe604a42a9fdc8ee759bf8a", "shasum": "" }, "require": { @@ -983,9 +983,9 @@ ], "support": { "issues": "https://github.com/JamesHeinrich/getID3/issues", - "source": "https://github.com/JamesHeinrich/getID3/tree/v1.9.23" + "source": "https://github.com/JamesHeinrich/getID3/tree/v1.9.24" }, - "time": "2023-10-19T13:18:49+00:00" + "time": "2025-10-09T17:48:17+00:00" }, { "name": "jumbojett/openid-connect-php", @@ -1304,16 +1304,16 @@ }, { "name": "league/flysystem-local", - "version": "3.30.0", + "version": "3.30.2", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10" + "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/6691915f77c7fb69adfb87dcd550052dc184ee10", - "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ab4f9d0d672f601b102936aa728801dd1a11968d", + "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d", "shasum": "" }, "require": { @@ -1347,9 +1347,9 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.2" }, - "time": "2025-05-21T10:34:19+00:00" + "time": "2025-11-10T11:23:37+00:00" }, { "name": "league/mime-type-detection", @@ -1409,22 +1409,22 @@ }, { "name": "maennchen/zipstream-php", - "version": "3.1.2", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/maennchen/ZipStream-PHP.git", - "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f" + "reference": "9712d8fa4cdf9240380b01eb4be55ad8dcf71416" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/aeadcf5c412332eb426c0f9b4485f6accba2a99f", - "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/9712d8fa4cdf9240380b01eb4be55ad8dcf71416", + "reference": "9712d8fa4cdf9240380b01eb4be55ad8dcf71416", "shasum": "" }, "require": { "ext-mbstring": "*", "ext-zlib": "*", - "php-64bit": "^8.2" + "php-64bit": "^8.3" }, "require-dev": { "brianium/paratest": "^7.7", @@ -1433,7 +1433,7 @@ "guzzlehttp/guzzle": "^7.5", "mikey179/vfsstream": "^1.6", "php-coveralls/php-coveralls": "^2.5", - "phpunit/phpunit": "^11.0", + "phpunit/phpunit": "^12.0", "vimeo/psalm": "^6.0" }, "suggest": { @@ -1475,7 +1475,7 @@ ], "support": { "issues": "https://github.com/maennchen/ZipStream-PHP/issues", - "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.2" + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.2.0" }, "funding": [ { @@ -1483,7 +1483,7 @@ "type": "github" } ], - "time": "2025-01-27T12:07:53+00:00" + "time": "2025-07-17T11:15:13+00:00" }, { "name": "markbaker/complex", @@ -1748,27 +1748,87 @@ }, "time": "2025-06-28T18:28:20+00:00" }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, { "name": "nette/schema", - "version": "v1.3.2", + "version": "v1.3.3", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d" + "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d", + "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004", + "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004", "shasum": "" }, "require": { "nette/utils": "^4.0", - "php": "8.1 - 8.4" + "php": "8.1 - 8.5" }, "require-dev": { "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^1.0", + "phpstan/phpstan-nette": "^2.0@stable", "tracy/tracy": "^2.8" }, "type": "library", @@ -1778,6 +1838,9 @@ } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -1806,35 +1869,35 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.2" + "source": "https://github.com/nette/schema/tree/v1.3.3" }, - "time": "2024-10-06T23:10:23+00:00" + "time": "2025-10-30T22:57:59+00:00" }, { "name": "nette/utils", - "version": "v4.0.7", + "version": "v4.0.9", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2" + "reference": "505a30ad386daa5211f08a318e47015b501cad30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/e67c4061eb40b9c113b218214e42cb5a0dda28f2", - "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2", + "url": "https://api.github.com/repos/nette/utils/zipball/505a30ad386daa5211f08a318e47015b501cad30", + "reference": "505a30ad386daa5211f08a318e47015b501cad30", "shasum": "" }, "require": { - "php": "8.0 - 8.4" + "php": "8.0 - 8.5" }, "conflict": { "nette/finder": "<3", "nette/schema": "<1.2.2" }, "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", + "jetbrains/phpstorm-attributes": "^1.2", "nette/tester": "^2.5", - "phpstan/phpstan": "^1.0", + "phpstan/phpstan-nette": "^2.0@stable", "tracy/tracy": "^2.9" }, "suggest": { @@ -1852,6 +1915,9 @@ } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -1892,9 +1958,67 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.7" + "source": "https://github.com/nette/utils/tree/v4.0.9" + }, + "time": "2025-10-31T00:45:47+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.6.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "3a454ca033b9e06b63282ce19562e892747449bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", + "reference": "3a454ca033b9e06b63282ce19562e892747449bb", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } }, - "time": "2025-06-03T04:55:08+00:00" + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" + }, + "time": "2025-10-21T19:32:17+00:00" }, { "name": "nyholm/psr7", @@ -2094,161 +2218,350 @@ "time": "2020-10-15T08:29:30+00:00" }, { - "name": "phpmailer/phpmailer", - "version": "v6.10.0", + "name": "phar-io/manifest", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "bf74d75a1fde6beaa34a0ddae2ec5fce0f72a144" + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/bf74d75a1fde6beaa34a0ddae2ec5fce0f72a144", - "reference": "bf74d75a1fde6beaa34a0ddae2ec5fce0f72a144", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-filter": "*", - "ext-hash": "*", - "php": ">=5.5.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^1.0", - "doctrine/annotations": "^1.2.6 || ^1.13.3", - "php-parallel-lint/php-console-highlighter": "^1.0.0", - "php-parallel-lint/php-parallel-lint": "^1.3.2", - "phpcompatibility/php-compatibility": "^9.3.5", - "roave/security-advisories": "dev-latest", - "squizlabs/php_codesniffer": "^3.7.2", - "yoast/phpunit-polyfills": "^1.0.4" - }, - "suggest": { - "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication", - "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", - "ext-openssl": "Needed for secure SMTP sending and DKIM signing", - "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", - "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", - "league/oauth2-google": "Needed for Google XOAUTH2 authentication", - "psr/log": "For optional PSR-3 debug logging", - "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", - "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", - "autoload": { - "psr-4": { - "PHPMailer\\PHPMailer\\": "src/" + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1-only" + "BSD-3-Clause" ], "authors": [ { - "name": "Marcus Bointon", - "email": "phpmailer@synchromedia.co.uk" - }, - { - "name": "Jim Jagielski", - "email": "jimjag@gmail.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "Andy Prevost", - "email": "codeworxtech@users.sourceforge.net" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "name": "Brent R. Matzelle" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { - "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.10.0" + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, "funding": [ { - "url": "https://github.com/Synchro", + "url": "https://github.com/theseer", "type": "github" } ], - "time": "2025-04-24T15:19:31+00:00" + "time": "2024-03-03T12:33:53+00:00" }, { - "name": "phpoffice/phpspreadsheet", - "version": "3.9.2", + "name": "phar-io/version", + "version": "3.2.1", "source": { "type": "git", - "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "3b07468e1fcc2501d85e60501977f8f7f53cfb4a" + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/3b07468e1fcc2501d85e60501977f8f7f53cfb4a", - "reference": "3b07468e1fcc2501d85e60501977f8f7f53cfb4a", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { - "composer/pcre": "^1 || ^2 || ^3", - "ext-ctype": "*", - "ext-dom": "*", - "ext-fileinfo": "*", - "ext-gd": "*", - "ext-iconv": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "ext-xml": "*", - "ext-xmlreader": "*", - "ext-xmlwriter": "*", - "ext-zip": "*", - "ext-zlib": "*", - "maennchen/zipstream-php": "^2.1 || ^3.0", - "markbaker/complex": "^3.0", - "markbaker/matrix": "^3.0", - "php": "^8.1", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "dev-main", - "dompdf/dompdf": "^2.0 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.2", - "mitoteam/jpgraph": "^10.3", - "mpdf/mpdf": "^8.1.1", - "phpcompatibility/php-compatibility": "^9.3", - "phpstan/phpstan": "^1.1", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.5", - "squizlabs/php_codesniffer": "^3.7", - "tecnickcom/tcpdf": "^6.5" - }, - "suggest": { - "dompdf/dompdf": "Option for rendering PDF with PDF Writer", - "ext-intl": "PHP Internationalization Functions", - "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", - "mpdf/mpdf": "Option for rendering PDF with PDF Writer", - "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { - "psr-4": { - "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Maarten Balliauw", - "homepage": "https://blog.maartenballiauw.be" - }, - { - "name": "Mark Baker", - "homepage": "https://markbakeruk.net" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phiki/phiki", + "version": "v2.0.5", + "source": { + "type": "git", + "url": "https://github.com/phikiphp/phiki.git", + "reference": "36d03e4c103b825f2657db966730d43e2035ff00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phikiphp/phiki/zipball/36d03e4c103b825f2657db966730d43e2035ff00", + "reference": "36d03e4c103b825f2657db966730d43e2035ff00", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/commonmark": "^2.5.3", + "php": "^8.2", + "psr/simple-cache": "^3.0" + }, + "require-dev": { + "illuminate/support": "^11.45", + "laravel/pint": "^1.18.1", + "orchestra/testbench": "^9.15", + "pestphp/pest": "^3.5.1", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^7.1.6" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Phiki\\Adapters\\Laravel\\PhikiServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Phiki\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ryan Chandler", + "email": "support@ryangjchandler.co.uk", + "homepage": "https://ryangjchandler.co.uk", + "role": "Developer" + } + ], + "description": "Syntax highlighting using TextMate grammars in PHP.", + "support": { + "issues": "https://github.com/phikiphp/phiki/issues", + "source": "https://github.com/phikiphp/phiki/tree/v2.0.5" + }, + "funding": [ + { + "url": "https://github.com/sponsors/ryangjchandler", + "type": "github" + }, + { + "url": "https://buymeacoffee.com/ryangjchandler", + "type": "other" + } + ], + "time": "2025-11-04T20:03:45+00:00" + }, + { + "name": "phpmailer/phpmailer", + "version": "v6.12.0", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "d1ac35d784bf9f5e61b424901d5a014967f15b12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/d1ac35d784bf9f5e61b424901d5a014967f15b12", + "reference": "d1ac35d784bf9f5e61b424901d5a014967f15b12", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "doctrine/annotations": "^1.2.6 || ^1.13.3", + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.7.2", + "yoast/phpunit-polyfills": "^1.0.4" + }, + "suggest": { + "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication", + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "ext-openssl": "Needed for secure SMTP sending and DKIM signing", + "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", + "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "support": { + "issues": "https://github.com/PHPMailer/PHPMailer/issues", + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.12.0" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "time": "2025-10-15T16:49:08+00:00" + }, + { + "name": "phpoffice/phpspreadsheet", + "version": "3.10.2", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "cd1dd91d6ef2afc0629982e0ea5911b3746fe51e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/cd1dd91d6ef2afc0629982e0ea5911b3746fe51e", + "reference": "cd1dd91d6ef2afc0629982e0ea5911b3746fe51e", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "maennchen/zipstream-php": "^2.1 || ^3.0", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^8.1", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^2.0 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "^10.5", + "mpdf/mpdf": "^8.1.1", + "phpcompatibility/php-compatibility": "^9.3", + "phpstan/phpstan": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.5", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions, required for NumberFormatter Wizard", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" }, { "name": "Franck Lefevre", @@ -2275,9 +2588,9 @@ ], "support": { "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/3.9.2" + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/3.10.2" }, - "time": "2025-06-23T01:19:20+00:00" + "time": "2025-11-24T16:10:02+00:00" }, { "name": "phpseclib/phpseclib", @@ -2390,337 +2703,479 @@ "time": "2025-10-06T01:07:24+00:00" }, { - "name": "pimple/pimple", - "version": "v3.5.0", + "name": "phpunit/php-code-coverage", + "version": "11.0.11", "source": { "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", + "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1 || ^2.0" + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.4.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.0", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "symfony/phpunit-bridge": "^5.4@dev" + "phpunit/phpunit": "^11.5.2" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4.x-dev" + "dev-main": "11.0.x-dev" } }, "autoload": { - "psr-0": { - "Pimple": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "container", - "dependency injection" + "coverage", + "testing", + "xunit" ], "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.5.0" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.11" }, - "time": "2021-10-28T11:13:42+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" + } + ], + "time": "2025-08-27T14:37:49+00:00" }, { - "name": "psr/cache", - "version": "3.0.0", + "name": "phpunit/php-file-iterator", + "version": "5.1.0", "source": { "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "5.0-dev" } }, "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common interface for caching libraries", + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "cache", - "psr", - "psr-6" + "filesystem", + "iterator" ], "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" }, - "time": "2021-02-03T23:26:27+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-27T05:02:59+00:00" }, { - "name": "psr/clock", - "version": "1.0.0", + "name": "phpunit/php-invoker", + "version": "5.0.1", "source": { "type": "git", - "url": "https://github.com/php-fig/clock.git", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0" + "php": ">=8.2" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", - "autoload": { - "psr-4": { - "Psr\\Clock\\": "src/" + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common interface for reading the clock.", - "homepage": "https://github.com/php-fig/clock", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "clock", - "now", - "psr", - "psr-20", - "time" + "process" ], "support": { - "issues": "https://github.com/php-fig/clock/issues", - "source": "https://github.com/php-fig/clock/tree/1.0.0" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" }, - "time": "2022-11-25T14:36:26+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:07:44+00:00" }, { - "name": "psr/container", - "version": "2.0.2", + "name": "phpunit/php-text-template", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", "shasum": "" }, "require": { - "php": ">=7.4.0" + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "template" ], "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" }, - "time": "2021-11-05T16:47:00+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:08:43+00:00" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", + "name": "phpunit/php-timer", + "version": "7.0.1", "source": { "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "7.0-dev" } }, "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Standard interfaces for event handling.", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "events", - "psr", - "psr-14" + "timer" ], "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" }, - "time": "2019-01-08T18:20:26+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:09:35+00:00" }, { - "name": "psr/http-client", - "version": "1.0.3", + "name": "phpunit/phpunit", + "version": "11.5.44", "source": { "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "c346885c95423eda3f65d85a194aaa24873cda82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c346885c95423eda3f65d85a194aaa24873cda82", + "reference": "c346885c95423eda3f65d85a194aaa24873cda82", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.11", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.2", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.1", + "sebastian/exporter": "^6.3.2", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.1.3", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.5-dev" } }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", "keywords": [ - "http", - "http-client", - "psr", - "psr-18" + "phpunit", + "testing", + "xunit" ], "support": { - "source": "https://github.com/php-fig/http-client" + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.44" }, - "time": "2023-09-23T14:17:50+00:00" + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2025-11-13T07:17:35+00:00" }, { - "name": "psr/http-factory", - "version": "1.1.0", + "name": "pimple/pimple", + "version": "v3.6.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + "url": "https://github.com/silexphp/Pimple.git", + "reference": "a70f552d338f9266eec6606c1f0b324da5514c96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a70f552d338f9266eec6606c1f0b324da5514c96", + "reference": "a70f552d338f9266eec6606c1f0b324da5514c96", "shasum": "" }, "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" + "php": ">=7.2.5", + "psr/container": "^1.1 || ^2.0" + }, + "require-dev": { + "phpunit/phpunit": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.4.x-dev" } }, "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" + "psr-0": { + "Pimple": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2729,52 +3184,47 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "https://pimple.symfony.com", "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" + "container", + "dependency injection" ], "support": { - "source": "https://github.com/php-fig/http-factory" + "source": "https://github.com/silexphp/Pimple/tree/v3.6.0" }, - "time": "2024-04-15T12:06:14+00:00" + "time": "2025-11-12T12:31:38+00:00" }, { - "name": "psr/http-message", - "version": "2.0", + "name": "psr/cache", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Http\\Message\\": "src/" + "Psr\\Cache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2787,47 +3237,38 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", + "description": "Common interface for caching libraries", "keywords": [ - "http", - "http-message", + "cache", "psr", - "psr-7", - "request", - "response" + "psr-6" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2023-04-04T09:54:51+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { - "name": "psr/log", - "version": "3.0.2", + "name": "psr/clock", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": "^7.0 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "autoload": { "psr-4": { - "Psr\\Log\\": "src" + "Psr\\Clock\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2840,44 +3281,47 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", "keywords": [ - "log", + "clock", + "now", "psr", - "psr-3" + "psr-20", + "time" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" }, - "time": "2024-09-11T13:17:53+00:00" + "time": "2022-11-25T14:36:26+00:00" }, { - "name": "psr/simple-cache", - "version": "3.0.0", + "name": "psr/container", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": ">=7.4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\SimpleCache\\": "src/" + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2890,45 +3334,48 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for simple caching", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], "support": { - "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-10-29T13:26:27+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { - "name": "ralouphie/getallheaders", - "version": "3.0.3", + "name": "psr/event-dispatcher", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", "shasum": "" }, "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" + "php": ">=7.2.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { - "files": [ - "src/getallheaders.php" - ] + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2936,65 +3383,49 @@ ], "authors": [ { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "A polyfill for getallheaders.", + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" }, - "time": "2019-03-08T08:55:37+00:00" + "time": "2019-01-08T18:20:26+00:00" }, { - "name": "ramsey/collection", - "version": "2.1.1", + "name": "psr/http-client", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", - "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { - "php": "^8.1" - }, - "require-dev": { - "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.45", - "fakerphp/faker": "^1.24", - "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^2.1", - "mockery/mockery": "^1.6", - "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.4", - "phpspec/prophecy-phpunit": "^2.3", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-mockery": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^10.5", - "ramsey/coding-standard": "^2.3", - "ramsey/conventional-commits": "^1.6", - "roave/security-advisories": "dev-latest" + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { - "captainhook": { - "force-install": true - }, - "ramsey/conventional-commits": { - "configFile": "conventional-commits.json" + "branch-alias": { + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Ramsey\\Collection\\": "src/" + "Psr\\Http\\Client\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3003,2088 +3434,1932 @@ ], "authors": [ { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "A PHP library for representing and manipulating collections.", + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" + "http", + "http-client", + "psr", + "psr-18" ], "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.1.1" + "source": "https://github.com/php-fig/http-client" }, - "time": "2025-03-22T05:38:12+00:00" + "time": "2023-09-23T14:17:50+00:00" }, { - "name": "ramsey/uuid", - "version": "4.9.0", + "name": "psr/http-factory", + "version": "1.1.0", "source": { "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0" + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/4e0e23cc785f0724a0e838279a9eb03f28b092a0", - "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13", - "php": "^8.0", - "ramsey/collection": "^1.2 || ^2.0" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "captainhook/captainhook": "^5.25", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^1.0", - "ergebnis/composer-normalize": "^2.47", - "mockery/mockery": "^1.6", - "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.6", - "php-mock/php-mock-mockery": "^1.5", - "php-parallel-lint/php-parallel-lint": "^1.4.0", - "phpbench/phpbench": "^1.2.14", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-mockery": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^9.6", - "slevomat/coding-standard": "^8.18", - "squizlabs/php_codesniffer": "^3.13" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { - "captainhook": { - "force-install": true + "branch-alias": { + "dev-master": "1.0.x-dev" } }, "autoload": { - "files": [ - "src/functions.php" - ], "psr-4": { - "Ramsey\\Uuid\\": "src/" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ - "guid", - "identifier", - "uuid" + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" ], "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.9.0" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2025-06-25T14:20:11+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { - "name": "robrichards/xmlseclibs", - "version": "3.1.3", + "name": "psr/http-message", + "version": "2.0", "source": { "type": "git", - "url": "https://github.com/robrichards/xmlseclibs.git", - "reference": "2bdfd742624d739dfadbd415f00181b4a77aaf07" + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/2bdfd742624d739dfadbd415f00181b4a77aaf07", - "reference": "2bdfd742624d739dfadbd415f00181b4a77aaf07", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { - "ext-openssl": "*", - "php": ">= 5.4" + "php": "^7.2 || ^8.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { - "RobRichards\\XMLSecLibs\\": "src" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "description": "A PHP library for XML Security", - "homepage": "https://github.com/robrichards/xmlseclibs", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ - "security", - "signature", - "xml", - "xmldsig" + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" ], "support": { - "issues": "https://github.com/robrichards/xmlseclibs/issues", - "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.3" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2024-11-20T21:13:56+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { - "name": "sabre/dav", - "version": "4.6.0", + "name": "psr/log", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/sabre-io/dav.git", - "reference": "554145304b4a026477d130928d16e626939b0b2a" + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/dav/zipball/554145304b4a026477d130928d16e626939b0b2a", - "reference": "554145304b4a026477d130928d16e626939b0b2a", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-date": "*", - "ext-dom": "*", - "ext-iconv": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-pcre": "*", - "ext-simplexml": "*", - "ext-spl": "*", - "lib-libxml": ">=2.7.0", - "php": "^7.1.0 || ^8.0", - "psr/log": "^1.0 || ^2.0 || ^3.0", - "sabre/event": "^5.0", - "sabre/http": "^5.0.5", - "sabre/uri": "^2.0", - "sabre/vobject": "^4.2.1", - "sabre/xml": "^2.0.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19", - "monolog/monolog": "^1.27 || ^2.0", - "phpstan/phpstan": "^0.12 || ^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" - }, - "suggest": { - "ext-curl": "*", - "ext-imap": "*", - "ext-pdo": "*" + "php": ">=8.0.0" }, - "bin": [ - "bin/sabredav", - "bin/naturalselection" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, "autoload": { "psr-4": { - "Sabre\\": "lib/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Evert Pot", - "email": "me@evertpot.com", - "homepage": "http://evertpot.com/", - "role": "Developer" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "WebDAV Framework for PHP", - "homepage": "http://sabre.io/", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "CalDAV", - "CardDAV", - "WebDAV", - "framework", - "iCalendar" + "log", + "psr", + "psr-3" ], "support": { - "forum": "https://groups.google.com/group/sabredav-discuss", - "issues": "https://github.com/sabre-io/dav/issues", - "source": "https://github.com/fruux/sabre-dav" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2023-12-11T13:01:23+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { - "name": "sabre/event", - "version": "5.1.7", + "name": "psr/simple-cache", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/sabre-io/event.git", - "reference": "86d57e305c272898ba3c28e9bd3d65d5464587c2" + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/event/zipball/86d57e305c272898ba3c28e9bd3d65d5464587c2", - "reference": "86d57e305c272898ba3c28e9bd3d65d5464587c2", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.17.1||^3.63", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" + "php": ">=8.0.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, "autoload": { - "files": [ - "lib/coroutine.php", - "lib/Loop/functions.php", - "lib/Promise/functions.php" - ], "psr-4": { - "Sabre\\Event\\": "lib/" + "Psr\\SimpleCache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Evert Pot", - "email": "me@evertpot.com", - "homepage": "http://evertpot.com/", - "role": "Developer" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "sabre/event is a library for lightweight event-based programming", - "homepage": "http://sabre.io/event/", + "description": "Common interfaces for simple caching", "keywords": [ - "EventEmitter", - "async", - "coroutine", - "eventloop", - "events", - "hooks", - "plugin", - "promise", - "reactor", - "signal" + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" ], "support": { - "forum": "https://groups.google.com/group/sabredav-discuss", - "issues": "https://github.com/sabre-io/event/issues", - "source": "https://github.com/fruux/sabre-event" + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" }, - "time": "2024-08-27T11:23:05+00:00" + "time": "2021-10-29T13:26:27+00:00" }, { - "name": "sabre/http", - "version": "5.1.12", + "name": "ralouphie/getallheaders", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/sabre-io/http.git", - "reference": "dedff73f3995578bc942fa4c8484190cac14f139" + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/http/zipball/dedff73f3995578bc942fa4c8484190cac14f139", - "reference": "dedff73f3995578bc942fa4c8484190cac14f139", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-curl": "*", - "ext-mbstring": "*", - "php": "^7.1 || ^8.0", - "sabre/event": ">=4.0 <6.0", - "sabre/uri": "^2.0" + "php": ">=5.6" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.17.1||^3.63", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" - }, - "suggest": { - "ext-curl": " to make http requests with the Client class" + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, "type": "library", "autoload": { "files": [ - "lib/functions.php" - ], - "psr-4": { - "Sabre\\HTTP\\": "lib/" - } + "src/getallheaders.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Evert Pot", - "email": "me@evertpot.com", - "homepage": "http://evertpot.com/", - "role": "Developer" + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" } ], - "description": "The sabre/http library provides utilities for dealing with http requests and responses. ", - "homepage": "https://github.com/fruux/sabre-http", - "keywords": [ - "http" - ], + "description": "A polyfill for getallheaders.", "support": { - "forum": "https://groups.google.com/group/sabredav-discuss", - "issues": "https://github.com/sabre-io/http/issues", - "source": "https://github.com/fruux/sabre-http" + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" }, - "time": "2024-08-27T16:07:41+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { - "name": "sabre/uri", - "version": "2.3.4", + "name": "ramsey/collection", + "version": "2.1.1", "source": { "type": "git", - "url": "https://github.com/sabre-io/uri.git", - "reference": "b76524c22de90d80ca73143680a8e77b1266c291" + "url": "https://github.com/ramsey/collection.git", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/uri/zipball/b76524c22de90d80ca73143680a8e77b1266c291", - "reference": "b76524c22de90d80ca73143680a8e77b1266c291", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^8.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.63", + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^1.12", - "phpstan/phpstan-phpunit": "^1.4", - "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "^9.6" + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" }, "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, "autoload": { - "files": [ - "lib/functions.php" - ], "psr-4": { - "Sabre\\Uri\\": "lib/" + "Ramsey\\Collection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Evert Pot", - "email": "me@evertpot.com", - "homepage": "http://evertpot.com/", - "role": "Developer" + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" } ], - "description": "Functions for making sense out of URIs.", - "homepage": "http://sabre.io/uri/", + "description": "A PHP library for representing and manipulating collections.", "keywords": [ - "rfc3986", - "uri", - "url" + "array", + "collection", + "hash", + "map", + "queue", + "set" ], "support": { - "forum": "https://groups.google.com/group/sabredav-discuss", - "issues": "https://github.com/sabre-io/uri/issues", - "source": "https://github.com/fruux/sabre-uri" + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.1.1" }, - "time": "2024-08-27T12:18:16+00:00" + "time": "2025-03-22T05:38:12+00:00" }, { - "name": "sabre/vobject", - "version": "4.5.7", + "name": "ramsey/uuid", + "version": "4.9.1", "source": { "type": "git", - "url": "https://github.com/sabre-io/vobject.git", - "reference": "ff22611a53782e90c97be0d0bc4a5f98a5c0a12c" + "url": "https://github.com/ramsey/uuid.git", + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/vobject/zipball/ff22611a53782e90c97be0d0bc4a5f98a5c0a12c", - "reference": "ff22611a53782e90c97be0d0bc4a5f98a5c0a12c", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/81f941f6f729b1e3ceea61d9d014f8b6c6800440", + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": "^7.1 || ^8.0", - "sabre/xml": "^2.1 || ^3.0 || ^4.0" + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.17.1", - "phpstan/phpstan": "^0.12 || ^1.12 || ^2.0", - "phpunit/php-invoker": "^2.0 || ^3.1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" + "captainhook/captainhook": "^5.25", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" }, "suggest": { - "hoa/bench": "If you would like to run the benchmark scripts" + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, - "bin": [ - "bin/vobject", - "bin/generate_vcards" - ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" + "captainhook": { + "force-install": true } }, "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { - "Sabre\\VObject\\": "lib/" + "Ramsey\\Uuid\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Evert Pot", - "email": "me@evertpot.com", - "homepage": "http://evertpot.com/", - "role": "Developer" - }, - { - "name": "Dominik Tobschall", - "email": "dominik@fruux.com", - "homepage": "http://tobschall.de/", - "role": "Developer" - }, - { - "name": "Ivan Enderlin", - "email": "ivan.enderlin@hoa-project.net", - "homepage": "http://mnt.io/", - "role": "Developer" - } + "MIT" ], - "description": "The VObject library for PHP allows you to easily parse and manipulate iCalendar and vCard objects", - "homepage": "http://sabre.io/vobject/", + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", "keywords": [ - "availability", - "freebusy", - "iCalendar", - "ical", - "ics", - "jCal", - "jCard", - "recurrence", - "rfc2425", - "rfc2426", - "rfc2739", - "rfc4770", - "rfc5545", - "rfc5546", - "rfc6321", - "rfc6350", - "rfc6351", - "rfc6474", - "rfc6638", - "rfc6715", - "rfc6868", - "vCalendar", - "vCard", - "vcf", - "xCal", - "xCard" + "guid", + "identifier", + "uuid" ], "support": { - "forum": "https://groups.google.com/group/sabredav-discuss", - "issues": "https://github.com/sabre-io/vobject/issues", - "source": "https://github.com/fruux/sabre-vobject" + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.9.1" }, - "time": "2025-04-17T09:22:48+00:00" + "time": "2025-09-04T20:59:21+00:00" }, { - "name": "sabre/xml", - "version": "2.2.11", + "name": "robrichards/xmlseclibs", + "version": "3.1.4", "source": { "type": "git", - "url": "https://github.com/sabre-io/xml.git", - "reference": "01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc" + "url": "https://github.com/robrichards/xmlseclibs.git", + "reference": "bc87389224c6de95802b505e5265b0ec2c5bcdbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/xml/zipball/01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc", - "reference": "01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc", + "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/bc87389224c6de95802b505e5265b0ec2c5bcdbd", + "reference": "bc87389224c6de95802b505e5265b0ec2c5bcdbd", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-xmlreader": "*", - "ext-xmlwriter": "*", - "lib-libxml": ">=2.6.20", - "php": "^7.1 || ^8.0", - "sabre/uri": ">=1.0,<3.0.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.17.1||3.63.2", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" + "ext-openssl": "*", + "php": ">= 5.4" }, "type": "library", "autoload": { - "files": [ - "lib/Deserializer/functions.php", - "lib/Serializer/functions.php" - ], "psr-4": { - "Sabre\\Xml\\": "lib/" + "RobRichards\\XMLSecLibs\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "authors": [ - { - "name": "Evert Pot", - "email": "me@evertpot.com", - "homepage": "http://evertpot.com/", - "role": "Developer" - }, - { - "name": "Markus Staab", - "email": "markus.staab@redaxo.de", - "role": "Developer" - } - ], - "description": "sabre/xml is an XML library that you may not hate.", - "homepage": "https://sabre.io/xml/", + "description": "A PHP library for XML Security", + "homepage": "https://github.com/robrichards/xmlseclibs", "keywords": [ - "XMLReader", - "XMLWriter", - "dom", - "xml" + "security", + "signature", + "xml", + "xmldsig" ], "support": { - "forum": "https://groups.google.com/group/sabredav-discuss", - "issues": "https://github.com/sabre-io/xml/issues", - "source": "https://github.com/fruux/sabre-xml" + "issues": "https://github.com/robrichards/xmlseclibs/issues", + "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.4" }, - "time": "2024-09-06T07:37:46+00:00" + "time": "2025-12-08T11:57:53+00:00" }, { - "name": "seld/jsonlint", - "version": "1.11.0", + "name": "sabre/dav", + "version": "4.7.0", "source": { "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2" + "url": "https://github.com/sabre-io/dav.git", + "reference": "074373bcd689a30bcf5aaa6bbb20a3395964ce7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2", - "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2", + "url": "https://api.github.com/repos/sabre-io/dav/zipball/074373bcd689a30bcf5aaa6bbb20a3395964ce7a", + "reference": "074373bcd689a30bcf5aaa6bbb20a3395964ce7a", "shasum": "" }, "require": { - "php": "^5.3 || ^7.0 || ^8.0" + "ext-ctype": "*", + "ext-date": "*", + "ext-dom": "*", + "ext-iconv": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-pcre": "*", + "ext-simplexml": "*", + "ext-spl": "*", + "lib-libxml": ">=2.7.0", + "php": "^7.1.0 || ^8.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "sabre/event": "^5.0", + "sabre/http": "^5.0.5", + "sabre/uri": "^2.0", + "sabre/vobject": "^4.2.1", + "sabre/xml": "^2.0.1" }, "require-dev": { - "phpstan/phpstan": "^1.11", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" + "friendsofphp/php-cs-fixer": "^2.19", + "monolog/monolog": "^1.27 || ^2.0", + "phpstan/phpstan": "^0.12 || ^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" + }, + "suggest": { + "ext-curl": "*", + "ext-imap": "*", + "ext-pdo": "*" }, "bin": [ - "bin/jsonlint" + "bin/sabredav", + "bin/naturalselection" ], "type": "library", "autoload": { "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" + "Sabre\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" } ], - "description": "JSON Linter", + "description": "WebDAV Framework for PHP", + "homepage": "http://sabre.io/", "keywords": [ - "json", - "linter", - "parser", - "validator" + "CalDAV", + "CardDAV", + "WebDAV", + "framework", + "iCalendar" ], "support": { - "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.11.0" + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/dav/issues", + "source": "https://github.com/fruux/sabre-dav" }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", - "type": "tidelift" - } - ], - "time": "2024-07-11T14:55:45+00:00" + "time": "2024-10-29T11:46:02+00:00" }, { - "name": "simplesamlphp/assert", - "version": "v1.8.1", + "name": "sabre/event", + "version": "5.1.7", "source": { "type": "git", - "url": "https://github.com/simplesamlphp/assert.git", - "reference": "f35e26e1201ec41be19404e23f87e53cf747ed3a" + "url": "https://github.com/sabre-io/event.git", + "reference": "86d57e305c272898ba3c28e9bd3d65d5464587c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/assert/zipball/f35e26e1201ec41be19404e23f87e53cf747ed3a", - "reference": "f35e26e1201ec41be19404e23f87e53cf747ed3a", + "url": "https://api.github.com/repos/sabre-io/event/zipball/86d57e305c272898ba3c28e9bd3d65d5464587c2", + "reference": "86d57e305c272898ba3c28e9bd3d65d5464587c2", "shasum": "" }, "require": { - "ext-date": "*", - "ext-filter": "*", - "ext-pcre": "*", - "ext-spl": "*", - "guzzlehttp/psr7": "~2.7.0", - "php": "^8.1", - "webmozart/assert": "~1.11.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "ext-intl": "*", - "simplesamlphp/simplesamlphp-test-framework": "~1.8.0" + "friendsofphp/php-cs-fixer": "~2.17.1||^3.63", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "v1.1.x-dev" - } - }, "autoload": { + "files": [ + "lib/coroutine.php", + "lib/Loop/functions.php", + "lib/Promise/functions.php" + ], "psr-4": { - "SimpleSAML\\Assert\\": "src/" + "Sabre\\Event\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1-or-later" + "BSD-3-Clause" ], "authors": [ { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" - }, - { - "name": "Jaime Perez Crespo", - "email": "jaimepc@gmail.com" + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" } ], - "description": "A wrapper around webmozart/assert to make it useful beyond checking method arguments", + "description": "sabre/event is a library for lightweight event-based programming", + "homepage": "http://sabre.io/event/", + "keywords": [ + "EventEmitter", + "async", + "coroutine", + "eventloop", + "events", + "hooks", + "plugin", + "promise", + "reactor", + "signal" + ], "support": { - "issues": "https://github.com/simplesamlphp/assert/issues", - "source": "https://github.com/simplesamlphp/assert/tree/v1.8.1" + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/event/issues", + "source": "https://github.com/fruux/sabre-event" }, - "time": "2025-01-09T12:10:04+00:00" + "time": "2024-08-27T11:23:05+00:00" }, { - "name": "simplesamlphp/composer-module-installer", - "version": "v1.4.0", + "name": "sabre/http", + "version": "5.1.13", "source": { "type": "git", - "url": "https://github.com/simplesamlphp/composer-module-installer.git", - "reference": "edb2155d200e2a208816d06f42cfa78bfd9e7cf4" + "url": "https://github.com/sabre-io/http.git", + "reference": "7c2a14097d1a0de2347dcbdc91a02f38e338f4db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/composer-module-installer/zipball/edb2155d200e2a208816d06f42cfa78bfd9e7cf4", - "reference": "edb2155d200e2a208816d06f42cfa78bfd9e7cf4", + "url": "https://api.github.com/repos/sabre-io/http/zipball/7c2a14097d1a0de2347dcbdc91a02f38e338f4db", + "reference": "7c2a14097d1a0de2347dcbdc91a02f38e338f4db", "shasum": "" }, "require": { - "composer-plugin-api": "^2.6", - "php": "^8.1", - "simplesamlphp/assert": "^1.6" + "ext-ctype": "*", + "ext-curl": "*", + "ext-mbstring": "*", + "php": "^7.1 || ^8.0", + "sabre/event": ">=4.0 <6.0", + "sabre/uri": "^2.0" }, "require-dev": { - "composer/composer": "^2.8.3", - "simplesamlphp/simplesamlphp-test-framework": "^1.8.0" + "friendsofphp/php-cs-fixer": "~2.17.1||3.63.2", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" }, - "type": "composer-plugin", - "extra": { - "class": "SimpleSAML\\Composer\\ModuleInstallerPlugin" + "suggest": { + "ext-curl": " to make http requests with the Client class" }, + "type": "library", "autoload": { + "files": [ + "lib/functions.php" + ], "psr-4": { - "SimpleSAML\\Composer\\": "src/" + "Sabre\\HTTP\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1-only" + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + } + ], + "description": "The sabre/http library provides utilities for dealing with http requests and responses. ", + "homepage": "https://github.com/fruux/sabre-http", + "keywords": [ + "http" ], - "description": "A Composer plugin that allows installing SimpleSAMLphp modules through Composer.", "support": { - "issues": "https://github.com/simplesamlphp/composer-module-installer/issues", - "source": "https://github.com/simplesamlphp/composer-module-installer/tree/v1.4.0" + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/http/issues", + "source": "https://github.com/fruux/sabre-http" }, - "time": "2024-12-08T16:57:03+00:00" + "time": "2025-09-09T10:21:47+00:00" }, { - "name": "simplesamlphp/composer-xmlprovider-installer", - "version": "v1.0.2", + "name": "sabre/uri", + "version": "2.3.4", "source": { "type": "git", - "url": "https://github.com/simplesamlphp/composer-xmlprovider-installer.git", - "reference": "3d882187b5b0b404c381a2e4d17498ca4b2785b3" + "url": "https://github.com/sabre-io/uri.git", + "reference": "b76524c22de90d80ca73143680a8e77b1266c291" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/composer-xmlprovider-installer/zipball/3d882187b5b0b404c381a2e4d17498ca4b2785b3", - "reference": "3d882187b5b0b404c381a2e4d17498ca4b2785b3", + "url": "https://api.github.com/repos/sabre-io/uri/zipball/b76524c22de90d80ca73143680a8e77b1266c291", + "reference": "b76524c22de90d80ca73143680a8e77b1266c291", "shasum": "" }, "require": { - "composer-plugin-api": "^2.0", - "php": "^8.1" + "php": "^7.4 || ^8.0" }, "require-dev": { - "composer/composer": "^2.4", - "simplesamlphp/simplesamlphp-test-framework": "^1.5.4" - }, - "type": "composer-plugin", - "extra": { - "class": "SimpleSAML\\Composer\\XMLProvider\\XMLProviderInstallerPlugin" + "friendsofphp/php-cs-fixer": "^3.63", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^1.12", + "phpstan/phpstan-phpunit": "^1.4", + "phpstan/phpstan-strict-rules": "^1.6", + "phpunit/phpunit": "^9.6" }, + "type": "library", "autoload": { + "files": [ + "lib/functions.php" + ], "psr-4": { - "SimpleSAML\\Composer\\XMLProvider\\": "src/" + "Sabre\\Uri\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1-only" + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + } + ], + "description": "Functions for making sense out of URIs.", + "homepage": "http://sabre.io/uri/", + "keywords": [ + "rfc3986", + "uri", + "url" ], - "description": "A composer plugin that will auto-generate a classmap with all classes that implement SerializableElementInterface.", "support": { - "issues": "https://github.com/simplesamlphp/composer-xmlprovider-installer/issues", - "source": "https://github.com/simplesamlphp/composer-xmlprovider-installer/tree/v1.0.2" + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/uri/issues", + "source": "https://github.com/fruux/sabre-uri" }, - "time": "2025-06-28T18:54:25+00:00" + "time": "2024-08-27T12:18:16+00:00" }, { - "name": "simplesamlphp/saml2", - "version": "v5.0.2", + "name": "sabre/vobject", + "version": "4.5.7", "source": { "type": "git", - "url": "https://github.com/simplesamlphp/saml2.git", - "reference": "d23dce11ac5a9b84a37a283ea7fbb0d780771e6c" + "url": "https://github.com/sabre-io/vobject.git", + "reference": "ff22611a53782e90c97be0d0bc4a5f98a5c0a12c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/d23dce11ac5a9b84a37a283ea7fbb0d780771e6c", - "reference": "d23dce11ac5a9b84a37a283ea7fbb0d780771e6c", + "url": "https://api.github.com/repos/sabre-io/vobject/zipball/ff22611a53782e90c97be0d0bc4a5f98a5c0a12c", + "reference": "ff22611a53782e90c97be0d0bc4a5f98a5c0a12c", "shasum": "" }, "require": { - "ext-date": "*", - "ext-dom": "*", - "ext-filter": "*", - "ext-libxml": "*", - "ext-openssl": "*", - "ext-pcre": "*", - "ext-zlib": "*", - "nyholm/psr7": "~1.8.2", - "php": "^8.1", - "psr/clock": "~1.0.0", - "psr/http-message": "~2.0", - "psr/log": "~2.3.1 || ~3.0.0", - "simplesamlphp/assert": "~1.8.1", - "simplesamlphp/xml-common": "~1.25.0", - "simplesamlphp/xml-security": "~1.13.4", - "simplesamlphp/xml-soap": "~1.7.0" + "ext-mbstring": "*", + "php": "^7.1 || ^8.0", + "sabre/xml": "^2.1 || ^3.0 || ^4.0" }, "require-dev": { - "beste/clock": "~3.0.0", - "ext-intl": "*", - "mockery/mockery": "~1.6.12", - "simplesamlphp/composer-xmlprovider-installer": "~1.0.2", - "simplesamlphp/simplesamlphp-test-framework": "~1.9.2" + "friendsofphp/php-cs-fixer": "~2.17.1", + "phpstan/phpstan": "^0.12 || ^1.12 || ^2.0", + "phpunit/php-invoker": "^2.0 || ^3.1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" }, "suggest": { - "ext-soap": "*" + "hoa/bench": "If you would like to run the benchmark scripts" }, + "bin": [ + "bin/vobject", + "bin/generate_vcards" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "v5.0.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { "psr-4": { - "SimpleSAML\\SAML2\\": "src/" + "Sabre\\VObject\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1-or-later" + "BSD-3-Clause" ], "authors": [ { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + }, + { + "name": "Dominik Tobschall", + "email": "dominik@fruux.com", + "homepage": "http://tobschall.de/", + "role": "Developer" + }, + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net", + "homepage": "http://mnt.io/", + "role": "Developer" } ], - "description": "SAML2 PHP library from SimpleSAMLphp", + "description": "The VObject library for PHP allows you to easily parse and manipulate iCalendar and vCard objects", + "homepage": "http://sabre.io/vobject/", + "keywords": [ + "availability", + "freebusy", + "iCalendar", + "ical", + "ics", + "jCal", + "jCard", + "recurrence", + "rfc2425", + "rfc2426", + "rfc2739", + "rfc4770", + "rfc5545", + "rfc5546", + "rfc6321", + "rfc6350", + "rfc6351", + "rfc6474", + "rfc6638", + "rfc6715", + "rfc6868", + "vCalendar", + "vCard", + "vcf", + "xCal", + "xCard" + ], "support": { - "issues": "https://github.com/simplesamlphp/saml2/issues", - "source": "https://github.com/simplesamlphp/saml2/tree/v5.0.2" + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/vobject/issues", + "source": "https://github.com/fruux/sabre-vobject" }, - "time": "2025-07-01T19:07:40+00:00" + "time": "2025-04-17T09:22:48+00:00" }, { - "name": "simplesamlphp/saml2-legacy", - "version": "v4.18.1", + "name": "sabre/xml", + "version": "2.2.11", "source": { "type": "git", - "url": "https://github.com/simplesamlphp/saml2-legacy.git", - "reference": "9bbf43a5ace9c8e5107dad3a613b014b456ecd56" + "url": "https://github.com/sabre-io/xml.git", + "reference": "01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/saml2-legacy/zipball/9bbf43a5ace9c8e5107dad3a613b014b456ecd56", - "reference": "9bbf43a5ace9c8e5107dad3a613b014b456ecd56", + "url": "https://api.github.com/repos/sabre-io/xml/zipball/01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc", + "reference": "01a7927842abf3e10df3d9c2d9b0cc9d813a3fcc", "shasum": "" }, "require": { "ext-dom": "*", - "ext-openssl": "*", - "ext-zlib": "*", - "php": ">=7.1 || ^8.0", - "psr/log": "~1.1 || ^2.0 || ^3.0", - "robrichards/xmlseclibs": "^3.1.1", - "webmozart/assert": "^1.9" - }, - "conflict": { - "robrichards/xmlseclibs": "3.1.2" + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "lib-libxml": ">=2.6.20", + "php": "^7.1 || ^8.0", + "sabre/uri": ">=1.0,<3.0.0" }, "require-dev": { - "mockery/mockery": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "sebastian/phpcpd": "~4.1 || ^5.0 || ^6.0", - "simplesamlphp/simplesamlphp-test-framework": "~0.1.0", - "squizlabs/php_codesniffer": "~3.5" + "friendsofphp/php-cs-fixer": "~2.17.1||3.63.2", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "v4.2.x-dev" - } - }, "autoload": { + "files": [ + "lib/Deserializer/functions.php", + "lib/Serializer/functions.php" + ], "psr-4": { - "SAML2\\": "src/SAML2" + "Sabre\\Xml\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1-or-later" + "BSD-3-Clause" ], "authors": [ { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + }, + { + "name": "Markus Staab", + "email": "markus.staab@redaxo.de", + "role": "Developer" } ], - "description": "SAML2 PHP library from SimpleSAMLphp", + "description": "sabre/xml is an XML library that you may not hate.", + "homepage": "https://sabre.io/xml/", + "keywords": [ + "XMLReader", + "XMLWriter", + "dom", + "xml" + ], "support": { - "source": "https://github.com/simplesamlphp/saml2-legacy/tree/v4.18.1" + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/xml/issues", + "source": "https://github.com/fruux/sabre-xml" }, - "time": "2025-03-16T11:50:02+00:00" + "time": "2024-09-06T07:37:46+00:00" }, { - "name": "simplesamlphp/simplesamlphp", - "version": "v2.4.2", + "name": "sebastian/cli-parser", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp.git", - "reference": "d791ed73656102f4d553f7e0335cc6a528b1c2dd" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp/zipball/d791ed73656102f4d553f7e0335cc6a528b1c2dd", - "reference": "d791ed73656102f4d553f7e0335cc6a528b1c2dd", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", "shasum": "" }, "require": { - "ext-date": "*", - "ext-dom": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "ext-pcre": "*", - "ext-session": "*", - "ext-simplexml": "*", - "ext-spl": "*", - "ext-zlib": "*", - "gettext/gettext": "^5.7", - "gettext/translator": "^1.1", - "php": "^8.1", - "phpmailer/phpmailer": "^6.8", - "psr/log": "^3.0", - "simplesamlphp/assert": "^1.1", - "simplesamlphp/composer-module-installer": "^1.3", - "simplesamlphp/saml2": "^5.0.0", - "simplesamlphp/saml2-legacy": "^4.18.1", - "simplesamlphp/simplesamlphp-assets-base": "~2.3.0", - "simplesamlphp/xml-security": "^1.7", - "symfony/cache": "^6.4", - "symfony/config": "^6.4", - "symfony/console": "^6.4", - "symfony/dependency-injection": "^6.4", - "symfony/filesystem": "^6.4", - "symfony/finder": "^6.4", - "symfony/framework-bundle": "^6.4", - "symfony/http-foundation": "^6.4", - "symfony/http-kernel": "^6.4", - "symfony/intl": "^6.4", - "symfony/password-hasher": "^6.4", - "symfony/polyfill-intl-icu": "^1.28", - "symfony/routing": "^6.4", - "symfony/translation-contracts": "^3.0", - "symfony/twig-bridge": "^6.4", - "symfony/var-exporter": "^6.4", - "symfony/yaml": "^6.4", - "twig/intl-extra": "^3.7", - "twig/twig": "^3.14.0" + "php": ">=8.2" }, "require-dev": { - "ext-curl": "*", - "ext-pdo_sqlite": "*", - "gettext/php-scanner": "1.3.1", - "mikey179/vfsstream": "~1.6", - "predis/predis": "^2.2", - "simplesamlphp/simplesamlphp-test-framework": "^1.9.2", - "symfony/translation": "^6.4" - }, - "suggest": { - "ext-curl": "Needed in order to check for updates automatically", - "ext-intl": "Needed if translations for non-English languages are required.", - "ext-ldap": "Needed if an LDAP backend is used", - "ext-memcache": "Needed if a Memcache server is used to store session information", - "ext-mysql": "Needed if a MySQL backend is used, either for authentication or to store session information", - "ext-pdo": "Needed if a database backend is used, either for authentication or to store session information", - "ext-pgsql": "Needed if a PostgreSQL backend is used, either for authentication or to store session information", - "predis/predis": "Needed if a Redis server is used to store session information" + "phpunit/phpunit": "^11.0" }, - "type": "project", + "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5.0.x-dev" + "dev-main": "3.0-dev" } }, "autoload": { - "files": [ - "src/_autoload_modules.php" - ], - "psr-4": { - "SimpleSAML\\": "src/SimpleSAML", - "SimpleSAML\\Module\\core\\": "modules/core/src", - "SimpleSAML\\Module\\cron\\": "modules/cron/src", - "SimpleSAML\\Module\\saml\\": "modules/saml/src", - "SimpleSAML\\Module\\admin\\": "modules/admin/src", - "SimpleSAML\\Module\\multiauth\\": "modules/multiauth/src", - "SimpleSAML\\Module\\exampleauth\\": "modules/exampleauth/src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1-or-later" + "BSD-3-Clause" ], "authors": [ { - "name": "Andreas Åkre Solberg", - "email": "andreas.solberg@uninett.no" - }, - { - "name": "Olav Morken", - "email": "olav.morken@uninett.no" - }, - { - "name": "Jaime Perez", - "email": "jaime.perez@uninett.no" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A PHP implementation of a SAML 2.0 service provider and identity provider.", - "homepage": "https://simplesamlphp.org", - "keywords": [ - "SAML2", - "idp", - "oauth", - "shibboleth", - "sp", - "ws-federation" - ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp" + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" }, - "time": "2025-06-04T13:10:38+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:41:36+00:00" }, { - "name": "simplesamlphp/simplesamlphp-assets-base", - "version": "v2.3.9", + "name": "sebastian/code-unit", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/simplesamlphp/simplesamlphp-assets-base.git", - "reference": "75bd31897ed3634d97de2815b5fa668625f8134d" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-assets-base/zipball/75bd31897ed3634d97de2815b5fa668625f8134d", - "reference": "75bd31897ed3634d97de2815b5fa668625f8134d", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", "shasum": "" }, "require": { - "php": "^8.1", - "simplesamlphp/composer-module-installer": "^1.3.4" + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] }, - "type": "simplesamlphp-module", "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1-or-later" + "BSD-3-Clause" ], "authors": [ { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Assets for the SimpleSAMLphp main repository", + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { - "issues": "https://github.com/simplesamlphp/simplesamlphp-assets-base/issues", - "source": "https://github.com/simplesamlphp/simplesamlphp-assets-base/tree/v2.3.9" + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" }, - "time": "2025-03-02T17:54:55+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-03-19T07:56:08+00:00" }, { - "name": "simplesamlphp/xml-common", - "version": "v1.25.1", + "name": "sebastian/code-unit-reverse-lookup", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/simplesamlphp/xml-common.git", - "reference": "999603aa521d91e17b562bb0b498513af80eb190" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/xml-common/zipball/999603aa521d91e17b562bb0b498513af80eb190", - "reference": "999603aa521d91e17b562bb0b498513af80eb190", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", "shasum": "" }, "require": { - "ext-date": "*", - "ext-dom": "*", - "ext-filter": "*", - "ext-libxml": "*", - "ext-pcre": "*", - "ext-spl": "*", - "php": "^8.1", - "simplesamlphp/assert": "~1.8.1", - "simplesamlphp/composer-xmlprovider-installer": "~1.0.2", - "symfony/finder": "~6.4.0" + "php": ">=8.2" }, "require-dev": { - "simplesamlphp/simplesamlphp-test-framework": "~1.9.2" + "phpunit/phpunit": "^11.0" }, - "type": "simplesamlphp-xmlprovider", - "autoload": { - "psr-4": { - "SimpleSAML\\XML\\": "src/" + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1-or-later" + "BSD-3-Clause" ], "authors": [ { - "name": "Jaime Perez", - "email": "jaime.perez@uninett.no" - }, - { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A library with classes and utilities for handling XML structures.", - "homepage": "http://simplesamlphp.org", - "keywords": [ - "saml", - "xml" - ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { - "issues": "https://github.com/simplesamlphp/xml-common/issues", - "source": "https://github.com/simplesamlphp/xml-common" + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" }, - "time": "2025-06-29T13:05:44+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:45:54+00:00" }, { - "name": "simplesamlphp/xml-security", - "version": "v1.13.7", + "name": "sebastian/comparator", + "version": "6.3.2", "source": { "type": "git", - "url": "https://github.com/simplesamlphp/xml-security.git", - "reference": "f6f32a3c2c6b398408d5bccc9d59445edc1cb67d" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/xml-security/zipball/f6f32a3c2c6b398408d5bccc9d59445edc1cb67d", - "reference": "f6f32a3c2c6b398408d5bccc9d59445edc1cb67d", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8", + "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8", "shasum": "" }, "require": { "ext-dom": "*", - "ext-hash": "*", "ext-mbstring": "*", - "ext-openssl": "*", - "ext-pcre": "*", - "ext-spl": "*", - "php": "^8.1", - "simplesamlphp/assert": "~1.8.1", - "simplesamlphp/xml-common": "~1.25.0" + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" }, "require-dev": { - "simplesamlphp/simplesamlphp-test-framework": "~1.9.2" + "phpunit/phpunit": "^11.4" }, - "type": "simplesamlphp-xmlprovider", - "autoload": { - "psr-4": { - "SimpleSAML\\XMLSecurity\\": "src/" + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1-or-later" + "BSD-3-Clause" ], "authors": [ { - "name": "Jaime Perez Crespo", - "email": "jaime.perez@uninett.no", - "role": "Maintainer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com", - "role": "Maintainer" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" } ], - "description": "SimpleSAMLphp library for XML Security", - "homepage": "https://github.com/simplesamlphp/xml-security", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ - "security", - "signature", - "xml", - "xmldsig" + "comparator", + "compare", + "equality" ], "support": { - "issues": "https://github.com/simplesamlphp/xml-security/issues", - "source": "https://github.com/simplesamlphp/xml-security/tree/v1.13.7" + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2" }, - "time": "2025-06-29T13:07:27+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2025-08-10T08:07:46+00:00" }, { - "name": "simplesamlphp/xml-soap", - "version": "v1.7.1", + "name": "sebastian/complexity", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/simplesamlphp/xml-soap.git", - "reference": "ca1ee4ea29c62fa66fc30d040b4013b4543f4f76" + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/xml-soap/zipball/ca1ee4ea29c62fa66fc30d040b4013b4543f4f76", - "reference": "ca1ee4ea29c62fa66fc30d040b4013b4543f4f76", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-pcre": "*", - "php": "^8.1", - "simplesamlphp/assert": "~1.8.1", - "simplesamlphp/xml-common": "~1.25.0" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "simplesamlphp/simplesamlphp-test-framework": "~1.9.2" + "phpunit/phpunit": "^11.0" }, - "type": "simplesamlphp-xmlprovider", + "type": "library", "extra": { "branch-alias": { - "dev-master": "v2.0.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { - "psr-4": { - "SimpleSAML\\SOAP\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1-or-later" + "BSD-3-Clause" ], "authors": [ { - "name": "Tim van Dijen", - "email": "tvdijen@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "SimpleSAMLphp library for XML SOAP", + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", "support": { - "issues": "https://github.com/simplesamlphp/xml-soap/issues", - "source": "https://github.com/simplesamlphp/xml-soap/tree/v1.7.1" + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" }, - "time": "2025-06-03T21:07:04+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:49:50+00:00" }, { - "name": "symfony/cache", - "version": "v6.4.23", + "name": "sebastian/diff", + "version": "6.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/cache.git", - "reference": "c88690befb8d4a85dc321fb78d677507f5eb141b" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/c88690befb8d4a85dc321fb78d677507f5eb141b", - "reference": "c88690befb8d4a85dc321fb78d677507f5eb141b", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/cache": "^2.0|^3.0", - "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^2.5|^3", - "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.3.6|^7.0" - }, - "conflict": { - "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/var-dumper": "<5.4" - }, - "provide": { - "psr/cache-implementation": "2.0|3.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0", - "symfony/cache-implementation": "1.1|2.0|3.0" + "php": ">=8.2" }, "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/dbal": "^2.13.1|^3|^4", - "predis/predis": "^1.1|^2.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Cache\\": "" - }, "classmap": [ - "Traits/ValueWrapper.php" - ], - "exclude-from-classmap": [ - "/Tests/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", - "homepage": "https://symfony.com", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "caching", - "psr6" + "diff", + "udiff", + "unidiff", + "unified diff" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.23" + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2025-06-27T18:31:36+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { - "name": "symfony/cache-contracts", - "version": "v3.6.0", + "name": "sebastian/environment", + "version": "7.2.1", "source": { "type": "git", - "url": "https://github.com/symfony/cache-contracts.git", - "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868", - "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/cache": "^3.0" + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "7.2-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Contracts\\Cache\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Generic abstractions related to caching", - "homepage": "https://symfony.com", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "Xdebug", + "environment", + "hhvm" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.6.0" + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "url": "https://github.com/fabpot", - "type": "github" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", "type": "tidelift" } ], - "time": "2025-03-13T15:25:07+00:00" + "time": "2025-05-21T11:55:47+00:00" }, { - "name": "symfony/config", - "version": "v6.4.22", + "name": "sebastian/exporter", + "version": "6.3.2", "source": { "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "af5917a3b1571f54689e56677a3f06440d2fe4c7" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/af5917a3b1571f54689e56677a3f06440d2fe4c7", - "reference": "af5917a3b1571f54689e56677a3f06440d2fe4c7", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/finder": "<5.4", - "symfony/service-contracts": "<2.5" + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "phpunit/phpunit": "^11.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", - "homepage": "https://symfony.com", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], "support": { - "source": "https://github.com/symfony/config/tree/v6.4.22" + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "url": "https://github.com/fabpot", - "type": "github" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", "type": "tidelift" } ], - "time": "2025-05-14T06:00:01+00:00" + "time": "2025-09-24T06:12:51+00:00" }, { - "name": "symfony/console", - "version": "v6.4.23", + "name": "sebastian/global-state", + "version": "7.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "9056771b8eca08d026cd3280deeec3cfd99c4d93" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/9056771b8eca08d026cd3280deeec3cfd99c4d93", - "reference": "9056771b8eca08d026cd3280deeec3cfd99c4d93", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "ext-dom": "*", + "phpunit/phpunit": "^11.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ - "cli", - "command-line", - "console", - "terminal" + "global state" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.23" + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2025-06-27T19:37:22+00:00" + "time": "2024-07-03T04:57:36+00:00" }, { - "name": "symfony/dependency-injection", - "version": "v6.4.23", + "name": "sebastian/lines-of-code", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "0d9f24f3de0a83573fce5c9ed025d6306c6e166b" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0d9f24f3de0a83573fce5c9ed025d6306c6e166b", - "reference": "0d9f24f3de0a83573fce5c9ed025d6306c6e166b", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/service-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4.20|^7.2.5" - }, - "conflict": { - "ext-psr": "<1.1|>=2", - "symfony/config": "<6.1", - "symfony/finder": "<5.4", - "symfony/proxy-manager-bridge": "<6.3", - "symfony/yaml": "<5.4" - }, - "provide": { - "psr/container-implementation": "1.1|2.0", - "symfony/service-implementation": "1.1|2.0|3.0" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "symfony/config": "^6.1|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "phpunit/phpunit": "^11.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\DependencyInjection\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Allows you to standardize and centralize the way objects are constructed in your application", - "homepage": "https://symfony.com", + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.23" + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2025-06-23T06:49:06+00:00" + "time": "2024-07-03T04:58:38+00:00" }, { - "name": "symfony/deprecation-contracts", - "version": "v3.6.0", + "name": "sebastian/object-enumerator", + "version": "6.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "6.0-dev" } }, "autoload": { - "files": [ - "function.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2024-07-03T05:00:13+00:00" }, { - "name": "symfony/error-handler", - "version": "v7.3.1", + "name": "sebastian/object-reflector", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "35b55b166f6752d6aaf21aa042fc5ed280fce235" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/35b55b166f6752d6aaf21aa042fc5ed280fce235", - "reference": "35b55b166f6752d6aaf21aa042fc5ed280fce235", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", "shasum": "" }, "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^6.4|^7.0" - }, - "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" + "php": ">=8.2" }, "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/webpack-encore-bundle": "^1.0|^2.0" + "phpunit/phpunit": "^11.0" }, - "bin": [ - "Resources/bin/patch-type-declarations" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Provides tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.3.1" + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2025-06-13T07:48:40+00:00" + "time": "2024-07-03T05:01:32+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v7.3.0", + "name": "sebastian/recursion-context", + "version": "6.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", - "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/event-dispatcher-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/service-contracts": "<2.5" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" + "php": ">=8.2" }, "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" + "phpunit/phpunit": "^11.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0" + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "url": "https://github.com/fabpot", - "type": "github" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", "type": "tidelift" } ], - "time": "2025-04-22T09:11:45+00:00" + "time": "2025-08-13T04:42:22+00:00" }, { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.6.0", + "name": "sebastian/type", + "version": "5.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", - "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" + "php": ">=8.2" }, - "type": "library", + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "5.1-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "url": "https://github.com/fabpot", - "type": "github" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2025-08-09T06:55:48+00:00" }, { - "name": "symfony/filesystem", - "version": "v6.4.13", + "name": "sebastian/version", + "version": "5.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "require-dev": { - "symfony/process": "^5.4|^6.4|^7.0" + "php": ">=8.2" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.13" + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2024-10-25T15:07:50+00:00" + "time": "2024-10-09T05:16:32+00:00" }, { - "name": "symfony/finder", - "version": "v6.4.17", + "name": "seld/jsonlint", + "version": "1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7" + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", - "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2", + "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2", "shasum": "" }, "require": { - "php": ">=8.1" + "php": "^5.3 || ^7.0 || ^8.0" }, "require-dev": { - "symfony/filesystem": "^6.0|^7.0" + "phpstan/phpstan": "^1.11", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" }, + "bin": [ + "bin/jsonlint" + ], "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5092,966 +5367,760 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" } ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.17" + "issues": "https://github.com/Seldaek/jsonlint/issues", + "source": "https://github.com/Seldaek/jsonlint/tree/1.11.0" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/Seldaek", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", "type": "tidelift" } ], - "time": "2024-12-29T13:51:37+00:00" + "time": "2024-07-11T14:55:45+00:00" }, { - "name": "symfony/framework-bundle", - "version": "v6.4.23", + "name": "simplesamlphp/assert", + "version": "v1.8.1", "source": { "type": "git", - "url": "https://github.com/symfony/framework-bundle.git", - "reference": "ff892d3ab4b8aa35921bc2120a4b31d57948fe22" + "url": "https://github.com/simplesamlphp/assert.git", + "reference": "f35e26e1201ec41be19404e23f87e53cf747ed3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/ff892d3ab4b8aa35921bc2120a4b31d57948fe22", - "reference": "ff892d3ab4b8aa35921bc2120a4b31d57948fe22", + "url": "https://api.github.com/repos/simplesamlphp/assert/zipball/f35e26e1201ec41be19404e23f87e53cf747ed3a", + "reference": "f35e26e1201ec41be19404e23f87e53cf747ed3a", "shasum": "" }, "require": { - "composer-runtime-api": ">=2.1", - "ext-xml": "*", - "php": ">=8.1", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/dependency-injection": "^6.4.12|^7.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.1|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4", - "symfony/polyfill-mbstring": "~1.0", - "symfony/routing": "^6.4|^7.0" - }, - "conflict": { - "doctrine/annotations": "<1.13.1", - "doctrine/persistence": "<1.3", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/asset": "<5.4", - "symfony/asset-mapper": "<6.4", - "symfony/clock": "<6.3", - "symfony/console": "<5.4|>=7.0", - "symfony/dom-crawler": "<6.4", - "symfony/dotenv": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<6.3", - "symfony/lock": "<5.4", - "symfony/mailer": "<5.4", - "symfony/messenger": "<6.3", - "symfony/mime": "<6.4", - "symfony/property-access": "<5.4", - "symfony/property-info": "<5.4", - "symfony/runtime": "<5.4.45|>=6.0,<6.4.13|>=7.0,<7.1.6", - "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", - "symfony/security-core": "<5.4", - "symfony/security-csrf": "<5.4", - "symfony/serializer": "<6.4", - "symfony/stopwatch": "<5.4", - "symfony/translation": "<6.4", - "symfony/twig-bridge": "<5.4", - "symfony/twig-bundle": "<5.4", - "symfony/validator": "<6.4", - "symfony/web-profiler-bundle": "<6.4", - "symfony/workflow": "<6.4" + "ext-date": "*", + "ext-filter": "*", + "ext-pcre": "*", + "ext-spl": "*", + "guzzlehttp/psr7": "~2.7.0", + "php": "^8.1", + "webmozart/assert": "~1.11.0" }, "require-dev": { - "doctrine/annotations": "^1.13.1|^2", - "doctrine/persistence": "^1.3|^2|^3", - "dragonmantank/cron-expression": "^3.1", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "seld/jsonlint": "^1.10", - "symfony/asset": "^5.4|^6.0|^7.0", - "symfony/asset-mapper": "^6.4|^7.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/console": "^5.4.9|^6.0.9|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/dotenv": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4|^6.0|^7.0", - "symfony/html-sanitizer": "^6.1|^7.0", - "symfony/http-client": "^6.3|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/mailer": "^5.4|^6.0|^7.0", - "symfony/messenger": "^6.3|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/notifier": "^5.4|^6.0|^7.0", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0", - "symfony/scheduler": "^6.4.4|^7.0.4", - "symfony/security-bundle": "^5.4|^6.0|^7.0", - "symfony/semaphore": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/string": "^5.4|^6.0|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/twig-bundle": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0", - "symfony/workflow": "^6.4|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0", - "twig/twig": "^2.10|^3.0.4" + "ext-intl": "*", + "simplesamlphp/simplesamlphp-test-framework": "~1.8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "v1.1.x-dev" + } }, - "type": "symfony-bundle", "autoload": { "psr-4": { - "Symfony\\Bundle\\FrameworkBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "SimpleSAML\\Assert\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-2.1-or-later" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jaime Perez Crespo", + "email": "jaimepc@gmail.com" } ], - "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", - "homepage": "https://symfony.com", + "description": "A wrapper around webmozart/assert to make it useful beyond checking method arguments", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.4.23" + "issues": "https://github.com/simplesamlphp/assert/issues", + "source": "https://github.com/simplesamlphp/assert/tree/v1.8.1" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-06-26T21:24:02+00:00" + "time": "2025-01-09T12:10:04+00:00" }, { - "name": "symfony/http-foundation", - "version": "v6.4.23", + "name": "simplesamlphp/composer-module-installer", + "version": "v1.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "452d19f945ee41345fd8a50c18b60783546b7bd3" + "url": "https://github.com/simplesamlphp/composer-module-installer.git", + "reference": "edb2155d200e2a208816d06f42cfa78bfd9e7cf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/452d19f945ee41345fd8a50c18b60783546b7bd3", - "reference": "452d19f945ee41345fd8a50c18b60783546b7bd3", + "url": "https://api.github.com/repos/simplesamlphp/composer-module-installer/zipball/edb2155d200e2a208816d06f42cfa78bfd9e7cf4", + "reference": "edb2155d200e2a208816d06f42cfa78bfd9e7cf4", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" - }, - "conflict": { - "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + "composer-plugin-api": "^2.6", + "php": "^8.1", + "simplesamlphp/assert": "^1.6" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3|^4", - "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4.12|^7.1.5", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0" + "composer/composer": "^2.8.3", + "simplesamlphp/simplesamlphp-test-framework": "^1.8.0" + }, + "type": "composer-plugin", + "extra": { + "class": "SimpleSAML\\Composer\\ModuleInstallerPlugin" }, - "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "SimpleSAML\\Composer\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } + "LGPL-2.1-only" ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", + "description": "A Composer plugin that allows installing SimpleSAMLphp modules through Composer.", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.23" + "issues": "https://github.com/simplesamlphp/composer-module-installer/issues", + "source": "https://github.com/simplesamlphp/composer-module-installer/tree/v1.4.0" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-05-26T09:17:58+00:00" + "time": "2024-12-08T16:57:03+00:00" }, { - "name": "symfony/http-kernel", - "version": "v6.4.23", + "name": "simplesamlphp/composer-xmlprovider-installer", + "version": "v1.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "2bb2cba685aabd859f22cf6946554e8e7f3c329a" + "url": "https://github.com/simplesamlphp/composer-xmlprovider-installer.git", + "reference": "3d882187b5b0b404c381a2e4d17498ca4b2785b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2bb2cba685aabd859f22cf6946554e8e7f3c329a", - "reference": "2bb2cba685aabd859f22cf6946554e8e7f3c329a", + "url": "https://api.github.com/repos/simplesamlphp/composer-xmlprovider-installer/zipball/3d882187b5b0b404c381a2e4d17498ca4b2785b3", + "reference": "3d882187b5b0b404c381a2e4d17498ca4b2785b3", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", - "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", - "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<5.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.3", - "twig/twig": "<2.13" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" + "composer-plugin-api": "^2.0", + "php": "^8.1" }, "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4.5|^6.0.5|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.4|^7.0.4", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", - "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.4|^7.0", - "symfony/var-exporter": "^6.2|^7.0", - "twig/twig": "^2.13|^3.0.4" + "composer/composer": "^2.4", + "simplesamlphp/simplesamlphp-test-framework": "^1.5.4" + }, + "type": "composer-plugin", + "extra": { + "class": "SimpleSAML\\Composer\\XMLProvider\\XMLProviderInstallerPlugin" }, - "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "SimpleSAML\\Composer\\XMLProvider\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } + "LGPL-2.1-only" ], - "description": "Provides a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", + "description": "A composer plugin that will auto-generate a classmap with all classes that implement SerializableElementInterface.", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.23" + "issues": "https://github.com/simplesamlphp/composer-xmlprovider-installer/issues", + "source": "https://github.com/simplesamlphp/composer-xmlprovider-installer/tree/v1.0.2" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-06-28T08:14:51+00:00" + "time": "2025-06-28T18:54:25+00:00" }, { - "name": "symfony/intl", - "version": "v6.4.23", + "name": "simplesamlphp/saml2", + "version": "v5.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/intl.git", - "reference": "a3b12ce29a770d1f26c380dabf56a71bc2a88c84" + "url": "https://github.com/simplesamlphp/saml2.git", + "reference": "13d7708158ac29299977dab779647c07c4974786" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/a3b12ce29a770d1f26c380dabf56a71bc2a88c84", - "reference": "a3b12ce29a770d1f26c380dabf56a71bc2a88c84", + "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/13d7708158ac29299977dab779647c07c4974786", + "reference": "13d7708158ac29299977dab779647c07c4974786", "shasum": "" }, "require": { - "php": ">=8.1" + "ext-date": "*", + "ext-dom": "*", + "ext-filter": "*", + "ext-libxml": "*", + "ext-openssl": "*", + "ext-pcre": "*", + "ext-zlib": "*", + "nyholm/psr7": "~1.8.2", + "php": "^8.1", + "psr/clock": "~1.0.0", + "psr/http-message": "~2.0", + "psr/log": "~2.3.1 || ~3.0.0", + "simplesamlphp/assert": "~1.8.1", + "simplesamlphp/xml-common": "~1.25.0", + "simplesamlphp/xml-security": "~1.13.4", + "simplesamlphp/xml-soap": "~1.7.0" }, "require-dev": { - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "beste/clock": "~3.0.0", + "ext-intl": "*", + "mockery/mockery": "~1.6.12", + "simplesamlphp/composer-xmlprovider-installer": "~1.0.2", + "simplesamlphp/simplesamlphp-test-framework": "~1.9.2" + }, + "suggest": { + "ext-soap": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "v5.0.x-dev" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\Intl\\": "" - }, - "exclude-from-classmap": [ - "/Tests/", - "/Resources/data/" - ] + "SimpleSAML\\SAML2\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-2.1-or-later" ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Eriksen Costa", - "email": "eriksen.costa@infranology.com.br" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" } ], - "description": "Provides access to the localization data of the ICU library", - "homepage": "https://symfony.com", - "keywords": [ - "i18n", - "icu", - "internationalization", - "intl", - "l10n", - "localization" - ], + "description": "SAML2 PHP library from SimpleSAMLphp", "support": { - "source": "https://github.com/symfony/intl/tree/v6.4.23" + "issues": "https://github.com/simplesamlphp/saml2/issues", + "source": "https://github.com/simplesamlphp/saml2/tree/v5.0.4" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-06-06T07:42:46+00:00" + "time": "2025-09-10T08:09:36+00:00" }, { - "name": "symfony/password-hasher", - "version": "v6.4.13", + "name": "simplesamlphp/saml2-legacy", + "version": "v4.19.0", "source": { "type": "git", - "url": "https://github.com/symfony/password-hasher.git", - "reference": "e97a1b31f60b8bdfc1fdedab4398538da9441d47" + "url": "https://github.com/simplesamlphp/saml2-legacy.git", + "reference": "96eb144356702d7d913078fb2e4364e42458fc31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/e97a1b31f60b8bdfc1fdedab4398538da9441d47", - "reference": "e97a1b31f60b8bdfc1fdedab4398538da9441d47", + "url": "https://api.github.com/repos/simplesamlphp/saml2-legacy/zipball/96eb144356702d7d913078fb2e4364e42458fc31", + "reference": "96eb144356702d7d913078fb2e4364e42458fc31", "shasum": "" }, "require": { - "php": ">=8.1" + "ext-dom": "*", + "ext-openssl": "*", + "ext-zlib": "*", + "php": ">=7.1 || ^8.0", + "psr/log": "~1.1 || ^2.0 || ^3.0", + "robrichards/xmlseclibs": "^3.1.1", + "webmozart/assert": "^1.9" }, "conflict": { - "symfony/security-core": "<5.4" + "robrichards/xmlseclibs": "3.1.2" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/security-core": "^5.4|^6.0|^7.0" + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "sebastian/phpcpd": "~4.1 || ^5.0 || ^6.0", + "simplesamlphp/simplesamlphp-test-framework": "~0.1.0", + "squizlabs/php_codesniffer": "~3.5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "v4.2.x-dev" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\PasswordHasher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Robin Chalas", - "email": "robin.chalas@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "SAML2\\": "src/SAML2" } - ], - "description": "Provides password hashing utilities", - "homepage": "https://symfony.com", - "keywords": [ - "hashing", - "password" - ], - "support": { - "source": "https://github.com/symfony/password-hasher/tree/v6.4.13" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" } ], - "time": "2024-09-25T14:18:03+00:00" + "description": "SAML2 PHP library from SimpleSAMLphp", + "support": { + "source": "https://github.com/simplesamlphp/saml2-legacy/tree/v4.19.0" + }, + "time": "2025-09-05T23:39:13+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.32.0", + "name": "simplesamlphp/simplesamlphp", + "version": "v2.4.3", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "url": "https://github.com/simplesamlphp/simplesamlphp.git", + "reference": "2f644bd05f8d53293f828695b0304f2711844f19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp/zipball/2f644bd05f8d53293f828695b0304f2711844f19", + "reference": "2f644bd05f8d53293f828695b0304f2711844f19", "shasum": "" }, "require": { - "php": ">=7.2" + "ext-date": "*", + "ext-dom": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-simplexml": "*", + "ext-spl": "*", + "ext-zlib": "*", + "gettext/gettext": "^5.7", + "gettext/translator": "^1.1", + "php": "^8.1", + "phpmailer/phpmailer": "^6.8", + "psr/log": "^3.0", + "simplesamlphp/assert": "^1.1", + "simplesamlphp/composer-module-installer": "^1.3", + "simplesamlphp/saml2": "^5.0.0", + "simplesamlphp/saml2-legacy": "^4.18.1", + "simplesamlphp/simplesamlphp-assets-base": "~2.4.0", + "simplesamlphp/xml-common": "^1.24.2", + "simplesamlphp/xml-security": "^1.7", + "symfony/cache": "^6.4", + "symfony/config": "^6.4", + "symfony/console": "^6.4", + "symfony/dependency-injection": "^6.4", + "symfony/expression-language": "~6.4.0", + "symfony/filesystem": "^6.4", + "symfony/finder": "^6.4", + "symfony/framework-bundle": "^6.4", + "symfony/http-foundation": "^6.4", + "symfony/http-kernel": "^6.4", + "symfony/intl": "^6.4", + "symfony/password-hasher": "^6.4", + "symfony/polyfill-intl-icu": "^1.28", + "symfony/routing": "^6.4", + "symfony/translation-contracts": "^3.0", + "symfony/twig-bridge": "^6.4", + "symfony/var-exporter": "^6.4", + "symfony/yaml": "^6.4", + "twig/intl-extra": "^3.7", + "twig/twig": "^3.14.0" }, - "provide": { - "ext-ctype": "*" + "require-dev": { + "ext-curl": "*", + "ext-pdo_sqlite": "*", + "gettext/php-scanner": "1.3.1", + "mikey179/vfsstream": "~1.6", + "predis/predis": "^2.2", + "simplesamlphp/simplesamlphp-test-framework": "^1.9.2", + "symfony/translation": "^6.4" }, "suggest": { - "ext-ctype": "For best performance" + "ext-curl": "Needed in order to check for updates automatically", + "ext-intl": "Needed if translations for non-English languages are required.", + "ext-ldap": "Needed if an LDAP backend is used", + "ext-memcache": "Needed if a Memcache server is used to store session information", + "ext-mysql": "Needed if a MySQL backend is used, either for authentication or to store session information", + "ext-pdo": "Needed if a database backend is used, either for authentication or to store session information", + "ext-pgsql": "Needed if a PostgreSQL backend is used, either for authentication or to store session information", + "predis/predis": "Needed if a Redis server is used to store session information" }, - "type": "library", + "type": "project", "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "branch-alias": { + "dev-master": "2.4.0.x-dev" } }, "autoload": { "files": [ - "bootstrap.php" + "src/_autoload_modules.php" ], "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" + "SimpleSAML\\": "src/SimpleSAML", + "SimpleSAML\\Module\\core\\": "modules/core/src", + "SimpleSAML\\Module\\cron\\": "modules/cron/src", + "SimpleSAML\\Module\\saml\\": "modules/saml/src", + "SimpleSAML\\Module\\admin\\": "modules/admin/src", + "SimpleSAML\\Module\\multiauth\\": "modules/multiauth/src", + "SimpleSAML\\Module\\exampleauth\\": "modules/exampleauth/src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-2.1-or-later" ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Andreas Åkre Solberg", + "email": "andreas.solberg@uninett.no" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Olav Morken", + "email": "olav.morken@uninett.no" + }, + { + "name": "Jaime Perez", + "email": "jaime.perez@uninett.no" } ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", + "description": "A PHP implementation of a SAML 2.0 service provider and identity provider.", + "homepage": "https://simplesamlphp.org", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "SAML2", + "idp", + "oauth", + "shibboleth", + "sp", + "ws-federation" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" + "issues": "https://github.com/simplesamlphp/simplesamlphp/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, + "time": "2025-10-06T10:20:56+00:00" + }, + { + "name": "simplesamlphp/simplesamlphp-assets-base", + "version": "v2.4.3", + "source": { + "type": "git", + "url": "https://github.com/simplesamlphp/simplesamlphp-assets-base.git", + "reference": "cba14306ee73a4f7f0321d12f20844400d5a9d16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplesamlphp/simplesamlphp-assets-base/zipball/cba14306ee73a4f7f0321d12f20844400d5a9d16", + "reference": "cba14306ee73a4f7f0321d12f20844400d5a9d16", + "shasum": "" + }, + "require": { + "php": "^8.1", + "simplesamlphp/composer-module-installer": "^1.3.4" + }, + "type": "simplesamlphp-module", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" } ], - "time": "2024-09-09T11:45:10+00:00" + "description": "Assets for the SimpleSAMLphp main repository", + "support": { + "issues": "https://github.com/simplesamlphp/simplesamlphp-assets-base/issues", + "source": "https://github.com/simplesamlphp/simplesamlphp-assets-base/tree/v2.4.3" + }, + "time": "2025-09-18T17:05:10+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.32.0", + "name": "simplesamlphp/xml-common", + "version": "v1.25.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "url": "https://github.com/simplesamlphp/xml-common.git", + "reference": "999603aa521d91e17b562bb0b498513af80eb190" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/simplesamlphp/xml-common/zipball/999603aa521d91e17b562bb0b498513af80eb190", + "reference": "999603aa521d91e17b562bb0b498513af80eb190", "shasum": "" }, "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance" + "ext-date": "*", + "ext-dom": "*", + "ext-filter": "*", + "ext-libxml": "*", + "ext-pcre": "*", + "ext-spl": "*", + "php": "^8.1", + "simplesamlphp/assert": "~1.8.1", + "simplesamlphp/composer-xmlprovider-installer": "~1.0.2", + "symfony/finder": "~6.4.0" }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } + "require-dev": { + "simplesamlphp/simplesamlphp-test-framework": "~1.9.2" }, + "type": "simplesamlphp-xmlprovider", "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + "SimpleSAML\\XML\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-2.1-or-later" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Jaime Perez", + "email": "jaime.perez@uninett.no" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", + "description": "A library with classes and utilities for handling XML structures.", + "homepage": "http://simplesamlphp.org", "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" + "saml", + "xml" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" + "issues": "https://github.com/simplesamlphp/xml-common/issues", + "source": "https://github.com/simplesamlphp/xml-common" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-06-29T13:05:44+00:00" }, { - "name": "symfony/polyfill-intl-icu", - "version": "v1.32.0", + "name": "simplesamlphp/xml-security", + "version": "v1.13.7", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "763d2a91fea5681509ca01acbc1c5e450d127811" + "url": "https://github.com/simplesamlphp/xml-security.git", + "reference": "f6f32a3c2c6b398408d5bccc9d59445edc1cb67d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/763d2a91fea5681509ca01acbc1c5e450d127811", - "reference": "763d2a91fea5681509ca01acbc1c5e450d127811", + "url": "https://api.github.com/repos/simplesamlphp/xml-security/zipball/f6f32a3c2c6b398408d5bccc9d59445edc1cb67d", + "reference": "f6f32a3c2c6b398408d5bccc9d59445edc1cb67d", "shasum": "" }, "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance and support of other locales than \"en\"" + "ext-dom": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-pcre": "*", + "ext-spl": "*", + "php": "^8.1", + "simplesamlphp/assert": "~1.8.1", + "simplesamlphp/xml-common": "~1.25.0" }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } + "require-dev": { + "simplesamlphp/simplesamlphp-test-framework": "~1.9.2" }, + "type": "simplesamlphp-xmlprovider", "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Icu\\": "" - }, - "classmap": [ - "Resources/stubs" - ], - "exclude-from-classmap": [ - "/Tests/" - ] + "SimpleSAML\\XMLSecurity\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-2.1-or-later" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Jaime Perez Crespo", + "email": "jaime.perez@uninett.no", + "role": "Maintainer" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com", + "role": "Maintainer" } ], - "description": "Symfony polyfill for intl's ICU-related data and classes", - "homepage": "https://symfony.com", + "description": "SimpleSAMLphp library for XML Security", + "homepage": "https://github.com/simplesamlphp/xml-security", "keywords": [ - "compatibility", - "icu", - "intl", - "polyfill", - "portable", - "shim" + "security", + "signature", + "xml", + "xmldsig" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.32.0" + "issues": "https://github.com/simplesamlphp/xml-security/issues", + "source": "https://github.com/simplesamlphp/xml-security/tree/v1.13.7" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-12-21T18:38:29+00:00" + "time": "2025-06-29T13:07:27+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.32.0", + "name": "simplesamlphp/xml-soap", + "version": "v1.7.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "3833d7255cc303546435cb650316bff708a1c75c" + "url": "https://github.com/simplesamlphp/xml-soap.git", + "reference": "ca1ee4ea29c62fa66fc30d040b4013b4543f4f76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", - "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "url": "https://api.github.com/repos/simplesamlphp/xml-soap/zipball/ca1ee4ea29c62fa66fc30d040b4013b4543f4f76", + "reference": "ca1ee4ea29c62fa66fc30d040b4013b4543f4f76", "shasum": "" }, "require": { - "php": ">=7.2" + "ext-dom": "*", + "ext-pcre": "*", + "php": "^8.1", + "simplesamlphp/assert": "~1.8.1", + "simplesamlphp/xml-common": "~1.25.0" }, - "suggest": { - "ext-intl": "For best performance" + "require-dev": { + "simplesamlphp/simplesamlphp-test-framework": "~1.9.2" }, - "type": "library", + "type": "simplesamlphp-xmlprovider", "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "branch-alias": { + "dev-master": "v2.0.x-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "SimpleSAML\\SOAP\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-2.1-or-later" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Tim van Dijen", + "email": "tvdijen@gmail.com" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], + "description": "SimpleSAMLphp library for XML SOAP", "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" + "issues": "https://github.com/simplesamlphp/xml-soap/issues", + "source": "https://github.com/simplesamlphp/xml-soap/tree/v1.7.1" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-06-03T21:07:04+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.32.0", + "name": "staabm/side-effects-detector", + "version": "1.0.5", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", "shasum": "" }, "require": { - "ext-iconv": "*", - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" }, - "suggest": { - "ext-mbstring": "For best performance" + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" }, "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } + "classmap": [ + "lib/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", + "description": "A static analysis tool to detect side effects in PHP code", "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" + "static analysis" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/staabm", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2024-12-23T08:48:59+00:00" + "time": "2024-10-20T05:08:20+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.32.0", + "name": "symfony/cache", + "version": "v6.4.28", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + "url": "https://github.com/symfony/cache.git", + "reference": "31628f36fc97c5714d181b3a8d29efb85c6a7677" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "url": "https://api.github.com/repos/symfony/cache/zipball/31628f36fc97c5714d181b3a8d29efb85c6a7677", + "reference": "31628f36fc97c5714d181b3a8d29efb85c6a7677", "shasum": "" }, - "require": { - "php": ">=7.2" + "require": { + "php": ">=8.1", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.3.6|^7.0" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/var-dumper": "<5.4" + }, + "provide": { + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Component\\Cache\\": "" }, "classmap": [ - "Resources/stubs" + "Traits/ValueWrapper.php" + ], + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6059,10 +6128,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -6072,16 +6137,14 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "caching", + "psr6" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" + "source": "https://github.com/symfony/cache/tree/v6.4.28" }, "funding": [ { @@ -6092,47 +6155,49 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-02T08:10:11+00:00" + "time": "2025-10-30T08:37:02+00:00" }, { - "name": "symfony/polyfill-php83", - "version": "v1.32.0", + "name": "symfony/cache-contracts", + "version": "v3.6.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868", + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.1", + "psr/cache": "^3.0" }, "type": "library", "extra": { "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Symfony\\Contracts\\Cache\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6148,16 +6213,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "description": "Generic abstractions related to caching", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.6.0" }, "funding": [ { @@ -6173,45 +6240,43 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-03-13T15:25:07+00:00" }, { - "name": "symfony/routing", - "version": "v6.4.22", + "name": "symfony/config", + "version": "v6.4.28", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "1f5234e8457164a3a0038a4c0a4ba27876a9c670" + "url": "https://github.com/symfony/config.git", + "reference": "15947c18ef3ddb0b2f4ec936b9e90e2520979f62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/1f5234e8457164a3a0038a4c0a4ba27876a9c670", - "reference": "1f5234e8457164a3a0038a4c0a4ba27876a9c670", + "url": "https://api.github.com/repos/symfony/config/zipball/15947c18ef3ddb0b2f4ec936b9e90e2520979f62", + "reference": "15947c18ef3ddb0b2f4ec936b9e90e2520979f62", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" + "symfony/finder": "<5.4", + "symfony/service-contracts": "<2.5" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", - "psr/log": "^1|^2|^3", - "symfony/config": "^6.2|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Routing\\": "" + "Symfony\\Component\\Config\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -6231,16 +6296,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Maps an HTTP request to a set of configuration variables", + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.22" + "source": "https://github.com/symfony/config/tree/v6.4.28" }, "funding": [ { @@ -6251,51 +6310,68 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-27T16:08:38+00:00" + "time": "2025-11-01T19:52:02+00:00" }, { - "name": "symfony/service-contracts", - "version": "v3.6.0", + "name": "symfony/console", + "version": "v6.4.27", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + "url": "https://github.com/symfony/console.git", + "reference": "13d3176cf8ad8ced24202844e9f95af11e2959fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "url": "https://api.github.com/repos/symfony/console/zipball/13d3176cf8ad8ced24202844e9f95af11e2959fc", + "reference": "13d3176cf8ad8ced24202844e9f95af11e2959fc", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { - "ext-psr": "<1.1|>=2" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, - "branch-alias": { - "dev-main": "3.6-dev" - } + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, + "type": "library", "autoload": { "psr-4": { - "Symfony\\Contracts\\Service\\": "" + "Symfony\\Component\\Console\\": "" }, "exclude-from-classmap": [ - "/Test/" + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6304,26 +6380,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to writing services", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "cli", + "command-line", + "console", + "terminal" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/console/tree/v6.4.27" }, "funding": [ { @@ -6334,52 +6408,58 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-25T09:37:31+00:00" + "time": "2025-10-06T10:25:16+00:00" }, { - "name": "symfony/string", - "version": "v7.3.0", + "name": "symfony/dependency-injection", + "version": "v6.4.26", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125" + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "5f311eaf0b321f8ec640f6bae12da43a14026898" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125", - "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5f311eaf0b321f8ec640f6bae12da43a14026898", + "reference": "5f311eaf0b321f8ec640f6bae12da43a14026898", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4.20|^7.2.5" }, "conflict": { - "symfony/translation-contracts": "<2.5" + "ext-psr": "<1.1|>=2", + "symfony/config": "<6.1", + "symfony/finder": "<5.4", + "symfony/proxy-manager-bridge": "<6.3", + "symfony/yaml": "<5.4" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/config": "^6.1|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { - "files": [ - "Resources/functions.php" - ], "psr-4": { - "Symfony\\Component\\String\\": "" + "Symfony\\Component\\DependencyInjection\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -6391,26 +6471,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.0" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.26" }, "funding": [ { @@ -6421,25 +6493,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-20T20:19:01+00:00" + "time": "2025-09-11T09:57:09+00:00" }, { - "name": "symfony/translation-contracts", + "name": "symfony/deprecation-contracts", "version": "v3.6.0", "source": { "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -6453,14 +6529,11 @@ }, "branch-alias": { "dev-main": "3.6-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" + } + }, + "autoload": { + "files": [ + "function.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6477,18 +6550,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to translation", + "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -6504,77 +6569,46 @@ "type": "tidelift" } ], - "time": "2024-09-27T08:32:26+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { - "name": "symfony/twig-bridge", - "version": "v6.4.22", + "name": "symfony/error-handler", + "version": "v7.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/twig-bridge.git", - "reference": "04ab306a2f2c9dbd46f4363383812954f704af9d" + "url": "https://github.com/symfony/error-handler.git", + "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/04ab306a2f2c9dbd46f4363383812954f704af9d", - "reference": "04ab306a2f2c9dbd46f4363383812954f704af9d", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/48be2b0653594eea32dcef130cca1c811dcf25c2", + "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/translation-contracts": "^2.5|^3", - "twig/twig": "^2.13|^3.0.4" + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "conflict": { - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/console": "<5.4", - "symfony/form": "<6.3", - "symfony/http-foundation": "<5.4", - "symfony/http-kernel": "<6.4", - "symfony/mime": "<6.2", - "symfony/serializer": "<6.4", - "symfony/translation": "<5.4", - "symfony/workflow": "<5.4" + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { - "egulias/email-validator": "^2.1.10|^3|^4", - "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^5.4|^6.0|^7.0", - "symfony/asset-mapper": "^6.3|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/form": "^6.4.20|^7.2.5", - "symfony/html-sanitizer": "^6.1|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/mime": "^6.2|^7.0", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/security-acl": "^2.8|^3.0", - "symfony/security-core": "^5.4|^6.0|^7.0", - "symfony/security-csrf": "^5.4|^6.0|^7.0", - "symfony/security-http": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^6.1|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0", - "symfony/workflow": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0", - "twig/cssinliner-extra": "^2.12|^3", - "twig/inky-extra": "^2.12|^3", - "twig/markdown-extra": "^2.12|^3" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" }, - "type": "symfony-bridge", + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", "autoload": { "psr-4": { - "Symfony\\Bridge\\Twig\\": "" + "Symfony\\Component\\ErrorHandler\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -6594,10 +6628,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides integration for Twig with various Symfony components", + "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.22" + "source": "https://github.com/symfony/error-handler/tree/v7.4.0" }, "funding": [ { @@ -6608,53 +6642,58 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-05-16T08:23:44+00:00" + "time": "2025-11-05T14:29:59+00:00" }, { - "name": "symfony/var-dumper", - "version": "v7.3.1", + "name": "symfony/event-dispatcher", + "version": "v7.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "6e209fbe5f5a7b6043baba46fe5735a4b85d0d42" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6e209fbe5f5a7b6043baba46fe5735a4b85d0d42", - "reference": "6e209fbe5f5a7b6043baba46fe5735a4b85d0d42", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9dddcddff1ef974ad87b3708e4b442dc38b2261d", + "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d", "shasum": "" }, "require": { "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0" + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/console": "<6.4" + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { - "ext-iconv": "*", - "symfony/console": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.12" + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, - "bin": [ - "Resources/bin/var-dump-server" - ], "type": "library", "autoload": { - "files": [ - "Resources/functions/dump.php" - ], "psr-4": { - "Symfony\\Component\\VarDumper\\": "" + "Symfony\\Component\\EventDispatcher\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -6666,22 +6705,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.3.1" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.0" }, "funding": [ { @@ -6692,44 +6727,49 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-06-27T19:55:54+00:00" + "time": "2025-10-28T09:38:46+00:00" }, { - "name": "symfony/var-exporter", - "version": "v6.4.22", + "name": "symfony/event-dispatcher-contracts", + "version": "v3.6.0", "source": { "type": "git", - "url": "https://github.com/symfony/var-exporter.git", - "reference": "f28cf841f5654955c9f88ceaf4b9dc29571988a9" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/f28cf841f5654955c9f88ceaf4b9dc29571988a9", - "reference": "f28cf841f5654955c9f88ceaf4b9dc29571988a9", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "require-dev": { - "symfony/property-access": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "psr/event-dispatcher": "^1" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\VarExporter\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Contracts\\EventDispatcher\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6745,20 +6785,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "description": "Generic abstractions related to dispatching event", "homepage": "https://symfony.com", "keywords": [ - "clone", - "construct", - "export", - "hydrate", - "instantiate", - "lazy-loading", - "proxy", - "serialize" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.22" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -6774,40 +6812,32 @@ "type": "tidelift" } ], - "time": "2025-05-14T13:00:13+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { - "name": "symfony/yaml", - "version": "v6.4.23", + "name": "symfony/expression-language", + "version": "v6.4.24", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "93e29e0deb5f1b2e360adfb389a20d25eb81a27b" + "url": "https://github.com/symfony/expression-language.git", + "reference": "1ea0adaa53539ea7e70821ae9de49ebe03ae7091" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/93e29e0deb5f1b2e360adfb389a20d25eb81a27b", - "reference": "93e29e0deb5f1b2e360adfb389a20d25eb81a27b", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/1ea0adaa53539ea7e70821ae9de49ebe03ae7091", + "reference": "1ea0adaa53539ea7e70821ae9de49ebe03ae7091", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/cache": "^5.4|^6.0|^7.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<5.4" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/service-contracts": "^2.5|^3" }, - "bin": [ - "Resources/bin/yaml-lint" - ], "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Yaml\\": "" + "Symfony\\Component\\ExpressionLanguage\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -6827,10 +6857,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Loads and dumps YAML files", + "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.23" + "source": "https://github.com/symfony/expression-language/tree/v6.4.24" }, "funding": [ { @@ -6842,190 +6872,114 @@ "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-06-03T06:46:12+00:00" - }, - { - "name": "twig/intl-extra", - "version": "v3.21.0", - "source": { - "type": "git", - "url": "https://github.com/twigphp/intl-extra.git", - "reference": "05bc5d46b9df9e62399eae53e7c0b0633298b146" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/05bc5d46b9df9e62399eae53e7c0b0633298b146", - "reference": "05bc5d46b9df9e62399eae53e7c0b0633298b146", - "shasum": "" - }, - "require": { - "php": ">=8.1.0", - "symfony/intl": "^5.4|^6.4|^7.0", - "twig/twig": "^3.13|^4.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Twig\\Extra\\Intl\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - } - ], - "description": "A Twig extension for Intl", - "homepage": "https://twig.symfony.com", - "keywords": [ - "intl", - "twig" - ], - "support": { - "source": "https://github.com/twigphp/intl-extra/tree/v3.21.0" - }, - "funding": [ - { - "url": "https://github.com/fabpot", + "url": "https://github.com/nicolas-grekas", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-31T20:45:36+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { - "name": "twig/twig", - "version": "v3.21.1", + "name": "symfony/filesystem", + "version": "v6.4.24", "source": { "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d" + "url": "https://github.com/symfony/filesystem.git", + "reference": "75ae2edb7cdcc0c53766c30b0a2512b8df574bd8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d", - "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d", - "shasum": "" - }, - "require": { - "php": ">=8.1.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" + "url": "https://api.github.com/repos/symfony/filesystem/zipball/75ae2edb7cdcc0c53766c30b0a2512b8df574bd8", + "reference": "75ae2edb7cdcc0c53766c30b0a2512b8df574bd8", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "phpstan/phpstan": "^2.0", - "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" + "symfony/process": "^5.4|^6.4|^7.0" }, "type": "library", "autoload": { - "files": [ - "src/Resources/core.php", - "src/Resources/debug.php", - "src/Resources/escaper.php", - "src/Resources/string_loader.php" - ], "psr-4": { - "Twig\\": "src/" - } + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" + "email": "fabien@symfony.com" }, { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.21.1" + "source": "https://github.com/symfony/filesystem/tree/v6.4.24" }, "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, { "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-05-03T07:21:55+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { - "name": "webmozart/assert", - "version": "1.11.0", + "name": "symfony/finder", + "version": "v6.4.27", "source": { "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "url": "https://github.com/symfony/finder.git", + "reference": "a1b6aa435d2fba50793b994a839c32b6064f063b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/symfony/finder/zipball/a1b6aa435d2fba50793b994a839c32b6064f063b", + "reference": "a1b6aa435d2fba50793b994a839c32b6064f063b", "shasum": "" }, "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^8.5.13" + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, "autoload": { "psr-4": { - "Webmozart\\Assert\\": "src/" - } + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7033,74 +6987,152 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/symfony/finder/tree/v6.4.27" }, - "time": "2022-06-03T18:03:27+00:00" - } - ], - "packages-dev": [ + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-10-15T18:32:00+00:00" + }, { - "name": "captainhook/captainhook", - "version": "5.25.6", + "name": "symfony/framework-bundle", + "version": "v6.4.27", "source": { "type": "git", - "url": "https://github.com/captainhook-git/captainhook.git", - "reference": "8d84101821228609d48f0f2439ed29c9915002e9" + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "ee58c2a73218d8f4763824e1414c5f9b4519c91f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/captainhook-git/captainhook/zipball/8d84101821228609d48f0f2439ed29c9915002e9", - "reference": "8d84101821228609d48f0f2439ed29c9915002e9", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/ee58c2a73218d8f4763824e1414c5f9b4519c91f", + "reference": "ee58c2a73218d8f4763824e1414c5f9b4519c91f", "shasum": "" }, "require": { - "captainhook/secrets": "^0.9.4", - "ext-json": "*", - "ext-spl": "*", + "composer-runtime-api": ">=2.1", "ext-xml": "*", - "php": ">=8.0", - "sebastianfeldmann/camino": "^0.9.2", - "sebastianfeldmann/cli": "^3.3", - "sebastianfeldmann/git": "^3.14", - "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + "php": ">=8.1", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/dependency-injection": "^6.4.12|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.1|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^6.4|^7.0" }, - "replace": { - "sebastianfeldmann/captainhook": "*" + "conflict": { + "doctrine/annotations": "<1.13.1", + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/asset": "<5.4", + "symfony/asset-mapper": "<6.4", + "symfony/clock": "<6.3", + "symfony/console": "<5.4|>=7.0", + "symfony/dom-crawler": "<6.4", + "symfony/dotenv": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<6.3", + "symfony/lock": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<6.3", + "symfony/mime": "<6.4", + "symfony/property-access": "<5.4", + "symfony/property-info": "<5.4", + "symfony/runtime": "<5.4.45|>=6.0,<6.4.13|>=7.0,<7.1.6", + "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", + "symfony/security-core": "<5.4", + "symfony/security-csrf": "<5.4", + "symfony/serializer": "<6.4", + "symfony/stopwatch": "<5.4", + "symfony/translation": "<6.4", + "symfony/twig-bridge": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/validator": "<6.4", + "symfony/web-profiler-bundle": "<6.4", + "symfony/workflow": "<6.4" }, "require-dev": { - "composer/composer": "~1 || ^2.0", - "mikey179/vfsstream": "~1" - }, - "bin": [ - "bin/captainhook" - ], - "type": "library", - "extra": { - "captainhook": { - "config": "captainhook.json" - }, - "branch-alias": { - "dev-main": "6.0.x-dev" - } + "doctrine/annotations": "^1.13.1|^2", + "doctrine/persistence": "^1.3|^2|^3", + "dragonmantank/cron-expression": "^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "seld/jsonlint": "^1.10", + "symfony/asset": "^5.4|^6.0|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/console": "^5.4.9|^6.0.9|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/dotenv": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/form": "^5.4|^6.0|^7.0", + "symfony/html-sanitizer": "^6.1|^7.0", + "symfony/http-client": "^6.3|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/mailer": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.3|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/notifier": "^5.4|^6.0|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0", + "symfony/scheduler": "^6.4.4|^7.0.4", + "symfony/security-bundle": "^5.4|^6.0|^7.0", + "symfony/semaphore": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/string": "^5.4|^6.0|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/web-link": "^5.4|^6.0|^7.0", + "symfony/workflow": "^6.4|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0", + "twig/twig": "^2.10|^3.0.4" }, + "type": "symfony-bundle", "autoload": { "psr-4": { - "CaptainHook\\App\\": "src/" - } + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7108,56 +7140,80 @@ ], "authors": [ { - "name": "Sebastian Feldmann", - "email": "sf@sebastian-feldmann.info" - } - ], - "description": "PHP git hook manager", - "homepage": "http://php.captainhook.info/", - "keywords": [ - "commit-msg", - "git", - "hooks", - "post-merge", - "pre-commit", - "pre-push", - "prepare-commit-msg" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], + "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/captainhook-git/captainhook/issues", - "source": "https://github.com/captainhook-git/captainhook/tree/5.25.6" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.27" }, "funding": [ { - "url": "https://github.com/sponsors/sebastianfeldmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2025-07-02T22:06:49+00:00" + "time": "2025-10-15T17:35:09+00:00" }, { - "name": "captainhook/secrets", - "version": "0.9.7", + "name": "symfony/http-foundation", + "version": "v6.4.29", "source": { "type": "git", - "url": "https://github.com/captainhook-git/secrets.git", - "reference": "d62c97f75f81ac98e22f1c282482bd35fa82f631" + "url": "https://github.com/symfony/http-foundation.git", + "reference": "b03d11e015552a315714c127d8d1e0f9e970ec88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/captainhook-git/secrets/zipball/d62c97f75f81ac98e22f1c282482bd35fa82f631", - "reference": "d62c97f75f81ac98e22f1c282482bd35fa82f631", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b03d11e015552a315714c127d8d1e0f9e970ec88", + "reference": "b03d11e015552a315714c127d8d1e0f9e970ec88", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=8.0" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { "psr-4": { - "CaptainHook\\Secrets\\": "src/" - } + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7165,59 +7221,117 @@ ], "authors": [ { - "name": "Sebastian Feldmann", - "email": "sf@sebastian-feldmann.info" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Utility classes to detect secrets", - "keywords": [ - "commit-msg", - "keys", - "passwords", - "post-merge", - "prepare-commit-msg", - "secrets", - "tokens" - ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/captainhook-git/secrets/issues", - "source": "https://github.com/captainhook-git/secrets/tree/0.9.7" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.29" }, "funding": [ { - "url": "https://github.com/sponsors/sebastianfeldmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2025-04-08T07:10:48+00:00" + "time": "2025-11-08T16:40:12+00:00" }, { - "name": "clue/ndjson-react", - "version": "v1.3.0", + "name": "symfony/http-kernel", + "version": "v6.4.29", "source": { "type": "git", - "url": "https://github.com/clue/reactphp-ndjson.git", - "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" + "url": "https://github.com/symfony/http-kernel.git", + "reference": "18818b48f54c1d2bd92b41d82d8345af50b15658" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", - "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/18818b48f54c1d2bd92b41d82d8345af50b15658", + "reference": "18818b48f54c1d2bd92b41d82d8345af50b15658", "shasum": "" }, "require": { - "php": ">=5.3", - "react/stream": "^1.2" + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.3", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", - "react/event-loop": "^1.2" + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", + "twig/twig": "^2.13|^3.0.4" }, "type": "library", "autoload": { "psr-4": { - "Clue\\React\\NDJson\\": "src/" - } + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7225,67 +7339,70 @@ ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", - "homepage": "https://github.com/clue/reactphp-ndjson", - "keywords": [ - "NDJSON", - "json", - "jsonlines", - "newline", - "reactphp", - "streaming" - ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/clue/reactphp-ndjson/issues", - "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.29" }, "funding": [ { - "url": "https://clue.engineering/support", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/clue", + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2022-12-23T10:58:28+00:00" + "time": "2025-11-12T11:22:59+00:00" }, { - "name": "composer/semver", - "version": "3.4.3", + "name": "symfony/intl", + "version": "v6.4.27", "source": { "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + "url": "https://github.com/symfony/intl.git", + "reference": "ccc52824610e7de72424cf516e52d4fb39e3bfa5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "url": "https://api.github.com/repos/symfony/intl/zipball/ccc52824610e7de72424cf516e52d4fb39e3bfa5", + "reference": "ccc52824610e7de72424cf516e52d4fb39e3bfa5", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": ">=8.1" }, "require-dev": { - "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, "autoload": { "psr-4": { - "Composer\\Semver\\": "src" - } + "Symfony\\Component\\Intl\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/Resources/data/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7293,78 +7410,87 @@ ], "authors": [ { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" }, { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Eriksen Costa", + "email": "eriksen.costa@infranology.com.br" }, { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", + "description": "Provides access to the localization data of the ICU library", + "homepage": "https://symfony.com", "keywords": [ - "semantic", - "semver", - "validation", - "versioning" + "i18n", + "icu", + "internationalization", + "intl", + "l10n", + "localization" ], "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" + "source": "https://github.com/symfony/intl/tree/v6.4.27" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/composer", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-19T14:15:21+00:00" + "time": "2025-10-01T06:01:44+00:00" }, { - "name": "composer/xdebug-handler", - "version": "3.0.5", + "name": "symfony/password-hasher", + "version": "v6.4.24", "source": { "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" + "url": "https://github.com/symfony/password-hasher.git", + "reference": "dcab5ac87450aaed26483ba49c2ce86808da7557" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/dcab5ac87450aaed26483ba49c2ce86808da7557", + "reference": "dcab5ac87450aaed26483ba49c2ce86808da7557", "shasum": "" }, "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" + "php": ">=8.1" + }, + "conflict": { + "symfony/security-core": "<5.4" }, "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/security-core": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { "psr-4": { - "Composer\\XdebugHandler\\": "src" - } + "Symfony\\Component\\PasswordHasher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7372,60 +7498,79 @@ ], "authors": [ { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" + "name": "Robin Chalas", + "email": "robin.chalas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Restarts a process without Xdebug.", + "description": "Provides password hashing utilities", + "homepage": "https://symfony.com", "keywords": [ - "Xdebug", - "performance" + "hashing", + "password" ], "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" + "source": "https://github.com/symfony/password-hasher/tree/v6.4.24" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/composer", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-05-06T16:37:16+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { - "name": "evenement/evenement", - "version": "v3.0.2", + "name": "symfony/polyfill-ctype", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/igorw/evenement.git", - "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", - "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.0" + "php": ">=7.2" }, - "require-dev": { - "phpunit/phpunit": "^9 || ^6" + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Evenement\\": "src/" + "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -7434,53 +7579,78 @@ ], "authors": [ { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Événement is a very simple event dispatching library for PHP", + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", "keywords": [ - "event-dispatcher", - "event-emitter" + "compatibility", + "ctype", + "polyfill", + "portable" ], "support": { - "issues": "https://github.com/igorw/evenement/issues", - "source": "https://github.com/igorw/evenement/tree/v3.0.2" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, - "time": "2023-08-08T05:53:35+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "fidry/cpu-core-counter", - "version": "1.2.0", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=7.2" }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "fidry/php-cs-fixer-config": "^1.1.2", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^8.5.31 || ^9.5.26", - "webmozarts/strict-phpunit": "^7.5" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -7489,97 +7659,86 @@ ], "authors": [ { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Tiny utility to get the number of CPU cores.", + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", "keywords": [ - "CPU", - "core" + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { - "url": "https://github.com/theofidry", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2024-08-06T10:04:20+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.82.1", + "name": "symfony/polyfill-intl-icu", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "240f67bbf812ab8ac097c3097e7e65d43f9a0079" + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/240f67bbf812ab8ac097c3097e7e65d43f9a0079", - "reference": "240f67bbf812ab8ac097c3097e7e65d43f9a0079", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", + "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", "shasum": "" }, "require": { - "clue/ndjson-react": "^1.0", - "composer/semver": "^3.4", - "composer/xdebug-handler": "^3.0.5", - "ext-filter": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "fidry/cpu-core-counter": "^1.2", - "php": "^7.4 || ^8.0", - "react/child-process": "^0.6.6", - "react/event-loop": "^1.0", - "react/promise": "^2.11 || ^3.0", - "react/socket": "^1.0", - "react/stream": "^1.0", - "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", - "symfony/console": "^5.4.45 || ^6.4.13 || ^7.0", - "symfony/event-dispatcher": "^5.4.45 || ^6.4.13 || ^7.0", - "symfony/filesystem": "^5.4.45 || ^6.4.13 || ^7.0", - "symfony/finder": "^5.4.45 || ^6.4.17 || ^7.0", - "symfony/options-resolver": "^5.4.45 || ^6.4.16 || ^7.0", - "symfony/polyfill-mbstring": "^1.32", - "symfony/polyfill-php80": "^1.32", - "symfony/polyfill-php81": "^1.32", - "symfony/process": "^5.4.47 || ^6.4.20 || ^7.2", - "symfony/stopwatch": "^5.4.45 || ^6.4.19 || ^7.0" - }, - "require-dev": { - "facile-it/paraunit": "^1.3.1 || ^2.6", - "infection/infection": "^0.29.14", - "justinrainbow/json-schema": "^5.3 || ^6.4", - "keradus/cli-executor": "^2.2", - "mikey179/vfsstream": "^1.6.12", - "php-coveralls/php-coveralls": "^2.8", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", - "phpunit/phpunit": "^9.6.23 || ^10.5.47 || ^11.5.25", - "symfony/polyfill-php84": "^1.32", - "symfony/var-dumper": "^5.4.48 || ^6.4.23 || ^7.3.1", - "symfony/yaml": "^5.4.45 || ^6.4.23 || ^7.3.1" + "php": ">=7.2" }, "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." + "ext-intl": "For best performance and support of other locales than \"en\"" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "PhpCsFixer\\": "src/" + "Symfony\\Polyfill\\Intl\\Icu\\": "" }, + "classmap": [ + "Resources/stubs" + ], "exclude-from-classmap": [ - "src/Fixer/Internal/*" + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -7588,849 +7747,1125 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A tool to automatically fix PHP code style", + "description": "Symfony polyfill for intl's ICU-related data and classes", + "homepage": "https://symfony.com", "keywords": [ - "Static code analysis", - "fixer", - "standards", - "static analysis" + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.82.1" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.33.0" }, "funding": [ { - "url": "https://github.com/keradus", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2025-07-08T10:18:50+00:00" + "time": "2025-06-20T22:24:30+00:00" }, { - "name": "mikey179/vfsstream", - "version": "v1.6.12", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/bovigo/vfsStream.git", - "reference": "fe695ec993e0a55c3abdda10a9364eb31c6f1bf0" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/fe695ec993e0a55c3abdda10a9364eb31c6f1bf0", - "reference": "fe695ec993e0a55c3abdda10a9364eb31c6f1bf0", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1.0" + "php": ">=7.2" }, - "require-dev": { - "phpunit/phpunit": "^7.5||^8.5||^9.6", - "yoast/phpunit-polyfills": "^2.0" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "psr-0": { - "org\\bovigo\\vfs\\": "src/main/php" - } + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Frank Kleine", - "homepage": "http://frankkleine.de/", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Virtual file system to mock the real file system in unit tests.", - "homepage": "http://vfs.bovigo.org/", + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/bovigo/vfsStream/issues", - "source": "https://github.com/bovigo/vfsStream/tree/master", - "wiki": "https://github.com/bovigo/vfsStream/wiki" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, - "time": "2024-08-29T18:43:31+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.13.3", + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "faed855a7b5f4d4637717c2b3863e277116beb36" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/faed855a7b5f4d4637717c2b3863e277116beb36", - "reference": "faed855a7b5f4d4637717c2b3863e277116beb36", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "ext-iconv": "*", + "php": ">=7.2" }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" + "provide": { + "ext-mbstring": "*" }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, "autoload": { "files": [ - "src/DeepCopy/deep_copy.php" + "bootstrap.php" ], "psr-4": { - "DeepCopy\\": "src/DeepCopy/" + "Symfony\\Polyfill\\Mbstring\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Create deep copies (clones) of your objects", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.3" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-07-05T12:25:42+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { - "name": "nikic/php-parser", - "version": "v5.5.0", + "name": "symfony/polyfill-php80", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "ae59794362fe85e051a58ad36b289443f57be7a9" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9", - "reference": "ae59794362fe85e051a58ad36b289443f57be7a9", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" + "php": ">=7.2" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "5.0-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "PhpParser\\": "lib/PhpParser" - } + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Nikita Popov" + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A PHP parser written in PHP", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "parser", - "php" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" }, - "time": "2025-05-31T08:24:38+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" }, { - "name": "phar-io/manifest", - "version": "2.0.4", + "name": "symfony/polyfill-php83", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "php": ">=7.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, "classmap": [ - "src/" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" }, "funding": [ { - "url": "https://github.com/theseer", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2024-03-03T12:33:53+00:00" + "time": "2025-07-08T02:45:35+00:00" }, { - "name": "phar-io/version", - "version": "3.2.1", + "name": "symfony/polyfill-php85", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=7.2" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php85\\": "" + }, "classmap": [ - "src/" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for handling version information and constraints", + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0" }, - "time": "2022-02-21T01:04:05+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-23T16:12:55+00:00" }, { - "name": "phpstan/phpstan", - "version": "2.1.17", + "name": "symfony/routing", + "version": "v6.4.28", "source": { "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "89b5ef665716fa2a52ecd2633f21007a6a349053" + "url": "https://github.com/symfony/routing.git", + "reference": "ae064a6d9cf39507f9797658465a2ca702965fa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/89b5ef665716fa2a52ecd2633f21007a6a349053", - "reference": "89b5ef665716fa2a52ecd2633f21007a6a349053", + "url": "https://api.github.com/repos/symfony/routing/zipball/ae064a6d9cf39507f9797658465a2ca702965fa8", + "reference": "ae064a6d9cf39507f9797658465a2ca702965fa8", "shasum": "" }, "require": { - "php": "^7.4|^8.0" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "phpstan/phpstan-shim": "*" + "doctrine/annotations": "<1.12", + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.2|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, - "bin": [ - "phpstan", - "phpstan.phar" - ], "type": "library", "autoload": { - "files": [ - "bootstrap.php" + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "PHPStan - PHP Static Analysis Tool", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", "keywords": [ - "dev", - "static analysis" + "router", + "routing", + "uri", + "url" ], "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", - "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" + "source": "https://github.com/symfony/routing/tree/v6.4.28" }, "funding": [ { - "url": "https://github.com/ondrejmirtes", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://github.com/phpstan", + "url": "https://github.com/nicolas-grekas", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2025-05-21T20:55:28+00:00" + "time": "2025-10-31T16:43:05+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "11.0.10", + "name": "symfony/service-contracts", + "version": "v3.6.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "1a800a7446add2d79cc6b3c01c45381810367d76" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1a800a7446add2d79cc6b3c01c45381810367d76", - "reference": "1a800a7446add2d79cc6b3c01c45381810367d76", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^5.4.0", - "php": ">=8.2", - "phpunit/php-file-iterator": "^5.1.0", - "phpunit/php-text-template": "^4.0.1", - "sebastian/code-unit-reverse-lookup": "^4.0.1", - "sebastian/complexity": "^4.0.1", - "sebastian/environment": "^7.2.0", - "sebastian/lines-of-code": "^3.0.1", - "sebastian/version": "^5.0.2", - "theseer/tokenizer": "^1.2.3" - }, - "require-dev": { - "phpunit/phpunit": "^11.5.2" + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + "conflict": { + "ext-psr": "<1.1|>=2" }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { - "dev-main": "11.0.x-dev" + "dev-main": "3.6-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", "keywords": [ - "coverage", - "testing", - "xunit" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/show" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" + "url": "https://github.com/fabpot", + "type": "github" }, { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" + "url": "https://github.com/nicolas-grekas", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-06-18T08:56:18+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "5.1.0", + "name": "symfony/string", + "version": "v7.4.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" + "url": "https://github.com/symfony/string.git", + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", - "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", + "url": "https://api.github.com/repos/symfony/string/zipball/d50e862cb0a0e0886f73ca1f31b865efbb795003", + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", "keywords": [ - "filesystem", - "iterator" + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" + "source": "https://github.com/symfony/string/tree/v7.4.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2024-08-27T05:02:59+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { - "name": "phpunit/php-invoker", - "version": "5.0.1", + "name": "symfony/translation-contracts", + "version": "v3.6.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", - "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", "shasum": "" }, "require": { - "php": ">=8.2" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^11.0" - }, - "suggest": { - "ext-pcntl": "*" + "php": ">=8.1" }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "3.6-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", "keywords": [ - "process" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2024-07-03T05:07:44+00:00" + "time": "2025-07-15T13:41:35+00:00" }, { - "name": "phpunit/php-text-template", - "version": "4.0.1", + "name": "symfony/twig-bridge", + "version": "v6.4.25", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "9d13e87591c9de3221c8d6f23cd9a2b5958607bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", - "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/9d13e87591c9de3221c8d6f23cd9a2b5958607bf", + "reference": "9d13e87591c9de3221c8d6f23cd9a2b5958607bf", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/translation-contracts": "^2.5|^3", + "twig/twig": "^2.13|^3.0.4" }, - "require-dev": { - "phpunit/phpunit": "^11.0" + "conflict": { + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/console": "<5.4", + "symfony/form": "<6.3", + "symfony/http-foundation": "<5.4", + "symfony/http-kernel": "<6.4", + "symfony/mime": "<6.2", + "symfony/serializer": "<6.4", + "symfony/translation": "<5.4", + "symfony/workflow": "<5.4" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/asset": "^5.4|^6.0|^7.0", + "symfony/asset-mapper": "^6.3|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/form": "^6.4.20|^7.2.5", + "symfony/html-sanitizer": "^6.1|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/mime": "^6.2|^7.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^5.4|^6.0|^7.0", + "symfony/security-csrf": "^5.4|^6.0|^7.0", + "symfony/security-http": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^6.1|^7.0", + "symfony/web-link": "^5.4|^6.0|^7.0", + "symfony/workflow": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0", + "twig/cssinliner-extra": "^2.12|^3", + "twig/inky-extra": "^2.12|^3", + "twig/markdown-extra": "^2.12|^3" }, + "type": "symfony-bridge", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], + "description": "Provides integration for Twig with various Symfony components", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.25" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2024-07-03T05:08:43+00:00" + "time": "2025-08-13T09:41:44+00:00" }, { - "name": "phpunit/php-timer", - "version": "7.0.1", + "name": "symfony/var-dumper", + "version": "v7.4.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" + "url": "https://github.com/symfony/var-dumper.git", + "reference": "41fd6c4ae28c38b294b42af6db61446594a0dece" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", - "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/41fd6c4ae28c38b294b42af6db61446594a0dece", + "reference": "41fd6c4ae28c38b294b42af6db61446594a0dece", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" }, + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", "keywords": [ - "timer" + "debug", + "dump" ], "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "security": "https://github.com/sebastianbergmann/php-timer/security/policy", - "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" + "source": "https://github.com/symfony/var-dumper/tree/v7.4.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2024-07-03T05:09:35+00:00" + "time": "2025-10-27T20:36:44+00:00" }, { - "name": "phpunit/phpunit", - "version": "11.5.26", + "name": "symfony/var-exporter", + "version": "v6.4.26", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4ad8fe263a0b55b54a8028c38a18e3c5bef312e0" + "url": "https://github.com/symfony/var-exporter.git", + "reference": "466fcac5fa2e871f83d31173f80e9c2684743bfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4ad8fe263a0b55b54a8028c38a18e3c5bef312e0", - "reference": "4ad8fe263a0b55b54a8028c38a18e3c5bef312e0", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/466fcac5fa2e871f83d31173f80e9c2684743bfc", + "reference": "466fcac5fa2e871f83d31173f80e9c2684743bfc", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.1", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.10", - "phpunit/php-file-iterator": "^5.1.0", - "phpunit/php-invoker": "^5.0.1", - "phpunit/php-text-template": "^4.0.1", - "phpunit/php-timer": "^7.0.1", - "sebastian/cli-parser": "^3.0.2", - "sebastian/code-unit": "^3.0.3", - "sebastian/comparator": "^6.3.1", - "sebastian/diff": "^6.0.2", - "sebastian/environment": "^7.2.1", - "sebastian/exporter": "^6.3.0", - "sebastian/global-state": "^7.0.2", - "sebastian/object-enumerator": "^6.0.1", - "sebastian/type": "^5.1.2", - "sebastian/version": "^5.0.2", - "staabm/side-effects-detector": "^1.0.5" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" + "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, - "bin": [ - "phpunit" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-main": "11.5-dev" - } - }, "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", "keywords": [ - "phpunit", - "testing", - "xunit" + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" ], "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.26" + "source": "https://github.com/symfony/var-exporter/tree/v6.4.26" }, "funding": [ { - "url": "https://phpunit.de/sponsors.html", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" + "url": "https://github.com/nicolas-grekas", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-07-04T05:58:21+00:00" + "time": "2025-09-11T09:57:09+00:00" }, { - "name": "react/cache", - "version": "v1.2.0", + "name": "symfony/yaml", + "version": "v6.4.26", "source": { "type": "git", - "url": "https://github.com/reactphp/cache.git", - "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" + "url": "https://github.com/symfony/yaml.git", + "reference": "0fc8b966fd0dcaab544ae59bfc3a433f048c17b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", - "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0fc8b966fd0dcaab544ae59bfc3a433f048c17b0", + "reference": "0fc8b966fd0dcaab544ae59bfc3a433f048c17b0", "shasum": "" }, "require": { - "php": ">=5.3.0", - "react/promise": "^3.0 || ^2.0 || ^1.1" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" }, "require-dev": { - "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + "symfony/console": "^5.4|^6.0|^7.0" }, + "bin": [ + "Resources/bin/yaml-lint" + ], "type": "library", "autoload": { "psr-4": { - "React\\Cache\\": "src/" - } + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8438,150 +8873,119 @@ ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Async, Promise-based cache interface for ReactPHP", - "keywords": [ - "cache", - "caching", - "promise", - "reactphp" - ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/reactphp/cache/issues", - "source": "https://github.com/reactphp/cache/tree/v1.2.0" + "source": "https://github.com/symfony/yaml/tree/v6.4.26" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2022-11-30T15:59:55+00:00" + "time": "2025-09-26T15:07:38+00:00" }, { - "name": "react/child-process", - "version": "v0.6.6", + "name": "theseer/tokenizer", + "version": "1.3.1", "source": { "type": "git", - "url": "https://github.com/reactphp/child-process.git", - "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159", - "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.0", - "react/event-loop": "^1.2", - "react/stream": "^1.4" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/socket": "^1.16", - "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { - "psr-4": { - "React\\ChildProcess\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "description": "Event-driven library for executing child processes with ReactPHP.", - "keywords": [ - "event-driven", - "process", - "reactphp" - ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { - "issues": "https://github.com/reactphp/child-process/issues", - "source": "https://github.com/reactphp/child-process/tree/v0.6.6" + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/theseer", + "type": "github" } ], - "time": "2025-01-01T16:37:48+00:00" + "time": "2025-11-17T20:03:58+00:00" }, { - "name": "react/dns", - "version": "v1.13.0", + "name": "twig/intl-extra", + "version": "v3.22.1", "source": { "type": "git", - "url": "https://github.com/reactphp/dns.git", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" + "url": "https://github.com/twigphp/intl-extra.git", + "reference": "93ac31e53cdd3f2e541f42690cd0c54ca8138ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/93ac31e53cdd3f2e541f42690cd0c54ca8138ab1", + "reference": "93ac31e53cdd3f2e541f42690cd0c54ca8138ab1", "shasum": "" }, "require": { - "php": ">=5.3.0", - "react/cache": "^1.0 || ^0.6 || ^0.5", - "react/event-loop": "^1.2", - "react/promise": "^3.2 || ^2.7 || ^1.2.1" + "php": ">=8.1.0", + "symfony/intl": "^5.4|^6.4|^7.0|^8.0", + "twig/twig": "^3.13|^4.0" }, "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/async": "^4.3 || ^3 || ^2", - "react/promise-timer": "^1.11" + "symfony/phpunit-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { "psr-4": { - "React\\Dns\\": "src/" - } + "Twig\\Extra\\Intl\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8589,145 +8993,146 @@ ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" } ], - "description": "Async DNS resolver for ReactPHP", + "description": "A Twig extension for Intl", + "homepage": "https://twig.symfony.com", "keywords": [ - "async", - "dns", - "dns-resolver", - "reactphp" + "intl", + "twig" ], "support": { - "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.13.0" + "source": "https://github.com/twigphp/intl-extra/tree/v3.22.1" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" } ], - "time": "2024-06-13T14:18:03+00:00" + "time": "2025-11-02T11:00:49+00:00" }, { - "name": "react/event-loop", - "version": "v1.5.0", + "name": "twig/twig", + "version": "v3.22.0", "source": { "type": "git", - "url": "https://github.com/reactphp/event-loop.git", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + "url": "https://github.com/twigphp/Twig.git", + "reference": "4509984193026de413baf4ba80f68590a7f2c51d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/4509984193026de413baf4ba80f68590a7f2c51d", + "reference": "4509984193026de413baf4ba80f68590a7f2c51d", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.1.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" - }, - "suggest": { - "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + "phpstan/phpstan": "^2.0", + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, "type": "library", "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], "psr-4": { - "React\\EventLoop\\": "src/" + "Twig\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" }, { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" + "name": "Twig Team", + "role": "Contributors" }, { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" } ], - "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", "keywords": [ - "asynchronous", - "event-loop" + "templating" ], "support": { - "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.22.0" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" } ], - "time": "2023-11-13T13:48:05+00:00" + "time": "2025-10-29T15:56:47+00:00" }, { - "name": "react/promise", - "version": "v3.2.0", + "name": "webmozart/assert", + "version": "1.11.0", "source": { "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": ">=7.1.0" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpstan/phpstan": "1.10.39 || 1.4.10", - "phpunit/phpunit": "^9.6 || ^7.5" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { - "React\\Promise\\": "src/" + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8736,75 +9141,73 @@ ], "authors": [ { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ - "promise", - "promises" + "assert", + "check", + "validate" ], "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v3.2.0" + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2024-05-24T10:39:05+00:00" - }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ { - "name": "react/socket", - "version": "v1.16.0", + "name": "captainhook/captainhook", + "version": "5.27.3", "source": { "type": "git", - "url": "https://github.com/reactphp/socket.git", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" + "url": "https://github.com/captainhook-git/captainhook.git", + "reference": "a4f836f6185b87066ce3388f6c944883eb248022" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "url": "https://api.github.com/repos/captainhook-git/captainhook/zipball/a4f836f6185b87066ce3388f6c944883eb248022", + "reference": "a4f836f6185b87066ce3388f6c944883eb248022", "shasum": "" }, "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.0", - "react/dns": "^1.13", - "react/event-loop": "^1.2", - "react/promise": "^3.2 || ^2.6 || ^1.2.1", - "react/stream": "^1.4" + "captainhook/secrets": "^0.9.4", + "ext-json": "*", + "ext-spl": "*", + "ext-xml": "*", + "php": ">=8.0", + "sebastianfeldmann/camino": "^0.9.2", + "sebastianfeldmann/cli": "^3.3", + "sebastianfeldmann/git": "^3.15.3", + "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0" + }, + "replace": { + "sebastianfeldmann/captainhook": "*" }, "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/async": "^4.3 || ^3.3 || ^2", - "react/promise-stream": "^1.4", - "react/promise-timer": "^1.11" + "composer/composer": "~1 || ^2.0", + "mikey179/vfsstream": "~1" }, + "bin": [ + "bin/captainhook" + ], "type": "library", + "extra": { + "captainhook": { + "config": "captainhook.json" + }, + "branch-alias": { + "dev-main": "6.0.x-dev" + } + }, "autoload": { "psr-4": { - "React\\Socket\\": "src/" + "CaptainHook\\App\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8813,73 +9216,55 @@ ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Sebastian Feldmann", + "email": "sf@sebastian-feldmann.info" } ], - "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "description": "PHP git hook manager", + "homepage": "https://php.captainhook.info/", "keywords": [ - "Connection", - "Socket", - "async", - "reactphp", - "stream" + "commit-msg", + "git", + "hooks", + "post-merge", + "pre-commit", + "pre-push", + "prepare-commit-msg" ], "support": { - "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.16.0" + "issues": "https://github.com/captainhook-git/captainhook/issues", + "source": "https://github.com/captainhook-git/captainhook/tree/5.27.3" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/sponsors/sebastianfeldmann", + "type": "github" } ], - "time": "2024-07-26T10:38:09+00:00" + "time": "2025-11-27T13:11:01+00:00" }, { - "name": "react/stream", - "version": "v1.4.0", + "name": "captainhook/secrets", + "version": "0.9.7", "source": { "type": "git", - "url": "https://github.com/reactphp/stream.git", - "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" + "url": "https://github.com/captainhook-git/secrets.git", + "reference": "d62c97f75f81ac98e22f1c282482bd35fa82f631" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", - "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "url": "https://api.github.com/repos/captainhook-git/secrets/zipball/d62c97f75f81ac98e22f1c282482bd35fa82f631", + "reference": "d62c97f75f81ac98e22f1c282482bd35fa82f631", "shasum": "" }, "require": { - "evenement/evenement": "^3.0 || ^2.0 || ^1.0", - "php": ">=5.3.8", - "react/event-loop": "^1.2" - }, - "require-dev": { - "clue/stream-filter": "~1.2", - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + "ext-mbstring": "*", + "php": ">=8.0" }, "type": "library", "autoload": { "psr-4": { - "React\\Stream\\": "src/" + "CaptainHook\\Secrets\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8888,457 +9273,481 @@ ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" + "name": "Sebastian Feldmann", + "email": "sf@sebastian-feldmann.info" } ], - "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "description": "Utility classes to detect secrets", "keywords": [ - "event-driven", - "io", - "non-blocking", - "pipe", - "reactphp", - "readable", - "stream", - "writable" + "commit-msg", + "keys", + "passwords", + "post-merge", + "prepare-commit-msg", + "secrets", + "tokens" ], "support": { - "issues": "https://github.com/reactphp/stream/issues", - "source": "https://github.com/reactphp/stream/tree/v1.4.0" + "issues": "https://github.com/captainhook-git/secrets/issues", + "source": "https://github.com/captainhook-git/secrets/tree/0.9.7" }, "funding": [ { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" + "url": "https://github.com/sponsors/sebastianfeldmann", + "type": "github" } ], - "time": "2024-06-11T12:45:25+00:00" + "time": "2025-04-08T07:10:48+00:00" }, { - "name": "sebastian/cli-parser", - "version": "3.0.2", + "name": "clue/ndjson-react", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" + "url": "https://github.com/clue/reactphp-ndjson.git", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", - "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=5.3", + "react/stream": "^1.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", + "react/event-loop": "^1.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Clue\\React\\NDJson\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Christian Lück", + "email": "christian@clue.engineering" } ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", + "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", + "homepage": "https://github.com/clue/reactphp-ndjson", + "keywords": [ + "NDJSON", + "json", + "jsonlines", + "newline", + "reactphp", + "streaming" + ], "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" + "issues": "https://github.com/clue/reactphp-ndjson/issues", + "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", "type": "github" } ], - "time": "2024-07-03T04:41:36+00:00" + "time": "2022-12-23T10:58:28+00:00" }, { - "name": "sebastian/code-unit", - "version": "3.0.3", + "name": "composer/semver", + "version": "3.4.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" + "url": "https://github.com/composer/semver.git", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", - "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { - "php": ">=8.2" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^11.5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Composer\\Semver\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "security": "https://github.com/sebastianbergmann/code-unit/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.4" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", "type": "github" } ], - "time": "2025-03-19T07:56:08+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "4.0.1", + "name": "composer/xdebug-handler", + "version": "3.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "183a9b2632194febd219bb9246eee421dad8d45e" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", - "reference": "183a9b2632194febd219bb9246eee421dad8d45e", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { - "php": ">=8.2" + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2024-07-03T04:45:54+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { - "name": "sebastian/comparator", - "version": "6.3.1", + "name": "evenement/evenement", + "version": "v3.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959" + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/diff": "^6.0", - "sebastian/exporter": "^6.0" + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^11.4" - }, - "suggest": { - "ext-bcmath": "For comparing BcMath\\Number objects" + "phpunit/phpunit": "^9 || ^6" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.3-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Evenement\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", + "description": "Événement is a very simple event dispatching library for PHP", "keywords": [ - "comparator", - "compare", - "equality" + "event-dispatcher", + "event-emitter" ], "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1" + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-03-07T06:57:01+00:00" + "time": "2023-08-08T05:53:35+00:00" }, { - "name": "sebastian/complexity", - "version": "4.0.1", + "name": "fidry/cpu-core-counter", + "version": "1.3.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", - "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { - "nikic/php-parser": "^5.0", - "php": ">=8.2" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" } ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/theofidry", "type": "github" } ], - "time": "2024-07-03T04:49:50+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { - "name": "sebastian/diff", - "version": "6.0.2", + "name": "friendsofphp/php-cs-fixer", + "version": "v3.90.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "ad732c2e9299c9743f9c55ae53cc0e7642ab1155" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/ad732c2e9299c9743f9c55ae53cc0e7642ab1155", + "reference": "ad732c2e9299c9743f9c55ae53cc0e7642ab1155", "shasum": "" }, "require": { - "php": ">=8.2" + "clue/ndjson-react": "^1.3", + "composer/semver": "^3.4", + "composer/xdebug-handler": "^3.0.5", + "ext-filter": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "fidry/cpu-core-counter": "^1.3", + "php": "^7.4 || ^8.0", + "react/child-process": "^0.6.6", + "react/event-loop": "^1.5", + "react/socket": "^1.16", + "react/stream": "^1.4", + "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", + "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.33", + "symfony/polyfill-php80": "^1.33", + "symfony/polyfill-php81": "^1.33", + "symfony/polyfill-php84": "^1.33", + "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0", + "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^11.0", - "symfony/process": "^4.2 || ^5" + "facile-it/paraunit": "^1.3.1 || ^2.7", + "infection/infection": "^0.31.0", + "justinrainbow/json-schema": "^6.5", + "keradus/cli-executor": "^2.2", + "mikey179/vfsstream": "^1.6.12", + "php-coveralls/php-coveralls": "^2.9", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", + "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34", + "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2 || ^8.0", + "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2 || ^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "exclude-from-classmap": [ + "src/Fixer/Internal/*" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", + "description": "A tool to automatically fix PHP code style", "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" + "Static code analysis", + "fixer", + "standards", + "static analysis" ], "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.90.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/keradus", "type": "github" } ], - "time": "2024-07-03T04:53:05+00:00" + "time": "2025-11-20T15:15:16+00:00" }, { - "name": "sebastian/environment", - "version": "7.2.1", + "name": "mikey179/vfsstream", + "version": "v1.6.12", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" + "url": "https://github.com/bovigo/vfsStream.git", + "reference": "fe695ec993e0a55c3abdda10a9364eb31c6f1bf0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", - "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", + "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/fe695ec993e0a55c3abdda10a9364eb31c6f1bf0", + "reference": "fe695ec993e0a55c3abdda10a9364eb31c6f1bf0", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=7.1.0" }, "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "suggest": { - "ext-posix": "*" + "phpunit/phpunit": "^7.5||^8.5||^9.6", + "yoast/phpunit-polyfills": "^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.2-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-0": { + "org\\bovigo\\vfs\\": "src/main/php" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9346,528 +9755,598 @@ ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Frank Kleine", + "homepage": "http://frankkleine.de/", + "role": "Developer" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], + "description": "Virtual file system to mock the real file system in unit tests.", + "homepage": "http://vfs.bovigo.org/", "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" + "issues": "https://github.com/bovigo/vfsStream/issues", + "source": "https://github.com/bovigo/vfsStream/tree/master", + "wiki": "https://github.com/bovigo/vfsStream/wiki" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", - "type": "tidelift" - } - ], - "time": "2025-05-21T11:55:47+00:00" + "time": "2024-08-29T18:43:31+00:00" }, { - "name": "sebastian/exporter", - "version": "6.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" - }, + "name": "phpstan/phpstan", + "version": "2.1.32", "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e126cad1e30a99b137b8ed75a85a676450ebb227", + "reference": "e126cad1e30a99b137b8ed75a85a676450ebb227", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/recursion-context": "^6.0" + "php": "^7.4|^8.0" }, - "require-dev": { - "phpunit/phpunit": "^11.3" + "conflict": { + "phpstan/phpstan-shim": "*" }, + "bin": [ + "phpstan", + "phpstan.phar" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } + "MIT" ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", + "description": "PHPStan - PHP Static Analysis Tool", "keywords": [ - "export", - "exporter" + "dev", + "static analysis" ], "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", "type": "github" } ], - "time": "2024-12-05T09:17:50+00:00" + "time": "2025-11-11T15:18:17+00:00" }, { - "name": "sebastian/global-state", - "version": "7.0.2", + "name": "react/cache", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "3be331570a721f9a4b5917f4209773de17f747d7" + "url": "https://github.com/reactphp/cache.git", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", - "reference": "3be331570a721f9a4b5917f4209773de17f747d7", + "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", "shasum": "" }, "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" }, "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "React\\Cache\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Snapshotting of global state", - "homepage": "https://www.github.com/sebastianbergmann/global-state", + "description": "Async, Promise-based cache interface for ReactPHP", "keywords": [ - "global state" + "cache", + "caching", + "promise", + "reactphp" ], "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" + "issues": "https://github.com/reactphp/cache/issues", + "source": "https://github.com/reactphp/cache/tree/v1.2.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2024-07-03T04:57:36+00:00" + "time": "2022-11-30T15:59:55+00:00" }, { - "name": "sebastian/lines-of-code", - "version": "3.0.1", + "name": "react/child-process", + "version": "v0.6.6", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" + "url": "https://github.com/reactphp/child-process.git", + "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", - "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159", + "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159", "shasum": "" }, "require": { - "nikic/php-parser": "^5.0", - "php": ">=8.2" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/event-loop": "^1.2", + "react/stream": "^1.4" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/socket": "^1.16", + "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "React\\ChildProcess\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "description": "Event-driven library for executing child processes with ReactPHP.", + "keywords": [ + "event-driven", + "process", + "reactphp" + ], "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" + "issues": "https://github.com/reactphp/child-process/issues", + "source": "https://github.com/reactphp/child-process/tree/v0.6.6" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2024-07-03T04:58:38+00:00" + "time": "2025-01-01T16:37:48+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "6.0.1", + "name": "react/dns", + "version": "v1.14.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "f5b498e631a74204185071eb41f33f38d64608aa" + "url": "https://github.com/reactphp/dns.git", + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", - "reference": "f5b498e631a74204185071eb41f33f38d64608aa", + "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3", + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3", "shasum": "" }, "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.7 || ^1.2.1" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "React\\Dns\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" + "issues": "https://github.com/reactphp/dns/issues", + "source": "https://github.com/reactphp/dns/tree/v1.14.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2024-07-03T05:00:13+00:00" + "time": "2025-11-18T19:34:28+00:00" }, { - "name": "sebastian/object-reflector", - "version": "4.0.1", + "name": "react/event-loop", + "version": "v1.6.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" + "url": "https://github.com/reactphp/event-loop.git", + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", - "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a", + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" }, + "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "React\\EventLoop\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.6.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2024-07-03T05:01:32+00:00" + "time": "2025-11-17T20:46:25+00:00" }, { - "name": "sebastian/recursion-context", - "version": "6.0.2", + "name": "react/promise", + "version": "v3.3.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" + "url": "https://github.com/reactphp/promise.git", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", + "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=7.1.0" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpstan/phpstan": "1.12.28 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" }, { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.3.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2024-07-03T05:10:34+00:00" + "time": "2025-08-19T18:57:03+00:00" }, { - "name": "sebastian/type", - "version": "5.1.2", + "name": "react/socket", + "version": "v1.17.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e" + "url": "https://github.com/reactphp/socket.git", + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", + "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08", + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08", "shasum": "" }, "require": { - "php": ">=8.2" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.13", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3.3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "React\\Socket\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "keywords": [ + "Connection", + "Socket", + "async", + "reactphp", + "stream" + ], "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.1.2" + "issues": "https://github.com/reactphp/socket/issues", + "source": "https://github.com/reactphp/socket/tree/v1.17.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2025-03-18T13:35:50+00:00" + "time": "2025-11-19T20:47:34+00:00" }, { - "name": "sebastian/version", - "version": "5.0.2", + "name": "react/stream", + "version": "v1.4.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", - "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", "shasum": "" }, "require": { - "php": ">=8.2" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" }, + "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "React\\Stream\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.4.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2024-10-09T05:16:32+00:00" + "time": "2024-06-11T12:45:25+00:00" }, { "name": "sebastianfeldmann/camino", @@ -9985,16 +10464,16 @@ }, { "name": "sebastianfeldmann/git", - "version": "3.14.3", + "version": "3.15.3", "source": { "type": "git", "url": "https://github.com/sebastianfeldmann/git.git", - "reference": "22584df8df01d95b0700000cfd855779fae7d8ea" + "reference": "601fd0fbb7d1a784e009a4f8f40975e777ad334a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/22584df8df01d95b0700000cfd855779fae7d8ea", - "reference": "22584df8df01d95b0700000cfd855779fae7d8ea", + "url": "https://api.github.com/repos/sebastianfeldmann/git/zipball/601fd0fbb7d1a784e009a4f8f40975e777ad334a", + "reference": "601fd0fbb7d1a784e009a4f8f40975e777ad334a", "shasum": "" }, "require": { @@ -10035,7 +10514,7 @@ ], "support": { "issues": "https://github.com/sebastianfeldmann/git/issues", - "source": "https://github.com/sebastianfeldmann/git/tree/3.14.3" + "source": "https://github.com/sebastianfeldmann/git/tree/3.15.3" }, "funding": [ { @@ -10043,72 +10522,20 @@ "type": "github" } ], - "time": "2025-06-05T16:05:10+00:00" - }, - { - "name": "staabm/side-effects-detector", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/staabm/side-effects-detector.git", - "reference": "d8334211a140ce329c13726d4a715adbddd0a163" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", - "reference": "d8334211a140ce329c13726d4a715adbddd0a163", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^1.12.6", - "phpunit/phpunit": "^9.6.21", - "symfony/var-dumper": "^5.4.43", - "tomasvotruba/type-coverage": "1.0.0", - "tomasvotruba/unused-public": "1.0.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "lib/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A static analysis tool to detect side effects in PHP code", - "keywords": [ - "static analysis" - ], - "support": { - "issues": "https://github.com/staabm/side-effects-detector/issues", - "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" - }, - "funding": [ - { - "url": "https://github.com/staabm", - "type": "github" - } - ], - "time": "2024-10-20T05:08:20+00:00" + "time": "2025-11-20T21:33:45+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "afb9a8038025e5dbc657378bfab9198d75f10fca" + "reference": "b38026df55197f9e39a44f3215788edf83187b80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/afb9a8038025e5dbc657378bfab9198d75f10fca", - "reference": "afb9a8038025e5dbc657378bfab9198d75f10fca", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80", + "reference": "b38026df55197f9e39a44f3215788edf83187b80", "shasum": "" }, "require": { @@ -10146,7 +10573,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.3.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.4.0" }, "funding": [ { @@ -10157,16 +10584,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-04T13:12:05+00:00" + "time": "2025-11-12T15:39:26+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.32.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -10222,7 +10653,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0" }, "funding": [ { @@ -10233,6 +10664,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -10241,29 +10676,38 @@ "time": "2024-09-09T11:45:10+00:00" }, { - "name": "symfony/process", - "version": "v7.3.0", + "name": "symfony/polyfill-php84", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=7.2" }, "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Process\\": "" + "Symfony\\Polyfill\\Php84\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -10272,18 +10716,24 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Executes commands in sub-processes", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], "support": { - "source": "https://github.com/symfony/process/tree/v7.3.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" }, "funding": [ { @@ -10294,35 +10744,38 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-17T09:11:12+00:00" + "time": "2025-06-24T13:30:11+00:00" }, { - "name": "symfony/stopwatch", - "version": "v7.3.0", + "name": "symfony/process", + "version": "v7.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" + "url": "https://github.com/symfony/process.git", + "reference": "7ca8dc2d0dcf4882658313aba8be5d9fd01026c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", - "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "url": "https://api.github.com/repos/symfony/process/zipball/7ca8dc2d0dcf4882658313aba8be5d9fd01026c8", + "reference": "7ca8dc2d0dcf4882658313aba8be5d9fd01026c8", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/service-contracts": "^2.5|^3" + "php": ">=8.2" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" + "Symfony\\Component\\Process\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -10342,10 +10795,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides a way to profile code", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.3.0" + "source": "https://github.com/symfony/process/tree/v7.4.0" }, "funding": [ { @@ -10356,62 +10809,82 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-24T10:49:57+00:00" + "time": "2025-10-16T11:21:06+00:00" }, { - "name": "theseer/tokenizer", - "version": "1.2.3", + "name": "symfony/stopwatch", + "version": "v7.4.0", "source": { "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "url": "https://github.com/symfony/stopwatch.git", + "reference": "8a24af0a2e8a872fb745047180649b8418303084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8a24af0a2e8a872fb745047180649b8418303084", + "reference": "8a24af0a2e8a872fb745047180649b8418303084", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" }, "type": "library", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/symfony/stopwatch/tree/v7.4.0" }, "funding": [ { - "url": "https://github.com/theseer", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-08-04T07:05:15+00:00" } ], "aliases": [], diff --git a/docs/development/devguide/tutorial/README.md b/docs/development/devguide/tutorial/README.md deleted file mode 100644 index 569149504e7d..000000000000 --- a/docs/development/devguide/tutorial/README.md +++ /dev/null @@ -1,3 +0,0 @@ -This file is stored here to show the tutorial's future structure. - -Its content is currently work in progress and will be available asap. \ No newline at end of file diff --git a/docs/development/devguide/tutorial/01-community/01-interaction.md b/docs/development/tutorial/01-community/01-interaction.md similarity index 100% rename from docs/development/devguide/tutorial/01-community/01-interaction.md rename to docs/development/tutorial/01-community/01-interaction.md diff --git a/docs/development/devguide/tutorial/01-community/02-resources.md b/docs/development/tutorial/01-community/02-resources.md similarity index 100% rename from docs/development/devguide/tutorial/01-community/02-resources.md rename to docs/development/tutorial/01-community/02-resources.md diff --git a/docs/development/devguide/tutorial/01-community/03-development-process.md b/docs/development/tutorial/01-community/03-development-process.md similarity index 100% rename from docs/development/devguide/tutorial/01-community/03-development-process.md rename to docs/development/tutorial/01-community/03-development-process.md diff --git a/docs/development/devguide/tutorial/01-community/04-type-of-docs.md b/docs/development/tutorial/01-community/04-type-of-docs.md similarity index 100% rename from docs/development/devguide/tutorial/01-community/04-type-of-docs.md rename to docs/development/tutorial/01-community/04-type-of-docs.md diff --git a/docs/development/devguide/tutorial/02-tools/01-environment.md b/docs/development/tutorial/02-tools/01-environment.md similarity index 100% rename from docs/development/devguide/tutorial/02-tools/01-environment.md rename to docs/development/tutorial/02-tools/01-environment.md diff --git a/docs/development/devguide/tutorial/02-tools/02-dependencies.md b/docs/development/tutorial/02-tools/02-dependencies.md similarity index 100% rename from docs/development/devguide/tutorial/02-tools/02-dependencies.md rename to docs/development/tutorial/02-tools/02-dependencies.md diff --git a/docs/development/devguide/tutorial/02-tools/03-setup.md b/docs/development/tutorial/02-tools/03-setup.md similarity index 100% rename from docs/development/devguide/tutorial/02-tools/03-setup.md rename to docs/development/tutorial/02-tools/03-setup.md diff --git a/docs/development/devguide/tutorial/02-tools/04-toolstack.md b/docs/development/tutorial/02-tools/04-toolstack.md similarity index 100% rename from docs/development/devguide/tutorial/02-tools/04-toolstack.md rename to docs/development/tutorial/02-tools/04-toolstack.md diff --git a/docs/development/devguide/tutorial/03-development/01-directories.md b/docs/development/tutorial/03-development/01-directories.md similarity index 100% rename from docs/development/devguide/tutorial/03-development/01-directories.md rename to docs/development/tutorial/03-development/01-directories.md diff --git a/docs/development/devguide/tutorial/03-development/02-versioning.md b/docs/development/tutorial/03-development/02-versioning.md similarity index 100% rename from docs/development/devguide/tutorial/03-development/02-versioning.md rename to docs/development/tutorial/03-development/02-versioning.md diff --git a/docs/development/devguide/tutorial/03-development/03-endpoints.md b/docs/development/tutorial/03-development/03-endpoints.md similarity index 100% rename from docs/development/devguide/tutorial/03-development/03-endpoints.md rename to docs/development/tutorial/03-development/03-endpoints.md diff --git a/docs/development/devguide/tutorial/04-coding/01-components.md b/docs/development/tutorial/04-coding/01-components.md similarity index 100% rename from docs/development/devguide/tutorial/04-coding/01-components.md rename to docs/development/tutorial/04-coding/01-components.md diff --git a/docs/development/devguide/tutorial/04-coding/02-control.md b/docs/development/tutorial/04-coding/02-control.md similarity index 100% rename from docs/development/devguide/tutorial/04-coding/02-control.md rename to docs/development/tutorial/04-coding/02-control.md diff --git a/docs/development/devguide/tutorial/04-coding/03-repository.md b/docs/development/tutorial/04-coding/03-repository.md similarity index 100% rename from docs/development/devguide/tutorial/04-coding/03-repository.md rename to docs/development/tutorial/04-coding/03-repository.md diff --git a/docs/development/devguide/tutorial/04-coding/04-ui-framework.md b/docs/development/tutorial/04-coding/04-ui-framework.md similarity index 100% rename from docs/development/devguide/tutorial/04-coding/04-ui-framework.md rename to docs/development/tutorial/04-coding/04-ui-framework.md diff --git a/docs/development/devguide/tutorial/04-coding/05-ui-inputs.md b/docs/development/tutorial/04-coding/05-ui-inputs.md similarity index 100% rename from docs/development/devguide/tutorial/04-coding/05-ui-inputs.md rename to docs/development/tutorial/04-coding/05-ui-inputs.md diff --git a/docs/development/devguide/tutorial/04-coding/06-globalscreen.md b/docs/development/tutorial/04-coding/06-globalscreen.md similarity index 100% rename from docs/development/devguide/tutorial/04-coding/06-globalscreen.md rename to docs/development/tutorial/04-coding/06-globalscreen.md diff --git a/docs/development/devguide/tutorial/04-coding/07-persistence.md b/docs/development/tutorial/04-coding/07-persistence.md similarity index 100% rename from docs/development/devguide/tutorial/04-coding/07-persistence.md rename to docs/development/tutorial/04-coding/07-persistence.md diff --git a/docs/development/devguide/tutorial/04-coding/08-persistence-data.md b/docs/development/tutorial/04-coding/08-persistence-data.md similarity index 100% rename from docs/development/devguide/tutorial/04-coding/08-persistence-data.md rename to docs/development/tutorial/04-coding/08-persistence-data.md diff --git a/docs/development/devguide/tutorial/04-coding/TodoExample/src/Setup/Agent.php b/docs/development/tutorial/04-coding/TodoExample/src/Setup/Agent.php similarity index 100% rename from docs/development/devguide/tutorial/04-coding/TodoExample/src/Setup/Agent.php rename to docs/development/tutorial/04-coding/TodoExample/src/Setup/Agent.php diff --git a/docs/development/devguide/tutorial/04-coding/TodoExample/src/Setup/TodoDBUpdateSteps.php b/docs/development/tutorial/04-coding/TodoExample/src/Setup/TodoDBUpdateSteps.php similarity index 100% rename from docs/development/devguide/tutorial/04-coding/TodoExample/src/Setup/TodoDBUpdateSteps.php rename to docs/development/tutorial/04-coding/TodoExample/src/Setup/TodoDBUpdateSteps.php diff --git a/docs/development/devguide/tutorial/04-coding/TodoExample/src/TodoItem.php b/docs/development/tutorial/04-coding/TodoExample/src/TodoItem.php similarity index 100% rename from docs/development/devguide/tutorial/04-coding/TodoExample/src/TodoItem.php rename to docs/development/tutorial/04-coding/TodoExample/src/TodoItem.php diff --git a/docs/development/devguide/tutorial/04-coding/TodoExample/src/TodoRepository.php b/docs/development/tutorial/04-coding/TodoExample/src/TodoRepository.php similarity index 100% rename from docs/development/devguide/tutorial/04-coding/TodoExample/src/TodoRepository.php rename to docs/development/tutorial/04-coding/TodoExample/src/TodoRepository.php diff --git a/docs/development/devguide/tutorial/05-contributing/01-bugfixes.md b/docs/development/tutorial/05-contributing/01-bugfixes.md similarity index 100% rename from docs/development/devguide/tutorial/05-contributing/01-bugfixes.md rename to docs/development/tutorial/05-contributing/01-bugfixes.md diff --git a/docs/development/devguide/tutorial/05-contributing/02-plugin.md b/docs/development/tutorial/05-contributing/02-plugin.md similarity index 100% rename from docs/development/devguide/tutorial/05-contributing/02-plugin.md rename to docs/development/tutorial/05-contributing/02-plugin.md diff --git a/docs/development/devguide/tutorial/05-contributing/03-ui-component.md b/docs/development/tutorial/05-contributing/03-ui-component.md similarity index 100% rename from docs/development/devguide/tutorial/05-contributing/03-ui-component.md rename to docs/development/tutorial/05-contributing/03-ui-component.md diff --git a/docs/development/devguide/tutorial/05-contributing/04-core-component.md b/docs/development/tutorial/05-contributing/04-core-component.md similarity index 100% rename from docs/development/devguide/tutorial/05-contributing/04-core-component.md rename to docs/development/tutorial/05-contributing/04-core-component.md diff --git a/docs/development/devguide/tutorial/05-contributing/README.md b/docs/development/tutorial/05-contributing/README.md similarity index 100% rename from docs/development/devguide/tutorial/05-contributing/README.md rename to docs/development/tutorial/05-contributing/README.md diff --git a/docs/development/devguide/tutorial/06-extending/01-xml-handling.md b/docs/development/tutorial/06-extending/01-xml-handling.md similarity index 100% rename from docs/development/devguide/tutorial/06-extending/01-xml-handling.md rename to docs/development/tutorial/06-extending/01-xml-handling.md diff --git a/docs/development/devguide/tutorial/06-extending/02-webservices.md b/docs/development/tutorial/06-extending/02-webservices.md similarity index 100% rename from docs/development/devguide/tutorial/06-extending/02-webservices.md rename to docs/development/tutorial/06-extending/02-webservices.md diff --git a/docs/development/devguide/README.md b/docs/development/tutorial/README.md similarity index 100% rename from docs/development/devguide/README.md rename to docs/development/tutorial/README.md diff --git a/docs/development/devguide/template-tutorial-article.md b/docs/development/tutorial/template-tutorial-article.md similarity index 100% rename from docs/development/devguide/template-tutorial-article.md rename to docs/development/tutorial/template-tutorial-article.md diff --git a/ilias_version.php b/ilias_version.php index ec310ff7a1f1..02418c703409 100755 --- a/ilias_version.php +++ b/ilias_version.php @@ -26,5 +26,5 @@ * * @package ilias-core */ -const ILIAS_VERSION = "11.0_alpha"; +const ILIAS_VERSION = "11.0_beta1 2025-10-29"; const ILIAS_VERSION_NUMERIC = "11.0"; // since version ILIAS 6 this must be always x.y: x and y are numbers diff --git a/lang/customizing/README.md b/lang/customizing/README.md index 2a0ff44d4a75..d1f7ff1fe515 100644 --- a/lang/customizing/README.md +++ b/lang/customizing/README.md @@ -3,8 +3,8 @@ You may change terms used in the user interface of ILIAS. To do this, use the same format as is used in the language files in directory `/lang`. Store the values to be overwritten in files ending with `.lang.local` and put them into -the `/lang/Customizing` directory. +the `/lang/customizing` directory. ``` -/lang/Customizing/ilias_<lang_code>.lang.local +/lang/customizing/ilias_<lang_code>.lang.local ``` diff --git a/lang/ilias_ar.lang b/lang/ilias_ar.lang index e1126996d6be..5d7f5b8a8724 100644 --- a/lang/ilias_ar.lang +++ b/lang/ilias_ar.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Export evaluation data as -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:# (PDF) شهادة assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Comma Separated Value (CSV) assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Please select at least one mark step to d assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Your previous answers will not be used as default values in future test passes assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#نعم، اريد انهاء الاخت assessment#:#tst_finish_confirm_cancel_button#:#No, go back to the previous question assessment#:#tst_finish_confirmation_question#:#You are going to finish this test and reach the maximum number of allowed test passes. You won't be able to enter this test again to change your answers. Do you really want to finish the test? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Finished assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Hide question list assessment#:#tst_highscore_achieved_ts#:#Show date of test assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown. assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Show score assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown. assessment#:#tst_highscore_top_num#:#Number of ranks assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table. -assessment#:#tst_highscore_top_num_unit#:#entries assessment#:#tst_highscore_top_table#:#Show table 'top ranking' assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown. assessment#:#tst_highscore_wtime#:#Show working time @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Presentation Settings assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Test & Assessment Print View assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Max. Processing Time assessment#:#tst_processing_time_desc#:#The maximum processing time starts from the time when a user starts a test for the first time and ends after the expiration of the entered hours, minutes and seconds. @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Show Test Results assessment#:#tst_show_side_list#:#Show question list aside assessment#:#tst_show_solution_answers_only#:#Results print view (answers only) assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Show Solutions in Test Results -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Show Answer-Specific Feedback in Test Results @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Use Previous Answers assessment#:#tst_use_previous_answers_description#:#If checked, a participant may choose to use the previous answers as default values in future test passes, otherwise the previous answers are not shown in future test passes. -assessment#:#tst_use_previous_answers_user#:#Use my previous answers as default values in future test passes assessment#:#tst_user_finished_test#:#User finished test (%s) assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_bg.lang b/lang/ilias_bg.lang index c5cd1b785475..968558a32661 100644 --- a/lang/ilias_bg.lang +++ b/lang/ilias_bg.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Експортиране на данните за оценяването като -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certificate (PDF)###25 02 2007 new variable assessment#:#exp_type_excel#:#Microsoft Excel###23 Mar 2006 content changed -assessment#:#exp_type_spss#:#Стойност отделена със запетая (CSV) assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Моля, изберете поне ед assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Your previous answers will not be used as default values in future test passes###25 02 2007 new variable assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring###28 08 2012 new variable assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Yes, I want to finish the test###01 Mar assessment#:#tst_finish_confirm_cancel_button#:#No, go back to the previous answer###01 Mar 2006 new variable assessment#:#tst_finish_confirmation_question#:#You are going to finish this test and reach the maximum number of allowed test passes. You won't be able to enter this test again to change your answers. Do you really want to finish the test?###01 Mar 2006 new variable assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Finished###06 09 2006 new variable assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Hide question list###24 07 2009 new variable assessment#:#tst_highscore_achieved_ts#:#Show date of test###28 08 2012 new variable assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown.###28 08 2012 new variable assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Show score###28 08 2012 new variable assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown.###28 08 2012 new variable assessment#:#tst_highscore_top_num#:#Number of ranks###28 08 2012 new variable assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table.###28 08 2012 new variable -assessment#:#tst_highscore_top_num_unit#:#entries###28 08 2012 new variable assessment#:#tst_highscore_top_table#:#Show table 'top ranking'###28 08 2012 new variable assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown.###28 08 2012 new variable assessment#:#tst_highscore_wtime#:#Show working time###28 08 2012 new variable @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Presentation Settings###12 06 2011 new variable assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Test & Assessment Print View###06 09 2006 new variable assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Макс. време за обработка assessment#:#tst_processing_time_desc#:#The maximum processing time starts from the time when a user starts a test and ends after the expiration of the entered hours, minutes and seconds.###09 06 2007 new variable @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Показване на резултатите assessment#:#tst_show_side_list#:#Show question list aside###24 07 2009 new variable assessment#:#tst_show_solution_answers_only#:#Results print view (answers only)###14 11 2007 new variable assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Show Solutions in Test Results###25 02 2007 new variable -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Show Answer-Specific Feedback in Test Results###10 05 2007 new variable @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Use Previous Answers###25 02 2007 new variable assessment#:#tst_use_previous_answers_description#:#If checked, a participant may choose to use the previous answers as default values in future test passes, otherwise the previous answers are not shown in future test passes###25 02 2007 new variable -assessment#:#tst_use_previous_answers_user#:#Use my previous answers as default values in future test passes###25 02 2007 new variable assessment#:#tst_user_finished_test#:#User finished test (%s)###24 07 2009 new variable assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###30 04 2024 new variable book#:#book_booking_information#:#Информация book#:#book_booking_objects#:#Booking Objects###31 03 2023 new variable book#:#book_booking_reminders#:#Предстоящи резервации -book#:#book_bookings_per_user#:#Bookings per User###31 03 2023 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###30 04 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###30 04 2024 new variable book#:#book_bulk_data#:#Item Data###30 04 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###21 05 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###21 05 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_cs.lang b/lang/ilias_cs.lang index ad0adab58649..b5ae9058d4d7 100644 --- a/lang/ilias_cs.lang +++ b/lang/ilias_cs.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS ID průchodu testem assessment#:#examid_in_test_res_desc#:#ILIAS ID průchodu testem bude zahrnuto do výsledků testu. assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Exportovat data hodnocení jako -assessment#:#exp_file_created#:#Exportní soubor vytvořen assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certifikát (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Desetinnou čárkou oddělená hodnota (CSV) assessment#:#expected_result_type#:#Očekávaný typ výsledku assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Vyberte alespoň jednu známku kroku ke s assessment#:#tst_derive_new_pool#:#Odvodit nový zásobník otázek assessment#:#tst_derive_new_pools#:#Odvodit nové zásobníky otázek assessment#:#tst_dont_show_msg_again_in_current_session#:#Znovu nezobrazovat tuto zprávu v mé aktuální relaci. -assessment#:#tst_dont_use_previous_answers#:#Vaše předchozí odpovědi nebudou použity jako výchozí hodnoty v budoucích průchodech testem assessment#:#tst_edit_competence_assign#:#Upravit vlastnosti přiřazení assessment#:#tst_edit_scoring#:#Upravit hodnocení assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Ano, chci tento test ukončit assessment#:#tst_finish_confirm_cancel_button#:#Ne, jít zpět na předchozí otázku assessment#:#tst_finish_confirmation_question#:#Hodláte ukončit tento test a dosáhl(a) jste maximálního počtu povolených průchodů testem. Nebudete již moci do tohoto testu vstoupit znovu a změnit své odpovědi. Upravdu chcete tento test ukončit? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#Žádný e-mail assessment#:#tst_finished#:#Ukončeno assessment#:#tst_form_dynamic_question_set_config#:#Pokračuje výběr otázek assessment#:#tst_gap_analysis#:#Analýza mezer @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Skrýt seznam otázek assessment#:#tst_highscore_achieved_ts#:#Zobrazit datum testu assessment#:#tst_highscore_achieved_ts_description#:#Kontroluje, zda sloupec s datem testu má být zobrazen. assessment#:#tst_highscore_all_tables#:#Všechna hodnocení @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Zobrazit hodnocení assessment#:#tst_highscore_score_description#:#Řídí, zda sloupec s hodnocením má být zobrazen. assessment#:#tst_highscore_top_num#:#Číslo umístění assessment#:#tst_highscore_top_num_description#:#Řídí, kolik pořadí má být zahrnuto v tabulce nejlepších umístění. -assessment#:#tst_highscore_top_num_unit#:#vstupy assessment#:#tst_highscore_top_table#:#Zobrazit tabulku 'nejlepší umístění' assessment#:#tst_highscore_top_table_description#:#Řídí, zda tabulka 'nejlepší umístění' má být zobrazena. assessment#:#tst_highscore_wtime#:#Zobrazit pracovní čas @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Nezodpovězené otázky budou odloženy na k assessment#:#tst_presentation_properties#:#Nastavení prezentace assessment#:#tst_presentation_settings_section#:#Prezentace assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Zobrazit přehled testu a hodnocení assessment#:#tst_proceed#:#Pokračovat assessment#:#tst_processing_time#:#Max. čas zpracování assessment#:#tst_processing_time_desc#:#Maximum času na zpracování testu začíná okamžikem prvního startu uživatele a končí po vypršení vložené periody času. Je-li použita tato volba, možnost přerušit test by měla být deaktivována (viz "Nastavení sekvence") protože přerušení testu nezastavuje počitadlo maximální doby zpracování. @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Zobrazit výsledky testu assessment#:#tst_show_side_list#:#Zobrazit boční seznam otázek assessment#:#tst_show_solution_answers_only#:#Přehled výsledků (jen odpovědi) assessment#:#tst_show_solution_answers_only_desc#:#Je-li vybráno, obsah ILIAS, který umístíte kolem otázky pomocí stránky záložky „Upravit obsah“, nebude viditelný ve výtisku. Pokud chcete ušetřit místo na papíru, vyberte tuto možnost. -assessment#:#tst_show_solution_compare#:#Porovnat odpovědi s řešením v seznamu odpovědí. -assessment#:#tst_show_solution_compare_desc#:#Účastníkům je představen přehled srovnávající jejich vlastní odpovědi s nejlepšími řešeními. Povšimněte si, že toto zobrazení se zobrazí v „Podrobných výsledcích“, ke kterým lze přistupovat pomocí tlačítka „Zobrazit výsledky testu“ v záložce „Informace“. Nebude zobrazen v tisknutelném „seznamu odpovědí“, i když je zde provedeno nastavení. -assessment#:#tst_show_solution_details#:#Zobrazit řešení ve výsledcích testu -assessment#:#tst_show_solution_details_desc#:#Je-li vybráno, je účastníkům v prezentaci výsledků testů k dispozici podrobné řešení otázek. To zahrnuje přesné bodování každé odpovědi, jinak je zobrazen pouze přehled s nadpisy otázek a dosažené body. assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Zobrazit odpovědi-specifický ohlas ve výsledcích testu @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Způsobilosti nejsou s assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#Nejméně jedna ze způsobilostí, kterou se zabývá tento test, není aktivována minimálním požadovaným počtem otázek.<br />Požadovaný počet otázek: %s assessment#:#tst_skl_level_thresholds_link#:#Konfigurace prahových hodnot způsobilosti assessment#:#tst_skl_level_thresholds_missing#:#Chybí prahové hodnoty pro příslušné způsobilosti! -assessment#:#tst_skl_res_interpretation_hint_msg#:#Mějte na paměti, že výsledky způsobilosti z jednoho testu mají omezený význam. Čím více informací je shromážděno ke způsobilosti, tím platnější bude význam. Pokud existují jednotlivé způsobilosti bez jakéhokoli vstupu, je možné shromáždit méně informací. assessment#:#tst_skl_sub_tab_thresholds#:#Prahové hodnoty způsobilosti assessment#:#tst_sol_comp_expressions#:#Srovnávací výrazy assessment#:#tst_solution_compare_cfg#:#Konfigurace pro porovnání řešení @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#Předem nastavená odpověď je s assessment#:#tst_unchanged_order_is_correct#:#Předem nastavené uspořádání je správné assessment#:#tst_use_previous_answers#:#Použít předchozí odpovědi assessment#:#tst_use_previous_answers_description#:#Pokud je vybráno, účastník může zvolit použití předchozích odpovědí jako výchozích hodnot v dalších průchodech testem, jinak předchozí odpovědi nebudou v dalších průchodech testem zobrazeny. -assessment#:#tst_use_previous_answers_user#:#Použít mé předchozí odpovědi jako výchozí hodnoty v budoucích průchodech testem assessment#:#tst_user_finished_test#:#Uživatel ukončil test (%s) assessment#:#tst_view_competence_assign#:#Zobrazit vlastnosti přiřazení assessment#:#tst_virtual_pass_header_lo_initial#:#Výsledky počátečního testu pro cíle učení<br />%s @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Informace book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Nadcházející rezervace -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Vezměte prosím na vědomí, že můžete zpřístupnit pouze jeden soubor na jeden typ (XML, HTML, SCORM). lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Ověřování se nezdařilo, nebyl zadán žádný platný spotřebitelský klíč. lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Upravit spotřebitele LTI lti#:#lti_exit#:#Ukončit relaci LTI lti#:#lti_exited#:#Relace LTI byla ukončena @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Opravdu chcete uzavřít přehled pro survey#:#survey_360_sure_appraisee_close_admin#:#Opravdu chcete uzavřít přehled pro následující hodnocené osoby? survey#:#survey_360_sure_delete_appraises#:#Opravdu chcete odstranit následující hodnocené osoby? survey#:#survey_360_sure_delete_raters#:#Opravdu chcete odstranit následující hodnotitele pro %s? -survey#:#survey_access_codes#:#Ověřování pomocí přístupových kódů +survey#:#survey_access_code#:#Ověřování pomocí přístupových kódů survey#:#survey_access_codes_info#:#Uživatelé získají přístup k průzkumu zadáním kódu na kartě „Info“. Tyto přístupové kódy jsou generovány v záložce 'Přístupové kódy' na kartě 'Účastníci'. survey#:#survey_activate_skill_service#:#Aktivujte službu způsobilosti survey#:#survey_activate_skill_service_info#:#todo12 diff --git a/lang/ilias_da.lang b/lang/ilias_da.lang index 2d285eef4d4e..f1580c1a1def 100644 --- a/lang/ilias_da.lang +++ b/lang/ilias_da.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Eksporter evalueringsdata som -assessment#:#exp_file_created#:#Export file created.###16 09 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Diplom (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#komma separerede værdier (CSV) assessment#:#expected_result_type#:#Expected result type###16 09 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Vælg venligst mindst en karakter for at assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Dine tidligere svar bruges som standardværdier i fremtidige besvarelser. assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring###28 08 2012 new variable assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Ja, jeg vil afslutte testen assessment#:#tst_finish_confirm_cancel_button#:#Nej, gå tilbage til sidste svar assessment#:#tst_finish_confirmation_question#:#You are going to finish this test and reach the maximum number of allowed test passes. You won't be able to enter this test again to change your answers. Do you really want to finish the test?###01 Mar 2006 new variable assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Afsluttet assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###16 09 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Skjul listen med spørgsmål assessment#:#tst_highscore_achieved_ts#:#Show date of test###28 08 2012 new variable assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown.###28 08 2012 new variable assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Vis scoring assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown.###28 08 2012 new variable assessment#:#tst_highscore_top_num#:#Number of ranks###28 08 2012 new variable assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table.###28 08 2012 new variable -assessment#:#tst_highscore_top_num_unit#:#entries###28 08 2012 new variable assessment#:#tst_highscore_top_table#:#Show table 'top ranking'###28 08 2012 new variable assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown.###28 08 2012 new variable assessment#:#tst_highscore_wtime#:#Show working time###28 08 2012 new variable @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Præsentationsindstillinger assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Test & evaluering Udskriftsvisning assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Max. svar tid assessment#:#tst_processing_time_desc#:#The maximum processing time starts from the time when a user starts a test and ends after the expiration of the entered hours, minutes and seconds.###09 06 2007 new variable @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Vis testresultat assessment#:#tst_show_side_list#:#Show question list aside###24 07 2009 new variable assessment#:#tst_show_solution_answers_only#:#Udskriftsvisning af resultater (kun svar) assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###16 09 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Pointdetaljer -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Vis besvarelsesafhængingt feedback i resultater @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Tidligere svar assessment#:#tst_use_previous_answers_description#:#Hvis afkrydset anvendes de tidligere svar som standardværdier når testen tages igen. -assessment#:#tst_use_previous_answers_user#:#Brug mine tidligere svar som standardværdier i fremtidige forsøg. assessment#:#tst_user_finished_test#:#User finished test (%s)###24 07 2009 new variable assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###16 09 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###16 09 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###16 09 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###16 09 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_de.lang b/lang/ilias_de.lang index 5f58ff04529f..c3bb55e45fde 100644 --- a/lang/ilias_de.lang +++ b/lang/ilias_de.lang @@ -415,7 +415,7 @@ adve#:#adve_minutes_info#:#Zeitraum in Minuten bis die Seite wegen fehlender Akt adve#:#adve_page_editor_settings#:#ILIAS-Seiteneditor adve#:#adve_pe_general#:#Einstellungen adve#:#adve_rte_settings#:#TinyMCE-Editor -adve#:#adve_text_content_features#:#Text Content Menü +adve#:#adve_text_content_features#:#Unterstützte Zeichenformate adve#:#adve_use_physical#:#str|emp|imp durch <b>B</b>|<i>I</i>|<u>U</u> ersetzen adve#:#adve_use_physical_info#:#Die Einstellung ersetzt die Buttons der semantischen Styleklassen für strong, emphatic und important durch die fest definierten Auszeichnungen <b>B</b> (bold), <i>I</i> (italic) und <u>U</u> (underline). Achtung: hierbei kann es zu Inkonsistenzen kommen, wenn über den Styleeditor den Styleklassen für strong, emphatic und important andere Auszeichnungen zugeordnet wurden. adve#:#adve_use_tiny_mce#:#TinyMCE-Editor für WYSIWYG-Bearbeitung aktivieren @@ -496,13 +496,13 @@ assessment#:#ass_cloze_gap_fb_txt_match_label#:#Lücke %s - Angegebene Antwort: assessment#:#ass_cloze_gap_fb_txt_nomatch_label#:#Lücke %s - Falsche Eingabe assessment#:#ass_commented_questions_only#:#Nur kommentierte Fragen assessment#:#ass_comments#:#Kommentare -assessment#:#ass_competence_respect_level_ordering#:#Bitte beachten Sie, dass die Kompetenz-Schwellenwerte gemäß der Reihenfolge der Kompetenzstufen in aufsteigender Reihenfolge definiert werden müssen. +assessment#:#ass_competence_respect_level_ordering#:#Bitte beachten Sie, dass die Kompetenzschwellenwerte gemäß der Reihenfolge der Kompetenzstufen in aufsteigender Reihenfolge definiert werden müssen. assessment#:#ass_completion_by_submission#:#Bestehen durch Abgabe assessment#:#ass_completion_by_submission_info#:#Falls aktiviert, führt die Abgabe einer Lösungsdatei zur Vergabe der Maximalpunktzahl für diese Frage. Die Bewertung kann jederzeit manuell angepasst werden. Das Ändern dieser Einstellung hat keine nachträglichen Auswirkungen auf bereits eingereichte Lösungen. assessment#:#ass_create_export_file_with_results#:#inkl. Teilnehmerergebnisse assessment#:#ass_create_export_test_archive#:#als Archivdatei assessment#:#ass_create_question#:#Frage erstellen -assessment#:#ass_imap_hint#:#Hinweis (angezeigt als Tooltip) +assessment#:#ass_imap_hint#:#Hinweis (angezeigt als Tooltipp) assessment#:#ass_imap_map_file_not_readable#:#Die hochgeladene Imagemap kann nicht gelesen werden. assessment#:#ass_imap_no_map_found#:#In der hochgeladenen Imagemap konnte keine unterstützte Form gefunden werden. assessment#:#ass_lac_expression#:#Ausdruck @@ -658,7 +658,7 @@ assessment#:#err_wrong_rating_advanced#:#Bitte stellen Sie sicher, dass die Summ assessment#:#error_creating_certificate_zip_empty#:#Keine Daten zu exportieren. assessment#:#error_importing_question#:#Beim Importieren der Fragen ist ein Fehler aufgetreten! assessment#:#error_open_image_file#:#Fehler beim Öffnen einer Bilddatei! -assessment#:#error_random_question_generation#:#Bei der Erzeugung von Zufallsfragen ist ein unbekannter Fehler aufgetreten. Bitte kontaktieren Sie Ihre ILIAS-Administration und geben Sie die folgende Information weiter: Das ILIAS-System konnte keine Aktivitäts-ID für die ID des ILIAS-Kontos %s und die Test-ID %s erzeugen. +assessment#:#error_random_question_generation#:#Bei der Erzeugung von Zufallsfragen ist ein unbekannter Fehler aufgetreten. Bitte kontaktieren Sie die technische Betreuung und geben die folgende Information weiter: Das ILIAS-System konnte keine Aktivitäts-ID für die ID des ILIAS-Kontos %s und die Test-ID %s erzeugen. assessment#:#errors#:#Fehler assessment#:#errors_section#:#Fehlerdaten assessment#:#errortext#:#Fehler/Worte markieren @@ -684,17 +684,15 @@ assessment#:#examid_in_test_res#:#ILIAS-Test-ID anzeigen assessment#:#examid_in_test_res_desc#:#Die ILIAS-Test-ID wird in den Ansichten „Detaillierte Ergebnisse“ und „Druckbare Liste der Antworten“ angezeigt sowie in den über den Reiter „Teilnehmer“ exportierten Tabellenkalkulationsdateien. assessment#:#exp_all_test_runs#:#Alle Durchläufe assessment#:#exp_eval_data#:#Daten exportieren -assessment#:#exp_file_created#:#Exportdatei erzeugt. assessment#:#exp_grammar_as#:#als assessment#:#exp_scored_test_attempt#:#Bewerteter Durchlauf assessment#:#exp_type_certificate#:#Zertifikat (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#durch Komma getrennte Werte (CSV) assessment#:#expected_result_type#:#Erwarteter Ergebnistyp -assessment#:#export_cert_failed_for_users_p#:#Für die folgenden %s Konten konnte kein Zertifikats-Dokument generiert und in das Archiv gelegt werden: %s. Bitte kontaktieren Sie einen Administrator zur Sichtung der Protokolldateien. -assessment#:#export_cert_failed_for_users_s#:#Für das folgende Konto konnte kein Zertifikats-Dokument generiert und in das Archiv gelegt werden: %s. Bitte kontaktieren Sie einen Administrator zur Sichtung der Protokolldateien. -assessment#:#export_cert_ignored_for_users_p#:#Für die folgenden %s Konten liegt kein Zertifikats-Dokument im generierten Archiv, da für diese noch kein Zertifikat ausgestellt wurde: %s -assessment#:#export_cert_ignored_for_users_s#:#Für das folgende Konto liegt kein Zertifikats-Dokument im generierten Archiv, da für dieses noch kein Zertifikat ausgestellt wurde: %s +assessment#:#export_cert_failed_for_users_p#:#Für die folgenden %s Konten konnte kein Zertifikat generiert und in das Archiv gelegt werden: %s. Kontaktieren Sie die technische Betreuung zur Sichtung der Protokolldateien. +assessment#:#export_cert_failed_for_users_s#:#Für das folgende Konto konnte kein Zertifikat generiert und in das Archiv gelegt werden: %s. Kontaktieren Sie die technische Betreuung zur Sichtung der Protokolldateien. +assessment#:#export_cert_ignored_for_users_p#:#Für die folgenden %s Konten liegt kein Zertifikat im generierten Archiv, da noch kein Zertifikat für diese Konten ausgestellt wurde: %s +assessment#:#export_cert_ignored_for_users_s#:#Für das folgende Konto liegt kein Zertifikat im generierten Archiv, da noch kein Zertifikat für dieses Konto ausgestellt wurde: %s assessment#:#export_cert_no_users#:#Ein Zertifikats-Archiv kann nicht generiert werden, da aktuell keine Teilnehmer existierten. assessment#:#export_essay_qst_with_html#:#Exportiere Freitext-Frage mit HTML Code assessment#:#export_essay_qst_with_html_desc#:#Wenn aktiviert, haben Sie die Möglichkeit Freitext-Fragen mit dem eingegebenen HTML-Code nach Excel zu exportieren. @@ -729,7 +727,7 @@ assessment#:#filter_show_questionpools#:#Zeige folgende Fragenpools assessment#:#final_statement#:#Abschließende Bemerkung assessment#:#final_statement_show_desc#:#Zeigt die Abschließende Bemerkung nach Abgabe des Tests an. Von dieser Seite aus ist es nicht möglich, zum Test zurückzukehren. Die abschließende Bemerkung kann im Unterreiter „Abschließende Bemerkung bearbeiten“ des Reiters „Einstellungen“ bearbeitet werden. assessment#:#finalized_by#:#Bewertung abgeschlossen von -assessment#:#finalized_evaluation#:#Endgültig bewertet +assessment#:#finalized_evaluation#:#Bewertet assessment#:#finalized_on#:#Bewertung abgeschlossen am assessment#:#finish_all_user_passes#:#Alle Testdurchläufe beenden assessment#:#finish_pass_for_all_users#:#Wollen Sie wirklich die Test Durchläufe für alle Benutzer beenden? @@ -744,11 +742,11 @@ assessment#:#finish_test_no_valid_participants_selected#:#Für die gewählten Te assessment#:#finish_test_single#:#Sind Sie sicher, dass Sie den Testdurchlauf für den Teilnehmer "%s" beenden möchten? assessment#:#finish_unfinished_passes#:#Beendet noch offene Testdurchläufe assessment#:#finish_unfinished_passes_desc#:#Noch nicht beendete Testdurchläufe werden automatisch beendet – vorausgesetzt, es wurde für diese Tests ein Endzeitpunkt festgelegt oder Teilnehmende haben die maximale Bearbeitungsdauer überschritten. -assessment#:#finished_by_administrator#:#Beendet durch Administrator -assessment#:#finished_by_cronjob#:#Beendet durch Cron-Job -assessment#:#finished_by_duration#:#Beendet aufgrund Zeitlimit -assessment#:#finished_by_participant#:#Beendet durch Teilnehmer -assessment#:#finished_by_unknown#:#Beendet durch Unbekannt +assessment#:#finished_by_administrator#:#Administrativ beendet +assessment#:#finished_by_cronjob#:#Vom System beendet +assessment#:#finished_by_duration#:#Beendet: Zeitlimit erreicht +assessment#:#finished_by_participant#:#Selbst beendet +assessment#:#finished_by_unknown#:#Beendet: Grund unbekannt assessment#:#fixed_participants_hint#:#Dieser Test ist nur für die nachfolgend definierte Gruppe von Teilnehmern verfügbar. Soll der Test für alle Personen verfügbar sein, deren Rollen Lesezugriff auf den Test gewähren, müssen Sie im Reiter „Einstellungen“ die Option „Nur ausgewählte Teilnehmer“ deaktivieren. assessment#:#fixedparticipants_subtab#:#Ausgewählte Teilnehmer assessment#:#flashfile#:#Flash-Datei @@ -1080,7 +1078,7 @@ assessment#:#qpl_lac_desc_compare_with_quest_res#:#Vergleiche das Ergebnis mit d assessment#:#qpl_lac_desc_compare_with_sequence#:#Vergleiche das Ergebnis mit der Antwortsequenz ($a,..,z$) assessment#:#qpl_lac_desc_compare_with_text#:#Vergleiche das Ergebnis mit dem Freitext TEXT assessment#:#qpl_lac_desc_logical_and#:#Logisches UND -assessment#:#qpl_lac_desc_logical_or#:#Logisches ODER +assessment#:#qpl_lac_desc_logical_or#:#Logisches ODER assessment#:#qpl_lac_desc_negation#:#Negation assessment#:#qpl_lac_desc_res_of_answ_m_of_cur_quest#:#Ergebnis der m-ten Antwort der aktuellen Frage assessment#:#qpl_lac_desc_res_of_cur_quest#:#Ergebnis der aktuellen Frage @@ -1124,11 +1122,11 @@ assessment#:#qpl_skill_point_eval_by_solution_compare#:#Ermittlung der Kompetenz assessment#:#qpl_skill_point_eval_mode_quest_result#:#Antwortergebnis assessment#:#qpl_skill_point_eval_mode_solution_compare#:#Lösungsvergleich assessment#:#qpl_skl_all_questions#:#Alle Fragen -assessment#:#qpl_skl_assigned_questions#:#Questions with assignment###29 10 2025 new variable -assessment#:#qpl_skl_assignment_for_question#:#Kompetenz-Zuordnungen zur Frage „%s“ -assessment#:#qpl_skl_sub_tab_quest_assign#:#Fragen-Kompetenz-Zuordnung +assessment#:#qpl_skl_assigned_questions#:#Fragen mit Kompletenzzuordnung +assessment#:#qpl_skl_assignment_for_question#:#Kompetenzzuordnungen zur Frage „%s“ +assessment#:#qpl_skl_sub_tab_quest_assign#:#Kompetenzzuordnungen assessment#:#qpl_skl_sub_tab_usages#:#Vergabehäufigkeit -assessment#:#qpl_skl_unassigned_questions#:#Questions without assignment###29 10 2025 new variable +assessment#:#qpl_skl_unassigned_questions#:#Fragen ohne Zuordnung assessment#:#qpl_skl_view_control_mode_aria:#:#Ansichtssteuerungsmodus assessment#:#qpl_sync_quest_skl_assigns_confirmation#:#Die Frage wurde aus einem anderen Magazinobjekt eingefügt. Soll die aktuelle Konfiguration von Kompetenzzuweisungen auf das Original der Frage übertragen werden? assessment#:#qpl_tab_competences#:#Kompetenzen @@ -1168,6 +1166,7 @@ assessment#:#question_summary#:#Übersicht Testdurchlauf assessment#:#question_summary_btn#:#Übersicht Testdurchlauf assessment#:#question_title#:#Fragentitel assessment#:#question_type#:#Fragetyp +assessment#:#questionlist_cannot_be_altered#:#Die Fragenliste kann nicht verändert werden da der Test Teilnehmerdatensätze enthält. assessment#:#questionpool_not_entered#:#Bitte geben Sie einen Namen für den Fragenpool an! assessment#:#questionpool_not_selected#:#Bitte wählen Sie einen Fragenpool aus! assessment#:#questions#:#Fragen @@ -1241,7 +1240,7 @@ assessment#:#saveOrderAndObligations#:#Sortierung und Obligationen abspeichern assessment#:#save_and_next#:#Speichern und weiter assessment#:#save_on_navigation#:#Navigieren mit Speichern assessment#:#save_on_navigation_confirmation#:#Ihre geänderten Antworten werden beim Navigieren automatisch gespeichert. -assessment#:#save_on_navigation_forced_feedback_hint#:#Vorher erhalten Sie Feedback zu Ihrer Antwort. +assessment#:#save_on_navigation_forced_feedback_hint#:#Vorher erhalten Sie Rückmeldung zu Ihrer Antwort. assessment#:#save_on_navigation_locked_confirmation#:#Ihre geänderten Antworten werden beim Navigieren automatisch gespeichert und festgeschrieben. assessment#:#saved_adjustment#:#Veränderung gespeichert. assessment#:#score_anon#:#Anonym bewerten @@ -1425,7 +1424,7 @@ assessment#:#tst_change_points_for_question#:#Punkte für die Antwort assessment#:#tst_change_quest_set_type_from_old_to_new_with_conflict#:#Wenn Sie die Auswahl der Testfragen von <b>%s</b> auf <b>%s</b> ändern, geht die aktuelle Fragenzuordnung verloren. Sie müssen dann für die neue Konfiguration erneut Fragen zuordnen bzw. den Fragenpool entsprechend konfigurieren.<br />Klicken Sie auf <b>Bestätigen</b>, um die neue Einstellung zu verwenden, oder wählen Sie <b>Abbrechen</b>, wenn die aktuell eingestellte Auswahl der Testfragen beibehalten werden soll. assessment#:#tst_change_workingtime#:#Zeitverlängerung für einen Teilnehmer erstellen assessment#:#tst_comp_eval_mode#:#Evaluierung über -assessment#:#tst_comp_points#:#Kompetenz-Punkte +assessment#:#tst_comp_points#:#Kompetenzpunkte assessment#:#tst_competence#:#Kompetenz assessment#:#tst_competence_tree#:#Kompetenzbaum assessment#:#tst_conditions_checkbox_enabled#:#Prüfungsbedingungen @@ -1453,8 +1452,7 @@ assessment#:#tst_delete_missing_mark#:#Bitte wählen Sie mindestens eine Notenst assessment#:#tst_derive_new_pool#:#Neuen Fragenpool ableiten assessment#:#tst_derive_new_pools#:#Neue Fragenpools ableiten assessment#:#tst_dont_show_msg_again_in_current_session#:#Diese Meldung in meiner aktuellen Sitzung nicht mehr anzeigen. -assessment#:#tst_dont_use_previous_answers#:#Ihre vorherigen Antworten werden in zukünftigen Testdurchläufen nicht als vorgegebene Werte verwendet -assessment#:#tst_edit_competence_assign#:#Bearbeite Zuordnungs-Eigenschaften +assessment#:#tst_edit_competence_assign#:#Bearbeite Zuordnungseigenschaften assessment#:#tst_edit_scoring#:#Ändere Bewertung assessment#:#tst_enable_questionlist#:#Fragenliste assessment#:#tst_enable_questionlist_description#:#Teilnehmer können sich links neben den Testfragen eine Fragenliste anzeigen lassen. @@ -1509,7 +1507,6 @@ assessment#:#tst_finish_confirm_button#:#Ja, ich will den Test beenden assessment#:#tst_finish_confirm_cancel_button#:#Nein, ich will zur letzten Antwort zurückgehen assessment#:#tst_finish_confirmation_question#:#Sie sind dabei, diesen Test zu beenden. Danach werden Sie nicht mehr in der Lage sein, den Test erneut aufzurufen, um Ihre Antworten zu ändern. Wollen Sie den Test wirklich beenden? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#Sie sind dabei, diesen Test zu beenden und die maximale Anzahl erlaubter Testdurchläufe zu erreichen. Danach werden Sie nicht mehr in der Lage sein, den Test erneut aufzurufen, um Ihre Antworten zu ändern. Wollen Sie den Test wirklich beenden? -assessment#:#tst_finish_notification_no#:#Keine Benachrichtigung assessment#:#tst_finished#:#Beendet assessment#:#tst_form_dynamic_question_set_config#:#Fortlaufende Fragenauswahl assessment#:#tst_gap_analysis#:#Gap-Analyse @@ -1521,7 +1518,6 @@ assessment#:#tst_hide_info_tab#:#Info-Tab ausblenden assessment#:#tst_hide_info_tab_desc#:#Blendet den Tab „Info“ des Tests aus. assessment#:#tst_hide_pagecontents#:#Seiteninhalte ausblenden assessment#:#tst_hide_pagecontents_desc#:#Inhalte, die über den Button „Seite bearbeiten" vor und hinter dem eigentlichen Fragentext platziert wurden, werden in den Ergebnisansichten und der Druckausgabe nicht angezeigt. -assessment#:#tst_hide_side_list#:#Fragenliste aus assessment#:#tst_highscore_achieved_ts#:#Datum / Uhrzeit assessment#:#tst_highscore_achieved_ts_description#:#Es wird eine zusätzliche Spalte eingeblendet, die anzeigt, wann der Test beendet wurde. assessment#:#tst_highscore_all_tables#:#Eigener Rang und Bestenliste @@ -1539,7 +1535,6 @@ assessment#:#tst_highscore_score#:#Punkte assessment#:#tst_highscore_score_description#:#Es wird einen zusätzliche Spalte mit der Angabe der erreichten Punkte eingeblendet. assessment#:#tst_highscore_top_num#:#Länge der Bestenliste assessment#:#tst_highscore_top_num_description#:#Bestimmt, wie viele Einträge in der Bestenliste angezeigt werden. -assessment#:#tst_highscore_top_num_unit#:#Platzierungen assessment#:#tst_highscore_top_table#:#Bestenliste assessment#:#tst_highscore_top_table_description#:#Teilnehmerinnen und Teilnehmern wird eine Tabelle mit den besten Platzierungen angezeigt. assessment#:#tst_highscore_wtime#:#Bearbeitungsdauer @@ -1582,9 +1577,9 @@ assessment#:#tst_instant_feedback_answer_specific_desc#:#Bei Anklicken des 'Rüc assessment#:#tst_instant_feedback_contents#:#Inhalte der Rückmeldung assessment#:#tst_instant_feedback_desc#:#Sofern Fragen mit Rückmeldungen versehen sind, stehen diese den Teilnehmern während des Tests zur Verfügung. assessment#:#tst_instant_feedback_results#:#Erreichte Punkte -assessment#:#tst_instant_feedback_results_desc#:#Den Teilnehmenden wird angezeigt, wie viele Punkte ihre Antwort wert ist. Bitte wählen Sie unten aus, wie das Feedback ausgelöst werden soll. +assessment#:#tst_instant_feedback_results_desc#:#Den Teilnehmenden wird angezeigt, wie viele Punkte ihre Antwort wert ist. Bitte wählen Sie unten aus, wie die Rückmeldung ausgelöst werden soll. assessment#:#tst_instant_feedback_solution#:#Bestmögliche Lösung anzeigen -assessment#:#tst_instant_feedback_solution_desc#:#Den Teilnehmenden wird die bestmögliche Antwort auf die Frage angezeigt. Bitte wählen Sie unten aus, wie das Feedback ausgelöst werden soll. +assessment#:#tst_instant_feedback_solution_desc#:#Den Teilnehmenden wird die bestmögliche Antwort auf die Frage angezeigt. Bitte wählen Sie unten aus, wie die Rückmeldung ausgelöst werden soll. assessment#:#tst_instant_feedback_trigger#:#Auslöser der Rückmeldung assessment#:#tst_instant_feedback_trigger_forced#:#Eine Frage beantworten assessment#:#tst_instant_feedback_trigger_forced_desc#:#Durch Beantwortung einer Frage wird die Rückmeldung automatisch ausgelöst. @@ -1618,7 +1613,7 @@ assessment#:#tst_man_scoring_finalized_only#:#Nur bewertete Antworten anzeigen assessment#:#tst_man_scoring_only_answered#:#Nur beantwortete assessment#:#tst_man_scoring_questionselection#:#Fragen assessment#:#tst_man_scoring_userselection#:#Teilnehmer -assessment#:#tst_manage_competence_assigns#:#Kompetenz-Zuordnungen verwalten +assessment#:#tst_manage_competence_assigns#:#Kompetenzzuordnungen verwalten assessment#:#tst_manage_competence_select_skills#:#Kompetenzen auswählen assessment#:#tst_manscoring_input_max_points_for_question#:#Maximale Punktezahl für die Frage assessment#:#tst_manscoring_input_of_max#:#von @@ -1636,7 +1631,7 @@ assessment#:#tst_mark_passed#:#Bestanden assessment#:#tst_mark_reset_to_simple_mark_schema#:#Auf Einfaches Notenschema zurücksetzen assessment#:#tst_mark_reset_to_simple_mark_schema_confirmation#:#Möchten Sie wirklich fortfahren? Das aktuelle Notenschema wird durch ein einfaches Notenschema mit den Stufen „bestanden“ und „nicht bestanden“ ersetzt. Alle lokalen Änderungen werden gelöscht. assessment#:#tst_mark_short_form#:#Kurzbezeichnung -assessment#:#tst_max_comp_points#:#Maximale Kompetenz-Punkte +assessment#:#tst_max_comp_points#:#Maximale Kompetenzpunkte assessment#:#tst_maximum_points#:#Maximale Punktezahl assessment#:#tst_mc_label_none_above#:#Keine der obigen Antworten assessment#:#tst_median_mark_panel#:#Note des Median @@ -1661,9 +1656,9 @@ assessment#:#tst_msg_rand_quest_set_stage_pool_last_sync#:#Zeitpunkt der letzten assessment#:#tst_msg_random_qsc_modified_add_new_rule#:#Die Konfiguration für den Test mit zufälliger Fragenauswahl wurde erfolgreich geändert. Sie können nun eine neue Regel hinzufügen. assessment#:#tst_msg_random_question_set_config_modified#:#Die Konfiguration für den Test mit zufälliger Fragenauswahl wurde erfolgreich geändert. assessment#:#tst_msg_random_question_set_synced#:#Die Fragen zur aktuellen Konfiguration des Tests mit zufälliger Fragenauswahl wurde erfolgreich synchronisiert. -assessment#:#tst_msg_skl_lvl_thresholds_saved#:#Die Kompetenz-Schwellenwerte wurden gespeichert. -assessment#:#tst_msg_skl_qst_assign_points_not_saved#:#Die Kompetenz-Punkte wurden nicht gespeichert. Bitte überprüfen Sie Ihre Eingabe. -assessment#:#tst_msg_skl_qst_assign_points_saved#:#Die Kompetenz-Punkte wurden gespeichert. +assessment#:#tst_msg_skl_lvl_thresholds_saved#:#Die Kompetenzschwellenwerte wurden gespeichert. +assessment#:#tst_msg_skl_qst_assign_points_not_saved#:#Die Kompetenzpunkte wurden nicht gespeichert. Bitte überprüfen Sie Ihre Eingabe. +assessment#:#tst_msg_skl_qst_assign_points_saved#:#Die Kompetenzpunkte wurden gespeichert. assessment#:#tst_msg_source_pool_definitions_deleted#:#Die Regel für die Fragenauswahl wurde erfolgreich gelöscht. assessment#:#tst_nav_next_locks_current_answer_confirm#:#Wenn Sie zur nächsten Frage navigieren wird die Antwort zur aktuellen Frage festgeschrieben und kann nicht nochmals verändert werden. assessment#:#tst_nav_next_locks_current_answer_header#:#Aktuelle Antwort festschreiben? @@ -1710,7 +1705,7 @@ assessment#:#tst_participant_status#:#Teilnehmerstatus assessment#:#tst_participating_users#:#Teilnehmende Benutzer assessment#:#tst_pass_best_pass#:#Besten Durchlauf des Tests bewerten assessment#:#tst_pass_best_pass_desc#:#Wenn multiple Durchläufe erlaubt werden, wird der Durchlauf bewertet, bei dem die höchste Punktezahl erreicht wurde. -assessment#:#tst_pass_deletion#:#Previous Passes###29 10 2025 new variable +assessment#:#tst_pass_deletion#:#Vorherige Durchläufe assessment#:#tst_pass_deletion_allowed#:#Durchläufe, die nicht zur Bewertung verwendet werden, können gelöscht werden. assessment#:#tst_pass_details#:#Detaillierte Ergebnisse assessment#:#tst_pass_details_header_lo_initial#:#Einstiegsergebnisse zu den Lernzielen<br />%s - %s @@ -1753,7 +1748,6 @@ assessment#:#tst_postpone_on_desc#:#Fragen, die verworfen oder übersprungen wer assessment#:#tst_presentation_properties#:#Durchführung: Verhalten der Frage assessment#:#tst_presentation_settings_section#:#Darstellung assessment#:#tst_previous_access_code_not_available#:#Kein vorheriger Code verfügbar! -assessment#:#tst_print#:#Test und Assessment – Druckansicht assessment#:#tst_proceed#:#Fortfahren assessment#:#tst_processing_time#:#Bearbeitungsdauer begrenzen assessment#:#tst_processing_time_desc#:#Teilnehmer dürfen den Test nur während eines vorgegebenen Zeitraums bearbeiten. Die Zeit läuft für jede Person ab dem Moment, an dem der erste Testdurchlauf gestartet wurde. „Test unterbrechen“ stoppt den Ablauf der Bearbeitungsdauer nicht. Wurde die Anzahl möglicher Testdurchläufe eingeschränkt, erscheint im Reiter „Teilnehmer“ eine Funktion, um einzelnen Teilnehmern zusätzliche Bearbeitungszeit zu gewähren. @@ -1763,8 +1757,8 @@ assessment#:#tst_qbt_filter_question_title#:#Fragentitel assessment#:#tst_qst_added_to_pool_p#:#Die Fragen wurden erfolgreich in den Fragenpool übernommen. assessment#:#tst_qst_added_to_pool_s#:#Die Frage wurde erfolgreich in den Fragenpool übernommen. assessment#:#tst_qst_order#:#Nr. -assessment#:#tst_qst_skl_cfg_in_pool_hint_dynquestset#:#Die Fragen-Kompetenz-Zuordnung für Tests im Modus „%s“ müssen grundsätzlich im zugeordneten Fragenpool vorgenommen werden:<br />%s<br /><br />Die Vergabe der Kompetenz-Schwellwerte erfolgt hier im Test. -assessment#:#tst_qst_skl_cfg_in_pool_hint_rndquestset#:#Die Fragen-Kompetenz-Zuordnung für Tests im Modus „%s“ müssen grundsätzlich in den zugeordneten Fragenpools vorgenommen werden:<br />%s<br /><br />Die Vergabe der Kompetenz-Schwellwerte erfolgt hier im Test. +assessment#:#tst_qst_skl_cfg_in_pool_hint_dynquestset#:#Die Fragen-Kompetenzzuordnung für Tests im Modus „%s“ müssen grundsätzlich im zugeordneten Fragenpool vorgenommen werden:<br />%s<br /><br />Die Vergabe der Kompetenz-Schwellwerte erfolgt hier im Test. +assessment#:#tst_qst_skl_cfg_in_pool_hint_rndquestset#:#Die Fragen-Kompetenzzuordnung für Tests im Modus „%s“ müssen grundsätzlich in den zugeordneten Fragenpools vorgenommen werden:<br />%s<br /><br />Die Vergabe der Kompetenz-Schwellwerte erfolgt hier im Test. assessment#:#tst_question#:#Frage assessment#:#tst_question_amount#:#Anzahl Fragen assessment#:#tst_question_answer_status#:#Welche Fragen sollen in die Wiedervorlage? @@ -1858,7 +1852,7 @@ assessment#:#tst_rnd_quest_set_cfg_pool_form#:#Regel für die Auswahl von Fragen assessment#:#tst_rnd_quest_set_tb_add_pool_btn#:#Regel für Fragenauswahl hinzufügen assessment#:#tst_save_and_create_new_rule#:#Speichern und neue Regel hinzufügen assessment#:#tst_save_and_proceed#:#Speichern und weiter -assessment#:#tst_save_comp_points#:#Speichere Kompetenz-Punkte +assessment#:#tst_save_comp_points#:#Speichere Kompetenzpunkte assessment#:#tst_save_manscoring_failed#:#Die Bewertung für Testdurchlauf %s konnte nicht gespeichert werden. assessment#:#tst_save_thresholds#:#Speichere Schwellenwerte assessment#:#tst_saved_manscoring_by_question_successfully#:#Die Bewertung der Frage %s für Testdurchlauf %s wurde erfolgreich gespeichert. @@ -1881,19 +1875,15 @@ assessment#:#tst_settings_header_execution#:#Durchführung: Zugang assessment#:#tst_settings_header_intro#:#Informationen zum Einstieg assessment#:#tst_settings_header_test_run#:#Durchführung: Steuerung Testdurchlauf assessment#:#tst_settings_not_found#:#Fehlende Testeinstellungen -assessment#:#tst_settings_not_found_msg#:#Testeinstellungen wurden nicht gefunden. Möglicherweise fehlt ein Migrationsschritt. Bitte wenden Sie sich an Ihren Systemadministrator. +assessment#:#tst_settings_not_found_msg#:#Die Testeinstellungen wurden nicht gefunden. Möglicherweise fehlt ein Migrationsschritt. Wenden Sie sich an die technische Betreuung. assessment#:#tst_show_answer_sheet#:#Antwortenübersicht anzeigen assessment#:#tst_show_cancel#:#"Test unterbrechen" anzeigen assessment#:#tst_show_cancel_description#:#Zeigt während der Durchführung des Tests einen Button an, mit der der Test unterbrochen werden kann. Achtung: Das Unterbrechen des Tests hält nicht die unter „Maximale Bearbeitungsdauer“ festgelegte Bearbeitungszeit an. -assessment#:#tst_show_comp_results#:#Kompetenz-Ergebnisse +assessment#:#tst_show_comp_results#:#Kompetenzergebnisse assessment#:#tst_show_results#:#Testergebnisse assessment#:#tst_show_side_list#:#Fragenliste an assessment#:#tst_show_solution_answers_only#:#Druckausgabe der Ergebnisse (nur Antworten) assessment#:#tst_show_solution_answers_only_desc#:#Wenn „Druckausgabe der Ergebnisse (nur Antworten)“ ausgewählt ist, werden ILIAS-Inhalte, die Sie über den „Inhalt bearbeiten“-Reiter der Fragen vor und hinter dem eigentlichen Fragentext platzieren können, in einem Ausdruck nicht angezeigt. -assessment#:#tst_show_solution_compare#:#Zeige bestmögliche Lösung in „Tabelle mit detaillierten Testergebnissen“ -assessment#:#tst_show_solution_compare_desc#:#Teilnehmern wird als Teil der Tabelle „Detallierte Testergebnisse“ eine Ansicht präsentiert, welche ihre eigenen Antworten und die bestmögliche Lösung gegenüberstellt. <br> Diese Ansicht wird nicht im Unterreiter „Bewertete Antworten“ des „Meine Ergebnisse“-Reiters angezeigt, auch wenn diese Einstellung hier vorgenommen wird. -assessment#:#tst_show_solution_details#:#Bewertete Antworten als Liste -assessment#:#tst_show_solution_details_desc#:#Die Tabelle „Detallierte Testergebnisse“ wird um eine Liste der eigenen Antworten ergänzt. assessment#:#tst_show_solution_details_singlepage#:#Bewertete Antworten auf Einzelseiten assessment#:#tst_show_solution_details_singlepage_desc#:#Teilnehmerinnen und Teilnehmer können jede Frage einzeln aufrufen und sehen, ob ihre Antworten richtig waren und wie viele Punkte sie damit erreicht haben. assessment#:#tst_show_solution_feedback#:#Rückmeldungen @@ -1914,10 +1904,9 @@ assessment#:#tst_single_answer_details#:#Zeige einzelne Antwort assessment#:#tst_skill_triggerings_num_req_answers#:#Benötigte Anzahl Antworten für Kompetenzerhebungen assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Kompetenzen werden erst erhoben, wenn mindestens diese Anzahl Antworten zur Berechnung der Kompetenzstufe beitragen. assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#Mindestens eine im Test adressierte Kompetenz ist nicht ausreichend vielen Fragen zugeordnet. Für diese Kompetenzen werden keine Kompetenzeinträge für Teilnehmer erfasst.<br />Die Mindestanzahl für zugewiesene Fragen: %s -assessment#:#tst_skl_level_thresholds_link#:#Kompetenz-Schwellenwerte konfigurieren +assessment#:#tst_skl_level_thresholds_link#:#Kompetenzschwellenwerte konfigurieren assessment#:#tst_skl_level_thresholds_missing#:#Es sind noch nicht für alle relevanten Kompetenzen Schwellenwerte definiert worden! -assessment#:#tst_skl_res_interpretation_hint_msg#:#Beachten Sie, dass die Kompetenzergebnisse eines einzelnen Tests nur bedingt aussagekräftig sind. Je mehr Informationen zu den einzelnen Kompetenzen gesammelt werden, desto valider die Aussage. Sollten einzelne Kompetenzen keinen Eintrag erhalten haben, standen für diese Kompetenz zu wenig Informationen zur Verfügung. -assessment#:#tst_skl_sub_tab_thresholds#:#Kompetenz-Schwellenwerte +assessment#:#tst_skl_sub_tab_thresholds#:#Kompetenzschwellenwerte assessment#:#tst_sol_comp_expressions#:#Vergleichsausdrücke assessment#:#tst_solution_compare_cfg#:#Konfiguration für Antwortvergleich assessment#:#tst_source_question_pool#:#Fragenpool @@ -1978,9 +1967,8 @@ assessment#:#tst_unchanged_answer_is_correct#:#Die vorgegebene Antwort ist korre assessment#:#tst_unchanged_order_is_correct#:#Die vorgegebene Anordnung ist korrekt. assessment#:#tst_use_previous_answers#:#Verwendung vorheriger Lösungen assessment#:#tst_use_previous_answers_description#:#Zeigt Teilnehmern die Antworten aus dem vorherigen Testdurchlauf an. Die Übernahme der Lösungen muss vom Teilnehmer vor Beginn des Testdurchlaufs in einem Modal per Checkbox aktiviert werden. -assessment#:#tst_use_previous_answers_user#:#Meine Lösungen aus einem vorherigen Testdurchlauf als vorgegebene Werte verwenden assessment#:#tst_user_finished_test#:#Ein Teilnehmer hat den Test beendet (%s) -assessment#:#tst_view_competence_assign#:#Zeige Zuordnungs-Eigenschaften +assessment#:#tst_view_competence_assign#:#Zeige Zuordnungseigenschaften assessment#:#tst_virtual_pass_header_lo_initial#:#Einstiegsergebnisse zum Lernziel<br />%s assessment#:#tst_virtual_pass_header_lo_qualifying#:#Qualifizierende Ergebnisse zum Lernziel<br />%s assessment#:#tst_wf_info_answer_adopted_from_prev_pass#:#Ihre Antwort aus einem früheren Versuch wurde übernommen. @@ -2058,7 +2046,7 @@ auth#:#auth_auth_settings#:#Einstellungen auth#:#auth_cron_destroy_expired_sessions#:#Löschen abgelaufener Benutzer-Sitzungen auth#:#auth_cron_destroy_expired_sessions_desc#:#Dieser Cron-Job löscht bereits abgelaufene Benutzer-Sitzungen auth#:#auth_err_expired#:#Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an. -auth#:#auth_err_invalid_user_account#:#Die Authentifizierung konnte wegen eines internen Fehlers nicht durchgeführt werden. +auth#:#auth_err_invalid_user_account#:#Die Anmeldung ist fehlgeschlagen. Bitte überprüfen Sie, ob Sie Ihren Anmeldenamen und Ihr Passwort korrekt eingegeben haben. Wenn das Problem weiterhin besteht, ist Ihr Konto möglicherweise inaktiv oder abgelaufen. Wenden Sie sich in diesem Fall bitte über den Link am unteren Seitenrand an den technischen Support Ihrer ILIAS-Plattform. auth#:#auth_err_ldap_exception#:#Die Authentifizierung konnte wegen eines Fehlers im Anmeldungsverfahren (LDAP) nicht durchgeführt werden. auth#:#auth_info_add#:#Wählen Sie diese Einstellung, falls Sie sich noch nie für ILIAS registriert haben. In diesem Fall wird ein neues ILIAS-Konto angelegt. auth#:#auth_info_migrate#:#Wenn Sie bereits ein ILIAS-Konto besitzen, geben Sie bitte den Anmeldenamen und das Passwort ein, um Ihre persönlichen Daten (Mails, Testergebnisse ...) zu übernehmen. @@ -2137,6 +2125,7 @@ auth#:#auth_saml_deleted_idp#:#Der Identity-Provider wurde gelöscht. auth#:#auth_saml_enable#:#SAML-Unterstützung aktivieren auth#:#auth_saml_err_sqlite_driver#:#Die SAML-Authentifizierung benötigt die SQLite-Treiber für PHP. Bitte installieren Sie diese und versuchen Sie es erneut. auth#:#auth_saml_idp#:#IDP +auth#:#auth_saml_idp_deactivated_auth_failed#:#Der IDP ist nicht aktiviert, Authentifizierung gescheitert. auth#:#auth_saml_idp_selection_table_desc#:#Bitte wählen Sie den Identity-Provider aus, mit dem Sie sich einloggen möchten. auth#:#auth_saml_idp_selection_table_title#:#Identity-Provider auth#:#auth_saml_idp_settings#:#IDP Einstellungen @@ -2271,7 +2260,7 @@ badge#:#badge_sort_active_badges_first#:#Aktive Badges zuerst badge#:#badge_sort_active_badges_last#:#Aktive Badges zuletzt badge#:#badge_sort_activity_badges_first#:#Automatisch vergebene Badges zuerst badge#:#badge_sort_activity_badges_last#:#Automatisch vergebene Badges zuletzt -badge#:#badge_sort_added_to_profile_last#:#Added To Profile First###29 10 2025 new variable +badge#:#badge_sort_added_to_profile_last#:#Dem Profil zugeordnete zuerst badge#:#badge_sort_excluded_from_profile_first#:#Vom Profil ausgeklammerte zuerst badge#:#badge_sort_manual_awarding_first#:#Badges mit manueller Vergabe zuerst badge#:#badge_sort_manual_awarding_last#:#Badges mit manueller Vergabe zuletzt @@ -2545,14 +2534,15 @@ blog#:#blog_whole_blog#:#Gesamtes Blog book#:#X_reservations_of#:#%s Buchungen von book#:#book_add#:#Buchungspool anlegen book#:#book_add_object#:#Angebot hinzufügen +book#:#book_add_participant#:#Teilnehmer hinzufügen book#:#book_add_schedule#:#Zeitplan hinzufügen book#:#book_additional_info_file#:#Zusätzliche Beschreibung book#:#book_all#:#Alle anzeigen book#:#book_all_pools_need_schedules#:#Die Änderungen wurden nicht gespeichert. Alle ausgewählten Buchungspools benötigen mindestens einen Zeitplan. -book#:#book_all_users#:#Alle Teilnehmer +book#:#book_all_users#:#Alle Personen book#:#book_assign#:#Buchen -book#:#book_assign_object#:#Für Teilnehmer buchen -book#:#book_assign_participant#:#Für andere Teilnehmer buchen +book#:#book_assign_object#:#Für diese Person buchen +book#:#book_assign_participant#:#Für andere Personen buchen book#:#book_back_to_list#:#Zurück zur Liste book#:#book_bobj#:#Angebote book#:#book_book#:#Buchen @@ -2563,13 +2553,12 @@ book#:#book_booking#:#Buchung book#:#book_booking_information#:#Information book#:#book_booking_objects#:#Angebote book#:#book_booking_reminders#:#Anstehende Buchungen -book#:#book_bookings_per_user#:#Buchungen je Benutzer book#:#book_bulk_confirmation#:#Bitte überprüfen Sie die angegebenen Werte. book#:#book_bulk_creation#:#Massenerstellung book#:#book_bulk_data#:#Daten zu Angeboten book#:#book_cal_entry#:#Buchung: book#:#book_confirm_booking#:#Buchung vornehmen -book#:#book_confirm_booking_for_users#:#Sind Sie sicher, dass Sie dieses Angebot für die folgenden Teilnehmer buchen wollen? +book#:#book_confirm_booking_for_users#:#Sind Sie sicher, dass Sie dieses Angebot für die folgenden Personen buchen wollen? book#:#book_confirm_booking_no_schedule#:#Sind Sie sicher, dass Sie das folgende Angebot buchen wollen? book#:#book_confirm_booking_schedule_number_of_objects#:#Buchungsbestätigung book#:#book_confirm_booking_schedule_number_of_objects_info#:#Bitte wählen Sie die Anzahl der zu buchenden Angebote. @@ -2593,13 +2582,13 @@ book#:#book_filter_past_reservations#:#Abgelaufene Buchungen anzeigen book#:#book_fromto#:#Datumsbereich book#:#book_hours#:#Stunden vor Beginn des Zeitfensters book#:#book_is_used#:#In Benutzung -book#:#book_limit_objects_available#:#Dieses Angebot können Sie nicht für %s Teilnehmer buchen. „%s“ ist nur %s Mal verfügbar. +book#:#book_limit_objects_available#:#Dieses Angebot können Sie nicht für %s Personen buchen. „%s“ ist nur %s Mal verfügbar. book#:#book_list#:#Liste book#:#book_log#:#Buchungen book#:#book_mail_permanent_link#:#Link zum Buchungspool book#:#book_mail_to_booker#:#Mail an den Buchenden book#:#book_message#:#Mitteilung -book#:#book_message_info#:#Sie können hier eine Mitteilung an den Organisator des Buchungspools eingeben. +book#:#book_message_info#:#Diese Mitteilung sehen die Verantwortlichen des Buchungspools. book#:#book_messages#:#Mitteilungen book#:#book_messages_info#:#Buchende können einer Buchung eine Mitteilung mitgeben. book#:#book_missing_availability#:#Es können leider nicht alle Termine gebucht werden. @@ -2615,9 +2604,9 @@ book#:#book_not#:#Nicht book#:#book_not_enough_preferences#:#Sie haben nicht genügend Präferenzen ausgewählt. Die Präferenzen wurden nicht gespeichert. book#:#book_notification#:#Benachrichtigungen über Reservierungen book#:#book_notification_cron_not_active#:#Achtung: Der notwendige Cron-Job "Benachrichtigungen über Reservierungen" ist zurzeit nicht aktiviert. -book#:#book_notification_info#:#Sendet eine Liste der Buchungen des nächsten Tages an den jeweiligen Teilnehmer (nur eigene) und – wenn aktiviert – an die Administratoren. +book#:#book_notification_info#:#Sendet eine Mail mit den Buchungen für den nächsten Tag an alle Personen, die Benachrichtigungen aktiviert haben. book#:#book_nr_of_preferences#:#Anzahl -book#:#book_nr_of_preferences_info#:#Anzahl an Präferenzen, die jeder Teilnehmer abgeben muss. +book#:#book_nr_of_preferences_info#:#Anzahl an Präferenzen, die jede Person abgeben muss. book#:#book_nr_preferences#:#Präferenzen book#:#book_obj_select#:#Auswählen book#:#book_object_added#:#Ein Angebot wurde hinzugefügt. @@ -2626,10 +2615,10 @@ book#:#book_object_selection#:#Angebotsauswahl book#:#book_object_updated#:#Das Angebot wurde geändert. book#:#book_objects_available#:#Verfügbare Angebote: %s book#:#book_open#:#Buchungspool öffnen -book#:#book_overall_limit#:#Begrenzung +book#:#book_overall_limit#:#Gesamtzahl der Buchungen pro Benutzer begrenzen book#:#book_overall_limit_warning#:#Sie haben die maximale Anzahl Buchungen erreicht. -book#:#book_participant_already_assigned#:#Ein oder mehrere Teilnehmer waren bereits zugewiesen. -book#:#book_participant_assigned#:#Teilnehmer wurde/n hinzugefügt. +book#:#book_participant_already_assigned#:#Mindestens eine Person war bereits zugewiesen. +book#:#book_participant_assigned#:#Die Personen wurden hinzugefügt. book#:#book_period#:#Dauer book#:#book_pool_added#:#Ein Buchungspool wurde angelegt. book#:#book_pool_selection#:#Auswahl Buchungspool @@ -2642,7 +2631,7 @@ book#:#book_pref_book_cron_info#:#Automatische Zuweisung von Buchungen auf der G book#:#book_pref_deadline#:#Deadline book#:#book_pref_deadline_info#:#Bis zu diesem Zeitpunkt können Präferenzen abgegeben werden. book#:#book_pref_overview#:#Übersicht -book#:#book_preference_info#:#Bitte wählen Sie %1 Präferenz(en) bis %2. Nach der Frist werden die Zuordnungen auf der Basis der Präferenzen aller Teilnehmer automatisch durchgeführt. +book#:#book_preference_info#:#Bitte wählen Sie %1 Präferenzen bis %2. Nach der Frist werden die Angebote automatisch zugeordnet. Die Präferenzen aller Beteiligten werden nach Möglichkeit berücksichtigt. book#:#book_preferences#:#Präferenzen book#:#book_preferences_saved#:#Die Präferenzen wurden gespeichert. book#:#book_public_log#:#Benutzer sehen alle Buchungen @@ -2652,9 +2641,9 @@ book#:#book_refresh#:#Aktualisieren book#:#book_rem_intro#:#Dies ist eine Übersicht über anstehende Buchungen. book#:#book_rem_reason#:#Sie erhalten diese Mail, da Sie die Benachrichtigung der entsprechenden Buchungsobjekte aktiviert haben. book#:#book_reminder_day#:#Versenden -book#:#book_reminder_day_info#:#Sendet eine Liste eigener anstehenden Buchungen und zusätzlich eine Gesamtliste an Benutzenden mit dem Recht „Einstellungen bearbeiten“. Bitte beachten Sie: um Benachrichtigungen zu erhalten, müssen Teilnehmer diese über das Menü „Aktionen" oben rechts im Buchungspool „Benachrichtigungen“ aktiviert haben. +book#:#book_reminder_day_info#:#Sendet eine Liste eigener anstehender Buchungen und zusätzlich eine Gesamtliste an Personen mit dem Recht „Einstellungen bearbeiten“. Bitte beachten Sie: Um Benachrichtigungen zu erhalten, müssen die Personen diese über das Menü „Aktionen“ oben rechts im Buchungspool „Benachrichtigungen“ aktiviert haben. book#:#book_reminder_days#:#Tage vor der Buchung -book#:#book_reminder_setting#:#Teilnehmer an Reservierung erinnern +book#:#book_reminder_setting#:#Per Mail an eigene Buchung erinnern book#:#book_rerun_assignments#:#Zuweisungen erneut durchführen book#:#book_rerun_confirmation#:#Achtung. Die Zuweisung nach Präferenzen ist bereits erfolgt. In seltenen Fällen kann ein Abbruch des Prozesses zu keinen oder unvollständigen Buchungen führen und ein erneutes Starten des Prozesses notwendig machen. Bevor sie den automatischen Prozess erneut starten, müssen sie alle bestehenden Buchungen entfernen, um Mehrfachzuweisungen zu verhindern. book#:#book_reservation_available#:#%s verfügbar @@ -2679,10 +2668,10 @@ book#:#book_schedule_type_fixed#:#Buchung nach festem Zeitplan book#:#book_schedule_type_fixed_info#:#Geeignet für Buchungen von Dingen für einen bestimmten Zeitraum, wie Räume, Dienstleistungen oder Geräte. book#:#book_schedule_type_none#:#Ohne Zeitplan book#:#book_schedule_type_none_direct#:#Buchung ohne Termine -book#:#book_schedule_type_none_direct_info#:#Teilnehmer können direkt buchen. Der Modus ist geeignet für Referatsthemen oder Seminarplätze, die ohne Termin vergeben werden. +book#:#book_schedule_type_none_direct_info#:#Personen können direkt buchen. Der Modus ist geeignet für Referatsthemen oder Seminarplätze, die ohne Termin vergeben werden. book#:#book_schedule_type_none_info#:#Dieser Buchungsmodus ist geeignet für die Vergabe von Referatsthemen, Seminarplätzen oder vergleichbaren Angeboten. book#:#book_schedule_type_none_preference#:#Automatisch nach Präferenzen verteilen -book#:#book_schedule_type_none_preference_info#:#Teilnehmer benennen zunächst Präferenzen. Zu einem gewählten Enddatum werden dann die Buchungen automatisch vorgenommen. Der Buchungsmodus ist geeignet für Referatsthemen oder Seminarplätze, die ohne Termin vergeben werden. +book#:#book_schedule_type_none_preference_info#:#Personen benennen zunächst Präferenzen. Zu einem gewählten Enddatum werden die Buchungen automatisch vorgenommen. Der Buchungsmodus ist geeignet für Referatsthemen oder Seminarplätze, die ohne Termin vergeben werden. book#:#book_schedule_updated#:#Der Zeitplan wurde geändert. book#:#book_schedule_warning_edit#:#Es sind momentan keine Zeitpläne vorhanden. Um den Pool nutzen zu können, muss zuerst ein Zeitplan angelegt werden. Alternativ wählen Sie einen anderen Typ für den Buchungspool. book#:#book_schedules#:#Zeitpläne @@ -2693,6 +2682,7 @@ book#:#book_show_message#:#Mitteilung anzeigen book#:#book_title_description_nr#:#Titel; Beschreibung; Anzahl book#:#book_title_description_nr_info#:#Geben Sie bitte Titel, Beschreibung und Anzahl getrennt durch ein Semikolon oder TAB ein. Nutzen Sie einen Zeile je Buchungsobjekt. book#:#book_too_many_preferences#:#Sie haben zu viele Präferenzen ausgewählt. Die Präferenzen wurden nicht gespeichert. +book#:#book_total_individual_bookings_limit#:#Begrenze die Gesamtanzahl an Buchungen, die von/für einzelne Teilnehmende durchgeführt werden können – über alle verfügbaren Objekte hinweg. Jedes buchbare Objekt kann dabei weiterhin nur einmal pro Teilnehmendem gebucht werden. book#:#book_type_warning#:#Es sind momentan keine Angebote vorhanden. Um den Pool nutzen zu können, müssen zuerst Angebote angelegt werden. book#:#book_week#:#Wochenansicht book#:#book_your_bookings#:#Ihre Buchungen @@ -2701,7 +2691,7 @@ book#:#book_your_reservations#:#Ihre Buchungen book#:#booking_multiple_succesfully#:#Buchungen erfolgreich durchgeführt book#:#booking_nr_of_items#:#Anzahl book#:#obj_book_duplicate#:#Buchungspool kopieren -book#:#participants#:#Teilnehmer +book#:#participants#:#Personen book#:#reservation_deleted#:#Buchung gelöscht buddysystem#:#buddy_allow_to_contact_me#:#Kontaktanfragen erlauben buddysystem#:#buddy_allow_to_contact_me_default_info#:#Bestimmt ob standardmässig Kontaktanfragen verschickt werden können. @@ -2790,7 +2780,7 @@ certificate#:#certificate_a4_landscape#:#A4 Quer (210 mm x 297 mm) certificate#:#certificate_a5#:#A5 (210 mm x 148 mm) certificate#:#certificate_a5_landscape#:#A5 Quer (148 mm x 210 mm) certificate#:#certificate_background_image#:#Hintergrundbild -certificate#:#certificate_card_thumbnail_image#:#Thumbnail Image###29 10 2025 new variable +certificate#:#certificate_card_tile_image#:#Miniaturbild certificate#:#certificate_change_active_status#:#Der Aktiv-Status des Zertifikats wurde geändert certificate#:#certificate_confirm_deletion_text#:#Wollen Sie wirklich die Zertifikat-Vorlage und alle zugehörigen Daten löschen? certificate#:#certificate_custom#:#Eigenes Format... @@ -3037,9 +3027,9 @@ chatroom#:#messages#:#Nachrichten chatroom#:#no_further_users#:#Keine weiteren Benutzer anwesend. chatroom#:#no_messages#:#Es sind keine Nachrichten für den ausgewählten Zeitraum verfügbar. chatroom#:#no_username_given#:#Bitte wählen Sie einen Anmeldenamen! -chatroom#:#osc_browser_noti_no_permission_error#:#Bitte entfernen Sie die ILIAS-Domain von der Liste der blockierten Websites in den Benachrichtigungs-Einstellungen Ihres Browsers oder Betriebssystems. Andernfalls kann ILIAS keine Browser-Benachrichtigungen zustellen. +chatroom#:#osc_browser_noti_no_permission_error#:#Bitte entfernen Sie die ILIAS-Domain von der Liste der blockierten Websites in den Benachrichtigungseinstellungen Ihres Browsers oder Betriebssystems. Andernfalls kann ILIAS keine Browser-Benachrichtigungen zustellen. chatroom#:#osc_browser_noti_no_support_error#:#Browser-Benachrichtigungen werden mit Ihrem aktuellem Browser nicht unterstützt. Bitte stellen Sie sicher, dass Sie via HTTPS auf ILIAS zugreifen, und Ihr Browser als <a href="https://caniuse.com/#feat=notifications" target="_blank" rel="noopener noreferrer">unterstützter Browser</a> aufgelistet wird. -chatroom#:#osc_browser_noti_req_permission_error#:#Die Browser-Benachrichtigungen konnten nicht aktiviert werden, da Sie den Zugriff in Ihrem Browser verweigert haben. Bitte entfernen Sie die ILIAS-Domain von der Liste der blockierten Websites in den Benachrichtigungs-Einstellungen Ihres Browsers oder Betriebssystems. +chatroom#:#osc_browser_noti_req_permission_error#:#Die Browser-Benachrichtigungen konnten nicht aktiviert werden, da Sie den Zugriff in Ihrem Browser verweigert haben. Bitte entfernen Sie die ILIAS-Domain von der Liste der blockierten Websites in den Benachrichtigungseinstellungen Ihres Browsers oder Betriebssystems. chatroom#:#osc_enable_browser_notifications_info#:#Wenn aktiviert, erhalten Sie beim Eintreffen neuer Chats oder Chat-Nachrichten eine Browser-Benachrichtigung, wenn zwischen zwei Chat-Beiträgen mehr als %s Minute(n) vergangen ist/sind. Befindet sich ILIAS im Hintergrund und arbeiten Sie in anderen Browser-Tabs, oder ist der Browser ausgeblendet, erhalten Sie ebenfalls eine Benachrichtigung. chatroom#:#osc_enable_browser_notifications_label#:#Browser-Benachrichtigungen chatroom#:#osc_noti_title#:#Neue Chat-Nachricht @@ -3291,7 +3281,7 @@ cmix#:#highscore_top_table#:#Bestenliste cmix#:#highscore_top_table_description#:#Teilnehmern wird eine Tabelle mit den besten Platzierungen angezeigt. cmix#:#highscore_wtime#:#Dauer cmix#:#highscore_wtime_description#:#Eine Spalte mit der Dauer wird in die Rangliste aufgenommen. -cmix#:#info_availability#:#Hereby you can operate the availability of the LRS-type within the magazine. All types can set on "allow existing ones" instead of being deleted.###26 08 2024 new variable +cmix#:#info_availability#:#Hiermit können Sie die Verfügbarkeit des LRS-Typs innerhalb des Magazins steuern. Alle Typen können auf „vorhandene zulassen” eingestellt werden, statt sie zu löschen. cmix#:#info_description#:#Diese Beschreibung wird bei der Auswahl des LRS-Typs für neue Objekte angezeigt. cmix#:#info_external_lrs#:#Bei einem externen Learning Record Store (LRS) wird dem Anwender ein Hinweis angezeigt. Ein externer LRS ist gekennzeichnet durch einen unzureichenden Einfluss auf den LRS und durch den Betreiber von ILIAS. Dies ist der Fall, wenn es keine Rechte zum Löschen gibt. cmix#:#info_lrs_endpoint#:#URL des Endpoints ohne „/“ am Ende @@ -3531,7 +3521,7 @@ common#:#all_objects#:#Alle Objekte common#:#all_roles#:#Alle Rollen common#:#all_topics#:#Alle Themen common#:#all_users#:#Alle Benutzer -common#:#allow_assign_users#:#Benutzerzuweisung für lokale Administratoren erlauben +common#:#allow_assign_users#:#Rolle darf lokalen Konten zugewiesen werden. common#:#allow_override_alert#:#Die Regeln der .htaccess-Datei können nicht ausgewertet werden. common#:#allow_register#:#Verfügbar im Registrierungsformular common#:#allow_user_toggle_noti#:#Mitglied darf Benachrichtigung deaktivieren @@ -3835,7 +3825,7 @@ common#:#cron_users_without_login_del_create_date_thr#:#Schwellenwert common#:#cron_users_without_login_del_create_date_thr_info#:#Alle Anmeldekonten, deren Erstellung länger her ist als der hier definierte Schwellenwert, werden für eine Löschung berücksichtigt. common#:#cron_users_without_login_del_role_whitelist#:#Berücksichtigte Rollen common#:#cron_users_without_login_del_role_whitelist_info#:#Nur Benutzer mit einer der ausgewählten globalen Rollen werden gelöscht. Hat ein Benutzer eine der nicht ausgewählten Rollen inne, bleibt das ILIAS-Konto weiter bestehen. -common#:#cronjob_last_start#:#Letzter Start des Cron-Jobs +common#:#cronjob_last_start#:#Letzte automatische Ausführung des Cron-Jobs-Scripts common#:#cronjob_last_start_unknown#:#Konnte nicht ermittelt werden common#:#crs#:#Kurs common#:#crs_activation_start_invalid#:#Der Start und der Endtermin sind nicht gültig. @@ -3956,7 +3946,7 @@ common#:#dpro_accept_usr_agreement#:#Datenschutzerklärung akzeptieren? common#:#dpro_accept_usr_agreement_intro#:#Es liegt eine neue Datenschutzerklärung vor. Sie müssen diese akzeptieren, bevor Sie mit der Nutzung von ILIAS fortfahren können. Lesen Sie das folgende Dokument sorgfältig durch und geben Sie unten auf der Seite Ihre Zustimmung oder Ablehnung. common#:#dpro_agreed_on#:#DS zugestimmt am common#:#dpro_force_accept_usr_agreement#:#Sie müssen die Datenschutzerklärung akzeptieren! -common#:#dpro_no_agreement_description#:#Aktuell wird in dieser Installation keine Datenschutzerklärung angeboten. Bitte kontaktieren Sie die <a href="%1$s">ILIAS-Administration</a>. +common#:#dpro_no_agreement_description#:#Aktuell wird in dieser Installation keine Datenschutzerklärung angeboten. Bitte kontaktieren Sie die <a href="%1$s">technische Betreuung</a>. common#:#dpro_refuse_acceptance#:#Wiederruf der Akzeptanz der Datenschutzerklärung common#:#dpro_usr_agreement#:#Datenschutzerklärung common#:#dpro_usr_agreement_footer_intro#:#Zu dieser Datenschutzerklärung haben Sie ihr Einverständnis erklärt. @@ -3965,7 +3955,7 @@ common#:#dpro_withdraw_consent_description_external#:#Bitte kehren Sie zu Ihrer common#:#dpro_withdraw_consent_description_internal#:#Bitte loggen Sie sich wieder ein, um den Widerrufsvorgang abzuschließen. common#:#dpro_withdraw_consent_header#:#Einverständnis zur Datenschutzerklärung widerrufen common#:#dpro_withdraw_consent_info#:#Widerrufen der Zustimmung zu der Datenschutzerklärung -common#:#dpro_withdraw_consent_info_external#:#Bitte benachrichtigen Sie den zuständigen Administrator Ihres Autorisierungssystems, und teilen Sie Ihre Absicht mit. +common#:#dpro_withdraw_consent_info_external#:#Benachrichtigen Sie die zuständige Administration Ihres Autorisierungssystems, dass Ihr Konto gelöscht werden soll. common#:#drafts#:#Entwürfe common#:#drag_file_here#:#Ziehen Sie die Datei in diesen Bereich common#:#drag_files_here#:#Ziehen Sie die Dateien in diesen Bereich @@ -4029,7 +4019,7 @@ common#:#err_2_param#:#Nur 2 Parameter! common#:#err_auth_apache_failed#:#Die Authentifikation ist fehlgeschlagen. common#:#err_auth_ldap_no_ilias_user#:#Die Anmeldung ist fehlgeschlagen. Die LDAP-Authentifizierung war erfolgreich, aber es existiert kein entsprechendes ILIAS-Konto. Bitte kontaktieren Sie Ihre technische Betreuung. common#:#err_auth_mode_inactive#:#Zur Zeit ist leider keine Anmeldung möglich. -common#:#err_auth_soap_no_ilias_user#:#Anmeldung fehlgeschlagen! Die SOAP-Authentifizierung war erfolgreich, aber es existiert kein entsprechender ILIAS-Benutzer. Bitte kontaktieren Sie Ihren Systemadministrator. +common#:#err_auth_soap_no_ilias_user#:#Die Anmeldung ist fehlgeschlagen. Die SOAP-Authentifizierung war erfolgreich, aber es existiert kein entsprechendes ILIAS-Konto. Bitte kontaktieren Sie die technische Betreuung. common#:#err_check_input#:#Die Einstellungen konnten nicht gespeichert werden. Bitte überprüfen Sie Ihre Eingaben. common#:#err_count_param#:#Grund: Falsche Parameteranzahl common#:#err_disabled#:#Die Kontoerstellung via Shibboleth wurde deaktiviert. Bitte kontaktieren Sie die Systemadministration für weitere Informationen. @@ -4600,6 +4590,7 @@ common#:#mail_message_scheduled_info#:#Geplante Mails werden bis zum gewählten common#:#mail_not_sent#:#Ihre Mail konnte nicht verschickt werden common#:#mail_schedule_error_no_datetime#:#Das Planen einer Mail erfordert ein Datum und eine Uhrzeit. common#:#mail_schedule_error_past_datetime#:#Mails können nicht in der Vergangenheit geplant werden. +common#:#mail_schedule_scheduled_datetime#:#Geplanter Versandzeitpunkt common#:#mail_scheduled#:#Mail zur späteren Zustellung im Postausgang abgelegt. common#:#mail_search_no#:#Es wurden keine passenden Ergebnisse gefunden common#:#mail_select_one#:#Sie müssen mindestens eine Mail auswählen @@ -4943,8 +4934,6 @@ common#:#obj_etal#:#Gespräch Teammitglied common#:#obj_exc#:#Übung common#:#obj_exc_duplicate#:#Übung kopieren common#:#obj_excv#:#Übungszertifikat -common#:#obj_extt#:#Software von Drittanbietern -common#:#obj_extt_desc#:#Konfigurieren Sie hier externe Software und Dienste, welche von ILIAS unterstützt werden common#:#obj_facs#:#Dateien common#:#obj_facs_desc#:#Einstellungen für den Objekttyp Datei common#:#obj_file#:#Datei @@ -5017,7 +5006,6 @@ common#:#obj_nots_desc#:#Notizfunktion administrieren common#:#obj_nwss#:#Neuigkeiten und Webfeeds common#:#obj_nwss_desc#:#Einstellungen für interne Neuigkeiten und externe Webfeeds common#:#obj_objf#:#Objektdefinitionen -common#:#obj_objf_desc#:#ILIAS-Objekttypen und -rechte. (Nur für Experten!) common#:#obj_orgu#:#Organisationseinheit common#:#obj_orgu_description#:#Anlage und Verwaltung der Organisationsstruktur common#:#obj_page#:#Seite @@ -5446,6 +5434,7 @@ common#:#renderer_supported_file_types#:#Unterstützte Dateitypen common#:#renderer_supported_repo_types#:#Unterstützte ILIAS-Objekte common#:#renderer_type_builtin#:#Eingebaut common#:#rep_main_page#:#Einstiegsseite +common#:#rep_main_page_logo_alt#:#Logo ILIAS - zur Einstiegsseite common#:#repeat_scan#:#Wiederhole Virenscan... common#:#repeat_scan_failed#:#Wiederholter Scan fehlgeschlagen. common#:#repeat_scan_succeded#:#Wiederholter Scan erfolgreich. @@ -5558,7 +5547,7 @@ common#:#search_new#:#Neue Suche common#:#search_result#:#Suchergebnis common#:#search_results#:#Suchergebnisse common#:#search_user#:#Benutzer suchen -common#:#search_users#:#Look Up Users###29 10 2025 new variable +common#:#search_users#:#Benutzer suchen common#:#seas_max_hits#:#Maximalanzahl von Treffern common#:#seas_max_hits_info#:#Stellen Sie hier die Maximalanzahl von Suchergebnissen ein, die nach einer Suchanfrage ausgegeben werden. Je geringer die Zahl ist, desto schneller erfolgt der Seitenaufbau. common#:#seas_settings#:#Systemweite Suche @@ -5570,6 +5559,7 @@ common#:#select#:#Auswählen common#:#select_all#:#Alle auswählen common#:#select_at_least_one_object#:#Bitte wählen Sie mindestens ein Objekt aus. common#:#select_file#:#Datei wählen +common#:#select_file_from_computer#:#Datei wählen common#:#select_files_from_computer#:#Dateien wählen common#:#select_max_one_item#:#Bitte wählen Sie nur ein Objekt aus. common#:#select_object_to_link#:#Bitte wählen Sie das zu verknüpfende Objekt aus. @@ -5790,7 +5780,7 @@ common#:#top_of_page#:#Seitenanfang common#:#tos_accept_usr_agreement#:#Nutzungsvereinbarung akzeptieren? common#:#tos_accept_usr_agreement_intro#:#Es liegen neue Nutzungsbedingungen vor. Sie müssen sie akzeptieren, bevor Sie mit der Nutzung von ILIAS fortfahren können. Lesen Sie das folgende Dokument sorgfältig durch und geben Sie unten auf der Seite Ihre Zustimmung oder Ablehnung. common#:#tos_force_accept_usr_agreement#:#Sie müssen die Nutzungsvereinbarung akzeptieren! -common#:#tos_no_agreement_description#:#Aktuell wird in dieser Installation keine Nutzungsvereinbarung angeboten. Bitte kontaktieren Sie die <a href="%1$s">ILIAS-Administration</a>. +common#:#tos_no_agreement_description#:#Aktuell wird in dieser Installation keine Nutzungsvereinbarung angeboten. Bitte kontaktieren Sie die <a href="%1$s">technische Betreuung</a>. common#:#tos_refuse_acceptance#:#Akzeptanz der Nutzungsvereinbarung ablehnen common#:#tos_usr_agreement#:#Nutzungsvereinbarung common#:#tos_usr_agreement_footer_intro#:#Zu dieser Nutzungsvereinbarung haben Sie ihr Einverständnis erklärt. @@ -5799,7 +5789,7 @@ common#:#tos_withdraw_consent_description_external#:#Bitte kehren Sie zu Ihrer H common#:#tos_withdraw_consent_description_internal#:#Bitte loggen Sie sich wieder ein, um den Widerrufsvorgang abzuschließen. common#:#tos_withdraw_consent_header#:#Einverständnis zur Nutzungsvereinbarung widerrufen common#:#tos_withdraw_consent_info#:#Zustimmung zur Nutzungsvereinbarung widerrufen -common#:#tos_withdraw_consent_info_external#:#Bitte benachrichtigen Sie den zuständigen Administrator Ihres Autorisierungssystems, und teilen Sie Ihre Absicht mit. +common#:#tos_withdraw_consent_info_external#:#Benachrichtigen Sie die zuständige Administration Ihres Autorisierungssystems, dass Ihr Konto gelöscht werden soll. common#:#total#:#Gesamt common#:#tracking_settings#:#Einstellungen common#:#translation#:#Übersetzung @@ -5866,6 +5856,7 @@ common#:#upload_settings#:#Upload-Einstellungen common#:#upload_svg_rejection_message#:#Eine hochgeladene SVG-Datei enthält möglicherweise bösartigen Code und kann nicht verarbeitet werden. common#:#upload_svg_rejection_message_base64#:#Die Datei enthält base64 kodierten Inhalt. common#:#upload_svg_rejection_message_elements#:#Die Datei enthält Elemente oder Attribute, die nicht erlaubt oder bekannt sind. +common#:#upload_svg_rejection_message_foreign_object#:#Die Datei bindet externe Objekte ein. common#:#upload_svg_rejection_message_script#:#Die Datei enthält Skript-Elemente. common#:#uploaded_and_checked#:#Die Datei wurde hochgeladen und überprüft, Sie können sie nun importieren. common#:#uploading#:#Hochladen... @@ -5929,7 +5920,7 @@ common#:#usr_filter_lastlogin#:#Letztes Login eines Benutzers common#:#usr_filter_role#:#Zugewiesene Rolle common#:#usr_inactive_only#:#Nur nicht-aktive Benutzer common#:#usr_limited_access_only#:#Nur Benutzer mit Zugangsbefristung -common#:#usr_name_undisclosed#:#Nicht freigegeben +common#:#usr_name_undisclosed#:#Profil nicht veröffentlicht common#:#usr_new#:#Neuer Benutzer common#:#usr_settings_changeable_lua#:#Änderbar in „Lokale Konten“ in Kategorien common#:#usr_settings_explanation_profile#:#Pro Datenfeld kann der Zugriff in Profil, Mitglieder-Reitern und lokalen Konten konfiguriert werden:<ul><li>Sichtbar: Angabe wird angezeigt, kann aber nicht geändert werden.</li><li>Änderbar: Angabe wird angezeigt und kann geändert werden.</li><li>Export: Angabe kann in Listen der Teilnehmerinnen und Teilnehmern exportiert werden.</li><li>Durchsuchbar: Nach der Angabe kann gesucht werden, und es gibt eine Autovervollständigung in Formularfeldern.</li><li>Bei der Einstellung „Erforderliche Angabe“ ist die Eingabe verpflichtend.</li></ul>Unabhängig von diesen Einstellungen kann die Systemadministration alle Daten ändern. @@ -6084,6 +6075,7 @@ cont#:#cont_news_timeline_landing_page#:#Startseite cont#:#cont_news_timeline_landing_page_info#:#Timeline als Startseite cont#:#cont_news_timeline_tab#:#Timeline cont#:#cont_no_title#:#Leerer Titel +cont#:#cont_only_crs_grp_fold_download#:#Es können nur Dateien, Kurse, Gruppen oder Ordner heruntergeladen werden. cont#:#cont_page_type_cont#:#Magazinseite (Kurs, Gruppe, Kategorie, ...) cont#:#cont_page_type_cstr#:#Startseite lernzielorientierter Kurs cont#:#cont_path#:#Pfad @@ -6121,7 +6113,7 @@ cont#:#cont_std_filter_title_2#:#Beschreibung cont#:#cont_std_filter_title_3#:#Titel/Beschreibung cont#:#cont_std_filter_title_4#:#Schlagwort cont#:#cont_std_filter_title_5#:#Autor -cont#:#cont_std_filter_title_6#:#Copyright +cont#:#cont_std_filter_title_6#:#Lizenz cont#:#cont_std_filter_title_7#:#Kontaktperson cont#:#cont_std_filter_title_8#:#Objekttyp cont#:#cont_std_filter_title_9#:#Online/Offline @@ -6163,10 +6155,8 @@ content#:#cont_Headline2#:#Überschrift 2 content#:#cont_Headline3#:#Überschrift 3 content#:#cont_Information#:#Information content#:#cont_Interaction#:#Interaktion -content#:#cont_Link#:#Link content#:#cont_List#:#Liste content#:#cont_Literature#:#Literatur -content#:#cont_Media#:#Medien (Standard) content#:#cont_Mnemonic#:#Merksatz content#:#cont_Numbers#:#Zahlen content#:#cont_Poly#:#Polygon @@ -6276,6 +6266,8 @@ content#:#cont_chapters_after_pages#:#Beachten Sie, dass innerhalb einer Ebene z content#:#cont_chapters_and_pages#:#Kapitel und Seiten content#:#cont_chapters_only#:#Nur Kapitel content#:#cont_char_format#:#Zeichenformat +content#:#cont_char_link#:#Link +content#:#cont_char_media#:#Medien (Standard) content#:#cont_char_style_acc#:#Akzentuiert content#:#cont_char_style_code#:#Code content#:#cont_char_style_com#:#Kommentar @@ -6534,7 +6526,7 @@ content#:#cont_footer#:#Fußzeile content#:#cont_footnote#:#Fußnote content#:#cont_force_all_open#:#Alle immer geöffnet content#:#cont_format#:#Format -content#:#cont_format_cells#:#Zellen formattieren +content#:#cont_format_cells#:#Zellen formatieren content#:#cont_fourth_edition#:#Neueste Version 'SCORM 2004 4th edition' content#:#cont_fourth_edition_info#:#Die neueste Version von SCORM 2004 bietet gegenüber der „3rd Edition“ einige Erweiterungen. Diese werden allerdings nur selten genutzt und können sich negativ auf die Performanz auswirken. So kann das Lernmodul Daten bereitstellen, die über SCO-Grenzen hinweg genutzt werden können. Dabei fallen nicht zu löschende Daten an, weshalb wir aus Datenschutzgründen die „3rd Edition“ empfehlen. content#:#cont_free_pages#:#Freie Seiten @@ -6574,7 +6566,7 @@ content#:#cont_hacc_needs_width#:#Bitte geben Sie für horizontale Akkordeons ei content#:#cont_has_row_header#:#Kopfzeile content#:#cont_header#:#Kopfzeile content#:#cont_height#:#Höhe in Pixel -content#:#cont_help_no_valid_tooltip_id#:#Die eingegebene Tooltip-ID ist nicht gültig. +content#:#cont_help_no_valid_tooltip_id#:#Die eingegebene Tooltipp-ID ist nicht gültig. content#:#cont_hide_adv#:#Vertiefungswissen verbergen content#:#cont_hide_head_foot_print#:#Kopf- und Fußzeile im Ausdruck ausblenden. content#:#cont_hidenavig#:#Linken Navigationsbaum ausblenden @@ -6737,7 +6729,7 @@ content#:#cont_lpe_openid_login_form#:#OpenID-Login-Maske content#:#cont_lpe_registration_link#:#Link zur Neuanmeldung content#:#cont_lpe_saml_login#:#SAML-Login content#:#cont_lpe_shib_login_form#:#Shibboleth-Login-Maske -content#:#cont_lpe_user_agreement_link#:#Link zur Benutzervereinbarung +content#:#cont_lpe_user_agreement_link#:#Link zur Nutzungsvereinbarung content#:#cont_lrs_settings#:#Einstellungen content#:#cont_lvalue#:#Datenelement content#:#cont_maintenance#:#Wartung @@ -7349,7 +7341,7 @@ content#:#st#:#Kapitel content#:#start_lm#:#Lernmodul starten content#:#text_repr#:#Alternativtext content#:#text_repr_info#:#Wird verwendet, wenn die Grafik nicht angezeigt werden kann. -copa#:#copa_activation_online_info#:#Nur wenn die Inhaltsseite online geschaltet ist, können Benutzer auf die Inhaltsseite zugreifen. Wenn nicht, ist die Inhaltsseite nur für Administratoren verfügbar. +copa#:#copa_activation_online_info#:#Objekt ist veröffentlicht und kann von allen Personen mit dem Recht „Lesezugriff“ genutzt werden. Andernfalls ist das Objekt nur für Personen mit dem Recht „Einstellungen bearbeiten“ verfügbar. copa#:#copa_add#:#Inhaltsseite anlegen copa#:#copa_btn_lp_toggle_state_completed#:#Auf "Nicht bearbeitet" setzen copa#:#copa_btn_lp_toggle_state_not_completed#:#Auf "Bearbeitet" setzen @@ -7363,6 +7355,7 @@ copa#:#copa_value_reading_time_f_p#:#%s Minuten copa#:#copa_value_reading_time_f_s#:#%s Minute copa#:#obj_copa_duplicate#:#Inhaltsseite duplizieren copg#:#copg_active_to_small#:#Dieses Datum muss größer als das „Aktiv ab“-Datum sein. +copg#:#copg_add_content#:#Inhalte hinzufügen copg#:#copg_allow_html#:#HTML/Javascript erlauben copg#:#copg_allow_html_info#:#Benutzer können HTML oder Javascript in Seiteninhalten verwenden. Dies kann zu Sicherheitsproblemen führen. Sie sollten diese Funktion nur für Komponenten aktivieren, die von vertrauenswürdigen Benutzern verwendet werden. Die Möglichkeit, HTML in dieser Art einzubinden, wird möglicherweise in einer zukünftigen Version komplett entfallen. copg#:#copg_an_error_occured#:#Es ist leider ein Problem aufgetreten. @@ -7399,6 +7392,7 @@ copg#:#copg_sec_link_info#:#Wählen Sie ein Ziel für die Verlinkung des Blocks. copg#:#copg_snippet_cannot_be_edited#:#Dies ist ein vordefinierter Inhaltsbaustein, der an dieser Stelle nicht editiert werden kann. copg#:#copg_templates#:#Vorlagen copg#:#copg_unsupported_media_type#:#Dieses Medienobjekt hat einen nicht unterstützen Medientyp. +copg#:#copg_use_template#:#Vorlage nutzen copg#:#copg_x_minutes#:#%s Minute(n) cpad#:#cpad_reading_time_status#:#Lesezeit cpad#:#cpad_reading_time_status_desc#:#Falls aktiviert, wird die geschätzte Lesezeit für Inhaltsseiten ermittelt und angezeigt. @@ -8103,6 +8097,18 @@ dash#:#dash_click_here#:#Hier klicken dash#:#dash_co_delete#:#Dashboard-Gestaltung löschen dash#:#dash_co_lang#:#Dashboard-Gestaltung nach Sprachen dash#:#dash_customization#:#Gestaltung der Dashboard-Seite +dash#:#dash_dash_fav_remove#:#Entfernen +dash#:#dash_dash_fav_remove_info#:#Wollen Sie die folgenden Objekte wirklich aus Ihren Favoriten entfernen? +dash#:#dash_dash_fav_remove_multiple#:#Mehrere Favoriten entfernen +dash#:#dash_dash_ls_remove#:#Mitgliedschaften beenden +dash#:#dash_dash_ls_remove_info#:#Wollen Sie die folgenden Mitgliedschaften für Lernsequenzen wirklich beenden? +dash#:#dash_dash_ls_remove_multiple#:#Mehrere Mitgliedschaften beenden +dash#:#dash_dash_mem_remove#:#Mitgliedschaften beenden +dash#:#dash_dash_mem_remove_info#:#Wollen Sie die folgenden Mitgliedschaften für Kurse und Gruppen wirklich beenden? +dash#:#dash_dash_mem_remove_multiple#:#Mehrere Mitgliedschaften beenden +dash#:#dash_dash_rc_remove#:#Entfernen +dash#:#dash_dash_rc_remove_info#:#Wollen Sie die folgenden Objekte wirklich aus Ihren empfohlenen Inhalten entfernen? +dash#:#dash_dash_rc_remove_multiple#:#Mehrere Inhalte entfernen dash#:#dash_dashboard#:#Dashboard dash#:#dash_default_presentation#:#Standardpräsentation dash#:#dash_default_sortation#:#Standardsortierung @@ -8116,7 +8122,6 @@ dash#:#dash_enable_recommended_content#:#Empfohlene Inhalte dash#:#dash_enable_study_programmes#:#Studienprogramme dash#:#dash_enable_task#:#To-Dos dash#:#dash_favourites#:#Favoriten -dash#:#dash_info_sure_remove_from_favs#:#Sollen die folgenden Objekte wirklich aus Ihren Favoriten entfernt werden? dash#:#dash_item_removed#:#Der Eintrag wurde aus der Liste entfernt. dash#:#dash_learning_sequences#:#Meine Lernsequenzen dash#:#dash_list#:#Liste @@ -8128,6 +8133,7 @@ dash#:#dash_manual_new_item_pos_top#:#Oben dash#:#dash_manual_sorting_title#:#Manuelles Sortieren von Favoriten dash#:#dash_member_main_alt#:#Eine Ansicht der Mitgliedschaften kann auch direkt im Haupmenü eingebunden werden. dash#:#dash_memberships#:#Meine Kurse und Gruppen +dash#:#dash_no_items_to_manage#:#Keine Objekte zum Entfernen verfügbar. dash#:#dash_page_edit_info#:#Der Inhalt dieser Seite wird allen Nutzern auf ihrem Dashboard angezeigt. Die Inhaltsblöcke des Dashboards werden darunter angezeigt. dash#:#dash_presentation#:#Präsentation dash#:#dash_recommended_content#:#Empfohlene Inhalte @@ -8336,7 +8342,7 @@ dateplaner#:#cal_crs_timing_start#:#Bearbeitungsbeginn dateplaner#:#cal_daily#:#Täglich dateplaner#:#cal_date_and_time#:#Datum und Uhrzeit dateplaner#:#cal_date_booked#:#gebucht -dateplaner#:#cal_date_format_info#:#Bitte wählen Sie ein Format für die Eingabe eines Datums aus. +dateplaner#:#cal_date_format_info#:#Bitte wählen Sie ein Format für die Darstellung der Zeit aus. dateplaner#:#cal_date_time_title#:#Datum und Uhrzeit dateplaner#:#cal_day_end#:#Tagesende dateplaner#:#cal_day_of_month#:#Tag des Monats @@ -8518,7 +8524,7 @@ dateplaner#:#cal_sync_enabled#:#Eingeschaltet dateplaner#:#cal_table_categories#:#Kalenderauswahl dateplaner#:#cal_task_completion#:#Fertigstellung dateplaner#:#cal_third#:#Dritten -dateplaner#:#cal_time_format_info#:#Bitte wählen Sie ein Format für die Eingabe und Darstellung der Zeit. +dateplaner#:#cal_time_format_info#:#Bitte wählen Sie ein Format für die Darstellung der Zeit. dateplaner#:#cal_timezone_info#:#Bitte wählen Sie die nächstgelegene Stadt in Ihrer Zeitzone für die Anzeige von Terminen innerhalb von ILIAS aus. dateplaner#:#cal_type_crs#:#Kurskalender dateplaner#:#cal_type_exc#:#Übungskalender @@ -8637,7 +8643,7 @@ dcl#:#dcl_datetime#:#Datumseingabe mit Uhrzeit dcl#:#dcl_datetime_desc#:#Datum und Uhrzeit wird eingegeben oder im Kalender ausgewählt. dcl#:#dcl_datetime_selection#:#Datum mit Uhrzeit per Auswahl dcl#:#dcl_datetime_selection_desc#:#Aus vorgegebenen Optionen kann ein Datum mit Uhrzeit ausgewählt werden. -dcl#:#dcl_deactivate_view#:#Deactivate this view###29 10 2025 new variable +dcl#:#dcl_deactivate_view#:#Diese Ansicht deaktivieren dcl#:#dcl_default_sort_field#:#Sortierung dcl#:#dcl_default_sort_field_order#:#Sortierrichtung dcl#:#dcl_default_sort_field_order_desc#:#Tabelle wird standardmässig nach dem ausgewählten Feld sortiert. @@ -8654,7 +8660,7 @@ dcl#:#dcl_detailed_view#:#Einzelansicht dcl#:#dcl_display_action_menu#:#Kopieren dcl#:#dcl_display_action_menu_desc#:#Das Objekt kann von dem Eintrag aus kopiert werden. dcl#:#dcl_display_record_alt#:#Diesen Eintrag anzeigen -dcl#:#dcl_duplicate_non_unique_entries_exist#:#This may also concern existing records.###23 02 2024 new variable +dcl#:#dcl_duplicate_non_unique_entries_exist#:#Diese Regel ist nicht vereinbar mit den bereits vorhandenen Einträgen. dcl#:#dcl_edit#:#Einstellungen der Datensammlung dcl#:#dcl_edit_entry_rules#:#Eintragsbearbeitung dcl#:#dcl_edit_field#:#Feld bearbeiten @@ -8737,7 +8743,6 @@ dcl#:#dcl_msg_tableview_created#:#Ansicht hinzugefügt. dcl#:#dcl_msg_tableview_deleted#:#Ansicht gelöscht. dcl#:#dcl_msg_tableview_updated#:#Ansicht aktualisiert. dcl#:#dcl_msg_tableviews_delete_all#:#Löschen nicht möglich: Es muss mindestens eine Ansicht existieren. -dcl#:#dcl_msg_tableviews_order_updated#:#Anordnung der Ansichten aktualisiert. dcl#:#dcl_multiple_selection#:#Mehrfachauswahl dcl#:#dcl_new#:#Neue Datensammlung anlegen dcl#:#dcl_new_entries#:#Neue Einträge @@ -8753,7 +8758,8 @@ dcl#:#dcl_no_fields_yet#:#Es wurden noch keine Felder für diese Tabelle erstell dcl#:#dcl_no_read_access_on_any_standard_view#:#Sie haben auf keine Standard-Tabellenansicht Lesezugriff. dcl#:#dcl_no_search_results_found_for#:#Es wurden keine Module gefunden mit: dcl#:#dcl_no_such_reference#:#Der folgende Wert ist in der Referenztabelle nicht vorhanden: -dcl#:#dcl_no_tableview_found#:#Keine sichbare Tabellenansicht verfügbar! +dcl#:#dcl_no_table_found#:#Keine sichtbare Tabelle verfügbar! +dcl#:#dcl_no_tableview_found#:#Keine sichtbare Tabellenansicht verfügbar! dcl#:#dcl_not_checked#:#Nicht ausgewählt dcl#:#dcl_not_supported_in_import#:#Dieser Feldtyp wird beim Import nicht unterstützt. dcl#:#dcl_notification_activate#:#Benachrichtigung aktivieren @@ -8762,7 +8768,6 @@ dcl#:#dcl_notification_deactivate#:#Benachrichtigung deaktivieren dcl#:#dcl_notification_deactivated#:#Benachrichtigung inaktiv dcl#:#dcl_notification_info#:#Jede Person kann Benachrichtigungen für sich aktivieren. dcl#:#dcl_notification_settings#:#Benachrichtigungseinstellungen -dcl#:#dcl_notimage_exception#:#Die Datei muss ein Bild sein. dcl#:#dcl_noturl_exception#:#Bitte geben Sie einen Link (beginnend mit http:// oder www.) oder eine E-Mail-Adresse ein. dcl#:#dcl_number#:#Ganze Zahlen dcl#:#dcl_number_desc#:#Eingabe ganzer Zahlen mit bis zu 9 Ziffern. Nicht erlaubt sind Brüche und Dezimalzahlen. @@ -8772,7 +8777,7 @@ dcl#:#dcl_open_url#:#Link öffen dcl#:#dcl_order#:#Sortierung dcl#:#dcl_origin_not_found#:#Urprungsfeld konnte nicht gefunden werden! dcl#:#dcl_own_entries#:#Nur eigene Einträge -dcl#:#dcl_owner#:#Eigener Eintrag von +dcl#:#dcl_owner#:#Eingetragen von dcl#:#dcl_owner_description#:#Eigene Einträge bleiben stets sichtbar. dcl#:#dcl_owner_name#:#Im Besitz von (Name) dcl#:#dcl_page_type_dclf#:#Detailansicht @@ -8788,7 +8793,7 @@ dcl#:#dcl_public_comments#:#Kommentare dcl#:#dcl_public_comments_desc#:#Benutzer können Datensätze dieser Tabelle kommentieren. dcl#:#dcl_rating#:#Bewertung dcl#:#dcl_rating_desc#:#Bestehende Einträge mit ein bis fünf Sternen bewerten. -dcl#:#dcl_rbac_roles_without_read_access_on_any_standard_view#:#The following rbac roles have read access on the data collection, but no read access on any standard view of a table:###29 10 2025 new variable +dcl#:#dcl_rbac_roles_without_read_access_on_any_standard_view#:#Die folgenden Rollen haben Lesezugriff auf die Datensammlung, jedoch auf keine Standard-Ansicht der Tabellen: dcl#:#dcl_record#:#Eintrag dcl#:#dcl_record_deleted#:#Eintrag gelöscht. dcl#:#dcl_record_from_total#:#%d von %d @@ -8820,8 +8825,6 @@ dcl#:#dcl_std_field_not_importable#:# - Standardfelder sind nicht importierbar. dcl#:#dcl_std_filter#:#Filtervorbelegung dcl#:#dcl_supported_filetypes#:#Erlaubte Dateiendungen dcl#:#dcl_supported_filetypes_desc#:#Sie können hier kommagetrennt Dateiendungen angeben. Zum Beispiel: pdf, docx -dcl#:#dcl_switch_table#:#Tabelle wechseln -dcl#:#dcl_switch_view#:#Ansicht ändern dcl#:#dcl_table#:#Tabelle dcl#:#dcl_table_id#:#Tabellen ID dcl#:#dcl_table_list_fields#:#Felder der ausgewählten Tabelle @@ -8857,7 +8860,7 @@ dcl#:#dcl_text_email_title#:#Titel dcl#:#dcl_text_email_title_info#:#Titel für die URL oder E-Mail-Adresse (optional). dcl#:#dcl_text_selection#:#Text per Auswahl dcl#:#dcl_text_selection_desc#:#Ausvorgegebenen Optionen kann eine Auswahl getroffen werden, -dcl#:#dcl_title_standardview#:#Standard-Ansicht +dcl#:#dcl_title_standard#:#Standard dcl#:#dcl_unique#:#Gleiche Einträge verhindern dcl#:#dcl_unique_desc#:#Identische Einträge sind in diesem Feld nicht erlaubt. dcl#:#dcl_unique_exception#:#Der eingegebene Wert wird schon von einem anderen Eintrag verwendet. @@ -8892,6 +8895,8 @@ dcl#:#role_limitation#:#Rollenbasierte Einschränkung dcl#:#roles#:#Rollen mit Zugriff dcl#:#roles_desc#:#Wählen sie zugriffsberechtigte Rollen für die Ansicht. dcl#:#set_as_default#:#Als Standard setzen +dcl#:#table_not_found#:#Tabelle nicht gefunden! +dcl#:#tableview_not_found#:#Tabellenansicht nicht gefunden! didactic#:#activate_exclusive_template#:#Standard ausgrauen didactic#:#activate_exclusive_template_info#:#Die Standard-Vorlage wird überall dort ausgegraut, wo diese didaktische Vorlage aktiv ist. didactic#:#activate_local_didactic_template#:#Gültigkeitsbereich @@ -8941,7 +8946,7 @@ didactic#:#sess_closed#:#Geschlossene Sitzung didactic#:#sess_closed_info#:#Die Sitzung ist für Nicht-Teilnehmer unsichtbar. dpro#:#dpro_accept_usr_agreement_anonymous#:#Datenschutzerklärung dpro#:#dpro_accept_usr_agreement_anonymous_intro#:#Bevor Sie zu ILIAS wechseln, akzeptieren Sie die folgende Datenschutzerklärung. -dpro#:#dpro_account_reg_not_possible#:#Eine Selbstregistrierung ist aktuell nicht möglich, da in dieser Installation keine Datenschutzerklärung angeboten wird. Bitte kontaktieren Sie Ihren <a href="%1$s">Systemadministrator</a> für weitere Informationen. +dpro#:#dpro_account_reg_not_possible#:#Eine Selbstregistrierung ist aktuell nicht möglich, da in dieser Installation keine Datenschutzerklärung angeboten wird. Bitte kontaktieren Sie die <a href="%1$s">technische Betreuung</a> für weitere Informationen. dpro#:#dpro_agree_date#:#Datenschutzerklärung zugestimmt am dpro#:#dpro_last_reset_date#:#Die Datenschutzerklärung wurde zuletzt am %s zurückgesetzt. Setzen Sie die Datenschutzerklärung nur zurück, wenn sich die Dokumente in der Zwischenzeit geändert haben und eine Zustimmung zu dieser geänderten Vereinbarung gewünscht ist. dpro#:#dpro_mode#:#Zustimmungsmodus @@ -9357,7 +9362,7 @@ exc#:#exc_ended#:#Beendet exc#:#exc_ended_on#:#Beendet am exc#:#exc_export_excel#:#Export (Excel) exc#:#exc_fb_files#:#Bewertungsdateien -exc#:#exc_fb_tutor_info#:#Wird eine Datei zur Bewertung der Übungseinheit hochgeladen, erhält die Teilnehmerin oder der Teilnehmer eine Benachrichtigung und kann dann in der Übersicht der Übungseinheiten heruntergeladen und eingesehen werden. +exc#:#exc_fb_tutor_info#:#Wird eine Datei zur Bewertung der Übungseinheit hochgeladen, erhält die Teilnehmerin oder der Teilnehmer eine Benachrichtigung und kann dann die Datei in der Übersicht der Übungseinheiten herunterladen und einsehen. exc#:#exc_feedback#:#Rückmeldungen exc#:#exc_feedback_notification_body#:#Das Feedback zur folgenden Übungseinheit wurde freigeschaltet. exc#:#exc_feedback_notification_link#:#Link zur Übung @@ -9392,7 +9397,7 @@ exc#:#exc_individual_deadline#:#Individueller Abgabetermin exc#:#exc_individual_deadline_action#:#Individuellen Abgabetermin setzen exc#:#exc_individual_deadline_before_global#:#Das Datum muss hinter der (letzten) Deadline liegen: %s. exc#:#exc_instruction_files#:#Dateien zur Arbeitsanweisung -exc#:#exc_instruction_migration_not_run#:#Die Migration der Dateien zur Arbeitsanweisung ist noch nicht abgeschlossen. Kontaktieren Sie ihren Systemadministrator. +exc#:#exc_instruction_migration_not_run#:#Die Migration der Dateien zur Arbeitsanweisung ist noch nicht abgeschlossen. Kontaktieren Sie die technische Betreuung. exc#:#exc_late_submission#:#Verspätete Abgabe exc#:#exc_late_submission_warning#:#Abgaben nach %s werden als verspätet gekennzeichnet. exc#:#exc_lead_request_idl#:#Abgabefrist anfragen @@ -9490,6 +9495,7 @@ exc#:#exc_passed_status_determination#:#Bewertung als „Bestanden“ exc#:#exc_passing_exc#:#Bestehen der Übung exc#:#exc_past#:#Vergangene exc#:#exc_peer_deadline_mismatch#:#Da das Feedback erst nach dem Abgabetermin der Übungseinheit gegeben werden kann, darf die Deadline für das Feedback nicht vor dem Abgabedatum liegen. +exc#:#exc_peer_feedback_status#:#Status exc#:#exc_peer_review#:#Peer-Feedback exc#:#exc_peer_review_ass_setting_info#:#Der zusätzliche Reiter „Peer-Feedback“ wird aktiviert. Dort legen Sie fest, wie teilnehmende Personen einander Feedback geben sollen. Feedback kann abgegeben werden, sobald der Abgabetermin und eine etwaige Nachfrist abgelaufen sind. exc#:#exc_peer_review_chars_invalid#:#Sie haben noch nicht die erforderliche Länge des Textes von %s Zeichen erreicht. @@ -9617,6 +9623,7 @@ exc#:#exc_settings_feedback_mail_info#:#Rückmeldungen zur jeweiligen Abgabe wer exc#:#exc_settings_feedback_text#:#Texteingabe exc#:#exc_settings_feedback_text_info#:#Rückmeldungen zur jeweiligen Abgabe werden in ein Textfeld eingegeben und im Reiter „Übungseinheiten“ angezeigt. Zusätzlich erhalten teilnehmende Personen eine Benachrichtigung per Mail. exc#:#exc_show_instructions#:#Arbeitsanweisung anzeigen +exc#:#exc_show_more#:#Mehr anzeigen exc#:#exc_show_peer_review#:#Peer-Feedback anzeigen exc#:#exc_show_submissions#:#Lösungsabgaben veröffentlichen exc#:#exc_show_submissions_info#:#Bei Übungseinheiten mit einem festen Datum können nach dem Abgabetermin alle Personen die Einreichungen der anderen einsehen. @@ -9731,6 +9738,7 @@ exc#:#exc_type_upload#:#Datei exc#:#exc_type_upload_team#:#Datei als Team einreichen exc#:#exc_value_can_not_set#:#Dieser Wert kann nicht gesetzt werden exc#:#exc_view_portfolio#:#Portfolio anzeigen +exc#:#exc_view_wiki#:#Wiki anzeigen exc#:#exc_wait_for_files#:#Der Download sollte automatisch starten. Bei Problemen klicken Sie bitte hier. exc#:#exc_wiki_container#:#Wiki-Container exc#:#exc_wiki_container_info#:#An dieser Stelle werden die neuen Team-Wikis angelegt. @@ -9771,7 +9779,7 @@ exercise#:#exc_your_submission#:#Ihre Einreichung exp#:#exp_create_file#:#Exportdatei erzeugen exp#:#exp_error_disabled#:#Der Export von Container-Objekten ist deaktiviert. Bei Fragen wenden Sie sich bitte an die technische Betreuung. exp#:#exp_error_too_many_objects#:#Der Export überschreitet die maximal erlaubte Zahl an Objekten (%1). Bitte wählen Sie eine kleinere Anzahl an Objekten. -exp#:#exp_export_dropdown#:#Export###29 10 2025 new variable +exp#:#exp_export_dropdown#:#Export exp#:#exp_export_files#:#Exportdateien exp#:#exp_export_single_option#:#Export %s exp#:#exp_file_created#:#Eine Exportdatei wurde erstellt. @@ -9802,7 +9810,7 @@ export#:#export_create#:#Neu erstellen export#:#export_create_new_file#:#Neue Exportdatei erstellen export#:#export_existing#:#Wiederverwenden export#:#export_export_date#:#Exportdatum -export#:#export_info_public_access#:#Öffentlich zugängliche Exportdatei +export#:#export_info_public_access#:#Öffentliche Exportdatei export#:#export_info_public_access_download#:#Download export#:#export_last_export#:#Letzter Export export#:#export_last_export_file#:#Letzte Exportdatei benutzen @@ -9817,9 +9825,9 @@ file#:#add_icon#:#Icon hinzufügen file#:#amount_of_downloads#:#Downloads file#:#amount_of_downloads_since#:#%d seit %s file#:#copyright_custom#:#Benutzerdefiniert -file#:#copyright_custom_info#:#Benutzerdefiniertes Copyright auswählen, welches auf alle entpackten Dateien dieses Archivs angewandt wird. +file#:#copyright_custom_info#:#Lizenz auswählen, welche auf alle entpackten Dateien dieses Archivs angewandt wird. file#:#copyright_inherited#:#Vererbt -file#:#copyright_inherited_info#:#Copyright des Zip-Archivs auf seine entpackten Dateien anwenden. <br \>Copyright des Zip-Archivs: %s. +file#:#copyright_inherited_info#:#Lizenz des Zip-Archivs auf seine entpackten Dateien anwenden. <br \>Lizenz des Zip-Archivs: %s. file#:#could_not_create_file_objs#:#Beim Erstellen der Dateiobjekte ist ein Fehler aufgetreten, wenden Sie sich an die Administrierenden der Plattform. file#:#de_activate_icon#:#(De-)Aktivieren file#:#download_ascii_filename#:#Nur ASCII-Zeichen im Download @@ -9971,7 +9979,7 @@ form#:#form_msg_max_upload#:#Maximale Anzahl von gleichzeitig hochladbaren Datei form#:#form_msg_numeric_value_required#:#Bitte geben Sie einen numerischen Wert ein. form#:#form_msg_value_too_high#:#Wert ist zu hoch. Bitte geben Sie einen niedrigeren Wert ein. form#:#form_msg_value_too_low#:#Wert ist zu niedrig. Bitte geben Sie einen höheren Wert ein. -form#:#form_msg_wrong_date#:#Falsches Datum. Bitte geben Sie ein gültiges Datum an. +form#:#form_msg_wrong_date#:#Bitte überprüfen Sie Ihre Datumseingabe. Sowohl ein Startdatum als auch ein Enddatum sind erforderlich und das Startdatum darf nicht später liegen als das Enddatum. form#:#form_no_link#:#Kein Link form#:#form_open_answer#:#Freitext form#:#form_password_not_allowed_for_auth#:#Für die gewählte Authentifizierungmethode können Sie das Passwort nicht ändern @@ -10134,9 +10142,9 @@ forum#:#frm_revoke_censorship#:#Zensur aufheben forum#:#frm_search#:#Suche forum#:#frm_selected_merge_src#:#Gewähltes Thema für die Zusammenführung: %s forum#:#frm_settings_form_header#:#Einstellungen des Forums -forum#:#frm_settings_mod_functions_header#:#Funktionen für Moderation +forum#:#frm_settings_mod_functions_header#:#Moderation forum#:#frm_settings_privacy_header#:#Datenschutz -forum#:#frm_settings_user_functions_header#:#Funktionen für Teilnehmer +forum#:#frm_settings_user_functions_header#:#Beiträge und Themen forum#:#frm_statistics#:#Statistik forum#:#frm_statistics_disabled_for_participants#:#Die Statistik ist für normale Forennutzer nicht sichtbar. forum#:#frm_statistics_enabled#:#Statistik anzeigen @@ -10161,7 +10169,7 @@ forum#:#new_post#:#Neuer Beitrag forum#:#new_thread_with_post#:#Neues Thema mit Beitrag forum#:#no_forum_selected#:#Kein Forum für die Verschiebeaktion ausgewählt! forum#:#not_allowed_to_merge_into_another_forum#:#Es ist nicht möglich Themen verschiedener Foren zusammenzuführen. -forum#:#notification_settings#:#Benachrichtigungs-Einstellungen +forum#:#notification_settings#:#Benachrichtigungseinstellungen forum#:#notify_censored#:#Zensierte Beiträge forum#:#notify_modified#:#Geänderte Beiträge forum#:#notify_post_deleted#:#Gelöschte Beiträge @@ -10513,7 +10521,7 @@ gsfo#:#translate#:#Übersetzen gsfo#:#translations#:#Übersetzungen help#:#gdtr_active#:#Aktiv help#:#gdtr_add_step#:#Schritt hinzufügen -help#:#gdtr_add_tour#:#Add Tour +help#:#gdtr_add_tour#:#Tour hinzufügen help#:#gdtr_close#:#Tour beenden help#:#gdtr_delete_step#:#Schritt löschen help#:#gdtr_delete_step_mess#:#Sind Sie sicher, dass dieser Schritt gelöscht werden soll? @@ -10524,45 +10532,50 @@ help#:#gdtr_deleted_tour#:#Die Tour wurde gelöscht. help#:#gdtr_edit_content#:#Inhalt bearbeiten help#:#gdtr_edit_page_info#:#Bearbeiten Sie den Inhalt, der erscheinen soll um das ausgewählte Bedienelement zu beschreiben. help#:#gdtr_edit_properties#:#Eigenschaften bearbeiten -help#:#gdtr_edit_step_info#:#In diesem Formular spezifizieren Sie das Bedienelement auf dem Bildschirm, welches einen Erklärungstext in diesem Schritt der Tour erhalten soll. In der Präsentation wird dann ein Popover mit dem definierten Erklärungstext neben dem angegebenen Element dargestellt. -help#:#gdtr_edit_steps#:#Edit Steps -help#:#gdtr_element_id#:#Element ID +help#:#gdtr_edit_step_info#:#Wählen Sie das Bedienelement aus, das mit einem Erklärungstext versehen werden soll. +help#:#gdtr_edit_steps#:#Schritte bearbeiten +help#:#gdtr_element_id#:#Element-ID help#:#gdtr_form#:#Formular -help#:#gdtr_form_info#:#Das erste Formular im Hauptbereich der Ansicht. Normalerweise sollen Ansichten nur max. ein Formular enthalten. -help#:#gdtr_guided_tours#:#Guided Tours -help#:#gdtr_id_pres_users#:#IDs anzeigen für ILIAS-Konten -help#:#gdtr_id_pres_users_info#:#ILIAS-Konten, denen die Element IDs angezeigt werden. Mehrere Einträge müssen durch Kommas separiert werden. -help#:#gdtr_id_settings#:#ID Einstellungen +help#:#gdtr_form_info#:#Das erste Formular einer Seite +help#:#gdtr_guided_tours#:#Touren +help#:#gdtr_id_pres_users#:#IDs anzeigen für +help#:#gdtr_id_pres_users_info#:#Tragen Sie einen oder mehrere Anmeldenamen ein. Diesen Personen werden auf der Bedienoberfläche Tooltipps mit den IDs der einzelnen Elemente angezeigt. Fahren Sie mit der Maus über die Elemente, um die Tooltipps zu sehen. +help#:#gdtr_id_settings#:#Einstellungen help#:#gdtr_import_tour#:#Tour importieren -help#:#gdtr_language#:#Sprache -help#:#gdtr_language_info#:#Aktiviert eine Guided-Tour nur für Personen mit der eingestellten Sprache. -help#:#gdtr_list_tours_mess#:#Um die Anzeige von Screen- und Element-IDs als Tooltips zu aktivieren, müssen Sie ihren Accountnamen in den ID Einstellungen eintragen. +help#:#gdtr_language#:#Nach Sprache +help#:#gdtr_language_info#:#Nur Personen mit der ausgewählten Sprache sehen die Tour. +help#:#gdtr_list_tours_mess#:#Mit einer interaktiven Tour können Sie die Bedienelemente auf einer Seite in ILIAS erklären. Um Touren überhaupt ausarbeiten zu können, müssen Sie zunächst Ihren Anmeldenamen im Unterreiter „Einstellungen“ eintragen. help#:#gdtr_mainbar#:#Mainbar -help#:#gdtr_mainbar_info#:#Die Mainbar ist das Hauptmenü auf der linken Seite. Bei aktivierter ID-Darstellung werden die Element-IDs der einzelnen Einträge als Tooltip dargestellt. +help#:#gdtr_mainbar_ID_info#:#ID des gewünschten Eintrags im Hauptmenü. Fahren Sie mit der Maus über den Eintrag, um die ID als Tooltipp zu sehen. +help#:#gdtr_mainbar_info#:#Die Mainbar ist das Hauptmenü, das auf großen Bildschirmen auf der linken Seite angezeigt wird. help#:#gdtr_metabar#:#Metabar -help#:#gdtr_metabar_info#:#Die Metabar ist das Menü im rechten, oberen Bildrand. Bei aktivierter ID-Darstellung werden die Element-IDs der einzelnen Einträge als Tooltip dargestellt. +help#:#gdtr_metabar_ID_info#:#ID des gewünschten Elements in der Metabar. Fahren Sie mit der Maus über das Element, um die ID als Tooltipp zu sehen. +help#:#gdtr_metabar_info#:#Die Metabar ist das Menü im rechten, oberen Bildrand. help#:#gdtr_next_step#:#Nächster Schritt -help#:#gdtr_permission#:#Berechtigung -help#:#gdtr_permission_info#:#Aktiviert eine Guided-Tour für Personen mit gegebener Berechtigung, z.B. nur wenn das "Einstellungen bearbeiten" Recht vorhanden ist. Bei der Auswahl von "Erstellen" muss der Nutzende im aktuellen Bereich irgendein Objekt erstellen können. +help#:#gdtr_permission#:#Nach Rechten +help#:#gdtr_permission_info#:#Nur Personen mit den ausgewählten Rechten sehen die Tour. Diese Einstellung sollte nur zusammen mit der Einstellung „Nach Screen-ID“ genutzt werden. +help#:#gdtr_presentation_limitation#:#Anzeige einschränken help#:#gdtr_primary_button#:#Primary Button -help#:#gdtr_primary_button_info#:#Der erste Primary-Button im Hauptbereich der Ansicht. Dieser wird um Gegensatz zu anderen Aktionsknöpfen betont dargestellt. Normalerweise sollen Ansichten nur max. eine Primary-Button enthalten. +help#:#gdtr_primary_button_info#:#Diese besonderen Buttons gibt es nur auf wenigen Seiten in ILIAS. Sie sind farblich besonders hervorgehoben und kennzeichnen die wichtigste Aktion, die auf der Seite vorgenommen werden kann. help#:#gdtr_reset_tour#:#Tour zurücksetzen help#:#gdtr_reset_tour_mess#:#Wenn Sie die Tour zurücksetzen, werden alle diejenigen, die zuvor die Tour abgeschlossen haben, die Tour erneut präsentiert bekommen. Möchten Sie fortfahren? -help#:#gdtr_screen_ids#:#Screen IDs -help#:#gdtr_screen_ids_info#:#Ermöglicht es, eine Guided-Tour für einzelne Ansichten des Systems zu aktivieren. Wenn die ID-Anzeige aktiviert ist, wird die Screen-ID einer Ansicht ganz oben im Kopfbereich angezeigt. Mehrere IDs müssen durch Kommas separiert werden. +help#:#gdtr_screen_ids#:#Nach Screen-IDs +help#:#gdtr_screen_ids_info#:#Tragen Sie hier die Screen-IDs der Seiten ein, auf denen die Tour angezeigt wird – falls diese nicht überall gezeigt werden soll. Mehrere Screen-IDs müssen durch Kommas getrennt werden. help#:#gdtr_step#:#Schritt help#:#gdtr_step_type#:#Bedienelement help#:#gdtr_table#:#Tabelle -help#:#gdtr_table_info#:#Die erste Tabelle im Hauptbereich der Ansicht. Normalerweise sollen Ansichten nur max. eine Tabelle enthalten. +help#:#gdtr_table_info#:#Die erste Tabelle einer Seite help#:#gdtr_tabs#:#Reiter -help#:#gdtr_tabs_info#:#Die Reiter werden in der Mitte unter dem Haupttitel einer Ansicht dargestellt. Bei aktivierter ID-Darstellung werden die Element-IDs der einzelnen Einträge als Tooltip dargestellt. +help#:#gdtr_tabs_ID_info#:#ID des gewünschten Reiters. Fahren Sie mit der Maus über einen Reiter, um die ID als Tooltipp zu sehen. +help#:#gdtr_tabs_info#:#Reiter werden unter dem Titel einer Seite dargestellt. help#:#gdtr_toolbar#:#Toolbar -help#:#gdtr_toolbar_info#:#Die erste Toolbar im Hauptbereich der Ansicht. Diese wird normalerweise unterhalb der Reiter dargestellt und kann mehrere Bedienelemente enthalten. Normalerweise sollen Ansichten nur max. eine Toolbar enthalten. +help#:#gdtr_toolbar_info#:#Die Toolbar wird auf einigen Seiten unterhalb der Reiter dargestellt und enthält meistens mehrere Buttons. help#:#gdtr_tour_has_been_reset#:#Die Tour wurde zurückgesetzt. +help#:#gdtr_tour_settings#:#Einstellungen bearbeiten help#:#gdtr_tour_steps#:#Schritte -help#:#gdtr_tours#:#Tours +help#:#gdtr_tours#:#Touren help#:#gdtr_type#:#Typ -help#:#guided_tour#:#Guided Tour +help#:#guided_tour#:#Interaktive Touren help#:#help_all#:#Alle help#:#help_component#:#Komponente help#:#help_filter#:#Filter @@ -10578,12 +10591,12 @@ help#:#help_search_label#:#Suche in Hilfe help#:#help_select_a_file#:#Bitte wählen Sie eine Datei. help#:#help_set_mode#:#Hilfemodus setzen help#:#help_sure_delete_help_modules#:#Wollen Sie diese Pakete wirklich löschen? -help#:#help_toggle_tooltips#:#Hilfe-Tooltips -help#:#help_toggle_tooltips_info#:#Hilfe-Tooltips zu Menüs und Reitern anzeigen. -help#:#help_tooltip_id#:#Tooltip-ID -help#:#help_tooltips#:#Hilfe-Tooltips -help#:#help_tooltips_and_help#:#Tooltips und Handlungsanweisungen -help#:#help_tooltips_only#:#Nur Tooltips +help#:#help_toggle_tooltips#:#Hilfe-Tooltipps +help#:#help_toggle_tooltips_info#:#Hilfe-Tooltipps zu Menüs und Reitern anzeigen. +help#:#help_tooltip_id#:#Tooltipp-ID +help#:#help_tooltips#:#Hilfe-Tooltipps +help#:#help_tooltips_and_help#:#Tooltipps und Handlungsanweisungen +help#:#help_tooltips_only#:#Nur Tooltipps help#:#help_topcis#:#Themen help#:#help_tt_text#:#Text htlm#:#file_import_from_upload_dir_failed#:#Datei aus Uploadverzeichnis nicht importiert @@ -10699,14 +10712,19 @@ irss#:#creation_date#:#Erstellungsdatum (Diese Revision) irss#:#directory_name#:#Verzeichnisname irss#:#directory_name_info#:#Name des Verzeichnisses, welches an der aktuellen Stelle eingefügt werden soll. irss#:#download_zip#:#Alle Dateien als ZIP herunterladen +irss#:#entries_target_group#:#Ziel wählen +irss#:#entry_deleted_failed#:#Löschen nicht möglich irss#:#file_size#:#Dateigröße (Diese Revision) irss#:#file_size_bigger_than#:#Dateigröße > MB irss#:#full_size#:#Ressourcengröße (Alle Revisionen) irss#:#home_directory#:#Stammverzeichnis +irss#:#item_moved#:#Eintrag verschoben irss#:#max_revision#:#Maximale Revision irss#:#msg_error_adding_directory#:#Das Verzeichnis konnte nicht angelegt werden. +irss#:#msg_paths_deleted#:#Pfad(e) gelöscht irss#:#msg_success_adding_directory#:#Das Verzeichnis wurde erfolgreich angelegt. irss#:#msg_upload#:#Dateien zum Hinzufügen hier ablegen +irss#:#no_parent_selected#:#Kein Ziel gewählt irss#:#resource_id#:#Resource ID irss#:#resource_no_stakeholder_uri#:#Kein Stakeholder stellt einen Link zu der Nutzung dieser Resource zur Verfügung. irss#:#resource_overview#:#Ressourcen-Übersicht @@ -10938,7 +10956,7 @@ ldap#:#ldap_username_filter_info#:#Der Anmeldenamen-Filter kann optional verwend ldoc#:#deleteDocument#:#Löschen ldoc#:#detachCriterionAssignment#:#Löschen ldoc#:#ldoc_acceptance_history#:#Zustimmungshistorie -ldoc#:#ldoc_account_reg_not_possible#:#Eine Selbstregistrierung ist aktuell nicht möglich, da in dieser Installation keine Benutzervereinbarung angeboten wird. Bitte kontaktieren Sie Ihren <a href="%1$s">Systemadministrator</a> für weitere Informationen. +ldoc#:#ldoc_account_reg_not_possible#:#Eine Selbstregistrierung ist aktuell nicht möglich, da in dieser Installation keine Nutzungsvereinbarung angeboten wird. Bitte kontaktieren Sie die <a href="%1$s">technische Betreuung</a> für weitere Informationen. ldoc#:#ldoc_add_document_btn_label#:#Dokument hinzufügen ldoc#:#ldoc_agreement_document#:#Dokument ldoc#:#ldoc_agreement_document_missing#:#Nicht vorhanden @@ -10966,6 +10984,7 @@ ldoc#:#ldoc_document#:#Dokument ldoc#:#ldoc_enabled#:#Aktiviert ldoc#:#ldoc_form_attach_criterion_head#:#Vorlagekriterium hinzufügen ldoc#:#ldoc_form_criterion#:#Vorlagekriterium +ldoc#:#ldoc_form_criterion_standard_fields_info_text#:#Überprüfen Sie bitte die Einstellungen der Standardfelder, bevor Sie die Vorlagekriterien definieren. ldoc#:#ldoc_form_document#:#Dokument ldoc#:#ldoc_form_document_content_changed#:#Der Inhalt der hochgeladenenen Datei wurde durch ILIAS bereinigt. Bitte prüfen Sie das Ergebnis und laden Sie im Zweifel eine neue Datei hoch. ldoc#:#ldoc_form_document_info#:#Bitte wählen Sie eine entsprechende Datei von Ihrem lokalen Dateisystem. Sie können eine einfache Text-Datei oder eine HTML-Datei hochladen. Es wird nur ein Teil des HTML-Sprachumfangs unterstützt. Bitte beachten Sie, dass HTML-Dateien beim Hochladen bereinigt werden, und nur der Inhalt des body-Elements übernommen wird. @@ -11028,6 +11047,7 @@ lm#:#lm_btn_lp_toggle_state_completed#:#Auf "Nicht bearbeitet" setzen lm#:#lm_btn_lp_toggle_state_not_completed#:#Auf "Bearbeitet" setzen lm#:#lm_copy#:#ILIAS-Lernmodul kopieren lm#:#lm_edit_chapters#:#Kapitel bearbeiten +lm#:#lm_edit_content#:#Inhalt bearbeiten lm#:#lm_edit_lm_settings#:#Lernmoduleinstellungen bearbeiten lm#:#lm_est_reading_time#:#Geschätzte Lesedauer lm#:#lm_est_reading_time_info#:#In Lernmodulen kann eine geschätzte Lesezeit ermittelt und angezeigt werden. @@ -11045,6 +11065,7 @@ lm#:#lm_insert_page_before#:#Seite davor einfügen lm#:#lm_insert_page_clip#:#Seiten aus Zwischenablage einfügen lm#:#lm_insert_page_clip_after#:#Seiten aus Zwischenablage danach einfügen lm#:#lm_insert_page_clip_before#:#Seiten aus Zwischenablage davor einfügen +lm#:#lm_list_pages#:#Seiten bearbeiten lm#:#lm_page_added#:#Eine Seite wurde hinzugefügt. lm#:#lm_page_type_lm#:#Lernmodulseite lm#:#lm_pages_added#:#Die Seiten wurden hinzugefügt. @@ -11206,6 +11227,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#Die externe Konten-ID wird kombin lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#Die Identifikation ist identisch bei jedem Aufruf und lässt direkte Rückschlüsse auf das ILIAS-Konto und die zugehörige Person zu. lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS-Anmeldename kombiniert mit einer eindeutigen ILIAS-Plattform-ID, die als E-Mail-Adresse formatiert ist. lti#:#conf_privacy_ident_il_uuid_login_info#:#Sendet den Anmeldenamen. Dies ist identisch mit jedem Aufruf, kann aber direkte Rückschlüsse auf den ILIAS-Benutzer zulassen. +lti#:#conf_privacy_ident_il_uuid_random#:#Zufalls-ID@ILIAS-Plattform-ID.ilias###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#Pro ILIAS-Objekt und ILIAS-Konto wird eine Zufalls-ID erzeugt, die bei jedem Aufruf identisch bleibt. Die E-Mail-Adresse setzt sich zusammen aus der Zufalls-ID und einer eigens###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash@ILIAS-Plattform-ID.ilias###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#Die E-Mail-Adresse setzt sich zusammen aus einem Hash-Wert und einer eigens generierten Plattform-ID. Ohne Zugriff auf die ILIAS-Datenbank ermöglicht diese Option keine direkten Rückschlüsse auf ein ILIAS-Konto.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash@ILIAS-Domain###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#Die E-Mail-Adresse setzt sich zusammen aus einem Hash-Wert und einer ILIAS-Domain. Diese Option ist mit maximal 80 Zeichen deutlich kürzer als die mit ILIAS-Plattform-ID. Ohne Zugriff auf die ILIAS-Datenbank ermöglicht diese Option sind nur sehr eingeschränkte Rückschlüsse auf ein ILIAS-Konto.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ID des ILIAS-Kontos kombiniert mit einer eindeutigen ILIAS-Plattform-ID, die als E-Mail-Adresse formatiert ist lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Die interne numerische ID ist bei jedem Aufruf identisch und ermöglicht Rückschlüsse auf das ILIAS-Konto. lti#:#conf_privacy_ident_info#:#Standard ist häufig die E-Mail-Adresse. Die eindeutige ILIAS-Plattform-ID lautet: @@ -11291,13 +11318,16 @@ lti#:#launched#:#Die Ressource wurde bereits gestartet. lti#:#learning_progress_options#:#Optionen für den Lernfortschritt lti#:#lm_only_one_download_per_type#:#Es kann nur eine Datei je Typ (XML, HTML, SCORM) zum Download bereitgestellt werden. lti#:#lti13_hints#:#Hinweise +lti#:#lti_13_authentication_url#:#URL für die Authentifizierungsanfrage###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID lti#:#lti_13_deployment_id#:#Deployment-ID +lti#:#lti_13_keyset_url#:#URL für den öffentlichen Schlüsselsatz###04 12 2025 new variable lti#:#lti_13_platform_id#:#Plattform-ID lti#:#lti_13_step1#:#Schritt 1 lti#:#lti_13_step1_info#:#Tragen Sie bei der initiierenden Plattform (Consumer) die folgende Adresse für Launch URL, Initiate Login URL, Redirection URI und Registration URL ein: lti#:#lti_13_step2#:#Schritt 2 lti#:#lti_13_step2_info#:#Von der initiierenden Plattform (Consumer) erhalten Sie Angaben, die Sie in den folgenden Feldern eintragen müssen. Nach dem Speichern stehen die LTI 1.3-Funktionalitäten zur Verfügung. +lti#:#lti_13_token_url#:#URL für den Zugriffstoken###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Den Provider als globalen Provider für alle Benutzer übernehmen. lti#:#lti_action_accept_providers_as_global#:#Provider als globalen Provider übernehmen lti#:#lti_action_delete_providers#:#Provider löschen @@ -11311,6 +11341,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#Mindestens ein Provider konnte nicht ge lti#:#lti_auth_failed_invalid_key#:#Authentifizierung nicht möglich. Es wurde kein gültiger Consumer-Key übermittelt. lti#:#lti_con_content_item#:#Unterstützung für Deep Linking lti#:#lti_con_content_item_url#:#Inhalts-URL +lti#:#lti_con_grade_synchronization#:#Erweiterte Benotungsdienste###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#Das LTI-Tool muss 'Assignment and Grade Services' anbieten.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL lti#:#lti_con_key_type#:#Typ des öffentlichen Schlüssels lti#:#lti_con_key_type_jwk#:#URL (Json Web Token) @@ -11330,6 +11362,10 @@ lti#:#lti_con_prov_category_info#:#Kategorie, um Einträge zu filtern, wenn ein lti#:#lti_con_prov_custom_params#:#Definition der Parameter für diesen spezifischen Provider lti#:#lti_con_prov_custom_params_info#:#Bitte geben Sie diese in der Form ein: param1=value1; param2=value2 lti#:#lti_con_prov_description#:#Beschreibung +lti#:#lti_con_prov_dyn_reg_params#:#Optionale Parameter###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Hier können z.B. Verweise auf Zielobjekte im Tool angegeben werden.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registrierungs-URL des Tools###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Hinweis: Nicht jedes Tool unterstützt die dynamische Registrierung.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#Externer Provider lti#:#lti_con_prov_external_provider_info#:#Bei der Zusammenarbeit mit einem externen Provider bzw. Tool wird ein Hinweis angezeigt. Die Rechte zum Löschen persönlicher Daten durch die ILIAS-Administration sind bei externen Providern in der Regel nicht gegeben. lti#:#lti_con_prov_group_options#:#Optionen zum Gruppieren und Filtern von Providern @@ -11398,6 +11434,7 @@ lti#:#lti_custom_new#:#Eigene Provider-Einstellungen anlegen lti#:#lti_delete_consume_provider#:#Provider löschen lti#:#lti_delete_consume_providers#:#Provider löschen lti#:#lti_delete_provider#:#Provider löschen +lti#:#lti_dynamic_registration#:#Eigene Tool-Einstellungen mit dynamischer Registrierung anlegen (LTI 1.3)###04 12 2025 new variable lti#:#lti_edit_consumer#:#LTI-Konsument bearbeiten lti#:#lti_exit#:#LTI-Sitzung beenden lti#:#lti_exited#:#LTI-Sitzung beendet @@ -11425,7 +11462,7 @@ lti#:#lti_object_consumer#:#LTI-Konsumenten lti#:#lti_object_release_settings_form#:#LTI-Freigaben bearbeiten lti#:#lti_provider#:#LTI-Freigaben lti#:#lti_provider_not_avail_msg#:#LTI-Provider ist auf „Nicht verfügbar“ gesetzt. -lti#:#lti_provider_not_set_msg#:#Configuration of LTI Provider / tool is not completely finished.###29 10 2025 new variable +lti#:#lti_provider_not_set_msg#:#LTI-Provider/-tool ist noch nicht vollständig konfiguriert. lti#:#lti_providing_tab#:#ILIAS als LTI-Provider lti#:#lti_released_objects#:#Objekt-Freigaben lti#:#lti_select_provider#:#Provider auswählen @@ -11523,6 +11560,7 @@ mail#:#mail_add_folder#:#Neuen Ordner erstellen mail#:#mail_add_recipient#:#Bitte geben Sie an, wer die Mail erhalten soll. Geben Sie ILIAS-Anmeldenamen oder gültige E-Mail-Adressen an. mail#:#mail_add_subfolder#:#Unterordner hinzufügen mail#:#mail_add_subject#:#Bitte geben Sie einen Betreff ein +mail#:#mail_adopt_selected_attachements#:#Ausgewählte Anhänge übernehmen mail#:#mail_all_in_trash#:#Alle im Papierkorb mail#:#mail_allow_external#:#Externe E-Mails mail#:#mail_allow_external_info#:#Die Zustellung von externen E-Mails (via SMTP) zulassen. Falls nicht aktiviert, wird der Versand von externen E-Mails (via SMTP) global unterdrückt. @@ -11557,11 +11595,11 @@ mail#:#mail_email_usr_subject#:#Test-E-Mail „Benutzer-Mail” mail#:#mail_empty_trash#:#Papierkorb leeren mail#:#mail_empty_trash_confirmation#:#Sind Sie sicher, dass alle Mails im Papierkorb gelöscht werden sollen? mail#:#mail_enable_crs_admin_notification#:#Kursadministration benachrichtigen -mail#:#mail_enable_crs_admin_notification_info#:#Kursbetreuung und Kursadministration erhalten in neuen Kursen Mails, wenn ein Mitglied beitritt, den Kurs verlässt oder die Mindestanzahl an Teilnehmerinnen und Teilnehmern zur Durchführung des Kurses nicht erreicht wird. Diese Einstellung kann für einzelne Kurse lokal im Reiter „Mitglieder“ geändert werden. +mail#:#mail_enable_crs_admin_notification_info#:#Kursbetreuung und Kursadministration erhalten in neuen Kursen Mails, wenn ein Mitglied beitritt, den Kurs verlässt oder die Mindestanzahl an Mitgliedern zur Durchführung des Kurses nicht erreicht wird. Diese Einstellung kann für einzelne Kurse lokal im Reiter „Mitglieder“ geändert werden. mail#:#mail_enable_crs_member_notification#:#Mitglieder benachrichtigen mail#:#mail_enable_crs_member_notification_info#:#Mitglieder erhalten automatisch eine E-Mail, wenn sich ihr Mitgliedsstatus ändert. Diese Einstellung betrifft alle Kurse der Plattform. mail#:#mail_enable_grp_admin_notification#:#Gruppenadministration benachrichtigen -mail#:#mail_enable_grp_admin_notification_info#:#Die Gruppenadministration erhält in neuen Gruppen Mails, wenn ein Mitglied beitritt, die Gruppe verlässt oder die Mindestanzahl an Teilnehmerinnen und Teilnehmern zur Durchführung der Gruppe nicht erreicht wird. Diese Einstellung kann für einzelne Gruppe lokal im Reiter „Mitglieder“ geändert werden. +mail#:#mail_enable_grp_admin_notification_info#:#Die Gruppenadministration erhält in neuen Gruppen Mails, wenn ein Mitglied beitritt, die Gruppe verlässt oder die Mindestanzahl an Mitgliedern zur Durchführung der Gruppe nicht erreicht wird. Diese Einstellung kann für einzelne Gruppe lokal im Reiter „Mitglieder“ geändert werden. mail#:#mail_enable_grp_member_notification#:#Mitglieder benachrichtigen mail#:#mail_enable_grp_member_notification_info#:#Mitglieder erhalten automatisch eine E-Mail, wenn sich ihr Mitgliedsstatus ändert. Diese Einstellung betrifft alle Gruppen der Plattform. mail#:#mail_enable_lso_admin_notification#:#Administration der Lernsequenz benachrichtigen @@ -11629,10 +11667,12 @@ mail#:#mail_mark_unread#:#Als ungelesen markieren mail#:#mail_max_size_attachments_total#:#Bitte geben Sie die maximal zulässige Gesamtgröße aller Anhänge pro E-Mail an. Diese Einstellung hat keinen Einfluss auf das Hochladen von Dateien (hier gelten die Serverlimitierungen, z.B. upload_max_filesize), sondern lediglich auf die Gesamtdatenmenge der als Anhang einer Mail ausgewählten Dateien. mail#:#mail_max_size_attachments_total_error#:#Die maximal zulässige Gesamtgröße aller Anhänge beträgt: mail#:#mail_maxsize_attachment_error#:#Die maximale Dateigröße beträgt: -mail#:#mail_member_notification#:#Teilnehmerbenachrichtigung +mail#:#mail_member_notification#:#Benachrichtigungen mail#:#mail_members_of_mailing_list#:#Mitglieder der Verteilerliste „%s“ mail#:#mail_members_search_continue#:#Weiter mail#:#mail_message_send#:#Die Mail wurde versandt. +mail#:#mail_mode_switch_label#:#Zwischen „Persönliche Mail” und „Serienbrief” umschalten +mail#:#mail_mode_switch_locked#:#Sie können nicht zu „%s” wechseln. mail#:#mail_move_error#:#Beim Versuch, Ihre E-Mail zu verschieben, ist ein Fehler aufgetreten. mail#:#mail_move_to#:#Verschieben nach: mail#:#mail_move_to_folder_btn_label#:#Mail verschieben @@ -11775,6 +11815,7 @@ mail#:#only_inbox_trash_info#:#Falls aktiviert, werden ausschließlich Mails gel mail#:#orphaned_mail_body#:#Es existieren alte oder verwaiste Mails in den folgenden Ordnern. Beachten Sie, dass diese Mails in kürze automatisch gelöscht werden. mail#:#orphaned_mail_subject#:#Benachrichtigung über alte Mails mail#:#placeholders_advise#:#Persönliche Platzhalter werden nur für Personen im „An”-Feld ersetzt. Personen im „CC”-Feld und „BCC”-Feld erhalten die Mail mit nicht-ersetzten Platzhaltern. +mail#:#regular_mail#:#Persönliche Mail mail#:#search_content#:#Suchergebnis mail#:#search_recipients#:#Personen suchen mail#:#second_email_missing_info#:#Auswahl nicht möglich, da keine zweite E-Mail-Adresse eingetragen wurde @@ -11783,11 +11824,12 @@ mail#:#send_mail_admins#:#Administration mail#:#send_mail_members#:#Mitglied mail#:#send_mail_to#:#Mail an mail#:#send_mail_tutors#:#Kursbetreuung +mail#:#serial_letter#:#Serienbrief mail#:#show_mail_settings#:#Einstellungen anzeigen mail#:#show_mail_settings_info#:#Aktiviert die Anzeige der Mail-Einstellungen im Bereich 'Einstellungen' oder 'Mail'. Benutzer können die Mail-Einstellungen nur ändern, wenn die Konfiguration des Benutzer-Profils dies erlaubt. Wenn Benutzer nicht berechtigt sind, die Mail-Einstellung ihrer Profils zu ändern, dann gelten die globalen Einstellungen. Dies gilt auch dann, wenn Benutzer in der Vergangenheit die Berechtigung zum Ändern der Mail-Einstellungen hatten und persönliche Einstellungen vorgenommen haben. mail#:#system_notification_installation_changed_by#:#Geändert durch mail#:#usrFieldChange_second_mail_visible_in_personal_data#:#Sie haben das Attribut „%s“ im Feld „%s“ verändert.<br>Dies führt dazu, dass, für alle bestehenden und künftig angelegten Konten,<br>die bei den Benutzern gewählte Empfangsart und der Standard für neue Anmeldekonten bei externer Zustellung auf die primäre E-Mail-Adresse geändert wird,<br>unter Inkaufnahme der Rücksetzung von bestehenden Benutzer-Einstellungen. -maps#:#configure_geolocation#:#Um nach Adressen suchen zu können, schließen Sie bitte die Konfiguration für die Geolocation im Administrationsmenü „Software von Drittanbietern“ ab. +maps#:#configure_geolocation#:#Um nach Adressen suchen zu können, schließen Sie bitte die Konfiguration für die Geolocation im Administrationsmenü „ILIAS erweitern > Karten“ ab. maps#:#maps_custom_geolocation_server_info#:#URL des Servers, über den die Geolocation-Daten mithilfe des Nominatim-Dienstes bereitgestellt werden. Der Eintrag muss den Platzhalter [QUERY] enthalten, um die Anfrageposition festzulegen. Beispiel: https://nominatim.example.com/search?q=[QUERY]&format=json maps#:#maps_custom_tile_server_info#:#URL des Servers für die Bereitstellung der Kacheln. Mehrere Einträge müssen mit Leerzeichen getrennt werden. Standardeingabe ist „%s“. maps#:#maps_enable_maps#:#Karten aktivieren @@ -11912,6 +11954,7 @@ mep#:#mep_all_mobs#:#Alle Medienobjekte mep#:#mep_bulk_upload#:#Massen-Upload mep#:#mep_choose_from_folder#:#Aus Ordner auswählen mep#:#mep_choose_from_mep#:#Aus Pool auswählen +mep#:#mep_clipboard_info#:#Hier können Sie Mediendateien hochladen, auf die Sie anschließend von jeder Seite, auf der Sie Zugriff auf den Seiteneditor haben, zugreifen können. Ebenfalls können Sie das Clipboard in Medienpools nutzen. Dieser Speicher ist nur für Sie und kann nicht von anderen Benutzern eingesehen werden. mep#:#mep_content#:#Medienobjekte mep#:#mep_content_snippet_in_use#:#Inhaltsbaustein „%s“ wird verwendet und kann daher nicht gelöscht werden. mep#:#mep_content_snippet_used_in_older_versions#:#Achtung: Der Inhaltsbaustein wurde in älteren Versionen von einigen Seiten genutzt. Wenn so eine Version einer Seite wiederhergestellt wird, wird der Inhaltsbaustein in ihr fehlen. @@ -12022,14 +12065,14 @@ meta#:#md_adv_text_multi_val#:#Mehrsprachige Werte meta#:#md_adv_text_multi_val_info#:#Erlauben Sie mehrsprachige Feldwerte für dieses Datenfeld. Für Texte, die keiner Übersetzung bedürfen, wie z.B. Personennamen, empfiehlt sich die Deaktivierung dieser Option. meta#:#md_advanced#:#Benutzerdefinierte Metadaten meta#:#md_aria_language_selection#:#Sprachauswahl -meta#:#md_copyright#:#Copyright -meta#:#md_copyright_add#:#Neue Vorgabe -meta#:#md_copyright_admin_tab#:#Copyright & OER +meta#:#md_copyright#:#Lizenz +meta#:#md_copyright_add#:#Neue Lizenz hinzufügen +meta#:#md_copyright_admin_tab#:#LOM & OER meta#:#md_copyright_alt_text#:#Alternativtext meta#:#md_copyright_alt_text_info#:#Wird für das „Alt“-Attribut des Bildes verwendet meta#:#md_copyright_default#:#Standard -meta#:#md_copyright_edit#:#Copyright-Vorgabe bearbeiten -meta#:#md_copyright_enable_info#:#Im Unterreiter „Lizenzen“ hinterlegte Auswahl wird in Objekten angeboten. +meta#:#md_copyright_edit#:#Lizenzen bearbeiten +meta#:#md_copyright_enable_info#:#Welche Lizenzen in Objekten angeboten werden, legen Sie im Unterreiter „Lizenzen“ fest. meta#:#md_copyright_enabled#:#Lizenzen in Objekten meta#:#md_copyright_full_name#:#Vollständiger Name meta#:#md_copyright_image#:#Bild @@ -12039,10 +12082,10 @@ meta#:#md_copyright_image_is_link#:#URL eingeben meta#:#md_copyright_image_link#:#URL meta#:#md_copyright_link#:#URL meta#:#md_copyright_link_info#:#Link zu der Lizenz -meta#:#md_copyright_preview#:#Copyright (Vorschau) -meta#:#md_copyright_selection#:#Copyright-Vorgaben -meta#:#md_copyright_value#:#Copyright -meta#:#md_copyrights_deleted#:#Die ausgewählten Vorgaben wurden entfernt. +meta#:#md_copyright_preview#:#Vorschau +meta#:#md_copyright_selection#:#Lizenzen +meta#:#md_copyright_value#:#Lizenz +meta#:#md_copyrights_deleted#:#Die ausgewählten Lizenzen wurden entfernt. meta#:#md_days#:#Tage: meta#:#md_delete_cp_sure#:#Möchten Sie wirklich die ausgewählten Vorgaben entfernen? meta#:#md_delimiter#:#Trennzeichen @@ -12055,12 +12098,12 @@ meta#:#md_import_file_vocab#:#Importdatei meta#:#md_import_vocab#:#Vokabular importieren meta#:#md_import_vocab_modal#:#Aus Datei importieren meta#:#md_months#:#Monate: -meta#:#md_oai_contact_mail#:#E-Mail-Kontaktadresse +meta#:#md_oai_contact_mail#:#E-Mail-Kontakt dieser Organisation meta#:#md_oai_identifier_prefix#:#OAI Präfix meta#:#md_oai_identifier_prefix_info#:#Dieser Präfix wird als Namespace in den Bezeichnern von abgefragten OER-Datensätzen benutzt. meta#:#md_oai_pmh_enabled#:#Abfragen über OAI-PMH Schnittstelle erlauben meta#:#md_oai_pmh_enabled_info#:#Wenn aktiviert, können vom OER-Harvester gefundene Resourcen von externen Parteien wie OER Repositorien abgefragt werden. -meta#:#md_oai_repository_name#:#Name des Repositoriums +meta#:#md_oai_repository_name#:#Name der Installation meta#:#md_oai_repository_name_info#:#Bei Anfragen über die Schnittstelle wird dies als Name dieser ILIAS-Installation angegeben. meta#:#md_obj_types#:#Zugeordnete Objekte meta#:#md_record_export_table#:#Exportdateien @@ -12096,7 +12139,7 @@ meta#:#md_vocab_table_title#:#Metadaten-Elemente mit vordefinierten Werten meta#:#md_vocab_type_column#:#Typ meta#:#md_vocab_type_controlled_string#:#Kontrollierter Text meta#:#md_vocab_type_controlled_vocab_value#:#Kontrollierte Auswahl -meta#:#md_vocab_type_copyright#:#Copyright +meta#:#md_vocab_type_copyright#:#Lizenz meta#:#md_vocab_type_standard#:#Standard meta#:#md_vocab_update_successful#:#Vokabular erfolgreich aktualisiert meta#:#md_vocabularies_config#:#LOM-Vokabulare @@ -12385,8 +12428,8 @@ meta#:#meta_context#:#Kontext meta#:#meta_context_plural#:#Kontexte meta#:#meta_contribute#:#Beitrag meta#:#meta_contribute_plural#:#Beiträge -meta#:#meta_copyright#:#Copyright -meta#:#meta_copyright_and_other_restrictions#:#Copyright und andere Einschränkungen +meta#:#meta_copyright#:#Lizenz +meta#:#meta_copyright_and_other_restrictions#:#Lizenzen und andere Einschränkungen meta#:#meta_copyright_change_info#:#Beachten Sie unbedingt das Urheberrecht, wenn Sie die Lizenz für dieses Objekt ändern. Bitte fahren Sie nur fort, wenn Sie befugt sind, über die Nutzungsrechte an dem Objekt zu entscheiden. meta#:#meta_copyright_change_oer_info#:#Die Lizenz, die Sie ausgewählt haben, zeichnet das Object als Open Educational Resource aus. Wenn Sie fortfahren, wird es eventuell als solches mit einer Exportdatei gelistet, und über diese Plattform hinaus veröffentlicht. meta#:#meta_copyright_change_warning_title#:#Lizenz ändern @@ -12705,7 +12748,6 @@ meta#:#meta_source#:#Quelle meta#:#meta_status#:#Status meta#:#meta_string#:#Text meta#:#meta_structure#:#Struktur -meta#:#meta_subjectmatterexpert#:#Experte für das Thema meta#:#meta_tab_advmd#:#Benutzerdefinierte Metadaten meta#:#meta_tab_advmd_def#:#Metadatensätze verwalten meta#:#meta_tab_lom#:#LOM @@ -12748,9 +12790,8 @@ mmbr#:#info_refuse_sure#:#Sind Sie sicher, dass Sie den/die folgenden Benutzer a mmbr#:#mmbr_awrn_my_groups_courses#:#Meine Kurse und Gruppen mmbr#:#mmbr_awrn_my_groups_courses_info#:#Alle Mitglieder von Gruppen und Kursen eines Benutzers werden aufgelistet. mmbr#:#mmbr_btn_mail_selected_users#:#Mail verschicken -mmbr#:#mmbr_info_delete_sure_unsubscribe#:#Wollen Sie wirklich die Mitgliedschaft für die folgenden Kurse und Gruppen beenden? mmbr#:#mmbr_memberships#:#Mitgliedschaften -mmbr#:#mmbr_selected_users#:#Ausgewählte Teilnehmer +mmbr#:#mmbr_role_error#:#Mitglieder müssen mindestens eine Rolle haben. mmbr#:#mmbr_unsubscribed_from_objs#:#Sie wurden von den ausgewählten Objekten abgemeldet. mme#:#add_languages#:#Sprache hinzufügen mme#:#additional_langs#:#Zusätzliche Sprachen @@ -12772,6 +12813,7 @@ mme#:#item_updated#:#Eintrag gespeichert mme#:#main#:#Hauptmenü mme#:#mm_translation_lang#:#Sprache mme#:#mm_translation_trans#:#Übersetzung +mme#:#mme_lost_items#:#Nicht zugeordnet mme#:#move_to_item#:#Zu Einträge verschieben mme#:#move_to_top_item#:#In Haupteinträge verschieben mme#:#msg_languages_added#:#Sprachen hinzugefügt @@ -12847,8 +12889,8 @@ mme#:#type_top_link_item#:#Link mme#:#type_top_parent_item#:#Container mme#:#unable_to_render#:#Der Eintrag '%s' kann nicht in '%s' angezeigt werden. mob#:#mob_choose_from_pool#:#Aus Medienpool -mob#:#mob_copyright#:#Copyright -mob#:#mob_copyright_icon#:#Copyright Icon +mob#:#mob_copyright#:#Lizenz +mob#:#mob_copyright_icon#:#Lizenz-Icon mob#:#mob_external_url#:#Externe URL mob#:#mob_extract_preview_image#:#Vorschaubild erzeugen mob#:#mob_file#:#Datei @@ -12960,6 +13002,7 @@ news#:#news_news_item_visibility_info#:#Öffentliche Neuigkeiten können von au news#:#news_news_items#:#Neuigkeit(en) news#:#news_no_js_click_here#:#Werden die Neuigkeiten nicht angezeigt, klicken Sie bitte hier. news#:#news_no_news_items#:#Es sind keine Neuigkeiten für Sie vorhanden. +news#:#news_not_available#:#Neuigkeit nicht verfügbar news#:#news_notifications#:#Benachrichtigungen news#:#news_notifications_public#:#Öffentliche Benachrichtigungen news#:#news_notifications_public_info#:#Wenn diese Option gewählt wird, können Benachrichtigungen auch außerhalb von ILIAS über den persönlichen Newsfeed empfangen werden. Beachten Sie bitte, dass diese Benachrichtigungen ohne Authentifizierung zugänglich sind. @@ -13046,7 +13089,7 @@ notes#:#notes_no_comments#:#Bisher wurde noch kein Kommentar abgegeben. notes#:#notes_no_comments_found#:#Es wurden keine Kommentare gefunden, die den Suchkriterien entsprechen. notes#:#notes_no_messages#:#Bisher wurde noch keine Mitteilung hinzugefügt. notes#:#notes_no_messages_found#:#Es wurden keine Mitteilungen gefunden, die den Suchkriterien entsprechen. -notes#:#notes_no_notes#:#Bisher wurde noch kein Notiz hinzugefügt. +notes#:#notes_no_notes#:#Bisher wurde noch keine Notiz hinzugefügt. notes#:#notes_no_notes_found#:#Es wurden keine Notizen gefunden, die den Suchkriterien entsprechen. notes#:#notes_note_deleted#:#Die Notiz wurde gelöscht notes#:#notes_notes_deleted#:#Die Notizen wurden gelöscht. @@ -13061,6 +13104,8 @@ noti#:#noti_deactivate_notification#:#Benachrichtigung deaktivieren noti#:#noti_notification_activated#:#Benachrichtigungen sind aktiviert noti#:#noti_notification_deactivated#:#Benachrichtigungen sind deaktiviert notifications#:#push_notification#:#Push-Benachrichtigungen +notifications_adm#:#available_providers#:#Verfügbare Provider +notifications_adm#:#client_settings#:#Browsereinstellungen notifications_adm#:#enable_osd#:#Pop-up-Benachrichtigungen aktivieren notifications_adm#:#enable_osd_desc#:#Wenn aktiviert, werden Benutzer durch ein Pop-up über neue Benachrichtigungen informiert. notifications_adm#:#enable_push#:#Push-Benachrichtigungen aktivieren @@ -13079,6 +13124,7 @@ notifications_adm#:#push_client_ios_case#:#Wenn sie IOS (IPhone, IPad, IPod) nut notifications_adm#:#push_settings#:#Push-Benachrichtigungen notifications_adm#:#push_subscription_successfull#:#Aktivierung der Push-Benachrichtigungen erfolgreich notifications_adm#:#push_subscription_successfull_desc#:#Dies ist eine Test Benachrichtigungen um die erfolgreiche Aktivierung der Push Benachrichtigungen zu bestätigen. +notifications_adm#:#user_settings#:#Benutzereinstellungen obj#:#activation_visible_when_disabled#:#Sichtbarkeit obj#:#activation_visible_when_disabled_info#:#Die gewählten Objekte sind auch außerhalb des gewählten Zeitraums sichtbar, können aber nicht geöffnet werden. obj#:#availability_period_changed#:#Die zeitliche Verfügbarkeit wurde für die ausgewählten Objekte erfolgreich angepasst. @@ -13218,10 +13264,8 @@ orgu#:#org_op_edit_employee_talk#:#Gespräche bearbeiten orgu#:#org_op_edit_individual_plan#:#Individuellen Plan bearbeiten orgu#:#org_op_edit_submissions_grades#:#Abgaben von anderen Benutzern bearbeiten orgu#:#org_op_manage_members#:#Mitglieder bearbeiten -orgu#:#org_op_manage_participants#:#Teilnehmer verwalten orgu#:#org_op_read_employee_talk#:#Auf Gespräche lesend zugreifen orgu#:#org_op_read_learning_progress#:#Lernfortschritt von anderen Benutzern einsehen -orgu#:#org_op_score_participants#:#Teilnehmer bewerten orgu#:#org_op_view_certificates#:#Zertifikate von anderen Benutzern einsehen orgu#:#org_op_view_competences#:#Kompetenzen von anderen Benutzern einsehen orgu#:#org_op_view_individual_plan#:#Individuellen Plan einsehen @@ -13317,7 +13361,6 @@ pd#:#pd_ended#:#Beendet pd#:#pd_export_profile#:#Persönliche Daten exportieren pd#:#pd_import_personal_data#:#Persönliche Daten importieren pd#:#pd_my_memberships_sort_default#:#Standard-Sortierung -pd#:#pd_no_items_to_manage#:#Keine Objekte zum Entfernen verfügbar. pd#:#pd_not_dated#:#Nicht datiert pd#:#pd_ongoing#:#Aktuell pd#:#pd_personal_items_default_view#:#Standard-Sicht @@ -13327,9 +13370,6 @@ pd#:#pd_presentation_mode_tile#:#Kachelansicht pd#:#pd_private_calendars#:#Private Kalender pd#:#pd_profile_data#:#Profildaten pd#:#pd_remove_multi_confirm#:#Die Objekte wurden entfernt. -pd#:#pd_remove_multiple#:#Mehrere Objekte entfernen -pd#:#pd_unsubscribe_memberships#:#Mitgliedschaften beenden -pd#:#pd_unsubscribe_multiple_memberships#:#Mehrere Mitgliedschaften beenden pd#:#pd_upcoming#:#Bevorstehend pd#:#pd_view_select_at_least_one#:#Bitte wählen Sie mindestens eine Sicht, entweder 'Ausgewählte Angebote' und/oder 'Kurse und Gruppen'. pdesk#:#bookmark_moved_ok#:#Bookmark wurde verschoben. @@ -13349,21 +13389,21 @@ poll#:#poll_cannot_set_online_no_answers#:#Der Status kann nicht auf &quot;onlin poll#:#poll_chart_votes#:#Stimmen poll#:#poll_comments#:#Kommentare poll#:#poll_copy#:#Abstimmung kopieren -poll#:#poll_delete_votes#:#Stimmen aller Teilnehmenden löschen -poll#:#poll_delete_votes_sure#:#Sind Sie sicher, dass Sie die Stimmen aller Teilnehmenden dieser Abstimmung löschen möchten? +poll#:#poll_delete_votes#:#Alle Stimmabgaben löschen +poll#:#poll_delete_votes_sure#:#Sind Sie sicher, dass Sie alle Stimmabgaben löschen möchten? poll#:#poll_edit#:#Abstimmung editieren poll#:#poll_edit_question#:#Frage bearbeiten poll#:#poll_image#:#Bild poll#:#poll_import#:#Abstimmung importieren poll#:#poll_limit_not_below_answer_count#:#Die begrenzte Anzahl muss kleiner sein als die Anzahl der möglichen Antworten. -poll#:#poll_limit_number_of_answers#:#Anzahl Antworten je Teilnehmer begrenzen -poll#:#poll_max_number_of_answers#:#Maximale Antworten +poll#:#poll_limit_number_of_answers#:#Anzahl Antworten begrenzen +poll#:#poll_max_number_of_answers#:#Maximale Anzahl pro Person poll#:#poll_max_number_of_answers_info#:#Sie dürfen bis zu %s Antworten auswählen. poll#:#poll_mode#:#Modus poll#:#poll_mode_anonymous#:#Ohne Namen / Anonym -poll#:#poll_mode_anonymous_info#:#Im Tab "Abstimmungsergebnisse" werden Namen der Teilnehmenden nicht aufgeführt. Systeminterne IDs der Teilnehmenden werden allerding in der Datenbank gespeichert. +poll#:#poll_mode_anonymous_info#:#Im Reiter „Abstimmungsergebnisse“ werden keine Namen aufgeführt. Systeminterne IDs der teilnehmenden Personen werden in der Datenbank gespeichert. poll#:#poll_mode_personal#:#Mit Namen -poll#:#poll_mode_personal_info#:#Im Tab "Abstimmungsergebnisse" werden die Namen der Teilnehmenden mit ihren Antworten aufgeführt. Wer Zugriff auf diesen Tab hat, kann prüfen, wer welche Antwort gegeben hat. +poll#:#poll_mode_personal_info#:#Im Reiter „Abstimmungsergebnisse“ werden die Namen der teilnehmenden Personen mit ihren Antworten aufgeführt. poll#:#poll_new#:#Neue Abstimmung anlegen poll#:#poll_non_anonymous_warning#:#Ihr Name und Votum sind für die Administration in den Ergebnissen sichtbar. poll#:#poll_notification_activated#:#Änderungs-Benachrichtigung aktiviert @@ -13371,15 +13411,15 @@ poll#:#poll_notification_deactivated#:#Änderungs-Benachrichtigung deaktiviert poll#:#poll_notification_subscribe#:#Benachrichtigung aktivieren poll#:#poll_notification_unsubscribe#:#Benachrichtigung deaktivieren poll#:#poll_percentage#:#Aktueller Anteil -poll#:#poll_population#:#%s Teilnehmende -poll#:#poll_population_singular#:#1 Teilnehmer +poll#:#poll_population#:#%s Stimmabgaben +poll#:#poll_population_singular#:#Eine Stimmabgabe poll#:#poll_question#:#Frage poll#:#poll_result#:#Abstimmungsergebnisse poll#:#poll_result_answers#:#Stimmen poll#:#poll_result_sorting#:#Sortierung poll#:#poll_result_sorting_answers#:#In der Reihenfolge der Antworten poll#:#poll_result_sorting_votes#:#Nach Anzahl der Stimmen (absteigend) -poll#:#poll_result_users#:#Teilnehmer +poll#:#poll_result_users#:#Pro Person poll#:#poll_show_results_as#:#Ergebnisse anzeigen als poll#:#poll_sortorder#:#Sortierung poll#:#poll_stacked_chart#:#Stapeldiagramm @@ -13517,7 +13557,7 @@ prg#:#prg_auto_member_select_grp#:#Gruppen prg#:#prg_auto_member_select_role#:#Rollen prg#:#prg_autoassignment#:#(automatisch) prg#:#prg_availability_action_not_allowed#:#Studienprogramme haben keine zeitliche Verfügbarkeit. -prg#:#prg_belongs_to#:#Gehört Zu +prg#:#prg_belongs_to#:#Gehört zu prg#:#prg_can_not_manage_in_repo#:#Sie dürfen dieses Studienprogramm nicht verwalten, da Ihm bereits Mitglieder zugeordnet sind. prg#:#prg_cancel#:#Abbrechen prg#:#prg_cancel_acknowledge_completed_courses#:#Keine Kurse anerkennen @@ -13564,14 +13604,14 @@ prg#:#prg_import_action_not_allowed#:#Studienprogramme unterstützen keinen Impo prg#:#prg_invalidate_expired_progresses_desc#:#Setzt 'Gültigkeit' auf 'ungültig' wenn Ablaufdatum erreicht. prg#:#prg_invalidate_expired_progresses_title#:#Zeitlich begrenzte Gültigkeit von Studienprogrammen prg#:#prg_link#:#Link -prg#:#prg_mail_context_info#:#Für die Teilnehmer-E-Mails auf den Mitglieds- und Lernfortschrittsansichten eines Studienprogramms +prg#:#prg_mail_context_info#:#Mails, die aus den Reitern „Zuweisungen“ oder „Lernfortschritt“ eines Studienprogramms versendet werden. prg#:#prg_mail_context_title#:#Studienprogramm: Mail an Mitglieder prg#:#prg_mail_permanent_link#:#Wählen Sie den folgenden Link, um auf den Inhalt des Studienprogramms zuzugreifen: prg#:#prg_manage#:#Verwalten prg#:#prg_manage_members#:#Zuweisungen eines Studienprogramms bearbeiten prg#:#prg_manage_members_short#:#Zuweisungen verwalten prg#:#prg_manual_status#:#Manueller Status -prg#:#prg_mark_accredited#:#akkreditieren +prg#:#prg_mark_accredited#:#Akkreditieren prg#:#prg_mark_accredited_multi_success#:#Ausgewählte Benutzer akkreditiert. prg#:#prg_mark_accredited_success#:#Das Programm wurde für den Benutzer erfolgreich akkreditiert. prg#:#prg_mark_not_relevant_multi_success#:#Ausgewählte Benutzer als nicht relevant markiert. @@ -13622,7 +13662,7 @@ prg#:#prg_remove_user_success#:#Die Zuweisung wurde entfernt. prg#:#prg_remove_users_not_possible#:#Ausgewählte Benutzer können nicht entfernt werden. prg#:#prg_remove_users_partial_success#:#Zuweisungen (teilweise) entfernt. prg#:#prg_remove_users_success#:#Ausgewählte Benutzer wurden entfernt. -prg#:#prg_restart_assignments_temporal_progress_desc#:#Bucht Teilnehmer erneut auf Studienprogramme wenn Wiederholungszeitraum beginnt. +prg#:#prg_restart_assignments_temporal_progress_desc#:#Weist Personen erneut Studienprogrammen zu, sobald der Wiederholungszeitraum beginnt. prg#:#prg_restart_assignments_temporal_progress_title#:#Automatische Wiederaufnahme in Studienprogramme prg#:#prg_save_tree_order#:#Reihenfolge des Baums speichern prg#:#prg_saved_order_successful#:#Reihenfolge des Baums erfolgreich gespeichert. @@ -13693,7 +13733,7 @@ prg#:#prg_validity_of_qualification_limit#:#Ablauf der Gültigkeit prg#:#prg_validity_of_qualification_restart#:#Wiederaufnahme prg#:#prg_view#:#Anzeigen prg#:#prgr_may_not_create_circular_reference#:#Das Verlinken dieses Programms ist hierher nicht möglich, da das beinhaltende Programm darin erhalten ist. -prg#:#re_assigned_mail_body#:#%s %s,<br/><br/>Sie wurden erneut dem Studienprogramm „%s“ als Teilnehmer zugeordnet. +prg#:#re_assigned_mail_body#:#%s %s,<br/><br/>Sie wurden dem Studienprogramm „%s“ erneut zugewiesen. prg#:#re_assigned_mail_subject#:#Erneute Teilnahme am Studienprogramm prg#:#restart_information#:#Wiederaufnahme (in Tagen) vor Ablauf der Qualifikation prg#:#restart_period#:#Automatische Wiederaufnahme vor Ablauf der Qualifikation @@ -13923,7 +13963,7 @@ ps#:#ps_grp_user_fields#:#Persönliche Angaben zu dieser Gruppe ps#:#ps_login_max_attempts#:#Maximale Anzahl von Anmeldeversuchen ps#:#ps_login_max_attempts_info#:# Bestimmt wie viele Anmeldeversuche eines Benutzer höchstens fehlschlagen dürfen. Schlagen mehr Anmeldeversuche fehl, wird dieser Benutzer auf 'inaktiv' gesetzt und muss im 'Benutzer Management' wieder aktiviert werden, bevor er die Plattform benutzen kann. Wird kein Wert eingetragen, ist die Funktion deaktiviert und ILIAS zählt die fehlgeschlagenen Anmeldeversuche nicht. ps#:#ps_not_accepted#:#Nicht zugestimmt -ps#:#ps_participants_list_courses#:#Aktivierung von Teilnehmerlisten in der Galerie der Kurse erlauben +ps#:#ps_participants_list_courses#:#Aktivierung der Teilnahmeliste in Galerien von Kursen erlauben ps#:#ps_passwd_policy_change_force_user_reset_succ#:#Die Aktion wurde erfolgreich durchgeführt. ps#:#ps_passwd_policy_changed_force_user_reset#:#Die Änderungen wurden erfolgreich übernommen. Sie haben mindestens eine Änderung bzgl. der Passwortrichtlinie vorgenommen. Möchten Sie, dass lokale Anmeldekonten nach der nächsten erfolgreichen Anmeldung ein neues Passwort vergeben müssen? ps#:#ps_password_change_on_first_login_enabled#:#Passwort ändern bei Erstanmeldung @@ -13947,9 +13987,9 @@ ps#:#ps_privacy_protection#:#Einstellungen zum Datenschutz ps#:#ps_profile_export#:#Schutz der Daten des Persönlichen Profils ps#:#ps_security_protection#:#Einstellungen zur Sicherheit ps#:#ps_select_one#:#Bitte wählen Sie eine Datei aus. -ps#:#ps_show_crs_access#:#Anzeige der letzten Zugriffszeit von Kursteilnehmern -ps#:#ps_show_grp_access#:#Anzeige der letzten Zugriffszeit von Gruppenteilnehmern -ps#:#ps_show_lso_access#:#Anzeige der letzten Zugriffszeit von Lernsequenzteilnehmern +ps#:#ps_show_crs_access#:#Anzeige der letzten Zugriffszeit von Kursmitgliedern +ps#:#ps_show_grp_access#:#Anzeige der letzten Zugriffszeit von Gruppenmitgliedern +ps#:#ps_show_lso_access#:#Anzeige der letzten Zugriffszeit von Lernsequenzmitgliedern ps#:#ps_size#:#Dateigröße ps#:#ps_type_select#:#Auswahlliste ps#:#ps_type_select_long#:#Auswahlliste (feste Werte) @@ -14242,10 +14282,6 @@ rbac#:#excs_read#:#Lesezugriff auf Übungs-Administration rbac#:#excs_visible#:#Übungs-Administration ist sichtbar rbac#:#excs_write#:#Einstellungen in Übungs-Administration bearbeiten rbac#:#export_member_data#:#Export von Mitgliederdaten -rbac#:#extt_edit_permission#:#Rechteeinstellungen ändern -rbac#:#extt_read#:#Lesezugriff auf Administration der Software von Drittanbietern -rbac#:#extt_visible#:#Administration der Software von Drittanbietern ist sichtbar -rbac#:#extt_write#:#Software von Drittanbietern konfigurieren rbac#:#facs_edit_permission#:#Rechteeinstellung für die Administration ändern rbac#:#facs_read#:#Lesezugriff auf Administration für Dateien und Ordner rbac#:#facs_upload_blacklisted_files#:#Dateien mit indexierten Endungen hochladen @@ -15155,8 +15191,6 @@ rtst#:#rtst_call#:#ECS-Test aufrufen rwik#:#rwik_call#:#ECS-Wiki aufrufen sahs#:#cont_insert_after_chap#:#Elemente nach einem Kapitel einfügen. sahs#:#cont_insert_into_chap#:#Elemente innerhalb eines Kapitels einfügen. -sahs#:#sahs_activate_expert_mode#:#Sequencing-Expertenmodus aktivieren -sahs#:#sahs_activate_expert_mode_info#:#In diesem Modus können Sie direkt die Sequencing-Informationen des SCORM-Packages editieren. Achtung: ILIAS prüft dabei nicht Ihre Eingaben auf Gültigkeit. sahs#:#sahs_add#:#SCORM-Lernmodul anlegen sahs#:#sahs_authoring_mode#:#Autorenmodus sahs#:#sahs_authoring_mode_info#:#Die SCORM ZIP-Datei muß mit dem ILIAS-SCORM-Editor erstellt worden sein und als SCORM 1.2/2004 Package exportiert worden sein. @@ -15502,7 +15536,7 @@ search#:#search_auto_complete_length#:#Anzahl der Einträge in Auto-Complete-Lis search#:#search_cdate_filter#:#Erstellungsdatum search#:#search_cdate_filter_info#:#In den Suchergebnissen erlaubt ein Filter die Eingabe eines Zeitraums. search#:#search_content#:#Seiteninhalt -search#:#search_copyright#:#Copyright +search#:#search_copyright#:#Lizenz search#:#search_created_after#:#Objekte erstellt nach dem... search#:#search_created_before#:#Objekte erstellt vor dem... search#:#search_created_on#:#Objekte erstellt am... @@ -15619,6 +15653,7 @@ sess#:#sess_members_gallery#:#Galerie sess#:#sess_members_print_title#:#Teilnahmeliste sess#:#sess_msg_applicants_assigned#:#Person wurde für den Sitzungstermin angemeldet. sess#:#sess_msg_applicants_removed#:#Antrag abgelehnt und aus der Liste entfernt. +sess#:#sess_new#:#Neue Sitzung anlegen sess#:#sess_new_registrations#:#Teilnahmeanträge sess#:#sess_notification_option#:#Option sess#:#sess_notification_option_inherit#:#Vom übergeordneten Objekt erben @@ -15673,7 +15708,7 @@ shib#:#shib_account_creation_enabled#:#Aktiviert shib#:#shib_account_creation_enabled_info#:#Ein aktives neues Anmeldekonto wird angelegt. shib#:#shib_account_creation_info#:#Die Kontoerstellung wird ausgelöst, wenn ein Benutzer ohne ein bereits bestehendes ILIAS-Konto versucht, sich über Shibboleth anzumelden. shib#:#shib_account_creation_with_approval#:#Mit Freischaltung -shib#:#shib_account_creation_with_approval_info#:#Ein inaktives neues Anmeldekonto wird angelegt. Das Konto bleibt inaktiv, bis es von einem Administrator freigeschaltet wird. +shib#:#shib_account_creation_with_approval_info#:#Ein inaktives neues Anmeldekonto wird angelegt. Das Konto bleibt inaktiv, bis es von der technischen Betreuung freigeschaltet wird. shib#:#shib_add_missing#:#Fehlende Rollen zuordnen shib#:#shib_add_remove#:#Rollen hinzufügen/entfernen shib#:#shib_assignment_type#:#Art der Zuordnung @@ -16167,6 +16202,7 @@ style#:#sty_media_queries#:#Media Queries style#:#sty_media_query_info#:#Für jeden Media Query wird ein eigener CSS-Abschnitt nach dem Standard-Abschnitt (ohne Media Query) eingefügt. style#:#sty_min_height#:#Minimale Höhe style#:#sty_move_lm_styles#:#Stylesheets der Lernmodule ändern +style#:#sty_move_obj_styles#:#Stylesheets der Objekte ändern style#:#sty_move_style#:#Stylesheet ändern style#:#sty_move_user_styles#:#Stylesheet der Benutzer ändern style#:#sty_move_user_styles_saved#:#Die Zuordnung der Benutzenden, denen die Skin-ID %s zugeordnet war, wurde geändert zu Skin-ID %s. @@ -16733,7 +16769,7 @@ survey#:#survey_360_sure_appraisee_close#:#Wollen Sie wirklich die Umfrage für survey#:#survey_360_sure_appraisee_close_admin#:#Wollen Sie wirklich die Umfrage für die folgenden Feedback-Nehmer schließen? survey#:#survey_360_sure_delete_appraises#:#Wollen Sie wirklich die folgenden Feedback-Nehmer entfernen? survey#:#survey_360_sure_delete_raters#:#Wollen Sie wirklich die folgenden Feedback-Geber für %s entfernen? -survey#:#survey_access_codes#:#Authentifizierung mit Zugangsschlüsseln +survey#:#survey_access_code#:#Authentifizierung mit Zugangsschlüssel survey#:#survey_access_codes_info#:#Im Reiter „Info“ muss ein Zugangsschlüssel eingegeben werden, um Zugang zur Umfrage zu erhalten. Diese Zugangsschlüssel werden erzeugt im Reiter „Befragte » Zugangsschlüssel“. survey#:#survey_activate_skill_service#:#Kompetenz-Service aktivieren survey#:#survey_activate_skill_service_info#:#Es wird ein weiterer Reiter „Kompetenzen“ eingeblendet. Hier werden zunächst den Fragen Kompetenzen zugeordnet, danach werden den Schwellenwerte für die Erreichung bestimmter Kompetenzstufen gesetzt. @@ -17087,7 +17123,7 @@ tagging#:#tag_tags_deleted#:#Tag wurde für Objekte ohne Zugriff entfernt. tagging#:#tagging_all_users#:#Alle Benutzer tagging#:#tagging_edit_settings#:#Einstellungen tagging#:#tagging_enable_all_users#:#Zeige Tags aller Benutzer -tagging#:#tagging_enable_all_users_info#:#Fügt auf dem Reiter „Info“ einen Bereich "Alle Benutzer" hinzu, im dem die Tags aller Besucher zu einer Ressource angezeigt werden. +tagging#:#tagging_enable_all_users_info#:#Fügt auf dem Reiter „Info“ einen Bereich "Alle Benutzer" hinzu, in dem die Tags aller Besucher zu einer Ressource angezeigt werden. tagging#:#tagging_enable_tagging#:#Tagging aktivieren tagging#:#tagging_forbidden_tags#:#Verbotene Tags tagging#:#tagging_no_obj_for_tag#:#Es sind keine Inhalte mit „%s“ verschlagwortet. @@ -17137,7 +17173,7 @@ tbl#:#tbl_export_csv#:#.CSV-Export tbl#:#tbl_export_excel#:#Excel-Export tos#:#tos_accept_usr_agreement_anonymous#:#Nutzungsvereinbarung tos#:#tos_accept_usr_agreement_anonymous_intro#:#Bevor Sie zu ILIAS wechseln, akzeptieren Sie die folgende Nutzungsvereinbarung. -tos#:#tos_account_reg_not_possible#:#Eine Selbstregistrierung ist aktuell nicht möglich, da keine Nutzungsvereinbarung angeboten wird. Bitte kontaktieren Sie Ihre <a href="%1$s">ILIAS-Administration</a> für weitere Informationen. +tos#:#tos_account_reg_not_possible#:#Eine Selbstregistrierung ist aktuell nicht möglich, da keine Nutzungsvereinbarung angeboten wird. Bitte kontaktieren Sie die <a href="%1$s">technische Betreuung</a> für weitere Informationen. tos#:#tos_agree_date#:#Nutzungsvereinbarung zugestimmt am tos#:#tos_agreement#:#Nutzungsvereinbarung tos#:#tos_disabled_no_docs_left#:#Die Nutzungsvereinbarung wurde deaktiviert, da alle Dokumente gelöscht wurden. Erstellen Sie mindestens ein Dokument, bevor Sie die Nutzungsvereinbarung wieder aktivieren. @@ -17345,6 +17381,7 @@ trac#:#trac_paths#:#Pfade trac#:#trac_percentage#:#Prozent trac#:#trac_periodic_system_load#:#Periodische Lastdarstellung trac#:#trac_progress#:#Persönlicher Lernfortschritt +trac#:#trac_progress_block_details#:#Details anzeigen trac#:#trac_progress_block_title#:#Ihr Lernfortschritt trac#:#trac_read_count#:#Zugriffe trac#:#trac_read_count_spent_seconds#:#Bearbeitungszeit / Zugriffe @@ -17407,6 +17444,7 @@ trac#:#trac_view_mode_all#:#Alle Objekte trac#:#trac_view_mode_collection#:#Nur Objekte, die Gesamtstatus bestimmen trac#:#trac_visits#:#Mindestanzahl Aufrufe trac#:#trac_visits_info#:#Ein Aufruf wird erst nach %s Sekunden als neuer Aufruf gezählt. +trac#:#trac_visits_nr#:#Anzahl Aufrufe trac#:#user_total#:#Anzahl Benutzer trac#:#view_mode#:#Anzeigemodus trac#:#view_mode_all#:#Alle @@ -17497,6 +17535,7 @@ ui#:#ui_transcription#:#Abschrift ui#:#unselect_node#:#Knoten %s von der Auswahl entfernen ui#:#vc_sort#:#Sortiert nach: ui#:#warning_url_too_long_msg#:#Die Anzahl der ausgewählten Zeilen führt zu einer zu großen Datenmenge, die nicht übertragen werden kann. Wählen Sie weniger Zeilen aus oder führen Sie die Aktion für die gesamte Tabelle durch (Sammelaktionen). +user#:#account_not_flagged_for_deletion#:#Das Konto ist nicht zum Löschen markiert. user#:#activate_in_profile_fields#:#Das Ändern des Anmeldenamens muss unter Profil > Profile aktiviert werden, bevor diese Einstellung angepasst werden kann. user#:#administrative_settings#:#Administrative Einstellungen user#:#all_roles_has_starting_point#:#Alle Rollen mit definierter Startseite @@ -17518,7 +17557,7 @@ user#:#confirm_logout_for_email_change#:#Sie haben Ihre E-Mail-Adresse geändert user#:#confirm_logout_for_email_change_with_confirmation#:#Im Anschluss wird Ihnen eine E-Mail auf die neue E-Mail gesendet, um zu bestätigen, dass diese Adresse Ihnen gehört. Erst nachdem Sie den Link in der E-Mail angeklickt haben, wird die Adresse in Ihrem Profil geändert. user#:#create_starting_point#:#Regel erstellen user#:#criteria#:#Kriterium -user#:#del_mail_body#:#Hallo %1$s, %2$s Sie haben sich seit längerer Zeit nicht mehr auf %3$s angemeldet. Daher wird ihr ILIAS-Konto %5$s voraussichtlich am %4$s gelöscht. Um Ihr ILIAS-Konto zu behalten, müssen Sie sich vor dem genannten Tag erneut einloggen. +user#:#del_mail_body#:#Hallo %1$s, %2$s Sie haben sich seit längerer Zeit nicht mehr auf %3$s angemeldet. Daher wird Ihr ILIAS-Konto %5$s voraussichtlich am %4$s gelöscht. Um Ihr ILIAS-Konto zu behalten, müssen Sie sich vor dem genannten Tag erneut einloggen. user#:#del_mail_subject#:#Ihr ILIAS-Konto wird bald gelöscht user#:#delete_inactive_user_accounts_frequency#:#Intervall user#:#delete_inactive_user_accounts_frequency_desc#:#Intervall, mit welchem auf Löschung sowie auf E-Mail-Versand getestet wird. @@ -17654,7 +17693,7 @@ user#:#usr_id#:#Systeminterne ID user#:#usr_letter_avatars#:#Letter-Avatare user#:#usr_letter_avatars_info#:#Wenn kein öffentliches Profilbild vorliegt, zeigt ILIAS als Avatar die Initialen des Vor- und Nachnamens bzw. Anmeldenamens an. user#:#usr_public_profile_disabled#:#Profil deaktiviert -user#:#usr_public_profile_disabled_info#:#Ihre Angaben sind nur für Systemadministratoren einsehbar. +user#:#usr_public_profile_disabled_info#:#Nur Ihr Anmeldename wird öffentlich angezeigt. Weitere persönliche Daten sind nur für Personen mit Zugriff auf die Kontenverwaltung einsehbar. user#:#usr_public_profile_global#:#WWW / Für alle Benutzer des Internets sichtbar user#:#usr_public_profile_logged_in#:#Für angemeldete Benutzer sichtbar usr#:#user_action#:#Benutzeraktion @@ -17931,7 +17970,6 @@ wopi#:#wopi_url_byline#:#Vollständige URL des WOPI-Discovery, diese muss über wsp#:#element_already_shared#:#Die Ressource ist für diese Person bereits freigegeben. wsp#:#element_shared#:#Die Ressource wurde freigegeben. wsp#:#error_creating_certificate_pdf#:#Das Zertifikat konnte nicht erstellt werden. Bitte kontaktieren Sie Ihre technische Betreuung und bitten um die Prüfung des Zertifikatsservers. -wsp#:#search_no_match#:#Ihre Suche ergab keine Treffer. wsp#:#share#:#Freigeben wsp#:#share_content#:#Ressource freigeben wsp#:#share_with#:#Anmeldename @@ -17953,6 +17991,7 @@ wsp#:#wsp_permission_registered_info#:#Dieses Objekt ist für alle registrierten wsp#:#wsp_permission_removed#:#Der Eintrag wurde gelöscht. wsp#:#wsp_permissions#:#Freigabe wsp#:#wsp_personal_resources_description#:#Hier können Sie persönliche Dateien, Blogs und Nachweise verwalten. +wsp#:#wsp_search_no_match#:#Ihre Suche ergab keine Treffer. wsp#:#wsp_send_mail#:#Mail senden wsp#:#wsp_set_permission_all#:#Internet/WWW wsp#:#wsp_set_permission_all_password#:#Internet/WWW mit Passwort diff --git a/lang/ilias_el.lang b/lang/ilias_el.lang index 1819a52fa617..e404ed205544 100644 --- a/lang/ilias_el.lang +++ b/lang/ilias_el.lang @@ -685,12 +685,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Εξαγωγή των δεδομένων αξιολόγησης ως -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Πιστοποιητικό (PDF) assessment#:#exp_type_excel#:#Microsoft Excel (Intel x86) -assessment#:#exp_type_spss#:#Τιμή διαχωρισμένη με κόμμα (CSV) assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1454,7 +1452,6 @@ assessment#:#tst_delete_missing_mark#:#Παρακαλώ επιλέξτε του assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Οι προηγούμενες απαντήσεις σας δεν θα χρησιμοποιηθούν ώς προκαθορισμένες τιμές σε μελλοντικά τέστ assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring###28 08 2012 new variable assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1510,7 +1507,6 @@ assessment#:#tst_finish_confirm_button#:#Ναι, θέλω να τελειώσω assessment#:#tst_finish_confirm_cancel_button#:#Όχι, πήγαινε πίσω στην προηγούμενη απάντηση assessment#:#tst_finish_confirmation_question#:#Πρόκειται να τελειώσετε το διαγώνισμα και να φθάσετε το μέγιστο αριθμό επιτρεπτών περασμάτων διαγωνίσματος. Δεν θα μπορείτε να ξαναμπείτε σ' αυτό το διαγώνισμα πάλι για ν' αλλάξετε τις απαντήσεις σας. Θέλετε πραγματικά να τελειώσετε το διαγώνισμα; assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Ολοκληρώθηκε assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1522,7 +1518,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Hide question list###24 07 2009 new variable assessment#:#tst_highscore_achieved_ts#:#Show date of test###28 08 2012 new variable assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown.###28 08 2012 new variable assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1540,7 +1535,6 @@ assessment#:#tst_highscore_score#:#Show score###28 08 2012 new variable assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown.###28 08 2012 new variable assessment#:#tst_highscore_top_num#:#Number of ranks###28 08 2012 new variable assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table.###28 08 2012 new variable -assessment#:#tst_highscore_top_num_unit#:#entries###28 08 2012 new variable assessment#:#tst_highscore_top_table#:#Show table 'top ranking'###28 08 2012 new variable assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown.###28 08 2012 new variable assessment#:#tst_highscore_wtime#:#Show working time###28 08 2012 new variable @@ -1754,7 +1748,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Presentation Settings###12 06 2011 new variable assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Προβολή Εκτύπωσης Διαγωνίσματος και Εκτίμησης assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Μέγιστος χρόνος επεξεργασίας assessment#:#tst_processing_time_desc#:#The maximum processing time starts from the time when a user starts a test and ends after the expiration of the entered hours, minutes and seconds. @@ -1891,10 +1884,6 @@ assessment#:#tst_show_results#:#Προβολή αποτελεσμάτων δια assessment#:#tst_show_side_list#:#Show question list aside###24 07 2009 new variable assessment#:#tst_show_solution_answers_only#:#Results print view (answers only) assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Λεπτομέρειες βαθμολογίας -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Show Answer-Specific Feedback in Test Results @@ -1917,7 +1906,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1979,7 +1967,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Use Previous Answers assessment#:#tst_use_previous_answers_description#:#If checked, the previous answers of a participant will be used as default values in future test passes -assessment#:#tst_use_previous_answers_user#:#Use my previous answers as default values in future test passes assessment#:#tst_user_finished_test#:#User finished test (%s)###24 07 2009 new variable assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2564,7 +2551,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11207,6 +11193,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11292,13 +11284,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11312,6 +11307,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11331,6 +11328,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11399,6 +11400,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16734,7 +16736,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_en.lang b/lang/ilias_en.lang index ff634108892c..19e4950371df 100644 --- a/lang/ilias_en.lang +++ b/lang/ilias_en.lang @@ -215,7 +215,7 @@ administration#:#language_merge_local_changes_info#:#Merge all local changes and administration#:#language_merged_global#:#The local changes were merged into the standard language file. administration#:#language_mode_existing#:#Existing Entries administration#:#language_mode_existing_delete#:#Delete existing entries -administration#:#language_mode_existing_delete_info#:#Delete all entries in the database before importing the file.<br /> WARNING: The imported language file should be complete, otherwise there will be undefined language variables. If that happens, switch to the tab ‘Maintain’ and choose ‘Clear local changes in the database’. +administration#:#language_mode_existing_delete_info#:#Delete all entries in the database before importing the file.<br /><b>Warning</b>: The imported language file should be complete, otherwise there will be undefined language variables. If that happens, switch to the tab ‘Maintain’ and choose ‘Clear local changes in the database’. administration#:#language_mode_existing_keepall#:#Keep all existing entries administration#:#language_mode_existing_keepall_info#:#Import only new entries that do not yet exist in the database. administration#:#language_mode_existing_keepnew#:#Keep all local changes @@ -415,7 +415,7 @@ adve#:#adve_minutes_info#:#Minutes of inactivity before an edit lock expires and adve#:#adve_page_editor_settings#:#ILIAS Page Editor adve#:#adve_pe_general#:#General adve#:#adve_rte_settings#:#TinyMCE Editor -adve#:#adve_text_content_features#:#Text Content Menu +adve#:#adve_text_content_features#:#Supported Characters adve#:#adve_use_physical#:#Use b/i/u instead of str/emp/imp adve#:#adve_use_physical_info#:#This setting replaces the semantic style class buttons for ‘strong’, ‘emphatic’ and ‘important’ with physical attribute buttons ‘b’ (bold), ‘i’ (italic) and ‘u’ (underline). Please note, that this may result in inconsistencies if the style editor is used and other physical attributes are assigned to the strong/emphatic/important style classes. adve#:#adve_use_tiny_mce#:#Enable TinyMCE Editor for WYSIWYG Editing @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#Display ILIAS Test ID assessment#:#examid_in_test_res_desc#:#Show the ILIAS Test ID in the ‘Detailed Results’ and ‘Printable List of Answers’ views as well as in spreadsheet files exported via the ‘Participants’ tab. assessment#:#exp_all_test_runs#:#All test attempts assessment#:#exp_eval_data#:#Export data -assessment#:#exp_file_created#:#Export file created. assessment#:#exp_grammar_as#:#as assessment#:#exp_scored_test_attempt#:#Scored Test Attempt assessment#:#exp_type_certificate#:#Certificate (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Comma Separated Values (CSV) assessment#:#expected_result_type#:#Expected result type assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file. assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file. @@ -735,7 +733,7 @@ assessment#:#finish_all_user_passes#:#Finish all Test Attempts assessment#:#finish_pass_for_all_users#:#Are you sure you want to finish the test attempts for all users? assessment#:#finish_pass_for_multiple_users_in_processing_time#:#You cannot finish the passes of the selected users together, because for at least one selected user the processing time is not over yet. assessment#:#finish_pass_for_user_confirmation#:#Are you sure you want to finish this test attempt for the participant "%s"? -assessment#:#finish_pass_for_user_in_processing_time#:#WARNING: the processing time for this user is not over yet! You should only end the test run if there is a compelling reason (e.g. exclusion from the test). +assessment#:#finish_pass_for_user_in_processing_time#:#<b>Warning</b>: the processing time for this user is not over yet! You should only end the test run if there is a compelling reason (e.g. exclusion from the test). assessment#:#finish_test#:#Finish Test assessment#:#finish_test_all#:#Are you sure you want to finish the test attempts for all users? assessment#:#finish_test_more_than_one_selected#:#Only a single participant may be selected to finish the pass if the test allows only one pass. @@ -772,7 +770,7 @@ assessment#:#hide_best_solution#:#Hide best solution assessment#:#identical_scoring#:#Identical Scoring assessment#:#identical_scoring_desc#:#If selected, gaps with identical solutions will be scored, even if the same solution was used twice or more. If not selected, only the first occurrence of the same solution will be scored. assessment#:#imagemap#:#Image Map -assessment#:#imap_line_color#:#Image Map Line Color +assessment#:#imap_line_color#:#Image Map Line Colour assessment#:#import_question#:#Import Question(s) assessment#:#in_range#:#Within range assessment#:#in_trash#:#In Trash @@ -972,9 +970,9 @@ assessment#:#option_label_not_adequate#:#not adequate assessment#:#option_label_not_applicable#:#not applicable assessment#:#option_label_plus#:#+ assessment#:#option_label_plus_minus#:#+ / - -assessment#:#option_label_right#:#right +assessment#:#option_label_right#:#Right assessment#:#option_label_right_wrong#:#right / wrong -assessment#:#option_label_wrong#:#wrong +assessment#:#option_label_wrong#:#Wrong assessment#:#oq_btn_define_pictures#:#Switch to picture definition view assessment#:#oq_btn_define_terms#:#Switch to term definition view assessment#:#oq_btn_nest_pictures#:#Switch to picture nesting view @@ -1168,6 +1166,7 @@ assessment#:#question_summary#:#Test Attempt Overview assessment#:#question_summary_btn#:#Test Attempt Overview assessment#:#question_title#:#Question Title assessment#:#question_type#:#Question Type +assessment#:#questionlist_cannot_be_altered#:#The questionlist cannot be altered as the test already contains participant data sets. assessment#:#questionpool_not_entered#:#Please enter a name for a question pool! assessment#:#questionpool_not_selected#:#Please select a question pool! assessment#:#questions#:#Questions @@ -1278,8 +1277,8 @@ assessment#:#show_best_solution#:#Show best solution assessment#:#show_detailed_results#:#Show User’s Detailed Results (Marked Pass) assessment#:#show_examview_html#:#On screen assessment#:#show_hide_best_solution#:#Show or hide best solution -assessment#:#show_old_concluding_remarks#:#Show old conlcuding remarks -assessment#:#show_old_introduction#:#Show old introduction +assessment#:#show_old_concluding_remarks#:#Show Old Concluding Remarks +assessment#:#show_old_introduction#:#Show Old Introduction assessment#:#show_pass_overview#:#Show Marked Pass Overview assessment#:#show_results#:#Show Results assessment#:#show_user_answers#:#Show User’s Marked Answers @@ -1364,7 +1363,7 @@ assessment#:#total_max_points_cannot_be_negative#:#The maximum amount of reachab assessment#:#true#:#True assessment#:#tst_access_code_created#:#To provide you with permanent access to your test results and to offer you a possibility to resume this test, a unique test access code was created. Please make a note of this code so that you can continue the test later. assessment#:#tst_activate_skill_service#:#Competence Service -assessment#:#tst_activate_skill_service_desc#:#Supports the assignment of questions to competences and the definition of thresholds for reaching a specific competence level. +assessment#:#tst_activate_skill_service_desc#:#Allow questions to be assigned to competences and for thresholds for reaching specific competence levels to be set. assessment#:#tst_activation_limited_visibility_info#:#Before and after the period during which the test is available, the test's title will be displayed, but participants won’t be able to take the test. Access, including to tests already in progress, will be prevented once the period of availability has ended. assessment#:#tst_activation_online_info#:#Participants can take the test if it is ‘Online’. assessment#:#tst_add_quest_cont_edit_mode#:#Editor @@ -1377,42 +1376,42 @@ assessment#:#tst_add_quest_cont_edit_mode_plain_info#:#No formatting of text in assessment#:#tst_addit_passes_blocked_after_passed_msg#:#You have passed the test. The test cannot be started again. assessment#:#tst_all_test_competences#:#All Test Competence assessment#:#tst_all_user_data_deleted#:#All user data for this test has been removed! -assessment#:#tst_already_passed_cannot_retake#:#Test already passed. You cannot start the test again. +assessment#:#tst_already_passed_cannot_retake#:#You have already passed this test. You cannot start the test again. assessment#:#tst_already_submitted#:#The test has already been completed and submitted. assessment#:#tst_analysis#:#Analysis assessment#:#tst_anonymity#:#Privacy -assessment#:#tst_anonymity_anonymous_test#:#Results Without Names / Anonymous Test -assessment#:#tst_anonymity_no_anonymization#:#Results With Names +assessment#:#tst_anonymity_anonymous_test#:#Results without names / anonymous test +assessment#:#tst_anonymity_no_anonymization#:#Results with names assessment#:#tst_answer_aggr_answer_header#:#Answer assessment#:#tst_answer_aggr_frequency_header#:#Frequency assessment#:#tst_answer_details#:#Answer Details -assessment#:#tst_answer_fixation#:#Lock Answers -assessment#:#tst_answer_fixation_handling#:#Answer Lock -assessment#:#tst_answer_fixation_none#:#Do Not Lock Answers -assessment#:#tst_answer_fixation_none_desc#:#As long as a participant has not finished a test attempt (i.e. by clicking on ‘Finish the Test’), they can change their answers at any time. -assessment#:#tst_answer_fixation_on_followup_question#:#Lock Answers After Moving to Next Question +assessment#:#tst_answer_fixation#:#Lock answers after feedback shown and/or moving to next question +assessment#:#tst_answer_fixation_handling#:#Lock Answers +assessment#:#tst_answer_fixation_none#:#Do not lock answers +assessment#:#tst_answer_fixation_none_desc#:#Participants can change their answers at any time while a test is still running. +assessment#:#tst_answer_fixation_on_followup_question#:#After moving to next question assessment#:#tst_answer_fixation_on_followup_question_desc#:#As soon as the next question in the test has been revealed, a participant’s answers to the previous question are locked and can no longer be changed. -assessment#:#tst_answer_fixation_on_instant_feedback#:#Lock Answers After Feedback Received +assessment#:#tst_answer_fixation_on_instant_feedback#:#After feedback received assessment#:#tst_answer_fixation_on_instant_feedback_desc#:#After the feedback to a question has been shown, a participant’s answers are locked and they can no longer change their answers. -assessment#:#tst_answer_fixation_on_instantfb_or_followupqst#:#Lock Answers After Feedback or Moving to Next Question +assessment#:#tst_answer_fixation_on_instantfb_or_followupqst#:#After feedback or moving to next question assessment#:#tst_answer_fixation_on_instantfb_or_followupqst_desc#:#A participant’s answers to a question will be locked as soon as the question's feedback is shown or when the next question in the test has been revealed. assessment#:#tst_answer_status_answered#:#Answered###fau: testNav assessment#:#tst_answer_status_editing#:# (editing)###fau: testNav assessment#:#tst_answer_status_not_answered#:#Not answered###fau: testNav -assessment#:#tst_answered_questions#:#Nr. of Answered Questions +assessment#:#tst_answered_questions#:#Questions Answered assessment#:#tst_answered_questions_of_total#:#%s of %s assessment#:#tst_answered_questions_test#:#Questions answered in this test assessment#:#tst_attached_xls_file#:#You can find the test results for this participant in the attached Excel file. assessment#:#tst_attempt#:#Attempt -assessment#:#tst_attempt_limit_message#:#Your limit of test attempts is <b>%s</b>. +assessment#:#tst_attempt_limit_message#:#Total number of times you may take this test: <b>%s</b>. assessment#:#tst_attempt_started#:#Attempt Started assessment#:#tst_back_to_pass_details#:#Back to Pass Details assessment#:#tst_back_to_question_list#:#Back to Question List assessment#:#tst_back_to_top#:#Back to Top assessment#:#tst_back_to_virtual_pass#:#Back to Question Overview assessment#:#tst_best_solution_is#:#The best solution is -assessment#:#tst_block_passes_after_passed#:#Block Additional Passes After Test is Passed -assessment#:#tst_block_passes_after_passed_info#:#After a participant has passed the test, no further test attempts are allowed to the participant with this option. +assessment#:#tst_block_passes_after_passed#:#Prevent Retakes After Pass +assessment#:#tst_block_passes_after_passed_info#:#Prevent participants from retaking the test once they have passed it. assessment#:#tst_browse_for_qpl_questions#:#Add from Pool assessment#:#tst_browse_for_tst_questions#:#Add from Other Test assessment#:#tst_btn_hide_best_solutions#:#Hide Best Solutions @@ -1422,14 +1421,14 @@ assessment#:#tst_btn_show_best_solutions#:#Show Best Solutions assessment#:#tst_cannot_online_due_to_switched_quest_set_type_setting#:#The test cannot be set to online, because the test mode setting has been changed. You have to set a test mode relating question config before the test can be set to online. assessment#:#tst_change_dyn_test_question_selection#:#Change Question Selection assessment#:#tst_change_points_for_question#:#Points for the Answer -assessment#:#tst_change_quest_set_type_from_old_to_new_with_conflict#:#You are about to change the test mode from <b>%s</b> to <b>%s</b>, although a questions/question pool configuration dependent on the current test mode already exists.<br />This already existing configuration will be lost. +assessment#:#tst_change_quest_set_type_from_old_to_new_with_conflict#:#You are about to change the question selection mode from <b>%s</b> to <b>%s</b>. You should be aware that a set of questions or a question pool configuration (depending on the current mode) already exists for this test.<br />Any existing questions or question pool configurations will be lost if you change the question selection mode. As a result of changing the mode, you will therefore need to redo the questions for the test by assigning or drawing up new questions, or by configuring the question pool(s) from which questions will be drawn. assessment#:#tst_change_workingtime#:#Add extra time for a participant assessment#:#tst_comp_eval_mode#:#Evaluation by assessment#:#tst_comp_points#:#Competence Points assessment#:#tst_competence#:#Competence assessment#:#tst_competence_tree#:#Competence tree assessment#:#tst_conditions_checkbox_enabled#:#Exam Conditions -assessment#:#tst_conditions_checkbox_enabled_desc#:#Participants must select a checkbox to start the test. Please use the introductory message to present the exam to the participants. +assessment#:#tst_conditions_checkbox_enabled_desc#:#Participants are required to select a checkbox confirming their acceptance of the exam conditions in order to start the test. Please use the test’s introductory message to present the exam conditions to participants. assessment#:#tst_confirm_submit_answers#:#Please confirm your submission of your solution. You won't be able to revert your answers after pressing the submit button. assessment#:#tst_conflicting_setting#:#This setting does conflict with another setting. assessment#:#tst_copy#:#Copy Test @@ -1440,30 +1439,29 @@ assessment#:#tst_corrections_answers_tbl#:#Statistics assessment#:#tst_corrections_answers_tbl_subindex#:#Statistics for %s assessment#:#tst_corrections_incompatible_question_set_type#:#Corrections are only possible if the test uses a fixed set of questions. assessment#:#tst_corrections_manscore_reset_warning#:#There are %s scorings that have been done for the question "%s (ID: %s)". All scorings will be reset when saving the question. -assessment#:#tst_corrections_qst_form#:#Correction of Points +assessment#:#tst_corrections_qst_form#:#Point Correction assessment#:#tst_corrections_tab_question#:#Question assessment#:#tst_corrections_tab_solution#:#Solution assessment#:#tst_corrections_tab_statistics#:#Statistics -assessment#:#tst_count_correct_solutions#:#Only Correct and Complete Answers Score Points -assessment#:#tst_count_correct_solutions_desc#:#Participants score either the maximum number of points for a fully correct and complete answer or 0 points in every other case. This is also valid for questions that define points for partial answers. -assessment#:#tst_count_partial_solutions#:#Incomplete or Partly Wrong Answers Score Points -assessment#:#tst_count_partial_solutions_desc#:#When a question defines points for partial answers, points for correctly provided partial answers are added up: Participants can score points for incomplete or partly wrong answers on these questions. +assessment#:#tst_count_correct_solutions#:#Only fully correct and complete answers score points +assessment#:#tst_count_correct_solutions_desc#:#Fully correct and complete answers score the maximum number of points available. Incomplete or partially incorrect answers score 0 points - this is even the case for questions that otherwise award points for partial answers. +assessment#:#tst_count_partial_solutions#:#Incomplete or partially incorrect answers score points +assessment#:#tst_count_partial_solutions_desc#:#Some types of questions (multiple choice, Kprim, multiple choice in image map questions, error texts and matching questions) allow points to be awarded for incomplete or only partially correct answers. Allow these points to be added up and for them to count towards the overall score. assessment#:#tst_current_run_no_longer_valid#:#Your current test run is no longer valid. <br>It was probably completed already or finished by a tutor. assessment#:#tst_delete_missing_mark#:#Please select at least one mark step to remove it assessment#:#tst_derive_new_pool#:#Derive New Question Pool assessment#:#tst_derive_new_pools#:#Derive New Question Pools assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session. -assessment#:#tst_dont_use_previous_answers#:#Your previous answers will not be used as default values in future test attempts assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties assessment#:#tst_edit_scoring#:#Edit Scoring -assessment#:#tst_enable_questionlist#:#Show 'List of Questions’ -assessment#:#tst_enable_questionlist_description#:#Participants can switch on a list of the test questions on the left of the actual question. +assessment#:#tst_enable_questionlist#:#Show List of Questions +assessment#:#tst_enable_questionlist_description#:#Participants can access a list of the test questions via the ‘Tools’ menu option in the main menu bar to the left of the current question. assessment#:#tst_ending_time#:#Finishing Time assessment#:#tst_ending_time_before_starting_time#:#Please enter a date for the end of the test that is after the start date. -assessment#:#tst_ending_time_desc#:#Time from which participants can no longer submit answers. <strong>Important</strong>: Do <strong>not</strong> use this option for e-exams/distance exams. Instead, use the function 'Limit Duration of Test' (see below). Only then will the test be ended on the server side and each participant's last entry in Essay-Questions automatically saved as auto-save-content. +assessment#:#tst_ending_time_desc#:#Time from which participants can no longer submit answers. <strong>Important</strong>: Do <strong>not</strong> use this option for e-exams/distance exams. Instead, use the ‘Time Limit’ function (see below). Only then will the test be ended on the server side and each participant's last entry automatically saved as auto-save-content. <strong>Please NOTE:</strong> This auto-save content will <strong>NOT</strong> be automatically scored. assessment#:#tst_enter_questionpool#:#Please enter a question pool name where the new question will be stored assessment#:#tst_eval_question_points#:#Question Results for Pass %s -assessment#:#tst_eval_results_by_pass#:#List of Answers for Pass %s +assessment#:#tst_eval_results_by_pass#:#List of Answers for Attempt Nr. %s assessment#:#tst_eval_results_by_pass_lo#:#List of Answers for Attempt %s assessment#:#tst_eval_results_lo#:#List of Answers assessment#:#tst_eval_show_answer#:#Show Answer @@ -1476,20 +1474,20 @@ assessment#:#tst_eval_total_persons#:#Total number of participants who started t assessment#:#tst_exam_access_code#:#Access Code assessment#:#tst_exam_access_code_label#:#Enter access code to continue your already started test. Leave the field empty to start a new test run. assessment#:#tst_exam_conditions#:#Exam Conditions -assessment#:#tst_exam_conditions_label#:#Check to accept the conditions. -assessment#:#tst_exam_conditions_not_checked_message#:#You need to accept the exam conditions! +assessment#:#tst_exam_conditions_label#:#Check this box to confirm that you accept the conditions. +assessment#:#tst_exam_conditions_not_checked_message#:#In order to take this test, you need to accept the exam conditions! assessment#:#tst_exam_ending_time_message#:#The test cannot be started after %s. -assessment#:#tst_exam_modal_message_conditions#:#Please confirm the conditions to start the test. -assessment#:#tst_exam_modal_message_conditions_and_password#:#Please confirm the conditions and enter the password to start the test. +assessment#:#tst_exam_modal_message_conditions#:#Please confirm that you accept the exam conditions in order to start the test. +assessment#:#tst_exam_modal_message_conditions_and_password#:#Please confirm that you accept the exam conditions and enter the password in order to start the test. assessment#:#tst_exam_modal_message_password#:#Please enter the password to start the test. assessment#:#tst_exam_not_assigned_participant_disclaimer#:#You cannot start this test, as you are not an assigned participant. assessment#:#tst_exam_password#:#Test Password -assessment#:#tst_exam_password_invalid_message#:#The given password is not valid! +assessment#:#tst_exam_password_invalid_message#:#The password you entered is not valid. Please try again and, if necessary, contact the person responsible for this test. assessment#:#tst_exam_password_label#:#Password assessment#:#tst_exam_required_fields_not_filled_message#:#You need to fill out all required fields! assessment#:#tst_exam_start#:#Start Test -assessment#:#tst_exam_use_previous_answers#:#Previous Answers -assessment#:#tst_exam_use_previous_answers_label#:#If enabled answers from previous tests will be prefilled. +assessment#:#tst_exam_use_previous_answers#:#Use Previous Answers +assessment#:#tst_exam_use_previous_answers_label#:#Automatically prefill the answers based on answers you gave the last time you took this test. assessment#:#tst_extratime_added#:#The working time of the participant has been increased by %s minutes. assessment#:#tst_extratime_info#:#If you want to add the working time multiple times for the same participant, please insert the total amount of time you want to add. assessment#:#tst_extratime_notavailable#:#Extra time can be added only for tests with one pass and a maximum processing time. @@ -1509,7 +1507,6 @@ assessment#:#tst_finish_confirm_button#:#Yes, I want to finish the test assessment#:#tst_finish_confirm_cancel_button#:#No, go back to the previous question assessment#:#tst_finish_confirmation_question#:#You are going to finish this test. You won’t be able to enter this test attempt again to change your answers. Do you really want to finish this test? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test? -assessment#:#tst_finish_notification_no#:#No e-mail assessment#:#tst_finished#:#Finished assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection assessment#:#tst_gap_analysis#:#Gap Analysis @@ -1518,32 +1515,30 @@ assessment#:#tst_header_participant#:#Question and your answer: assessment#:#tst_header_participant_no_answer#:#Question - not answered assessment#:#tst_header_solution#:#Best Solution: assessment#:#tst_hide_info_tab#:#Hide Info Tab -assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test. -assessment#:#tst_hide_pagecontents#:#Hide page content -assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output. -assessment#:#tst_hide_side_list#:#Hide List of Questions -assessment#:#tst_highscore_achieved_ts#:#Date -assessment#:#tst_highscore_achieved_ts_description#:#A column containing the test date will be included in the ranking. -assessment#:#tst_highscore_all_tables#:#Participant's Own Rank and Top Ranking +assessment#:#tst_hide_info_tab_desc#:#Hide the test’s ‘Info’ tab. +assessment#:#tst_hide_pagecontents#:#Hide Page Content +assessment#:#tst_hide_pagecontents_desc#:#Content placed before and after the actual question text via the ‘Edit Page’ button will not be displayed in results views or print output. +assessment#:#tst_highscore_achieved_ts#:#Date / Time +assessment#:#tst_highscore_achieved_ts_description#:#Show an additional column in the rankings table showing when the test was finished. +assessment#:#tst_highscore_all_tables#:#Own performance and top ranks assessment#:#tst_highscore_all_tables_description#:#Participants get information about the top ranking and their own position in the ranking. assessment#:#tst_highscore_anon#:#Without Names -assessment#:#tst_highscore_anon_description#:#Ranking is displayed without listing the names of the other participants. This will be the case anyway if the test was taken anonymously. -assessment#:#tst_highscore_description#:#Within the 'My Results'-tab participants are presented with a subtab 'Show Ranking'. On clicking it participants are presented with a league table on the performance in the test. You have to activate 'Access to Test Results', too in order to use this functionality. -assessment#:#tst_highscore_enabled#:#Ranking +assessment#:#tst_highscore_anon_description#:#Show rankings without the names of other participants. This will be the case anyway if the test’s ‘Privacy’ has been set to ‘without names / anonymous test’ +assessment#:#tst_highscore_description#:#Within the ‘My Results’ tab, participants are presented with a ‘Rankings’ subtab which contains a scoreboard table of the participants’ performances in the test. ‘Access to Test Results’ needs to be activated in order to use this functionality. +assessment#:#tst_highscore_enabled#:#Rankings assessment#:#tst_highscore_mode#:#Mode -assessment#:#tst_highscore_own_table#:#Participant's Own Rank -assessment#:#tst_highscore_own_table_description#:#Participants are advised of their own position in the ranking. -assessment#:#tst_highscore_percentage#:#Percentage -assessment#:#tst_highscore_percentage_description#:#A column containing the tests percentage will be included in the ranking. -assessment#:#tst_highscore_score#:#Score -assessment#:#tst_highscore_score_description#:#A column containing the score will be included in the ranking. -assessment#:#tst_highscore_top_num#:#Length of Top Ranking -assessment#:#tst_highscore_top_num_description#:#Specify how many ranks are to be included in the top ranking list. -assessment#:#tst_highscore_top_num_unit#:#entries -assessment#:#tst_highscore_top_table#:#Top Ranking -assessment#:#tst_highscore_top_table_description#:#Participants are presented with a table containing the top rankings. -assessment#:#tst_highscore_wtime#:#Duration of Test -assessment#:#tst_highscore_wtime_description#:#A column containing the duration of the test will be included in the ranking. +assessment#:#tst_highscore_own_table#:#Own performance +assessment#:#tst_highscore_own_table_description#:#Participants will be shown their own position in the rankings. +assessment#:#tst_highscore_percentage#:#Percentage Score +assessment#:#tst_highscore_percentage_description#:#Show an additional column in the ranking table showing score in percent. +assessment#:#tst_highscore_score#:#Point Score +assessment#:#tst_highscore_score_description#:#Show an additional column in the ranking table showing points scored. +assessment#:#tst_highscore_top_num#:#Number of Top Ranks +assessment#:#tst_highscore_top_num_description#:#Specify how many positions are to be included in the top ranks list. +assessment#:#tst_highscore_top_table#:#Top ranks +assessment#:#tst_highscore_top_table_description#:#Participants will be shown the top positions in the rankings. +assessment#:#tst_highscore_wtime#:#Time Spent +assessment#:#tst_highscore_wtime_description#:#Show an additional column in the ranking table showing the time taken to complete the test. assessment#:#tst_imap_qst_mode#:#Mode assessment#:#tst_imap_qst_mode_mc#:#Multiple Choice assessment#:#tst_imap_qst_mode_sc#:#Single Choice @@ -1575,39 +1570,39 @@ assessment#:#tst_insert_in_test#:#Insert in Test assessment#:#tst_insert_missing_question#:#Please select at least one question to insert it into the test! assessment#:#tst_insert_questions#:#Are you sure you want to insert the following question(s) to the test? assessment#:#tst_instant_feedback#:#Instant Feedback -assessment#:#tst_instant_feedback_answer_generic#:#Feedback on Fully Correct Answer -assessment#:#tst_instant_feedback_answer_generic_desc#:#If the answer provided is fully correct ILIAS will show one type of feedback upon clicking the ‘Check’ button. If the answer provided is not fully correct, another type of feedback will be displayed. Both types of feedback have to be prepared in the tab ‘Feedback’ of the respective question. -assessment#:#tst_instant_feedback_answer_specific#:#Specific Feedback for Each Answer provided -assessment#:#tst_instant_feedback_answer_specific_desc#:#On clicking the ‘Check’-button, ILIAS will show a specific feedback for every answer option selected by the participant. The feedback has to be prepared along with the question. This specific feedback is not supported for all question types. +assessment#:#tst_instant_feedback_answer_generic#:#Correct / Incorrect Answer Feedback +assessment#:#tst_instant_feedback_answer_generic_desc#:#Display different feedback depending on whether an answer given was fully correct or not fully correct. Both types of feedback have to be prepared in the question’s ‘Feedback’ tab. Whether this feedback is provided automatically or requires manual triggering can be set below. +assessment#:#tst_instant_feedback_answer_specific#:#Specific Feedback for Each Answer +assessment#:#tst_instant_feedback_answer_specific_desc#:#Display specific feedback for each answer option selected by a participant. This feedback has to be prepared in the question’s ‘Feedback’ tab. Whether this feedback is provided automatically or requires manual triggering can be set below. assessment#:#tst_instant_feedback_contents#:#Included Contents -assessment#:#tst_instant_feedback_desc#:#When questions are configured with feedback it is provided to participants during the test attempt. +assessment#:#tst_instant_feedback_desc#:#If questions have had feedback added, this will be made available to participants during the test. assessment#:#tst_instant_feedback_results#:#Points Attained -assessment#:#tst_instant_feedback_results_desc#:#On clicking the ‘Check’ button ILIAS will display how many points were attained by answering this question. -assessment#:#tst_instant_feedback_solution#:#Show Best Possible Answer -assessment#:#tst_instant_feedback_solution_desc#:#On clicking the ‘Check’ button ILIAS will display the best possible answer to the question. +assessment#:#tst_instant_feedback_results_desc#:#Participants will be shown how many points their answer is worth. Please select how the feedback should be triggered below. +assessment#:#tst_instant_feedback_solution#:#Best Possible Answer +assessment#:#tst_instant_feedback_solution_desc#:#Participants will be shown the best possible answer to the question. Please select below how the feedback should be triggered. assessment#:#tst_instant_feedback_trigger#:#Feedback Trigger -assessment#:#tst_instant_feedback_trigger_forced#:#The Feedback is Triggered by Answering Questions -assessment#:#tst_instant_feedback_trigger_forced_desc#:#The presentation of feedback is forced to all participants with answering a question. +assessment#:#tst_instant_feedback_trigger_forced#:#Answering a question +assessment#:#tst_instant_feedback_trigger_forced_desc#:#Feedback is available, but is only displayed when a participant triggers it manually. assessment#:#tst_instant_feedback_trigger_manual#:#Participants can Trigger the Feedback Manually assessment#:#tst_instant_feedback_trigger_manual_desc#:#The feedback is availble but will only be shown when a participant triggers the presentation manually. assessment#:#tst_introduction#:#Introductory Message -assessment#:#tst_introduction_desc#:#Shows an introductory message on the ‘Test’ tab. The message can be edited in the sub-tab 'Edit Introduction' of these settings and is accessible already before the test can be started. +assessment#:#tst_introduction_desc#:#Display an introductory message in the ‘Test’ tab. This message can be edited in the 'Edit Introduction' sub tab of these settings and is already accessible to users before starting the test. assessment#:#tst_introduction_text#:#Introductory Message assessment#:#tst_invited_nobody#:#No users, groups or roles have been added as fixed test participants -assessment#:#tst_invited_selected_users#:#The selected users have been added as fixed test participants -assessment#:#tst_launcher_button_label_passes_limit_reached#:#You have reached the limit of possible test passes -assessment#:#tst_launcher_status_message_conditions#:#You will be asked for your approval of the exam conditions when you start the test. -assessment#:#tst_launcher_status_message_conditions_and_password#:#You will be asked for the password and your approval of the exam conditions when you start the test. +assessment#:#tst_invited_selected_users#:#The selected users have been added as fixed test participants. +assessment#:#tst_launcher_button_label_passes_limit_reached#:#You have taken this test the maximum number of times possible. +assessment#:#tst_launcher_status_message_conditions#:#You will be asked to confirm that you have read and accepted the exam conditions when you start the test. +assessment#:#tst_launcher_status_message_conditions_and_password#:#You will be asked for the password and to confirm that you have read and accepted the exam conditions when you start the test. assessment#:#tst_launcher_status_message_password#:#You will be asked for the password when you start the test. assessment#:#tst_level#:#Competence Level -assessment#:#tst_limit_nr_of_tries#:#Limit Number of Test Attempts +assessment#:#tst_limit_nr_of_tries#:#Limit Nr. of Attempts assessment#:#tst_link_only_unassigned#:#You have selected at least one question that is already linked to a question pool. Only unassigned questions can be added to a question pool. assessment#:#tst_list_answer_details#:#Show in List Below assessment#:#tst_list_of_answers#:#List of Answers -assessment#:#tst_list_of_answers_show#:#Review of Scored Answers -assessment#:#tst_list_of_questions_end#:#Show before a participant finishes the test -assessment#:#tst_list_of_questions_start#:#Show prior to the first question -assessment#:#tst_list_of_questions_with_description#:#Include question descriptions +assessment#:#tst_list_of_answers_show#:#Printable List of Answers +assessment#:#tst_list_of_questions_end#:#Before Finishing Test +assessment#:#tst_list_of_questions_start#:#Prior to First Question +assessment#:#tst_list_of_questions_with_description#:#Include Question Descriptions assessment#:#tst_man_scoring_answered_hide#:#Hide answered questions assessment#:#tst_man_scoring_answered_only#:#Show only answered questions assessment#:#tst_man_scoring_by_part#:#Scoring by Participant @@ -1627,14 +1622,14 @@ assessment#:#tst_manscoring_maxpoints_exceeded_input_alert#:#The maximum of %s p assessment#:#tst_manscoring_no_feedback#:#No written feedback has been given yet. assessment#:#tst_manscoring_question_section_header#:#Question: %s assessment#:#tst_manscoring_user_notification#:#Send Notification -assessment#:#tst_mark#:#Mark -assessment#:#tst_mark_create_new_mark_step#:#Create New Mark Step -assessment#:#tst_mark_minimum_level#:#Minimum Level (in %) -assessment#:#tst_mark_minimum_level_invalid#:#Minimum Level must be between 0 and 100. +assessment#:#tst_mark#:#Grade +assessment#:#tst_mark_create_new_mark_step#:#Create New Grade Tier +assessment#:#tst_mark_minimum_level#:#Minimum Requirement (in %) +assessment#:#tst_mark_minimum_level_invalid#:#Minimum Requirement (in %) must be between 0 and 100. assessment#:#tst_mark_official_form#:#Official Form -assessment#:#tst_mark_passed#:#Passed -assessment#:#tst_mark_reset_to_simple_mark_schema#:#Reset to Simple Mark Schema -assessment#:#tst_mark_reset_to_simple_mark_schema_confirmation#:#If you proceed the current mark schema set for this test will be replaced by a simple mark schema thus deleting all local changes. +assessment#:#tst_mark_passed#:#Pass +assessment#:#tst_mark_reset_to_simple_mark_schema#:#Reset to Simple Grading Scale +assessment#:#tst_mark_reset_to_simple_mark_schema_confirmation#:#Are you sure you wish to proceed? The current grading scale for this test will be replaced by a default pass/fail grading scale. All local changes will be deleted. assessment#:#tst_mark_short_form#:#Short Form assessment#:#tst_max_comp_points#:#Max. Competence Points assessment#:#tst_maximum_points#:#Maximum Points @@ -1648,7 +1643,7 @@ assessment#:#tst_msg_rand_quest_set_incomplete_quest_amount_cfg#:#A test with a assessment#:#tst_msg_rand_quest_set_lost_pools#:#The test's question selection configuration has been frozen, because the following question pools that are involved to the config are not available anymore. The non available pools can be newly derived.<br />%s assessment#:#tst_msg_rand_quest_set_lost_pools_link#:#Open Selected Question Pools assessment#:#tst_msg_rand_quest_set_no_pools_available#:#Currently you cannot add new rules for the question selection, because there are no question pools available. -assessment#:#tst_msg_rand_quest_set_no_src_pool_defs#:#A test with a random set of questions is not possible without selecting at least one question pool. +assessment#:#tst_msg_rand_quest_set_no_src_pool_defs#:#A test with randomly selected questions needs to have at least one question pool selected from which questions can be drawn. assessment#:#tst_msg_rand_quest_set_not_sync#:#The rules for a random selection of questions were newly created or changed. The questions from the pools have to be synchronized in the test before it can be used. This checks also if a random test is possible with the given set of rules. assessment#:#tst_msg_rand_quest_set_pass_buildable#:#A test with a random set of questions is possible with the current configuration. assessment#:#tst_msg_rand_quest_set_pass_not_buildable#:#<b>A test with a random set of questions is not possible with the current selection of question pools and the amount of questions.</b><br /> @@ -1665,10 +1660,10 @@ assessment#:#tst_msg_skl_lvl_thresholds_saved#:#The competence thresholds has be assessment#:#tst_msg_skl_qst_assign_points_not_saved#:#The competence points have not been saved. Please check your input. assessment#:#tst_msg_skl_qst_assign_points_saved#:#The competence points have been saved. assessment#:#tst_msg_source_pool_definitions_deleted#:#The rule has been removed successfully. -assessment#:#tst_nav_next_locks_current_answer_confirm#:#When you navigate to the next question your answer to the current question will be locked and cannot be changed any longer. -assessment#:#tst_nav_next_locks_current_answer_header#:#Navigation to Next Question -assessment#:#tst_nav_next_locks_empty_answer_confirm#:#You did not answer the current question. An empty solution will be saved and locked as answer. This answer cannot be changed later on. -assessment#:#tst_nav_next_locks_empty_answer_header#:#Navigation Without Answer +assessment#:#tst_nav_next_locks_current_answer_confirm#:#As soon as you have moved on to the next question, your answer to the current question will be locked in and it will no longer be possible to change it. +assessment#:#tst_nav_next_locks_current_answer_header#:#Lock In Current Answer? +assessment#:#tst_nav_next_locks_empty_answer_confirm#:#You have not answered the current question. An empty solution will be saved and locked in as your answer. You will not be able to go back and change this answer. +assessment#:#tst_nav_next_locks_empty_answer_header#:#Lock In Empty Solution? assessment#:#tst_nav_while_edit_modal_cancel_btn#:#Cancel assessment#:#tst_nav_while_edit_modal_header#:#Decision about Answers assessment#:#tst_nav_while_edit_modal_nosave_btn#:#Do Not Save @@ -1690,7 +1685,7 @@ assessment#:#tst_notify_manscoring_done_body_msg_subject#:#Scoring for Test "%s" assessment#:#tst_notify_manscoring_done_body_msg_topic#:#Your test has been graded: assessment#:#tst_nr_of_passes#:#Number of Test Attempts assessment#:#tst_nr_of_tries#:#Max. Number of Attempts -assessment#:#tst_nr_of_tries_desc#:#Maximum number of passes a participant can take. +assessment#:#tst_nr_of_tries_desc#:#Limit the maximum number of times a participant can take the test. If this option is not selected, the test can be retaken indefinitely while available. assessment#:#tst_num_all_questions#:#Number of All Questions assessment#:#tst_num_correct_answered_questions#:#Answered Correctly assessment#:#tst_num_non_answered_questions_notseen#:#Not Presented, Yet @@ -1703,61 +1698,60 @@ assessment#:#tst_objective_progress_header#:#Learning Objective Progress assessment#:#tst_objectives_progress_header#:#Learning Objectives Progress assessment#:#tst_old_style_rnd_quest_set_broken#:#This random test is in a irreparable state, because one or more connected question pools have been deleted. Therefor participants cannot take the test any longer. assessment#:#tst_optional_questions_confirmation_non_fixed_test#:#<b>Question related to already passed learning objectives are optional.</b><br /><br />You want to navigate to a question, that relates to an already passed learning objective.<br />You can choose:<br /><br />I you proceed, you can work on these questions. Your answers from previous attempts were not adopted, since new random questions were selected for this attempt. With working on this questions you can also degrade your learning objective result.<br /><br />If you decide to not work on these questions, you can go back. In this case these questions won't be considered in the evaluation. -assessment#:#tst_out_of_time_message#:#You have reached the maximum allowed processing time of the test! +assessment#:#tst_out_of_time_message#:#The time available for taking this test has expired. assessment#:#tst_participant#:#Participant assessment#:#tst_participant_fullname_pattern#:#%2$s, %1$s assessment#:#tst_participant_status#:#Participant Status assessment#:#tst_participating_users#:#Participating Users -assessment#:#tst_pass_best_pass#:#Score the Best Attempt -assessment#:#tst_pass_best_pass_desc#:#The pass in which a participant performed best will be scored. This setting does only apply when more than one test attempt is possible. -assessment#:#tst_pass_deletion#:#Previous Passes -assessment#:#tst_pass_deletion_allowed#:#The deletion of non-scoring attempts is allowed. +assessment#:#tst_pass_best_pass#:#Use best score achieved +assessment#:#tst_pass_best_pass_desc#:#If multiple test attempts are allowed, a participant´s highest scoring result is considered to be their official score. +assessment#:#tst_pass_deletion#:#Allow Deletion of Non-Scoring Attempts +assessment#:#tst_pass_deletion_allowed#:#Non-scoring test attempts may be deleted via the ‘My Results’ tab. assessment#:#tst_pass_details#:#Detailed Results assessment#:#tst_pass_details_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s - %s assessment#:#tst_pass_details_header_lo_qualifying#:#Qualifying Test Results for the Learning Objectives<br />%s - %s assessment#:#tst_pass_details_overview_table_title#:#Detailed Overview for Pass %s assessment#:#tst_pass_finished#:#Test attempt finished assessment#:#tst_pass_finished_on#:#Test attempt finished on -assessment#:#tst_pass_last_pass#:#Score the Last Attempt -assessment#:#tst_pass_last_pass_desc#:#The last attempt of a participant will be scored. +assessment#:#tst_pass_last_pass#:#Use score of latest attempt +assessment#:#tst_pass_last_pass_desc#:#If multiple test attempts are allowed, a participant’s latest result is considered to be their official score. assessment#:#tst_pass_overview_for_participant#:#Test Attempts for Participant: %s assessment#:#tst_pass_overview_header_lo_initial_all_objectives#:#Initial Test Results<br />for the Learning Objectives within the Course %s assessment#:#tst_pass_overview_header_lo_initial_per_objective#:#Initial Test Results<br />for the Learning Objectives %s within the Course %s assessment#:#tst_pass_overview_header_lo_qualifying_all_objectives#:#Qualifying Test Results<br />for the Learning Objectives within the Course %s assessment#:#tst_pass_overview_header_lo_qualifying_per_objective#:#Qualifying Test Results<br />for the Learning Objectives %s within the Course %s -assessment#:#tst_pass_scoring#:#Scoring Multiple Passes +assessment#:#tst_pass_scoring#:#Scoring Multiple Attempts assessment#:#tst_pass_scoring_best#:#Best Test Attempt assessment#:#tst_pass_scoring_last#:#Last Test Attempt -assessment#:#tst_pass_waiting_enabled#:#Force Waiting Time between Attempts -assessment#:#tst_pass_waiting_info#:#With this option additional passes can not be started before the defined time is lapsed relating to the last finished pass. +assessment#:#tst_pass_waiting_enabled#:#Force Waiting Time +assessment#:#tst_pass_waiting_info#:#Participants cannot retake the test until a set period of time has passed since the last time the test was taken. assessment#:#tst_pass_waiting_time#:#Waiting Time assessment#:#tst_passed#:#Passed assessment#:#tst_passes#:#Test Attempts assessment#:#tst_password#:#Test Password -assessment#:#tst_password_details#:#If you define a test password, all users with test access must enter this password to start the test. -assessment#:#tst_password_enter#:#Enter Password +assessment#:#tst_password_details#:#If you set a password for this test, users will have to enter this password to start the test. +assessment#:#tst_password_enter#:#Password: assessment#:#tst_password_entered_wrong_password#:#You cannot start the test because you entered the wrong test password! assessment#:#tst_password_form#:#Enter Test Password assessment#:#tst_password_introduction#:#This test can only be accessed with a test password. Please enter the test password to start the test. -assessment#:#tst_percent_solved#:#Percent Solved +assessment#:#tst_percent_solved#:#Percentage Score assessment#:#tst_player_answer_saved_and_locked#:#Answer is saved and locked and can no longer be changed assessment#:#tst_please_select_source_pool#:#Please select a question pool. assessment#:#tst_please_select_target_for_pool_derives#:#Please select a target conatainer. assessment#:#tst_position#:#Question %s of %s assessment#:#tst_position_without_total#:#Question %s assessment#:#tst_postpone#:#Unanswered Questions -assessment#:#tst_postpone_off#:#Unanswered Questions Stay in Position -assessment#:#tst_postpone_off_desc#:#Question that users just look at and flip over without answering them, will stay at their position in the test and will not be enqueued at the end of the test. -assessment#:#tst_postpone_on#:#Unanswered questions will be enqueued -assessment#:#tst_postpone_on_desc#:#Question that users just look at and flip over without answering them, will be enqueued to be presented again automatically the end of the test. -assessment#:#tst_presentation_properties#:#Administering the Test: Behavior of the Question +assessment#:#tst_postpone_off#:#Unanswered questions stay in position +assessment#:#tst_postpone_off_desc#:#Questions that users skip without answering will remain in their respective positions within the test. They will not be presented again at the end of the test. +assessment#:#tst_postpone_on#:#Unanswered questions are enqueued +assessment#:#tst_postpone_on_desc#:#Questions that users skip without answering will be presented again automatically at the end of the test. +assessment#:#tst_presentation_properties#:#Administering the Test: Question Behaviour assessment#:#tst_presentation_settings_section#:#Presentation assessment#:#tst_previous_access_code_not_available#:#No previous code available! -assessment#:#tst_print#:#Test and Assessment - Print View assessment#:#tst_proceed#:#Proceed -assessment#:#tst_processing_time#:#Limit Duration of Test -assessment#:#tst_processing_time_desc#:#Participants can work through the test only for a specified period of time. Time is clocking away from the moment a user starts a test for the first time. Suspending the test does not stop the clock. If the number of possible test attempts is limited an additional feature for granting extra time to participants appears in the tab 'Participants'. -assessment#:#tst_processing_time_duration#:#Maximum Duration of the Test in Minutes +assessment#:#tst_processing_time#:#Time Limit +assessment#:#tst_processing_time_desc#:#Each participant can work through the test only for a specified period of time. Time starts running down from the moment a user starts the test for the first time. Suspending the test does not stop the clock. If the number of times a test can be taken is limited, an additional feature for granting extra time to participants appears in the ‘Participants’ tab. +assessment#:#tst_processing_time_duration#:#Maximum Time Available in Mins assessment#:#tst_processing_time_duration_desc#:#Maximum of time granted to take the test. assessment#:#tst_qbt_filter_question_title#:#Title of Question assessment#:#tst_qst_added_to_pool_p#:#Successfully added the questions to the selected pool. @@ -1771,7 +1765,7 @@ assessment#:#tst_question_answer_status#:#Which questions should be presented? assessment#:#tst_question_answer_status_all_non_correct#:#All Questions Except those Answered Correctly assessment#:#tst_question_answer_status_non_answered#:#Non Answered Questions assessment#:#tst_question_answer_status_wrong_answered#:#Only wrongly answered questions -assessment#:#tst_question_feedback_back_to_feedback_form#:#Back To Calling Question +assessment#:#tst_question_feedback_back_to_feedback_form#:#Back to Feedback Overview assessment#:#tst_question_feedback_edit_page#:#Edit Content assessment#:#tst_question_mark#:#Flag this question assessment#:#tst_question_marked#:#You flagged the question @@ -1794,7 +1788,7 @@ assessment#:#tst_questions_removed#:#Question(s) removed! assessment#:#tst_random_nr_of_questions#:#How many questions? assessment#:#tst_random_question_set_source_questionpool_summary_string#:#%s (Path: %s) [%s Questions] assessment#:#tst_random_select_questionpool#:#Select the question pool to choose the questions from -assessment#:#tst_reached_points#:#Reached Points +assessment#:#tst_reached_points#:#Point Score assessment#:#tst_reached_points_of_max#:#%s of %s assessment#:#tst_remove_mark#:#Remove this flag assessment#:#tst_remove_question#:#Are you sure you want to remove the following question from the test? @@ -1817,39 +1811,39 @@ assessment#:#tst_res_tab_msg_res_after_date_no_res#:#Once you have taken the tes assessment#:#tst_res_tab_msg_res_after_finish_test#:#After finishing the test your results will be shown here. assessment#:#tst_res_tab_msg_res_after_taking_test#:#After taking the test your results will be shown here. assessment#:#tst_res_tab_msg_res_after_test_passed#:#After passing the test your results will be shown here. -assessment#:#tst_reset_processing_time#:#Reset duration for every test attempt -assessment#:#tst_reset_processing_time_desc#:#The duration will be reset to the defined maximum for every test attempt. This setting requires multiple test attempts to become effective. +assessment#:#tst_reset_processing_time#:#Automatic Time Limit Reset +assessment#:#tst_reset_processing_time_desc#:#The time limit for the test will be reset every time the test is taken. For this setting to have any effect, participants must be able to take the test multiple times. assessment#:#tst_result#:#Test Result assessment#:#tst_result_pass#:#Results of Test Attempt assessment#:#tst_result_user_name#:#Test Results for %s assessment#:#tst_result_user_name_pass#:#Results of Test Attempt %s for %s assessment#:#tst_results#:#Test Results assessment#:#tst_results_access_always#:#Immediately -assessment#:#tst_results_access_always_desc#:#Participants can access their results within the ‘Results’-tab immediately after starting the test attempt and while still taking the test. Additionally ILIAS will redirect to the 'Results'-tab after the test has been finished. -assessment#:#tst_results_access_date#:#Date -assessment#:#tst_results_access_date_desc#:#Participants get access to their test results within a 'My Results'-tab after the defined date. +assessment#:#tst_results_access_always_desc#:#Participants can access their results within the ‘My Results’ tab immediately after starting the test. Additionally, ILIAS will redirect participants to the ‘My Results’ tab upon finishing the test. <br/> <b>Please note: Participants will be able to access their results while still taking the test.</b> +assessment#:#tst_results_access_date#:#From a set date and time +assessment#:#tst_results_access_date_desc#:#Participants will be able to access their results via the ‘My Results’ tab from a set date and time onwards. assessment#:#tst_results_access_enabled#:#Access to Test Results -assessment#:#tst_results_access_enabled_desc#:#A tab 'My Results' will be offered to participants. Options in this section and the following ones below configure what information is to be included into the report and when it will be accessible. -assessment#:#tst_results_access_finished#:#After Test Attempt is Finished -assessment#:#tst_results_access_finished_desc#:#ILIAS displays the test results after the test attempt is finished. After finishing the test attempt participants can access their test results within the ‘My Results’-tab at any time. -assessment#:#tst_results_access_passed#:#After Test has been Passed -assessment#:#tst_results_access_passed_desc#:#ILIAS displays the test results after the participant has passed the test. After passing the test participants can access their test results within the 'My Results'-tab at any time. -assessment#:#tst_results_access_setting#:#Point in Time +assessment#:#tst_results_access_enabled_desc#:#Give participants access to a ‘My Results’ tab. The information contained therein and when it can be accessed can be configured below. +assessment#:#tst_results_access_finished#:#After the test has been taken +assessment#:#tst_results_access_finished_desc#:#Participants gain access to their test results via the ‘My Results’ tab as soon as they have finished the test. +assessment#:#tst_results_access_passed#:#Once the test has been passed +assessment#:#tst_results_access_passed_desc#:#Participants only gain access to their test results via the ‘My Results’ tab after they have passed the test. +assessment#:#tst_results_access_setting#:#When? assessment#:#tst_results_aggregated#:#Aggregated Test Results assessment#:#tst_results_back_introduction#:#Back to Introductory Message assessment#:#tst_results_back_overview#:#Back to Results Overview assessment#:#tst_results_details_options#:#Further Options assessment#:#tst_results_gamification#:#Gamification -assessment#:#tst_results_grading_opt_show_details#:#Show detailed test results -assessment#:#tst_results_grading_opt_show_details_desc#:#In addition to the summary test result, a "Detailed Results" action is provided. The "Detailed test results" table shows the titles of the questions and the points achieved for each run. The content of the table can be further supplemented in the "Further options" section. -assessment#:#tst_results_grading_opt_show_mark#:#Show Resulting Mark -assessment#:#tst_results_grading_opt_show_mark_desc#:#The resulting mark will be appended to the summary test result. Participants can access their test results within the ‘My Results’-tab. +assessment#:#tst_results_grading_opt_show_details#:#Make Detailed Results Available +assessment#:#tst_results_grading_opt_show_details_desc#:#In addition to the standard overview of their test results provided in the ‘My Results’ tab, allow participants to access ‘Detailed Results’ for each attempt they have undertaken. These results can be accessed via the ‘Actions’ menu for each individual attempt. This table shows shows the titles of the questions, the questions themselves and the points earned for the answer given. The contents of the table can be expanded in the ‘Further Options’ section below. +assessment#:#tst_results_grading_opt_show_mark#:#Show Grade +assessment#:#tst_results_grading_opt_show_mark_desc#:#Display a participant’s grade (based on their scoring attempt) as a notification in their ‘My Results’ tab. assessment#:#tst_results_grading_opt_show_status#:#Show ‘Passed’ / ‘Failed’ Status -assessment#:#tst_results_grading_opt_show_status_desc#:#Information on the ‘Passed’ / ‘Failed’ Status will be appended to the summary test result. Participants can access their test results within the ‘My Results’-tab. -assessment#:#tst_results_overview#:#Pass Overview of the Test Results +assessment#:#tst_results_grading_opt_show_status_desc#:#Display a participant’s ‘passed’ or ‘failed’ status (based on their scoring attempt) as a notification in their ‘My Results’ tab. +assessment#:#tst_results_overview#:#Overview of Test Attempts assessment#:#tst_results_print_best_solution#:#Best Solution -assessment#:#tst_results_print_best_solution_info#:#Additionally for each question the best possible solution will be displayed. -assessment#:#tst_resume_test#:#Resume the Test +assessment#:#tst_results_print_best_solution_info#:#Display the best possible solution for each question on the ‘Detailed Results’ page of each individual attempt. This can be accessed via the actions menu for each test attempt in ‘My Results’. For this, ‘Access to Test Results’ and then ‘Make Detailed Results Available’ need to have been activated (see above). +assessment#:#tst_resume_test#:#Resume Test assessment#:#tst_revert_changes#:#Undo Editing###fau: testNav assessment#:#tst_rnd_quest_cfg_tab_general#:#Configuration assessment#:#tst_rnd_quest_cfg_tab_pool#:#Selected Question Pools @@ -1863,18 +1857,18 @@ assessment#:#tst_save_manscoring_failed#:#Saving the scoring for test attempt %s assessment#:#tst_save_thresholds#:#Save Thresholds assessment#:#tst_saved_manscoring_by_question_successfully#:#The scoring for the question %s for test attempt %s has been saved successfully. assessment#:#tst_saved_manscoring_successfully#:#The scoring for test attempt %s for %s has been saved successfully. -assessment#:#tst_score_cut_question#:#For Each Questions Negative Points are set to ‘0 Points’ -assessment#:#tst_score_cut_question_desc#:#Participants may score negative results for a question that had negative points for assigned to individual answer options. This setting ensures that per question any negativ result is set to 0 points. -assessment#:#tst_score_cut_test#:#For the Whole Test a Negative Result is set to ‘0 Points’ -assessment#:#tst_score_cut_test_desc#:#Participants might score negative points in questions. Scored points of all questions are added up. Only if the overall result of the test is negative this overall result will be set to 0 points. With this setting negative points carry a lot of weight. +assessment#:#tst_score_cut_question#:#Individual questions cannot receive a negative score +assessment#:#tst_score_cut_question_desc#:#Questions that usually allow negative scores when wrong answers have been given, have their scores set to zero in such a situation. This means that individual questions score at worst zero, and do not detract from the overall score for the test by contributing negative scores. +assessment#:#tst_score_cut_test#:#Individual questions can receive negative scores +assessment#:#tst_score_cut_test_desc#:#Participants can score negative points in individual questions. At the end of the test, the points scored in all questions are added together. If the overall score for the test is negative, it is set to 0. With this setting, questions that have been answered incorrectly or partially incorrectly have a much greater impact on the overall score. assessment#:#tst_score_cutting#:#Negative Points assessment#:#tst_search_users#:#Search Participants assessment#:#tst_select_questionpool#:#Please select a question pool to store the created question -assessment#:#tst_selected_user_data_deleted#:#The test data of the selected user(s) was removed successfully +assessment#:#tst_selected_user_data_deleted#:#The test data of the selected user(s) has been successfully removed. assessment#:#tst_sequence_properties#:#Administering the Test: Functionality Available to Participants -assessment#:#tst_set_offline_due_to_switched_question_set_type_setting#:#The test has been set to offline, because the test mode setting has been changed. You have to set a new test mode relating question config before the test can be set to online again. -assessment#:#tst_settings_conflict_postpone_and_lock#:#"Unanswered questions will be enqueued" cannot be used together with "Lock Answers After Moving to Next Question". -assessment#:#tst_settings_conflict_shuffle_and_lock#:#"Shuffle Questions" cannot be used together with "Lock Answers After Moving to Next Question". +assessment#:#tst_set_offline_due_to_switched_question_set_type_setting#:#The test has been set to offline because the question selection mode has been changed. You will need to add or assign questions to the test again before it can be set to online. +assessment#:#tst_settings_conflict_postpone_and_lock#:#‘Unanswered questions are enqueued’ cannot be used together with ‘Lock Answers: After moving to next question’. +assessment#:#tst_settings_conflict_shuffle_and_lock#:#‘Shuffle Questions’ cannot be used together with ‘Lock Answers: After moving to next question’. assessment#:#tst_settings_form_reload_needed#:#The form needed to be reloaded to avoid data loss as the available settings have changed due to the removal of all results of participants. assessment#:#tst_settings_header_additional#:#Additional Features assessment#:#tst_settings_header_execution#:#Administering the Test: Access @@ -1883,32 +1877,28 @@ assessment#:#tst_settings_header_test_run#:#Administering the Test: Test Run assessment#:#tst_settings_not_found#:#Missing Test Settings assessment#:#tst_settings_not_found_msg#:#Test Settings could not found. This may be due to a missing migration step. Please contact your system administrator. assessment#:#tst_show_answer_sheet#:#Show Answers -assessment#:#tst_show_cancel#:#Suspend Test -assessment#:#tst_show_cancel_description#:#Participants are presented with a button to stop the test run and to continue it later. Caution: Suspending the test does not stop the countdown of the maximum duration of the test. +assessment#:#tst_show_cancel#:#Show ‘Suspend Test’ Button +assessment#:#tst_show_cancel_description#:#Participants are presented with a button with which they can suspend the test in order to continue it later. Caution: suspending the test does not stop the clock running down if a time limit has been set for the test. assessment#:#tst_show_comp_results#:#Competence Results assessment#:#tst_show_results#:#Test Results assessment#:#tst_show_side_list#:#Show List of Questions assessment#:#tst_show_solution_answers_only#:#Print View of Results (Answers Only) assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the ‘Edit content’ tab page will not be visible in a print-out. If you want to save some paper space, select this option. -assessment#:#tst_show_solution_compare#:#Show Best Solution in ‘Detailed Results’ -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the 'Detailed Results' that can be accessed via the 'Show Test Results'-button on the 'Info'-tab. It will not be displayed in the printable 'List of Answers' even though the setting is made here. -assessment#:#tst_show_solution_details#:#Scored Answers of Participant -assessment#:#tst_show_solution_details_desc#:#The ‘Table of Detailed Test Results’ will be added by a list of answers. assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored. assessment#:#tst_show_solution_feedback#:#Feedback -assessment#:#tst_show_solution_feedback_desc#:#Feedback related to the answers provided by the participant is displayed. Please mind that this option becomes effective only if you have activated ‘Scored Answers of Participant’ and feedback was prepared along with the questions in the first place. -assessment#:#tst_show_solution_printview#:#Additional ‘List of Answers’ for Printing -assessment#:#tst_show_solution_printview_desc#:#An overview of all questions with the answers of the respective participant is generated. This list will be offered within the ‘My Results’-tab in a subtab 'Review of Scored Answers'. +assessment#:#tst_show_solution_feedback_desc#:#Provide participants with feedback on the answers they have given. For this, feedback needs to have been added to the individual questions and ‘Access to Test Results’ and then ‘Make Detailed Results Available’ (see above) need to have been activated. +assessment#:#tst_show_solution_printview#:#Printable List of Answers +assessment#:#tst_show_solution_printview_desc#:#Once the test is finished, an overview of all questions with the answers of the respective participant will be generated. This list will be offered within the ‘My Results’ tab in a subtab ‘Printable List of Answers’. assessment#:#tst_show_solution_signature#:#Signature Placeholder -assessment#:#tst_show_solution_signature_desc#:#The prepared printout version will contain a signature placeholder for the participant. Please mind to activate ‘Table of Detailed Test Results’ to use this functionality. +assessment#:#tst_show_solution_signature_desc#:#If either of the options ‘Make Detailed Results Available’ or ‘Printable List of Answers’ has been activated, the prepared printout version will contain a signature placeholder for the participant’s signature. assessment#:#tst_show_solution_suggested#:#Content for Recapitulation -assessment#:#tst_show_solution_suggested_desc#:#If content for recapitulation was assigned to the test questions in the first place, this content will be shown in the ‘Table of Detailed Test Results’-table. Participants get an opportunity for remedial learning. For this option to become effective you have to activate ‘Table of Detailed Test Results’ under ‘Access to Test Results’. -assessment#:#tst_show_summary#:#Show ‘Test Attempt Overview’ -assessment#:#tst_show_summary_description#:#Participants are presented with a button ‘Test Attempt Overview’. On that screen the overall status of all questions will be displayed.. -assessment#:#tst_show_toplist#:#Ranking +assessment#:#tst_show_solution_suggested_desc#:#If a question has had content for recapitulation added, show this content in the ‘Detailed Results’ table. This will give participants the opportunity to have another look at the material being addressed by the question. For this, ‘Access to Test Results’ and then ‘Make Detailed Test Results Available’ need to have been activated (see above). +assessment#:#tst_show_summary#:#Show Test Attempt Overview +assessment#:#tst_show_summary_description#:#Show a ‘Test Attempt Overview’ button. By clicking on this, participants can access an overview of the current test attempt showing which questions have already been answered. Additionally, which questions have been flagged and how many points a question is worth will displayed according to which of these options have been activated. Further fine tuning to the overview of the test attempt can be undertaken below. +assessment#:#tst_show_toplist#:#Rankings assessment#:#tst_shuffle_questions#:#Shuffle Questions -assessment#:#tst_shuffle_questions_description#:#Shuffles the sequence of questions for every participant and every test attempt. +assessment#:#tst_shuffle_questions_description#:#Shuffle the question order for each participant and each time the test is taken. assessment#:#tst_signature#:#Signature assessment#:#tst_single_answer_details#:#Show Single Answer assessment#:#tst_skill_triggerings_num_req_answers#:#Required Amount of Answers for Competence Triggers @@ -1916,7 +1906,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions. No competence records will be written for these competences.<br />The required amount of questions: %s assessment#:#tst_skl_level_thresholds_link#:#Configure Competence Thresholds assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences! -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected. assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds assessment#:#tst_sol_comp_expressions#:#Comparison Expressions assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare @@ -1964,21 +1953,20 @@ assessment#:#tst_test_result#:#Test Result assessment#:#tst_text_count_system#:#Scoring System assessment#:#tst_threshold#:#Thresholds (in %) assessment#:#tst_time_already_spent#:#You started the test at: %s. Your maximum processing time is %s. -assessment#:#tst_time_already_spent_left#:#You have %s left. +assessment#:#tst_time_already_spent_left#:#You have %s remaining. assessment#:#tst_time_limit_message#:#You will have <b>%s minutes</b> to answer all questions. -assessment#:#tst_title_output#:#Show Question Title -assessment#:#tst_title_output_full#:#Question Titles and Available Points -assessment#:#tst_title_output_hide_points#:#Only Question Titles +assessment#:#tst_title_output#:#Question Title Display Options +assessment#:#tst_title_output_full#:#Question titles and available points +assessment#:#tst_title_output_hide_points#:#Only question titles assessment#:#tst_title_output_info#:#Set which combination of question titles and/or points available should be visible to participants while they are taking the test and within the test attempt overview (see below). -assessment#:#tst_title_output_no_title#:#Neither Question Titles nor Available Points -assessment#:#tst_title_output_only_points#:#Only Available Points +assessment#:#tst_title_output_no_title#:#Neither question titles nor available points +assessment#:#tst_title_output_only_points#:#Only available points assessment#:#tst_trigger_result_refreshing#:#Results need to be recalculated. This may take a while. assessment#:#tst_type#:#Test Type assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fau: testNav assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Use Previous Answers -assessment#:#tst_use_previous_answers_description#:#Participants will be presented with their answers from previous test attempts. This option has to be activated by individual participants on a modal before starting a test attempt. -assessment#:#tst_use_previous_answers_user#:#Use my previous answers as default values in future test attempts +assessment#:#tst_use_previous_answers_description#:#Participants will be presented with their answers from previous test attempts. This option has to be activated by individual participants in a modal that pops up when starting a test attempt. assessment#:#tst_user_finished_test#:#User finished test (%s) assessment#:#tst_view_competence_assign#:#View Assignment Properties assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objective<br />%s @@ -2058,7 +2046,7 @@ auth#:#auth_auth_settings#:#Settings auth#:#auth_cron_destroy_expired_sessions#:#Deletion of Expired Sessions auth#:#auth_cron_destroy_expired_sessions_desc#:#This job deletes expires sessions. auth#:#auth_err_expired#:#Your session has been deactivated due to inactivity. -auth#:#auth_err_invalid_user_account#:#Authentication failed due to an internal failure. +auth#:#auth_err_invalid_user_account#:#Login failed. Please check that you have entered your username and password correctly. If this issue persists, your account may be inactive or have expired. In this case, please contact your ILIAS platform's technical support via the link at the bottom of the screen. auth#:#auth_err_ldap_exception#:#Authentication failed due to an internal authentication failure (LDAP). auth#:#auth_info_add#:#Choose this option if you have never registered to ILIAS. A new account will be created. auth#:#auth_info_migrate#:#If you have already an ILIAS account, enter username and password to migrate your personal data (mail, test results...). @@ -2137,7 +2125,8 @@ auth#:#auth_saml_deleted_idp#:#The Identity Provider has been deleted. auth#:#auth_saml_enable#:#Enable SAML Support auth#:#auth_saml_err_sqlite_driver#:#The SAML authentication requires the SQLite driver for PHP. Please install the SQLite package and try again. auth#:#auth_saml_idp#:#IDP -auth#:#auth_saml_idp_selection_table_desc#:#Bitte wählen Sie den Identity Provider mit dem Sie sich anmelden möchten. +auth#:#auth_saml_idp_deactivated_auth_failed#:#Authentication failed, the identity provider is disabled. +auth#:#auth_saml_idp_selection_table_desc#:#Please select the identity provider you want to log in with. auth#:#auth_saml_idp_selection_table_title#:#Identity Provider Selection auth#:#auth_saml_idp_settings#:#IDP Settings auth#:#auth_saml_idps#:#SAML IDP List @@ -2224,49 +2213,49 @@ background_tasks#:#ui_msg_num_files#:#%s file(-s) were detected for download, do background_tasks#:#ui_msg_sum_file_sizes#:#The total download size before creating the zip-folder is %s. Do you want to continue? background_tasks#:#waiting#:#Waiting badge#:##:#Are you sure you want to delete the following badges and all their respective assignments? -badge#:#awarded_by#:#Awarded by +badge#:#awarded_by#:#Awarded By badge#:#badge_activity_badges#:#Activity Badges badge#:#badge_add_template#:#Add Template badge#:#badge_add_to_profile#:#Add to Profile -badge#:#badge_assignment_deletion_confirmation#:#Are you sure you want to revoke the following badge assignments for "%s"? +badge#:#badge_assignment_deletion_confirmation#:#Are you sure you want to revoke the badge "%s" awarded to the following user(s)? badge#:#badge_award_badge#:#Award Badge badge#:#badge_award_revoke#:#Award/Revoke Badge badge#:#badge_badge#:#Badge badge#:#badge_course_lp#:#Course LP -badge#:#badge_course_lp_invalid#:#The following objects have a LP mode which is not supported: %s. +badge#:#badge_course_lp_invalid#:#The following objects have a learning progress mode which is not supported: %s. badge#:#badge_create#:#Create Badge badge#:#badge_create_image_processing_failed#:#The badge could not be created, an error occurred while processing the image. badge#:#badge_criteria#:#Criteria badge#:#badge_crs_merit#:#Merit badge#:#badge_deletion#:#Badge successfully deleted. -badge#:#badge_deletion_confirmation#:#Are you sure you want to delete the following badges and all their respective assignments? +badge#:#badge_deletion_confirmation#:#Are you sure you want to delete the following badges? This will also delete any of these badges that have been earned by or awarded to users. badge#:#badge_image_from_template#:#Use Template badge#:#badge_image_from_upload#:#Upload Image badge#:#badge_image_template_form#:#Image Template badge#:#badge_image_templates#:#Image Templates badge#:#badge_in_profile#:#In Profile badge#:#badge_issued_on#:#Issued On -badge#:#badge_lhist_badge_completed#:#Badge $3$ was awarded. -badge#:#badge_lhist_badge_completed_in#:#Badge $3$ was awarded in $1$. +badge#:#badge_lhist_badge_completed#:#Awarded the badge $3$. +badge#:#badge_lhist_badge_completed_in#:#Awarded the badge $3$ in $1$. badge#:#badge_manual#:#Manual Awarding badge#:#badge_new_badges#:#You have %1 new badge(s). -badge#:#badge_no_valid_types_for_obj#:#There are currently no active badge types. You cannot create new badges. Please contact your administrator. +badge#:#badge_no_valid_types_for_obj#:#There are currently no active badge types and therefore you cannot create new badges. Please contact your installation’s technical support. badge#:#badge_notification_badges#:#New Badges badge#:#badge_notification_badges_goto#:#To your badges -badge#:#badge_notification_body#:#you just received new badges. -badge#:#badge_notification_osd#:#You just received new badges: [BADGE_LIST] -badge#:#badge_notification_parent_goto#:#To repository -badge#:#badge_notification_reason#:#You are receiving this message to be able to add the badges to your profile. -badge#:#badge_notification_subject#:#Badges received +badge#:#badge_notification_body#:#You have just received one or more new badges. +badge#:#badge_notification_osd#:#You have received one or more new badges: [BADGE_LIST] +badge#:#badge_notification_parent_goto#:#To the repository +badge#:#badge_notification_reason#:#If you go to the ‘Badges’ section of your ‘Achievements’ in your ILIAS installation (see link above), you will be able to add any new or existing badges to your profile. +badge#:#badge_notification_subject#:#New Badge(s) badge#:#badge_object_badges#:#Object Badges badge#:#badge_personal_badges#:#My Badges -badge#:#badge_profile_less#:#Show less -badge#:#badge_profile_more#:#Show all +badge#:#badge_profile_less#:#Show Fewer +badge#:#badge_profile_more#:#Show All badge#:#badge_remove_badge#:#Revoke Badge -badge#:#badge_remove_from_profile#:#Remove from Profile +badge#:#badge_remove_from_profile#:#Remove From Profile badge#:#badge_select_one#:#You have to select at least one badge badge#:#badge_service_activate#:#Activate Service -badge#:#badge_service_activate_info#:#Activate the service to make badges available. +badge#:#badge_service_activate_info#:#Allow badges to be earned and awarded on this installation. badge#:#badge_settings#:#Badge Settings badge#:#badge_sort_active_badges_first#:#Active Badges First badge#:#badge_sort_active_badges_last#:#Active Badges Last @@ -2276,21 +2265,21 @@ badge#:#badge_sort_added_to_profile_last#:#Added To Profile First badge#:#badge_sort_excluded_from_profile_first#:#Excluded From Profile First badge#:#badge_sort_manual_awarding_first#:#Badges mit manueller Vergabe zuerst badge#:#badge_sort_manual_awarding_last#:#Badges mit manueller Vergabe zuletzt -badge#:#badge_subtype_auto#:#automatic -badge#:#badge_subtype_manual#:#manual +badge#:#badge_subtype_auto#:#Automatic +badge#:#badge_subtype_manual#:#Manual badge#:#badge_template_deletion_confirmation#:#Are you sure you want to delete the following image templates? -badge#:#badge_template_types#:#Valid Types +badge#:#badge_template_types#:#Badge Type Allocation badge#:#badge_template_types_all#:#All badge#:#badge_template_types_specific#:#Specific badge#:#badge_types#:#Types -badge#:#badge_update_image_processing_failed#:#The badge could not be updated, an error occurred while processing the image. +badge#:#badge_update_image_processing_failed#:#It was not possible to update the badge. An error occurred while processing the image. badge#:#badge_uploaded_image_file_not_found#:#No uploaded image for the badge could be found. -badge#:#badge_user_profile#:#User Profil -badge#:#badge_valid#:#Valid until +badge#:#badge_user_profile#:#User Profile +badge#:#badge_valid#:#Valid Until badge#:#criteria#:#Criteria -badge#:#endless#:#Always -badge#:#issued_on#:#Issued on -badge#:#position_updated#:#Profil assignment updated. +badge#:#endless#:#Forever +badge#:#issued_on#:#Issued On +badge#:#position_updated#:#The badges displayed in your profile have been updated. badge#:#sort_by_date_asc#:#Date Ascending badge#:#sort_by_date_desc#:#Date Descending badge#:#sort_by_title_asc#:#Title Ascending @@ -2546,6 +2535,7 @@ blog#:#blog_whole_blog#:#Whole blog book#:#X_reservations_of#:#%s booking(s) of book#:#book_add#:#Add Booking Pool book#:#book_add_object#:#Add Item +book#:#book_add_participant#:#Add Participant book#:#book_add_schedule#:#Add Schedule book#:#book_additional_info_file#:#Additional Description book#:#book_all#:#Show all @@ -2564,7 +2554,6 @@ book#:#book_booking#:#Booking book#:#book_booking_information#:#Information book#:#book_booking_objects#:#Bookable Items book#:#book_booking_reminders#:#Upcoming Bookings -book#:#book_bookings_per_user#:#Bookings per User book#:#book_bulk_confirmation#:#Please check that all values are listed correctly. book#:#book_bulk_creation#:#Bulk Creation book#:#book_bulk_data#:#Item Data @@ -2627,7 +2616,7 @@ book#:#book_object_selection#:#Item Selection book#:#book_object_updated#:#Bookable item updated. book#:#book_objects_available#:#Items available %s book#:#book_open#:#Open Booking Pool -book#:#book_overall_limit#:#Limit Number of Bookings +book#:#book_overall_limit#:#Limit Total Number of Bookings per User book#:#book_overall_limit_warning#:#You have reached the maximum number of bookings allowed. book#:#book_participant_already_assigned#:#One or more participants have already been added. book#:#book_participant_assigned#:#Participant(s) added. @@ -2680,7 +2669,7 @@ book#:#book_schedule_type_fixed#:#Fixed Schedule book#:#book_schedule_type_fixed_info#:#This booking mode can be used for things that can be booked for specific periods of time, such as rooms, services and equipment. book#:#book_schedule_type_none#:#No Schedule book#:#book_schedule_type_none_direct#:#No Schedule, Direct Booking -book#:#book_schedule_type_none_direct_info#:#This booking mode is ideal for presentation topics or places in seminars that do not require set times. Participants can book items directly on a first come, first served basis. +book#:#book_schedule_type_none_direct_info#:#This booking mode is ideal for presentation topics or places in seminars that do not require set times. Participants can book items directly on a first come, first served basis. Each item can only be booked once per participant. book#:#book_schedule_type_none_info#:#This type can be used for seminar papers, seminar places and such. book#:#book_schedule_type_none_preference#:#No Schedule, Using Preferences book#:#book_schedule_type_none_preference_info#:#This booking mode is ideal for presentation topics, places in seminars or similar. Participants get to indicate their preferences in terms of which items they are most interested in. Items will then be allocated automatically after the preferences deadline has passed. @@ -2694,6 +2683,7 @@ book#:#book_show_message#:#Show Message book#:#book_title_description_nr#:#Title; Description; Number of Units book#:#book_title_description_nr_info#:#Enter title, description and number of units separated by semicolon or TAB character (if importing from spreadsheet software). Use one line per item. book#:#book_too_many_preferences#:#You have selected too many preferences. Your preferences have not been saved. +book#:#book_total_individual_bookings_limit#:#Limit the number of bookings that can be carried out by/for individual participants in total, across all available items. Each bookable item can still only be booked once per participant. book#:#book_type_warning#:#There are currently no bookable items available. Please create some bookable items to be able to use this booking pool. book#:#book_week#:#Week book#:#book_your_bookings#:#Your Bookings @@ -2791,7 +2781,7 @@ certificate#:#certificate_a4_landscape#:#A4 Landscape (210 mm x 297 mm) certificate#:#certificate_a5#:#A5 (210 mm x 148 mm) certificate#:#certificate_a5_landscape#:#A5 Landscape (148 mm x 210 mm) certificate#:#certificate_background_image#:#Background Image -certificate#:#certificate_card_thumbnail_image#:#Thumbnail Image +certificate#:#certificate_card_tile_image#:#Thumbnail Image certificate#:#certificate_change_active_status#:#The ‘Active’ status of the certificate has been changed. certificate#:#certificate_confirm_deletion_text#:#Are you sure you want to delete all of the data entered for this certificate template? certificate#:#certificate_custom#:#Custom @@ -3805,7 +3795,7 @@ common#:#copy_all#:#Copy all common#:#copy_n_of_suffix#:#(%1$s) common#:#copy_of#:#Copy of common#:#copy_of_suffix#:#- Copy -common#:#copy_perma_link#:#Copy link to clipboard +common#:#copy_perma_link#:#Copy Link to Clipboard common#:#copy_selected_items#:#Copy common#:#count#:#Count common#:#counter_novelty#:#News @@ -3836,7 +3826,7 @@ common#:#cron_users_without_login_del_create_date_thr#:#Thresholt common#:#cron_users_without_login_del_create_date_thr_info#:#All user accounts created before the defined threshold will be taken into consideration. common#:#cron_users_without_login_del_role_whitelist#:#Included Roles common#:#cron_users_without_login_del_role_whitelist_info#:#Only users with one of the selected global roles will be deleted. Does a user have a role that is not selected, the user account remains. -common#:#cronjob_last_start#:#Last Start of the Cron Job +common#:#cronjob_last_start#:#Last Automatic Execution of Cron Job Script common#:#cronjob_last_start_unknown#:#Indeterminate common#:#crs#:#Course common#:#crs_activation_start_invalid#:#The start and the finish time is not valid. @@ -4399,7 +4389,7 @@ common#:#info_available_roles#:#Available Roles common#:#info_change_user_view#:#Change User common#:#info_deactivate_sure#:#Are you sure that you want to deactivate the following user(s)? common#:#info_delete_sure#:#Are you sure that you want to delete the following? -common#:#info_delete_warning_no_trash#:#(WARNING: The selected object(s) will be irretrievably deleted from the system. The recovery of any such deleted objects will not be possible). +common#:#info_delete_warning_no_trash#:#<b>Warning</b>: The selected object(s) will be irretrievably deleted from the system. The recovery of any such deleted objects will not be possible. common#:#info_deleted#:#Object(s) deleted. common#:#info_err_user_not_exist#:#User with that login name or user_id does not exists common#:#info_from_role#:#Granted by Role / Ownership @@ -4601,6 +4591,7 @@ common#:#mail_message_scheduled_info#:#Mails remain in the outbox until the sche common#:#mail_not_sent#:#Mail not sent! common#:#mail_schedule_error_no_datetime#:#To schedule a mail, a delivery date and time must be specified. common#:#mail_schedule_error_past_datetime#:#You cannot schedule emails in the past. +common#:#mail_schedule_scheduled_datetime#:#Scheduled Send Time common#:#mail_scheduled#:#Mail stored in outbox for later delivery. common#:#mail_search_no#:#No entries found. common#:#mail_select_one#:#You must select one mail @@ -4944,8 +4935,6 @@ common#:#obj_etal#:#Employee Talk common#:#obj_exc#:#Exercise common#:#obj_exc_duplicate#:#Copy Exercise common#:#obj_excv#:#Exercise Certificate -common#:#obj_extt#:#Third Party Software -common#:#obj_extt_desc#:#Configure external software or services that are supported by ILIAS common#:#obj_facs#:#Files common#:#obj_facs_desc#:#Settings for files and file handling common#:#obj_file#:#File @@ -5018,7 +5007,6 @@ common#:#obj_nots_desc#:#Notes settings common#:#obj_nwss#:#News and Web Feeds common#:#obj_nwss_desc#:#Settings for internal news and external web feeds. common#:#obj_objf#:#Object Definitions -common#:#obj_objf_desc#:#Manage ILIAS object types and object permissions. (only for experts!) common#:#obj_orgu#:#Organisational Unit common#:#obj_orgu_description#:#Creating and editing organisational structure common#:#obj_page#:#Page @@ -5447,6 +5435,7 @@ common#:#renderer_supported_file_types#:#Supported File Types common#:#renderer_supported_repo_types#:#Supported ILIAS Objects common#:#renderer_type_builtin#:#Built-in common#:#rep_main_page#:#Home +common#:#rep_main_page_logo_alt#:#Logo ILIAS - to the start page common#:#repeat_scan#:#Repeating virus scan... common#:#repeat_scan_failed#:#Repeated scan failed. common#:#repeat_scan_succeded#:#Repeated scan succeeded. @@ -5571,6 +5560,7 @@ common#:#select#:#Select common#:#select_all#:#Select All common#:#select_at_least_one_object#:#Please choose at least one object. common#:#select_file#:#Select File +common#:#select_file_from_computer#:#Select File common#:#select_files_from_computer#:#Select Files common#:#select_max_one_item#:#Please select one item only common#:#select_object_to_link#:#Please select the object which you want to link @@ -5867,6 +5857,7 @@ common#:#upload_settings#:#Upload Settings common#:#upload_svg_rejection_message#:#An uploaded SVG file contains possibily malicious code and cannot be processed. common#:#upload_svg_rejection_message_base64#:#The file contains base64 encoded content. common#:#upload_svg_rejection_message_elements#:#The file contains elements or attributes which are not allowed or known. +common#:#upload_svg_rejection_message_foreign_object#:#The file contains foreign objects. common#:#upload_svg_rejection_message_script#:#The file contains script-Elements. common#:#uploaded_and_checked#:#The file has been uploaded and checked, you can now start to import it. common#:#uploading#:#Uploading... @@ -5930,7 +5921,7 @@ common#:#usr_filter_lastlogin#:#Last login of user common#:#usr_filter_role#:#Assigned role common#:#usr_inactive_only#:#Inactive Users only common#:#usr_limited_access_only#:#Users with limited access only -common#:#usr_name_undisclosed#:#Undisclosed +common#:#usr_name_undisclosed#:#Profile not published common#:#usr_new#:#New User common#:#usr_settings_changeable_lua#:#Changeable in Local User Administration common#:#usr_settings_explanation_profile#:#Check ‘Visible’ to show fields in the registration form and personal settings. Check ‘Changeable’ to allow the user to change the values. Please note that visible fields can always be entered in the registration form. Required fields are required in the registration form and the personal settings. All data can be changed in the user administration independent on these settings. @@ -6085,6 +6076,7 @@ cont#:#cont_news_timeline_landing_page#:#Landing Page cont#:#cont_news_timeline_landing_page_info#:#Timeline page will be the landing page. cont#:#cont_news_timeline_tab#:#Timeline cont#:#cont_no_title#:#Empty Title +cont#:#cont_only_crs_grp_fold_download#:#Only courses, groups, folders or files can be downloaded. cont#:#cont_page_type_cont#:#Repository Page (Cours, Group, ...) cont#:#cont_page_type_cstr#:#Course Start Page (Learning Objectives View) cont#:#cont_path#:#Path @@ -6164,10 +6156,8 @@ content#:#cont_Headline2#:#Headline 2 content#:#cont_Headline3#:#Headline 3 content#:#cont_Information#:#Information content#:#cont_Interaction#:#Interaction -content#:#cont_Link#:#Link content#:#cont_List#:#List content#:#cont_Literature#:#Literature -content#:#cont_Media#:#Media (Standard) content#:#cont_Mnemonic#:#Mnemonic content#:#cont_Numbers#:#Numbers content#:#cont_Poly#:#Polygon @@ -6277,6 +6267,8 @@ content#:#cont_chapters_after_pages#:#Please note that pages have to precede all content#:#cont_chapters_and_pages#:#Chapters and Pages content#:#cont_chapters_only#:#Chapters only content#:#cont_char_format#:#Character +content#:#cont_char_link#:#Link +content#:#cont_char_media#:#Media (Standard) content#:#cont_char_style_acc#:#Accentuated content#:#cont_char_style_code#:#Code content#:#cont_char_style_com#:#Comment @@ -7364,6 +7356,7 @@ copa#:#copa_value_reading_time_f_p#:#%s Minutes copa#:#copa_value_reading_time_f_s#:#%s Minute copa#:#obj_copa_duplicate#:#Duplicate Content Page copg#:#copg_active_to_small#:#This date must be higher than the starting date. +copg#:#copg_add_content#:#Add Content copg#:#copg_allow_html#:#Enable HTML/Javascript copg#:#copg_allow_html_info#:#User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version. copg#:#copg_an_error_occured#:#An error occured. @@ -7400,6 +7393,7 @@ copg#:#copg_sec_link_info#:#Select a target for linking the block. Attention: In copg#:#copg_snippet_cannot_be_edited#:#This is a predefined content snippet and cannot be edited here. copg#:#copg_templates#:#Templates copg#:#copg_unsupported_media_type#:#This media object has an unsupported media type. +copg#:#copg_use_template#:#Use Template copg#:#copg_x_minutes#:#%s minute(s) cpad#:#cpad_reading_time_status#:#Reading Time cpad#:#cpad_reading_time_status_desc#:#If enabled, the estimated reading time for content page objects will be determined and displayed. @@ -8056,7 +8050,7 @@ crs#:#mem_cron_min_members_task#:#Please inform the participants if the course w crs#:#obj_count_members#:#Number of members crs#:#sess_attendance_list#:#Attendance List crs#:#sess_gen_attendance_list#:#Generate List -crs#:#sess_join_info#:#Please click Attend if you want to take part at this session. +crs#:#sess_join_info#:#Please click on 'Attend' if you want to take part in this session. crs#:#sess_limit#:#Limit Number of Sessions Shown crs#:#sess_limit_info#:#Participants are not presented with a list of all sessions, but rather a limited number of sessions. crs#:#sess_num_next#:#Number of Future Sessions (from tomorrow) @@ -8104,6 +8098,18 @@ dash#:#dash_click_here#:#Click here dash#:#dash_co_delete#:#Delete Dashboard style dash#:#dash_co_lang#:#Dashboard style by languages dash#:#dash_customization#:#Customize Dashboard Content +dash#:#dash_dash_fav_remove#:#Remove +dash#:#dash_dash_fav_remove_info#:#Are you sure you want to remove the following objects from your Favourites? +dash#:#dash_dash_fav_remove_multiple#:#Remove Multiple Favorites +dash#:#dash_dash_ls_remove#:#Unsubscribe +dash#:#dash_dash_ls_remove_info#:#Are you sure you want to unsubscribe from the following learning sequences? +dash#:#dash_dash_ls_remove_multiple#:#Unsubscribe Multiple Learning Sequences +dash#:#dash_dash_mem_remove#:#Unsubscribe +dash#:#dash_dash_mem_remove_info#:#Are you sure you want to unsubscribe from the following courses and groups? +dash#:#dash_dash_mem_remove_multiple#:#Unsubscribe Multiple Courses and Groups +dash#:#dash_dash_rc_remove#:#Remove +dash#:#dash_dash_rc_remove_info#:#Are you sure you want to remove the following objects from your recommended content? +dash#:#dash_dash_rc_remove_multiple#:#Remove Multiple Contents dash#:#dash_dashboard#:#Dashboard dash#:#dash_default_presentation#:#Default Presentation dash#:#dash_default_sortation#:#Default Sortation @@ -8117,7 +8123,6 @@ dash#:#dash_enable_recommended_content#:#Recommended Content dash#:#dash_enable_study_programmes#:#Study Programmes dash#:#dash_enable_task#:#Tasks dash#:#dash_favourites#:#Favourites -dash#:#dash_info_sure_remove_from_favs#:#Are you sure you want to remove the following objects from your Favourites? dash#:#dash_item_removed#:#Recommendation has been removed from the list. dash#:#dash_learning_sequences#:#My Learning Sequences dash#:#dash_list#:#List @@ -8129,6 +8134,7 @@ dash#:#dash_manual_new_item_pos_top#:#Top dash#:#dash_manual_sorting_title#:#Manual Sorting of Favorites dash#:#dash_member_main_alt#:#Courses and groups can also be configured as a separate main menu entry. dash#:#dash_memberships#:#My Courses and Groups +dash#:#dash_no_items_to_manage#:#No items available for removal. dash#:#dash_page_edit_info#:#The content of this page is displayed to all users on their dashboard. The contents of the various blocks of the dashboard are presented below. dash#:#dash_presentation#:#Presentation dash#:#dash_recommended_content#:#Recommended Content @@ -8337,7 +8343,7 @@ dateplaner#:#cal_crs_timing_start#:#Suggested Start dateplaner#:#cal_daily#:#Daily dateplaner#:#cal_date_and_time#:#Date and Time dateplaner#:#cal_date_booked#:#booked -dateplaner#:#cal_date_format_info#:#Please choose a format for presentation of dates. +dateplaner#:#cal_date_format_info#:#Please choose a format for displaying dates. dateplaner#:#cal_date_time_title#:#Date and Time dateplaner#:#cal_day_end#:#Day End dateplaner#:#cal_day_of_month#:#Day of the month @@ -8519,7 +8525,7 @@ dateplaner#:#cal_sync_enabled#:#Enabled dateplaner#:#cal_table_categories#:#Calendar Selection dateplaner#:#cal_task_completion#:#Task Completion dateplaner#:#cal_third#:#Third -dateplaner#:#cal_time_format_info#:#Please choose a format for the input and presentation of time. +dateplaner#:#cal_time_format_info#:#Please choose a format for presentation of time. dateplaner#:#cal_timezone_info#:#Please choose the nearest city in your time zone to make sure that appointments within ILIAS are displayed properly in your local time. dateplaner#:#cal_type_crs#:#Course Calendar dateplaner#:#cal_type_exc#:#Exercise Calendar @@ -8638,7 +8644,6 @@ dcl#:#dcl_datetime#:#Datetime Entry dcl#:#dcl_datetime_desc#:#Users can enter a date and time of their choice or select one using a calendar. dcl#:#dcl_datetime_selection#:#Datetime Selection dcl#:#dcl_datetime_selection_desc#:#Allow a date and time to be chosen from among a predefined selection of datetime options. -dcl#:#dcl_deactivate_view#:#Deactivate this view dcl#:#dcl_default_sort_field#:#Default sort field dcl#:#dcl_default_sort_field_order#:#Default sort field order dcl#:#dcl_default_sort_field_order_desc#:#Arrange the order of the entries in the table based on this field. @@ -8655,7 +8660,7 @@ dcl#:#dcl_detailed_view#:#Detailed View dcl#:#dcl_display_action_menu#:#Copy dcl#:#dcl_display_action_menu_desc#:#The object can be copied from the entry. dcl#:#dcl_display_record_alt#:#Display this entry -dcl#:#dcl_duplicate_non_unique_entries_exist#:#This may also concern existing records.###23 02 2024 new variable +dcl#:#dcl_duplicate_non_unique_entries_exist#:#Some of the existing values for this field are identical. Please make sure that all existing entries are unique in order to change this setting. dcl#:#dcl_edit#:#Settings for This Data Collection dcl#:#dcl_edit_entry_rules#:#Entry Editing dcl#:#dcl_edit_field#:#Edit Field @@ -8667,12 +8672,9 @@ dcl#:#dcl_err_formula_field_not_found#:#Field with title '%s' not found dcl#:#dcl_error_parsing_expression#:#Error parsing expression dcl#:#dcl_export_enabled#:#Export Table dcl#:#dcl_export_enabled_desc#:#The data in this table can be exported. Please note: Only fields that have the ‘Exportable’ checkbox activated in the ‘Fields’ tab of this table will be included in the export. -dcl#:#dcl_export_finished#:#Export finished -dcl#:#dcl_export_started#:#Asynchronous Export started dcl#:#dcl_field_datatype#:#Field Type dcl#:#dcl_field_description#:#Description dcl#:#dcl_field_description_desc#:#The description will be shown below the input field when making a new entry. -dcl#:#dcl_field_required#:#Required dcl#:#dcl_field_title_change_warning#:#You changed the title of the field hence some placeholders in the view definition might be broken. Those have to be fixed manually should the occasion arise. dcl#:#dcl_field_title_unique#:#There exists already a field with this title. Title must be unique. dcl#:#dcl_field_visible#:#Visible @@ -8693,7 +8695,6 @@ dcl#:#dcl_id_description#:#The internal ID. dcl#:#dcl_ilias_reference#:#Repository Object dcl#:#dcl_ilias_reference_desc#:#Allow users to select an ILIAS object from the repository. dcl#:#dcl_ilias_reference_link#:#Link to Selected Object -dcl#:#dcl_import#:#Import Data Collection dcl#:#dcl_import_enabled#:#Import Data Into Table dcl#:#dcl_import_enabled_desc#:#Data can be imported into the table via an Excel file. dcl#:#dcl_import_records .xls#:#Excel-Import @@ -8718,8 +8719,6 @@ dcl#:#dcl_link_detail_page#:#Link to Detailed View dcl#:#dcl_link_detail_page_desc#:#Additionally, a detailed view template must have been created and activated within the tab ‘Detailed View’. dcl#:#dcl_list_fields#:#Fields dcl#:#dcl_list_visibility_and_filter#:#Overview -dcl#:#dcl_locked#:#Locked -dcl#:#dcl_locked_tooltip#:#Disable this field for users to edit. Does not include roles with the permission 'Edit Settings' dcl#:#dcl_manage#:#Manage dcl#:#dcl_max_digits#:#Maximum Number of Digits dcl#:#dcl_max_import#:#The maximum amount of imported entries is reached. @@ -8728,7 +8727,6 @@ dcl#:#dcl_mob#:#Image, Audio, Video dcl#:#dcl_mob_desc#:#Allow users to upload a media file which will be displayed within the data collection. Allowed data types: %s dcl#:#dcl_msg_field_modified#:#Field updated dcl#:#dcl_msg_fields_deleted#:#Deleted fields -dcl#:#dcl_msg_info_alternatives#:#You do not have enough permissions to view this record, or there is no detailed view defined for this view. Choose a view from the list below to view the record anyway. dcl#:#dcl_msg_mc_to_sc_confirmation#:#Swichting from multiple selection to single selection might lead to a loss of data in existing entries. Are you sure to continue? dcl#:#dcl_msg_no_perm_edit#:#No permission given to edit this Entry dcl#:#dcl_msg_no_perm_view#:#No permission given to view this Entry @@ -8738,22 +8736,20 @@ dcl#:#dcl_msg_tableview_created#:#Views created dcl#:#dcl_msg_tableview_deleted#:#View deleted dcl#:#dcl_msg_tableview_updated#:#View updated dcl#:#dcl_msg_tableviews_delete_all#:#Could not delete: At least one View must exist -dcl#:#dcl_msg_tableviews_order_updated#:#Order of views updated dcl#:#dcl_multiple_selection#:#Multiple Selection dcl#:#dcl_new#:#Create New Data Collection dcl#:#dcl_new_entries#:#New Entries dcl#:#dcl_new_field#:#New Field dcl#:#dcl_new_table#:#New Table dcl#:#dcl_new_view#:#New View -dcl#:#dcl_next_record#:#Next Entry dcl#:#dcl_no_entries#:#Action not permitted dcl#:#dcl_no_entry#:#No entry dcl#:#dcl_no_export_async_config#:#No SOAP Configuration for asyncronous exports available. dcl#:#dcl_no_export_data_available#:#No data or fields available for export. dcl#:#dcl_no_fields_yet#:#You cannot add any entries to this table as it does not yet have any fields. To create a field, click on a table in the ‘Tables’ tab and and then on the ‘Add New Field’ button. -dcl#:#dcl_no_read_access_on_any_standard_view#:#You don't have read access on any standard view of a table. dcl#:#dcl_no_search_results_found_for#:#No modules have been found for dcl#:#dcl_no_such_reference#:#The following value is not available in the reference table: +dcl#:#dcl_no_table_found#:#No visible table found! dcl#:#dcl_no_tableview_found#:#No visible tableview found! dcl#:#dcl_not_checked#:#Not checked. dcl#:#dcl_not_supported_in_import#:#This type of field is not supported in the import @@ -8763,7 +8759,6 @@ dcl#:#dcl_notification_deactivate#:#Deactivate Notification for Data Collection dcl#:#dcl_notification_deactivated#:#Notification Deactivated dcl#:#dcl_notification_info#:#Users can choose for themselves if they wish to activate notifications for their accounts. dcl#:#dcl_notification_settings#:#Notification Settings -dcl#:#dcl_notimage_exception#:#The file has to be a picture. dcl#:#dcl_noturl_exception#:#Please enter a link (beginning with http:// or www.) or an e-mail address. dcl#:#dcl_number#:#Integer dcl#:#dcl_number_desc#:#Field for integer values (max. 9 digits). Decimals and fractions are not allowed. @@ -8779,20 +8774,12 @@ dcl#:#dcl_owner_name#:#Owner (Name) dcl#:#dcl_page_type_dclf#:#Details View dcl#:#dcl_placeholder_info#:#To use data from the data collection in this view, please use the corresponding placeholders. These are available in the page element 'Text' and 'Data Table'. dcl#:#dcl_please_select#:#--- Please select --- -dcl#:#dcl_plugin#:#Plugin -dcl#:#dcl_plugin_desc#:#DataCollection Field-Plugins -dcl#:#dcl_plugin_no_hooks_available#:#No active field-type plugins found -dcl#:#dcl_prev_record#:#Previous Entry dcl#:#dcl_prop_expression#:#Expression dcl#:#dcl_prop_expression_info#:#Valid operators: <b>%s</b><br>Supported functions: <b>%s</b><br>Use brackets <b>‘(’, ‘)’</b> to group calculations.<br>Concatenate strings and placeholders with &: <b>‘The result is ’ & [[Int 1]] * [[Int2]]</b><br>Using functions: <b>SUM([[Int 1]];[[Int 2]])</b><br><br>Allowed fields (click on a title to use as a placeholder within the expression):<br>%s<br><b>(Allowed fields are checkbox, number, text and date that don’t contain any formula-sensitive characters inside their titles)</b> -dcl#:#dcl_public_comments#:#Activate Public Comments -dcl#:#dcl_public_comments_desc#:#Users can comment on entries of the table. dcl#:#dcl_rating#:#Rating dcl#:#dcl_rating_desc#:#Existing entries can be rated on a scale of one to five stars. -dcl#:#dcl_rbac_roles_without_read_access_on_any_standard_view#:#The following rbac roles have read access on the data collection, but no read access on any standard view of a table: dcl#:#dcl_record#:#Entry dcl#:#dcl_record_deleted#:#Entry deleted -dcl#:#dcl_record_from_total#:#%d of %d dcl#:#dcl_record_settings#:#Record Settings dcl#:#dcl_reference#:#Reference dcl#:#dcl_reference_desc#:#Field to reference options stored in a different field of a table. @@ -8802,12 +8789,9 @@ dcl#:#dcl_reference_title#:#Referenced Field dcl#:#dcl_reference_title_desc#:#The data entries of the selected field will be the selectable options in this field. dcl#:#dcl_regex#:#Restrict Text Input dcl#:#dcl_regex_info#:#Allow the input of a regular expression without delimiter. Certain entries will the be automatically rejected. -dcl#:#dcl_required#:#Required Field dcl#:#dcl_row_not_found#:# - This field couldn't be found in the table. dcl#:#dcl_save_confirmation#:#Additional Confirmation of Entries dcl#:#dcl_save_confirmation_desc#:#Users have to confirm new entries into the data collection. -dcl#:#dcl_save_order#:#Save Order -dcl#:#dcl_select#:#Select for Presentation dcl#:#dcl_selection_options#:#Options dcl#:#dcl_selection_type#:#Format dcl#:#dcl_selection_type_combobox#:#Single selection from drop-down menu @@ -8821,12 +8805,8 @@ dcl#:#dcl_std_field_not_importable#:# - Standard fields are not importable. dcl#:#dcl_std_filter#:#Default Filter dcl#:#dcl_supported_filetypes#:#Permitted File Types dcl#:#dcl_supported_filetypes_desc#:#You can set which file types can be uploaded by entering a comma-separated list of permitted file extensions here, e.g. pdf, docx -dcl#:#dcl_switch_table#:#Switch Table -dcl#:#dcl_switch_view#:#Change View dcl#:#dcl_table#:#Table dcl#:#dcl_table_id#:#Table ID -dcl#:#dcl_table_list_fields#:#Fields Of Selected Table -dcl#:#dcl_table_list_tables#:#Available Tables dcl#:#dcl_table_settings#:#Table Settings. dcl#:#dcl_table_settings_saved#:#Table Settings have been saved. dcl#:#dcl_table_title_not_matching#:#The titles of the excel sheet and the Data Collection table do not match. Rename the sheet for a successfull import. @@ -8841,16 +8821,13 @@ dcl#:#dcl_tableview_default_value_fail#:#Some numeric default values couldn't be dcl#:#dcl_tableview_field_access#:#Field Access dcl#:#dcl_tableview_fieldsettings#:#Fieldspecific Settings dcl#:#dcl_tableview_fieldtitle#:#Field Title -dcl#:#dcl_tableview_locked#:#Locked dcl#:#dcl_tableview_locked_visible#:#Locked & Visible dcl#:#dcl_tableview_not_visible#:#Not Visible dcl#:#dcl_tableview_required#:#Required dcl#:#dcl_tableview_required_visible#:#Required & Visible dcl#:#dcl_tableview_visible#:#Visible dcl#:#dcl_tableviews#:#Views -dcl#:#dcl_tableviews_confirm_delete#:#Do you really want to delete the following Views? dcl#:#dcl_tableviews_of_X#:#Views of table %s -dcl#:#dcl_tableviews_table#:#Views of Selected Table dcl#:#dcl_text#:#Text Entry dcl#:#dcl_text_desc#:#A text field for text, links or e-mail addresses. dcl#:#dcl_text_email_detail_desc#:#Please enter a valid URL or E-Mail address. @@ -8858,7 +8835,7 @@ dcl#:#dcl_text_email_title#:#Title dcl#:#dcl_text_email_title_info#:#A Title for the above URL or E-Mail address (optional). dcl#:#dcl_text_selection#:#Text Selection dcl#:#dcl_text_selection_desc#:#Allow a text to be chosen from among a predefined selection of text options. -dcl#:#dcl_title_standardview#:#Standard Views +dcl#:#dcl_title_standard#:#Standard dcl#:#dcl_unique#:#Unique dcl#:#dcl_unique_desc#:#Identical entries are not allowed in this field. dcl#:#dcl_unique_exception#:#The value you entered is already taken by another Entry. @@ -8869,7 +8846,6 @@ dcl#:#dcl_update_field#:#Update Field dcl#:#dcl_update_record#:#Update Entry dcl#:#dcl_updated_entries#:#Updated Entries dcl#:#dcl_url#:#Mandatory URL or E-Mail -dcl#:#dcl_view_configuration#:#View Configuration dcl#:#dcl_view_own_records_perm#:#View Only Own Entries dcl#:#dcl_view_own_records_perm_desc#:#The entries of other users are not visible. dcl#:#dcl_view_viewdefinition#:#Detailed View @@ -8893,6 +8869,8 @@ dcl#:#role_limitation#:#Role-based View Limitation dcl#:#roles#:#Roles with Access dcl#:#roles_desc#:#Define wich roles have access to the view. dcl#:#set_as_default#:#Set as default +dcl#:#table_not_found#:#Table not found! +dcl#:#tableview_not_found#:#Tableview not found! didactic#:#activate_exclusive_template#:#Grey Out Default didactic#:#activate_exclusive_template_info#:#The standard template won't be available wherever this template is active. didactic#:#activate_local_didactic_template#:#Scope of Application @@ -9233,7 +9211,7 @@ etal#:#change_date_of_series#:#Change date of talk series etal#:#change_date_of_talk#:#Change date of talk etal#:#date_of_talk#:#Start Date etal#:#etal_add#:#Add Talk -etal#:#etal_add_new_item#:#Add new Talk +etal#:#etal_add_new_item#:#Add New Talk etal#:#etal_create_invalid_template_ref#:#Invalid Talk Template ID etal#:#etal_date_appointment_edit#:#Date of Talk etal#:#etal_date_series_edit#:#Date of Talk Series @@ -9491,6 +9469,7 @@ exc#:#exc_passed_status_determination#:#Determination of Status ‘Passed’ exc#:#exc_passing_exc#:#Passing the Exercise exc#:#exc_past#:#Past exc#:#exc_peer_deadline_mismatch#:#As feedback is given after the deadline has passed the feedback deadline must not be earlier than the assignment deadline. +exc#:#exc_peer_feedback_status#:#Feedback Status exc#:#exc_peer_review#:#Peer-Feedback exc#:#exc_peer_review_ass_setting_info#:#Users can rate the solutions of their peers after the deadline and if granted the grace period lapsed. Specific settings on peer-feedback are made in the respective tab. After activation this option and saving it, the tab 'Peer-Feedback' will be displayed. exc#:#exc_peer_review_chars_invalid#:#Your feedback does not have the required minimum length of %s characters. @@ -9618,6 +9597,7 @@ exc#:#exc_settings_feedback_mail_info#:#Tutors enter their evaluation into a mai exc#:#exc_settings_feedback_text#:#Text Input exc#:#exc_settings_feedback_text_info#:#Tutors type their evaluation in a text field. The participant receives a notification about it and the text is displayed at the assignment overview. exc#:#exc_show_instructions#:#Show Work Instructions +exc#:#exc_show_more#:#Show More exc#:#exc_show_peer_review#:#Show Peer-Feedback exc#:#exc_show_submissions#:#Publish Submissions after Deadline exc#:#exc_show_submissions_info#:#For assignments with a fixed submission deadline, participants can view all submissions after the submission deadline. @@ -9732,6 +9712,7 @@ exc#:#exc_type_upload#:#Upload exc#:#exc_type_upload_team#:#Team Upload exc#:#exc_value_can_not_set#:#This value can not be set. exc#:#exc_view_portfolio#:#View Portfolio +exc#:#exc_view_wiki#:#View Wiki exc#:#exc_wait_for_files#:#Your download should start automatically. If the download doesn't start in 5 secs, please click here exc#:#exc_wiki_container#:#Wiki Container exc#:#exc_wiki_container_info#:#Location where wikis of participants will be created. @@ -9803,7 +9784,7 @@ export#:#export_create#:#Create export#:#export_create_new_file#:#Create New Export File export#:#export_existing#:#Reuse export#:#export_export_date#:#Export Date -export#:#export_info_public_access#:#Public Access Export +export#:#export_info_public_access#:#Public Export export#:#export_info_public_access_download#:#Download export#:#export_last_export#:#Last Export export#:#export_last_export_file#:#Use Last Export File @@ -9972,7 +9953,7 @@ form#:#form_msg_max_upload#:#Maximum number of simultaneously uploadable files: form#:#form_msg_numeric_value_required#:#Please enter a numeric value. form#:#form_msg_value_too_high#:#Value too high. Please enter a lower value. form#:#form_msg_value_too_low#:#Value too low. Please enter a higher value. -form#:#form_msg_wrong_date#:#Wrong date. Please enter a valid date. +form#:#form_msg_wrong_date#:#Please check your date entry. Both a start date and an end date are required and the start date cannot be later than the end date. form#:#form_no_link#:#No Link form#:#form_open_answer#:#Open Answer form#:#form_password_not_allowed_for_auth#:#It is not possible to change the password for the chosen authentication method. @@ -10539,12 +10520,15 @@ help#:#gdtr_language#:#Language help#:#gdtr_language_info#:#Activates a guided tour only for users with the selected language. help#:#gdtr_list_tours_mess#:#To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name. help#:#gdtr_mainbar#:#Mainbar -help#:#gdtr_mainbar_info#:#The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items. +help#:#gdtr_mainbar_ID_info#:#ID of the desired entry in the main menu. Move the mouse over the entry to see the ID as a tooltip. +help#:#gdtr_mainbar_info#:#The mainbar ist the main menu on the left side. help#:#gdtr_metabar#:#Metabar -help#:#gdtr_metabar_info#:#The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items. +help#:#gdtr_metabar_ID_info#:#ID of the desired element in the metabar. Move your mouse over the element to see the ID as a tooltip. +help#:#gdtr_metabar_info#:#The metabar is the menu on the top, right. help#:#gdtr_next_step#:#Next Step help#:#gdtr_permission#:#Permission help#:#gdtr_permission_info#:#Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with "edit settings" permission for a course. If you "Create" is selected, the tour is active, if the user has any creation permission. +help#:#gdtr_presentation_limitation#:#Presentation Limitation help#:#gdtr_primary_button#:#Primary Button help#:#gdtr_primary_button_info#:#The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button. help#:#gdtr_reset_tour#:#Reset Tour @@ -10556,10 +10540,12 @@ help#:#gdtr_step_type#:#User Interface Element help#:#gdtr_table#:#Table help#:#gdtr_table_info#:#The first table of the main content area. Usually views should only contain one table. help#:#gdtr_tabs#:#Tabs -help#:#gdtr_tabs_info#:#The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items. +help#:#gdtr_tabs_ID_info#:#ID of the desired tab. Move your mouse over a tab to see the ID as a tooltip. +help#:#gdtr_tabs_info#:#The tabs are displayed below the main header of the screen. help#:#gdtr_toolbar#:#Toolbar help#:#gdtr_toolbar_info#:#The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar. help#:#gdtr_tour_has_been_reset#:#Tour has been reset. +help#:#gdtr_tour_settings#:#Edit Settings help#:#gdtr_tour_steps#:#Tour Steps help#:#gdtr_tours#:#Tours help#:#gdtr_type#:#Type @@ -10700,14 +10686,19 @@ irss#:#creation_date#:#Creation Date (This Revision) irss#:#directory_name#:#Directory Name irss#:#directory_name_info#:#Name of the directory to be inserted at the current location. irss#:#download_zip#:#Download all files as ZIP +irss#:#entries_target_group#:#Select target group +irss#:#entry_deleted_failed#:#Deletion not possible irss#:#file_size#:#File Size (This Revision) irss#:#file_size_bigger_than#:#File Size > MB irss#:#full_size#:#Resource Size (All Revisions) irss#:#home_directory#:#Root-Directory +irss#:#item_moved#:#Entry moved irss#:#max_revision#:#Max. Revision irss#:#msg_error_adding_directory#:#The directory could not be created. +irss#:#msg_paths_deleted#:#Path(s) deleted irss#:#msg_success_adding_directory#:#The directory was created successfully. irss#:#msg_upload#:#Drop Files to upload +irss#:#no_parent_selected#:#No target group selected irss#:#resource_id#:#Resource ID irss#:#resource_no_stakeholder_uri#:#No Stakeholder provides a valid Link to the usage of this Resource. irss#:#resource_overview#:#Resource Overview @@ -10967,6 +10958,7 @@ ldoc#:#ldoc_document#:#Document ldoc#:#ldoc_enabled#:#Enabled ldoc#:#ldoc_form_attach_criterion_head#:#Select Criterion for Displaying your Document ldoc#:#ldoc_form_criterion#:#Criterion +ldoc#:#ldoc_form_criterion_standard_fields_info_text#:#Please check the settings of the standard fields before defining the criterion. ldoc#:#ldoc_form_document#:#Document ldoc#:#ldoc_form_document_content_changed#:#The uploaded file has had its html &lt;head&gt; information removed by ILIAS. Please check the result and upload a new file if necessary. ldoc#:#ldoc_form_document_info#:#Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will have their &lt;head/gt; information removed – only the contents of the body element will be used. @@ -11029,6 +11021,7 @@ lm#:#lm_btn_lp_toggle_state_completed#:#Set Not Completed lm#:#lm_btn_lp_toggle_state_not_completed#:#Set Completed lm#:#lm_copy#:#Copy Learning Module lm#:#lm_edit_chapters#:#Edit Chapters +lm#:#lm_edit_content#:#Edit Content lm#:#lm_edit_lm_settings#:#Edit Learning Module Settings lm#:#lm_est_reading_time#:#Estimated Reading Time lm#:#lm_est_reading_time_info#:#In Learning Modules in the repository the estimated reading time can be determined and displayed. @@ -11046,6 +11039,7 @@ lm#:#lm_insert_page_before#:#Insert page before lm#:#lm_insert_page_clip#:#Insert page from clipboard lm#:#lm_insert_page_clip_after#:#Insert page from clipboard after lm#:#lm_insert_page_clip_before#:#Insert page from clipboard before +lm#:#lm_list_pages#:#Edit Pages lm#:#lm_page_added#:#Page has been added. lm#:#lm_page_type_lm#:#LM Page lm#:#lm_pages_added#:#Pages have been added. @@ -11207,6 +11201,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user. lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user. +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user. lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is: @@ -11292,13 +11292,16 @@ lti#:#launched#:#Resource was already launched. lti#:#learning_progress_options#:#Options for Learning Progress lti#:#lm_only_one_download_per_type#:#Only one file per type (XML, HTML, SCORM) can be released publicly. lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run. +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID lti#:#lti_13_deployment_id#:#Deployment-ID +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID lti#:#lti_13_step1#:#Step 1 lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL: lti#:#lti_13_step2#:#Step 2 lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available. +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global lti#:#lti_action_delete_providers#:#Delete Providers @@ -11312,6 +11315,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given. lti#:#lti_con_content_item#:#Support for Deep Linking lti#:#lti_con_content_item_url#:#Content URL +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL lti#:#lti_con_key_type#:#Public Key Type lti#:#lti_con_key_type_jwk#:#URL (Json Web Token) @@ -11331,6 +11336,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2 lti#:#lti_con_prov_description#:#Description +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete. lti#:#lti_con_prov_group_options#:#Options to group and filter Providers @@ -11399,6 +11408,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings lti#:#lti_delete_consume_provider#:#Delete Provider lti#:#lti_delete_consume_providers#:#Delete Providers lti#:#lti_delete_provider#:#Delete Provider +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer lti#:#lti_exit#:#Close LTI Session lti#:#lti_exited#:#LTI Session closed @@ -11524,6 +11534,7 @@ mail#:#mail_add_folder#:#Add New Sub-Folder mail#:#mail_add_recipient#:#Please enter a recipient in the form of a valid e-mail address or ILIAS username. mail#:#mail_add_subfolder#:#Add Sub-Folder mail#:#mail_add_subject#:#Please enter a subject. +mail#:#mail_adopt_selected_attachements#:#Adopt selected Attachments mail#:#mail_all_in_trash#:#All in Trash mail#:#mail_allow_external#:#External E-Mails mail#:#mail_allow_external_info#:#Allow the delivery of external e-mails (via-SMTP). Unchecking this box will prevent external mails being sent globally across this installation. @@ -11634,6 +11645,8 @@ mail#:#mail_member_notification#:#Participant Notification mail#:#mail_members_of_mailing_list#:#Members of Mailing List "%s" mail#:#mail_members_search_continue#:#Continue mail#:#mail_message_send#:#Message sent. +mail#:#mail_mode_switch_label#:#Switch between „Personal Mail” and „Serial Letter” mode +mail#:#mail_mode_switch_locked#:#You cannot switch to „%s” mode. mail#:#mail_move_error#:#An error occurred while trying to move your mail. mail#:#mail_move_to#:#Move to: mail#:#mail_move_to_folder_btn_label#:#Move Mail @@ -11776,6 +11789,7 @@ mail#:#only_inbox_trash_info#:#Only delete e-mails that are located in the Inbox mail#:#orphaned_mail_body#:#Your mailbox contains the following old or orphaned mails. Please note that these mails will soon be automatically deleted. mail#:#orphaned_mail_subject#:#Notification of old mails mail#:#placeholders_advise#:#Personal placeholders are only replaced with user-specific information for recipients listed in the ‘To’ field.%s Personal placeholders for recipients listed in the CC and BCC fields are NOT replaced with user-specific information and instead show up as placeholders. +mail#:#regular_mail#:#Personal Mail mail#:#search_content#:#Search Result mail#:#search_recipients#:#Look up Users mail#:#second_email_missing_info#:#Selection not possible because no second e-mail address has been entered. @@ -11784,11 +11798,12 @@ mail#:#send_mail_admins#:#All Administrators mail#:#send_mail_members#:#All Members mail#:#send_mail_to#:#Mail to mail#:#send_mail_tutors#:#All Tutors +mail#:#serial_letter#:#Serial Letter mail#:#show_mail_settings#:#Show Mail Settings mail#:#show_mail_settings_info#:#Enable individual users to alter their mail settings, thereby overriding the global mail settings that would otherwise apply to them. ‘Mail Settings’ are accessible via their ‘Personal Settings’ or ‘Communication > Mail’. Note: In order for users to be allowed to change their individual mail settings and thereby override the global settings, this needs to be set in the 'Standard Fields' section of the global user account administration settings. If users do not have the permission to change these profile settings, the global default is applied even if users were able to and did change their personal mail settings in the past. mail#:#system_notification_installation_changed_by#:#Changed by mail#:#usrFieldChange_second_mail_visible_in_personal_data#:#You have changed the attribute "%s" of the field "%s".<br>This leads to all accounts settings being reset to "receive on primary address" for external delivery,<br>not only for all new accounts but also dismissing the currently active settings made by users. -maps#:#configure_geolocation#:#Please finish the geolocation configuration in the "Third Party Software" administration menu to enable address search. +maps#:#configure_geolocation#:#Please finish the geolocation configuration in the "Extending ILIAS > Maps" administration menu to enable address search. maps#:#maps_custom_geolocation_server_info#:#Server URL to provide geolocation-data using Nominatim. Your entry should contain the placeholder [QUERY] to define a position for request information. Example: https://nominatim.example.com/search?q=[QUERY]&format=json maps#:#maps_custom_tile_server_info#:#Server URL to provide tile-data. Multiple inputs should be separated by spaces. Defaults is "%s". maps#:#maps_enable_maps#:#Enable Maps @@ -11913,6 +11928,7 @@ mep#:#mep_all_mobs#:#All Media Objects mep#:#mep_bulk_upload#:#Bulk Upload mep#:#mep_choose_from_folder#:#Choose from Folder mep#:#mep_choose_from_mep#:#Choose from Pool +mep#:#mep_clipboard_info#:#Here you can upload media files that you can then access from any page on which you have access to the page editor. The clipboard is also accessible in media pools. This storage is only for you and cannot be viewed by other users. mep#:#mep_content#:#Content mep#:#mep_content_snippet_in_use#:#Content snippet '%s' is in use and cannot be deleted. mep#:#mep_content_snippet_used_in_older_versions#:#Please note: This snippet is used in older versions of some pages. If these pages are rolled back to a version that includes this snippet, the snippet will be missing in the page. @@ -12056,12 +12072,12 @@ meta#:#md_import_file_vocab#:#Import File meta#:#md_import_vocab#:#Import meta#:#md_import_vocab_modal#:#Import From File meta#:#md_months#:#Months: -meta#:#md_oai_contact_mail#:#Contact E-Mail +meta#:#md_oai_contact_mail#:#Contact e-mail of this organisation meta#:#md_oai_identifier_prefix#:#OAI Prefix meta#:#md_oai_identifier_prefix_info#:#This prefix is used as a namespace in the identifiers of returned OER records. meta#:#md_oai_pmh_enabled#:#Allow Querying via OAI-PMH Interface meta#:#md_oai_pmh_enabled_info#:#If enabled, harvested OER can be queried by external interested parties, e.g. OER repositories. -meta#:#md_oai_repository_name#:#Repository Name +meta#:#md_oai_repository_name#:#Installation Name meta#:#md_oai_repository_name_info#:#This is returned as the name of this ILIAS installation when queried. meta#:#md_obj_types#:#Assigned Objects meta#:#md_record_export_table#:#Export Files @@ -12706,7 +12722,6 @@ meta#:#meta_source#:#Source meta#:#meta_status#:#Status meta#:#meta_string#:#Text meta#:#meta_structure#:#Structure -meta#:#meta_subjectmatterexpert#:#Subject matter expert(s) meta#:#meta_tab_advmd#:#Custom Metadata meta#:#meta_tab_advmd_def#:#Manage Custom Metadata Sets meta#:#meta_tab_lom#:#LOM @@ -12749,9 +12764,8 @@ mmbr#:#info_refuse_sure#:#Are you sure you want to refuse the following user(s)? mmbr#:#mmbr_awrn_my_groups_courses#:#My Groups and Courses mmbr#:#mmbr_awrn_my_groups_courses_info#:#All members of groups or courses of the current user are listed. mmbr#:#mmbr_btn_mail_selected_users#:#Send Mail -mmbr#:#mmbr_info_delete_sure_unsubscribe#:#Are you sure you want to unsubscribe from the following objects? mmbr#:#mmbr_memberships#:#Memberships -mmbr#:#mmbr_selected_users#:#Selected Participants +mmbr#:#mmbr_role_error#:#Members must have at least one role assigned. mmbr#:#mmbr_unsubscribed_from_objs#:#You have been unsubscribed from the selected objects. mme#:#add_languages#:#Add Language mme#:#additional_langs#:#Additional Languages @@ -12773,6 +12787,7 @@ mme#:#item_updated#:#Item stored mme#:#main#:#Main Menu mme#:#mm_translation_lang#:#Language mme#:#mm_translation_trans#:#Translation +mme#:#mme_lost_items#:#Nowhere assigned mme#:#move_to_item#:#Move to Items mme#:#move_to_top_item#:#Move to Top Items mme#:#msg_languages_added#:#Added languages @@ -12961,6 +12976,7 @@ news#:#news_news_item_visibility_info#:#Public news can be accessed without auth news#:#news_news_items#:#News Item(s) news#:#news_no_js_click_here#:#If news are not displayed, click here. news#:#news_no_news_items#:#No news available. +news#:#news_not_available#:#Unavailable News news#:#news_notifications#:#Notifications news#:#news_notifications_public#:#Public Notifications news#:#news_notifications_public_info#:#If this option is enabled, notifications can be obtained by personal RSS feeds outside of ILIAS. Please note that this makes notifications accessible without authentication. @@ -13062,6 +13078,8 @@ noti#:#noti_deactivate_notification#:#Deactivate Notification noti#:#noti_notification_activated#:#Notification Activated noti#:#noti_notification_deactivated#:#Notification Deactivated notifications#:#push_notification#:#Push Notifications +notifications_adm#:#available_providers#:#Available Providers +notifications_adm#:#client_settings#:#Client Settings notifications_adm#:#enable_osd#:#Enable Toasts notifications_adm#:#enable_osd_desc#:#If enabled, users are notified by a pop-up about new notifications. notifications_adm#:#enable_push#:#Enable Push Notifications @@ -13080,6 +13098,7 @@ notifications_adm#:#push_client_ios_case#:#If you are using IOS (Iphone, Ipad, I notifications_adm#:#push_settings#:#Push Notifications notifications_adm#:#push_subscription_successfull#:#Push Notifications activation successful notifications_adm#:#push_subscription_successfull_desc#:#This is a dummy notification to verify the successful activation of push notifications. +notifications_adm#:#user_settings#:#User Settings obj#:#activation_visible_when_disabled#:#Visibility obj#:#activation_visible_when_disabled_info#:#The item is visible outside of the selected availability period, but it cannot be opened. obj#:#availability_period_changed#:#The availability period for the selected objects has been changed successfully. @@ -13146,7 +13165,7 @@ obj#:#obj_tool_booking_info#:#Use the booking pools to book resources. obj#:#obj_tool_ext_mail_subject_prefix#:#Mail Subject Prefix obj#:#obj_tool_ext_mail_subject_prefix_info#:#Enter a short text that is added to the subject line of external mails send to members to make identifying these mails easier. obj#:#obj_tool_setting_badges#:#Badges -obj#:#obj_tool_setting_badges_info#:#Activates badge management and badge assignments to members. +obj#:#obj_tool_setting_badges_info#:#Allow the management of badges and for badges to be earned or awarded within this object. obj#:#obj_tool_setting_booking#:#Resources obj#:#obj_tool_setting_filter#:#Filter obj#:#obj_tool_setting_filter_empty#:#Show on Empty Filter @@ -13219,10 +13238,8 @@ orgu#:#org_op_edit_employee_talk#:#Edit Talk appointments orgu#:#org_op_edit_individual_plan#:#Edit Individual Plan orgu#:#org_op_edit_submissions_grades#:#Edit submissions of other users orgu#:#org_op_manage_members#:#Manage Members -orgu#:#org_op_manage_participants#:#Manage Participants orgu#:#org_op_read_employee_talk#:#Read access talk appointments orgu#:#org_op_read_learning_progress#:#View learning progress of other users -orgu#:#org_op_score_participants#:#Score Participants orgu#:#org_op_view_certificates#:#View certificates of other users orgu#:#org_op_view_competences#:#View competences of other users orgu#:#org_op_view_individual_plan#:#View Individual Plan @@ -13318,7 +13335,6 @@ pd#:#pd_ended#:#Ended pd#:#pd_export_profile#:#Export Personal Data pd#:#pd_import_personal_data#:#Import Personal Data pd#:#pd_my_memberships_sort_default#:#Default of Sort Option -pd#:#pd_no_items_to_manage#:#No items available for removal. pd#:#pd_not_dated#:#Not Dated pd#:#pd_ongoing#:#Ongoing pd#:#pd_personal_items_default_view#:#Default View @@ -13328,9 +13344,6 @@ pd#:#pd_presentation_mode_tile#:#Tile Presentation pd#:#pd_private_calendars#:#Private Calendars pd#:#pd_profile_data#:#Profile Data pd#:#pd_remove_multi_confirm#:#The objects were removed. -pd#:#pd_remove_multiple#:#Remove Multiple Objects -pd#:#pd_unsubscribe_memberships#:#Unsubscribe -pd#:#pd_unsubscribe_multiple_memberships#:#Unsubscribe Multiple pd#:#pd_upcoming#:#Upcoming pd#:#pd_view_select_at_least_one#:#You have to select at least one view, either ‘Selected Items’ and/or ‘My Memberships’. pdesk#:#bookmark_moved_ok#:#Bookmark has been moved. @@ -14243,10 +14256,6 @@ rbac#:#excs_read#:#User has read access to Exercise administration rbac#:#excs_visible#:#Exercise administration is visible rbac#:#excs_write#:#Edit settings in Exercise administration rbac#:#export_member_data#:#Access User Data -rbac#:#extt_edit_permission#:#User can change permission settings of Third Party Software administration -rbac#:#extt_read#:#User has read access to administration of Third Party Software -rbac#:#extt_visible#:#Administration of Third Party Software is visible -rbac#:#extt_write#:#User can edit settings of Third Party Software rbac#:#facs_edit_permission#:#User can change permission settings of Files and Folders administration rbac#:#facs_read#:#User has read access to administration of Files and Folders rbac#:#facs_upload_blacklisted_files#:#Upload indexed file types despite blacklist @@ -15156,8 +15165,6 @@ rtst#:#rtst_call#:#Call ECS Test rwik#:#rwik_call#:#Call ECS Wiki sahs#:#cont_insert_after_chap#:#Insert items after chapter sahs#:#cont_insert_into_chap#:#Insert items inside chapter -sahs#:#sahs_activate_expert_mode#:#Activate Sequencing Expert Mode -sahs#:#sahs_activate_expert_mode_info#:#The sequencing expert mode allows you to directly edit the sequencing information of the package tree. If you are unsure what this means we recommend to use the default sequencing behaviour. sahs#:#sahs_add#:#Create SCORM Learning Module sahs#:#sahs_authoring_mode#:#Authoring Mode sahs#:#sahs_authoring_mode_info#:#The SCORM ZIP package must have been created with the ILIAS SCORM editor and it must have been exported as SCORM 1.2/2004 package. @@ -15620,6 +15627,7 @@ sess#:#sess_members_gallery#:#Session Gallery sess#:#sess_members_print_title#:#Session Participants sess#:#sess_msg_applicants_assigned#:#Applicant(s) registered for session. sess#:#sess_msg_applicants_removed#:#Applicant(s) removed from list. +sess#:#sess_new#:#Create Session sess#:#sess_new_registrations#:#Join Request sess#:#sess_notification_option#:#Option sess#:#sess_notification_option_inherit#:#Inherit from Parent @@ -16168,6 +16176,7 @@ style#:#sty_media_queries#:#Media Queries style#:#sty_media_query_info#:#A separate CSS block is added for each media query after the default (no special media query) block. style#:#sty_min_height#:#Minimum Height style#:#sty_move_lm_styles#:#Change Style of Learning Modules +style#:#sty_move_obj_styles#:#Change Style of Objects style#:#sty_move_style#:#Change Style style#:#sty_move_user_styles#:#Change Style of Users style#:#sty_move_user_styles_saved#:#The assignment of the users assigned to skind-id %s has been changed to skin-id %s. @@ -16491,7 +16500,6 @@ survey#:#err_minvalueganswers#:#The minimum value must equal or be smaller than survey#:#err_no_exact_answers#:#Please select exactly %s answer(s). survey#:#err_no_max_answers#:#Please select at most %s answers. survey#:#err_no_min_answers#:#Please select at least %s answer(s). -survey#:#err_no_pool_name#:#Please enter the name of a survey question pool survey#:#error_retrieving_anonymous_survey#:#The system could not find your survey data for survey code &quot;%s&quot;. Please check the survey code you have entered! survey#:#error_save_code#:#Value not saved properly. <b>The e-mail address: '%s' is not valid</b>. First name: '%s', Last name: '%s'.<br> survey#:#evaluation#:#Statistics @@ -16702,9 +16710,7 @@ survey#:#survey_360_edit_raters#:#Manage Raters survey#:#survey_360_mode#:#360° Feedback survey#:#survey_360_mode_info#:#Allows individuals to be peer-reviewed by multiple sources. Results are aggregated. survey#:#survey_360_no_appraisees#:#There are currently no appraisees for you to rate. -survey#:#survey_360_no_closed_appraisees#:#No appraisee has closed his survey yet. survey#:#survey_360_rate_other_appraisee#:#Rate Appraisee -survey#:#survey_360_rate_other_appraisees#:#Rate Appraisees survey#:#survey_360_rater_finished#:#Survey Finished survey#:#survey_360_rater_mail_sent#:#Mail Sent survey#:#survey_360_rater_message_content_anonymous#:#Message Content (Anonymous) @@ -16734,7 +16740,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees? survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees? survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s? -survey#:#survey_access_codes#:#Authentication by Access Code +survey#:#survey_access_code#:#Authentication by Access Code survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code in the survey’s ‘Info’ tab. These access codes can be generated in the ‘Access Codes’ sub tab of the ‘Participants’ tab. survey#:#survey_activate_skill_service#:#Activate Competence Service survey#:#survey_activate_skill_service_info#:#Display a new ‘Competences’ tab. In this tab questions are assigned to competences. Thresholds can then be established that are required to reach a specific level of a competence. @@ -16954,7 +16960,7 @@ survey#:#svy_results_view_own_info#:#After finishing the survey, participants ca survey#:#svy_save_and_continue#:#Save and Continue survey#:#svy_save_sync#:#Save and Sync Question Copies survey#:#svy_search_user#:#Look Up User -survey#:#svy_search_user_info#:#Look up for specific users of this platform or for the members of specific groups, courses, roles or organisational units. +survey#:#svy_search_user_info#:#Look up specific users of this platform or the members of specific groups, courses, roles or organisational units. survey#:#svy_search_users#:#Look Up Users survey#:#svy_select_rater#:#Select Rater survey#:#svy_selected_user_data_deleted#:#The survey data of the selected participants(s) has been successfully deleted. @@ -17203,7 +17209,7 @@ trac#:#trac_current_system_load#:#Current System Load trac#:#trac_data_deleted#:#Data has been deleted. trac#:#trac_defaults#:#Completion Status trac#:#trac_defaults_inactive#:#Inactive -trac#:#trac_defaults_info#:#Set the completion status determination mode for supported object types. Used by certain badge types and certificates. +trac#:#trac_defaults_info#:#Set how the completion status is determined for the following object types when being used as a component of a course or group. Used by certain badge types and certificates. trac#:#trac_delete_data#:#Delete Data trac#:#trac_determines_learning_progress#:#Determines Learning Progress trac#:#trac_edit_collection#:#Please assign materials. If the status of all assigned items is ‘Completed’ the overall status is completed by the user. @@ -17280,12 +17286,12 @@ trac#:#trac_mode_content_visited#:#Visited trac#:#trac_mode_content_visited_info#:#Learning progress status is set to 'completed' when object has been presented to user. trac#:#trac_mode_contribution_to_discussion#:#Contributions to Discussion trac#:#trac_mode_contribution_to_discussion_info#:#The learning progress status will be determined by the number of written posts. -trac#:#trac_mode_course_reference#:#Adopted from Course +trac#:#trac_mode_course_reference#:#Adopted From Course trac#:#trac_mode_course_reference_info#:#The mode is automatically adopted from the course this course link points to. trac#:#trac_mode_deactivated#:#Learning Progress is Deactivated trac#:#trac_mode_deactivated_info_new#:#The learning progress status is not displayed and does not influence parent objects. -trac#:#trac_mode_event#:#Tutors Monitor and Record Attendance -trac#:#trac_mode_event_info#:#Tutors monitor whether or not participants attend the session. Tutors record attendance manually in the 'Participants'-tab. +trac#:#trac_mode_event#:#Requires Manual Attendance Confirmation +trac#:#trac_mode_event_info#:#The user’s attendance needs to be confirmed manually in the 'Participants' tab by someone with the ‘Manage Members’ permission. Normally this would be the person responsible for the session. trac#:#trac_mode_exercise_returned#:#Tutors Monitor and Set Status trac#:#trac_mode_exercise_returned_info#:#Tutors decide if users have accomplished the excercise. Tutors manually set the overall status i.e. ‘Completed’ or ‘Failed’. trac#:#trac_mode_individual_assessment#:#Graded manually by tutor or trainer @@ -17346,6 +17352,7 @@ trac#:#trac_paths#:#Paths trac#:#trac_percentage#:#Percentage trac#:#trac_periodic_system_load#:#Periodic trac#:#trac_progress#:#Personal Learning Progress +trac#:#trac_progress_block_details#:#View Details trac#:#trac_progress_block_title#:#Your Learning Progress trac#:#trac_read_count#:#Access Number trac#:#trac_read_count_spent_seconds#:#Time Spent / Access @@ -17408,6 +17415,7 @@ trac#:#trac_view_mode_all#:#All Objects trac#:#trac_view_mode_collection#:#Only objects that determine the overall status trac#:#trac_visits#:#Required Number of Visits trac#:#trac_visits_info#:#A click counts as new visit only after %s seconds. +trac#:#trac_visits_nr#:#Number of Visits trac#:#user_total#:#User Total trac#:#view_mode#:#View Mode trac#:#view_mode_all#:#All @@ -17498,11 +17506,12 @@ ui#:#ui_transcription#:#Transcript ui#:#unselect_node#:#Remove node %s from selection ui#:#vc_sort#:#Sort by: ui#:#warning_url_too_long_msg#:#The amount of selected rows will result in a very large URL; the Server will probably block this request.<br>Please select less rows or perform the action on all entries. +user#:#account_not_flagged_for_deletion#:#The account is not flagged for deletion. user#:#activate_in_profile_fields#:#To change this setting, the user must first be allowed to change their login name under Profile > Profile Fields user#:#administrative_settings#:#Administrative Settings user#:#all_roles_has_starting_point#:#All the roles have starting points user#:#back_to_starting_points_list#:#Back to Starting Points -user#:#change_email_email_confirmation_body#:#The email address for the account %s was changed. To confirm this change, please click on this link %s. The link is valid for %s minutes. +user#:#change_email_email_confirmation_body#:#The email address for the account %s was changed. To confirm this change, please click on this link %s . The link is valid for %s minutes. user#:#change_email_email_confirmation_subject#:#Confirm Email Address user#:#change_email_email_information_body#:#The process to change the email address for the account %s to %s was started. An email with a link to confirm the change was sent to the new address. The link is valid for %s minutes. user#:#change_email_email_information_subject#:#Information about Change of Email Address @@ -17932,7 +17941,6 @@ wopi#:#wopi_url_byline#:#Complete URL of the WOPI Discovery, which must be acces wsp#:#element_already_shared#:#This object is already shared with this user. wsp#:#element_shared#:#Object shared. wsp#:#error_creating_certificate_pdf#:#The certificate could not be created. Please contact the administrator to check the certificate server. -wsp#:#search_no_match#:#Your search did not match any results. wsp#:#share#:#Share wsp#:#share_content#:#Share Object wsp#:#share_with#:#Username @@ -17954,6 +17962,7 @@ wsp#:#wsp_permission_registered_info#:#This object is shared with all registered wsp#:#wsp_permission_removed#:#Entry has been removed. wsp#:#wsp_permissions#:#Share wsp#:#wsp_personal_resources_description#:#Here you can manage your private files, blogs and artifacts. +wsp#:#wsp_search_no_match#:#Your search did not match any results. wsp#:#wsp_send_mail#:#Send Mail wsp#:#wsp_set_permission_all#:#World Wide Web wsp#:#wsp_set_permission_all_password#:#World Wide Web with Password diff --git a/lang/ilias_es.lang b/lang/ilias_es.lang index 2e74aef7cad4..9a9b4787f997 100644 --- a/lang/ilias_es.lang +++ b/lang/ilias_es.lang @@ -686,12 +686,10 @@ assessment#:#examid_in_test_res#:#Mostrar id del examen en resultados assessment#:#examid_in_test_res_desc#:#Mostrar id del examen al finalizar el test assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Exportar Datos de Evaluación. -assessment#:#exp_file_created#:#Archivo de exportación creado. assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Informe (PDF) assessment#:#exp_type_excel#:#Excel -assessment#:#exp_type_spss#:#SPSS assessment#:#expected_result_type#:#Tipo de resultado esperado assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1455,7 +1453,6 @@ assessment#:#tst_delete_missing_mark#:#Por favor seleccione al menos un rango de assessment#:#tst_derive_new_pool#:#Obtener nuevo banco de preguntas assessment#:#tst_derive_new_pools#:#Obtener nuevos bancos de preguntas assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session. -assessment#:#tst_dont_use_previous_answers#:#Sus respuestas previas no serán usadas como valores por defecto en futuras ejecuciones del test assessment#:#tst_edit_competence_assign#:#Editar propiedades de asignación assessment#:#tst_edit_scoring#:#Editar puntuación assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1511,7 +1508,6 @@ assessment#:#tst_finish_confirm_button#:#Si, quiero finalizar el test assessment#:#tst_finish_confirm_cancel_button#:#No, volver a la pregunta anterior assessment#:#tst_finish_confirmation_question#:#Vas a finalizar este test y alcanzarás el máximo número de intentos permitidos. No podrás volver a realizar este test para cambiar tus respuestas. ¿Quieres realmente finalizar el test? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No enviar correo electrónico assessment#:#tst_finished#:#Terminado assessment#:#tst_form_dynamic_question_set_config#:#Selección continua de preguntas assessment#:#tst_gap_analysis#:#Análisis de huecos @@ -1523,7 +1519,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Ocultar lista de preguntas assessment#:#tst_highscore_achieved_ts#:#Mostrar fecha del test assessment#:#tst_highscore_achieved_ts_description#:#Controla si debe mostrarse una columna con la fecha del test. assessment#:#tst_highscore_all_tables#:#Todas las puntuaciones @@ -1541,7 +1536,6 @@ assessment#:#tst_highscore_score#:#Mostrar puntuación assessment#:#tst_highscore_score_description#:#Controla si debe mostrarse una columna con la puntuación. assessment#:#tst_highscore_top_num#:#Número de entradas assessment#:#tst_highscore_top_num_description#:#Controla cuantas entradas deben mostrarse en la tabla de puntuaciones más altas. -assessment#:#tst_highscore_top_num_unit#:#entradas assessment#:#tst_highscore_top_table#:#Mostrar tabla 'clasificaciones más altas' assessment#:#tst_highscore_top_table_description#:#Controla si debe mostrarse la tabla 'clasificaciones más altas'. assessment#:#tst_highscore_wtime#:#Mostrar tiempo de trabajo @@ -1755,7 +1749,6 @@ assessment#:#tst_postpone_on_desc#:#Las preguntas no contestadas se pospondrán assessment#:#tst_presentation_properties#:#Configuración de presentación assessment#:#tst_presentation_settings_section#:#Presentation assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Vista de impresión de test y encuestas assessment#:#tst_proceed#:#Proceed assessment#:#tst_processing_time#:#Máximo tiempo de proceso assessment#:#tst_processing_time_desc#:#El máximo tiempo de proceso comienza cuando un usuario empieza a hacer un test y termina cuando ha pasado el período de tiempo introducido (horas, minutos, segundos) @@ -1892,10 +1885,6 @@ assessment#:#tst_show_results#:#Mostrar resultados del test assessment#:#tst_show_side_list#:#Mostrar lista de preguntas en el lateral assessment#:#tst_show_solution_answers_only#:#Vista de impresión de resultados (respuestas sólo) assessment#:#tst_show_solution_answers_only_desc#:#Si se marca no se muestra el contenido ILIAS que se puede crear con la pestaña "Editar Página" antes y después de la pregunta cuando se edita. Permite ahorrar papel. -assessment#:#tst_show_solution_compare#:#Comparar respuesta con la solución en la Lista de Respuestas -assessment#:#tst_show_solution_compare_desc#:#A los participantes se les muestra una comparativa de sus respuestas con las mejores soluciones. El resumen se mostará en "Resultados Detallados" a los que se accede con el botón "Mostrar resultados del test" en la pestaña de "Información". No se mostrará en la versión de impresión de la "Lista de respuestas" aunque esté activo aquí. -assessment#:#tst_show_solution_details#:#Detalles de puntuación -assessment#:#tst_show_solution_details_desc#:#Si se marca muestra al participante la solución detallada de cada pregunta en los resultados del test (para cada opción de respuesta si la hubiera). Si no está activa, sólo se muestra un resumen con el título y la puntuación total alcanzada en cada pregunta. Esta lista se mostrará en la pestaña "Info" y al finalizar la ejecución de un test, antes del envío final. assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Mostrar explicaciones específicas por respuesta en los resultados del test @@ -1918,7 +1907,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Las competencias no so assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#Al menos una de las competencias evaluadas en este test no se aborda con la cantidad mínima necesaria de preguntas.<br />Cantidad necesaria de preguntas: %s assessment#:#tst_skl_level_thresholds_link#:#Configurar umbrales de competencia assessment#:#tst_skl_level_thresholds_missing#:#Faltan umbrales para competencias relevantes! -assessment#:#tst_skl_res_interpretation_hint_msg#:#Por favor, considere que los resultados de competencia de un único test tienen una significación limitada. Cuanto más información se recolecte por competencia, mejor será la significación. En caso de que hubiera competencias individuales sin ninguna entrada, hay menos información recopilada. assessment#:#tst_skl_sub_tab_thresholds#:#Umbrales de competencias assessment#:#tst_sol_comp_expressions#:#Expresión de comparación assessment#:#tst_solution_compare_cfg#:#Configuración por comparación de solución @@ -1980,7 +1968,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#La respuesta preestablecida es co assessment#:#tst_unchanged_order_is_correct#:#El orden preestablecido es correcto assessment#:#tst_use_previous_answers#:#Usar respuestas previas assessment#:#tst_use_previous_answers_description#:#Si se activa, se usarán las respuestas previas de un participante como valores por defecto en futuras ejecuciones del test -assessment#:#tst_use_previous_answers_user#:#Usar mis respuestas previas como valores por defecto en futuras ejecuciones del test assessment#:#tst_user_finished_test#:#Test finalizado de usuario (%s) assessment#:#tst_view_competence_assign#:#Ver propiedades de asignación assessment#:#tst_virtual_pass_header_lo_initial#:#Resultados del test inicial para los objetivos de aprendizaje<br />%s @@ -2565,7 +2552,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Información book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11208,6 +11194,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###21 05 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11293,13 +11285,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Tenga en cuenta que solo puede convertir en accesible al público un archivo por tipo (XML, HTML, SCORM). lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11313,6 +11308,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Error de autenticación, no se ha indicado una clave de consumidor válida. lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11332,6 +11329,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11400,6 +11401,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Editar consumidor de LTI lti#:#lti_exit#:#Cerrar sesión de LTI lti#:#lti_exited#:#Sesión de LTI cerrada @@ -16735,7 +16737,7 @@ survey#:#survey_360_sure_appraisee_close#:#¿Está seguro que desea cerrar la en survey#:#survey_360_sure_appraisee_close_admin#:#¿Está seguro de que quiere cerrar las encuestas para los siguientes evaluadores? survey#:#survey_360_sure_delete_appraises#:#¿Está seguro que desea eliminar a los siguientes evaluados? survey#:#survey_360_sure_delete_raters#:#¿Está seguro que desea eliminar los siguientes calificadores para %s? -survey#:#survey_access_codes#:#Autenticación por Código de Acceso +survey#:#survey_access_code#:#Autenticación por Código de Acceso survey#:#survey_access_codes_info#:#Los usuarios consiguen acceder a la encuesta mediante la introducción de un código en la pestaña 'Info'. Estos códigos de acceso se generan en "Códigos de acceso" una subpestaña en la pestaña 'participantes'. survey#:#survey_activate_skill_service#:#Activar el Servicio de Competencias survey#:#survey_activate_skill_service_info#:#Se mostrará una nueva pestaña llamada "competencias". En esta pestaña las preguntas se asignan a competencias y se pueden establecer umbrales para alcanzar un determinado nivel de competencia. diff --git a/lang/ilias_et.lang b/lang/ilias_et.lang index ea74b2cef035..24ed674b7bbe 100644 --- a/lang/ilias_et.lang +++ b/lang/ilias_et.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results. assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Ekspordi tulemused -assessment#:#exp_file_created#:#Export file created. assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Sertifikaat (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Komaga eraldatud andmete faili formaat (CSV) assessment#:#expected_result_type#:#Expected result type assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Valige kustutamiseks vähemalt üks hinne assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Sinu varasemaid vastuseid ei kasutata järgnevates testides vaikeväärtustena assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Jah, tahan testi lõpetada. assessment#:#tst_finish_confirm_cancel_button#:#Ei, mine tagasi eelmise vastuse juurde. assessment#:#tst_finish_confirmation_question#:#Oled lõpetamas seda testi. Pärast vastuste ära saatmist ei ole võimalik enam testi siseneda ega vastuseid muuta. Kas oled kindel, et soovid praegu testi vastuseid ära saata? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Lõpetatud assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection assessment#:#tst_gap_analysis#:#Gap Analysis @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Peida küsimuste nimestik assessment#:#tst_highscore_achieved_ts#:#Show date of test assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown. assessment#:#tst_highscore_all_tables#:#All Rankings @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Show score assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown. assessment#:#tst_highscore_top_num#:#Number of ranks assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table. -assessment#:#tst_highscore_top_num_unit#:#entries assessment#:#tst_highscore_top_table#:#Show table 'top ranking' assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown. assessment#:#tst_highscore_wtime#:#Show working time @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Esitluse seaded assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Testi printvaade assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Maksimaalne töötamisaeg assessment#:#tst_processing_time_desc#:#Maksimaalne läbimisaeg algab hetkel, kui kasutaja alustab testi läbimist, ja lõpeb, kui sisestatud tunnid, minutid ja sekundid lõpevad. @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Näita testitulemusi assessment#:#tst_show_side_list#:#Näita kõrval küsimuste loendit assessment#:#tst_show_solution_answers_only#:#Tulemuste printvaade (ainult vastused) assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option. -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Näita testitulemustes enese vastuseid -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown. assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Näita testitulemustes vastustekeskset tagasisidet @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Kasuta varasemaid vastuseid assessment#:#tst_use_previous_answers_description#:#Kui märgistatud, võib osaleja kasutada varasemaid vastuseid vaikimis tulevastes testides, vastasel juhul ei näidata varasemaid vastuseid tulevastes testides -assessment#:#tst_use_previous_answers_user#:#Kasuta mu varasemaid vastuseid tuleviku testides assessment#:#tst_user_finished_test#:#Kasutaja lõpetas testi (%s) assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees? survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees? survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s? -survey#:#survey_access_codes#:#Authentication by Access Codes +survey#:#survey_access_code#:#Authentication by Access Codes survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'. survey#:#survey_activate_skill_service#:#Activate Competence Service survey#:#survey_activate_skill_service_info#:#todo12 diff --git a/lang/ilias_fa.lang b/lang/ilias_fa.lang index 60cec1b404e8..c802225401a9 100644 --- a/lang/ilias_fa.lang +++ b/lang/ilias_fa.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#صدور داده ارزیابی به -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certificate (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#مقادیر جدا شده با کاما (CSV) assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Please select at least one mark step to d assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Your previous answers will not be used as default values in future test passes assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring###28 08 2012 new variable assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#بله، می خواهم تست را ت assessment#:#tst_finish_confirm_cancel_button#:#No, go back to the previous question assessment#:#tst_finish_confirmation_question#:#You are going to finish this test and reach the maximum number of allowed test passes. You won't be able to enter this test again to change your answers. Do you really want to finish the test? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#پایان یافت assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Hide question list assessment#:#tst_highscore_achieved_ts#:#Show date of test###28 08 2012 new variable assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown.###28 08 2012 new variable assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Show score###28 08 2012 new variable assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown.###28 08 2012 new variable assessment#:#tst_highscore_top_num#:#Number of ranks###28 08 2012 new variable assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table.###28 08 2012 new variable -assessment#:#tst_highscore_top_num_unit#:#entries###28 08 2012 new variable assessment#:#tst_highscore_top_table#:#Show table 'top ranking'###28 08 2012 new variable assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown.###28 08 2012 new variable assessment#:#tst_highscore_wtime#:#Show working time###28 08 2012 new variable @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#تنظمیمات ارائه assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#نمای چاپ تست و ارزیابی assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#حداکثر زمان پردازش assessment#:#tst_processing_time_desc#:#حداکثر زمان پردازش از زمانی که کاربر تست را برای اولین بار شروع می کند آغاز می شود و بعد از تمام شدن ساعات، دقایق و ثانیه های مشخص شده پایان می یابد. @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#نمایش نتایج تست assessment#:#tst_show_side_list#:#Show question list aside assessment#:#tst_show_solution_answers_only#:#نمای چاپ نتایج - فقط پاسخ ها assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#نمایش راه حل ها درنتیج تست -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#نمایش بازخورد متناسب با پاسخ در نتایج تست @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#جوابهای قبلی را استفاده کن assessment#:#tst_use_previous_answers_description#:#اگر انتخاب شده باشد، شرکت کننده می تواند پاسخهای قبلی را به عنوان مقادیر پیش فرض برای دوره تست های بعدی انتخاب کند. -assessment#:#tst_use_previous_answers_user#:#جوابهای قبلی را من را به عنوان مقادیر پیش فرض برای تستهای آتی استفاده کن assessment#:#tst_user_finished_test#:#User finished test (%s) assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16734,7 +16736,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_fr.lang b/lang/ilias_fr.lang index 9b1c19772080..b59606428a87 100644 --- a/lang/ilias_fr.lang +++ b/lang/ilias_fr.lang @@ -669,12 +669,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results. assessment#:#exp_all_test_runs#:#All test runs###31 10 2023 new variable assessment#:#exp_eval_data#:#Exporter les résultats -assessment#:#exp_file_created#:#Fichier d'export créé. assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored test Attempt assessment#:#exp_type_certificate#:#Certificat (PDF) assessment#:#exp_type_excel#:# Excel -assessment#:#exp_type_spss#:# SPSS assessment#:#expected_result_type#:#Type de résultat attendu assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1438,7 +1436,6 @@ assessment#:#tst_delete_missing_mark#:#Veuillez sélectionner au moins une étap assessment#:#tst_derive_new_pool#:#Obtenir un nouveau pool de questions assessment#:#tst_derive_new_pools#:#Obtenir de nouveaux pools de questions assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session. -assessment#:#tst_dont_use_previous_answers#:#Vos réponses antérieures ne seront pas affichées par défaut lorsque vous repasserez le test assessment#:#tst_edit_competence_assign#:#Éditer les propriétés de la tâche assessment#:#tst_edit_scoring#:#Notation Manuelle assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###31 10 2023 new variable @@ -1494,7 +1491,6 @@ assessment#:#tst_finish_confirm_button#:#Oui, je souhaite terminer le test assessment#:#tst_finish_confirm_cancel_button#:#Non, revenir à la question précédente assessment#:#tst_finish_confirmation_question#:#Vous allez terminer ce test et atteindre le nombre maximum de tests autorisés validés. Vous ne pourrez plus refaire ce test une nouvelle fois pour modifier vos réponses. Voulez-vous vraiment terminer ce test ? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###31 10 2023 new variable -assessment#:#tst_finish_notification_no#:#Ne pas envoyer de notification par email lorsqu'un utilisateur achève un test assessment#:#tst_finished#:#Terminé assessment#:#tst_form_dynamic_question_set_config#:#Sélection des Questions assessment#:#tst_gap_analysis#:#Analyse d’écart @@ -1506,7 +1502,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###31 10 2023 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###31 10 2023 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###31 10 2023 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###31 10 2023 new variable -assessment#:#tst_hide_side_list#:#Masquer liste de question assessment#:#tst_highscore_achieved_ts#:#Afficher la date du test assessment#:#tst_highscore_achieved_ts_description#:#Ajoute une colonne avec la date du test. assessment#:#tst_highscore_all_tables#:#All Rankings @@ -1524,7 +1519,6 @@ assessment#:#tst_highscore_score#:#Afficher le score brut assessment#:#tst_highscore_score_description#:#Ajouter une colonne avec le score brut obtenu. assessment#:#tst_highscore_top_num#:#Nombre de lignes dans les meilleurs scores assessment#:#tst_highscore_top_num_description#:#Définit le nombre de meilleurs scores à afficher dans la page des meilleurs scores. -assessment#:#tst_highscore_top_num_unit#:#lignes assessment#:#tst_highscore_top_table#:#Afficher la vue "Meilleurs scores" assessment#:#tst_highscore_top_table_description#:#Permet de contrôler l'affichage des meilleurs scores. assessment#:#tst_highscore_wtime#:#Afficher le temps passé @@ -1738,7 +1732,6 @@ assessment#:#tst_postpone_on_desc#:#Les questions sans réponse seront reportée assessment#:#tst_presentation_properties#:#Paramètres de Présentation assessment#:#tst_presentation_settings_section#:#Presentation assessment#:#tst_previous_access_code_not_available#:#No previous code available!###31 10 2023 new variable -assessment#:#tst_print#:#Test et Evaluation - Vue imprimable assessment#:#tst_proceed#:#Proceed assessment#:#tst_processing_time#:#Temps maximum assessment#:#tst_processing_time_desc#:#Le décompte du temps débute lorsque l'utilisateur commence le test pour la première fois et se termine après expiration du temps précisé ici. Lorsque cette option est utilisée, la possibilité de suspendre le test doit être désactivée. @@ -1875,10 +1868,6 @@ assessment#:#tst_show_results#:#Afficher les Résultats du Test assessment#:#tst_show_side_list#:#Afficher la liste de question sur le côté assessment#:#tst_show_solution_answers_only#:#Impression des Résultats (Réponses Seulement) assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option. -assessment#:#tst_show_solution_compare#:#Comparer la Réponse avec la Solution dans la Liste des Réponses -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here. -assessment#:#tst_show_solution_details#:#Afficher les Réponses Correctes dans les Résultats -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown. assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###31 10 2023 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###31 10 2023 new variable assessment#:#tst_show_solution_feedback#:#Afficher un Retour d'Information par Réponse dans les Résultats du Test @@ -1901,7 +1890,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Les Compétences ne so assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#Au moins une des compétences abordées dans ce test n’est pas déclenchée par le nombre minimum de questions requises.<br />Nombre de questions requises: %s assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds assessment#:#tst_skl_level_thresholds_missing#:#Des seuils sont manquants pour les compétences pertinentes! -assessment#:#tst_skl_res_interpretation_hint_msg#:#Veuillez tenir compte du fait que les résultats de compétence d’un seul test n’ont qu’une signification limitée. Plus il y a d’informations collectées par compétence, plus leur signification sera valide. Si une seule compétence n’a pas d’entrée, il n'y aura pas assez d’informations fournies. assessment#:#tst_skl_sub_tab_thresholds#:#Seuils de compétence assessment#:#tst_sol_comp_expressions#:#Expressions de comparaison assessment#:#tst_solution_compare_cfg#:#Configuration pour la comparaison des solutions @@ -1963,7 +1951,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#La réponse programmée est corre assessment#:#tst_unchanged_order_is_correct#:#L'ordre programmé est correct assessment#:#tst_use_previous_answers#:#Utiliser les Réponses des Essais Précédents assessment#:#tst_use_previous_answers_description#:#Si cochée, les réponses précédentes de chaque utilisateur sont affichées par défaut à chaque question lorsque le test est repassé. -assessment#:#tst_use_previous_answers_user#:#Utiliser mes réponses précédentes comme valeurs par défaut lorsque je referai le test assessment#:#tst_user_finished_test#:#Test terminé de l'utilisateur (%s) assessment#:#tst_view_competence_assign#:#Voir les propriétés de la tâche assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s @@ -2548,7 +2535,6 @@ book#:#book_booking#:#Booking###31 10 2023 new variable book#:#book_booking_information#:#Information book#:#book_booking_objects#:#Booking Objects###31 10 2023 new variable book#:#book_booking_reminders#:#Upcoming reservations -book#:#book_bookings_per_user#:#Bookings per User###31 10 2023 new variable book#:#book_bulk_confirmation#:#Please check, if all values are listed correctly.###31 10 2023 new variable book#:#book_bulk_creation#:#Bulk Creation###31 10 2023 new variable book#:#book_bulk_data#:#Object Data###31 10 2023 new variable @@ -11191,6 +11177,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User Id combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user. lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formated as an email adress. lti#:#conf_privacy_ident_il_uuid_login_info#:#This is identical to each call, but may allow a direct conclusion about the ILIAS user. +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formated as an email adress. lti#:#conf_privacy_ident_il_uuid_user_id_info#:#This is identical to each call, but doesn't allow a direct conclusion about the ILIAS user. lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is: @@ -11276,13 +11268,16 @@ lti#:#launched#:#Resource was already launched. lti#:#learning_progress_options#:#Options for Learning Progress lti#:#lm_only_one_download_per_type#:#Veuillez noter que vous ne pouvez rendre accessible au public qu’un seul fichier par type (XML, HTML, SCORM). lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###31 10 2023 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###31 10 2023 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###31 10 2023 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###31 10 2023 new variable lti#:#lti_13_step1#:#Step 1###31 10 2023 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###31 10 2023 new variable lti#:#lti_13_step2#:#Step 2###31 10 2023 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###31 10 2023 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global lti#:#lti_action_delete_providers#:#Delete Providers @@ -11296,6 +11291,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentification échouée, aucune clé consommateur valide donnée. lti#:#lti_con_content_item#:#Support for Deep Linking###31 10 2023 new variable lti#:#lti_con_content_item_url#:#Content URL###31 10 2023 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###31 10 2023 new variable lti#:#lti_con_key_type#:#Public Key Type###31 10 2023 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###31 10 2023 new variable @@ -11315,6 +11312,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2 lti#:#lti_con_prov_description#:#Description +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete. lti#:#lti_con_prov_group_options#:#Options to group and filter Providers @@ -11383,6 +11384,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings lti#:#lti_delete_consume_provider#:#Delete Provider lti#:#lti_delete_consume_providers#:#Delete Providers lti#:#lti_delete_provider#:#Delete Provider +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Éditer consommateur LTI lti#:#lti_exit#:#Fermer session LTI lti#:#lti_exited#:#Session LTI fermée @@ -16718,7 +16720,7 @@ survey#:#survey_360_sure_appraisee_close#:#Etes-vous sûr de vouloir fermer l'é survey#:#survey_360_sure_appraisee_close_admin#:#Etes-vous sûr de vouloir fermer l'évaluation aux participants suivants ? survey#:#survey_360_sure_delete_appraises#:#Etes-vous sûr de vouloir supprimer les participants suivants ? survey#:#survey_360_sure_delete_raters#:#Etes-vous sûr de vouloir supprimer les évaluateurs suivants pour %s? -survey#:#survey_access_codes#:#Authentification par codes d’accès +survey#:#survey_access_code#:#Authentification par codes d’accès survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'. survey#:#survey_activate_skill_service#:#Activer le Service Compétences survey#:#survey_activate_skill_service_info#:#Un nouvel onglet "Compétences" s'affiche. Dans cet onglet, les questions sont assignées aux compétences, puis des seuils sont attribués pour atteindre un niveau spécifique d'une compétence. diff --git a/lang/ilias_hr.lang b/lang/ilias_hr.lang index f91968cc3549..6e2fb7c31bce 100644 --- a/lang/ilias_hr.lang +++ b/lang/ilias_hr.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ID prolaza ILIAS testa assessment#:#examid_in_test_res_desc#:#ID prolaza ILIAS testa bit će uključen u rezultate testa. assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Izvezi evaluacijske podatke kao -assessment#:#exp_file_created#:#Datoteka za izvoz je kreirana. assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certifikat (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Vrijednost odvojena zarezom (CSV) assessment#:#expected_result_type#:#Očekivana vrsta rezultata assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Molimo odaberite najmanje jednu ocjenu za assessment#:#tst_derive_new_pool#:#Izvedi novi bazen pitanja assessment#:#tst_derive_new_pools#:#Izvedi nove bazene pitanja assessment#:#tst_dont_show_msg_again_in_current_session#:#Ne prikazuj više ovu poruku tijekom moje aktualne sesije. -assessment#:#tst_dont_use_previous_answers#:#Vaši prethodni odgovori neće se koristiti kao zadane vrijednosti u budućim prolazima testa assessment#:#tst_edit_competence_assign#:#Obradi karakteristike dodjele assessment#:#tst_edit_scoring#:#Uredi ocjenjivanje assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Da, želim završiti test assessment#:#tst_finish_confirm_cancel_button#:#Ne, želim se vratiti na prethodno pitanje assessment#:#tst_finish_confirmation_question#:#Završavate ovaj test i dolazite do maksimalnog broja dozvoljenih prolaza testa. Nakon toga nećete moći ponovno ući u ovaj test kako biste promijenili svoje odgovore. Želite li zaista završiti test? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#Nema e-pošte assessment#:#tst_finished#:#Završeno assessment#:#tst_form_dynamic_question_set_config#:#Kontinuirani izbor pitanja assessment#:#tst_gap_analysis#:#Analiza praznine @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Sakrij popis pitanja assessment#:#tst_highscore_achieved_ts#:#Datum assessment#:#tst_highscore_achieved_ts_description#:#Prikazat će se dodatni stupac koji sadrži datum testa. assessment#:#tst_highscore_all_tables#:#Vlastiti rang sudionika i Popis najboljih (Top Ranking) @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Broj bodova assessment#:#tst_highscore_score_description#:#Prikazat će se dodatni stupac koji sadrži podatak o postignutom bodovima. assessment#:#tst_highscore_top_num#:#Duljina popisa najboljih (Top Ranking) assessment#:#tst_highscore_top_num_description#:#Odredite koliko mjesta se treba prikazati na popisu najboljih. -assessment#:#tst_highscore_top_num_unit#:#Unosi assessment#:#tst_highscore_top_table#:#Popis najboljih assessment#:#tst_highscore_top_table_description#:#Sudionicima se prikazuje tablica s top ljestvicom. assessment#:#tst_highscore_wtime#:#Trajanje testa @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Pitanje koja korisnici samo pogledaju i prel assessment#:#tst_presentation_properties#:#Provedba testa: ponašanje pitanja assessment#:#tst_presentation_settings_section#:#Prezentacija assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Test i ocjenjivanje - pregled za ispis assessment#:#tst_proceed#:#Nastavi assessment#:#tst_processing_time#:#Ograniči trajanje testa assessment#:#tst_processing_time_desc#:#Sudionici test mogu rješavati samo tijekom određenog vremenskog razdoblja. Vrijeme teče od trenutka kada korisnik po prvi put pokrene test. Prekid testa ne zaustavlja vrijeme obrade. Ako je broj mogućih prolaza testa ograničen, na kartici ‘Nadzorna ploča’ prikazuje se dodatna značajka kako bi se sudionicima odobrilo dodatno vrijeme. @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Rezultati testa assessment#:#tst_show_side_list#:#Pokaži popis pitanja assessment#:#tst_show_solution_answers_only#:#Prikaz ispisa rezultata (samo odgovori) assessment#:#tst_show_solution_answers_only_desc#:#Ako je odabrana ova opcija, sadržaj ILIAS-a koji s pomoću kartice ‘Uredi sadržaj’ možete postaviti ispred i iza samog teksta pitanja neće biti vidljiv na ispisu. Ako želite uštedjeti malo prostora na papiru, odaberite ovu opciju. -assessment#:#tst_show_solution_compare#:#Prikaži najbolje rješenje u ‘Detaljnim rezultatima’ -assessment#:#tst_show_solution_compare_desc#:#Sudionicima se daje pregled u kojem se njihovi odgovori uspoređuju s najboljim mogućim rješenjima. Imajte na umu da će se ovaj prikaz prikazati u ‘Detaljnim rezultatima’ kojima se može pristupiti putem gumba ‘Prikaži rezultate testa’ na kartici ‘Informacije’. Taj pregled neće biti prikazan na ‘Popisu odgovora’ koji se može ispisati, iako je ovdje postavljen. -assessment#:#tst_show_solution_details#:#Bodovani odgovori sudionika -assessment#:#tst_show_solution_details_desc#:#Sudionik uz ‘Tablicu detaljnih rezultata testa’ dobiva za svako pitanje poveznicu na novu stranicu. Ova povezana stranica sadrži pitanje, odgovor sudionika, informaciju je li odgovor bio točan odgovor te koliko je bodova dobio za svoje odgovore. assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Povratne informacije @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Kompetencije se procje assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#Barem za jednu kompetenciju obrađenu u testu nije dodijeljen dovoljan broj pitanja. Za ove kompetencije ne evidentiraju se unosi kompetencija za sudionike. <br />Minimalni broj dodijeljenih pitanja: %s assessment#:#tst_skl_level_thresholds_link#:#Kofiguriraj pragove za kompetencije assessment#:#tst_skl_level_thresholds_missing#:#Nisu definirani pragovi za sve relevantne kompetencije! -assessment#:#tst_skl_res_interpretation_hint_msg#:#Molimo uzmite u obzir da rezultati kompetencija iz jednog testa imaju ograničeno značenje. Što se više informacija prikupi o pojedinim kompetencijama, to će izjava biti valjanija. Ako postoje pojedinačne kompetencije bez ikakvog unosa, za te je komptenecije prikupljeno premalo podataka. assessment#:#tst_skl_sub_tab_thresholds#:#Pragovi za kompetencije assessment#:#tst_sol_comp_expressions#:#Komparativni izrazi assessment#:#tst_solution_compare_cfg#:#Konfiguracija za usporedbu odgovora @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#Unaprijed zadani odgovor je toča assessment#:#tst_unchanged_order_is_correct#:#Unaprijed zadani redoslijed je točan assessment#:#tst_use_previous_answers#:#Koristi prethodne odgovore assessment#:#tst_use_previous_answers_description#:#Sudionicima se prikazuju njihovi odgovori iz prijašnih prolaza testa. Ovu opciju mora aktivirati sudionik na kartici ‘Info’ prije početka prolaza testa. -assessment#:#tst_use_previous_answers_user#:#Koristi moje prethodne odgovore kao zadane vrijednosti u budućim prolazima testa. assessment#:#tst_user_finished_test#:#Sudionik je završio test (%s) assessment#:#tst_view_competence_assign#:#Prikaži karakteristike dodjele assessment#:#tst_virtual_pass_header_lo_initial#:#Početni rezultati testa za cilj učenja<br />%s @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Informacija book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Nadolazeće rezervacije -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###04 06 2021 new variable lti#:#learning_progress_options#:#Options for Learning Progress###04 06 2021 new variable lti#:#lm_only_one_download_per_type#:#Napominjemo da možete učiniti javno dostupnom samo jednu datoteku po tipu (XML, HTML, SCORM). lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###04 06 2021 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###04 06 2021 new variable lti#:#lti_action_delete_providers#:#Delete Providers###04 06 2021 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Autentifikacija nije uspjela, nije dan valjani potrošački ključ. lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###04 06 2021 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###04 06 2021 new variable lti#:#lti_con_prov_description#:#Description###04 06 2021 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###04 06 2021 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###04 06 2021 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###04 06 2021 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###04 06 2021 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###04 06 2021 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###04 06 2021 new variable lti#:#lti_delete_provider#:#Delete Provider###04 06 2021 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Uredi LTI potrošača lti#:#lti_exit#:#Zatvori LTI sesiju lti#:#lti_exited#:#LTI sesija zatvorena @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Jeste li sigurni da želite zatvoriti survey#:#survey_360_sure_appraisee_close_admin#:#Jeste li sigurni da želite zatvoriti ankete za sljedeće procijenjene osobe? survey#:#survey_360_sure_delete_appraises#:#Jeste li sigurni da želite ukloniti sljedeće procijenjene osobe? survey#:#survey_360_sure_delete_raters#:#Jeste li sigurni da želite ukloniti sljedeće ocjenjivače za %s? -survey#:#survey_access_codes#:#Autentifikacija pristupnim kodovima +survey#:#survey_access_code#:#Autentifikacija pristupnim kodovima survey#:#survey_access_codes_info#:#Korisnici pristup anketi dobivaju unosom koda na kartici ‘Informacije’. Ovi pristupni kodovi generiraju se na potkartici ‘Pristupni kodovi’ na kartici ‘Sudionici’. survey#:#survey_activate_skill_service#:#Aktiviraj servis za kompetencije survey#:#survey_activate_skill_service_info#:#Prikazat će se nova kartica ‘Kompetencije’. U ovoj su kartici pitanja dodijeljena kompetencijama, a zatim se određuju pragovi za postizanje određene razine kompetencije. diff --git a/lang/ilias_hu.lang b/lang/ilias_hu.lang index a407005da7cb..80e3b3199535 100644 --- a/lang/ilias_hu.lang +++ b/lang/ilias_hu.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS-vizsgaazonosító assessment#:#examid_in_test_res_desc#:#Az ILIAS-vizsgaazonosító a teszteredményeknél jelenik meg. assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Kiértékelési adatok exportja, mint -assessment#:#exp_file_created#:#Elkészült az exportfájl. assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Igazolás (PDF) assessment#:#exp_type_excel#:#Microsoft Excel (XLS) -assessment#:#exp_type_spss#:#Vesszővel tagolt szöveg (CSV) assessment#:#expected_result_type#:#Elvárt eredménytípus assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Válasszon legalább egy érdemjegyet az assessment#:#tst_derive_new_pool#:#Új kérdésgyűjtemény származtatása assessment#:#tst_derive_new_pools#:#Új kérdésgyűjtemények származtatása assessment#:#tst_dont_show_msg_again_in_current_session#:#Ez az üzenet többször ne jelenjen meg a munkamenet alatt. -assessment#:#tst_dont_use_previous_answers#:#Korábbi válaszai nem lesznek alapértelmezett értékekként használva a jövőbeni tesztteljesítésekhez. assessment#:#tst_edit_competence_assign#:#Összerendelési tulajdonságok módosítása assessment#:#tst_edit_scoring#:#Pontozás módosítása assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Igen, be szeretném fejezni a tesztet. assessment#:#tst_finish_confirm_cancel_button#:#Nem, menjen vissza az előző kérdéshez. assessment#:#tst_finish_confirmation_question#:#Ha befejezi ezt a tesztet, eléri az engedélyezett tesztkitöltések maximális számát. Nem fog tudni visszatérni a tesztbe, hogy megváltoztassa válaszait. Biztos, hogy be szeretné fejezni a tesztet? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#Nincs e-mail assessment#:#tst_finished#:#Befejezve assessment#:#tst_form_dynamic_question_set_config#:#Folyamatos kérdéskiválasztás assessment#:#tst_gap_analysis#:#Gap analízis (rés elemzés) @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Kérdéslista elrejtése assessment#:#tst_highscore_achieved_ts#:#Időpont assessment#:#tst_highscore_achieved_ts_description#:#A rangsorban a teszt időpontját tartalmazó oszlopot megjelenik. assessment#:#tst_highscore_all_tables#:#Résztvevő saját helyezése és legkiemelkedőbb helyezések @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Pontszám assessment#:#tst_highscore_score_description#:#A rangsorban a pontszámot tartalmazó oszlopot megjelenik. assessment#:#tst_highscore_top_num#:#Legkiemelkedőbb helyezések hossza assessment#:#tst_highscore_top_num_description#:#Hány helyezés legyen a legkiemelkedőbb helyezések felsorolásában. -assessment#:#tst_highscore_top_num_unit#:#bejegyzések assessment#:#tst_highscore_top_table#:#Legkiemelkedőbb helyezések assessment#:#tst_highscore_top_table_description#:#A résztvevők láthatják a legkiemelkedőbb helyezéseket. assessment#:#tst_highscore_wtime#:#Tesztkitöltés ideje @@ -1752,8 +1746,7 @@ assessment#:#tst_postpone_on#:#Meg nem válaszolt kérdések sorba állítása assessment#:#tst_postpone_on_desc#:#A megtekintett, de meg nem válaszolt kérdések a teszt végén automatikusan, sorba rendezve újra megjelennek. assessment#:#tst_presentation_properties#:#Teszt kezelése: A kérdés viselkedése assessment#:#tst_presentation_settings_section#:#Megjelenítés -assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Teszt és értékelés nyomtatási nézete +assessment#:#tst_previous_access_code_not_available#:#Egy korábbi kód sem érhető el! assessment#:#tst_proceed#:#Folytatás assessment#:#tst_processing_time#:#Elhasználható idő korlátja assessment#:#tst_processing_time_desc#:#A résztvevők csak meghatározott ideig dolgozhatnak a teszten. A visszaszámlálás akkor kezdődik, amikor a felhasználó először indítja a tesztet. A teszt felfüggesztése nem állítja meg az órát. Ha a lehetséges kitöltések száma korlátozott, megjelenik az extra idő biztosítása a kitöltőknek lehetőség a 'Műszerfal' fül alatt. @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Teszteredmények assessment#:#tst_show_side_list#:#Kérdéslista megjelenítése assessment#:#tst_show_solution_answers_only#:#Eredmények nyomtatási előnézete (csak a válaszoké) assessment#:#tst_show_solution_answers_only_desc#:#Ha be van kapcsolva, a 'Tartalom módosítása' fülön a kérdéshez beállított tartalom nem jelenik meg nyomtatásban. Papír spórolása esetén válassza ezt az opciót. -assessment#:#tst_show_solution_compare#:#Legjobb megoldás megjelenítése a 'Részletes teszteredmények'-ben -assessment#:#tst_show_solution_compare_desc#:#A résztvevők összehasonlíthatják saját megoldásikat a legjobb megoldással. Ez az 'Információs' fülön lévő 'Teszteredmények megjelenítése' linkkel elérhető 'Részletes teszteredmények'-ben jelenik meg, a nyomtatható 'Válaszok felsorolása' részben viszont nem. -assessment#:#tst_show_solution_details#:#Megoldások megjelenítése a teszteredményekben -assessment#:#tst_show_solution_details_desc#:#A 'Részletes teszteredmények táblázata' kiegészítéseként, minden kérdésnél egy link jelenik meg, ami egy oldalra mutat, ahol a kérdés, a résztvevő válasza, a válasz értékelése (helyes/helytelen) és a válaszra kapott pontszám jelenik meg. assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Válaszspecifikus visszajelzés megjelenítése a teszteredményekben @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Kompetenciára nem vá assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#A teszt által legalább egy mérni kívánt kompetenciához nincs elegendő kérdés, így azokhoz egy kompetenciabejegyzést sem fogunk rögzíteni.<br />A szükséges minimális kérdésszám: %s assessment#:#tst_skl_level_thresholds_link#:#Kompetencia-küszöbértékek beállítása assessment#:#tst_skl_level_thresholds_missing#:#Az érintett kompetenciákhoz hiányoznak a küszöbértékek! -assessment#:#tst_skl_res_interpretation_hint_msg#:#Kérjük, vegye figyelembe, hogy a csupán egy tesztből kapott kompetenciaeredmények korlátozott jelentőséggel bírnak. Minél több információt sikerül gyűjteni kompetenciánként, annál jobb lesz az eredmény. Amennyiben egyszerű kompetenciához nincs bejegyzés, a kompetencia megállapításához túl kevés információ áll rendelkezésre. assessment#:#tst_skl_sub_tab_thresholds#:#Kompetencia-küszöbértékek assessment#:#tst_sol_comp_expressions#:#Összehasonlító kifejezések assessment#:#tst_solution_compare_cfg#:#Megoldás összehasonlításához beállítások @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#A jelenlegi válasz helyes. assessment#:#tst_unchanged_order_is_correct#:#A jelenlegi sorrend helyes. assessment#:#tst_use_previous_answers#:#Korábbi válaszok használata assessment#:#tst_use_previous_answers_description#:#A résztvevők számára korábbi tesztkitöltéseik válaszai megjelennek. Ezt a lehetőséget a résztvevők saját maguknak tudják bekapcsolni az 'Információ' fülön a kitöltés megkezdése előtt. -assessment#:#tst_use_previous_answers_user#:#Használja korábbi válaszaimat alapértelmezett értékként a jövőbeni tesztkitöltésekhez. assessment#:#tst_user_finished_test#:#'%s' tesztet egy felhasználó befejezte assessment#:#tst_view_competence_assign#:#Összerendelési tulajdonságok megtekintése assessment#:#tst_virtual_pass_header_lo_initial#:#A Tanulási célkitűzés Belépő tesztjének eredményei<br />%s @@ -2563,10 +2550,9 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Információ book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Jövőbeni foglalások -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable -book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable -book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable -book#:#book_bulk_data#:#Item Data###26 08 2024 new variable +book#:#book_bulk_confirmation#:#Kérem, ellenőrizze, hogy az összes érték helyesen jelenik-e meg. +book#:#book_bulk_creation#:#Üres létrehozása +book#:#book_bulk_data#:#Objektum adata book#:#book_cal_entry#:#Ennek a foglalása: book#:#book_confirm_booking#:#Foglalás megerősítése book#:#book_confirm_booking_for_users#:#Are you sure you want to book this item for the following user(s)?###29 10 2025 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched. lti#:#learning_progress_options#:#Options for Learning Progress lti#:#lm_only_one_download_per_type#:#Kérjük, ügyeljen arra, hogy típusonként (XML, HTML, SCORM) csak egy fájlt tegyen nyilvánosan elérhetővé. lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Kiszolgáló as Global Kiszolgáló for all Users lti#:#lti_action_accept_providers_as_global#:#Accept Kiszolgálók as Global lti#:#lti_action_delete_providers#:#Delete Kiszolgálós @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#A hitelesítés sikertelen, nem jó a fogyasztói kulcs. lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Kiszolgáló lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2 lti#:#lti_con_prov_description#:#Description +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#Küldő kiszolgáló lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Kiszolgáló. An external Kiszolgáló is characterized by insufficient influence on the Kiszolgáló by the operator of the ILIAS-installation. This is the case when there are no rights to delete. lti#:#lti_con_prov_group_options#:#Options to group and filter Kiszolgálós @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Kiszolgáló Settings lti#:#lti_delete_consume_provider#:#Kiszolgáló törlése lti#:#lti_delete_consume_providers#:# Kiszolgálók törlése lti#:#lti_delete_provider#:#Delete Kiszolgáló +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#LTI-fogyasztó módosítása lti#:#lti_exit#:#LTI-munkamenet lezárása lti#:#lti_exited#:#LTI-munkamenet lezárva @@ -15619,6 +15621,7 @@ sess#:#sess_members_gallery#:#Esemény résztvevőinek képgalériája sess#:#sess_members_print_title#:#Esemény résztvevői sess#:#sess_msg_applicants_assigned#:#Az eseményre sikeresen regisztrált jelentkező(ke)t. sess#:#sess_msg_applicants_removed#:#Sikeresen eltávolított jelentkező(ke)t. +sess#:#sess_new#:#Esemény létrehozása sess#:#sess_new_registrations#:#Csatlakozási kérés sess#:#sess_notification_option#:#Lehetőség sess#:#sess_notification_option_inherit#:#Öröklés a szülőtől @@ -16733,7 +16736,7 @@ survey#:#survey_360_sure_appraisee_close#:#Biztos, hogy lezárja a kérdőívet survey#:#survey_360_sure_appraisee_close_admin#:#Biztos, hogy lezárja a kérdőíveket az alábbi értékelendő személyek számára? survey#:#survey_360_sure_delete_appraises#:#Biztos, hogy eltávolítja az alábbi értékelendő személyeket? survey#:#survey_360_sure_delete_raters#:#Biztos, hogy eltávolítja %s értékelőit? -survey#:#survey_access_codes#:#Hitelesítés kódokkal +survey#:#survey_access_code#:#Hitelesítés kódokkal survey#:#survey_access_codes_info#:#A felhasználók az 'Információ' fülön megadható kóddal férhet hozzá a teszthez. Kódokat generálni a 'Válaszadók' fül alatti 'Hozzáférési kódok' alfül alatt lehet. survey#:#survey_activate_skill_service#:#Kompetenciaszolgáltatás bekapcsolása survey#:#survey_activate_skill_service_info#:#Egy új, 'Kompetencia' nevű fül jelenik meg. Itt kompetenciákat rendelhet a kérdésekhez, majd küszöbértéket kompetenciaszintekhez. diff --git a/lang/ilias_it.lang b/lang/ilias_it.lang index a2f94046bab9..3a7f7b70bcc6 100644 --- a/lang/ilias_it.lang +++ b/lang/ilias_it.lang @@ -1,3 +1,4 @@ +/* Copyright (c) 1998-2020 ILIAS open source eLearning e.V., Extended GPL, see docs/LICENSE */ /** * This file is part of ILIAS, a powerful learning management system * published by ILIAS open source e-Learning e.V. @@ -12,14 +13,12 @@ * https://www.ilias.de * https://github.com/ILIAS-eLearning * -******************************************************************** -*/ /** * ILIAS language file * * @module language file Italian * @modulegroup language -* @author Roberto del Mastro <roberto@opencons.net> +* @author OC Open Consulting srl <info@oc-group.eu> * @version $Id$ */ // The language file starts beyond the HTML-comment below. DO NOT modify this line! @@ -29,70 +28,70 @@ // to the corresponding mode! // Language file names refer to ISO 639, see: http://www.oasis-open.org/cover/iso639a.html <!-- language file start --> -acc#:#acc_add_document_btn_label#:#Add Document###07 02 2020 new variable -acc#:#acc_crit_type_usr_language#:#Profile Language###07 02 2020 new variable -acc#:#acc_criterion_assignment_must_be_unique_insert#:#You cannot attach this criterion with this value. There is already an identical criterion attached.###07 02 2020 new variable -acc#:#acc_criterion_assignment_must_be_unique_update#:#You cannot change the criterion as desired. There is already an identical criterion attached.###07 02 2020 new variable -acc#:#acc_ctrl_cpt_txt#:#Accessibility Control Concept###07 02 2020 new variable -acc#:#acc_deleted_documents_p#:#The documents have been deleted.###07 02 2020 new variable -acc#:#acc_deleted_documents_s#:#The document has been deleted.###07 02 2020 new variable -acc#:#acc_doc_crit_attached#:#The criterion has been attached.###07 02 2020 new variable -acc#:#acc_doc_crit_changed#:#The criterion has been changed.###07 02 2020 new variable -acc#:#acc_doc_crit_detached#:#The criterion has been detached.###07 02 2020 new variable -acc#:#acc_doc_delete#:#Delete Document###07 02 2020 new variable -acc#:#acc_doc_detach_crit_confirm_title#:#Detach Criterion###07 02 2020 new variable -acc#:#acc_doc_sure_detach_crit#:#Are your sure you want to detach the criterion?###07 02 2020 new variable -acc#:#acc_document#:#Document###07 02 2020 new variable -acc#:#acc_form_attach_criterion_head#:#Attach Criterion###07 02 2020 new variable -acc#:#acc_form_criterion#:#Criterion###07 02 2020 new variable -acc#:#acc_form_document#:#Document###07 02 2020 new variable -acc#:#acc_form_document_content_changed#:#The contents of the uploaded file was purified by ILIAS. Please check the result and upload a new file, if necessary.###07 02 2020 new variable -acc#:#acc_form_document_info#:#Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used.###07 02 2020 new variable -acc#:#acc_form_document_new#:#Change Content###07 02 2020 new variable -acc#:#acc_form_document_new_info#:#Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will be purified, only the contents of the body element will be used. The existing contents will be replaced.###07 02 2020 new variable -acc#:#acc_form_document_title#:#Title###07 02 2020 new variable -acc#:#acc_form_document_title_info#:#Please enter a title for the document.###07 02 2020 new variable -acc#:#acc_form_edit_criterion_head#:#Edit Criterion Assignment###07 02 2020 new variable -acc#:#acc_form_edit_doc_head#:#Edit Document###07 02 2020 new variable -acc#:#acc_form_new_doc_head#:#Create Document###07 02 2020 new variable -acc#:#acc_forward_mail#:#Inoltro Mail +acc#:#acc_add_document_btn_label#:#Aggiungi Documento +acc#:#acc_crit_type_usr_language#:#Lingua del profilo +acc#:#acc_criterion_assignment_must_be_unique_insert#:#Non puoi allegare questo criterio con questo valore. C'è già un criterio identico allegato. +acc#:#acc_criterion_assignment_must_be_unique_update#:#Non è possibile cambiare il criterio come desiderato. C'è già un criterio identico allegato. +acc#:#acc_ctrl_cpt_txt#:#Controllo dell'accessibilità +acc#:#acc_deleted_documents_p#:#I documenti sono stati cancellati. +acc#:#acc_deleted_documents_s#:#I documenti sono stati cancellati. +acc#:#acc_doc_crit_attached#:#Il criterio è stato inserito. +acc#:#acc_doc_crit_changed#:#Il criterio è stato cambiato. +acc#:#acc_doc_crit_detached#:#Il criterio è stato rimosso. +acc#:#acc_doc_delete#:#Cancella documento +acc#:#acc_doc_detach_crit_confirm_title#:#Rimuovi criteri +acc#:#acc_doc_sure_detach_crit#:#Sei sicuro di voler rimuovere il criterio? +acc#:#acc_document#:#Documento +acc#:#acc_form_attach_criterion_head#:#Inserisci criterio +acc#:#acc_form_criterion#:#Criterio +acc#:#acc_form_document#:#Documento +acc#:#acc_form_document_content_changed#:#Il contenuto del file caricato è stato purificato da ILIAS. Per favore controlla il risultato e carica un nuovo file, se necessario. +acc#:#acc_form_document_info#:#Seleziona un file dal tuo filesystem locale. Puoi caricare un file di testo semplice o un semplice file HTML. I file HTML saranno purificati, solo il contenuto dell'elemento body sarà utilizzato. +acc#:#acc_form_document_new#:#Cambia il contenuto +acc#:#acc_form_document_new_info#:#Seleziona un file dal tuo filesystem locale. Puoi caricare un file di testo semplice o un semplice file HTML. I file HTML saranno purificati, solo il contenuto dell'elemento body sarà utilizzato. Il contenuto esistente sarà sostituito. +acc#:#acc_form_document_title#:#Titolo +acc#:#acc_form_document_title_info#:#Inserisci un titolo per il documento. +acc#:#acc_form_edit_criterion_head#:#modifica Criterio Assegnazione +acc#:#acc_form_edit_doc_head#:#modifica Documento +acc#:#acc_form_new_doc_head#:#Crea documento +acc#:#acc_forward_mail#:#Inoltra Mail acc#:#acc_function#:#Funzione -acc#:#acc_last_rep_visited#:#Repository/Ultima Visita -acc#:#acc_saved_sorting#:#The sorting has been saved.###07 02 2020 new variable -acc#:#acc_sure_delete_documents_p#:#Are you sure you want to delete the selected documents?###07 02 2020 new variable -acc#:#acc_sure_delete_documents_s#:#Are you sure you want to delete the document?###07 02 2020 new variable -acc#:#acc_tbl_docs_action_add_criterion#:#Add Criterion###07 02 2020 new variable -acc#:#acc_tbl_docs_cell_not_criterion#:#No criterion assigned###07 02 2020 new variable -acc#:#acc_tbl_docs_head_created#:#Creation Date###07 02 2020 new variable -acc#:#acc_tbl_docs_head_criteria#:#Criteria###07 02 2020 new variable -acc#:#acc_tbl_docs_head_last_change#:#Last Change###07 02 2020 new variable -acc#:#acc_tbl_docs_head_sorting#:#Sorting###07 02 2020 new variable -acc#:#acc_tbl_docs_head_title#:#Title###07 02 2020 new variable -acc#:#acc_tbl_docs_title#:#Documents###07 02 2020 new variable +acc#:#acc_last_rep_visited#:#Archivio/Ultima Visita +acc#:#acc_saved_sorting#:#L'ordinamento è stato salvato. +acc#:#acc_sure_delete_documents_p#:#Sei sicuro di voler cancellare i documenti selezionati? +acc#:#acc_sure_delete_documents_s#:#Sei sicuro di voler cancellare il documento? +acc#:#acc_tbl_docs_action_add_criterion#:#Aggiungi criterio +acc#:#acc_tbl_docs_cell_not_criterion#:#Nessun criterio assegnato +acc#:#acc_tbl_docs_head_created#:#Data di creazione +acc#:#acc_tbl_docs_head_criteria#:#Criteri +acc#:#acc_tbl_docs_head_last_change#:#Ultima modifica +acc#:#acc_tbl_docs_head_sorting#:#Ordinamento +acc#:#acc_tbl_docs_head_title#:#Titolo +acc#:#acc_tbl_docs_title#:#Documenti acc#:#acc_tree_off#:#Contrai albero acc#:#acc_tree_on#:#Espandi albero -adm#:#adm_acc_ctrl_cpt_desc#:#Display the link to your Accessibility document in the footer of your installation.###29 07 2022 new variable -adm#:#adm_acc_ctrl_cpt_enable#:#Accessibility Link in Footer###29 07 2022 new variable -adm#:#adm_accessibility_contacts#:#Accessibility Point of Contact###07 02 2020 new variable -adm#:#adm_accessibility_contacts_info#:#Contacts for reporting accessibility issues in the footer link. Comma separated list of account logins.###07 02 2020 new variable +adm#:#adm_acc_ctrl_cpt_desc#:#Se attivato, il collegamento per il concetto di controllo dell'accessibilità viene visualizzato nel piè di pagina. +adm#:#adm_acc_ctrl_cpt_enable#:#Abilita il concetto di controllo dell'accessibilità +adm#:#adm_accessibility_contacts#:#Punto di contatto Accessibilità +adm#:#adm_accessibility_contacts_info#:#Contatti per segnalare problemi di accessibilità nel collegamento a piè di pagina. Elenco separato da virgole di accessi all'account. adm#:#adm_awrn_support_contacts_info#:#Sono elencati tutti i contatti supporto tecnico. Gli utenti sono definiti come contatti di supporto tecnico nella sezione "Impostazioni generali"> "Informazione di contatto". adm#:#adm_support_contacts#:#Supporto tecnico adm#:#adm_support_contacts_info#:#Contatti di supporto utilizzati nel collegamento a piè di pagina e (se attivato) nello strumento “Chi è online?”. Elenco di account di accesso separato da virgole. -administration#:#adm_achievements#:#Achievements###07 02 2020 new variable +administration#:#adm_achievements#:#Risultati administration#:#adm_adm_role_protect#:#Proteggere il ruolo di Amministratore administration#:#adm_adm_role_protect_info#:#Se abilitato, solo l'amministratore è autorizzato a (de)assegnare gli utenti da/per il ruolo di amministratore. -administration#:#adm_auth_login#:#Authentication Login###29 07 2022 new variable -administration#:#adm_auth_reg#:#Authentication Registration###29 07 2022 new variable -administration#:#adm_communication#:#Communication###07 02 2020 new variable -administration#:#adm_extending_ilias#:#Extending ILIAS###07 02 2020 new variable +administration#:#adm_auth_login#:#Login di autenticazione +administration#:#adm_auth_reg#:#Registrazione di autenticazione +administration#:#adm_communication#:#Comunicazione +administration#:#adm_extending_ilias#:#Estendere ILIAS administration#:#adm_external_setting_edit#:#Modifica impostazioni administration#:#adm_hide#:#Nascosto nelle Impostazioni del Form administration#:#adm_hide_tabs#:#Tabelle nascoste administration#:#adm_https#:#HTTPS administration#:#adm_imprint#:#Imprimere administration#:#adm_imprint_inactive#:#L'imprinting non è attivo e gli utenti non sono in grado di accedervi. -administration#:#adm_layout_and_navigation#:#Layout and Navigation###07 02 2020 new variable -administration#:#adm_legal_regulations#:#Legal Regulations###26 08 2024 new variable +administration#:#adm_layout_and_navigation#:#Layout e Navigazione +administration#:#adm_legal_regulations#:#Legal Regulations###30 04 2024 new variable administration#:#adm_locale#:#Locale administration#:#adm_locale_info#:#Le impostazioni locali influenzano ad es. l'ordinamento nelle liste. Come esempio si veda nl_NL o de_DE. Localizzazioni multiple devono essere separate da una virgola. Sarà utilizzata la prima localizzazione valida. administration#:#adm_maintenance#:#Manutenzione @@ -100,7 +99,7 @@ administration#:#adm_missing_entries#:#Voci mancanti administration#:#adm_missing_entry_add#:#Aggiungi nuova voce administration#:#adm_missing_entry_add_action#:#Aggiungi administration#:#adm_nr_statements#:#Numero di affermazioni -administration#:#adm_personal_workspace#:#Personal Workspace###07 02 2020 new variable +administration#:#adm_personal_workspace#:#Scrivania Personale administration#:#adm_predefined_settings#:#Impostazioni Predefinite administration#:#adm_pub_section_domain_filter#:#Filtro per dominio administration#:#adm_pub_section_domain_filter_info#:#Filtri per dominio che consentono accesso anonimo. Immettere uno o più domini che consentono l’accesso anonimo. @@ -114,8 +113,8 @@ administration#:#adm_rep_tree_limit_grp_crs_info#:#Questo dipende da, ed automat administration#:#adm_rep_tree_only_cntr#:#Solo Container administration#:#adm_rep_tree_only_cntr_info#:#Sono elencate solo categorie, corsi e gruppi. administration#:#adm_rep_tree_presentation#:#Rappresentazione dell'albero delle Risorse -administration#:#adm_repository_and_objects#:#Repository and Objects###07 02 2020 new variable -administration#:#adm_search_and_find#:#Search and Find###07 02 2020 new variable +administration#:#adm_repository_and_objects#:#Repository e Oggetti +administration#:#adm_search_and_find#:#Ricerca / Trova administration#:#adm_show_comments_tagging_in_lists#:#Visualizza il numero di note, commenti e tag nella lista degli oggetti administration#:#adm_show_comments_tagging_in_lists_tags#:#Visualizzare i tag anziché il numero administration#:#adm_table#:#Tabella @@ -125,11 +124,11 @@ administration#:#adm_user_starting_point_info#:#Selezionare la pagina o l'oggett administration#:#adm_user_starting_point_inherit#:#Utilizza impostazioni standard administration#:#adm_user_starting_point_inherit_info#:#Verranno utilizzate completamente le impostazioni effettuate dall’amministratore della piattaforma. administration#:#adm_user_starting_point_invalid_info#:#Questa funzione non è ancora attiva. -administration#:#adm_user_starting_point_object#:#Oggetto repository +administration#:#adm_user_starting_point_object#:#Oggetto archivio administration#:#adm_user_starting_point_personal#:#Impostazioni personali administration#:#adm_user_starting_point_personal_info#:#Se attivato gli utenti possono selezionare la propria pagina iniziale. administration#:#adm_user_starting_point_ref_id#:#Id di riferimento -administration#:#adm_user_starting_point_ref_id_info#:#Open the object that you would like to use as Personal Starting Point. Please copy the number directly following "ref_id=" in the browser bar into the textinput field. +administration#:#adm_user_starting_point_ref_id_info#:#Apri l'oggetto che desideri utilizzare come punto di partenza personale. Si prega di copiare il numero direttamente dopo "ref_id=" nella barra del browser nel campo di immissione del testo. administration#:#adm_value#:#Valore prefefinito administration#:#allow_change_loginname#:#Permetti la modifica dei Nomi di Login nel 'Profilo Personale' administration#:#analysis_options#:#Opzioni di analisi @@ -163,7 +162,7 @@ administration#:#auth_auth_mode_determination#:#Controllo del metodo di Autentic administration#:#auth_automatic#:#Sequenza Fissa administration#:#auth_by_user#:#dall'Utente administration#:#auth_kind_determination#:#Tipo di Determinazione -administration#:#auth_mode_default_change_info#:#Changing the default authentication method affects all user accounts configured to use the default authentication method. If the selected default method (e.g., Shibboleth, SAML, SOAP, ...) does not support or is not configured to allow fallback to local ILIAS authentication, affected users may no longer be able to log in. To avoid this, please ensure that local fallback authentication is activated in the configuration of the selected method, or that the authentication method stored for affected user accounts is manually changed.###29 10 2025 new variable +administration#:#auth_mode_default_change_info#:#Changing the default authentication method affects all user accounts configured to use the default authentication method. If the selected default method (e.g., Shibboleth, SAML, SOAP, ...) does not support or is not configured to allow fallback to local ILIAS authentication, affected users may no longer be able to log in. To avoid this, please ensure that local fallback authentication is activated in the configuration of the selected method, or that the authentication method stored for affected user accounts is manually changed.###20 05 2025 new variable administration#:#auth_mode_determination_info#:#Scegliere se l'utente deve selezionare il metodo di autentificazione o se questo è gestito automaticamente (con sequenza fissa di metodi di autentificazione). administration#:#clean#:#Ripulisci administration#:#clean_desc#:#Elimina i riferimenti e le voci dell'albero non valide e compatta la struttura dell'albero. @@ -192,10 +191,10 @@ administration#:#language_default_entries#:#(Campi standard) administration#:#language_delete_local_additions#:#Cancella le integrazioni locali nel database administration#:#language_delete_local_additions_info#:#Elimina tutte le voci aggiunte localmente al database. administration#:#language_error_clear_local#:#I cambiamenti effettuati non sono stati cancellati dal database! -administration#:#language_error_delete_local#:#The local language file can't be deleted! -administration#:#language_error_local_missed#:#The local language file does not exist! +administration#:#language_error_delete_local#:#Il file della lingua locale non può essere cancellato! +administration#:#language_error_local_missed#:#Il file della lingua locale non esiste! administration#:#language_error_read_local#:#Il file lingua locale non esiste o non può essere letto! -administration#:#language_error_write_global#:#The global language file can't be written! +administration#:#language_error_write_global#:#Il file della lingua globale non può essere scritto! administration#:#language_export_file#:#Esportare il file lingua administration#:#language_file_imported#:#Il file lingua %s è stato importato. administration#:#language_file_scope#:#Estensione del file lingua @@ -204,18 +203,18 @@ administration#:#language_former_file_equal#:#Il file <b>%s</b> è identico al f administration#:#language_former_file_missing#:#Il file <b>%s</b> non esiste. administration#:#language_import_file#:#Importazione file lingua administration#:#language_load_local_changes#:#Caricare il file lingua locale nel database -administration#:#language_load_local_changes_info#:#Load the file lang/customizing/ilias_%s_lang.local to the database. New entries of this file are added to the database and existing entries are overwritten. +administration#:#language_load_local_changes_info#:#Carica il file Customizing/global/lang/ilias_%s_lang.local sul database. Nuovi campi su questo file verranno aggiunti al database e i campi esistenti verranno sovrascritti. administration#:#language_loaded_local#:#Il file lingua locale è stato caricato nel database. -administration#:#language_local_file_deleted#:#The local language file was deleted. +administration#:#language_local_file_deleted#:#Il file di lingua locale è stato cancellato. administration#:#language_maintain#:#Manutenzione administration#:#language_maintain_local_changes#:#Manutenzione delle modifiche locali administration#:#language_maintenance#:#Manutenzione Lingua -administration#:#language_merge_local_changes#:#Merge local changes into the global language file +administration#:#language_merge_local_changes#:#Unisci i cambiamenti locali al file di lingua locale administration#:#language_merge_local_changes_info#:#Unisci alfabeticamente tutti le modifiche e le integrazioni locali nel file di lingua standard lang/ilias_%s.lang. Il server web deve disporre dell'autorizzazione di scrittura per questo file. -administration#:#language_merged_global#:#The local changes were merged into the global language file. +administration#:#language_merged_global#:#I cambiamenti locali sono stati uniti al file di lingua globale administration#:#language_mode_existing#:#Campi esistenti administration#:#language_mode_existing_delete#:#Cancellare i dati precedentemente immessi -administration#:#language_mode_existing_delete_info#:#Delete all entries in the database before importing the file.<br /> WARNING: The imported language file should be complete, otherwise there will be undefined language variables. If that happens, switch to the tab "Maintain" and choose "Clear local changes in the database". +administration#:#language_mode_existing_delete_info#:#Eliminare tutte le voci nel database prima di importare il file.<br /> ATTENZIONE: il file di lingua importato deve essere completo, altrimenti ci saranno variabili di lingua non definite. Se ciò accade, passa alla scheda "Mantieni" e scegli "Cancella modifiche locali nel database". administration#:#language_mode_existing_keepall#:#Mantenere tutti i campi immessi administration#:#language_mode_existing_keepall_info#:#Importa solo le nuove voci che ancora non esistono nel database. administration#:#language_mode_existing_keepnew#:#Mantenere tutte le variazioni effettuate @@ -225,15 +224,15 @@ administration#:#language_mode_existing_replace_info#:#Importa nuove voci e sost administration#:#language_note_translation#:#La modalità traduzione pagina si attiva separatamente per ogni lingua. E' necessario che l'utente abbia i permessi di scrittura e lettura nella sezione lingue. administration#:#language_process_maintenance#:#Processo di manutenzione administration#:#language_remove_local_file#:#Cancella il file di lingua locale -administration#:#language_remove_local_file_info#:#Remove the file lang/customizing/ilias_%s_lang.local and change the language status from "Installed With Local" to "Installed". The changes in the database are not touched. +administration#:#language_remove_local_file_info#:#Rimuovere il file Customizing/global/lang/ilias_%s_lang.local e modificare lo stato della lingua da "Installato con locale" a "Installato". Le modifiche nel database non vengono toccate. administration#:#language_save_dist#:#Backup del file di lingua standard administration#:#language_save_dist_failed#:#Il backup del file di lingua ILIAS standard non può essere scritto. administration#:#language_save_dist_info#:#Creare un backup del file di lingua ILIAS standard nella directory dei dati ILIAS. Questo aiuta dopo un aggiornamento ILIAS per trovare contrasti di proprie modifiche con variabili linguistiche aggiornate. administration#:#language_save_local_changes#:#Salvare tutti i cambiamenti nel file lingua locale -administration#:#language_save_local_changes_info#:#Save all locally added or changed database entries to the file lang/customizing/ilias_%s_lang.local and set the language status to "Installed With Local". The web server must have write permission in this folder. Please note that this file is the same for all clients of this installation. +administration#:#language_save_local_changes_info#:#Salva tutte le voci del database aggiunte o modificate localmente nel file Customizing/global/lang/ilias_%s_lang.local e imposta lo stato della lingua su "Installato con locale". Il server Web deve disporre dell'autorizzazione di scrittura in questa cartella. Notare che questo file è lo stesso per tutti i client di questa installazione. administration#:#language_saved_dist#:#Il backup del file di lingua ILIAS standard è stato creato. administration#:#language_scope_added#:#Solo integrazioni locali -administration#:#language_scope_added_info#:#Export all entries that are locally added in the database. This can be used to backup additional development entries before local changes are deleted on the tab "Maintain". +administration#:#language_scope_added_info#:#Esporta tutte le voci aggiunte localmente nel database. Questo può essere utilizzato per eseguire il backup di voci di sviluppo aggiuntive prima che le modifiche locali vengano eliminate nella scheda "Mantieni". administration#:#language_scope_commented#:#Visualizza solo Con commenti dal Manager Lingue administration#:#language_scope_conflicts#:#Modifiche locali e di aggiornamento administration#:#language_scope_dbremarks#:#Mostra solo voci con commenti in file di lingua @@ -242,16 +241,16 @@ administration#:#language_scope_equal#:#Uguale alla lingua di comparazione administration#:#language_scope_global#:#Tutti i campi administration#:#language_scope_global_info#:#Esporta tutte le voci del database di questa lingua. Questo può essere utilizzato per scopi di backup. administration#:#language_scope_local#:#Solo modifiche locali -administration#:#language_scope_local_info#:#Export all entries that are locally added or changed in the database. This is similar to the saving of a local language file on the tab "Maintain". +administration#:#language_scope_local_info#:#Esporta tutte le voci aggiunte o modificate localmente nel database. Questo è simile al salvataggio di un file della lingua locale nella scheda "Mantieni". administration#:#language_scope_merged#:#Modifiche locali inserite nel file di lingua globale -administration#:#language_scope_merged_info#:#Export the standard ILIAS language file with all local changes merged in alphabetically by module and identifier. This can be used to update the global language file on the ILIAS SVN server. +administration#:#language_scope_merged_info#:#Esporta il file della lingua standard ILIAS con tutte le modifiche locali unite in ordine alfabetico per modulo e identificatore. Questo può essere usato per aggiornare il file della lingua globale sul server ILIAS SVN. administration#:#language_scope_unchanged#:#Solo campi non modificati -administration#:#language_scope_unchanged_info#:#Export all default language entries that are not changed in the database. This is the opposite to "Local changes only". Both together are a complete backup of the current language in the database. +administration#:#language_scope_unchanged_info#:#Esporta tutte le voci della lingua predefinita che non sono state modificate nel database. Questo è l'opposto di "Solo modifiche locali". Entrambi insieme sono un backup completo della lingua corrente nel database. administration#:#language_settings#:#Impostazioni lingua administration#:#language_statistics#:#Statistiche -administration#:#language_translation#:#Page translation###29 10 2025 new variable +administration#:#language_translation#:#Page translation###28 11 2025 new variable administration#:#language_translation_enabled#:#Traduzione pagina abilitata -administration#:#language_variables_saved#:#The changes to the language variables were saved successfully.###29 07 2022 new variable +administration#:#language_variables_saved#:#Le modifiche alle variabili della lingua sono state salvate con successo. administration#:#log_scan#:#Scrivi nel file di log i risultati administration#:#log_scan_desc#:#Scrive i risultati nel file 'scanlog.log' nella cartella del client. administration#:#loginname_change_blocking_time#:#Tempo di Blocco per la Modifica dei Nomi di Login @@ -266,10 +265,10 @@ administration#:#obj_blga_desc#:#Impostazioni globali del Blog administration#:#obj_chta_desc#:#Amministrazione Chat administration#:#obj_excs#:#Esercizio administration#:#obj_excs_desc#:#Impostazioni di esercizio globale -administration#:#obj_gsfo#:#Footer###29 10 2025 new variable -administration#:#obj_gsfo_desc#:#Administrate Footer Layout and Content###29 10 2025 new variable -administration#:#obj_impr#:#Legal Notice###26 08 2024 new variable -administration#:#obj_impr_desc#:#Deployment of Legal Notice###26 08 2024 new variable +administration#:#obj_gsfo#:#Footer###28 11 2025 new variable +administration#:#obj_gsfo_desc#:#Administrate Footer Layout and Content###28 11 2025 new variable +administration#:#obj_impr#:#Legal Notice###30 04 2024 new variable +administration#:#obj_impr_desc#:#Deployment of Legal Notice###30 04 2024 new variable administration#:#obj_mds#:#Metadati administration#:#obj_mds_desc#:#Configurazione MetaDati administration#:#obj_otpl#:#Oggetti Templates @@ -278,10 +277,10 @@ administration#:#obj_prfa#:#Portfolio administration#:#obj_prfa_desc#:#Impostazioni del Portfolio globale administration#:#obj_taxs#:#Tassonomia administration#:#obj_taxs_desc#:#Impostazioni di tassonomia globale -administration#:#org_op_edit_user_accounts#:#Edit User Accounts###07 02 2020 new variable +administration#:#org_op_edit_user_accounts#:#Edita gli account utente administration#:#output_options#:#Opzioni di uscita administration#:#path_to_mkisofs#:#Cartella di mkisofs -administration#:#prg_export#:#Visible in Study Programmes###26 08 2024 new variable +administration#:#prg_export#:#Visible in Study Programmes###30 04 2024 new variable administration#:#purge_age_limit#:#Età limite administration#:#purge_age_limit_desc#:#Se questo campo ha un valore, verranno eliminati solo gli oggetti cancellati prima del numero di giorni corrispondente. administration#:#purge_count_limit#:#Numero limite @@ -321,124 +320,124 @@ administration#:#searching_invalid_refs#:#Ricerca dei riferimenti non validi... administration#:#searching_invalid_rolfs#:#Ricerca delle cartelle non valide... administration#:#searching_missing_objs#:#Ricerca degli oggetti mancanti... administration#:#searching_unbound_objs#:#Ricerca degli oggetti scollegati... -administration#:#skipped#:#saltato +administration#:#skipped#:#Saltato administration#:#start_scan#:#Avvio! administration#:#svn_path#:#Percorso: %s administration#:#svn_revision_current#:#Revisione attuale: %s administration#:#svn_revision_last_change#:#Ultima revisione modificata: %s administration#:#svn_root#:#Radice: %s administration#:#system_check_no_owner#:#Oggetti senza proprietario -administration#:#system_folder_info#:#Please choose an item from the administration main menu.###29 10 2025 new variable +administration#:#system_folder_info#:#Please choose an item from the administration main menu.###28 11 2025 new variable administration#:#systemcheck#:#Verifica del sistema administration#:#tree_corrupt#:#L'albero è corrotto! Puoi vedere i dettagli nel file di log. administration#:#user_criteria#:#Criterio di utente unico administration#:#user_criteria_desc#:#Criterio utente unico che viene utilizzato per l'importazione dei risultati dell'importazione/esportazione. Ciò è necessario per identificare gli utenti identici su diversi sistemi ILIAS. administration#:#usr_loginname_history_info#:#L'utente ha cambiato il proprio login il %s. Il precedente login era: %s. -administration#:#vc_information#:#Version Control Information +administration#:#vc_information#:#Informazione di controllo versione administration#:#vc_information_not_determined#:#ILIAS non ha potuto determinare alcuna informazione sul controllo della versione. administration#:#view_last_log#:#Vedi l'ultimo log administration#:#view_log#:#Vedi dettagli -adn#:#action_confirm_delete#:#Delete Notifications###26 08 2024 new variable -adn#:#action_confirm_delete_msg#:#Would you like to delete the following notification(s)?###26 08 2024 new variable -adn#:#administrative_notification#:#Administrative Notifications###29 07 2022 new variable -adn#:#administrative_notification_description#:#Provide system-wide notifications in topbar of ILIAS###29 07 2022 new variable -adn#:#btn_cancel#:#Cancel###29 07 2022 new variable -adn#:#btn_delete#:#Delete###29 07 2022 new variable -adn#:#btn_delete_confirm#:#Would you like to delete this Notification?###29 07 2022 new variable -adn#:#btn_duplicate#:#Duplicate###26 08 2024 new variable -adn#:#btn_edit#:#Edit###29 07 2022 new variable -adn#:#btn_reset#:#Reset###29 07 2022 new variable -adn#:#btn_reset_confirm#:#Would you like to reset this Notification for all Users?###29 07 2022 new variable -adn#:#common_actions#:#Actions###29 07 2022 new variable -adn#:#common_add_msg#:#Add Notification###29 07 2022 new variable -adn#:#main#:#Notifications###29 07 2022 new variable -adn#:#msg_body#:#Body###29 07 2022 new variable -adn#:#msg_body_info#:#Body of the Notification###29 07 2022 new variable -adn#:#msg_dismissable#:#Dismissable###29 07 2022 new variable -adn#:#msg_dismissable_info#:#Notifications can be closed by the user. The user won't see this notification again.###29 07 2022 new variable -adn#:#msg_display_date_end#:#Displayed Until###29 07 2022 new variable -adn#:#msg_display_date_start#:#Displayed From###29 07 2022 new variable -adn#:#msg_error_false_date_configuration#:#Can't create a notification with this configuration of dates. The event must be within the display time.###29 07 2022 new variable -adn#:#msg_event_date_end#:#Event Ends###29 07 2022 new variable -adn#:#msg_event_date_start#:#Event Starts###29 07 2022 new variable -adn#:#msg_form_title#:#Notification###29 07 2022 new variable -adn#:#msg_has_language_limitation#:#Limited to selected languages###26 08 2024 new variable -adn#:#msg_has_language_limitation_info#:#Only selected languages will see the notification.###26 08 2024 new variable -adn#:#msg_languages#:#Languages###26 08 2024 new variable -adn#:#msg_limit_to_roles#:#Role-sensitive Presentation###29 07 2022 new variable -adn#:#msg_limit_to_roles_info#:#Only the selected roles will see the notification.###29 07 2022 new variable -adn#:#msg_limited_to_role_ids#:#Roles###29 07 2022 new variable -adn#:#msg_permanent#:#Display###29 07 2022 new variable -adn#:#msg_permanent_info#:#Display Notifications permanently or temporarily###29 07 2022 new variable -adn#:#msg_permanent_no#:#Show Temporarily###29 07 2022 new variable -adn#:#msg_permanent_yes#:#Show Permanently###29 07 2022 new variable -adn#:#msg_presentation#:#Presentation###26 08 2024 new variable -adn#:#msg_show_to_all_languages#:#Show to all languages###26 08 2024 new variable -adn#:#msg_show_to_all_roles#:#Show to all roles###26 08 2024 new variable -adn#:#msg_show_to_all_roles_info#:#All users even when not logged-in will see notification.###26 08 2024 new variable -adn#:#msg_success_created#:#Notification created###29 07 2022 new variable -adn#:#msg_success_deleted#:#Notification sucessfully deleted###29 07 2022 new variable -adn#:#msg_success_duplicated#:#Notification sucessfully duplicated###26 08 2024 new variable -adn#:#msg_success_reset#:#Notification reset###29 07 2022 new variable -adn#:#msg_success_updated#:#Notification updated###29 07 2022 new variable -adn#:#msg_table_title#:#Notifications###29 07 2022 new variable -adn#:#msg_title#:#Headline###29 07 2022 new variable -adn#:#msg_title_info#:#Short Headline of the Notification###29 07 2022 new variable -adn#:#msg_type#:#Importance###29 07 2022 new variable -adn#:#msg_type_0#:#Notice###29 07 2022 new variable -adn#:#msg_type_1#:#Notice###29 07 2022 new variable -adn#:#msg_type_2#:#Important###29 07 2022 new variable -adn#:#msg_type_3#:#Breaking News###29 07 2022 new variable -adn#:#msg_type_during_event#:#During Event###29 07 2022 new variable -adn#:#msg_type_info#:#the importance has an influence on the color representation of the notification###29 07 2022 new variable -adve#:#advanced_editing_excass_settings#:#Impostazioni di assegnazioni esercizio +adn#:#action_confirm_delete#:#Delete Notifications###28 11 2025 new variable +adn#:#action_confirm_delete_msg#:#Would you like to delete the following notification(s)?###28 11 2025 new variable +adn#:#administrative_notification#:#Administrative Notifications###30 04 2024 new variable +adn#:#administrative_notification_description#:#Fornisci notifiche a livello di sistema nella barra superiore di ILIAS +adn#:#btn_cancel#:#Annulla +adn#:#btn_delete#:#Cancella +adn#:#btn_delete_confirm#:#Vuoi eliminare questa notifica? +adn#:#btn_duplicate#:#Duplicate###30 04 2024 new variable +adn#:#btn_edit#:#Modifica +adn#:#btn_reset#:#Reset +adn#:#btn_reset_confirm#:#Vuoi reimpostare questa notifica per tutti gli utenti? +adn#:#common_actions#:#Azioni +adn#:#common_add_msg#:#Aggiungi Notifiche +adn#:#main#:#Notifiche +adn#:#msg_body#:#Corpo +adn#:#msg_body_info#:#Corpo Notifica +adn#:#msg_dismissable#:#Ignorabile +adn#:#msg_dismissable_info#:#Le notifiche possono essere chiuse dall'utente. L'utente non vedrà più questa notifica. +adn#:#msg_display_date_end#:#Visibile fino al +adn#:#msg_display_date_start#:#Visibile dal +adn#:#msg_error_false_date_configuration#:#Impossibile creare una notifica con questa configurazione di date. L'evento deve rientrare nel tempo di visualizzazione. +adn#:#msg_event_date_end#:#Termine Evento +adn#:#msg_event_date_start#:#Inizio Evento +adn#:#msg_form_title#:#Notifiche +adn#:#msg_has_language_limitation#:#Limited to selected languages###30 04 2024 new variable +adn#:#msg_has_language_limitation_info#:#Only selected languages will see the notification.###30 04 2024 new variable +adn#:#msg_languages#:#Languages###30 04 2024 new variable +adn#:#msg_limit_to_roles#:#Presentazione dipendente dal ruolo +adn#:#msg_limit_to_roles_info#:#Solo i ruoli selezionati vedranno la notifica. +adn#:#msg_limited_to_role_ids#:#Ruoli +adn#:#msg_permanent#:#Visualizza +adn#:#msg_permanent_info#:#Visualizza notifiche in modo permanente o temporaneo +adn#:#msg_permanent_no#:#Mostra temporaneamente +adn#:#msg_permanent_yes#:#Mostra permanentemente +adn#:#msg_presentation#:#Presentation###31 08 2022 new variable +adn#:#msg_show_to_all_languages#:#Show to all languages###30 04 2024 new variable +adn#:#msg_show_to_all_roles#:#Show to all roles###31 08 2022 new variable +adn#:#msg_show_to_all_roles_info#:#All users even when not logged-in will see notification.###31 08 2022 new variable +adn#:#msg_success_created#:#Notifica creata +adn#:#msg_success_deleted#:#Notifica cancellata +adn#:#msg_success_duplicated#:#Notification sucessfully duplicated###30 04 2024 new variable +adn#:#msg_success_reset#:#Notifica resettata +adn#:#msg_success_updated#:#Notifica aggiornata +adn#:#msg_table_title#:#Notifiche +adn#:#msg_title#:#Titolo +adn#:#msg_title_info#:#Breve titolo della notifica +adn#:#msg_type#:#Importanza +adn#:#msg_type_0#:#Avviso +adn#:#msg_type_1#:#Avviso +adn#:#msg_type_2#:#Importante +adn#:#msg_type_3#:#Breaking News +adn#:#msg_type_during_event#:#During Event +adn#:#msg_type_info#:#l'importanza ha un'influenza sulla rappresentazione del colore della notifica +adve#:#advanced_editing_excass_settings#:#Impostazioni esercizi (consegna testi) adve#:#advanced_editing_tst_editing#:#Editor di pagina per ulteriori contenuti delle domande -adve#:#advanced_editing_tst_editing_desc#:#Aktivates ILIAS Page Eidotr for feedback and hint text editing. +adve#:#advanced_editing_tst_editing_desc#:#Attiva ILIAS Page Editor per il feedback e la modifica del testo dei suggerimenti. adve#:#adve_activation#:#Attivazione adve#:#adve_auto_url_linking#:#URL collegamento automatico -adve#:#adve_auto_url_linking_info#:#Cerca di identificare gli URL come "http://.." nei paragrafi del testo e crea automaticamente i link intorno a loro. -adve#:#adve_autosave#:#Automatic Saving Intervall###29 07 2022 new variable -adve#:#adve_autosave_info#:#Auto-save for text content. With shorter intervals, the server load increases and the performance of the system decreases.###29 07 2022 new variable -adve#:#adve_autosave_info_min_10#:#Please choose a value of minimal 10 seconds if you activated this feature.###29 07 2022 new variable -adve#:#adve_blocking_mode#:#Modifica blocco -adve#:#adve_excass_settings#:#Assegnazioni di esercizio -adve#:#adve_grp_copa#:#Content Pages -adve#:#adve_grp_frm#:#Forums###29 07 2022 new variable +adve#:#adve_auto_url_linking_info#:#ILIAS analizza il testo e identifica gli URL (p.es. "http://..") creando automaticamente i collegamenti ipertestuali (link). +adve#:#adve_autosave#:#Intervallo di salvataggio automatico +adve#:#adve_autosave_info#:#Salvataggio automatico per il contenuto di testo. Con intervalli più brevi, il carico del server aumenta e le prestazioni del sistema diminuiscono. +adve#:#adve_autosave_info_min_10#:#Scegli un valore minimo di 10 secondi se hai attivato questa funzione. +adve#:#adve_blocking_mode#:#Blocco modifiche +adve#:#adve_excass_settings#:#Unità esercizi +adve#:#adve_grp_copa#:#Pagine Contenuto +adve#:#adve_grp_frm#:#Forums###31 03 2023 new variable adve#:#adve_grp_glo#:#Glossari -adve#:#adve_grp_lm#:#ILIAS Moduli E-learning -adve#:#adve_grp_rep#:#Pagine del Repository -adve#:#adve_grp_scorm#:#Editing SCORM +adve#:#adve_grp_lm#:#Moduli E-learning ILIAS +adve#:#adve_grp_rep#:#Pagine dell'Archivio +adve#:#adve_grp_scorm#:#Moduli SCORM adve#:#adve_grp_test#:#Test e Valutazione adve#:#adve_grp_wiki#:#Wiki adve#:#adve_minutes#:#Minuti -adve#:#adve_minutes_info#:#Minuti di inattività prima della scadenza di un blocco di modifica e una pagina può essere modificata da un altro utente. -adve#:#adve_page_editor_settings#:#ILIAS Impostazioni Editor di Pagina -adve#:#adve_pe_general#:#Generale +adve#:#adve_minutes_info#:#Minuti di inattività prima della scadenza di un blocco di modifica, successivamente la pagina può essere modificata da un altro utente. +adve#:#adve_page_editor_settings#:#Impostazioni Editor di Pagina ILIAS +adve#:#adve_pe_general#:#Impostazioni adve#:#adve_rte_settings#:#Impostazioni Rich Text Editor adve#:#adve_text_content_features#:#Menu contenuto del testo -adve#:#adve_use_physical#:#Utilizzare b/i/u invece di str/emp/imp +adve#:#adve_use_physical#:#Utilizzare <b>B</b>|<i>I</i>|<u>U</u> invece di str|emp|imp adve#:#adve_use_physical_info#:#Questa impostazione sostituisce i semantici pulsanti di stile "strong", "emphatic" e "important" con "b" (grassetto), "i" (corsivo) e "u" (sottolineato). Si prega di notare, che questo potrebbe causare incoerenze se l'editor di stile è utilizzato e altri attributi fisici sono assegnati alle classi di stile strong/emphatic/important. adve#:#adve_use_tiny_mce#:#Abilita TinyMCE come Editor WYSIWYG (What You See Is What You Get) -assessment#:#activate_logging#:#Attiva il logging del Test e Valutazione -assessment#:#activate_manual_scoring#:#Enable Manual Scoring###28 10 2024 new variable -assessment#:#activate_manual_scoring_desc#:#Enables manual Scoring for all question types.###28 10 2024 new variable -assessment#:#addSuggestedSolution#:#Aggiungi soluzione suggerita -assessment#:#add_answers#:#Add Antworten -assessment#:#add_circle#:#Aggiungi area circolare -assessment#:#add_gap#:#Aggiungi testo vuoto +assessment#:#activate_logging#:#Activate Test and Assessment Logging###28 11 2025 new variable +assessment#:#activate_manual_scoring#:#Enable Manual Scoring###28 11 2025 new variable +assessment#:#activate_manual_scoring_desc#:#Enables manual Scoring for all question types.###28 11 2025 new variable +assessment#:#addSuggestedSolution#:#Contenuti per il ripasso +assessment#:#add_answers#:#Aggiungi risposte +assessment#:#add_circle#:#Aggiungi cerchio +assessment#:#add_gap#:#Aggiungi lacuna di testo assessment#:#add_imagemap#:#Importa immagine Mappa assessment#:#add_poly#:#Aggiungi area poligonale assessment#:#add_rect#:#Aggiungi area rettangolare -assessment#:#add_users#:#Add Users###28 10 2024 new variable +assessment#:#add_users#:#Add Users###28 11 2025 new variable assessment#:#additional_rating_info#:#Si prega di notare che i valori indicati qui sono espressi in percentuali e questi devono aggiungere fino a 100. assessment#:#advanced_rating#:#Classificazione avanzata -assessment#:#advanced_rating_info#:#The advanced rating is only available if a unit is assigned to the result. +assessment#:#advanced_rating_info#:#La classificazione avanzata è disponibile solo se al risultato è assegnata un'unità. assessment#:#all_available_question_pools#:#Tutti le raccolte di domande disponibili assessment#:#all_participants#:#Tutti i partecipanti assessment#:#allow_images#:#Supporto immagine di risposte assessment#:#allowedextensions#:#Estensioni di file ammessi assessment#:#allowedextensions_info#:#Inserisci una lista di estensioni di file separate da una virgola, se vuoi restringere il caricamento ad un insieme di estensioni (ad esempio odt,xls,doc). -assessment#:#already_added_extra_time#:#already added: %s min###28 10 2024 new variable +assessment#:#already_added_extra_time#:#already added: %s min###28 11 2025 new variable assessment#:#analyze_errortext#:#Analisi del testo di errore assessment#:#answer#:#Risposta assessment#:#answer_characters#:#caratteri consentiti, immesso il numero di caratteri: @@ -446,7 +445,7 @@ assessment#:#answer_image#:#Immagine di risposta assessment#:#answer_is_not_correct_but_positive#:#Hai ricevuto dei punti per la tua risposta che non è quella esatta ma è accettabile. assessment#:#answer_is_right#:#La soluzione è corretta. assessment#:#answer_is_wrong#:#La soluzione è sbagliata. -assessment#:#answer_of#:#Answer of###07 02 2020 new variable +assessment#:#answer_of#:#Risposta di assessment#:#answer_options#:#Opzioni di risposte: assessment#:#answer_question#:#Risposta domanda assessment#:#answer_text#:#Testo della risposta @@ -478,25 +477,25 @@ assessment#:#assQuestions#:#Domande assessment#:#assSingleChoice#:#Domanda a risposta singola assessment#:#assTextQuestion#:#Domanda a risposta libera assessment#:#assTextSubset#:#Domanda a sottoinsieme di testo -assessment#:#ass_cloze_fb_mode#:#Feedback Mode -assessment#:#ass_cloze_fb_mode_gap_answ#:#Answer specific Feedback -assessment#:#ass_cloze_fb_mode_gap_answ_info#:#For every gap separate feedbacks can be configured for different answers. -assessment#:#ass_cloze_fb_mode_gap_qst#:#Feedback per Gap -assessment#:#ass_cloze_fb_mode_gap_qst_info#:#For every gap a single feedback can be configured. -assessment#:#ass_cloze_gap_fb_gap_label#:#Gap %s: <i>%s</i> -assessment#:#ass_cloze_gap_fb_num_empty_label#:#Gap %s - No Input -assessment#:#ass_cloze_gap_fb_num_rangehit_label#:#Gap %s - Range Hit -assessment#:#ass_cloze_gap_fb_num_toohigh_label#:#Gap %s - Value too High -assessment#:#ass_cloze_gap_fb_num_toolow_label#:#Gap %s - Value too Low -assessment#:#ass_cloze_gap_fb_num_valuehit_label#:#Gap %s - Value Hit -assessment#:#ass_cloze_gap_fb_sel_empty_label#:#Gap %s - No Selection -assessment#:#ass_cloze_gap_fb_sel_opt_label#:#Gap %s - Select Option: <i>%s</i> -assessment#:#ass_cloze_gap_fb_txt_empty_label#:#Gap %s - No Input -assessment#:#ass_cloze_gap_fb_txt_match_label#:#Gap %s - Given Answer: <i>%s</i> -assessment#:#ass_cloze_gap_fb_txt_nomatch_label#:#Gap %s - Wrong Answer -assessment#:#ass_commented_questions_only#:#Only Commented Questions -assessment#:#ass_comments#:#Comments -assessment#:#ass_competence_respect_level_ordering#:#Si prega di notare che i limiti di competenza devono essere definiti in ordine ascendente in base ai livelli disponibili. +assessment#:#ass_cloze_fb_mode#:#Modalità Feedback +assessment#:#ass_cloze_fb_mode_gap_answ#:#Rispondi un Feedack specifico +assessment#:#ass_cloze_fb_mode_gap_answ_info#:#Per ogni intervallo possono essere definiti differenti Feedback per le varie risposte. +assessment#:#ass_cloze_fb_mode_gap_qst#:#Ordina Feedack per per intervallo. +assessment#:#ass_cloze_fb_mode_gap_qst_info#:#Per ogni intervallo un singolo Feedback può essere configurato. +assessment#:#ass_cloze_gap_fb_gap_label#:#Intervallo %s: <i>%s</i> +assessment#:#ass_cloze_gap_fb_num_empty_label#:#Gap %s - Nessun imput +assessment#:#ass_cloze_gap_fb_num_rangehit_label#:#Gap %s - Range selezionato +assessment#:#ass_cloze_gap_fb_num_toohigh_label#:#Gap %s - Valore troppo alto +assessment#:#ass_cloze_gap_fb_num_toolow_label#:#Gap %s - Valore troppo basso +assessment#:#ass_cloze_gap_fb_num_valuehit_label#:#Gap %s - Valore selezionato +assessment#:#ass_cloze_gap_fb_sel_empty_label#:#Gap %s - Nessuna selezione +assessment#:#ass_cloze_gap_fb_sel_opt_label#:#Gap %s - Opzioni selezionate: <i>%s</i> +assessment#:#ass_cloze_gap_fb_txt_empty_label#:#Gap %s - Nessun imput +assessment#:#ass_cloze_gap_fb_txt_match_label#:#Gap %s - Risposta data: <i>%s</i> +assessment#:#ass_cloze_gap_fb_txt_nomatch_label#:#Gap %s - Risposta sbagliata +assessment#:#ass_commented_questions_only#:#Solo domande commentate +assessment#:#ass_comments#:#Commenti +assessment#:#ass_competence_respect_level_ordering#:#Si prega di notare che i limiti di competenze devono essere definiti in ordine ascendente in base ai livelli disponibili. assessment#:#ass_completion_by_submission#:#Completato da presentazione assessment#:#ass_completion_by_submission_info#:#Se abilitato, la presentazione di almeno un file causa il completamento di questa domanda garantendo il punteggio massimo per questa domanda. Il punteggio può essere modificato manualmente in seguito. In cambiamento di questa impostazione non effetto sulle domande già presentate. assessment#:#ass_create_export_file_with_results#:#Crea file di esportazione dei test (inclusi i risultati dei partecipanti) @@ -514,7 +513,7 @@ assessment#:#ass_mc_sel_lim_exhausted_hint#:#Non selezionare più di %s delle %s assessment#:#ass_mc_sel_lim_hint#:#Selezionare %s di %s risposte! assessment#:#ass_mc_sel_lim_setting#:#Limitazione della risposta assessment#:#ass_mc_sel_lim_setting_desc#:#Con questa impostazione il numero di risposte scelte dai partecipanti può essere limitato. -assessment#:#ass_process_lock#:#Use Lockings during Test Passes +assessment#:#ass_process_lock#:#Utilizzare i blocchi durante i test assessment#:#ass_process_lock_desc#:#Senza l'uso di alcun meccanismo di bloccaggio, sono possibili le condizioni di gara. Questo può portare a risultati di test incoerenti. assessment#:#ass_process_lock_mode#:#Modalità di blocco durante un passaggio del test assessment#:#ass_process_lock_mode_db#:#Utilizza i blocchi tabella database @@ -531,23 +530,23 @@ assessment#:#assessment_pool_selection#:#Selezione libreria assessment#:#assessment_scoring_adjust#:#Abilita correzioni assessment#:#assessment_scoring_adjust_desc#:#Abilita la funzione di correzione per consentire modifiche alle domande in un test. assessment#:#autocomplete_error#:#Il tuo numero di completamento automatico è di grandi dimensioni, avrai risposte che hanno meno caratteri in modo che non verranno mai visualizzate. -assessment#:#autoparticipants_subtab#:#Participants###07 02 2020 new variable +assessment#:#autoparticipants_subtab#:#Partecipanti assessment#:#autosave#:#Salvataggio automatico assessment#:#autosave_failed#:#Autosalvataggio fallito! assessment#:#autosave_info#:#Se selezionato, le risposte vengono salvate in intervalli, senza interazione da parte dell'utente al fine di evitare la perdita di dati. (Vale solo per le domande selezionate.) assessment#:#autosave_ival#:#Intervallo assessment#:#autosave_success#:#Autosalvataggio avvenuto con successo... -assessment#:#autosavecontent#:#Autosave Content###29 07 2022 new variable +assessment#:#autosavecontent#:#Autosave Content assessment#:#average_reached_points#:#Punteggio medio raggiunto assessment#:#back_to_objective_container#:#Vai a corso -assessment#:#backtocallingpage#:#Back to the question page###29 07 2022 new variable -assessment#:#backtocallingpool#:#Back to the question pool###29 07 2022 new variable +assessment#:#backtocallingpage#:#Back to the question page###29 06 2022 new variable +assessment#:#backtocallingpool#:#Back to the question pool###29 06 2022 new variable assessment#:#backtocallingtest#:#Torna al test assessment#:#baseunit#:#Unità base -assessment#:#broken_test#:#Broken Test###29 10 2025 new variable -assessment#:#bulkedit_author#:#Set Author###28 10 2024 new variable -assessment#:#bulkedit_lifecycle#:#Set Lifecycle###28 10 2024 new variable -assessment#:#bulkedit_taxonomies#:#Set Taxonomies###28 10 2024 new variable +assessment#:#broken_test#:#Broken Test###28 11 2025 new variable +assessment#:#bulkedit_author#:#Set Author###28 11 2025 new variable +assessment#:#bulkedit_lifecycle#:#Set Lifecycle###28 11 2025 new variable +assessment#:#bulkedit_taxonomies#:#Set Taxonomies###28 11 2025 new variable assessment#:#cancel_test#:#Sospendi il test assessment#:#cannot_edit_marks#:#Ci sono utenti che hanno gia' eseguito il test. E' possibile solamente modificare i voti se la data del report e' stata abilitata ma non e' ancora stata raggiunta. assessment#:#cannot_edit_test#:#Non hai l'autorizzazione per modificare il test! @@ -562,15 +561,15 @@ assessment#:#change_adm_categories_not_allowed#:#Non hai il permesso riguardo qu assessment#:#checkbox_checked#:#Selezionato assessment#:#checkbox_unchecked#:#Non selezionato assessment#:#circle#:#Circonferenza -assessment#:#circle_click_center#:#Per favore clicca al centro dell& -assessment#:#circle_click_circle#:#Per favore clicca nel punto esterno della circonferenza dell& -assessment#:#client_ip_range#:#Client IP Range###28 10 2024 new variable +assessment#:#circle_click_center#:#Fare clic sul centro dell'area desiderata. +assessment#:#circle_click_circle#:#Fare clic su un punto circolare dell'area desiderata. +assessment#:#client_ip_range#:#Client IP Range###28 11 2025 new variable assessment#:#clientip#:#IP cliente -assessment#:#close_text_hint#:#Puoi definire uno spazio vuoto inserendo i tag [gap][/gap] nella posizione che desideri. Premi il pulsante & -assessment#:#cloze_answer_text_info#:#Spaces preceding or following the answer text will be deleted when the form is saved.###26 08 2024 new variable +assessment#:#close_text_hint#:#Per aggiungere un nuovo spazio, imposta il cursore sulla posizione desiderata e utilizza il menu a discesa "Spazio vuoto". Le sezioni di modifica corrispondenti verranno visualizzate di seguito. Puoi anche modificare gli spazi facendo clic sugli spazi all'interno del testo degli spazi. +assessment#:#cloze_answer_text_info#:#Spaces preceding or following the answer text will be deleted when the form is saved.###28 11 2023 new variable assessment#:#cloze_fixed_textlength#:#Lunghezza del campo di testo assessment#:#cloze_fixed_textlength_description#:#Se si inserisce un valore maggiore di 0 tutte le mancanze di testo e di numero avranno quella lunghezza. -assessment#:#cloze_gap_size_info#:#If you enter a value greater than 0, this gap text field will be created with the fixed length of this value. If you do not enter a value the gap text fiel will be created with the value of the global fixed length. +assessment#:#cloze_gap_size_info#:#Se si immette un valore maggiore di 0, questo campo di testo spazio verrà creato con la lunghezza fissa di questo valore. Se non si immette un valore, il campo di testo del gap verrà creato con il valore della lunghezza fissa globale. assessment#:#cloze_text#:#Testo corrispondente assessment#:#cloze_textgap_case_insensitive#:#No Maiuscole/minuscole assessment#:#cloze_textgap_case_sensitive#:#Maiuscole/minuscole @@ -579,17 +578,17 @@ assessment#:#code#:#Codice assessment#:#codebase#:#Base dei codici assessment#:#concatenation#:#Concatenazione assessment#:#conf_delete_pass#:#Vuoi davvero cancellare il passaggio? -assessment#:#confirm_log_deletion#:#Are you sure, you want to delete the selected log entries? You will not be able to recover the deleted entries.###26 08 2024 new variable -assessment#:#confirm_sync_questions#:#La domanda, che & +assessment#:#confirm_log_deletion#:#Are you sure, you want to delete the selected log entries? You will not be able to recover the deleted entries.###28 11 2025 new variable +assessment#:#confirm_sync_questions#:#La domanda che hai modificato è una copia che è stata creata per l'uso con il test attivo. Vuoi cambiare anche l'originale della domanda? assessment#:#coordinates#:#Coordinate assessment#:#copy_and_link_to_questionpool#:#Copiare e collegare alla libreria di domande assessment#:#copy_no_questions_selected#:#Per favore selezionare almeno una domanda da copiare. assessment#:#copy_questions_success#:#Tutte le domande sono state copiate. -assessment#:#correct_answers#:#Correggi risposte +assessment#:#correct_answers#:#Correggi risposte: assessment#:#counter#:#Contatore assessment#:#create_gaps#:#Crea uno spazio vuoto assessment#:#create_new#:#Crea nuova -assessment#:#created#:#Created###28 10 2024 new variable +assessment#:#created#:#Created###28 11 2025 new variable assessment#:#customstyle#:#Stile personalizzato assessment#:#dashboard_tab#:#Dashboard assessment#:#definition#:#Definizione @@ -600,15 +599,15 @@ assessment#:#deleteSuggestedSolution#:#Rimuovere la soluzione proposta assessment#:#delete_all_user_data_confirmation#:#Vuoi cancellare i dati di test di tutti gli utenti? assessment#:#delete_image_header#:#Cancella immagine assessment#:#delete_image_question#:#Vuoi davvero cancellare l'immagine? -assessment#:#delete_mark_confirmation#:#Are you sure you want to delete the following mark?###29 10 2025 new variable -assessment#:#delete_participants_no_valid_participants_selected#:#Test results already exist for the selected participant(s). They therefore cannot be removed.###29 10 2025 new variable -assessment#:#delete_result_no_valid_participants_selected#:#There are no test results for the selected participants, so they cannot be removed.###29 10 2025 new variable -assessment#:#delete_selected_user_data_confirmation#:#Sei sicuro di voler eliminare tutti i dati del test degli utenti selezionati? +assessment#:#delete_mark_confirmation#:#Are you sure you want to delete the following mark?###28 11 2025 new variable +assessment#:#delete_participants_no_valid_participants_selected#:#Test results already exist for the selected participants, so they cannot be removed.###28 11 2025 new variable +assessment#:#delete_result_no_valid_participants_selected#:#There are no test results for the selected participants, so they cannot be removed.###28 11 2025 new variable +assessment#:#delete_selected_user_data_confirmation#:#Are you sure you want to remove the test data of the selected users?###28 11 2025 new variable assessment#:#delete_user_data#:#Elimina del test tutti i dati degli utenti selezionati assessment#:#description_maxchars#:#Se in questo campo testo non viene inserito un valore, non ci sara' limite alle dimensioni della risposta. -assessment#:#detail_ending_time_reached#:#Il tempo disponibile per l& -assessment#:#detail_max_processing_time_reached#:#Hai raggiunto il tempo massimo consentito per l& -assessment#:#detail_starting_time_not_reached#:#Non & +assessment#:#detail_ending_time_reached#:#Il tempo assegnato per questo test è finito. Il test non era disponibile da %s +assessment#:#detail_max_processing_time_reached#:#Hai raggiunto il tempo di elaborazione massimo consentito del test! +assessment#:#detail_starting_time_not_reached#:#Non hai raggiunto l'ora di inizio del test. Il test sarà disponibile su %s assessment#:#detailed_evaluation#:#Statistica dettagliata assessment#:#detailed_evaluation_for#:#Statistica dettagliata per %s assessment#:#detailed_evaluation_missing_active_id#:#Devi richiamare la statistica di un determinato partecipante! @@ -616,46 +615,46 @@ assessment#:#detailed_evaluation_show#:#Mostra la valutazione dettagliata assessment#:#detailed_output_printview#:#Output in dettaglio con visione domande in formato stampa assessment#:#detailed_output_solutions#:#Output in dettaglio con visione risposte assessment#:#direct_feedback#:#Controlla la soluzione -assessment#:#discard_answer#:#Discard Answer -assessment#:#discard_answer_confirmation#:#Your answer will be finally and completly discarded. The question keeps as unanswered until you submit another answer.<br /><br />Would you really like to discard your answer? +assessment#:#discard_answer#:#Elimina risposta +assessment#:#discard_answer_confirmation#:#La tua risposta verrà infine e completamente scartata. La domanda rimane senza risposta fino a quando non si invia un'altra risposta. <br /> <br /> Vuoi davvero scartare la tua risposta? assessment#:#dont_use_questionpool#:#Non inserire le domande in una libreria (disponibile sono in questo test) -assessment#:#download_all_files#:#Download All Files###28 10 2024 new variable +assessment#:#download_all_files#:#Download All Files###28 11 2025 new variable assessment#:#duplicate#:#Duplica assessment#:#duplicate_matching_values_selected#:#Hai scelto due volte la stessa risposta! assessment#:#duplicate_order_values_entered#:#Hai inserito due volte lo stesso valore! assessment#:#edit_answer#:#Modifica risposta -assessment#:#edit_concluding_remarks#:#Edit Concluding Remarks###26 08 2024 new variable -assessment#:#edit_introduction#:#Edit Introduction###26 08 2024 new variable +assessment#:#edit_concluding_remarks#:#Edit Concluding Remarks###30 04 2024 new variable +assessment#:#edit_introduction#:#Edit Introduction###30 04 2024 new variable assessment#:#edit_question#:#Modifica domanda -assessment#:#edit_score#:#Edit Score###29 10 2025 new variable +assessment#:#edit_score#:#Edit Score###28 11 2025 new variable assessment#:#edit_test_questions#:#Editing domande assessment#:#element_height#:#Altezza minima assessment#:#element_height_info#:#Questa e' la minima altezza, in pixel, dell'output di testo relativo a termini e definizioni - immagini. <br /> -assessment#:#enable_examview#:#Enable Exam View -assessment#:#enable_examview_desc#:#Enables the view of the test in the shape of an exam at the end of the pass, prior to submission. +assessment#:#enable_examview#:#Abilita vista esame +assessment#:#enable_examview_desc#:#Abilita la visualizzazione del test sotto forma di esame alla fine del passaggio, prima dell'invio. assessment#:#end_tag#:#Tag di fine assessment#:#enlarge#:#Allargare assessment#:#enter_anonymous_code#:#Inserire codice accesso anonimo assessment#:#enter_enough_positive_points#:#Il punteggio massimo della domanda deve essere maggiore di 0! Per favore aggiungi abbastanza punteggi positivi per le risposte! -assessment#:#enter_enough_positive_points_checked#:#At least one answer needs to score. Please enter a positive score for the selection of an answer.###07 02 2020 new variable +assessment#:#enter_enough_positive_points_checked#:#Almeno una risposta deve essere valutata. Per favore inserisci un punteggio positivo per una delle risposte selezionate. assessment#:#enter_valid_values#:#Si prega di inserire un valore valido. I caratteri saranno valutati come errati! assessment#:#errFormulaQuestion#:#Una formula di domanda contiene informazioni errate!! assessment#:#errRecursionInResult#:#La formula contiene una ricorsione infinita. assessment#:#err_category_in_use#:#Non è possibile eliminare alcuna categoria. Una o più unità di categoria sono ancora in uso. -assessment#:#err_divider_too_big#:#The divider of one of the variables in this question is too big.###29 07 2022 new variable -assessment#:#err_divider_too_big_specific#:#The divider of this variable is too big.###29 10 2025 new variable -assessment#:#err_division#:#The value you chose would make it impossible to generate a valid value for the variable.###29 07 2022 new variable +assessment#:#err_divider_too_big#:#The divider of one of the variables in this question is too big.###09 03 2022 new variable +assessment#:#err_divider_too_big_specific#:#The divider of this variable is too big.###04 11 2025 new variable +assessment#:#err_division#:#This value has to be smaller than the maximum range.###09 03 2022 new variable assessment#:#err_duplicate_results#:#È stata utilizzata una variabile di risultato più di una volta. Questo non è consentito nel testo della domanda. assessment#:#err_no_formula#:#Devi digitare una formula assessment#:#err_no_numeric_value#:#Per favore inserisci un valore numerico assessment#:#err_range#:#La portata massima deve essere maggiore dell’intervallo minimo assessment#:#err_rating_advanced_not_allowed#:#Non è consentita un’altra valutazione da semplice poiché si offrono più unità di risultato con un’unità base identica. -assessment#:#err_unit_in_results#:#The unit cannot be deleted. It is aleady in use in one or more test questions. -assessment#:#err_unit_in_variables#:#The unit cannot be deleted. It is aleady in use in one or more test questions. +assessment#:#err_unit_in_results#:#L'unità non può essere eliminata. È già in uso in una o più domande di prova. +assessment#:#err_unit_in_variables#:#L'unità non può essere eliminata. È già in uso in una o più domande di prova. assessment#:#err_unit_is_baseunit#:#L’unità non può essere eliminata. Viene utilizzato come unità di base da altre unità. assessment#:#err_wrong_categoryname#:#La categoria esiste già. assessment#:#err_wrong_rating_advanced#:#Si prega di assicurarsi che l’aggiunta delle impostazioni di valutazione avanzate sia pari al 100 per cento -assessment#:#error_creating_certificate_zip_empty#:#No data for export.###26 08 2024 new variable +assessment#:#error_creating_certificate_zip_empty#:#No data for export.###30 04 2024 new variable assessment#:#error_importing_question#:#Si è verificato un errore nell'importazione delle domande dal file che hai selezionato! assessment#:#error_open_image_file#:#Errore nell'apertura dell'immagine! assessment#:#error_random_question_generation#:#Un errore fatale si è verificato durante la generazione delle domande casuali per il vostro test.<br />Si prega contattare l'amministratore con la seguente informazione: The system could not create an active ID for user ID %s and test ID %s. @@ -674,38 +673,36 @@ assessment#:#essay_scoring_mode_without_keywords#:#Nessun punteggio automatico assessment#:#essay_scoring_mode_without_keywords_desc#:#Non viene assegnato alcun punteggio a meno che non si tratti del punteggio del manuale del tutor. assessment#:#eval_all_users#:#Valutazione per tutti gli utenti assessment#:#eval_legend_link#:#Per il significato dei simboli nella testata, vedi la legenda. -assessment#:#evaluated_users#:#Evaluated Users###07 02 2020 new variable -assessment#:#exam_id#:#Exam Id: -assessment#:#exam_id_label#:#Exam Id###29 07 2022 new variable -assessment#:#exam_id_of_attempt#:#ID of Attempt###28 10 2024 new variable -assessment#:#examid_in_test_pass#:#Display Testpass ID -assessment#:#examid_in_test_pass_desc#:#A testpass ID is diplayed in the test. A new ID is generated for every testpass. -assessment#:#examid_in_test_res#:#ILIAS Testpass ID -assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results. -assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable +assessment#:#evaluated_users#:#Utenti valutati +assessment#:#exam_id#:#Numero identificativo esame: +assessment#:#exam_id_label#:#Identificatore dell'Esame +assessment#:#exam_id_of_attempt#:#ID of Attempt###28 11 2025 new variable +assessment#:#examid_in_test_pass#:#Mostra numero identificativo esame (ID) +assessment#:#examid_in_test_pass_desc#:#Nel test viene visualizzato un ID dell'esame. Viene generato un nuovo ID per ogni esame sostenuto. +assessment#:#examid_in_test_res#:#Mostra numero identificativo esame (ID) +assessment#:#examid_in_test_res_desc#:#L'ID dell'esame ILIAS verrà incluso nei risultati del test. +assessment#:#exp_all_test_runs#:#All test attempts###30 04 2024 new variable assessment#:#exp_eval_data#:#Esporta i dati con le valutazioni in formato -assessment#:#exp_file_created#:#Esporta file creato. -assessment#:#exp_grammar_as#:#as###26 08 2024 new variable -assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable +assessment#:#exp_grammar_as#:#as###30 04 2024 new variable +assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 11 2025 new variable assessment#:#exp_type_certificate#:#Certificato (PDF) -assessment#:#exp_type_excel#:#MS Excel -assessment#:#exp_type_spss#:#Valori separati da una virgola (CSV) +assessment#:#exp_type_excel#:#Microsoft Excel assessment#:#expected_result_type#:#Tipo di risultato previsto -assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable -assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable -assessment#:#export_cert_ignored_for_users_p#:#The following %s accounts did not achieve a certificate, or the certificate service is not enabled/activate: %s###26 08 2024 new variable -assessment#:#export_cert_ignored_for_users_s#:#The following account did not achieve a certificate, or the certificate service is not enabled/activate: %s###26 08 2024 new variable -assessment#:#export_cert_no_users#:#A certificate archive cannot be created due to missing test participants.###26 08 2024 new variable +assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###30 04 2024 new variable +assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###30 04 2024 new variable +assessment#:#export_cert_ignored_for_users_p#:#The following %s accounts did not achieve a certificate, or the certificate service is not enabled/activate: %s###30 04 2024 new variable +assessment#:#export_cert_ignored_for_users_s#:#The following account did not achieve a certificate, or the certificate service is not enabled/activate: %s###30 04 2024 new variable +assessment#:#export_cert_no_users#:#A certificate archive cannot be created due to missing test participants.###30 04 2024 new variable assessment#:#export_essay_qst_with_html#:#Esporta le domande con il codice HTML assessment#:#export_essay_qst_with_html_desc#:#Se attivato, è possibile esportare le domande in Excel con HTML. -assessment#:#export_legacy_logs#:#Legacy Log-Daten exportieren###26 08 2024 new variable -assessment#:#extra_time_byline#:#Put in extra time in minutes. Already entered extra time is added up.###28 10 2024 new variable -assessment#:#extra_time_for_all_participants#:#You are adding some extra time to all participants.###28 10 2024 new variable -assessment#:#extra_time_for_selected_participants#:#You are adding extra time to the selected participants.###28 10 2024 new variable -assessment#:#extra_time_for_selected_participants_different#:#You have selected participants with different additional times.###28 10 2024 new variable -assessment#:#extra_time_for_single_participant#:#Your are adding extra time to the following participant:###28 10 2024 new variable +assessment#:#export_legacy_logs#:#Export Legacy Log Data###28 11 2025 new variable +assessment#:#extra_time_byline#:#Put in extra time in minutes. Already entered extra time is added up.###28 11 2025 new variable +assessment#:#extra_time_for_all_participants#:#You are adding some extra time to all participants.###28 11 2025 new variable +assessment#:#extra_time_for_selected_participants#:#You are adding extra time to the selected participants.###28 11 2025 new variable +assessment#:#extra_time_for_selected_participants_different#:#You have selected participants with different additional times.###28 11 2025 new variable +assessment#:#extra_time_for_single_participant#:#Your are adding extra time to the following participant:###28 11 2025 new variable assessment#:#extratime#:#Tempo supplementare -assessment#:#extratime_added#:#The extra time has been added to the selected participants.###28 10 2024 new variable +assessment#:#extratime_added#:#The extra time has been added to the selected participants.###28 11 2025 new variable assessment#:#factor#:#Fattore assessment#:#failed_official#:#Respinto assessment#:#failed_short#:#Respinto @@ -728,83 +725,83 @@ assessment#:#filter_show_question_types#:#Filtra in base al tipo domande assessment#:#filter_show_questionpools#:#Filtra in base ai pool domande assessment#:#final_statement#:#Giudizio finale assessment#:#final_statement_show_desc#:#Se selezionato, il giudizio finale verrà mostrato subito dopo il test prima della presentazione del risultato.<br /> -assessment#:#finalized_by#:#Completed by###07 02 2020 new variable -assessment#:#finalized_evaluation#:#Scoring completed###07 02 2020 new variable -assessment#:#finalized_on#:#Completed at###07 02 2020 new variable +assessment#:#finalized_by#:#Valutazione completata da +assessment#:#finalized_evaluation#:#Valutazione completata +assessment#:#finalized_on#:#Valutazione completata il assessment#:#finish_all_user_passes#:#Termina tutti i passaggi del test assessment#:#finish_pass_for_all_users#:#Sei sicuro di voler terminare questi passaggi del test per tutti gli utenti? -assessment#:#finish_pass_for_multiple_users_in_processing_time#:#You cannot finish the passes of all users together, because for at least one user the processing time is not over yet.###26 08 2024 new variable +assessment#:#finish_pass_for_multiple_users_in_processing_time#:#You cannot finish the passes of the selected users together, because for at least one selected user the processing time is not over yet.###28 11 2025 new variable assessment#:#finish_pass_for_user_confirmation#:#Sei sicuro di voler terminare questo passaggio del test? -assessment#:#finish_pass_for_user_in_processing_time#:#WARNING: the processing time for this user is not over yet! You should only end the test run if there is a compelling reason (e.g. exclusion from the test).###26 08 2024 new variable +assessment#:#finish_pass_for_user_in_processing_time#:#WARNING: the processing time for this user is not over yet! You should only end the test run if there is a compelling reason (e.g. exclusion from the test).###09 03 2022 new variable assessment#:#finish_test#:#Finisci il test -assessment#:#finish_test_all#:#Are you sure you want to finish the test attempts for all users?###28 10 2024 new variable -assessment#:#finish_test_more_than_one_selected#:#Only a single participant may be selected to finish the pass if the test allows only one pass.###29 10 2025 new variable -assessment#:#finish_test_multiple#:#Are you sure you want to finish the test attempts for the following participants?###28 10 2024 new variable -assessment#:#finish_test_no_valid_participants_selected#:#There are no active test runs for the selected participants, so they cannot be completed.###29 10 2025 new variable -assessment#:#finish_test_single#:#Are you sure you want to finish the test attempt for the participant "%s"?###28 10 2024 new variable +assessment#:#finish_test_all#:#Are you sure you want to finish the test attempts for all users?###28 11 2025 new variable +assessment#:#finish_test_more_than_one_selected#:#Only a single participant may be selected to finish the pass if the test allows only one pass.###28 11 2025 new variable +assessment#:#finish_test_multiple#:#Are you sure you want to finish the test attempts for the following participants?###28 11 2025 new variable +assessment#:#finish_test_no_valid_participants_selected#:#There are no active test runs for the selected participants, so they cannot be completed.###28 11 2025 new variable +assessment#:#finish_test_single#:#Are you sure you want to finish the test attempt for the participant "%s"?###28 11 2025 new variable assessment#:#finish_unfinished_passes#:#Termina passaggi aperti assessment#:#finish_unfinished_passes_desc#:#I passaggi che hanno un tempo di finitura o un limite di durata configurato verranno chiusi da questo cron job. -assessment#:#finished_by_administrator#:#Finished by Administrator###28 10 2024 new variable -assessment#:#finished_by_cronjob#:#Finished by Cronjob###28 10 2024 new variable -assessment#:#finished_by_duration#:#Finished by time limit###28 10 2024 new variable -assessment#:#finished_by_participant#:#Finished by Participant###28 10 2024 new variable -assessment#:#finished_by_unknown#:#Finished by Unknown###28 10 2024 new variable +assessment#:#finished_by_administrator#:#Finished by Administrator###28 11 2025 new variable +assessment#:#finished_by_cronjob#:#Finished by Cronjob###28 11 2025 new variable +assessment#:#finished_by_duration#:#Finished by time limit###28 11 2025 new variable +assessment#:#finished_by_participant#:#Finished by Participant###28 11 2025 new variable +assessment#:#finished_by_unknown#:#Finished by Unknown###28 11 2025 new variable assessment#:#fixed_participants_hint#:#Questo test è disponibile solo per determinato numero di partecipanti indicato qui sotto. Puoi cambiare questa impostazione cambiando il numero dei partecipanti nel seguente %s menù. -assessment#:#fixedparticipants_subtab#:#Manually Selected Participants +assessment#:#fixedparticipants_subtab#:#Partecipanti selezionati manualmente assessment#:#flashfile#:#File Flash assessment#:#for#:#per assessment#:#forcejs#:#Forza l'output JavaScript per questa domanda -assessment#:#form_msg_area_missing_points#:#Ti preghiamo di inserire punti per tutti i settori. +assessment#:#form_msg_area_missing_points#:#Suggerimenti per inserire punti per tutti i settori. assessment#:#formula#:#Formula -assessment#:#fq_formula_desc#:#You may enter predefined variables ($v1 to $vn), defined results (e.g. $r1), braces for expressions, mathematical operators + (addition), - (subtraction), * (multiplication), / (division), ^ (nth power), the constants 'pi' for pi and 'e‘ for euler's constant, as well as the functions 'sin', 'sinh', 'arcsin', 'asin', 'arcsinh', 'asinh', 'cos', 'cosh', 'arccos', 'acos', 'arccosh', 'acosh', 'tan', 'tanh', 'arctan', 'atan', 'arctanh', 'atanh', 'sqrt', 'abs', 'ln' and 'log'. +assessment#:#fq_formula_desc#:#È possibile inserire variabili predefinite (da $ v1 a $ vn), risultati definiti (ad esempio $ r1), parentesi graffe per le espressioni, operatori matematici + (addizione), - (sottrazione), * (moltiplicazione), / (divisione), ^ (nth potere), le costanti 'pi' per pi ed 'e' per la costante di Eulero, così come le funzioni 'sin', 'sinh', 'arcsin', 'asin', 'arcsinh', 'asinh', 'cos' , 'cosh', 'arccos', 'acos', 'arccosh', 'acosh', 'tan', 'tanh', 'arctan', 'atan', 'arctanh', 'atanh', 'sqrt', ' abs ',' ln 'e' log '. assessment#:#fq_no_restriction_info#:#Entrambi i decimali e le frazioni sono accettati come input. assessment#:#fq_precision_info#:#Digita il numero delle posizioni decimali desiderate. -assessment#:#fq_question_desc#:#You can define variables by inserting $v1, $v2 ... $vn, results by inserting $r1, $r2 .... $rn at the desired position in the question text. Click on the button "Parse Question" to create editing forms for variables and results. +assessment#:#fq_question_desc#:#È possibile definire le variabili inserendo $ v1, $ v2 ... $ vn, i risultati inserendo $ r1, $ r2 .... $ rn nella posizione desiderata nel testo della domanda. Fare clic sul pulsante "Analizza domanda" per creare moduli di modifica per variabili e risultati. assessment#:#gap#:#Spazio vuoto assessment#:#gap_combination#:#Combinazione di Gap -assessment#:#gaps#:#Gaps###29 10 2025 new variable +assessment#:#gaps#:#Gaps###28 11 2025 new variable assessment#:#glossary_term#:#Voce del glossario -assessment#:#goto_first_question#:#Show First Question###29 10 2025 new variable -assessment#:#grading_mark_msg#:#Your resulting mark is: &quot;[mark]&quot; +assessment#:#goto_first_question#:#Show first question###28 11 2025 new variable +assessment#:#grading_mark_msg#:#Il tuo punteggio risultante è: &quot;[mark]&quot; assessment#:#grading_status_failed_msg#:#Spiacente, <b>non hai superato</b> il test. assessment#:#grading_status_passed_msg#:#Congratulazioni, hai <b>superato</b> il test. -assessment#:#hide_best_solution#:#Hide best solution###28 10 2024 new variable +assessment#:#hide_best_solution#:#Hide best solution###28 11 2025 new variable assessment#:#identical_scoring#:#Punteggio identico assessment#:#identical_scoring_desc#:#Se selezionate, le mancanze con soluzioni identiche verranno valutate secondo le impostazioni vigenti anche se sono state scelte due volte. Se il quadratino non è stato spuntato verrà valutata solo la prima risposta uguale. assessment#:#imagemap#:#Mappa immagine -assessment#:#imap_line_color#:#Imagemap Line Color +assessment#:#imap_line_color#:#Image Map Line Color###28 11 2025 new variable assessment#:#import_question#:#Importa domande -assessment#:#in_range#:#Within range###26 08 2024 new variable -assessment#:#in_trash#:#In Trash###26 08 2024 new variable +assessment#:#in_range#:#Within range###30 04 2024 new variable +assessment#:#in_trash#:#In Trash###28 11 2025 new variable assessment#:#info_answer_type_change#:#La domanda contiene già delle immagini. Non puoi modificare il tipo di risposta in risposte multilinea. -assessment#:#info_text_upload#:#Choose an answer file to upload +assessment#:#info_text_upload#:#Scegli un file di risposte da caricare assessment#:#insert_after#:#Inserisci dopo assessment#:#insert_before#:#Inserisci prima assessment#:#insert_gap#:#Inserisci Gap -assessment#:#interaction_type#:#Interaction Type###26 08 2024 new variable +assessment#:#interaction_type#:#Interaction Type###28 11 2025 new variable assessment#:#internal_links#:#Link interni assessment#:#intprecision#:#Divisibile per -assessment#:#intprecision_info#:#"Divisible by" affects only the creation of variables, if the value for the precision is 0. In this case, you define for "Divisible by" an integer value, which must be divisible by with the created variable. A value of 10 thus generates only integers that are divisible by 10. A value of 5 produces integers that are divisible by 5, etc. For a precision of 0, "Divisible by" is a mandatory field and must contain a positive integer. The default value is 1 for any integers. -assessment#:#invalid_ip#:#Invalid IP###26 08 2024 new variable -assessment#:#ip_range_byline#:#Only IP addresses within the defined range can start the test. You can either use IPv4 OR IPv6 addresses.###28 10 2024 new variable -assessment#:#ip_range_for_all_participants#:#You are changing the IP Range of all participants###28 10 2024 new variable -assessment#:#ip_range_for_selected_participants#:#You are changing the IP Range of the following participant.###28 10 2024 new variable -assessment#:#ip_range_for_single_participant#:#You are changing the IP Range of the selected participants.###28 10 2024 new variable -assessment#:#ip_range_info#:#Only clients with an IP in the provided range will be able to access the test.###26 08 2024 new variable -assessment#:#ip_range_label#:#IP Range###26 08 2024 new variable -assessment#:#ip_range_updated#:#The IP-Range has been update for the selected participants.###28 10 2024 new variable -assessment#:#kiosk#:#Modalità Kiosk +assessment#:#intprecision_info#:#"Divisibile per" influenza solo la creazione di variabili, se il valore per la precisione è 0. In questo caso, si definisce per "Divisibile per" un valore intero, che deve essere divisibile per la variabile creata. Un valore di 10 genera quindi solo numeri interi che sono divisibili per 10. Un valore di 5 produce numeri interi che sono divisibili per 5, ecc. Per una precisione di 0, "Divisibile per" è un campo obbligatorio e deve contenere un numero intero positivo. Il valore predefinito è 1 per qualsiasi numero intero. +assessment#:#invalid_ip#:#Invalid IP###28 11 2025 new variable +assessment#:#ip_range_byline#:#Only IP addresses within the defined range can start the test. You can either use IPv4 OR IPv6 addresses.###28 11 2025 new variable +assessment#:#ip_range_for_all_participants#:#You are changing the IP Range of all participants###28 11 2025 new variable +assessment#:#ip_range_for_selected_participants#:#You are changing the IP Range of the following participant.###28 11 2025 new variable +assessment#:#ip_range_for_single_participant#:#You are changing the IP Range of the selected participants.###28 11 2025 new variable +assessment#:#ip_range_info#:#Only clients with an IP in the provided range will be able to access the test.###28 11 2025 new variable +assessment#:#ip_range_label#:#IP Range###28 11 2025 new variable +assessment#:#ip_range_updated#:#The IP-Range has been update for the selected participants.###28 11 2025 new variable +assessment#:#kiosk#:#Visione esame assessment#:#kiosk_description#:#Fai partire il test in Kiosk Mode. Tutti gli elementi che non fanno parte di questo test verranno nascosti per evitare che gli utenti abbandonino il test. -assessment#:#kiosk_options#:#Opzioni Modalità Kiosk +assessment#:#kiosk_options#:#Informazioni mostrate assessment#:#kiosk_options_desc#:#Seleziona se il titolo del test e/o il nome dei partecipanti attuali durante il Kiosk Mode debbano essere visibili in testa alla pagina. assessment#:#kiosk_show_participant#:#Mostra il nome del partecipante assessment#:#kiosk_show_title#:#Mostra il titolo del test -assessment#:#kprim_answers_info#:#The multiple choice question type "four times decision right/wrong" (Type K', also known as Kprim) gives four answers or additions to a question or an incomplete statement. A decision about the correctness is to be done on all four answers/additions. The maximum points are granted only, if all decisions are correct. +assessment#:#kprim_answers_info#:#Il tipo di domanda a scelta multipla "decisione quattro volte giusto / sbagliato" (tipo K ', noto anche come Kprim) fornisce quattro risposte o aggiunte a una domanda o un'istruzione incompleta. Una decisione sulla correttezza deve essere presa su tutte e quattro le risposte / aggiunte. Il punteggio massimo viene concesso solo se tutte le decisioni sono corrette. assessment#:#kprim_instruction_text#:#Dovete decidere su ogni affermazione: [%s] o [%s] assessment#:#lacex_assClozeTest_NumberOfResultExpression_d#:#La quarta opzione di risposta è uno spazio selezionato ed è stata selezionata la seconda opzione assessment#:#lacex_assClozeTest_NumberOfResultExpression_e#:#R[4] = +2+ assessment#:#lacex_assClozeTest_NumericResultExpression_d#:#La seconda opzione di risposta è un spazio numerico ed è stato risolto con valore numerico di 5 -assessment#:#lacex_assClozeTest_NumericResultExpression_e#:#R[2] = +assessment#:#lacex_assClozeTest_NumericResultExpression_e#:#R[2] = #5# assessment#:#lacex_assClozeTest_StringResultExpression_1_d#:#La prima opzione di risposta è una spazio di testo ed è stato risolto con “Lunedì” assessment#:#lacex_assClozeTest_StringResultExpression_1_e#:#R[1] = ~Lunedì~ assessment#:#lacex_assClozeTest_StringResultExpression_2_d#:#La quarta opzione di risposta è uno spazio selezionato ed è stata selezionata l’etichetta opzionale come “Verde” @@ -814,19 +811,19 @@ assessment#:#lacex_assErrorText_ExclusiveResultExpression_e#:#R = *1,3,4* assessment#:#lacex_assErrorText_NumberOfResultExpression_d#:#Rispondendo alla domanda è stata scelta la seconda opzione di risposta assessment#:#lacex_assErrorText_NumberOfResultExpression_e#:#R = +2+ assessment#:#lacex_assFormulaQuestion_NumericResultExpression_d#:#La prima opzione di risposta è stata risolta con il valore numerico di 3.14159 -assessment#:#lacex_assFormulaQuestion_NumericResultExpression_e#:#R[1] = +assessment#:#lacex_assFormulaQuestion_NumericResultExpression_e#:#R[1] = #3.14159# assessment#:#lacex_assImagemapQuestion_ExclusiveResultExpression_d#:#Esattamente le opzioni di risposta 1, 3 e 4 sono state scelte durante la risposta alla domanda assessment#:#lacex_assImagemapQuestion_ExclusiveResultExpression_e#:#R = *1,3,4* assessment#:#lacex_assImagemapQuestion_NumberOfResultExpression_d#:#Rispondendo alla domanda è stata scelta la seconda opzione di risposta assessment#:#lacex_assImagemapQuestion_NumberOfResultExpression_e#:#R = +2+ -assessment#:#lacex_assMatchingQuestion_MatchingResultExpression_d#:#The question's terms were assigned to defintions as follows: 1 => 2 and 2 => 3 and 3 => 1 +assessment#:#lacex_assMatchingQuestion_MatchingResultExpression_d#:#I termini della domanda sono stati assegnati alle definizioni come segue: 1 => 2 e 2 => 3 e 3 => 1 assessment#:#lacex_assMatchingQuestion_MatchingResultExpression_e#:#R = ;1:2; & R = ;2:3; & R = ;3:1; assessment#:#lacex_assMultipleChoice_ExclusiveResultExpression_d#:#Esattamente le opzioni di risposta 1, 3 e 4 sono state scelte durante la risposta alla domanda assessment#:#lacex_assMultipleChoice_ExclusiveResultExpression_e#:#R = *1,3,4* assessment#:#lacex_assMultipleChoice_NumberOfResultExpression_d#:#Rispondendo alla domanda è stata scelta la seconda opzione di risposta assessment#:#lacex_assMultipleChoice_NumberOfResultExpression_e#:#R = +2+ assessment#:#lacex_assNumeric_NumericResultExpression_d#:#La domanda è stata risolta con il valore numerico di 4.7 -assessment#:#lacex_assNumeric_NumericResultExpression_e#:#R = +assessment#:#lacex_assNumeric_NumericResultExpression_e#:#R = #4.7# assessment#:#lacex_assOrderingHorizontal_OrderingResultExpression_d#:#Gli elementi della domanda sono stati ordinati come segue: 2, 5, 1, 4, 3 assessment#:#lacex_assOrderingHorizontal_OrderingResultExpression_e#:#R = $2,5,1,4,3$ assessment#:#lacex_assOrderingQuestion_OrderingResultExpression_d#:#Gli elementi della domanda sono stati ordinati come segue: 2, 5, 1, 4, 3 @@ -840,61 +837,61 @@ assessment#:#lacex_assSingleChoice_NumberOfResultExpression_e#:#R = +2+ assessment#:#lacex_assTextSubset_StringResultExpression_d#:#Per la seconda opzione di risposta è stata inserita la risposta "cloruro di sodio" assessment#:#lacex_assTextSubset_StringResultExpression_e#:#R [2] = ~ cloruro di sodio ~ assessment#:#lacex_example_header#:#Esempi -assessment#:#list_of_participants#:#Participants###28 10 2024 new variable +assessment#:#list_of_participants#:#Participants###28 11 2025 new variable assessment#:#locked#:#Bloccato -assessment#:#log_deletion_not_allowed#:#You don't have the necessary permissions to delete log entries.###26 08 2024 new variable -assessment#:#log_entry_type#:#Log Entry Type###26 08 2024 new variable -assessment#:#log_ip#:#Log IP###26 08 2024 new variable -assessment#:#log_ip_info#:#The IP of Participants is Logged for each interaction with a test. Disabling it does not delete existing IP records.###26 08 2024 new variable -assessment#:#log_participant_data_delete_warning#:#This test contains log data for participant interactions that will be deleted when changing the test to a test without names.###26 08 2024 new variable -assessment#:#log_text#:#Messaggio del report +assessment#:#log_deletion_not_allowed#:#You don't have the necessary permissions to delete log entries.###28 11 2025 new variable +assessment#:#log_entry_type#:#Log Entry Type###28 11 2025 new variable +assessment#:#log_ip#:#Log IP###28 11 2025 new variable +assessment#:#log_ip_info#:#The IP of Participants is Logged for each interaction with a test. Disabling it does not delete existing IP records.###28 11 2025 new variable +assessment#:#log_participant_data_delete_warning#:#This test contains log data for participant interactions that will be deleted when changing the test to a test without names.###28 11 2025 new variable +assessment#:#log_text#:#Log message###28 11 2025 new variable assessment#:#log_user_solution_willingly_deleted#:#L’utente ha eliminato la risposta. -assessment#:#logging_settings#:#Registrazione -assessment#:#logs_answer_deleted#:#Answer deleted###26 08 2024 new variable -assessment#:#logs_answer_submitted#:#Answer Submitted###26 08 2024 new variable -assessment#:#logs_deleted#:#I dati di registro per i testi selezionati sono stati eliminati -assessment#:#logs_error_on_participant_interaction#:#Error on Participant Interaction###26 08 2024 new variable -assessment#:#logs_error_on_question_administration_interaction#:#Error on Question Administration Interaction###26 08 2024 new variable -assessment#:#logs_error_on_scoring_interaction#:#Error on Scoring Interaction###26 08 2024 new variable -assessment#:#logs_error_on_test_administration_interaction#:#Error on Test Administration Interaction###26 08 2024 new variable -assessment#:#logs_error_on_undefined_interaction#:#Error on Undefined Interaction###26 08 2024 new variable -assessment#:#logs_extra_time_added#:#Extra Time Added###26 08 2024 new variable -assessment#:#logs_main_settings_modified#:#Main Settings Modified###26 08 2024 new variable -assessment#:#logs_mark_schema_modified#:#Mark Schema Modified###26 08 2024 new variable -assessment#:#logs_mark_schema_reset#:#Mark Schema Reset###26 08 2024 new variable -assessment#:#logs_new_test_created#:#New Test Created###26 08 2024 new variable -assessment#:#logs_output#:#Output dei dati di registro -assessment#:#logs_participant_data_removed#:#Participant Data Removed###26 08 2024 new variable -assessment#:#logs_pi#:#Participant Interaction###26 08 2024 new variable -assessment#:#logs_qai#:#Question Administration Interaction###26 08 2024 new variable -assessment#:#logs_question_added#:#Question Added###26 08 2024 new variable -assessment#:#logs_question_graded#:#Question Graded###26 08 2024 new variable -assessment#:#logs_question_grading_reset#:#Grading Reset###26 08 2024 new variable -assessment#:#logs_question_modified#:#Question Modified###26 08 2024 new variable -assessment#:#logs_question_modified_in_corrections#:#Question Modified in Corrections###26 08 2024 new variable -assessment#:#logs_question_moved#:#Question Moved###26 08 2024 new variable -assessment#:#logs_question_removed#:#Question Removed###26 08 2024 new variable -assessment#:#logs_question_removed_in_corrections#:#Question Removed in Corrections###26 08 2024 new variable -assessment#:#logs_question_selection_criteria_modified#:#Question Selection Criteria Modified###26 08 2024 new variable -assessment#:#logs_question_shown#:#Question Shown###26 08 2024 new variable -assessment#:#logs_question_skipped#:#Question Skipped###26 08 2024 new variable -assessment#:#logs_question_synchronisation_reset#:#Question Synchronisation Reset###26 08 2024 new variable -assessment#:#logs_questions_synchronised#:#Questions Synchonised###26 08 2024 new variable -assessment#:#logs_scoring_settings_modified#:#Scoring Settings Modified###26 08 2024 new variable -assessment#:#logs_si#:#Scoring Interaction###26 08 2024 new variable -assessment#:#logs_tai#:#Test Administration Interaction###26 08 2024 new variable -assessment#:#logs_te#:#Error###26 08 2024 new variable -assessment#:#logs_test_deleted#:#Test Deleted###26 08 2024 new variable -assessment#:#logs_test_run_finished#:#Test Run Finished###26 08 2024 new variable -assessment#:#logs_test_run_of_participant_closed#:#Run of Participant Closed###26 08 2024 new variable -assessment#:#logs_test_run_started#:#Test Run Started###26 08 2024 new variable -assessment#:#logs_wrong_test_password_provided#:#Il partecipante ha inserito una password sbagliata del test. -assessment#:#longmenu#:#Longmenu -assessment#:#longmenu_answeroptions_differ#:#This question does not work correctly, as there are not the same amount of gaps in the text as in the correction options.###26 08 2024 new variable -assessment#:#longmenu_text#:#Testo menu lungo -assessment#:#mainbar_button_label_questionlist#:#Questionlist###26 08 2024 new variable +assessment#:#logging_settings#:#Logging###28 11 2025 new variable +assessment#:#logs_answer_deleted#:#Answer deleted###28 11 2025 new variable +assessment#:#logs_answer_submitted#:#Answer Submitted###28 11 2025 new variable +assessment#:#logs_deleted#:#The selected Log Data has been deleted.###28 11 2025 new variable +assessment#:#logs_error_on_participant_interaction#:#Error on Participant Interaction###28 11 2025 new variable +assessment#:#logs_error_on_question_administration_interaction#:#Error on Question Administration Interaction###28 11 2025 new variable +assessment#:#logs_error_on_scoring_interaction#:#Error on Scoring Interaction###28 11 2025 new variable +assessment#:#logs_error_on_test_administration_interaction#:#Error on Test Administration Interaction###28 11 2025 new variable +assessment#:#logs_error_on_undefined_interaction#:#Error on Undefined Interaction###28 11 2025 new variable +assessment#:#logs_extra_time_added#:#Extra Time Added###28 11 2025 new variable +assessment#:#logs_main_settings_modified#:#Main Settings Modified###28 11 2025 new variable +assessment#:#logs_mark_schema_modified#:#Mark Schema Modified###28 11 2025 new variable +assessment#:#logs_mark_schema_reset#:#Mark Schema Reset###28 11 2025 new variable +assessment#:#logs_new_test_created#:#New Test Created###28 11 2025 new variable +assessment#:#logs_output#:#Log Data Output###28 11 2025 new variable +assessment#:#logs_participant_data_removed#:#Participant Data Removed###28 11 2025 new variable +assessment#:#logs_pi#:#Participant Interaction###28 11 2025 new variable +assessment#:#logs_qai#:#Question Administration Interaction###28 11 2025 new variable +assessment#:#logs_question_added#:#Question Added###28 11 2025 new variable +assessment#:#logs_question_graded#:#Question Graded###28 11 2025 new variable +assessment#:#logs_question_grading_reset#:#Grading Reset###28 11 2025 new variable +assessment#:#logs_question_modified#:#Question Modified###28 11 2025 new variable +assessment#:#logs_question_modified_in_corrections#:#Question Modified in Corrections###28 11 2025 new variable +assessment#:#logs_question_moved#:#Question Moved###28 11 2025 new variable +assessment#:#logs_question_removed#:#Question Removed###28 11 2025 new variable +assessment#:#logs_question_removed_in_corrections#:#Question Removed in Corrections###28 11 2025 new variable +assessment#:#logs_question_selection_criteria_modified#:#Question Selection Criteria Modified###28 11 2025 new variable +assessment#:#logs_question_shown#:#Question Shown###28 11 2025 new variable +assessment#:#logs_question_skipped#:#Question Skipped###28 11 2025 new variable +assessment#:#logs_question_synchronisation_reset#:#Question Synchronisation Reset###28 11 2025 new variable +assessment#:#logs_questions_synchronised#:#Questions Synchonised###28 11 2025 new variable +assessment#:#logs_scoring_settings_modified#:#Scoring Settings Modified###28 11 2025 new variable +assessment#:#logs_si#:#Scoring Interaction###28 11 2025 new variable +assessment#:#logs_tai#:#Test Administration Interaction###28 11 2025 new variable +assessment#:#logs_te#:#Error###28 11 2025 new variable +assessment#:#logs_test_deleted#:#Test Deleted###28 11 2025 new variable +assessment#:#logs_test_run_finished#:#Test Run Finished###28 11 2025 new variable +assessment#:#logs_test_run_of_participant_closed#:#Run of Participant Closed###28 11 2025 new variable +assessment#:#logs_test_run_started#:#Test Run Started###28 11 2025 new variable +assessment#:#logs_wrong_test_password_provided#:#Participant entered wrong test password.###28 11 2025 new variable +assessment#:#longmenu#:#Menù esteso +assessment#:#longmenu_answeroptions_differ#:#This question does not work correctly, as there are not the same amount of gaps in the text as in the correction options.###28 07 2023 new variable +assessment#:#longmenu_text#:#Testo menu esteso +assessment#:#mainbar_button_label_questionlist#:#Questionlist###30 04 2024 new variable assessment#:#maintenance#:#Manutenzione -assessment#:#manscoring#:#Impostazione manuale +assessment#:#manscoring#:#Punteggio manuale assessment#:#manscoring_done#:#Partecipanti Valutati assessment#:#manscoring_hint#:#Hai inserito almeno una domanda che necessita del punteggio manuale. Per garantire un test valido si raccomanda l'accesso ai risultati solo dopo un certo giorno/ora. assessment#:#manscoring_none#:#Partecipanti non valutati @@ -902,7 +899,7 @@ assessment#:#manscoring_not_allowed#:#Il punteggio manuale non è stato attivato assessment#:#manscoring_questions_not_found#:#Questo test contiene domande che non possono essere valutate manualmente. assessment#:#manscoring_results_pass#:#Impostazione manuale delle domande per uno svolgimento del test del %s assessment#:#manual_editing#:#Modifica manuale -assessment#:#manual_entry#:#Manual Entry###28 10 2024 new variable +assessment#:#manual_entry#:#Manual Entry###28 11 2025 new variable assessment#:#mark_schema#:#Schema voti assessment#:#mark_schema_invalid#:#Lo schema dei voti non è valido. Si prega di creare uno schema corretto. assessment#:#matches#:#corrisponde @@ -913,59 +910,59 @@ assessment#:#matching_shuffle_terms_definitions#:#Entrambi (Termini e Definizion assessment#:#matching_type#:#Sottogruppo di domande corrispondenti assessment#:#material#:#Materiale assessment#:#material_file#:#File di materiale -assessment#:#max_ip_label#:#Highest IP With Access###26 08 2024 new variable +assessment#:#max_ip_label#:#Highest IP With Access###28 11 2025 new variable assessment#:#maxchars#:#Numero massimo di caratteri -assessment#:#maximum_nr_of_tries_reached#:#Hai raggiunto il numero massimo di tentativi per questo test. Il test non pu& +assessment#:#maximum_nr_of_tries_reached#:#Hai raggiunto il numero massimo di passaggi per questo test. Il test non può essere inserito! assessment#:#maximum_points#:#Punteggio massimo disponibile assessment#:#maxsize#:#massima dimensione file di upload assessment#:#maxsize_info#:#Inserire la massima dimensione in, bytes, dei files da caricare. Se il campo è lasciato in bianco, la dimensione sarà definita dal sistema. assessment#:#min_auto_complete#:#Completamento automatico -assessment#:#min_ip_label#:#Lowest IP With Access###26 08 2024 new variable +assessment#:#min_ip_label#:#Lowest IP With Access###28 11 2025 new variable assessment#:#min_percentage_ne_0#:#Devi raggiungere la percentuale minima dello 0 percento! Lo schema voti non e' stato salvato. assessment#:#misc#:#Opzioni varie -assessment#:#mode_allatonce#:#All###29 10 2025 new variable -assessment#:#mode_onebyone#:#One by One###29 10 2025 new variable -assessment#:#mode_question#:#Question oriented###29 10 2025 new variable -assessment#:#mode_user#:#Participant oriented###29 10 2025 new variable +assessment#:#mode_allatonce#:#All###28 11 2025 new variable +assessment#:#mode_onebyone#:#One by One###28 11 2025 new variable +assessment#:#mode_question#:#Question oriented###28 11 2025 new variable +assessment#:#mode_user#:#Participant oriented###28 11 2025 new variable assessment#:#msg_circle_added#:#Circonferenza aggiunta -assessment#:#msg_no_questions_selected#:#No questions were selected.###26 08 2024 new variable +assessment#:#msg_no_questions_selected#:#No questions were selected.###30 04 2024 new variable assessment#:#msg_number_of_terms_too_low#:#Il numero dei termini deve essere maggiore o uguale al numero delle definizioni assessment#:#msg_poly_added#:#Aggiunto poligono assessment#:#msg_questions_moved#:#Domanda(e) spostata(e) assessment#:#msg_rect_added#:#Aggiunto rettangolo -assessment#:#msg_score_settings_modified_and_recalc#:#Your changes were saved and the results recalculated correspondingly.###26 08 2024 new variable -assessment#:#msg_score_settings_not_modified#:#Your changes were not saved.###26 08 2024 new variable +assessment#:#msg_score_settings_modified_and_recalc#:#Your changes were saved and the results recalculated correspondingly.###14 02 2024 new variable +assessment#:#msg_score_settings_not_modified#:#Your changes were not saved.###14 02 2024 new variable assessment#:#msg_selected_for_move#:#Domanda(e) selezionata(e) per lo spostamento assessment#:#new_category#:#Nuova categoria di unità assessment#:#new_unit#:#Nuova unità assessment#:#next_question#:#Domanda successiva assessment#:#next_question_rows#:#Domande %d - %d di %d >> -assessment#:#no_manual_feedback_export_info#:#Manual feedbacks will not be exported.###26 08 2024 new variable -assessment#:#no_passed_after_failed#:#Failing marks cannot have a higher minimum level than any passing mark.###29 10 2025 new variable +assessment#:#no_manual_feedback_export_info#:#Manual feedbacks will not be exported.###13 09 2023 new variable +assessment#:#no_passed_after_failed#:#Failing marks cannot have a higher minimum level than any passing mark.###28 11 2025 new variable assessment#:#no_passed_mark#:#Devi scegliere almeno un voto come SUPERATO! Lo schema voti non e' stato salvato. assessment#:#no_question_selected_for_move#:#Per favore seleziona almeno una domanda da spostare! assessment#:#no_questions_available#:#Non ci sono domande disponibili! -assessment#:#no_result_type#:#Select No Result Type +assessment#:#no_result_type#:#Seleziona Nessun tipo di risultato assessment#:#no_selection#:#--- Nessuna Selezione --- assessment#:#no_selection_for_move#:#Nessuna domanda selezionata per lo spostamento assessment#:#no_target_selected_for_move#:#Devi selezionare la posizione d'inserimento! assessment#:#no_user_or_group_selected#:#Per favore indica in che campo (utenti e/o gruppi) far partire la ricerca! -assessment#:#no_valid_participant_selection#:#No valid Participants selected.###28 10 2024 new variable -assessment#:#not_evaluated_users#:#Not Yet Evaluated User###07 02 2020 new variable -assessment#:#not_started#:#Not started yet###28 10 2024 new variable +assessment#:#no_valid_participant_selection#:#No valid Participants selected.###28 11 2025 new variable +assessment#:#not_evaluated_users#:#Utente non ancora valutato +assessment#:#not_started#:#Not started yet###28 11 2025 new variable assessment#:#not_yet_accessed#:#Nessun accesso per il momento assessment#:#nr_of_correct_answers#:#Numero di risposte volute assessment#:#number_of_answers#:#Numero di risposte assessment#:#numeric_gap#:#Mancanza numerica -assessment#:#old_mark_default_not_applied#:#The marks from your personal settings could not be applied as they use an old format. All other settings have been updated.###29 10 2025 new variable +assessment#:#old_mark_default_not_applied#:#The marks from your personal settings could not be applied as they use an old format. All other settings have been updated.###28 11 2025 new variable assessment#:#option_label#:#Etichette opzionali assessment#:#option_label_adequate#:#adatto assessment#:#option_label_adequate_or_not#:#adatto / non adatto assessment#:#option_label_applicable#:#applicabile assessment#:#option_label_applicable_or_not#:#applicabile / non applicabile assessment#:#option_label_custom#:#Etichette definite dall’utente -assessment#:#option_label_custom_false#:#Label for "FALSE" -assessment#:#option_label_custom_true#:#Label for "TRUE" +assessment#:#option_label_custom_false#:#Etichetta per "FALSO" +assessment#:#option_label_custom_true#:#Etichetta per "VERO" assessment#:#option_label_info#:#Le frasi configurate verranno utilizzate come etichetta per le opzioni selezionabili dal partecipante. assessment#:#option_label_minus#:#- assessment#:#option_label_not_adequate#:#non adatto @@ -983,7 +980,7 @@ assessment#:#oq_btn_use_order_pictures#:#Utilizza le immagini di risposta assessment#:#oq_btn_use_order_terms#:#Utilizza i termini di risposta assessment#:#oq_header_ordering_elements#:#Ordine degli elementi assessment#:#or#:#o -assessment#:#order#:#Order###26 08 2024 new variable +assessment#:#order#:#Order###09 11 2022 new variable assessment#:#ordering_answer_sequence_info#:#La sequenza di risposte che definisci qui sara' presa come sequenza di risposte corrette. assessment#:#ordertext#:#Ordinando il testo assessment#:#ordertext_info#:#Per favore, inserisci il testo che dovrebbe essere ordinato orizzontalmente. Il testo ordinato sarà separato da spazi vuoti. Se c'e' bisogno di una differente spaziatura, si può usare il separatore %s per separare il testo.<br /> @@ -995,7 +992,7 @@ assessment#:#part_received_a_of_b_points#:#I partecipanti hanno ricevuto %s di % assessment#:#participants#:#Partecipanti assessment#:#participants_invitation#:#Partecipanti fissi assessment#:#participants_invitation_description#:#Sei in grado di rendere questo test accessibile solo per un ristretto gruppo di utenti ILIAS. Se vuoi cambaire questa impostazione, per favore attiva la casella in basso e clicca su Salva. -assessment#:#participants_results_subtab#:#All Participants +assessment#:#participants_results_subtab#:#Tutti i partecipanti assessment#:#pass#:#Superare assessment#:#pass_finished#:#risposta corretta assessment#:#passed_official#:#Superato @@ -1004,36 +1001,36 @@ assessment#:#passed_short#:#Superato assessment#:#passed_status#:#Stato superato assessment#:#passes_finished#:#risposte corrette assessment#:#percentage#:#Percentuale -assessment#:#percentage_points_achieved#:#Reached Points###28 10 2024 new variable +assessment#:#percentage_points_achieved#:#Reached Points###28 11 2025 new variable assessment#:#percentile#:#Percentuale -assessment#:#personal_settings_apply#:#Apply Settings Template###29 10 2025 new variable -assessment#:#personal_settings_apply_changed_confirmation#:#The current test settings will be overwritten with the settings from the selected template. This also overwrites the Selection of Test Questions. The process cannot be undone!###29 10 2025 new variable -assessment#:#personal_settings_apply_confirmation#:#The current test settings will be overwritten with the settings from the selected template. This process cannot be undone!###29 10 2025 new variable -assessment#:#personal_settings_apply_description#:#This template overrides all settings of test '%s'.###29 10 2025 new variable -assessment#:#personal_settings_apply_not_possible#:#ILIAS could not apply the selected template to this test! Maybe this test already contains participant data sets.###29 10 2025 new variable -assessment#:#personal_settings_apply_success#:#Personal Test Settings have been applied successfully.###29 10 2025 new variable -assessment#:#personal_settings_author#:#Created by###29 10 2025 new variable -assessment#:#personal_settings_create#:#Add New Setting Template###29 10 2025 new variable -assessment#:#personal_settings_delete_confirmation#:#The selected template(s) will be permanently deleted. This cannot be undone.###29 10 2025 new variable -assessment#:#personal_settings_delete_success#:#The selected template(s) have been deleted.###29 10 2025 new variable -assessment#:#personal_settings_description#:#Template Description###29 10 2025 new variable -assessment#:#personal_settings_explanation#:#ILIAS will store the settings of the current test in a template. This template can be used to transfer the settings to another test.###29 10 2025 new variable -assessment#:#personal_settings_export#:#Export Settings Template###29 10 2025 new variable -assessment#:#personal_settings_import#:#Import Setting Templates###29 10 2025 new variable -assessment#:#personal_settings_import_success#:#The template was imported successfully.###29 10 2025 new variable -assessment#:#personal_settings_invalid_selection#:#Please select one template.###29 10 2025 new variable -assessment#:#personal_settings_name#:#Template Title###29 10 2025 new variable -assessment#:#personal_settings_required_author#:#Please enter an author for your template.###29 10 2025 new variable -assessment#:#personal_settings_required_title#:#Please enter a title for your template.###29 10 2025 new variable -assessment#:#personal_settings_save#:#Save New Setting Template###29 10 2025 new variable -assessment#:#personal_settings_show#:#Show Template Details###29 10 2025 new variable -assessment#:#personal_settings_templates_available#:#Personal Test Settings Templates###29 10 2025 new variable -assessment#:#personal_settings_timestamp#:#Creation Date###29 10 2025 new variable +assessment#:#personal_settings_apply#:#Apply Settings Template###28 11 2025 new variable +assessment#:#personal_settings_apply_changed_confirmation#:#The current test settings will be overwritten with the settings from the selected template. This also overwrites the Selection of Test Questions. The process cannot be undone!###28 11 2025 new variable +assessment#:#personal_settings_apply_confirmation#:#The current test settings will be overwritten with the settings from the selected template. This process cannot be undone!###28 11 2025 new variable +assessment#:#personal_settings_apply_description#:#This template overrides all settings of test '%s'.###28 11 2025 new variable +assessment#:#personal_settings_apply_not_possible#:#ILIAS could not apply the selected template to this test! Maybe this test already contains participant data sets.###28 11 2025 new variable +assessment#:#personal_settings_apply_success#:#Personal Test Settings have been applied successfully.###28 11 2025 new variable +assessment#:#personal_settings_author#:#Created by###28 11 2025 new variable +assessment#:#personal_settings_create#:#Add New Setting Template###28 11 2025 new variable +assessment#:#personal_settings_delete_confirmation#:#The selected template(s) will be permanently deleted. This cannot be undone.###28 11 2025 new variable +assessment#:#personal_settings_delete_success#:#The selected template(s) have been deleted.###28 11 2025 new variable +assessment#:#personal_settings_description#:#Template Description###28 11 2025 new variable +assessment#:#personal_settings_explanation#:#ILIAS will store the settings of the current test in a template. This template can be used to transfer the settings to another test.###28 11 2025 new variable +assessment#:#personal_settings_export#:#Export Settings Template###28 11 2025 new variable +assessment#:#personal_settings_import#:#Import Setting Templates###28 11 2025 new variable +assessment#:#personal_settings_import_success#:#The template was imported successfully.###28 11 2025 new variable +assessment#:#personal_settings_invalid_selection#:#Please select one template.###28 11 2025 new variable +assessment#:#personal_settings_name#:#Template Title###28 11 2025 new variable +assessment#:#personal_settings_required_author#:#Please enter an author for your template.###28 11 2025 new variable +assessment#:#personal_settings_required_title#:#Please enter a title for your template.###28 11 2025 new variable +assessment#:#personal_settings_save#:#Save New Setting Template###28 11 2025 new variable +assessment#:#personal_settings_show#:#Show Template Details###28 11 2025 new variable +assessment#:#personal_settings_templates_available#:#Personal Test Settings Templates###28 11 2025 new variable +assessment#:#personal_settings_timestamp#:#Creation Date###28 11 2025 new variable assessment#:#picture#:#Immagine assessment#:#point#:#Punto assessment#:#points#:#Punti assessment#:#points_checked#:#Punti (selezionati) -assessment#:#points_non_numeric_or_negative_msg#:#Inputs for points only accept positive numeric values.###26 08 2024 new variable +assessment#:#points_non_numeric_or_negative_msg#:#Inputs for points only accept positive numeric values.###30 04 2024 new variable assessment#:#points_short#:#Pt. assessment#:#points_unchecked#:#Punti (non selezionati) assessment#:#points_wrong#:#Selezioni sbagliate @@ -1048,13 +1045,13 @@ assessment#:#postponed#:#Non eseguita assessment#:#precision#:#Precisione assessment#:#previous_question#:#Domanda precedente assessment#:#previous_question_rows#:#<< Domande %d - %d di %d -assessment#:#print_answers#:#Print Answers###28 10 2024 new variable -assessment#:#qpl_assessment_no_assessment_of_questions#:#Non esiste una valutazione statistica per la domanda selezionata. La domanda non & +assessment#:#print_answers#:#Print Answers###28 11 2025 new variable +assessment#:#qpl_assessment_no_assessment_of_questions#:#Non è disponibile una valutazione delle domande per la domanda selezionata. La domanda non è stata ancora utilizzata in un test. assessment#:#qpl_assessment_total_of_answers#:#Totale delle risposte assessment#:#qpl_assessment_total_of_right_answers#:#Percentuale totale di risposte giuste (percentuale con il punteggio massimo) -assessment#:#qpl_bulk_save_add#:#Add###28 10 2024 new variable -assessment#:#qpl_bulk_save_overwrite#:#Overwrite###28 10 2024 new variable -assessment#:#qpl_bulkedit_success#:#Modifications saved.###28 10 2024 new variable +assessment#:#qpl_bulk_save_add#:#Add###28 11 2025 new variable +assessment#:#qpl_bulk_save_overwrite#:#Overwrite###28 11 2025 new variable +assessment#:#qpl_bulkedit_success#:#Modifications saved.###28 11 2025 new variable assessment#:#qpl_cancel_skill_assigns_update#:#Annulla assessment#:#qpl_confirm_delete_questions#:#Sei sicuro di voler eliminare le seguenti domande? Se cancelli le domande bloccate, anche i risultati dei test che le contengono verranno cancellati. assessment#:#qpl_copy_insert_clipboard#:#Le domande selezionate sono state copiate negli appunti @@ -1063,14 +1060,14 @@ assessment#:#qpl_delete_rbac_error#:#Non hai l'autorizzazione per eliminare ques assessment#:#qpl_delete_select_none#:#Seleziona la raccolta di domande da eliminare assessment#:#qpl_export_excel#:#File MS Excel assessment#:#qpl_export_select_none#:#Seleziona la raccolta di domande da esportare -assessment#:#qpl_export_xml#:#file QTI XML +assessment#:#qpl_export_xml#:#File QTI XML assessment#:#qpl_form_general_settings#:#Impostazioni generali assessment#:#qpl_imagemap_preview_missing#:#ILIAS non puo' creare il file temporaneo contenente la mappa immagine. Viene mostrata quindi l'immagine originale. Questo puo'; essere dovuto ad ImageMagick non correttamente configurato o alla mancanza di autorizzazione per scrivere nella cartella temporanea! Contatta l'amministratore di sistema. assessment#:#qpl_import_create_new_qpl#:#Importa le domande in una nuova raccolta assessment#:#qpl_import_no_items#:#Si e'verificato un errore: il file scelto non contiene domande! assessment#:#qpl_import_non_ilias_files#:#Si e' verificato un errore: il file scelto non e' stato creato con Ilias. Contatta il team di Ilias per avere un filtro di import per il formato del tuo file QTI. assessment#:#qpl_import_verify_found_questions#:#ILIAS ha trovato le seguenti domande nel file indicato. Scegli quelle che vuoi importare. -assessment#:#qpl_lac_desc_brackets#:#Sostegni +assessment#:#qpl_lac_desc_brackets#:#Parentesi assessment#:#qpl_lac_desc_compare_answer_exist#:#Confronta se c'è una risposta per una domanda/uno spazio assessment#:#qpl_lac_desc_compare_with_answer_n#:#Confronta il risultato con la n-esima risposta della domanda assessment#:#qpl_lac_desc_compare_with_assignment#:#Confronta il risultato con la corrispondenza n:m @@ -1079,8 +1076,8 @@ assessment#:#qpl_lac_desc_compare_with_number#:#Confronta il risultato con il nu assessment#:#qpl_lac_desc_compare_with_quest_res#:#Confronta il risultato con i punti raggiunti in percentuale assessment#:#qpl_lac_desc_compare_with_sequence#:#Confronta il risultato con la sequenza di risposte ($a,..,z $) assessment#:#qpl_lac_desc_compare_with_text#:#Confronta il risultato con il testo TESTO -assessment#:#qpl_lac_desc_logical_and#:#AND logico -assessment#:#qpl_lac_desc_logical_or#:#OR logico +assessment#:#qpl_lac_desc_logical_and#:#'E' logico +assessment#:#qpl_lac_desc_logical_or#:#'Oppure' logico assessment#:#qpl_lac_desc_negation#:#Negazione assessment#:#qpl_lac_desc_res_of_answ_m_of_cur_quest#:#Risultato di m-esimo risposta della domanda attuale assessment#:#qpl_lac_desc_res_of_cur_quest#:#Risultato della domanda attuale @@ -1090,9 +1087,9 @@ assessment#:#qpl_lac_legend_label_operators#:#Operatori assessment#:#qpl_maxchars_info_numeric_question#:#Se si immette un valore, il campo per la risposta numerica verrà creato con una lunghezza fissa di questo valore, per cui non è possibile immettere più caratteri di quelli consentiti. Notare che per i gap numerici il separatore decimale viene conteggiato come carattere regolare. assessment#:#qpl_move_insert_clipboard#:#Le domande selezionate sono state evidenziate per lo spostamento. assessment#:#qpl_move_select_none#:#Seleziona almeno una domanda se vuoi spostarla -assessment#:#qpl_numeric_lower_needs_valid_lower_alert#:#The lower bound needs to be valid numerical value lower than the upper bound.###07 02 2020 new variable -assessment#:#qpl_numeric_upper_needs_valid_upper_alert#:#The upper bound needs to be valid numerical value greater than the lower bound.###07 02 2020 new variable -assessment#:#qpl_paste_error#:#At least one question could not pe pasted into the question pool. Possible reason: You tried to move the question into the same question pool. +assessment#:#qpl_numeric_lower_needs_valid_lower_alert#:#Il limite inferiore deve essere un valore numerico minore del limite superirore. +assessment#:#qpl_numeric_upper_needs_valid_upper_alert#:#Il limite superiore deve essere un valore numerico maggiore del limite inferiore. +assessment#:#qpl_paste_error#:#Almeno una domanda non può essere incollata nel pool di domande. Possibile motivo: hai provato a spostare la domanda nello stesso pool di domande. assessment#:#qpl_paste_no_objects#:#Non ci sono domande negli appunti. Per favore, copia o sposta almeno una domanda negli appunti. assessment#:#qpl_paste_success#:#Le domande sono state incollate nella raccolta di domande assessment#:#qpl_qst_edit_form_taxonomy#:#Tassonomia "%s" @@ -1101,52 +1098,52 @@ assessment#:#qpl_qst_inp_matching_mode#:#Modalità di abbinamento assessment#:#qpl_qst_inp_matching_mode_all_on_all#:#Uno o più termini corrispondono a una o più definizioni (n:n) assessment#:#qpl_qst_inp_matching_mode_one_on_one#:#Un termine corrisponde a una definizione (1:1) assessment#:#qpl_qst_skl_assign_properties_modified#:#Le proprietà di assegnazione sono state modificate. -assessment#:#qpl_qst_skl_assign_synced_to_orig#:#Le assegnazioni di competenza sono state sincronizzate alle domande originali. -assessment#:#qpl_qst_skl_assigns_updated#:#Le assegnazioni di competenza sono state aggiornate. -assessment#:#qpl_qst_skl_selection_for_question_header#:#Assegnazioni di competenza per la domanda: %s +assessment#:#qpl_qst_skl_assign_synced_to_orig#:#Le assegnazioni di competenze sono state sincronizzate alle domande originali. +assessment#:#qpl_qst_skl_assigns_updated#:#Le assegnazioni di competenze sono state aggiornate. +assessment#:#qpl_qst_skl_selection_for_question_header#:#Assegnazioni di competenze per la domanda: %s assessment#:#qpl_qst_skl_usg_numq_col#:#Numero delle domande in gruppo che affrontano queste competenze -assessment#:#qpl_qst_skl_usg_skill_col#:#Competenza -assessment#:#qpl_qst_skl_usg_sklpnt_col#:#Somma totale di punti di competenza per competenza +assessment#:#qpl_qst_skl_usg_skill_col#:#competenze +assessment#:#qpl_qst_skl_usg_sklpnt_col#:#Somma totale di punti di competenze per competenze assessment#:#qpl_question_is_in_use#:#La domanda che stai per modificare è inserita in un %s dei test. Se modifichi la domanda, NON verranno modificate le domande nei test, perchè il sistema crea una copia delle domande quando queste vengono inserite in un test! assessment#:#qpl_questions_deleted#:#Domande eliminate assessment#:#qpl_reset_preview#:#Ripristina anteprima -assessment#:#qpl_save_skill_assigns_update#:#Salva assegnazioni della competenza -assessment#:#qpl_settings_availability#:#Availability###26 08 2024 new variable -assessment#:#qpl_settings_general_form_prop_show_tax_desc#:#When enabled, possibly created taxonomies are shown for filtering. +assessment#:#qpl_save_skill_assigns_update#:#Salva assegnazioni della competenze +assessment#:#qpl_settings_availability#:#Availability###30 04 2024 new variable +assessment#:#qpl_settings_general_form_prop_show_tax_desc#:#Se abilitato, le tassonomie eventualmente create vengono mostrate per il filtro. assessment#:#qpl_settings_general_form_property_nav_taxonomy#:#Filtro tassonomia come Albero di navigazione assessment#:#qpl_settings_general_form_property_nav_taxonomy_description#:#Quando viene selezionata una tassonomia, viene presentata come un albero di navigazione invece di elemento filtro tabella. assessment#:#qpl_settings_general_form_property_opt_notax_selected#:#Utilizza nessun filtro albero di navigazione assessment#:#qpl_settings_general_form_property_show_taxonomies#:#Mostra tassonomie assessment#:#qpl_settings_subtab_general#:#Impostazioni generali assessment#:#qpl_settings_subtab_taxonomies#:#Tassonomie -assessment#:#qpl_skill_point_eval_by_quest_result#:#Valutazione dei punti di competenza per risultato della domanda -assessment#:#qpl_skill_point_eval_by_solution_compare#:#Valutazione dei punti di competenza per confronto delle soluzioni +assessment#:#qpl_skill_point_eval_by_quest_result#:#Valutazione dei punti di competenze per risultato della domanda +assessment#:#qpl_skill_point_eval_by_solution_compare#:#Valutazione dei punti di competenze per confronto delle soluzioni assessment#:#qpl_skill_point_eval_mode_quest_result#:#Risultato della domanda assessment#:#qpl_skill_point_eval_mode_solution_compare#:#Confronta soluzioni -assessment#:#qpl_skl_all_questions#:#All questions###29 10 2025 new variable -assessment#:#qpl_skl_assigned_questions#:#Questions with assignment###29 10 2025 new variable -assessment#:#qpl_skl_assignment_for_question#:#Competence assignments for question „%s“###29 10 2025 new variable -assessment#:#qpl_skl_sub_tab_quest_assign#:#Assegnazione della domanda/competenza +assessment#:#qpl_skl_all_questions#:#All questions###28 11 2025 new variable +assessment#:#qpl_skl_assigned_questions#:#Questions with assignment###28 11 2025 new variable +assessment#:#qpl_skl_assignment_for_question#:#Competence assignments for question „%s“###28 11 2025 new variable +assessment#:#qpl_skl_sub_tab_quest_assign#:#Assegnazione della domanda/competenze assessment#:#qpl_skl_sub_tab_usages#:#Frequenza assegnazione -assessment#:#qpl_skl_unassigned_questions#:#Questions without assignment###29 10 2025 new variable -assessment#:#qpl_skl_view_control_mode_aria:#:#View control mode###29 10 2025 new variable -assessment#:#qpl_sync_quest_skl_assigns_confirmation#:#La domanda è stata inserita da un altro oggetto del repository. L’originale della domanda deve essere aggiornato con l’attuale configurazione delle assegnazioni di competenza? +assessment#:#qpl_skl_unassigned_questions#:#Questions without assignment###28 11 2025 new variable +assessment#:#qpl_skl_view_control_mode_aria:#:#View control mode###28 11 2025 new variable +assessment#:#qpl_sync_quest_skl_assigns_confirmation#:#La domanda è stata inserita da un altro oggetto del repository. L’originale della domanda deve essere aggiornato con l’attuale configurazione delle assegnazioni di competenze? assessment#:#qpl_tab_competences#:#Competenze -assessment#:#qpl_taxonomy_tab_info_message#:#Taxonomies in question pools can be used to filter the questions. After activating the function in the "Settings" tab, they are displayed in the filter in the "Questions" tab.###26 08 2024 new variable -assessment#:#qst_error_text_too_long#:#One or more text elements marked as erroneous are too long. The maximum size for a text element marked as erroneous is 150 characters:###26 08 2024 new variable -assessment#:#qst_essay_allready_written_words#:#Already entered words:###07 02 2020 new variable -assessment#:#qst_essay_chars_remaining#:#Remaining characters:###07 02 2020 new variable -assessment#:#qst_essay_wordcounter_enabled#:#Count Words###07 02 2020 new variable -assessment#:#qst_essay_wordcounter_enabled_info#:#The entered words are counted. The number of written words is shown to the participants below the text input field.###07 02 2020 new variable -assessment#:#qst_essay_written_words#:#Number of entered words:###07 02 2020 new variable -assessment#:#qst_lifecycle#:#Lifecycle###07 02 2020 new variable -assessment#:#qst_lifecycle_draft#:#Draft###07 02 2020 new variable -assessment#:#qst_lifecycle_filter_all#:#All Lifecycles###07 02 2020 new variable -assessment#:#qst_lifecycle_final#:#Final###07 02 2020 new variable -assessment#:#qst_lifecycle_outdated#:#Outdated###07 02 2020 new variable -assessment#:#qst_lifecycle_rejected#:#Rejected###07 02 2020 new variable -assessment#:#qst_lifecycle_review#:#To be Reviewed###07 02 2020 new variable -assessment#:#qst_lifecycle_sharable#:#Sharable###07 02 2020 new variable +assessment#:#qpl_taxonomy_tab_info_message#:#Taxonomies in question pools can be used to filter the questions. After activating the function in the "Settings" tab, they are displayed in the filter in the "Questions" tab.###30 07 2024 new variable +assessment#:#qst_error_text_too_long#:#One or more text elements marked as erroneous are too long. The maximum size for a text element marked as erroneous is 150 characters:###21 06 2023 new variable +assessment#:#qst_essay_allready_written_words#:#Parole già inserite: +assessment#:#qst_essay_chars_remaining#:#Caratteri rimanenti: +assessment#:#qst_essay_wordcounter_enabled#:#Conta parole +assessment#:#qst_essay_wordcounter_enabled_info#:#Le parole inserite vengono contate. Il numero di parole scritte viene mostrato ai partecipanti sotto il campo di immissione del testo. +assessment#:#qst_essay_written_words#:#Numero di parole inserite: +assessment#:#qst_lifecycle#:#Ciclo vitale +assessment#:#qst_lifecycle_draft#:#Bozza +assessment#:#qst_lifecycle_filter_all#:#Tutti i cicli di vita +assessment#:#qst_lifecycle_final#:#Finale +assessment#:#qst_lifecycle_outdated#:#Obsoleto +assessment#:#qst_lifecycle_rejected#:#Respinto +assessment#:#qst_lifecycle_review#:#Da rivedere +assessment#:#qst_lifecycle_sharable#:#Condivisibile assessment#:#qst_nested_nested_answers_off#:#No indents, just order###29 07 2022 new variable assessment#:#qst_nested_nested_answers_on#:#Use indents in anwers###29 07 2022 new variable assessment#:#qst_nr_of_tries#:#Numero di tentativi @@ -1154,23 +1151,23 @@ assessment#:#qst_preview_reset_msg#:#L’anteprima è stata ripristinata. assessment#:#qst_use_nested_answers#:#Nested answers###29 07 2022 new variable assessment#:#que_contains_unused_var#:#Il testo della domanda contiene una variabile, che non viene utilizzata in nessuna formula di risultato! assessment#:#question_browse_area_info#:#Si prega di selezionare un oggetto da cui si desidera importare le domande. -assessment#:#question_complete_title#:#Complete###26 08 2024 new variable +assessment#:#question_complete_title#:#Complete###28 11 2025 new variable assessment#:#question_cumulated_statistics#:#Statistica delle domande cumulativa assessment#:#question_id#:#ID domanda assessment#:#question_id_short#:#ID assessment#:#question_instances_title#:#Questa domanda è usata nel seguente test -assessment#:#question_is_part_of_running_test#:#Question is part of a running test and may not be edited.###29 07 2022 new variable +assessment#:#question_is_part_of_running_test#:#Question is part of a running test and may not be edited.###29 06 2022 new variable assessment#:#question_marking#:#Mostra i voti relativi alle domande -assessment#:#question_marking_description#:#Se selezionato, ogni partecipante ha la possibilità di inserire una nota memo a lato della domanda (es. prova ancora, risposto, non risposto).<br />Le note sono visibili anche nella lista delle domande (se disponibile).<br /> +assessment#:#question_marking_description#:#Se selezionato, ogni partecipante ha la possibilità di inserire una nota memo a lato della domanda (es. prova ancora, risposto, non risposto).Le note sono visibili anche nella lista delle domande (se disponibile). assessment#:#question_not_answered#:#Non è stato risposto a questa domanda assessment#:#question_saved_for_upload#:#La domanda è stata salvata automaticamente in modo da lasciare spazio sul disco per l'upload del file. Se vuoi eliminare il form, stai attento perchè devi eliminare la domanda dall'elenco nel caso tu non la voglia piu' tenere! assessment#:#question_summary#:#Elenco delle domande -assessment#:#question_summary_btn#:#Processing Status +assessment#:#question_summary_btn#:#Stato di elaborazione assessment#:#question_title#:#Titolo della domanda assessment#:#question_type#:#Tipo di domanda assessment#:#questionpool_not_entered#:#Per favore inserisci il nome della raccolta di domande! -assessment#:#questionpool_not_selected#:#Please select a question pool!###07 02 2020 new variable -assessment#:#questions#:#Questions###26 08 2024 new variable +assessment#:#questionpool_not_selected#:#Please select a question pool! +assessment#:#questions#:#Questions###30 04 2024 new variable assessment#:#questions_from#:#domande da assessment#:#questions_per_page_view#:#Visualizza pagina assessment#:#random_accept_sample#:#Accetta esempio @@ -1194,21 +1191,21 @@ assessment#:#rectangle_click_br_corner#:#Per favore clicca sull'angolo inferiore assessment#:#rectangle_click_tl_corner#:#Per favore clicca sull'angolo superiore sinistro dell'area desiderata. assessment#:#redirectAfterSave#:#È stata raggiunto il tempo massimo su questo test, la tua risposta è stata salvata automaticamente. In pochi secondo verrà reindirizzato... assessment#:#redirect_after_finishing_rule#:#Reindirizza -assessment#:#redirect_after_finishing_tst#:#Redirect after finishing the test +assessment#:#redirect_after_finishing_tst#:#Reindirizzare dopo aver terminato il test assessment#:#redirect_after_finishing_tst_desc#:#Dopo il completamento del test, ogni partecipante viene reindirizzato automaticamente a una pagina Web definita. Questo è possibile solo se i partecipanti non hanno accesso ai propri risultati del test. assessment#:#redirect_always#:#sempre alla pagine web definita -assessment#:#redirect_always_to_logout#:#Always to the logout screen###29 10 2025 new variable -assessment#:#redirect_in_kiosk_mode#:#Redirect only in kiosk mode -assessment#:#redirect_url_invalid#:#Please enter a valid url of the target webpage.###29 10 2025 new variable -assessment#:#redirect_url_required_for_rule#:#The url of the webpage is required when "%s" is selected.###29 10 2025 new variable -assessment#:#redirection_url#:#Redirection target +assessment#:#redirect_always_to_logout#:#Always to the logout screen###04 11 2025 new variable +assessment#:#redirect_in_kiosk_mode#:#Reindirizzamento solo in modalità esame +assessment#:#redirect_url_invalid#:#Please enter a valid url of the target webpage.###04 11 2025 new variable +assessment#:#redirect_url_required_for_rule#:#The url of the webpage is required when "%s" is selected.###04 11 2025 new variable +assessment#:#redirection_url#:#Target di reindirizzamento assessment#:#region#:#Regione -assessment#:#remaining_duration#:#Remaining Duration###28 10 2024 new variable +assessment#:#remaining_duration#:#Remaining Duration###28 11 2025 new variable assessment#:#remove_gap#:#Rimuovi spazio -assessment#:#remove_participants#:#Rimuovere tutti i partecipanti fissi +assessment#:#remove_participants#:#Remove Participant(s)###28 11 2025 new variable assessment#:#remove_question#:#Rimuovi -assessment#:#remove_selected_participants_confirmation#:#Are you sure you want to remove the selected participants from the test?###28 10 2024 new variable -assessment#:#remove_selected_templates_confirmation#:#Are you sure you want to permanently remove the selected personal test settings templates?###29 10 2025 new variable +assessment#:#remove_selected_participants_confirmation#:#Are you sure you want to remove the selected participants from the test?###28 11 2025 new variable +assessment#:#remove_selected_templates_confirmation#:#Are you sure you want to permanently remove the selected personal test settings templates?###28 11 2025 new variable assessment#:#remove_solution#:#Rimuovi la soluzione suggerita assessment#:#res_contains_undef_res#:#Una formula di risultato contiene un risultato non definito! assessment#:#res_contains_undef_var#:#Una formula di risultato contiene una variabile non definita! @@ -1223,19 +1220,19 @@ assessment#:#result_dec_info#:#I risultati valido sono cioè: 2,3 e 2.3 assessment#:#result_frac#:#Frazione assessment#:#result_frac_info#:#ovvero: 1/3 e 2/6 sono risultati validi assessment#:#result_type_selection#:#Selezione tipo di risultato -assessment#:#result_unit_info#:#Please note that, the selected result unit must also be activated in the "available units." +assessment#:#result_unit_info#:#Si noti che anche l'unità di risultato selezionata deve essere attivata nelle "unità disponibili". assessment#:#result_units#:#Unità disponibili assessment#:#result_units_info#:#Le unità selezionate vengono proposte all’allievo come parte della risposta. L’allievo deve scegliere una unità. assessment#:#result_x#:#Risultato %s assessment#:#results#:#Risultati -assessment#:#results_tab#:#Results -assessment#:#resulttable_all#:#All###26 08 2024 new variable -assessment#:#resulttable_correct#:#Correct###26 08 2024 new variable -assessment#:#resulttable_incorrect#:#Incorrect/Incomplete###26 08 2024 new variable -assessment#:#resulttable_vc_sort_iooa#:#in order of appearance###26 08 2024 new variable -assessment#:#resulttable_vc_sort_posscore#:#highest possible score first###26 08 2024 new variable +assessment#:#results_tab#:#Risultati +assessment#:#resulttable_all#:#All###30 04 2024 new variable +assessment#:#resulttable_correct#:#Correct###30 04 2024 new variable +assessment#:#resulttable_incorrect#:#Incorrect/Incomplete###30 04 2024 new variable +assessment#:#resulttable_vc_sort_iooa#:#in order of appearance###30 04 2024 new variable +assessment#:#resulttable_vc_sort_posscore#:#highest possible score first###30 04 2024 new variable assessment#:#review_view#:#Controlla -assessment#:#running#:#Running###28 10 2024 new variable +assessment#:#running#:#Running###28 11 2025 new variable assessment#:#saveOrder#:#Ordine di salvataggio assessment#:#saveOrderAndObligations#:#Salva Ordine e Obblighi assessment#:#save_and_next#:#Salva e continua @@ -1244,113 +1241,113 @@ assessment#:#save_on_navigation_confirmation#:#Le tue risposte modificate verran assessment#:#save_on_navigation_forced_feedback_hint#:#Prima bisogna ottenere un feedback sulla risposta data. assessment#:#save_on_navigation_locked_confirmation#:#Le tue risposte cambiate verranno automaticamente salvate e bloccate quando navighi. assessment#:#saved_adjustment#:#Modifiche salvate. -assessment#:#score_anon#:#Score anonymously###29 10 2025 new variable -assessment#:#score_partsol_enabled#:#Score Partial Solutions +assessment#:#score_anon#:#Score anonymously###28 11 2025 new variable +assessment#:#score_partsol_enabled#:#Punteggio soluzioni parziali assessment#:#score_partsol_enabled_info#:#Solitamente i partecipanti devono rispondere alla domanda in modo completamente corretto per ottenere i punti configurati. Con questa opzione il partecipante ottiene la metà dei punti configurati con almeno tre scelte corrette. -assessment#:#scored_by#:#Scored BY###29 10 2025 new variable +assessment#:#scored_by#:#Scored BY###28 11 2025 new variable assessment#:#scored_pass#:#Punteggio passato assessment#:#scoring#:#Punteggio e risultati assessment#:#scoringadjust#:#Correzioni assessment#:#search_groups#:#Ricerca gruppi assessment#:#search_roles#:#Ricerca ruoli assessment#:#search_term#:#Ricerca termini -assessment#:#select_at_least_one_feedback_type_and_trigger#:#Please Select at least one type of feedback and a trigger.###26 08 2024 new variable -assessment#:#select_at_least_one_lock_answer_type#:#Please select at least one type of answer lock.###29 10 2025 new variable +assessment#:#select_at_least_one_feedback_type_and_trigger#:#Please Select at least one type of feedback and a trigger.###30 04 2024 new variable +assessment#:#select_at_least_one_lock_answer_type#:#Please select at least one type of answer lock.###28 11 2025 new variable assessment#:#select_gap#:#Seleziona spazio assessment#:#select_max_one_item#:#Per favore scegli un solo elemento assessment#:#select_one_user#:#Seleziona almeno un utente -assessment#:#select_question#:#Select a Question###28 10 2024 new variable -assessment#:#select_target_position_for_move_question#:#Per favore, seleziona la destinazione nella quale vuoi spostare la domanda e premi il pulsante & +assessment#:#select_question#:#Select a Question###28 11 2025 new variable +assessment#:#select_target_position_for_move_question#:#Seleziona una posizione target per spostare le domande e premi uno dei pulsanti Inserisci! assessment#:#select_unit#:#--- Seleziona unità --- assessment#:#selected_category#:#Categoria selezionata: %s assessment#:#selection#:#Selezione assessment#:#set_edit_mode#:#Imposta la modalità di edit assessment#:#set_filter#:#Filtra assessment#:#set_manscoring_done#:#Segna questo partecipante come "Partecipante Valutato" -assessment#:#set_manscoring_open#:#Remove 'scoring complete' flag###29 10 2025 new variable +assessment#:#set_manscoring_open#:#Remove 'scoring complete' flag###28 11 2025 new variable assessment#:#set_manual_feedback#:#Imposta il feedback manuale assessment#:#shape#:#Forma assessment#:#showSuggestedSolution#:#Soluzione proposta -assessment#:#show_all_test_properties_on_info_page#:#Mostra la Information Page completa -assessment#:#show_all_test_properties_on_info_page_byline#:#Se selezionato, la Pagina Info Test viene mostrata (incluse le proprietà del test). Se non selezionato, solo il testo di introduzione (se disponibile) e le proprietà richieste verranno mostrate sulla Pagina Info Test.<br /> +assessment#:#show_all_test_properties_on_info_page#:#Show all Test Properties###30 04 2024 new variable +assessment#:#show_all_test_properties_on_info_page_byline#:#Users will be presented with a complete list of test properties in the ‘Info’ tab, i.e. information on scoring and reporting.###30 04 2024 new variable assessment#:#show_answer_overview#:#Mostra panoramica risposte -assessment#:#show_best_solution#:#Show best solution###28 10 2024 new variable +assessment#:#show_best_solution#:#Show best solution###28 11 2025 new variable assessment#:#show_detailed_results#:#Mostra i risultati dettagliati del test (svolgimento del test valutato) -assessment#:#show_examview_html#:#Show exam view on the test submission page. -assessment#:#show_hide_best_solution#:#Show or hide best solution###28 10 2024 new variable -assessment#:#show_old_concluding_remarks#:#Show old conlcuding remarks###26 08 2024 new variable -assessment#:#show_old_introduction#:#Show old introduction###26 08 2024 new variable +assessment#:#show_examview_html#:#Mostra la vista dell'esame nella pagina di invio del test. +assessment#:#show_hide_best_solution#:#Show or hide best solution###28 11 2025 new variable +assessment#:#show_old_concluding_remarks#:#Show old concluding remarks###30 04 2024 new variable +assessment#:#show_old_introduction#:#Show old introduction###30 04 2024 new variable assessment#:#show_pass_overview#:#Mostra il sommario dei voti -assessment#:#show_results#:#Show Results###28 10 2024 new variable +assessment#:#show_results#:#Show Results###28 11 2025 new variable assessment#:#show_user_answers#:#Mostra le risposte valutate degli utenti assessment#:#shuffle_answers#:#Mescola le risposte assessment#:#skip_question#:#Non rispondere e Avanti -assessment#:#solution#:#Solution###28 10 2024 new variable +assessment#:#solution#:#Solution###28 11 2025 new variable assessment#:#solutionText#:#testo -assessment#:#solution_contain_keywords#:#Score is granted based on the occurence of the following keywords: +assessment#:#solution_contain_keywords#:#Il punteggio è concesso in base al verificarsi delle seguenti parole chiave: assessment#:#solution_hint#:#Mostra la soluzione -assessment#:#solutions#:#Solutions###28 10 2024 new variable -assessment#:#start_tag#:#Inizio tag +assessment#:#solutions#:#Solutions###28 11 2025 new variable +assessment#:#start_tag#:#Segno d'inizio assessment#:#statistical_data#:#Dati statistici assessment#:#statistics#:#Statistiche -assessment#:#status_of_attempt#:#Status of Attempt###28 10 2024 new variable -assessment#:#submit_and_check#:#Submit and Check Answer -assessment#:#submit_answer#:#Submit Answer +assessment#:#status_of_attempt#:#Status of Attempt###28 11 2025 new variable +assessment#:#submit_and_check#:#Invia e controlla la risposta +assessment#:#submit_answer#:#Inviare risposta assessment#:#suggest_range#:#Suggerisci intervallo assessment#:#suggestedSolutionType#:#Tipo di soluzione proposta assessment#:#suggested_solution#:#Contenuto per la ricapitolazione assessment#:#suggested_solution_added_successfully#:#Hai risposto correttamente! -assessment#:#sync_question_to_pool#:#Synchronize Question###26 08 2024 new variable -assessment#:#ta_resulttable_vc_mode_aria#:#switch question mode###26 08 2024 new variable +assessment#:#sync_question_to_pool#:#Synchronize Question###28 11 2025 new variable +assessment#:#ta_resulttable_vc_mode_aria#:#switch question mode###30 04 2024 new variable assessment#:#tab_nest_answers#:#Nesting###29 07 2022 new variable -assessment#:#tax_filter#:#Taxonomy###26 08 2024 new variable -assessment#:#tax_filter_notax#:#Questions without assigned Taxonomy###26 08 2024 new variable -assessment#:#taxonomy_node_title#:#Taxonomy Node Title###28 10 2024 new variable -assessment#:#taxonomy_title#:#Taxonomy Title###28 10 2024 new variable +assessment#:#tax_filter#:#Taxonomy###30 04 2024 new variable +assessment#:#tax_filter_notax#:#Questions without assigned Taxonomy###30 04 2024 new variable +assessment#:#taxonomy_node_title#:#Taxonomy Node Title###28 11 2025 new variable +assessment#:#taxonomy_title#:#Taxonomy Title###28 11 2025 new variable assessment#:#term#:#Termine assessment#:#term_image#:#Immagine di termine -assessment#:#term_text#:#Testo di termine +assessment#:#term_text#:#Testo del termine assessment#:#terms#:#Termini -assessment#:#test_attempts_finished#:#The test pass has been finished for the selected participants.###28 10 2024 new variable +assessment#:#test_attempts_finished#:#The test pass has been finished for the selected participants.###28 11 2025 new variable assessment#:#test_confirm_template_reset#:#Sei sicuro/a che non vuoi più usare il template? assessment#:#test_delete_page#:#Cancella domanda assessment#:#test_edit_settings#:#Modifica impostazioni -assessment#:#test_enable_archiving#:#Enable Archiving. -assessment#:#test_has_datasets_warning_page_view#:#Il test contiene gia' datasets. Non puoi modigicare le domande del test finchè non rimuovi quei datasets. -assessment#:#test_has_datasets_warning_page_view_link#:#Modifica partecipanti +assessment#:#test_enable_archiving#:#Abilita l'archiviazione +assessment#:#test_has_datasets_warning_page_view#:#Il test contiene gia' datasets. Non puoi modificare le domande del test finchè non rimuovi quei datasets. +assessment#:#test_has_datasets_warning_page_view_link#:#Risultati dei partecipanti assessment#:#test_is_offline#:#Non puoi iniziare il test! Il test è offline. assessment#:#test_jump_to#:#Salta alla domanda -assessment#:#test_move_page#:#Sposta domanda +assessment#:#test_move_page#:#Sposta la domanda assessment#:#test_next_question#:#Prossima domanda assessment#:#test_prev_question#:#Domanda precedente -assessment#:#test_question_set_type#:#Selection of Test Questions###29 07 2022 new variable -assessment#:#test_question_set_type_fixed#:#Use of a fixed set of questions###29 07 2022 new variable -assessment#:#test_question_set_type_fixed_info#:#All testees see the same questions.<br>You can create questions directly in the test as well as reuse questions from a Question Pool. If you create new questions you can decide to save them in a Question Pool.###29 07 2022 new variable -assessment#:#test_question_set_type_random#:#Use of a random set of questions###29 07 2022 new variable -assessment#:#test_question_set_type_random_info#:#Every testee will see an individually generated set of questions. The questions are drawn from one or more Question Pools.###29 07 2022 new variable -assessment#:#test_results#:#Results Options -assessment#:#test_scoring#:#Opzioni di punteggio +assessment#:#test_question_set_type#:#Selection of Test Questions###31 03 2023 new variable +assessment#:#test_question_set_type_fixed#:#Fixed Questions###31 03 2023 new variable +assessment#:#test_question_set_type_fixed_info#:#All test participants see the same questions.<br>You can create questions directly in the test as well as use questions from a Question Pool. If you create new questions, you can decide to save them in a Question Pool.###31 03 2023 new variable +assessment#:#test_question_set_type_random#:#Random Questions###31 03 2023 new variable +assessment#:#test_question_set_type_random_info#:#Each test participant will see an individually generated set of questions. The questions are drawn from one or more Question Pools.###31 03 2023 new variable +assessment#:#test_results#:#Risultati dei test +assessment#:#test_scoring#:#Punteggio dei test assessment#:#test_template_reset#:#Il template è stato rimosso. -assessment#:#test_title#:#Test Title###28 10 2024 new variable +assessment#:#test_title#:#Test Title###28 11 2025 new variable assessment#:#test_using_template#:#Questo test usa il template %s. Se non vuoi usare un template e accedere a tutte le impostazioni, per favore clicca qui: %s. -assessment#:#test_using_template_link#:#Non usare più template +assessment#:#test_using_template_link#:#Non usare più il template assessment#:#text_correct#:#Testo corretto assessment#:#text_gap#:#Spazio vuoto -assessment#:#text_maximum_chars_allowed#:#Il numero massimo di caratteri consentiti & +assessment#:#text_maximum_chars_allowed#:#Non inserire più di un massimo di %s caratteri. Gli inserimenti in eccedenza non verranno tagliati, ma potrebbero essere considerati per la valutazione. assessment#:#text_rating#:#Metodo per il confronto del testo assessment#:#text_wrong#:#Testo sbagliato assessment#:#textsize#:#Dimensione del testo -assessment#:#textsize_errortext_info#:#Immettere le dimensioni del testo di errore in percentuale se si desidera un altro formato che non sia il 100 per cento. -assessment#:#textsize_info#:#Inserire la dimensione del testo in percentuale, se si desidera una dimensione diversa dal 100 per cento.<br /> +assessment#:#textsize_errortext_info#:#Immettere le dimensioni del testo in percentuale relativamente alla grandezza normale. Se non verrà immesso nessun valore verrà usata una grandezza del 100 per cento. +assessment#:#textsize_info#:#Inserisci la dimensione del testo da disporre come percentuale della dimensione normale. Se non si specifica un valore, viene utilizzata la dimensione normale (100 percento). assessment#:#thumb_size#:#Misure della miniatura (thumbnail) -assessment#:#thumb_size_info#:#La miniatura dell'immagine verrà creata con valori massimi di altezza e larghezza, dati dal sistema, preservando l'aspetto. +assessment#:#thumb_size_info#:#Immettere un valore in pixel per la dimensione massima dell'anteprima della grafica. A seconda delle proporzioni, l'anteprima viene convertita in altezza o in larghezza nella dimensione massima dell'anteprima. assessment#:#thumb_size_unit_pixel#:#Pixel assessment#:#time_format#:#HH MM SS assessment#:#timing#:#Tempo supplementare assessment#:#tolerance#:#Tolleranza (%) assessment#:#tolerance_info#:#La tolleranza determina una deviazione percentuale consentita dal valore del risultato. Con una tolleranza di 0, solo il valore esatto del risultato viene valutato come corretto. -assessment#:#too_many_targets_selected_for_move#:#Devi selezionare esattamente una posizione obiettivo! -assessment#:#toplist_by_score#:#Punteggio più alto in base al punteggio +assessment#:#too_many_targets_selected_for_move#:#Devi selezionare esattamente una posizione di destinazione! +assessment#:#toplist_by_score#:#Posizionamento da punteggio assessment#:#toplist_by_time#:#Punteggio più alto in base al tempo di lavoro assessment#:#toplist_col_achieved#:#Data assessment#:#toplist_col_participant#:#Participante @@ -1358,210 +1355,206 @@ assessment#:#toplist_col_percentage#:#Percentuale assessment#:#toplist_col_rank#:#Classifica assessment#:#toplist_col_score#:#Punteggio assessment#:#toplist_col_wtime#:#Tempo di lavoro -assessment#:#total_attempts#:#Total Attempts###28 10 2024 new variable -assessment#:#total_duration#:#Total Duration###28 10 2024 new variable -assessment#:#total_max_points_cannot_be_negative#:#The maximum amount of reachable points cannot be negative.###29 10 2025 new variable +assessment#:#total_attempts#:#Total Attempts###28 11 2025 new variable +assessment#:#total_duration#:#Total Duration###28 11 2025 new variable +assessment#:#total_max_points_cannot_be_negative#:#The maximum amount of reachable points cannot be negative.###01 04 2025 new variable assessment#:#true#:#Vero assessment#:#tst_access_code_created#:#Per renderti accessibile sempre il test ed offrirti la possibilità di rivederlo, è stato creato un codice unico. Per favore scrivitelo per usarlo in futuro. -assessment#:#tst_activate_skill_service#:#Activate Competence Service -assessment#:#tst_activate_skill_service_desc#:#A new tab 'Competences' will be displayed. In this tab questions are assigned to competences, then thresholds are ascribed for reaching a specific level of a competence. -assessment#:#tst_activation_limited_visibility_info#:#Before and after the period during which the test is available, the test's title will be displayed, but participants won’t be able to take the test. Access, including to tests already in progress, will be prevented once the period of availability has ended.###29 10 2025 new variable +assessment#:#tst_activate_skill_service#:#Attiva il servizio competenze +assessment#:#tst_activate_skill_service_desc#:#Verrà visualizzata una nuova scheda "Competenze". In questa scheda le domande vengono assegnate alle competenze, quindi vengono assegnate le soglie per raggiungere uno specifico livello di competenze. +assessment#:#tst_activation_limited_visibility_info#:#Se scelto, il test è visibile anche all'esterno della disponibilità data. assessment#:#tst_activation_online_info#:#Se non in linea, solo gli amministratori possono visualizzare e modificare il test. -assessment#:#tst_add_quest_cont_edit_mode#:#Editing Mode for additional Question Content -assessment#:#tst_add_quest_cont_edit_mode_IPE#:#Additional Content Editing with Page Object Editor -assessment#:#tst_add_quest_cont_edit_mode_IPE_info#:#No formatting of text in question and answers. No use of LaTex either. But feedback and hints can be reused when question is embedded in ILIAS learning module.###29 07 2022 new variable -assessment#:#tst_add_quest_cont_edit_mode_RTE#:#Default Editing Mode for Additional Question Content -assessment#:#tst_add_quest_cont_edit_mode_RTE_info#:#Allows text formatting of questions, answers, feedbacks and hints. But feedback and hints cannot be reused when question is embedded in ILIAS learning module.###29 07 2022 new variable -assessment#:#tst_add_quest_cont_edit_mode_plain#:#Use plain text###29 10 2025 new variable -assessment#:#tst_add_quest_cont_edit_mode_plain_info#:#No formatting of text in question, answers and feedback.###29 10 2025 new variable -assessment#:#tst_addit_passes_blocked_after_passed_msg#:#You have passed the test. The test cannot be started again.###07 02 2020 new variable +assessment#:#tst_add_quest_cont_edit_mode#:#Editor per feedback e suggerimenti sulla soluzione +assessment#:#tst_add_quest_cont_edit_mode_IPE#:#Modifica del contenuto aggiuntivo con l'editor degli oggetti di pagina +assessment#:#tst_add_quest_cont_edit_mode_IPE_info#:#Nessuna formattazione del testo in domanda e risposte. Nessun uso di LaTex. Feedback e suggerimenti possono essere riutilizzati quando la domanda è incorporata nel modulo ILIAS. +assessment#:#tst_add_quest_cont_edit_mode_RTE#:#Modalità di modifica predefinita per contenuti di domande aggiuntive +assessment#:#tst_add_quest_cont_edit_mode_RTE_info#:#Consente la formattazione del testo di domande, risposte, feedback e suggerimenti. Feedback e suggerimenti non possono essere riutilizzati quando la domanda è incorporata nel modulo ILIAS. +assessment#:#tst_add_quest_cont_edit_mode_plain#:#Use plain text###10 12 2024 new variable +assessment#:#tst_add_quest_cont_edit_mode_plain_info#:#No formatting of text in question, answers, feedback, and hints.###10 12 2024 new variable +assessment#:#tst_addit_passes_blocked_after_passed_msg#:#Hai superato il test. Il test non può essere riavviato. assessment#:#tst_all_test_competences#:#Tutte le competenze di test -assessment#:#tst_all_user_data_deleted#:#Tutti i dati di questo test sono stati cancellati! -assessment#:#tst_already_passed_cannot_retake#:#Test already passed. You cannot start the test again.###26 08 2024 new variable +assessment#:#tst_all_user_data_deleted#:#Tutti i dati dei partecipanti a questo test sono stati cancellati! +assessment#:#tst_already_passed_cannot_retake#:#Test already passed. You cannot start the test again.###30 04 2024 new variable assessment#:#tst_already_submitted#:#Il test è gia' stato eseguito e inviato. assessment#:#tst_analysis#:#Analisi assessment#:#tst_anonymity#:#Anonimato assessment#:#tst_anonymity_anonymous_test#:#Test anonimo -assessment#:#tst_anonymity_no_anonymization#:#Nessuna forma anonima -assessment#:#tst_answer_aggr_answer_header#:#Answer -assessment#:#tst_answer_aggr_frequency_header#:#Frequency +assessment#:#tst_anonymity_no_anonymization#:#Risultati del test per nome +assessment#:#tst_answer_aggr_answer_header#:#Risposta +assessment#:#tst_answer_aggr_frequency_header#:#Frequenza assessment#:#tst_answer_details#:#Dettagli risposta -assessment#:#tst_answer_fixation#:#Lock Answers###29 10 2025 new variable -assessment#:#tst_answer_fixation_handling#:#Participant Answers -assessment#:#tst_answer_fixation_none#:#Do not Lock Participants Answers during Test Passes -assessment#:#tst_answer_fixation_none_desc#:#As long as a test pass was not finished, participants can change their answers at any time. -assessment#:#tst_answer_fixation_on_followup_question#:#Lock Answers with the Presentation of Follow-Up Questions -assessment#:#tst_answer_fixation_on_followup_question_desc#:#Showing the follow-up question will lock participant answers for the previous question, participants cannot change these answers any longer. -assessment#:#tst_answer_fixation_on_instant_feedback#:#Lock Answers with the Presentation of Feedback -assessment#:#tst_answer_fixation_on_instant_feedback_desc#:#After the feedback for a question is shown participant answers are locked, participants cannot change these answers any longer. -assessment#:#tst_answer_fixation_on_instantfb_or_followupqst#:#Lock Answers with the Presentation of Feedback or Follow-Up Questions -assessment#:#tst_answer_fixation_on_instantfb_or_followupqst_desc#:#Participant Answers for a question will be locked either with the presentation of the questions's feedback or when the follow-up question is shown. +assessment#:#tst_answer_fixation#:#Lock Answers###28 11 2025 new variable +assessment#:#tst_answer_fixation_handling#:#Risposte dei partecipanti +assessment#:#tst_answer_fixation_none#:#Non bloccare le risposte durante le fasi del test +assessment#:#tst_answer_fixation_none_desc#:#Fino a che un un test non è concluso in tutte le sue fasi, il partecipanti possono cambiare le loro risposte in ogni momento. +assessment#:#tst_answer_fixation_on_followup_question#:#Blocca le risposte nelle domande di Presentazione e di Follow-Up +assessment#:#tst_answer_fixation_on_followup_question_desc#:#Mostrando le domande di follow-up i partecipanti non potranno più modificare le risposte date nei precedenti test. +assessment#:#tst_answer_fixation_on_instant_feedback#:#Blocca le risposte nelle domande di presentazione di Feedback +assessment#:#tst_answer_fixation_on_instant_feedback_desc#:#Dopo che viene dato un feedaback a una domanda, non è più possibile per l'utente cambiare la risposta data. +assessment#:#tst_answer_fixation_on_instantfb_or_followupqst#:#Blocca le risposte durante la presentazione delle risposte correte o delle domande di follow-up. +assessment#:#tst_answer_fixation_on_instantfb_or_followupqst_desc#:#Le risposte dei partecipanti riguardo a una domanda saranno bloccate durante la presentazione delle risposte corrette o mentre il follow-up è in corso. assessment#:#tst_answer_status_answered#:#Risposto -assessment#:#tst_answer_status_editing#:# (editing ... ) +assessment#:#tst_answer_status_editing#:# (in corso) assessment#:#tst_answer_status_not_answered#:#Non risposto assessment#:#tst_answered_questions#:#Domande già risposte -assessment#:#tst_answered_questions_of_total#:#%s of %s###07 02 2020 new variable -assessment#:#tst_answered_questions_test#:#Risposte relative a questo test +assessment#:#tst_answered_questions_of_total#:#%s di %s +assessment#:#tst_answered_questions_test#:#Domande risposte in questo test assessment#:#tst_attached_xls_file#:#Puoi trovare il risultato del test per questo partecipante nel file Excel allegato. assessment#:#tst_attempt#:#Tentativo -assessment#:#tst_attempt_limit_message#:#Your limit of test attempts is <b>%s</b>.###26 08 2024 new variable -assessment#:#tst_attempt_started#:#Test Iniziato +assessment#:#tst_attempt_limit_message#:#Your limit of test attempts is <b>%s</b>.###30 04 2024 new variable +assessment#:#tst_attempt_started#:#Attempt Started###28 11 2025 new variable assessment#:#tst_back_to_pass_details#:#Torna ai dettagli del passaggio assessment#:#tst_back_to_question_list#:#Torna all’elenco domande assessment#:#tst_back_to_top#:#Torna all’inizio -assessment#:#tst_back_to_virtual_pass#:#Back to Questionoverview +assessment#:#tst_back_to_virtual_pass#:#Torna alla panoramica delle domande assessment#:#tst_best_solution_is#:#La soluzione migliore è -assessment#:#tst_block_passes_after_passed#:#Block Additional Passes After Test is Passed###07 02 2020 new variable -assessment#:#tst_block_passes_after_passed_info#:#After a participant has passed the test, no further test passes are allowed to the participant with this option.###07 02 2020 new variable -assessment#:#tst_browse_for_qpl_questions#:#Aggiungi da gruppo -assessment#:#tst_browse_for_tst_questions#:#Aggiungi da altro gruppo +assessment#:#tst_block_passes_after_passed#:#Blocca passaggi aggiuntivi dopo che il test è stato superato +assessment#:#tst_block_passes_after_passed_info#:#Dopo che un partecipante ha superato il test, non sono consentiti ulteriori passaggi di test al partecipante con questa opzione. +assessment#:#tst_browse_for_qpl_questions#:#Aggiungi da una raccolta +assessment#:#tst_browse_for_tst_questions#:#Aggiungi da altro test assessment#:#tst_btn_hide_best_solutions#:#Nascondi soluzioni migliori -assessment#:#tst_btn_rebuild_random_question_stage#:#Synchronize Quesitons from Pool -assessment#:#tst_btn_reset_pool_sync#:#Edit/Cancel Synchronisation###29 07 2022 new variable +assessment#:#tst_btn_rebuild_random_question_stage#:#Sincronizza le domande dalla raccolta +assessment#:#tst_btn_reset_pool_sync#:#Edit/Cancel Synchronisation###29 06 2022 new variable assessment#:#tst_btn_show_best_solutions#:#Mostra soluzioni migliori assessment#:#tst_cannot_online_due_to_switched_quest_set_type_setting#:#Il test non può essere impostato su online perché l’impostazione della modalità del test è stata cambiata. È necessario impostare una nuova modalità di test relativa alla configurazione della domanda prima che il test possa essere impostato su online. -assessment#:#tst_change_dyn_test_question_selection#:#Change Current Question Selection +assessment#:#tst_change_dyn_test_question_selection#:#Modifica selezione domanda corrente assessment#:#tst_change_points_for_question#:#Cambia il punteggio delle risposte -assessment#:#tst_change_quest_set_type_from_old_to_new_with_conflict#:#You are about to change the test mode from <b>%s</b> to <b>%s</b>, although a questions/questionpool configuration dependent on the current test mode already exists.<br />This already existing configuration will be lost. +assessment#:#tst_change_quest_set_type_from_old_to_new_with_conflict#:#Stai per cambiare la modalità di test da <b>%s</b> a <b>%s</b>, anche se esiste già una configurazione di domande / domande che dipende dalla modalità di test corrente. <br /> Questo già la configurazione esistente andrà persa. assessment#:#tst_change_workingtime#:#Aggiungi tempo supplementare per partecipante assessment#:#tst_comp_eval_mode#:#Valutazione da -assessment#:#tst_comp_points#:#Punti di competenza -assessment#:#tst_competence#:#Competenza -assessment#:#tst_competence_tree#:#Competence tree###29 10 2025 new variable -assessment#:#tst_conditions_checkbox_enabled#:#Exam Conditions###26 08 2024 new variable -assessment#:#tst_conditions_checkbox_enabled_desc#:#Participants must select a checkbox to start the test. Please use the introductory message to present the exam to the participants.###26 08 2024 new variable +assessment#:#tst_comp_points#:#Punti di competenze +assessment#:#tst_competence#:#Competenze +assessment#:#tst_competence_tree#:#Competence tree###28 11 2025 new variable +assessment#:#tst_conditions_checkbox_enabled#:#Exam Conditions###30 04 2024 new variable +assessment#:#tst_conditions_checkbox_enabled_desc#:#Participants must select a checkbox to start the test. Please use the introductory message to present the exam to the participants.###30 04 2024 new variable assessment#:#tst_confirm_submit_answers#:#Per favore conferma l'invio della soluzione. Non sarai piu' in grado di correggere le risposte dopo aver premuto 'Invia'. Se vuoi stampare le risposte utilizza il menu 'Stampa' del tuo Browser. -assessment#:#tst_conflicting_setting#:#This setting does conflict with another setting. +assessment#:#tst_conflicting_setting#:#Questa impostazione è in conflitto con un'altra impostazione. assessment#:#tst_copy#:#Copia test -assessment#:#tst_corr_add_as_answer_btn#:#Add as Correct Answer -assessment#:#tst_corr_answ_stat_tbl_header_answer#:#Answer -assessment#:#tst_corr_answ_stat_tbl_header_frequency#:#Frequency -assessment#:#tst_corrections_answers_tbl#:#Statistics -assessment#:#tst_corrections_answers_tbl_subindex#:#Statistics for %s -assessment#:#tst_corrections_incompatible_question_set_type#:#Corrections are only possible if the test uses a fixed set of questions.###29 07 2022 new variable -assessment#:#tst_corrections_manscore_reset_warning#:#There are %s manual scorings that have been done for the question "%s (ID: %s)". All manual scorings will be reset when saving the question.###07 02 2020 new variable -assessment#:#tst_corrections_qst_form#:#Correction of Points -assessment#:#tst_corrections_tab_question#:#Question -assessment#:#tst_corrections_tab_solution#:#Solution -assessment#:#tst_corrections_tab_statistics#:#Statistics -assessment#:#tst_count_correct_solutions#:#Conta solo i test completati. -assessment#:#tst_count_correct_solutions_desc#:#Participants score either the maximum number of points for a fully correct and complete answer or 0 points in every other case. +assessment#:#tst_corr_add_as_answer_btn#:#Aggiungi come risposta corretta +assessment#:#tst_corr_answ_stat_tbl_header_answer#:#Risposta +assessment#:#tst_corr_answ_stat_tbl_header_frequency#:#Frequenza +assessment#:#tst_corrections_answers_tbl#:#Statistiche delle risposte +assessment#:#tst_corrections_answers_tbl_subindex#:#Statistiche per %s +assessment#:#tst_corrections_incompatible_question_set_type#:#Corrections are only possible if the test uses a fixed set of questions.###09 03 2022 new variable +assessment#:#tst_corrections_manscore_reset_warning#:#Sono stati eseguiti i punteggi manuali di %s per la domanda "%s (ID: %s)". Tutti i punteggi manuali verranno ripristinati quando si salva la domanda. +assessment#:#tst_corrections_qst_form#:#Correzione dei punti +assessment#:#tst_corrections_tab_question#:#Domanda +assessment#:#tst_corrections_tab_solution#:#Soluzione +assessment#:#tst_corrections_tab_statistics#:#Statistiche della risposta +assessment#:#tst_count_correct_solutions#:#Solo le risposte corrette e complete ottengono punti +assessment#:#tst_count_correct_solutions_desc#:#I partecipanti ottengono il numero massimo di punti per una risposta completamente corretta e completa o 0 punti in ogni altro caso. assessment#:#tst_count_partial_solutions#:#Conta anche i test risolti parzialmente. -assessment#:#tst_count_partial_solutions_desc#:#Points for correctly provided partial answers are added up: Participants can score points for incomplete or partly wrong answers. -assessment#:#tst_current_run_no_longer_valid#:#Your current test run is no longer valid. <br>It was probably completed already or finished by a tutor.###26 08 2024 new variable -assessment#:#tst_delete_missing_mark#:#Per favore, scegli almeno un voto se vuoi eliminarlo! -assessment#:#tst_derive_new_pool#:#Ricava nuovo gruppo di domande -assessment#:#tst_derive_new_pools#:#Ricava nuovi gruppi di domande -assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session. -assessment#:#tst_dont_use_previous_answers#:#La tua risposta precedente non verrà usata come risposta di default per test successivi +assessment#:#tst_count_partial_solutions_desc#:#Vengono aggiunti punti per le risposte parziali fornite correttamente: i partecipanti possono ottenere punti per risposte incomplete o parzialmente errate. +assessment#:#tst_current_run_no_longer_valid#:#Your current test run is no longer valid. <br>It was probably completed already or finished by a tutor.###16 03 2023 new variable +assessment#:#tst_delete_missing_mark#:#Per favore, scegli almeno un voto da eliminare! +assessment#:#tst_derive_new_pool#:#Ricava nuova raccolta di domande +assessment#:#tst_derive_new_pools#:#Ricava nuova raccolta di domande +assessment#:#tst_dont_show_msg_again_in_current_session#:#Non mostrare più questo messaggio nella mia sessione corrente. assessment#:#tst_edit_competence_assign#:#Modifica delle proprietà di assegnazione assessment#:#tst_edit_scoring#:#Modifica il punteggio -assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable -assessment#:#tst_enable_questionlist_description#:#Participants can switch on a list of the test questions on the left of the actual question.###26 08 2024 new variable +assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###30 04 2024 new variable +assessment#:#tst_enable_questionlist_description#:#Participants can switch on a list of the test questions on the left of the actual question.###30 04 2024 new variable assessment#:#tst_ending_time#:#Ora di fine -assessment#:#tst_ending_time_before_starting_time#:#Please enter a date for the end of the test that is after the start date.###26 08 2024 new variable -assessment#:#tst_ending_time_desc#:#Punto nel tempo durante il quale il test terminerà: I partecipanti non devono più rispondere alle domande, il test è terminato tramite ILIAS. +assessment#:#tst_ending_time_before_starting_time#:#Please enter a date for the end of the test that is after the start date.###31 08 2022 new variable +assessment#:#tst_ending_time_desc#:#Punto nel tempo durante il quale il test terminerà: I partecipanti non possono più rispondere alle domande, il test è terminato da ILIAS. assessment#:#tst_enter_questionpool#:#Per favore inserisci il nome della raccolta di domande nella quale verra' inserita la domanda assessment#:#tst_eval_question_points#:#Risultati per test %s -assessment#:#tst_eval_results_by_pass#:#Risultati delle domande in dettaglio +assessment#:#tst_eval_results_by_pass#:#Risultati dettagliati del test per l'esecuzione del test %s assessment#:#tst_eval_results_by_pass_lo#:#Elenco di risposte per tentativo %s -assessment#:#tst_eval_results_lo#:#Elenco di risposte +assessment#:#tst_eval_results_lo#:#Risultati del test in dettaglio assessment#:#tst_eval_show_answer#:#Mostra la risposta -assessment#:#tst_eval_total_finished#:#Test di valutazione completati -assessment#:#tst_eval_total_finished_average_time#:#Tempo medio di esecuzione per i test completati +assessment#:#tst_eval_total_finished#:#Numero totale di tutti i test completati (utenti che hanno completato il numero massimo di esecuzioni di test). +assessment#:#tst_eval_total_finished_average_time#:#Tempo medio di esecuzione per tutti i test assessment#:#tst_eval_total_passed#:#Test totali passati assessment#:#tst_eval_total_passed_average_points#:#Punteggio medio dei test passati -assessment#:#tst_eval_total_passed_average_time#:#Tempo medio di esecuzione di tutti i test positivi<br /> -assessment#:#tst_eval_total_persons#:#Numero totale delle persone che hanno conseguito il test -assessment#:#tst_exam_access_code#:#Access Code###26 08 2024 new variable -assessment#:#tst_exam_access_code_label#:#Enter access code to continue your already started test.###26 08 2024 new variable -assessment#:#tst_exam_conditions#:#Exam Conditions###26 08 2024 new variable -assessment#:#tst_exam_conditions_label#:#Check to accept the conditions.###26 08 2024 new variable -assessment#:#tst_exam_conditions_not_checked_message#:#You need to accept the exam conditions!###26 08 2024 new variable -assessment#:#tst_exam_ending_time_message#:#The test cannot be started after %s.###26 08 2024 new variable -assessment#:#tst_exam_modal_message_conditions#:#Please confirm the conditions to start the test.###26 08 2024 new variable -assessment#:#tst_exam_modal_message_conditions_and_password#:#Please confirm the conditions and enter the password to start the test.###26 08 2024 new variable -assessment#:#tst_exam_modal_message_password#:#Please enter the password to start the test.###26 08 2024 new variable -assessment#:#tst_exam_not_assigned_participant_disclaimer#:#You cannot start this test, as you are not an assigned participant.###26 08 2024 new variable -assessment#:#tst_exam_password#:#Test Password###26 08 2024 new variable -assessment#:#tst_exam_password_invalid_message#:#The given password is not valid!###26 08 2024 new variable -assessment#:#tst_exam_password_label#:#Password###26 08 2024 new variable -assessment#:#tst_exam_required_fields_not_filled_message#:#You need to fill out all required fields!###26 08 2024 new variable -assessment#:#tst_exam_start#:#Start Test###26 08 2024 new variable -assessment#:#tst_exam_use_previous_answers#:#Previous Answers###26 08 2024 new variable -assessment#:#tst_exam_use_previous_answers_label#:#If enabled answers from previous tests will be prefilled.###26 08 2024 new variable +assessment#:#tst_eval_total_passed_average_time#:#Tempo medio di esecuzione di tutti i test positivi +assessment#:#tst_eval_total_persons#:#Numero totale delle persone che hanno iniziato il test +assessment#:#tst_exam_access_code#:#Access Code###30 04 2024 new variable +assessment#:#tst_exam_access_code_label#:#Enter access code to continue your already started test.###30 04 2024 new variable +assessment#:#tst_exam_conditions#:#Exam Conditions###30 04 2024 new variable +assessment#:#tst_exam_conditions_label#:#Check to accept the conditions.###30 04 2024 new variable +assessment#:#tst_exam_conditions_not_checked_message#:#You need to accept the exam conditions!###30 04 2024 new variable +assessment#:#tst_exam_ending_time_message#:#The test cannot be started after %s.###30 04 2024 new variable +assessment#:#tst_exam_modal_message_conditions#:#Please confirm the conditions to start the test.###30 04 2024 new variable +assessment#:#tst_exam_modal_message_conditions_and_password#:#Please confirm the conditions and enter the password to start the test.###30 04 2024 new variable +assessment#:#tst_exam_modal_message_password#:#Please enter the password to start the test.###30 04 2024 new variable +assessment#:#tst_exam_not_assigned_participant_disclaimer#:#You cannot start this test, as you are not an assigned participant.###30 04 2024 new variable +assessment#:#tst_exam_password#:#Test Password###30 04 2024 new variable +assessment#:#tst_exam_password_invalid_message#:#The given password is not valid!###30 04 2024 new variable +assessment#:#tst_exam_password_label#:#Password###30 04 2024 new variable +assessment#:#tst_exam_required_fields_not_filled_message#:#You need to fill out all required fields!###30 04 2024 new variable +assessment#:#tst_exam_start#:#Start Test###30 04 2024 new variable +assessment#:#tst_exam_use_previous_answers#:#Previous Answers###30 04 2024 new variable +assessment#:#tst_exam_use_previous_answers_label#:#If enabled answers from previous tests will be prefilled.###30 04 2024 new variable assessment#:#tst_extratime_added#:#L'orario di lavoro del partecipante è stato aumentato di %s minuti. -assessment#:#tst_extratime_info#:#Se si desidera aggiungere l'orario di lavoro più volte per lo stesso partecipante, inserire la quantità totale di tempo che si desidera aggiungere. +assessment#:#tst_extratime_info#:#Se il tempo di elaborazione di un partecipante al test viene prolungato più volte, inserire qui il totale di tutte le sue estensioni di tempo. assessment#:#tst_extratime_notavailable#:#Il tempo supplementare può essere aggiunto solo per i test con un passaggio e un tempo di elaborazione massimo. -assessment#:#tst_failed#:#Failed###07 02 2020 new variable -assessment#:#tst_failed_imp_qst_skl_assign#:#The question's assignments to the following competences could not be created. The accoring competences could not be identified within the local system. +assessment#:#tst_failed#:#Fallito +assessment#:#tst_failed_imp_qst_skl_assign#:#Non è stato possibile creare le assegnazioni delle domande alle seguenti competenze. Le competenze corrispondenti non possono essere identificate all'interno del sistema locale. assessment#:#tst_failed_imp_skl_thresholds#:#L’importazione dei limiti per le seguenti competenze è stata ignorata, perché le competenze concesse all’interno del sistema locale sono configurate con una diversa lista di livelli. assessment#:#tst_feedback#:#Feedback -assessment#:#tst_feedback_is_given_inline#:#The feedback will be displayed along with your answer.###26 08 2024 new variable -assessment#:#tst_feedback_not_available_for_answer#:#There is no feedback available for your answer.###26 08 2024 new variable -assessment#:#tst_filter_lifecycle_enabled#:#Use Lifecycle as Filter###07 02 2020 new variable +assessment#:#tst_feedback_is_given_inline#:#The feedback will be displayed along with your answer.###31 03 2023 new variable +assessment#:#tst_feedback_not_available_for_answer#:#There is no feedback available for your answer.###31 03 2023 new variable +assessment#:#tst_filter_lifecycle_enabled#:#Usa ciclo di vita come filtro assessment#:#tst_filter_question_type#:#Tipo di domanda assessment#:#tst_filter_question_type_enabled#:#Utilizza Tipo di domanda come filtro assessment#:#tst_filter_tax_node#:#Nodo tassonomia -assessment#:#tst_filter_taxonomy#:#Filter Taxonomy -assessment#:#tst_final_information#:#Finishing the Test: Information Before Submission +assessment#:#tst_filter_taxonomy#:#Tassonomia del filtro +assessment#:#tst_final_information#:#Termine del test: informazioni prima dell'invio assessment#:#tst_finish_confirm_button#:#Sì, voglio finire il test assessment#:#tst_finish_confirm_cancel_button#:#No, torna alla risposta precedente assessment#:#tst_finish_confirmation_question#:#Stai per finire il test e stai raggiungendo il numero massimo di tentativi disponibili. Non potrai rifare il test e cambaire le tue risposte. Sei sicuro di voler finire il test? -assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#Nessun email +assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###30 04 2024 new variable assessment#:#tst_finished#:#Finito assessment#:#tst_form_dynamic_question_set_config#:#Selezione continua di domande assessment#:#tst_gap_analysis#:#Analisi gap -assessment#:#tst_general_properties#:#Impostazioni generali -assessment#:#tst_header_participant#:#Result: -assessment#:#tst_header_participant_no_answer#:#Question - not answered###26 08 2024 new variable -assessment#:#tst_header_solution#:#Correct solution: -assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable -assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable -assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable -assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Nascondi la lista di domande +assessment#:#tst_general_properties#:#Impostazioni generali del test +assessment#:#tst_header_participant#:#La tua risposta: +assessment#:#tst_header_participant_no_answer#:#Question - not answered###14 02 2024 new variable +assessment#:#tst_header_solution#:#Migliore soluzione possibile: +assessment#:#tst_hide_info_tab#:#Hide Info Tab###30 04 2024 new variable +assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###30 04 2024 new variable +assessment#:#tst_hide_pagecontents#:#Hide page content###31 03 2023 new variable +assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###31 03 2023 new variable assessment#:#tst_highscore_achieved_ts#:#Mostra data del test -assessment#:#tst_highscore_achieved_ts_description#:#Controlli, se una colonna con la data di prova deve essere visualizzata. -assessment#:#tst_highscore_all_tables#:#All Rankings -assessment#:#tst_highscore_all_tables_description#:#If selected, the test provides both ranking tables. +assessment#:#tst_highscore_achieved_ts_description#:#Viene visualizzata una colonna aggiuntiva con l'ora del test. +assessment#:#tst_highscore_all_tables#:#Proprio grado e classifica +assessment#:#tst_highscore_all_tables_description#:#Mostra sia una tabella con il proprio posizionamento che una tabella con i migliori posizionamenti. assessment#:#tst_highscore_anon#:#Anonimizzazione delle voci. -assessment#:#tst_highscore_anon_description#:#Controlli, se i nomi sono anonimi nei punteggi. Questa opzione potrebbe essere sovrascritta dal cambiamento del testo anonimo. -assessment#:#tst_highscore_description#:#Dovrebbe essere disponibile la visualizzazione dei punteggi più alti? +assessment#:#tst_highscore_anon_description#:#I posizionamenti degli altri partecipanti vengono visualizzati senza specificare i loro nomi. Ciò accade comunque con i test resi anonimi. +assessment#:#tst_highscore_description#:#Nella scheda "Risultati", i partecipanti vedranno una sottoscheda "Posizionamento". Dopo aver cliccato, ai partecipanti verrà mostrata una tabella che mostra le prestazioni dei vari partecipanti al test. È necessario abilitare l'opzione "I partecipanti vedranno i risultati del test" per utilizzare questa funzione. assessment#:#tst_highscore_enabled#:#Visualizzazione dei punteggi piu' alti attivata assessment#:#tst_highscore_mode#:#Modalità assessment#:#tst_highscore_own_table#:#Mostra tabella 'punteggi personali' -assessment#:#tst_highscore_own_table_description#:#Controlli, se la tabella 'Punteggi personali' dovrebbe essere mostrata. +assessment#:#tst_highscore_own_table_description#:#Ai partecipanti viene mostrata una tabella con la loro posizione in tutti i posizionamenti. assessment#:#tst_highscore_percentage#:#Mostra percentuale -assessment#:#tst_highscore_percentage_description#:#Controlli, se una colonna con la percentuale dei test dovrebbe essere mostrata. +assessment#:#tst_highscore_percentage_description#:#Viene visualizzata un'ulteriore colonna con l'indicazione del valore percentuale raggiunto. assessment#:#tst_highscore_score#:#Mostra punteggio -assessment#:#tst_highscore_score_description#:#Controlli, se una colonna con il punteggio dovrebbe essere mostrata. -assessment#:#tst_highscore_top_num#:#Numero dei punteggi -assessment#:#tst_highscore_top_num_description#:#Controlli, quanti punteggi dovrebbero essere inclusi nella tabella dei punteggi più alti. -assessment#:#tst_highscore_top_num_unit#:#voci -assessment#:#tst_highscore_top_table#:#Mostra tabella 'classifica' -assessment#:#tst_highscore_top_table_description#:#Controlli, se la tabella 'classifica top' deve essere visualizzata. -assessment#:#tst_highscore_wtime#:#Mostra il tempo di lavoro -assessment#:#tst_highscore_wtime_description#:#Controlli, se una colonna con le prove di lavoro a tempo deve essere visualizzata. -assessment#:#tst_imap_qst_mode#:#Modalità +assessment#:#tst_highscore_score_description#:#Viene visualizzata una colonna aggiuntiva con il dettaglio dei punti ottenuti. +assessment#:#tst_highscore_top_num#:#Lunghezza della classifica +assessment#:#tst_highscore_top_num_description#:#Determina il numero di voci visualizzate nella classifica. +assessment#:#tst_highscore_top_table#:#Classifica dei migliori +assessment#:#tst_highscore_top_table_description#:#I partecipanti vedranno una tabella con le prime classifiche. +assessment#:#tst_highscore_wtime#:#Tempo di elaborazione +assessment#:#tst_highscore_wtime_description#:#Viene visualizzata una colonna aggiuntiva con il tempo di elaborazione. +assessment#:#tst_imap_qst_mode#:#Modalità di risposta assessment#:#tst_imap_qst_mode_mc#:#Scelta multipla assessment#:#tst_imap_qst_mode_sc#:#Scelta singola assessment#:#tst_import_non_ilias_zip#:#Errore: Il nome del file di importazione caricato non corrisponde al formato previsto. assessment#:#tst_import_verify_found_questions#:#ILIAS ha trovato nel file da importare le seguenti domande: scegli quelle che vuoi inserire nel test. -assessment#:#tst_inp_all_quest_points_equal_per_pool#:#Require Pools with Homogeneous Scored Questions -assessment#:#tst_inp_all_quest_points_equal_per_pool_desc#:#If enabled, only question pools with homogeneous scored questions will be offered. The test will have an equal number of maximum points for all participating users and thus the test results will be better comparable. It is recommended to choose this selection mode. +assessment#:#tst_inp_all_quest_points_equal_per_pool#:#Solo raccolta di domande con punteggio omogeneo +assessment#:#tst_inp_all_quest_points_equal_per_pool_desc#:#Se abilitato, verranno offerti solo gruppi di domande con domande con punteggio omogeneo. Il test avrà un numero uguale di punti massimi per tutti gli utenti partecipanti e quindi i risultati del test saranno comparabili meglio. Si consiglia di scegliere questa modalità di selezione. assessment#:#tst_inp_dyn_quest_set_quest_ordering_by_date_desc#:#L'ordine di presentazione delle domande si basa sull'ultima data di modifica della domanda. assessment#:#tst_inp_dyn_quest_set_quest_ordering_by_tax_desc#:#L'ordine di presentazione delle domande si basa sulle assegnazioni della domanda in una tassonomia. assessment#:#tst_inp_no_available_tax_hint#:#Nessuna tassonomia per il gruppo di domande selezionato -assessment#:#tst_inp_quest_amount_cfg_mode#:#Question Amount -assessment#:#tst_inp_quest_amount_cfg_mode_pool#:#Configuration of the Question Amount per Selected Question Pools -assessment#:#tst_inp_quest_amount_cfg_mode_test#:#Configuration of the Question Amount per Test +assessment#:#tst_inp_quest_amount_cfg_mode#:#Quantità di domande +assessment#:#tst_inp_quest_amount_cfg_mode_pool#:#Configurazione della quantità di domande per gruppi di domande selezionati +assessment#:#tst_inp_quest_amount_cfg_mode_test#:#Configurazione del numero domande per test assessment#:#tst_inp_quest_amount_per_source_pool#:#Quantità di domande assessment#:#tst_inp_quest_amount_per_test#:#Numero di domande per l’intero test assessment#:#tst_inp_source_pool_filter_tax#:#Filtro tassonomia assessment#:#tst_inp_source_pool_filter_tax_x#:#Utilizza Tassonomia "%s" come filtro -assessment#:#tst_inp_source_pool_label#:#Source Question Pool +assessment#:#tst_inp_source_pool_label#:#Pool di domande di origine assessment#:#tst_inp_source_pool_no_tax_filter#:#Utilizza nessun filtro basato su tassonomia assessment#:#tst_input_dyn_quest_set_answer_status_filter_enabled#:#Fornisci Filtro stato risposta assessment#:#tst_input_dynamic_question_set_ordering_tax#:#Ordinare tassonomia @@ -1569,38 +1562,38 @@ assessment#:#tst_input_dynamic_question_set_ordering_tax_description#:#Le domand assessment#:#tst_input_dynamic_question_set_question_ordering#:#Domanda di ordinazione assessment#:#tst_input_dynamic_question_set_question_ordering_by_date#:#Ordina le domande per data assessment#:#tst_input_dynamic_question_set_question_ordering_by_tax#:#Ordina le domande per tassonomia -assessment#:#tst_input_dynamic_question_set_source_questionpool#:#Gruppo di domande di origine +assessment#:#tst_input_dynamic_question_set_source_questionpool#:#Raccolta di domande assessment#:#tst_input_dynamic_question_set_taxonomie_filter_enabled#:#Fornisci Filtro tassonomia -assessment#:#tst_insert_in_test#:#Insert in Test###28 10 2024 new variable +assessment#:#tst_insert_in_test#:#Insert in Test###28 11 2025 new variable assessment#:#tst_insert_missing_question#:#Per favore, scegli almeno una domanda da inserire nel test! assessment#:#tst_insert_questions#:#Sei sicuro di voler inserire le seguenti domande nel test? assessment#:#tst_instant_feedback#:#Feedback istantaneo - Queste informazioni vengono mostrate subito dopo l'avvenuta risposta ad una domanda -assessment#:#tst_instant_feedback_answer_generic#:#Mostra valutazione generica ("Corretto/Sbagliato") -assessment#:#tst_instant_feedback_answer_generic_desc#:#The generic feedback prints a simple "right" or "wrong" feedback according to configuration of the question. +assessment#:#tst_instant_feedback_answer_generic#:#Feedback sulla soluzione corretta +assessment#:#tst_instant_feedback_answer_generic_desc#:#Il feedback generico stampa un semplice feedback "giusto" o "sbagliato" in base alla configurazione della domanda. assessment#:#tst_instant_feedback_answer_specific#:#Mostra la valutazione delle specifiche delle risposte -assessment#:#tst_instant_feedback_answer_specific_desc#:#If answer-specific feedback is selected, the predefined feedback will be shown, depending on the answers of the participant (if supported by the question type). -assessment#:#tst_instant_feedback_contents#:#Included Contents -assessment#:#tst_instant_feedback_desc#:#When questions are configured with feedback it is provided to participants during the test pass. +assessment#:#tst_instant_feedback_answer_specific_desc#:#Se viene selezionato un feedback specifico per la risposta, verrà visualizzato il feedback predefinito, a seconda delle risposte del partecipante (se supportato dal tipo di domanda). +assessment#:#tst_instant_feedback_contents#:#Contenuto del feedback +assessment#:#tst_instant_feedback_desc#:#Quando le domande sono configurate con feedback, vengono fornite ai partecipanti durante il superamento del test. assessment#:#tst_instant_feedback_results#:#Mostra il risultato (in punti) -assessment#:#tst_instant_feedback_results_desc#:#If results (in points) are selected, the reached points will be shown. -assessment#:#tst_instant_feedback_solution#:#Mostra soluzione -assessment#:#tst_instant_feedback_solution_desc#:#If solutions are selected, the correct solution will be shown too. -assessment#:#tst_instant_feedback_trigger#:#Feedback Trigger -assessment#:#tst_instant_feedback_trigger_forced#:#The Feedback is Triggered by Answering Questions -assessment#:#tst_instant_feedback_trigger_forced_desc#:#The presentation of feedback is forced to all participants with answering a question. -assessment#:#tst_instant_feedback_trigger_manual#:#Participants can Trigger the Feedback Manually -assessment#:#tst_instant_feedback_trigger_manual_desc#:#The feedback is availble but will only be shown when a participant triggers the presentation manually. +assessment#:#tst_instant_feedback_results_desc#:#Se vengono selezionati i risultati (in punti), verranno visualizzati i punti raggiunti. +assessment#:#tst_instant_feedback_solution#:#Mostra la soluzione migliore +assessment#:#tst_instant_feedback_solution_desc#:#Se vengono selezionate le soluzioni, verrà mostrata anche la soluzione corretta. +assessment#:#tst_instant_feedback_trigger#:#Causa del riscontro +assessment#:#tst_instant_feedback_trigger_forced#:#Il feedback viene attivato dalle risposta alle domande +assessment#:#tst_instant_feedback_trigger_forced_desc#:# La presentazione del feedback è forzata a tutti i partecipanti con la risposta alla domanda. +assessment#:#tst_instant_feedback_trigger_manual#:#I partecipanti possono attivare manualmente il feedback +assessment#:#tst_instant_feedback_trigger_manual_desc#:#Il feedback è disponibile ma verrà mostrato solo quando un partecipante attiva manualmente la presentazione. assessment#:#tst_introduction#:#Introduzione -assessment#:#tst_introduction_desc#:#Shows an introductory message on the tab 'Info' of the test. This text is accessible already before the test can be started. +assessment#:#tst_introduction_desc#:#Mostra un messaggio introduttivo nella scheda "Informazioni" del test. Questo testo è accessibile già prima di poter avviare il test. assessment#:#tst_introduction_text#:#Messaggio iniziale assessment#:#tst_invited_nobody#:#Non è stato aggiunta nessuna persona, gruppo o ruolo come partecipante assessment#:#tst_invited_selected_users#:#Gli utenti selezionati sono stati aggiunti come partecipanti fissi -assessment#:#tst_launcher_button_label_passes_limit_reached#:#You have reached the limit of possible test passes###26 08 2024 new variable -assessment#:#tst_launcher_status_message_conditions#:#You will be asked for your approval of the exam conditions when you start the test.###26 08 2024 new variable -assessment#:#tst_launcher_status_message_conditions_and_password#:#You will be asked for the password and your approval of the exam conditions when you start the test.###26 08 2024 new variable -assessment#:#tst_launcher_status_message_password#:#You will be asked for the password when you start the test.###26 08 2024 new variable -assessment#:#tst_level#:#Livello di competenza -assessment#:#tst_limit_nr_of_tries#:#Maximum Number of Test Passes +assessment#:#tst_launcher_button_label_passes_limit_reached#:#You have reached the limit of possible test passes###30 04 2024 new variable +assessment#:#tst_launcher_status_message_conditions#:#You will be asked for your approval of the exam conditions when you start the test.###30 04 2024 new variable +assessment#:#tst_launcher_status_message_conditions_and_password#:#You will be asked for the password and your approval of the exam conditions when you start the test.###30 04 2024 new variable +assessment#:#tst_launcher_status_message_password#:#You will be asked for the password when you start the test.###30 04 2024 new variable +assessment#:#tst_level#:#Livello di competenze +assessment#:#tst_limit_nr_of_tries#:#Numero massimo di passaggi di prova assessment#:#tst_link_only_unassigned#:#Hai selezionato almeno una domanda che è già collegata a un gruppo di domande. Solo le domande non assegnate possono essere aggiunte al gruppo di domande. assessment#:#tst_list_answer_details#:#Mostra nell’elenco seguente assessment#:#tst_list_of_answers#:#Lista di risposte @@ -1608,67 +1601,67 @@ assessment#:#tst_list_of_answers_show#:#Mostra la lista delle risposte assessment#:#tst_list_of_questions_end#:#Mostra la lista delle domande prima che un partecipante finisca il test assessment#:#tst_list_of_questions_start#:#Mostra la lista delle domande prima della prima domanda assessment#:#tst_list_of_questions_with_description#:#Mostra la descrizione delle domande durante la visione generale -assessment#:#tst_man_scoring_answered_hide#:#Hide answered questions###29 10 2025 new variable -assessment#:#tst_man_scoring_answered_only#:#Show only answered questions###29 10 2025 new variable +assessment#:#tst_man_scoring_answered_hide#:#Hide answered questions###28 11 2025 new variable +assessment#:#tst_man_scoring_answered_only#:#Show only answered questions###28 11 2025 new variable assessment#:#tst_man_scoring_by_part#:#Punteggio per partecipante assessment#:#tst_man_scoring_by_qst#:#Punteggio per domanda -assessment#:#tst_man_scoring_finalized#:#Show finalized gradings###29 10 2025 new variable -assessment#:#tst_man_scoring_finalized_hide#:#Hide finalized gradings###29 10 2025 new variable -assessment#:#tst_man_scoring_finalized_only#:#Show only finalized gradings###29 10 2025 new variable -assessment#:#tst_man_scoring_only_answered#:#Only answered###29 07 2022 new variable -assessment#:#tst_man_scoring_questionselection#:#Questions###29 10 2025 new variable -assessment#:#tst_man_scoring_userselection#:#Participants###29 10 2025 new variable -assessment#:#tst_manage_competence_assigns#:#Gestione delle assegnazioni della competenza -assessment#:#tst_manage_competence_select_skills#:#Select Competences###29 10 2025 new variable +assessment#:#tst_man_scoring_finalized#:#Show finalized gradings###28 11 2025 new variable +assessment#:#tst_man_scoring_finalized_hide#:#Hide finalized gradings###28 11 2025 new variable +assessment#:#tst_man_scoring_finalized_only#:#Show only finalized gradings###28 11 2025 new variable +assessment#:#tst_man_scoring_only_answered#:#Only answered###29 06 2022 new variable +assessment#:#tst_man_scoring_questionselection#:#Questions###28 11 2025 new variable +assessment#:#tst_man_scoring_userselection#:#Participants###28 11 2025 new variable +assessment#:#tst_manage_competence_assigns#:#Gestione delle assegnazioni della competenze +assessment#:#tst_manage_competence_select_skills#:#Select Competences###28 11 2025 new variable assessment#:#tst_manscoring_input_max_points_for_question#:#Punti massimi per domanda -assessment#:#tst_manscoring_input_of_max#:#of###29 10 2025 new variable +assessment#:#tst_manscoring_input_of_max#:#of###28 11 2025 new variable assessment#:#tst_manscoring_input_question_and_user_solution#:#Domanda e soluzione utente assessment#:#tst_manscoring_maxpoints_exceeded_input_alert#:#Il massimo dei %s punti è superato! -assessment#:#tst_manscoring_no_feedback#:#No written feedback has been given yet.###29 10 2025 new variable +assessment#:#tst_manscoring_no_feedback#:#No written feedback has been given yet.###28 11 2025 new variable assessment#:#tst_manscoring_question_section_header#:#Domanda: %s assessment#:#tst_manscoring_user_notification#:#Invia notifica assessment#:#tst_mark#:#Voto assessment#:#tst_mark_create_new_mark_step#:#Crea un nuovo voto assessment#:#tst_mark_minimum_level#:#Livello minimo (in %) -assessment#:#tst_mark_minimum_level_invalid#:#Minimum Level must be between 0 and 100.###26 08 2024 new variable +assessment#:#tst_mark_minimum_level_invalid#:#Minimum Level must be between 0 and 100.###28 11 2025 new variable assessment#:#tst_mark_official_form#:#Form ufficiale assessment#:#tst_mark_passed#:#Superato assessment#:#tst_mark_reset_to_simple_mark_schema#:#Crea uno schema voti -assessment#:#tst_mark_reset_to_simple_mark_schema_confirmation#:#If you proceed the current mark schema set for this test will be replaced by a simple mark schema thus deleting all local changes.###26 08 2024 new variable +assessment#:#tst_mark_reset_to_simple_mark_schema_confirmation#:#If you proceed the current mark schema set for this test will be replaced by a simple mark schema thus deleting all local changes.###28 11 2023 new variable assessment#:#tst_mark_short_form#:#Form ridotto -assessment#:#tst_max_comp_points#:#Punti di massima competenza +assessment#:#tst_max_comp_points#:#Punti di massima competenze assessment#:#tst_maximum_points#:#Punteggi massimi assessment#:#tst_mc_label_none_above#:#Nessuna delle risposte in alto -assessment#:#tst_median_mark_panel#:#Mark of Median +assessment#:#tst_median_mark_panel#:#Identifica la mediana assessment#:#tst_msg_cannot_modify_dynamic_question_set_conf_due_to_part#:#La configurazione continua della selezione di domande non può essere modificata a causa dei dati dei partecipanti esistenti. assessment#:#tst_msg_cannot_modify_random_question_set_conf_due_to_part#:#La configurazione dell’insieme di domande casuali non può essere modificata a causa dei dati dei partecipanti esistenti. assessment#:#tst_msg_dynamic_question_set_config_modified#:#La configurazione continua della selezione di domande è stata modificata. assessment#:#tst_msg_rand_quest_set_change_quest_amount_here#:#Si può cambiare la quantità di domande qui: %s -assessment#:#tst_msg_rand_quest_set_incomplete_quest_amount_cfg#:#Without a correctly defined question amount, the generation of random test passes for participants is not possible. -assessment#:#tst_msg_rand_quest_set_lost_pools#:#La configurazione della selezione delle domande del test è stata bloccata, poiché i seguenti gruppi di domande coinvolti nella configurazione, non sono più disponibili:<br />%s +assessment#:#tst_msg_rand_quest_set_incomplete_quest_amount_cfg#:#Senza una quantità di domande correttamente definita, non è possibile generare passaggi di test casuali per i partecipanti. +assessment#:#tst_msg_rand_quest_set_lost_pools#:#La configurazione della selezione delle domande del test è stata bloccata, poiché i seguenti gruppi di domande coinvolti nella configurazione, non sono più disponibili: %s assessment#:#tst_msg_rand_quest_set_lost_pools_link#:#Nella sottoscheda %s i gruppi di domande non disponibili possono essere ricavati nuovamente. assessment#:#tst_msg_rand_quest_set_no_pools_available#:#Attualmente non è disponibile aggiungere nuove regole per la selezione di domande poiché non sono disponibili gruppi di domande. -assessment#:#tst_msg_rand_quest_set_no_src_pool_defs#:#Without the definition of source question pools, the generation of random test passes for participants is not possible. +assessment#:#tst_msg_rand_quest_set_no_src_pool_defs#:#Senza la definizione di pool di domande di origine, la generazione di passaggi di test casuali per i partecipanti non è possibile. assessment#:#tst_msg_rand_quest_set_not_sync#:#Le regole per una selezione casuale di domande sono state appena create o modificate. Le domande dei gruppi devono essere sincronizzate nel test prima di poter essere utilizzate. Questo controlla anche se è possibile un test casuale con l’insieme di regole fornite. assessment#:#tst_msg_rand_quest_set_pass_buildable#:#È possibile effettuare un test con una serie casuale di domande attraverso l’attuale configurazione. -assessment#:#tst_msg_rand_quest_set_pass_not_buildable#:#The generation of random test passes for participants is not possible with the current configuration of source question pools and question amount(s). +assessment#:#tst_msg_rand_quest_set_pass_not_buildable#:#La generazione di passaggi di test casuali per i partecipanti non è possibile con l'attuale configurazione di pool di domande di origine e quantità di domande. assessment#:#tst_msg_rand_quest_set_rule_label#:#Regola %s assessment#:#tst_msg_rand_quest_set_rule_not_satisfied_missing#:#Regola %s richiede %s domande, ma ci sono solo %s domande fornite. assessment#:#tst_msg_rand_quest_set_rule_not_satisfied_missing_shared#:#Inoltre, da queste domande ci sono %s domande fornite anche per le seguenti altre regole: %s assessment#:#tst_msg_rand_quest_set_rule_not_satisfied_reserved#:#Regola %s richiede %s domande e ci sono %s domande fornite. assessment#:#tst_msg_rand_quest_set_rule_not_satisfied_reserved_shared#:#Ma ci sono solo %s delle domande disponibili fornite garantite, a causa di intersezioni con le seguenti altre regole: %s -assessment#:#tst_msg_rand_quest_set_stage_pool_last_sync#:#The generation of random test passes for participants is possible with the current configuration.<br />The moment of the last synchronisation of the selected source question pools was: <b>%s</b> +assessment#:#tst_msg_rand_quest_set_stage_pool_last_sync#:#Data dell'ultima sincronizzazione dei pool di domande selezionati: <b>%s</b> assessment#:#tst_msg_random_qsc_modified_add_new_rule#:#La configurazione per la serie casuale di domande è stata modificata con successo. Adesso si può aggiungere una nuova regola. -assessment#:#tst_msg_random_question_set_config_modified#:#The configuration for the random test was successfully modified. +assessment#:#tst_msg_random_question_set_config_modified#:#La configurazione per il test casuale è stata modificata con successo. assessment#:#tst_msg_random_question_set_synced#:#Le domande per l’attuale configurazione sono state sincronizzate con successo. -assessment#:#tst_msg_skl_lvl_thresholds_saved#:#I limiti di competenza sono stati salvati. -assessment#:#tst_msg_skl_qst_assign_points_not_saved#:#I punti di competenza non sono stati salvati. Controllare il proprio ingresso. -assessment#:#tst_msg_skl_qst_assign_points_saved#:#The competence points has been saved. -assessment#:#tst_msg_source_pool_definitions_deleted#:#The source question pool definition has been deleted successfully. -assessment#:#tst_nav_next_locks_current_answer_confirm#:#When you navigate to the next question your answer to the current question will be locked and cannot be changed any longer. -assessment#:#tst_nav_next_locks_current_answer_header#:#Navigation to Next Question -assessment#:#tst_nav_next_locks_empty_answer_confirm#:#You did not answer the current question. An empty solution will be saved and locked as answer. This answer cannot be changed later on. -assessment#:#tst_nav_next_locks_empty_answer_header#:#Navigation Without Answer +assessment#:#tst_msg_skl_lvl_thresholds_saved#:#I limiti delle competenze sono stati salvati. +assessment#:#tst_msg_skl_qst_assign_points_not_saved#:#I punti di competenze non sono stati salvati. Controllare il proprio ingresso. +assessment#:#tst_msg_skl_qst_assign_points_saved#:#I punti delle competenze sono stati salvati. +assessment#:#tst_msg_source_pool_definitions_deleted#:#La definizione della raccolta di domande è stata eliminata correttamente. +assessment#:#tst_nav_next_locks_current_answer_confirm#:#Quando si passa alla domanda successiva, la risposta alla domanda corrente verrà bloccata e non sarà più possibile modificarla. +assessment#:#tst_nav_next_locks_current_answer_header#:#Navigazione alla domanda successiva +assessment#:#tst_nav_next_locks_empty_answer_confirm#:#Non hai risposto alla domanda attuale. Una soluzione vuota verrà salvata e bloccata come risposta. Questa risposta non può essere modificata in seguito. +assessment#:#tst_nav_next_locks_empty_answer_header#:#Navigazione senza risposta assessment#:#tst_nav_while_edit_modal_cancel_btn#:#Annulla assessment#:#tst_nav_while_edit_modal_header#:#Decisione sulle risposte assessment#:#tst_nav_while_edit_modal_nosave_btn#:#Non salvare @@ -1678,83 +1671,82 @@ assessment#:#tst_no_evaluation_data#:#Non sono ancora disponibili dati relativi assessment#:#tst_no_marks_defined#:#Non sono stati definiti i voti. Per favore, crea almeno uno schema per i voti! assessment#:#tst_no_question_selected_for_moving_to_qpl#:#Si prega di scegliere almeno uno domanda da aggiungere al gruppo di domande! assessment#:#tst_no_question_selected_for_removal#:#Per favore, scegli almeno una domanda da eliminare! -assessment#:#tst_no_scorable_qst_available#:#No scorable question available -assessment#:#tst_non_avail_pool_msg_status_lost#:#Il gruppo di domande non è più disponibile. La sincronizzazione del domande da questo gruppo non è più possibile. È possibile ricavare un nuovo gruppo di domande dalle domande contenute in questo test. +assessment#:#tst_no_scorable_qst_available#:#Nessuna domanda valutabile disponibile +assessment#:#tst_non_avail_pool_msg_status_lost#:#<b>la raccolta di domande non è più disponibile. La sincronizzazione del domande da questa raccolta non è più possibile. È possibile ricavare una nuova raccolta di domande dalle domande contenute in questo test. assessment#:#tst_non_avail_pool_msg_status_trashed#:#Questo gruppo di domande è cestinato, quando viene rimosso in modo permanente dal sistema, il test non è più in grado di sincronizzare le domande da esso. -assessment#:#tst_non_avail_pools_table#:#Gruppi di domande non disponibili +assessment#:#tst_non_avail_pools_table#:#Raccolte di domande non disponibili assessment#:#tst_non_available_pool_newly_derived#:#Il/I nuovo/i gruppo/i di domande è/sono stato/i creato/i con successo. assessment#:#tst_nonpool_questions_get_lost_warning#:#<b>La modalità di test corrente include le domande nella configurazione che non sono assegnate a un gruppo di domande. Se si modifica la modalità di test, queste domande verranno perse definitivamente.</b> assessment#:#tst_notification_explanation_admin#:#Ricevi questa mail da ILIAS perché hai attivato la notifica. assessment#:#tst_notify_manscoring_done_body_msg_reason#:#Hai ricevuto questa notifica perchè hai partecipato a questo test. -assessment#:#tst_notify_manscoring_done_body_msg_subject#:#Manual Scoring for Test "%s" comitted +assessment#:#tst_notify_manscoring_done_body_msg_subject#:#Punteggio manuale per il test "%s" impegnato assessment#:#tst_notify_manscoring_done_body_msg_topic#:#il punteggio manuale per la prova seguente è stato eseguito: assessment#:#tst_nr_of_passes#:#Numero dei test passati assessment#:#tst_nr_of_tries#:#Numero massimo di tentativi assessment#:#tst_nr_of_tries_desc#:#Numero massimo di tentativi che il partecipante può fare. assessment#:#tst_num_all_questions#:#Numero di tutte le domande -assessment#:#tst_num_correct_answered_questions#:#Correct Answered Questions -assessment#:#tst_num_non_answered_questions_notseen#:#Non Answered Questions (never seen) -assessment#:#tst_num_non_answered_questions_skipped#:#Non Answered Questions (skipped) +assessment#:#tst_num_correct_answered_questions#:#Domande con risposta corretta +assessment#:#tst_num_non_answered_questions_notseen#:#Domande senza risposta (mai viste) +assessment#:#tst_num_non_answered_questions_skipped#:#Domande senza risposta (saltate) assessment#:#tst_num_questions#:#Numero delle domande assessment#:#tst_num_selected_questions#:#Numero delle domande selezionate -assessment#:#tst_num_wrong_answered_questions#:#Wrong Answered Questions +assessment#:#tst_num_wrong_answered_questions#:#Domande con risposta errata assessment#:#tst_objective_oriented_test_pass_without_questions#:#Il passaggio avviato per il test "%s" non contiene alcuna domanda. assessment#:#tst_objective_progress_header#:#Progresso dell’obiettivo di apprendimento assessment#:#tst_objectives_progress_header#:#Progresso degli obiettivi di apprendimento -assessment#:#tst_old_style_rnd_quest_set_broken#:#Questo test casuale è in uno stato irreparabile perché uno o più gruppi di domande sono stati eliminati. Pertanto i partecipanti non possono più effettuare i test. -assessment#:#tst_optional_questions_confirmation_non_fixed_test#:#<b>Question related to allready passed learning objectives are optional.</b><br /><br />You want to navigate to a question, that relates to an allready passed learning objective.<br />You can choose:<br /><br />I you proceed, you can work on these questions. Your answers from previous attempts were not adopted, since new random questions were selected for this attempt. With working on this questions you can also degrade your learning objective result.<br /><br />If you decide to not work on these questions, you can go back. In this case these questions won't be considered in the evaluation. -assessment#:#tst_out_of_time_message#:#You have reached the maximum allowed processing time of the test!###26 08 2024 new variable +assessment#:#tst_old_style_rnd_quest_set_broken#:#Questo test casuale è in uno stato irreparabile perché una o più raccolte di domande sono state eliminate. Pertanto i partecipanti non possono più effettuare i test. +assessment#:#tst_optional_questions_confirmation_non_fixed_test#:#<b> La domanda relativa agli obiettivi di apprendimento già superati è facoltativa. </b> <br /> <br /> Desideri passare a una domanda relativa a un obiettivo di apprendimento già superato. <br /> Puoi scegliere: <br /> <br /> se procedi, puoi lavorare su queste domande. Le tue risposte da precedenti tentativi non sono state adottate, poiché per questo tentativo sono state selezionate nuove domande casuali. Lavorando su queste domande puoi anche peggiorare il risultato del tuo obiettivo di apprendimento. <br /> <br /> Se decidi di non lavorare su queste domande, puoi tornare indietro. In questo caso queste domande non saranno prese in considerazione nella valutazione. +assessment#:#tst_out_of_time_message#:#You have reached the maximum allowed processing time of the test!###30 04 2024 new variable assessment#:#tst_participant#:#Participante assessment#:#tst_participant_fullname_pattern#:#%2$s, %1$s assessment#:#tst_participant_status#:#Stato del partecipante assessment#:#tst_participating_users#:#Utenti partecipanti assessment#:#tst_pass_best_pass#:#Punteggio della miglior prova dell'utente assessment#:#tst_pass_best_pass_desc#:#Verrà segnato il passaggio meglio eseguito dal partecipante. Questa impostazione si applica solo quando è possibile superare più di un test. -assessment#:#tst_pass_deletion#:#Passaggi precedenti +assessment#:#tst_pass_deletion#:#Cancellare i passaggi precedenti assessment#:#tst_pass_deletion_allowed#:#L’eliminazione dei passaggi precedenti è consentita assessment#:#tst_pass_details#:#Mostra i dettagli -assessment#:#tst_pass_details_header_lo_initial#:#Risultati dei test iniziali per gli obiettivi di apprendimento<br />%s - %s -assessment#:#tst_pass_details_header_lo_qualifying#:#Risultati dei test qualificativi per gli obiettivi di apprendimento<br />%s - %s -assessment#:#tst_pass_details_overview_table_title#:#Panoramica dettagliata per il passaggio %s -assessment#:#tst_pass_finished#:#Test attempt finished###26 08 2024 new variable -assessment#:#tst_pass_finished_on#:#Testo superato finito su +assessment#:#tst_pass_details_header_lo_initial#:#Risultati dei test iniziali per gli obiettivi di apprendimento %s - %s +assessment#:#tst_pass_details_header_lo_qualifying#:#Risultati dei test qualificativi per gli obiettivi di apprendimento %s - %s +assessment#:#tst_pass_details_overview_table_title#:#Risultati dettagliati del test per l'esecuzione del test %s +assessment#:#tst_pass_finished#:#Test pass finished###24 11 2022 new variable +assessment#:#tst_pass_finished_on#:#Testo superato finito il assessment#:#tst_pass_last_pass#:#Punteggio dell'ultimo tentativo dell'utente assessment#:#tst_pass_last_pass_desc#:#Verrà segnato l’ultimo passaggio di un partecipante. assessment#:#tst_pass_overview_for_participant#:#Test superati per il partecipante: %s -assessment#:#tst_pass_overview_header_lo_initial_all_objectives#:#Risultati dei test iniziali<br />per gli obiettivi di apprendimento all’interno del corso %s -assessment#:#tst_pass_overview_header_lo_initial_per_objective#:#Risultati dei test iniziali<br />per gli obiettivi di apprendimento %s all’interno del corso %s -assessment#:#tst_pass_overview_header_lo_qualifying_all_objectives#:#Risultati dei test qualificativi<br />per gli obiettivi di apprendimento all’interno del corso %s -assessment#:#tst_pass_overview_header_lo_qualifying_per_objective#:#Risultati dei test qualificativi<br />per gli obiettivi di apprendimento %s all’interno del corso %s +assessment#:#tst_pass_overview_header_lo_initial_all_objectives#:#Risultati dei test iniziali per gli obiettivi di apprendimento all’interno del corso %s +assessment#:#tst_pass_overview_header_lo_initial_per_objective#:#Risultati dei test iniziali per gli obiettivi di apprendimento %s all’interno del corso %s +assessment#:#tst_pass_overview_header_lo_qualifying_all_objectives#:#Risultati dei test qualificativi per gli obiettivi di apprendimento all’interno del corso %s +assessment#:#tst_pass_overview_header_lo_qualifying_per_objective#:#Risultati dei test qualificativi per gli obiettivi di apprendimento %s all’interno del corso %s assessment#:#tst_pass_scoring#:#Punteggio per tentativi multipli -assessment#:#tst_pass_scoring_best#:#Best Test Attempt###26 08 2024 new variable -assessment#:#tst_pass_scoring_last#:#Last Test Attempt###26 08 2024 new variable +assessment#:#tst_pass_scoring_best#:#Best Test Attempt###30 04 2024 new variable +assessment#:#tst_pass_scoring_last#:#Last Test Attempt###30 04 2024 new variable assessment#:#tst_pass_waiting_enabled#:#Forza tempo di attesa tra i passaggi assessment#:#tst_pass_waiting_info#:#Con questa opzione aggiuntiva i passaggi non possono essere avviati prima che il tempo definito sia scaduto in relazione all’ultimo passaggio terminato. assessment#:#tst_pass_waiting_time#:#Tempo di attesa -assessment#:#tst_passed#:#Passed###07 02 2020 new variable -assessment#:#tst_passes#:#Svolgimento del test +assessment#:#tst_passed#:#Ammesso +assessment#:#tst_passes#:#Test eseguiti assessment#:#tst_password#:#Password del test assessment#:#tst_password_details#:#Se viene definita una password per fare il test tutti i partecipanti dovranno inserirla per iniziarlo. -assessment#:#tst_password_enter#:#Password di accesso +assessment#:#tst_password_enter#:#Inserire la password di accesso assessment#:#tst_password_entered_wrong_password#:#Non puoi iniziare il test perchè hai inserito la password sbagliata! assessment#:#tst_password_form#:#Password di accesso del test assessment#:#tst_password_introduction#:#Questo test può essere fatto solo dopo l'inserimento di una password. Inseriscila qui per favore. assessment#:#tst_percent_solved#:#Percentuale risolta -assessment#:#tst_player_answer_saved_and_locked#:#Answer is saved and locked and can no longer be changed###26 08 2024 new variable -assessment#:#tst_please_select_source_pool#:#Please select a question pool.###26 08 2024 new variable +assessment#:#tst_player_answer_saved_and_locked#:#Answer is saved and locked and can no longer be changed###21 12 2022 new variable +assessment#:#tst_please_select_source_pool#:#Please select a question pool.###13 09 2023 new variable assessment#:#tst_please_select_target_for_pool_derives#:#Selezionare un contenitore di destinazione. assessment#:#tst_position#:#Domanda %s di %s assessment#:#tst_position_without_total#:#Domanda %s assessment#:#tst_postpone#:#Domande posticipate -assessment#:#tst_postpone_off#:#Not answered questions will not be postponed -assessment#:#tst_postpone_off_desc#:#Not answered questions will be kept at their position. -assessment#:#tst_postpone_on#:#Not answered questions will be postponed -assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to the end of the test. +assessment#:#tst_postpone_off#:#Le domande senza risposta non verranno posticipate +assessment#:#tst_postpone_off_desc#:#Le domande senza risposta verranno mantenute nella loro posizione. +assessment#:#tst_postpone_on#:#Le domande senza risposta verranno posticipate +assessment#:#tst_postpone_on_desc#:#Le domande senza risposta verranno posticipate alla fine del test. assessment#:#tst_presentation_properties#:#Impostazioni della presentazione -assessment#:#tst_presentation_settings_section#:#Presentation -assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Test e valutazione - Anteprima di stampa -assessment#:#tst_proceed#:#Proceed +assessment#:#tst_presentation_settings_section#:#Presentazione +assessment#:#tst_previous_access_code_not_available#:#No previous code available!###30 04 2024 new variable +assessment#:#tst_proceed#:#Procedere assessment#:#tst_processing_time#:#Tempo massimo di esecuzione assessment#:#tst_processing_time_desc#:#Il conteggio del tempo massimo di elaborazione inizia nel momento in cui un utente avvia un test per la prima volta e termina dopo la scadenza del periodo di tempo immesso. Se si utilizza questa opzione, la possibilità di sospendere il test deve essere disattivato (vedere "Impostazioni di sequenza"), in quanto la sospensione della prova non ferma il conto alla rovescia del tempo di elaborazione massimo. assessment#:#tst_processing_time_duration#:#Durata massima del test @@ -1763,102 +1755,102 @@ assessment#:#tst_qbt_filter_question_title#:#Titolo della domanda assessment#:#tst_qst_added_to_pool_p#:#Domande aggiunte con successo al gruppo selezionato. assessment#:#tst_qst_added_to_pool_s#:#Domanda aggiunta con successo al gruppo selezionato. assessment#:#tst_qst_order#:#Ordine -assessment#:#tst_qst_skl_cfg_in_pool_hint_dynquestset#:#L’assegnazione delle domande di competenza per i test con modalità "%s" deve essere effettuata nel gruppo di domande corrispondente:<br />%s<br /><br />La configurazione dei valori limite deve essere effettuata nel test. -assessment#:#tst_qst_skl_cfg_in_pool_hint_rndquestset#:#L’assegnazione delle domande di competenza per i test con modalità "%s" deve essere eseguita nel/nei gruppo/i di domande corrispondente/i:<br />%s<br /><br />La configurazione dei valori limite deve essere effettuata nel test. +assessment#:#tst_qst_skl_cfg_in_pool_hint_dynquestset#:#L’assegnazione delle domande di competenze per i test con modalità "%s" deve essere effettuata nel gruppo di domande corrispondente: %s La configurazione dei valori limite deve essere effettuata nel test. +assessment#:#tst_qst_skl_cfg_in_pool_hint_rndquestset#:#L’assegnazione delle domande di competenze per i test con modalità "%s" deve essere eseguita nel/nei gruppo/i di domande corrispondente/i: %s La configurazione dei valori limite deve essere effettuata nel test. assessment#:#tst_question#:#Domanda assessment#:#tst_question_amount#:#Quantità di domande -assessment#:#tst_question_answer_status#:#Answer Status -assessment#:#tst_question_answer_status_all_non_correct#:#All Questions (Except Correct Answered Ones) +assessment#:#tst_question_answer_status#:#Stato risposta +assessment#:#tst_question_answer_status_all_non_correct#:#Tutte le domande (tranne quelle con risposta corretta) assessment#:#tst_question_answer_status_non_answered#:#Domande non risposte -assessment#:#tst_question_answer_status_wrong_answered#:#Wrong Answered Questions +assessment#:#tst_question_answer_status_wrong_answered#:#Domande con risposta errata assessment#:#tst_question_feedback_back_to_feedback_form#:#Torna alla domanda di chiamata assessment#:#tst_question_feedback_edit_page#:#Modifica contenuto assessment#:#tst_question_mark#:#Segna questa domanda assessment#:#tst_question_marked#:#Hai selezionato la domanda -assessment#:#tst_question_marker#:#Marcatura +assessment#:#tst_question_marker#:#Marcata assessment#:#tst_question_no#:#Ordine -assessment#:#tst_question_not_from_pool_info#:#Nessun gruppo +assessment#:#tst_question_not_from_pool_info#:#Nessuna raccolta assessment#:#tst_question_not_marked#:#La domanda non è segnata assessment#:#tst_question_offer#:#Va bene questo esempio o ne vuoi un altro? -assessment#:#tst_question_set_type#:#Test Mode -assessment#:#tst_question_set_type_dynamic#:#Continuous Testing -assessment#:#tst_question_set_type_dynamic_desc#:#With this mode exactly one question pool is to be selected. The test is taken in a never ending pass by the participants and the questions are selected individually and on demand for each participant. -assessment#:#tst_question_set_type_fixed#:#Testing with Fixed Set of Questions -assessment#:#tst_question_set_type_fixed_desc#:#With this mode a fixed set of questions is to be selected and is used for all participants. Depending on the detailed test configuration the participants can take one or more test passes. -assessment#:#tst_question_set_type_random#:#Testing with Random Set of Questions -assessment#:#tst_question_set_type_random_desc#:#With this mode one or more question pools are to be selected from which an individual random set of questions is selected for each participant. Depending on the detailed test configuration the participants can take one or more test passes. -assessment#:#tst_question_title#:#Titolo +assessment#:#tst_question_set_type#:#Scelta delle domande di prova +assessment#:#tst_question_set_type_dynamic#:#Test continui - tutte le domande di una raccolta di domande +assessment#:#tst_question_set_type_dynamic_desc#:#Con questa modalità è necessario selezionare esattamente una raccolta di domande. Il test viene svolto in un passaggio senza fine dai partecipanti e le domande vengono selezionate individualmente e su richiesta per ciascun partecipante. +assessment#:#tst_question_set_type_fixed#:#Test con set di domande fisso +assessment#:#tst_question_set_type_fixed_desc#:#Con questa modalità è necessario selezionare una serie fissa di domande da utilizzare per tutti i partecipanti. A seconda della configurazione dettagliata del test, i partecipanti possono effettuare uno o più passaggi del test. +assessment#:#tst_question_set_type_random#:#Test con una serie casuale di domande +assessment#:#tst_question_set_type_random_desc#:#Con questa modalità è necessario selezionare uno o più gruppi di domande da cui viene selezionato un singolo insieme casuale di domande per ciascun partecipante. A seconda della configurazione dettagliata del test, i partecipanti possono effettuare uno o più passaggi del test. +assessment#:#tst_question_title#:#Titolo della domanda assessment#:#tst_question_type#:#Tipo di domanda assessment#:#tst_questions_inserted#:#Domande inserite! assessment#:#tst_questions_removed#:#Domande cancellate! assessment#:#tst_random_nr_of_questions#:#Quante domande vuoi inserire? -assessment#:#tst_random_question_set_source_questionpool_summary_string#:#%s (Percorso: %s) [%s Domande] +assessment#:#tst_random_question_set_source_questionpool_summary_string#:#%s (Path: %s) [%s Questions]###30 04 2024 new variable assessment#:#tst_random_select_questionpool#:#Seleziona la raccolta dalla quale verranno prese le domande assessment#:#tst_reached_points#:#Punteggio raggiunto -assessment#:#tst_reached_points_of_max#:#%s of %s###07 02 2020 new variable +assessment#:#tst_reached_points_of_max#:#%s di %s assessment#:#tst_remove_mark#:#Rimuovi questo voto assessment#:#tst_remove_question#:#Sei sicuro di voler eliminare la domanda seguente dal test? assessment#:#tst_remove_questions#:#Sei sicuro di voler eliminare le seguenti domande dal test? assessment#:#tst_remove_questions_and_results#:#Questo test è gia' stato eseguito da %s utente(i). Se vengono tolte domande dal test, verrano cancellati tutti i risultati precedenti degli utenti al test. Sei sicuro di voler rimuovere le seguenti domande dal test? assessment#:#tst_report_after_date#:#Dopo una data prefissata -assessment#:#tst_report_after_first_question#:#Offrire il risultato del test subito dopo l'inizio dello stesso<br /><br />Offer score reporting when the test has been started -assessment#:#tst_report_after_passed#:#Offer test results when the test has been passed +assessment#:#tst_report_after_first_question#:#Offrire il risultato del test subito dopo l'inizio dello stesso +assessment#:#tst_report_after_passed#:#Offri i risultati del test quando il test è stato superato assessment#:#tst_report_after_test#:#Esegui un rapporto con il punteggio al termine del test assessment#:#tst_report_never#:#Nessun risultato del test disponibile assessment#:#tst_reporting_date#:#Data -assessment#:#tst_res_jump_to_participant_btn#:#Passa -assessment#:#tst_res_jump_to_participant_hint_opt#:#Passa al partecipante +assessment#:#tst_res_jump_to_participant_btn#:#Salta +assessment#:#tst_res_jump_to_participant_hint_opt#:#--Salta al partecipante-- assessment#:#tst_res_lo_objectives_header#:#Obiettivi di apprendimento pertinenti assessment#:#tst_res_lo_try_header#:#Tentativo -assessment#:#tst_res_lo_try_n#:#Tentativo %s -assessment#:#tst_res_tab_msg_no_lp_access#:#You are currently not allowed to access your Learning Progress, as you are not allowed to see your test results.###29 10 2025 new variable -assessment#:#tst_res_tab_msg_res_after_date#:#You test results will be offered here on the following date: %s -assessment#:#tst_res_tab_msg_res_after_date_no_res#:#When you take the test your results will be offered here on the following date: %s -assessment#:#tst_res_tab_msg_res_after_finish_test#:#After finishing the test your results will be offered here. -assessment#:#tst_res_tab_msg_res_after_taking_test#:#After taking the test your results will be offered here. -assessment#:#tst_res_tab_msg_res_after_test_passed#:#After passing the test your results will be offered here. +assessment#:#tst_res_lo_try_n#:#Tentativo %s. +assessment#:#tst_res_tab_msg_no_lp_access#:#You are currently not allowed to access your Learning Progress, as you are not allowed to see your test results.###01 04 2025 new variable +assessment#:#tst_res_tab_msg_res_after_date#:#I risultati del test verranno offerti qui alla seguente data: %s +assessment#:#tst_res_tab_msg_res_after_date_no_res#:#Quando si esegue il test, i risultati verranno offerti qui alla data seguente: %s +assessment#:#tst_res_tab_msg_res_after_finish_test#:#Dopo aver terminato il test, i risultati verranno offerti qui. +assessment#:#tst_res_tab_msg_res_after_taking_test#:#Dopo aver effettuato il test, i risultati verranno offerti qui. +assessment#:#tst_res_tab_msg_res_after_test_passed#:#Dopo aver superato il test, i risultati verranno offerti qui. assessment#:#tst_reset_processing_time#:#Resettare la durata massima del test -assessment#:#tst_reset_processing_time_desc#:#Se selezionato, il tempo limite di esecuzione verrà riportato al massimo non appena è stato superato un test.<br />Questo settaggio funziona solo con l'abilitazione del tempo limite di esecuzione e l'esecuzione di più test.<br /> +assessment#:#tst_reset_processing_time_desc#:#Se selezionato, il tempo limite di esecuzione verrà riportato al massimo non appena è stato superato un test. Questo settaggio funziona solo con l'abilitazione del tempo limite di esecuzione e l'esecuzione di più test. assessment#:#tst_result#:#Risultato del test assessment#:#tst_result_pass#:#Risultato del superamento del test assessment#:#tst_result_user_name#:#Risultati del test di %s assessment#:#tst_result_user_name_pass#:#Risultati del test %s per %s assessment#:#tst_results#:#Risultati del test -assessment#:#tst_results_access_always#:#Sempre -assessment#:#tst_results_access_always_desc#:#Participants can access their results on the 'Info'-tab immediately after starting the test pass and while still taking the test. Additionally ILIAS will present them with their test results immediately after finishing the test. -assessment#:#tst_results_access_date#:#Data -assessment#:#tst_results_access_date_desc#:#Participants get access to their test results on the 'Info'-tab after the defined date. +assessment#:#tst_results_access_always#:#Immediatamente +assessment#:#tst_results_access_always_desc#:#I partecipanti possono accedere ai loro risultati nella scheda "Informazioni" immediatamente dopo aver iniziato il superamento del test e continuando a sostenere il test. Inoltre ILIAS presenterà loro i risultati dei test immediatamente dopo aver terminato il test. +assessment#:#tst_results_access_date#:#Dalla data seguente +assessment#:#tst_results_access_date_desc#:#I partecipanti ottengono l'accesso ai risultati del test nella scheda "Informazioni" dopo la data definita. assessment#:#tst_results_access_enabled#:#Accedi ai risultati del test -assessment#:#tst_results_access_enabled_desc#:#A button 'Show Test Results' will be displayed to participants on the 'Info'-tab. Options in this and the following sections below configure what information is to be included into the report and when it will be accessible. +assessment#:#tst_results_access_enabled_desc#:#Un pulsante "Mostra risultati del test" verrà visualizzato ai partecipanti nella scheda "Informazioni". Le opzioni presenti in questa e nelle seguenti sezioni configurano quali informazioni devono essere incluse nel report e quando saranno accessibili. assessment#:#tst_results_access_finished#:#Dopo il termine del test -assessment#:#tst_results_access_finished_desc#:#ILIAS displays the test results after the test pass is finished. After finishing the test pass participants can access their test results on the 'Info'-tab at any time. -assessment#:#tst_results_access_passed#:#After Test has been Passed -assessment#:#tst_results_access_passed_desc#:#ILIAS displays the test results after the participant has passed the test. After passing the test participants can access their test results within the 'Results'-tab at any time. +assessment#:#tst_results_access_finished_desc#:#ILIAS visualizza i risultati del test al termine del test. Dopo aver terminato il test, i partecipanti possono accedere ai risultati del test nella scheda "Informazioni" in qualsiasi momento. +assessment#:#tst_results_access_passed#:#Dopo che i test sono stati superati +assessment#:#tst_results_access_passed_desc#:#ILIAS mostra il risultati dei test dopo che i partecipanti li hanno superati. Dopo aver completato il test, i partecipanti potranno accedere ai risultati dalla tab 'Risultati' in ogni momento. assessment#:#tst_results_access_setting#:#Punto nel tempo assessment#:#tst_results_aggregated#:#Risultati aggregati del test assessment#:#tst_results_back_introduction#:#Torna indietro alla introduzione assessment#:#tst_results_back_overview#:#Torna indietro ai risultati assessment#:#tst_results_details_options#:#Ulteriori dettagli da includere nei risultati del test -assessment#:#tst_results_gamification#:#Gamification###26 08 2024 new variable -assessment#:#tst_results_grading_opt_show_details#:#Show detailed test results###26 08 2024 new variable -assessment#:#tst_results_grading_opt_show_details_desc#:#In addition to the summary test result, a "Detailed Results" action is provided. The "Detailed test results" table shows the titles of the questions and the points achieved for each run. The content of the table can be further supplemented in the "Further options" section.###26 08 2024 new variable -assessment#:#tst_results_grading_opt_show_mark#:#Show Resulting Mark only -assessment#:#tst_results_grading_opt_show_mark_desc#:#The resulting mark will be appended to the summary test result. Participants can access their test results on the 'Info'-tab. -assessment#:#tst_results_grading_opt_show_status#:#Show Passed/Failed Status only -assessment#:#tst_results_grading_opt_show_status_desc#:#Information on the "Passed" / "Failed" Status will be appended to the summary test result. Participants can access their test results on the 'Info'-tab. <br /> +assessment#:#tst_results_gamification#:#Gamification###31 03 2023 new variable +assessment#:#tst_results_grading_opt_show_details#:#Show detailed test results###31 03 2023 new variable +assessment#:#tst_results_grading_opt_show_details_desc#:#In addition to the summary test result, a "Detailed Results" action is provided. The "Detailed test results" table shows the titles of the questions and the points achieved for each run. The content of the table can be further supplemented in the "Further options" section.###31 03 2023 new variable +assessment#:#tst_results_grading_opt_show_mark#:#Mostra solo il voto risultante +assessment#:#tst_results_grading_opt_show_mark_desc#:#Il voto risultante verrà aggiunto al risultato del test di riepilogo. I partecipanti possono accedere ai risultati dei test nella scheda "Informazioni". +assessment#:#tst_results_grading_opt_show_status#:#Mostra solo stato "superato" / "non riuscito" +assessment#:#tst_results_grading_opt_show_status_desc#:#Le informazioni sullo stato "Superato" / "Non riuscito" verranno aggiunte al risultato del test di riepilogo. I partecipanti possono accedere ai risultati dei test nella scheda "Informazioni". assessment#:#tst_results_overview#:#Supervisione dei test assessment#:#tst_results_print_best_solution#:#Soluzione migliore nei risultati del test assessment#:#tst_results_print_best_solution_info#:#Se attivato e accessibile dal partecipante, la soluzione migliore appare nel riepilogo dei risultati del test. assessment#:#tst_resume_test#:#Riprendi il test assessment#:#tst_revert_changes#:#Annulla modifica -assessment#:#tst_rnd_quest_cfg_tab_general#:#General Config -assessment#:#tst_rnd_quest_cfg_tab_pool#:#Source Question Pools -assessment#:#tst_rnd_quest_set_cfg_general_form#:#Random Question Selection Config -assessment#:#tst_rnd_quest_set_cfg_pool_form#:#Source Question Pool Definition -assessment#:#tst_rnd_quest_set_tb_add_pool_btn#:#Add New Source Question Pool Definition +assessment#:#tst_rnd_quest_cfg_tab_general#:#Configurazione generale della scelta delle domande +assessment#:#tst_rnd_quest_cfg_tab_pool#:#Raccolte di domande scelte +assessment#:#tst_rnd_quest_set_cfg_general_form#:#Configurazione della selezione domande casuali +assessment#:#tst_rnd_quest_set_cfg_pool_form#:#Definizione della raccolta di domande di origine +assessment#:#tst_rnd_quest_set_tb_add_pool_btn#:#Aggiungi nuova definizione pool di domande sorgente assessment#:#tst_save_and_create_new_rule#:#Salva e aggiungi nuova regola assessment#:#tst_save_and_proceed#:#Salva e procedi -assessment#:#tst_save_comp_points#:#Salva punti di competenza +assessment#:#tst_save_comp_points#:#Salva punti di competenze assessment#:#tst_save_manscoring_failed#:#Il salvataggio del punteggio manuale per il superamento del test %s non è riuscito. assessment#:#tst_save_thresholds#:#Salva limiti assessment#:#tst_saved_manscoring_by_question_successfully#:#Il punteggio manuale per la domanda %s per il superamento del test %s è stato salvato con successo. @@ -1868,60 +1860,55 @@ assessment#:#tst_score_cut_question_desc#:#I partecipanti possono ottenere risul assessment#:#tst_score_cut_test#:#Tagliare i punti negativi dalla somma dei risultati di tutte le domande.<br /> assessment#:#tst_score_cut_test_desc#:#I partecipanti potrebbero ottenere punti negativi nelle domande. Vengono sommati i punti ottenuti in tutte le domande. Solo se il risultato complessivo del test è negativo, questo risultato complessivo sarà impostato su 0 punti. Con questa impostazione i punti negativi hanno molta importanza. assessment#:#tst_score_cutting#:#Tagliare i punti negativi -assessment#:#tst_search_users#:#Aggiungi un numero fisso di partecipanti +assessment#:#tst_search_users#:#Trova partecipanti assessment#:#tst_select_questionpool#:#Per favore, seleziona la raccolta alla quale verra' aggiunta la domanda assessment#:#tst_selected_user_data_deleted#:#I dati del test degli utenti selezionati sono stati eliminati con successo. -assessment#:#tst_sequence_properties#:#Proprieta' della sequenza +assessment#:#tst_sequence_properties#:#Esecuzione: Funzioni per i partecipanti assessment#:#tst_set_offline_due_to_switched_question_set_type_setting#:#Il test deve essere impostato su offline perché l’impostazione della modalità è stata modificata. È necessario impostare una nuova modalità di test relativa alla configurazione della domanda prima che il test possa essere impostato nuovamente online. -assessment#:#tst_settings_conflict_postpone_and_lock#:#"Unanswered questions will be enqueued" cannot be used together with "Lock Answers After Moving to Next Question".###26 08 2024 new variable -assessment#:#tst_settings_conflict_shuffle_and_lock#:#"Shuffle Questions" cannot be used together with "Lock Answers After Moving to Next Question".###26 08 2024 new variable -assessment#:#tst_settings_form_reload_needed#:#The form needed to be reloaded to avoid data loss as the available settings have changed due to the removal of all results of participants.###29 10 2025 new variable -assessment#:#tst_settings_header_additional#:#Additional Features###26 08 2024 new variable -assessment#:#tst_settings_header_execution#:#Gestire il test: Accesso +assessment#:#tst_settings_conflict_postpone_and_lock#:#"Unanswered questions will be enqueued" cannot be used together with "Lock Answers After Moving to Next Question".###30 04 2024 new variable +assessment#:#tst_settings_conflict_shuffle_and_lock#:#"Shuffle Questions" cannot be used together with "Lock Answers After Moving to Next Question".###30 04 2024 new variable +assessment#:#tst_settings_form_reload_needed#:#The form needed to be reloaded to avoid data loss as the available settings have changed due to the removal of all results of participants.###23 09 2025 new variable +assessment#:#tst_settings_header_additional#:#Additional Features###30 04 2024 new variable +assessment#:#tst_settings_header_execution#:#Esecuzione: Accesso assessment#:#tst_settings_header_intro#:#Informazioni prima di iniziare il test -assessment#:#tst_settings_header_test_run#:#Administering the Test: Testrun -assessment#:#tst_settings_not_found#:#Missing Test Settings###29 10 2025 new variable -assessment#:#tst_settings_not_found_msg#:#Test Settings could not found. This may be due to a missing migration step. Please contact your system administrator.###29 10 2025 new variable +assessment#:#tst_settings_header_test_run#:#Esecuzione: controllo esecuzione test +assessment#:#tst_settings_not_found#:#Missing Test Settings###28 11 2025 new variable +assessment#:#tst_settings_not_found_msg#:#Test Settings could not found. This may be due to a missing migration step. Please contact your system administrator.###28 11 2025 new variable assessment#:#tst_show_answer_sheet#:#Mostra le risposte assessment#:#tst_show_cancel#:#Mostra le opzioni di sospensione del test assessment#:#tst_show_cancel_description#:#Se selezionato, un pulsante per sospendere il test è mostrato durante l'esecuzione. -assessment#:#tst_show_comp_results#:#Mostra risultati di competenza +assessment#:#tst_show_comp_results#:#Mostra risultati di competenze assessment#:#tst_show_results#:#Mostra i risultati del test assessment#:#tst_show_side_list#:#Mostra la lista delle domande a lato assessment#:#tst_show_solution_answers_only#:#Stampa dei risultati (solo le risposte) -assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option. -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here. -assessment#:#tst_show_solution_details#:#Mostra le soluzioni al momento dei risultati -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown. -assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable -assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable +assessment#:#tst_show_solution_answers_only_desc#:#Se è selezionato, il contenuto ILIAS inserito in una domanda utilizzando la scheda "Modifica contenuto" non sarà visibile in una stampa. Se si desidera risparmiare spazio carta, selezionare questa opzione. +assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###31 03 2023 new variable +assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###31 03 2023 new variable assessment#:#tst_show_solution_feedback#:#Mostra il feedback delle specifiche delle risposte nei risultati del test -assessment#:#tst_show_solution_feedback_desc#:#If is selected, the answer specific feedback will be shown in the test results next to the questions. -assessment#:#tst_show_solution_printview#:#Mostra la lista delle risposte -assessment#:#tst_show_solution_printview_desc#:#If selected, an overview of all questions with the answers of the participant is generated. This list will be offered on the Info Page and at the end of a test prior to the final submission. -assessment#:#tst_show_solution_signature#:#Mostra Segnalibro -assessment#:#tst_show_solution_signature_desc#:#If is selected, a signature placeholder will be shown for printout. +assessment#:#tst_show_solution_feedback_desc#:#Se è selezionato, il feedback specifico della risposta verrà mostrato nei risultati del test accanto alle domande. +assessment#:#tst_show_solution_printview#:#Mostra la lista delle risposte stampabili +assessment#:#tst_show_solution_printview_desc#:#Se selezionato, viene generata una panoramica di tutte le domande con le risposte del partecipante. Questo elenco verrà offerto nella pagina delle informazioni e alla fine di un test prima dell'invio finale. +assessment#:#tst_show_solution_signature#:#Mostra Segnaposto per la Firma +assessment#:#tst_show_solution_signature_desc#:#Se è selezionato, verrà mostrato un segnaposto della firma per la stampa. assessment#:#tst_show_solution_suggested#:#Mostra la soluzione proposta -assessment#:#tst_show_solution_suggested_desc#:#If is selected, the suggested solutions of questions (if existent) will be shown in the test results overview. +assessment#:#tst_show_solution_suggested_desc#:#Se è selezionato, le soluzioni suggerite di domande (se esistenti) verranno mostrate nella panoramica dei risultati del test. assessment#:#tst_show_summary#:#Mostra il sommario delle domande -assessment#:#tst_show_summary_description#:#Offre ai partecipanti una visuale sulle domande proposte nel test -assessment#:#tst_show_toplist#:#Mostra punteggi piu' alti +assessment#:#tst_show_summary_description#:#I partecipanti possono visualizzare un elenco di domande a sinistra delle domande del test. Con il pulsante "Stato di elaborazione" i partecipanti richiamano una panoramica che mostra quali domande hanno già elaborato o contrassegnato. È possibile configurare ulteriormente il comportamento della panoramica "Stato di elaborazione": +assessment#:#tst_show_toplist#:#Mostra posizionamento assessment#:#tst_shuffle_questions#:#Mischia le domande assessment#:#tst_shuffle_questions_description#:#Mischia l'ordine delle domande durante il test assessment#:#tst_signature#:#Firma assessment#:#tst_single_answer_details#:#Mostra risposta singola -assessment#:#tst_skill_triggerings_num_req_answers#:#Quantità richiesta di risposte per i trigger di competenza -assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Le competenze non vengono attivate prima che questa quantità di risposte alle domande contribuisca al calcolo del livello di competenza. -assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#Almeno una delle competenze affrontate da questo test non è attivata dalla quantità minima richiesta di domande.<br />La quantità richiesta di domande: %s -assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds +assessment#:#tst_skill_triggerings_num_req_answers#:#Quantità richiesta di risposte per i trigger di competenze +assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Le competenze non vengono attivate prima che questa quantità di risposte alle domande contribuisca al calcolo del livello di competenze. +assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#Almeno una delle competenze affrontate da questo test non è attivata dalla quantità minima richiesta di domande. La quantità richiesta di domande: %s +assessment#:#tst_skl_level_thresholds_link#:#Configurare le soglie di competenze assessment#:#tst_skl_level_thresholds_missing#:#Ci sono livelli mancanti per le competenze pertinenti! -assessment#:#tst_skl_res_interpretation_hint_msg#:#Si prega di considerare che i risultati di competenza da un singolo test hanno rilevanza limitata. Più informazioni vengono raccolte per competenza, più sarà valido il significa. Nel caso in cui esistano singole competenze senza alcuna entrata, ci saranno meno informazioni raccolte. -assessment#:#tst_skl_sub_tab_thresholds#:#Limiti di competenza +assessment#:#tst_skl_sub_tab_thresholds#:#Limiti di competenze assessment#:#tst_sol_comp_expressions#:#Espressioni di confronto assessment#:#tst_solution_compare_cfg#:#Configurazione per confronto soluzioni -assessment#:#tst_source_question_pool#:#Source Question Pool -assessment#:#tst_src_quest_pool_def_list_table#:#Source Question Pool Definitions +assessment#:#tst_source_question_pool#:#Raccolta di domande di origine +assessment#:#tst_src_quest_pool_def_list_table#:#Definizioni della raccolta di domande di origine assessment#:#tst_start_dyn_test_with_cur_quest_sel#:#Inizia il test con la selezione delle attuali domande assessment#:#tst_start_new_test_pass#:#Inizia un nuovo test assessment#:#tst_start_test#:#Inizia il test @@ -1939,53 +1926,52 @@ assessment#:#tst_stat_result_rank_median#:#Classifica media assessment#:#tst_stat_result_rank_participant#:#Classifica dei partecipanti assessment#:#tst_stat_result_resultsmarks#:#Risultati dei test in voti assessment#:#tst_stat_result_resultspoints#:#Risultati dei test in punti -assessment#:#tst_stat_result_timeontask#:#Tempo di esecuzione +assessment#:#tst_stat_result_timeontask#:#Time on Task###28 11 2025 new variable assessment#:#tst_stat_result_total_participants#:#Numero totale dei partecipanti -assessment#:#tst_stat_result_total_timeontask#:#Total Time On Task (All Test Attempts)###28 10 2024 new variable +assessment#:#tst_stat_result_total_timeontask#:#Total Time On Task (All Test Attempts)###28 11 2025 new variable assessment#:#tst_submit_results#:#Sì, confermo l'invio. assessment#:#tst_tab_competences#:#Competenze assessment#:#tst_tab_results_objective_oriented#:#Risultati per obiettivi di apprendimento assessment#:#tst_tab_results_pass_oriented#:#Risultati per tentativi -assessment#:#tst_tbl_col_answered_questions#:#Answered Questions###07 02 2020 new variable -assessment#:#tst_tbl_col_final_mark#:#Mark###07 02 2020 new variable -assessment#:#tst_tbl_col_finished_passes#:#Finished Passes###26 08 2024 new variable -assessment#:#tst_tbl_col_finished_passes_num_of#:#%s of %s###26 08 2024 new variable -assessment#:#tst_tbl_col_last_scored_access#:#Last Scored Access###26 08 2024 new variable -assessment#:#tst_tbl_col_pass_finished#:#Pass Finished###07 02 2020 new variable -assessment#:#tst_tbl_col_passed_status#:#Grading###07 02 2020 new variable -assessment#:#tst_tbl_col_percent_result#:#Percent Solved###07 02 2020 new variable -assessment#:#tst_tbl_col_reached_points#:#Reached Points###07 02 2020 new variable -assessment#:#tst_tbl_col_scored_pass#:#Scored Pass###07 02 2020 new variable -assessment#:#tst_tbl_col_started_passes#:#Started Passes###26 08 2024 new variable -assessment#:#tst_tbl_invited_users#:#Manually Selected Participants -assessment#:#tst_tbl_participants#:#Participants###07 02 2020 new variable -assessment#:#tst_tbl_results_grades#:#Results and Grades +assessment#:#tst_tbl_col_answered_questions#:#Domande con risposta +assessment#:#tst_tbl_col_final_mark#:#Voto +assessment#:#tst_tbl_col_finished_passes#:#Finished Passes###31 08 2022 new variable +assessment#:#tst_tbl_col_finished_passes_num_of#:#%s of %s###31 08 2022 new variable +assessment#:#tst_tbl_col_last_scored_access#:#Last Scored Access###31 08 2022 new variable +assessment#:#tst_tbl_col_pass_finished#:#Passaggio finito +assessment#:#tst_tbl_col_passed_status#:#Votazione +assessment#:#tst_tbl_col_percent_result#:#Risultato in percentuale +assessment#:#tst_tbl_col_reached_points#:#Punti raggiunti +assessment#:#tst_tbl_col_scored_pass#:#Passaggio segnato +assessment#:#tst_tbl_col_started_passes#:#Started Passes###31 08 2022 new variable +assessment#:#tst_tbl_invited_users#:#Partecipanti selezionati manualmente +assessment#:#tst_tbl_participants#:#Partecipanti +assessment#:#tst_tbl_results_grades#:#Risultati e voti assessment#:#tst_test_result#:#Risultato del test -assessment#:#tst_text_count_system#:#Modalità di punteggio -assessment#:#tst_threshold#:#Thresholds -assessment#:#tst_time_already_spent#:#Tempo trascorso dall& -assessment#:#tst_time_already_spent_left#:#Ti rimane ancora %s . -assessment#:#tst_time_limit_message#:#You will have <b>%s minutes</b> to answer all questions.###26 08 2024 new variable -assessment#:#tst_title_output#:#Output dei titoli delle domande -assessment#:#tst_title_output_full#:#Mostra il titolo del test ed il punteggio disponibile -assessment#:#tst_title_output_hide_points#:#Mostra solo il titolo del test -assessment#:#tst_title_output_info#:#Set which combination of question titles and/or points available should be visible to participants while they are taking the test and within the test attempt overview (see below).###29 10 2025 new variable +assessment#:#tst_text_count_system#:#Modalità di valutazione +assessment#:#tst_threshold#:#soglie (in %) +assessment#:#tst_time_already_spent#:#Hai iniziato il test a:%s. Il tempo di elaborazione massimo è %s. +assessment#:#tst_time_already_spent_left#:#Ti rimane ancora %s. +assessment#:#tst_time_limit_message#:#You will have <b>%s minutes</b> to answer all questions.###30 04 2024 new variable +assessment#:#tst_title_output#:#Visualizzazione dei titoli delle domande +assessment#:#tst_title_output_full#:#Mostra il titolo della domanda ed il punteggio raggiungibile +assessment#:#tst_title_output_hide_points#:#Mostra solo il titolo della domanda +assessment#:#tst_title_output_info#:#Set which combination of question titles and/or points available should be visible to participants while they are taking the test and within the test attempt overview (see below).###28 11 2025 new variable assessment#:#tst_title_output_no_title#:#Non mostrare il Titolo della domanda ed il Punteggio -assessment#:#tst_title_output_only_points#:#Only Available Points###26 08 2024 new variable +assessment#:#tst_title_output_only_points#:#Only Available Points###30 04 2024 new variable assessment#:#tst_trigger_result_refreshing#:#I risultati devono essere ricalcolati. Questo potrebbe richiedere un po’ di tempo. -assessment#:#tst_type#:#Tipo del test +assessment#:#tst_type#:#Tipo di test assessment#:#tst_unchanged_answer_is_correct#:#La risposta predefinita è corretta assessment#:#tst_unchanged_order_is_correct#:#L’ordine predefinito è corretto assessment#:#tst_use_previous_answers#:#Usa la risposta precedente assessment#:#tst_use_previous_answers_description#:#Se selezionato, la precedente risposta di un utente verrà utilizzata come valore di default per i test futuri, altrimenti le risposte date in precedenza, non verranno mostrate nelle future esecuzioni dei test. -assessment#:#tst_use_previous_answers_user#:#Usa la mia risposta ad un test precedente come risposta di default assessment#:#tst_user_finished_test#:#L'utente ha finito il test (%s) assessment#:#tst_view_competence_assign#:#Visualizza proprietà di assegnazione -assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s -assessment#:#tst_virtual_pass_header_lo_qualifying#:#Qualifying Test Results for the Learning Objectives<br />%s +assessment#:#tst_virtual_pass_header_lo_initial#:#Risultati dei test iniziali per gli obiettivi di apprendimento %s +assessment#:#tst_virtual_pass_header_lo_qualifying#:#Risultati dei test qualificanti per gli obiettivi di apprendimento %s assessment#:#tst_wf_info_answer_adopted_from_prev_pass#:#È stata adottata la risposta di un precedente tentativo. -assessment#:#tst_wf_info_answer_not_adopted#:#There was no answer from previous attempts adopted, so you have to workthru this question, because otherwise your learning objective result will be degraded. -assessment#:#tst_wf_info_optional_question#:#This question relates to an allready passed learning objective. +assessment#:#tst_wf_info_answer_not_adopted#:#Non vi è stata alcuna risposta da precedenti tentativi adottati, quindi è necessario elaborare questa domanda, perché altrimenti il risultato dell'obiettivo di apprendimento sarà degradato. +assessment#:#tst_wf_info_optional_question#:#Questa domanda riguarda un obiettivo di apprendimento già superato. assessment#:#tst_your_answer_was#:#La tua risposta era assessment#:#tst_your_answers#:#Queste sono le risposte che hai dato alle seguenti domande. assessment#:#un_add_category#:#Aggiungi categoria @@ -2020,43 +2006,43 @@ assessment#:#unit_placeholder#:#** Nuova unità ** assessment#:#units#:#Unità assessment#:#unlimited#:#illimitato assessment#:#unlock#:#Sbloccato -assessment#:#updated#:#Updated###28 10 2024 new variable +assessment#:#updated#:#Updated###28 11 2025 new variable assessment#:#uploaded_material#:#Materiale salvato assessment#:#use_previous_solution#:#Usa soluzione precedente assessment#:#use_previous_solution_advice#:#La soluzione mostrata per la domanda è quella che avete dato precedentemente. Bisogna confermare la soluzione adottata se si desidera utilizzarla senza modifiche. assessment#:#user_has_finished_a_test#:#Un partecipante ha terminato il test. -assessment#:#user_ip_outside_range#:#You are not allowed to access the test from this IP.###26 08 2024 new variable +assessment#:#user_ip_outside_range#:#You are not allowed to access the test from this IP.###28 11 2025 new variable assessment#:#user_not_invited#:#Non sei ammesso ad eseguire questo test. -assessment#:#usr_manscoring_complete#:#Marke as 'scored'###29 10 2025 new variable +assessment#:#usr_manscoring_complete#:#Marke as 'scored'###28 11 2025 new variable assessment#:#value_between_x_and_y#:#Il valore deve essere tra %s e %s assessment#:#values#:#Valori -assessment#:#variable#:#Variable###26 08 2024 new variable +assessment#:#variable#:#Variable###28 11 2025 new variable assessment#:#variable_x#:#Variabile %s assessment#:#variables#:#Variabili assessment#:#wait_for_next_pass_hint_msg#:#Il passaggio aggiuntivo è possibile in tempo: %s -assessment#:#warning_question_not_complete#:#La domanda non & +assessment#:#warning_question_not_complete#:#La domanda non è completa! assessment#:#width#:#Larghezza -assessment#:#with_solution#:#Participants with solution###28 10 2024 new variable +assessment#:#with_solution#:#Participants with solution###28 11 2025 new variable assessment#:#with_solutions_participants#:#Partecipanti con soluzioni -assessment#:#without_solution#:#Participants without solution###28 10 2024 new variable +assessment#:#without_solution#:#Participants without solution###28 11 2025 new variable assessment#:#without_solutions_participants#:#Partecipanti senza soluzioni assessment#:#worked_through#:#Risposto assessment#:#working_time#:#Tempo di esecuzione assessment#:#you_received_a_of_b_points#:#Hai ricevuto %s dei %s punti a disposizione -assessment#:#your_results#:#Your Results###28 10 2024 new variable +assessment#:#your_results#:#My Results###28 11 2025 new variable auth#:#auth_account_code#:#Codice -auth#:#auth_account_code_info#:#To re-activate your account you can use a ILIAS account code. +auth#:#auth_account_code_info#:#Per riattivare il tuo account puoi utilizzare un codice account ILIAS. auth#:#auth_account_code_title#:#Codice account auth#:#auth_account_code_used#:#Il tuo account è stato riattivato. Si prega si accedere nuovamente per motivi di sicurezza. -auth#:#auth_account_migration#:#Nuovo account ILIAS +auth#:#auth_account_migration#:#Nuovo account utente ILIAS auth#:#auth_account_migration_keep#:#Migra un account esistente auth#:#auth_account_migration_name#:#Migrazione auth#:#auth_account_migration_new#:#Crea un nuovo Account Utente auth#:#auth_activation_code_success#:#Il tuo account è stato riattivato. Adesso puoi collegarti a ILIAS. auth#:#auth_allow_local_info#:#Se è ancora possibile abilitare un'autenticazione locale contro il database ILIAS (con un accesso/password locale) per quegli account utente la cui modalità di autenticazione è impostata su SAML. auth#:#auth_auth_settings#:#Impostazioni -auth#:#auth_cron_destroy_expired_sessions#:#Deletion of Expired Sessions###26 08 2024 new variable -auth#:#auth_cron_destroy_expired_sessions_desc#:#This job deletes expires sessions.###26 08 2024 new variable +auth#:#auth_cron_destroy_expired_sessions#:#Deletion of Expired Sessions###30 04 2024 new variable +auth#:#auth_cron_destroy_expired_sessions_desc#:#This job deletes expires sessions.###30 04 2024 new variable auth#:#auth_err_expired#:#La tua sessione è stata disattivata a causa della inattività. auth#:#auth_err_invalid_user_account#:#L’autenticazione è fallita a causa di un guasto interno. auth#:#auth_err_ldap_exception#:#L’autenticazione è fallita a causa di un guasto interno di autenticazione (LDAP). @@ -2064,69 +2050,69 @@ auth#:#auth_info_add#:#Scegli questa opzione se non sei registrato su ILIAS. Ver auth#:#auth_info_migrate#:#Se hai già un account ILIAS, inserisci per favore username e password per accedere ai tuoi dati personali (mail, risultati dei test, ...). auth#:#auth_ldap_server_ds#:#Server LDAP auth#:#auth_login_editor#:#Editor della schermata di accesso -auth#:#auth_odic_scope_info#:#In this mask, the standard claims are displayed as a suggestion for a profile data assignment based on the OpenID Connect scopes configured %s. You can adopt this suggestion as an effective profile data assignment by clicking on "%s" or make your own adjustments by changing the text fields.###28 10 2024 new variable -auth#:#auth_odic_scope_tab_info#:#In this mask you can assign OpenID Connect claims to ILIAS profile data. To do this, enter the scope from which the information should be taken over upon successful authentication in the corresponding text fields for the respective profile date. Activate the corresponding checkbox if the data should also be transferred to an existing ILIAS user account. You can view a list of standard claims %s.###28 10 2024 new variable +auth#:#auth_odic_scope_info#:#In this mask, the standard claims are displayed as a suggestion for a profile data assignment based on the OpenID Connect scopes configured %s. You can adopt this suggestion as an effective profile data assignment by clicking on "%s" or make your own adjustments by changing the text fields.###28 11 2025 new variable +auth#:#auth_odic_scope_tab_info#:#In this mask you can assign OpenID Connect claims to ILIAS profile data. To do this, enter the scope from which the information should be taken over upon successful authentication in the corresponding text fields for the respective profile date. Activate the corresponding checkbox if the data should also be transferred to an existing ILIAS user account. You can view a list of standard claims %s.###28 11 2025 new variable auth#:#auth_oidc#:#OpenId Connect -auth#:#auth_oidc_configured_scopes#:#Pre-fill Scope-based Mapping###28 10 2024 new variable -auth#:#auth_oidc_discover_scopes#:#Perform Scope Auto Discovery###28 10 2024 new variable -auth#:#auth_oidc_discover_scopes_info#:#The automatic scope discovery was performed. Scopes are added to the field "Additional Scopes" in the form below. Please define your relevant scopes and save the form afterwards.###28 10 2024 new variable -auth#:#auth_oidc_failed#:#Login via OpenID Connect failed###26 08 2024 new variable -auth#:#auth_oidc_here#:#here###28 10 2024 new variable -auth#:#auth_oidc_login_element_info#:#Login to ILIAS via OpenID Connect###29 07 2022 new variable -auth#:#auth_oidc_mapping_table#:#Zuordnung von ILIAS-Benutzerdaten zu OpenId Connect Attributen -auth#:#auth_oidc_profile#:#Zuordnung der Profildaten -auth#:#auth_oidc_role_info#:#OpenID Connect Attribute::Value (e.g: "roles::employee").###07 02 2020 new variable -auth#:#auth_oidc_role_mapping_table#:#Zurodnung von ILIAS-Rollen zu OpenId Connect Attributen -auth#:#auth_oidc_roles#:#Rollenzuordnung -auth#:#auth_oidc_saved_values#:#Effective Attribute Mapping###28 10 2024 new variable -auth#:#auth_oidc_scopes#:#Scopes###28 10 2024 new variable -auth#:#auth_oidc_settings#:#Server-Einstellungen -auth#:#auth_oidc_settings_activation#:#OpenID Connect aktivieren -auth#:#auth_oidc_settings_additional_scopes#:#Additional Scopes###29 07 2022 new variable -auth#:#auth_oidc_settings_additional_scopes_info#:#Standard scopes: address, email, phone, profile###28 10 2024 new variable +auth#:#auth_oidc_configured_scopes#:#Pre-fill Scope-based Mapping###28 11 2025 new variable +auth#:#auth_oidc_discover_scopes#:#Perform Scope Auto Discovery###28 11 2025 new variable +auth#:#auth_oidc_discover_scopes_info#:#The automatic scope discovery was performed. Scopes are added to the field "Additional Scopes" in the form below. Please define your relevant scopes and save the form afterwards.###28 11 2025 new variable +auth#:#auth_oidc_failed#:#Login via OpenID Connect failed###16 03 2023 new variable +auth#:#auth_oidc_here#:#here###28 11 2025 new variable +auth#:#auth_oidc_login_element_info#:#Login a ILIAS via OpenID +auth#:#auth_oidc_mapping_table#:#Mappatura attributi utente ILIAS su attributi OpenID Connect +auth#:#auth_oidc_profile#:#Mappatura attributi utente +auth#:#auth_oidc_role_info#:#Attributo di connessione OpenID Connect Attribute::Value (per es: "roles::employee"). +auth#:#auth_oidc_role_mapping_table#:#Mappatura ruoli ILIAS su attributi OpenID Connect +auth#:#auth_oidc_roles#:#Mappatura Ruoli +auth#:#auth_oidc_saved_values#:#Effective Attribute Mapping###28 11 2025 new variable +auth#:#auth_oidc_scopes#:#Scopes###28 11 2025 new variable +auth#:#auth_oidc_settings#:#Impostazioni Server +auth#:#auth_oidc_settings_activation#:#Abilita autenticazione OpenID Connect +auth#:#auth_oidc_settings_additional_scopes#:#Parametri Scope Addizionali +auth#:#auth_oidc_settings_additional_scopes_info#:#Standard scopes: address, email, phone, profile###28 11 2025 new variable auth#:#auth_oidc_settings_client_id#:#Client-ID -auth#:#auth_oidc_settings_custom_session_duration#:#Sitzungsdauer -auth#:#auth_oidc_settings_custom_session_duration_option#:#Eigene Sitzungsdauer -auth#:#auth_oidc_settings_custom_session_duration_type#:#Einstellungen zur Sitzungsdauer -auth#:#auth_oidc_settings_default_role#:#Rollenzuordnung -auth#:#auth_oidc_settings_default_role_info#:#Bitte wählen Sie eine globale Rolle für neu anzulegende ILIAS-Benutzer -auth#:#auth_oidc_settings_default_scopes#:#Default Scope###28 10 2024 new variable -auth#:#auth_oidc_settings_discovery_error#:#Retrieving the Discovery URL failed with: %s###26 08 2024 new variable -auth#:#auth_oidc_settings_discovery_url#:#Discovery URL of the provider###26 08 2024 new variable -auth#:#auth_oidc_settings_img#:#Bild -auth#:#auth_oidc_settings_img_file_info#:#Laden Sie ein Bild hoch das auf der Anmeldeseite angezeigt werden soll. Das Bild verlinkt automatisch auf das OpenId Connect Anmeldeskript. -auth#:#auth_oidc_settings_invalid_scopes#:#The following values are not valid Scopes: %s###29 07 2022 new variable -auth#:#auth_oidc_settings_le#:#Darstellung Anmeldeseite -auth#:#auth_oidc_settings_login_option_default#:#Anmeldung nicht erzwingen -auth#:#auth_oidc_settings_login_option_default_info#:#Eine Anmeldung beim OpenId Connect Server ist nicht notwendig, wenn bereits eine gültige Sitzung vorliegt. -auth#:#auth_oidc_settings_login_option_enforce#:#Anmeldung erzwingen -auth#:#auth_oidc_settings_login_option_enforce_info#:#Eine Anmeldung beim OpenId Connect Server ist in jedem Fall notwendig - auch wenn bereits eine gültige Sitzung vorliegt. -auth#:#auth_oidc_settings_login_options#:#Anmeldeoptionen -auth#:#auth_oidc_settings_logout_scope#:#Verhalten beim Abmelden -auth#:#auth_oidc_settings_logout_scope_global#:#Global abmelden -auth#:#auth_oidc_settings_logout_scope_global_info#:#Wenn aktiviert, wird beim Abmelden sowohl die OpenId Connect Sitzung als auch die ILIAS-Sitzung beendet. -auth#:#auth_oidc_settings_logout_scope_local#:#nur bei ILIAS abmelden -auth#:#auth_oidc_settings_logout_scope_local_info#:#Wenn aktiviert, wird beim Abmelden nur die ILIAS-Sitzung beendet. +auth#:#auth_oidc_settings_custom_session_duration#:#Durata della sessione +auth#:#auth_oidc_settings_custom_session_duration_option#:#Durata sessione personalizzata +auth#:#auth_oidc_settings_custom_session_duration_type#:#Impostazioone della durata della sessione +auth#:#auth_oidc_settings_default_role#:#Ruolo predefinito utenti +auth#:#auth_oidc_settings_default_role_info#:#Selezionare un ruolo globale per i nuovi utenti creati +auth#:#auth_oidc_settings_default_scopes#:#Default Scope###28 11 2025 new variable +auth#:#auth_oidc_settings_discovery_error#:#Retrieving the Discovery URL failed with: %s###16 03 2023 new variable +auth#:#auth_oidc_settings_discovery_url#:#Discovery URL of the provider###16 03 2023 new variable +auth#:#auth_oidc_settings_img#:#Immagine +auth#:#auth_oidc_settings_img_file_info#:#Caricare un immagine da visualizzare nella pagine di login. L'immagine viene inserita nello script di login OpenID Connect. +auth#:#auth_oidc_settings_invalid_scopes#:#I seguenti valori non sono parametri Scope validi: %s +auth#:#auth_oidc_settings_le#:#Tipo di elemento al login +auth#:#auth_oidc_settings_login_option_default#:#Non forzare la registrazione +auth#:#auth_oidc_settings_login_option_default_info#:#Non è necessaria una registrazione con OpenId Connect Server se esiste già una sessione valida. +auth#:#auth_oidc_settings_login_option_enforce#:#Forza sempre la registrazione +auth#:#auth_oidc_settings_login_option_enforce_info#:#La registrazione con OpenId Connect Server è sempre necessaria, anche se esiste già una sessione valida. +auth#:#auth_oidc_settings_login_options#:#Opzioni di sessione +auth#:#auth_oidc_settings_logout_scope#:#Opzioni di disconnessione +auth#:#auth_oidc_settings_logout_scope_global#:#Disconnetti al livello globale +auth#:#auth_oidc_settings_logout_scope_global_info#:#Se attivato, sia la sessione OpenId Connect che la sessione ILIAS vengono terminate al momento della disconnessione. +auth#:#auth_oidc_settings_logout_scope_local#:#Disconnetti solo da ILIAS +auth#:#auth_oidc_settings_logout_scope_local_info#:#Se attivato, viene automaticamente creato un nuovo account utente per gli utenti che si sono autenticati correttamente con Open ID Connect ma non dispongono di un account utente ILIAS. auth#:#auth_oidc_settings_provider#:#Provider-Url -auth#:#auth_oidc_settings_secret#:#Client-Schlüssel -auth#:#auth_oidc_settings_section_user_sync#:#Einstellungen zur Benutzersynchronisierung -auth#:#auth_oidc_settings_session_duration#:#Dauer -auth#:#auth_oidc_settings_title#:#OpenID Connect Authentifizierung konfigurieren -auth#:#auth_oidc_settings_txt#:#Text -auth#:#auth_oidc_settings_txt_val_info#:#Tragen Sie einen Text ein der auf der Anmeldeseite angezeigt werden soll. Der Text verlinkt automatisch auf das OpenId Connect Anmeldeskript. -auth#:#auth_oidc_settings_user_attr#:#Attributname der Benutzerzugänge -auth#:#auth_oidc_settings_user_sync#:#Automatische Synchronisierung -auth#:#auth_oidc_settings_user_sync_info#:#Wenn aktiviert, wird für Benutzer, die sich erfolgreich gegen Open ID Connect authentifiziert haben aber kein ILIAS-Benutzerkonto besitzen, automatisch ein neues Benutzerkonto erzeugt. -auth#:#auth_oidc_settings_validate_scope_custom#:#Use custom OpenID Connect Discovery url###26 08 2024 new variable -auth#:#auth_oidc_settings_validate_scope_default#:#Use :Provider-URL:/.well-known/openid-configuration###26 08 2024 new variable -auth#:#auth_oidc_settings_validate_scope_none#:#Do not validate Scopes on saving###26 08 2024 new variable -auth#:#auth_oidc_settings_validate_scopes#:#Validate Scopes upon saving###26 08 2024 new variable -auth#:#auth_oidc_update_field_info#:#Automatisch aktualisieren -auth#:#auth_oidc_update_role_info#:#Nur bei Erstanmeldung (automatische Synchronisierung) anwenden +auth#:#auth_oidc_settings_secret#:#Chiave segreta +auth#:#auth_oidc_settings_section_user_sync#:#Impostazioni di sincronizzazione dell'utente +auth#:#auth_oidc_settings_session_duration#:#Durata +auth#:#auth_oidc_settings_title#:#Configurare autenticazione con OpenID Connect +auth#:#auth_oidc_settings_txt#:#Testo +auth#:#auth_oidc_settings_txt_val_info#:#Immettere un testo da visualizzare nella pagina di registrazione. Il testo si collega automaticamente allo script di accesso OpenId Connect. +auth#:#auth_oidc_settings_user_attr#:#Nome attributo da sincronizzare +auth#:#auth_oidc_settings_user_sync#:#Sincronizzazione automatica +auth#:#auth_oidc_settings_user_sync_info#:#Se attivato, viene automaticamente creato un nuovo account utente per gli utenti che si sono autenticati correttamente con Open ID Connect ma non dispongono di un account utente ILIAS. +auth#:#auth_oidc_settings_validate_scope_custom#:#Use custom OpenID Connect Discovery url###16 03 2023 new variable +auth#:#auth_oidc_settings_validate_scope_default#:#Use :Provider-URL:/.well-known/openid-configuration###16 03 2023 new variable +auth#:#auth_oidc_settings_validate_scope_none#:#Do not validate Scopes on saving###16 03 2023 new variable +auth#:#auth_oidc_settings_validate_scopes#:#Validate Scopes upon saving###16 03 2023 new variable +auth#:#auth_oidc_update_field_info#:#Aggiornamento automatico +auth#:#auth_oidc_update_role_info#:#Utilizzare solo quando ci si registra per la prima volta (sincronizzazione automatica) auth#:#auth_oidconnect#:#OpenID Connect -auth#:#auth_page_type_auth#:#Login Page###29 07 2022 new variable -auth#:#auth_required_password#:#Please enter a password.###29 10 2025 new variable -auth#:#auth_required_username#:#Please enter a username.###29 10 2025 new variable +auth#:#auth_page_type_auth#:#Pagina di Login +auth#:#auth_required_password#:#Please enter a password.###10 12 2024 new variable +auth#:#auth_required_username#:#Please enter a username.###10 12 2024 new variable auth#:#auth_saml_add_idp_btn#:#Aggiungi nuovo provider di identità auth#:#auth_saml_add_idp_md_error#:#Il valore fornito non è un documento XML valido. Assicurarsi che il codice XML contenga un provider di identità valido. auth#:#auth_saml_add_idp_md_info#:#Immettere i metadati formattati in XML per il provider di identità. @@ -2135,13 +2121,13 @@ auth#:#auth_saml_configure#:#Configura autenticazione SAML auth#:#auth_saml_configure_idp#:#Configura SAML IDP: %s auth#:#auth_saml_deleted_idp#:#Il provider di identità è stato eliminato. auth#:#auth_saml_enable#:#Abilita supporto SAML -auth#:#auth_saml_err_sqlite_driver#:#The SAML authentication requires the SQLite driver for PHP. Please install the SQLite package and try again.###29 07 2022 new variable +auth#:#auth_saml_err_sqlite_driver#:#L'autenticazione SAML richiede il driver SQLite per PHP. Installa il pacchetto SQLite e riprova. auth#:#auth_saml_idp#:#IDP auth#:#auth_saml_idp_selection_table_desc#:#Si prega di scegliere il provider di identità per registrarsi. auth#:#auth_saml_idp_selection_table_title#:#Selezione provider di identità auth#:#auth_saml_idp_settings#:#Impostazioni IDP auth#:#auth_saml_idps#:#Elenco SAML IDP -auth#:#auth_saml_idps_info#:#Please check and edit the SimpleSAMLphp configuration in '<strong>%s</strong>' and '<strong>%s</strong>' (external data directory). Please read the manual for further explanations %s. +auth#:#auth_saml_idps_info#:#Controlla e modifica la configurazione SimpleSAMLphp in '<strong>%s</strong>' e '<strong>%s</strong>' (directory di dati esterni). Non dimenticare di aggiungere i percorsi alla chiave privata e al certificato nel file authsources.php. Leggere il manuale per ulteriori spiegazioni%s. <br /> URL metadati federali: %s auth#:#auth_saml_login_form#:#Pulsante sulla pagina accesso auth#:#auth_saml_login_form_info#:#Se attivato e c'è almeno un IDP attivo, viene visualizzato un pulsante nella pagina di accesso. Un clic su questo pulsante avvia una richiesta SAML. auth#:#auth_saml_migration#:#Migrazione account: @@ -2158,39 +2144,39 @@ auth#:#auth_saml_user_mapping#:#Mappatura profilo utente auth#:#auth_saml_username_claim#:#Attributo per il nome utente auth#:#auth_saml_username_claim_info#:#Definire l'attributo che ILIAS utilizza per generare il nome utente che sarà visibile in ILIAS. auth#:#auth_sync#:#Sincronizzazione utente -auth#:#destination_after_logout#:#Destination After Logout###28 10 2024 new variable -auth#:#destination_external_ressource#:#Show External Ressource###28 10 2024 new variable -auth#:#destination_external_ressource_url#:#External URL###28 10 2024 new variable -auth#:#destination_internal_ressource#:#Show Internal Ressource###28 10 2024 new variable -auth#:#destination_internal_ressource_ref_id#:#Internal Reference Id###28 10 2024 new variable -auth#:#destination_login_screen#:#Show Login Screen###28 10 2024 new variable -auth#:#destination_login_screen_info#:#Make sure that, for example, an SSO is not addressed that leads to immediate login.###28 10 2024 new variable -auth#:#destination_logout_screen#:#Show Logout Screen###28 10 2024 new variable -auth#:#err_auth_ldap_failed#:#Authentication failed. Please contact your ILIAS administrator.###29 07 2022 new variable +auth#:#destination_after_logout#:#Destination After Logout###28 11 2025 new variable +auth#:#destination_external_ressource#:#Show External Ressource###28 11 2025 new variable +auth#:#destination_external_ressource_url#:#External URL###28 11 2025 new variable +auth#:#destination_internal_ressource#:#Show Internal Ressource###28 11 2025 new variable +auth#:#destination_internal_ressource_ref_id#:#Internal Reference Id###28 11 2025 new variable +auth#:#destination_login_screen#:#Show Login Screen###28 11 2025 new variable +auth#:#destination_login_screen_info#:#Make sure that, for example, an SSO is not addressed that leads to immediate login.###28 11 2025 new variable +auth#:#destination_logout_screen#:#Show Logout Screen###28 11 2025 new variable +auth#:#err_auth_ldap_failed#:#Authentication failed. Please contact your ILIAS administrator.###09 03 2022 new variable auth#:#err_auth_saml_failed#:#Autenticazione fallita. Si prega di contattare il proprio amministratore di sistema. auth#:#err_auth_saml_no_ilias_user#:#Autenticazione fallita. Si prega di contattare il proprio amministratore di sistema. -auth#:#language_does_not_exist#:#The selected language does not exist.###26 08 2024 new variable -auth#:#login_page#:#Language of Login-Page###26 08 2024 new variable -auth#:#login_pages#:#Login-Pages###26 08 2024 new variable -auth#:#logout_behaviour#:#Logout Behaviour###28 10 2024 new variable -auth#:#logout_behaviour_invalid_ref_id#:#Please make sure the internal resource id exists and is not in trash###28 10 2024 new variable -auth#:#logout_behaviour_invalid_url#:#The external ressource given is not a valid URL.###28 10 2024 new variable -auth#:#logout_behaviour_ref_id_no_access#:#Please make sure the "Anonymous" user has access to the defined ressource.###28 10 2024 new variable -auth#:#logout_behaviour_ref_id_valid_status_changed#:#The configured internal resource is no longer valid. If the resource has been deleted or access for the "Anonymous" user has been restricted, please configure a new valid internal resource. Without a valid configuration, the user will be redirected to the logout screen by default.###28 10 2024 new variable -auth#:#logout_behaviour_settings#:#Logout Behaviour Settings###28 10 2024 new variable -auth#:#logout_editor#:#Design Logout-Page###26 08 2024 new variable -auth#:#logout_page#:#Language of Logout-Page###26 08 2024 new variable -auth#:#logout_pages#:#Logout-Pages###26 08 2024 new variable +auth#:#language_does_not_exist#:#The selected language does not exist.###28 11 2025 new variable +auth#:#login_page#:#Language of Login-Page###28 11 2025 new variable +auth#:#login_pages#:#Login-Pages###28 11 2025 new variable +auth#:#logout_behaviour#:#Logout Behaviour###28 11 2025 new variable +auth#:#logout_behaviour_invalid_ref_id#:#Please make sure the internal resource id exists and is not in trash###28 11 2025 new variable +auth#:#logout_behaviour_invalid_url#:#The external ressource given is not a valid URL.###28 11 2025 new variable +auth#:#logout_behaviour_ref_id_no_access#:#Please make sure the "Anonymous" user has access to the defined ressource.###28 11 2025 new variable +auth#:#logout_behaviour_ref_id_valid_status_changed#:#The configured internal resource is no longer valid. If the resource has been deleted or access for the "Anonymous" user has been restricted, please configure a new valid internal resource. Without a valid configuration, the user will be redirected to the logout screen by default.###28 11 2025 new variable +auth#:#logout_behaviour_settings#:#Logout Behaviour Settings###28 11 2025 new variable +auth#:#logout_editor#:#Design Logout-Page###28 11 2025 new variable +auth#:#logout_page#:#Language of Logout-Page###28 11 2025 new variable +auth#:#logout_pages#:#Logout-Pages###28 11 2025 new variable auth#:#lti_consumer_inactive#:#Il consumatore dello strumento LTI è disabilitato. -auth#:#page_design_activate#:#Activate Page Design###26 08 2024 new variable -auth#:#page_design_deactivate#:#Deactivate Page Design###26 08 2024 new variable +auth#:#page_design_activate#:#Activate Page Design###28 11 2025 new variable +auth#:#page_design_deactivate#:#Deactivate Page Design###28 11 2025 new variable auth#:#saml_tab_head_idp#:#IDP awrn#:#awareness_now_online#:#Adesso online awrn#:#awareness_settings#:#Impostazioni awrn#:#awrn_caching_period#:#Periodo di memorizzazione nella cache awrn#:#awrn_caching_period_info#:#Il tempo di attesa prima che il numero degli utenti nella barra superiore venga aggiornato e i nuovi utenti online siano determinati. awrn#:#awrn_enable#:#Consenti strumento “Chi è online?” -awrn#:#awrn_filter#:#User Filter###29 07 2022 new variable +awrn#:#awrn_filter#:#Filtro Utente awrn#:#awrn_hide_from_awareness#:#Nascondimi dallo strumento “Chi è online?” awrn#:#awrn_hide_from_awareness_info#:#Lo strumento “Chi è online?” si trova nella barra superiore ed elenca tutti gli utenti selezionati (per esempio, contatti dei membri dei tuoi corsi). awrn#:#awrn_inactive#:#Non elencato @@ -2198,57 +2184,57 @@ awrn#:#awrn_incl_offline#:#Online e Offline awrn#:#awrn_max_inactivity#:#Periodo massimo di inattività awrn#:#awrn_max_inactivity_info#:#Dopo questo periodo gli utenti sono considerati offline. Se nulla è impostato, verrà utilizzato il tempo di sessione. awrn#:#awrn_max_nr_entries#:#Numero massimo di voci -awrn#:#awrn_max_nr_entries_info#:#Maximum number of items in the ‘Who is online?’ list. +awrn#:#awrn_max_nr_entries_info#:#Numero massimo di elementi nell'elenco "Chi è online?". awrn#:#awrn_minutes#:#min awrn#:#awrn_online#:#Online awrn#:#awrn_online_only#:#Solo online -awrn#:#awrn_seconds#:#sec -awrn#:#awrn_use_osd#:#Utenti popup online +awrn#:#awrn_seconds#:#sec. +awrn#:#awrn_use_osd#:#Popup utenti online awrn#:#awrn_use_osd_info#:#Mostra a popup per indicare nuovi utenti online nell’elenco “Chi è online?”. -awrn#:#awrn_user_show#:#Show Your Account in "Who-Is-Online?"###29 07 2022 new variable -awrn#:#awrn_user_show_default#:#Default Value for the Visibility in "Who-Is-Online?"###29 10 2025 new variable -awrn#:#awrn_user_show_default_info#:#Defines the default value for the visibility of the status of a user in "Who-Is-Online?".###29 10 2025 new variable -awrn#:#user_awrn_default#:#Default###29 07 2022 new variable -awrn#:#user_awrn_hide#:#Hide my status###29 07 2022 new variable -awrn#:#user_awrn_show#:#Show my status###29 07 2022 new variable +awrn#:#awrn_user_show#:#Mostra il tuo stato in "Chi è online?" +awrn#:#awrn_user_show_default#:#Default Value for the Visibility in "Who-Is-Online?"###28 11 2025 new variable +awrn#:#awrn_user_show_default_info#:#Defines the default value for the visibility of the status of a user in "Who-Is-Online?".###28 11 2025 new variable +awrn#:#user_awrn_default#:#Predefinito +awrn#:#user_awrn_hide#:#Nascondi +awrn#:#user_awrn_show#:#Mostra background_tasks#:#abort#:#Interrompi background_tasks#:#background_tasks#:#Attività in background -background_tasks#:#background_tasks_running#:#Running Tasks +background_tasks#:#background_tasks_running#:#Attività in background background_tasks#:#completed#:#Completato background_tasks#:#proceed_job#:#Procedi background_tasks#:#scheduled#:#Programmato -background_tasks#:#task_might_be_failed#:#Questa attività non ha risposto per un po', è possibile uscire se necessario. -background_tasks#:#ui_msg_files_violate_maxsize#:#The total download size violates the global limit. The download will be aborted.###07 02 2020 new variable -background_tasks#:#ui_msg_no_files_found#:#No files have been found. The download will be aborted.###07 02 2020 new variable -background_tasks#:#ui_msg_num_files#:#%s file(-s) were detected for download, do you want to continue?###07 02 2020 new variable -background_tasks#:#ui_msg_sum_file_sizes#:#The total download size before creating the zip-folder is %s. Do you want to continue?###07 02 2020 new variable +background_tasks#:#task_might_be_failed#:#Questa attività non ha risposto per un po', è possibile chiuderla se necessario. +background_tasks#:#ui_msg_files_violate_maxsize#:#La dimensione del download supera il limite globale. Il download verrà interrotto. +background_tasks#:#ui_msg_no_files_found#:#Nessun file trovato. Il download verrà interrotto. +background_tasks#:#ui_msg_num_files#:#%s file(-s) trovati per il download. Vuoi continuare? +background_tasks#:#ui_msg_sum_file_sizes#:#La dimensione totale prima della compressione zip è di %s. Vuoi continuare? background_tasks#:#waiting#:#Attendi -badge#:#awarded_by#:#Awarded by###26 08 2024 new variable +badge#:#awarded_by#:#Awarded by###30 04 2024 new variable badge#:#badge_activity_badges#:#Attività di badge badge#:#badge_add_template#:#Aggiungi modello badge#:#badge_add_to_profile#:#Aggiungi al profilo badge#:#badge_assignment_deletion_confirmation#:#Sei sicuro di voler rimuovere le seguenti assegnazioni per "%s"? badge#:#badge_award_badge#:#Assegnazione badge -badge#:#badge_award_revoke#:#Award/Revoke Badge###29 10 2025 new variable +badge#:#badge_award_revoke#:#Award/Revoke Badge###28 11 2025 new variable badge#:#badge_badge#:#Badge badge#:#badge_course_lp#:#Corso LP badge#:#badge_course_lp_invalid#:#I seguenti oggetti hanno una modalità LP che non è supportata: %s. -badge#:#badge_create#:#Create Badge###26 08 2024 new variable -badge#:#badge_create_image_processing_failed#:#The badge could not be created, an error occurred while processing the image.###26 08 2024 new variable +badge#:#badge_create#:#Create Badge###30 04 2024 new variable +badge#:#badge_create_image_processing_failed#:#The badge could not be created, an error occurred while processing the image.###30 04 2024 new variable badge#:#badge_criteria#:#Criteri badge#:#badge_crs_merit#:#Merit -badge#:#badge_deletion#:#Badge successfully deleted.###28 10 2024 new variable -badge#:#badge_deletion_confirmation#:#Sei sicuro di voler eliminare i seguenti badge e tutte le rispettive assegnazioni? +badge#:#badge_deletion#:#Badge successfully deleted.###28 11 2025 new variable +badge#:#badge_deletion_confirmation#:#Sei sicuro di voler eliminare i seguenti badges e tutte le rispettive assegnazioni? badge#:#badge_image_from_template#:#Utilizza modello badge#:#badge_image_from_upload#:#Carica immagine badge#:#badge_image_template_form#:#Modello di immagine badge#:#badge_image_templates#:#Modelli di immagine badge#:#badge_in_profile#:#Nel profilo badge#:#badge_issued_on#:#Emesso il -badge#:#badge_lhist_badge_completed#:#Badge $3$ was awarded. -badge#:#badge_lhist_badge_completed_in#:#Badge $3$ was awarded in $1$. +badge#:#badge_lhist_badge_completed#:#Badge $3$ è stato premiato. +badge#:#badge_lhist_badge_completed_in#:#Badge $3$ è stato premiato con $1$. badge#:#badge_manual#:#Assegnazione manuale -badge#:#badge_new_badges#:#You have %1 new badge(s).###07 02 2020 new variable +badge#:#badge_new_badges#:#Hai ottenuto %1 nuovo/i badge! badge#:#badge_no_valid_types_for_obj#:#Attualmente non ci sono tipi di badge attivi. Non puoi creare nuovi badge. Si prega di contattare il proprio amministratore. badge#:#badge_notification_badges#:#Nuovi badge badge#:#badge_notification_badges_goto#:#Ai tuoi badge @@ -2263,18 +2249,18 @@ badge#:#badge_profile_less#:#Mostra meno badge#:#badge_profile_more#:#Mostra tutto badge#:#badge_remove_badge#:#Ritira badge badge#:#badge_remove_from_profile#:#Rimuovi dal profilo -badge#:#badge_select_one#:#You have to select at least one badge###28 10 2024 new variable +badge#:#badge_select_one#:#You have to select at least one badge###28 11 2025 new variable badge#:#badge_service_activate#:#Attiva il servizio badge#:#badge_service_activate_info#:#Attiva il servizio per rendere il badge disponibile badge#:#badge_settings#:#Impostazioni badge -badge#:#badge_sort_active_badges_first#:#Active Badges First###29 10 2025 new variable -badge#:#badge_sort_active_badges_last#:#Active Badges Last###29 10 2025 new variable -badge#:#badge_sort_activity_badges_first#:#Activity Badges First###29 10 2025 new variable -badge#:#badge_sort_activity_badges_last#:#Activity Badges Last###29 10 2025 new variable -badge#:#badge_sort_added_to_profile_last#:#Added To Profile First###29 10 2025 new variable -badge#:#badge_sort_excluded_from_profile_first#:#Excluded From Profile First###29 10 2025 new variable -badge#:#badge_sort_manual_awarding_first#:#Badges mit manueller Vergabe zuerst###29 10 2025 new variable -badge#:#badge_sort_manual_awarding_last#:#Badges mit manueller Vergabe zuletzt###29 10 2025 new variable +badge#:#badge_sort_active_badges_first#:#Active Badges First###28 11 2025 new variable +badge#:#badge_sort_active_badges_last#:#Active Badges Last###28 11 2025 new variable +badge#:#badge_sort_activity_badges_first#:#Activity Badges First###28 11 2025 new variable +badge#:#badge_sort_activity_badges_last#:#Activity Badges Last###28 11 2025 new variable +badge#:#badge_sort_added_to_profile_last#:#Added To Profile First###28 11 2025 new variable +badge#:#badge_sort_excluded_from_profile_first#:#Excluded From Profile First###28 11 2025 new variable +badge#:#badge_sort_manual_awarding_first#:#Badges mit manueller Vergabe zuerst###28 11 2025 new variable +badge#:#badge_sort_manual_awarding_last#:#Badges mit manueller Vergabe zuletzt###28 11 2025 new variable badge#:#badge_subtype_auto#:#automatico badge#:#badge_subtype_manual#:#manuale badge#:#badge_template_deletion_confirmation#:#Sei sicuro di voler eliminare i seguenti modelli di immagine? @@ -2282,32 +2268,32 @@ badge#:#badge_template_types#:#Tipi validi badge#:#badge_template_types_all#:#Tutti badge#:#badge_template_types_specific#:#Specifico badge#:#badge_types#:#Tipi -badge#:#badge_update_image_processing_failed#:#The badge could not be updated, an error occurred while processing the image.###26 08 2024 new variable -badge#:#badge_uploaded_image_file_not_found#:#No uploaded image for the badge could be found.###26 08 2024 new variable +badge#:#badge_update_image_processing_failed#:#The badge could not be updated, an error occurred while processing the image.###30 04 2024 new variable +badge#:#badge_uploaded_image_file_not_found#:#No uploaded image for the badge could be found.###30 04 2024 new variable badge#:#badge_user_profile#:#Profilo utente badge#:#badge_valid#:#Valida fino a -badge#:#criteria#:#Criteria###26 08 2024 new variable -badge#:#endless#:#Always###26 08 2024 new variable -badge#:#issued_on#:#Issued on###26 08 2024 new variable -badge#:#position_updated#:#Profil assignment updated.###26 08 2024 new variable -badge#:#sort_by_date_asc#:#Sort by Date Ascending###26 08 2024 new variable -badge#:#sort_by_date_desc#:#Sort by Date Descending###26 08 2024 new variable -badge#:#sort_by_title_asc#:#Sort by Title Ascending###26 08 2024 new variable -badge#:#sort_by_title_desc#:#Sort by Title Descending###26 08 2024 new variable -badge#:#table_view#:#Table View###26 08 2024 new variable -badge#:#tile_view#:#Tile View###26 08 2024 new variable -badge#:#valid_until#:#Valid until###26 08 2024 new variable -benchmark#:#adm_activate_db_benchmark#:#Activate Benchmarking###29 10 2025 new variable -benchmark#:#adm_activate_db_benchmark_desc#:#Benchmarking will be automatically disabled after one request.###29 10 2025 new variable -benchmark#:#adm_db_bench_by_first_table#:#Aggregated by First Table in SQL###29 10 2025 new variable -benchmark#:#adm_db_bench_chronological#:#Chronological###29 10 2025 new variable -benchmark#:#adm_db_bench_slowest_first#:#Slowest First###29 10 2025 new variable -benchmark#:#adm_db_bench_sorted_by_sql#:#Sorted by SQL###29 10 2025 new variable -benchmark#:#adm_db_benchmark#:#DB Benchmark###29 10 2025 new variable -benchmark#:#adm_db_benchmark_user#:#User Account Name###29 10 2025 new variable -benchmark#:#adm_db_benchmark_user_desc#:#Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking.###29 10 2025 new variable -benchmark#:#adm_sql#:#SQL###29 10 2025 new variable -benchmark#:#adm_time#:#Time###29 10 2025 new variable +badge#:#criteria#:#Criteria###30 04 2024 new variable +badge#:#endless#:#Always###30 04 2024 new variable +badge#:#issued_on#:#Issued on###30 04 2024 new variable +badge#:#position_updated#:#Profil assignment updated.###30 04 2024 new variable +badge#:#sort_by_date_asc#:#Sort by Date Ascending###30 04 2024 new variable +badge#:#sort_by_date_desc#:#Sort by Date Descending###30 04 2024 new variable +badge#:#sort_by_title_asc#:#Sort by Title Ascending###30 04 2024 new variable +badge#:#sort_by_title_desc#:#Sort by Title Descending###30 04 2024 new variable +badge#:#table_view#:#Table View###30 04 2024 new variable +badge#:#tile_view#:#Tile View###30 04 2024 new variable +badge#:#valid_until#:#Valid until###30 04 2024 new variable +benchmark#:#adm_activate_db_benchmark#:#Activate Benchmarking###28 11 2025 new variable +benchmark#:#adm_activate_db_benchmark_desc#:#Benchmarking will be automatically disabled after one request.###28 11 2025 new variable +benchmark#:#adm_db_bench_by_first_table#:#Aggregated by First Table in SQL###28 11 2025 new variable +benchmark#:#adm_db_bench_chronological#:#Chronological###28 11 2025 new variable +benchmark#:#adm_db_bench_slowest_first#:#Slowest First###28 11 2025 new variable +benchmark#:#adm_db_bench_sorted_by_sql#:#Sorted by SQL###28 11 2025 new variable +benchmark#:#adm_db_benchmark#:#DB Benchmark###28 11 2025 new variable +benchmark#:#adm_db_benchmark_user#:#User Account Name###28 11 2025 new variable +benchmark#:#adm_db_benchmark_user_desc#:#Measurements will be made for this user only. The username entered should not belong to the user initiating the benchmarking.###28 11 2025 new variable +benchmark#:#adm_sql#:#SQL###28 11 2025 new variable +benchmark#:#adm_time#:#Time###28 11 2025 new variable bgtask#:#bgtask_blocked#:#Download simultaneo bgtask#:#bgtask_blocked_cancel_new#:#Annulla nuovo download bgtask#:#bgtask_blocked_cancel_old#:#Annulla download esistente @@ -2328,8 +2314,8 @@ bgtask#:#bgtask_setting_threshold_count_info#:#Se il numero di file supera quest bgtask#:#bgtask_setting_threshold_size#:#Grandezza minima bgtask#:#bgtask_setting_threshold_size_info#:#Se le grandezze dei file superano questo valore, il download sarà asincrono. bibl#:#Type#:#Tipo -bibl#:#add_filter#:#Add Filter -bibl#:#bib_default_abstract#:#Abstract +bibl#:#add_filter#:#Aggiungi filtro +bibl#:#bib_default_abstract#:#Riassunto bibl#:#bib_default_address#:#Indirizzo bibl#:#bib_default_author#:#Autore bibl#:#bib_default_cite#:#Bibliografia citazione @@ -2350,52 +2336,52 @@ bibl#:#bib_default_type#:#Tipo bibl#:#bib_default_url#:#URL bibl#:#bib_default_volume#:#Volume bibl#:#bib_default_year#:#Anno -bibl#:#bibl_copy#:#User can copy bibliography +bibl#:#bibl_copy#:#L'utente può copiare la bibliografia bibl#:#bibl_edit#:#Modifica bibliografia -bibl#:#bibl_filter#:#Filter +bibl#:#bibl_filter#:#Filtra bibl#:#bibl_import#:#Importa bibliografia bibl#:#bibl_library_img#:#URL di immagine bibl#:#bibl_library_name#:#Nome -bibl#:#bibl_library_show_in_list#:#Show link als in the list +bibl#:#bibl_library_show_in_list#:#Mostra come link nella lista bibl#:#bibl_library_url#:#URL di base bibl#:#bibl_link_online#:#Inventario di ricerca -bibl#:#bibl_msg_translations_deleted#:#Translations were deleted -bibl#:#bibl_msg_translations_saved#:#Translations were saved +bibl#:#bibl_msg_translations_deleted#:#Le traduzioni sono state cancellate +bibl#:#bibl_msg_translations_saved#:#Le traduzioni sono state salvate bibl#:#bibl_new#:#Nuova bibliografia bibl#:#bibl_settings_edit#:#Modifica biblioteca bibl#:#bibl_settings_libraries#:#Biblioteche bibl#:#bibl_settings_new#:#Aggiungi biblioteca -bibl#:#bibl_translation_desc#:#Description -bibl#:#bibl_translation_lang#:#Language -bibl#:#bibl_translation_trans#:#Translation +bibl#:#bibl_translation_desc#:#Descrizione +bibl#:#bibl_translation_lang#:#Linguaggio +bibl#:#bibl_translation_trans#:#Traduzione bibl#:#bibliography_file#:#Bibliography File bibl#:#bibtex#:#Bibtex -bibl#:#changes_saved#:#Changes were saved. -bibl#:#custom#:#Custom +bibl#:#changes_saved#:#Le modifiche sono state salvate. +bibl#:#custom#:#Personalizzato bibl#:#detail_view#:#Visualizzazione dettagliata -bibl#:#detailed_information#:#Detailed Information###28 10 2024 new variable +bibl#:#detailed_information#:#Detailed Information###28 11 2025 new variable bibl#:#download_original_file#:#Scarica file originale -bibl#:#field#:#Field +bibl#:#field#:#Campo bibl#:#fields#:#Fields -bibl#:#filter_deleted#:#The Filter was deleted. -bibl#:#filter_field_info#:#Please choose a field for which you want to add a filter. -bibl#:#filter_form_title#:#Add new filter -bibl#:#filter_type#:#Filter Type -bibl#:#filter_type_1#:#Textinput -bibl#:#filter_type_2#:#Selectinput +bibl#:#filter_deleted#:#Il filtro è stato cancellato. +bibl#:#filter_field_info#:#Scegli un campo per il quale desideri aggiungere un filtro. +bibl#:#filter_form_title#:#Aggiungi nuovo filtro +bibl#:#filter_type#:#Tipo di filtro +bibl#:#filter_type_1#:#L'immissione di testo +bibl#:#filter_type_2#:#Seleziona input bibl#:#filter_type_3#:#Multi-Selectinput -bibl#:#filter_type_info#:#Please choose a filter type for the field. -bibl#:#identifier#:#Identifier -bibl#:#msg_confirm_delete_filter#:#Do you like to delete the following filter? -bibl#:#msg_filter_info#:#Create a filter here that can be used in the "Contents" tab to limit the display of entries.###26 08 2024 new variable +bibl#:#filter_type_info#:#Scegli un tipo di filtro per il campo. +bibl#:#identifier#:#Identificatore +bibl#:#msg_confirm_delete_filter#:#Cancellare il seguente filtro? +bibl#:#msg_filter_info#:#Create a filter here that can be used in the "Contents" tab to limit the display of entries.###30 04 2024 new variable bibl#:#news_title_created#:#Nuova lista bibliografia aggiunta bibl#:#news_title_updated#:#Lista bibliografia aggiornata -bibl#:#not_yet_migrated#:#This Object has not et been migrated. Please contact the administrators of the platform.###29 07 2022 new variable +bibl#:#not_yet_migrated#:#This Object has not et been migrated. Please contact the administrators of the platform.###31 03 2023 new variable bibl#:#obj_bibl_duplicate#:#Duplica bibliografia -bibl#:#order#:#Order +bibl#:#order#:#Ordine bibl#:#override_entries#:#Sovrascrivi voci -bibl#:#replace_bibliography_file#:#Replace Bibliography File###26 08 2024 new variable -bibl#:#replace_bibliography_file_info#:#The current bibliography file will be replaced by the new file. All existing entries from the current file will be deleted.###26 08 2024 new variable +bibl#:#replace_bibliography_file#:#Replace Bibliography File###30 04 2024 new variable +bibl#:#replace_bibliography_file_info#:#The current bibliography file will be replaced by the new file. All existing entries from the current file will be deleted.###30 04 2024 new variable bibl#:#ris#:#Ris bibl#:#ris_default_a2#:#Posizione negli archivi bibl#:#ris_default_au#:#Autore @@ -2408,7 +2394,7 @@ bibl#:#ris_default_l3#:#Registrazioni correlate bibl#:#ris_default_m1#:#Numero bibl#:#ris_default_m3#:#Vari 3 bibl#:#ris_default_n1#:#Note -bibl#:#ris_default_n2#:#Abstract +bibl#:#ris_default_n2#:#Riassunto bibl#:#ris_default_pb#:#Editore bibl#:#ris_default_py#:#Anno di pubblicazione bibl#:#ris_default_sn#:#ISSN/ISBN/ASIN @@ -2421,18 +2407,18 @@ bibl#:#ris_default_u2#:#Definito dall’utente bibl#:#ris_default_ur#:#URL bibl#:#ris_default_vl#:#Volume bibl#:#ris_default_y1#:#Anno -bibl#:#sorting_1#:#By Title (Ascending)###28 10 2024 new variable -bibl#:#sorting_2#:#By Title (Descending)###28 10 2024 new variable -bibl#:#sorting_3#:#By Author (Ascending)###28 10 2024 new variable -bibl#:#sorting_4#:#By Author (Descending)###28 10 2024 new variable -bibl#:#sorting_5#:#By Year (Ascending)###28 10 2024 new variable -bibl#:#sorting_6#:#By Year (Descending)###28 10 2024 new variable +bibl#:#sorting_1#:#By Title (Ascending)###28 11 2025 new variable +bibl#:#sorting_2#:#By Title (Descending)###28 11 2025 new variable +bibl#:#sorting_3#:#By Author (Ascending)###28 11 2025 new variable +bibl#:#sorting_4#:#By Author (Descending)###28 11 2025 new variable +bibl#:#sorting_5#:#By Year (Ascending)###28 11 2025 new variable +bibl#:#sorting_6#:#By Year (Descending)###28 11 2025 new variable bibl#:#standard#:#Standard -bibl#:#translate#:#Translate +bibl#:#translate#:#Traduci bkm#:#bkm_fold_created#:#La cartella dei segnalibri è stata creata. -blog#:#blog_abstract_image#:#Aggiungi immagine all’abstract +blog#:#blog_abstract_image#:#Mostra la prima immagine blog#:#blog_abstract_image_height#:#Altezza -blog#:#blog_abstract_image_info#:#Le immagini più piccole non verranno utilizzate. +blog#:#blog_abstract_image_info#:#La prima immagine dell'articolo viene ridimensionata alle misure qui definite. Le immagini più piccole di tali misure non verranno mostrate. blog#:#blog_abstract_image_pixels#:#Px blog#:#blog_abstract_image_width#:#Larghezza blog#:#blog_abstract_shorten#:#Abbreviare abstract @@ -2443,25 +2429,25 @@ blog#:#blog_add_contributor#:#Aggiungi collaboratore blog#:#blog_add_posting#:#Aggiungi post blog#:#blog_admin_inactive_info#:#È possibile attivare la funzionalità blog nell’amministrazione del desktop personale. blog#:#blog_admin_toggle_info#:#È possibile disattivare completamente la funzionalità blog nell’amministrazione del desktop personale. -blog#:#blog_approve#:#Approve -blog#:#blog_author#:#Author +blog#:#blog_approve#:#Approvare +blog#:#blog_author#:#Autore blog#:#blog_authors#:#Autori blog#:#blog_back_to_blog_owner#:#Modifica blog blog#:#blog_change_notification_body_approve#:#i seguenti messaggi blog devono essere approvati. blog#:#blog_change_notification_body_comment#:#è stato commentato il seguente post pubblicato. -blog#:#blog_change_notification_body_new#:#the following blog posting was created -blog#:#blog_change_notification_body_update#:#the following blog posting has been updated -blog#:#blog_change_notification_link#:#URL -blog#:#blog_change_notification_reason#:#You are receiving this email because you activated notifications for the blog mentioned above. +blog#:#blog_change_notification_body_new#:#è stato creato il seguente post sul blog +blog#:#blog_change_notification_body_update#:#il seguente post sul blog è stato aggiornato +blog#:#blog_change_notification_link#:#Link al post del Blog +blog#:#blog_change_notification_reason#:#Ricevi questa email perché hai attivato le notifiche per il blog sopra menzionato. blog#:#blog_change_notification_subject#:#Blog "%s" è stato aggiornato blog#:#blog_comments#:#Commenti -blog#:#blog_confirm_delete_contributors#:#Sei sicuro di voler eliminare i seguenti contribuenti? -blog#:#blog_contribute_other_roles#:#The following roles give an active "contribute" permission: %s. -blog#:#blog_contributors#:#Contributors +blog#:#blog_confirm_delete_contributors#:#Sei sicuro di voler eliminare i seguenti contributori? +blog#:#blog_contribute_other_roles#:#I seguenti ruoli concedono un'autorizzazione "contributiva" attiva: %s. +blog#:#blog_contributors#:#Contributori blog#:#blog_copy#:#Copia blog -blog#:#blog_download_submission#:#Download Submission###07 02 2020 new variable +blog#:#blog_download_submission#:#Scarica l'invio blog#:#blog_draft#:#Bozza -blog#:#blog_draft_info#:#This posting draft is only visible for the author. +blog#:#blog_draft_info#:#Questa bozza di pubblicazione è visibile solo per l'autore. blog#:#blog_draft_info_contributors#:#Questa bozza di registrazione è visibile solo per i contributori. blog#:#blog_draft_text#:#Messaggio non pubblicato blog#:#blog_edit#:#Modifica blog @@ -2469,8 +2455,8 @@ blog#:#blog_edit_date#:#Modifica data blog#:#blog_edit_date_info#:#Lo stato della pubblicazione non dipende da questa data. blog#:#blog_edit_keywords#:#Modifica parole chiave blog#:#blog_edit_posting#:#Modifica messaggio -blog#:#blog_enable_approval#:#Approval -blog#:#blog_enable_approval_info#:#All postings need to be approved by an administrator before being published. +blog#:#blog_enable_approval#:#Approvazione +blog#:#blog_enable_approval_info#:#Tutte le pubblicazioni devono essere approvate da un amministratore prima di essere pubblicate. blog#:#blog_enable_keywords#:#Parole chiave blog#:#blog_enable_keywords_info#:#Le parole chiave possono essere impostate per le pubblicazioni. Cliccando su una parola chiave vengono mostrate tutte le pubblicazioni contrassegnate con questa parola chiave. blog#:#blog_enable_nav_authors#:#Autori @@ -2478,36 +2464,36 @@ blog#:#blog_enable_nav_authors_info#:#Viene visualizzato l’elenco degli autori blog#:#blog_enable_notes#:#Commenti pubblici blog#:#blog_enable_rss#:#Attiva RSS blog#:#blog_enable_rss_info#:#Il feed RSS è pubblico e indipendente dalla condivisione del blog o dalle autorizzazioni utente. -blog#:#blog_est_reading_time#:#Estimated Reading Time###29 07 2022 new variable -blog#:#blog_est_reading_time_info#:#For Blogs in the repository reading time can be determined and displayed.###29 07 2022 new variable -blog#:#blog_exercise_info#:#This blog is part of the assignment "%s" of the exercise "%s". -blog#:#blog_exercise_submitted_info#:#Your last submission was on %s, please check the export file: %s. +blog#:#blog_est_reading_time#:#Estimated Reading Time###31 03 2023 new variable +blog#:#blog_est_reading_time_info#:#For Blogs in the repository reading time can be determined and displayed.###31 03 2023 new variable +blog#:#blog_exercise_info#:#Questo blog fa parte del compito "%s" dell'esercizio "%s". +blog#:#blog_exercise_submitted_info#:#Il tuo ultimo invio è stato su %s, controlla il file di esportazione: %s. blog#:#blog_finalize_blog#:#Finalizza e invia blog blog#:#blog_finalized#:#Il blog è stato inviato. blog#:#blog_import#:#Importa blog -blog#:#blog_incl_comments#:#including comments###29 07 2022 new variable +blog#:#blog_incl_comments#:#inclusi i commenti blog#:#blog_keyword#:#Parola chiave -blog#:#blog_keyword_enter#:#Write a keyword and press Enter. +blog#:#blog_keyword_enter#:#Scrivi una parola chiave e premi Invio. blog#:#blog_keywords#:#Parole chiave blog#:#blog_latest_posting#:#Ultimi messaggi -blog#:#blog_link#:#Link###29 07 2022 new variable +blog#:#blog_link#:#Link###31 03 2023 new variable blog#:#blog_list_more#:#altro blog#:#blog_list_num_postings#:#Numero delle pubblicazioni blog#:#blog_list_num_postings_info#:#Queste impostazioni sono utilizzate se non viene selezionato un mese specifico. blog#:#blog_nav_mode#:#Messaggi blog#:#blog_nav_mode_month_list#:#Mostra lista mesi -blog#:#blog_nav_mode_month_list_info#:#All months with postings are listed in the 'Postings' block. -blog#:#blog_nav_mode_month_list_num_month#:#Number of listed months -blog#:#blog_nav_mode_month_list_num_month_info#:#Months above the limit will not be listed and related postings are not accessible. +blog#:#blog_nav_mode_month_list_info#:#Tutti i mesi con le pubblicazioni sono elencati nel blocco "Pubblicazioni". +blog#:#blog_nav_mode_month_list_num_month#:#Numero di mesi elencati +blog#:#blog_nav_mode_month_list_num_month_info#:#I mesi superiori al limite non verranno elencati e le pubblicazioni correlate non sono accessibili. blog#:#blog_nav_mode_month_list_num_month_with_post#:#Numero dei mesi con registrazioni elencate blog#:#blog_nav_mode_month_list_num_month_with_post_info#:#Questi mesi verranno mostrati con tutte le registrazione nel blocco di navigazione. blog#:#blog_nav_mode_month_single#:#Mostra mese selezionato -blog#:#blog_nav_mode_month_single_info#:#Only postings of the selected month are listed in the 'Postings' block. Month can be changed by dropdown. +blog#:#blog_nav_mode_month_single_info#:#Solo i post del mese selezionato sono elencati nel blocco "Postings". Il mese può essere modificato dal menu a discesa. blog#:#blog_nav_sortorder#:#Ordine dei blocchi blog#:#blog_navigation#:#Messaggi -blog#:#blog_needs_approval#:#Needs Approval +blog#:#blog_needs_approval#:#Necessità di Approvazione blog#:#blog_new#:#Crea nuovo blog -blog#:#blog_new_posting_info#:#The first text block is used as abstract in the posting list. +blog#:#blog_new_posting_info#:#Il primo blocco di testo viene utilizzato come astratto nell'elenco dei post. blog#:#blog_news_posting_authors#:#Autori contributori: %s blog#:#blog_news_posting_published#:#Un messaggio di blog è stato pubblicato da %s. blog#:#blog_news_posting_updated#:#Un messaggio di blog è stato aggiornato da %s. @@ -2516,13 +2502,13 @@ blog#:#blog_notification_activated#:#Notifica attivata blog#:#blog_notification_deactivated#:#Notifica disattivata blog#:#blog_notification_toggle_off#:#Disattiva notifica blog#:#blog_notification_toggle_on#:#Attiva notifica -blog#:#blog_number_users_notes_or_comments#:#Number of users that attached notes or comments to this entry +blog#:#blog_number_users_notes_or_comments#:#Numero di utenti che hanno allegato note o commenti a questa voce blog#:#blog_posting#:#Messaggi blog -blog#:#blog_posting_deleted#:#The entry has been deleted. -blog#:#blog_posting_deletion_confirmation#:#Are you sure you want to delete the following entry? +blog#:#blog_posting_deleted#:#La voce è stata cancellata +blog#:#blog_posting_deletion_confirmation#:#Sei sicuro di voler eliminare la seguente voce? blog#:#blog_posting_edit_approval_info#:#La pubblicazione resta da approvare da un tutor prima di essere pubblicata. blog#:#blog_posting_not_found#:#Questo messaggio del blog non è disponibile. -blog#:#blog_postings#:#Postings###29 07 2022 new variable +blog#:#blog_postings#:#Postings###31 03 2023 new variable blog#:#blog_presentation_frame#:#Presentazione blog blog#:#blog_presentation_overview#:#Panoramica iniziale blog#:#blog_preview#:#Anteprima @@ -2530,61 +2516,60 @@ blog#:#blog_profile_picture#:#Visualizza immagine del profilo blog#:#blog_profile_picture_repository_info#:#Le immagini del profilo degli autori vengono mostrate solo nelle pagine di pubblicazione, non nelle pagine di sommario. blog#:#blog_properties#:#Proprietà blog blog#:#blog_rename_posting#:#Rinomina post -blog#:#blog_selected_pages#:#Selected Postings###29 07 2022 new variable +blog#:#blog_selected_pages#:#Selected Postings###31 03 2023 new variable blog#:#blog_settings#:#Amministrazione blog blog#:#blog_settings_navigation#:#Colonna di navigazione blog#:#blog_show_latest#:#Mostra ultimi messaggi/bozze -blog#:#blog_show_print_view#:#Show Print View###29 07 2022 new variable -blog#:#blog_side_blocks#:#Side Blocks###28 10 2024 new variable -blog#:#blog_starting_page#:#Starting Page###26 08 2024 new variable -blog#:#blog_task_publishing_draft_title#:#Publishing of Draft "%s"###07 02 2020 new variable -blog#:#blog_toggle_draft#:#Save As Draft +blog#:#blog_show_print_view#:#Show Print View###31 03 2023 new variable +blog#:#blog_side_blocks#:#Side Blocks###28 11 2025 new variable +blog#:#blog_starting_page#:#Starting Page###28 11 2023 new variable +blog#:#blog_task_publishing_draft_title#:#Pubblicazione della Bozza "%s" +blog#:#blog_toggle_draft#:#Salva come bozza blog#:#blog_toggle_draft_admin#:#Disattiva messaggi blog blog#:#blog_toggle_final#:#Pubblica post -blog#:#blog_whole_blog#:#Whole Blog###29 07 2022 new variable -book#:#X_reservations_of#:#%s reservations of###29 07 2022 new variable +blog#:#blog_whole_blog#:#Whole Blog###31 03 2023 new variable +book#:#X_reservations_of#:#%s prenotazioni di book#:#book_add#:#Aggiungi da gruppo di prenotazione book#:#book_add_object#:#Aggiungi oggetto book#:#book_add_schedule#:#Aggiungi programma book#:#book_additional_info_file#:#Descrizione aggiuntiva book#:#book_all#:#Mostra tutto -book#:#book_all_pools_need_schedules#:#Settings not saved. All assigned pools need to have at least one schedule.###07 02 2020 new variable -book#:#book_all_users#:#All Participants###07 02 2020 new variable -book#:#book_assign#:#Assign -book#:#book_assign_object#:#Assign Booking Object -book#:#book_assign_participant#:#Assign to Participant +book#:#book_all_pools_need_schedules#:#Le modifiche non sono state salvate. Tutti i gruppi di prenotazione assegnati necessitano di un orario. +book#:#book_all_users#:#Tutti i partecipanti +book#:#book_assign#:#Assegnare +book#:#book_assign_object#:#Assegna oggetto prenotazione +book#:#book_assign_participant#:#Assegna al Partecipante book#:#book_back_to_list#:#Torna all’elenco book#:#book_bobj#:#Prenota oggetto book#:#book_book#:#Prenota -book#:#book_book_available#:#Book Available Dates###26 08 2024 new variable -book#:#book_book_recurrence#:#Book multiple dates###26 08 2024 new variable -book#:#book_booked_in#:#Booked in###07 02 2020 new variable -book#:#book_booking#:#Booking###26 08 2024 new variable +book#:#book_book_available#:#Book Available Dates###30 04 2024 new variable +book#:#book_book_recurrence#:#Book multiple dates###30 04 2024 new variable +book#:#book_booked_in#:#Prenotato in +book#:#book_booking#:#Booking###30 04 2024 new variable book#:#book_booking_information#:#Informazione -book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable -book#:#book_booking_reminders#:#Upcoming reservations -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable -book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable -book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable -book#:#book_bulk_data#:#Item Data###26 08 2024 new variable +book#:#book_booking_objects#:#Booking Objects###31 03 2023 new variable +book#:#book_booking_reminders#:#Prossime prenotazioni +book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###30 04 2024 new variable +book#:#book_bulk_creation#:#Bulk Creation###30 04 2024 new variable +book#:#book_bulk_data#:#Item Data###30 04 2024 new variable book#:#book_cal_entry#:#Prenotazione di: book#:#book_confirm_booking#:#Conferma prenotazione -book#:#book_confirm_booking_for_users#:#Are you sure you want to book this item for the following user(s)?###29 10 2025 new variable +book#:#book_confirm_booking_for_users#:#Are you sure you want to book this item for the following user(s)?###28 11 2025 new variable book#:#book_confirm_booking_no_schedule#:#Sei sicuro di voler prenotare il seguente oggetto? book#:#book_confirm_booking_schedule_number_of_objects#:#Conferma prenotazione book#:#book_confirm_booking_schedule_number_of_objects_info#:#Si prega di indicare il numero di oggetti da prenotare. -book#:#book_confirm_cancel#:#Are you sure you want to cancel the following reservation? +book#:#book_confirm_cancel#:#Sei sicuro di voler cancellare la seguente prenotazione? book#:#book_confirm_cancel_aggregation#:#Numero di cancellazioni book#:#book_confirm_delete#:#Vuoi davvero eliminare i seguenti articoli? book#:#book_copy#:#Copia gruppo di prenotazione -book#:#book_create_objects#:#Create Items###26 08 2024 new variable +book#:#book_create_objects#:#Create Items###30 04 2024 new variable book#:#book_deadline#:#Scadenza book#:#book_deadline_hours#:#X ore prima del periodo di prenotazione book#:#book_deadline_info#:#Tempo minimo tra prenotazione e periodo prenotato book#:#book_deadline_options#:#Scadenza di prenotazione book#:#book_deadline_slot_end#:#Fino alla fine per periodo di prenotazione book#:#book_deadline_slot_start#:#Fino all’inizio del periodo di prenotazione -book#:#book_deassign#:#Deassign +book#:#book_deassign#:#Togli assegnazione book#:#book_download_info#:#Scarica descrizione aggiuntiva book#:#book_edit#:#Modifica gruppo di prenotazione book#:#book_edit_object#:#Modifica oggetto @@ -2593,70 +2578,70 @@ book#:#book_filter_past_reservations#:#Mostra prenotazioni passate book#:#book_fromto#:#Intervallo di tempo book#:#book_hours#:#Ore book#:#book_is_used#:#Usate -book#:#book_limit_objects_available#:#You can not assign %s participants to "%s" because it has only %s items available. -book#:#book_list#:#List###26 08 2024 new variable -book#:#book_log#:#Log -book#:#book_mail_permanent_link#:#Link to Booking Pool###26 08 2024 new variable -book#:#book_mail_to_booker#:#Mail to User###26 08 2024 new variable -book#:#book_message#:#Message###26 08 2024 new variable -book#:#book_message_info#:#You may enter a message for the booking organiser here.###26 08 2024 new variable -book#:#book_messages#:#Messages###26 08 2024 new variable -book#:#book_messages_info#:#Allow users to add a message when booking an item.###26 08 2024 new variable -book#:#book_missing_availability#:#It was not possible to book all items on all dates.###26 08 2024 new variable -book#:#book_missing_items#:#$1 missing item(s).###26 08 2024 new variable -book#:#book_new#:#Nuovo gruppo di prenotazione -book#:#book_no_bookings_for_you#:#No reservations have been performed for you.###07 02 2020 new variable -book#:#book_no_objects#:#No Assignment###07 02 2020 new variable +book#:#book_limit_objects_available#:#Non puoi assegnare %s partecipanti a "%s" perche' ha solo %s oggetti disponibili. +book#:#book_list#:#List###30 04 2024 new variable +book#:#book_log#:#Prenotazioni +book#:#book_mail_permanent_link#:#Link to Booking Pool###30 04 2024 new variable +book#:#book_mail_to_booker#:#Mail to User###30 04 2024 new variable +book#:#book_message#:#Message###30 04 2024 new variable +book#:#book_message_info#:#You may enter a message for the booking organiser here.###30 04 2024 new variable +book#:#book_messages#:#Messages###30 04 2024 new variable +book#:#book_messages_info#:#Allow users to add a message when booking an item.###30 04 2024 new variable +book#:#book_missing_availability#:#It was not possible to book all items on all dates.###30 04 2024 new variable +book#:#book_missing_items#:#$1 missing item(s).###30 04 2024 new variable +book#:#book_new#:#Crea nuovo gruppo di prenotazione +book#:#book_no_bookings_for_you#:#Non sono state finora effettuate prenotazioni per Lei. +book#:#book_no_objects#:#Nessuna assegnazione book#:#book_no_of_objects#:#Numero di oggetti -book#:#book_no_pools_selected#:#No booking pools have been assigned to this course. Booking pools can be assigned via the course's 'Resources' tab.###29 10 2025 new variable -book#:#book_no_preferences_for_you#:#No preferences have been stored for you.###07 02 2020 new variable -book#:#book_no_recurrence#:#Book only this date###26 08 2024 new variable +book#:#book_no_pools_selected#:#No booking pools have been assigned to this course. Booking pools can be assigned via the course's 'Resources' tab.###23 09 2025 new variable +book#:#book_no_preferences_for_you#:#Non ha salvato alcuna preferenza. +book#:#book_no_recurrence#:#Book only this date###30 04 2024 new variable book#:#book_not#:#No -book#:#book_not_enough_preferences#:#You selected not enough preferences. The preferences have not been saved.###07 02 2020 new variable -book#:#book_notification#:#Send Reservation Notifications -book#:#book_notification_cron_not_active#:#Note: The necessary cron job, 'Send Reservation Notifications', is currently not active.###26 08 2024 new variable -book#:#book_notification_info#:#Send a list of reservations of the next day to users (own reservations) and admins (if activated). -book#:#book_nr_of_preferences#:#Number of Preferences###07 02 2020 new variable -book#:#book_nr_of_preferences_info#:#Number of preferences each participant can indicate.###07 02 2020 new variable -book#:#book_nr_preferences#:#Prefences###29 07 2022 new variable -book#:#book_obj_select#:#Select###26 08 2024 new variable +book#:#book_not_enough_preferences#:#Non è stato selezionato un numero sufficiente di preferenze. Le preferenze non sono state salvate. +book#:#book_notification#:#Invia notifiche di prenotazione +book#:#book_notification_cron_not_active#:#Note: The corresponding cron job "Send Reservation Notifications" is currently not activated.###16 03 2023 new variable +book#:#book_notification_info#:#Invia un elenco di prenotazioni del giorno successivo agli utenti (proprie prenotazioni) e agli amministratori (se attivato). +book#:#book_nr_of_preferences#:#Numero preferenze +book#:#book_nr_of_preferences_info#:#Numero preferenze, che ogni partecipante può esprimere. +book#:#book_nr_preferences#:#Prefences###31 03 2023 new variable +book#:#book_obj_select#:#Select###30 04 2024 new variable book#:#book_object_added#:#È stato aggiunto un oggetto di prenotazione. book#:#book_object_deleted#:#L’oggetto di prenotazione è stato eliminato. -book#:#book_object_selection#:#Item Selection###26 08 2024 new variable +book#:#book_object_selection#:#Item Selection###30 04 2024 new variable book#:#book_object_updated#:#L’oggetto di prenotazione è stato aggiornato. -book#:#book_objects_available#:#Objects available %s +book#:#book_objects_available#:#Oggetti disponibili %s book#:#book_open#:#Apri gruppo di prenotazione book#:#book_overall_limit#:#Limita numero di prenotazioni book#:#book_overall_limit_warning#:#Hai raggiunto il numero massimo di prenotazioni. -book#:#book_participant_already_assigned#:#Participant(s) already assigned. -book#:#book_participant_assigned#:#Participant(s) assigned +book#:#book_participant_already_assigned#:#Partecipante/i già assegnato/i. +book#:#book_participant_assigned#:#Partecipante/i assegnato/i book#:#book_period#:#Periodo book#:#book_pool_added#:#È stato aggiunto un gruppo di prenotazione. -book#:#book_pool_selection#:#Booking Pool Selection###07 02 2020 new variable +book#:#book_pool_selection#:#Scelta del pool di prenotazione book#:#book_post_booking_file#:#File book#:#book_post_booking_information#:#Informazioni messaggio di prenotazione book#:#book_post_booking_text#:#Testo -book#:#book_post_booking_text_info#:#Use [PERIOD] and [OBJECT] to add booking details to the text. -book#:#book_pref_book_cron#:#Booking with Preferences###07 02 2020 new variable -book#:#book_pref_book_cron_info#:#Automatically book pools using preferences after the deadline###07 02 2020 new variable -book#:#book_pref_deadline#:#Deadline###07 02 2020 new variable -book#:#book_pref_deadline_info#:#Preferences can be given up to this point.###29 07 2022 new variable -book#:#book_pref_overview#:#Overview###07 02 2020 new variable -book#:#book_preference_info#:#Please select %1 preference(s) until %2. After the deadline bookings will be done automatically based on the preferences of all users.###07 02 2020 new variable -book#:#book_preferences#:#Preferences###07 02 2020 new variable -book#:#book_preferences_saved#:#The preferences have been saved.###07 02 2020 new variable +book#:#book_post_booking_text_info#:#Utilizzare [PERIODO] e [OGGETTO] per aggiungere i dettagli della prenotazione al testo. +book#:#book_pref_book_cron#:#Prenotazione con preferenze +book#:#book_pref_book_cron_info#:#Prenotazione automatica delle prenotazioni con preferenze oltre la scadenza. +book#:#book_pref_deadline#:#Scadenza +book#:#book_pref_deadline_info#:#Preferences can be given up to this point.###31 03 2023 new variable +book#:#book_pref_overview#:#Panoramica +book#:#book_preference_info#:#Si prega di selezionare %1 preferenza/e fino a %2. Dopo la scadenza, le assegnazioni vengono effettuate automaticamente in base alle preferenze di tutti i partecipanti. +book#:#book_preferences#:#Preferenze +book#:#book_preferences_saved#:#Le preferenze sono state salvate book#:#book_public_log#:#Prenotazioni pubbliche -book#:#book_public_log_info#:#The list of reservations can be viewed by all users. -book#:#book_recurrence#:#Recurrence###26 08 2024 new variable -book#:#book_refresh#:#Refresh###26 08 2024 new variable -book#:#book_rem_intro#:#This is an overview of upcoming reservations: -book#:#book_rem_reason#:#You are reciving these mails, because you are subscribed to notifications of the corresponding booking pools. -book#:#book_reminder_day#:#Before Reservation -book#:#book_reminder_day_info#:#Send list of own reservations to users and full list of reservations to admins. -book#:#book_reminder_days#:#Day(s) -book#:#book_reminder_setting#:#Reminder -book#:#book_rerun_assignments#:#Run Allocation Process###26 08 2024 new variable -book#:#book_rerun_confirmation#:#Attention. The process of allocating bookings according to preferences has already taken place. You may restart the process if any errors have occurred, e.g. no bookings have been saved. To prevent multiple allocations, please delete all existing bookings before restarting the process.###26 08 2024 new variable +book#:#book_public_log_info#:#L'elenco delle prenotazioni può essere visualizzato da tutti gli utenti. +book#:#book_recurrence#:#Recurrence###30 04 2024 new variable +book#:#book_refresh#:#Refresh###30 04 2024 new variable +book#:#book_rem_intro#:#Questa è una panoramica delle prossime prenotazioni: +book#:#book_rem_reason#:#Ricevi queste e-mail perché sei iscritto alle notifiche dei pool di prenotazione corrispondenti. +book#:#book_reminder_day#:#Prima della prenotazione +book#:#book_reminder_day_info#:#Invia l'elenco delle proprie prenotazioni agli utenti e l'elenco completo delle prenotazioni agli amministratori. +book#:#book_reminder_days#:#Giorno(i) +book#:#book_reminder_setting#:#Promemoria +book#:#book_rerun_assignments#:#Run Assignment Process###26 04 2023 new variable +book#:#book_rerun_confirmation#:#Attention. The assignments via preference process has already run. You may restart the process, if any errors have occured, e.g. no assignments have been saved. To prevent multiple assignments delete all reservations before restarting the process.###26 04 2023 new variable book#:#book_reservation_available#:#%s disponibile book#:#book_reservation_confirmed#:#La tua prenotazione è stata confermata. book#:#book_reservation_failed#:#La tua prenotazione è fallita. @@ -2664,7 +2649,7 @@ book#:#book_reservation_failed_overbooked#:#La prenotazione è fallita perché l book#:#book_reservation_filter_period#:#Periodo di tempo per la lista di prenotazione book#:#book_reservation_filter_period_info#:#Il valore predefinito per il filtro del periodo in giorni dalla data attuale. book#:#book_reservation_fix_info#:#La prenotazione più essere effettuata solo nelle ore stabilite. -book#:#book_reservation_overview#:#Reservation Overviews +book#:#book_reservation_overview#:#Panoramica delle prenotazioni book#:#book_reservation_status_5#:#Eliminata book#:#book_reservation_title#:#Prenota prenotazione per book#:#book_reservations_list#:#Prenotazioni @@ -2676,46 +2661,46 @@ book#:#book_schedule_deleted#:#Il programma di prenotazione è stato eliminato. book#:#book_schedule_slot#:#Fascia oraria book#:#book_schedule_type#:#Tipo book#:#book_schedule_type_fixed#:#Programma fisso -book#:#book_schedule_type_fixed_info#:#This type can be used for rooms, beamers and such +book#:#book_schedule_type_fixed_info#:#Questo tipo può essere usato per stanze, proiettori e simili book#:#book_schedule_type_none#:#Nessun programma -book#:#book_schedule_type_none_direct#:#No Schedule, Direct Booking###07 02 2020 new variable -book#:#book_schedule_type_none_direct_info#:#This type can be used for seminar papers, seminar places and such. Participants can book items directly.###07 02 2020 new variable -book#:#book_schedule_type_none_info#:#This type can be used for seminar papers, seminar places and such -book#:#book_schedule_type_none_preference#:#No Schedule, Using Preferences###07 02 2020 new variable -book#:#book_schedule_type_none_preference_info#:#This type can be used for seminar papers, seminar places and such. Participants will indicate their preferences. Items will be assigned automatically after the preferences deadline.###07 02 2020 new variable +book#:#book_schedule_type_none_direct#:#Prenotazione diretta, senza programma +book#:#book_schedule_type_none_direct_info#:#Questo tipo di prenotazione è adatto per gli argomenti delle relazioni, i posti dei seminari ecc. I partecipanti possono effettuare direttamente le prenotazioni. +book#:#book_schedule_type_none_info#:#Questo tipo può essere utilizzato per articoli per seminari, luoghi per seminari e simili +book#:#book_schedule_type_none_preference#:#Senza programma, con preference +book#:#book_schedule_type_none_preference_info#:#Questo tipo di prenotazione è adatto per gli argomenti delle relazioni, i posti dei seminari ecc.. I partecipanti possono esprimere le proprie preferenze. Al termine della scadenza le prenotazioni verranno eseguite automaticamente. book#:#book_schedule_updated#:#Il programma di prenotazione è stato aggiornato. -book#:#book_schedule_warning_edit#:#Currently, there is no schedule available. To use the booking pool you need to create a schedule for booking. +book#:#book_schedule_warning_edit#:#Attualmente non è disponibile alcun programma. Per utilizzare il pool di prenotazioni è necessario creare un programma per la prenotazione. book#:#book_schedules#:#Programmi -book#:#book_select_pool#:#Select Pool###07 02 2020 new variable +book#:#book_select_pool#:#Seleziona gruppo book#:#book_set_cancel#:#Cancella prenotazione -book#:#book_set_delete#:#Delete###29 07 2022 new variable -book#:#book_show_message#:#Show Message###26 08 2024 new variable -book#:#book_title_description_nr#:#Title; Description; Number of Units###26 08 2024 new variable -book#:#book_title_description_nr_info#:#Enter title, description and number of units separated by semicolon or TAB character (if importing from spreadsheet software). Use one line per item.###26 08 2024 new variable -book#:#book_too_many_preferences#:#You selected too many preferences. The preferences have not been saved.###07 02 2020 new variable +book#:#book_set_delete#:#Cancella +book#:#book_show_message#:#Show Message###30 04 2024 new variable +book#:#book_title_description_nr#:#Title; Description; Number of Units###30 04 2024 new variable +book#:#book_title_description_nr_info#:#Enter title, description and number of units separated by semicolon or TAB character (if importing from spreadsheet software). Use one line per item.###30 04 2024 new variable +book#:#book_too_many_preferences#:#Sono state selezionate troppe preferenze. Le preferenze non sono state salvate. book#:#book_type_warning#:#Attualmente non ci sono oggetti di prenotazione disponibili. Per utilizzare il gruppo di prenotazione è necessario creare oggetti di prenotazione. -book#:#book_week#:#Week###26 08 2024 new variable -book#:#book_your_bookings#:#Your Reservations###07 02 2020 new variable -book#:#book_your_preferences#:#Your Preferences###07 02 2020 new variable -book#:#book_your_reservations#:#Your Reservations -book#:#booking_multiple_succesfully#:#Bookings created successfully. +book#:#book_week#:#Week###30 04 2024 new variable +book#:#book_your_bookings#:#Le Sue prenotazioni +book#:#book_your_preferences#:#Le Sue preferenze +book#:#book_your_reservations#:#Le Sue prenotazioni +book#:#booking_multiple_succesfully#:#Prenotazioni create correttamente. book#:#booking_nr_of_items#:#Numero di elementi book#:#obj_book_duplicate#:#Copia gruppo di prenotazione -book#:#participants#:#Participants -book#:#reservation_deleted#:#Reservation deleted###29 07 2022 new variable +book#:#participants#:#Partecipanti +book#:#reservation_deleted#:#Prenotazione cancellata buddysystem#:#buddy_allow_to_contact_me#:#Consenti di contattarmi -buddysystem#:#buddy_allow_to_contact_me_default_info#:#Defines if users can send each other requests for getting into contact by default.###29 10 2025 new variable +buddysystem#:#buddy_allow_to_contact_me_default_info#:#Defines if users can send each other requests for getting into contact by default.###28 11 2025 new variable buddysystem#:#buddy_allow_to_contact_me_info#:#Se consentito, altri utenti possono inviare delle richieste per contattarmi. buddysystem#:#buddy_bs_act_btn_txt_ignored_request_to_linked#:#Conferma richiesta buddysystem#:#buddy_bs_act_btn_txt_ignored_request_to_unlinked#:#Elimina richiesta buddysystem#:#buddy_bs_act_btn_txt_linked_to_unlinked#:#Scollega -buddysystem#:#buddy_bs_act_btn_txt_requested_to_ignored_request#:#Ignore -buddysystem#:#buddy_bs_act_btn_txt_requested_to_linked#:#Confirm +buddysystem#:#buddy_bs_act_btn_txt_requested_to_ignored_request#:#Ignora +buddysystem#:#buddy_bs_act_btn_txt_requested_to_linked#:#Confermare buddysystem#:#buddy_bs_act_btn_txt_requested_to_unlinked#:#Elimina richiesta -buddysystem#:#buddy_bs_action_already_ignored#:#Already ignored user '%s'. -buddysystem#:#buddy_bs_action_already_linked#:#Already accepted the contact request from user '%s'. -buddysystem#:#buddy_bs_action_already_requested#:#Already requested user '%s'. -buddysystem#:#buddy_bs_action_already_unlinked#:#The contact state for user '%s' is already unlinked. +buddysystem#:#buddy_bs_action_already_ignored#:#Utente '%s' già ignorato. +buddysystem#:#buddy_bs_action_already_linked#:#Ho già accettato la richiesta di contatto dall'utente '%s'. +buddysystem#:#buddy_bs_action_already_requested#:#Utente già richiesto '%s'. +buddysystem#:#buddy_bs_action_already_unlinked#:#Lo stato del contatto per l'utente '%s' è già scollegato. buddysystem#:#buddy_bs_action_not_possible#:#Azione non possibile buddysystem#:#buddy_bs_btn_txt_ignored_request_a#:#Contatto richiesto buddysystem#:#buddy_bs_btn_txt_ignored_request_p#:#Richiesta ignorata @@ -2729,23 +2714,23 @@ buddysystem#:#buddy_bs_state_ignored_request_p#:#Ignorato buddysystem#:#buddy_bs_state_ignoredrequest#:#Ignorato buddysystem#:#buddy_bs_state_linked#:#Collegato buddysystem#:#buddy_bs_state_linked_a#:#Collegato -buddysystem#:#buddy_bs_state_linked_p#:#Linked###29 07 2022 new variable +buddysystem#:#buddy_bs_state_linked_p#:#Linked###27 04 2022 new variable buddysystem#:#buddy_bs_state_requested#:#Richiesti buddysystem#:#buddy_bs_state_requested_a#:#Richiesti -buddysystem#:#buddy_bs_state_requested_filter_a#:#Waiting for Reaction###29 07 2022 new variable -buddysystem#:#buddy_bs_state_requested_filter_p#:#Action Required###29 07 2022 new variable +buddysystem#:#buddy_bs_state_requested_filter_a#:#Waiting for Reaction###27 04 2022 new variable +buddysystem#:#buddy_bs_state_requested_filter_p#:#Action Required###27 04 2022 new variable buddysystem#:#buddy_bs_state_requested_p#:#Richiesti -buddysystem#:#buddy_bs_state_unlinked#:#Unlinked###29 07 2022 new variable +buddysystem#:#buddy_bs_state_unlinked#:#Unlinked###27 04 2022 new variable buddysystem#:#buddy_bs_state_unlinked_a#:#Scollegato -buddysystem#:#buddy_bs_state_unlinked_p#:#Unlinked###29 07 2022 new variable +buddysystem#:#buddy_bs_state_unlinked_p#:#Unlinked###27 04 2022 new variable buddysystem#:#buddy_enable#:#Attiva “Contatti” buddysystem#:#buddy_enable_info#:#Se consentito, gli utenti possono contattarsi a vicenda avviando richieste di contatto. Inoltre, c'è un'impostazione utente personale per consentire o impedire di essere contattato. buddysystem#:#buddy_handle_contact_request#:#Richiesta di contatto -buddysystem#:#buddy_noti_cr_profile_not_published#:#Profile not published###07 02 2020 new variable +buddysystem#:#buddy_noti_cr_profile_not_published#:#Profilo non reso pubblico buddysystem#:#buddy_notification_contact_request#:#Richiesta di contatto -buddysystem#:#buddy_notification_contact_request_ignore#:#Ignore Request###26 08 2024 new variable +buddysystem#:#buddy_notification_contact_request_ignore#:#Ignora richiesta: buddysystem#:#buddy_notification_contact_request_ignore_osd#:#Ignora richiesta -buddysystem#:#buddy_notification_contact_request_link#:#Approve Request###26 08 2024 new variable +buddysystem#:#buddy_notification_contact_request_link#:#Approva richiesta: buddysystem#:#buddy_notification_contact_request_link_osd#:#Approva richiesta buddysystem#:#buddy_notification_contact_request_long#:#[SALUTATION][BR][BR]l’utente "[REQUESTING_USER]" vuole aggiungerti alla sua lista degli amici.[BR][BR][APPROVE_REQUEST_TXT] [APPROVE_REQUEST][BR][IGNORE_REQUEST_TXT] [IGNORE_REQUEST] buddysystem#:#buddy_notification_contact_request_short#:#L’utente "[REQUESTING_USER]" vuole aggiungerti alla sua lista di amici.[BR][BR][APPROVE_REQUEST][BR][IGNORE_REQUEST] @@ -2753,56 +2738,56 @@ buddysystem#:#buddy_relation_requested#:#Una richiesta è stata inviata all’ut buddysystem#:#buddy_request_approved#:#Hai accetta il contatto con successo. buddysystem#:#buddy_request_ignored#:#Hai ignorato l’utente. buddysystem#:#buddy_tbl_filter_state#:#Stato -buddysystem#:#buddy_tbl_state_actions_col_label#:#State / Action###26 08 2024 new variable +buddysystem#:#buddy_tbl_state_actions_col_label#:#State / Action###31 03 2023 new variable buddysystem#:#buddy_tbl_title_relations#:#Relazioni con altri utenti buddysystem#:#buddy_use_osd#:#Richieste di contatto popup buddysystem#:#buddy_use_osd_info#:#Visualizza un popup per indicare che un utente vuole aggiungerti alle sue listi di amici. buddysystem#:#buddy_view_gallery#:#Galleria buddysystem#:#buddy_view_table#:#Lista cat#:#cat_copy#:#Copia categoria -cat#:#cat_hide_tax_in_side_block#:#Don't Present in Side Panel###26 08 2024 new variable +cat#:#cat_hide_tax_in_side_block#:#Don't Present in Side Panel###30 04 2024 new variable cat#:#cat_import#:#Importa categoria cat#:#cat_more_translations#:#Ulteriori traduzioni -cat#:#cat_show_tax_in_side_block#:#Present in Side Panel###26 08 2024 new variable -cert#:#cert_currently_no_certs#:#Currently you did not achieve any certificate, yet. -cert#:#cert_description_label#:#Description -cert#:#cert_download_label#:#Download -cert#:#cert_error_no_access#:#You have no access to this certificate. -cert#:#cert_issued_on_label#:#Issued On -cert#:#cert_object_label#:#Object -cert#:#cert_sortable_by_issue_date_asc#:#Nach Ausstellungsdatum aufsteigend -cert#:#cert_sortable_by_issue_date_desc#:#Nach Ausstellungsdatum absteigend -cert#:#cert_sortable_by_title_asc#:#Nach Titel aufsteigend -cert#:#cert_sortable_by_title_desc#:#Nach Titel absteigend -cert#:#certificate_achievement#:#%1$s achieved. -cert#:#certificate_achievement_sub_obj#:#Certificate for %1$s -cert#:#certificate_no_object_title#:#No object title available -cert#:#certificate_same_not_saved#:#No new version of certificate template was saved, because the values didn't change. -cert#:#error_creating_certificate_pdf#:#The certificate could not be created. Please contact the administrator to check the certificate server. -cert#:#user_certificates#:#Certificates -certificate#:#cert_cron_task_desc#:#This job's responsibility is the creation of persisting certificate data based on learning achievements of users. -certificate#:#cert_cron_task_title#:#Certificates -certificate#:#cert_form_sec_add_features#:#Additional Features -certificate#:#cert_form_sec_availability#:#Availability -certificate#:#cert_form_sec_layout#:#Layout and Text +cat#:#cat_show_tax_in_side_block#:#Present in Side Panel###30 04 2024 new variable +cert#:#cert_currently_no_certs#:#Al momento non hai ancora ottenuto alcun certificato. +cert#:#cert_description_label#:#Descrizione +cert#:#cert_download_label#:#Scarica +cert#:#cert_error_no_access#:#Non hai accesso a questo certificato. +cert#:#cert_issued_on_label#:#Rilasciato il +cert#:#cert_object_label#:#Oggetto +cert#:#cert_sortable_by_issue_date_asc#:#Crescente per data di rilascio +cert#:#cert_sortable_by_issue_date_desc#:#Discendente in base alla data di rilascio +cert#:#cert_sortable_by_title_asc#:#Crescente per titolo +cert#:#cert_sortable_by_title_desc#:#Decrescente per titolo +cert#:#certificate_achievement#:#%1$s raggiunto. +cert#:#certificate_achievement_sub_obj#:#Certificato per %1$s +cert#:#certificate_no_object_title#:#Nessun titolo di oggetto disponibile +cert#:#certificate_same_not_saved#:#Nessuna nuova versione del modello di certificato è stata salvata perché i valori non sono cambiati. +cert#:#error_creating_certificate_pdf#:#Non è stato possibile creare il certificato. Si prega di contattare l'amministratore per verificare il server dei certificati. +cert#:#user_certificates#:#Certificazioni +certificate#:#cert_cron_task_desc#:#La responsabilità di questo lavoro è la creazione di dati certificati permanenti basati sui risultati di apprendimento degli utenti. +certificate#:#cert_cron_task_title#:#Certificati +certificate#:#cert_form_sec_add_features#:#Caratteristiche aggiuntive +certificate#:#cert_form_sec_availability#:#Disponibilità +certificate#:#cert_form_sec_layout#:#Layout e testo certificate#:#certificate_a4#:#A4 (297 mm x 210 mm) certificate#:#certificate_a4_landscape#:#A4 Orizzontale (210 mm x 297 mm) certificate#:#certificate_a5#:#A5 (210 mm x 148 mm) certificate#:#certificate_a5_landscape#:#A5 Orizzontale (148 mm x 210 mm) certificate#:#certificate_background_image#:#Immagine di Sfondo -certificate#:#certificate_card_thumbnail_image#:#Card Thumbnail -certificate#:#certificate_change_active_status#:#The active state of the certificate has been changed +certificate#:#certificate_card_tile_image#:#Thumbnail Image###28 11 2025 new variable +certificate#:#certificate_change_active_status#:#Lo stato attivo del certificato è stato modificato certificate#:#certificate_confirm_deletion_text#:#Vuoi veramente cancellare il certificato e tutti i dati correlati? certificate#:#certificate_custom#:#Personalizza... certificate#:#certificate_edit#:#Crea/Edita un Template di Certificato -certificate#:#certificate_error_import#:#C'e'stato un errore durante l'importazione di un certificato +certificate#:#certificate_error_import#:#C'è stato un errore durante l'importazione di un certificato certificate#:#certificate_error_upload_bgimage#:#C'e' stato un errore durante il caricamento di un immagine di sfondo! certificate#:#certificate_export#:#Esporta Certificato certificate#:#certificate_failed#:#Fallito certificate#:#certificate_file_basename#:#Certificato -certificate#:#certificate_id#:#Certificate ID###26 08 2024 new variable -certificate#:#certificate_issue_date#:#Issue Date###26 08 2024 new variable -certificate#:#certificate_learning_progress_must_be_active#:#Only objects with an active Learning Progress can be selected. The Learning Progress is deactivated on the following objects: %s###07 02 2020 new variable +certificate#:#certificate_id#:#Certificate ID###28 11 2025 new variable +certificate#:#certificate_issue_date#:#Date of Issue###28 11 2025 new variable +certificate#:#certificate_learning_progress_must_be_active#:#Solo gli oggetti con un progresso di apprendimento attivo possono essere selezionati. Il progresso dell'apprendimento è disattivato sui seguenti oggetti: %s certificate#:#certificate_letter#:#Carta lettera USA (11 x 8,5 pollici) certificate#:#certificate_letter_landscape#:#Carta lettera USA orizzontale (8,5 x 11 pollici) certificate#:#certificate_margin_body#:#Margine Corpo @@ -2813,7 +2798,7 @@ certificate#:#certificate_pageheight#:#Altezza Pagina certificate#:#certificate_pagewidth#:#Larghezza Pagina certificate#:#certificate_passed#:#Riuscito certificate#:#certificate_ph_birthday#:#Giorno di nascita dell’utente -certificate#:#certificate_ph_cert_id#:#Unique Certificate ID###26 08 2024 new variable +certificate#:#certificate_ph_cert_id#:#Unique Certificate ID###28 11 2025 new variable certificate#:#certificate_ph_city#:#Citta' dell'utente certificate#:#certificate_ph_country#:#Nazione dell'Utente certificate#:#certificate_ph_date#:#Data odierna @@ -2854,7 +2839,7 @@ certificate#:#certificate_settings#:#Impostazione Certificato certificate#:#certificate_short_name#:#Titolo breve del file del certificato certificate#:#certificate_short_name_description#:#Si prega di inserire un titolo breve per il nome del certificato. Il titolo breve farà parte del nome del certificato: YYMMDD_[cognome]_[SHORT_TITLE]_certificato.pdf. certificate#:#certificate_text#:#Testo Certificato -certificate#:#certificate_text_info#:#Please enter the certificate text. If the WYSIWYG editor is disabled in the ILIAS administration, you can still use valid XHTML to format the text.###26 08 2024 new variable +certificate#:#certificate_text_info#:#Please enter the certificate text. If the WYSIWYG editor is disabled in the ILIAS administration, you can still use valid XHTML to format the text.###28 07 2023 new variable certificate#:#certificate_unit_description#:#Inserisci le unita' di misura come VALORE[cm|mm|in|pt|pc|px|em], per es. 10mm or 3in certificate#:#certificate_usage#:#Ricordare che l'uso dei certificati e' disponibile solo se il Server Java ILIAS funziona. La configurazione del Server Java e' disponibile solo sulla pagina principale dell'amministrazione di ILIAS nella sezione Webservices. certificate#:#certificate_var_max_points#:#46 @@ -2871,103 +2856,103 @@ certificate#:#certificate_var_user_firstname#:#Mario certificate#:#certificate_var_user_fullname#:#Dr. Mario Rossi certificate#:#certificate_var_user_institution#:#ILIAS Open Source certificate#:#certificate_var_user_lastname#:#Rossi -certificate#:#certificate_var_user_login#:#jdoe +certificate#:#certificate_var_user_login#:#rossi certificate#:#certificate_var_user_matriculation#:#12345 certificate#:#certificate_var_user_salutation#:#Sig.ra certificate#:#certificate_var_user_street#:#Via Garibaldi 100 certificate#:#certificate_var_user_title#:#Dott. certificate#:#certificate_var_user_zipcode#:#100 -certificate#:#cmix_cert_ph_object_description#:#Description###07 02 2020 new variable -certificate#:#cmix_cert_ph_object_title#:#Title of the xAPI/cmi5 Object###07 02 2020 new variable -certificate#:#cmix_cert_ph_reached_score#:#Reached score as percentage###07 02 2020 new variable -certificate#:#default_background_info#:#Questa immagine verra'utilizzata come immagine sfondo di default per tutti i certificati. Se avete bisogno di un altra immagine di sfondo, dovete caricarla nell'editor certificati +certificate#:#cmix_cert_ph_object_description#:#Descrizione +certificate#:#cmix_cert_ph_object_title#:#Titolo dell'oggetto xAPI/cmi5 +certificate#:#cmix_cert_ph_reached_score#:#Punteggio raggiunto in percentuale +certificate#:#default_background_info#:#Questa immagine verrà utilizzata come immagine sfondo di default per tutti i certificati. Se avete bisogno di un altra immagine di sfondo, dovete caricarla nell'editor certificati certificate#:#download_certificate#:#Scarica Certificato -certificate#:#learning_progress_deactivated#:#The Learning Progress for this object is deactivated. To edit the certificate template and achieve user certificates the learning progress for this object must be activated.###07 02 2020 new variable -certificate#:#lti_cert_ph_mastery_score#:#Mastery score as percentage###07 02 2020 new variable -certificate#:#lti_cert_ph_object_description#:#Description###07 02 2020 new variable -certificate#:#lti_cert_ph_object_title#:#Title of the LTI Consumer Object###07 02 2020 new variable -certificate#:#lti_cert_ph_reached_score#:#Reached score as percentage###07 02 2020 new variable -certificate#:#persistent_certificate_mode#:#User Certificate Creation###07 02 2020 new variable -certificate#:#persistent_certificate_mode_cron#:#Cron Job###07 02 2020 new variable -certificate#:#persistent_certificate_mode_cron_info#:#This option is recommended for systems with high user interaction.###07 02 2020 new variable -certificate#:#persistent_certificate_mode_instant#:#Instant###07 02 2020 new variable -certificate#:#persistent_certificate_mode_instant_info#:#This option is recommended for systems with low up to mediocre user interactions. Systems that tend to big loading times during creation for multiple user certificates should switch to the "Cron Job" option.###07 02 2020 new variable +certificate#:#learning_progress_deactivated#:#Il progresso di apprendimento per questo oggetto è disattivato. Per modificare il modello di certificato e ottenere i certificati utente, è necessario attivare l'avanzamento dell'apprendimento per questo oggetto. +certificate#:#lti_cert_ph_mastery_score#:#Punteggio master in percentuale +certificate#:#lti_cert_ph_object_description#:#Descrizione +certificate#:#lti_cert_ph_object_title#:#Titolo del LTI Consumer Object +certificate#:#lti_cert_ph_reached_score#:#Punteggio raggiunto in percentuale +certificate#:#persistent_certificate_mode#:#Creazione del certificato utente +certificate#:#persistent_certificate_mode_cron#:#Cron Job +certificate#:#persistent_certificate_mode_cron_info#:#Questa opzione è consigliata per i sistemi con elevata interazione dell'utente. +certificate#:#persistent_certificate_mode_instant#:#Immediato +certificate#:#persistent_certificate_mode_instant_info#:#Questa opzione è consigliata per i sistemi con interazioni utente da basse a mediocri. I sistemi che tendono a richiedere maggiori prestazioni durante la creazione di più certificati utente dovrebbero passare all'opzione "Cron Job". chatroom#:#allow_anonymous#:#Consenti accesso anonimo -chatroom#:#allow_custom_usernames#:#Allow custom usernames -chatroom#:#anonymous_hint#:#Make sure to set the proper permissions in the "Permissions" tab to allow anonymous user access to this repository item. -chatroom#:#auto_scroll#:#Scorri fino al pulsante -chatroom#:#autogen_usernames#:#Auto generated usernames -chatroom#:#autogen_usernames_info#:#Pattern for auto generated usernames. ' +chatroom#:#allow_custom_usernames#:#Consenti nomi utente personalizzati +chatroom#:#anonymous_hint#:#Assicurarsi di impostare le autorizzazioni appropriate nella scheda "Autorizzazioni" per consentire l'accesso degli utenti anonimi. +chatroom#:#auto_scroll#:#Scorri fino alla fine +chatroom#:#autogen_usernames#:#Nomi utente generati automaticamente +chatroom#:#autogen_usernames_info#:#Pattern per nomi utente generati automaticamente. chatroom#:#ban_question#:#Vuoi davvero bandire l’utente dall’attuale stanza? -chatroom#:#ban_table_title#:#Utenti vietati -chatroom#:#banned#:#You have been banned from this chat -chatroom#:#bans#:#Divieti +chatroom#:#ban_table_title#:#Utenti bannati +chatroom#:#banned#:#Sei stato bannato da questa chat +chatroom#:#bans#:#Utenti bannati chatroom#:#chat_address#:#Indirizzo chatroom#:#chat_anonymous_not_allowed#:#Si prega di accedere per utilizzare la chat. chatroom#:#chat_auth_token_info#:#Si prega di definire stringhe univoche utilizzate da ILIAS a scopo di autenticazione quando si inviano richieste al server di chat. Puoi creare automaticamente queste stringhe cliccando sul pulsante corrispondente. Si prega di notare che il server di chat può comunicare con più clienti ILIAS, ma ogni id cliente deve essere <b>unico</b>. chatroom#:#chat_ban#:#Divieto -chatroom#:#chat_broadcast_typing#:#Broadcast Typing###29 07 2022 new variable -chatroom#:#chat_broadcast_typing_default_info#:#If enabled, typing will be broadcasted to other participants of a conversation or chat room by default.###29 10 2025 new variable -chatroom#:#chat_broadcast_typing_info#:#If enabled, your typing will be broadcasted to other participants of a conversation or chat room.###29 07 2022 new variable -chatroom#:#chat_connection_disconnected#:#Disconnected -chatroom#:#chat_connection_established#:#Connection established +chatroom#:#chat_broadcast_typing#:#Broadcast Typing###31 03 2023 new variable +chatroom#:#chat_broadcast_typing_default_info#:#If enabled, typing will be broadcasted to other participants of a conversation or chat room by default.###28 11 2025 new variable +chatroom#:#chat_broadcast_typing_info#:#Allow participants in conversations or chatrooms to see when you are typing a message.###31 03 2023 new variable +chatroom#:#chat_connection_disconnected#:#Disconnesso +chatroom#:#chat_connection_established#:#Connessione stabilita chatroom#:#chat_deletion_disabled#:#Disabilita chatroom#:#chat_deletion_interval#:#Intervallo -chatroom#:#chat_deletion_interval_info#:#If chosen, messages in the repository chat on On-Screen-Chat conversations will be deleted after the defined threshold. -chatroom#:#chat_deletion_interval_run_at#:#Tempo +chatroom#:#chat_deletion_interval_info#:#Se scelti, i messaggi nella chat del repository nelle conversazioni su schermo sullo schermo verranno eliminati dopo la soglia definita. +chatroom#:#chat_deletion_interval_run_at#:#Orario chatroom#:#chat_deletion_interval_run_at_info#:#Si prega di definire il tempo (formato: HH:MM) quando il server deve elaborare l'eliminazione dei messaggi. chatroom#:#chat_deletion_interval_unit#:#Unità chatroom#:#chat_deletion_interval_value#:#Valore chatroom#:#chat_deletion_ival_max_val#:#Il valore massimo per l’unità scelta '%s' è: %s -chatroom#:#chat_deletion_section_head#:#Eliminazione dei messaggi datati -chatroom#:#chat_enable_history#:#Enable History###29 07 2022 new variable -chatroom#:#chat_enable_history_info#:#Everybody can read and export past public chat messages in the tab „History“. Messages from within private rooms are only accessible by invited users.###29 07 2022 new variable +chatroom#:#chat_deletion_section_head#:#Eliminazione dei vecchi messaggi +chatroom#:#chat_enable_history#:#Enable History###31 03 2023 new variable +chatroom#:#chat_enable_history_info#:#Everybody can read and export past public chat messages in the tab „History“. Messages from within private rooms are only accessible by invited users.###31 03 2023 new variable chatroom#:#chat_error_log_info#:#Si prega di definire un percorso server assoluto al file di log degli errori del server chat (ad es.: /var/www/ilias/data/chat_error.log). Se non si specifica un percorso, il server di chat creerà automaticamente un file che si trova nella directory del server di chat. -chatroom#:#chat_functions#:#Chat Functions###26 08 2024 new variable +chatroom#:#chat_functions#:#Chat Functions###30 04 2024 new variable chatroom#:#chat_https_cert_info#:#Si prega di definire un percorso server assoluto al file del certificato SSL (ad es.: /etc/ssl/certs/server.pem). chatroom#:#chat_https_dhparam_info#:#Si prega di definire un percorso server assoluto a un file (ad es.: /etc/ssl/private/dhparam.PEM), utilizzato per la negoziazione dei parametri Diffie Hellman (ad es. generati tramite: OpenSSL dhparam-out/etc/ssl/private/dhparam.pem 2048). chatroom#:#chat_https_key_info#:#Si prega di definire un percorso server assoluto al file di chiave privata (ad es.: /etc/ssl/private/server.key). -chatroom#:#chat_invitation#:#Invitation from -chatroom#:#chat_invitation_long#:#You have been invited from -chatroom#:#chat_invitation_nc_inv_x#:#You have %s chat invitations.###29 07 2022 new variable -chatroom#:#chat_invitation_nc_no_inv#:#You have no chat invitations.###29 07 2022 new variable -chatroom#:#chat_invitation_short#:#Please click the title link to enter the chatroom. -chatroom#:#chat_invitations#:#Chat invitations###29 07 2022 new variable +chatroom#:#chat_invitation#:#Invito da +chatroom#:#chat_invitation_long#:#Sei stato invitato da +chatroom#:#chat_invitation_nc_inv_x#:#You have %s chat invitations.###31 03 2023 new variable +chatroom#:#chat_invitation_nc_no_inv#:#You have no chat invitations.###31 03 2023 new variable +chatroom#:#chat_invitation_short#:#Fare clic sul collegamento del titolo per accedere alla chat room. +chatroom#:#chat_invitations#:#Chat invitations###31 03 2023 new variable chatroom#:#chat_invite#:#Invita chatroom#:#chat_join#:#Partecipa chatroom#:#chat_kick#:#Rimuovi chatroom#:#chat_log_info#:#Si prega di definire un percorso server assoluto al file di log del server di chat (ad es.: /var/www/ilias/data/chat.log). Se non si specifica un percorso, il server di chat creerà automaticamente un file che si trova nella directory del server di chat. -chatroom#:#chat_log_level#:#Log Level###29 07 2022 new variable +chatroom#:#chat_log_level#:#Log Level chatroom#:#chat_mainroom#:#Stanza principale chatroom#:#chat_message#:#Messaggio chatroom#:#chat_message_display#:#Opzioni chatroom#:#chat_message_options#:#Mostra -chatroom#:#chat_no_use_typing_broadcast#:#Typing will not be broadcasted###29 07 2022 new variable -chatroom#:#chat_not_use_osc#:#Not Using On-Screen-Chat###29 07 2022 new variable +chatroom#:#chat_no_use_typing_broadcast#:#Typing will not be broadcasted###31 03 2023 new variable +chatroom#:#chat_not_use_osc#:#non utilizzare On-Screen Chat chatroom#:#chat_osc_accept_msg#:#Consenti conversazioni chat su schermo -chatroom#:#chat_osc_accept_msg_default_info#:#If enabled, users are by default allowed to send each other messages using the on-screen chat system.###29 10 2025 new variable -chatroom#:#chat_osc_accept_msg_info#:#Se consentito, gli altri utenti possono avviare una conversazione con me. -chatroom#:#chat_osc_accept_msg_info_slate#:#To have private conversations, you must enable your setting "Allow On-Screen Chat Conversations".###26 08 2024 new variable -chatroom#:#chat_osc_accept_msg_info_slate_link_txt#:#Visibility (in Profile and Privacy)###26 08 2024 new variable -chatroom#:#chat_osc_accept_no_conv_info_slate#:#There are currently no minimzed conversations.###26 08 2024 new variable +chatroom#:#chat_osc_accept_msg_default_info#:#If enabled, users are by default allowed to send each other messages using the on-screen chat system.###28 11 2025 new variable +chatroom#:#chat_osc_accept_msg_info#:#Se consentito, gli altri utenti possono avviare una conversazione +chatroom#:#chat_osc_accept_msg_info_slate#:#To have private conversations, you must enable your setting "Allow On-Screen Chat Conversations".###31 03 2023 new variable +chatroom#:#chat_osc_accept_msg_info_slate_link_txt#:#Visibility (in Profile and Privacy)###31 03 2023 new variable +chatroom#:#chat_osc_accept_no_conv_info_slate#:#There are currently no minimzed conversations.###31 03 2023 new variable chatroom#:#chat_osc_accepts_messages_no#:#Non ricevi messaggi di chat chatroom#:#chat_osc_accepts_messages_yes#:#Ricevi messaggi di chat chatroom#:#chat_osc_add_user#:#Aggiungi ulteriori utenti chatroom#:#chat_osc_conversations#:#Conversazioni chatroom#:#chat_osc_doesnt_accept_msg#:#Conversazioni non possibili -chatroom#:#chat_osc_head_grp_x_persons#:#%s Users +chatroom#:#chat_osc_head_grp_x_persons#:#%s Utenti chatroom#:#chat_osc_invite_to_conversation#:#Aggiungi alla conversazione chatroom#:#chat_osc_leave_grp_conv#:#Abbandona conversazione -chatroom#:#chat_osc_minimize#:#Minimize###26 08 2024 new variable -chatroom#:#chat_osc_nc_conv_x_p#:#You have %s hidden conversations.###07 02 2020 new variable -chatroom#:#chat_osc_nc_conv_x_s#:#You have one hidden conversation.###07 02 2020 new variable -chatroom#:#chat_osc_nc_no_conv#:#No Conversations available###07 02 2020 new variable -chatroom#:#chat_osc_nc_prop_time#:#Time###07 02 2020 new variable +chatroom#:#chat_osc_minimize#:#Minimize###31 03 2023 new variable +chatroom#:#chat_osc_nc_conv_x_p#:#Ha %s conversazioni ridotte ad icona. +chatroom#:#chat_osc_nc_conv_x_s#:#Ha una conversazione ridotta ad icona +chatroom#:#chat_osc_nc_no_conv#:#Non sono presenti conversazioni. +chatroom#:#chat_osc_nc_prop_time#:#Orario chatroom#:#chat_osc_no_conv#:#Nessuna conversazione. -chatroom#:#chat_osc_no_sub_directory#:#Sotto-directory -chatroom#:#chat_osc_no_sub_directory_info#:#If the Chatserver is only reachable through a sub directory with an URL like "http(s)://[IP/Domain]/[PATH]" it is required to insert the [PATH] for this Chatserver. +chatroom#:#chat_osc_no_sub_directory#:#Percorso relativo +chatroom#:#chat_osc_no_sub_directory_info#:#Se il Chatserver è raggiungibile solo attraverso una sottodirectory con un URL come "http (s): // [IP / Domain] / [PATH]" è necessario inserire il [PATH] per questo Chatserver. chatroom#:#chat_osc_no_usr_found#:#Impossibile trovare qualsiasi utente corrispondente alla ricerca. -chatroom#:#chat_osc_search_modal_info#:#Here you can search for users you would like to add to a conversation. If the search dialogue was opened within a group chat, the new user will be added to this chat. If you started the search within a 1:1 chat, a new group chat window will be opened. +chatroom#:#chat_osc_search_modal_info#:#Cercare qui un utente che si desideri aggiungere alla conversazione. Se hai aperto la finestra di ricerca in una chat di gruppo, l'utente verrà aggiunto a questa. Se hai aperto la finestra di ricerca da una chat individuale, dopo l'aggiunta si aprirà una nuova finestra per la chat di gruppo. chatroom#:#chat_osc_self_rej_msgs#:#Al momento non è possibile partecipare a questa conversazione perché è stata eliminata la ricezione di messaggi nelle impostazioni. chatroom#:#chat_osc_send#:#Invia chatroom#:#chat_osc_start_conversation#:#Avvia conversazione @@ -2979,15 +2964,15 @@ chatroom#:#chat_osc_user_left_grp_conv#:#L’utente '%s' ha abbandonato la conve chatroom#:#chat_osc_write_a_msg#:#Scrivi un messaggio... chatroom#:#chat_select_room#:#Seleziona la stanza della chat chatroom#:#chat_settings#:#Impostazioni di chat -chatroom#:#chat_settings_functions_header#:#Chat Room Functions###29 07 2022 new variable -chatroom#:#chat_show_auto_messages#:#Show Status Messages###29 07 2022 new variable +chatroom#:#chat_settings_functions_header#:#Chat Room Functions###31 03 2023 new variable +chatroom#:#chat_show_auto_messages#:#Show Status Messages###31 03 2023 new variable chatroom#:#chat_to_mainroom#:#Alla stanza principale -chatroom#:#chat_use_osc#:#Using On-Screen-Chat###29 07 2022 new variable -chatroom#:#chat_use_typing_broadcast#:#Typing will be broadcasted###29 07 2022 new variable +chatroom#:#chat_use_osc#:#Utilizzare On-Screen-Chat +chatroom#:#chat_use_typing_broadcast#:#Typing will be broadcasted###31 03 2023 new variable chatroom#:#chat_user_action_invite_osd#:#Invita alla chat su schermo chatroom#:#chat_user_action_invite_public_room#:#Invita alla chat room pubblica -chatroom#:#chat_user_x_is_typing#:#User %s is typing ...###29 07 2022 new variable -chatroom#:#chat_users_are_typing#:#Multiple users are typing ...###29 07 2022 new variable +chatroom#:#chat_user_x_is_typing#:#User %s is typing ...###31 03 2023 new variable +chatroom#:#chat_users_are_typing#:#Multiple users are typing ...###31 03 2023 new variable chatroom#:#chat_whisper#:#Bisbiglia chatroom#:#chatroom_auth#:#Autenticazione chatroom#:#chatroom_auth_btn_txt#:#Genera chiavi @@ -2997,15 +2982,15 @@ chatroom#:#chatroom_client_name#:#Nome chatroom#:#chatroom_client_name_info#:#Si prega di digitare un nome per il cliente ILIAS. La stringa digitata deve essere globalmente unica. All’inizio questo valore viene impostato nell’id cliente del cliente ILIAS. Se modificato, il server di chat deve essere riavviato. chatroom#:#chatroom_enable_osc#:#Abilita chat su schermo chatroom#:#chatroom_enable_osc_info#:#Se attivata, la chat su schermo sarà disponibile per ogni utente. Ma ogni utente può decidere se lui/lei vorrebbe essere contattato da altri. La conversazione potrebbe iniziare nello strumento “Chi è online?”. -chatroom#:#chatroom_log#:#Chatserver Log###29 07 2022 new variable -chatroom#:#chatserver_address#:#IP-Adress of the Chatservers -chatroom#:#chatserver_port#:#Port of the Chatservers +chatroom#:#chatroom_log#:#Log-File del server di chat +chatroom#:#chatserver_address#:#Indirizzo IP dei server di chat +chatroom#:#chatserver_port#:#Porta del Chatserver chatroom#:#chtr_activation_limited_visibility_info#:#Se selezionato, il titolo della chat sarà visibile anche al di fuori della disponibilità specificata. La chat tuttavia non può essere letta. chatroom#:#chtr_activation_online_info#:#Imposta la chat online per renderlo visibile e disponibile ai partecipanti. In caso contrario, solo gli utenti con l’autorizzazione “Modifica impostazioni” avranno accesso a esso. -chatroom#:#chtr_add#:#Add Chatroom +chatroom#:#chtr_add#:#Aggiungi Chatroom chatroom#:#chtr_ban_actor_tbl_head#:#Partecipante -chatroom#:#chtr_ban_ts_tbl_head#:#Timestamp -chatroom#:#chtr_new#:#New Chatroom +chatroom#:#chtr_ban_ts_tbl_head#:#Orario +chatroom#:#chtr_new#:#Crea nuova Chatroom chatroom#:#chtr_server_status#:#Stato del server chatroom#:#clear_room_history#:#Cancella cronologia messaggi chatroom#:#clear_room_history_question#:#Vuoi davvero eliminare tutti i messaggi dall’attuale stanza? @@ -3018,10 +3003,10 @@ chatroom#:#display_past_msgs#:#Numero dei messaggi precedenti chatroom#:#duration_from#:#Da chatroom#:#duration_to#:#A chatroom#:#end_whisper#:#Annulla -chatroom#:#enter#:#Enter chatroom +chatroom#:#enter#:#Entra nella chatroom chatroom#:#error_log#:#Errore del registro chat server -chatroom#:#hint_display_past_msgs#:#Number of past messages to show, when the room is entered. A value of "0" disables this feature. -chatroom#:#history_byday_title#:#History by day +chatroom#:#hint_display_past_msgs#:#Numero di messaggi passati da mostrare quando si entra nella stanza. Un valore di "0" disabilita questa funzione. +chatroom#:#history_byday_title#:#Mostra discussioni del giorno chatroom#:#history_cleared#:#La cronologia dei messaggi è stata eliminata da un moderatore. chatroom#:#history_title_general#:#Conversazione nella chat room "%s" chatroom#:#ilias_chatserver_connection#:#Connessione ILIAS al server @@ -3031,340 +3016,340 @@ chatroom#:#invite_username#:#Nome utente chatroom#:#key#:#Chiave chatroom#:#kick_question#:#Vuoi davvero rimuovere l’utente dalla stanza attuale? chatroom#:#kicked#:#Sei stato rimosso da questa chat room -chatroom#:#lost_connection#:#The connection to the chatserver was interrupted. +chatroom#:#lost_connection#:#La connessione al server di chat è stata interrotta. chatroom#:#main#:#Stanza principale -chatroom#:#messages#:#Messages###26 08 2024 new variable +chatroom#:#messages#:#Messages###30 04 2024 new variable chatroom#:#no_further_users#:#Nessun altro utente presente chatroom#:#no_messages#:#Non ci sono messaggi salvati per il periodo fornito. chatroom#:#no_username_given#:#Si prega di scegliere un nome utente -chatroom#:#osc_browser_noti_no_permission_error#:#Please remove this domain from the list of blocked domains in the notification settings of your browser or operating system. Otherwise you will not be able to receive browser notifications.###07 02 2020 new variable -chatroom#:#osc_browser_noti_no_support_error#:#Browser notifications are not supported in your browser. Please ensure you are requesting ILIAS via HTTPS and use a <a href="https://caniuse.com/#feat=notifications" target="_blank" rel="noopener noreferrer">supported browser</a>.###07 02 2020 new variable -chatroom#:#osc_browser_noti_req_permission_error#:#The browser notifications could not be enabled because you did not grant access. Please remove this domain from the list of blocked domains in the notification settings of your browser or operating system.###07 02 2020 new variable -chatroom#:#osc_enable_browser_notifications_info#:#If enabled, a browser notification will be shown if you receive new messages and conversations when the ILIAS browser tab is in background, or if the browser is hidden. You will also receive a browser notification for new messages in a conversation after %s minute(s) of idling if the ILIAS tab is in foreground.###07 02 2020 new variable -chatroom#:#osc_enable_browser_notifications_label#:#Browser Notifications###07 02 2020 new variable -chatroom#:#osc_noti_title#:#New Chat Message###07 02 2020 new variable +chatroom#:#osc_browser_noti_no_permission_error#:#Si prega di rimuovere questo dominio dalla lista dei domini bloccati nelle impostazioni di notifica del tuo browser o sistema operativo. Altrimenti non sarai in grado di ricevere le notifiche del browser. +chatroom#:#osc_browser_noti_no_support_error#:#Le notifiche del browser non sono supportate nel tuo browser. Assicurati di richiedere ILIAS via HTTPS e di utilizzare un <a href="https://caniuse.com/#feat=notifications" target="_blank" rel="noopener noreferrer">browser supportato</a>. +chatroom#:#osc_browser_noti_req_permission_error#:#Non è stato possibile abilitare le notifiche del browser perché non hai concesso l'accesso. Per favore, rimuovi questo dominio dalla lista dei domini bloccati nelle impostazioni di notifica del tuo browser o sistema operativo. +chatroom#:#osc_enable_browser_notifications_info#:#Se abilitato, una notifica del browser sarà mostrata se ricevete nuovi messaggi e conversazioni quando la scheda del browser ILIAS è in background, o se il browser è nascosto. Riceverete anche una notifica del browser per i nuovi messaggi in una conversazione dopo %s minuti di inattività se la scheda ILIAS è in primo piano. +chatroom#:#osc_enable_browser_notifications_label#:#Notifiche del browser +chatroom#:#osc_noti_title#:#Nuovo messaggio di chat chatroom#:#period#:#Periodo chatroom#:#permissions#:#Autorizzazioni -chatroom#:#preferred_chatname#:#Preferred Name###29 07 2022 new variable -chatroom#:#public_chat_created#:#The public chat room has been added to the repository -chatroom#:#scope#:#Stanza/stanza privata +chatroom#:#preferred_chatname#:#Preferred Name###31 03 2023 new variable +chatroom#:#public_chat_created#:#La chat room pubblica è stata aggiunta al repository +chatroom#:#scope#:#Stanza / stanza privata chatroom#:#select_custom_username#:#Seleziona nome utente personalizzato chatroom#:#server_further_information#:#È possibile trovare maggiori informazioni sulla configurazione del server nel <a href="%1$s" target="_blank">file Leggimi</a>. -chatroom#:#server_readme_file_btn_label#:#Readme File###29 10 2025 new variable +chatroom#:#server_readme_file_btn_label#:#Readme File###28 11 2025 new variable chatroom#:#session#:#Sessione chatroom#:#settings_general#:#Generale chatroom#:#settings_title#:#Impostazioni -chatroom#:#start_private_chat#:#Start Private Chat###28 10 2024 new variable -chatroom#:#unable_to_connect#:#The connection to the chatserver could not be established. +chatroom#:#start_private_chat#:#Start Private Chat###28 11 2025 new variable +chatroom#:#unable_to_connect#:#Impossibile stabilire la connessione al server di chat. chatroom#:#unban#:#Consenti -chatroom#:#user_banned#:#The user #user# has been banned.###28 10 2024 new variable +chatroom#:#user_banned#:#The user #user# has been banned.###28 11 2025 new variable chatroom#:#user_in_ilias#:#Cerca e invita utenti da ILIAS -chatroom#:#user_in_room#:#Invite user from current chatroom -chatroom#:#user_invited#:#The user <b> -chatroom#:#user_invited_self#:#<b> -chatroom#:#user_kicked#:#L’utente <b> +chatroom#:#user_in_room#:#Invita l'utente dalla chat room corrente +chatroom#:#user_invited#:#L'utente è stato invitato. +chatroom#:#user_invited_self#:#<b>#user#</b> ti ha invitato nella chat room: <b>#room#</b>.<br /> +chatroom#:#user_kicked#:#L'utente <b>#user#</b> è stato kickato. chatroom#:#users#:#Utenti -chatroom#:#welcome_to_chat#:#Welcome to the chatroom -chatroom#:#write_message#:#New Message###26 08 2024 new variable -chatroom_adm#:#chat_cannot_connect_to_server#:#ILIAS cannot build a socket connection to the chatserver. +chatroom#:#welcome_to_chat#:#Benvenuto nella chat room +chatroom#:#write_message#:#New Message###30 04 2024 new variable +chatroom_adm#:#chat_cannot_connect_to_server#:#ILIAS non è in grado di creare una connessione socket al server chats. chatroom_adm#:#chat_enabled#:#Chat attivata chatroom_adm#:#chatserver_settings_title#:#Impostazioni server chat -chatroom_adm#:#client_settings#:#Client settings +chatroom_adm#:#client_settings#:#Impostazioni generali chatroom_adm#:#general_settings_title#:#Impostazioni generali di chat chatroom_adm#:#https#:#HTTPS -chatroom_adm#:#osc_adm_browser_noti_info#:#If enabled, users may individually decide whether or not they want to receive browser notifications for new conversations and messages. Notifications are triggered if the user works in different browser tabs or the browser is hidden and ILIAS was put into the background. Users will also receive browser notifications after a certain idle time in a conversation if ILIAS is in the foreground.###07 02 2020 new variable -chatroom_adm#:#osc_adm_browser_noti_label#:#Browser Notifications###07 02 2020 new variable -chatroom_adm#:#osc_adm_conv_idle_state_threshold_info#:#Cut off notifications by given a minimum interval at which browser notifications are triggered for incoming chat messages..###07 02 2020 new variable -chatroom_adm#:#osc_adm_conv_idle_state_threshold_label#:#Time between Browser Notifications###07 02 2020 new variable +chatroom_adm#:#osc_adm_browser_noti_info#:#Se abilitato, gli utenti possono decidere individualmente se vogliono o meno ricevere le notifiche del browser per le nuove conversazioni e messaggi. Le notifiche vengono attivate se l'utente lavora in diverse schede del browser o se il browser è nascosto e ILIAS è stato messo in secondo piano. Gli utenti riceveranno anche le notifiche del browser dopo un certo tempo di inattività in una conversazione se ILIAS è in primo piano. +chatroom_adm#:#osc_adm_browser_noti_label#:#Notifiche del browser +chatroom_adm#:#osc_adm_conv_idle_state_threshold_info#:#Tagliare le notifiche dando un intervallo minimo in cui le notifiche del browser vengono attivate per i messaggi di chat in arrivo. +chatroom_adm#:#osc_adm_conv_idle_state_threshold_label#:#Tempo tra le notifiche del browser chatroom_adm#:#port_info#:#Le porte utilizzate raramente sono spesso bloccate da firewall o server proxy. Il browser dell'utente non sarà in grado di stabilire una connessione al server di chat se la porta definita è bloccata. chatroom_adm#:#protocol#:#Protocollo -chatroom_adm#:#public_chat_permissions#:#Public Chatroom Permissions -chatroom_adm#:#public_chat_settings#:#Public Chatroom Settings -chatroom_adm#:#server_settings#:#Server settings +chatroom_adm#:#public_chat_permissions#:#Autorizzazioni per chat pubblica +chatroom_adm#:#public_chat_settings#:#Impostazioni chat pubblica +chatroom_adm#:#server_settings#:#Impostazioni server chat chatroom_adm#:#settings_has_been_saved#:#Le impostazioni sono state salvate classification#:#clsfct_back_to_cat#:#Torna alla categoria classification#:#clsfct_block_info#:#La selezione filtra gli oggetti. classification#:#clsfct_block_title#:#Selezione per argomenti -classification#:#clsfct_content_no_match#:#No hits +classification#:#clsfct_content_no_match#:#Nessuna selezione classification#:#clsfct_content_title#:#Oggetti che corrispondono alla selezione classification#:#clsfct_selected_objects#:#Oggetti selezionati -cmix#:#achieved_info#:#Successfully bring about or reach a desired objective, level, or result by effort, skill, or courage.###29 07 2022 new variable -cmix#:#achieved_label#:#Statements with the verb 'achieved'###29 07 2022 new variable -cmix#:#activity_id#:#Activity-ID###07 02 2020 new variable -cmix#:#activity_id_info#:#This ID is primarily used for the display of data from the LRS. You receive this ID from the resource provider.###07 02 2020 new variable -cmix#:#answered_info#:#Indicates the actor replied to a question, where the object is generally an activity representing the question. The text of the answer will often be included in the response inside result.###29 07 2022 new variable -cmix#:#answered_label#:#Statements with the verb 'answered'###29 07 2022 new variable -cmix#:#btn_change_registration#:#Submit###07 02 2020 new variable -cmix#:#btn_create_lrs_type#:#Add LRS-Type###07 02 2020 new variable -cmix#:#btn_create_registration#:#Submit###07 02 2020 new variable -cmix#:#change_registration#:#E-Mail address for Registration###07 02 2020 new variable -cmix#:#cmix_add#:#Add xAPI/cmi5 Object###07 02 2020 new variable -cmix#:#cmix_add_cmi5_lm#:#cmi5 Learning Module###07 02 2020 new variable -cmix#:#cmix_add_cmi5_lm_info#:#This option should be used when the content is a cmi5 compliant learning module. Related features like suitable reportings are available without further configurations.###07 02 2020 new variable -cmix#:#cmix_add_lrs_type#:#LRS-Type###07 02 2020 new variable -cmix#:#cmix_add_source#:#Source###07 02 2020 new variable -cmix#:#cmix_add_source_external_app#:#Resource not launched by ILIAS###07 02 2020 new variable -cmix#:#cmix_add_source_external_app_info#:#Use this option for separately launched resources as e.g. apps or simulations. Users must agree to the fetching of data.###07 02 2020 new variable -cmix#:#cmix_add_source_local_dir#:#Local Directory###07 02 2020 new variable -cmix#:#cmix_add_source_local_dir_info#:#Use this option for content packages on your local device.###07 02 2020 new variable -cmix#:#cmix_add_source_upload_dir#:#Upload Directory###07 02 2020 new variable -cmix#:#cmix_add_source_upload_dir_info#:#Use this option for content packages already uploaded into the ILIAS upload directory which is also used for SCORM and HTML packages.###07 02 2020 new variable -cmix#:#cmix_add_source_upload_select#:#--- Please select ---###07 02 2020 new variable -cmix#:#cmix_add_source_url#:#Resource URL###07 02 2020 new variable -cmix#:#cmix_add_source_url_info#:#Use this option for an external resource.###07 02 2020 new variable -cmix#:#cmix_add_xapi_standard_object#:#xAPI Standard Object###07 02 2020 new variable -cmix#:#cmix_add_xapi_standard_object_info#:#Use this option to have a generic content module offering all features like different reportings. This option comes with the greatest possible flexibility but requires a more complex configuration.###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_answered#:#Answered###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_asked#:#Asked###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_attempted#:#Attempted###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_attended#:#Attended###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_commented#:#Commented###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_completed#:#Completed###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_exited#:#Exited###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_experienced#:#Experienced###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_failed#:#Failed###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_imported#:#Imported###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_initialized#:#Initialized###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_interacted#:#Interacted###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_launched#:#Launched###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_mastered#:#Mastered###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_passed#:#Passed###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_preferred#:#Preferred###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_progressed#:#Progressed###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_registered#:#Registered###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_responded#:#Responded###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_resumed#:#Resumed###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_scored#:#Scored###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_shared#:#Shared###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_suspended#:#Suspended###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_terminated#:#Terminated###07 02 2020 new variable -cmix#:#cmix_adlnetgov_expapi_verbs_voided#:#Voided###07 02 2020 new variable -cmix#:#cmix_all_verbs#:#All Verbs###07 02 2020 new variable -cmix#:#cmix_copy#:#Copy xAPI/cmi5 Object###07 02 2020 new variable -cmix#:#cmix_import#:#Import xAPI/cmi5 Object###07 02 2020 new variable -cmix#:#cmix_indication_to_user#:#Further Hints for this LRS###07 02 2020 new variable -cmix#:#cmix_info_external_lrs_info#:#This Learning Record Store is an external LRS. An external LRS is characterized by insufficient influence on the LRS by the operator of the ILIAS-Installation. This is the case e.g. if there are no rights to delete data.###07 02 2020 new variable -cmix#:#cmix_info_external_lrs_label#:#Additional Info about this LRS###07 02 2020 new variable -cmix#:#cmix_info_privacy_section#:#Info about personal data###07 02 2020 new variable -cmix#:#cmix_info_privacy_section_launch#:#Info about personal data transmitted at launch###07 02 2020 new variable -cmix#:#cmix_lrs_type#:#Learning Record Store (LRS)###07 02 2020 new variable -cmix#:#cmix_new#:#New xAPI/cmi5 Object###07 02 2020 new variable -cmix#:#completed_info#:#Indicates the actor finished or concluded the activity normally.###29 07 2022 new variable -cmix#:#completed_label#:#Statements with the verb 'completed'###29 07 2022 new variable -cmix#:#conf_availability#:#Availability###07 02 2020 new variable -cmix#:#conf_availability_0#:#Not available###07 02 2020 new variable -cmix#:#conf_availability_0_info#:#Existing xAPI/cmi5 objects that use this LRS type can no longer be used.###28 10 2024 new variable -cmix#:#conf_availability_1#:#Existing ones allowed###07 02 2020 new variable -cmix#:#conf_availability_1_info#:#This LRS type is not offered when creating new xAPI/cmi5 objects. Existing xAPI/cmi5 objects that use this type can continue to write or read data. Use this option to be able to delete data in the connected LRS at a later time.###28 10 2024 new variable -cmix#:#conf_availability_2#:#New producible###07 02 2020 new variable -cmix#:#conf_availability_2_info#:#This LRS type can be selected when creating xAPI/cmi5 objects.###28 10 2024 new variable -cmix#:#conf_bypass_proxy#:#Detection of Learning Progress###07 02 2020 new variable -cmix#:#conf_bypass_proxy_disabled#:#xAPI-Proxy to get immediately data###07 02 2020 new variable -cmix#:#conf_bypass_proxy_enabled#:#CronJob to check Learning Record Store###07 02 2020 new variable -cmix#:#conf_bypass_proxy_info#:#In most cases it is recommended to use the xAPI-Proxy. Use the CronJob in case of Limitations regarding Resource or Server.###07 02 2020 new variable -cmix#:#conf_cronjob_neccessary#:#CronJob necessary for Learning Progress###07 02 2020 new variable -cmix#:#conf_cronjob_neccessary_info#:#By activating this option, xAPI-Objects using this LRS-Type could not use the xAPI-Proxy to get immediately data for Detection of Learning Progress. Use only the CronJob in case of limitations regarding resources or server.###07 02 2020 new variable -cmix#:#conf_delete_data#:#Delete Data in LRS###28 10 2024 new variable -cmix#:#conf_delete_data_info#:#Deletion is currently only possible with the Learning Record Store (LRS) LearningLocker. Only use the options for deleting the user identification if the data has been pseudonymized in the LRS.###28 10 2024 new variable -cmix#:#conf_delete_data_opt0#:#Never###28 10 2024 new variable -cmix#:#conf_delete_data_opt1#:#Never - but if users are deleted and if xAPI/cmi objects are moved to the trash or deleted, data will no longer be assignable for ILIAS by deleting the - user identification###28 10 2024 new variable -cmix#:#conf_delete_data_opt11#:#When users are deleted and when xAPI/cmi objects are moved to the trash or deleted###28 10 2024 new variable -cmix#:#conf_delete_data_opt12#:#Additionally when users are removed from courses or groups###28 10 2024 new variable -cmix#:#conf_delete_data_opt2#:#Never - but additionally when users are removed from courses or groups, data will no longer be assignable for ILIAS by deleting the user identification###28 10 2024 new variable -cmix#:#conf_description#:#Description###07 02 2020 new variable -cmix#:#conf_external_lrs#:#External LRS###07 02 2020 new variable -cmix#:#conf_keep_lp#:#Keep Learning Progress###07 02 2020 new variable -cmix#:#conf_keep_lp_info#:#The ILIAS learning progress status completed would be freezed.###07 02 2020 new variable -cmix#:#conf_launch_mode#:#Launch Mode###07 02 2020 new variable -cmix#:#conf_launch_mode_browse#:#Browse###07 02 2020 new variable -cmix#:#conf_launch_mode_browse_info#:#This option should provide a user experience that allows the user to "look around" without judgement.###26 08 2024 new variable -cmix#:#conf_launch_mode_normal#:#Normal###07 02 2020 new variable -cmix#:#conf_launch_mode_normal_info#:#Data related to the learning progress should be recorded.###26 08 2024 new variable -cmix#:#conf_launch_mode_review#:#Review###07 02 2020 new variable -cmix#:#conf_launch_mode_review_info#:#This option should provide a user experience that allows the user to "revisit / review" already completed material.###26 08 2024 new variable -cmix#:#conf_lrs_endpoint#:#Endpoint###07 02 2020 new variable -cmix#:#conf_lrs_key#:#Key / Login###07 02 2020 new variable -cmix#:#conf_lrs_secret#:#Secret / Password###07 02 2020 new variable -cmix#:#conf_new_window#:#New Window###29 07 2022 new variable -cmix#:#conf_new_window_info#:#The content is opened in a new window. When leaving the content this window gets closed.###29 07 2022 new variable -cmix#:#conf_own_window#:#Own Window###07 02 2020 new variable -cmix#:#conf_own_window_info#:#The content is opened in the same window and replaces the ILIAS Screen. When leaving the content the user returns to ILIAS.###07 02 2020 new variable -cmix#:#conf_privacy_comment_default#:#Indication to user###07 02 2020 new variable -cmix#:#conf_privacy_ident#:#User identification###26 08 2024 new variable -cmix#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable -cmix#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable -cmix#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable -cmix#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable -cmix#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###26 08 2024 new variable -cmix#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###26 08 2024 new variable -cmix#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###28 10 2024 new variable -cmix#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###28 10 2024 new variable -cmix#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address###28 10 2024 new variable -cmix#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###28 10 2024 new variable -cmix#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable -cmix#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable -cmix#:#conf_privacy_ident_info#:#Standard is frequently the E-Mail address. The unique ILIAS platform id is:###26 08 2024 new variable -cmix#:#conf_privacy_ident_real_email#:#E-Mail Address###26 08 2024 new variable -cmix#:#conf_privacy_ident_real_email_info#:#Sends E-Mail Address of user as identification (Warning: an E-Mail Address might be used by multiple users!)###26 08 2024 new variable -cmix#:#conf_privacy_name#:#User name###26 08 2024 new variable -cmix#:#conf_privacy_name_firstname#:#First name###26 08 2024 new variable -cmix#:#conf_privacy_name_firstname_info#:#Sends the first name of the user name from ILIAS###26 08 2024 new variable -cmix#:#conf_privacy_name_fullname#:#Entire name###26 08 2024 new variable -cmix#:#conf_privacy_name_fullname_info#:#Sends title, first name and last name###26 08 2024 new variable -cmix#:#conf_privacy_name_info#:#Sending an user name is usually not required.###26 08 2024 new variable -cmix#:#conf_privacy_name_lastname#:#Title and last name###26 08 2024 new variable -cmix#:#conf_privacy_name_lastname_info#:#Sends Mister or Ms/Mrs. (unless otherwise specified) and the last name###26 08 2024 new variable -cmix#:#conf_privacy_name_none#:#No one###26 08 2024 new variable -cmix#:#conf_privacy_name_none_info#:#Sends '-' instead of a name###26 08 2024 new variable -cmix#:#conf_privacy_setting_conf#:#Configuration Options###07 02 2020 new variable -cmix#:#conf_privacy_setting_default#:#Default Settings, changeable for Objects###07 02 2020 new variable -cmix#:#conf_privacy_setting_force#:#Settings are not changeable for Objects###07 02 2020 new variable -cmix#:#conf_privacy_setting_info#:#Configuration Options for Privacy Settings###07 02 2020 new variable -cmix#:#conf_remarks#:#Internal comments###07 02 2020 new variable -cmix#:#conf_title#:#Title###07 02 2020 new variable -cmix#:#conf_use_proxy#:#xAPI-Proxy###28 10 2024 new variable -cmix#:#conf_use_proxy_info#:#The xAPI proxy provides real-time data to determine learning progress in ILIAS. The proxy reduces personal data in accordance with the selected data protection options. If the xAPI proxy is deactivated, the learning content writes the learning progress directly to the LRS. This data must then also be retrieved directly from the LRS. The cron job "xAPI/cmi5 get results" is required to determine the learning progress. The xAPI proxy is mandatory for cmi5 objects and is activated automatically.###28 10 2024 new variable -cmix#:#conf_use_proxy_info_cmi5#:#The xAPI proxy provides real-time data to determine learning progress in ILIAS. The proxy reduces personal data in accordance with the selected data protection options. The xAPI proxy is mandatory for cmi5 objects.###28 10 2024 new variable -cmix#:#conf_use_proxy_info_xapi#:#The xAPI proxy provides real-time data to determine learning progress in ILIAS. The proxy reduces personal data in accordance with the selected data protection options. If the xAPI proxy is deactivated, the learning content writes the learning progress directly to the LRS. This data must then also be retrieved directly from the LRS. The cron job "xAPI/cmi5 get results" is required to determine the learning progress.###28 10 2024 new variable -cmix#:#conf_user_ident#:#User identification###07 02 2020 new variable -cmix#:#conf_user_ident_il_uuid_ext_account#:#External User Id combined with a unique ILIAS platform id formated as an email adress.###07 02 2020 new variable -cmix#:#conf_user_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###07 02 2020 new variable -cmix#:#conf_user_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formated as an email adress.###07 02 2020 new variable -cmix#:#conf_user_ident_il_uuid_login_info#:#This is identical to each call, but may allow a direct conclusion about the ILIAS user.###07 02 2020 new variable -cmix#:#conf_user_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###29 07 2022 new variable -cmix#:#conf_user_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###29 07 2022 new variable -cmix#:#conf_user_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formated as an email adress.###07 02 2020 new variable -cmix#:#conf_user_ident_il_uuid_user_id_info#:#This is identical to each call, but doesn't allow a direct conclusion about the ILIAS user.###07 02 2020 new variable -cmix#:#conf_user_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###07 02 2020 new variable -cmix#:#conf_user_ident_real_email#:#E-Mail Address###07 02 2020 new variable -cmix#:#conf_user_ident_real_email_info#:#Sends E-Mail Address of user as identification (Warning: an E-Mail Address might be used by multiple users!)###07 02 2020 new variable -cmix#:#conf_user_name#:#User name###07 02 2020 new variable -cmix#:#conf_user_name_firstname#:#First name###07 02 2020 new variable -cmix#:#conf_user_name_firstname_info#:#Sends the first name of the user name from ILIAS###07 02 2020 new variable -cmix#:#conf_user_name_fullname#:#Entire name###07 02 2020 new variable -cmix#:#conf_user_name_fullname_info#:#Sends title, first name and last name###07 02 2020 new variable -cmix#:#conf_user_name_info#:#Sending an user name is usually not required.###07 02 2020 new variable -cmix#:#conf_user_name_lastname#:#Title and last name###07 02 2020 new variable -cmix#:#conf_user_name_lastname_info#:#Sends Mister or Ms/Mrs. (unless otherwise specified) and the last name###07 02 2020 new variable -cmix#:#conf_user_name_none#:#No one###07 02 2020 new variable -cmix#:#conf_user_name_none_info#:#Sends '-' instead of a name###07 02 2020 new variable -cmix#:#conf_user_registered_mail#:#Registered E-Mail-Address###07 02 2020 new variable -cmix#:#content_privacy_ident#:#User identification for resource###07 02 2020 new variable -cmix#:#content_privacy_name#:#User name for resource###07 02 2020 new variable -cmix#:#create_lrs_type_form#:#New LRS-Type###07 02 2020 new variable -cmix#:#create_registration#:#Register your E-Mail address###07 02 2020 new variable -cmix#:#cron_xapi_del#:#Delete xAPI/cmi5 data in the Learning Record Store###29 10 2025 new variable -cmix#:#cron_xapi_del_desc#:#Data is deleted according to the settings of the xAPI/cmi5 objects.###29 10 2025 new variable -cmix#:#cron_xapi_results_evaluation#:#Fetch xAPI/cmi5 Results###07 02 2020 new variable -cmix#:#cron_xapi_results_evaluation_desc#:#Requests all xAPI results from learning record stores for objects not supporting the ILIAS xAPI proxy.###07 02 2020 new variable -cmix#:#description_info#:#The description will be shown below the title.###07 02 2020 new variable -cmix#:#download_certificate#:#Download Certificate###07 02 2020 new variable -cmix#:#duration_info#:#The duration can be entered e.g. for answering a task. The duration is set to the default value 0 seconds (PT00.000S) by this option.###29 07 2022 new variable -cmix#:#duration_label#:#Duration###29 07 2022 new variable -cmix#:#edit_lrs_type_form#:#LRS-Type###07 02 2020 new variable -cmix#:#failed_info#:#Indicates the actor did not successfully pass an activity to a level of predetermined satisfaction.###29 07 2022 new variable -cmix#:#failed_label#:#Statements with the verb 'failed'###29 07 2022 new variable -cmix#:#fetch_xapi_statements#:#Fetch results from Learning Record Store###07 02 2020 new variable -cmix#:#field_user_ident#:#E-Mail-Address###07 02 2020 new variable -cmix#:#field_user_ident_info#:#Enter the e-mail address used in the external application to identify you.###07 02 2020 new variable -cmix#:#form_change_registration#:#Registration###07 02 2020 new variable -cmix#:#form_create_registration#:#Registration###07 02 2020 new variable -cmix#:#hide_data_info#:#With this option which is only available for the ILIAS LRS proxy certain data is stored in statements with unrecognizable values in the Learning Record Store.###29 07 2022 new variable -cmix#:#hide_data_label#:#Blacken data###29 07 2022 new variable -cmix#:#highscore_achieved_ts#:#Date###07 02 2020 new variable -cmix#:#highscore_achieved_ts_description#:#A column containing the date will be included in the ranking.###07 02 2020 new variable -cmix#:#highscore_all_tables#:#Participant's Own Rank and Top Ranking###07 02 2020 new variable -cmix#:#highscore_all_tables_description#:#Participants get information about the top ranking and their own position in the ranking.###07 02 2020 new variable -cmix#:#highscore_description#:#The names of other users could be displayed if the right 'View learning experiences of other users' is set.###07 02 2020 new variable -cmix#:#highscore_enabled#:#Ranking###07 02 2020 new variable -cmix#:#highscore_mode#:#Mode###07 02 2020 new variable -cmix#:#highscore_own_table#:#Participant's Own Rank###07 02 2020 new variable -cmix#:#highscore_own_table_description#:#Participants are advised of their own position in the ranking.###07 02 2020 new variable -cmix#:#highscore_percentage#:#Percentage###07 02 2020 new variable -cmix#:#highscore_percentage_description#:#A column containing the score as percentage will be included in the ranking.###07 02 2020 new variable -cmix#:#highscore_score#:#Score###07 02 2020 new variable -cmix#:#highscore_score_description#:#A column containing the score will be included in the ranking.###07 02 2020 new variable -cmix#:#highscore_top_num#:#Length of Top Ranking###07 02 2020 new variable -cmix#:#highscore_top_num_description#:#Specify how many ranks are to be included in the top ranking list.###07 02 2020 new variable -cmix#:#highscore_top_num_unit#:#entries###07 02 2020 new variable -cmix#:#highscore_top_table#:#Top Ranking###07 02 2020 new variable -cmix#:#highscore_top_table_description#:#Participants are presented with a table containing the top rankings.###07 02 2020 new variable -cmix#:#highscore_wtime#:#Duration###07 02 2020 new variable -cmix#:#highscore_wtime_description#:#A column containing the duration will be included in the ranking.###07 02 2020 new variable -cmix#:#info_availability#:#Hereby you can operate the availability of the LRS-type within the magazine. All types can set on "allow existing ones" instead of being deleted.###07 02 2020 new variable -cmix#:#info_description#:#This description will be shown when choosing the type for new objects.###07 02 2020 new variable -cmix#:#info_external_lrs#:#A hint will be shown to users when dealing with an external LRS. An external LRS is characterized by insufficient influence on the LRS the by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable -cmix#:#info_lrs_endpoint#:#URL of the endpoint without '/' at the end###07 02 2020 new variable -cmix#:#info_lrs_key#:#Key or login for access, i.e. 12345###07 02 2020 new variable -cmix#:#info_lrs_secret#:#Shared secret / Password, i.e. secret###07 02 2020 new variable -cmix#:#info_privacy_comment_default#:#Please insert, if required, an additional indication on data security when using this LRS.###07 02 2020 new variable -cmix#:#info_remarks#:#Place to write down your comments on this LRS-type here.###07 02 2020 new variable -cmix#:#info_title#:#This title will be shown when choosing the type for new objects.###07 02 2020 new variable -cmix#:#initialized_info#:#Indicates the activity provider has determined that the actor successfully started an activity.###29 07 2022 new variable -cmix#:#initialized_label#:#Statements with the verb 'initialized'###29 07 2022 new variable -cmix#:#launch_options#:#Options for Launch###07 02 2020 new variable -cmix#:#launch_url#:#URL of the resource###07 02 2020 new variable -cmix#:#launch_url_info#:#Insert here the Internet address by adding http:// or https:// . Options for data security are also relevant for remote resources.###07 02 2020 new variable -cmix#:#log_options#:#Options for the display of transmitted data###07 02 2020 new variable -cmix#:#lrs_authentication#:#Authentication###07 02 2020 new variable -cmix#:#no_substatements_info#:#With this option - which is only available for the ILIAS LRS proxy - the storage of subordinate statements can be suppressed. This can for example affect the answering of single tasks in a test. The content is informed that the statements would have been saved.###29 07 2022 new variable -cmix#:#no_substatements_label#:#Do not store substatements###29 07 2022 new variable -cmix#:#online_info#:#This makes the object visible and usable for the users.###07 02 2020 new variable -cmix#:#only_moveon_info#:#With this option, which is only available for the ILIAS LRS proxy, only statements with defined verbs are stored in the Learning Record Store (WhiteList). The content is informed that the statements would have been saved. This usually ensures the expiration date but should be discussed with the content provider.###29 07 2022 new variable -cmix#:#only_moveon_label#:#Save learning success data only###29 07 2022 new variable -cmix#:#passed_info#:#Indicates the actor successfully passed an activity to a level of predetermined satisfaction.###29 07 2022 new variable -cmix#:#passed_label#:#Statements with the verb 'passed'###29 07 2022 new variable -cmix#:#privacy_options#:#Options for data security###07 02 2020 new variable -cmix#:#progressed_info#:#Indicates a value of how much of an actor has advanced or moved through an activity.###29 07 2022 new variable -cmix#:#progressed_label#:#Statements with the verb 'progressed'###29 07 2022 new variable -cmix#:#registration_saved_successfully#:#Registration saved successfully###07 02 2020 new variable -cmix#:#satisfied_info#:#Indicates that the authority or activity provider determined the actor has fulfilled the criteria of the object or activity.###29 07 2022 new variable -cmix#:#satisfied_label#:#Statements with the verb 'satisfied'###29 07 2022 new variable -cmix#:#sect_learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable -cmix#:#show_debug#:#Display Learning Experiences###07 02 2020 new variable -cmix#:#show_debug_info#:#The Learning Experiences of other users could be displayed if the right 'View learning experiences of other users' is set.###07 02 2020 new variable -cmix#:#tab_export#:#Export###07 02 2020 new variable -cmix#:#tab_info#:#Info###07 02 2020 new variable -cmix#:#tab_lrs_types#:#LRS-Types###07 02 2020 new variable -cmix#:#tab_scoring#:#Ranking###07 02 2020 new variable -cmix#:#tab_settings#:#Settings###07 02 2020 new variable -cmix#:#tab_statements#:#Learning Experiences###07 02 2020 new variable -cmix#:#tbl_action_raw_data#:#View Raw Data###07 02 2020 new variable -cmix#:#tbl_lrs_type_availability#:#Availability###07 02 2020 new variable -cmix#:#tbl_lrs_type_title#:#Title###07 02 2020 new variable -cmix#:#tbl_lrs_type_usages#:#Usages Count###07 02 2020 new variable -cmix#:#tbl_lrs_types_header#:#LRS-Types###07 02 2020 new variable -cmix#:#tbl_statements_actor#:#User###07 02 2020 new variable -cmix#:#tbl_statements_date#:#Date###07 02 2020 new variable -cmix#:#tbl_statements_object#:#Object###07 02 2020 new variable -cmix#:#tbl_statements_verb#:#Verb###07 02 2020 new variable -cmix#:#terminated_info#:#Indicates that the actor successfully ended an activity.###29 07 2022 new variable -cmix#:#terminated_label#:#Statements with the verb 'terminated'###29 07 2022 new variable -cmix#:#timestamp_info#:#The timestamp marks the time of an action indicated by the statement. The timestamp is set to the default value 01.01.1970 (1970-01-01T00:00:00.000Z) by this option. Please note that a Learning Record Store may automatically set a value for the stored date, which can be almost identical to the timestamp.###29 07 2022 new variable -cmix#:#timestamp_label#:#Timestamp###29 07 2022 new variable -cmix#:#title_info#:#Give the object a title.###07 02 2020 new variable -cmix#:#type_cmi5#:#cmi5 Learning Module###29 07 2022 new variable -cmix#:#type_generic#:#xAPI Standard Object###29 07 2022 new variable -cmix#:#use_fetch#:#Authorization through Fetch-URL###07 02 2020 new variable -cmix#:#use_fetch_info#:#As long as the resource supports this option, you should use this option to increase data security.###07 02 2020 new variable -cmix#:#xapi_statements_fetched_successfully#:#Results from Learning Record Store were fetched successfully###07 02 2020 new variable -cmix#:#xapi_statements_last_fetch_date#:#Last fetch of Results:###07 02 2020 new variable -cmix#:#xapi_statements_not_fetched_yet#:#Results from Learning Record Store are not fetched yet###07 02 2020 new variable +cmix#:#achieved_info#:#Realizzare o raggiungere con successo un obiettivo, un livello o un risultato desiderato attraverso lo sforzo, l'abilità o il coraggio. +cmix#:#achieved_label#:#Frasi con il verbo 'eseguito' +cmix#:#activity_id#:#Identificatore attività +cmix#:#activity_id_info#:#Questa ID viene utilizzata principalmente per la visualizzazione di dati dagli LRS. Lei riceve questa ID dal fornitore della risorsa/fonte. +cmix#:#answered_info#:#Indica che l'utente ha risposto a una domanda, dove l'oggetto è generalmente un'attività che rappresenta la domanda. Il testo della risposta sarà spesso incluso nella risposta all'interno del risultato. +cmix#:#answered_label#:#Frasi con il verbo 'risposto' +cmix#:#btn_change_registration#:#Invia +cmix#:#btn_create_lrs_type#:#Aggiungi tipo di LRS +cmix#:#btn_create_registration#:#Invia +cmix#:#change_registration#:#Indirizzo e-mail per la registrazione +cmix#:#cmix_add#:#aggiungi oggetto xAPI/cmi5 +cmix#:#cmix_add_cmi5_lm#:#Modulo didattico cmi5 +cmix#:#cmix_add_cmi5_lm_info#:#Quest'opzione dovrebbe essere usata, se il contenuto è conforme al modulo didattico cmi5. Funzioni relazionate come p.es. rapporti idonei sono disponibili senza ulteriori configurazioni. +cmix#:#cmix_add_lrs_type#:#Tipo di LRS +cmix#:#cmix_add_source#:#Fonte +cmix#:#cmix_add_source_external_app#:#Risorsa non avviata da ILIAS +cmix#:#cmix_add_source_external_app_info#:#Utilizzi questa opzione per risorse avviate separatamente come p.es. App o simulazioni. Gli utenti devono, attraverso l'indicazione dell'e-mail utilizzata, accettare la raccolta dei dati. +cmix#:#cmix_add_source_local_dir#:#Cartella locale +cmix#:#cmix_add_source_local_dir_info#:#Utilizzi questa opzione per pacchetti di contenuto sul Suo dispositivo locale. +cmix#:#cmix_add_source_upload_dir#:#indice upload +cmix#:#cmix_add_source_upload_dir_info#:#Utilizzi questa opzione per pacchetti di contenuto, che sono già caricati nell'indice7cartella ILIAS di upload, che viene già utilizzato per pacchetti SCORM- e HTML. +cmix#:#cmix_add_source_upload_select#:#--- Effettui una scelta --- +cmix#:#cmix_add_source_url#:#Link fonte +cmix#:#cmix_add_source_url_info#:#Utilizzi questa opzione in caso di fonti esterne. +cmix#:#cmix_add_xapi_standard_object#:#xAPI oggetto standard +cmix#:#cmix_add_xapi_standard_object_info#:#Utilizzi questa opzione per ottenere un modulo generale di contenuto, che offre tutte le funzioni, come p.es. diversi tipi di rapporto. Questa opzione offre la massima flessibilità possibile, richiede però una configurazione più complessa. +cmix#:#cmix_adlnetgov_expapi_verbs_answered#:#Risposto +cmix#:#cmix_adlnetgov_expapi_verbs_asked#:#Domandato +cmix#:#cmix_adlnetgov_expapi_verbs_attempted#:#Tentato +cmix#:#cmix_adlnetgov_expapi_verbs_attended#:#Frequentato +cmix#:#cmix_adlnetgov_expapi_verbs_commented#:#Commentato +cmix#:#cmix_adlnetgov_expapi_verbs_completed#:#Completato +cmix#:#cmix_adlnetgov_expapi_verbs_exited#:#Uscito +cmix#:#cmix_adlnetgov_expapi_verbs_experienced#:#Esperto/Vissuto +cmix#:#cmix_adlnetgov_expapi_verbs_failed#:#Non riuscito +cmix#:#cmix_adlnetgov_expapi_verbs_imported#:#Importato +cmix#:#cmix_adlnetgov_expapi_verbs_initialized#:#Inizializzato +cmix#:#cmix_adlnetgov_expapi_verbs_interacted#:#Interagito +cmix#:#cmix_adlnetgov_expapi_verbs_launched#:#Avviato +cmix#:#cmix_adlnetgov_expapi_verbs_mastered#:#Padroneggiato +cmix#:#cmix_adlnetgov_expapi_verbs_passed#:#Passato +cmix#:#cmix_adlnetgov_expapi_verbs_preferred#:#Preferito +cmix#:#cmix_adlnetgov_expapi_verbs_progressed#:#Progredito +cmix#:#cmix_adlnetgov_expapi_verbs_registered#:#Registrato +cmix#:#cmix_adlnetgov_expapi_verbs_responded#:#Risposto +cmix#:#cmix_adlnetgov_expapi_verbs_resumed#:#Ripreso +cmix#:#cmix_adlnetgov_expapi_verbs_scored#:#Segnato +cmix#:#cmix_adlnetgov_expapi_verbs_shared#:#Condiviso +cmix#:#cmix_adlnetgov_expapi_verbs_suspended#:#Sospeso +cmix#:#cmix_adlnetgov_expapi_verbs_terminated#:#Terminato +cmix#:#cmix_adlnetgov_expapi_verbs_voided#:#Invalidato +cmix#:#cmix_all_verbs#:#Tutti i verbi +cmix#:#cmix_copy#:#Copia oggetto xAPI/cmi5 +cmix#:#cmix_import#:#Importa oggetto xAPI/cmi5 +cmix#:#cmix_indication_to_user#:#Ulteriori indicazioni relative a questo LRS +cmix#:#cmix_info_external_lrs_info#:#Questo Learning Record Store è un LRS esterno. Un LRS esterno è caratterizzato da una limitata influenza di ILIAS su di esso. Ciò è il caso, se per es. non si hanno i diritti di eliminazione dei dati. +cmix#:#cmix_info_external_lrs_label#:#Informazioni aggiuntive riguardo questo LRS +cmix#:#cmix_info_privacy_section#:#Informazioni relative ai dati personali +cmix#:#cmix_info_privacy_section_launch#:#Informazioni relative ai dati personali trasmessi all'avvio +cmix#:#cmix_lrs_type#:#Learning Record Store (LRS) +cmix#:#cmix_new#:#Nuovo oggetto xAPI/cmi5 +cmix#:#completed_info#:#L'attività è terminata o completata normalmente. +cmix#:#completed_label#:#Frasi col verbo 'completato' +cmix#:#conf_availability#:#Disponibilità +cmix#:#conf_availability_0#:#Non disponibile +cmix#:#conf_availability_0_info#:#Existing xAPI/cmi5 objects that use this LRS type can no longer be used.###30 04 2024 new variable +cmix#:#conf_availability_1#:#Per oggetti esistenti +cmix#:#conf_availability_1_info#:#This LRS type is not offered when creating new xAPI/cmi5 objects. Existing xAPI/cmi5 objects that use this type can continue to write or read data. Use this option to be able to delete data in the connected LRS at a later time.###30 04 2024 new variable +cmix#:#conf_availability_2#:#Per oggetti nuovi ed esistenti +cmix#:#conf_availability_2_info#:#This LRS type can be selected when creating xAPI/cmi5 objects.###30 04 2024 new variable +cmix#:#conf_bypass_proxy#:#Individuazione del progresso didattico +cmix#:#conf_bypass_proxy_disabled#:#xAPI-Proxy, per ricevere subito i dati +cmix#:#conf_bypass_proxy_enabled#:#CronJob per consultare banca dati LRS +cmix#:#conf_bypass_proxy_info#:#Nella maggior parte dei casi è consigliato l'utilizzo del proxy xAPI. Utilizzi il CronJob in caso di limitazioni riguardanti risorse o server. +cmix#:#conf_cronjob_neccessary#:#CronJob necessario per il progresso didattico +cmix#:#conf_cronjob_neccessary_info#:#Attivando questa opzione gli oggetti xAPI, che utilizzano questo tipo di LRS, non potranno utilizzare il proxy xAPI per rilevare al contempo i dati per riconoscere il progresso didattico. Utilizzi il CronJob solamente per limitazioni riguardanti risorse o server. +cmix#:#conf_delete_data#:#Delete Data in LRS###30 04 2024 new variable +cmix#:#conf_delete_data_info#:#Deletion is currently only possible with the Learning Record Store (LRS) LearningLocker. Only use the options for deleting the user identification if the data has been pseudonymized in the LRS.###30 04 2024 new variable +cmix#:#conf_delete_data_opt0#:#never###30 04 2024 new variable +cmix#:#conf_delete_data_opt1#:#never - but if users are deleted and if xAPI/cmi objects are moved to the trash or deleted, data will no longer be assignable for ILIAS by deleting the - user identification###30 04 2024 new variable +cmix#:#conf_delete_data_opt11#:#when users are deleted and when xAPI/cmi objects are moved to the trash or deleted###30 04 2024 new variable +cmix#:#conf_delete_data_opt12#:#additionally when users are removed from courses or groups###30 04 2024 new variable +cmix#:#conf_delete_data_opt2#:#never - but additionally when users are removed from courses or groups, data will no longer be assignable for ILIAS by deleting the user identification###30 04 2024 new variable +cmix#:#conf_description#:#Descrizione +cmix#:#conf_external_lrs#:#LRS esterno +cmix#:#conf_keep_lp#:#Evitare il peggioramento del progresso didattico +cmix#:#conf_keep_lp_info#:#Lo stato di 'modificato' del progresso didattico ILIAS viene bloccato. +cmix#:#conf_launch_mode#:#Modalità di partenza +cmix#:#conf_launch_mode_browse#:#Solo anteprima / Preview ('browse') senza salvataggio del progresso didattico +cmix#:#conf_launch_mode_browse_info#:#This option should provide a user experience that allows the user to "look around" without judgement.###09 03 2022 new variable +cmix#:#conf_launch_mode_normal#:#Normale +cmix#:#conf_launch_mode_normal_info#:#Data related to the learning progress should be recorded.###09 03 2022 new variable +cmix#:#conf_launch_mode_review#:#Modalità di revisione senza salvataggio del progresso didattico +cmix#:#conf_launch_mode_review_info#:#This option should provide a user experience that allows the user to "revisit / review" already completed material.###09 03 2022 new variable +cmix#:#conf_lrs_endpoint#:#Punto di termine +cmix#:#conf_lrs_key#:#Key / Login +cmix#:#conf_lrs_secret#:#Secret / Password +cmix#:#conf_new_window#:#New Window###09 03 2022 new variable +cmix#:#conf_new_window_info#:#The content is opened in a new window. When leaving the content this window gets closed.###09 03 2022 new variable +cmix#:#conf_own_window#:#Stessa finestra +cmix#:#conf_own_window_info#:#Il contenuto viene aperto nella stessa finestra e sostituisce la schermata ILIAS. All'uscita dal contenuto l'utente torna su ILIAS. +cmix#:#conf_privacy_comment_default#:#Indicazione all'utente +cmix#:#conf_privacy_ident#:#Identificativo Utente +cmix#:#conf_privacy_ident_il_uuid_ext_account#:#ID utente esterno combinato con un identificativo di piattaforma ILIAS univoco, formattato come indirizzo email +cmix#:#conf_privacy_ident_il_uuid_ext_account_info#:#Questo è identico a ogni chiamata, ma può consentire di trarre conclusioni dirette sull'utente. +cmix#:#conf_privacy_ident_il_uuid_login#:#ID utente esterno combinato con un identificativo di piattaforma ILIAS univoco, formattato come indirizzo email +cmix#:#conf_privacy_ident_il_uuid_login_info#:#Questo è identico a ogni chiamata, ma può consentire di trarre conclusioni dirette sull'utente. +cmix#:#conf_privacy_ident_il_uuid_random#:#ID casuale combinato con un identificativo di piattaforma ILIAS univoco, che è formattato come un indirizzo email +cmix#:#conf_privacy_ident_il_uuid_random_info#:#Viene generato un ID casuale per ogni oggetto ILIAS e utente ILIAS e rimane identico ogni volta che viene chiamato. Le conclusioni su un utente sono molto limitate, poiché è praticamente impossibile creare profili utente. +cmix#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###26 09 2022 new variable +cmix#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###26 09 2022 new variable +cmix#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address###26 09 2022 new variable +cmix#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###26 09 2022 new variable +cmix#:#conf_privacy_ident_il_uuid_user_id#:#ID utente ILIAS combinato con un identificativo di piattaforma ILIAS univoco, formattato come indirizzo email +cmix#:#conf_privacy_ident_il_uuid_user_id_info#:#Questo è identico a tutte le chiamate, ma non consente di trarre conclusioni dirette sull'utente ILIAS. +cmix#:#conf_privacy_ident_info#:#L'indirizzo e-mail è spesso lo standard. L'ID univoco della piattaforma ILIAS è: +cmix#:#conf_privacy_ident_real_email#:#Indirizzo E-Mail +cmix#:#conf_privacy_ident_real_email_info#:#Invia l'indirizzo e-mail dell'utente come identificativo (attenzione: un indirizzo e-mail può essere utilizzato da più utenti!) +cmix#:#conf_privacy_name#:#Nome utente +cmix#:#conf_privacy_name_firstname#:#Nome +cmix#:#conf_privacy_name_firstname_info#:#Invio del Nome +cmix#:#conf_privacy_name_fullname#:#Nome e Cognome +cmix#:#conf_privacy_name_fullname_info#:#Invio di titolo, Nome e Cognome +cmix#:#conf_privacy_name_info#:#Invio del nome utente solitamente non richiesto +cmix#:#conf_privacy_name_lastname#:#titolo e cognome +cmix#:#conf_privacy_name_lastname_info#:#Invia Sig. o Sig.ra (se non diversamente specificato) e il cognome. +cmix#:#conf_privacy_name_none#:#Nessuno +cmix#:#conf_privacy_name_none_info#:#Invia '-' invece del Nome +cmix#:#conf_privacy_setting_conf#:#Opzioni configurazione +cmix#:#conf_privacy_setting_default#:#Impostazioni predefinite, modificabili per oggetti +cmix#:#conf_privacy_setting_force#:#Le impostazioni non sono modificabili per oggetti. +cmix#:#conf_privacy_setting_info#:#Opzioni configurazione per la protezione dei dati +cmix#:#conf_remarks#:#Commenti interni +cmix#:#conf_title#:#Titolo +cmix#:#conf_use_proxy#:#xAPI-Proxy###30 04 2024 new variable +cmix#:#conf_use_proxy_info#:#The xAPI proxy provides real-time data to determine learning progress in ILIAS. The proxy reduces personal data in accordance with the selected data protection options. If the xAPI proxy is deactivated, the learning content writes the learning progress directly to the LRS. This data must then also be retrieved directly from the LRS. The cron job "xAPI/cmi5 get results" is required to determine the learning progress. The xAPI proxy is mandatory for cmi5 objects and is activated automatically.###30 04 2024 new variable +cmix#:#conf_use_proxy_info_cmi5#:#The xAPI proxy provides real-time data to determine learning progress in ILIAS. The proxy reduces personal data in accordance with the selected data protection options. The xAPI proxy is mandatory for cmi5 objects.###30 04 2024 new variable +cmix#:#conf_use_proxy_info_xapi#:#The xAPI proxy provides real-time data to determine learning progress in ILIAS. The proxy reduces personal data in accordance with the selected data protection options. If the xAPI proxy is deactivated, the learning content writes the learning progress directly to the LRS. This data must then also be retrieved directly from the LRS. The cron job "xAPI/cmi5 get results" is required to determine the learning progress.###30 04 2024 new variable +cmix#:#conf_user_ident#:#User identification###31 03 2023 new variable +cmix#:#conf_user_ident_il_uuid_ext_account#:#External User Id combined with a unique ILIAS platform id formatted as an E-Mail adress###31 03 2023 new variable +cmix#:#conf_user_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###31 03 2023 new variable +cmix#:#conf_user_ident_il_uuid_login#:#ILIAS Login as E-Mail Address, if necessary combined with a unique ILIAS platform id###31 03 2023 new variable +cmix#:#conf_user_ident_il_uuid_login_info#:#This is identical to each call, but may allow a direct conclusion about the ILIAS user.###31 03 2023 new variable +cmix#:#conf_user_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###31 03 2023 new variable +cmix#:#conf_user_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###31 03 2023 new variable +cmix#:#conf_user_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail adress###31 03 2023 new variable +cmix#:#conf_user_ident_il_uuid_user_id_info#:#This is identical to each call, but doesn't allow a direct conclusion about the ILIAS user.###31 03 2023 new variable +cmix#:#conf_user_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###31 03 2023 new variable +cmix#:#conf_user_ident_real_email#:#E-Mail Address###31 03 2023 new variable +cmix#:#conf_user_ident_real_email_info#:#Sends E-Mail Address of user as identification (Warning: an E-Mail Address might be used by multiple users!)###31 03 2023 new variable +cmix#:#conf_user_name#:#User name###31 03 2023 new variable +cmix#:#conf_user_name_firstname#:#First name###31 03 2023 new variable +cmix#:#conf_user_name_firstname_info#:#Sends the first name of the user name from ILIAS###31 03 2023 new variable +cmix#:#conf_user_name_fullname#:#Entire name###31 03 2023 new variable +cmix#:#conf_user_name_fullname_info#:#Sends title, first name and last name###31 03 2023 new variable +cmix#:#conf_user_name_info#:#Sending an user name is usually not required.###31 03 2023 new variable +cmix#:#conf_user_name_lastname#:#Title and last name###31 03 2023 new variable +cmix#:#conf_user_name_lastname_info#:#Sends Mister or Ms/Mrs. (unless otherwise specified) and the last name###31 03 2023 new variable +cmix#:#conf_user_name_none#:#No one###31 03 2023 new variable +cmix#:#conf_user_name_none_info#:#Sends '-' instead of a name###31 03 2023 new variable +cmix#:#conf_user_registered_mail#:#Indirizzo e-mail registrato +cmix#:#content_privacy_ident#:#Identificazione utente +cmix#:#content_privacy_name#:#Nome utente +cmix#:#create_lrs_type_form#:#Nuovo tipo LRS +cmix#:#create_registration#:#Registri il Suo indirizzo e-mail +cmix#:#cron_xapi_del#:#Delete xAPI/cmi5 data in the Learning Record Store###30 04 2024 new variable +cmix#:#cron_xapi_del_desc#:#Data are deleted according to the settings of the xAPI/cmi5 objects.###30 04 2024 new variable +cmix#:#cron_xapi_results_evaluation#:#Recupera i risultati xAPI/cmi5 +cmix#:#cron_xapi_results_evaluation_desc#:#Richiede tutti i risultati xAPI dal learning record store per gli oggetti che non supportano il proxy ILIAS xAPI. +cmix#:#description_info#:#La descrizione verrà mostrata sotto al titolo. +cmix#:#download_certificate#:#Scarica certificato +cmix#:#duration_info#:#Il periodo di tempo può essere registrato, ad esempio, per rispondere a un compito. Questa opzione imposta la durata 'durata' al valore standard 0 secondi (PT00.000S). +cmix#:#duration_label#:#Durata +cmix#:#edit_lrs_type_form#:#Tipo LRS +cmix#:#failed_info#:#L'attività non è stata eseguita con successo e col livello di soddisfazione predeterminato. +cmix#:#failed_label#:#Frasi col verbo 'sbagliato' +cmix#:#fetch_xapi_statements#:#Recupera i risultati dal Learning Record Store +cmix#:#field_user_ident#:#Indirizzo e-mail +cmix#:#field_user_ident_info#:#Riporti l'indirizzo e-mail utilizzato nell'applicazione esterna per identificarla. +cmix#:#form_change_registration#:#Registrazione +cmix#:#form_create_registration#:#Registrazione +cmix#:#hide_data_info#:#Con questa opzione, disponibile solo per il proxy ILIAS-LRS, alcuni dati vengono archiviati in dichiarazioni con valori non riconoscibili nell'archivio dei record di apprendimento. +cmix#:#hide_data_label#:#Dati anneriti +cmix#:#highscore_achieved_ts#:#Data +cmix#:#highscore_achieved_ts_description#:#Una colonna contenente la data verrà inclusa nella graduatoria. +cmix#:#highscore_all_tables#:#Posizione raggiunta e l'elenco dei migliori +cmix#:#highscore_all_tables_description#:#Mostra sia una tabella per il proprio posizionamento in graduatoria, che una tabella dei migliori posizionamenti. +cmix#:#highscore_description#:#I nomi degli altri utenti possono essere mostrati, se è impostato il diritto 'Mostra esperienze didattiche degli altri utenti'. +cmix#:#highscore_enabled#:#Graduatoria +cmix#:#highscore_mode#:#Modalità +cmix#:#highscore_own_table#:#Posizionamento in classifica dell'utente +cmix#:#highscore_own_table_description#:#Ai partecipanti viene mostrata una tabella con il posizionamento raggiunto, all'interno di tutti i posizionamenti. +cmix#:#highscore_percentage#:#Percentuale +cmix#:#highscore_percentage_description#:#Una colonna contenente il punteggio in percentuale verrà aggiunto alla graduatoria. +cmix#:#highscore_score#:#Punteggio +cmix#:#highscore_score_description#:#Una colonna contenente il punteggio verrà aggiunto alla graduatoria. +cmix#:#highscore_top_num#:#Lunghezza della graduatoria +cmix#:#highscore_top_num_description#:#Specifichi quante voci devono essere mostrate nella classifica dei migliori posizionamenti. +cmix#:#highscore_top_num_unit#:#Posizionamenti +cmix#:#highscore_top_table#:#Migliori posizionamenti +cmix#:#highscore_top_table_description#:#Ai partecipanti verrà mostrata una tabella con i migliori posizionamenti. +cmix#:#highscore_wtime#:#Durata +cmix#:#highscore_wtime_description#:#Una colonna contenente la durata verrà inclusa nella graduatoria. +cmix#:#info_availability#:#Can la presente può gestire la disponibilità del tipo-LRS all'interno dell'archivio. Tutti i tipi possono essere fissati su "per oggetti esistenti", invece di essere eliminati. +cmix#:#info_description#:#Questa descrizione verrà mostrata alla definizione del tipo di un oggetto. +cmix#:#info_external_lrs#:#Un riferimento verrà mostrato agli utenti quando trattano con LRS esterni. Un LRS esterno è contraddistinto da un'influenza insufficiente sul LRS da parte del gestore di ILIAS. Ciò è il caso quando non ci sono i diritti all'eliminazione. +cmix#:#info_lrs_endpoint#:#URL del punto di termine senza '/' alla fine della pagina +cmix#:#info_lrs_key#:#Chiave o Login per l'accesso, p.es. 12345 +cmix#:#info_lrs_secret#:#Segreto generale / Password +cmix#:#info_privacy_comment_default#:#Per favore inserisca, se necessario, un'ulteriore indicazione sulla protezione dei dati in caso di utilizzo di questo LRS. +cmix#:#info_remarks#:#Qui può lasciare i Suoi commenti riguardqnti questo tipo di LRS. +cmix#:#info_title#:#Questo titolo viene mostrato alla scelta del tipo per nuovi oggetti. +cmix#:#initialized_info#:#L'attività è iniziata con successo +cmix#:#initialized_label#:#Frasi col verbo 'inizializzato' +cmix#:#launch_options#:#Opzioni di lancio +cmix#:#launch_url#:#URL della risorsa +cmix#:#launch_url_info#:#Inserisci qui l'indirizzo aggiungendo http:// o https:// .<br />Le opzioni per la sicurezza dati sono rilevanti anche per le risorse remote. +cmix#:#log_options#:#Opzioni per la visualizzazione dei dati trasmessi +cmix#:#lrs_authentication#:#Autenticazione +cmix#:#no_substatements_info#:#Con questa opzione, disponibile solo per il proxy ILIAS LRS, è possibile sopprimere la memorizzazione delle substatement. Ciò può, ad esempio, influenzare la risposta a singoli compiti in un test. Il contenuto viene informato che le dichiarazioni sono state salvate. +cmix#:#no_substatements_label#:#Non salvare le substatement +cmix#:#online_info#:#Questo rende l'oggetto visibile e utilizzabile per gli utenti. +cmix#:#only_moveon_info#:#Con questa opzione, disponibile solo per il proxy ILIAS-LRS, solo le statement con i verbi definiti vengono salvate nel Learning Record Store (WhiteList). Il contenuto viene informato che le dichiarazioni sono state salvate. Questo di solito garantisce l'eseguibilità, ma dovrebbe essere discusso con il fornitore di contenuti. +cmix#:#only_moveon_label#:#Salvare solo i dati che hanno esito positivo +cmix#:#passed_info#:#L'attività è stata trasferita con successo ad un livello di soddisfazione predeterminato. +cmix#:#passed_label#:#Frasi col verbo 'superato' +cmix#:#privacy_options#:#Opzioni per la sicurezza dei dati +cmix#:#progressed_info#:#Denota un valore che indica fino a che punto un utente è progredito in un'attività o si è spostato attraverso un'attività. +cmix#:#progressed_label#:#Frasi con il verbo 'progredito' +cmix#:#registration_saved_successfully#:#Registrazione salvata con successo +cmix#:#satisfied_info#:#Indica che i criteri dell'oggetto o dell'attività sono stati soddisfatti. +cmix#:#satisfied_label#:#Frasi con il verbo 'soddisfatto' +cmix#:#sect_learning_progress_options#:#Opzioni per il progresso didattico +cmix#:#show_debug#:#Mostra esperienze di apprendimento +cmix#:#show_debug_info#:#Le esperienze di apprendimento di altri utenti potrebbero essere visualizzate se è impostata correttamente "Visualizza esperienze di apprendimento di altri utenti". +cmix#:#tab_export#:#Esporta +cmix#:#tab_info#:#Info +cmix#:#tab_lrs_types#:#Tipi LRS +cmix#:#tab_scoring#:#Graduatoria +cmix#:#tab_settings#:#Impostazioni +cmix#:#tab_statements#:#Esperienze di apprendimento +cmix#:#tbl_action_raw_data#:#Visualizza dati grezzi +cmix#:#tbl_lrs_type_availability#:#Disponibilita' +cmix#:#tbl_lrs_type_title#:#Titolo +cmix#:#tbl_lrs_type_usages#:#Conteggio degli usi +cmix#:#tbl_lrs_types_header#:#Tipi LRS +cmix#:#tbl_statements_actor#:#Utente +cmix#:#tbl_statements_date#:#Data +cmix#:#tbl_statements_object#:#Oggetto +cmix#:#tbl_statements_verb#:#Verbo +cmix#:#terminated_info#:#L'attività è stata terminata con successo +cmix#:#terminated_label#:#Frasi con il verbo 'interrotto' +cmix#:#timestamp_info#:#Il timestamp indica l'ora di un'azione contrassegnata dall'istruzione. Questa opzione imposta il timestamp sul valore standard 01/01/1970 (1970-01-01T00: 00: 00.000Z). Tieni presente che un archivio di record di apprendimento può impostare automaticamente un valore per la data di archiviazione, che può essere quasi identico al timestamp. +cmix#:#timestamp_label#:#Timestamp +cmix#:#title_info#:#Dai un titolo all'oggetto +cmix#:#type_cmi5#:#cmi5 Learning Module###09 03 2022 new variable +cmix#:#type_generic#:#xAPI Standard Object###09 03 2022 new variable +cmix#:#use_fetch#:#Autorizzazione tramite Fetch-URL +cmix#:#use_fetch_info#:#Se la risorsa lo supporta, è consigliato utilizzare questa opzione per incrementare la sicurezza. +cmix#:#xapi_statements_fetched_successfully#:#I risultati del Learning Record Store sono stati recuperati correttamente +cmix#:#xapi_statements_last_fetch_date#:#Ultimo recupero dei risultati: +cmix#:#xapi_statements_not_fetched_yet#:#I risultati di Learning Record Store non sono ancora stati recuperati cmps#:#cmps_activate#:#Attivare cmps#:#cmps_active#:#Attivo cmps#:#cmps_add_new_rank#:#Posizione nel menù per Aggiungi-Nuovo-Oggetto cmps#:#cmps_available#:#Disponibile -cmps#:#cmps_available_version#:#Available Version###29 07 2022 new variable +cmps#:#cmps_available_version#:#Available Version###31 03 2023 new variable cmps#:#cmps_basic_files#:#File di base cmps#:#cmps_class_file#:#File classe -cmps#:#cmps_component#:#Componente +cmps#:#cmps_component#:#Componenti cmps#:#cmps_configure#:#Configura -cmps#:#cmps_current_db_version#:#Current DB-Version###29 07 2022 new variable +cmps#:#cmps_current_db_version#:#Current DB-Version###31 03 2023 new variable cmps#:#cmps_current_version#:#Versione attuale cmps#:#cmps_database#:#Database cmps#:#cmps_db_update#:#Script per l'attualizzazione della banca dati cmps#:#cmps_deactivate#:#Disattivato -cmps#:#cmps_detailed_information#:#Detailed Informationen###29 07 2022 new variable +cmps#:#cmps_detailed_information#:#Detailed Informationen###31 03 2023 new variable cmps#:#cmps_dir#:#Directory cmps#:#cmps_enable_creation#:#Consenti creazione cmps#:#cmps_file_version#:#Aggiornamento del file @@ -3374,8 +3359,8 @@ cmps#:#cmps_ilias_max_version#:#Versione max. di ILIAS cmps#:#cmps_ilias_min_version#:#Versione min. di ILIAS cmps#:#cmps_inactive#:#Inattivo cmps#:#cmps_install#:#Installa -cmps#:#cmps_is_active#:#Activated###29 07 2022 new variable -cmps#:#cmps_is_installed#:#Installed###29 07 2022 new variable +cmps#:#cmps_is_active#:#Activated###31 03 2023 new variable +cmps#:#cmps_is_installed#:#Installed###31 03 2023 new variable cmps#:#cmps_lang_files#:#File di lingua cmps#:#cmps_lang_prefix#:#Prefisso della variabile di testo cmps#:#cmps_languages#:#Lingue @@ -3384,7 +3369,7 @@ cmps#:#cmps_missing#:#Mancante cmps#:#cmps_module#:#Modulo cmps#:#cmps_must_installed#:#Il componente deve essere installato. cmps#:#cmps_name#:#Nome -cmps#:#cmps_needs_matching_ilias_version#:#This plugin does not work with your current ILIAS version.###29 07 2022 new variable +cmps#:#cmps_needs_matching_ilias_version#:#This plugin does not work with your current ILIAS version.###31 03 2023 new variable cmps#:#cmps_needs_newer_ilias_version#:#Questa versione del plugin funziona solo su una versione recente di ILIAS. Aggiornalo per favore. cmps#:#cmps_needs_newer_plugin_version#:#Questa versione di ILIAS necessita di un'aggiornamento del plugin. Procedi per favore. cmps#:#cmps_needs_update#:#Aggiornamento necessario @@ -3393,43 +3378,43 @@ cmps#:#cmps_no_db_update_file_available#:#Non è disponibile nessuno script per cmps#:#cmps_no_language_file_available#:#Nessun file di lingua disponibile cmps#:#cmps_plugin#:#Plug-in cmps#:#cmps_plugin_activated#:#Il plugin è stato attivato. -cmps#:#cmps_plugin_db_prefixes#:#Preffissi delle tabelle del DB +cmps#:#cmps_plugin_db_prefixes#:#Prefissi delle tabelle del DB cmps#:#cmps_plugin_deactivated#:#Il plugin è stato disattivato. -cmps#:#cmps_plugin_deinstalled#:#The plugin has been uninstalled###29 07 2022 new variable +cmps#:#cmps_plugin_deinstalled#:#The plugin has been uninstalled###31 03 2023 new variable cmps#:#cmps_plugin_file#:#File Plugin cmps#:#cmps_plugin_lang_prefixes#:#Plugin dei prefissi di lingua cmps#:#cmps_plugin_slot#:#Plug-in fascia oraria -cmps#:#cmps_plugin_uninstalled#:#The plugin has been uninstalled. -cmps#:#cmps_plugin_updated#:#The plugin has been updated###29 07 2022 new variable +cmps#:#cmps_plugin_uninstalled#:#Il plugin è stato disinstallato. +cmps#:#cmps_plugin_updated#:#The plugin has been updated###31 03 2023 new variable cmps#:#cmps_plugins#:#Plug-in cmps#:#cmps_refresh#:#Aggiorna -cmps#:#cmps_refresh_lng#:#Refresh language###29 07 2022 new variable +cmps#:#cmps_refresh_lng#:#Refresh language###31 03 2023 new variable cmps#:#cmps_rep_object#:#Oggetto del repository cmps#:#cmps_repository_object_types#:#Tipi di oggetto repository cmps#:#cmps_responsible#:#Responsabile -cmps#:#cmps_responsible_mail#:#Mail (Responsible)###29 07 2022 new variable +cmps#:#cmps_responsible_mail#:#Mail (Responsible)###31 03 2023 new variable cmps#:#cmps_save_options#:#Salva le opzioni cmps#:#cmps_service#:#Servizio cmps#:#cmps_show_details#:#Mostra i dettagli cmps#:#cmps_slots#:#Fasce orarie cmps#:#cmps_status#:#Stato -cmps#:#cmps_supports_cli_setup#:#Supports CLI-Setup###29 07 2022 new variable -cmps#:#cmps_supports_export#:#Supports export###29 07 2022 new variable -cmps#:#cmps_supports_learning_progress#:#Supports learning progress###29 07 2022 new variable +cmps#:#cmps_supports_cli_setup#:#Supports CLI-Setup###31 03 2023 new variable +cmps#:#cmps_supports_export#:#Supports export###31 03 2023 new variable +cmps#:#cmps_supports_learning_progress#:#Supports learning progress###31 03 2023 new variable cmps#:#cmps_uninstall#:#Disinstalla -cmps#:#cmps_uninstall_confirm#:#Are you sure you want to uninstall the plugin "%s"? +cmps#:#cmps_uninstall_confirm#:#Sei sicuro di voler disinstallare il plugin "%s"? cmps#:#cmps_uninstall_inactive_confirm#:#Il plug-in "%1$s" attualmente non può essere attivato ("%2$s"). In questo stato i plug-in non possono essere disinstallati completamente. Poiché solo l'integrazione di base viene ripristinata, i dati personalizzati del plug-in possono rimanere. Vuoi continuare con la disinstallazione parziale? cmps#:#cmps_update#:#Aggiornamento cmps#:#cmps_version#:#Versione cmps#:#database_is_uptodate#:#Il database è aggiornato. cmps#:#no_changes#:#Nessuna modifica -cmxv#:#cmxv_create#:#Create Certificate for xAPI/cmi5 Object###07 02 2020 new variable -cmxv#:#cmxv_create_info#:#Select a completed xAPI/cmi5 object to generate a certificate for it###07 02 2020 new variable +cmxv#:#cmxv_create#:#Crea certificato per l'oggetto xAPI/cmi5 +cmxv#:#cmxv_create_info#:#Seleziona un oggetto xAPI/cmi5 completato per generare un certificato relativo ad esso cntr#:#cntr_add_new_item#:#Aggiungi nuovo elemento cntr#:#cntr_adopt_content#:#Adotta il contenuto cntr#:#cntr_container_only_on_their_own#:#Categorie, corsi, gruppi o cartelle possono essere copiati come singoli oggetti. Si prega di selezionare una sola voce. cntr#:#cntr_copy_crs_grp#:#I miei corsi e gruppi -cntr#:#cntr_copy_repo_tree#:#Albero repository +cntr#:#cntr_copy_repo_tree#:#Albero archivio cntr#:#cntr_hide_title_and_icon#:#Nascondi titolo ed icona cntr#:#cntr_manage#:#Gestisci cntr#:#cntr_ordering#:#Ordinamento @@ -3438,10 +3423,10 @@ cntr#:#cntr_switch_to_new_editor_cmd#:#Visualizza il nuovo contenuto della pagin cntr#:#cntr_switch_to_new_editor_message#:#Questo è l'editor standard di ILIAS. Non è possibile trasferire contenuti dal vecchio editor. Inizia aggiungendo nuovi contenuti in basso. Se clicchi sul link che segue i nuovi contenuti saranno in uso. cntr#:#cntr_switched_editor#:#Nuovo contenuto visualizzato cntr#:#cntr_tax_none_available#:#Non ci sono tassonomie disponibili. -cntr#:#cntr_tax_settings_info#:#Taxonomies in categories classify and filter the objects contained in the category. After adding taxonomies, classifications can be made via the "Metadata" tabs and the "Taxonomy Assignment" sub-tabs of the respective objects. Taxonomies can additionally be displayed in the side block of the category's "Contents" tab to enable direct filtering of the assigned objects.###26 08 2024 new variable +cntr#:#cntr_tax_settings_info#:#Taxonomies in categories classify and filter the objects contained in the category. After adding taxonomies, classifications can be made via the "Metadata" tabs and the "Taxonomy Assignment" sub-tabs of the respective objects. Taxonomies can additionally be displayed in the side block of the category's "Contents" tab to enable direct filtering of the assigned objects.###30 04 2024 new variable cntr#:#cntr_taxonomy_definitions#:#Definizione tassonomia cntr#:#cntr_taxonomy_show_sideblock#:#Mostra tassonomie nel blocco laterale -cntr#:#cntr_taxonomy_sideblock_settings#:#Taxonomy Block Settings +cntr#:#cntr_taxonomy_sideblock_settings#:#Impostazioni blocco tassonomia cntr#:#cntr_text_media_editor#:#Text/Media Editor cntr#:#cntr_view_by_type#:#Visualizzazione per tipo cntr#:#cntr_view_info_by_type#:#Questa visualizzazione ordina tutti gli elementi a seconda del tipo. @@ -3452,7 +3437,7 @@ cntr#:#cntr_view_simple#:#Visualizzazione semplice cntr#:#container_import_zip_file_invalid#:#Il file caricato non è un file di esportazione ILIAS valido. Per caricare la struttura di directory si prega di utilizzare un oggetto file. cntr#:#edit_questions#:#Modifica domande cntr#:#exc_next_deadline_single#:#Scadenza -cntr#:#msg_no_downloadable_objects#:#No downloadable objects found. +cntr#:#msg_no_downloadable_objects#:#Nessun oggetto scaricabile trovato. cntr#:#objects_duplicated#:#Oggetti copiati cntr#:#prtf_create_portfolio_from_template#:#Crea portfolio dal modello cntr#:#sorting_new_items_at_bottom#:#Pulsante @@ -3463,10 +3448,10 @@ cntr#:#sorting_new_items_position#:#Posizione per i nuovi oggetti cntr#:#tab_back_to_repository#:#Torna al repository common#:#HH#:#HH:MM common#:#absolute_path#:#Percorso assoluto -common#:#accept_usr_agreement_btn#:#Accept###29 07 2022 new variable +common#:#accept_usr_agreement_btn#:#Accettare common#:#access#:#Accesso -common#:#accessFree#:#Remove limited Access -common#:#accessRestrict#:#Set limited Access +common#:#accessFree#:#Rimuovi accesso limitato +common#:#accessRestrict#:#Imposta accesso limitato common#:#access_expired#:#scadute common#:#access_free_granted#:#Imposta l’utente/gli utenti selezionato/i per l’accesso illimitato common#:#access_from#:#Accesso (da) @@ -3477,14 +3462,14 @@ common#:#access_unlimited#:#illimitato common#:#access_until#:#Accesso (fino a) common#:#access_users#:#Utenti registrati common#:#accesscount_registered_users#:#Lettura per numero di utenti distinti di ILIAS -common#:#accessibility_control_concept#:#Accessibility Control Concept###07 02 2020 new variable -common#:#account#:#My Account###07 02 2020 new variable -common#:#account_expires_body#:#La tua iscrizione & +common#:#accessibility_control_concept#:#Info Accessibilità +common#:#account#:#Il mio account +common#:#account_expires_body#:#Il tuo account è limitato, scadrà a: common#:#account_expires_subject#:#[ILIAS] La tua iscrizione scade common#:#action#:#Azione common#:#action_aborted#:#Esecuzione interrotta! common#:#actions#:#Azioni -common#:#actions_for#:#Actions for %s###29 07 2022 new variable +common#:#actions_for#:#Actions for %s###09 03 2022 new variable common#:#activate#:#Imposta Attivo common#:#activate_https#:#HTTPS attivato (Pagamento, Login) common#:#activate_tracking#:#Attivazione @@ -3494,12 +3479,12 @@ common#:#add#:#Aggiungi common#:#add_condition#:#Crea una condizione common#:#add_entry#:#Aggiungi/Modifica voce common#:#add_member#:#Aggiungi membro -common#:#add_member_role#:#Add Member Role###07 02 2020 new variable +common#:#add_member_role#:#Aggiungere Ruolo Utente<br /> common#:#add_new_user_defined_field#:#Crea un nuovo campo per l'utente common#:#add_note#:#Aggiungi nota common#:#add_parameter#:#Nuovo parametro -common#:#add_remove_edit_entries_of_main_menu#:#Add, remove or edit entries of the main menu###07 02 2020 new variable -common#:#add_role#:#Add Role###07 02 2020 new variable +common#:#add_remove_edit_entries_of_main_menu#:#Aggiungi, rimuovi o modifica le voci del menu principale +common#:#add_role#:#Add Role common#:#add_translation#:#Aggiungi traduzione common#:#add_user#:#Aggiungi utenti locali common#:#add_user_defined_field#:#Crea un nuovo campo @@ -3508,7 +3493,7 @@ common#:#additional_info#:#Informazione aggiuntiva common#:#address#:#Indirizzo common#:#admin_force_noti#:#Notifica attiva common#:#administrate_users#:#Utenti locali -common#:#administrate_users_headline#:#Local ILIAS Accounts of this Category###26 08 2024 new variable +common#:#administrate_users_headline#:#Local ILIAS Accounts of this Category###31 03 2023 new variable common#:#administration#:#Amministrazione common#:#administrator#:#Amministratore common#:#adopt#:#Adotta @@ -3516,15 +3501,15 @@ common#:#advanced_editing_allow_html_tags#:#Consenti i tag HTML selezionati per common#:#advanced_editing_assessment_settings#:#Tag HTML consentiti per il tool di Test e Valutazione di ILIAS common#:#advanced_editing_frm_post_settings#:#Forum impostazioni dei post common#:#advanced_editing_rep_page_editing#:#Abilita il Content Editing nel Repository -common#:#advanced_editing_rep_page_editing_desc#:#This feature allows to add text/media to category, course, group and folder pages. +common#:#advanced_editing_rep_page_editing_desc#:#Questa funzione consente di aggiungere testo / media alle pagine di categorie, corsi, gruppi e cartelle. common#:#advanced_editing_required_tags#:#Sono richiesti i seguenti tag HTML: %s common#:#advanced_editing_survey_settings#:#Tag HTML consentiti per lo strumento per i sondaggi di ILIAS -common#:#adve_assessment_settings#:#Test&Assessment settings +common#:#adve_assessment_settings#:#Impostazioni di test e valutazione common#:#adve_frm_post_settings#:#Post sul forum common#:#adve_general_settings#:#Impostazioni Generali common#:#adve_survey_settings#:#Impostazioni di sondaggio -common#:#agree_date#:#Accettato il -common#:#all#:#All###07 02 2020 new variable +common#:#agree_date#:#Agreed on###27 08 2024 new variable +common#:#all#:#Tutto common#:#all_global_roles#:#Ruoli globali common#:#all_local_roles#:#Ruoli locali (tutti) common#:#all_objects#:#Tutti gli oggetti @@ -3535,16 +3520,16 @@ common#:#allow_assign_users#:#Consenti di assegnare gli utenti agli amministrato common#:#allow_override_alert#:#Regole per l’accesso .ht non vengono interpretate correttamente. common#:#allow_register#:#Disponibile nel form di registrazione per i nuovi utenti common#:#allow_user_toggle_noti#:#Il membro è autorizzato per disattivare la notifica -common#:#already_delivered_files#:#File gi& +common#:#already_delivered_files#:#File inviati common#:#and#:#E -common#:#angry#:#Angry +common#:#angry#:#Arrabbiato common#:#anonymous#:#Anonimo common#:#answers#:#Risposta common#:#any_language#:#Tutte le lingue common#:#apache_auth#:#Autenticazione apache common#:#application_completed#:#Richiesta completata common#:#application_date#:#Data della richiesta -common#:#applications#:#Applicationi +common#:#applications#:#Applicazioni common#:#apply#:#Conferma common#:#apply_filter#:#Applica il filtro common#:#appointment#:#Appuntamento @@ -3562,7 +3547,7 @@ common#:#assign_local_role#:#Assegna al ruolo locale common#:#assigned_members#:#Membri Assegnati common#:#assigned_roles#:#Ruoli assegnati common#:#associated_user#:#utente associato -common#:#astounded#:#Astounded +common#:#astounded#:#Sbalordito common#:#at_least_one_style#:#Almeno uno stile deve essere attivo. common#:#attachment#:#Allegato common#:#attachments#:#Allegati @@ -3579,26 +3564,26 @@ common#:#auth_ldap_enable#:#Abilita il supporto LDAP common#:#auth_ldap_migration#:#Migrazione account common#:#auth_ldap_migration_info#:#Attivare questa opzione per dare la possibilità ai nuovi utenti di migrare i loro account esistenti ILIAS nell’autenticazione LDAP. common#:#auth_local#:#Database ILIAS -common#:#auth_login_instructions#:#Instructions on Login Screen -common#:#auth_mode#:#Modalit& +common#:#auth_login_instructions#:#Istruzioni sulla schermata di accesso +common#:#auth_mode#:#Modalità di autenticazione common#:#auth_mode_not_changed#:#(Nessuna modifica) common#:#auth_mode_roles_changed#:#E' stata modificata la modalita' di autenticazione per questo Ruolo -common#:#auth_new_account_mail_desc#:#Send new account mail to user, if user is generated automatically. A password will only be generated, if "Allow Local Authentication" is also activated. +common#:#auth_new_account_mail_desc#:#Invia la nuova posta dell'account all'utente, se l'utente viene generato automaticamente. Una password verrà generata solo se è attivato anche "Consenti autenticazione locale". common#:#auth_per_default#:#Per impostazione predefinita -common#:#auth_remark_non_local_auth#:#Quando selezioni un& -common#:#auth_role_auth_mode#:#Modalit& +common#:#auth_remark_non_local_auth#:#Quando si seleziona un'altra modalità di autenticazione rispetto al database ILIAS, non è più possibile modificare il nome e la password di accesso dell'utente. +common#:#auth_role_auth_mode#:#Modalità di autenticazione common#:#auth_saml#:#SAML -common#:#auth_script#:#Personale -common#:#auth_select#:#Seleziona la modalit& -common#:#auth_selection#:#Login to +common#:#auth_script#:#Definito dall'utente +common#:#auth_select#:#Seleziona la modalità di autenticazione +common#:#auth_selection#:#Tipo autenticazione common#:#auth_settings#:#Impostazioni di autenticazione common#:#auth_shib#:#Shibboleth common#:#auth_shib_instructions#:#Assicurati di aver ben letto e compreso le istruzioni README su come configurare il supporto Shibboleth per ILIAS. -common#:#auth_shib_not_configured#:#Shibboleth non & +common#:#auth_shib_not_configured#:#Shibboleth non è ancora configurato common#:#auth_shibboleth#:#Shibboleth common#:#auth_soap#:#SOAP common#:#auth_soap_allow_local_desc#:#Ciò consente agli utenti SOAP di autenticarsi con il nome utente ILIAS e password locali. -common#:#auth_soap_auth#:#Configura SOAP Authentication +common#:#auth_soap_auth#:#Configura autenticazione SOAP common#:#auth_soap_auth_desc#:#Queste impostazioni riguardano solo l'autenticazione utente basata su SOAP, non con l'interfaccia SOAP di ILIAS. common#:#auth_soap_create_users_desc#:#Crea automaticamente un utente ILIAS per utenti che si sono autenticati con SOAP senza avere ancora un account ILIAS. common#:#auth_soap_namespace#:#Spazio dei nomi @@ -3611,16 +3596,16 @@ common#:#auth_soap_use_dotnet#:#Utilizza stile NOET SOAP common#:#auth_soap_use_https#:#Utilizza HTTPS common#:#auth_soap_user_default_role_desc#:#Questo ruolo viene assegnato agli utenti SOAP creati automaticamente. common#:#auth_user_default_role#:#Ruolo di default -common#:#authenticate_ilias#:#Login to ILIAS +common#:#authenticate_ilias#:#Login ILIAS common#:#authentication_settings#:#Autenticazione common#:#author#:#Autore common#:#authoring_mode#:#Modalità di authoring common#:#authors#:#Autori common#:#autocomplete_more#:#altro common#:#available#:#Presente -common#:#awra#:#Who is online?###07 02 2020 new variable +common#:#awra#:#Chi é online? common#:#back#:#Indietro -common#:#back_to_course#:#Back to Course###29 07 2022 new variable +common#:#back_to_course#:#Back to Course common#:#back_to_crs_content#:#Indietro al Contenuto del Corso common#:#back_to_fold_content#:#Indietro al Contenuto della Cartella common#:#back_to_grp_content#:#Indietro al Contenuto del Gruppo @@ -3630,7 +3615,7 @@ common#:#basic_settings#:#Impostazioni base common#:#before#:#prima common#:#behind#:#Dietro common#:#bib_data#:#Dati bibliografici -common#:#bibl_add#:#Add Bibliography###29 07 2022 new variable +common#:#bibl_add#:#Add Bibliography###31 03 2023 new variable common#:#birthday#:#Data di nascita common#:#bkm_import#:#Importa segnalibri common#:#bkm_import_ok#:#Importati con successo %d segnalibri e %d cartelle di segnalibri. @@ -3640,7 +3625,7 @@ common#:#bm#:#Segnalibro common#:#bm_add_to_ilias#:#Aggiungi ai segnalibri ILIAS common#:#bmf#:#Cartella dei segnalibri common#:#bold#:#Grassetto -common#:#bold_action#:#Insert Bold - Click to insert bold text.###26 08 2024 new variable +common#:#bold_action#:#Insert Bold - Click to insert bold text.###30 04 2024 new variable common#:#bookings#:#Prenotazioni common#:#bookmark_added#:#Il segnalibro è stato creato. common#:#bookmark_folder_new#:#Nuova cartella di segnalibri @@ -3649,8 +3634,8 @@ common#:#bookmark_target#:#Indirizzo common#:#bookmarks#:#Segnalibri common#:#bookmarks_of#:#Segnalibri di common#:#breadcrumb_navigation#:#Navigazione breadcrumb -common#:#breadcrumbs_aria_label#:#Breadcrumbs###29 07 2022 new variable -common#:#briefcase#:#Background Tasks###29 07 2022 new variable +common#:#breadcrumbs_aria_label#:#Breadcrumbs +common#:#briefcase#:#Processi in Background common#:#btn_add#:#Aggiungi common#:#btn_back#:#Indietro common#:#btn_next#:#Continua @@ -3660,7 +3645,7 @@ common#:#btn_undelete#:#Ripristina gli oggetti common#:#buddy_allow_to_contact_me_no#:#Non riceve richieste di contatto common#:#buddy_allow_to_contact_me_yes#:#Riceve richieste di contatto common#:#building_export_file#:#Creazione di file di esportazione... -common#:#bulletlist_action#:#Insert Bulletpoint-List - Click to insert a bulletpoint-list.###26 08 2024 new variable +common#:#bulletlist_action#:#Insert Bulletpoint-List - Click to insert a bulletpoint-list.###30 04 2024 new variable common#:#by#:#con common#:#bytes#:#Byte common#:#cal_from#:#Da: @@ -3669,37 +3654,37 @@ common#:#calendar#:#Agenda common#:#cancel#:#Annulla common#:#cancel_file_upload#:#Vuoi davvero eliminare tutti i caricamenti in sospeso? common#:#cannot_find_xml#:#Non ho trovato nessun file XML. -common#:#cannot_uninstall_language_in_use#:#Non &egrave; possibile rimuovere la lingua che & -common#:#cannot_uninstall_systemlanguage#:#Non & +common#:#cannot_uninstall_language_in_use#:#Non è possibile disinstallare la lingua attualmente in uso! +common#:#cannot_uninstall_systemlanguage#:#Non è possibile disinstallare la lingua del sistema! common#:#cannot_unzip_file#:#Non posso decomprimere il file. -common#:#cant_deactivate_if_users_assigned#:#Non pu& +common#:#cant_deactivate_if_users_assigned#:#Non puoi disattivare uno stile se ci sono ancora utenti assegnati ad esso. common#:#cat#:#Contesto common#:#cat_add#:#Aggiungi contesto common#:#cat_added#:#Contesto aggiunto common#:#cat_copy_threads_info#:#Si prega di decidere quali voci di categoria devono essere copiate, collegate o persino omesse. -common#:#cat_edit#:#Propriet& +common#:#cat_edit#:#Impostazioni categoria common#:#cat_new#:#Nuovo contesto common#:#cat_wizard_page#:#Copia Categoria (Passo 2/2) common#:#categories#:#Contesti common#:#categories_imported#:#Importazione contesti completata. common#:#catr#:#Categoria Reference -common#:#catr_add#:#Add Category Link###29 07 2022 new variable -common#:#catr_edit_info#:#Please choose one category, for creating a new reference. +common#:#catr_add#:#Add Category Link###31 03 2023 new variable +common#:#catr_edit_info#:#Scegli una categoria per creare un nuovo riferimento. common#:#catr_new#:#Creare Nuovo Riferimento di Categoria -common#:#catr_settings#:#Category Link Settings###29 07 2022 new variable +common#:#catr_settings#:#Category Link Settings###31 03 2023 new variable common#:#certificate#:#Certificato -common#:#certificate_file_already_exists_error#:#The certificate file already exists in the file system.###07 02 2020 new variable -common#:#certificate_file_input_output_error#:#The certificate file was found but couldn't be deleted because of internal errors. Please contact your administrator.###07 02 2020 new variable -common#:#certificate_file_not_found_error#:#The certificate file doesn't exist in the file system anymore. Die Zertikatsdatei wurde im Dateisystem nicht mehr gefunden.###07 02 2020 new variable -common#:#certificate_persistent_option#:#Certificates of Achievements###07 02 2020 new variable -common#:#certificate_selection#:#Origin of Certificates###07 02 2020 new variable -common#:#certificate_workspace_option#:#Certificates of Personal Resources###07 02 2020 new variable -common#:#certificates#:#Certificates###29 07 2022 new variable +common#:#certificate_file_already_exists_error#:#Il file del certificato esiste già nel file system. +common#:#certificate_file_input_output_error#:#Il file del certificato è stato trovato ma non è stato possibile eliminarlo a causa di errori interni. Si prega di contattare l'amministratore. +common#:#certificate_file_not_found_error#:#Il file del certificato non esiste più nel file system. Il file del certificato non è stato più trovato nel file system. +common#:#certificate_persistent_option#:#Certificati persistenti +common#:#certificate_selection#:#Origine dei certificati +common#:#certificate_workspace_option#:#Certificati dell'area di lavoro +common#:#certificates#:#Certificates###29 06 2022 new variable common#:#change#:#Modifica -common#:#change_assignment#:#Modifica l& -common#:#change_header_title#:#Modifica l& +common#:#change_assignment#:#Cambia incarico +common#:#change_header_title#:#Modifica titolo intestazione common#:#change_owner#:#Modifica il propritario -common#:#change_sort_direction#:#Modifica la direzione dell& +common#:#change_sort_direction#:#Cambia direzione di ordinamento common#:#changeable#:#Modificabile common#:#changed_to#:#modificata in common#:#changing_loginname_not_possible_info#:#Hai modificato il tuo nome di accesso almeno alle %s. La prossima modifica può essere effettuata alle %s. @@ -3715,7 +3700,7 @@ common#:#check_languages#:#Verifica le lingue common#:#check_link#:#Verifica i collegamenti common#:#check_link_desc#:#Se abilitato, tutti i link esterni presenti in ILIAS verranno verificati se sempre attivi. common#:#check_user_accounts#:#Verifica gli utenti -common#:#check_user_accounts_desc#:#Se i job nel cron sono attivi e questa opzione & +common#:#check_user_accounts_desc#:#Se abilitato, tutti gli utenti il cui account scade verranno informati via e-mail due settimane prima. Inoltre, tutti gli utenti che non hanno confermato il proprio account dopo una registrazione con conferma via e-mail verranno eliminati. common#:#check_web_resources#:#Controlla le risorse web common#:#check_web_resources_desc#:#Se selezionato verranno controllate tutte le risorse web attive. common#:#checked#:#Verificato @@ -3725,15 +3710,15 @@ common#:#chg_ilias_password#:#Modifica Password ILIAS common#:#chg_password#:#Cambia password common#:#choose_language#:#Scegli la lingua common#:#choose_only_one_language#:#Per favore, scegli una sola lingua. -common#:#chown_warning#:#Attenzione, potresti perdere i permessi di accesso sull& +common#:#chown_warning#:#Attenzione, potresti perdere le autorizzazioni di accesso a questo oggetto dopo aver cambiato il proprietario. common#:#chta_edit_permission#:#Impostazioni di modifica autorizzazione -common#:#chta_read#:#Read access to Chatroom Administration -common#:#chta_visible#:#Chatroom Administration is visible -common#:#chta_write#:#Edit Chatroom Administration -common#:#chtr_copy#:#Copy Chatroom +common#:#chta_read#:#Accesso in lettura a Chatroom Administration +common#:#chta_visible#:#L'amministrazione della chatroom è visibile +common#:#chta_write#:#Modifica amministrazione chatroom +common#:#chtr_copy#:#Copia chatroom common#:#chtr_import#:#Importa chat room -common#:#city#:#Citta' -common#:#cleaned_file#:#Il file & +common#:#city#:#Città +common#:#cleaned_file#:#Il file è stato pulito. common#:#cleaning_failed#:#Svuotamento del file fallito. common#:#clear#:#Annulla common#:#clear_clipboard#:#Cartella appunti vuota @@ -3749,17 +3734,17 @@ common#:#clientlist_public_access#:#Accesso pubblico common#:#clientlist_start_page#:#Inizio pagina common#:#clipboard#:#Cartella appunti common#:#close#:#Chiudi -common#:#cmix#:#Object xAPI/cmi5###26 08 2024 new variable +common#:#cmix#:#Object xAPI/cmi5###31 03 2023 new variable common#:#cnt_new#:#(%s Nuovo) common#:#collapse#:#Collasso common#:#collapse_all#:#Comprimi tutto -common#:#collapse_content#:#Collapse Content###29 07 2022 new variable +common#:#collapse_content#:#Collapse Content common#:#collapsed#:#Compresso -common#:#column_selection#:#Column Selection###28 10 2024 new variable +common#:#column_selection#:#Column Selection###28 11 2025 new variable common#:#columns#:#Colonne common#:#comma_separated#:#Separati da virgola common#:#comment#:#Commento -common#:#comments#:#Comments###29 07 2022 new variable +common#:#comments#:#Comments common#:#compose#:#Scrivi common#:#concurrent_uploads#:#Numero dei caricamenti attuali common#:#concurrent_uploads_info#:#Definisce il numero di file che possono essere caricati contemporaneamente per ogni processo di caricamento. @@ -3768,25 +3753,25 @@ common#:#cond_ref_shared#:#Condizioni preliminari condivise per tutti i collegam common#:#cond_ref_unique#:#Condizioni preliminari uniche per i collegamenti common#:#condition#:#Condizione common#:#condition_accredited_or_passed#:#Accreditato o superato -common#:#condition_already_assigned#:#L& -common#:#condition_circle_created#:#Questa associazione non & +common#:#condition_already_assigned#:#Oggetto già assegnato. +common#:#condition_circle_created#:#Questa associazione non è possibile, poiché gli oggetti sarebbero interdipendenti. common#:#condition_deleted#:#Condizione eliminata. common#:#condition_finished#:#Terminato common#:#condition_not_finished#:#Non terminato common#:#condition_passed#:#Superato common#:#condition_select_object#:#Per favore, scegli almeno un oggetto. common#:#conditions_updated#:#Condizioni salvate -common#:#configuration#:#Configuration###29 10 2025 new variable +common#:#configuration#:#Configuration###28 11 2025 new variable common#:#confirm#:#Conferma common#:#confirm_delete_parameter#:#Vuoi veramente CANCELLARE il parametro? common#:#confirmation#:#Conferma common#:#conflict_handling#:#Gestione conflitto -common#:#cont_iim_content_popups_info#:#Content popups appear, when the user clicks on interactive parts of the base image. On this screen you only define the popups. Their content can be edited on the main page editing screen. -common#:#cont_iim_create_info#:#Please upload the main underlying picuture for the interactive image. -common#:#cont_iim_overlay_info#:#Overlay images are used to alter (e.g. highlight) parts of the base image when the mouse hovers over them. After uploading the images, you can select them in the "Triggers" tab. +common#:#cont_iim_content_popups_info#:#Vengono visualizzati popup di contenuto quando l'utente fa clic su parti interattive dell'immagine di base. In questa schermata vengono definiti solo i popup. Il loro contenuto può essere modificato nella schermata di modifica della pagina principale. +common#:#cont_iim_create_info#:#Carica l'immagine principale sottostante per l'immagine interattiva. +common#:#cont_iim_overlay_info#:#Le immagini sovrapposte vengono utilizzate per modificare (ad esempio evidenziare) parti dell'immagine di base quando il mouse passa sopra di esse. Dopo aver caricato le immagini, puoi selezionarle nella scheda "Trigger". common#:#contact#:#Contatto common#:#contact_data#:#Dati personali -common#:#contact_sysadmin#:#Contact System Administration +common#:#contact_sysadmin#:#Contatta l'amministrazione del sistema common#:#container#:#Contenitore common#:#container_no_items#:#Nessun materiale disponibile common#:#content#:#Contenuto @@ -3796,7 +3781,7 @@ common#:#context#:#Contesto common#:#continue#:#continua common#:#continue_work#:#Continua common#:#contra#:#Contro -common#:#copa#:#Content Page###26 08 2024 new variable +common#:#copa#:#Content Page###30 04 2024 new variable common#:#copy#:#Copia common#:#copyChapter#:#Copia common#:#copyPage#:#Copia @@ -3804,13 +3789,13 @@ common#:#copy_all#:#Copia tutto common#:#copy_n_of_suffix#:#- Copia (%1$s) common#:#copy_of#:#Copia di common#:#copy_of_suffix#:#- Copia -common#:#copy_perma_link#:#Copy link to clipboard###29 10 2025 new variable +common#:#copy_perma_link#:#Copy link to clipboard###10 12 2024 new variable common#:#copy_selected_items#:#Copia common#:#count#:#Conta -common#:#counter_novelty#:#News###26 08 2024 new variable -common#:#counter_status#:#Status###26 08 2024 new variable +common#:#counter_novelty#:#News###30 04 2024 new variable +common#:#counter_status#:#Status###30 04 2024 new variable common#:#country#:#Nazione -common#:#country_free_text#:#Country (Free Text Input +common#:#country_free_text#:#Paese (inserimento di testo libero) common#:#country_selection#:#Paese (Selezione a discesa) common#:#course#:#Corso common#:#courses#:#Corsi @@ -3820,25 +3805,25 @@ common#:#create_export_file#:#Crea file di export common#:#create_stylesheet#:#Crea foglio di stile common#:#created#:#Data di creazione common#:#cron_forum_notification#:#Invia notifiche al forum -common#:#cron_forum_notification_crob_desc#:#If enabled, all users who have enabled forum notifications will get a daily mail about all new posts but no immediate notification for each submitted posting. -common#:#cron_forum_notification_disabled#:#Can't be disabled when the Cron Job is active.###26 08 2024 new variable +common#:#cron_forum_notification_crob_desc#:#Se abilitato, tutti gli utenti che hanno abilitato le notifiche del forum riceveranno una mail giornaliera su tutti i nuovi post ma nessuna notifica immediata per ogni post inviato. +common#:#cron_forum_notification_disabled#:#Can't be disabled when the Cron Job is active.###30 04 2024 new variable common#:#cron_jobs#:#Cron job common#:#cron_lucene_index#:#Aggiorna l'indice di ricerca di Lucene -common#:#cron_lucene_index_info#:#Se selezionato, l& -common#:#cron_mail_notification#:#Send Mail Notifications +common#:#cron_lucene_index_info#:#Se abilitato, l'indice di ricerca lucene verrà aggiornato. Configura il server lucene in "Amministrazione -> Cerca". +common#:#cron_mail_notification#:#Invia notifica email common#:#cron_mail_notification_cron#:#regolarmente per cron job common#:#cron_mail_notification_desc#:#Se abilitati, tutti gli altri che vogliono essere informati riguardo a nuove email otterranno notifiche via email esterna. common#:#cron_mail_notification_message#:#Invia notifiche mail con messaggi di posta common#:#cron_mail_notification_message_info#:#Se abilitato, tutti gli utenti ricevono notifiche con messaggio di posta elettronica completo tramite posta esterna. common#:#cron_mail_notification_never#:#mai -common#:#cron_users_without_login_del_create_date_thr#:#Thresholt###07 02 2020 new variable -common#:#cron_users_without_login_del_create_date_thr_info#:#All user accounts created before the defined threshold will be taken into consideration.###07 02 2020 new variable -common#:#cron_users_without_login_del_role_whitelist#:#Included Roles###07 02 2020 new variable -common#:#cron_users_without_login_del_role_whitelist_info#:#The deletion will only processed for users assigned to at least one of the selected roles###07 02 2020 new variable +common#:#cron_users_without_login_del_create_date_thr#:#Soglia +common#:#cron_users_without_login_del_create_date_thr_info#:#Tutti gli account utente la cui creazione è durata più a lungo del valore di soglia qui definito, vengono considerati per l'eliminazione. +common#:#cron_users_without_login_del_role_whitelist#:#Ruoli considerati +common#:#cron_users_without_login_del_role_whitelist_info#:#Verranno eliminati solo gli utenti con uno dei ruoli globali selezionati. Se un utente ha uno dei ruoli non selezionati, l'account utente permane. common#:#cronjob_last_start#:#Ultimo avvio del cron job common#:#cronjob_last_start_unknown#:#Indeterminato common#:#crs#:#Corso -common#:#crs_activation_start_invalid#:#The start and the end time is not valid. +common#:#crs_activation_start_invalid#:#L'inizio e l'ora di fine non sono validi. common#:#crs_add#:#Aggiungi corso common#:#crs_added#:#Corso aggiunto common#:#crs_archives#:#Corsi archiviati @@ -3861,39 +3846,39 @@ common#:#crs_status_blocked#:#[Accesso negato] common#:#crs_status_pending#:#[In attesa della registrazione] common#:#crs_subscribers_assigned#:#Nuovo utente iscritto common#:#crs_title#:#Titolo del Corso -common#:#crs_unsubscribe#:#Unsubscribe +common#:#crs_unsubscribe#:#Annulla l'iscrizione common#:#crs_wizard_page#:#Copia Corso (Passo 2/2) common#:#crsr#:#Riferimento al Corso -common#:#crsr_add#:#Add Course Link###29 07 2022 new variable -common#:#crsr_edit_info#:#Please choose one course, for creating a new reference. +common#:#crsr_add#:#Add Course Link###31 03 2023 new variable +common#:#crsr_edit_info#:#Scegli un corso per creare un nuovo riferimento. common#:#crsr_new#:#Creare Riferimento di Corso -common#:#crsr_settings#:#Course Link Settings###26 08 2024 new variable +common#:#crsr_settings#:#Course Link Settings###31 03 2023 new variable common#:#csv_export#:#Esportazione CSV common#:#current_ip#:#IP attuale: -common#:#current_ip_alert#:#Nota: se viene specificato un indirizzo ip errato, non sarai pi& +common#:#current_ip_alert#:#Avviso: se si inserisce un IP errato, non sarà più possibile accedere al sistema con questo profilo. common#:#current_password#:#Password attuale -common#:#current_user_avatar#:#Your User Avatar###29 07 2022 new variable +common#:#current_user_avatar#:#Il tuo Avatar common#:#currently_used_disk_space#:#Spazio sul disco attualmente utilizzato -common#:#customize_page#:#Customize Page###28 10 2024 new variable +common#:#customize_page#:#Customize Page###28 11 2025 new variable common#:#cut#:#Taglia common#:#cutPage#:#Taglia common#:#daily#:#giornaliero common#:#database#:#Database common#:#database_version#:#Versione attuale del database -common#:#dataset#:#Dataset +common#:#dataset#:#Iscrizione common#:#date#:#Data -common#:#date_time#:#Date and Time###29 10 2025 new variable +common#:#date_time#:#Date and Time###28 11 2025 new variable common#:#dateplaner#:#Agenda common#:#day#:#Giorno common#:#days#:#Giorni common#:#db_host#:#Macchina con il database common#:#db_name#:#Nome del database -common#:#db_need_update#:#Occorre aggiornare il database! +common#:#db_need_update#:#Database needs an update!###30 04 2024 new variable common#:#db_pass#:#Password del database common#:#db_type#:#Tipo del database common#:#db_user#:#Utente del database common#:#db_version#:#Versione database -common#:#dd_mm_yyyy#:#DD.MM.YYYY +common#:#dd_mm_yyyy#:#GG.MM.AAAA common#:#deactivate#:#Imposta inattivo common#:#decrease_attempts#:#Tentativi - 1 common#:#def_repository_view#:#Vista risorse predefinite @@ -3911,65 +3896,65 @@ common#:#defaults#:#Default common#:#delete#:#Elimina common#:#delete_existing_file#:#Cancella un file Esistente common#:#delete_inactivated_user_accounts#:#Elimina account utente disattivi -common#:#delete_inactivated_user_accounts_desc#:#If enabled, user accounts will be deleted depending on the date of inactivation. +common#:#delete_inactivated_user_accounts_desc#:#Se abilitato, gli account utente verranno eliminati in base alla data di inattivazione. common#:#delete_inactivated_user_accounts_include_roles#:#Ruoli inclusi common#:#delete_inactivated_user_accounts_include_roles_desc#:#Definisce i ruoli che parteciperanno all’eliminazione. -common#:#delete_inactivated_user_accounts_period#:#Days past since the inactivation -common#:#delete_inactivated_user_accounts_period_desc#:#Deletion will be executed if this period of time has past since the inactivation. -common#:#delete_inactive_user_accounts#:#Delete user accounts +common#:#delete_inactivated_user_accounts_period#:#Giorni trascorsi dall'inattivazione +common#:#delete_inactivated_user_accounts_period_desc#:#La cancellazione verrà eseguita se questo periodo di tempo è trascorso dall'inattivazione. +common#:#delete_inactive_user_accounts#:#Elimina account utente common#:#delete_inactive_user_accounts_desc#:#Se abilitato, gli account utente verranno eliminati a seconda della data dell'ultimo accesso. common#:#delete_inactive_user_accounts_include_roles#:#Ruoli inclusi -common#:#delete_inactive_user_accounts_include_roles_desc#:#Definisce i ruoli che parteciperanno all’eliminazione. -common#:#delete_inactive_user_accounts_period#:#Days past since the last login -common#:#delete_inactive_user_accounts_period_desc#:#Deletion will be executed if this period of time has past since the last login. -common#:#delete_parameter#:#Cancella Parameter +common#:#delete_inactive_user_accounts_include_roles_desc#:#Only ILIAS accounts assigned to one of the selected roles will be deleted.###30 04 2024 new variable +common#:#delete_inactive_user_accounts_period#:#Giorni trascorsi dall'ultimo accesso +common#:#delete_inactive_user_accounts_period_desc#:#La cancellazione verrà eseguita se questo periodo di tempo è trascorso dall'ultimo accesso. +common#:#delete_parameter#:#Cancella Parametro common#:#delete_selected_items#:#Elimina oggetti selezionati common#:#deleted#:#Eliminato -common#:#deleted_user#:#L& +common#:#deleted_user#:#L'utente è stato cancellato common#:#deleted_users#:#Utenti cancellati -common#:#deletion_notification#:#"%s" has canceled the attendance of session "%s".###07 02 2020 new variable -common#:#deliver#:#Invia l& -common#:#deny_usr_agreement#:#Do Not Accept Terms of Service?###29 07 2022 new variable -common#:#deny_usr_agreement_btn#:#Do Not Accept###29 07 2022 new variable +common#:#deletion_notification#:#"%s" has canceled the attendance of session "%s". +common#:#deliver#:#Spedire +common#:#deny_usr_agreement#:#Do not accept terms of service? +common#:#deny_usr_agreement_btn#:#Non Accettare common#:#department#:#Dipartimento common#:#desc#:#Descrizione common#:#description#:#Descrizione common#:#desired_password#:#Nuova password common#:#details#:#Dettagli -common#:#didactic_template#:#Didactic Template###29 07 2022 new variable +common#:#didactic_template#:#Didactic Template###31 03 2023 new variable common#:#disable#:#disabilita common#:#disable_check#:#Disabilita controllo common#:#disable_ext_lang_maint#:#Disabilita Manutenzione Estesa common#:#disable_hide_user_toggle#:#Il membro è autorizzato per disattivare common#:#disabled#:#Disabilitato -common#:#disclose#:#Disclose###29 07 2022 new variable -common#:#dislike#:#Dislike +common#:#disclose#:#Disclose +common#:#dislike#:#Non mi piace common#:#domain#:#Dominio -common#:#down#:#Gi& +common#:#down#:#Giù common#:#download#:#Scarica common#:#download_all_returned_files#:#Download di tutti i file restituiti common#:#download_link#:#Scarica collegamento common#:#download_multiple_objects#:#Scarica più oggetti common#:#download_selected_items#:#Scarica common#:#downloading_settings#:#Impostazioni per il download -common#:#dpro_accept_usr_agreement#:#Accept Declaration of Data Protection?###26 08 2024 new variable -common#:#dpro_accept_usr_agreement_intro#:#There is a new Declaration of Data Protection. You need to accept it before proceeding with the use of ILIAS. Read the following document carefully and give your consent or dissent at the bottom of the page.###26 08 2024 new variable -common#:#dpro_agreed_on#:#DoDP agreed to on###29 10 2025 new variable -common#:#dpro_force_accept_usr_agreement#:#You must accept the Declaration of Data Protection!###26 08 2024 new variable -common#:#dpro_no_agreement_description#:#There is currently no Declaration of Data Protection document available for this installation. Please contact the <a href="%1$s">system administrator</a>.###26 08 2024 new variable -common#:#dpro_refuse_acceptance#:#Refuse to Accept the Declaration of Data Protection###26 08 2024 new variable -common#:#dpro_usr_agreement#:#Declaration of Data Protection###26 08 2024 new variable -common#:#dpro_usr_agreement_footer_intro#:#You have declared your consent to this Declaration of Data Protection.###26 08 2024 new variable -common#:#dpro_withdraw_consent_description#:#Withdraw your consent to our Declaration of Data Protection here.###26 08 2024 new variable -common#:#dpro_withdraw_consent_description_external#:#Please return to your ILIAS installation and log in again to complete the process of withdrawing your consent to the Declaration of Data Protection.###26 08 2024 new variable -common#:#dpro_withdraw_consent_description_internal#:#Please log in again to complete the process of withdrawing your consent to the Declaration of Data Protection.###26 08 2024 new variable -common#:#dpro_withdraw_consent_header#:#Withdraw to Consent of Declaration of Data Protection###26 08 2024 new variable -common#:#dpro_withdraw_consent_info#:#Withdraw your consent to our Declaration of Data Protection.###26 08 2024 new variable -common#:#dpro_withdraw_consent_info_external#:#Please contact the administrator of your authentication system and inform them of your intention to withdraw your consent to the Declaration of Data Protection.###26 08 2024 new variable +common#:#dpro_accept_usr_agreement#:#Accept Declaration of Data Protection?###30 04 2024 new variable +common#:#dpro_accept_usr_agreement_intro#:#There is a new Declaration of Data Protection. You need to accept it before proceeding with the use of ILIAS. Read the following document carefully and give your consent or dissent at the bottom of the page.###30 04 2024 new variable +common#:#dpro_agreed_on#:#DoDP agreed to on###01 04 2025 new variable +common#:#dpro_force_accept_usr_agreement#:#You must accept the Declaration of Data Protection!###30 04 2024 new variable +common#:#dpro_no_agreement_description#:#There is currently no Declaration of Data Protection document available for this installation. Please contact the <a href="%1$s">system administrator</a>.###30 04 2024 new variable +common#:#dpro_refuse_acceptance#:#Refuse to Accept the Declaration of Data Protection###30 04 2024 new variable +common#:#dpro_usr_agreement#:#Declaration of Data Protection###30 04 2024 new variable +common#:#dpro_usr_agreement_footer_intro#:#You have declared your consent to this Declaration of Data Protection.###30 04 2024 new variable +common#:#dpro_withdraw_consent_description#:#Withdraw your consent to our Declaration of Data Protection here.###30 04 2024 new variable +common#:#dpro_withdraw_consent_description_external#:#Please return to your ILIAS installation and log in again to complete the process of withdrawing your consent to the Declaration of Data Protection.###30 04 2024 new variable +common#:#dpro_withdraw_consent_description_internal#:#Please log in again to complete the process of withdrawing your consent to the Declaration of Data Protection.###30 04 2024 new variable +common#:#dpro_withdraw_consent_header#:#Withdraw to Consent of Declaration of Data Protection###30 04 2024 new variable +common#:#dpro_withdraw_consent_info#:#Withdraw your consent to our Declaration of Data Protection.###30 04 2024 new variable +common#:#dpro_withdraw_consent_info_external#:#Please contact the administrator of your authentication system and inform them of your intention to withdraw your consent to the Declaration of Data Protection.###30 04 2024 new variable common#:#drafts#:#Bozze common#:#drag_file_here#:#Trascina e rilascia il tuo file qui common#:#drag_files_here#:#Trascina e rilascia i tuoi file qui -common#:#drag_handle#:#Draggable element###29 10 2025 new variable +common#:#drag_handle#:#Draggable element###28 11 2025 new variable common#:#drop_files_on_repo_obj_info#:#Sposta qui i file per caricali in quest’oggetto. common#:#edit#:#Modifica common#:#edit_assignments#:#Modifica assegnazioni @@ -3981,28 +3966,28 @@ common#:#edit_operations#:#Modifica le operazioni common#:#edit_page#:#Modifica Pagina common#:#edit_page_content#:#Modfiica il Contenuto della Pagina common#:#edit_page_meta#:#Modifica metadati pagina -common#:#edit_properties#:#Propriet& +common#:#edit_properties#:#Modifica proprietà common#:#edit_stylesheet#:#Modifica lo stile common#:#edited_on#:#Modificato su common#:#editor#:#Editor common#:#email#:#eMail -common#:#email_not_valid#:#L& +common#:#email_not_valid#:#L'indirizzo e-mail inserito non è valido! common#:#enable#:#Abilita common#:#enable_anonymous_fora#:#Consenti pubblicazione con pseudonimo -common#:#enable_anonymous_fora_desc#:#If this option is disabled, the feature "Posting with pseudonym" is not available in forums anymore. +common#:#enable_anonymous_fora_desc#:#Se questa opzione è disabilitata, la funzione "Pubblicazione con pseudonimo" non è più disponibile nei forum. common#:#enable_calendar#:#Abilita l'agenda -common#:#enable_comments_export#:#Enable Comments Export###29 07 2022 new variable +common#:#enable_comments_export#:#Enable Comments Export common#:#enable_course_group_notifications#:#Mail giornaliere per le novità sui gruppi e i corsi common#:#enable_course_group_notifications_desc#:#Se abilitato, i partecipanti possono sottoscrivere un riepilogo giornaliero delle novità. common#:#enable_custom_icons#:#Abilita icone personalizzate -common#:#enable_custom_icons_info#:#Questo consente di definire icone personalizzate per singole categorie, corsi e gruppi. Le sezioni con le propriet& +common#:#enable_custom_icons_info#:#Ciò consente di definire icone personalizzate per singole categorie, corsi e gruppi. La sezione delle proprietà di categorie, corsi e gruppi fornirà una finestra di caricamento delle immagini. common#:#enable_dnd_upload#:#Abilita il caricamento trascina e rilascia common#:#enable_dnd_upload_info#:#I file possono essere caricati con il trascinamento della sezione dal computer locale se abilitato. common#:#enable_download_folder#:#Abilita le cartelle per il download common#:#enable_download_folder_info#:#Consenti di scaricare una directory incluse le sottodirectory come zip file. -common#:#enable_export_scorm_desc#:#allow Export of User Data of SCORM-Learning Modules +common#:#enable_export_scorm_desc#:#consentire l'esportazione dei dati utente dei moduli di apprendimento SCORM common#:#enable_fora_statistics#:#Abilita le statistiche dei forum -common#:#enable_fora_statistics_desc#:#Se disabilitato, nessuno potr& +common#:#enable_fora_statistics_desc#:#Se disabilitato, nessuno è in grado di accedere alle statistiche del forum. common#:#enable_hide_user_toggle#:#Il membro non è autorizzato per disattivare common#:#enable_multi_download#:#Consenti “Scarica più oggetti” common#:#enable_multi_download_info#:#Consente di selezionare più cartelle/file per scaricarli come archivio zip. @@ -4012,66 +3997,66 @@ common#:#enable_preview_info#:#Consentire questa opzione per visualizzare le imm common#:#enable_repository_dnd_upload#:#Abilita nel repository common#:#enable_repository_dnd_upload_info#:#Consente di trascinare i file dal computer direttamente su un oggetto nel repository per avviare il caricamento dei file in questo oggetto. common#:#enable_sahs_protocol_data#:#Attivazione dei dati di protocollo -common#:#enable_sahs_protocol_data_desc#:#Show Protocol Data (SCORM/AICC) -common#:#enable_search_engine#:#Open Public Area for Internet Search Engines (e.g Google). +common#:#enable_sahs_protocol_data_desc#:#Mostra dati protocollo (SCORM / AICC) +common#:#enable_search_engine#:#Apri l'area pubblica per i motori di ricerca di Internet (ad esempio Google). common#:#enable_trash#:#Abilita il cestino common#:#enable_trash_info#:#Se abilitati, gli oggetti cancellati vengono spostati nel cestino e possono essere recuperati dopo. Quando si disattiva questa opzione gli Oggetti cancellati verranno rimossi definitivamente dal Sistema! common#:#enable_webdav#:#Abilita l'accesso WebDAV common#:#enable_webdav_info#:#Consenti ai client WebDAV di accedere al repository come webfolder. Gli utenti possono aprire i webfolders utilizzando l'azione "open as webfolder" nel repository, oppure inserende il seguente indirizzo nel client WebDAV: <a href="%1$s" folder="%1$s">%1$s</a> common#:#enabled#:#Abilitato -common#:#enlarge#:#Enlarge###28 10 2024 new variable +common#:#enlarge#:#Enlarge###28 11 2025 new variable common#:#enter_in_mb_desc#:#Inserisci un valore in MB. common#:#enter_new_name#:#Si prega di digitare un nome -common#:#entered_notification#:#"%s" has joined the session "%s".###07 02 2020 new variable -common#:#entry_status#:#Entry status###07 02 2020 new variable +common#:#entered_notification#:#"%s" è entrato nella sessione "%s". +common#:#entry_status#:#Status iscrizione common#:#err_1_param#:#Solo 1 parametro! common#:#err_2_param#:#Solo 2 parametri! -common#:#err_auth_apache_failed#:#The authentication has failed. Maybe you have no valid user certificate or your smartcard is not inserted. +common#:#err_auth_apache_failed#:#L'autenticazione non è riuscita. Forse non hai un certificato utente valido o la tua smart card non è inserita. common#:#err_auth_ldap_no_ilias_user#:#Accesso non riuscito. Autenticazione LDAP riuscita, ma non esiste alcun utente ILIAS corrispondente. Si prega di contattare il proprio amministratore di sistema. common#:#err_auth_mode_inactive#:#Il tuo metodo di autenticazione è disattivato. common#:#err_auth_soap_no_ilias_user#:#Accesso non riuscito. Autenticazione SOAP riuscita, ma non esiste alcun utente ILIAS corrispondente. Si prega di contattare il proprio amministratore di sistema. common#:#err_check_input#:#Le impostazioni non possono essere salvate. Controllare il proprio ingresso. common#:#err_count_param#:#Causa: errato numero dei parametri. -common#:#err_disabled#:#Account creation via Shibboleth has been disabled. Please contact the system administrator for further information.###28 10 2024 new variable -common#:#err_double_entries#:#Reason: Duplicate Entries###26 08 2024 new variable +common#:#err_disabled#:#Account creation via Shibboleth has been disabled. Please contact the system administrator for further information.###28 11 2025 new variable +common#:#err_double_entries#:#Reason: Duplicate Entries###28 11 2023 new variable common#:#err_in_line#:#Errore nella linea -common#:#err_inactive#:#Questo utente non & +common#:#err_inactive#:#Questo account non è stato attivato. Si prega di contattare l'amministratore di sistema per l'accesso. common#:#err_inactive_login_attempts#:#Il tuo account è stato disattivato a causa dei molti tentativi di accesso falliti. Clicca su “Contatta supporto tecnico” a piè di pagina per comunicare all’amministratore la necessità di riattivare il proprio account. common#:#err_invalid_port#:#Porta non valida -common#:#err_no_cookies#:#Verifica l& +common#:#err_no_cookies#:#Abilita i cookie di sessione nel tuo browser! common#:#err_no_langfile_found#:#Non ho trovato il file della lingua! common#:#err_no_param#:#Manca il parametro! common#:#err_over_3_param#:#Ci sono piu' di 3 parametri! common#:#err_role_not_assignable#:#Non puoi assegnare utenti a questo ruolo in questo caso -common#:#err_session_expired#:#La sessione & -common#:#err_valid_login_account_creation_disabled#:#Authentication succeeded, but the creation of new user accounts is currently disabled. Please contact your system administrator.###29 07 2022 new variable +common#:#err_session_expired#:#La tua sessione è scaduta! +common#:#err_valid_login_account_creation_disabled#:#L'autenticazione è andata a buon fine, ma la creazione di nuovi account utente non è attivata. Si prega di contattare l'amministratore di sistema. common#:#err_wrong_header#:#Causa: errata intestazione. common#:#err_wrong_login#:#Tentativo di accesso errato common#:#err_wrong_password#:#Password errata common#:#error#:#Errore common#:#error_empty_file_or_folder#:#La dimensione del file è 0 byte o è una cartella. -common#:#error_extraction_failed#:#The extraction of the archive and its directories failed. Probably because you don't have the rights to create folders or categories within this object. -common#:#error_parser#:#Errore nell& -common#:#error_upload_was_zero_bytes#:#The upload failed as this is a folder, the file size is 0 bytes or the file was renamed meanwhile. -common#:#etal_talks#:#Talks +common#:#error_extraction_failed#:#L'estrazione dell'archivio e delle sue directory non è riuscita. Probabilmente perché non hai i diritti per creare cartelle o categorie all'interno di questo oggetto. +common#:#error_parser#:#Errore durante l'avvio del parser. +common#:#error_upload_was_zero_bytes#:#Caricamento non riuscito poiché si tratta di una cartella, la dimensione del file è 0 byte o il file è stato rinominato nel frattempo. +common#:#etal_talks#:#Talks###31 03 2023 new variable common#:#event_ass_materials_prop#:#Materiali sessioni common#:#event_assign_files#:#Assegnazione file common#:#exc#:#Esercitazione common#:#exc_add#:#Aggiungi esercitazione common#:#exc_added#:#Esercitazione aggiunto -common#:#exc_date_not_valid#:#La data non & +common#:#exc_date_not_valid#:#La data non è valida common#:#exc_deassign_members#:#Rimuovi membro(i) common#:#exc_download_files#:#Scarica file common#:#exc_edit#:#Creata nuova esercitazione -common#:#exc_edit_exercise#:#Modifica l& +common#:#exc_edit_exercise#:#Modifica esercizio common#:#exc_edit_until#:#Data scadenza common#:#exc_exercise_sent#:#Invia esercizio -common#:#exc_files#:#Scegli il file +common#:#exc_files#:#File common#:#exc_files_returned#:#File restituiti -common#:#exc_instruction#:#Istruzioni per l& +common#:#exc_instruction#:#Istruzioni di lavoro common#:#exc_last_submission#:#Ultima presentazione -common#:#exc_member_of_crs_grp#:#Member in Course/Group###26 08 2024 new variable -common#:#exc_members_already_assigned#:#Questi utenti sono gi& +common#:#exc_member_of_crs_grp#:#Member in Course/Group###30 04 2024 new variable +common#:#exc_members_already_assigned#:#Questi utenti sono già assegnati al compito. common#:#exc_members_assigned#:#Membri aggiunti common#:#exc_members_comments_saved#:#I commenti dell'esercizio per l'utente selezionato sono stati salvati common#:#exc_new#:#Nuova esercitazione @@ -4080,20 +4065,20 @@ common#:#exc_obj#:#Esercitazione common#:#exc_save_changes#:#Salva common#:#exc_schedule#:#Programma common#:#exc_select_one_file#:#Per favore, scegli un file solamente. -common#:#exc_sent#:#L& -common#:#exc_sent_at#:#Sent at <br />%s +common#:#exc_sent#:#L'esercizio è stato inviato agli utenti selezionati +common#:#exc_sent_at#:#Inviato a <br />%s common#:#exc_status#:#Stato common#:#exc_status_saved#:#Esercitazione aggiornata common#:#exc_submission#:#Presentazione -common#:#exc_time_over_short#:#time is over +common#:#exc_time_over_short#:#il tempo è finito common#:#exc_time_to_send#:#Tempo di lavoro rimanente -common#:#exc_upload_error#:#Errore nell& +common#:#exc_upload_error#:#Errore durante il caricamento del file common#:#excs#:#Esercitazioni common#:#execute#:#Esegui -common#:#exercise_time_over#:#E& +common#:#exercise_time_over#:#Il tempo assegnato per il completamento di questo esercizio è finito. I file non possono più essere inviati! common#:#expand#:#Espandi common#:#expand_all#:#Espandi tutto -common#:#expand_content#:#Expand Content###29 07 2022 new variable +common#:#expand_content#:#Espandi contenuto common#:#expanded#:#Esteso common#:#export#:#Esporta common#:#export_format#:#Esporta formato @@ -4101,11 +4086,11 @@ common#:#export_html#:#Esporta come file html common#:#ext_cat_settings#:#Modifica Impostazioni per le Categorie Avanzate common#:#ext_link#:#Collegamento common#:#extracting#:#Estrazione... -common#:#eyeclosed#:#Eye Closed - Click to hide the input's contents###29 07 2022 new variable -common#:#eyeopened#:#Eye Open - Click to reveal the input's contents###29 07 2022 new variable +common#:#eyeclosed#:#Occhio chiuso: fai clic per nascondere il contenuto del campo di input +common#:#eyeopened#:#Occhio aperto: fai clic per mostrare il contenuto del campo di input common#:#failure_message#:#Messaggio di errore common#:#fax#:#Fax -common#:#feed#:#News Feed +common#:#feed#:#Feed Web common#:#feedback#:#Risposta common#:#field_name#:#Nome del campo common#:#field_type#:#Tipo del campo @@ -4119,29 +4104,29 @@ common#:#file_confirm_delete_versions#:#Sei sicuro di voler eliminare la seguent common#:#file_created#:#Un nuovo file e' stato aggiunto. common#:#file_edit#:#Modificare un file common#:#file_info#:#Informazioni sul file -common#:#file_is_infected#:#Il file & +common#:#file_is_infected#:#Il file è infetto da un virus. common#:#file_no_valid_file_type#:#Questo tipo di file non è consentito. common#:#file_not_found#:#File non trovato -common#:#file_not_found_sec#:#This file cannot be found in ILIAS or has been blocked due to security reasons.###29 07 2022 new variable +common#:#file_not_found_sec#:#This file cannot be found in ILIAS or has been blocked due to security reasons.###09 03 2022 new variable common#:#file_not_valid#:#File non valido! common#:#file_notice#:#Per favore, ricordati che la dimensione massima del file deve essere di -common#:#file_objects#:#File Objects###29 07 2022 new variable +common#:#file_objects#:#File Objects common#:#file_rollback#:#Rendi questa la versione attuale common#:#file_rollback_done#:#La versione file %s adesso è la versione attuale. common#:#file_rollback_select_exact_one#:#È possibile selezionare solo una versione del file per renderla la versione corrente. common#:#file_some_invalid_file_types_removed#:#Alcuni tipi di file non sono consentiti e devono essere rimossi. common#:#file_suffix_repl#:#Sostituzione del suffisso di caricamento dei file common#:#file_suffix_repl_info#:#I file terminano con questi suffissi (separati da virgole) saranno rinominati con il suffisso ".sec" se caricati su web. Cio' avviene di default per i seguenti suffissi: -common#:#file_system_clean_temp_dir_cron#:#Clean temp directory###29 07 2022 new variable -common#:#file_system_clean_temp_dir_cron_info#:#This job cleans the ILIAS temp-directory of files, which are older than 10 days. This counteracts the accumulation of unused files and therefore prevents an increased use of disk space by the temp directory.###29 07 2022 new variable +common#:#file_system_clean_temp_dir_cron#:#Clean temp directory###31 03 2023 new variable +common#:#file_system_clean_temp_dir_cron_info#:#This job cleans the ILIAS temp-directory of files, which are older than 10 days. This counteracts the accumulation of unused files and therefore prevents an increased use of disk space by the temp directory.###31 03 2023 new variable common#:#file_updated#:#Il file è stato aggiornato. common#:#file_upload_pending#:#File in attesa common#:#file_valid#:#File valido! common#:#file_version#:#Versione file common#:#file_version_create#:#Versione iniziale -common#:#file_version_intermediate_version#:#Intermediate Version###26 08 2024 new variable +common#:#file_version_intermediate_version#:#Intermediate Version###30 04 2024 new variable common#:#file_version_new_version#:#Nuova versione -common#:#file_version_published_version#:#Published Version###26 08 2024 new variable +common#:#file_version_published_version#:#Published Version###30 04 2024 new variable common#:#file_version_replace#:#Tutte le versioni sostituite common#:#file_version_rollback#:#Ripristino alla versione %s da %s common#:#file_versions_deleted#:#Le versioni dei file selezionati sono state eliminate correttamente. @@ -4149,12 +4134,12 @@ common#:#filename#:#Nome file common#:#filename_extension_missing#:#Manca l'estensione del Filename common#:#filename_hidden_backup_file#:#File di backup nascosto common#:#filename_hidden_unix_file#:#File Unix nascosto -common#:#filename_interoperability#:#Interoperabilità +common#:#filename_interoperability#:#Interopercompetenze common#:#filename_special_characters#:#Il carattere "/" non è accettato nel nome del file perche' non visibile nelle directory web common#:#filename_special_filename#:#oggetti con nome . e .. non sono visibile nelle cartelle common#:#filename_visibility#:#Visibilità common#:#filename_windows_empty_extension#:#A causa del punto alla fine del nome "." , questo oggetto non è visibile nella directory web di Windows -common#:#filename_windows_special_characters#:#\/:*?"<>| are not allowed in Windows filenames +common#:#filename_windows_special_characters#:#\/:*?"<>| non sono ammessi nei nomi di file di Windows common#:#filename_windows_webdav_issue#:#Il simbolo common#:#files#:#File common#:#filesize#:#Grandezza file @@ -4182,27 +4167,27 @@ common#:#forgot_password#:#Dimenticata la password? common#:#forgot_username#:#Hai dimenticato il tuo username? common#:#form_input_not_valid#:#Alcuni dati sono incompleti o non validi. Si prega di correggere l’input del modulo. common#:#forum#:#Forum -common#:#forum_direct_notification#:#Dir. Notifiche +common#:#forum_direct_notification#:#Notifiche common#:#forum_notify_me#:#Avvisami quando viene aggiunta una risposta -common#:#forum_post_replied#:#E& +common#:#forum_post_replied#:#La tua voce nel forum è stata risposta. common#:#forums#:#Forum common#:#forums_anonymized#:#Forum anonimo common#:#forums_anonymous#:#anonimo common#:#forums_articles#:#Articoli -common#:#forums_closed#:#closed###26 08 2024 new variable +common#:#forums_closed#:#closed###30 04 2024 new variable common#:#forums_disable_forum_notification#:#Disabilita le notifiche per questo forum common#:#forums_enable_forum_notification#:#Abilita le notifiche per questo forum common#:#forums_forum_notification_enabled#:#Riceverai una notifica in questo forum sui nuovi messaggi. common#:#forums_last_post#:#Ultimo articolo -common#:#forums_last_posting_asc#:#Last Post Ascending###26 08 2024 new variable -common#:#forums_last_posting_dsc#:#Last Post Descending###26 08 2024 new variable -common#:#forums_notification_settings#:#Forums Notification Setting -common#:#forums_rating_asc#:#Rating Ascending###26 08 2024 new variable -common#:#forums_rating_dsc#:#Rating Descending###26 08 2024 new variable -common#:#forums_thread_sorting_asc#:#Thread Title A→Z###26 08 2024 new variable -common#:#forums_thread_sorting_dsc#:#Thread Title Z→A###26 08 2024 new variable +common#:#forums_last_posting_asc#:#Last Posting Ascending###30 04 2024 new variable +common#:#forums_last_posting_dsc#:#Last Posting Descending###30 04 2024 new variable +common#:#forums_notification_settings#:#Impostazioni di notifica del forum +common#:#forums_rating_asc#:#Rating Ascending###30 04 2024 new variable +common#:#forums_rating_dsc#:#Rating Descending###30 04 2024 new variable +common#:#forums_thread_sorting_asc#:#Thread Title A→Z###30 04 2024 new variable +common#:#forums_thread_sorting_dsc#:#Thread Title Z→A###30 04 2024 new variable common#:#forums_threads#:#Argomenti -common#:#forums_use_alias#:#You may use this alias for your posting. If you leave this field blank, your posting will be marked as anonymous +common#:#forums_use_alias#:#È possibile utilizzare questo alias per la pubblicazione. Se si lascia vuoto questo campo, la pubblicazione verrà contrassegnata come anonima common#:#forums_your_name#:#Il tuo nome common#:#frm#:#Forum common#:#frm_add#:#Aggiungi forum @@ -4211,7 +4196,7 @@ common#:#frm_edit#:#Modifica forum common#:#frm_import#:#Importa forum common#:#frm_latest_postings#:#Ultimi articoli common#:#frm_new#:#Nuovo forum -common#:#frm_no_threads#:#There are no threads available at the moment.###26 08 2024 new variable +common#:#frm_no_threads#:#There are no threads available at the moment.###30 04 2024 new variable common#:#from#:#Da common#:#fullname#:#Nome completo common#:#functions#:#Funzioni @@ -4222,22 +4207,22 @@ common#:#gender#:#Sesso common#:#gender_f#:#Femminile common#:#gender_m#:#Maschile common#:#gender_n#:#Nessun saluto desiderato -common#:#general#:#General###26 08 2024 new variable +common#:#general#:#General###31 03 2023 new variable common#:#general_settings#:#Impostazioni generali common#:#generate#:#Generato -common#:#ghostscript_not_configured#:#Ghostscript non è configurato. Si prega di aprire la <a href="cli/setup.php?cmd=mastersettings" target="_blank">procedura</a> per configurarlo. +common#:#ghostscript_not_configured#:#Ghostscript non è configurato. Si prega di aprire la <a href="setup/setup.php?cmd=mastersettings" target="_blank">procedura</a> per configurarlo. common#:#glo#:#Glossario common#:#glo_add#:#Aggiungi glossario common#:#glo_added#:#Glossario aggiunto common#:#glo_import#:#Importa glossario -common#:#glo_mode#:#Modalit& -common#:#glo_mode_desc#:#Un glossario & +common#:#glo_mode#:#Modalità +common#:#glo_mode_desc#:#Un glossario virtuale funziona come un normale glossario. Inoltre contiene i termini di tutti i glossari che si trovano sullo stesso livello nel repository come il glossario virtuale (livello) rispettivamente da tutti i glossari che si trovano verso il basso nel repository dalla posizione del glossario virtuale (sottostruttura). common#:#glo_mode_normal#:#normale common#:#glo_new#:#Nuovo glossario common#:#global#:#Globale common#:#global_default#:#Impostazioni globali predefinite common#:#global_fixed#:#Impostazioni globali fissate -common#:#global_role_assignment#:#Globale Rollenzuweisung###29 07 2022 new variable +common#:#global_role_assignment#:#Assegnazione del ruolo globale common#:#global_settings#:#Impostazioni globali common#:#global_user#:#Utenti globali common#:#glossaries#:#Glossari @@ -4248,17 +4233,17 @@ common#:#group#:#Gruppo common#:#group_members#:#Membri del gruppo common#:#group_name#:#Nome del gruppo common#:#group_new_registrations#:#Nuove iscrizioni -common#:#group_password_registration_msg#:#Per poter entrare devi avere la password fornita dall& +common#:#group_password_registration_msg#:#Se conosci la password del gruppo, puoi unirti a questo gruppo. Si prega di contattare un amministratore di gruppo, se non si conosce la password. common#:#group_registration#:#Registrazione common#:#group_registration_mode#:#Autoiscrizione common#:#group_registration_time#:#Periodo di iscrizione common#:#group_req_direct#:#Iscrivi direttamente -common#:#group_req_registration_msg#:#Per appartenere a questo gruppo devi essere iscritto. Sar& +common#:#group_req_registration_msg#:#Devi richiedere l'iscrizione per accedere a questo gruppo. Descrivi il tuo interesse a diventare membro nel modulo del messaggio. Riceverai una notifica non appena un amministratore avrà accettato o rifiutato la tua richiesta. common#:#group_status#:#Stato del gruppo common#:#groupings#:#Limitazioni di appartenenza common#:#groupings_assigned_obj_crs#:#Corsi assegnati common#:#groupings_assigned_obj_grp#:#Gruppi Assegnati -common#:#groupings_source#:#Source###29 10 2025 new variable +common#:#groupings_source#:#Source###28 11 2025 new variable common#:#groups#:#Gruppi common#:#grp#:#Gruppo common#:#grp_add#:#Aggiungi gruppo @@ -4267,12 +4252,12 @@ common#:#grp_btn_unsubscribe#:#Annullare l’iscrizione al gruppo common#:#grp_cancel_waiting_list#:#Vuoi davvero eliminarti dalla lista di attesa del gruppo "%s"? common#:#grp_copy_threads_info#:#Si prega di decidere quali materiali devono essere copiati, collegati o persino omessi. common#:#grp_deleted_export_files#:#Elimina i file selezionati. -common#:#grp_dismiss_member#:#Sei sicuro di voler annullare l& +common#:#grp_dismiss_member#:#Sei sicuro di voler annullare l'iscrizione ai seguenti membri del gruppo? common#:#grp_dismiss_myself#:#Sei sicuro di voler annullare la tua iscrizione al gruppo? -common#:#grp_edit#:#Propriet& -common#:#grp_err_administrator_required#:#Questo membro non pu& +common#:#grp_edit#:#Modifica gruppo +common#:#grp_err_administrator_required#:#Il membro non può essere rimosso, è richiesto almeno un amministratore per gruppo! common#:#grp_header_edit_members#:#Modifica membri -common#:#grp_list_members#:#List members###07 02 2020 new variable +common#:#grp_list_members#:#List members common#:#grp_list_reg#:#Registrazione common#:#grp_list_reg_end#:#Fine registrazione common#:#grp_list_reg_limit_full#:#Nessun posto disponibile @@ -4293,20 +4278,20 @@ common#:#grp_registration_completed#:#Iscrizione completata common#:#grp_removed_from_waiting_list#:#Sei stato rimosso dalla lista di attesta del gruppo "%s". common#:#grp_select_one_file#:#Seleziona un file common#:#grp_wizard_page#:#Copia Gruppo (Passo 2/2) -common#:#grpr#:#Group Reference -common#:#grpr_add#:#Add Group Link###29 07 2022 new variable -common#:#grpr_edit#:#Edit Group Reference -common#:#grpr_edit_info#:#Please choose one group, for creating a new reference. -common#:#grpr_new#:#Create Group Reference -common#:#grpr_settings#:#Group Link Settings###26 08 2024 new variable -common#:#header_action#:#Insert Heading - Click to insert a heading.###26 08 2024 new variable +common#:#grpr#:#Riferimento di gruppo +common#:#grpr_add#:#Add Group Link###31 03 2023 new variable +common#:#grpr_edit#:#Modifica riferimento gruppo +common#:#grpr_edit_info#:#Scegli un gruppo per creare un nuovo riferimento. +common#:#grpr_new#:#Crea riferimento di gruppo +common#:#grpr_settings#:#Group Link Settings###31 03 2023 new variable +common#:#header_action#:#Insert Heading - Click to insert a heading.###30 04 2024 new variable common#:#header_searchable#:#Ricercabile common#:#header_title#:#Intestazione common#:#header_visible_registration#:#Visibile nella registrazione -common#:#header_zip#:#Upload Zip-Archive +common#:#header_zip#:#Carica più file utilizzando un archivio Zip common#:#height#:#Altezza common#:#help#:#Aiuto -common#:#hide#:#nascondi +common#:#hide#:#Nascondi common#:#hide_all_details#:#Nascondi tutti i dettagli common#:#hide_details#:#Nascondi dettagli common#:#hide_filter#:#Nascondi filtro @@ -4336,11 +4321,11 @@ common#:#identifier#:#Identificatore common#:#if_no_title_then_filename#:#Lascia vuoto se vuoi mostrare il nome del file common#:#ignore_on_conflict#:#Ignora i conflitti common#:#ignore_required_fields#:#Ignora campi richiesti -common#:#ignore_required_fields_info#:#If activated, mandatory fields are not validated anymore (if possible) after submitting this form. The concerned user has to complete his personal profile after the next login. +common#:#ignore_required_fields_info#:#Se attivo, potrai inviare questo form senza riempire tutti i campi obbligatori. L'utente dovrà inserirli manualmente al primo login. common#:#il_astpl_loc_initial#:#Test iniziale common#:#il_astpl_loc_qualified#:#Test di qualificazione -common#:#il_blog_contributor#:#Blog Contributor -common#:#il_blog_editor#:#Blog-Editor +common#:#il_blog_contributor#:#Autore del Blog +common#:#il_blog_editor#:#Editor del Blog common#:#il_chat_moderator#:#Moderatore Chat common#:#il_crs_admin#:#Amministratore common#:#il_crs_member#:#Membro @@ -4351,80 +4336,80 @@ common#:#il_grp_admin#:#Amministratore di gruppo common#:#il_grp_member#:#Membro di gruppo common#:#il_grp_status_closed#:#Gruppo chiuso common#:#il_grp_status_open#:#Gruppo aperto -common#:#il_iass_member#:#Participant###29 10 2025 new variable -common#:#il_lso_admin#:#Learning Sequence Admin -common#:#il_lso_member#:#Learning Sequence Member -common#:#il_lti_instructor#:#LTI Instructor###29 07 2022 new variable -common#:#il_lti_learner#:#LTI Learner###29 07 2022 new variable -common#:#il_lti_user#:#LTI User###29 10 2025 new variable +common#:#il_iass_member#:#Assegnazione individuale candidato +common#:#il_lso_admin#:#Admin della Sequenza Learning +common#:#il_lso_member#:#Membro della Sequenza Learning +common#:#il_lti_instructor#:#LTI Instructor###09 03 2022 new variable +common#:#il_lti_learner#:#LTI Learner###09 03 2022 new variable +common#:#il_lti_user#:#LTI User###28 11 2025 new variable common#:#il_orgu_employee#:#Dipendente common#:#il_orgu_superior#:#Superiore common#:#ilias_version#:#Versione ILIAS common#:#image#:#Immagine common#:#import#:#Importa common#:#import_cat_localrol#:#Crea un ruolo locale per tutte le categorie nuove -common#:#import_cat_table#:#La seguente tabella & +common#:#import_cat_table#:#La seguente tabella sarà rilevante solo se questa casella viene spuntata. common#:#import_categories#:#Importa contesto common#:#import_failure_log#:#Log di importazione: fallimenti common#:#import_file#:#Scegli il file -common#:#import_file_not_valid_here#:#Il file di import non & +common#:#import_file_not_valid_here#:#The import file is not valid or the contained object type cannot be imported here.###28 11 2025 new variable common#:#import_finished#:#Numero di messaggi importati. common#:#import_lm#:#Importa modulo common#:#import_qpl#:#Importa raccolta di domande per test common#:#import_questions_into_qpl#:#Importa domande nella raccolta common#:#import_sahs#:#Importa modulo SCORM/AICC -common#:#import_sahs_info#:#To correct typos or images, use the option to replace individual files via the file directory. Upload a SCORM export from your authoring tool here and not an ILIAS export file. Make sure that your authoring tool has retained the IDs in the manifest file. Attention: Even popular authoring tools cannot do this. SCORM learning modules of certain authoring tools discard learner data obtained if you change the number of answer options of questions or insert new questions. Check in a test installation whether learning statuses that have already been achieved are possible when learning modules that have already been started are called up again.###26 08 2024 new variable -common#:#import_sahs_new#:#Import New Version of SCORM Package###26 08 2024 new variable +common#:#import_sahs_info#:#To correct typos or images, use the option to replace individual files via the file directory. Upload a SCORM export from your authoring tool here and not an ILIAS export file. Make sure that your authoring tool has retained the IDs in the manifest file. Attention: Even popular authoring tools cannot do this. SCORM learning modules of certain authoring tools discard learner data obtained if you change the number of answer options of questions or insert new questions. Check in a test installation whether learning statuses that have already been achieved are possible when learning modules that have already been started are called up again.###30 04 2024 new variable +common#:#import_sahs_new#:#Import New Version of SCORM Package###30 04 2024 new variable common#:#import_svy#:#Importa sondaggio common#:#import_tst#:#Importa test common#:#import_users#:#Importa utenti common#:#import_warning_log#:#Log di importazione: avvisi common#:#important#:#Importante common#:#imported#:#importato -common#:#imprint#:#Imprint +common#:#imprint#:#Note Legali common#:#in#:#in common#:#in_use#:#Lingua utente common#:#in_use_by#:#In uso da common#:#inactive#:#Inattivo common#:#inbox#:#Posta in arrivo -common#:#include_local#:#include local +common#:#include_local#:#Includi un file custom di lingua quando aggiorni la lingua common#:#info#:#Informazioni -common#:#info_access_and_status_info#:#Informazioni sull& +common#:#info_access_and_status_info#:#Informazioni sull'accesso e stato common#:#info_access_permissions#:#Permessi di accesso common#:#info_activate_sure#:#Sei sicuro di voler approvare i(l) seguente(i) utente(i)? common#:#info_assign_sure#:#Sei sicuro di voler aggiungere i seguenti utenti? common#:#info_assigned#:#Assegnato common#:#info_available_roles#:#Ruoli disponibili -common#:#info_change_user_view#:#Modifica la vista dell& +common#:#info_change_user_view#:#Cambia Utente common#:#info_deactivate_sure#:#Sei sicuro di voler disapprovare i(l) seguente(i) utente(i)? common#:#info_delete_sure#:#Sei sicuro di voler eliminare i seguenti oggetti? common#:#info_delete_warning_no_trash#:#(ATTENZIONE: gli oggetti selezionati verranno definitivamente rimossi dal sistema e potrebbero NON essere ricreati!) common#:#info_deleted#:#Eliminazione eseguita -common#:#info_err_user_not_exist#:#L& +common#:#info_err_user_not_exist#:#L'utente con questo nome non esiste common#:#info_from_role#:#Fornito dal ruolo -common#:#info_is_member#:#L& -common#:#info_is_not_member#:#L& +common#:#info_is_member#:#L'utente è un membro +common#:#info_is_not_member#:#L'utente non è un membro common#:#info_message#:#Messaggio di informazione -common#:#info_not_assigned#:#non assignato -common#:#info_owner_of_object#:#Proprietario dell& +common#:#info_not_assigned#:#Non assegnato +common#:#info_owner_of_object#:#Proprietario dell'oggetto common#:#info_permission_origin#:#Posizione originale -common#:#info_permission_source#:#valido a partire dal +common#:#info_permission_source#:#Valido a partire dal* common#:#info_remark_interrupted#:#Il Ruolo si interrompe in questa posizione. Le impostazioni predefinite del ruolo sono localizzate in quella posizione. common#:#info_remove_sure#:#Sei sicuro di voler rimuovere la/e seguente/i voce/i? common#:#info_short#:#Info common#:#info_status_info#:#Informazioni sullo stato -common#:#info_view_of_user#:#Vista dell& +common#:#info_view_of_user#:#Vista dell'utente common#:#inform_user_mail#:#Invia una eMail per informare gli utenti dei cambiamenti common#:#inline_file_extensions#:#File abilitati per il web common#:#inline_file_extensions_info#:#I file le cui estensioni sono mostrate nella finestra del browser.<br/>Per esempio: <b>gif jpg mp3 pdf png</b><br/> Tutti gli altri files disponibili per il download. common#:#insert#:#Aggiungi -common#:#insert_object_here#:#Inserisci qui l& -common#:#inst_id#:#ID dell& -common#:#inst_info#:#Informazioni sull& -common#:#inst_name#:#Nome dell& +common#:#insert_object_here#:#Inserisci qui +common#:#inst_id#:#ID dell'installazione +common#:#inst_info#:#Informazioni sull'installazione +common#:#inst_name#:#Nome dell'installazione common#:#install#:#Installa common#:#install_local#:#Installa localmente -common#:#installation_status#:#Installation Status###29 07 2022 new variable +common#:#installation_status#:#Stato dell'installazione common#:#installed#:#Installata common#:#installed_local#:#Installato localmente common#:#instant_messengers#:#Messaggi istantanei @@ -4434,8 +4419,8 @@ common#:#invalid_visible_required_options_selected#:#Tutti i campi impostati su common#:#invisible_block#:#Blocco invisibile common#:#invisible_block_mess#:#Non hai il permesso di visualizzare questo blocco. common#:#ip_address#:#Indirizzo IP -common#:#is_already_your#:#è gia' suo -common#:#italic_action#:#Insert Italic - Click to insert italic text.###26 08 2024 new variable +common#:#is_already_your#:#è già suo +common#:#italic_action#:#Insert Italic - Click to insert italic text.###30 04 2024 new variable common#:#item#:#voce common#:#itgr_add#:#Aggiungi gruppo di elementi common#:#itgr_new#:#Nuovo gruppo di elementi @@ -4443,16 +4428,16 @@ common#:#java_server#:#Server Java common#:#java_server_host#:#Host common#:#java_server_info#:#Se attivato, è possibile cercare nei file PDF, HTML e nelle unita' didattiche HTML. common#:#java_server_port#:#Porta -common#:#java_server_readme#:#Setup informations +common#:#java_server_readme#:#Informazioni sulla configurazione common#:#join#:#Iscriviti -common#:#join_session#:#Join +common#:#join_session#:#Entra nella sessione common#:#kb#:#KB common#:#keywords#:#Parole chiave -common#:#label_search_options#:#Search Area###29 07 2022 new variable +common#:#label_search_options#:#Area di Ricerca common#:#lang_dateformat#:#Y-m-d common#:#lang_path#:#Percorso lingue common#:#lang_refresh_confirm#:#Vuoi veramente aggiornare tutte le lingue? -common#:#lang_refresh_confirm_info#:#Extended language maintenance is currently activated. Refreshing the languages loads all language data from the ILIAS language files into the database. Local changes (in the database) may be overwritten, if not exported before. This does not affect any "*.lang.local" files in the Customizing directory. +common#:#lang_refresh_confirm_info#:#La manutenzione linguistica estesa è attualmente attivata. L'aggiornamento delle lingue carica tutti i dati di lingua dai file di lingua ILIAS nel database. Le modifiche locali (nel database) possono essere sovrascritte, se non esportate in precedenza. Ciò non influisce sui file "* .lang.local" nella directory di personalizzazione. common#:#lang_refresh_confirm_selected#:#Vuoi veramente aggiornare le lingue selezionate? common#:#lang_sep_decimal#:#, common#:#lang_sep_thousand#:#. @@ -4467,10 +4452,10 @@ common#:#lang_uninstall_changes_confirm#:#Vuoi davvero cancellare tutte le modif common#:#lang_uninstall_confirm#:#Vuoi davvero disinstallare le lingue selezionate? common#:#langfile_found#:#Trovato file common#:#language#:#Lingua -common#:#language_not_installed#:#Non & +common#:#language_not_installed#:#non è installata. Per favore installa questa lingua prima di procedere. common#:#languages#:#Lingue -common#:#languages_already_installed#:#Attenzione. La lingua scelta & -common#:#languages_already_uninstalled#:#Attenzione. La lingua scelta & +common#:#languages_already_installed#:#Le lingue selezionate sono già installate +common#:#languages_already_uninstalled#:#Le lingue selezionate sono già disinstallate common#:#languages_updated#:#Tutte le lingue installate sono state aggiornate. common#:#last_access#:#Ultimo accesso: common#:#last_change#:#Data ultima modifica @@ -4481,8 +4466,8 @@ common#:#last_reminder#:#Ultimo promemoria common#:#last_update#:#Data ultimo aggiornamento common#:#last_visited#:#Ultima visita common#:#lastname#:#Cognome -common#:#latex_edit_info#:#You can enter LaTeX code in the delimiters <code>[tex]</code> and <code>[/tex]</code>.###29 10 2025 new variable -common#:#laugh#:#Laugh +common#:#latex_edit_info#:#You can enter LaTeX code in the delimiters <code>[tex]</code> and <code>[/tex]</code>.###28 11 2025 new variable +common#:#laugh#:#Risata common#:#launch#:#Esegui common#:#ldap#:#LDAP common#:#ldap_basedn#:#LDAP DN di base @@ -4498,10 +4483,10 @@ common#:#leave_waiting_list#:#Abbandona lista di attesta common#:#legend#:#Legenda common#:#level#:#Livello common#:#link#:#Collega -common#:#link_action#:#Insert Link - Click to insert a link.###26 08 2024 new variable +common#:#link_action#:#Insert Link - Click to insert a link.###30 04 2024 new variable common#:#link_all#:#Collega tutti common#:#link_check#:#Verifica i collegamenti -common#:#link_check_message_b#:#Se selezionato, sarai informato sui collegamenti che non sono pi& +common#:#link_check_message_b#:#Se abilitato, verrai informato via e-mail sui collegamenti non validi. common#:#link_check_message_disabled#:#Mail disabilitata common#:#link_check_message_enabled#:#Mail abilitata common#:#link_check_subject#:#[ILIAS] verifica collegamenti @@ -4510,7 +4495,7 @@ common#:#link_selected_items#:#Collega gli oggetti selezionati common#:#links_add_param#:#Aggiungi parametro: common#:#links_dyn_parameter#:#Parametri dinamici common#:#links_dynamic#:#Parametri per collegamenti alla rete dinamici -common#:#links_dynamic_info#:#Se selezionato, & +common#:#links_dynamic_info#:#Se abilitato, è possibile aggiungere parametri dinamici ai collegamenti Web. <br /> Ad es. l'ID utente ILIAS o il nome utente. common#:#links_existing_params#:#Parametri esistenti: common#:#links_name#:#Nome del parametro common#:#links_no_name_given#:#Seleziona un parametro. @@ -4523,56 +4508,56 @@ common#:#links_user_name#:#Nome utente ILIAS common#:#links_value#:#Valore common#:#list#:#Lista common#:#list_of_questions#:#Lista di domande -common#:#list_view#:#List View###28 10 2024 new variable -common#:#listaction_learning_progress_settings#:#Learning Progress Settings###26 08 2024 new variable +common#:#list_view#:#List View###28 11 2025 new variable +common#:#listaction_learning_progress_settings#:#Learning Progress Settings###30 04 2024 new variable common#:#lm#:#Modulo ILIAS common#:#lm_add#:#Aggiungi modulo ILIAS common#:#lm_added#:#Modulo aggiunto common#:#lm_new#:#Nuovo modulo ILIAS -common#:#lm_type_scorm#:#SCORM -common#:#lm_type_scorm2004#:#SCORM 2004 -common#:#lm_type_scorm2004_info#:#These are newer versions of SCORM with significantly enhanced functionality. The learning module is launched in an iFrame.###26 08 2024 new variable -common#:#lm_type_scorm_info#:#This is the most widely used version of SCORM. The learning module is launched in a frame.###26 08 2024 new variable +common#:#lm_type_scorm#:#SCORM 1.2 +common#:#lm_type_scorm2004#:#SCORM 2004 3a/4a Edizione +common#:#lm_type_scorm2004_info#:#These are newer versions of SCORM with significantly enhanced functionality. The learning module is launched in an iFrame.###30 04 2024 new variable +common#:#lm_type_scorm_info#:#This is the most widely used version of SCORM. The learning module is launched in a frame.###30 04 2024 new variable common#:#lng#:#Lingua common#:#lngf#:#Lingua -common#:#lo#:#Unit& +common#:#lo#:#Oggetto di apprendimento common#:#loaded_preview_renderers#:#Renderizzatori di anteprima caricati common#:#local#:#Locale common#:#local_language_file#:#file della lingua locale common#:#local_language_files#:#file della lingua locale -common#:#local_languages_already_installed#:#Le lingue locali selezionate sono gi& -common#:#local_role_assignment#:#Lokale Rollenzuweisung###29 07 2022 new variable -common#:#location#:#Posizione +common#:#local_languages_already_installed#:#I file della lingua personalizzata selezionati sono già installati +common#:#local_role_assignment#:#Lokale Rollenzuweisung +common#:#location#:#Località common#:#locator#:#Posizione: common#:#log_in#:#Accesso -common#:#log_out#:#Logout###29 07 2022 new variable +common#:#log_out#:#Logout common#:#logic_or#:#O common#:#login#:#Accesso common#:#login_as#:#Sei entrato come common#:#login_data#:#Dati per l'accesso -common#:#login_exists#:#Esiste gi& -common#:#login_invalid#:#L& +common#:#login_exists#:#C'è già un utente con questo nome di accesso! Per favore scegline un altro. +common#:#login_invalid#:#L'accesso scelto non è valido! Sono ammessi solo i seguenti caratteri (minimo 3 caratteri): A-Z a-z 0-9 _.-+*@!$%~ common#:#login_to_ilias#:#Entra in ILIAS -common#:#login_to_ilias_via_login_form#:#Login to ILIAS###29 10 2025 new variable +common#:#login_to_ilias_via_login_form#:#Login to ILIAS###20 05 2025 new variable common#:#login_to_ilias_via_saml#:#Accedi a ILIAS tramite l’autenticazione SAML common#:#login_to_ilias_via_shibboleth#:#Entra in ILIAS utilizzando Shibboleth common#:#loginname_already_exists#:#Questo nome di accesso esiste già. -common#:#loginname_settings#:#Loginname-Settings +common#:#loginname_settings#:#Settaggi Nome Login common#:#logout#:#Logout -common#:#logout_text#:#Sei uscito da ILIAS. La tua sessione & +common#:#logout_text#:#Ti sei disconnesso da ILIAS. La tua sessione è stata chiusa common#:#logs#:#Crea il report common#:#love#:#Love common#:#lres#:#Risorse formative -common#:#lso_add#:#Add Learning Sequence -common#:#lso_admin_form_byline#:#General Settings for Learning Sequences###29 07 2022 new variable -common#:#lso_admin_form_title#:#Settings###29 07 2022 new variable -common#:#lso_admin_interval_byline#:#Poll Learning Progress every x seconds. Be careful! A low value will increase server-requests and have an impact on overall system performance. Please choose highest value possible!###29 07 2022 new variable -common#:#lso_admin_interval_label#:#Learning Progress Polling Interval (seconds)###29 07 2022 new variable -common#:#lso_copy_threads_info#:#Please decide which elements of the Learning Sequence should be copied, linked or omitted. -common#:#lso_edit#:#Edit Learning Sequence -common#:#lso_import#:#Import Learning Sequence -common#:#lso_new#:#New Learning Sequence -common#:#lso_wizard_page#:#Copy Learning Sequence (Step 2/2)###07 02 2020 new variable +common#:#lso_add#:#Aggiungi sequenza E-Learning +common#:#lso_admin_form_byline#:#Opzioni Genearli per Sequenze E-Learning +common#:#lso_admin_form_title#:#Opzioni +common#:#lso_admin_interval_byline#:#Richiedi il Progresso Learning ogni x seconds. Attenzione! Un valore basso aumenterà le richieste server e potrebbe avere un impatto negativo sulla performance del sistema. Scegli il valore più alto possibile! +common#:#lso_admin_interval_label#:#Intervallo Richieste Progresso learning (secondi) +common#:#lso_copy_threads_info#:#Seleziona quali materiali della sequenza di apprendimento devono essere copiati, collegati o omessi durante il processo di copia. +common#:#lso_edit#:#Modifica sequenza di apprendimento +common#:#lso_import#:#Importa sequenza di apprendimento +common#:#lso_new#:#Nuova Sequenza di Apprendimento +common#:#lso_wizard_page#:#Copia sequenza di apprendimento (Step 2/2) common#:#lti_outcome#:#LTI Notifica progresso dell’apprendimento common#:#lti_outcome_info#:#Invia lo stato di progresso dell’apprendimento degli utenti LTI a Strumento del consumatore LTI. common#:#mail#:#Posta @@ -4581,39 +4566,40 @@ common#:#mail_at_the_ilias_installation#:#Riceverai una %1$s nuova mail durante common#:#mail_attachment#:#Allegato mail common#:#mail_b_inbox#:#Ricevute common#:#mail_c_trash#:#Eliminate -common#:#mail_cron_scheduled_mails#:#Send scheduled mails.###29 10 2025 new variable -common#:#mail_cron_scheduled_mails_desc#:#Sends scheduled user mails according to their defined delivery times###29 10 2025 new variable +common#:#mail_cron_scheduled_mails#:#Send scheduled mails.###28 11 2025 new variable +common#:#mail_cron_scheduled_mails_desc#:#Sends scheduled user mails according to their defined delivery times###28 11 2025 new variable common#:#mail_d_drafts#:#Bozze common#:#mail_delete_error#:#Errore nella cancellazione delle mail -common#:#mail_e_outbox#:#Outbox###29 10 2025 new variable +common#:#mail_e_outbox#:#Outbox###28 11 2025 new variable common#:#mail_e_sent#:#Inviate -common#:#mail_edit_permission#:#Modificare le impostazioni dei permessi -common#:#mail_f_sent#:#Sent###29 10 2025 new variable +common#:#mail_edit_permission#:#L'utente può cambiare le impostazioni dei permessi nell'amministrazione della posta +common#:#mail_f_sent#:#Sent###28 11 2025 new variable common#:#mail_folders#:#Cartelle di posta common#:#mail_import_file#:#File di importazione da ILIAS 2 common#:#mail_mails_of#:#Posta common#:#mail_maxsize_attach#:#Dimensione massima degli allegati common#:#mail_member#:#Mail per i membri common#:#mail_members#:#Invia una eMail ai membri -common#:#mail_message_scheduled#:#Scheduled mail###29 10 2025 new variable -common#:#mail_message_scheduled_info#:#Mails remain in the outbox until the scheduled sending time.###29 10 2025 new variable +common#:#mail_message_scheduled#:#Scheduled mail###28 11 2025 new variable +common#:#mail_message_scheduled_info#:#Mails remain in the outbox until the scheduled sending time.###28 11 2025 new variable common#:#mail_not_sent#:#eMail non inviata! -common#:#mail_schedule_error_no_datetime#:#To schedule a mail, a delivery date and time must be specified.###29 10 2025 new variable -common#:#mail_schedule_error_past_datetime#:#You cannot schedule emails in the past.###29 10 2025 new variable -common#:#mail_scheduled#:#Mail stored in outbox for later delivery.###29 10 2025 new variable +common#:#mail_schedule_error_no_datetime#:#To schedule a mail, a delivery date and time must be specified.###28 11 2025 new variable +common#:#mail_schedule_error_past_datetime#:#You cannot schedule emails in the past.###28 11 2025 new variable +common#:#mail_schedule_scheduled_datetime#:#Scheduled Send Time###28 11 2025 new variable +common#:#mail_scheduled#:#Mail stored in outbox for later delivery.###28 11 2025 new variable common#:#mail_search_no#:#Nessuna voce trovata common#:#mail_select_one#:#Devi scegliere una eMail. -common#:#mail_send_error#:#Errore nell& +common#:#mail_send_error#:#Errore durante l'invio della posta common#:#mail_sent#:#eMail inviata con successo! common#:#mail_settings#:#Impostazione mail -common#:#mail_to_global_roles_not_allowed#:#It is not allowed to send emails to global roles +common#:#mail_to_global_roles_not_allowed#:#Non è consentito inviare e-mail a ruoli globali common#:#mail_z_local#:#Cartelle utente common#:#mails#:#eMail common#:#mails_at_the_ilias_installation#:#Riceverai %1$s nuove mail durante l’installazione di ILIAS %2$s common#:#mails_pl#:#Mail common#:#main_menu#:#Menu principale -common#:#mainbar_aria_label#:#Mainbar###29 07 2022 new variable -common#:#mainbar_more_label#:#More###29 07 2022 new variable +common#:#mainbar_aria_label#:#Barra principale +common#:#mainbar_more_label#:#More common#:#manage_members#:#Gestisci membri common#:#marked_entries#:#Voci contrassegnate common#:#matriculation#:#Numero di matricola @@ -4637,7 +4623,7 @@ common#:#mem_reg_period#:#Periodo di registrazione common#:#mem_reg_type#:#Tipo di registrazione common#:#mem_start#:#Inizio registrazione: common#:#mem_unlimited#:#Illimitato -common#:#mem_view_activate#:#Activate Members View +common#:#mem_view_activate#:#Attiva vista membri common#:#mem_view_close#:#Chiudi visualizzazione membri common#:#mem_view_long#:#Visualizzazione membri common#:#mem_waiting_list#:#Utenti nella lista di attesta: @@ -4650,52 +4636,52 @@ common#:#mep#:#Libreria multimediale common#:#mep_add#:#Aggiungi libreria multimediale (Media Pool) common#:#mep_edit#:#Modificare un libreria multimediale common#:#mep_new#:#Nuova libreria multimediale -common#:#mep_not_insert_already_exist#:#Gli elementi seguenti non sono stati inseriti perch& +common#:#mep_not_insert_already_exist#:#I seguenti elementi non sono stati inseriti perché sono già nel pool di supporto common#:#message#:#Messaggio common#:#message_content#:#Contenuto common#:#message_no_delivered_files#:#Non hai ancora inviato il file! common#:#meta_data#:#MetaDati -common#:#metabar_aria_label#:#Metabar###29 07 2022 new variable +common#:#metabar_aria_label#:#Metabar common#:#mgs_objects_linked_to_the_following_folders_p#:#Gli oggetti erano collegati alla/e seguente/i cartella/e: %s common#:#mgs_objects_linked_to_the_following_folders_s#:#L’oggetto era collegato alla!e seguente/i cartella/ee: %s common#:#migrate#:#migrare -common#:#minimize#:#Minimize###29 07 2022 new variable +common#:#minimize#:#Minimize###31 03 2023 new variable common#:#minute#:#Minuto common#:#minutes#:#Minuti common#:#missing#:#Mancante common#:#missing_perm#:#Autorizzazione mancante common#:#missing_precondition#:#Precondizione mancante -common#:#mm_achievements#:#Achievements###07 02 2020 new variable -common#:#mm_administration#:#Administration###07 02 2020 new variable -common#:#mm_badges#:#Badges###07 02 2020 new variable -common#:#mm_calendar#:#Calendar###07 02 2020 new variable -common#:#mm_certificates#:#Certificates###07 02 2020 new variable -common#:#mm_comments#:#Comments###07 02 2020 new variable -common#:#mm_communication#:#Communication###07 02 2020 new variable -common#:#mm_contacts#:#Contacts###07 02 2020 new variable -common#:#mm_dashboard#:#Dashboard###07 02 2020 new variable -common#:#mm_enrolments#:#Enrolments###07 02 2020 new variable -common#:#mm_favorites#:#Favourites###07 02 2020 new variable -common#:#mm_learning_history#:#Learning History###07 02 2020 new variable -common#:#mm_learning_progress#:#Learning Progress###07 02 2020 new variable -common#:#mm_mail#:#Mail###07 02 2020 new variable -common#:#mm_news#:#News###07 02 2020 new variable -common#:#mm_notes#:#Notes###07 02 2020 new variable -common#:#mm_organisation#:#Organisation###07 02 2020 new variable -common#:#mm_personal_and_shared_r#:#Personal and Shared Resources###07 02 2020 new variable -common#:#mm_personal_workspace#:#Personal Workspace###07 02 2020 new variable -common#:#mm_portfolio#:#Portfolio###07 02 2020 new variable -common#:#mm_private_chats#:#Private Chats###29 07 2022 new variable -common#:#mm_repo_tree_view#:#Tree View###07 02 2020 new variable -common#:#mm_repo_tree_view_act#:#Activate Tree###07 02 2020 new variable -common#:#mm_repo_tree_view_deact#:#Deactivate Tree###07 02 2020 new variable -common#:#mm_repository#:#Repository###07 02 2020 new variable -common#:#mm_skills#:#Competences###07 02 2020 new variable -common#:#mm_staff_list#:#Staff List###07 02 2020 new variable -common#:#mm_tags#:#Tags###07 02 2020 new variable -common#:#mm_task_derived_tasks#:#Tasks###07 02 2020 new variable -common#:#mme_lost_item_reason#:#Item is no longer provided.###07 02 2020 new variable -common#:#mme_lost_item_title#:#No assignment###07 02 2020 new variable +common#:#mm_achievements#:#Risultati +common#:#mm_administration#:#Amministrazione +common#:#mm_badges#:#Badge +common#:#mm_calendar#:#Calendario +common#:#mm_certificates#:#Certificati +common#:#mm_comments#:#Commenti +common#:#mm_communication#:#Comunicazioni +common#:#mm_contacts#:#Contatti +common#:#mm_dashboard#:#Dashboard +common#:#mm_enrolments#:#Iscrizioni +common#:#mm_favorites#:#Preferiti +common#:#mm_learning_history#:#Percorso Didattico +common#:#mm_learning_progress#:#Progressi Didattici +common#:#mm_mail#:#Mail +common#:#mm_news#:#News +common#:#mm_notes#:#Notes +common#:#mm_organisation#:#Organizzazione +common#:#mm_personal_and_shared_r#:#Risorse personali e condivise +common#:#mm_personal_workspace#:#Spazio di lavoro personale +common#:#mm_portfolio#:#Portfolio +common#:#mm_private_chats#:#Private Chats###31 03 2023 new variable +common#:#mm_repo_tree_view#:#Vista dell'albero +common#:#mm_repo_tree_view_act#:#Attivare l'albero +common#:#mm_repo_tree_view_deact#:#Disattivare l'albero +common#:#mm_repository#:#Repository +common#:#mm_skills#:#Competenze +common#:#mm_staff_list#:#Elenco membri +common#:#mm_tags#:#Tags +common#:#mm_task_derived_tasks#:#Obiettivi +common#:#mme_lost_item_reason#:#L'articolo non è più fornito. +common#:#mme_lost_item_title#:#Nessun ordinamento common#:#mob#:#Oggetto multimediale common#:#moderators#:#Moderatori common#:#module#:#Modulo @@ -4704,11 +4690,11 @@ common#:#month#:#Mese common#:#month_01_long#:#Gennaio common#:#month_01_short#:#Gen common#:#month_02_long#:#Febbraio -common#:#month_02_short#:#Febbraio +common#:#month_02_short#:#Feb common#:#month_03_long#:#Marzo -common#:#month_03_short#:#Marzo +common#:#month_03_short#:#Mar common#:#month_04_long#:#Aprile -common#:#month_04_short#:#Aprile +common#:#month_04_short#:#Apr common#:#month_05_long#:#Maggio common#:#month_05_short#:#Mag common#:#month_06_long#:#Giugno @@ -4722,7 +4708,7 @@ common#:#month_09_short#:#Set common#:#month_10_long#:#Ottobre common#:#month_10_short#:#Ott common#:#month_11_long#:#Novembre -common#:#month_11_short#:#Novembre +common#:#month_11_short#:#Nov common#:#month_12_long#:#Dicembre common#:#month_12_short#:#Dic common#:#monthly#:#mensilmente @@ -4732,129 +4718,129 @@ common#:#move#:#Sposta common#:#moveChapter#:#Sposta common#:#movePage#:#Sposta common#:#move_selected_items#:#Sposta gli oggetti selezionati -common#:#msg_bt_download_started#:#ILIAS is generating a ZIP archive of all available files. You can download them from the Notification Center (bell icon) on top right.###07 02 2020 new variable +common#:#msg_bt_download_started#:#ILIAS sta generando un archivio ZIP di tutti i file disponibili. Puoi scaricarli dal Centro Notifiche (icona a forma di campana) in alto a destra. common#:#msg_cancel#:#Esecuzione annullata common#:#msg_clear_clipboard#:#Cancellazione eseguita common#:#msg_cloned#:#Gli oggetti selezionati sono stati copiati. -common#:#msg_copy_clipboard#:#Gli oggetti selezionati sono stati memorizzati negli appunti (Azione: copia). -common#:#msg_copy_clipboard_container#:#Now, please select the desired location, where the selected objects should be pasted into and click the button "Continue". -common#:#msg_copy_clipboard_source#:#Now, please select the desired course, whose content should be copied and click the button "Next". -common#:#msg_cut_clipboard#:#Gli oggetti selezionati sono stati memorizzati negli appunti (Azione: taglia). +common#:#msg_copy_clipboard#:#Ora, seleziona la posizione desiderata, dove gli oggetti selezionati dovrebbero essere incollati e clicca sul pulsante 'Paste'. +common#:#msg_copy_clipboard_container#:#Ora, seleziona la posizione desiderata, in cui incollare gli oggetti selezionati e fai clic sul pulsante "Continua". +common#:#msg_copy_clipboard_source#:#Ora, seleziona il corso desiderato, il cui contenuto deve essere copiato e fai clic sul pulsante "Avanti". +common#:#msg_cut_clipboard#:#Ora, seleziona la posizione desiderata, dove gli oggetti selezionati dovrebbero essere incollati e clicca sul pulsante 'Paste'. common#:#msg_cut_copied#:#Gli oggetti selezionati sono stati copiati. common#:#msg_deleted_export_files#:#Esporta file eliminato/i common#:#msg_deleted_role#:#Cancellazione eseguita common#:#msg_deleted_roles_rolts#:#Cancellazione eseguita common#:#msg_failed#:#Fallito common#:#msg_form_save_error#:#I dati del modulo non possono essere salvati. Si prega di controllare i campi di input per eventuali messaggi di errore. -common#:#msg_info_blacklisted#:#The files cannot be uploaded due to security reasons.###07 02 2020 new variable -common#:#msg_input_char_limit_max#:#You have entered more characters than allowed.###26 08 2024 new variable -common#:#msg_input_char_limit_min#:#You have to enter the minimum of characters specified.###26 08 2024 new variable +common#:#msg_info_blacklisted#:#I file non possono essere caricati per motivi di sicurezza. +common#:#msg_input_char_limit_max#:#You have entered more characters than allowed.###26 04 2023 new variable +common#:#msg_input_char_limit_min#:#You have to enter the minimum of characters specified.###26 04 2023 new variable common#:#msg_input_does_not_match_regexp#:#Si prega di fornire un valore valido. common#:#msg_input_is_required#:#Questo input è richiesto. Si prega di inserire un valore. -common#:#msg_invalid_value_css_rect_input#:#The entered value is incorrect, do not use any plus or minus symbols in combination with the entered integer. Please check your input.###29 10 2025 new variable +common#:#msg_invalid_value_css_rect_input#:#The entered value is incorrect, do not use any plus or minus symbols in combination with the entered integer. Please check your input.###28 11 2025 new variable common#:#msg_is_last_role#:#I seguenti utenti sono stati rimossi dal loro precedente ruolo -common#:#msg_last_role_for_registration#:#Deve essere disponibile almeno un ruolo nel form di registrazione dei nuovi utenti. Questo ruolo & +common#:#msg_last_role_for_registration#:#Almeno un ruolo deve essere disponibile nel modulo di registrazione per i nuovi utenti. Questo ruolo è attualmente l'unico disponibile. common#:#msg_link_clipboard_p#:#Ora, si prega di selezionare la posizione desiderata, dove gli oggetti selezionati devono essere collegati e fare clic sul pulsante Incolla. common#:#msg_link_clipboard_s#:#Ora, si prega di selezionare la posizione desiderata, dove gli oggetti selezionati devono essere collegati e fare clic sul pulsante Incolla. -common#:#msg_linked#:#Gli oggetti immagazzinati negli appunti sono stati collegati. +common#:#msg_linked#:#Gli oggetti selezionati sono stati collegati. common#:#msg_may_not_contain#:#Questo oggetto potrebbe non contenere oggetti di tipo: common#:#msg_min_one_role#:#Ogni utente deve avere almeno un ruolo! common#:#msg_multi_language_selected#:#Hai selezionato la stessa lingua per traduzioni differenti! -common#:#msg_no_default_language#:#Non & +common#:#msg_no_default_language#:#Nessuna lingua predefinita specificata! È necessario definire una traduzione come traduzione predefinita. common#:#msg_no_delete_yourself#:#Non puoi eliminare il tuo stesso utente. common#:#msg_no_file#:#Non hai scelto un file -common#:#msg_no_files_selected#:#No files selected###29 07 2022 new variable +common#:#msg_no_files_selected#:#No files selected###09 03 2022 new variable common#:#msg_no_language_selected#:#Nessuna lingua specificata! Devi definire una lingua per ogni traduzione. -common#:#msg_no_perm_assign_role_to_user#:#Non hai sufficienti diritti per assegnare il ruolo dell& -common#:#msg_no_perm_assign_user_to_role#:#Non hai sufficienti diritti per modificare l& +common#:#msg_no_perm_assign_role_to_user#:#Non sei autorizzato a modificare l'assegnazione del ruolo dell'utente +common#:#msg_no_perm_assign_user_to_role#:#Non sei autorizzato a modificare l'assegnazione dell'utente common#:#msg_no_perm_copy#:#Non hai i diritti per creare una copia dei seguenti oggetti: common#:#msg_no_perm_create_rolt#:#Non hai i diritti per aggiungere template di ruoli common#:#msg_no_perm_cut#:#Non hai i diritti per tagliare i seguenti oggetti: common#:#msg_no_perm_delete#:#Non hai i diritti per eliminare i seguenti oggetti: common#:#msg_no_perm_link#:#Non hai i diritti per creare dei collegamenti dai seguenti oggetti: common#:#msg_no_perm_modify_rolt#:#Non hai i diritti per modificare i template dei ruoli -common#:#msg_no_perm_modify_user#:#Non hai i diritti per modificare i dati dell& +common#:#msg_no_perm_modify_user#:#Non sei autorizzato a modificare i dati dell'utente common#:#msg_no_perm_paste#:#Non hai i diritti per incollare i seguenti oggetti: common#:#msg_no_perm_paste_object_in_folder#:#Non ha il permesso di incollare l’oggetto %s nella cartella %s. common#:#msg_no_perm_perm#:#Non hai i diritti per modificare le impostazioni dei permessi common#:#msg_no_perm_read#:#Non hai i diritti per accedere a questo oggetto. -common#:#msg_no_perm_read_item#:#You have no permission to access item '%s'. +common#:#msg_no_perm_read_item#:#Non sei autorizzato ad accedere all'elemento '%s'. common#:#msg_no_perm_read_lm#:#Non hai i diritti per accedere a questo modulo. -common#:#msg_no_perm_view_roles_of_user#:#You have no permission to view the role assignment of this user###29 10 2025 new variable +common#:#msg_no_perm_view_roles_of_user#:#You have no permission to view the role assignment of this user###26 08 2025 new variable common#:#msg_no_perm_write#:#Non hai i diritti di scrittura common#:#msg_no_search_result#:#Nessun risultato trovato common#:#msg_no_search_string#:#Per favore, inserisci il criterio di ricerca common#:#msg_no_title#:#Per favore inserisci un titolo. -common#:#msg_not_available_for_anon#:#La pagina che hai scelto & -common#:#msg_not_in_itself#:#Non & +common#:#msg_not_available_for_anon#:#La pagina che hai scelto è accessibile solo agli utenti registrati +common#:#msg_not_in_itself#:#Non è possibile incollare l'oggetto in sé common#:#msg_obj_already_deleted#:#L'oggetto è già stato eliminato. common#:#msg_obj_created#:#Oggetto creato. -common#:#msg_obj_exists#:#Questo oggetto esiste gi& +common#:#msg_obj_exists#:#Questo oggetto esiste già in questa cartella common#:#msg_obj_exists_in_folder#:#L’oggetto %s esiste ancora nella cartella %s. common#:#msg_obj_may_not_contain_objects_of_type#:#L’oggetto %s non può contenere oggetti di tipo: %s. common#:#msg_obj_modified#:#Modifiche salvate. common#:#msg_obj_no_download#:#non possono essere scaricati. -common#:#msg_obj_no_link#:#non possono essere collegati +common#:#msg_obj_no_link#:#Non è possibile collegare oggetti contenitore come categorie, corsi, gruppi o cartelle per ragioni tecniche. Si possono invece collegare diversi oggetti singoli all'interno di un tale contenitore ad altre aree o creare un link di categoria, un link di corso o un link di gruppo. common#:#msg_obj_perm_download#:#Non hai abbastanza diritti per scaricare i seguenti oggetti: -common#:#msg_paste_object_not_in_itself#:#It's not possible to paste the object %s in itself. +common#:#msg_paste_object_not_in_itself#:#Non è possibile incollare l'oggetto %s in se stesso. common#:#msg_perm_adopted_from1#:#Impostazione dei permessi adottata da -common#:#msg_perm_adopted_from2#:#(l& +common#:#msg_perm_adopted_from2#:#(Le impostazioni sono state salvate!) common#:#msg_perm_adopted_from_itself#:#Non puoi assegnare le impostazioni dei permessi del corrente ruolo/template di ruolo a se stesso. common#:#msg_removed#:#Oggetti cancellati dal sistema. -common#:#msg_role_reserved_prefix#:#Il prefisso & +common#:#msg_role_reserved_prefix#:#Il prefisso "il_" è riservato ai ruoli generati automaticamente. Scegli un altro nome common#:#msg_roleassignment_changed#:#Assegnamento del ruolo cambiato -common#:#msg_sysrole_not_deletable#:#Il ruolo di sistema non pu& -common#:#msg_sysrole_not_editable#:#Le impostazioni dei permessi del ruolo di amministratore non possono essere cambiate. Il ruolo di amministratore garantisce agli utenti a cui & -common#:#msg_to_many_files#:#Too many files selected, allowed amount of files:###29 07 2022 new variable +common#:#msg_sysrole_not_deletable#:#Il ruolo di sistema non può essere eliminato +common#:#msg_sysrole_not_editable#:#Le impostazioni di autorizzazione del ruolo di sistema non possono essere modificate. Il ruolo del sistema garantisce a tutti gli utenti assegnati un accesso illimitato a tutti gli oggetti e le funzioni. +common#:#msg_to_many_files#:#Too many files selected, allowed amount of files:###09 03 2022 new variable common#:#msg_trash_empty#:#Non ci sono oggetti cancellati common#:#msg_undeleted#:#Cancellazione annullata. common#:#msg_unit_is_required#:#Questo input richiede un’unità. Si prega di inserire un valore corretto. -common#:#msg_unknown_value#:#An unknown value has been passed.###29 07 2022 new variable +common#:#msg_unknown_value#:#È stato passato un valore sconosciuto. common#:#msg_user_last_role1#:#I seguenti utenti sono assegnati solamente a questo ruolo: common#:#msg_user_last_role2#:#Per favore, cancella gli utenti o assegna loro un altro ruolo se vuoi eliminare questo ruolo. common#:#msg_userassignment_changed#:#Cambiato assegnazione utente. -common#:#msg_wrong_filetypes#:#Allowed Files-Types:###07 02 2020 new variable +common#:#msg_wrong_filetypes#:#Tipi di file consentiti: common#:#msg_wrong_format#:#Il valore che hai inserito non è nel formato valido. common#:#my_bms#:#I miei segnalibri -common#:#my_certificates#:#My Certificates -common#:#my_contacts#:#My Contact +common#:#my_certificates#:#I miei certificati +common#:#my_contacts#:#Il mio contatto common#:#my_courses#:#I miei corsi -common#:#my_courses_groups#:#My Courses & Groups +common#:#my_courses_groups#:#I miei corsi e gruppi common#:#my_staff#:#Staff common#:#name#:#Nome -common#:#nc_contact_requests_headline#:#Contact Requests###07 02 2020 new variable -common#:#nc_contact_requests_number_p#:#You have %s Contact Requests.###07 02 2020 new variable -common#:#nc_contact_requests_number_s#:#You have %s Contact Request.###07 02 2020 new variable -common#:#nc_contact_requests_prop_time#:#Time###07 02 2020 new variable +common#:#nc_contact_requests_headline#:#Richieste di contatto +common#:#nc_contact_requests_number_p#:#Hai %s Richieste di contatto. +common#:#nc_contact_requests_number_s#:#Hai %s Richieste di contatto. +common#:#nc_contact_requests_prop_time#:#Tempo common#:#never#:#mai common#:#new#:#Nuovo common#:#new_language#:#Nuova lingua common#:#new_pass_equals_old_pass#:#La nuova password è uguale alla precedente. common#:#newline#:#Nuova riga -common#:#news#:#Novit& +common#:#news#:#Novità common#:#next#:#Successivo common#:#no#:#No common#:#no_access_item#:#Non puoi accedere a questo oggetto. common#:#no_access_item_public#:#Non puoi accedere a questo oggetto nella sezione pubblica. -common#:#no_accessibility_control_concept_description#:#There is currently no Accessibility Control Concept provided with this installation. Please contact the <a href="%1$s">Accessibility Point of Contact</a>.###07 02 2020 new variable +common#:#no_accessibility_control_concept_description#:#Attualmente non esiste un concetto di controllo dell'accessibilità fornito con questa installazione. Contatta il <a href="%1$s">Punto di contatto per l'accessibilità</a>. common#:#no_checkbox#:#Nesuna opzione selezionata! common#:#no_condition_selected#:#Seleziona una precondizione. common#:#no_date#:#Manca la data common#:#no_gallery_users_available#:#Attualmente non ci sono utenti nella galleria. common#:#no_global_role_left#:#Tutti gli utenti devono essere assegnati ad almeno un ruolo. -common#:#no_import_file_found#:#Non & -common#:#no_items#:#No Items +common#:#no_import_file_found#:#Nessun file di importazione trovato +common#:#no_items#:#Questo oggetto è vuoto e non contiene elementi. common#:#no_limit#:#Nessun limite common#:#no_mkisofs_configured#:#È necessario configurare l'utilità mkisofs nel Setup ILIAS per eseguire l'esportazione ISO -common#:#no_parent_access#:#Non & +common#:#no_parent_access#:#Nessun accesso a un oggetto coordinato! common#:#no_permission#:#Non hai sufficienti diritti -common#:#no_roles_user_can_be_assigned_to#:#Non ci sono ruoli globali ai quali l& +common#:#no_roles_user_can_be_assigned_to#:#Non ci sono ruoli globali a cui l'utente può essere assegnato. Pertanto non è consentito aggiungere utenti. common#:#no_start_file#:#Nessun file di avvio. common#:#no_title#:#Nessun titolo common#:#no_users_selected#:#Per favore seleziona un utente. -common#:#no_xml_file_found_in_zip#:#Non & -common#:#noc#:#Notification Center###07 02 2020 new variable -common#:#non_internal_local_roles_only#:#Ruoli locali (definiti dall& +common#:#no_xml_file_found_in_zip#:#File XML nel file zip non trovato: +common#:#noc#:#Centro Notifiche +common#:#non_internal_local_roles_only#:#Ruoli locali (solo definiti dall'utente) common#:#none#:#Nessuno common#:#normal#:#Normale common#:#not_available#:#Non è disponibile @@ -4869,34 +4855,34 @@ common#:#notifications#:#Notifiche common#:#nr_following_sessions#:#%1sessione/i seguente/i... common#:#num_of_selected_files#:#%s file selezionato/i common#:#num_users#:#Numero di utenti -common#:#numberedlist_action#:#Insert Numbered List - Click to insert a numbered list.###26 08 2024 new variable +common#:#numberedlist_action#:#Insert Numbered List - Click to insert a numbered list.###30 04 2024 new variable common#:#obj#:#Oggetto -common#:#obj_accs#:#Accessibilita' +common#:#obj_accs#:#Accessibilità common#:#obj_accs_desc#:#Impostazioni per le funzioni di accessibilità. common#:#obj_adm#:#Amministrazione common#:#obj_adm_desc#:#Questa sezione contiene tutte le schede che consentono di amministrare la tua installazione di ILIAS. -common#:#obj_adma#:#General Settings###29 10 2025 new variable -common#:#obj_adma_desc#:#Important settings for the whole installation###29 10 2025 new variable -common#:#obj_adn#:#Administrative Notifications###29 07 2022 new variable +common#:#obj_adma#:#General Settings###28 11 2025 new variable +common#:#obj_adma_desc#:#Important settings for the whole installation###28 11 2025 new variable +common#:#obj_adn#:#Annunci amministrativi common#:#obj_adve#:#Editing Avanzato common#:#obj_adve_desc#:#Impostazioni di amministrazioni per editing avanzato come Editors JavaScript, LaTeX support etc.. common#:#obj_ass#:#Risorsa common#:#obj_assf#:#Test&Valutazioni common#:#obj_assf_desc#:#Impostazioni del log di Test&Valutazioni common#:#obj_auth#:#Autenticazione -common#:#obj_auth_desc#:#Per configurare la modalit& +common#:#obj_auth_desc#:#Configura qui la tua modalità di autenticazione (locale, LDAP, ...) e le nuove impostazioni di registrazione dell'account. common#:#obj_awra#:#Strumento “Chi è online?” common#:#obj_awra_desc#:#Gestisci strumento “Chi è online?” common#:#obj_bdga#:#Badge common#:#obj_bdga_desc#:#Tipi amministrativi, modelli di immagine e badge di attività -common#:#obj_bgtk#:#Background Task###07 02 2020 new variable +common#:#obj_bgtk#:#Task in background common#:#obj_bibl#:#Bibliografia common#:#obj_bibs#:#Bibliografia common#:#obj_bibs_desc#:#Amministrazione Bibliografia common#:#obj_blog#:#Blog common#:#obj_blog_duplicate#:#Copia blog -common#:#obj_bnmk#:#Benchmarking###29 10 2025 new variable -common#:#obj_bnmk_desc#:#Recording and display of database query durations###29 10 2025 new variable +common#:#obj_bnmk#:#Benchmarking###28 11 2025 new variable +common#:#obj_bnmk_desc#:#Recording and display of database query durations###28 11 2025 new variable common#:#obj_book#:#Gruppo di prenotazione common#:#obj_cadm#:#Contatti common#:#obj_cadm_desc#:#Amministrazione contatti @@ -4908,22 +4894,22 @@ common#:#obj_catr#:#Categoria Reference common#:#obj_cert#:#Certificati common#:#obj_cert_desc#:#Impostazioni per i certificati common#:#obj_chap#:#Capitolo -common#:#obj_chta#:#Chatrooms +common#:#obj_chta#:#Chatroom common#:#obj_chtr#:#Chatroom -common#:#obj_chtr_duplicate#:#Copy Chat Room###29 07 2022 new variable -common#:#obj_cmis#:#xAPI/cmi5###07 02 2020 new variable -common#:#obj_cmis_desc#:#Learning Record Store Types Configuration###07 02 2020 new variable -common#:#obj_cmix#:#xAPI/cmi5###07 02 2020 new variable -common#:#obj_cmps#:#Modules, Services and Plugins +common#:#obj_chtr_duplicate#:#Copy Chat Room###09 03 2022 new variable +common#:#obj_cmis#:#xAPI/cmi5 +common#:#obj_cmis_desc#:#Configurazione dei Learning Record Store Types +common#:#obj_cmix#:#xAPI/cmi5 +common#:#obj_cmps#:#Moduli, servizi e plugin common#:#obj_cmps_desc#:#Impostazioni Generali per Moduli del repository Servizi e Plugin. -common#:#obj_coms#:#Comments###07 02 2020 new variable -common#:#obj_coms_desc#:#Comments settings###07 02 2020 new variable -common#:#obj_copa#:#Content Page -common#:#obj_cpad#:#Content Pages###29 07 2022 new variable -common#:#obj_cpad#_desc#:#Content Page Administration###29 07 2022 new variable -common#:#obj_cpad_desc#:#Content Page Administration###29 07 2022 new variable -common#:#obj_cron#:#Cron Jobs###29 10 2025 new variable -common#:#obj_cron_desc#:#List of all Cron Jobs###29 10 2025 new variable +common#:#obj_coms#:#Commenti +common#:#obj_coms_desc#:#Impostazioni dei commenti +common#:#obj_copa#:#Pagina dei contenuti +common#:#obj_cpad#:#Pagine dei contenuti +common#:#obj_cpad#_desc#:#Amministrazione delle pagine dei contenuti +common#:#obj_cpad_desc#:#Amministrazione delle pagine dei contenuti +common#:#obj_cron#:#Cron Jobs###28 11 2025 new variable +common#:#obj_cron_desc#:#List of all Cron Jobs###28 11 2025 new variable common#:#obj_crs#:#Corso common#:#obj_crs_duplicate#:#Copia Corso common#:#obj_crsr#:#Riferimento al Corso @@ -4933,25 +4919,25 @@ common#:#obj_crsv#:#Certificato del corso common#:#obj_dbk#:#Libro digitale common#:#obj_dcl#:#Raccolta dati common#:#obj_dcl_duplicate#:#Copia raccolta dati -common#:#obj_dpro#:#Declaration of Data Protection###26 08 2024 new variable -common#:#obj_dpro_desc#:#Declaration of Data Protection Settings###26 08 2024 new variable -common#:#obj_dshs#:#Dashboard###07 02 2020 new variable -common#:#obj_dshs_desc#:#Dashboard settings###07 02 2020 new variable +common#:#obj_dpro#:#Declaration of Data Protection###30 04 2024 new variable +common#:#obj_dpro_desc#:#Declaration of Data Protection Settings###30 04 2024 new variable +common#:#obj_dshs#:#Dashboard +common#:#obj_dshs_desc#:#Impostazioni Dashboard common#:#obj_ecss#:#ECS common#:#obj_ecss_desc#:#Impostazioni generali di ECS -common#:#obj_etal#:#Employee Talk +common#:#obj_etal#:#Employee Talk###31 03 2023 new variable common#:#obj_exc#:#Esercitazione common#:#obj_exc_duplicate#:#Copia esercizio common#:#obj_excv#:#Esercizio certificato common#:#obj_extt#:#Software di terze parti common#:#obj_extt_desc#:#La configurazione di software o servizi esterni che sono supportati da ILIAS -common#:#obj_facs#:#File Access +common#:#obj_facs#:#Accesso ai File common#:#obj_facs_desc#:#Configurazione accesso ai file e alle cartelle -common#:#obj_file#:#Scegli il file +common#:#obj_file#:#File common#:#obj_file_duplicate#:#File duplicato common#:#obj_file_inline#:#File modulo di apprendimento -common#:#obj_fils#:#File Services###29 07 2022 new variable -common#:#obj_fils_desc#:#Configuration of File Service Settings.###29 07 2022 new variable +common#:#obj_fils#:#File Services +common#:#obj_fils_desc#:#Configurazione delle impostazioni di servizio dei file common#:#obj_fold#:#Cartella common#:#obj_fold_duplicate#:#Copia cartella common#:#obj_frm#:#Forum @@ -4962,11 +4948,11 @@ common#:#obj_glo#:#Glossario common#:#obj_glo_duplicate#:#Copia glossario common#:#obj_grp#:#Gruppo common#:#obj_grp_duplicate#:#Copia Gruppo -common#:#obj_grpr#:#Group Reference +common#:#obj_grpr#:#Riferimento di gruppo common#:#obj_grps#:#Gruppo common#:#obj_grps_desc#:#Impostazioni generali per gruppi -common#:#obj_gsfo#:#Footer###29 10 2025 new variable -common#:#obj_gsfo_desc#:#Administrate Footer Layout and Content###29 10 2025 new variable +common#:#obj_gsfo#:#Footer###28 11 2025 new variable +common#:#obj_gsfo_desc#:#Administrate Footer Layout and Content###28 11 2025 new variable common#:#obj_hlps#:#Sistema di aiuto common#:#obj_hlps_desc#:#Impostazioni per la Guida in linea common#:#obj_htlm#:#Modulo HTML @@ -4976,8 +4962,8 @@ common#:#obj_iass_duplicate#:#Copia assegnazione individuale common#:#obj_iass_select#:#-- Si prega di selezionare un’assegnazione individuale -- common#:#obj_itgr#:#Voce gruppo common#:#obj_ldap_desc#:#Configura le impostazioni globali LDAP. -common#:#obj_lhts#:#Learning History###07 02 2020 new variable -common#:#obj_lhts_desc#:#Learning history settings###07 02 2020 new variable +common#:#obj_lhts#:#Storia del percorso di apprendimento +common#:#obj_lhts_desc#:#Impostazioni common#:#obj_lm#:#Modulo ILIAS common#:#obj_lm_duplicate#:#Copia il modulo di apprendimento common#:#obj_lng#:#Lingua @@ -4988,78 +4974,78 @@ common#:#obj_logs_desc#:#Impostazioni generali di registrazione common#:#obj_lrss#:#Risorse di apprendimento common#:#obj_lrss_desc#:#Configura tutti i moduli learning common#:#obj_lso#:#Learning Sequence -common#:#obj_lso_duplicate#:#Copy Learning Sequence -common#:#obj_lsos#:#Learning Sequences###29 07 2022 new variable -common#:#obj_lsos_desc#:#General settings for Learning Sequences###29 07 2022 new variable -common#:#obj_lti#:#LTI Consumer###07 02 2020 new variable +common#:#obj_lso_duplicate#:#Copia Learning Sequence +common#:#obj_lsos#:#Learning Sequences +common#:#obj_lsos_desc#:#Impostazioni generali delle Learning Sequence +common#:#obj_lti#:#Consumer LTI common#:#obj_ltis#:#LTI common#:#obj_ltis_desc#:#Interoperabilità degli strumenti di apprendimento common#:#obj_mail#:#Configurazione posta -common#:#obj_mail_desc#:#Per configurare le impostazioni globali della posta. -common#:#obj_mailr#:#Read Mail###28 10 2024 new variable -common#:#obj_mailu#:#Unread Mail###28 10 2024 new variable -common#:#obj_maps#:#Maps###29 10 2025 new variable +common#:#obj_mail_desc#:#Configura qui le impostazioni globali della posta. +common#:#obj_mailr#:#Read Mail###28 11 2025 new variable +common#:#obj_mailu#:#Unread Mail###28 11 2025 new variable +common#:#obj_maps#:#Maps###28 11 2025 new variable common#:#obj_mcst#:#MediaCast common#:#obj_mcst_duplicate#:#Copia Mediacast common#:#obj_mcts#:#Mediacast common#:#obj_mcts_desc#:#Impostazioni Generali per mediacast. common#:#obj_mep#:#Libreria multimediale common#:#obj_mep_duplicate#:#Copia gruppo di supporto -common#:#obj_mme#:#Main Menu +common#:#obj_mme#:#Menu principale common#:#obj_mob#:#Oggetto multimediale -common#:#obj_mobs#:#Media Objects/Pools +common#:#obj_mobs#:#Oggetti multimediali / Media Pool common#:#obj_mobs_desc#:#Impostazioni per oggetti multimediali e gruppi multimediali. common#:#obj_not_found#:#Oggetto non trovato -common#:#obj_nota#:#Notifications###29 07 2022 new variable -common#:#obj_nota_desc#:#Notification Administration###29 07 2022 new variable -common#:#obj_nots#:#Notes###07 02 2020 new variable -common#:#obj_nots_desc#:#Notes settings###07 02 2020 new variable -common#:#obj_nwss#:#News and Web Feeds Settings +common#:#obj_nota#:#Notifications###31 03 2023 new variable +common#:#obj_nota_desc#:#Notifications Administration###31 03 2023 new variable +common#:#obj_nots#:#Note +common#:#obj_nots_desc#:#Impostazioni Note +common#:#obj_nwss#:#Impostazioni notizie e feed Web common#:#obj_nwss_desc#:#Impostazioni per novità interne e feed web esterni. common#:#obj_objf#:#Gestione oggetti common#:#obj_objf_desc#:#Per configurare i tipi di oggetto ed i permessi sugli stessi (solo per utenti esperti!). common#:#obj_orgu#:#Unità organizzativa common#:#obj_orgu_description#:#Creazione e modifica della struttura organizzativa common#:#obj_page#:#Pagina -common#:#obj_peac#:#Accordion###29 07 2022 new variable -common#:#obj_peadl#:#Advanced List###29 07 2022 new variable -common#:#obj_peadt#:#Advanced Table###29 07 2022 new variable -common#:#obj_pecd#:#Code###29 07 2022 new variable -common#:#obj_pech#:#Consultation Hour###29 07 2022 new variable -common#:#obj_pecl#:#Column Layout###29 07 2022 new variable -common#:#obj_peclp#:#Clipboard###29 07 2022 new variable -common#:#obj_pecom#:#Competences###29 07 2022 new variable -common#:#obj_pecrs#:#Course###29 07 2022 new variable -common#:#obj_pecrt#:#Certificate###29 07 2022 new variable -common#:#obj_pecs#:#Content Snippet###29 07 2022 new variable -common#:#obj_pedt#:#Data Table###29 07 2022 new variable -common#:#obj_pefl#:#File List###29 07 2022 new variable -common#:#obj_peim#:#interactive Media###29 07 2022 new variable -common#:#obj_pelh#:#Learning History###29 07 2022 new variable -common#:#obj_pemed#:#Image/Audio/Video###29 07 2022 new variable -common#:#obj_pemp#:#Map###29 07 2022 new variable -common#:#obj_pepd#:#Personal Data###29 07 2022 new variable -common#:#obj_pepe#:#Plugin Element###29 07 2022 new variable -common#:#obj_pepl#:#Page List###29 07 2022 new variable -common#:#obj_peplh#:#Placeholder###29 07 2022 new variable -common#:#obj_pequ#:#Questions###29 07 2022 new variable -common#:#obj_perl#:#Ressource List###29 07 2022 new variable -common#:#obj_pesc#:#Section###29 07 2022 new variable -common#:#obj_petmp#:#Page Template###29 07 2022 new variable -common#:#obj_peusr#:#User###29 07 2022 new variable +common#:#obj_peac#:#Elenco a fisarmonica +common#:#obj_peadl#:#Lista avanzata +common#:#obj_peadt#:#Tabella Avanzata +common#:#obj_pecd#:#Codice +common#:#obj_pech#:#Orario colloquio +common#:#obj_pecl#:#Layout Colonna +common#:#obj_peclp#:#Appunti +common#:#obj_pecom#:#Competenze +common#:#obj_pecrs#:#Course +common#:#obj_pecrt#:#Certificato +common#:#obj_pecs#:#Frammento di contenuto +common#:#obj_pedt#:#Tabella Dati +common#:#obj_pefl#:#Lista File +common#:#obj_peim#:#Immagine interattiva +common#:#obj_pelh#:#Percorso di apprendimento +common#:#obj_pemed#:#Immagine/Audio/Video +common#:#obj_pemp#:#Mappa +common#:#obj_pepd#:#Dati personali +common#:#obj_pepe#:#Elemento Plugin +common#:#obj_pepl#:#Lista pagine +common#:#obj_peplh#:#Segnalibro +common#:#obj_pequ#:#Domande +common#:#obj_perl#:#Lista risorse +common#:#obj_pesc#:#Sezione +common#:#obj_petmp#:#Template di pagina +common#:#obj_peusr#:#Utente common#:#obj_pg#:#Pagina common#:#obj_poll#:#Gruppo -common#:#obj_poll_dupliate:#:#Copy Poll +common#:#obj_poll_dupliate:#:#Copia Sondaggio common#:#obj_poll_duplicate#:#Copia gruppo common#:#obj_prg#:#Programma di studio common#:#obj_prg_duplicate#:#Copia programma di studio common#:#obj_prg_select#:#-- Si prega di selezionare un programma di studio -- -common#:#obj_prgr#:#Link to Study Programme###07 02 2020 new variable -common#:#obj_prgrs#:#Links to Study Programmes###07 02 2020 new variable +common#:#obj_prgr#:#Link to Study Programme +common#:#obj_prgrs#:#Links to Study Programmes common#:#obj_prgs#:#Programmi di studio common#:#obj_prgs_desc#:#Amministrazione tipo di programma -common#:#obj_prss#:#Personal Resources###07 02 2020 new variable -common#:#obj_prss_desc#:#Personal resources settings###07 02 2020 new variable +common#:#obj_prss#:#Risorse personali +common#:#obj_prss_desc#:#Impostazioni delle risorse personali common#:#obj_prtf#:#Portfolio common#:#obj_prtt#:#Modello di portfolio common#:#obj_prtt_duplicate#:#Copia modello di portfolio @@ -5072,7 +5058,7 @@ common#:#obj_rcat#:#Categoria ESC common#:#obj_rcrs#:#Link-Corso common#:#obj_recf#:#Oggetti ripristinati common#:#obj_recf_desc#:#Contiene oggetti ripristinati dal sistema di controllo. -common#:#obj_rep#:#Repository###07 02 2020 new variable +common#:#obj_rep#:#Repository common#:#obj_reps#:#Repository common#:#obj_reps_desc#:#Impostazioni generali per il Repository common#:#obj_rfil#:#File ESC @@ -5085,7 +5071,7 @@ common#:#obj_rolf_desc#:#Per configurare i ruoli. common#:#obj_rolf_local#:#Ruoli locali common#:#obj_rolf_local_desc#:#Contiene ruoli locali degli oggetti no. common#:#obj_rolt#:#Template di Ruolo -common#:#obj_root#:#Root +common#:#obj_root#:#Repository - Home common#:#obj_rtst#:#Test ESC common#:#obj_rwik#:#ECS Wiki common#:#obj_sahs#:#Modulo SCORM/AICC @@ -5094,47 +5080,47 @@ common#:#obj_sco#:#SCO common#:#obj_scov#:#Certificato SCORM common#:#obj_seas#:#Configurazione ricerche common#:#obj_seas_desc#:#Imposta i criteri di ricerca qui. -common#:#obj_serv#:#Server###29 10 2025 new variable -common#:#obj_serv_desc#:#Settings of the sever###29 10 2025 new variable +common#:#obj_serv#:#Server###28 11 2025 new variable +common#:#obj_serv_desc#:#Settings of the sever###28 11 2025 new variable common#:#obj_sess#:#Sessione common#:#obj_sess_duplicate#:#Copia Sessione -common#:#obj_skmg#:#Skill Management -common#:#obj_skmg_desc#:#Manage skills and skill categories. +common#:#obj_skmg#:#Gestione Competenze +common#:#obj_skmg_desc#:#Gestire le competenze e le categorie di competenze. common#:#obj_spl#:#Raccolta di domande (per sondaggi) common#:#obj_spl_select#:#-- Seleziona una Raccolta di Domande (Question Pool) per un sondaggio -- common#:#obj_st#:#Capitolo -common#:#obj_stus#:#Shortlinks###29 10 2025 new variable -common#:#obj_stus_desc#:#Global Shortlinks Settings###29 10 2025 new variable +common#:#obj_stus#:#Shortlinks###28 11 2025 new variable +common#:#obj_stus_desc#:#Global Shortlinks Settings###28 11 2025 new variable common#:#obj_sty#:#Stile -common#:#obj_stys#:#Style and Layout +common#:#obj_stys#:#Stile e Layout common#:#obj_stys_desc#:#Gestisci qui le impostazioni di sistema di interfaccia e stile common#:#obj_svy#:#Sondaggio common#:#obj_svy_duplicate#:#Copia Sondaggio -common#:#obj_svyf#:#Sondaggio +common#:#obj_svyf#:#Sondaggi common#:#obj_svyf_desc#:#Impostazioni della piattaforma per lo strumento sondaggio common#:#obj_sysc#:#Controllo del sistema common#:#obj_sysc_desc#:#Controllo del sistema e strumenti di riparazione common#:#obj_tags#:#Etichettatura common#:#obj_tags_desc#:#Impostazioni per la funzione di etichettatura. -common#:#obj_tala#:#Talk Templates -common#:#obj_tala_desc#:#Talk Templates -common#:#obj_tals#:#Employee Talk Series -common#:#obj_talt#:#Talk Template -common#:#obj_task#:#Task###07 02 2020 new variable +common#:#obj_tala#:#Talk Templates###31 03 2023 new variable +common#:#obj_tala_desc#:#Talk Templates###31 03 2023 new variable +common#:#obj_tals#:#Employee Talk Series###31 03 2023 new variable +common#:#obj_talt#:#Talk Template###31 03 2023 new variable +common#:#obj_task#:#Da Fare common#:#obj_tax#:#Tassonomia common#:#obj_taxf#:#Tassonomie -common#:#obj_tool_setting_calendar#:#Show Calendar -common#:#obj_tool_setting_calendar_active#:#Calendar###29 07 2022 new variable -common#:#obj_tool_setting_calendar_active_info#:#A calendar is available.###29 07 2022 new variable -common#:#obj_tool_setting_calendar_info#:#The "Calendar" block will be displayed inside the "Content" tab. +common#:#obj_tool_setting_calendar#:#Mostra il calendario +common#:#obj_tool_setting_calendar_active#:#Calendario +common#:#obj_tool_setting_calendar_active_info#:#Un calendario è disponibile +common#:#obj_tool_setting_calendar_info#:#Il blocco "Calendario" verrà visualizzato nella scheda "Contenuto". common#:#obj_tool_setting_custom_metadata#:#Metadati personalizzati common#:#obj_tool_setting_custom_metadata_info#:#Se attivati, i metadati possono essere configurati. -common#:#obj_tool_setting_news#:#Show News -common#:#obj_tool_setting_news_info#:#The "News" block will be displayed inside the "Content" tab. +common#:#obj_tool_setting_news#:#Mostra News +common#:#obj_tool_setting_news_info#:#Il blocco "Notizie" verrà visualizzato nella scheda "Contenuto". common#:#obj_tos#:#Termini di servizio common#:#obj_tos_desc#:#Termini delle impostazioni di servizio common#:#obj_trac#:#Tracciamento utenti -common#:#obj_trac_desc#:#Per configurare la modalit& +common#:#obj_trac_desc#:#Statistiche e panoramica sui progressi e le impostazioni common#:#obj_tst#:#Test common#:#obj_tst_duplicate#:#Copia Test common#:#obj_tstv#:#Test certificato @@ -5143,8 +5129,8 @@ common#:#obj_user#:#Utente common#:#obj_usr#:#Utente common#:#obj_usrf#:#Gestione utenti common#:#obj_usrf_desc#:#Per amministrare gli utenti. -common#:#obj_wbdv#:#WebDAV###29 07 2022 new variable -common#:#obj_wbdv_desc#:#Configuration of WebDAV Settings.###29 07 2022 new variable +common#:#obj_wbdv#:#WebDAV +common#:#obj_wbdv_desc#:#Configurazione delle impostazioni WebDAV common#:#obj_wbrs#:#Collegamento web common#:#obj_wbrs_desc#:#Impostazioni generali per collegamenti web common#:#obj_webr#:#Risorsa web @@ -5160,7 +5146,7 @@ common#:#object_copy_in_progress#:#È stata avviata la copia. common#:#object_duplicated#:#Oggetto duplicato common#:#object_id#:#Id-oggetto common#:#object_imported#:#Oggetto importato -common#:#object_list#:#List of Objects###29 10 2025 new variable +common#:#object_list#:#List of Objects###28 11 2025 new variable common#:#objects#:#Oggetti common#:#objf#:#Oggetti common#:#objs_bibl#:#Bibliografie @@ -5169,33 +5155,33 @@ common#:#objs_book#:#Gruppi di prenotazione common#:#objs_cat#:#Contesti common#:#objs_catr#:#Categoria References common#:#objs_chtr#:#Chats -common#:#objs_cmix#:#Objects xAPI/cmi5###07 02 2020 new variable +common#:#objs_cmix#:#Objects xAPI/cmi5 common#:#objs_copa#:#Content Pages common#:#objs_crs#:#Corsi common#:#objs_crsr#:#Riferimenti Corsi common#:#objs_dcl#:#Raccolte dati -common#:#objs_etal#:#Employee Talks +common#:#objs_etal#:#Employee Talks###31 03 2023 new variable common#:#objs_exc#:#Esercitazioni common#:#objs_file#:#File common#:#objs_fold#:#Cartelle common#:#objs_frm#:#Forum common#:#objs_glo#:#Glossari common#:#objs_grp#:#Gruppi -common#:#objs_grpr#:#Group References +common#:#objs_grpr#:#Riferimenti di gruppo common#:#objs_htlm#:#Moduli HTML common#:#objs_iass#:#Assegnazioni individuali common#:#objs_itgr#:#Voce gruppi common#:#objs_lm#:#Moduli ILIAS common#:#objs_lres#:#Risorse di apprendimento -common#:#objs_lso#:#Learning Sequences -common#:#objs_lti#:#LTI Consumers###07 02 2020 new variable +common#:#objs_lso#:#Sequenze di apprendimento +common#:#objs_lti#:#Consumer LTI common#:#objs_mail#:#Mail common#:#objs_mcst#:#Mediacast common#:#objs_mep#:#Librerie multimediali -common#:#objs_orgu#:#Organisational Unit +common#:#objs_orgu#:#Unità organizzative common#:#objs_poll#:#Gruppi common#:#objs_prg#:#Programmi di studio -common#:#objs_prgr#:#Links to Study Programmes###29 07 2022 new variable +common#:#objs_prgr#:#Link al Programma di Studi common#:#objs_prtf#:#Portfolio common#:#objs_prtt#:#Modelli di portfolio common#:#objs_qpl#:#Raccolte di domande @@ -5207,23 +5193,23 @@ common#:#objs_rglo#:#Glossari ESC common#:#objs_rgrp#:#Gruppi ESC common#:#objs_rlm#:#Moduli di apprendimento ESC common#:#objs_role#:#Ruoli -common#:#objs_rolf#:#Role Folders###28 10 2024 new variable +common#:#objs_rolf#:#Role Folders###08 10 2024 new variable common#:#objs_rtst#:#Test ESC common#:#objs_rwik#:#ECS Wiki common#:#objs_sahs#:#Moduli SCORM/AICC common#:#objs_sess#:#Sessioni -common#:#objs_skee#:#Competence Trees###26 08 2024 new variable +common#:#objs_skee#:#Competence Trees###28 11 2023 new variable common#:#objs_spl#:#Raccolte di domande (per sondaggi) common#:#objs_st#:#Capitoli common#:#objs_svy#:#Sondaggi -common#:#objs_tala#:#Talk Templates -common#:#objs_talt#:#Talk Templates +common#:#objs_tala#:#Talk Templates###31 03 2023 new variable +common#:#objs_talt#:#Talk Templates###31 03 2023 new variable common#:#objs_tst#:#Test common#:#objs_webr#:#Risorse web common#:#objs_wiki#:#Wiki common#:#of#:#di common#:#offline#:#offline -common#:#offline_mode#:#Offline-Mode +common#:#offline_mode#:#Modo offline common#:#ok#:#OK common#:#old#:#Vecchio common#:#omit#:#Ometti @@ -5231,9 +5217,9 @@ common#:#omit_all#:#Ometti tutto common#:#on_waiting_list#:#Sei nella lista di attesa common#:#online#:#Online common#:#online_time#:#Tempo online (DD:HH:MM:SS) -common#:#only_active#:#Only Active###07 02 2020 new variable -common#:#only_inactive#:#Only Inactive###07 02 2020 new variable -common#:#open#:#Open +common#:#only_active#:#Solo attivo +common#:#only_inactive#:#Solo inattivo +common#:#open#:#Aperto common#:#operation#:#Operazione common#:#optimize#:#Ottimizza common#:#option#:#Opzioni @@ -5257,25 +5243,25 @@ common#:#page#:#Pagina common#:#page_count#:#Conteggio pagine common#:#page_layout#:#Layout pagina common#:#page_layouts#:#Layout pagina -common#:#pagination_label_x_of_y#:#Page %1$d of %2$d###07 02 2020 new variable +common#:#pagination_label_x_of_y#:#Pagina %1$d di %2$d common#:#parameter#:#Parametro common#:#parse#:#Analizza -common#:#participate#:#Subscribe###07 02 2020 new variable +common#:#participate#:#Sottoscrivi common#:#passed#:#Superato common#:#passwd#:#Password common#:#passwd_generation#:#Generazione password -common#:#passwd_invalid#:#La nuova password non & +common#:#passwd_invalid#:#La nuova password non è valida! Sono ammessi solo i seguenti caratteri (minimo 6 caratteri): A-Z a-z 0-9 _.- +? common#:#passwd_not_match#:#I valori della nuova password non sono uguali! Per favore, riscrivi la nuova password. -common#:#passwd_wrong#:#La password inserita & +common#:#passwd_wrong#:#La password inserita è errata! common#:#password#:#Password common#:#password_allow_chars#:#Caratteri consentiti: %s -common#:#password_assistance_info#:#Se il servizio di assistenza per la password & -common#:#password_change_on_first_login_demand#:#Your initial password have to be changed before you can start using ILIAS services +common#:#password_assistance_info#:#Se l'assistenza tramite password è abilitata, nella pagina di accesso di ILIAS viene visualizzato il link "Hai dimenticato la password?". Gli utenti possono utilizzare questo collegamento per definire una nuova password per il proprio account utente senza richiedere l'assistenza di un amministratore di sistema. +common#:#password_change_on_first_login_demand#:#La password iniziale deve essere modificata prima di poter iniziare a utilizzare i servizi ILIAS common#:#password_contains_invalid_chars#:#La password contiene caratteri non validi common#:#password_contains_parts_of_login_err#:#La password scelta contiene il tuo nome utente. Si prega di inserire una nuova password. -common#:#password_empty#:#The password must not be empty. -common#:#password_expired#:#Your password is expired and have to be changed, because the last change was %s day(s) ago. -common#:#password_multiple_errors#:#Multiple criterias are not satisfied: +common#:#password_empty#:#La password non deve essere vuota. +common#:#password_expired#:#La tua password è scaduta e deve essere cambiata, perché l'ultima modifica è stata %s giorno/i fa. +common#:#password_multiple_errors#:#Criteri multipli non sono soddisfatti: common#:#password_must_chars_and_numbers#:#La password deve contenere caratteri e numeri. common#:#password_must_contain_lcase_chars#:#La password deve contenere almeno %s lettere minuscole. common#:#password_must_contain_ucase_chars#:#La password deve contenere almeno %s lettere maiuscole. @@ -5298,7 +5284,7 @@ common#:#pd_items_news#:#Includi notizie di voci personali common#:#pdf_export#:#Esportazione PDF common#:#perm_settings#:#Permessi common#:#perma_link#:#Collegamento permanente -common#:#perma_link_copied#:#Link to this page has been copied to the clipboard.###29 10 2025 new variable +common#:#perma_link_copied#:#Link to this page has been copied to the clipboard.###10 12 2024 new variable common#:#permission#:#Permesso common#:#permission_denied#:#Permesso negato common#:#permission_settings#:#Permessi @@ -5306,9 +5292,9 @@ common#:#person_title#:#Titolo common#:#personal_data#:#Informazioni generali common#:#personal_picture#:#Immagine Personale common#:#personal_profile#:#Profilo personale -common#:#personal_resources#:#Personal Resources###07 02 2020 new variable -common#:#personal_settings#:#Personal Settings -common#:#personalise_date_time#:#Personalise Date and Time Settings###29 10 2025 new variable +common#:#personal_resources#:#Risorse Personali +common#:#personal_settings#:#Impostazioni personali +common#:#personalise_date_time#:#Personalise Date and Time Settings###28 11 2025 new variable common#:#persons#:#Persone common#:#pg_add#:#Aggiungi pagina common#:#pg_new#:#Nuova pagina @@ -5318,7 +5304,7 @@ common#:#phone_mobile#:#Telefono cellulare common#:#phone_office#:#Telefono ufficio common#:#phrase#:#Frase common#:#please_choose#:#-- Seleziona -- -common#:#please_enter_target#:#Per favore, specifica l& +common#:#please_enter_target#:#Per favore, inserisci un target common#:#please_enter_title#:#Per favore, inserisci un titolo. common#:#please_select#:#-- Seleziona -- common#:#please_select_a_delivered_file_to_delete#:#Devi scegliere almeno uno tra i file inviati per eliminarlo! @@ -5337,20 +5323,20 @@ common#:#precondition_not_accessible#:#Non hai abbastanza consenso per visualizz common#:#precondition_required_itemlist#:#Premessa richiesta common#:#precondition_toggle#:#Premesse che devono essere soddisfatte per accedere a questo oggetto common#:#preconditions#:#Condizioni preliminari -common#:#preconditions_obligatory_hint#:#Please edit the following preconditions -common#:#preconditions_optional_hint#:#Please edit one of the following preconditions +common#:#preconditions_obligatory_hint#:#Modifica i seguenti presupposti +common#:#preconditions_optional_hint#:#Modifica una delle seguenti condizioni preliminari common#:#predefined_template#:#Template di ruolo predefiniti -common#:#preferences#:#User-defined Preferences -common#:#presentation_table_more#:#more +common#:#preferences#:#Preferenze definite dall'utente +common#:#presentation_table_more#:#Di Più common#:#preview#:#Anteprima common#:#preview_create#:#Crea anteprima common#:#preview_delete#:#Elimina anteprima -common#:#preview_image_size#:#Size of Preview Images###26 08 2024 new variable +common#:#preview_image_size#:#Size of Preview Images###30 04 2024 new variable common#:#preview_learner_info#:#Se abilitati, Corsi e Gruppi amministrazione, hanno la possibilita' di visualizzare il contenuto dalla prospettiva dell'utente.<br /><br />If enabled, Course and Group administrators have the possibility to view the content form the perspective of a learner. common#:#preview_loading#:#Caricamento anteprima... common#:#preview_none#:#Anteprima (non ancora creata) -common#:#preview_not_possible#:#Creation of Previews is currently not possible, please read the documentation in %s.###26 08 2024 new variable -common#:#preview_renderers#:#Preview Renderers###29 07 2022 new variable +common#:#preview_not_possible#:#Creation of Previews is currently not possible, please read the documentation in %s.###30 04 2024 new variable +common#:#preview_renderers#:#Preview Renderers common#:#preview_settings#:#Anteprima file common#:#preview_show#:#Mostra anteprima common#:#preview_status_creating#:#L’anteprima si sta creando. Questo potrebbe richiedere un po’ di tempo... @@ -5361,20 +5347,20 @@ common#:#preview_status_pending#:#L’anteprima non è stata ancora creata. Ripr common#:#previous#:#Precedente common#:#prg_copy_threads_info#:#Si prega di decidere quali componenti del corso devono essere copiati, collegati o persino omessi. common#:#prg_wizard_page#:#Copia programma di studio (Passaggio2/2) -common#:#prgr_add#:#Add Study Programme Link###29 07 2022 new variable -common#:#prgr_edit_info#:#Please choose one Study Programme for creating a new link.###29 07 2022 new variable -common#:#prgr_new#:#Create Study Programme Link###29 07 2022 new variable -common#:#prgr_settings#:#Settings of Study Programme Link###26 08 2024 new variable +common#:#prgr_add#:#Add Study Programme Link###31 03 2023 new variable +common#:#prgr_edit_info#:#Please choose one Study Programme for creating a new link.###09 03 2022 new variable +common#:#prgr_new#:#Create Study Programme Link###09 03 2022 new variable +common#:#prgr_settings#:#Settings of Study Programme Link###31 03 2023 new variable common#:#print#:#Stampa common#:#print_view#:#Visualizzazione stampa common#:#private_notes#:#Note personali common#:#pro#:#Pro common#:#proceed#:#Procedi common#:#profile#:#Profilo -common#:#profile_changed#:#Il tuo profilo & +common#:#profile_changed#:#E-learning ILIAS - Il tuo profilo è cambiato common#:#profile_incomplete#:#Il tuo profilo è incompleto. Si prega di compilare tutti i dati richiesti. common#:#profile_of#:#Profilo di -common#:#properties#:#Propriet& +common#:#properties#:#Proprietà common#:#proxy#:#Proxy common#:#proxy_connectable#:#Connessione stabilita. common#:#proxy_host#:#Host @@ -5385,7 +5371,7 @@ common#:#proxy_port_info#:#Si prega di inserire una porta tra 0 e 65535, per ese common#:#proxy_port_numeric#:#La porta inserita deve avere un valore numerico tra 0 e 65535 common#:#proxy_socket_error#:#Errore socket: %s common#:#proxy_status#:#Proxy -common#:#proxy_status_info#:#To use a proxy in ILIAS (e.g. for web feeds or to check weblinks) please activate the checkbox above. +common#:#proxy_status_info#:#Per utilizzare un proxy in ILIAS (ad es. Per feed Web o per controllare i collegamenti Web), attivare la casella sopra. common#:#ps_export_scorm#:#SCORM dei dati di tracking common#:#ps_password_lowercase_chars_num#:#Lettere minuscole common#:#ps_password_lowercase_chars_num_info#:#Si prega di inserire il numero di lettere minuscole che deve contenere una password. Immettere 0 per disabilitare questo requisito. @@ -5394,7 +5380,7 @@ common#:#ps_password_must_not_contain_loginame_info#:#Se attivata, la password n common#:#ps_password_uppercase_chars_num#:#Lettere maiuscole common#:#ps_password_uppercase_chars_num_info#:#Si prega di inserire il numero di lettere maiuscole che deve contenere una password. Immettere 0 per disabilitare questo requisito. common#:#pub_section#:#Sezione pubblica -common#:#pub_section_info#:#If enabled, parts of the system (e.g. repository, user profiles) can be made available to the internet without authentification. The permissions of the "Anonymous" role will control the access to repository resources. +common#:#pub_section_info#:#Se abilitato, parti del sistema (ad es. Repository, profili utente) possono essere rese disponibili su Internet senza autenticazione. Le autorizzazioni del ruolo "Anonimo" controlleranno l'accesso alle risorse del repository. common#:#public#:#pubblico common#:#public_notes#:#Note pubbliche common#:#public_profile#:#Profilo pubblico @@ -5421,17 +5407,17 @@ common#:#refuse#:#Rifiuta common#:#reg_account_confirmation_successful#:#Il tuo account utente è stato riattivato. common#:#reg_goto_parent_membership_info#:#Solo i membri possono accedere all’oggetto di destinazione. common#:#reg_mail_body_2_confirmation#:#Il link sarà utile solo per %s, dopo di che bisognerà provare nuovamente dall’inizio. -common#:#reg_mail_body_3_confirmation#:#If this email means nothing to you, then it is possible that somebody else has entered your email address either deliberately or accidentally, so please ignore this email +common#:#reg_mail_body_3_confirmation#:#Se questa e-mail non significa nulla per te, è possibile che qualcun altro abbia inserito il tuo indirizzo e-mail deliberatamente o accidentalmente, quindi ignora questa e-mail common#:#reg_mail_body_forgot_password_info#:#Per ottenere la password, utilizza la funziona “Password dimenticata? ” nella schermata di accesso per richiedere una nuova password per questo account. common#:#reg_mail_body_salutation#:#Ciao common#:#reg_mail_body_text1#:#Benvenuto in ILIAS eLearning! common#:#reg_mail_body_text2#:#Per accedere ad ILIAS utilizza i seguenti dati: common#:#reg_mail_body_text3#:#Ulteriori informazioni personali: -common#:#reg_mail_subject#:#ILIAS - I tuoi dati di accesso -common#:#reg_mail_subject_confirmation#:#Your Confirmationlink -common#:#reg_passwd_via_mail#:#La password verr& +common#:#reg_mail_subject#:#I tuoi dati di accesso +common#:#reg_mail_subject_confirmation#:#Link di Conferma +common#:#reg_passwd_via_mail#:#La password verrà inviata al tuo indirizzo e-mail indicato di seguito. common#:#register#:#Registrati -common#:#register_notification#:#"%s" has applied for session "%s".###07 02 2020 new variable +common#:#register_notification#:#"%s" ha fatto domanda per la sessione "%s". common#:#registered_since#:#Registrato dal common#:#registered_user#:#utente registrato common#:#registered_users#:#utenti registrati @@ -5445,15 +5431,15 @@ common#:#rename_file#:#Rinomina il file common#:#renderer_supported_file_types#:#Tipi di file supportati common#:#renderer_supported_repo_types#:#Oggetti ILIAS supportati common#:#renderer_type_builtin#:#Incorporato -common#:#rep_main_page#:#Main Page +common#:#rep_main_page#:#Pagina Principale common#:#repeat_scan#:#Ripetizione ricerca virus ... common#:#repeat_scan_failed#:#Ripetizione ricerca virus fallita. common#:#repeat_scan_succeded#:#Ripetizione ricerca virus eseguita. common#:#replace_file#:#Sosituisci il file common#:#reply#:#Rispondi -common#:#report_accessibility_issue#:#Report Accessibility Issue###07 02 2020 new variable -common#:#report_accessibility_link#:#Reported Link:###07 02 2020 new variable -common#:#report_accessibility_link_mailto#:#Reported%20Link:###29 07 2022 new variable +common#:#report_accessibility_issue#:#Segnala problema di accessibilità +common#:#report_accessibility_link#:#Link segnalato: +common#:#report_accessibility_link_mailto#:#Reported%20Link:###29 06 2022 new variable common#:#repository#:#Risorse common#:#repository_admin#:#Risorse, Cestino e Permessi common#:#repository_admin_desc#:#Puoi impostare i permessi degli oggetti che sono in Risorse e ripristinare/rimuovere gli oggetti nel Cestino. @@ -5474,7 +5460,7 @@ common#:#role#:#Ruolo common#:#role_add_user#:#Aggiungi utente(i) al ruolo common#:#role_added#:#Ruolo aggiunto common#:#role_assignment#:#Ruolo assegnato -common#:#role_assignment_updated#:#L& +common#:#role_assignment_updated#:#L'assegnazione dei ruoli è stata aggiornata. common#:#role_edit#:#Modifica ruolo common#:#role_mailto#:#email per tutti gli utenti assegnati common#:#role_new#:#Nuovo ruolo @@ -5494,7 +5480,7 @@ common#:#rolf_create_role#:#Creare un ruolo common#:#rolf_create_rolt#:#Creare un template di ruolo common#:#rolf_delete#:#Eliminare un ruolo o un template di ruolo common#:#rolf_edit_permission#:#Modificare le impostazioni dei permessi -common#:#rolf_edit_userassignment#:#Modificare l& +common#:#rolf_edit_userassignment#:#Modifica assegnazione utente dei ruoli common#:#rolf_read#:#Accedere in lettura ad un ruolo o ad un template di ruolo common#:#rolf_visible#:#Vedere un ruolo o un template di ruolo common#:#rolf_write#:#Modificare un ruolo o un template di ruolo @@ -5505,51 +5491,51 @@ common#:#rolt_new#:#Nuovo template di ruolo common#:#row#:#Riga common#:#rows#:#Righe common#:#rpc_pdf_font#:#Fonti -common#:#rpc_pdf_font_info#:#Additional fonts for the generation of PDF files. Other fonts than "Helvetica" and "unifont" must be installed on the ILIAS server. +common#:#rpc_pdf_font_info#:#Caratteri aggiuntivi per la generazione di file PDF. Font diversi da "Helvetica" e "unifont" devono essere installati sul server ILIAS. common#:#rpc_pdf_generation#:#Genera PDF -common#:#sad#:#Sad +common#:#sad#:#Triste common#:#sahs#:#Modulo SCORM/AICC common#:#sahs_added#:#Aggiunto modulo SCORM/AICC common#:#sahs_export_file#:#ILIAS ha esportato il file di archivio SCORM -common#:#sahs_export_file_info#:#Use this option for a ZIP file that was exported directly from ILIAS. The file typically has titles such as 1675257903__4105__sahs_132295.zip.###26 08 2024 new variable +common#:#sahs_export_file_info#:#Use this option for a ZIP file that was exported directly from ILIAS. The file typically has titles such as 1675257903__4105__sahs_132295.zip.###30 04 2024 new variable common#:#sahs_insert_chap_from_clip#:#Incolla Capitoli dagli Appunti common#:#sahs_insert_page_from_clip#:#Incolla Pagine dagli Appunti common#:#sahs_insert_sco_from_clip#:#Incolla SCO dagli Appunti -common#:#sahs_new#:#Create New Learning Module###26 08 2024 new variable +common#:#sahs_new#:#Create New Learning Module###28 11 2025 new variable common#:#salutation#:#Titolo common#:#salutation_f#:#Signora/Signorina common#:#salutation_m#:#Signore -common#:#salutation_n#:#No salutation desired +common#:#salutation_n#:#Nessun saluto desiderato common#:#saml_log_in#:#Accesso diretto common#:#saml_login_form_info_txt#:#È possibile accedere utilizzando il pulsante "Accesso diretto" senza dover inserire il nome utente o la password. common#:#saml_login_form_txt#:#Accedi a ILIAS tramite SAML common#:#save#:#Salva common#:#save_and_back#:#Salva e indietro common#:#save_message#:#Salva -common#:#save_params_for_cron#:#Save Parameter for Cronjob +common#:#save_params_for_cron#:#Salva parametro per Cronjob common#:#save_refresh#:#Salva e aggiorna common#:#save_return#:#Salva e invia common#:#save_settings#:#Salva le impostazioni common#:#save_user_related_data#:#Salva i dati relativi agli accessi degli utenti common#:#saved_successfully#:#Modifiche effettuate con successo common#:#saving#:#Salva... -common#:#scope#:#Scope###28 10 2024 new variable +common#:#scope#:#Scope###28 11 2025 new variable common#:#scorm_create_export_file_html#:#Crea file di esportazione (HTML) common#:#scorm_create_export_file_pdf#:#Crea file di esportazione (PDF) common#:#scorm_create_export_file_scrom12#:#Crea file di esportazione (SCORM 1.2) -common#:#scorm_create_export_file_scrom2004#:#Create Export File (SCORM 2004) +common#:#scorm_create_export_file_scrom2004#:#Crea file di esportazione (SCORM 2004) common#:#scorm_create_export_file_scrom2004_4th#:#Crea file di esportazione (SCORM 2004 quarta Edizione) -common#:#scorm_login_as_learner_id#:#SCORM 2004: set ILIAS User Name as cmi.learner_id -common#:#scorm_login_as_learner_id_info#:#If enabled, the User Name instead of the User ID is set for cmi.learner_id. -common#:#scorm_lp_auto_activate#:#default settings for learning progress -common#:#scorm_lp_auto_activate_info#:#If learning progress is activated in general, the settings for new SCORM learning modules are set to 'Collection of SCORM Items' and all SCOs are selected for learning progress determination. Adjustments are still possible for every SCORM learning module. -common#:#scorm_new#:#New SCORM/IACC Learning Module -common#:#scorm_without_session#:#SCORM 2004: enable storing data without session +common#:#scorm_login_as_learner_id#:#SCORM 2004: imposta il nome utente ILIAS come cmi.learner_id +common#:#scorm_login_as_learner_id_info#:#Se abilitato, il Nome utente anziché l'ID utente è impostato per cmi.learner_id. +common#:#scorm_lp_auto_activate#:#Impostazioni predefinite per l'avanzamento dell'apprendimento +common#:#scorm_lp_auto_activate_info#:#Se il progresso dell'apprendimento è attivato in generale, le impostazioni per i nuovi moduli di apprendimento SCORM sono impostate su "Raccolta di elementi SCORM" e tutti gli SCO sono selezionati per la determinazione del progresso dell'apprendimento. Le regolazioni sono ancora possibili per ogni modulo di apprendimento SCORM. +common#:#scorm_new#:#Nuovo modulo di apprendimento SCORM / IACC +common#:#scorm_without_session#:#SCORM 2004: abilita la memorizzazione dei dati senza sessione common#:#scorm_without_session_info#:#Ciò garantisce la memorizzazione dei dati di apprendimento SCORM anche se la sessione ILIAS è scaduta common#:#search#:#Ricerca common#:#search_active#:#Includi utenti attivi common#:#search_at_current_position#:#Nella posizione attuale -common#:#search_engine#:#Search Engines +common#:#search_engine#:#URL leggibili common#:#search_for#:#Ricerca common#:#search_globally#:#Totalmente common#:#search_in#:#Ricerca in @@ -5558,23 +5544,24 @@ common#:#search_new#:#Nuova ricerca common#:#search_result#:#Risultati ricerca common#:#search_results#:#Cerca risultati common#:#search_user#:#Ricerca utente -common#:#search_users#:#Look Up Users###29 10 2025 new variable +common#:#search_users#:#Look Up Users###28 11 2025 new variable common#:#seas_max_hits#:#Numero massimo di risultati common#:#seas_max_hits_info#:#Indica il numero massimo di risultati che vuoi visualizzare al termine della ricerca. common#:#seas_settings#:#Impostazioni per le ricerche common#:#second#:#Secondo -common#:#second_email#:#Second Email +common#:#second_email#:#Seconda email common#:#seconds#:#Secondi common#:#sel_country#:#Paese common#:#select#:#Seleziona common#:#select_all#:#Seleziona tutto common#:#select_at_least_one_object#:#Si prega di scegliere almeno un oggetto. common#:#select_file#:#Scegli il file -common#:#select_files_from_computer#:#Select the files from your computer +common#:#select_file_from_computer#:#Select File###28 11 2025 new variable +common#:#select_files_from_computer#:#Seleziona i file dal tuo computer common#:#select_max_one_item#:#Scegli un elemento solamente -common#:#select_object_to_link#:#Per favore seleziona l& -common#:#select_one#:#Selezionarne uno. -common#:#select_question_pool_info#:#As long as the import file contains questions, these questions will be imported to the selected questionpool as well.###07 02 2020 new variable +common#:#select_object_to_link#:#Seleziona l'oggetto che desideri collegare +common#:#select_one#:#Seleziona un elemento +common#:#select_question_pool_info#:#Finché il file di importazione contiene domande, queste domande verranno importate anche nel pool di domande selezionato. common#:#select_questionpool#:#Scegli la raccolta common#:#selected#:#Selezionati common#:#selected_files#:#File selezionati @@ -5582,7 +5569,7 @@ common#:#selected_items#:#Elementi selezionati common#:#selected_items_back#:#Indietro agli Elementi Personali common#:#selected_languages_updated#:#La lingua selezionata è stata aggiornata (se installata): common#:#send#:#Invia -common#:#send_mail#:#Send e-mail +common#:#send_mail#:#Invia Email common#:#sender#:#Mittente common#:#sent#:#Inviato common#:#sequence#:#Sequenza @@ -5595,15 +5582,15 @@ common#:#sess#:#Sessione common#:#sess_fixed_duration#:#Durata sessione fissa common#:#session_config#:#Impostazioni di sessione common#:#session_config_maintenance_disabled#:#Manutenzione da parte del cliente non consentita -common#:#session_mail_subject_deletion#:#Deregistration of user "%s" from session "%s"###07 02 2020 new variable -common#:#session_mail_subject_entered#:#Joining of user "%s" in session "%s"###07 02 2020 new variable -common#:#session_mail_subject_registered#:#Registration of user "%s" for session "%s"###07 02 2020 new variable +common#:#session_mail_subject_deletion#:#Annullamento della registrazione dell'utente "%s" dalla sessione "%s" +common#:#session_mail_subject_entered#:#Partecipazione dell'utente "%s" nella sessione "%s" +common#:#session_mail_subject_registered#:#Registrazione dell'utente "%s" per la sessione "%s" common#:#session_reminder#:#Promemoria di sessione -common#:#session_reminder_alert#:#Your session expires in 5 minutes. Please choose OK to continue your Session -common#:#session_reminder_default_lead_time_info#:#Please specify how many minutes before the expiration of a session a reminder should be shown.<br / >The function is deactivated when the value is '%s'. The recommended value is %s.<br / >The current length of a session is %s.###29 10 2025 new variable -common#:#session_reminder_input#:#Session Reminder (in Minutes)###28 10 2024 new variable +common#:#session_reminder_alert#:#La sessione scade tra 5 minuti. Scegli OK per continuare la sessione +common#:#session_reminder_default_lead_time_info#:#Please specify how many minutes before the expiration of a session a reminder should be shown.<br / >The function is deactivated when the value is '%s'. The recommended value is %s.<br / >The current length of a session is %s.###28 11 2025 new variable +common#:#session_reminder_input#:#Session Reminder (in Minutes)###28 11 2025 new variable common#:#session_reminder_lead_time#:#Tempo necessario -common#:#session_reminder_lead_time_info#:#Please specify, how much seconds before the session expires you want the session reminder to display a warning. The current value for a user session is %s. +common#:#session_reminder_lead_time_info#:#Specificare quanti secondi prima della scadenza della sessione si desidera che il promemoria della sessione visualizzi un avviso. Il valore corrente per una sessione utente è%s. common#:#session_reminder_session_duration#:#(Durata della sessione: %s). common#:#set#:#Imposta common#:#setSystemLanguage#:#Imposta come lingua di sistema @@ -5613,25 +5600,25 @@ common#:#set_online#:#Metti online common#:#set_skin_does_not_exist#:#Il tuo interfaccia selezionato non esiste più. Puoi modificare il tuo stile nelle impostazione personali o contatta il tuo amministratore. Selezione attuale: common#:#set_style_does_not_exist#:#Il tuo stile del sistema selezionato non esiste più. Puoi modificare il tuo stile nelle impostazione personali o contatta il tuo amministratore. Selezione attuale: common#:#settings#:#Impostazioni -common#:#settings_for_all_members#:#Global Setting for all Course/Group Members -common#:#settings_per_users#:#Settings per Course/Group Members -common#:#settings_presentation_header#:#Presentation###07 02 2020 new variable +common#:#settings_for_all_members#:#I membri riceveranno una notifica automatica +common#:#settings_per_users#:#Impostazioni per corso / membri del gruppo +common#:#settings_presentation_header#:#Presentazione common#:#settings_saved#:#Impostazioni salvate common#:#shib#:#Shibboleth common#:#shib_active#:#Abilita l'uso di Shibboleth -common#:#shib_city#:#Attributo per la citt& +common#:#shib_city#:#Attributo per la citta common#:#shib_country#:#Attributo per la nazione common#:#shib_data_conv#:#Percorso assoluto per le API di gestione dei dati -common#:#shib_data_conv_warning#:#Il file con le API per la gestione dei dati non pu& +common#:#shib_data_conv_warning#:#Il file API di manipolazione dei dati specificato non può essere letto common#:#shib_department#:#Attributo per il dipartimento -common#:#shib_email#:#Attributo per l& +common#:#shib_email#:#Attributo per indirizzo e-mail common#:#shib_federation_name#:#Nome della tua federazione Shibboleth common#:#shib_firstname#:#Attributo per il nome -common#:#shib_gender#:#Attributo per il sesso<br>(deve essere & +common#:#shib_gender#:#Attributo per il saluto (deve essere "m", "f" o "n") common#:#shib_general_login_instructions#:#Per accedere tramite %s, si prega di cliccare sul pulsante di accesso e scegliere la propria struttura nella pagina seguente.<br>Se ci sono domande inerenti a questo, si prega di chiedere a common#:#shib_general_wayf_login_instructions#:#Nel caso in cui non si è associati con le strutture proposte e si ha la necessità di accedere a un corso su questo server, si prega di contattare -common#:#shib_idp_list#:#Provide a list of Identity Providers to let the user choose from on the ILIAS login page.<br>On each line there must be a comma-separated tuple for <strong>providerID of IdP</strong> (see the Shibboleth metadata file) and <strong>Name of IdP</strong> as it shall be displayed in the drow-down list.<br>As an optional third parameter you can add the <strong>location of a Shibboleth session initiator</strong> that shall be used in case your ILIAS installation is part of a multi federation setup. -common#:#shib_institution#:#Attributo per l& +common#:#shib_idp_list#:#Fornisci un elenco di identità di provider per consentire all'utente di scegliere dalla pagina di accesso ILIAS. <br> Su ogni riga deve essere presente un campo separato da virgole per <strong> providerID di IdP </strong> (vedi il file di metadati di Shibboleth) e <strong> Nome dell'IDP </strong> come deve essere visualizzato nell'elenco a tendina. <br> Come terzo parametro facoltativo puoi aggiungere la <strong> posizione di un iniziatore di sessione Shibboleth </strong> che deve essere utilizzato nel caso in cui l'installazione ILIAS faccia parte di una configurazione multi-federazione. +common#:#shib_institution#:#Attributo per l'istitutzione common#:#shib_invalid_home_organization#:#Si prega di scegliere una struttura valida! common#:#shib_language#:#Attributo per la lingua common#:#shib_lastname#:#Attributo per i cognome @@ -5649,30 +5636,30 @@ common#:#shib_phone_mobile#:#Attributo per il numero del cellulare common#:#shib_phone_office#:#Attributo per il numero di telefono di ufficio common#:#shib_select_home_organization#:#Per autenticazione via %s, per cortesia seleziona la tua organizzazione dal menu a tendina. common#:#shib_settings_saved#:#Le impostazioni di Shibboleth sono state salvate. -common#:#shib_street#:#Attributo per l& +common#:#shib_street#:#Attributo per la strada common#:#shib_title#:#Attributo per il titolo common#:#shib_update#:#Aggiorna al login common#:#shib_user_default_role#:#Ruolo da assegnare agli utenti Shibboleth common#:#shib_zipcode#:#Attributo per il codice postale common#:#short_inst_name#:#Titolo breve -common#:#short_inst_name_info#:#This title will appear in the browser header title bar. If no value is entered, 'ILIAS' is used. +common#:#short_inst_name_info#:#Questo titolo verrà visualizzato nella barra del titolo dell'intestazione del browser. Se non viene inserito alcun valore, viene utilizzato "ILIAS". common#:#show#:#Mostra common#:#show_all_details#:#Mostra tutti i dettagli -common#:#show_content#:#Show Content###29 07 2022 new variable +common#:#show_content#:#Show Content###31 03 2023 new variable common#:#show_details#:#Mostra dettagli common#:#show_filter#:#Mostra filtro common#:#show_hidden_sections#:#Mostra maggiori informazioni &raquo; common#:#show_list#:#Mostra lista common#:#show_members#:#Mostra iscritti -common#:#show_more#:#Show More###29 07 2022 new variable -common#:#show_preview#:#Show Preview###26 08 2024 new variable +common#:#show_more#:#Mostra di più +common#:#show_preview#:#Show Preview###30 04 2024 new variable common#:#show_users_online#:#Mostra gli utenti -common#:#show_who_is_online#:#Show who is online###29 07 2022 new variable +common#:#show_who_is_online#:#Mostra chi è online common#:#side_frame#:#Struttura laterale common#:#signature#:#Firma common#:#size#:#Dimensione -common#:#skills#:#Skills -common#:#skin_style#:#Predefinito Skin / Stile +common#:#skills#:#competenze +common#:#skin_style#:#Tema / Stile di Default common#:#smtp#:#SMTP common#:#soap_connect_timeout#:#Timeout connessione common#:#soap_connect_timeout_info#:#Il tempo massimo in secondi fino a quando non viene interrotto un tentativo di servizio Web SOAP. @@ -5680,12 +5667,12 @@ common#:#soap_user_administration#:#Amministrazione utenti esterna (SOAP) common#:#soap_user_administration_desc#:#Se selezionato, tutti gli utenti potranno essere amministrati tramite un client SOAP esterno. common#:#soap_wsdl_path#:#Percorso WSDL common#:#soap_wsdl_path_info#:#Si prega di inserire il percorso del file ilias wsdl che deve essere utilizzato per il servizio Web. Se si lascia vuoto questo campo, verrà utilizzato il seguente percorso per impostazione predefinita:%s -common#:#sort#:#Sort###28 10 2024 new variable -common#:#sort_ascending#:#Sort Ascending###29 07 2022 new variable -common#:#sort_ascending_long#:#Change Sort Direction to Ascending###26 08 2024 new variable +common#:#sort#:#Sort###28 11 2025 new variable +common#:#sort_ascending#:#Ordinare in ordine crescente +common#:#sort_ascending_long#:#Change Sort Direction to Ascending###17 05 2023 new variable common#:#sort_by_this_column#:#Ordina secondo questa colonna -common#:#sort_descending#:#Sort Descending###29 07 2022 new variable -common#:#sort_descending_long#:#Change Sort Direction to Descending###26 08 2024 new variable +common#:#sort_descending#:#Ordinare in ordine decrescente +common#:#sort_descending_long#:#Change Sort Direction to Descending###17 05 2023 new variable common#:#sort_inherit_prefix#:#Impostazione predefinita common#:#sorting_asc#:#Ascendente common#:#sorting_creation_header#:#Da data di creazione @@ -5693,12 +5680,12 @@ common#:#sorting_creation_info#:#Gli elementi di contenuto vengono disposti auto common#:#sorting_desc#:#Discendente common#:#sorting_direction#:#Direzione di ordinamento common#:#sorting_header#:#Ordinamento degli elementi di contenuto -common#:#sorting_info_inherit#:#The sorting mode is adpated from a parent course. -common#:#sorting_info_manual#:#This mode offers you the possibility to sort items manually. +common#:#sorting_info_inherit#:#La modalità di ordinamento è adattata da un corso principale. +common#:#sorting_info_manual#:#Questa modalità ti offre la possibilità di ordinare gli oggetti manualmente. common#:#sorting_info_title#:#Scegli questa modalità per ordinare automaticamente gli elementi secondo il titolo. -common#:#sorting_manual_header#:#Sort Manually +common#:#sorting_manual_header#:#Ordina manualmente common#:#sorting_save#:#Salva ordinamento -common#:#sorting_title_header#:#Sort by Title +common#:#sorting_title_header#:#Ordina per titolo common#:#spacer#:#Spaziatore common#:#spl#:#Raccolta di domande (per sondaggi) common#:#spl_add#:#Aggiungi raccolta di domande @@ -5724,7 +5711,7 @@ common#:#subobjects#:#Sotto oggetto common#:#subscription#:#Iscrizione common#:#subtabs#:#Sottoschede common#:#success_message#:#Messaggio di successo -common#:#summary#:#Riassunto +common#:#summary#:#Sommario common#:#sure_delete_selected_users#:#Sei sicuro di voler eliminare gli utenti selezionati common#:#survey_defaults#:#Impostazioni di Default per i sondaggi common#:#survey_unlimited_invitation#:#Invito illimitato @@ -5735,46 +5722,46 @@ common#:#svy_new#:#Nuovo sondaggio common#:#svy_not_finished#:#non completato common#:#svy_not_started#:#non iniziato common#:#svy_run#:#Esegui -common#:#svy_warning_survey_not_complete#:#Il sondaggio non & -common#:#switch_language#:#Switch Language###29 07 2022 new variable +common#:#svy_warning_survey_not_complete#:#Il sondaggio è incompleto +common#:#switch_language#:#Cambia lingua common#:#system#:#Sistema common#:#system_check#:#Verifica del sistema common#:#system_information#:#Informazioni di sistema common#:#system_language#:#Lingua di sistema common#:#system_styles#:#Stili di sistema -common#:#systemcheck_cron#:#Process System Check in Cronjob +common#:#systemcheck_cron#:#Controllo del sistema di processo in Cronjob common#:#systemcheck_cronform#:#Attiva la verifica di sistema in Cronjob -common#:#table_mail_import#:#Importazione delle mail da ILIAS 2 +common#:#table_mail_import#:#Importazione delle mail common#:#tabs#:#Schede common#:#tagging_my_tags#:#I miei tag -common#:#tags#:#Tags###29 07 2022 new variable -common#:#take_over_structure#:#Adotta Struttura -common#:#take_over_structure_info#:#Se attivate, le directories nel file zip saranno mappate in categorie oppure, se utilizzate in gruppi o corsi, in cartelle. -common#:#tals_etal#:#Talk -common#:#talt_etal#:#Talk +common#:#tags#:#Tags +common#:#take_over_structure#:#Adotta struttura dello zip +common#:#take_over_structure_info#:#Se attivate, le directories nel file zip saranno mappate in categorie oppure in cartelle. +common#:#tals_etal#:#Talk###31 03 2023 new variable +common#:#talt_etal#:#Talk###31 03 2023 new variable common#:#target#:#Obiettivo common#:#tax#:#Tassonomia common#:#tax_add#:#Aggiungi tassonomia common#:#tax_new#:#Nuova tassonomia common#:#term#:#Termine common#:#test#:#Test -common#:#tests#:#Test +common#:#tests#:#Tests common#:#textbox#:#Casella di testo -common#:#thread#:#Discussione +common#:#thread#:#Thread common#:#thumbnail#:#Anteprima -common#:#tile_view#:#Tile View###28 10 2024 new variable +common#:#tile_view#:#Tile View###28 11 2025 new variable common#:#time#:#Ora common#:#time_limit#:#Scadenza -common#:#time_limit_add_time_limit_for_selected#:#Per favore specifica la data di scadenza dell& +common#:#time_limit_add_time_limit_for_selected#:#Inserisci un periodo di tempo per gli utenti selezionati common#:#time_limit_from#:#A partire da (limite di tempo) common#:#time_limit_message#:#Messaggio (limite di tempo) common#:#time_limit_no_users_selected#:#Per favore scegli un utente. -common#:#time_limit_not_valid#:#Il periodo non & -common#:#time_limit_reached#:#Il tuo periodo di accesso & +common#:#time_limit_not_valid#:#Il periodo non è valido +common#:#time_limit_reached#:#Il tuo account non è attivo. common#:#time_limit_unlimited#:#Illimitato (limite di tempo) common#:#time_limit_until#:#Fino a (limite di tempo) common#:#title#:#Titolo -common#:#title_required#:#Please insert a title +common#:#title_required#:#Si prega di inserire un titolo common#:#to#:#A common#:#to_client_list#:#Vai alla lista di Client common#:#today#:#Oggi @@ -5784,22 +5771,22 @@ common#:#toggle_dropdown#:#Attiva/disattiva il menu a tendina common#:#toggle_off#:#OFF### Don't translate this label to prevent rendering problems of the related Toggle Button! common#:#toggle_on#:#ON### Don't translate this label to prevent rendering problems of the related Toggle Button! common#:#tomorrow#:#Domani -common#:#toolbar_more_actions#:#More Actions###26 08 2024 new variable -common#:#tools#:#Tools###29 07 2022 new variable +common#:#toolbar_more_actions#:#More Actions###31 03 2023 new variable +common#:#tools#:#Tools common#:#top_of_page#:#Parte superiore della pagina -common#:#tos_accept_usr_agreement#:#Accept Terms of Service?###26 08 2024 new variable -common#:#tos_accept_usr_agreement_intro#:#There are new terms of service. You need to accept them before proceeding with the use of ILIAS. Read the following document carefully and give your consent or dissent at the bottom of the page.###26 08 2024 new variable -common#:#tos_force_accept_usr_agreement#:#You must accept the Terms of Service!###26 08 2024 new variable -common#:#tos_no_agreement_description#:#There is currently no Terms of Service document available for this installation. Please contact the <a href="%1$s">system administrator</a>.###26 08 2024 new variable -common#:#tos_refuse_acceptance#:#Refuse to Accept Terms of Service###26 08 2024 new variable -common#:#tos_usr_agreement#:#Terms of Service###26 08 2024 new variable -common#:#tos_usr_agreement_footer_intro#:#You have declared your consent to these terms of service.###26 08 2024 new variable -common#:#tos_withdraw_consent_description#:#Withdraw your consent to our Terms of Service here.###26 08 2024 new variable -common#:#tos_withdraw_consent_description_external#:#Please return to your ILIAS installation and log in again to complete the process of withdrawing your consent to the Terms of Service.###26 08 2024 new variable -common#:#tos_withdraw_consent_description_internal#:#Please log in again to complete the process of withdrawing your consent to the Terms of Service.###26 08 2024 new variable -common#:#tos_withdraw_consent_header#:#Withdraw Terms of Service Consent###26 08 2024 new variable -common#:#tos_withdraw_consent_info#:#Withdraw your consent to our Terms of Service.###26 08 2024 new variable -common#:#tos_withdraw_consent_info_external#:#Please contact the administrator of your authentication system and inform them of your intention to withdraw your consent to the Terms of Service.###26 08 2024 new variable +common#:#tos_accept_usr_agreement#:#Accept Terms of Service?###30 04 2024 new variable +common#:#tos_accept_usr_agreement_intro#:#There are new terms of service. You need to accept them before proceeding with the use of ILIAS. Read the following document carefully and give your consent or dissent at the bottom of the page.###30 04 2024 new variable +common#:#tos_force_accept_usr_agreement#:#You must accept the Terms of Service!###30 04 2024 new variable +common#:#tos_no_agreement_description#:#There is currently no Terms of Service document available for this installation. Please contact the <a href="%1$s">system administrator</a>.###30 04 2024 new variable +common#:#tos_refuse_acceptance#:#Refuse to Accept Terms of Service###30 04 2024 new variable +common#:#tos_usr_agreement#:#Terms of Service###30 04 2024 new variable +common#:#tos_usr_agreement_footer_intro#:#You have declared your consent to these terms of service.###30 04 2024 new variable +common#:#tos_withdraw_consent_description#:#Withdraw your consent to our Terms of Service here.###30 04 2024 new variable +common#:#tos_withdraw_consent_description_external#:#Please return to your ILIAS installation and log in again to complete the process of withdrawing your consent to the Terms of Service.###30 04 2024 new variable +common#:#tos_withdraw_consent_description_internal#:#Please log in again to complete the process of withdrawing your consent to the Terms of Service.###30 04 2024 new variable +common#:#tos_withdraw_consent_header#:#Withdraw Terms of Service Consent###30 04 2024 new variable +common#:#tos_withdraw_consent_info#:#Withdraw your consent to our Terms of Service.###30 04 2024 new variable +common#:#tos_withdraw_consent_info_external#:#Please contact the administrator of your authentication system and inform them of your intention to withdraw your consent to the Terms of Service.###30 04 2024 new variable common#:#total#:#Totale common#:#tracking_settings#:#Impostazioni del tracciamento common#:#translation#:#Traduzione @@ -5810,64 +5797,64 @@ common#:#treeview#:#Vista ad albero common#:#tst#:#Test common#:#tst_add#:#Aggiungi test common#:#tst_edit_questions#:#Modifica domande -common#:#tst_history_read#:#View History###26 08 2024 new variable +common#:#tst_history_read#:#View History###28 11 2025 new variable common#:#tst_new#:#Nuovo test -common#:#tst_results#:#Test Results +common#:#tst_results#:#Risultati del test common#:#tst_run#:#Esegui -common#:#tst_user_not_invited#:#Non sei iscritto a questo esame. -common#:#tst_warning_test_not_complete#:#Il test non & -common#:#tutors#:#Tutor +common#:#tst_user_not_invited#:#Non sei iscritto a questo esame online. +common#:#tst_warning_test_not_complete#:#Il test non è completo! +common#:#tutors#:#Tutori common#:#txt_registered#:#Ti sei registrato con successo a ILIAS. Per favore, utilizza il pulsante sotto per accedere ad ILIAS con il tuo utente. common#:#txt_registered_passw_gen#:#Ti sei registrato con successo a ILIAS. A breve riceverai una mail con la password generata. -common#:#txt_submitted#:#E& +common#:#txt_submitted#:#Hai inviato correttamente una richiesta di account a ILIAS. La richiesta dell'account verrà esaminata dagli amministratori di sistema e dovrebbe essere attivata entro 48 ore. Non sarai in grado di accedere fino a quando il tuo account non viene attivato. common#:#typ#:#Definizione del tipo di oggetto common#:#type#:#Tipo common#:#udf_added_field#:#Aggiunto nuovo campo. common#:#udf_delete_sure#:#Sei sicuro di voler eliminare questo campo e con esso tutti i valori corrispondenti inseriti dagli utenti? common#:#udf_duplicate_entries#:#I valori devono essere unici. common#:#udf_field_deleted#:#Campo eliminato. -common#:#udf_name_already_exists#:#Il nome di questo campo & -common#:#udf_required_requires_visib_reg#:#When field is set to "required", it must be set to "visible in registration" +common#:#udf_name_already_exists#:#Questo nome di campo esiste già. Scegli un nome diverso. +common#:#udf_required_requires_visib_reg#:#Quando il campo è impostato su "obbligatorio", deve essere impostato su "visibile in registrazione". common#:#udf_type_date#:#Campo Data common#:#udf_type_datetime#:#Data e Ora common#:#udf_type_select#:#Menu a tendina (valori fissati) common#:#udf_type_text#:#Campo testo (valori opzionali) -common#:#udf_type_textarea#:#Area di testo (WYSIWYG) +common#:#udf_type_textarea#:#Text Area###28 11 2025 new variable common#:#udf_update_select_field#:#Modifica menu a tendina common#:#udf_update_text_field#:#Modifica campo testo common#:#udf_update_wysiwyg_field#:#Area per la modifica del testo (WYSIWYG) -common#:#uid#:#uid -common#:#ums_create_new_account#:#Creare Nuovo Account +common#:#uid#:#UID (identificativo utente) +common#:#ums_create_new_account#:#Crea un Nuovo Account common#:#ums_explanation#:#Il tuo account esterno non può essere mappato in un account ILIAS. Ma ILIAS ha trovato un account con il tuo indirizzo email. Se questo è il tuo account, collegati con la tua password ILIAS. -common#:#ums_explanation_2#:#If this is not your account, please hit 'Create New Account'. +common#:#ums_explanation_2#:#Se questo non è il tuo account, fai clic su "Crea nuovo account". common#:#ums_explanation_3#:#Il tuo account esterno non può essere mappato in un account ILIAS. Ma ILIAS ha trovato diversi account con il tuo indirizzo email. Se uno di questi è il tuo account, collegati con la tua password ILIAS. -common#:#ums_explanation_4#:#Se nessuno di loro è il tuo account per cortesia digita 'Crea Nuovo Account'. +common#:#ums_explanation_4#:#Se nessuno di questi è il tuo account, seleziona 'Crea Nuovo Account'. common#:#unambiguousness#:#Riconoscimento basato su common#:#uncheck_all#:#Deseleziona tutto common#:#unchecked#:#Non verificato common#:#uninstall#:#Rimuovi common#:#uninstalled#:#Rimosso. common#:#unknown#:#Sconosciuto -common#:#unparticipate#:#Unsubscribe###07 02 2020 new variable +common#:#unparticipate#:#Annulla l'iscrizione common#:#unread#:#non lette common#:#unzip#:#Estrai common#:#up#:#Su common#:#update#:#Modifica common#:#update_applied#:#Aggiornamento effettuato -common#:#update_language#:#Lingua aggiornata +common#:#update_language#:#Aggiorna la lingua common#:#update_on_conflict#:#Modifica i conflitti common#:#update_orgunits#:#Aggiornare le unità organizzative assegnate common#:#update_orgunits_desc#:#Se abilitato, il campo 'Unità organizzative' verrà aggiornato per tutti gli account utente. common#:#upload#:#Importa -common#:#upload_error_file_not_found#:#Errore nell& -common#:#upload_ok#:#The upload was successful###29 10 2025 new variable +common#:#upload_error_file_not_found#:#Errore di caricamento: file non trovato. +common#:#upload_ok#:#The upload was successful###28 11 2025 new variable common#:#upload_pending#:#In sospeso -common#:#upload_settings#:#Uploading Settings -common#:#upload_svg_rejection_message#:#An uploaded SVG file contains possibily malicious code and cannot be processed.###26 08 2024 new variable -common#:#upload_svg_rejection_message_base64#:#The file contains base64 encoded content.###26 08 2024 new variable -common#:#upload_svg_rejection_message_elements#:#The file contains elements or attributes which are not allowed or known.###26 08 2024 new variable -common#:#upload_svg_rejection_message_script#:#The file contains script-Elements.###26 08 2024 new variable -common#:#uploaded_and_checked#:#E& +common#:#upload_settings#:#Caricamento delle impostazioni +common#:#upload_svg_rejection_message#:#An uploaded SVG file contains possibily malicious code and cannot be processed.###30 04 2024 new variable +common#:#upload_svg_rejection_message_base64#:#The file contains base64 encoded content.###30 04 2024 new variable +common#:#upload_svg_rejection_message_elements#:#The file contains elements or attributes which are not allowed or known.###30 04 2024 new variable +common#:#upload_svg_rejection_message_script#:#The file contains script-Elements.###30 04 2024 new variable +common#:#uploaded_and_checked#:#Il file è stato caricato e verificato, ora puoi iniziare a importarlo. common#:#uploading#:#Caricamento... common#:#uri#:#URI common#:#url#:#URL @@ -5878,32 +5865,32 @@ common#:#user#:#Utente common#:#user_activated#:#L’utente è stato approvato common#:#user_added#:#Utente aggiunto common#:#user_assignment#:#Utenti assegnati -common#:#user_avatar#:#User Avatar###29 07 2022 new variable -common#:#user_avatar_of#:#User Avatar of###29 07 2022 new variable -common#:#user_cant_receive_mail#:#l& +common#:#user_avatar#:#User Avatar +common#:#user_avatar_of#:#User Avatar of +common#:#user_cant_receive_mail#:# %1$s (l'utente non è autorizzato a utilizzare il sistema di posta) common#:#user_comment#:#Commento utente -common#:#user_deactivated#:#L’utente è stato disapprovato +common#:#user_deactivated#:#Gli utenti selezionati sono stati disattivati common#:#user_defined_fields#:#Campi definiti dall'utente -common#:#user_defined_list#:#Lista definita dall& +common#:#user_defined_list#:#Campi dati utente personalizzati common#:#user_deleted#:#Cancellazione eseguita common#:#user_detail#:#Dettagli dei dati common#:#user_ext_account#:#Account esterno -common#:#user_ext_account_desc#:#Account utilizzato per autenticazione esterna. (SOAP authentication) +common#:#user_ext_account_desc#:#Account utilizzato per autenticazione esterna. (CAS or SOAP authentication) common#:#user_image#:#Immagine utente common#:#user_import_failed#:#Importazione utenti fallita. common#:#user_imported#:#Importazione utenti completata. common#:#user_imported_with_warnings#:#Importazione utenti completata con alcuni warning. common#:#user_language#:#Lingua -common#:#user_never_logged_in#:#Delete user accounts without login###07 02 2020 new variable -common#:#user_never_logged_in_info#:#All user accounts without login at all be deleted.###07 02 2020 new variable -common#:#user_never_logged_in_info_threshold_err_num#:#Only positive non decimal numbers are accepted.###07 02 2020 new variable +common#:#user_never_logged_in#:#Cancella account utente senza login +common#:#user_never_logged_in_info#:#Tutti gli account utente senza login sono stati cancellati +common#:#user_never_logged_in_info_threshold_err_num#:#Sono accettati solo numeri interi positivi senza virgola. common#:#user_new_account_mail#:#Nuovo account mail -common#:#user_new_account_mail_desc#:#This mail can be sent when an ILIAS user is created by other means then self-registration. +common#:#user_new_account_mail_desc#:#Questa posta può essere inviata quando un utente ILIAS viene creato con altri mezzi, quindi con la registrazione automatica. common#:#user_not_found#:#Utente non trovato common#:#user_not_found_to_delete#:#Impossibile trovare un utente da eliminare. -common#:#user_not_known#:#Inserisci il nome di un utente valido. +common#:#user_not_known#:#Inserisci un nome utente valido. common#:#user_profile_other#:#Ulteriori informazioni -common#:#user_send_new_account_mail#:#Send new account mail +common#:#user_send_new_account_mail#:#Invia nuovo account email common#:#user_status#:#Stato utente common#:#user_toggle_noti#:#Il membro non è autorizzato per disattivare le notifiche common#:#userfolder_export_csv#:#Valori separati da punteggiatura (CSV) @@ -5913,7 +5900,7 @@ common#:#userfolder_export_file_size#:#Dimensioni file common#:#userfolder_export_files#:#File common#:#userfolder_export_xml#:#XML common#:#username#:#Login -common#:#username_assistance#:#Username Assistance###26 08 2024 new variable +common#:#username_assistance#:#Username Assistance###30 04 2024 new variable common#:#users#:#Utenti common#:#users_not_imported#:#I seguenti utenti non esistono, i loro messaggi non possono essere importati common#:#users_online#:#Utenti online @@ -5922,7 +5909,7 @@ common#:#usr_account_inactive#:#Disattiva account common#:#usr_active_only#:#Utenti attivi common#:#usr_add#:#Aggiungi utente common#:#usr_edit#:#Modifica utente -common#:#usr_field_change_components_listening#:#There is at least one component which is interested in the changed configuration. Would you like to confirm the changes with the consequences the component(s) announced below?###29 07 2022 new variable +common#:#usr_field_change_components_listening#:#There is at least one component which is interested in the changed configuration. Would you like to confirm the changes with the consequences the component(s) announced below?###31 03 2023 new variable common#:#usr_filter_coursemember#:#Membro del corso common#:#usr_filter_groupmember#:#Membro del gruppo common#:#usr_filter_lastlogin#:#Ultimo accesso dell’utente @@ -5931,8 +5918,8 @@ common#:#usr_inactive_only#:#Utenti non attivi common#:#usr_limited_access_only#:#Solo utenti con accesso limitato common#:#usr_name_undisclosed#:#Non rivelato common#:#usr_new#:#Nuovo utente -common#:#usr_settings_changeable_lua#:#Cambiare in amministrazione utenti locali -common#:#usr_settings_explanation_profile#:#Seleziona le opzioni corrispondenti per disabilitare o nascondere le impostazioni del profilo personale per tutti gli utenti indicati nella pagina & +common#:#usr_settings_changeable_lua#:#Impostazione modificabile in Amministrazione Utente Locale +common#:#usr_settings_explanation_profile#:#Seleziona "Visibile" per visualizzare i campi nel modulo di registrazione e i dati personali sul desktop personale. Seleziona "Modificabile" per consentire all'utente di modificare il valore nei dati personali. Si noti che i campi visibili possono sempre essere inseriti nel modulo di registrazione. I campi obbligatori sono richiesti nel modulo di registrazione e nei dati personali. Tutti i dati possono essere modificati nell'amministrazione utente indipendentemente da queste impostazioni. common#:#usr_settings_header_profile#:#Impostazioni profilo utenti common#:#usr_settings_saved#:#Impostazioni globali utente salvate con successo! common#:#usr_settings_visib_lua#:#Visibile in amministrazione utenti locali @@ -5942,25 +5929,25 @@ common#:#usrf#:#Cartella utenti common#:#usrf_profile_link#:#Collega a profilo utente common#:#usrimport_action_ignored#:#Operazione %1$s ignorata. common#:#usrimport_action_replaced#:#Sostituita operazione %1$s con %2$s. -common#:#usrimport_cant_delete#:#Non pu& -common#:#usrimport_cant_insert#:#Non pu& -common#:#usrimport_cant_update#:#Non pu& -common#:#usrimport_conflict_handling_info#:#Se & -common#:#usrimport_form_not_evaluabe#:#The form data couldn't be read.###29 07 2022 new variable -common#:#usrimport_global_role_for_action_required#:#Per l& +common#:#usrimport_cant_delete#:#Impossibile eseguire l'azione "Elimina". Nessun utente di questo tipo nel database. +common#:#usrimport_cant_insert#:#Impossibile eseguire l'azione "Elimina". Nessun utente di questo tipo nel database. +common#:#usrimport_cant_update#:#Impossibile eseguire l'azione "Elimina". Nessun utente di questo tipo nel database. +common#:#usrimport_conflict_handling_info#:#Quando si seleziona 'Ignora in conflitto', ILIAS ignora un'azione, se non può essere eseguita (ad es. Un'azione 'Inserisci' non viene eseguita, se nel database è già presente un utente con lo stesso accesso.) Quando si aggiorna in caso di conflitto ", ILIAS aggiorna il database se non è possibile eseguire un'azione. (ad esempio un'azione "Inserisci" è sostituita da un'azione "Aggiorna", se nel database esiste un utente con lo stesso accesso). +common#:#usrimport_form_not_evaluabe#:#Impossibile leggere i dati nel modulo. +common#:#usrimport_global_role_for_action_required#:#È necessario specificare almeno un ruolo globale per l'azione " %1$s". common#:#usrimport_ignore_role#:#Ignora il ruolo common#:#usrimport_login_is_not_unique#:#Login non unico. common#:#usrimport_no_insert_ext_account_exists#:#Non e' possibile eseguire l'azione di inserimento. Esistono già account esterni. common#:#usrimport_no_update_ext_account_exists#:#Non è possibile eseguire l'azione di "Update". Esistono già account esterni. -common#:#usrimport_with_specified_role_not_permitted#:#Non & -common#:#usrimport_wrong_file_count#:#Too many files in import-folder. Please try again.###29 07 2022 new variable -common#:#usrimport_xml_anonymous_or_root_not_allowed#:#Neither the system-account nor the anonymous account can be changed through the import.###26 08 2024 new variable -common#:#usrimport_xml_attribute_missing#:#L& -common#:#usrimport_xml_attribute_value_illegal#:#Il valore & -common#:#usrimport_xml_attribute_value_inapplicable#:#Il valore & -common#:#usrimport_xml_element_content_illegal#:#Il contenuto & -common#:#usrimport_xml_element_for_action_required#:#L& -common#:#usrimport_xml_element_inapplicable#:#L& +common#:#usrimport_with_specified_role_not_permitted#:#Importazione con ruolo specificato non consentita. +common#:#usrimport_wrong_file_count#:#La cartella import-folder contiene troppi elementi. Riprova. +common#:#usrimport_xml_anonymous_or_root_not_allowed#:#Neither the system-account nor the anonymous account can be changed through the import.###13 09 2023 new variable +common#:#usrimport_xml_attribute_missing#:#Attributo " %2$s" nell'elemento " %1$s" mancante. +common#:#usrimport_xml_attribute_value_illegal#:#Il valore " %3$s" dell'attributo " %2$s" nell'elemento " %1$s" non è consentito. +common#:#usrimport_xml_attribute_value_inapplicable#:#Il valore " %3$s" dell'attributo " %2$s" nell'elemento " %1$s" non è applicabile per l'azione " %4$s". +common#:#usrimport_xml_element_content_illegal#:#Il contenuto " %2$s" dell'elemento " %1$s" non è consentito. +common#:#usrimport_xml_element_for_action_required#:#L'elemento " %1$s" deve essere specificato per l'azione " %2$s". +common#:#usrimport_xml_element_inapplicable#:#L'elemento " %1$s" non è applicabile per l'azione " %2$s". common#:#valid#:#Valido common#:#validate#:#Valida common#:#value#:#Valore @@ -5975,45 +5962,45 @@ common#:#view#:#Visualizza common#:#view_content#:#Vedi il contenuto common#:#view_learning_progress#:#Visualizza il progresso dell'apprendimento common#:#view_learning_progress_rec#:#Visualizza il progresso dell'apprendimento delle unità incluse le sottounità -common#:#visible#:#Vedere +common#:#visible#:#Visibile common#:#visible_registration#:#Visibile nella registrazione common#:#visitor#:#Ospite common#:#visitors#:#Ospiti common#:#visits#:#Visite common#:#web_resources#:#Risorse web common#:#webdav#:#WebDAV -common#:#webdav_add_instructions_btn_label#:#Add Mount Instructions Document###07 02 2020 new variable -common#:#webdav_chosen_language_already_used#:#There already is another document associated with the chosen language###07 02 2020 new variable -common#:#webdav_doc_delete#:#Delete WebDav Mount Instructions###07 02 2020 new variable -common#:#webdav_docs_mount_instructions#:#Mount Instructions Documents###07 02 2020 new variable -common#:#webdav_duplicate_detected_title#:#Following objects could not be displayed, because an object with the same Title is already being shown:###07 02 2020 new variable -common#:#webdav_enable_versioning#:#File Versioning###07 02 2020 new variable -common#:#webdav_forbidden_chars_title#:#Following files cannot be displayed, because they contain one or more forbidden characters (\<>/:*?"|#):###07 02 2020 new variable -common#:#webdav_form_document#:#Instructions Document###07 02 2020 new variable -common#:#webdav_form_document_info#:#Upload a txt or an html file here. After the upload the file will be parsed and processed. For more information###07 02 2020 new variable -common#:#webdav_form_document_title#:#Title###07 02 2020 new variable -common#:#webdav_form_document_title_info#:#This title will be dislayed as the title of the modal when the Mount Instructions are opened###07 02 2020 new variable -common#:#webdav_form_edit_doc_head#:#Edit Mount Instructions Document###07 02 2020 new variable -common#:#webdav_form_new_doc_head#:#Create new Mount Instructions Document###07 02 2020 new variable -common#:#webdav_general_settings#:#General Settings###07 02 2020 new variable -common#:#webdav_missing_lang#:#There is no english version of the WebDAV Mount Instructions###07 02 2020 new variable -common#:#webdav_mount_instructions#:#Mount Instructions###07 02 2020 new variable -common#:#webdav_problem_free_container#:#There are no objects that cause problems in this container.###07 02 2020 new variable -common#:#webdav_problem_info_duplicate#:#There is a file with the same title as the info file.###07 02 2020 new variable -common#:#webdav_pwd_instruction#:#We suggest to create a local password for opening the repository as webfolder.<br />This password is only required for the webfolder functionalities. +common#:#webdav_add_instructions_btn_label#:#Aggiungere il documento con le istruzioni di montaggio +common#:#webdav_chosen_language_already_used#:#Esiste già un documento associato alla lingua selezionata +common#:#webdav_doc_delete#:#Elimina le istruzioni di montaggio di WebDav +common#:#webdav_docs_mount_instructions#:#Documenti di istruzioni di montaggio +common#:#webdav_duplicate_detected_title#:#I seguenti oggetti non possono essere mostrati, perchè esiste già un oggetto con lo stesso titolo: +common#:#webdav_enable_versioning#:#Versioning del File +common#:#webdav_forbidden_chars_title#:#I seguenti file non possono essere mostrati, perchè contengono uno o più caratteri non consentiti (\<>/:*?"|#): +common#:#webdav_form_document#:#Istruzioni Documento +common#:#webdav_form_document_info#:#Carica un file di testo o .html qui. Dopo il caricamento, il file verrà processato dopo l'upload. +common#:#webdav_form_document_title#:#Titolo +common#:#webdav_form_document_title_info#:#Questo titolo verrà mostrato come titolo del Modal quando le Istruzioni di Mount vengono aperte. +common#:#webdav_form_edit_doc_head#:#Modifica le Istruzioni di Mount del Documento. +common#:#webdav_form_new_doc_head#:#Crea un nuovo Documento di Istruzioni di Mount +common#:#webdav_general_settings#:#Opzioni Generali +common#:#webdav_missing_lang#:#Non è presente una versione inglese del Documento di Istruzioni di Mount +common#:#webdav_mount_instructions#:#Istruzioni di Mount +common#:#webdav_problem_free_container#:#Non ci sono oggetti che creano problemi in questo container. +common#:#webdav_problem_info_duplicate#:#Esiste già un file con lo stesso titolo del file di info. +common#:#webdav_pwd_instruction#:#Suggeriamo di creare una password locale per l'apertura del repository come cartella web. <br /> Questa password è richiesta solo per le funzionalità della cartella web. common#:#webdav_pwd_instruction_success#:#È stata creata una nuova password locale. Adesso è possibile aprire il repository come cartella web. -common#:#webdav_sure_delete_documents_s#:#Are you sure you want to delete the Mount Instructions with the following title:###07 02 2020 new variable -common#:#webdav_tbl_docs_head_title#:#Dokument title###07 02 2020 new variable -common#:#webdav_tbl_docs_title#:#List of uploaded WebDAV Mount Instructions###07 02 2020 new variable -common#:#webdav_upload_instructions#:#Upload Instructions###07 02 2020 new variable -common#:#webdav_versioning_info#:#If enabled, already existing files will get a new version instead of beeing overwritten.###07 02 2020 new variable +common#:#webdav_sure_delete_documents_s#:#Siete sicuri di voler rimuovere le Istruzioni di Mount con il seguente titolo: +common#:#webdav_tbl_docs_head_title#:#Titolo Docuemnto: +common#:#webdav_tbl_docs_title#:#Lista di Istruzioni di Mount WebDAV caricati: +common#:#webdav_upload_instructions#:#Istruzioni di Upload +common#:#webdav_versioning_info#:#Se abilitata, i file esistenti riceveranno una nuova versione invece che essere sovrascritti. common#:#webfolder_dir_info#:#Sei qui perché il tuo browser non può aprire le cartelle web. Leggi le <a href="%1$s">istruzioni per aprire le cartelle web</a>. common#:#webfolder_index_of#:#Indice di %1$s common#:#webfolder_instructions#:#Istruzioni cartella web common#:#webfolder_instructions_info#:#Le istruzioni della cartella web sono mostrate sui browser, che non possono aprire direttamente una cartella web. È possibile utilizzare il codice HTML e i seguenti segnaposto: <b>[WEBFOLDER_TITLE]</b>, <b>[WEBFOLDER_URI]</b>, <b>[WEBFOLDER_URI_IE]</b>, <b>[WEBFOLDER_URI_KONQUEROR]</b>, <b>[WEBFOLDER_URI_NAUTILUS]</b>, <b>[ADMIN_MAIL]</b>, <b>[IF_WINDOWS]</b>...<b>[/IF_WINDOWS]</b>, <b>[IF_MAC]</b>...<b>[/IF_MAC]</b>, <b>[IF_LINUX]</b>...<b>[/IF_LINUX]</b>. Deselezionare il campo per ottenere le istruzioni predefinite. -common#:#webfolder_instructions_text#:#<p>Segui le istruzioni qui sotto per aprire <b>[WEBFOLDER_TITLE]</b> come cartella sul web:</p>[IF_WINDOWS]<h3>Istruzioni per Windows XP con Internet Explorer</h3><ol><li>Apri Internet Explorer</li><li>Scegli nel menù 'File &gt; Apri...'</li><li>Nella casella Apri, inserisci il seguente indirizzo:<br/><b>[WEBFOLDER_URI_IE]</b></li><li>Seleziona 'Apri come cartella web', e poi premi 'OK'.</li><li>Inserisci il tuo username e la tua password, e seleziona 'OK'.</li></ol><h3>Istruzioni per Windows XP senza Internet Explorer</h3><ol><li>Doppio click sull'icona 'I miei siti sul web' sul desktop.</li><li>Clicca su 'Aggiungi sito' dal menù a sinistra della finestra.</li><li>Si aprirà il wizard 'Aggiungi sito', clicca su 'Avanti'.</li><li>Seleziona l'opzione 'Scegli un altro sito' e poi seleziona 'Avanti'.<li>Nella casella 'indirizzo web' inserisci<br/><b>[WEBFOLDER_URI]</b><br/>e poi 'Avanti'.</li><li>Inserisci il tuo username e la password, e seleziona 'OK'.</li></ol>[/IF_WINDOWS][IF_MAC]<h3>Istruzioni per Mac OS X</h3><ol><li>Apri Cerca</li><li>Choose the menu 'Go &gt; Connect to server...'</li><li>In the address field enter the following address:<br/><b>[WEBFOLDER_URI]</b>, and select 'Connect'.</li><li>Enter your login and password, and select 'OK'.</li></ol>[/IF_MAC][IF_LINUX]<h3>Instructions for Linux with Konqueror</h3><ol><li>Start the Konqueror browser</li><li>In the address field enter the following address:<br/><b>[WEBFOLDER_URI_KONQUEROR]</b></li><li>Press the Enter key.</li><li>Enter your login and password, and select 'OK'.</li></ol><h3>Instructions for Linux with Nautilus</h3><ol><li>Start the Nautilus browser</li><li>In the address field enter the following address:<br/><b>[WEBFOLDER_URI_NAUTILUS]</b></li><li>Press the Enter key.</li><li>Enter your login and password, and select 'OK'.</li></ol>[/IF_LINUX]<p>If opening the webfolder does not work, please contact <a href="mailto:[ADMIN_MAIL]">[ADMIN_MAIL]</a>.</p> +common#:#webfolder_instructions_text#:#<p>Segui le istruzioni qui sotto per aprire <b>[WEBFOLDER_TITLE]</b> come cartella sul web:</p>[IF_WINDOWS]<h3>Istruzioni per Windows XP con Internet Explorer</h3><ol><li>Apri Internet Explorer</li><li>Scegli nel menù 'File &gt; Apri...'</li><li>Nella casella Apri, inserisci il seguente indirizzo:<br/><b>[WEBFOLDER_URI_IE]</b></li><li>Seleziona 'Apri come cartella web', e poi premi 'OK'.</li><li>Inserisci il tuo username e la tua password, e seleziona 'OK'.</li></ol><h3>Istruzioni per Windows XP senza Internet Explorer</h3><ol><li>Doppio click sull'icona 'I miei siti sul web' sul desktop.</li><li>Clicca su 'Aggiungi sito' dal menù a sinistra della finestra.</li><li>Si aprirà il wizard 'Aggiungi sito', clicca su 'Avanti'.</li><li>Seleziona l'opzione 'Scegli un altro sito' e poi seleziona 'Avanti'.<li>Nella casella 'indirizzo web' inserisci<br/><b>[WEBFOLDER_URI]</b><br/>e poi 'Avanti'.</li><li>Inserisci il tuo username e la password, e seleziona 'OK'.</li></ol>[/IF_WINDOWS][IF_MAC]<h3>Istruzioni per Mac OS X</h3><ol><li>Apri Cerca</li><li>Scegli il Menu 'Vai &gt; Connessione al server...'</li><li>Nel campo dell'indirizzo inserire il seguente indirizzo:<br/><b>[WEBFOLDER_URI]</b>, e seleziona 'Connetti'.</li><li>inserisci il tuo login e password, seleziona 'OK'.</li></ol>[/IF_MAC][IF_LINUX]<h3>Istruzioni per Linux con Konqueror</h3><ol><li>Apri Konqueror browser</li><li>Nel campo indirizzo inserire il seguente indirizzo:<br/><b>[WEBFOLDER_URI_KONQUEROR]</b></li><li>Premi il tasto Invio.</li><li>Inserisci il tuo login e password, e seleziona 'OK'.</li></ol><h3>Istruzioni per Linux con Nautilus</h3><ol><li>Avvia Nautilus browser</li><li>Nel campo indirizzo inserire il seguente indirizzo:<br/><b>[WEBFOLDER_URI_NAUTILUS]</b></li><li>Press the Enter key.</li><li>Inserisci il tuo login e password, e seleziona 'OK'.</li></ol>[/IF_LINUX]<p>Se aprendo la cartella web non funziona, per favore contatta <a href="mailto:[ADMIN_MAIL]">[ADMIN_MAIL]</a>.</p> common#:#webfolder_instructions_titletext#:#Apri %1$s come cartella web -common#:#webfolder_mount_dir_with#:#Open this page as a Webfolder with <a href="%1$s">Internet Explorer</a>, <a href="%2$s">Konqueror</a>, <a href="%3$s">other Browser</a>. +common#:#webfolder_mount_dir_with#:#Apri questa pagina come cartella Web con <a href="%1$s"> Internet Explorer </a>, <a href="%2$s"> Konqueror </a>, <a href = " %3$s "> altro browser </a>. common#:#webr#:#Risorsa web common#:#webr_active#:#Attivo common#:#webr_add#:#Aggiungi risorsa web @@ -6030,49 +6017,49 @@ common#:#wiki#:#Wiki common#:#wiki_add#:#Aggiungi Wiki common#:#wiki_new#:#Nuovo Wiki common#:#with#:#con -common#:#withdraw_consent#:#Withdraw Consent###29 07 2022 new variable -common#:#withdraw_consent_info_internal#:#If you click on ‘Withdraw Consent’, your account will be deleted.###29 07 2022 new variable -common#:#withdraw_usr_agreement#:#Withdraw Consent###29 07 2022 new variable -common#:#withdrawal_complete#:#Withdrawal of consent complete.###29 07 2022 new variable -common#:#withdrawal_complete_deleted#:#Withdrawal of consent complete, account deleted.###29 07 2022 new variable -common#:#withdrawal_complete_redirect#:#Withdrawal of consent complete. To have your account deleted, please contact your organisation.###29 07 2022 new variable -common#:#withdrawal_mail_info#:#The following email will be sent to an administrator after confirming the withdrawal of your consent:[BR][BR]###29 07 2022 new variable -common#:#withdrawal_mail_subject#:#Withdrawal of Consent to Terms of Service###29 07 2022 new variable -common#:#withdrawal_mail_text#:#Dear Sir/Madam,[BR][BR]I hereby withdraw my consent to your ILIAS installation’s Terms of Service. Please update/remove my account accordingly.[BR][BR]Name: %1$s[BR]Login: %2$s[BR]External Account: %3$s[BR][BR]Yours faithfully[BR]%1$s###29 07 2022 new variable -common#:#withdrawal_sure_account#:#Are you sure you want to confirm the withdrawal of your consent?###29 07 2022 new variable -common#:#withdrawal_sure_account_deletion#:#Are you sure you want to confirm the withdrawal of your consent? This will result in your user account being irrevocably deleted.###29 07 2022 new variable -common#:#withdrawal_sure_account_deletion_no_consent_yet#:#Are you sure that you do not want to accept the Terms of Service? This will result in your user account being irrevocably deleted.###29 07 2022 new variable -common#:#withdrawal_sure_account_no_consent_yet#:#Are you sure that you do not want to accept the Terms of Service?###29 07 2022 new variable -common#:#wizard_search_list#:#Your search produced the following hits. Please select one of them +common#:#withdraw_consent#:#Revoca il consenso +common#:#withdraw_consent_info_internal#:#Se confermi qui, il tuo account verrà eliminato. +common#:#withdraw_usr_agreement#:#Revoca +common#:#withdrawal_complete#:#Processo di revoca completato. +common#:#withdrawal_complete_deleted#:#Processo di revoca completato. Utente cancellato +common#:#withdrawal_complete_redirect#:#Processo di revoca completato. Per cancellare l'utente, contattare l'amministrazione +common#:#withdrawal_mail_info#:#Il seguente messaggio verrà inviato a tuo nome quando confermerai: [BR] [BR] +common#:#withdrawal_mail_subject#:#Revoca del consenso agli accordi di utilizzo +common#:#withdrawal_mail_text#:#Egregio Signore o Signora, [BR] [BR] Con la presente revoco il mio consenso al contratto di utilizzo per la vostra installazione ILIAS. Si prega di avviare le misure appropriate [BR] [BR] Nome: %1$s [BR] Nome utente: %2$s [BR] Account utente esterno: %3$s [BR] [BR] Cordiali saluti [BR] %1$s +common#:#withdrawal_sure_account#:#Sei sicuro di voler revocare il tuo consenso al contratto con l'utente? +common#:#withdrawal_sure_account_deletion#:#Sei sicuro di voler revocare il tuo consenso al contratto con l'utente? Di conseguenza, il tuo account utente verrà eliminato irrevocabilmente. +common#:#withdrawal_sure_account_deletion_no_consent_yet#:#Are you sure you do not want to accept the terms of service? Your user account will be irrevocably deleted.###09 03 2022 new variable +common#:#withdrawal_sure_account_no_consent_yet#:#Are you sure you do not want to accept the terms of service?###09 03 2022 new variable +common#:#wizard_search_list#:#La tua ricerca ha prodotto i seguenti risultati. Seleziona uno di questi common#:#wizard_title_info#:#Si prega di inserire il titolo dell’oggetto che si vuole duplicare. common#:#write#:#Scrivere common#:#year#:#Anno common#:#yearly#:#annuo common#:#years#:#Anni -common#:#yes#:#Si +common#:#yes#:#Sì common#:#yesterday#:#Ieri -common#:#zip#:#Codice postale -common#:#zip_structure_error#:#L'archivio contiene gli stessi nomi dei file. Caricamento non andato a buon fine. +common#:#zip#:#CAP +common#:#zip_structure_error#:#L'archivio contiene gli stessi nomi dei file. Caricamento annullato. common#:#zip_test_failed#:#Zip-test non riuscito. Si prega di contattare il proprio amministratore ILIAS. common#:#zipcode#:#Codice postale -cond#:#cond_under_parent_control#:#Preconditions are under the control of the parent object. -cont#:#cont_add_global_profile#:#Add Global Profile###29 07 2022 new variable -cont#:#cont_add_local_profile#:#Add Local Profile###29 07 2022 new variable -cont#:#cont_add_skill#:#Aggiungi competenza +cond#:#cond_under_parent_control#:#I presupposti vengono gestiti dall'oggetto genitore/superiore. +cont#:#cont_add_global_profile#:#Aggiungi Profilo Globale +cont#:#cont_add_local_profile#:#Aggiungi Profilo Locale +cont#:#cont_add_skill#:#Aggiungi competenze cont#:#cont_assign_competence#:#Assegna competenze ai membri cont#:#cont_assign_skills#:#Assegna competenze -cont#:#cont_block_limit#:#Limit Items per Block -cont#:#cont_block_limit_info#:#If a block contains more items, a "Show more" button will appear. +cont#:#cont_block_limit#:#Limita gli oggetti per Blocco +cont#:#cont_block_limit_info#:#Se un blocco contiene più elementi, verrà visualizzato il pulsante "Mostra altro". cont#:#cont_cont_skills#:#Competenze assegnate dei membri cont#:#cont_deassign_competence#:#Annulla assegnazioni -cont#:#cont_filter#:#Filter###07 02 2020 new variable -cont#:#cont_filter_field#:#Field###07 02 2020 new variable -cont#:#cont_filter_fields#:#Filter Fields###07 02 2020 new variable -cont#:#cont_filter_record#:#Record###07 02 2020 new variable -cont#:#cont_found_objects#:#Found Objects###07 02 2020 new variable -cont#:#cont_item_list#:#List -cont#:#cont_item_list_info#:#Objects located within this container are displayed in the form of a list.###26 08 2024 new variable -cont#:#cont_list_presentation#:#Item Presentation +cont#:#cont_filter#:#Filtro +cont#:#cont_filter_field#:#Campo +cont#:#cont_filter_fields#:#Campi di filtro +cont#:#cont_filter_record#:#Record +cont#:#cont_found_objects#:#Oggetti trovati +cont#:#cont_item_list#:#Lista +cont#:#cont_item_list_info#:#Display content objects in a list.###16 03 2023 new variable +cont#:#cont_list_presentation#:#Vista presentazione per contenuti cont#:#cont_mem_skills#:#Competenze cont#:#cont_news_edited#:#Modificato cont#:#cont_news_settings#:#Impostazioni delle notizie @@ -6083,101 +6070,101 @@ cont#:#cont_news_timeline_info#:#Attiva scheda calendario notizie cont#:#cont_news_timeline_landing_page#:#Pagina di destinazione cont#:#cont_news_timeline_landing_page_info#:#La pagina del calendario sarà la pagina di destinazione. cont#:#cont_news_timeline_tab#:#Calendario -cont#:#cont_no_title#:#Empty Title###26 08 2024 new variable -cont#:#cont_page_type_cont#:#Repository Page (Cours, Group, ...)###29 07 2022 new variable -cont#:#cont_page_type_cstr#:#Course Start Page (Learning Objectives View)###29 07 2022 new variable +cont#:#cont_no_title#:#Empty Title###30 07 2024 new variable +cont#:#cont_page_type_cont#:#Pagina Archivio (Corsi, Gruppi, ...) +cont#:#cont_page_type_cstr#:#Pagina iniziale del corso (visualizzazione degli obiettivi di apprendimento) cont#:#cont_path#:#Percorso cont#:#cont_publish_assignment#:#Pubblica assegnazioni cont#:#cont_published#:#Pubblicato cont#:#cont_really_deassign_skills#:#Vuoi davvero annullare le competenze da questi utenti? -cont#:#cont_really_remove_skill_from_course#:#Vuoi davvero rimuovere queste competenza dalla lista? -cont#:#cont_select_fields#:#Select Fields###07 02 2020 new variable -cont#:#cont_show_more#:#Show More -cont#:#cont_skill#:#Competenza -cont#:#cont_skill_ass_profiles#:#Assigned Profiles of Members###26 08 2024 new variable -cont#:#cont_skill_assigned_comp#:#Selezione competenza -cont#:#cont_skill_assigned_profiles#:#Profile Selection###29 07 2022 new variable -cont#:#cont_skill_deletion_not_possible#:#Deletion of global competence profiles is not possible. Please select only local competence profiles.###29 07 2022 new variable +cont#:#cont_really_remove_skill_from_course#:#Vuoi davvero rimuovere queste competenze dalla lista? +cont#:#cont_select_fields#:#Seleziona campi +cont#:#cont_show_more#:#Mostra altro +cont#:#cont_skill#:#Competenze +cont#:#cont_skill_ass_profiles#:#Assigned Profiles of Members###30 04 2024 new variable +cont#:#cont_skill_assigned_comp#:#Selezione competenze +cont#:#cont_skill_assigned_profiles#:#Selezione del profilo +cont#:#cont_skill_deletion_not_possible#:#Non è possibile eliminare i profili di competenza globale. Seleziona solo profili di competenza locale. cont#:#cont_skill_do_not_set#:#Non impostare cont#:#cont_skill_members#:#Membri -cont#:#cont_skill_no_profile_selected#:#Please select a profile.###29 07 2022 new variable +cont#:#cont_skill_no_profile_selected#:#Selezionare un profilo cont#:#cont_skill_no_skill#:#Nessun valore (Ripristina) -cont#:#cont_skill_no_skills_selected#:#No competences have been selected yet. Please add at least one competence first under "Competence Selection".###26 08 2024 new variable -cont#:#cont_skill_profile#:#Profile###29 07 2022 new variable -cont#:#cont_skill_profiles#:#Assigned Profiles of Members###29 07 2022 new variable +cont#:#cont_skill_no_skills_selected#:#No competences have been selected yet. Please add at least one competence first under "Competence Selection".###09 11 2022 new variable +cont#:#cont_skill_profile#:#Profilo +cont#:#cont_skill_profiles#:#Profilo dei membri cont#:#cont_skill_publish#:#Pubblica cont#:#cont_skill_publish_auto#:#Automatico cont#:#cont_skill_publish_auto_info#:#Le assegnazioni di competenze per i membri sono immediatamente visibili per i membri. cont#:#cont_skill_publish_manual#:#Manuale cont#:#cont_skill_publish_manual_info#:#Le assegnazioni di competenze per i membri devono essere pubblicate prima che diventino visibili per i membri. -cont#:#cont_skill_really_delete_profile_from_list#:#Do you really want to delete this profile?###29 07 2022 new variable -cont#:#cont_skill_really_delete_profiles_from_list#:#Do you really want to delete these profiles?###29 07 2022 new variable -cont#:#cont_skill_really_remove_profile_from_list#:#Do you really want to remove this profile from the list?###29 07 2022 new variable -cont#:#cont_skill_really_remove_profiles_from_list#:#Do you really want to remove these profiles from the list?###29 07 2022 new variable -cont#:#cont_skill_records#:#Competence Records###26 08 2024 new variable -cont#:#cont_skill_removal_not_possible#:#Removing of local competence profiles is not possible. Please select only global competence profiles.###29 07 2022 new variable -cont#:#cont_std_filter_title_1#:#Title###07 02 2020 new variable -cont#:#cont_std_filter_title_2#:#Description###07 02 2020 new variable -cont#:#cont_std_filter_title_3#:#Title/Description###07 02 2020 new variable -cont#:#cont_std_filter_title_4#:#Keyword###07 02 2020 new variable -cont#:#cont_std_filter_title_5#:#Author###07 02 2020 new variable -cont#:#cont_std_filter_title_6#:#Copyright###07 02 2020 new variable -cont#:#cont_std_filter_title_7#:#Tutorial Support###07 02 2020 new variable -cont#:#cont_std_filter_title_8#:#Object Type###07 02 2020 new variable -cont#:#cont_std_filter_title_9#:#Online/Offline###07 02 2020 new variable -cont#:#cont_std_record_title#:#Standard###07 02 2020 new variable -cont#:#cont_tile_size#:#Tile Size###29 07 2022 new variable -cont#:#cont_tile_size_0#:#normal (up to four tiles in a row)###29 07 2022 new variable -cont#:#cont_tile_size_1#:#small (up to six tiles in a row)###29 07 2022 new variable -cont#:#cont_tile_size_2#:#large (up to three tiles in a row)###29 07 2022 new variable -cont#:#cont_tile_size_3#:#extra large (up to two tiles in a row)###29 07 2022 new variable -cont#:#cont_tile_size_4#:#full (one tile in a row)###29 07 2022 new variable -cont#:#cont_tile_view#:#Tiles -cont#:#cont_tile_view_info#:#Objects located within this container are displayed in the form of thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object.###26 08 2024 new variable -cont#:#cont_trash_general_usage#:#If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters "Type" and "Deleted on" helps this process. Then finally remove the containers.###28 10 2024 new variable -contact#:#contact_awrn_ap_contacts#:#Contatti approvati -contact#:#contact_awrn_ap_contacts_info#:#Sono elencati tutti i contatti approvati dall’utente. +cont#:#cont_skill_really_delete_profile_from_list#:#Sei sicuro di voler eliminare il profilo? +cont#:#cont_skill_really_delete_profiles_from_list#:#Sei sicuro di voler eliminare i profili? +cont#:#cont_skill_really_remove_profile_from_list#:#Sei sicuro di voler eliminare il profilo dalla lista? +cont#:#cont_skill_really_remove_profiles_from_list#:#Sei sicuro di voler eliminare i profili dalla lista? +cont#:#cont_skill_records#:#Competence Records###30 04 2024 new variable +cont#:#cont_skill_removal_not_possible#:#Non è possibile rimuovere i profili di competenza locale. Seleziona solo profili di competenza globale. +cont#:#cont_std_filter_title_1#:#Titolo +cont#:#cont_std_filter_title_2#:#Descrizione +cont#:#cont_std_filter_title_3#:#Titolo/Descrizione +cont#:#cont_std_filter_title_4#:#Parola chiave +cont#:#cont_std_filter_title_5#:#Autore +cont#:#cont_std_filter_title_6#:#Copyright +cont#:#cont_std_filter_title_7#:#Supporto Tutorial +cont#:#cont_std_filter_title_8#:#Tipo oggetto +cont#:#cont_std_filter_title_9#:#Online/Offline +cont#:#cont_std_record_title#:#Standard +cont#:#cont_tile_size#:#Tile Size###31 03 2023 new variable +cont#:#cont_tile_size_0#:#normal (up to four tiles per row)###31 03 2023 new variable +cont#:#cont_tile_size_1#:#small (up to six tiles per row)###31 03 2023 new variable +cont#:#cont_tile_size_2#:#large (up to three tiles per row)###31 03 2023 new variable +cont#:#cont_tile_size_3#:#extra large (up to two tiles per row)###31 03 2023 new variable +cont#:#cont_tile_size_4#:#full (one tile per row)###31 03 2023 new variable +cont#:#cont_tile_view#:#Mattonelle +cont#:#cont_tile_view_info#:#Display content objects as thumbnail-style tiles. Images for these tiles can be uploaded in the settings of each individual object.###16 03 2023 new variable +cont#:#cont_trash_general_usage#:#If you want to remove a huge amount of old, deleted objects from the system it is highly advisable to start with non-container objects (i.e. Files, Glossaries, Tests,..) and thus removing all objects from the containers (Categories, Courses, Groups, Learning Sequences,...) . Using the filters "Type" and "Deleted on" helps this process. Then finally remove the containers.###08 10 2024 new variable +contact#:#contact_awrn_ap_contacts#:#Contatti confermati +contact#:#contact_awrn_ap_contacts_info#:#Sono elencati tutti i contatti confermati dall’utente. contact#:#contact_awrn_req_contacts#:#Richieste di contatto contact#:#contact_awrn_req_contacts_info#:#Sono indicate tutte le richieste di contatto. content#:#Pages#:#Pagine content#:#add_menu_entry#:#Aggiungi voce nel menu >> -content#:#all_pages#:#l' intero modulo +content#:#all_pages#:#per l'intero modulo didattico content#:#citate#:#Cita content#:#citate_from#:#Cita da ... content#:#citate_page#:#Cita questa pagina -content#:#citate_to#:#Cita a ... +content#:#citate_to#:#Cita fino a ... content#:#cont_Additional#:#Informazioni Extra content#:#cont_AdvancedKnowledge#:#Conoscenza avanzata -content#:#cont_Attention#:#Attention###07 02 2020 new variable -content#:#cont_Background#:#Background###07 02 2020 new variable +content#:#cont_Attention#:#Attenzione +content#:#cont_Background#:#Sfondo content#:#cont_Block#:#Blocco -content#:#cont_Book#:#Book###29 07 2022 new variable +content#:#cont_Book#:#Libro content#:#cont_Circle#:#Cerchio content#:#cont_Citation#:#Citazione -content#:#cont_Confirmation#:#Confirmation###07 02 2020 new variable -content#:#cont_Example#:#Per es. -content#:#cont_Excursus#:#Excursus +content#:#cont_Confirmation#:#Conferma +content#:#cont_Example#:#Esempio +content#:#cont_Excursus#:#Digressione content#:#cont_FileListItem#:#Elemento del File (Standard) content#:#cont_Headline1#:#Intestazione 1 content#:#cont_Headline2#:#Intestazione 2 content#:#cont_Headline3#:#Intestazione 3 -content#:#cont_Information#:#Information###07 02 2020 new variable -content#:#cont_Interaction#:#Interaction###07 02 2020 new variable -content#:#cont_Link#:#Link###07 02 2020 new variable +content#:#cont_Information#:#Information +content#:#cont_Interaction#:#Interazione +content#:#cont_Link#:#Collegamento content#:#cont_List#:#Lista -content#:#cont_Literature#:#Literature###07 02 2020 new variable +content#:#cont_Literature#:#Literature content#:#cont_Media#:#Supporti (Standard) content#:#cont_Mnemonic#:#Mnemonico -content#:#cont_Numbers#:#Numbers###29 07 2022 new variable +content#:#cont_Numbers#:#Numbers content#:#cont_Poly#:#Poligono content#:#cont_Rect#:#Rettangolo content#:#cont_Remark#:#Osservazione -content#:#cont_Separator#:#Separator###07 02 2020 new variable +content#:#cont_Separator#:#Separatore content#:#cont_Special#:#Speciale -content#:#cont_StandardCenter#:#Standard Center###07 02 2020 new variable +content#:#cont_StandardCenter#:#Standard Center content#:#cont_StandardTable#:#Tabella Standard content#:#cont_TableContent#:#Tabella Contenuti -content#:#cont_Verse#:#Verse/Stanza###29 07 2022 new variable +content#:#cont_Verse#:#Verse/Stanza content#:#cont_WholePicture#:#Immagine intera content#:#cont_accented#:#Accentata content#:#cont_act_number#:#Numerazione capitoli @@ -6188,26 +6175,26 @@ content#:#cont_activate_page#:#Attiva Pagina content#:#cont_activated#:#Attivato content#:#cont_activation#:#Attivazione content#:#cont_active#:#Abilita menu -content#:#cont_active_areas#:#Trigger +content#:#cont_active_areas#:#Causa content#:#cont_active_from#:#Attivazione iniziata content#:#cont_active_to#:#Attivazione terminata content#:#cont_add_area#:#Aggiungi Area content#:#cont_add_cell#:#Aggiungi colonna content#:#cont_add_elements#:#Clicca sui segnalibri per aggiungere nuovi elementi. content#:#cont_add_file#:#Aggiungi File -content#:#cont_add_images#:#Aggiungi immagine +content#:#cont_add_images#:#Adatta immagine content#:#cont_add_popup#:#Aggiungi Popup -content#:#cont_add_tab#:#Aggiungi Tab -content#:#cont_add_url#:#Enter URL###29 07 2022 new variable -content#:#cont_added_cell#:#Column added +content#:#cont_add_tab#:#Aggiungi scomparto +content#:#cont_add_url#:#From URL +content#:#cont_added_cell#:#Colonna aggiunta content#:#cont_added_comment#:#Il commento e' stato aggiunto nella storia. -content#:#cont_added_tab#:#Tab created. +content#:#cont_added_tab#:#Scheda creata. content#:#cont_added_term#:#Termine aggiunto content#:#cont_adjust_size#:#Aggiusta Dimensioni -content#:#cont_advanced_settings#:#Advanced Settings###29 07 2022 new variable +content#:#cont_advanced_settings#:#Advanced Settings content#:#cont_align#:#Allineamento content#:#cont_alignment#:#Allineamento -content#:#cont_all_answers_correct#:#All answers correct +content#:#cont_all_answers_correct#:#Tutte le risposte sono corrette content#:#cont_all_closed#:#Chiuso tutto content#:#cont_all_languages#:#Tutte le lingue content#:#cont_all_pages#:#Tutte le pagine @@ -6225,22 +6212,22 @@ content#:#cont_assign_full#:#Imposta a tutto schermo content#:#cont_assign_std#:#Imposta standard content#:#cont_assign_to_parent#:#Assegna a principale content#:#cont_auto_glossaries#:#Glossari collegati automaticamente -content#:#cont_auto_last_visited#:#load last visited chapter (SCO/Asset) -content#:#cont_auto_last_visited_info#:#Opens the last visited SCO/Asset when the learner reenters the learning module. -content#:#cont_auto_suspend#:#Ensure getting tracking data from previous attempts -content#:#cont_auto_suspend_info#:#This option is for SCORM learning modules, which support SCORM 2004 in an inadequate way by not sending proper values for cmi.exit. +content#:#cont_auto_last_visited#:#carica l'ultimo capitolo visitato (SCO / Asset) +content#:#cont_auto_last_visited_info#:#Apre l'ultima SCO / risorsa visitata quando lo studente rientra nel modulo di apprendimento. +content#:#cont_auto_suspend#:#Assicurati di ottenere dati di tracciamento da tentativi precedenti +content#:#cont_auto_suspend_info#:#Questa opzione è per i moduli di apprendimento SCORM, che supportano SCORM 2004 in modo inadeguato non inviando i valori corretti per cmi.exit. content#:#cont_auto_time#:#Animazione automatica tempo di attesa content#:#cont_autoindent#:#Indentazione automatica content#:#cont_automatically_set_store_tries#:#L’opzione "$1" è stata attivata automaticamente poiché l’opzione "$2" è stata consentita. content#:#cont_autostart#:#Avvio automatico content#:#cont_back#:#Indietro -content#:#cont_base_image#:#Base Image +content#:#cont_base_image#:#Immagine di base content#:#cont_bb_tip#:#Consiglio: Gli Stili possono essere applicati rapidamente al testo selezionato. content#:#cont_behavior#:#Comportamento content#:#cont_biblio#:#Dati bibliografici content#:#cont_biblio_info#:#Consenti la funziona dati bibliografici content#:#cont_blist#:#Elenco puntato -content#:#cont_block_format#:#Section Format###29 07 2022 new variable +content#:#cont_block_format#:#Formato Sezione content#:#cont_blocked_users#:#Utenti bloccati content#:#cont_blocked_users_mail_link#:#Clicca sul seguente link per aprire il modello di apprendimento: content#:#cont_bottom#:#In fondo @@ -6251,24 +6238,24 @@ content#:#cont_cach_mode_automatic_info#:#Verranno pubblicate tutte le tue ore d content#:#cont_cach_mode_manual#:#Manuale content#:#cont_cach_mode_manual_info#:#Verranno pubblicate solo le ore di consultazione dei seguenti gruppi. content#:#cont_cant_copy_folders#:#Le cartelle non possono essere copiate negli appunti. -content#:#cont_cant_del_full#:#La cancellazione della modalit& -content#:#cont_cant_del_std#:#La cancellazione del modalit& +content#:#cont_cant_del_full#:#La cancellazione del file a schermo intero non è possibile. +content#:#cont_cant_del_std#:#La cancellazione del file di visualizzazione standard non è possibile. content#:#cont_caption#:#Didascalia -content#:#cont_caption_style#:#Caption Style Class###29 07 2022 new variable +content#:#cont_caption_style#:#Caption Style Class###31 03 2023 new variable content#:#cont_cc_emp#:#Enfatico content#:#cont_cc_imp#:#Importante content#:#cont_cc_str#:#Forte content#:#cont_cc_sub#:#Indice inferiore content#:#cont_cc_sup#:#Indice superiore -content#:#cont_cell_properties#:#Table Cell Properties###26 08 2024 new variable +content#:#cont_cell_properties#:#Table Cell Properties###30 04 2024 new variable content#:#cont_center#:#Centro -content#:#cont_change_alignment#:#Change Alignment###26 08 2024 new variable -content#:#cont_change_notification_salutation#:#Hello %s,###07 02 2020 new variable -content#:#cont_change_notification_subject_lm#:#Learning Module "%1$s" has been changed: %2$s###07 02 2020 new variable +content#:#cont_change_alignment#:#Change Alignment###30 04 2024 new variable +content#:#cont_change_notification_salutation#:#Ciao %s, +content#:#cont_change_notification_subject_lm#:#Il modulo didattico "%1$s" è stato cambiato: %2$s content#:#cont_change_object_reference#:#Cambia il riferimento dell'oggetto -content#:#cont_change_style#:#Change Style###26 08 2024 new variable +content#:#cont_change_style#:#Change Style###30 04 2024 new variable content#:#cont_change_type#:#Cambia il tipo -content#:#cont_change_width#:#Change Width###26 08 2024 new variable +content#:#cont_change_width#:#Change Width###30 04 2024 new variable content#:#cont_chap_and_pages#:#Capitoli e Pagine content#:#cont_chap_select_target_now#:#Capitolo selezionato per lo spostamento. Scegli adesso la destinazione. content#:#cont_chapters#:#Capitoli @@ -6281,40 +6268,40 @@ content#:#cont_char_style_code#:#Codice content#:#cont_char_style_com#:#Commento content#:#cont_char_style_quot#:#Quotazione content#:#cont_characteristic#:#Stile -content#:#cont_characteristic_table#:#Style Class###26 08 2024 new variable -content#:#cont_check_values#:#check values sent by SCO +content#:#cont_characteristic_table#:#Style Class###17 05 2024 new variable +content#:#cont_check_values#:#controlla i valori inviati da SCO content#:#cont_check_values_info#:#Lo strumento di test controllerà se i valori inviati dagli SCO aderiscono allo standard SCORM. <br /> Lo standard SCORM è molto esigente per quanto riguarda il risparmio di valori. Non tutti i moduli di apprendimento soddisfano i requisiti dello standard. Questa opzione consente di verificare se il modulo aderisce allo standard o meno. Non controllare questa opzione se si desidera solo controllare se ILIAS può eseguire questo modulo o meno. content#:#cont_choose_characteristic#:#Scegli caratteristiche content#:#cont_choose_characteristic_section#:#Sezioni content#:#cont_choose_characteristic_text#:#Elementi di Testo -content#:#cont_choose_file_source#:#Source###07 02 2020 new variable -content#:#cont_choose_from_clipboard#:#Choose from Clipboard###29 07 2022 new variable -content#:#cont_choose_from_pool#:#Select from Media Pool###29 07 2022 new variable +content#:#cont_choose_file_source#:#Fonte +content#:#cont_choose_from_clipboard#:#Scegli dagli appunti +content#:#cont_choose_from_pool#:#Scegli dal Media Pool content#:#cont_choose_glo#:#Scegli il glossario content#:#cont_choose_lm#:#Scegli il modulo di apprendimento -content#:#cont_choose_local#:#Local directory###07 02 2020 new variable -content#:#cont_choose_media_pool#:#Select Pool###29 07 2022 new variable +content#:#cont_choose_local#:#Cartella locale +content#:#cont_choose_media_pool#:#Seleziona Pool content#:#cont_choose_mep#:#Scegli gruppo media content#:#cont_choose_pages_or_chapters_only#:#Seleziona solamente le pagine o i capitoli. -content#:#cont_choose_upload_dir#:#Upload directory###07 02 2020 new variable +content#:#cont_choose_upload_dir#:#Cartella di caricamento (upload) content#:#cont_choose_wiki#:#Scegli Wiki -content#:#cont_citation_selection_not_valid#:#Questa scelta non & -content#:#cont_click_br_corner#:#Per favore, clicca nell& -content#:#cont_click_center#:#Per favore, clicca nel centro dell& -content#:#cont_click_circle#:#Per favore, clicca in una circonferenza dell& -content#:#cont_click_edit#:#<b>Click</b> on elements to <b>edit</b> its properties.###29 07 2022 new variable -content#:#cont_click_multi_select#:#<b>Click</b> on elements to <b>select</b> or deselect them.###29 07 2022 new variable -content#:#cont_click_next_or_save#:#Per favore, clicca nel punto successivo del poligono oppure salva l& +content#:#cont_citation_selection_not_valid#:#La tua selezione non è valida +content#:#cont_click_br_corner#:#Fare clic sull'angolo in basso a destra dell'area desiderata. +content#:#cont_click_center#:#Fare clic sul centro dell'area desiderata. +content#:#cont_click_circle#:#Fare clic su un punto circolare dell'area desiderata. +content#:#cont_click_edit#:#<b>Click</b> on elements to <b>edit</b> its properties. +content#:#cont_click_multi_select#:#<b>Click</b> on elements to <b>select</b> or deselect them. +content#:#cont_click_next_or_save#:#Fare clic sul punto successivo del poligono o salvare l'area. (Non è necessario fare nuovamente clic sul punto iniziale di questo poligono!) content#:#cont_click_next_point#:#Per favore, clicca nel punto successivo del poligono. content#:#cont_click_starting_point#:#Per favore, clicca nel punto di partenza del poligono. -content#:#cont_click_tl_corner#:#Per favore, clicca nell& -content#:#cont_code_import_file#:#Import###26 08 2024 new variable -content#:#cont_code_manual_editing#:#Manuelle Eingabe###26 08 2024 new variable -content#:#cont_colspan#:#Span del col. -content#:#cont_commented_by#:#Commented by###07 02 2020 new variable -content#:#cont_comments#:#enable storage of comments +content#:#cont_click_tl_corner#:#Fare clic sull'angolo in alto a sinistra dell'area desiderata. +content#:#cont_code_import_file#:#Import###30 04 2024 new variable +content#:#cont_code_manual_editing#:#Manuelle Eingabe###30 04 2024 new variable +content#:#cont_colspan#:#Intervallo colonne +content#:#cont_commented_by#:#Commentato da +content#:#cont_comments#:#Abilitare la raccomandazione dei commenti content#:#cont_comments_info#:#Alcuni moduli di apprendimento SCROM 2004 consentono agli utenti di fornire commenti all’interno del modulo. Quest’opzione consente di salvare questi commenti. -content#:#cont_confirm_delete#:#conferma eliminazione? +content#:#cont_confirm_delete#:#Confermare eliminazione? content#:#cont_constrain_proportions#:#Vincola le proporzioni content#:#cont_content#:#Contenuto content#:#cont_content_popup#:#Popup dei contenuti @@ -6326,10 +6313,10 @@ content#:#cont_copy_to_clipboard#:#Copia negli appunti content#:#cont_correct_after_first#:#Primo tentativo corretto content#:#cont_correct_answer_also#:#È anche corretto: content#:#cont_correct_answers_also#:#Sono anche corretti: -content#:#cont_correct_answers_shown#:#Correct answers are shown abov +content#:#cont_correct_answers_shown#:#Le risposte corrette sono mostrate sopra content#:#cont_could_not_determine_resource_size#:#ILIAS non può calcolare automaticamente la grandezza della risorsa. -content#:#cont_could_not_save_duplicate_pc_ids#:#Page could not be saved (duplicate PC IDs).###29 07 2022 new variable -content#:#cont_cp_question_diff_formats_info#:#Please note that some formattings are not supported in content modules. +content#:#cont_could_not_save_duplicate_pc_ids#:#Purtroppo non è stato possibile salvare la pagina. (ID PC duplicati) +content#:#cont_cp_question_diff_formats_info#:#Si noti che alcune formattazioni non sono supportate nei moduli di contenuto. content#:#cont_create_link#:#Crea link content#:#cont_create_mob#:#Crea oggetto multimediale content#:#cont_credits#:#Ringraziamenti @@ -6352,9 +6339,9 @@ content#:#cont_deactivate_media#:#Disattiva media content#:#cont_deactivate_page#:#Disattiva pagina content#:#cont_deactivated#:#Disattivata content#:#cont_debug#:#Mostra menu di debug -content#:#cont_debug_deactivate#:#Hint: The test tool can be disabled for all learning modules. +content#:#cont_debug_deactivate#:#Suggerimento: lo strumento di test può essere disabilitato per tutti i moduli di apprendimento. content#:#cont_debug_deactivate12#:#Uno strumento di test verrà mostrato nella modalità di presentazione del modulo di apprendimento. Sulla base di dati forniti da questo, l’interazione del modulo di apprendimento e ILIAS possono essere calcolati. -content#:#cont_debug_deactivated#:#Hint: The test tool is disabled for all learning modules. +content#:#cont_debug_deactivated#:#Suggerimento: lo strumento di test è disabilitato per tutti i moduli di apprendimento. content#:#cont_debugging#:#Debugging content#:#cont_decimal#:#Decimale content#:#cont_def_feedb_activated#:#I testi di feedback predefiniti sono attualmente attivati nelle impostazioni del modulo di apprendimento. @@ -6365,9 +6352,9 @@ content#:#cont_def_map_areas#:#Area link di default content#:#cont_def_organization#:#Organizzazione predefinita content#:#cont_default#:#Impostazione predefinita content#:#cont_definition#:#Definizione -content#:#cont_delete_content#:#Delete Content###29 07 2022 new variable +content#:#cont_delete_content#:#Cancella Contenuti content#:#cont_delete_selected#:#Cancella -content#:#cont_delete_style#:#Cancella style +content#:#cont_delete_style#:#Cancella stile content#:#cont_delete_track_data#:#cancella dati di tracking content#:#cont_dependencies#:#Dipendenze content#:#cont_dir_created#:#Directory creata. @@ -6379,7 +6366,7 @@ content#:#cont_disable_def_feedback_info#:#Se disabilitato, le risposte alle dom content#:#cont_download#:#Scarica content#:#cont_download_title#:#Download titolo content#:#cont_drag_and_drop_elements#:#Copia/Incolla gli elementi del contenuto sui segnaposto (placeholders) per muovere gli elementi. -content#:#cont_drag_element_click_save#:#Drag and drop the element to the desired position. Then hit "Save". +content#:#cont_drag_element_click_save#:#Sposta l'elemento nella posizione desiderata, quindi fai clic su "Salva". content#:#cont_ed_align_center#:#allineam: centrato content#:#cont_ed_align_left#:#allineam: a sinistra content#:#cont_ed_align_left_float#:#allineam: a sinistra float @@ -6390,12 +6377,12 @@ content#:#cont_ed_cell_left#:#Sposta a sinistra content#:#cont_ed_cell_right#:#Sposta a destra content#:#cont_ed_class#:#Stile content#:#cont_ed_click_to_add_pg#:#Clicca qui per aggiungere contenuto. -content#:#cont_ed_col_left#:#sposta la colonna a sinistra -content#:#cont_ed_col_right#:#sposta la colonna a destra +content#:#cont_ed_col_left#:#Sposta la colonna a sinistra +content#:#cont_ed_col_right#:#Sposta la colonna a destra content#:#cont_ed_copy#:#Copia content#:#cont_ed_copy_clip#:#Copia nella clipboard content#:#cont_ed_cut#:#Taglia -content#:#cont_ed_delete#:#elimina +content#:#cont_ed_delete#:#Elimina content#:#cont_ed_delete_cell#:#Elimina colonna content#:#cont_ed_delete_col#:#elimina colonna content#:#cont_ed_delete_item#:#elimina elemento @@ -6405,45 +6392,45 @@ content#:#cont_ed_edit#:#modifica content#:#cont_ed_edit_data#:#Edita Dati content#:#cont_ed_edit_files#:#Edita Files content#:#cont_ed_edit_multiple#:#Modifica sequenza di paragrafi -content#:#cont_ed_edit_prop#:#modifica proprieta' +content#:#cont_ed_edit_prop#:#Proprietà content#:#cont_ed_enable#:#Abilita/Disabilita content#:#cont_ed_flist#:# Elenco file content#:#cont_ed_go#:#OK content#:#cont_ed_grid_col_width#:#Larghezza colonna -content#:#cont_ed_grid_col_width_info#:#Column width can span multiple 1/12 units of the row and depend on the overall screen size. Devices are given as examples. Their screen size determines the concrete behaviour. 12/12 equals to 100% width. -content#:#cont_ed_grid_col_widths#:#Larghezze colonna -content#:#cont_ed_insert_amdfrm#:#Insert Advanced Metadata###29 07 2022 new variable -content#:#cont_ed_insert_amdpl#:#Insert Page List###29 07 2022 new variable +content#:#cont_ed_grid_col_width_info#:#La larghezza della colonna può estendersi su più di 1/12 unità della riga e dipende dalla dimensione complessiva dello schermo. I dispositivi sono riportati come esempi. Le loro dimensioni dello schermo determinano il comportamento concreto. 12/12 corrisponde al 100% di larghezza. +content#:#cont_ed_grid_col_widths#:#Larghezze colonne +content#:#cont_ed_insert_amdfrm#:#Insert Advanced Metadata###31 03 2023 new variable +content#:#cont_ed_insert_amdpl#:#Inserisci lista di pagine content#:#cont_ed_insert_blog#:#Inserisci blog -content#:#cont_ed_insert_cach#:#Insert Consultation Hours###29 07 2022 new variable -content#:#cont_ed_insert_dtab#:#Insert Data Table###29 07 2022 new variable -content#:#cont_ed_insert_flst#:#Insert File List###29 07 2022 new variable +content#:#cont_ed_insert_cach#:#Inserisci orario colloqui +content#:#cont_ed_insert_dtab#:#Inserisci Tabella Dati +content#:#cont_ed_insert_flst#:#Inserisci lista file content#:#cont_ed_insert_grid#:#Inserisci layout colonna content#:#cont_ed_insert_grid_info#:#Aggiunge un layout di colonna reattivo basato su una griglia con 12 unità per riga. content#:#cont_ed_insert_iim#:#Inserisci immagine interattiva content#:#cont_ed_insert_incl#:#Inserisci frammento di contenuto -content#:#cont_ed_insert_lay#:#Insert Layout Template###26 08 2024 new variable -content#:#cont_ed_insert_lhist#:#Insert Learning History###29 07 2022 new variable +content#:#cont_ed_insert_lay#:#Insert Layout Template###30 04 2024 new variable +content#:#cont_ed_insert_lhist#:#Inserisci Storico progressi didattici content#:#cont_ed_insert_list#:#inserisci lista -content#:#cont_ed_insert_lpe#:#Insert Login Page Element###29 07 2022 new variable +content#:#cont_ed_insert_lpe#:#Inserisci elemento della pagina di login content#:#cont_ed_insert_map#:#Inserisci Mappa -content#:#cont_ed_insert_mcrs#:#Insert My Courses###29 07 2022 new variable +content#:#cont_ed_insert_mcrs#:#Inserisci i miei corsi content#:#cont_ed_insert_media#:#inserisci multimedia content#:#cont_ed_insert_par#:#inserisci paragrafo content#:#cont_ed_insert_pcqst#:#Inserisci domanda content#:#cont_ed_insert_plach#:#Inserisci segnaposto -content#:#cont_ed_insert_prof#:#Insert Personal Data###29 07 2022 new variable +content#:#cont_ed_insert_prof#:#Inserisci dati personali content#:#cont_ed_insert_qover#:#Inserisci panoramica domande content#:#cont_ed_insert_repobj#:#Inserisci Elenco Risorse -content#:#cont_ed_insert_sec#:#Insert Section###29 07 2022 new variable -content#:#cont_ed_insert_skills#:#Insert Skills -content#:#cont_ed_insert_src#:#Insert Code###29 07 2022 new variable -content#:#cont_ed_insert_tab#:#Insert Advanced Table###29 07 2022 new variable +content#:#cont_ed_insert_sec#:#Inserisci Sezione +content#:#cont_ed_insert_skills#:#Inserisci competenze +content#:#cont_ed_insert_src#:#Inserisci Codice +content#:#cont_ed_insert_tab#:#Inserisci Tabella Avanzata content#:#cont_ed_insert_tabs#:#Inserisci Tabs content#:#cont_ed_insert_templ#:#Inserisci modello di contenuto -content#:#cont_ed_insert_vrfc#:#Insert Certificate###29 07 2022 new variable +content#:#cont_ed_insert_vrfc#:#Insert Certificate content#:#cont_ed_item_down#:#sposta loggetto in basso -content#:#cont_ed_item_up#:#sposta l& +content#:#cont_ed_item_up#:#Sposta elemento in alto content#:#cont_ed_list#:# Lista avanzata content#:#cont_ed_moveafter#:#sposta dopo content#:#cont_ed_movebefore#:#sposta prima @@ -6453,8 +6440,8 @@ content#:#cont_ed_new_item_after#:#Nuovo elemento dopo content#:#cont_ed_new_item_before#:#Nuovo elemento prima content#:#cont_ed_new_row_after#:#Nuova riga dopo content#:#cont_ed_new_row_before#:#Nuova riga prima -content#:#cont_ed_nr_cols#:#Number of Columns###26 08 2024 new variable -content#:#cont_ed_nr_rows#:#Number of Rows###26 08 2024 new variable +content#:#cont_ed_nr_cols#:#Number of Columns###30 04 2024 new variable +content#:#cont_ed_nr_rows#:#Number of Rows###30 04 2024 new variable content#:#cont_ed_par#:#Testo content#:#cont_ed_paste#:#Incolla content#:#cont_ed_paste_clip#:#Incolla da clipboard @@ -6471,17 +6458,17 @@ content#:#cont_ed_split_page#:#Splittare su nuova pagina content#:#cont_ed_split_page_next#:#suddividi nella pagina successiva content#:#cont_ed_textitem#:# Elemento di testo content#:#cont_ed_width#:#Larghezza -content#:#cont_edit_base_image#:#Edit Base Image -content#:#cont_edit_comp#:#Editing###29 07 2022 new variable +content#:#cont_edit_base_image#:#Modifica immagine di base +content#:#cont_edit_comp#:#Editing content#:#cont_edit_definition#:#Modifica definizione -content#:#cont_edit_file_list_properties#:#Visualizza le propriet& +content#:#cont_edit_file_list_properties#:#Modifica proprietà elenco file content#:#cont_edit_language_version#:#Modifica versione content#:#cont_edit_lrs_settings#:#Edita Impostazioni content#:#cont_edit_marker_position#:#Modifica posizione indicatore content#:#cont_edit_mob#:#Modifica oggetto multimediale -content#:#cont_edit_mob_alias_prop#:#Modifica propriet& +content#:#cont_edit_mob_alias_prop#:#Modifica proprietà istanza oggetto multimediale content#:#cont_edit_mode#:#Modifica modalità -content#:#cont_edit_multi#:#Selection###29 07 2022 new variable +content#:#cont_edit_multi#:#Selezione Multipla content#:#cont_edit_overlay_position#:#Modifica posizione sovrapposizione content#:#cont_edit_par#:#Modifica paragrafo content#:#cont_edit_personal_data#:#Modifica dati personali @@ -6493,19 +6480,19 @@ content#:#cont_edit_shape_rectangle#:#Edita forma (Rettangolo) content#:#cont_edit_shape_whole_picture#:#Edita forma (Immagine intera) content#:#cont_edit_src#:#Modifica codice sorgente content#:#cont_edit_style#:#Edita Stile -content#:#cont_edit_table#:#Edit Table###26 08 2024 new variable +content#:#cont_edit_table#:#Edit Table###30 04 2024 new variable content#:#cont_edit_tabs#:#Proprietà content#:#cont_edit_term#:#Modifica termine -content#:#cont_edit_title#:#Change Title###26 08 2024 new variable +content#:#cont_edit_title#:#Change Title###30 04 2024 new variable content#:#cont_element_refers_removed_itgr#:#Questo elemento di contenuto fa riferimento a un gruppo di articoli che nel frattempo è stato rimosso. content#:#cont_empty_question#:#Modifica della domande non terminata. Si prega cliccare e modificare o eliminare domanda. content#:#cont_enable_page_history#:#Cronologia pagina -content#:#cont_enable_page_history_info#:#Stores older versions of pages and allows to roll back to older versions. +content#:#cont_enable_page_history_info#:#Memorizza le versioni precedenti delle pagine e consente di ripristinare le versioni precedenti. content#:#cont_enable_time_scheduled_page_activation#:#Attivazione Pagina non prevista content#:#cont_enable_time_scheduled_page_activation_info#:#Se abilitato, un periodo di attivazione (data/ora) puo'essere selezionato nell'editore di modulo per ogni pagina. content#:#cont_end#:#Fine content#:#cont_enough_answers_correct#:#Giusto, ma non è la soluzione migliore! -content#:#cont_enter_a_dir_name#:#Inserisci nome directory. +content#:#cont_enter_a_dir_name#:#Inserisci nome cartella. content#:#cont_enter_a_file#:#Seleziona un file. content#:#cont_error#:#Ha avuto luogo un errore content#:#cont_exp_id_used_multiple#:#ID di esportazione utilizzato diverse volte @@ -6517,101 +6504,101 @@ content#:#cont_export_id#:#Esporta ID content#:#cont_file#:#File content#:#cont_file_created#:#File creato. content#:#cont_file_deleted#:#File cancellato. -content#:#cont_file_from_repository#:#File dal Repository -content#:#cont_file_from_workspace#:#File From My Workspace +content#:#cont_file_from_repository#:#File dall'Archivio +content#:#cont_file_from_workspace#:#File dalle risorse personali content#:#cont_file_renamed#:#File rinominato. content#:#cont_file_unzipped#:#File dezippato. content#:#cont_files#:#File content#:#cont_finish_editing#:#Termina modifica -content#:#cont_finish_table_editing#:#Finish Data Table Editing###26 08 2024 new variable -content#:#cont_first_open#:#First Opened +content#:#cont_finish_table_editing#:#Finish Data Table Editing###30 04 2024 new variable +content#:#cont_first_open#:#In primo luogo aperto content#:#cont_first_page#:#Prima pagina content#:#cont_first_row_style#:#Stile della prima riga content#:#cont_fix_tree#:#Correggi la struttura ad albero (Fix Tree) -content#:#cont_fix_tree_confirm#:#Per favore, esegui questo comando solo se la struttura dell& +content#:#cont_fix_tree_confirm#:#Esegui questo comando solo se la struttura ad albero di questo modulo di apprendimento è corrotta, ad es. se si verificano elementi vuoti nella vista Explorer. content#:#cont_fn#:#Nota a piè di pagina content#:#cont_footer#:#Piè di pagina -content#:#cont_footnote#:#Footnote###29 07 2022 new variable +content#:#cont_footnote#:#Footnote content#:#cont_force_all_open#:#Forza tutta aperta content#:#cont_format#:#Formato -content#:#cont_format_cells#:#Format Cells###26 08 2024 new variable +content#:#cont_format_cells#:#Format Cells###30 04 2024 new variable content#:#cont_fourth_edition#:#SCORM 2004 quarta edizione -content#:#cont_fourth_edition_info#:#SCORM 2004 4th edition offers some advantages compared to the 3rd edition. Further data over SCO boundaries can be exchanged for example. These options are however rarely used and have a negative effect on the speed. +content#:#cont_fourth_edition_info#:#SCORM 2004 4th edition offre alcuni vantaggi rispetto alla 3a edizione. Ulteriori dati oltre i limiti SCO possono essere scambiati per esempio. Queste opzioni sono tuttavia utilizzate raramente e hanno un effetto negativo sulla velocità. content#:#cont_free_pages#:#Pagine libere -content#:#cont_full_is_in_dir#:#La cancellazione non & +content#:#cont_full_is_in_dir#:#Cancellazione impossibile. Il file a schermo intero è nella directory. content#:#cont_fullscreen#:#A tutto schermo content#:#cont_general_properties#:#Proprieta' generali content#:#cont_get_link#:#restituisci il collegamento content#:#cont_glo_assign#:#Assegna Glossario content#:#cont_glo_create#:#Crea Glossario content#:#cont_glo_detach#:#Separa Glossario -content#:#cont_glo_properties#:#Propriet& +content#:#cont_glo_properties#:#Proprietà del glossario content#:#cont_glossaries#:#Glossari -content#:#cont_got_lock_release#:#This page has been locked for your editing until %1. Please release the page after you have done all your changes. +content#:#cont_got_lock_release#:#La pagina è stata bloccata per permetterLe di modificarla fino a %1. Fino ad allora altri utenti non possono effettuare modifiche alla pagina. La preghiamo di sbloccarla al termine delle Sue modifiche. content#:#cont_grid_cell#:#Colonna content#:#cont_grid_cell_confirm_deletion#:#Vuoi davvero eliminare la/e colonna/e? content#:#cont_grid_nr_cells#:#Numero di colonne -content#:#cont_grid_t_main_side#:#Haupt- und Seitenblock###07 02 2020 new variable -content#:#cont_grid_t_main_side_info#:#Legt einen breite Spalte links und eine schmalere Spalte rechts daneben an. Wechselt in Mobilansicht (small) zu einem Ein-Spalten-Layout.###07 02 2020 new variable -content#:#cont_grid_t_manual#:#Manuell erstelltes Seitenlayout###07 02 2020 new variable -content#:#cont_grid_t_manual_info#:#Ermöglicht die freie Gestaltung von Spaltenanzahl und -breiten.###07 02 2020 new variable -content#:#cont_grid_t_three_column#:#Drei-Spalten-Layout###07 02 2020 new variable -content#:#cont_grid_t_three_column_info#:#Legt drei gleich breite Spalten nebeneinander an. Wechselt in Mobilansicht (small) zu einem Ein-Spalten-Layout.###07 02 2020 new variable -content#:#cont_grid_t_two_by_two#:#Zwei-mal-zwei-Box###07 02 2020 new variable -content#:#cont_grid_t_two_by_two_info#:#Legt zwei Zeilen mit zwei gleich breiten Spalten an. Wechselt in Mobilansicht (small) zu einem Ein-Spalten-Layout und auf extrabreiten Bildschirmen (extra large) in ein Vier-Spalten-Layout.###07 02 2020 new variable -content#:#cont_grid_t_two_column#:#Zwei-Spalten-Layout###07 02 2020 new variable -content#:#cont_grid_t_two_column_info#:#Legt zwei gleich breite Spalten nebeneinander an. Wechselt in Mobilansicht (small) zu einem Ein-Spalten-Layout.###07 02 2020 new variable +content#:#cont_grid_t_main_side#:#Blocco principale e secondario +content#:#cont_grid_t_main_side_info#:#Crea una colonna larga a sinistra e una colonna più stretta sulla destra. La visualizzazione passa ad una colonna nella modalità mobile (small). +content#:#cont_grid_t_manual#:#Layout di pagina creato manualmente +content#:#cont_grid_t_manual_info#:#Permette di impostare liberamente il numero e la larghezza delle colonne +content#:#cont_grid_t_three_column#:#Distribuzione a tre colonne +content#:#cont_grid_t_three_column_info#:#Crea tre colonne della stessa ampiezza. Su dispositivi cellulari la visualizzazione cambia ad una colonna (small). +content#:#cont_grid_t_two_by_two#:#Scatola due-per-due +content#:#cont_grid_t_two_by_two_info#:#Crea due righe con due colonne della stessa ampiezza. Passa ad una colonna in visualizzazione mobile (small) ed a quattro colonne su dispositivi con schermi molto larghi (extralarge). +content#:#cont_grid_t_two_column#:#Distribuzione a due colonne +content#:#cont_grid_t_two_column_info#:#Crea due colonne accostate della stessa ampiezza. Passa ad una colonna nella visualizzazione da dispositivi cellulari (small). content#:#cont_grid_width_l#:#Grande content#:#cont_grid_width_l_info#:#Per esempio desktop content#:#cont_grid_width_m#:#Medio -content#:#cont_grid_width_m_info#:#Per esempio tablet +content#:#cont_grid_width_m_info#:#p.es. tablet content#:#cont_grid_width_s#:#Piccolo -content#:#cont_grid_width_s_info#:#Per esempio smartphone -content#:#cont_grid_width_xl#:#Extra Large -content#:#cont_grid_width_xl_info#:#Per esempio desktop ampio -content#:#cont_hacc_needs_height#:#Please set a content height for horizontal accordions.###26 08 2024 new variable -content#:#cont_hacc_needs_width#:#Please set a content width for horizontal accordions.###26 08 2024 new variable -content#:#cont_has_row_header#:#Has a Header Row###26 08 2024 new variable +content#:#cont_grid_width_s_info#:#p.es. smartphone +content#:#cont_grid_width_xl#:#Molto grande (Extra Large) +content#:#cont_grid_width_xl_info#:#p.es. desktop ampio +content#:#cont_hacc_needs_height#:#Please set a content height for horizontal accordions.###26 04 2023 new variable +content#:#cont_hacc_needs_width#:#Please set a content width for horizontal accordions.###26 04 2023 new variable +content#:#cont_has_row_header#:#Has a Header Row###30 04 2024 new variable content#:#cont_header#:#Intestazione content#:#cont_height#:#Altezza content#:#cont_help_no_valid_tooltip_id#:#L’ID descrizione comando immesso non è valido. content#:#cont_hide_adv#:#Nascondi conoscenza avanzata content#:#cont_hide_head_foot_print#:#Nascondi intestazione personalizzata e piè di pagina nella visualizzazione stampa -content#:#cont_hidenavig#:#Nascondi Navigation-tree a sinistra -content#:#cont_hidenavig_info#:#The left navigation tree can be hidden, if the SCORM Learning module contains sufficient functionality to navigate the content or the top navigation bar is displayed. +content#:#cont_hidenavig#:#Nascondi albero a sinistra +content#:#cont_hidenavig_info#:#L'albero di navigazione a sinistra può essere nascosto se il modulo di apprendimento SCORM contiene funzionalità sufficienti per navigare nel contenuto o viene visualizzata la barra di navigazione in alto. content#:#cont_highlight_class#:#Evidenzia classe content#:#cont_highlight_mode#:#Evidenzia modalità content#:#cont_hover#:#Passaggio del mouse content#:#cont_href#:#href content#:#cont_html_export_ids#:#ID di esportazione HTML -content#:#cont_html_export_ids_info#:#Allows to maintain extra IDs for ILIAS learning modules, that are used for naming HTML files, when HTML export is done. +content#:#cont_html_export_ids_info#:#Consente di mantenere ID aggiuntivi per i moduli di apprendimento ILIAS, utilizzati per denominare i file HTML, al termine dell'esportazione HTML. content#:#cont_html_table#:#Tabella HTML content#:#cont_id_ref#:#identificatore ref content#:#cont_ie_compatibility#:#Internet Explorer 7 modalità compatibile -content#:#cont_ie_compatibility_info#:#Especially for older learning modules it can be helpful to activate the compatibility mode. Please note that the compatibility mode can be disabled in newer versions of Internet Explorer. -content#:#cont_ie_force_render#:#Force Internet Explorer to render again -content#:#cont_ie_force_render_info#:#Enable this option only if content of the learning module is not displayed correctly with Internet Explorer due to many frames or iframes. Additionally you have to set the option 'Display' to 'in new window'. -content#:#cont_iim_add_overlay#:#Add Overlay###26 08 2024 new variable -content#:#cont_iim_add_trigger#:#Add Trigger###26 08 2024 new variable -content#:#cont_iim_add_trigger_text#:#Please add a trigger. Afterwards edit size and position on the right screen.###26 08 2024 new variable -content#:#cont_iim_background_image#:#Background Image###26 08 2024 new variable -content#:#cont_iim_background_image_and_caption#:#Background Image and Caption###26 08 2024 new variable -content#:#cont_iim_edit#:#Edit Interactive Image###26 08 2024 new variable -content#:#cont_iim_edit_trigger#:#Edit Trigger###26 08 2024 new variable -content#:#cont_iim_finish_editing#:#Finish Editing Interactive Image###26 08 2024 new variable -content#:#cont_iim_horizontal#:#Horizontal###26 08 2024 new variable -content#:#cont_iim_lg#:#Large###26 08 2024 new variable -content#:#cont_iim_md#:#Medium###26 08 2024 new variable -content#:#cont_iim_no_overlay#:#No Overlay###26 08 2024 new variable -content#:#cont_iim_overview#:#Overview###26 08 2024 new variable -content#:#cont_iim_select_overlay#:#Select Overlay###26 08 2024 new variable -content#:#cont_iim_select_trigger#:#To edit an existing trigger, click it on the right screen.###26 08 2024 new variable -content#:#cont_iim_size#:#Size###26 08 2024 new variable -content#:#cont_iim_sm#:#Small###26 08 2024 new variable -content#:#cont_iim_tr_add_popup#:#Add Content-Popup###26 08 2024 new variable -content#:#cont_iim_tr_properties_info#:#The trigger will be presented on the right side. You may alter position and size using the mouse.###26 08 2024 new variable -content#:#cont_iim_trigger#:#Trigger###26 08 2024 new variable -content#:#cont_iim_vertical#:#Vertical###26 08 2024 new variable +content#:#cont_ie_compatibility_info#:#Soprattutto per i moduli di apprendimento più vecchi può essere utile attivare la modalità di compatibilità. Si noti che la modalità di compatibilità può essere disabilitata nelle versioni più recenti di Internet Explorer. +content#:#cont_ie_force_render#:#Forza il rendering di Internet Explorer +content#:#cont_ie_force_render_info#:#Abilita questa opzione solo se il contenuto del modulo di apprendimento non viene visualizzato correttamente con Internet Explorer a causa di molti frame o iframe. Inoltre, devi impostare l'opzione "Visualizza" su "in una nuova finestra". +content#:#cont_iim_add_overlay#:#Add Overlay###30 04 2024 new variable +content#:#cont_iim_add_trigger#:#Add Trigger###30 04 2024 new variable +content#:#cont_iim_add_trigger_text#:#Please add a trigger. Afterwards edit size and position on the right screen.###30 04 2024 new variable +content#:#cont_iim_background_image#:#Background Image###30 04 2024 new variable +content#:#cont_iim_background_image_and_caption#:#Background Image and Caption###30 04 2024 new variable +content#:#cont_iim_edit#:#Edit Interactive Image###30 04 2024 new variable +content#:#cont_iim_edit_trigger#:#Edit Trigger###30 04 2024 new variable +content#:#cont_iim_finish_editing#:#Finish Editing Interactive Image###30 04 2024 new variable +content#:#cont_iim_horizontal#:#Horizontal###30 04 2024 new variable +content#:#cont_iim_lg#:#Large###30 04 2024 new variable +content#:#cont_iim_md#:#Medium###30 04 2024 new variable +content#:#cont_iim_no_overlay#:#No Overlay###30 04 2024 new variable +content#:#cont_iim_overview#:#Overview###30 04 2024 new variable +content#:#cont_iim_select_overlay#:#Select Overlay###30 04 2024 new variable +content#:#cont_iim_select_trigger#:#To edit an existing trigger, click it on the right screen.###30 04 2024 new variable +content#:#cont_iim_size#:#Size###30 04 2024 new variable +content#:#cont_iim_sm#:#Small###30 04 2024 new variable +content#:#cont_iim_tr_add_popup#:#Add Content-Popup###30 04 2024 new variable +content#:#cont_iim_tr_properties_info#:#The trigger will be presented on the right side. You may alter position and size using the mouse.###30 04 2024 new variable +content#:#cont_iim_trigger#:#Trigger###30 04 2024 new variable +content#:#cont_iim_vertical#:#Vertical###30 04 2024 new variable content#:#cont_imagemap#:#Mappa Immagine content#:#cont_import#:#Importa content#:#cont_import_id#:#Identificatore @@ -6623,7 +6610,7 @@ content#:#cont_initial_attached_content#:#Contenuto aggiuntivo iniziale content#:#cont_insert_amd_page_list#:#Inserisci elenco pagina content#:#cont_insert_as_chapter#:#Inserisci come Capitolo content#:#cont_insert_as_subchapter#:#Inserisci come Sottocapitolo -content#:#cont_insert_blog#:#Add Blog +content#:#cont_insert_blog#:#Aggiungi Blog content#:#cont_insert_chapter#:#Inserisci Capitolo content#:#cont_insert_chapter_from_clip#:#Incolla i capitoli dagli appunti content#:#cont_insert_consultation_hours#:#Inserisci ore di consultazione @@ -6636,34 +6623,34 @@ content#:#cont_insert_mob#:#Nuovo oggetto multimediale content#:#cont_insert_my_courses#:#Inserisci Miei corsi content#:#cont_insert_page#:#Inserisci Pagina content#:#cont_insert_page_from_clip#:#Incolla le pagine dagli appunti -content#:#cont_insert_pagelayout#:#Insert Template Page###07 02 2020 new variable +content#:#cont_insert_pagelayout#:#Inserisci modello di pagina content#:#cont_insert_par#:#Inserisci paragrafo -content#:#cont_insert_profile#:#Add Personal Data +content#:#cont_insert_profile#:#Aggiungi dati personali content#:#cont_insert_resources#:#Inserisci Elenco Risorse content#:#cont_insert_section#:#Inserisci Sezione -content#:#cont_insert_skills#:#Insert Skill +content#:#cont_insert_skills#:#Inserisci competenze content#:#cont_insert_src#:#Inserisci codice sorgente content#:#cont_insert_subchapter#:#Inserisci Sottocapitolo content#:#cont_insert_subchapter_from_clip#:#Incolla i sottocapitoli dagli appunti content#:#cont_insert_table#:#Inserisci tabella -content#:#cont_insert_verification#:#Add Verification -content#:#cont_inst_map_areas#:#Instance Aree di link -content#:#cont_interactions#:#enable storage of results of interactions +content#:#cont_insert_verification#:#Aggiungi verifica +content#:#cont_inst_map_areas#:#Aree collegate dell'istanza +content#:#cont_interactions#:#consentire la memorizzazione dei risultati delle interazioni content#:#cont_interactions_info#:#Solitamente i risultati delle interazione nei moduli di apprendimento sono semplicemente archiviati senza essere nuovamente letti/caricati. Se si accerta che questo è il modo in cui il modulo di apprendimento funziona, questa opzione migliorerà la prestazione. content#:#cont_interactions_info_12#:#I risultati delle interazioni nei moduli di apprendimento SCORM 1,2 sono semplicemente archiviati. Questa opzione migliorerà la prestazione. content#:#cont_internal_link#:#Collegamento interno -content#:#cont_internal_links#:#Link Interni +content#:#cont_internal_links#:#Collegamenti interni content#:#cont_invalid_new_module#:#Modulo NON compatibile! Assicuratevi che il file imsmanifest.xml non sia cambiato content#:#cont_is_visible#:#e' visibile content#:#cont_item#:#Elemento -content#:#cont_keyword#:#Keyword###29 07 2022 new variable +content#:#cont_keyword#:#Keyword content#:#cont_language#:#Lingua content#:#cont_languages#:#Lingue content#:#cont_last_try#:#Ultimo tentativo -content#:#cont_last_update#:#Last Update###29 07 2022 new variable +content#:#cont_last_update#:#Last Update content#:#cont_last_visited_page#:#Ultima pagina visitata content#:#cont_latest_rev#:#Ultima revisione -content#:#cont_layout#:#Layout +content#:#cont_layout#:#Disposizione content#:#cont_layout_1window#:#Una finestra content#:#cont_layout_1window_desc#:#Contenuto nel frame principale. Link a media e glossario, e FAQ si aprono in un frame separato. content#:#cont_layout_2window#:#Due Finestre @@ -6672,21 +6659,21 @@ content#:#cont_layout_3window#:#Tre Finestre content#:#cont_layout_3window_desc#:#Contenuto del frame di sinistra. Link a media e FAQ si aprono le frame in alto a destra, i link al glossario in basso a destra. content#:#cont_layout_fullscreen#:#Schermo intero content#:#cont_layout_fullscreen_desc#:#Contenuto nel frame principale. Link a media e glossario, e FAQ si aprono in un frame separato. Non ci sono la barra di navigazione ed il menu' principale ILIAS. -content#:#cont_layout_per_page#:#Layout per pagina +content#:#cont_layout_per_page#:#Autorizzare disposizione per singola pagina content#:#cont_layout_per_page_info#:#Consente la definizione di layout specifici per ogni pagina. Attiva automaticamente anche il "Synchronize Frames". content#:#cont_layout_presentation#:#Presentazione content#:#cont_layout_presentation_desc#:#Contenuto nel frame principale. Link a media e glossario, e FAQ si aprono in un frame separato. Non c'è il menù principale ILIAS. content#:#cont_layout_template#:#Modello di layout content#:#cont_layout_toc2win#:#Tabella dei contenuti content#:#cont_layout_toc2win_desc#:#Table of contents a sinistra, contenuti a destra, Glossario, FAQ e media link si aprono dinamicamente in una finestra separata. -content#:#cont_layout_toc2windyn#:#Table of Contents Dinamica -content#:#cont_layout_toc2windyn_desc#:#Table of contents a sinistra, contenuti a destra, Glossario, FAQ e media link si aprono dinamicamente in un frame in basso a destra. +content#:#cont_layout_toc2windyn#:#Tabella dei contenuti, finestra dinamica +content#:#cont_layout_toc2windyn_desc#:#Tabella dei contenuti a sinistra, contenuti a destra, Glossario, FAQ e media link si aprono dinamicamente in un frame in basso a destra. content#:#cont_left#:#Sinistra content#:#cont_left_float#:#Sinistra, Floating -content#:#cont_license#:#Autorizzazione +content#:#cont_license#:#Licenza content#:#cont_license_info#:#Consenti la funzione di autorizzazione content#:#cont_light#:#Chiara -content#:#cont_link#:#Collegamento +content#:#cont_link#:#Link###09 03 2022 new variable content#:#cont_link_area#:#Collega area content#:#cont_link_ext#:#Link (esterno) content#:#cont_link_glo_in_lm#:#Tutti i termini del glossario dovrebbero essere collegati adesso al modulo di apprendimento? @@ -6695,14 +6682,14 @@ content#:#cont_link_no#:#Nessun collegamento content#:#cont_link_select#:#Collegamento interno content#:#cont_link_to_external#:#Collegamento al sito esterno content#:#cont_link_to_internal#:#Collegamento alla risorsa ILIAS -content#:#cont_link_to_wiki#:#Link to Wiki Page +content#:#cont_link_to_wiki#:#Link al Wiki Page content#:#cont_link_type#:#Tipo di collegamento -content#:#cont_link_user#:#User Profile###29 07 2022 new variable +content#:#cont_link_user#:#User Profile content#:#cont_linked_mobs#:#Oggetto multimediale collegato content#:#cont_links#:#Collegamenti content#:#cont_list_files#:#Elenco file content#:#cont_list_indent#:#Elenco rientro -content#:#cont_list_item_style#:#List Item Style###26 08 2024 new variable +content#:#cont_list_item_style#:#List Item Style###30 04 2024 new variable content#:#cont_list_outdent#:#Elenco rientro content#:#cont_list_properties#:#Elenca le proprieta' content#:#cont_lists#:#Liste @@ -6722,27 +6709,27 @@ content#:#cont_lm_comments_desc#:#Consente agli utenti di condividere commenti s content#:#cont_lm_default_layout#:#Layout di default del learning module content#:#cont_lm_mail_permanent_link#:#Clicca sul seguente link per accedere al modello di apprendimento: content#:#cont_lm_menu#:#Menu -content#:#cont_lm_properties#:#Propriet& +content#:#cont_lm_properties#:#Impostazioni del modulo di apprendimento content#:#cont_lm_starting_point#:#Punti di inizio per i moduli di apprendimento ILIAS content#:#cont_lm_starting_point_info#:#Pagina aperta quando si fa clicca su un titolo dei moduli di apprendimento. content#:#cont_localfile#:#File locale content#:#cont_localization#:#Localizzazione -content#:#cont_localization_info#:#Language used for predifined texts, e.g. "Previous" and "Next". +content#:#cont_localization_info#:#Lingua utilizzata per testi predefiniti, ad es. "Precedente" e "Successivo". content#:#cont_location#:#Posizione -content#:#cont_lpe_dpro_agreement_link#:#Declaration of Data Protection Link###26 08 2024 new variable +content#:#cont_lpe_dpro_agreement_link#:#Declaration of Data Protection Link###30 04 2024 new variable content#:#cont_lpe_language_selection#:#Selezione delle lingua content#:#cont_lpe_login_form#:#Modulo di accesso content#:#cont_lpe_openid_connect_login#:#OpenId Connect Login content#:#cont_lpe_openid_login_form#:#OpenId modulo di accesso content#:#cont_lpe_registration_link#:#Nuovo collegamento di registrazione -content#:#cont_lpe_saml_login#:#SAML Login###29 07 2022 new variable +content#:#cont_lpe_saml_login#:#SAML Login###09 03 2022 new variable content#:#cont_lpe_shib_login_form#:#Shibboleth modulo di accesso content#:#cont_lpe_user_agreement_link#:#Collegamento accordo utente content#:#cont_lrs_settings#:#Impostazioni content#:#cont_lvalue#:#Elemento dati content#:#cont_maintenance#:#Manutenzione content#:#cont_manifest#:#Manifesto -content#:#cont_manual_item_group#:#Manually Create Item Group###26 08 2024 new variable +content#:#cont_manual_item_group#:#Manually Create Item Group###30 04 2024 new variable content#:#cont_map_file_not_generated#:#Non è possibile generare la map file per l'editing. content#:#cont_marker#:#Indicatore content#:#cont_master_language_only#:#Lingua principale per traduzione @@ -6753,16 +6740,16 @@ content#:#cont_mastery_score_12_info#:#Se uno SCO non determina autonomamente un content#:#cont_mastery_score_2004#:#sovrascrivi punteggio_di passaggio_scalare content#:#cont_mastery_score_2004_info#:#Gli obiettivi dell’apprendimento principali di questo modulo di apprendimento vengono considerati superati se il punteggio ha raggiunto almeno un certo livello di punteggio_di passaggio_scalare. Questo valore-da affermare come valore percentuale-può essere sovrascritto qui ad esempio per ridurre il livello di necessità. Se il campo è vuoto, le informazioni nel manifesto SCORN sono valide. Ne file-manifesto vengono forniti tutti i seguenti valori: content#:#cont_max_time_allowed#:#tempo massimo consentito -content#:#cont_media#:#Images/Media###29 07 2022 new variable +content#:#cont_media#:#Images/Media###09 03 2022 new variable content#:#cont_media_placeh#:#Clicca e edita per inserire oggetto content#:#cont_media_placehl#:#Segnaposto Media content#:#cont_media_source#:#Sorgenti multimediali -content#:#cont_merge_cells#:#Merge Cells###26 08 2024 new variable -content#:#cont_missing_preconditions#:#Devi soddisfare i seguenti prerequisiti per poter accedere al capitolo & +content#:#cont_merge_cells#:#Merge Cells###30 04 2024 new variable +content#:#cont_missing_preconditions#:#È necessario soddisfare i seguenti presupposti per accedere al capitolo "%s". content#:#cont_missing_snippet#:#Frammento di contenuto mancante. Il frammento è stato eliminato. content#:#cont_mob_def_prop#:#Proprietà di default content#:#cont_mob_from_media_pool#:#Scegli dal media pool -content#:#cont_mob_inst_prop#:#Propriet& +content#:#cont_mob_inst_prop#:#Proprietà dell'istanza content#:#cont_mob_usages#:#Utilizzo content#:#cont_more_character_styles#:#...altri stili di caratteri content#:#cont_more_functions#:#Altro @@ -6790,37 +6777,37 @@ content#:#cont_new_trigger_area#:#Nuova area trigger content#:#cont_next_rev#:#Prossima revisione content#:#cont_nlist#:#Lista numerata content#:#cont_no_access#:#Accesso non consentito -content#:#cont_no_block#:#No Section###29 07 2022 new variable +content#:#cont_no_block#:#No Section content#:#cont_no_caption#:#Nessuna didascalia content#:#cont_no_glossary#:#Nessun glossario -content#:#cont_no_manifest#:#Non & -content#:#cont_no_page#:#Non & +content#:#cont_no_manifest#:#Nessun file imsmanifest.xml trovato nella directory principale. +content#:#cont_no_page#:#Nessuna pagina trovata. content#:#cont_no_page_access_unansw_q#:#È necessario rispondere correttamente a tutte le domande delle pagine precedenti per ottenere l'accesso a questa pagina. content#:#cont_no_page_in_chapter#:#Non c'è contenuto attivo in questo capitolo. content#:#cont_no_parameters#:#Nessun parametro -content#:#cont_no_read#:#No read permission###07 02 2020 new variable +content#:#cont_no_read#:#No read permission content#:#cont_no_subdir_in_zip#:#Comando di Zip fallito o file di import non valido.<br>Il file non contiene cartella/e. content#:#cont_no_text#:#Nessun testo content#:#cont_nomenu#:#Disabilita la Topnavigation-Bar content#:#cont_nomenu_info#:#La barra di navigazione in alto può essere nascosta, se il modulo di apprendimento SCORM contiene funzionalità sufficienti per sospendere, terminare e navigare il contenuto. content#:#cont_none#:#Nessuno content#:#cont_not_saved_edit_lock_expired#:#Spiacenti, ma nel frattempo un altro utente ha ottenuto il blocco di modifica per questa pagina. Puoi chiudere questo messaggio e copiare il contenuto nei tuoi appunti. -content#:#cont_notification_activate_lm#:#Activate Notification for Learning Module###07 02 2020 new variable -content#:#cont_notification_activate_page#:#Activate Notification for Page###07 02 2020 new variable -content#:#cont_notification_activated#:#Notification Activated (Whole LM)###07 02 2020 new variable -content#:#cont_notification_comment_lm#:#the following Learning Module Page has been commented###07 02 2020 new variable -content#:#cont_notification_comment_subject_lm#:#A comment was added to %s: %s###07 02 2020 new variable -content#:#cont_notification_deactivate_lm#:#Deactivate Notification for Learning Module###07 02 2020 new variable -content#:#cont_notification_deactivate_page#:#Deactivate Notification for Page###07 02 2020 new variable -content#:#cont_notification_deactivated#:#Notification Deactivated###07 02 2020 new variable -content#:#cont_notification_update_lm#:#the following Learning Module has been updated###07 02 2020 new variable +content#:#cont_notification_activate_lm#:#Activate Notification for Learning Module +content#:#cont_notification_activate_page#:#Activate Notification for Page +content#:#cont_notification_activated#:#Notification Activated (Whole LM) +content#:#cont_notification_comment_lm#:#the following Learning Module Page has been commented +content#:#cont_notification_comment_subject_lm#:#A comment was added to %s: %s +content#:#cont_notification_deactivate_lm#:#Deactivate Notification for Learning Module +content#:#cont_notification_deactivate_page#:#Deactivate Notification for Page +content#:#cont_notification_deactivated#:#Notification Deactivated +content#:#cont_notification_update_lm#:#the following Learning Module has been updated content#:#cont_notify_on_blocked_users#:#Notifiche sugli utenti bloccati content#:#cont_notify_on_blocked_users_info#:#Riceverai una notifica se gli utenti verranno bloccati quando avranno esaurito i tentativi. content#:#cont_nr_col_footer#:#Colonne a piè di pagina content#:#cont_nr_col_header#:#Colonne nell’intestazione content#:#cont_nr_cols#:#Numero di colonne content#:#cont_nr_items#:#Numero di elementi -content#:#cont_nr_of_tries_exceeded#:#Number of tries exceeded +content#:#cont_nr_of_tries_exceeded#:#Numero di tentativi superato content#:#cont_nr_row_footer#:#File a piè di pagina content#:#cont_nr_row_header#:#File nell’intestazione content#:#cont_nr_rows#:#Numero di righe @@ -6829,24 +6816,24 @@ content#:#cont_number_std#:#Standard content#:#cont_number_type#:#Tipo di numero content#:#cont_numbered_list#:#Lista numerata content#:#cont_obj_removed#:#Oggetti cancellati. -content#:#cont_objectives#:#enable storage of data concerning learning objectives +content#:#cont_objectives#:#consentire la memorizzazione dei dati relativi agli obiettivi di apprendimento content#:#cont_objectives_info#:#Se ci si assicura che questo modulo di apprendimento funziona bene, questa opzione migliora la prestazione. content#:#cont_online#:#Online content#:#cont_online_help_ids#:#Help IDs content#:#cont_online_info#:#Imposta online il modulo di apprendimento SCORM per renderlo visibile e disponibile per agli utenti. In caso contrario, solo gli utenti con l’autorizzazione 'Modifica' avranno accesso a esso. content#:#cont_open#:#Display -content#:#cont_open_clipboard#:#Open Clipboard###29 07 2022 new variable -content#:#cont_open_iframe#:#Opens in the same window, the ILIAS main menue is displayed -content#:#cont_open_iframe_info#:#The learning module starts in the same window (iFrame) next to the ILIAS main menu.###26 08 2024 new variable -content#:#cont_open_normal#:#in tab / new window with link -content#:#cont_open_normal_info#:#The learning module starts in a new tab or alternatively in a new window without the ILIAS main menu.###26 08 2024 new variable -content#:#cont_open_window#:#Definitely opens in a new window, without ILIAS main menue -content#:#cont_open_window_info#:#The learning module must start in a new window without the ILIAS main menu.###26 08 2024 new variable +content#:#cont_open_clipboard#:#Open Clipboard +content#:#cont_open_iframe#:#Si apre nella stessa finestra, viene visualizzato il menu principale di ILIAS +content#:#cont_open_iframe_info#:#The learning module starts in the same window (iFrame) next to the ILIAS main menu.###30 04 2024 new variable +content#:#cont_open_normal#:#nella scheda / nuova finestra con collegamento +content#:#cont_open_normal_info#:#The learning module starts in a new tab or alternatively in a new window without the ILIAS main menu.###30 04 2024 new variable +content#:#cont_open_window#:#Sicuramente si apre in una nuova finestra, senza il menu principale ILIAS +content#:#cont_open_window_info#:#The learning module must start in a new window without the ILIAS main menu.###30 04 2024 new variable content#:#cont_operation_not_allowed#:#Operazione non consentita content#:#cont_organization#:#Organizzazione content#:#cont_organizations#:#Organizzazioni content#:#cont_orig_size#:#Dimensioni originali -content#:#cont_other_resources#:#Content (Other Remaining Resources)###26 08 2024 new variable +content#:#cont_other_resources#:#Content (Other Remaining Resources)###30 04 2024 new variable content#:#cont_out_of_focus_message#:#Questa pagina non è più correlata al tuo attuale obiettivo di apprendimento. content#:#cont_out_of_focus_message_last_page#:#Questa è l’ultima pagina del contenuto correlato al tuo obiettivo dell’apprendimento. content#:#cont_ov_all_correct#:#Hai risposto correttamente a tutte le domande. @@ -6859,18 +6846,18 @@ content#:#cont_overlays_have_been_deleted#:#Le sovrapposizioni sono state elimin content#:#cont_page_activation#:#Attivazione Pagina content#:#cont_page_activation_on#:#Il contenuto verrà attivato su %s. content#:#cont_page_compare#:#Confronta le Versioni Selezionate -content#:#cont_page_created#:#Page created###07 02 2020 new variable +content#:#cont_page_created#:#Page created content#:#cont_page_currently_deactivated#:#Questa pagina è disattivata. content#:#cont_page_deactivated#:#La pagina è disattivata content#:#cont_page_deactivated_elements#:#La pagina contiene elementi disattivati. content#:#cont_page_header#:#Intestazione pagina content#:#cont_page_layout#:#Layout di pagina content#:#cont_page_lock_released#:#Modifica terminata. Il blocco della pagina è stato rilasciato. -content#:#cont_page_notification_activated#:#Notification Activated (Single Page)###07 02 2020 new variable -content#:#cont_page_template#:#Page Template###07 02 2020 new variable +content#:#cont_page_notification_activated#:#Notification Activated (Single Page) +content#:#cont_page_template#:#Page Template content#:#cont_page_toc#:#Panoramica della pagina -content#:#cont_page_translation_does_not_exist#:#The translation page does not exist yet and will be created -content#:#cont_page_usage#:#Page Usage###29 10 2025 new variable +content#:#cont_page_translation_does_not_exist#:#La pagina di traduzione non esiste ancora e verrà creata +content#:#cont_page_usage#:#Page Usage###28 11 2025 new variable content#:#cont_pages#:#Pagine content#:#cont_pages_and_subchapters#:#Pagine e Sottocapitoli content#:#cont_par_format#:#Paragrafo @@ -6878,7 +6865,7 @@ content#:#cont_paragraph_styles#:#Stili paragrafo content#:#cont_parameter#:#Parametro content#:#cont_parameters#:#Parametri content#:#cont_paste_from_clipboard#:#Incolla dagli appunti -content#:#cont_paste_from_spreadsheet#:#Paste From Spreadsheet###26 08 2024 new variable +content#:#cont_paste_from_spreadsheet#:#Paste From Spreadsheet###30 04 2024 new variable content#:#cont_paste_table#:#Incolla Tabella content#:#cont_pc_amdpl#:#Elenco pagina content#:#cont_pc_blog#:#Blog @@ -6891,35 +6878,35 @@ content#:#cont_pc_grid#:#Layout colonna content#:#cont_pc_hacc#:#Accordion (Orizzontale) content#:#cont_pc_iim#:#immagine interattiva content#:#cont_pc_incl#:#Frammento di contenuto -content#:#cont_pc_lay#:#Layout Template###26 08 2024 new variable +content#:#cont_pc_lay#:#Layout Template###30 04 2024 new variable content#:#cont_pc_list#:#Lista avanzata content#:#cont_pc_map#:#Mappa -content#:#cont_pc_media#:#Image/Media###29 07 2022 new variable +content#:#cont_pc_media#:#Image/Media###09 03 2022 new variable content#:#cont_pc_mob#:#Supporti content#:#cont_pc_modified#:#Contenuto modificato content#:#cont_pc_new#:#Nuovo contenuto content#:#cont_pc_par#:#Testo -content#:#cont_pc_plach#:#Placeholder###26 08 2024 new variable +content#:#cont_pc_plach#:#Placeholder###30 04 2024 new variable content#:#cont_pc_prof#:#Dati personali content#:#cont_pc_qover#:#Panoramica domande content#:#cont_pc_qst#:#Domanda -content#:#cont_pc_repobj#:#Item Group###26 08 2024 new variable +content#:#cont_pc_repobj#:#Item Group###30 04 2024 new variable content#:#cont_pc_res#:#Risorsa content#:#cont_pc_sec#:#Sezione -content#:#cont_pc_skills#:#Skill -content#:#cont_pc_src#:#Source Code###26 08 2024 new variable +content#:#cont_pc_skills#:#competenze +content#:#cont_pc_src#:#Source Code###30 04 2024 new variable content#:#cont_pc_tab#:#Tabella avanzata -content#:#cont_pc_tabs#:#Accordion/Carousel###26 08 2024 new variable +content#:#cont_pc_tabs#:#Accordion/Carousel###30 04 2024 new variable content#:#cont_pc_vacc#:#Accordion (Verticale) -content#:#cont_pc_vrfc#:#Verification -content#:#cont_permission_handling#:#Permission Handling###26 08 2024 new variable +content#:#cont_pc_vrfc#:#Verifica +content#:#cont_permission_handling#:#Permission Handling###30 04 2024 new variable content#:#cont_permission_object#:#Oggetto di permesso content#:#cont_permission_object_desc#:#La sezione verrà presentata solo per gli utenti che dispongono dell'autorizzazione specificata per l'oggetto di permesso. content#:#cont_personal_clipboard#:#Appunti personali content#:#cont_pg_title#:#Titolo pagina content#:#cont_please_enter_a_term#:#Inserisci un termine. content#:#cont_please_select#:#per favore scegli -content#:#cont_please_try_again#:#Please try again +content#:#cont_please_try_again#:#Per favore riprova content#:#cont_popups_have_been_deleted#:#I popup sono state eliminati. content#:#cont_position#:#Posizione content#:#cont_prereq_type#:#tipo di prerequisiti @@ -6934,12 +6921,12 @@ content#:#cont_print_view#:#Stampa content#:#cont_print_view_pre_glo#:#Prevenire le appendici al glossario nella visualizzazione di stampa content#:#cont_profile_mode#:#Modalità content#:#cont_profile_mode_inherit#:#Automatico -content#:#cont_profile_mode_inherit_info#:#Use your public profile settings +content#:#cont_profile_mode_inherit_info#:#Usa le tue impostazioni del profilo pubblico content#:#cont_profile_mode_manual#:#Manuale content#:#cont_profile_mode_manual_info#:#Utilizza i seguenti dati: content#:#cont_profile_mode_template_inherit_info#:#Utilizza impostazioni di profilo content#:#cont_progress_icons#:#Icone di progresso -content#:#cont_progress_icons_info#:#Show progress icons instead of chapter page icons in presentation mode. Please note that progress information is stored only with ILIAS 4.5 and higher. +content#:#cont_progress_icons_info#:#Mostra le icone di avanzamento anziché le icone della pagina del capitolo in modalità presentazione. Si noti che le informazioni sull'avanzamento vengono archiviate solo con ILIAS 4.5 e versioni successive. content#:#cont_prtf_page#:#Pagina portfolio content#:#cont_prtt_page#:#Pagina modello di portfolio content#:#cont_public_access#:#Accesso pubblico @@ -6947,17 +6934,17 @@ content#:#cont_purpose#:#Scopo content#:#cont_qover_list_wrong_q#:#Lista delle risposte sbagliate content#:#cont_qover_list_wrong_q_info#:#Verrà mostrata una lista delle risposte sbagliate o delle domande senza risposta. content#:#cont_qover_short_message#:#Messaggio di stato -content#:#cont_qover_short_message_info#:#A message "You have correctly answered C out of Y questions of this unit." will be displayed. +content#:#cont_qover_short_message_info#:#Sarà mostrato un messaggio "Hai risposto correttamente alle domande C su Y di questa unità." content#:#cont_qtries#:#Numero di tentativi per domanda content#:#cont_qtries_info#:#Valore predefinito per il numero di tentativi per le domande appena create. -content#:#cont_question#:#Question###29 10 2025 new variable -content#:#cont_question_page_usage#:#Questions on Pages###29 10 2025 new variable +content#:#cont_question#:#Question###28 11 2025 new variable +content#:#cont_question_page_usage#:#Questions on Pages###28 11 2025 new variable content#:#cont_question_placeh#:#Clicca e edita per inserire domanda content#:#cont_question_placehl#:#Segnalibro della domanda content#:#cont_question_stats#:#Statistiche content#:#cont_question_type#:#Tipo di domanda -content#:#cont_question_usage#:#Usages###29 10 2025 new variable -content#:#cont_quit_text_editing#:#Finish Text Editing###26 08 2024 new variable +content#:#cont_question_usage#:#Usages###28 11 2025 new variable +content#:#cont_quit_text_editing#:#Finish Text Editing###26 04 2023 new variable content#:#cont_rand_start#:#Avvio casuale content#:#cont_really_delete_overlays#:#Vuoi davvero eliminare le seguenti sovrapposizioni? content#:#cont_really_delete_popups#:#Vuoi davvero eliminare i seguenti popup? @@ -6973,7 +6960,7 @@ content#:#cont_repository_item#:#Risorsa content#:#cont_reset_nr_of_tries#:#Azzera numero di tentativi content#:#cont_resize_img#:#Ridimensiona immagine content#:#cont_resource#:#Risorsa -content#:#cont_resource_size#:#Resource Size +content#:#cont_resource_size#:#Dimensione della risorsa content#:#cont_resource_size_info#:#Without size declaration the size can be controlled by the content style. If neither a size is declared nor the content style contains a rule that determines the size, only images will be displayed in their default size. content#:#cont_resource_type#:#Tipo content#:#cont_resources#:#Risorse @@ -7003,15 +6990,15 @@ content#:#cont_saved_map_data#:#Mappa Dati salvata content#:#cont_saving#:#Salva... content#:#cont_sc_auto_continue#:#Auto-Continue content#:#cont_sc_auto_continue_info#:#Dopo aver terminato la loro ultima attività, gli utenti saranno automaticamente reindirizzati al prossimo SCO. La funzione non è supportata da tutti i moduli di apprendimento SCORM 1.2. -content#:#cont_sc_auto_review_2004#:#Automatic Review Mode -content#:#cont_sc_auto_review_completed#:#if completed -content#:#cont_sc_auto_review_completed_and_passed#:#if completed and passed -content#:#cont_sc_auto_review_completed_not_failed_or_passed#:#if completed or passed, but not failed (recommended for Automatic Review Mode) -content#:#cont_sc_auto_review_completed_or_passed#:#if completed or passed -content#:#cont_sc_auto_review_info_2004#:#If the automatic review mode is enabled, then the tracking data for a chapter (SCO) of the learning module are not stored when one of these options apply. In the rare case however, that the learning module makes use of Sequencing & Navigation according to SCORM 2004, this option should not be enabled. +content#:#cont_sc_auto_review_2004#:#Modalità di revisione automatica +content#:#cont_sc_auto_review_completed#:#se completato +content#:#cont_sc_auto_review_completed_and_passed#:#se completato e superato +content#:#cont_sc_auto_review_completed_not_failed_or_passed#:#se completato o superato, ma non fallito (consigliato per la modalità di revisione automatica) +content#:#cont_sc_auto_review_completed_or_passed#:#se completato o superato +content#:#cont_sc_auto_review_info_2004#:#Se la modalità di revisione automatica è abilitata, i dati di tracciamento per un capitolo (SCO) del modulo di apprendimento non vengono memorizzati quando si applica una di queste opzioni. Nel raro caso, tuttavia, che il modulo di apprendimento utilizzi Sequencing & Navigation secondo SCORM 2004, questa opzione non dovrebbe essere abilitata. content#:#cont_sc_auto_review_no#:#disabled -content#:#cont_sc_auto_review_passed#:#if passed -content#:#cont_sc_auto_review_passed_or_failed#:#if passed or failed +content#:#cont_sc_auto_review_passed#:#se superato +content#:#cont_sc_auto_review_passed_or_failed#:#se superato o fallito content#:#cont_sc_id_setting#:#id_studente in base a SCORM 1.2 content#:#cont_sc_id_setting_2004#:#id_allievo in base a SCORM 2004 content#:#cont_sc_id_setting_info#:#Nel caso in cui un id numerico per l’id_studente (SCORM 1.2) o per l’id_allievo (SCORM 2004) crea problemi per il modulo di apprendimento, utilizzare l’opzione 'Nome utente ILIAS'. L'aggiunta di RefId o ObjId può essere utile per i moduli di apprendimento che si connettono a un server esterno. @@ -7022,9 +7009,9 @@ content#:#cont_sc_id_setting_user_login#:#Nome accesso ILIAS content#:#cont_sc_id_setting_user_login_plus_obj_id#:#Nome accesso ILIAS più Objld del modulo di apprendimento content#:#cont_sc_id_setting_user_login_plus_ref_id#:#Nome accesso ILIAS più Refld del modulo di apprendimento content#:#cont_sc_less_mode_browse#:#Lettura -content#:#cont_sc_less_mode_browse_info#:#The SCORM mode is set to "browse".###26 08 2024 new variable +content#:#cont_sc_less_mode_browse_info#:#The SCORM mode is set to "browse".###30 04 2024 new variable content#:#cont_sc_less_mode_normal#:#Normale -content#:#cont_sc_less_mode_normal_info#:#The SCORM mode is set to "normal".###26 08 2024 new variable +content#:#cont_sc_less_mode_normal_info#:#The SCORM mode is set to "normal".###30 04 2024 new variable content#:#cont_sc_max_attempt_exceed#:#E'stato raggiunto il numero massimo di tentativi. content#:#cont_sc_name_setting#:#nome_studente in base a SCORM 1.2 content#:#cont_sc_name_setting_2004#:#nome_allievo in base a SCORM 2004 @@ -7046,28 +7033,28 @@ content#:#cont_sc_stat_passed#:#Superato content#:#cont_sc_stat_running#:#In esecuzione content#:#cont_sc_store_if_previous_score_was_lower#:#mantenere i dati di tracciamento se il punteggio raggiunto nel tentativo precedente era maggiore o uguale content#:#cont_sc_title#:#Titolo -content#:#cont_sc_usession#:#Unlimited Session Timeout -content#:#cont_sc_usession_info#:#This setting activates periodical requests to the server to keep the session alive. +content#:#cont_sc_usession#:#Timeout sessione illimitato +content#:#cont_sc_usession_info#:#Questa impostazione attiva richieste periodiche al server per mantenere attiva la sessione. content#:#cont_sc_version#:#Versione SC -content#:#cont_sc_version_info#:#The version management will automatically insert the correct version number. +content#:#cont_sc_version_info#:#La gestione della versione inserirà automaticamente il numero di versione corretto. content#:#cont_scheduled_activation#:#Attivazione programmata content#:#cont_sco_glossary#:#Unità glossario content#:#cont_score#:#Punteggio -content#:#cont_scorm_ed_properties#:#Learning Module Properties / Glossary +content#:#cont_scorm_ed_properties#:#Proprietà / Glossario del modulo di apprendimento content#:#cont_scorm_options#:#Opzioni SCORM content#:#cont_scorm_type#:#tipo di SCORM content#:#cont_screen_ids#:#Screen IDs -content#:#cont_sec_protected#:#Protected###29 07 2022 new variable -content#:#cont_sec_protected_text#:#The following section is protected and can not be edited.###29 07 2022 new variable +content#:#cont_sec_protected#:#Protected###31 03 2023 new variable +content#:#cont_sec_protected_text#:#The following section is protected and can not be edited.###31 03 2023 new variable content#:#cont_second#:#Secondo -content#:#cont_sel_el_use_paste#:#Selected elements are now in the clipboard. Please click the desired target placeholder and select ‘Paste’.###29 07 2022 new variable +content#:#cont_sel_el_use_paste#:#Selected elements are now in the clipboard. Please click the desired target placeholder and select ‘Paste’. content#:#cont_select#:#Seleziona content#:#cont_select_file#:#Seleziona File content#:#cont_select_from_upload_dir#:#-- Seleziona dalla directory di upload -- content#:#cont_select_item#:#Seleziona almeno un elemento. content#:#cont_select_max_one_item#:#Per favore, scegli solo un elemento content#:#cont_select_media_pool#:#Seleziona Media Pool -content#:#cont_select_none#:#Clear Selection###29 07 2022 new variable +content#:#cont_select_none#:#Clear Selection content#:#cont_select_other_qpool#:#Seleziona altro gruppo content#:#cont_select_par_or_section#:#Seleziona almeno un paragrafo o una sezione content#:#cont_selected_items_have_been_copied#:#Gli elementi selezionati sono stati copiati negli appunti. Clicca sui segnalibri per incollarli nel learning module. @@ -7077,19 +7064,19 @@ content#:#cont_selected_terms#:#Termini selezionati content#:#cont_selected_topic#:#Argomento selezionato content#:#cont_selection#:#Selezione content#:#cont_self_assessment#:#Autovalutazione -content#:#cont_sequencing#:#enable Sequencing & Navigation according to settings by learning module -content#:#cont_sequencing_info#:#Enable the sequencing and navigation behaviour as defined by the learning module. +content#:#cont_sequencing#:#Sequenziamento e navigazione +content#:#cont_sequencing_info#:#Abilita il comportamento di sequenziamento e navigazione come definito dal modulo di apprendimento. content#:#cont_set_alignment#:#Allineamento set content#:#cont_set_layout#:#Imposta layout content#:#cont_set_link#:#Imposta il collegamento -content#:#cont_set_manuall#:#Set Manually###26 08 2024 new variable -content#:#cont_set_properties#:#Set Properties###26 08 2024 new variable +content#:#cont_set_manuall#:#Set Manually###30 04 2024 new variable +content#:#cont_set_properties#:#Set Properties###30 04 2024 new variable content#:#cont_set_start_file#:#Imposta file di partenza content#:#cont_set_styles#:#Stile set content#:#cont_set_tab_style_info#:#Per fissare lo styel spunta le caselle nelle celle di tabella content#:#cont_settings#:#Impostazioni per i moduli di apprendimento content#:#cont_shape#:#Forma -content#:#cont_shift_click_to_select#:#<b>Shift-click</b> on an element to <b>select</b> it and switch to selection mode.###29 07 2022 new variable +content#:#cont_shift_click_to_select#:#<b>Shift-click</b> on elements will <b>select</b> them and switch to the selection mode. content#:#cont_short_title#:#Titolo breve content#:#cont_short_title_info#:#I titoli brevi vengono utilizzati nella presentazione dell'albero a sinistra e per le etichette nella navigazione precedente/successiva. content#:#cont_short_titles#:#Titoli brevi @@ -7097,7 +7084,7 @@ content#:#cont_show_activation_info#:#Mostra informazioni attivazione content#:#cont_show_activation_info_info#:#Se l'attivazione pianificata non è ancora raggiunta, la pagina non verrà ignorata. Le informazioni verranno mostrate all’utente quando verrà attivata la pagina. content#:#cont_show_adv#:#Mostra conoscenza avanzata content#:#cont_show_content_after_focus#:#Continua con il modulo apprendimento -content#:#cont_show_fullscreen#:#Show Fullscreen###29 07 2022 new variable +content#:#cont_show_fullscreen#:#Show Fullscreen content#:#cont_show_info#:#Mostra Info content#:#cont_show_line_numbers#:#Mostra i numeri di linea content#:#cont_show_print_view#:#Anteprima di stampa @@ -7107,7 +7094,7 @@ content#:#cont_snippet_from_another_installation#:#Il frammento proviene da un content#:#cont_snippets_used#:#Frammenti di contenuto utilizzati content#:#cont_span#:#Intervallo content#:#cont_special_page#:#Pagina di contenuto speciale -content#:#cont_split_cell#:#Split Cell###26 08 2024 new variable +content#:#cont_split_cell#:#Split Cell###30 04 2024 new variable content#:#cont_spreadsheet_table#:#Tabella di foglio elettronico content#:#cont_sqst#:#Domanda di sondaggio (Materiale assegnato) content#:#cont_src#:#Codice sorgente @@ -7120,47 +7107,47 @@ content#:#cont_start_value#:#Valore di start content#:#cont_start_value_info#:#Inserisci valore iniziale come decimale. Default = 1. content#:#cont_startfile#:#File di partenza content#:#cont_status#:#Stato -content#:#cont_std_is_in_dir#:#La cancellazione non & +content#:#cont_std_is_in_dir#:#Cancellazione impossibile. Il file di visualizzazione standard è nella directory. content#:#cont_std_view#:#Vista standard content#:#cont_structure#:#Struttura content#:#cont_style#:#Stile content#:#cont_subchapters#:#Sottocapitoli -content#:#cont_submit_answers#:#Submit Answers +content#:#cont_submit_answers#:#Invia risposte content#:#cont_subtitle_file#:#File SRT ZIP content#:#cont_subtitle_files#:#Sottotitoli multimediali -content#:#cont_sur_block_format#:#Surrounding Section###29 07 2022 new variable +content#:#cont_sur_block_format#:#Surrounding Section###09 03 2022 new variable content#:#cont_switch_to_media_pool#:#Passa a un altro gruppo di supporti content#:#cont_syntax_help#:#Help di sintassi -content#:#cont_tab_add_above#:#Add Panel Above###26 08 2024 new variable -content#:#cont_tab_add_below#:#Add Panel Below###26 08 2024 new variable +content#:#cont_tab_add_above#:#Add Panel Above###30 04 2024 new variable +content#:#cont_tab_add_below#:#Add Panel Below###30 04 2024 new variable content#:#cont_tab_cont_height#:#Altezza contenuto content#:#cont_tab_cont_width#:#Larghezza contenuto -content#:#cont_tab_delete#:#Delete Panel###26 08 2024 new variable -content#:#cont_tab_move_bottom#:#Move To Bottom###26 08 2024 new variable -content#:#cont_tab_move_down#:#Move Downwards###26 08 2024 new variable -content#:#cont_tab_move_top#:#Move To Top###26 08 2024 new variable -content#:#cont_tab_move_up#:#Move Upwards###26 08 2024 new variable +content#:#cont_tab_delete#:#Delete Panel###30 04 2024 new variable +content#:#cont_tab_move_bottom#:#Move To Bottom###30 04 2024 new variable +content#:#cont_tab_move_down#:#Move Downwards###30 04 2024 new variable +content#:#cont_tab_move_top#:#Move To Top###30 04 2024 new variable +content#:#cont_tab_move_up#:#Move Upwards###30 04 2024 new variable content#:#cont_table#:#Tabella -content#:#cont_table_adv_settings#:#Erweiterte Einstellungen###26 08 2024 new variable +content#:#cont_table_adv_settings#:#Erweiterte Einstellungen###30 04 2024 new variable content#:#cont_table_border#:#Bordo tabella content#:#cont_table_border_info#:#Mantieni questo vuoti per rendere effettive le impostazioni di stile del contenuto. I valori devono includere unità (come px). -content#:#cont_table_cell_edit_info_1#:#Click on a table cell to select or deselect it.###26 08 2024 new variable -content#:#cont_table_cell_edit_info_2#:#Click on a row or column header to select or deselect the corresponding row or column.###26 08 2024 new variable -content#:#cont_table_cell_edit_info_3#:#Click on a second cell while holding shift to select all the cells in between.###26 08 2024 new variable +content#:#cont_table_cell_edit_info_1#:#Click on a table cell to select or deselect it.###30 04 2024 new variable +content#:#cont_table_cell_edit_info_2#:#Click on a row or column header to select or deselect the corresponding row or column.###30 04 2024 new variable +content#:#cont_table_cell_edit_info_3#:#Click on a second cell while holding shift to select all the cells in between.###30 04 2024 new variable content#:#cont_table_cell_properties#:#Tabella delle proprietà della cella content#:#cont_table_cellpadding#:#Cell Padding della tabella content#:#cont_table_cellpadding_info#:#Mantieni questo vuoti per rendere effettive le impostazioni di stile del contenuto. I valori devono includere unità (come px). -content#:#cont_table_edit_cells#:#Edit Cells###29 07 2022 new variable -content#:#cont_table_import_info#:#Please enter the table data separated by semicolon or TAB character for each column. Start a new row for each table row. Spreadsheet applications will usually use TAB characters for separation when transfered via clipboard. It should be possible to paste this data directly into the input field. No further formattings will be imported.###26 08 2024 new variable +content#:#cont_table_edit_cells#:#Edit Cells +content#:#cont_table_import_info#:#Please enter the table data separated by semicolon or TAB character for each column. Start a new row for each table row. Spreadsheet applications will usually use TAB characters for separation when transfered via clipboard. It should be possible to paste this data directly into the input field. No further formattings will be imported.###30 04 2024 new variable content#:#cont_table_properties#:#Tabella Proprietà -content#:#cont_table_style#:#Style###26 08 2024 new variable +content#:#cont_table_style#:#Style###30 04 2024 new variable content#:#cont_table_width#:#Larghezza tabella content#:#cont_tabs#:#Tabs content#:#cont_tabs_acc_hor#:#Accordion orizzontale content#:#cont_tabs_acc_ver#:#Fisarmonica verticale content#:#cont_tabs_carousel#:#Sequenza content#:#cont_tabs_confirm_deletion#:#Sei sicuro che tutti i tabs ed il loro contenuto debba essere cancellato? -content#:#cont_target#:#Target###26 08 2024 new variable +content#:#cont_target#:#Target###30 04 2024 new variable content#:#cont_target_missing#:#Manca Target content#:#cont_target_within_source#:#Il destinatario non deve essere l' oggetto sorgente. content#:#cont_template#:#Modello @@ -7170,10 +7157,10 @@ content#:#cont_tex#:#Codice Latex content#:#cont_text_acc#:#Accento: content#:#cont_text_code#:#Codice: content#:#cont_text_com#:#Commento: -content#:#cont_text_editing#:#Edit Text###26 08 2024 new variable +content#:#cont_text_editing#:#Edit Text###26 04 2023 new variable content#:#cont_text_emp#:#Testo enfatizzato: content#:#cont_text_fn#:#Note in calce alla pagina: -content#:#cont_text_iln_link#:#Internal Link###29 07 2022 new variable +content#:#cont_text_iln_link#:#Interal Link content#:#cont_text_imp#:#Importante: content#:#cont_text_keyword#:#Parola chiave content#:#cont_text_placeh#:#Clicca e edita per inserire testo @@ -7186,15 +7173,15 @@ content#:#cont_text_tex#:#Codice LaTeX: content#:#cont_text_xln#:#Collegamenti esterni: content#:#cont_third_and_more#:#Terzo o più content#:#cont_time#:#Tempo -content#:#cont_time_from_lms#:#determine processing times by ILIAS instead of SCO -content#:#cont_time_from_lms_info#:#Strict (according to the SCORM standard) check of values sent by the learning module to ILIAS. +content#:#cont_time_from_lms#:#Determina i tempi di elaborazione di ALIAS anziché di SCO +content#:#cont_time_from_lms_info#:#Controllo rigoroso (secondo lo standard SCORM) dei valori inviati dal modulo di apprendimento a ILIAS. content#:#cont_time_limit_action#:#esecuzione a tempo limitato content#:#cont_to_focus_beginning#:#Torna al contenuto correlato all'obiettivo di apprendimento content#:#cont_to_focus_return_crs#:#Torna al corso content#:#cont_toc#:#Tabella dei contenuti content#:#cont_toc_mode#:#Tipo menu -content#:#cont_tool_faq#:#FAQ###07 02 2020 new variable -content#:#cont_tool_media#:#Media###07 02 2020 new variable +content#:#cont_tool_faq#:#FAQ +content#:#cont_tool_media#:#Media content#:#cont_top#:#Alto content#:#cont_topic#:#Argomento content#:#cont_total_time#:#Tempo totale @@ -7205,7 +7192,7 @@ content#:#cont_tracking_items#:#Voci tracciate content#:#cont_tracking_modify#:#modifica dati content#:#cont_trans_import_info#:#Se hai esportato questo modulo come XML/Lingua principale per traduzione in un’altra installazione, adesso puoi importare nuovamente i file di traduzione esportati da questa seconda installazione. content#:#cont_transl_master_language_not_allowed#:#Per importare una traduzione è necessario attivare almeno un’altra lingua sotto "Impostazioni" > "Plurilinguismo". -content#:#cont_tree_fixed#:#La struttura dell& +content#:#cont_tree_fixed#:#La struttura ad albero è stata corretta. content#:#cont_tries#:#Comportamento delle domande content#:#cont_tries_remaining#:#Tentativi rimasti content#:#cont_tries_reset_on_visit#:#Ripristina su visita pagina @@ -7218,21 +7205,21 @@ content#:#cont_type_not_allowed#:#Tipo di contenuto non consentito in questa pos content#:#cont_unlock_allow_continue#:#Sblocca/ Consenti di continuare content#:#cont_unlocked#:#Sbloccato content#:#cont_update_amd_page_list#:#Modifica elenco pagina -content#:#cont_update_blog#:#Edit Blog +content#:#cont_update_blog#:#Modifica blog content#:#cont_update_consultation_hours#:#Modifica ore di consultazione content#:#cont_update_login_page#:#Modifica elemento nella pagina di accesso content#:#cont_update_map#:#Edita Mappa content#:#cont_update_my_courses#:#Modifica Miei corsi -content#:#cont_update_profile#:#Edit Personal Data +content#:#cont_update_profile#:#Modifica i dati personali content#:#cont_update_resources#:#Aggiorna lista risorse content#:#cont_update_section#:#Aggiorna Sezione -content#:#cont_update_skills#:#Edit Skill -content#:#cont_update_verification#:#Edit Verification +content#:#cont_update_skills#:#Modifica competenze +content#:#cont_update_verification#:#Modifica verifica content#:#cont_upload_dir#:#Carica directory -content#:#cont_upload_file#:#Upload File###29 07 2022 new variable -content#:#cont_upload_multi_srt_howto#:#This feature allows you to upload multiple subtitle (srt) files in a zip file for all media objects of the learning module. Your .zip file should contain all .srt files on the top level (no subdirectories). The file names should end with "_&lt;lang code&gt;.srt" where lang code is e.g. "en", "it", "de". The rest of the filename should correspond to the name of the video file, e.g. "my_video.mp4" -> "my_video_en.srt". +content#:#cont_upload_file#:#Upload File +content#:#cont_upload_multi_srt_howto#:#Questa funzione permette di caricare più sottotitoli (srt) in uno zip file per tutti i video del modulo ILIAS. Lo zip file deve contenere tutti i file SRT su un solo livello (no subdirectories). Il nome dei file deve finire con "_&lt;lang code&gt;.srt" dove il lang code è per esempio "en", "it", "de". Il resto del nomefile deve corrispondere al nome del video, per esempio "my_video.mp4" -> "my_video_en.srt". content#:#cont_uploaded_file#:#File esistente -content#:#cont_url_info#:#URL of a media file or Youtube URL.###29 07 2022 new variable +content#:#cont_url_info#:#URL of a media file or Youtube URL. content#:#cont_usage#:#Uso content#:#cont_use_same_resource_as_above#:#Usa la stessa risorsa vista sopra content#:#cont_user#:#Utente @@ -7241,21 +7228,21 @@ content#:#cont_user_blocked2#:#Un utente ha esaurito i tentativi di risposta nel content#:#cont_user_blocked3#:#Apri il modello di apprendimento nella modalità di modifica e accedi alla schermata: content#:#cont_user_search_did_not_match#:#La ricerca non corrisponde a nessun utente. content#:#cont_users_answered#:#Risposta degli utenti -content#:#cont_users_have_mob_in_clip1#:#Questo oggetto & +content#:#cont_users_have_mob_in_clip1#:#Questo oggetto multimediale è negli Appunti di content#:#cont_users_have_mob_in_clip2#:#utente(i). content#:#cont_validate_file#:#Valida file -content#:#cont_verification_object#:#Verification +content#:#cont_verification_object#:#Verifica content#:#cont_verification_placeh#:#Clicca e modifica per inserire il certificato content#:#cont_verification_placehl#:#Segnaposto certificato content#:#cont_version#:#Versione content#:#cont_versions#:#Versioni content#:#cont_whole_glossary#:#Glossario completo content#:#cont_width#:#Larghezza -content#:#cont_width_height_info#:#The size of the display can be set at a fixed size. 950 pixels for Width and 650 pixels for Height are proven values for setting the size. If no entry is made the browser will determine the size of the display. +content#:#cont_width_height_info#:#La dimensione del display può essere impostata su una dimensione fissa. 950 pixel per Larghezza e 650 pixel per Altezza sono valori comprovati per l'impostazione delle dimensioni. Se non viene effettuata alcuna immissione, il browser determinerà le dimensioni del display. content#:#cont_wiki_link_dialog#:#Link alla pagina Wiki (Dialogo) content#:#cont_wiki_page#:#Pagina Wiki content#:#cont_wiki_page_link#:#Link pagina Wiki -content#:#cont_wrong_answers#:#Wrong Answers +content#:#cont_wrong_answers#:#Risposte sbagliate content#:#cont_wrong_answers_single#:#Scelta sbagliata. content#:#cont_xml_base#:#xml:base content#:#cont_zip_file_invalid#:#File di import non valido.<br>Il file non contiene il file & @@ -7263,7 +7250,7 @@ content#:#content_no_edit_lock#:#La pagina è attualmente bloccata da un altro u content#:#content_page_history#:#Storia della pagina content#:#content_plugin_not_activated#:#Il plugin dell'elemento di contenuto della pagina non è attualmente attivato. content#:#content_some_export_ids_multiple_times#:#Alcuni ID di esportazione vengono utilizzati più volte. Questo porterà a pagine mancanti nell'esportazione. -content#:#content_until#:#At least locked until: +content#:#content_until#:#Almeno bloccato fino a: content#:#copied_to_clipboard#:#Oggetti copiati negli appunti. content#:#dgl_pagebreak#:#Interruzione di pagina content#:#glo_add_new_term#:#Aggiungi nuovo termine @@ -7273,7 +7260,7 @@ content#:#glo_full_definitions#:#Definizioni complete content#:#glo_full_definitions_info#:#I termini e le definizioni sono visualizzati nella vista principale. content#:#glo_hide_taxonomy#:#Nascondi tassonomia content#:#glo_list_usages#:#Elenco usi -content#:#glo_mode_normal_info#:#Only terms created within this glossar will be included. +content#:#glo_mode_normal_info#:#Saranno inclusi solo i termini creati all'interno di questo glossario. content#:#glo_presentation_mode#:#Modo di presentazione content#:#glo_presentation_view#:#Vista di presentazione content#:#glo_quick_navigation#:#Navigazione veloce @@ -7292,14 +7279,14 @@ content#:#htlm_import#:#Importa HTML Learning Module content#:#import_sco_object#:#Importa SCO content#:#info_stop_offline_mode_sure#:#Nota: I progressi di apprendimento raggiunti in modalità offline sono andati persi. Sei sicuro? content#:#lm_activate_rating#:#Attiva valutazione per nuove pagine -content#:#lm_editing_view#:#Editing View###07 02 2020 new variable -content#:#lm_import#:#Import ILIAS Learning Module###29 07 2022 new variable +content#:#lm_editing_view#:#Vista Editing +content#:#lm_import#:#Import ILIAS Learning Module content#:#lm_menu_edit_entry#:#Modifica voce del menu content#:#lm_menu_entry_target#:#Obiettivo content#:#lm_menu_entry_title#:#Titolo content#:#lm_menu_new_entry#:#Crea una nuova voce nel menu content#:#lm_menu_select_internal_object#:#Scegli un oggetto interno >> -content#:#lm_menu_select_object_to_add#:#Per favore, seleziona l& +content#:#lm_menu_select_object_to_add#:#Seleziona l'oggetto che desideri aggiungere al menu content#:#lm_no_download_files#:#Attualmente non ci sono file disponibile per il download. content#:#lm_only_one_download_per_type#:#Si prega di notare che è possibile creare un solo file per tipo (XLM, HTML, SCORM) pubblico accessibile. content#:#lm_rate_page#:#Valuta pagina @@ -7308,9 +7295,9 @@ content#:#mep_folder_created#:#Aggiunto nuovo folder. content#:#msg_entry_added#:#Voce aggiunta la menu content#:#msg_entry_removed#:#Voce tolta dal menu content#:#msg_entry_updated#:#Voce del menu aggiornata -content#:#msg_no_page_access#:#You do not have the permission to access this page.###07 02 2020 new variable -content#:#msg_page_no_public_access#:#La pagina che hai richiesto non & -content#:#msg_page_not_public#:#La pagina non & +content#:#msg_no_page_access#:#Non sei autorizzato ad accedere a questa pagina. +content#:#msg_page_no_public_access#:#La pagina che hai chiamato non è disponibile nell'area pubblica. Solo gli utenti registrati possono visualizzare questa pagina. Effettua prima il login per accedere a questa pagina. +content#:#msg_page_not_public#:#La pagina non è pubblica content#:#offline_mode_manager#:#Utilizzo Offline content#:#offline_mode_users#:#Utenti in modalità offline content#:#offline_mode_users_info#:#Gli utenti possono essere presi manualmente dalla modalità offline e dopo aver fatto in modo questi utenti possono nuovamente utilizzare la versione online del modulo di apprendimento. Questo ha senso se per esempio il computer con il modello di apprendimento è stato rubato. @@ -7337,8 +7324,8 @@ content#:#scplayer_previous#:#Precedente content#:#scplayer_showtree#:#Mostra Albero content#:#scplayer_start#:#Avvio content#:#scplayer_suspendall#:#Sospendi tutto -content#:#selectFooter#:#Scegli come Piè di Pagina -content#:#selectHeader#:#Scegli come Intestazione +content#:#selectFooter#:#Scegli come Footer +content#:#selectHeader#:#Scegli come Header content#:#select_a_file#:#Per favore seleziona un file. content#:#seq_close#:#Chiudere la finestra del player. content#:#seq_endsession#:#La sessione del corso è terminata. @@ -7346,67 +7333,67 @@ content#:#seq_error#:#Errore interno nel sequencer. content#:#seq_toc#:#Scegliere un'attività dalla Tabella Contenuti - TOC sulla sinistra, per iniziare il corso. content#:#set_public_mode#:#Imposta in modalita' di accesso pubblico content#:#st#:#Capitolo -content#:#start_lm#:#Launch Learning Module###26 08 2024 new variable -content#:#text_repr#:#Rappresentazione testuale -content#:#text_repr_info#:#Used for image "alt" attribute. -copa#:#copa_activation_online_info#:#Set the Content Page online to make it visible and available to other users. If not, only administrators will have access to it.###29 07 2022 new variable -copa#:#copa_add#:#Add Content Page -copa#:#copa_btn_lp_toggle_state_completed#:#Set Not Completed -copa#:#copa_btn_lp_toggle_state_not_completed#:#Set Completed -copa#:#copa_copy#:#Copy Content Page -copa#:#copa_edit#:#Edit Content Page -copa#:#copa_import#:#Import Content Page -copa#:#copa_new#:#Create Content Page -copa#:#copa_page_type_copa#:#Content Page###29 07 2022 new variable -copa#:#copa_prop_reading_time#:#Reading Time###29 07 2022 new variable -copa#:#copa_value_reading_time_f_p#:#%s Minutes###29 07 2022 new variable -copa#:#copa_value_reading_time_f_s#:#%s Minute###29 07 2022 new variable -copa#:#obj_copa_duplicate#:#Duplicate Content Page -copg#:#copg_active_to_small#:#This date must be higher than the starting date.###26 08 2024 new variable -copg#:#copg_allow_html#:#Enable HTML/Javascript###29 07 2022 new variable -copg#:#copg_allow_html_info#:#User may use HTML or Javascript page content. This may lead to security issues. Do not activate, if features can be used by users which you consider not being trustworthy. The support to add HTML content this way may be discontinued in a future version.###29 07 2022 new variable -copg#:#copg_an_error_occured#:#An error occured.###29 07 2022 new variable +content#:#start_lm#:#Launch Learning Module###30 04 2024 new variable +content#:#text_repr#:#Testo alternativo +content#:#text_repr_info#:#Verrà usato quando l'immagine non verrà mostrata +copa#:#copa_activation_online_info#:#Set the Content Page online to make it visible and available to other users. If not, only administrators will have access to it.###31 03 2023 new variable +copa#:#copa_add#:#Aggiungi pagina di contenuti +copa#:#copa_btn_lp_toggle_state_completed#:#Set non completato +copa#:#copa_btn_lp_toggle_state_not_completed#:#Imposta completata +copa#:#copa_copy#:#Copia la pagina del contenuto +copa#:#copa_edit#:#Modifica la pagina del contenuto +copa#:#copa_import#:#Importa pagina di contenuti +copa#:#copa_new#:#Crea pagina di contenuti +copa#:#copa_page_type_copa#:#Pagina dei contenuti +copa#:#copa_prop_reading_time#:#Reading Time +copa#:#copa_value_reading_time_f_p#:#%s Minutes +copa#:#copa_value_reading_time_f_s#:#%s Minute +copa#:#obj_copa_duplicate#:#Pagina di contenuti duplicati +copg#:#copg_active_to_small#:#This date must be higher than the starting date.###14 02 2024 new variable +copg#:#copg_allow_html#:#Abilita HTML / Javascript +copg#:#copg_allow_html_info#:#L'utente può utilizzare il contenuto della pagina HTML o Javascript. Ciò può causare problemi di sicurezza. Non attivare, se le funzionalità possono essere utilizzate dagli utenti che ritieni non attendibili. Il supporto per aggiungere contenuto HTML in questo modo potrebbe essere sospeso in una versione futura. +copg#:#copg_an_error_occured#:#An error occured. copg#:#copg_confirm_el_deletion#:#Vuoi davvero eliminare gli elementi selezionati? -copg#:#copg_cron_days#:#Delete pages older than###29 07 2022 new variable -copg#:#copg_cron_days_info#:#Page history entries older than this period will be deleted.###29 07 2022 new variable -copg#:#copg_cron_keep_entries#:#Keep Minimum###29 07 2022 new variable -copg#:#copg_cron_keep_entries_info#:#This number is the minimum of entries that will be kept, even if they are older than the deletion period.###29 07 2022 new variable -copg#:#copg_days#:#Days###29 07 2022 new variable -copg#:#copg_details#:#Details###29 07 2022 new variable -copg#:#copg_edit_iframe_title#:#Text Editing of Page Editor###26 08 2024 new variable -copg#:#copg_entries#:#Entries###29 07 2022 new variable -copg#:#copg_error#:#Error###29 07 2022 new variable -copg#:#copg_error_occured_modal#:#An error occured while processing the page. Hit "Reload Page" to return to the previously saved state.###29 07 2022 new variable -copg#:#copg_est_reading_time#:#Estimated Reading Time###29 07 2022 new variable -copg#:#copg_history_cleanup_cron#:#Page Editor History Cleanup###29 07 2022 new variable -copg#:#copg_history_cleanup_cron_info#:#Removes older entries from the page history.###29 07 2022 new variable -copg#:#copg_list_item_style#:#List Item###26 08 2024 new variable -copg#:#copg_list_style#:#List###26 08 2024 new variable -copg#:#copg_list_styles#:#List Formats###26 08 2024 new variable -copg#:#copg_more_character_formats#:#More Styles for Characters###26 08 2024 new variable -copg#:#copg_obj_types#:#Object Types###26 08 2024 new variable -copg#:#copg_page_element_not_found#:#Page element not found.###29 07 2022 new variable -copg#:#copg_page_type_stys#:#Layout Page###29 07 2022 new variable -copg#:#copg_pages#:#Pages###29 10 2025 new variable -copg#:#copg_par_format_selection#:#Paragraph Format Selection###26 08 2024 new variable -copg#:#copg_pc_mob_does_not_exist#:#This media object does not exist.###26 08 2024 new variable -copg#:#copg_plugin#:#Plugin###29 10 2025 new variable -copg#:#copg_plugin_not_avail#:#Plugin %s not available.###29 10 2025 new variable +copg#:#copg_cron_days#:#Delete pages older than###31 03 2023 new variable +copg#:#copg_cron_days_info#:#Page history entries older than this period will be deleted.###31 03 2023 new variable +copg#:#copg_cron_keep_entries#:#Keep Minimum###31 03 2023 new variable +copg#:#copg_cron_keep_entries_info#:#This number is the minimum of entries that will be kept, even if they are older than the deletion period.###31 03 2023 new variable +copg#:#copg_days#:#Days###31 03 2023 new variable +copg#:#copg_details#:#Details +copg#:#copg_edit_iframe_title#:#Text Editing of Page Editor###17 01 2024 new variable +copg#:#copg_entries#:#Entries###31 03 2023 new variable +copg#:#copg_error#:#Error +copg#:#copg_error_occured_modal#:#An error occured while processing the page. Hit "Reload Page" to return to the previously saved state.###29 06 2022 new variable +copg#:#copg_est_reading_time#:#Estimated Reading Time###31 03 2023 new variable +copg#:#copg_history_cleanup_cron#:#Page Editor History Cleanup###31 03 2023 new variable +copg#:#copg_history_cleanup_cron_info#:#Removes older entries from the page history.###31 03 2023 new variable +copg#:#copg_list_item_style#:#List Item###30 04 2024 new variable +copg#:#copg_list_style#:#List###30 04 2024 new variable +copg#:#copg_list_styles#:#List Formats###30 04 2024 new variable +copg#:#copg_more_character_formats#:#More Styles for Characters###17 01 2024 new variable +copg#:#copg_obj_types#:#Object Types###17 05 2024 new variable +copg#:#copg_page_element_not_found#:#Page element not found. +copg#:#copg_page_type_stys#:#Pagina layout +copg#:#copg_pages#:#Pages###28 11 2025 new variable +copg#:#copg_par_format_selection#:#Paragraph Format Selection###17 01 2024 new variable +copg#:#copg_pc_mob_does_not_exist#:#This media object does not exist.###28 11 2023 new variable +copg#:#copg_plugin#:#Plugin###23 09 2025 new variable +copg#:#copg_plugin_not_avail#:#Plugin %s not available.###10 12 2024 new variable copg#:#copg_questions_not_supported_here#:#Le domande non sono supportate in questo contesto. -copg#:#copg_reload_page#:#Reload Page###29 07 2022 new variable -copg#:#copg_remove_formats#:#Remove Formatting###26 08 2024 new variable +copg#:#copg_reload_page#:#Reload Page###29 06 2022 new variable +copg#:#copg_remove_formats#:#Remove Formatting###17 01 2024 new variable copg#:#copg_sec_link_info#:#Se si imposta un link sul tutta la sezione, bisogna assicurarsi che nessun altro elemento interattivo sia incluso nella sezione. Altrimenti il loro comportamento potrebbe essere errato. copg#:#copg_snippet_cannot_be_edited#:#Questo è un frammento di contenuto predefinito e non può essere modificato qui. -copg#:#copg_templates#:#Templates###29 10 2025 new variable -copg#:#copg_unsupported_media_type#:#This media object has an unsupported media type.###26 08 2024 new variable -copg#:#copg_x_minutes#:#%s minute(s)###29 07 2022 new variable -cpad#:#cpad_reading_time_status#:#Reading Time###29 07 2022 new variable -cpad#:#cpad_reading_time_status_desc#:#If enabled, the estimated reading time for content page objects will be determined and displayed.###29 07 2022 new variable +copg#:#copg_templates#:#Templates###28 11 2025 new variable +copg#:#copg_unsupported_media_type#:#This media object has an unsupported media type.###14 02 2024 new variable +copg#:#copg_x_minutes#:#%s minute(s)###31 03 2023 new variable +cpad#:#cpad_reading_time_status#:#Reading Time +cpad#:#cpad_reading_time_status_desc#:#If enabled, the estimated reading time for content page objects will be determined and displayed. cptch#:#cptch_freetype_support_needed#:#Per utilizzare questa funzione è necessario abilitare il supporto FreeType nel vostro PHP. cptch#:#cptch_wrong_input#:#Input sbagliato -cron#:#cro_job_rc_job_auto_deactivation_time_limit#:#PROBABLY CRASHED -cron#:#cro_job_rc_job_manual_reset#:#RESET MANUALLY -cron#:#cro_job_rc_job_no_result#:#Cron job did not return a proper result +cron#:#cro_job_rc_job_auto_deactivation_time_limit#:#PROBABILE CRASH +cron#:#cro_job_rc_job_manual_reset#:#RESET MANUALE +cron#:#cro_job_rc_job_no_result#:#Cron job non ha restituito un risultato corretto cron#:#cron_action_activate#:#Attiva cron#:#cron_action_activate_success#:#Cron job attivato. cron#:#cron_action_activate_sure#:#Sei sicuro di voler attivare il cron job "%s"? @@ -7428,7 +7415,7 @@ cron#:#cron_action_run_sure#:#Se sicuro di voler eseguire il cron job "%s"? cron#:#cron_changed_by_crontab#:#SISTEMA cron#:#cron_component#:#Componente cron#:#cron_job_id#:#Id -cron#:#cron_jobs_with_required_intervention#:#The following jobs may require an intervention.###29 10 2025 new variable +cron#:#cron_jobs_with_required_intervention#:#The following jobs may require an intervention.###28 11 2025 new variable cron#:#cron_last_run#:#Ultimo funzionamento cron#:#cron_no_executable_job_selected#:#Si prega di selezionare almeno un cron job eseguibile. cron#:#cron_result#:#Risultato @@ -7463,8 +7450,8 @@ crs#:#crs_accept_subscriber_body#:#Sei stato iscritto a questo corso. crs#:#crs_access#:#Accesso crs#:#crs_activate_notification#:#Attiva notifica crs#:#crs_activation#:#Attivazione -crs#:#crs_activation_limited_visibility_info#:#If chosen, the course is visible even outside of the given availability. -crs#:#crs_activation_online_info#:#If offline, only course administrators and tutors can see and edit the course. +crs#:#crs_activation_limited_visibility_info#:#Se scelto, il corso è visibile anche al di fuori della data disponibilità. +crs#:#crs_activation_online_info#:#Se offline, solo gli amministratori e i tutor dei corsi possono visualizzare e modificare il corso. crs#:#crs_add_archive_html#:#Crea archivio HTML crs#:#crs_add_archive_xml#:#Crea archivio XML crs#:#crs_add_grouping#:#Crea un gruppo di corsi @@ -7484,15 +7471,15 @@ crs#:#crs_admin#:#Amministratore crs#:#crs_administrators#:#Amministratori crs#:#crs_admission_link_failure_availability#:#Impossibile registrarsi: Il corso non è online. crs#:#crs_admission_link_failure_invalid_code#:#Impossibile registrarsi: Il link non è valido. -crs#:#crs_admission_link_failure_membership_limited#:#Can't registrate: Course membership is limited. +crs#:#crs_admission_link_failure_membership_limited#:#Impossibile registrarsi: l'iscrizione al corso è limitata. crs#:#crs_admission_link_failure_offline#:#Impossibile registrarsi: Il corso è offline. -crs#:#crs_admission_link_failure_registration_period#:#Can't registrate: Course is out of registration period. -crs#:#crs_admission_link_success_registration#:#Successfully registrated to course "%s". +crs#:#crs_admission_link_failure_registration_period#:#Impossibile iscriversi: il corso non è in corso di registrazione. +crs#:#crs_admission_link_success_registration#:#Registrato correttamente al corso "%s". crs#:#crs_agree#:#Accettazione crs#:#crs_agreement_header#:#Accordo con l’utente crs#:#crs_agreement_required#:#Devi accettare questo user agreement se vuoi registrarti a questo corso. crs#:#crs_at_least_one_admin#:#Deve esserci almeno un amministratore del corso. -crs#:#crs_auto_notification#:#Notification For New Member +crs#:#crs_auto_notification#:#Notifica per il nuovo membro crs#:#crs_auto_notification_info#:#I nuovi membri riceveranno una mail dopo essere stati aggiunti al corso. crs#:#crs_awrn_current_course#:#Corso attuale crs#:#crs_awrn_current_course_info#:#Se l'utente accede a un corso nel repository, sono elencati tutti i membri del corso. @@ -7505,10 +7492,10 @@ crs#:#crs_breadcrumb_crs_only#:#Start with Course crs#:#crs_breadcrumb_full_path#:#Full Path crs#:#crs_cancel_subscr_request#:#Cancella richiesta di membership crs#:#crs_cancel_subscription#:#Cancellato dal corso "%s" -crs#:#crs_cancel_subscription_body#:#Un utente si & -crs#:#crs_cancel_subscription_body2#:#Ci potrebbero essere altri membri in attesa per questo corso.\nDovresti verificare la lista d'attesa.\nPer vedere i membri di questo corso clicca qui: -crs#:#crs_cancellation_end#:#Cancellation Limit -crs#:#crs_cancellation_end_info#:#From this date on particiants cannot unsubscribe anymore. +crs#:#crs_cancel_subscription_body#:#%s ha annullato la sua iscrizione al corso "%s". +crs#:#crs_cancel_subscription_body2#:#Ci potrebbero essere altri membri in attesa per questo corso. Dovresti verificare la lista d'attesa. Per vedere i membri di questo corso clicca qui: +crs#:#crs_cancellation_end#:#Limite di cancellazione +crs#:#crs_cancellation_end_info#:#Da questa data in poi i partecipanti non potranno più annullare l'iscrizione. crs#:#crs_cancellation_end_rbac_info#:#La scadenza della cancellazione è stata soddisfatta su %s, non è più possibile una cancellazione. crs#:#crs_cannot_find_role#:#Non è possibile trovare questo ruolo. crs#:#crs_cdf_edit_member#:#Modifica dati utente relativi al corso @@ -7524,18 +7511,18 @@ crs#:#crs_contact_responsibility#:#Responsibilità crs#:#crs_content#:#Contenuto del corso crs#:#crs_copy#:#Copia corso crs#:#crs_course_group_notification_link#:#Link: -crs#:#crs_course_period_not_valid#:#The course period is not valid. -crs#:#crs_course_status_of_users#:#Passed Status of Users +crs#:#crs_course_period_not_valid#:#Il periodo del corso non è valido. +crs#:#crs_course_status_of_users#:#Convalida dell'utente crs#:#crs_create_date#:#Crea data crs#:#crs_custom_user_fields#:#Dati utente relativi al corso -crs#:#crs_custom_user_fields_infobox#:#Create additional data fields for course members to fill in when joining. You can show this information as an additional column in the "Members" tab.###26 08 2024 new variable -crs#:#crs_custom_user_fields_table_title#:#Relevant User Data of This Course###26 08 2024 new variable +crs#:#crs_custom_user_fields_infobox#:#Create additional data fields for course members to fill in when joining. You can show this information as an additional column in the "Members" tab.###30 04 2024 new variable +crs#:#crs_custom_user_fields_table_title#:#Relevant User Data of This Course###18 06 2024 new variable crs#:#crs_dates#:#Scadenze crs#:#crs_deactivate_notification#:#Disattiva notifica crs#:#crs_delete_objectve_sure#:#Sei sicuro di voler eliminare i seguenti obiettivi? crs#:#crs_details#:#Dettagli del corso crs#:#crs_dismiss_member#:#Iscritti al corso "%s" -crs#:#crs_dismiss_member_body#:#Il periodo di iscrizione è terminato +crs#:#crs_dismiss_member_body#:#la tua iscrizione è stata chiusa nel corso "%s". crs#:#crs_edit_lo_introduction#:#Modifica introduzione crs#:#crs_edit_timings#:#Edita Tempi crs#:#crs_enable_map#:#Attiva mappa dei corsi @@ -7552,7 +7539,7 @@ crs#:#crs_grouping_delete_sure#:#Vuoi veramente eliminare il seguente gruppo di crs#:#crs_grouping_deleted#:#Rimossi piani formativi. crs#:#crs_grouping_select_one#:#Scegli il gruppo di corsi. crs#:#crs_groupings#:#Gruppi di corsi -crs#:#crs_groups_nr#:#Number of Groups +crs#:#crs_groups_nr#:#Numero di gruppi crs#:#crs_grp_added_grouping#:#Aggiunta nuova limitazione all'utente. crs#:#crs_grp_already_assigned#:#Sei giàmembro di questo gruppo di corsi. crs#:#crs_grp_assign_crs#:#Assegna corso @@ -7571,7 +7558,7 @@ crs#:#crs_import#:#Importa corso crs#:#crs_important_info#:#Informazioni importanti crs#:#crs_info_agree#:#Consento la visibilità di questi tipi di dati da parte degli amministratori del corso. crs#:#crs_info_agreement#:#I seguenti tipi di dati sono visibili agli amministratori del corso: -crs#:#crs_info_download#:#Files per Download +crs#:#crs_info_download#:#File per download crs#:#crs_info_reg#:#Ammissione crs#:#crs_info_reg_confirmation#:#L'iscrizione a questo corso è vincolata all'accettazione dell'amministratore. Riceverai un messaggio quando l'iscrizione verrà confermata. crs#:#crs_info_reg_deactivated#:#Non è possibile iscriversi @@ -7579,33 +7566,33 @@ crs#:#crs_info_reg_direct#:#Puoi iscriverti direttamente a questo corso. crs#:#crs_info_reg_password#:#Per l'iscrizione occorre una password valida. crs#:#crs_info_settings#:#Informazioni sul corso crs#:#crs_info_start#:#Per favore lavora con tutti gli elementi del corso iniziato evidenziati. <br />Una volta che avrai terminato tutti gli oggetti marcati di rosso, gli elementi del nuovo corso saranno disponibili. -crs#:#crs_intro_course_group_notification_for#:#This is the daily news digest for: %s +crs#:#crs_intro_course_group_notification_for#:#Questo è il riassunto giornaliero delle notizie per: %s crs#:#crs_intro_course_group_notification_index#:#Ci sono notizie per il periodo di %1$s a %2$s per i seguenti corsi e gruppi: crs#:#crs_item_presetting_info#:#Scegli questa opzione per suggerire agli utenti tempi di esecuzione crs#:#crs_join_request#:#Invia -crs#:#crs_lhist_objective_completed#:#Mastered $3$ in $1$. +crs#:#crs_lhist_objective_completed#:#Masterizzato $3$ in $1$. crs#:#crs_lim_assigned#:#gia assegnato a corsi "%s". crs#:#crs_link_hide_next_sessions#:#Nascondi prossime sessioni crs#:#crs_link_hide_prev_sessions#:#Nascondi sessioni precedenti -crs#:#crs_link_show_all_next_sessions#:#Show upcoming all upcoming sessions +crs#:#crs_link_show_all_next_sessions#:#Mostra le prossime sessioni in arrivo crs#:#crs_link_show_all_prev_sessions#:#Mostra tutte le sessioni precedenti -crs#:#crs_lobj_pm_min_goal#:#Required Score -crs#:#crs_lobj_pm_score#:#Your Result -crs#:#crs_loc_btn_new_assignment#:#Neue Testzuordnung +crs#:#crs_lobj_pm_min_goal#:#Punteggio richiesto +crs#:#crs_lobj_pm_score#:#Il tuo risultato +crs#:#crs_loc_btn_new_assignment#:#Nuovo compito di prova crs#:#crs_loc_confirm_delete_tst#:#Vuoi davvero togliere l’assegnazione del test di questo corso orientato all’obiettivo dell’apprendimento? -crs#:#crs_loc_delete_assignment#:#Delete Assignment +crs#:#crs_loc_delete_assignment#:#Elimina assegnazione crs#:#crs_loc_err_no_active_it#:#Obiettivi di apprendimento senza test iniziale crs#:#crs_loc_err_no_active_lo#:#Nessun obiettivo dell’apprendimento attivo -crs#:#crs_loc_err_no_active_mat#:#Learning Objectives without Materials +crs#:#crs_loc_err_no_active_mat#:#Obiettivi di apprendimento senza materiali crs#:#crs_loc_err_no_active_qst#:#Obiettivi senza domande crs#:#crs_loc_err_no_active_qt#:#Obiettivi di apprendimento senza test di qualificazione crs#:#crs_loc_err_nr_tries_exceeded#:#Il numero di passaggi per obiettivo supera il numero possibile di passaggi del test di qualificazione. crs#:#crs_loc_err_stat_no_it#:#Nessun test iniziale disponibile crs#:#crs_loc_err_stat_no_materials#:#Nessun materiale del corso disponibile -crs#:#crs_loc_err_stat_no_qt#:#No Qualifying Test available +crs#:#crs_loc_err_stat_no_qt#:#Nessun test di qualificazione disponibile crs#:#crs_loc_err_stat_tst_offline#:#Non tutti i test sono online. crs#:#crs_loc_form_assign#:#Utilizza test esistente -crs#:#crs_loc_form_assign_initial_info#:#Select a test from this course to serve as Placement Test +crs#:#crs_loc_form_assign_initial_info#:#Seleziona un test da questo corso per fungere da test di posizionamento crs#:#crs_loc_form_assign_it#:#Assegnazione del test crs#:#crs_loc_form_assign_qualified_info#:#-- crs#:#crs_loc_form_available_tsts#:#Test disponibili @@ -7613,99 +7600,99 @@ crs#:#crs_loc_form_create_objectives#:#Crea obiettivi dell’apprendimento crs#:#crs_loc_form_random_limits_it#:#Definisci le domande del test iniziale crs#:#crs_loc_form_random_limits_qt#:#Definisci le domande del test di qualificazione crs#:#crs_loc_form_tst_new#:#Crea nuovo test -crs#:#crs_loc_form_tst_new_initial_info#:#Create a new test to serve as Placement Test +crs#:#crs_loc_form_tst_new_initial_info#:#Crea un nuovo test da utilizzare come test di posizionamento crs#:#crs_loc_form_tst_new_qualified_info#:#-- crs#:#crs_loc_itest_info#:#Test iniziale crs#:#crs_loc_itst_for_objective#:#Test iniziale "%1$s" crs#:#crs_loc_learning_objective#:#Obiettivo dell’apprendimento -crs#:#crs_loc_mem_show_res#:#Testergebnisse anzeigen +crs#:#crs_loc_mem_show_res#:#Visualizza i risultati del test crs#:#crs_loc_num_qst#:#Numero delle domande -crs#:#crs_loc_objective_passed_confirmation#:#Sie haben das Lernziel bereits bestanden. Ein erneutes Starten des Tests setzt die Ergebnisse zurück. Wollen Sie den Test erneut starten? -crs#:#crs_loc_objectives_passed_confirmation#:#Sie haben bereits alle Lernziel bestanden. Ein erneutes Starten des Tests setzt die Ergebnisse zurück. Wollen Sie den Test erneut starten? +crs#:#crs_loc_objective_passed_confirmation#:#Hai già superato l'obiettivo di apprendimento. Riavviare il test ripristinerà i risultati. Vuoi ricominciare il test? +crs#:#crs_loc_objectives_passed_confirmation#:#Hai già superato tutti gli obiettivi di apprendimento. Riavviare il test ripristinerà i risultati. Vuoi ricominciare il test? crs#:#crs_loc_passes_info#:#Numero massimo dei passaggi del test crs#:#crs_loc_passes_left#:#Rimanente numero massimo dei passaggi del test -crs#:#crs_loc_passes_reached#:#No further test pases possible +crs#:#crs_loc_passes_reached#:#Non sono possibili ulteriori test crs#:#crs_loc_perc#:#Percentuale di punti richiesta -crs#:#crs_loc_progress_do_qualifying#:#Please take the qualifying test. +crs#:#crs_loc_progress_do_qualifying#:#Si prega di sostenere il test di qualificazione. crs#:#crs_loc_progress_do_qualifying_again#:#Si prega di lavorare nuovamente attraverso i materiali didattici. crs#:#crs_loc_progress_no_result_do_initial#:#Si prega di accettare il test iniziale. crs#:#crs_loc_progress_no_result_no_initial#:#Si prega di lavorare attraverso i seguenti materiali didattici e poi accettare il test di qualificazione. crs#:#crs_loc_progress_objective_complete#:#Hai completato l’obiettivo dell’apprendimento. crs#:#crs_loc_progress_result_itest#:#Risultato del test iniziale crs#:#crs_loc_progress_result_qtest#:#Risultato -crs#:#crs_loc_qst_resume_tst_itest#:#Einstiegstests zu verschiedenen Lernzielen dürfen nicht parallel gestartet werden. Sie haben schon einen Einstiegstest zu einem Lernziel gestartet. Entweder setzen Sie diesen alten Test fort oder Sie starten einen neuen Test. -crs#:#crs_loc_qst_resume_tst_qtest#:#Qualifizierende Tests zu verschiedenen Lernzielen dürfen nicht parallel gestartet werden. Sie haben schon einen qualifizierenden Test zu einem Lernziel gestartet. Entweder setzen Sie diesen alten Test fort oder Sie starten einen neuen Test. -crs#:#crs_loc_qtest_info#:#Qualified Test +crs#:#crs_loc_qst_resume_tst_itest#:#I test d'ingresso per diversi obiettivi di apprendimento non devono essere avviati in parallelo. Hai già iniziato un test d'ingresso per un obiettivo di apprendimento. Continua questo vecchio test o avvia un nuovo test. +crs#:#crs_loc_qst_resume_tst_qtest#:#I test di qualificazione per diversi obiettivi di apprendimento non devono essere avviati in parallelo. Hai già iniziato un test di qualificazione per un obiettivo di apprendimento. Continua questo vecchio test o avvia un nuovo test. +crs#:#crs_loc_qtest_info#:#Test qualificato crs#:#crs_loc_qtst_for_objective#:#Test di qualificazione "%1$s" crs#:#crs_loc_rand_assign_qpl#:#Modulo di assegnazione del gruppo di domande crs#:#crs_loc_rand_qpl#:#Gruppi di domande disponibili -crs#:#crs_loc_settings_err_qstart#:#Die Option "Abschlusstest als Startobjekt" wurde deaktiviert, da sie nur für Kurse ohne Einstiegstest verwendet werden kann. -crs#:#crs_loc_settings_it_start_object#:#Einstiegstest ist Startobjekt -crs#:#crs_loc_settings_it_type#:#Einstiegstest -crs#:#crs_loc_settings_itest_tbl#:#Settings for the Initial Test -crs#:#crs_loc_settings_passed_mode#:#Bestandene Lernziele -crs#:#crs_loc_settings_passed_mode_hide#:#Testfragen zu bestandenen Lernzielen werden ausgeblendet -crs#:#crs_loc_settings_passed_mode_mark#:#Testfragen zu bestandenen Lernzielen werden markiert -crs#:#crs_loc_settings_qt_all#:#Abschlusstest -crs#:#crs_loc_settings_qt_start_object#:#Abschlusstest ist Startobjekt -crs#:#crs_loc_settings_qtest_tbl#:#Settings for the Qualifying Test -crs#:#crs_loc_settings_reset#:#Testergebnisse -crs#:#crs_loc_settings_reset_enable#:#"Testergebnis zurücksetzen" erlauben -crs#:#crs_loc_settings_reset_enable_info#:#Wenn aktiviert, haben alle Benutzer die Möglichkeit, ihre individuellen Testergebnisse zurückzusetzen. -crs#:#crs_loc_settings_tbl#:#Settings for the Learning Objective Oriented Course -crs#:#crs_loc_settings_tbl_it_nq#:#Diagnostische Einstiegstests pro Lernziel -crs#:#crs_loc_settings_tbl_it_q#:#Qualifizierende Einstiegstests pro Lernziel -crs#:#crs_loc_settings_tbl_its_nq_all#:#Diagnostischer Einstiegstest über alle Lernziele -crs#:#crs_loc_settings_tbl_its_q_all#:#Qualifizierender Einstiegstest über alle Lernziele -crs#:#crs_loc_settings_tbl_qt#:#Abschlusstests pro Lernziel -crs#:#crs_loc_settings_tbl_qts_all#:#Abschlusstest über alle Lernziele -crs#:#crs_loc_settings_type_it_none#:#Kein Einstiegstest -crs#:#crs_loc_settings_type_it_none_info#:#No placement test -crs#:#crs_loc_settings_type_it_placement_all#:#Diagnostischer Einstiegstest über alle Lernziele -crs#:#crs_loc_settings_type_it_placement_all_info#:#Placement test on all learning objectives -crs#:#crs_loc_settings_type_it_placement_sel#:#Diagnostischer Einstiegstest pro Lernziel -crs#:#crs_loc_settings_type_it_placement_sel_info#:#Placement test per single learning objective -crs#:#crs_loc_settings_type_it_qualifying_all#:#Qualifizierender Einstiegstest über alle Lernziele -crs#:#crs_loc_settings_type_it_qualifying_all_info#:#Achievement test on all learning objectives -crs#:#crs_loc_settings_type_it_qualifying_sel#:#Qualifizierender Einstiegstest pro Lernziel -crs#:#crs_loc_settings_type_it_qualifying_sel_info#:#Achievement test per sinble learning objective -crs#:#crs_loc_settings_type_q_all#:#Abschlusstest über alle Lernziele -crs#:#crs_loc_settings_type_q_all_info#:#Achievement test on all learning objectives -crs#:#crs_loc_settings_type_q_selected#:#Abschlusstest pro Lernziel -crs#:#crs_loc_settings_type_q_selected_info#:#Achievement test per sinble learning objective +crs#:#crs_loc_settings_err_qstart#:#L'opzione "Test finale come oggetto iniziale" "è stata disattivata perché può essere utilizzata solo per i corsi senza un test iniziale." +crs#:#crs_loc_settings_it_start_object#:#Il test di ingresso è oggetto di avvio +crs#:#crs_loc_settings_it_type#:#test d'ingresso +crs#:#crs_loc_settings_itest_tbl#:#Impostazioni per test iniziale +crs#:#crs_loc_settings_passed_mode#:#Obiettivi di apprendimento superati +crs#:#crs_loc_settings_passed_mode_hide#:#Le domande di prova sugli obiettivi di apprendimento passati sono nascoste +crs#:#crs_loc_settings_passed_mode_mark#:#Le domande di prova per gli obiettivi di apprendimento superati sono contrassegnate +crs#:#crs_loc_settings_qt_all#:#Prova Finale +crs#:#crs_loc_settings_qt_start_object#:#Il test finale è l'oggetto iniziale +crs#:#crs_loc_settings_qtest_tbl#:#Impostazioni per il test d'ingresso +crs#:#crs_loc_settings_reset#:#i risultati dei test +crs#:#crs_loc_settings_reset_enable#:#Consenti "Ripristina risultato del test" +crs#:#crs_loc_settings_reset_enable_info#:#Se attivato, tutti gli utenti hanno la possibilità di ripristinare i risultati dei singoli test. +crs#:#crs_loc_settings_tbl#:#Impostazioni per il corso orientato agli obiettivi di apprendimento +crs#:#crs_loc_settings_tbl_it_nq#:#Test di accesso diagnostico per obiettivo di apprendimento +crs#:#crs_loc_settings_tbl_it_q#:#Test di ammissione qualificati per ciascun obiettivo di apprendimento +crs#:#crs_loc_settings_tbl_its_nq_all#:#Test di accesso diagnostico per obiettivo di apprendimento +crs#:#crs_loc_settings_tbl_its_q_all#:#Test d'ingresso idoneo per tutti gli obiettivi di apprendimento +crs#:#crs_loc_settings_tbl_qt#:#Test finali per obiettivo di apprendimento +crs#:#crs_loc_settings_tbl_qts_all#:#Test finale di tutti gli obiettivi di apprendimento +crs#:#crs_loc_settings_type_it_none#:#Nessun test d'ingresso +crs#:#crs_loc_settings_type_it_none_info#:#Nessun test di posizionamento +crs#:#crs_loc_settings_type_it_placement_all#:#Test di accesso diagnostico per obiettivo di apprendimento +crs#:#crs_loc_settings_type_it_placement_all_info#:#Test di posizionamento su tutti gli obiettivi di apprendimento +crs#:#crs_loc_settings_type_it_placement_sel#:#Test di accesso diagnostico per obiettivo di apprendimento +crs#:#crs_loc_settings_type_it_placement_sel_info#:#Test di posizionamento per singolo obiettivo di apprendimento +crs#:#crs_loc_settings_type_it_qualifying_all#:#Test d'ingresso idoneo per tutti gli obiettivi di apprendimento +crs#:#crs_loc_settings_type_it_qualifying_all_info#:#Test di conseguimento su tutti gli obiettivi di apprendimento +crs#:#crs_loc_settings_type_it_qualifying_sel#:#Test d'ingresso idoneo per ciascun obiettivo di apprendimento +crs#:#crs_loc_settings_type_it_qualifying_sel_info#:#Test di raggiungimento per singolo obiettivo di apprendimento +crs#:#crs_loc_settings_type_q_all#:#Test finale di tutti gli obiettivi di apprendimento +crs#:#crs_loc_settings_type_q_all_info#:#Test di conseguimento su tutti gli obiettivi di apprendimento +crs#:#crs_loc_settings_type_q_selected#:#Test finale per obiettivo di apprendimento +crs#:#crs_loc_settings_type_q_selected_info#:#Test di raggiungimento per singolo obiettivo di apprendimento crs#:#crs_loc_subtab_creation#:#Crea crs#:#crs_loc_suggested#:#Si prega di lavorare attraverso i seguenti materiali didattici. -crs#:#crs_loc_tab_itest#:#Initial Test -crs#:#crs_loc_tab_itests#:#Einstiegstests -crs#:#crs_loc_tab_materials#:#Materials +crs#:#crs_loc_tab_itest#:#Test iniziale +crs#:#crs_loc_tab_itests#:#test di ingresso +crs#:#crs_loc_tab_materials#:#Materia crs#:#crs_loc_tab_objectives#:#Obiettivi dell’apprendimento -crs#:#crs_loc_tab_qtest#:#Qualifying Test -crs#:#crs_loc_tab_qtests#:#Abschlusstests +crs#:#crs_loc_tab_qtest#:#Test di qualificazione +crs#:#crs_loc_tab_qtests#:#Test Finali crs#:#crs_loc_tab_start#:#Avvia obiettivi -crs#:#crs_loc_tbl_tst_qst_qpl#:#Questions/Questionpools -crs#:#crs_loc_tbl_tst_type#:#Test Mode -crs#:#crs_loc_test_results_of#:#Testergebnisse von: +crs#:#crs_loc_tbl_tst_qst_qpl#:#Domande/Gruppi di domande +crs#:#crs_loc_tbl_tst_type#:#Modalità di prova +crs#:#crs_loc_test_results_of#:#Risultati del test da: crs#:#crs_loc_tst_assignment#:#Assegnazione del test -crs#:#crs_loc_tst_new_run#:#Neuen Testdurchlauf starten +crs#:#crs_loc_tst_new_run#:#Inizia una nuova prova crs#:#crs_loc_tst_num_qst#:#Numero delle domande: crs#:#crs_loc_tst_qpls#:#Gruppi di domande disponibili: -crs#:#crs_loc_tst_resume#:#Testdurchlauf fortsetzen +crs#:#crs_loc_tst_resume#:#Continua l'esecuzione del test crs#:#crs_loc_tst_start#:#Test starten crs#:#crs_loc_tt_info#:#Hai raggiunto %1$d%%. Il test è superato con %2$d%%. crs#:#crs_loc_type_initial_all_info#:#todo crs#:#crs_loc_type_qualified_info#:#todo crs#:#crs_mail_all#:#Per tutti i partecipanti -crs#:#crs_mail_all_info#:#Members, administrators and tutors can use the feature "Mail to Members" in the "Members" tab. -crs#:#crs_mail_context_member_info#:#For the contact emails on the info screen of a course -crs#:#crs_mail_context_member_title#:#Course Member -crs#:#crs_mail_context_tutor_info#:#For the participant emails on the member and learning progress screens of a course -crs#:#crs_mail_context_tutor_title#:#Course Tutor +crs#:#crs_mail_all_info#:#Membri, amministratori e tutor possono utilizzare la funzione "Invia ai membri" nella scheda "Membri". +crs#:#crs_mail_context_member_info#:#Per le e-mail di contatto nella schermata informativa di un corso +crs#:#crs_mail_context_member_title#:#Membro del corso +crs#:#crs_mail_context_tutor_info#:#Per i partecipanti e-mail sulle schermate membro e stato di avanzamento di un corso +crs#:#crs_mail_context_tutor_title#:#Tutor del corso crs#:#crs_mail_permanent_link#:#Segli il link seguente per accedere a contenuto del corso: crs#:#crs_mail_tutors_only#:#Solo per tutor e amministratori -crs#:#crs_mail_tutors_only_info#:#Only administrators and tutors can use the feature "Mail to Members" in the "Members" tab. +crs#:#crs_mail_tutors_only_info#:#Solo gli amministratori e i tutor possono utilizzare la funzione "Invia ai membri" nella scheda "Membri". crs#:#crs_mail_type#:#Mail per i membri -crs#:#crs_map_location#:#Map Location del corso -crs#:#crs_map_settings#:#Map Settings +crs#:#crs_map_location#:#Mappa Località del corso +crs#:#crs_map_settings#:#Impostazioni della mappa crs#:#crs_materials#:#Materiali del corso crs#:#crs_max_and_min_members_invalid#:#Il numero minimo deve essere minore del numero massimo dei membri. crs#:#crs_max_and_min_members_needed#:#Seleziona un numero minimo o massimo dei membri - o entrambi. @@ -7720,16 +7707,16 @@ crs#:#crs_member_administration#:#Edita Partcipanti crs#:#crs_member_passed_status_changed#:#Stato superato modificato crs#:#crs_members#:#Membri crs#:#crs_members_deleted#:#Eliminati iscritti -crs#:#crs_members_groups#:#Course Members Groups +crs#:#crs_members_groups#:#Gruppi dei membri del corso crs#:#crs_members_map#:#Mappa dei membri del corso crs#:#crs_members_print_title#:#Iscritti al corso crs#:#crs_min_one_admin#:#Deve essere assegnato almeno un amministratore a questo corso. -crs#:#crs_msg_no_self_registration_period_if_self_enrolment_disabled#:#The limited registration period can not be defined if the "No Self-enrolment" setting is active.###26 08 2024 new variable -crs#:#crs_my_courses_groups_enabled#:#My Courses and Groups###26 08 2024 new variable -crs#:#crs_my_courses_groups_enabled_info#:#If activated, the section 'My Courses and Groups' is visible.###26 08 2024 new variable +crs#:#crs_msg_no_self_registration_period_if_self_enrolment_disabled#:#The limited registration period can not be defined if the "No Self-enrolment" setting is active.###14 02 2024 new variable +crs#:#crs_my_courses_groups_enabled#:#My Courses and Groups###28 07 2023 new variable +crs#:#crs_my_courses_groups_enabled_info#:#If activated, the section 'My Courses and Groups' is visible.###28 07 2023 new variable crs#:#crs_new_status#:#Il tuo nuovo status e': crs#:#crs_new_subscription#:#Nuova iscrizione al corso "%s" -crs#:#crs_new_subscription_body#:#Un nuovo utente & +crs#:#crs_new_subscription_body#:#%s è registrato per il corso "%s". crs#:#crs_new_subscription_request#:#Richiesta di iscrizione al corso "%s" crs#:#crs_new_subscription_request_body#:#Un utente ha richiesto di iscriversi al corso & crs#:#crs_new_subscription_request_body2#:#Devi contattare l'amministratore per l'accettazione della richiesta @@ -7748,7 +7735,7 @@ crs#:#crs_notification#:#Notifiche crs#:#crs_notification_activated#:#Notifica attivata crs#:#crs_notification_deactivated#:#Notifica disattivata crs#:#crs_notification_explanation_admin#:#Ricevi questa email perché sei un amministratore o un tutor di corso con le notifiche abilitate. -crs#:#crs_notification_list_title#:#Notification About New Members +crs#:#crs_notification_list_title#:#Notifica sui nuovi membri crs#:#crs_notification_salutation#:#Caro partecipante al corso, crs#:#crs_notify#:#Notifica per nuova registrazione crs#:#crs_nr#:#Numero @@ -7757,10 +7744,10 @@ crs#:#crs_obj_final_req_info#:#Se è stato raggiunto questo numero di punti, l'o crs#:#crs_obj_initial_req_info#:#Se è stato raggiunto questo numero di punti, non sarà raccomandato ulteriore materiale didattico per l'editing crs#:#crs_obj_required_points#:#Punti richiesti crs#:#crs_objective_accomplished#:#Eseguito -crs#:#crs_objective_action_itest#:#Question Assignemnt Initial Test -crs#:#crs_objective_action_materials#:#Material Assignment -crs#:#crs_objective_action_qtest#:#Question Assignment Qualifying -crs#:#crs_objective_action_qtest_sep#:#Abschlusstest zuordnen +crs#:#crs_objective_action_itest#:#Test iniziale di assegnazione delle domande +crs#:#crs_objective_action_materials#:#Assegnazione materiale +crs#:#crs_objective_action_qtest#:#Qualifica assegnazione domanda +crs#:#crs_objective_action_qtest_sep#:#Assegna il test finale crs#:#crs_objective_add_mat#:#Assegna materiali crs#:#crs_objective_all_points#:#Punteggio totale crs#:#crs_objective_assigned_materials#:#Materiale didattico assegnato @@ -7776,21 +7763,21 @@ crs#:#crs_objective_pretest#:#Test di ingresso crs#:#crs_objective_qst_summary#:#Visualizzazione assegnazione domande crs#:#crs_objective_random_warn#:#Non puoi usare test random in combinazione con obiettivi di apprendimento. crs#:#crs_objective_result#:#Risultati -crs#:#crs_objective_result_details#:#« Show Details###29 07 2022 new variable -crs#:#crs_objective_result_summary_initial#:#Placement Test: %1$s (%2$s required)###29 07 2022 new variable -crs#:#crs_objective_result_summary_qualifying#:#Achievement Test: %1$s (%2$s required)###29 07 2022 new variable +crs#:#crs_objective_result_details#:#« Show Details +crs#:#crs_objective_result_summary_initial#:#Placement Test: %1$s (%2$s required) +crs#:#crs_objective_result_summary_qualifying#:#Achievement Test: %1$s (%2$s required) crs#:#crs_objective_saved_sorting#:#Ordinamento salvato. crs#:#crs_objective_self_assessment#:#Test iniziale crs#:#crs_objective_status#:#Stato obiettivo -crs#:#crs_objective_status_configure#:#Configure Learning Objective Oriented Course -crs#:#crs_objective_status_itest#:#Configure Initial Test -crs#:#crs_objective_status_materials#:#Create New Course Materials -crs#:#crs_objective_status_materials_info#:#The course is currently empty. Add course materials that can be assigned to learning objectives.###26 08 2024 new variable +crs#:#crs_objective_status_configure#:#Configurare il corso orientato all'apprendimento degli obiettivi +crs#:#crs_objective_status_itest#:#Configura test iniziale +crs#:#crs_objective_status_materials#:#Crea nuovi materiali del corso +crs#:#crs_objective_status_materials_info#:#The course is currently empty. Add course materials that can be assigned to learning objectives.###31 03 2023 new variable crs#:#crs_objective_status_objective_creation#:#Crea obiettivo dell’apprendimento crs#:#crs_objective_status_objectives#:#Configura obiettivi di apprendimento -crs#:#crs_objective_status_qtest#:#Configure Qualifying Test +crs#:#crs_objective_status_qtest#:#Configura test di qualificazione crs#:#crs_objective_status_settings#:#Impostazioni corso -crs#:#crs_objective_tbl_col_final_tsts#:#Abschlusstests +crs#:#crs_objective_tbl_col_final_tsts#:#Test Finali crs#:#crs_objective_wiz_final#:#Domande del test finale crs#:#crs_objective_wiz_final_info#:#Assegnazione delle domande finali del test. crs#:#crs_objective_wiz_final_limit#:#Limiti per il test finale @@ -7809,38 +7796,38 @@ crs#:#crs_objectives_reset_sure#:#Hai deciso di eliminare tutti i risultati di q crs#:#crs_objectives_reseted#:#Risultati eliminati. crs#:#crs_open#:#Apri corso crs#:#crs_other_resources#:#Altre risorse -crs#:#crs_page_type_lobj#:#Learning Objective Page###29 07 2022 new variable +crs#:#crs_page_type_lobj#:#Pagina Obiettivo di apprendimento crs#:#crs_passed#:#Superato crs#:#crs_passed_status_manual_by#:#Manuale da crs#:#crs_passed_status_system#:#Sistema crs#:#crs_password_not_valid#:#La tua password non è valida crs#:#crs_password_required#:#La procedura di registrazione richiede una password. crs#:#crs_pdf#:#PDF -crs#:#crs_period#:#Course Period -crs#:#crs_period_end_mail_placeholder#:#Period End###07 02 2020 new variable -crs#:#crs_period_info#:#Start to end date of the course -crs#:#crs_period_start_mail_placeholder#:#Period Start###07 02 2020 new variable +crs#:#crs_period#:#Periodo del corso +crs#:#crs_period_end_mail_placeholder#:#Period End +crs#:#crs_period_info#:#Inizia alla fine del corso +crs#:#crs_period_start_mail_placeholder#:#Period Start crs#:#crs_presentation_type#:#Tipo di presentazione crs#:#crs_print_list#:#Stampa elenco -crs#:#crs_ref_delete_confirmation_info#:#Would you like to remove the following members from this course? If these members are to be removed from courses linked into this course, please activate the respective checkboxes.###07 02 2020 new variable -crs#:#crs_ref_member_update#:#Neue Mitglieder hinzufügen###07 02 2020 new variable -crs#:#crs_ref_member_update_info#:#Alle neuen Mitglieder des übergeordneten Kurses werden automatisch in den Kurs, auf den dieser Kurs-Link verweist, eingetragen.###07 02 2020 new variable -crs#:#crs_ref_missing_access#:#Die Option kann nicht ausgewählt werden, da Sie nicht die Berechtigung "Mitglieder verwalten" für beide Kurse besitzen.###07 02 2020 new variable -crs#:#crs_ref_missing_parent_crs#:#Die Option kann nicht ausgewählt werden, da dieser Kurs-Link keinen übergeordneten Kurs besitzt.###07 02 2020 new variable +crs#:#crs_ref_delete_confirmation_info#:#Would you like to remove the following members from this course? If these members are to be removed from courses linked into this course, please activate the respective checkboxes. +crs#:#crs_ref_member_update#:#Neue Mitglieder hinzufügen +crs#:#crs_ref_member_update_info#:#Alle neuen Mitglieder des übergeordneten Kurses werden automatisch in den Kurs, auf den dieser Kurs-Link verweist, eingetragen. +crs#:#crs_ref_missing_access#:#Die Option kann nicht ausgewählt werden, da Sie nicht die Berechtigung "Mitglieder verwalten" für beide Kurse besitzen. +crs#:#crs_ref_missing_parent_crs#:#Die Option kann nicht ausgewählt werden, da dieser Kurs-Link keinen übergeordneten Kurs besitzt. crs#:#crs_reg#:#impostazioni di registrazione -crs#:#crs_reg_code#:#Registration Code -crs#:#crs_reg_code_enabled_info#:#If enabled, an automatic registration is possible using a particular registration link. -crs#:#crs_reg_code_link#:#Registration Link +crs#:#crs_reg_code#:#Codice di registrazione +crs#:#crs_reg_code_enabled_info#:#Se abilitato, è possibile una registrazione automatica utilizzando un collegamento di registrazione particolare. +crs#:#crs_reg_code_link#:#Link di registrazione crs#:#crs_reg_max_info#:#Definisci il numero massimo di utenti che può essere assegnato a questo corso crs#:#crs_reg_no_selfreg#:#Nessuna iscrizione automatica crs#:#crs_reg_password_info#:#Gli utenti devono digitare questa password quando si uniscono al corso. -crs#:#crs_reg_selfreg#:#Self-Enrolment###26 08 2024 new variable +crs#:#crs_reg_selfreg#:#Self-Enrolment###30 04 2024 new variable crs#:#crs_reg_subject#:#Messaggio crs#:#crs_reg_until#:#Scadenza registrazione -crs#:#crs_reg_user_already_subscribed#:#Ti sei gi& +crs#:#crs_reg_user_already_subscribed#:#Hai già richiesto l'iscrizione a questo corso crs#:#crs_registration#:#Registarazione al corso crs#:#crs_registration_confirmation_info#:#Gli utenti interessati possono inviare una richiesta/un messaggio all’amministratore del corso. -crs#:#crs_registration_deactivated#:#Scegli questa opzione se vuoi disabilitare la registrazione. Nessun utente potr& +crs#:#crs_registration_deactivated#:#Solo gli amministratori del corso possono aggiungere utenti al corso. crs#:#crs_registration_limited#:#Registrazione limitata nel tempo crs#:#crs_registration_limited_info#:#I membri possono registrarsi solo per questo corso durante un determinato periodo di tempo. crs#:#crs_registration_period#:#Periodo @@ -7852,8 +7839,8 @@ crs#:#crs_role_status#:#Ruolo/Stato crs#:#crs_search_users#:#Cerca Utenti crs#:#crs_select_archive_language#:#Per favore scegli una lingua per l'archivio crs#:#crs_select_one_archive#:#Per favore scegli un archivio -crs#:#crs_select_starter#:#Scegli l& -crs#:#crs_settings#:#ProprieImpostazionit& +crs#:#crs_select_starter#:#Seleziona Avvia oggetto +crs#:#crs_settings#:#Impostazioni del corso crs#:#crs_settings_saved#:#Impostazioni salvate crs#:#crs_shorten_breadcrumb#:#Breadcrumb crs#:#crs_show_all_obj#:#Espandi tutto @@ -7875,17 +7862,17 @@ crs#:#crs_starters_already_assigned#:#Questo oggetto è già stato assegnato crs#:#crs_status#:#Stato crs#:#crs_status_changed#:#Stato corso crs#:#crs_status_changed_body#:#Il tuo stato nel corso "%s" è stato modificato. -crs#:#crs_status_determination#:#Determination +crs#:#crs_status_determination#:#Determinazione crs#:#crs_status_determination_lp#:#Attraverso il progresso dell'apprendimento -crs#:#crs_status_determination_lp_info#:#When the learning progress changes to "Completed", the course status "Passed" will be set automatically. Tutors still can overwrite the status manually. -crs#:#crs_status_determination_manual#:#Independent of Learning Progress -crs#:#crs_status_determination_sync#:#Sync passed status with learning progress of all members now +crs#:#crs_status_determination_lp_info#:#Quando l'avanzamento dell'apprendimento cambia in "Completato", lo stato del corso "Passato" verrà impostato automaticamente. I tutor possono comunque sovrascrivere lo stato manualmente. +crs#:#crs_status_determination_manual#:#Indipendente dal progresso dell'apprendimento +crs#:#crs_status_determination_sync#:#Sincronizza lo stato passato con i progressi di apprendimento di tutti i membri ora crs#:#crs_structure#:#Struttura del corso crs#:#crs_subject_course_group_notification#:#Mail giornaliera per %s crs#:#crs_subscribe_member#:#La tua registrazione per il corso "%s" crs#:#crs_subscribe_member_body#:#siamo lieti di confermare la tua registrazione al corso "%s". crs#:#crs_subscribe_wl#:#La tua registrazione per il corso "%s". -crs#:#crs_subscribe_wl_body#:#Sei stato assegnato alla lista di attesa per il corso "%s".\nTi e' stata assegnata la posizione %s nella lista.\n\n Riceverai un messaggio dall'amministratore del corso quando la tua richiesta sarà stata approvata o respinta. +crs#:#crs_subscribe_wl_body#:#Sei stato assegnato alla lista di attesa per il corso "%s". Ti e' stata assegnata la posizione %s nella lista. Riceverai un messaggio dall'amministratore del corso quando la tua richiesta sarà stata approvata o respinta. crs#:#crs_subscriber#:#Iscritto crs#:#crs_subscribers_deleted#:#Iscritti eliminati crs#:#crs_subscription#:#Iscrizione @@ -7895,73 +7882,73 @@ crs#:#crs_subscription_max_members_short#:#Numero di iscritti crs#:#crs_subscription_max_members_short_info#:#È possibile impostare il numero minimo rispettivamente massimo di membri. Può essere impostata una lista di attesta. crs#:#crs_subscription_min_members#:#Numero minimo crs#:#crs_subscription_min_members_err#:#Il numero minimo non può essere maggiore del numero massimo di partecipanti. -crs#:#crs_subscription_min_members_info#:#See cron job "Cancellation Limit". +crs#:#crs_subscription_min_members_info#:#Vedi cron job "Limite cancellazione". crs#:#crs_subscription_options_confirmation#:#Iscrizione richista crs#:#crs_subscription_options_direct#:#Iscrizione diretta crs#:#crs_subscription_options_password#:#Iscrizione con password del corso crs#:#crs_subscription_successful#:#Sei stato iscritto a questo corso crs#:#crs_sure_delete_selected_archives#:#Sei sicuro di voler eliminare gli archivi selezionati crs#:#crs_syllabus#:#Sommario -crs#:#crs_sys_default#:#System Default +crs#:#crs_sys_default#:#Default del sistema crs#:#crs_table_start_objects#:#Oggetti di partenza -crs#:#crs_target_group#:#Target Group###07 02 2020 new variable -crs#:#crs_tile_and_objective_view_not_supported#:#You cannot activate both "Tile Presentation" and "Learning Objectives Presentation" at the same time.###07 02 2020 new variable -crs#:#crs_tile_and_session_limit_not_supported#:#You cannot activate both "Tile Presentation" and "Session Limitation" at the same time.###07 02 2020 new variable -crs#:#crs_timing_err_start_end#:#The end date must be greater than or equals the start date.###29 07 2022 new variable -crs#:#crs_timings_activate_optional#:#Optional mode for course timings -crs#:#crs_timings_activate_optional_own#:#Optional mode for my course timings +crs#:#crs_target_group#:#Target Group +crs#:#crs_tile_and_objective_view_not_supported#:#Non è possibile attivare contemporaneamente "Presentazione affiancata" e "Presentazione degli obiettivi di apprendimento". +crs#:#crs_tile_and_session_limit_not_supported#:#Non è possibile attivare contemporaneamente "Presentazione tessera" e "Limitazione sessione". +crs#:#crs_timing_err_start_end#:#The end date must be greater than or equals the start date. +crs#:#crs_timings_activate_optional#:#Modalità opzionale per gli orari dei corsi +crs#:#crs_timings_activate_optional_own#:#Modalità opzionale per i tempi del mio corso crs#:#crs_timings_availability_enabled#:#Temporaneamente disponibile crs#:#crs_timings_changeable#:#Time Target modificabile crs#:#crs_timings_changed#:#Temporizzazioni modificate -crs#:#crs_timings_days_after_subsription#:#Day(s) after course subscription +crs#:#crs_timings_days_after_subsription#:#Giorno/i dopo l'abbonamento al corso crs#:#crs_timings_disabled#:#Temporizzazioni disabilitate crs#:#crs_timings_disabled_info#:#Scegli questa opzione per disattivare la temporizzazione crs#:#crs_timings_early_begin#:#Avvio anticipato -crs#:#crs_timings_edit_personal#:#Edit Personal Timings###07 02 2020 new variable +crs#:#crs_timings_edit_personal#:#Modifica i tempi personali crs#:#crs_timings_end#:#Fine tempo crs#:#crs_timings_from_until#:#(Da/a) crs#:#crs_timings_in_days#:#(In giorni) crs#:#crs_timings_info_active#:#(Attivo) crs#:#crs_timings_not_changed#:#Temporizzazioni non modificate -crs#:#crs_timings_optional_checked#:#Optional mode was activated for this user -crs#:#crs_timings_optional_off#:#Optional mode is not active. -crs#:#crs_timings_optional_on#:#Optional mode is active. -crs#:#crs_timings_optional_on_and_passed#:#Optional mode is active and cannot be changed because user is passed. -crs#:#crs_timings_optional_unchecked#:#Optional mode was deactivated for this user +crs#:#crs_timings_optional_checked#:#La modalità opzionale è stata attivata per questo utente +crs#:#crs_timings_optional_off#:#La modalità opzionale non è attiva. +crs#:#crs_timings_optional_on#:#La modalità opzionale è attiva. +crs#:#crs_timings_optional_on_and_passed#:#La modalità opzionale è attiva e non può essere modificata perché l'utente è passato. +crs#:#crs_timings_optional_unchecked#:#La modalità opzionale è stata disattivata per questo utente crs#:#crs_timings_planed_info#:#Tempo di editing definito crs#:#crs_timings_planed_start#:#Definito crs#:#crs_timings_presetting#:#Time Target abilitato crs#:#crs_timings_short_active#:#Attivato -crs#:#crs_timings_short_active_tt#:#Activate Timings +crs#:#crs_timings_short_active_tt#:#Attiva i tempi crs#:#crs_timings_short_changeable#:#Modificabile -crs#:#crs_timings_short_end#:#End Date###07 02 2020 new variable +crs#:#crs_timings_short_end#:#Data di fine crs#:#crs_timings_short_limit_start_end#:#Modificabile -crs#:#crs_timings_short_limit_start_end_tt#:#Latest end -crs#:#crs_timings_short_limit_start_end_tt_rel#:#Latest end in days after course subscription +crs#:#crs_timings_short_limit_start_end_tt#:#Ultima fine +crs#:#crs_timings_short_limit_start_end_tt_rel#:#Ultima scadenza dopo l'iscrizione al corso crs#:#crs_timings_short_start_end#:#Inizio/fine suggeriti -crs#:#crs_timings_short_start_end_rel#:#Suggested Start (in days)###07 02 2020 new variable -crs#:#crs_timings_short_start_end_tt#:#Suggested start -crs#:#crs_timings_short_start_end_tt_rel#:#Suggested start after course subscription -crs#:#crs_timings_start#:#Starting Time +crs#:#crs_timings_short_start_end_rel#:#Inizio suggerito (in giorni) +crs#:#crs_timings_short_start_end_tt#:#Inizio suggerito +crs#:#crs_timings_short_start_end_tt_rel#:#Inizio suggerito dopo l'abbonamento al corso +crs#:#crs_timings_start#:#Tempo di partenza crs#:#crs_timings_start_end_info#:#(Inizio/fine) crs#:#crs_timings_sug_begin#:#Inizio suggerito crs#:#crs_timings_sug_end#:#Fine suggerita crs#:#crs_timings_suggested_info#:#Tempo di editing suggerito crs#:#crs_timings_time_frame#:#Lasso di tempo -crs#:#crs_timings_time_frame_tt#:#Time frame in days +crs#:#crs_timings_time_frame_tt#:#Intervallo di tempo in giorni crs#:#crs_timings_update_error#:#Le tue impostazioni non sono valide, verifica i tempi per i seguenti materiali -crs#:#crs_timings_warning_timing_exists#:#Timings are configured for this object. If you active the availability settings, these timing settings will be reseted. +crs#:#crs_timings_warning_timing_exists#:#I tempi sono configurati per questo oggetto. Se attivi le impostazioni di disponibilità, queste impostazioni di temporizzazione verranno ripristinate. crs#:#crs_to#:#A: crs#:#crs_tutor#:#Tutor crs#:#crs_tutors#:#Tutor crs#:#crs_unblocked#:#Accesso libero -crs#:#crs_unblocked_member#:#Stato in coso "%s" +crs#:#crs_unblocked_member#:#Accesso concesso nel corso "%s" crs#:#crs_unblocked_member_body#:#La tua iscrizione al corso "%s" stata ripristinata crs#:#crs_unlimited#:#Senza limite crs#:#crs_unsubscribe_member#:#La tua cancellazione come membre dal corso "%s" -crs#:#crs_unsubscribe_member_body#:#we confirm your cancellation of membership in course "%s". We hope that you find an opportunity to participate in another course. +crs#:#crs_unsubscribe_member_body#:#confermiamo la tua cancellazione dell'iscrizione al corso "%s". Speriamo che tu abbia l'opportunità di partecipare ad un altro corso. crs#:#crs_unsubscribe_member_explanation#:#Ricevi questo messaggio perché hai cancellato la registrazione dal corso menzionato sopra. -crs#:#crs_unsubscribe_sure#:#Vuoi annullare l& +crs#:#crs_unsubscribe_sure#:#Sei sicuro di voler annullare l'iscrizione a questo corso? crs#:#crs_unsubscribed_from_crs#:#Sei iscritto a questo corso. crs#:#crs_update_subscr_request#:#Aggiorna la tua richiesta per diventare membro crs#:#crs_user_agreement#:#Tipi di dati rilasciati @@ -7973,23 +7960,23 @@ crs#:#crs_users_removed_from_list#:#Gli utenti selezionati sono stati tolti dall crs#:#crs_usr_agreement#:#Accordo con l’utente crs#:#crs_view_info_objective#:#Questo modo di presentazione si usa per la presentazione degli obiettivi formativi. crs#:#crs_view_info_timing#:#Modo di temporizzazione per la presentazione. -crs#:#crs_view_info_timing_absolute#:#Start and end date will be set absolute.###07 02 2020 new variable -crs#:#crs_view_info_timing_relative#:#Start and end date will be set relative to the subscription date.###07 02 2020 new variable +crs#:#crs_view_info_timing_absolute#:#La data di inizio e fine verrà impostata in modo assoluto. +crs#:#crs_view_info_timing_relative#:#La data di inizio e fine verrà impostata in relazione alla data di iscrizione. crs#:#crs_view_mode#:#Presentazione del corso crs#:#crs_view_objective#:#Visualizzazione obiettivi formativi crs#:#crs_view_timing#:#Visualizzazione temporizzazioni -crs#:#crs_view_timing_absolute#:#Absolute Dates###07 02 2020 new variable -crs#:#crs_view_timing_relative#:#Relative Dates###07 02 2020 new variable -crs#:#crs_view_timings#:#Timings View Type###07 02 2020 new variable -crs#:#crs_visibility#:#Visibility###26 08 2024 new variable +crs#:#crs_view_timing_absolute#:#Data assoluta +crs#:#crs_view_timing_relative#:#Data relativa +crs#:#crs_view_timings#:#Tipo di visualizzazione degli orari +crs#:#crs_visibility#:#Visibility###24 11 2022 new variable crs#:#crs_visibility_limitless#:#Visibile (senza limiti) crs#:#crs_visibility_until#:#Visibile (da ... a ...) crs#:#crs_visibility_until_info#:#Il corso sarà visibile ai suoi membri in un determinato periodo di tempo. -crs#:#crs_visibility_unvisible#:#The course is not visible.###26 08 2024 new variable -crs#:#crs_wait_info#:#Se selezionato ed il numero di utenti & +crs#:#crs_visibility_unvisible#:#The course is not visible.###24 11 2022 new variable +crs#:#crs_wait_info#:#Se viene superato il numero massimo di utenti, le nuove registrazioni verranno inserite in una lista di attesa. crs#:#crs_waiting_list#:#Lista di attesa crs#:#crs_waiting_list_autofill#:#Con riempimento automatico -crs#:#crs_waiting_list_autofill_info#:#Participants are recruited from the waiting list automatically on cancellations. +crs#:#crs_waiting_list_autofill_info#:#I partecipanti vengono reclutati automaticamente dalla lista di attesa in caso di cancellazione. crs#:#crs_waiting_list_no_autofill#:#Senza riempimento automatico crs#:#crs_warn_no_max_set_on_waiting_list#:#Il numero massimo di partecipanti al corso è stato superato. Puoi agiungere la tua richiesta alla lista di attesa. Riceverai un massaggio dall'amministratore se la tua richiesta è stata accettata o rifiutarta crs#:#crs_warn_wl_set_on_waiting_list#:#Alcuni utenti sono già inseriti in lista di attesa. Puoi aggiungere la tua richiesta alla lista. Riceverai un messaggio dall'amministratore se la tua richiesta è stata acettata o respinta. @@ -8015,7 +8002,7 @@ crs#:#event_file#:#File crs#:#event_files#:#Files assegnati crs#:#event_fulltime_info#:#Nessun tempo specificato crs#:#event_lecturer#:#Nome -crs#:#event_list_registered_only#:#Only Registered Members +crs#:#event_list_registered_only#:#Solo membri registrati crs#:#event_location#:#Posizione crs#:#event_materials#:#Materiali della sessione crs#:#event_not_participated#:#Non partecipato @@ -8046,133 +8033,133 @@ crs#:#event_user_selection_include_waiting_list#:#Includi tutti gli utenti nella crs#:#events#:#Sessioni crs#:#export_members#:#Esporta partecipanti crs#:#grouping_change_assignment#:#Cambio assegnazione -crs#:#grp_grp_already_assigned#:#You are already member of this grouping of groups.###07 02 2020 new variable -crs#:#grp_not_all_users_assigned_msg#:#%s user(s) assigned as group member(s), %s user(s) were already in the group.###26 08 2024 new variable +crs#:#grp_grp_already_assigned#:#Sei già membro di questo raggruppamento di gruppi. +crs#:#grp_not_all_users_assigned_msg#:#%s user(s) assigned as group member(s), %s user(s) were already in the group.###14 02 2024 new variable crs#:#mem_cron_min_members_intro#:#I gruppi e i corsi seguenti non soddisfano (ancora)il numero minimo di membri. crs#:#mem_cron_min_members_reason#:#Hai ricevuto questa mail perché hai attivato la notifica nella scheda dei membri. crs#:#mem_cron_min_members_subject#:#Corso/Gruppo: Controllo numero minimo dei membri crs#:#mem_cron_min_members_task#:#Si prega di informare i partecipanti se non si svolgerà il corso a causa dei pochi partecipanti. Regola le impostazioni seguenti. -crs#:#obj_count_members#:#Number of members###26 08 2024 new variable +crs#:#obj_count_members#:#Number of members###31 03 2023 new variable crs#:#sess_attendance_list#:#Lista delle presenze crs#:#sess_gen_attendance_list#:#Genera lista di presenze -crs#:#sess_join_info#:#Please click the Join button if you want to take part at this session -crs#:#sess_limit#:#Limit Number of Sessions +crs#:#sess_join_info#:#Fare clic sul pulsante Partecipa se si desidera prendere parte a questa sessione +crs#:#sess_limit#:#Numero limite di sessioni crs#:#sess_limit_info#:#Scegli questa opzione per limitare il numero di sessioni visibili. crs#:#sess_num_next#:#Numero di sessioni seguenti crs#:#sess_num_prev#:#Numero di sessioni passate crs#:#sess_print_attendance_list#:#Lista di attesa stampa crs#:#sess_signature#:#Firma crs#:#subscription_times_not_valid#:#Il periodo di registrazione non è valido. -crs#:#timing_accept_table#:#Tempi: Note +crs#:#timing_accept_table#:#Tempi di apprendimento: Note crs#:#timing_accepted#:#Accettato crs#:#timing_not_accepted#:#Non accettato crs#:#timing_remark#:#Commento crs#:#timing_tutor_visible#:#il Remark è visibile ai tutor -crs#:#timing_user_accept#:#Accetta la temporizzazione -crs#:#timing_user_accepted#:#Temporizzazioni accettate +crs#:#timing_user_accept#:#Accetta il piano di apprendimento consigliato +crs#:#timing_user_accepted#:#Piano di apprendimento accettato crs#:#timings#:#Temporizzazioni -crs#:#timings_cron_reminder_exceeded_start#:#Der Bearbeitungszeitraum ist überfällig bei:###07 02 2020 new variable -crs#:#timings_cron_reminder_exceeded_subject#:#Sie haben den Bearbeitungszeitraum überschritten###07 02 2020 new variable -crs#:#timings_cron_reminder_freshly_start#:#Der Bearbeitungszeitraum hat begonnen bei:###07 02 2020 new variable -crs#:#timings_cron_reminder_started_subject#:#Der Bearbeitungszeitraum hat begonnen###07 02 2020 new variable +crs#:#timings_cron_reminder_exceeded_start#:#Il periodo di elaborazione è scaduto per: +crs#:#timings_cron_reminder_exceeded_subject#:#Hai superato il periodo di elaborazione +crs#:#timings_cron_reminder_freshly_start#:#Il periodo di elaborazione è iniziato alle: +crs#:#timings_cron_reminder_started_subject#:#Il periodo di elaborazione è iniziato crs#:#timings_edit#:#Edita Tempi -crs#:#timings_of#:#Temporizzazioni Off -crs#:#timings_reminder_notifications#:#Course Timings Notifications###07 02 2020 new variable -crs#:#timings_reminder_notifications_info#:#If enabled, course participants will be notified about exceeded timing materials.###07 02 2020 new variable -crs#:#timings_timings#:#Temporizzazioni -crs#:#timings_timings_off#:#Disattivare l'amministrazione dei tempi -crs#:#timings_timings_on#:#Attivare l'amministrazione dei tempi -crs#:#timings_usr_edit#:#Edita Tempi +crs#:#timings_of#:#Pianificazione dell'apprendimento da +crs#:#timings_reminder_notifications#:#Notifiche sugli orari dei corsi +crs#:#timings_reminder_notifications_info#:#Se abilitato, i partecipanti al corso verranno informati del superamento dei materiali per la pianificazione dell'apprendimento. +crs#:#timings_timings#:#Pianificazione dell'apprendimento +crs#:#timings_timings_off#:#Disattivare l'amministrazione dei tempi di apprendimento +crs#:#timings_timings_on#:#Attivare l'amministrazione dei tempi di apprendimento +crs#:#timings_usr_edit#:#Edita Tempi di apprendimento crs#:#tutor_email#:#Mail crs#:#tutor_name#:#Nome crs#:#tutor_phone#:#Telefono -crs#:#tutorial_support_block_byline#:#The 'Tutorial Support' block is displayed in the 'Contents' tab. The user selected as "Contact Person" in the "Members" Tab is shown.###28 10 2024 new variable -crs#:#tutorial_support_block_contact#:#Contact###28 10 2024 new variable -crs#:#tutorial_support_block_send_mail#:#send email###28 10 2024 new variable -crs#:#tutorial_support_block_setting_desc#:#The 'Tutorial Support' block is displayed in the 'Contents' tab.###28 10 2024 new variable -crs#:#tutorial_support_block_setting_title#:#Tutorial Support Block###28 10 2024 new variable -crs#:#tutorial_support_block_title#:#Contact Person###28 10 2024 new variable +crs#:#tutorial_support_block_byline#:#The 'Tutorial Support' block is displayed in the 'Contents' tab. The user selected as "Contact Person" in the "Members" Tab is shown.###28 11 2025 new variable +crs#:#tutorial_support_block_contact#:#Contact###28 11 2025 new variable +crs#:#tutorial_support_block_send_mail#:#send email###28 11 2025 new variable +crs#:#tutorial_support_block_setting_desc#:#The 'Tutorial Support' block is displayed in the 'Contents' tab.###28 11 2025 new variable +crs#:#tutorial_support_block_setting_title#:#Tutorial Support Block###28 11 2025 new variable +crs#:#tutorial_support_block_title#:#Contact Person###28 11 2025 new variable crs#:#user_fields#:#Campi utente crsv#:#crsv_create#:#Crea certificato del corso crsv#:#crsv_create_info#:#Seleziona un corso terminato per generare un certificato per questo -dash#:#dash_activation#:#activation###07 02 2020 new variable -dash#:#dash_added_to_favs#:#Recommendation has been added to personal favourites.###07 02 2020 new variable -dash#:#dash_avail_presentation#:#Available Presentations###07 02 2020 new variable -dash#:#dash_avail_sortation#:#Available Sortations###07 02 2020 new variable -dash#:#dash_click_here#:#Click here###07 02 2020 new variable -dash#:#dash_co_delete#:#Delete Dashboard style###28 10 2024 new variable -dash#:#dash_co_lang#:#Dashboard style by languages###28 10 2024 new variable -dash#:#dash_customization#:#Customize Dashboard Content###28 10 2024 new variable -dash#:#dash_dashboard#:#Dashboard###07 02 2020 new variable -dash#:#dash_default_presentation#:#Default Presentation###07 02 2020 new variable -dash#:#dash_default_sortation#:#Default Sortation###07 02 2020 new variable -dash#:#dash_enable_cal#:#Calendar###07 02 2020 new variable -dash#:#dash_enable_favourites#:#Favourites###07 02 2020 new variable -dash#:#dash_enable_learning_sequences#:#Learning Sequences###26 08 2024 new variable -dash#:#dash_enable_mail#:#Mail###07 02 2020 new variable -dash#:#dash_enable_memberships#:#My Courses and Groups###07 02 2020 new variable -dash#:#dash_enable_news#:#News###07 02 2020 new variable -dash#:#dash_enable_recommended_content#:#Recommended Content###26 08 2024 new variable -dash#:#dash_enable_study_programmes#:#Study Programmes###26 08 2024 new variable -dash#:#dash_enable_task#:#Tasks###07 02 2020 new variable -dash#:#dash_favourites#:#Favourites###07 02 2020 new variable -dash#:#dash_info_sure_remove_from_favs#:#Are you sure you want to remove the following objects from your Favourites?###07 02 2020 new variable -dash#:#dash_item_removed#:#Recommendation has been removed from the list.###07 02 2020 new variable -dash#:#dash_learning_sequences#:#My Learning Sequences###26 08 2024 new variable -dash#:#dash_list#:#List###07 02 2020 new variable -dash#:#dash_main_panel#:#Main Panel###07 02 2020 new variable -dash#:#dash_make_favourite#:#Add to Favourites###07 02 2020 new variable -dash#:#dash_manual_new_item_pos#:#Position of New Objects###29 10 2025 new variable -dash#:#dash_manual_new_item_pos_bot#:#Bottom###29 10 2025 new variable -dash#:#dash_manual_new_item_pos_top#:#Top###29 10 2025 new variable -dash#:#dash_manual_sorting_title#:#Manual Sorting of Favorites###29 10 2025 new variable -dash#:#dash_member_main_alt#:#Courses and groups can also be configured as a separate main menu entry.###07 02 2020 new variable -dash#:#dash_memberships#:#My Courses and Groups###07 02 2020 new variable -dash#:#dash_page_edit_info#:#The content of this page is displayed to all users on their dashboard. The contents of the various blocks of the dashboard are presented below.###28 10 2024 new variable -dash#:#dash_presentation#:#Presentation###07 02 2020 new variable -dash#:#dash_recommended_content#:#Recommended Content###26 08 2024 new variable -dash#:#dash_remove_from_list#:#Remove from List###07 02 2020 new variable -dash#:#dash_side_panel#:#Side Panel###07 02 2020 new variable -dash#:#dash_sort_by_alphabet#:#Sort by Alphabet###29 07 2022 new variable -dash#:#dash_sort_by_location#:#Sort by Location###07 02 2020 new variable -dash#:#dash_sort_by_manually#:#Manually###29 10 2025 new variable -dash#:#dash_sort_by_start_date#:#Sort by Start Date###07 02 2020 new variable -dash#:#dash_sort_by_type#:#Sort by Type###07 02 2020 new variable -dash#:#dash_sort_option_bot#:#Bottom###29 10 2025 new variable -dash#:#dash_sort_option_top#:#Top###29 10 2025 new variable -dash#:#dash_sort_options#:#Postition of new Objects###29 10 2025 new variable -dash#:#dash_sortation#:#Sortation###07 02 2020 new variable -dash#:#dash_study_programmes#:#My Study Programmes###26 08 2024 new variable -dash#:#dash_tile#:#Tile###07 02 2020 new variable -dash#:#dash_view_courses_groups#:#Section ‘My Courses and Groups’###07 02 2020 new variable -dash#:#dash_view_favourites#:#Section ‘Favourites’###07 02 2020 new variable -dash#:#favourites_disabled_info#:#Add to favorites is deactivated. You may change this inside the repository settings.###26 08 2024 new variable -dash#:#memberships_disabled_info#:#Subscriptions are deactivated. You may change this inside the course settings.###26 08 2024 new variable -dash#:#topitem_block#:#Block###26 08 2024 new variable -dateplaner#:#Fr_long#:#Venerdi +dash#:#dash_activation#:#Attivazione +dash#:#dash_added_to_favs#:#Il contenuto è stato aggiunto ai tuoi preferiti. +dash#:#dash_avail_presentation#:#Presentazioni disponibili +dash#:#dash_avail_sortation#:#Filtri disponibili +dash#:#dash_click_here#:#Cliccare qui +dash#:#dash_co_delete#:#Delete Dashboard style###28 11 2025 new variable +dash#:#dash_co_lang#:#Dashboard style by languages###28 11 2025 new variable +dash#:#dash_customization#:#Customize Dashboard Content###28 11 2025 new variable +dash#:#dash_dashboard#:#Dashboard +dash#:#dash_default_presentation#:#Presentazione predefinita +dash#:#dash_default_sortation#:#Filtri predefiniti +dash#:#dash_enable_cal#:#Calendario +dash#:#dash_enable_favourites#:#Preferiti +dash#:#dash_enable_learning_sequences#:#Learning Sequences###30 04 2024 new variable +dash#:#dash_enable_mail#:#E-mail +dash#:#dash_enable_memberships#:#I miei corsi e gruppi +dash#:#dash_enable_news#:#Novità +dash#:#dash_enable_recommended_content#:#Recommended Content###30 04 2024 new variable +dash#:#dash_enable_study_programmes#:#Study Programmes###30 04 2024 new variable +dash#:#dash_enable_task#:#Da fare +dash#:#dash_favourites#:#Preferiti +dash#:#dash_info_sure_remove_from_favs#:#Conferma di voler rimuovere i seguenti oggetti dai Suoi preferiti? +dash#:#dash_item_removed#:#Il contenuto è stato rimosso dalla lista. +dash#:#dash_learning_sequences#:#My Learning Sequences###30 04 2024 new variable +dash#:#dash_list#:#Lista +dash#:#dash_main_panel#:#Pannello principale +dash#:#dash_make_favourite#:#Aggiungi ai preferiti +dash#:#dash_manual_new_item_pos#:#Position of New Objects###28 11 2025 new variable +dash#:#dash_manual_new_item_pos_bot#:#Bottom###28 11 2025 new variable +dash#:#dash_manual_new_item_pos_top#:#Top###28 11 2025 new variable +dash#:#dash_manual_sorting_title#:#Manual Sorting of Favorites###28 11 2025 new variable +dash#:#dash_member_main_alt#:#La visione delle proprie iscrizioni può essere integrata direttamente nel menù principale. +dash#:#dash_memberships#:#I miei corsi e gruppi +dash#:#dash_page_edit_info#:#The content of this page is displayed to all users on their dashboard. The contents of the various blocks of the dashboard are presented below.###28 11 2025 new variable +dash#:#dash_presentation#:#Presentazione +dash#:#dash_recommended_content#:#Recommended Content###30 04 2024 new variable +dash#:#dash_remove_from_list#:#Rimuovi dalla lista +dash#:#dash_side_panel#:#Pannello laterale +dash#:#dash_sort_by_alphabet#:#Sort by Alphabet###31 03 2023 new variable +dash#:#dash_sort_by_location#:#Filtra per luogo +dash#:#dash_sort_by_manually#:#Manually###28 11 2025 new variable +dash#:#dash_sort_by_start_date#:#Filtra per data d'inizio +dash#:#dash_sort_by_type#:#Filtra per tipo +dash#:#dash_sort_option_bot#:#Bottom###28 11 2025 new variable +dash#:#dash_sort_option_top#:#Top###28 11 2025 new variable +dash#:#dash_sort_options#:#Postition of new Objects###28 11 2025 new variable +dash#:#dash_sortation#:#Filtraggio +dash#:#dash_study_programmes#:#My Study Programmes###30 04 2024 new variable +dash#:#dash_tile#:#Piastrelle +dash#:#dash_view_courses_groups#:#Blocco ‘I miei corsi e gruppi' +dash#:#dash_view_favourites#:#Blocco 'Preferiti' +dash#:#favourites_disabled_info#:#Add to favorites is deactivated. You may change this inside the repository settings.###28 07 2023 new variable +dash#:#memberships_disabled_info#:#Subscriptions are deactivated. You may change this inside the course settings.###28 07 2023 new variable +dash#:#topitem_block#:#Block###30 04 2024 new variable +dateplaner#:#Fr_long#:#Venerdì dateplaner#:#Fr_short#:#Ve -dateplaner#:#Mo_long#:#Lunedi +dateplaner#:#Mo_long#:#Lunedì dateplaner#:#Mo_short#:#Lu dateplaner#:#Sa_long#:#Sabato dateplaner#:#Sa_short#:#Sa dateplaner#:#Su_long#:#Domenica dateplaner#:#Su_short#:#Do dateplaner#:#Text#:#Testo -dateplaner#:#Th_long#:#Giovedi +dateplaner#:#Th_long#:#Giovedì dateplaner#:#Th_short#:#Gio -dateplaner#:#Tu_long#:#Martedi +dateplaner#:#Tu_long#:#Martedì dateplaner#:#Tu_short#:#Ma -dateplaner#:#We_long#:#Mercoledi +dateplaner#:#We_long#:#Mercoledì dateplaner#:#We_short#:#Me dateplaner#:#add_appointment#:#Aggiungi appuntamento -dateplaner#:#app_consultation_hours#:#Orari di consulenza +dateplaner#:#app_consultation_hours#:#Gestione degli orari di ricevimento dateplaner#:#app_day#:#Vista giornaliera dateplaner#:#app_month#:#Vista mensile dateplaner#:#app_week#:#Vista settimanale -dateplaner#:#back_to_crs#:#Go to Course -dateplaner#:#back_to_grp#:#Go to Group -dateplaner#:#back_to_pd#:#Back to Personal Desktop -dateplaner#:#btn_ical#:#iCal###07 02 2020 new variable +dateplaner#:#back_to_crs#:#Vai al corso +dateplaner#:#back_to_grp#:#Vai al gruppo +dateplaner#:#back_to_pd#:#indietro +dateplaner#:#btn_ical#:#iCal dateplaner#:#c_date#:#Crea evento dateplaner#:#cal_accepted#:#Accettato dateplaner#:#cal_add_appointment#:#Crea un appuntamento @@ -8181,48 +8168,48 @@ dateplaner#:#cal_add_category#:#Crea un nuovo calendario dateplaner#:#cal_add_milestone#:#Aggiungi Milestone dateplaner#:#cal_adm_notification_info#:#Scegli questa opzione per inviare email opzionali ai partecipanti del gruppo/corso riguardo alla modifica di appuntamenti. dateplaner#:#cal_adm_notification_user_info#:#Scegliere questa opzione per inviare notifiche mail opzionali agli utenti selezionati. -dateplaner#:#cal_agenda#:#Programma +dateplaner#:#cal_agenda#:#Agenda dateplaner#:#cal_all_day#:#Tutto il giorno -dateplaner#:#cal_app_info#:#Informazioni appuntamento -dateplaner#:#cal_app_other_materials_num#:#View other materials###29 07 2022 new variable -dateplaner#:#cal_appointment_notifications#:#Notification###29 10 2025 new variable +dateplaner#:#cal_app_info#:#Informazioni sull'appuntamento +dateplaner#:#cal_app_other_materials_num#:#Vedi ulteriori materiali +dateplaner#:#cal_appointment_notifications#:#Notification###28 11 2025 new variable dateplaner#:#cal_appointments#:#Appuntamento/i dateplaner#:#cal_apps#:#Numero di appuntamenti dateplaner#:#cal_assigned_appointments#:#Appuntamenti assegnati dateplaner#:#cal_back_to_cal#:#Torna al Calendario dateplaner#:#cal_back_to_list#:#Torna alla Lista dateplaner#:#cal_back_to_search#:#Torna alla Ricerca -dateplaner#:#cal_batch_file_downloads#:#Batch file download in calendario -dateplaner#:#cal_batch_file_downloads_info#:#Pulsante attivazione per scaricare tutti i file relativi alla visualizzazione calendario/appuntamento corrente. -dateplaner#:#cal_belongs_to#:#Belongs to Calendar###29 10 2025 new variable +dateplaner#:#cal_batch_file_downloads#:#Elaborare gruppi di file dal calendario +dateplaner#:#cal_batch_file_downloads_info#:#Pulsante di attivazione per scaricare tutti i file relativi alla visualizzazione calendario/appuntamento corrente. +dateplaner#:#cal_belongs_to#:#Belongs to Calendar###28 11 2025 new variable dateplaner#:#cal_book_free#:#disponibile dateplaner#:#cal_booked_out#:#prenotato dateplaner#:#cal_booking_cancellation_body#:#il tuo appuntamento con %s è stato cancellato. dateplaner#:#cal_booking_cancellation_subject#:#L'appuntamento "%s" e' stato cancellato -dateplaner#:#cal_booking_cancellation_user#:#Questa e' una copia dalla email originale dell'utente: -dateplaner#:#cal_booking_confirmation_body#:#il tuo appuntamento con %s è stato prenotato. +dateplaner#:#cal_booking_cancellation_user#:#Questa e' una copia dalla mail originale dell'utente: +dateplaner#:#cal_booking_confirmation_body#:#Il tuo appuntamento con %s è stato fissato. dateplaner#:#cal_booking_confirmation_link#:#Link all'appuntamento -dateplaner#:#cal_booking_confirmation_subject#:#L'appuntamento "%s" e' stato prenotato -dateplaner#:#cal_booking_confirmation_user#:#Questa e' una copia dalla email originale dell'utente: -dateplaner#:#cal_booking_confirmed#:#L'appuntamento e' stato prenotato con successo. -dateplaner#:#cal_booking_failed_info#:#Questo appuntamento è prenotato. Si prega di scegliere un altro appuntamento. -dateplaner#:#cal_booking_manager_confirmation_body#:#%s has booked an appointment with %s.###29 10 2025 new variable -dateplaner#:#cal_booking_owner_confirmation_body#:#%s has booked an appointment with you.###29 10 2025 new variable +dateplaner#:#cal_booking_confirmation_subject#:#L'appuntamento "%s" e' stato fissato +dateplaner#:#cal_booking_confirmation_user#:#Questa e' una copia dalla mail originale all'utente: +dateplaner#:#cal_booking_confirmed#:#L'appuntamento e' stato fissato con successo. +dateplaner#:#cal_booking_failed_info#:#Questo appuntamento è occupato. Si prega di scegliere un altro appuntamento. +dateplaner#:#cal_booking_manager_confirmation_body#:#%s has booked an appointment with %s.###28 11 2025 new variable +dateplaner#:#cal_booking_owner_confirmation_body#:#%s has booked an appointment with you.###28 11 2025 new variable dateplaner#:#cal_cache#:#Cache del Calendario dateplaner#:#cal_cache_disabled#:#Disabilitato dateplaner#:#cal_cache_enabled#:#Abilitato -dateplaner#:#cal_cache_info#:#Se viene attivato il calendario degli appuntamenti sul personal Desktop e nel repository sono calcolati solo ogni x-minuti. +dateplaner#:#cal_cache_info#:#Se viene attivato il calendario degli appuntamenti sul personal Desktop e nel repository, verrà aggiornato solo ogni x-minuti. dateplaner#:#cal_cache_settings#:#Cache dateplaner#:#cal_cal_deleted#:#I calendari sono stati eliminati dateplaner#:#cal_cal_details#:#Dettagli del calendario -dateplaner#:#cal_cal_shared_with#:#Il calendario utenti è condiviso con +dateplaner#:#cal_cal_shared_with#:#Il calendario è condiviso con questi utenti dateplaner#:#cal_cal_sync_success#:#Calendario sincronizzato con successo dateplaner#:#cal_cal_synchronize#:#Sincronizza calendario dateplaner#:#cal_cal_type#:#Tipo di calendario dateplaner#:#cal_calendar_color#:#Colore -dateplaner#:#cal_calendar_download#:#Calendar Download +dateplaner#:#cal_calendar_download#:#Download Calendario dateplaner#:#cal_calendar_name#:#Nome del calendario -dateplaner#:#cal_calendar_subscription_modal_title#:#Calendar Subscription +dateplaner#:#cal_calendar_subscription_modal_title#:#Iscrizione al calendario dateplaner#:#cal_cancel_booking#:#Cancella la prenotazione dateplaner#:#cal_cancel_booking_confirmed#:#La prenotazione è stata cancellata con successo. dateplaner#:#cal_cancel_booking_info#:#Per cortesia conferma la cancellazione di questo appuntamento. @@ -8230,115 +8217,115 @@ dateplaner#:#cal_category_selection#:#Selezione del calendario dateplaner#:#cal_cg_notification#:#Notifica corso/gruppo dateplaner#:#cal_cg_registration_info#:#Offri agli utenti la possibilità di registrarsi agli appuntamenti di gruppo o di corso. dateplaner#:#cal_cg_registrations#:#Registrazione per Appuntamenti di Corso o di Gruppo -dateplaner#:#cal_ch_add_grp#:#Crea nuovo gruppo di ora di consultazione -dateplaner#:#cal_ch_add_sequence#:#Aggiungi una sequenza di ore per la consulenza +dateplaner#:#cal_ch_add_grp#:#Crea un nuovo gruppo di ricevimenti +dateplaner#:#cal_ch_add_sequence#:#Aggiungi una sequenza di ricevimenti dateplaner#:#cal_ch_app_bookings#:#Prenotazioni -dateplaner#:#cal_ch_app_grp#:#Gruppi di ore di consultazione -dateplaner#:#cal_ch_app_list#:#Appuntamenti delle ore di consultazione +dateplaner#:#cal_ch_app_grp#:#Gruppi di ricevimento +dateplaner#:#cal_ch_app_list#:#Appuntamenti di ricevimento dateplaner#:#cal_ch_assign_participants#:#Assegna utenti dateplaner#:#cal_ch_assigned_apps#:#Numero di appuntamenti -dateplaner#:#cal_ch_book#:#Prenota un appuntamento +dateplaner#:#cal_ch_book#:#Prenota un orario di ricevimento dateplaner#:#cal_ch_booking#:#Prenotazione Risorse -dateplaner#:#cal_ch_booking_col_comments#:#Comments###28 10 2024 new variable -dateplaner#:#cal_ch_booking_comment#:#Comment:###28 10 2024 new variable -dateplaner#:#cal_ch_booking_link#:#Link to Consultation Hours:###28 10 2024 new variable -dateplaner#:#cal_ch_booking_message_tbl#:#Commento -dateplaner#:#cal_ch_booking_num_available#:#Available Slots###28 10 2024 new variable -dateplaner#:#cal_ch_booking_num_free_short#:#%s free###28 10 2024 new variable -dateplaner#:#cal_ch_booking_other_participants#:#Other Participants:###28 10 2024 new variable +dateplaner#:#cal_ch_booking_col_comments#:#Comments###28 11 2025 new variable +dateplaner#:#cal_ch_booking_comment#:#Comment:###28 11 2025 new variable +dateplaner#:#cal_ch_booking_link#:#Link to Consultation Hours:###28 11 2025 new variable +dateplaner#:#cal_ch_booking_message_tbl#:#Commento sulla registrazione +dateplaner#:#cal_ch_booking_num_available#:#Available Slots###28 11 2025 new variable +dateplaner#:#cal_ch_booking_num_free_short#:#%s free###28 11 2025 new variable +dateplaner#:#cal_ch_booking_other_participants#:#Other Participants:###28 11 2025 new variable dateplaner#:#cal_ch_booking_owner#:#Proprietario -dateplaner#:#cal_ch_booking_participants#:#Participants###28 10 2024 new variable +dateplaner#:#cal_ch_booking_participants#:#Participants###28 11 2025 new variable dateplaner#:#cal_ch_booking_reminder_body#:#il tuo appuntamento con "%s" inizierà presto. dateplaner#:#cal_ch_booking_reminder_subject#:#Promemoria per "%s" -dateplaner#:#cal_ch_booking_start#:#Start###28 10 2024 new variable -dateplaner#:#cal_ch_booking_your_comment#:#Your comment:###28 10 2024 new variable +dateplaner#:#cal_ch_booking_start#:#Start###28 11 2025 new variable +dateplaner#:#cal_ch_booking_your_comment#:#Your comment:###28 11 2025 new variable dateplaner#:#cal_ch_bookings#:#Partecipanti dateplaner#:#cal_ch_bookings_tbl#:#Appuntamenti prenotati dateplaner#:#cal_ch_cancel_booking#:#Cancella la prenotazione -dateplaner#:#cal_ch_cancel_booking_info#:#"Cancel Booking" sends notification mails to the users. If you do not want to notify the users, choose the option "Delete Booking". -dateplaner#:#cal_ch_cancel_booking_sure#:#Vuoi davvero annullare le seguenti prenotazioni? -dateplaner#:#cal_ch_canceled_bookings#:#Le prenotazioni selezionate sono state eliminate. -dateplaner#:#cal_ch_ch#:#Orari di consulenza -dateplaner#:#cal_ch_cron_reminder#:#Invia promemoria orario di consultazione +dateplaner#:#cal_ch_cancel_booking_info#:#All'annullamento di una prenotazione sarà inviata un'e-mail di notifica agli utenti. Se non si desidera avvisare gli utenti, selezionare l'opzione "Elimina prenotazione/i. +dateplaner#:#cal_ch_cancel_booking_sure#:#Vuoi davvero annullare i seguenti appuntamenti? +dateplaner#:#cal_ch_canceled_bookings#:#Le prenotazioni selezionate sono state annullate. +dateplaner#:#cal_ch_ch#:#Orari di ricevimento +dateplaner#:#cal_ch_cron_reminder#:#Invia promemoria orario di ricevimento dateplaner#:#cal_ch_cron_reminder_days#:#Numero dei giorni -dateplaner#:#cal_ch_cron_reminder_info#:#Se consentito, verranno inviate mail di notifica sui prossimi eventi delle ore di consultazione. -dateplaner#:#cal_ch_current_booking_comment#:#Comment###28 10 2024 new variable +dateplaner#:#cal_ch_cron_reminder_info#:#Se attivato, gli utenti che hanno prenotato un appuntamento riceveranno un'e-mail di promemoria sui loro prossimi appuntamenti. Si prega di specificare con quanti giorni di anticipo devono essere inviati i solleciti. +dateplaner#:#cal_ch_current_booking_comment#:#Comment###28 11 2025 new variable dateplaner#:#cal_ch_current_bookings#:#Prenotazioni attuali dateplaner#:#cal_ch_deadline#:#Ultima registrazione dateplaner#:#cal_ch_deadline_info#:#Per cortesia specifica il numero di ore fino a quando la registrazione rimarrà bloccata. -dateplaner#:#cal_ch_delete_app_booking_info#:#I seguenti appuntamenti hanno prenotazioni esistenti. Se elimini questi appuntamenti, gli utenti non riceveranno la notifica. +dateplaner#:#cal_ch_delete_app_booking_info#:#I seguenti appuntamenti hanno già prenotazioni esistenti. Se elimini questi appuntamenti, gli utenti non riceveranno la notifica. dateplaner#:#cal_ch_delete_booking#:#Elimina prenotazione -dateplaner#:#cal_ch_delete_booking_info#:#"Delete Booking" will not notify users by email. If you want to notify users, please choose the action "Cancele Booking". +dateplaner#:#cal_ch_delete_booking_info#:#All'eliminazione delle prenotazioni non verranno avvisati gli utenti via e-mail. Se si desidera avvisare gli utenti, selezionare l'opzione "Annulla prenotazione". dateplaner#:#cal_ch_delete_booking_sure#:#Vuoi davvero eliminare le seguenti prenotazioni? dateplaner#:#cal_ch_deleted_bookings#:#Le prenotazioni selezionate sono state annullate. -dateplaner#:#cal_ch_duration#:#Duration +dateplaner#:#cal_ch_duration#:#Durata di un Appuntamento dateplaner#:#cal_ch_export_apps#:#Appuntamenti prenotati -dateplaner#:#cal_ch_field_ch#:#Appuntamenti delle ore di consultazione -dateplaner#:#cal_ch_form#:#Abilita orari per la consulenza -dateplaner#:#cal_ch_form_header#:#Orari di consulenza -dateplaner#:#cal_ch_form_info#:#Questa opzione abilita la gestione della consulenza oraria personale nel calendario. -dateplaner#:#cal_ch_free_of_available#:#%s of %s###28 10 2024 new variable -dateplaner#:#cal_ch_grp_add_tbl#:#Crea nuovo gruppo di ora di consultazione -dateplaner#:#cal_ch_grp_delete_sure#:#Vuoi davvero eliminare i seguenti gruppi di ore di consultazione? -dateplaner#:#cal_ch_grp_header#:#Gruppo di ora di consultazione -dateplaner#:#cal_ch_grp_multiple#:#Prenotazioni per l’utente -dateplaner#:#cal_ch_grp_multiple_info#:#Puoi indicare il numero massimo di ore di prenotazioni per l’utente. +dateplaner#:#cal_ch_field_ch#:#Appuntamenti dei ricevimenti +dateplaner#:#cal_ch_form#:#Abilita orari per il ricevimento +dateplaner#:#cal_ch_form_header#:#Orari di ricevimento +dateplaner#:#cal_ch_form_info#:#Questa opzione abilita la gestione dei ricevimenti personali nel calendario. +dateplaner#:#cal_ch_free_of_available#:#%s of %s###28 11 2025 new variable +dateplaner#:#cal_ch_grp_add_tbl#:#Crea nuovo gruppo di ricevimento +dateplaner#:#cal_ch_grp_delete_sure#:#Vuoi davvero eliminare i seguenti gruppi di ricevimento? +dateplaner#:#cal_ch_grp_header#:#Gruppo di ricevimento +dateplaner#:#cal_ch_grp_multiple#:#Prenotazioni per utente +dateplaner#:#cal_ch_grp_multiple_info#:#Puoi indicare il numero massimo di ore di prenotazioni per l’utente per questo gruppo. dateplaner#:#cal_ch_grp_no_assignment#:#-- Non assegnato -- -dateplaner#:#cal_ch_grp_selection#:#Assegnazione ai gruppi di ore di consultazione -dateplaner#:#cal_ch_grp_update_tbl#:#Modifica Gruppo di ora di consultazione -dateplaner#:#cal_ch_grps#:#Gruppi di ore di consultazione -dateplaner#:#cal_ch_manager#:#Gestione delle ore di consultazione -dateplaner#:#cal_ch_manager_info#:#Login degli utenti che gestiranno gli orari di consulenza. -dateplaner#:#cal_ch_max_books#:#Prenotazioni per l’utente -dateplaner#:#cal_ch_minutes#:#Duration (min)###28 10 2024 new variable +dateplaner#:#cal_ch_grp_selection#:#Assegnazione ai gruppi di ricevimento +dateplaner#:#cal_ch_grp_update_tbl#:#Modifica Gruppo di ricevimento +dateplaner#:#cal_ch_grps#:#Gruppi di ricevimento +dateplaner#:#cal_ch_manager#:#Gestione delle ore di ricevimento +dateplaner#:#cal_ch_manager_info#:#Login degli utenti che gestiranno gli orari di ricevimento. +dateplaner#:#cal_ch_max_books#:#Prenotazioni per utente +dateplaner#:#cal_ch_minutes#:#Duration (min)###28 11 2025 new variable dateplaner#:#cal_ch_multi_edit_sequence#:#Modifica appuntamenti multipli -dateplaner#:#cal_ch_num_appointments#:#Numero di Appuntamenti -dateplaner#:#cal_ch_num_appointments_info#:#Si prega di definire il numero di ulteriori appuntamenti. +dateplaner#:#cal_ch_num_appointments#:#Numero di Appuntamenti per ricevimento +dateplaner#:#cal_ch_num_appointments_info#:#Si prega di definire il numero di appuntamenti in sequenza dateplaner#:#cal_ch_num_bookings#:#Prenotare un appuntamento -dateplaner#:#cal_ch_personal_book#:#Personal Booking -dateplaner#:#cal_ch_personal_ch#:#Orari di consulenza personali +dateplaner#:#cal_ch_personal_book#:#Prenotazione personale +dateplaner#:#cal_ch_personal_ch#:#Orari di ricevimento personali dateplaner#:#cal_ch_reject_booking#:#Annulla prenotazione -dateplaner#:#cal_ch_send_mail#:#Send Mail###28 10 2024 new variable -dateplaner#:#cal_ch_target_object#:#Oggetto repository -dateplaner#:#cal_ch_target_object_info#:#Restrict appointments to given repository object. +dateplaner#:#cal_ch_send_mail#:#Send Mail###28 11 2025 new variable +dateplaner#:#cal_ch_target_object#:#Oggetto nel repository +dateplaner#:#cal_ch_target_object_info#:#Gli orari di ricevimento sono visualizzati in corsi e gruppi in un piccolo blocco sulla destra. Per limitarlo a determinati corsi o gruppi, inserire il Ref-ID dell'oggetto in questione. Puoi trovarlo nell'URL dell'oggetto in questione. Inserisci più Ref-ID separati da virgole. Indipendentemente da ciò, gli orari d'ufficio possono apparire anche nei tuoi e-portfolio. dateplaner#:#cal_ch_unknown_repository_object#:#L’id di riferimento dell’oggetto repository non è valido. dateplaner#:#cal_ch_unknown_user#:#Il login inserito non corrisponde a nessun utente. dateplaner#:#cal_ch_user_assignment_failed_info#:#I seguenti utenti non possono essere assegnati agli appuntamenti, poiché il numero massimo di prenotazioni viene superato. -dateplaner#:#cal_ch_vm_period_all#:#All###28 10 2024 new variable -dateplaner#:#cal_ch_vm_period_past#:#Past###28 10 2024 new variable -dateplaner#:#cal_ch_vm_period_upcoming#:#Upcoming###28 10 2024 new variable -dateplaner#:#cal_ch_vm_status_all#:#All###28 10 2024 new variable -dateplaner#:#cal_ch_vm_status_booked#:#Booked Slots###28 10 2024 new variable -dateplaner#:#cal_ch_vm_status_open#:#Open Slots###28 10 2024 new variable -dateplaner#:#cal_change_calendar_view#:#Change Calendar View###29 07 2022 new variable +dateplaner#:#cal_ch_vm_period_all#:#All###28 11 2025 new variable +dateplaner#:#cal_ch_vm_period_past#:#Past###28 11 2025 new variable +dateplaner#:#cal_ch_vm_period_upcoming#:#Upcoming###28 11 2025 new variable +dateplaner#:#cal_ch_vm_status_all#:#All###28 11 2025 new variable +dateplaner#:#cal_ch_vm_status_booked#:#Booked Slots###28 11 2025 new variable +dateplaner#:#cal_ch_vm_status_open#:#Open Slots###28 11 2025 new variable +dateplaner#:#cal_change_calendar_view#:#Change Calendar View###09 03 2022 new variable dateplaner#:#cal_change_responsible_users#:#Modifica utenti responsabili -dateplaner#:#cal_changed_events_header#:#Appuntamenti modificati -dateplaner#:#cal_confirm_booking#:#Conferma la prenotazione -dateplaner#:#cal_confirm_booking_info#:#Per cortesia conferma la prenotazione di questo appuntamento. +dateplaner#:#cal_changed_events_header#:#Appuntamenti modificati o nuovi +dateplaner#:#cal_confirm_booking#:#Conferma la prenotazione del ricevimento +dateplaner#:#cal_confirm_booking_info#:#Per cortesia conferma la prenotazione di questo ricevimento. dateplaner#:#cal_confirm_reg_info#:#Per cortesia conferma la registrazione di questo appuntamento. -dateplaner#:#cal_confirm_unreg_info#:#Per cortesia conferma la cancellazione di questa registrazione. -dateplaner#:#cal_consultation_hours_for#:#Orari di consulenza per -dateplaner#:#cal_consultation_hours_for_user#:#Ore di consultazione per %1 +dateplaner#:#cal_confirm_unreg_info#:#Per cortesia conferma la cancellazione di questo appuntamento. +dateplaner#:#cal_consultation_hours_for#:#Orari di ricevimento per +dateplaner#:#cal_consultation_hours_for_user#:#Ricevimento per %1 dateplaner#:#cal_contained_in#:#Contenuto in dateplaner#:#cal_create#:#Crea dateplaner#:#cal_created_appointment#:#Un nuovo appuntamento e' stato creato. -dateplaner#:#cal_created_milestone#:#Aggiunto milestone. -dateplaner#:#cal_created_milestone_resp_q#:#Aggiunto milestone. Per cortesia seleziona gli utenti che devono rispettare tale milestone. -dateplaner#:#cal_cronjob_remote_description#:#If activated, appointments of the calendar type "Web calendar" are automatically synchronised after the specified time interval.###26 08 2024 new variable -dateplaner#:#cal_cronjob_remote_title#:#External Calendar Synchronisation###26 08 2024 new variable +dateplaner#:#cal_created_milestone#:#Aggiunta milestone. +dateplaner#:#cal_created_milestone_resp_q#:#Aggiunta milestone. Per cortesia seleziona gli utenti che devono rispettare tale milestone. +dateplaner#:#cal_cronjob_remote_description#:#If activated, appointments of the calendar type "Web calendar" are automatically synchronised after the specified time interval.###13 09 2023 new variable +dateplaner#:#cal_cronjob_remote_title#:#External Calendar Synchronisation###13 09 2023 new variable dateplaner#:#cal_crs_info#:#Informazione corso dateplaner#:#cal_crs_new_notification_body#:#un nuovo appuntamento è stato creato nel corso "%s". dateplaner#:#cal_crs_new_notification_sub#:#Nuovo appuntamento nel Corso "%s" -dateplaner#:#cal_crs_notification_body#:#e' stato cambiato un appuntamento del corso "%s". +dateplaner#:#cal_crs_notification_body#:#e' stato cambiato un appuntamento nel corso "%s". dateplaner#:#cal_crs_notification_sub#:#Appuntamento modificato nel Corso "%s" -dateplaner#:#cal_crs_timing_end#:#Suggested End###07 02 2020 new variable -dateplaner#:#cal_crs_timing_start#:#Suggested Start###07 02 2020 new variable +dateplaner#:#cal_crs_timing_end#:#Fine suggerita +dateplaner#:#cal_crs_timing_start#:#Inizio Suggerito dateplaner#:#cal_daily#:#Giornaliero -dateplaner#:#cal_date_and_time#:#Date and Time###29 10 2025 new variable +dateplaner#:#cal_date_and_time#:#Date and Time###28 11 2025 new variable dateplaner#:#cal_date_booked#:#prenotato dateplaner#:#cal_date_format_info#:#Per cortesia scegli un formato per l'input delle date. -dateplaner#:#cal_date_time_title#:#Date and Time###29 10 2025 new variable -dateplaner#:#cal_day_end#:#Giorno di fine +dateplaner#:#cal_date_time_title#:#Date and Time###28 11 2025 new variable +dateplaner#:#cal_day_end#:#Fine giorno dateplaner#:#cal_day_of_month#:#Giorno del mese dateplaner#:#cal_day_overview#:#Vista giornaliera dateplaner#:#cal_day_s#:#Giorno/i @@ -8347,51 +8334,51 @@ dateplaner#:#cal_day_start#:#Giorno iniziale dateplaner#:#cal_day_week_view#:#Impostazioni per la vista Giorno/Settimana dateplaner#:#cal_deadline#:#Scadenza dateplaner#:#cal_declined#:#Declinato -dateplaner#:#cal_def_date_format#:#Formato di default per le date +dateplaner#:#cal_def_date_format#:#Formato predefinito per le date dateplaner#:#cal_def_date_format_info#:#Per cortesia scegli un formato per l'input delle date. dateplaner#:#cal_def_day_end#:#Fine giorno predefinito dateplaner#:#cal_def_day_start#:#Inizio giorno predefinito dateplaner#:#cal_def_show_weeks#:#Mostra settimane predefinite -dateplaner#:#cal_def_time_format#:#Format della data di default +dateplaner#:#cal_def_time_format#:#Format della data predefinito dateplaner#:#cal_def_time_format_info#:#Per favore scegli un formato per il tempo. -dateplaner#:#cal_def_timezone#:#Intervallo di tempo di default -dateplaner#:#cal_def_timezone_info#:#Per favore scegli un periodo di tempo di default per la presentazione degli appuntamenti. -dateplaner#:#cal_def_view#:#Default Calendar View###29 07 2022 new variable -dateplaner#:#cal_def_week_start#:#Start settimana +dateplaner#:#cal_def_timezone#:#Intervallo di tempo predefinito +dateplaner#:#cal_def_timezone_info#:#Per favore scegli un periodo di tempo predefinito per la presentazione degli appuntamenti. +dateplaner#:#cal_def_view#:#Vista del calendario predefinita +dateplaner#:#cal_def_week_start#:#Inizio settimana dateplaner#:#cal_default_calendar#:#Appuntamenti personali -dateplaner#:#cal_default_settings#:#Default settings###29 07 2022 new variable +dateplaner#:#cal_default_settings#:#Impostazioni predefinite dateplaner#:#cal_del_app_sure#:#Vuoi veramente cancellare l'appuntamento selezionato? dateplaner#:#cal_del_cal_sure#:#Vuoi veramente cancellare il calendario selezionato? dateplaner#:#cal_delete_app_sure#:#Vuoi veramente cancellare l'appuntamento seguente? -dateplaner#:#cal_delete_booking_info#:#Please confirm the deletion of this booking###28 10 2024 new variable +dateplaner#:#cal_delete_booking_info#:#Please confirm the deletion of this booking###28 11 2025 new variable dateplaner#:#cal_delete_cal#:#Elimina calendario -dateplaner#:#cal_delete_recurrence_rule#:#Delete Series of Appoinments###29 07 2022 new variable -dateplaner#:#cal_delete_recurrences#:#Cancella tutte le ricorrenze +dateplaner#:#cal_delete_recurrence_rule#:#Cancella la serie di appuntamenti +dateplaner#:#cal_delete_recurrences#:#Cancella tutte le ripetizioni dateplaner#:#cal_delete_single#:#Cancella solo questo appuntamento dateplaner#:#cal_deleted_app#:#L'appuntamento selezionato è stato cancellato. -dateplaner#:#cal_details#:#Dettagli sugli appuntamenti +dateplaner#:#cal_details#:#Dettagli sull'appuntamento dateplaner#:#cal_down_no_files#:#Niente da scaricare, gli eventi elencati non contengono file. dateplaner#:#cal_download_all_files#:#Scarica tutti i file dateplaner#:#cal_download_files#:#Scarica file -dateplaner#:#cal_download_files_started#:#Download of calendar files has started. +dateplaner#:#cal_download_files_started#:#Il download dei file del calendario è iniziato dateplaner#:#cal_dstart_dend_warn#:#Per cortesia verifica i dati che hai inserito. L'inizio del giorno dovrebbe esser prima della fine del giorno. dateplaner#:#cal_duration#:#Durata -dateplaner#:#cal_duration_end#:#End###29 10 2025 new variable -dateplaner#:#cal_duration_start#:#Start###29 10 2025 new variable +dateplaner#:#cal_duration_end#:#End###28 11 2025 new variable +dateplaner#:#cal_duration_start#:#Start###28 11 2025 new variable dateplaner#:#cal_edit_appointment#:#Modifica l'appuntamento dateplaner#:#cal_edit_category#:#Modifica Calendario dateplaner#:#cal_edit_milestone#:#Modifica Milestone dateplaner#:#cal_edit_recurrences#:#Modifica tutti gli appuntamenti dateplaner#:#cal_edit_single#:#Modifica questo appuntamento -dateplaner#:#cal_edit_single_or_all_info#:#Do you want to edit only this appointment or all in its series?###26 08 2024 new variable +dateplaner#:#cal_edit_single_or_all_info#:#Do you want to edit only this appointment or all in its series?###28 11 2023 new variable dateplaner#:#cal_enable_group_milestones#:#Abilita Milestones dateplaner#:#cal_enable_group_milestones_desc#:#Questa opzione abilita i milestones nella pianificazione a calendario. -dateplaner#:#cal_err_invalid_notification_rcps#:#The list of notification recipients is not valid. Please choose only ILIAS user account names or valid email addresses. +dateplaner#:#cal_err_invalid_notification_rcps#:#L'elenco dei destinatari delle notifiche non è valido. Scegli solo nomi di account utente ILIAS o indirizzi e-mail validi. dateplaner#:#cal_every#:#Ogni: dateplaner#:#cal_exc_deadline#:#Scadenza -dateplaner#:#cal_exc_info#:#Informazioni assegnazione +dateplaner#:#cal_exc_info#:#Informazioni sull'esercitazione dateplaner#:#cal_exc_inst_files#:#File di istruzioni -dateplaner#:#cal_exc_open#:#Apri assegnazione +dateplaner#:#cal_exc_open#:#Apri esercitazione dateplaner#:#cal_exc_peer_review_deadline#:#Scadenza feedback dateplaner#:#cal_export_timezone#:#Fuso orario per l'esportazione del calendario dateplaner#:#cal_export_timezone_tz#:#Utilizza fuso orario ILIAS @@ -8400,80 +8387,80 @@ dateplaner#:#cal_fifth#:#Quinto dateplaner#:#cal_first#:#Primo dateplaner#:#cal_fourth#:#Quarto dateplaner#:#cal_fullday#:#Giorno/Ora -dateplaner#:#cal_fullday_title#:#Tutti i giorni +dateplaner#:#cal_fullday_title#:#Tutto il giorno dateplaner#:#cal_global_settings#:#Impostazioni globali dateplaner#:#cal_grp_curr_crs#:#Corso attuale -dateplaner#:#cal_grp_curr_crs_cons#:#Ore di consultazione +dateplaner#:#cal_grp_curr_crs_cons#:#Ricevimento dateplaner#:#cal_grp_curr_grp#:#Gruppo attuale -dateplaner#:#cal_grp_info#:#Informazioni gruppo +dateplaner#:#cal_grp_info#:#Informazioni del gruppo dateplaner#:#cal_grp_new_notification_body#:#un nuovo appuntamento è stato creato nel gruppo "%s". dateplaner#:#cal_grp_new_notification_sub#:#Nuovo appuntamento nel Gruppo "%s" dateplaner#:#cal_grp_notification_body#:#e' stato cambiato un appuntamento del gruppo "%s". dateplaner#:#cal_grp_notification_sub#:#Appuntamento modificato nel Gruppo "%s" -dateplaner#:#cal_grp_others#:#ALtro +dateplaner#:#cal_grp_others#:#Altro dateplaner#:#cal_grp_personal#:#Personale dateplaner#:#cal_ical_infoscreen#:#Sottoscrivere dateplaner#:#cal_ical_url#:#iCal-URL -dateplaner#:#cal_ical_url_google#:#iCal-URL for Google Calendar###26 08 2024 new variable +dateplaner#:#cal_ical_url_google#:#iCal-URL for Google Calendar###28 11 2023 new variable dateplaner#:#cal_import_appointments#:#Importa appuntamenti dateplaner#:#cal_import_file#:#Importa file dateplaner#:#cal_import_file_info#:#Scegli il file che contiene i tuoi appuntamenti sul calendario. dateplaner#:#cal_import_tbl#:#Importa appuntamenti -dateplaner#:#cal_imported_success#:#Appuntamenti %1$s importati. -dateplaner#:#cal_in#:#in +dateplaner#:#cal_imported_success#:#Sono stati importati %1$s appuntamenti +dateplaner#:#cal_in#:#nel dateplaner#:#cal_last#:#Ultimo dateplaner#:#cal_list#:#Lista -dateplaner#:#cal_mail_notification_body#:#sei stato invitato a un appuntamento. +dateplaner#:#cal_mail_notification_body#:#Sei stato invitato a un appuntamento. dateplaner#:#cal_mail_notification_subject#:#Invito appuntamento: "%s" -dateplaner#:#cal_manage#:#Gestione -dateplaner#:#cal_materials#:#Materials###29 07 2022 new variable -dateplaner#:#cal_milestone_settings#:#Traguardo +dateplaner#:#cal_manage#:#Gestione calendario +dateplaner#:#cal_materials#:#Materiali +dateplaner#:#cal_milestone_settings#:#Milestones dateplaner#:#cal_month_overview#:#Vista globale del mese dateplaner#:#cal_month_s#:#Mese/i dateplaner#:#cal_month_selection#:#Seleziona mese dateplaner#:#cal_monthly#:#Mensile -dateplaner#:#cal_monthly_by_date#:#Monthly by Date###29 10 2025 new variable -dateplaner#:#cal_monthly_by_day#:#Monthly by Day###29 10 2025 new variable +dateplaner#:#cal_monthly_by_date#:#Monthly by Date###28 11 2025 new variable +dateplaner#:#cal_monthly_by_day#:#Monthly by Day###28 11 2025 new variable dateplaner#:#cal_ms_details#:#Dettagli traguardo dateplaner#:#cal_ms_users_responsible#:#Utenti responsabili dateplaner#:#cal_new_app#:#Nuovo appuntamento -dateplaner#:#cal_new_ms#:#Nuoa Milestone +dateplaner#:#cal_new_ms#:#Nuova Milestone dateplaner#:#cal_no_ending#:#Nessun data di fine -dateplaner#:#cal_no_events_block#:#Es sind keine Termine für Sie vorhanden.###07 02 2020 new variable +dateplaner#:#cal_no_events_block#:#Non ci sono date disponibili per Lei. dateplaner#:#cal_no_events_info#:#Nessun evento trovato per il periodo di tempo selezionato. -dateplaner#:#cal_no_recurrence#:#Nessuna ricorrenza +dateplaner#:#cal_no_recurrence#:#Nessuna ripetizione dateplaner#:#cal_notification#:#Notifica E-mail dateplaner#:#cal_notification_crsgrp#:#Notifica per partecipanti corso/gruppo -dateplaner#:#cal_notification_info#:#Se abilitati, tutti gli appartenenti al corso/gruppo saranno notificati per email di questo appuntamento. +dateplaner#:#cal_notification_info#:#Se abilitati, tutti gli appartenenti al corso/gruppo verra' notificato per email questo appuntamento. dateplaner#:#cal_notification_users#:#Notifica per utenti selezionati -dateplaner#:#cal_on#:#Sul: -dateplaner#:#cal_on_the#:#Sul: +dateplaner#:#cal_on#:#Al: +dateplaner#:#cal_on_the#:#Al: dateplaner#:#cal_open_calendar#:#Apri calendario dateplaner#:#cal_origin#:#Origine dateplaner#:#cal_owner#:#Proprietario -dateplaner#:#cal_period#:#Period###26 08 2024 new variable -dateplaner#:#cal_rec_err_limit#:#Per favoreinserisci un numero valido di appuntamenti. -dateplaner#:#cal_recurrence_confirm_deletion#:#Please decide wether you want to delete single appointments or the complete series of appointments.###29 07 2022 new variable -dateplaner#:#cal_recurrence_count#:#Number of Appointments###29 10 2025 new variable -dateplaner#:#cal_recurrence_day_interval#:#Every x Day(s)###29 10 2025 new variable -dateplaner#:#cal_recurrence_end_date#:#End Date###29 10 2025 new variable -dateplaner#:#cal_recurrence_end_date_info#:#Last possible date for an appointment.###29 10 2025 new variable -dateplaner#:#cal_recurrence_month_interval#:#Every x Month(s)###29 10 2025 new variable -dateplaner#:#cal_recurrence_until#:#Recurrence End###29 10 2025 new variable -dateplaner#:#cal_recurrence_until_count#:#Fixed Number of Appointments###29 10 2025 new variable -dateplaner#:#cal_recurrence_until_end_date#:#Repeat Until End Date###29 10 2025 new variable -dateplaner#:#cal_recurrence_week_interval#:#Every x Week(s)###29 10 2025 new variable -dateplaner#:#cal_recurrence_year_interval#:#Every x Year(s)###29 10 2025 new variable +dateplaner#:#cal_period#:#Period###21 06 2023 new variable +dateplaner#:#cal_rec_err_limit#:#Per favore inserisci un numero valido di appuntamenti. +dateplaner#:#cal_recurrence_confirm_deletion#:#Selezionare se si desidera eliminare singoli appuntamenti o l'intera serie di appuntamenti. +dateplaner#:#cal_recurrence_count#:#Number of Appointments###28 11 2025 new variable +dateplaner#:#cal_recurrence_day_interval#:#Every x Day(s)###28 11 2025 new variable +dateplaner#:#cal_recurrence_end_date#:#End Date###28 11 2025 new variable +dateplaner#:#cal_recurrence_end_date_info#:#Last possible date for an appointment.###28 11 2025 new variable +dateplaner#:#cal_recurrence_month_interval#:#Every x Month(s)###28 11 2025 new variable +dateplaner#:#cal_recurrence_until#:#Recurrence End###28 11 2025 new variable +dateplaner#:#cal_recurrence_until_count#:#Fixed Number of Appointments###28 11 2025 new variable +dateplaner#:#cal_recurrence_until_end_date#:#Repeat Until End Date###28 11 2025 new variable +dateplaner#:#cal_recurrence_week_interval#:#Every x Week(s)###28 11 2025 new variable +dateplaner#:#cal_recurrence_year_interval#:#Every x Year(s)###28 11 2025 new variable dateplaner#:#cal_recurrences#:#Ripetizioni -dateplaner#:#cal_reg_register#:#Registra -dateplaner#:#cal_reg_registered#:#Sei stato registrato. +dateplaner#:#cal_reg_register#:#Accedi +dateplaner#:#cal_reg_registered#:#Sei stato registrato per questo appuntamento. dateplaner#:#cal_reg_registered_users#:#Utenti registrati dateplaner#:#cal_reg_unregister#:#Cancella la tua registrazione dateplaner#:#cal_reg_unregistered#:#Non sei stato registrato. dateplaner#:#cal_registrations#:#Registrazioni di appuntamenti -dateplaner#:#cal_remote_url#:#URL +dateplaner#:#cal_remote_url#:#URL del calendario dateplaner#:#cal_repeat_until#:#Ripeti finchè -dateplaner#:#cal_repo_obj#:#Oggetti repository +dateplaner#:#cal_repo_obj#:#Oggetti dell'archivio dateplaner#:#cal_responsible#:#Responsabile dateplaner#:#cal_save_responsible_users#:#Memorizza Utenti Responsabili dateplaner#:#cal_search#:#Termine di ricerca @@ -8481,18 +8468,18 @@ dateplaner#:#cal_search_info_share#:#Per favore inserisci il nome dell'utente/ru dateplaner#:#cal_second#:#Secondo dateplaner#:#cal_server_tz#:#Fuso orario del server dateplaner#:#cal_sess_info#:#Informazione di sessione -dateplaner#:#cal_setting_global_crs_act#:#Activation in Courses###29 07 2022 new variable -dateplaner#:#cal_setting_global_crs_act_info#:#If selected, the calendar is active in courses by default. In any case the calendar activation can be enabled/disabled in the course settings.###29 07 2022 new variable +dateplaner#:#cal_setting_global_crs_act#:#Sttivazione nei corsi +dateplaner#:#cal_setting_global_crs_act_info#:#Se selezionato, il calendario è attivo nei corsi per impostazione predefinita. In ogni caso l'attivazione del calendario può essere abilitata/disabilitata nelle impostazioni del corso. dateplaner#:#cal_setting_global_crs_vis#:#Mostra nei corsi dateplaner#:#cal_setting_global_crs_vis_info#:#Se consentito, il calendario viene mostrato nei corsi per impostazione predefinita. In ogni caso, la presentazione del calendario può essere consentita o meno nelle impostazioni del corso. -dateplaner#:#cal_setting_global_grp_act#:#Activation in Groups###29 07 2022 new variable -dateplaner#:#cal_setting_global_grp_act_info#:#If selected, the calendar is active in groups by default. In any case the calendar activation can be enabled/disabled in the group settings.###29 07 2022 new variable +dateplaner#:#cal_setting_global_grp_act#:#Attivazione nei gruppi +dateplaner#:#cal_setting_global_grp_act_info#:#Se selezionato, il calendario è attivo nei gruppi per impostazione predefinita. In ogni caso l'attivazione del calendario può essere abilitata/disabilitata nelle impostazioni del gruppo. dateplaner#:#cal_setting_global_grp_vis#:#Mostra nei gruppi dateplaner#:#cal_setting_global_grp_vis_info#:#Se consentito, il calendario viene mostrato nei gruppi per impostazione predefinita. In ogni caso, la presentazione del calendario può essere consentita o meno nelle impostazioni del gruppo. -dateplaner#:#cal_setting_global_vis_repos#:#Calendario repository +dateplaner#:#cal_setting_global_vis_repos#:#Calendario nel repository dateplaner#:#cal_share#:#Condividi calendario dateplaner#:#cal_share_accept#:#Accetta l'invito -dateplaner#:#cal_share_cal#:#Condividi calendario +dateplaner#:#cal_share_cal#:#Condividi calendario (lettura) dateplaner#:#cal_share_cal_editable#:#Condividi calendario (Lettura e scrittura) dateplaner#:#cal_share_decline#:#Declina l'invito dateplaner#:#cal_share_search_header#:#Condividi calendario @@ -8521,27 +8508,27 @@ dateplaner#:#cal_third#:#Terzo dateplaner#:#cal_time_format_info#:#Per favore scegli un formato per il tempo. dateplaner#:#cal_timezone_info#:#Per favore scegli una città uguale al tuo fuso orario dateplaner#:#cal_type_crs#:#Calendario dei corsi -dateplaner#:#cal_type_exc#:#Calendario esercizi +dateplaner#:#cal_type_exc#:#Calendario delle esercitazioni dateplaner#:#cal_type_grp#:#Calendario di gruppo -dateplaner#:#cal_type_info#:#Per favore scegli una tipologia di calendario. "Calendari pubblici" sono visibili per tutti gli utenti di ILIAS. +dateplaner#:#cal_type_info#:#Per favore scegli una tipologia di calendario. I "calendari pubblici" sono visibili per tutti gli utenti di ILIAS. dateplaner#:#cal_type_local#:#Calendario locale dateplaner#:#cal_type_personal#:#Calendario privato dateplaner#:#cal_type_remote#:#Calendario web dateplaner#:#cal_type_rl#:#Posizione del calendario dateplaner#:#cal_type_sess#:#Calendario delle sessioni dateplaner#:#cal_type_system#:#Calendario pubblico -dateplaner#:#cal_type_tals#:#Talks###26 08 2024 new variable +dateplaner#:#cal_type_tals#:#Talks###31 03 2023 new variable dateplaner#:#cal_unshare#:#Cancella la condivisione dateplaner#:#cal_unshare_cal#:#Stop Condivisione dateplaner#:#cal_unshared_selected_usr#:#Smetti di condividere il calendario con gli utenti selezionati. dateplaner#:#cal_upcoming_events_header#:#Prossimi Eventi dateplaner#:#cal_user_date_format#:#Formato di immissione della data dateplaner#:#cal_user_notification#:#Notifica utente -dateplaner#:#cal_user_notification_info#:#Selected users will be notified about this appointment by email. Please enter ILIAS user names or email addresses. +dateplaner#:#cal_user_notification_info#:#Gli utenti selezionati verranno informati di questo appuntamento via e-mail. Inserisci i nomi utente o gli indirizzi email di ILIAS. dateplaner#:#cal_user_settings#:#Impostazioni del calendario dateplaner#:#cal_user_time_format#:#Format di tempo dateplaner#:#cal_user_timezone#:#Intervallo di tempo -dateplaner#:#cal_usr_info#:#Appointment Information###07 02 2020 new variable +dateplaner#:#cal_usr_info#:#Informazioni sull'appuntamento dateplaner#:#cal_usr_show_weeks#:#Mostra colonna settimana dateplaner#:#cal_usr_show_weeks_info#:#Attiva la colonna settimane nel blocco laterale del calendario. dateplaner#:#cal_webcal_sync#:#Sincronizzazione calendario esterno @@ -8557,16 +8544,16 @@ dateplaner#:#cal_weekly#:#Settimanale dateplaner#:#cal_where#:#Posizione dateplaner#:#cal_year_s#:#Anno/i dateplaner#:#cal_yearly#:#Annualmente -dateplaner#:#cal_yearly_by_date#:#Yearly by Date###29 10 2025 new variable -dateplaner#:#cal_yearly_by_day#:#Yearly by Day###29 10 2025 new variable -dateplaner#:#consultation_hours_block_title#:#Consultation Hours###26 08 2024 new variable +dateplaner#:#cal_yearly_by_date#:#Yearly by Date###28 11 2025 new variable +dateplaner#:#cal_yearly_by_day#:#Yearly by Day###28 11 2025 new variable +dateplaner#:#consultation_hours_block_title#:#Consultation Hours###17 01 2024 new variable dateplaner#:#crs_cal_activation_end#:#Fino del corso dateplaner#:#crs_cal_activation_start#:#Inizio del corso dateplaner#:#crs_cal_end#:#Fine del corso dateplaner#:#crs_cal_reg_end#:#Fine della registrazione dateplaner#:#crs_cal_reg_start#:#Inizio della registrazione dateplaner#:#crs_cal_start#:#Inizio del corso -dateplaner#:#date_format#:#m/d/Y H:i (Mese/Giorno/Annoa4cifre Ore24:Minuti) +dateplaner#:#date_format#:#M/G/A O:min (Mese/Giorno/Annoa4cifre Ore24:Minuti) dateplaner#:#end_date#:#Fine data dateplaner#:#err_end_before_start#:#L'ora d'inizio dell'appuntamento non può essere precedente all'ora di fine. dateplaner#:#err_missing_title#:#Per favore inserisci il titolo all'appuntamento. @@ -8578,34 +8565,34 @@ dateplaner#:#grp_cal_start#:#Inizio del gruppo dateplaner#:#ical_export#:#Esportazione iCal dateplaner#:#keep#:#Tieni dateplaner#:#keyword#:#Parola chiave -dateplaner#:#more#:#Ancora +dateplaner#:#more#:#Altro dateplaner#:#r_14#:#Ogni 14 giorni dateplaner#:#r_4_weeks#:#Ogni 4 settimane -dateplaner#:#remote_pass_info#:#Please enter your account data if the access to the webcalendar ist protected. +dateplaner#:#remote_pass_info#:#Inserisci i dati del tuo account se l'accesso al webcalendar è protetto. dateplaner#:#to#:#a: dateplaner#:#today#:#Oggi dateplaner#:#week#:#Settimana dateplaner#:#wk_short#:#Settimana dateplaner#:#year#:#Anno -dcl#:#add_value#:#Add new value +dcl#:#add_value#:#Aggiungi nuovo valore dcl#:#dcl_activate_notification#:#Consenti notifica dcl#:#dcl_add#:#Crea raccolta dati dcl#:#dcl_add_new_field#:#Aggiungi nuovo campo -dcl#:#dcl_add_new_record#:#Add New Record +dcl#:#dcl_add_new_record#:#Aggiungi Nuova registrazione dcl#:#dcl_add_new_table#:#Aggiungi nuova tabella dcl#:#dcl_add_new_view#:#Aggiungi nuova visualizzazione -dcl#:#dcl_add_perm#:#Permission Add Entry -dcl#:#dcl_add_perm_desc#:#Benutzer können Einträge in dieser Tabelle erstellen. +dcl#:#dcl_add_perm#:#Autorizzazione Aggiungi voce +dcl#:#dcl_add_perm_desc#:#Gli utenti possono creare voci in questa tabella. dcl#:#dcl_all_entries#:#Tutte le voci dcl#:#dcl_any#:#Qualsiasi dcl#:#dcl_asc#:#Ordine ascendete (ASC) -dcl#:#dcl_boolean#:#Booleano -dcl#:#dcl_boolean_desc#:#Auswahlfeld für "zutreffend"/"nicht zutreffend" +dcl#:#dcl_boolean#:#Checkbox +dcl#:#dcl_boolean_desc#:#Campo di selezione per "applicabile"/"non applicabile" dcl#:#dcl_cant_delete_last_table#:#Non puoi rimuovere completamente questa tabella poiché è l’unica di questa raccolta dati. Invece il suo contenuto e la struttura sono stati rimossi. dcl#:#dcl_change_notification_dcl_delete_record#:#La seguente registrazione dei dati è stata eliminata -dcl#:#dcl_change_notification_dcl_new_record#:#the following record was created -dcl#:#dcl_change_notification_dcl_update_record#:#the following record was updated -dcl#:#dcl_change_notification_link#:#URL +dcl#:#dcl_change_notification_dcl_new_record#:#è stata creata la seguente registrazione +dcl#:#dcl_change_notification_dcl_update_record#:#la seguente registrazione è stato aggiornata +dcl#:#dcl_change_notification_link#:#Andare alla raccolta dati dcl#:#dcl_change_notification_subject#:#La raccolta dati "%s" è stata modificata dcl#:#dcl_changed_by#:#Modificato da dcl#:#dcl_checked#:#Controllato. @@ -8613,80 +8600,80 @@ dcl#:#dcl_comments#:#Commenti dcl#:#dcl_comments_desc#:#Mostra il numero dei commenti per voce. dcl#:#dcl_confirm_delete_field#:#Vuoi davvero eliminare questo campo? dcl#:#dcl_confirm_delete_fields#:#Vuoi davvero eliminare questi campi? -dcl#:#dcl_confirm_delete_record#:#Delete this record? -dcl#:#dcl_confirm_delete_records#:#Are you sure you want to delete the following records? +dcl#:#dcl_confirm_delete_record#:#Elimina questa registrazione? +dcl#:#dcl_confirm_delete_records#:#Sei sicuro di voler eliminare le seguenti registrazioni? dcl#:#dcl_confirm_delete_table#:#Vuoi davvero eliminare questa tabella con il suo contenuto e la sua struttura? dcl#:#dcl_confirm_storing_records#:#Si prega di convalidare e confermare il proprio input. dcl#:#dcl_confirm_storing_records_no_permission#:#Non è possibile cambiare successivamente la registrazione. dcl#:#dcl_copy#:#Copia raccolta dati -dcl#:#dcl_copy_field#:#Copy###29 10 2025 new variable -dcl#:#dcl_copy_field_desc#:#Field to copy options stored in a different field of a table.###29 10 2025 new variable -dcl#:#dcl_copy_title#:#Copy of table and field###29 10 2025 new variable +dcl#:#dcl_copy_field#:#Copy###10 12 2024 new variable +dcl#:#dcl_copy_field_desc#:#Field to copy options stored in a different field of a table.###10 12 2024 new variable +dcl#:#dcl_copy_title#:#Copy of table and field###10 12 2024 new variable dcl#:#dcl_create_date#:#Data di creazione -dcl#:#dcl_create_entry_rules#:#Entry Creation###29 07 2022 new variable +dcl#:#dcl_create_entry_rules#:#Creazione della voce dcl#:#dcl_create_field#:#Crea campo -dcl#:#dcl_create_fields#:#Please create at least one field in the tab "List Fields". +dcl#:#dcl_create_fields#:#Si prega di creare almeno un campo nella scheda "Elenco campi". dcl#:#dcl_creation_date#:#Data di creazione dcl#:#dcl_creation_date_description#:#La data in cui è stato creato l’accesso. dcl#:#dcl_datatype#:#Tipo di dati -dcl#:#dcl_date#:#Date Entry###29 10 2025 new variable -dcl#:#dcl_date_desc#:#Users can enter a date of their choice or select one using a calendar.###29 10 2025 new variable +dcl#:#dcl_date#:#Date Entry###20 05 2025 new variable +dcl#:#dcl_date_desc#:#Field for a date.###20 05 2025 new variable dcl#:#dcl_date_selection#:#Selezione dei dati dcl#:#dcl_date_selection_desc#:#Offerta selezione di opzioni di data. -dcl#:#dcl_datetime#:#Datetime -dcl#:#dcl_datetime_desc#:#Datumseingabe per Auswahlmenü oder Kalender -dcl#:#dcl_datetime_selection#:#Datetime Selection###29 10 2025 new variable -dcl#:#dcl_datetime_selection_desc#:#Allow a date and time to be chosen from among a predefined selection of datetime options.###29 10 2025 new variable +dcl#:#dcl_datetime#:#Datetime Entry###28 11 2025 new variable +dcl#:#dcl_datetime_desc#:#Users can enter a date and time of their choice or select one using a calendar.###28 11 2025 new variable +dcl#:#dcl_datetime_selection#:#Datetime Selection###28 11 2025 new variable +dcl#:#dcl_datetime_selection_desc#:#Allow a date and time to be chosen from among a predefined selection of datetime options.###28 11 2025 new variable dcl#:#dcl_deactivate_view#:#Disattiva questa visualizzazione dcl#:#dcl_default_sort_field#:#Campo di ordinamento predefinito dcl#:#dcl_default_sort_field_order#:#Ordine dei campi di ordinamento predefinito -dcl#:#dcl_default_sort_field_order_desc#:#Arrange the order of the entries in the table based on this field.###29 10 2025 new variable +dcl#:#dcl_default_sort_field_order_desc#:#Arrange the order of the entries in the table based on this field.###28 11 2025 new variable dcl#:#dcl_delete_fields#:#Elimina i campi -dcl#:#dcl_delete_fields_no_selection#:#Please select at least one field to delete###26 08 2024 new variable -dcl#:#dcl_delete_perm#:#Permission Delete Entry -dcl#:#dcl_delete_records#:#Delete records -dcl#:#dcl_deleted_entries#:#Deleted Entries###29 10 2025 new variable -dcl#:#dcl_deleted_records#:#Successfully deleted %s records -dcl#:#dcl_deprecated_copy#:#(Deprecated)###29 10 2025 new variable +dcl#:#dcl_delete_fields_no_selection#:#Please select at least one field to delete###31 03 2023 new variable +dcl#:#dcl_delete_perm#:#Autorizzazione Elimina voce +dcl#:#dcl_delete_records#:#Elimina le registrazioni +dcl#:#dcl_deleted_entries#:#Deleted Entries###28 11 2025 new variable +dcl#:#dcl_deleted_records#:#%S registrazioni eliminate correttamente +dcl#:#dcl_deprecated_copy#:#(Deprecated)###10 12 2024 new variable dcl#:#dcl_desc#:#Ordine discendente (DESC) dcl#:#dcl_description#:#Descrizione campo dcl#:#dcl_detailed_view#:#Visualizzazione dettagliata dcl#:#dcl_display_action_menu#:#Abilita la possibilità di copiare o collegare il modulo referenziato -dcl#:#dcl_display_action_menu_desc#:#The object can be copied from the entry.###29 10 2025 new variable +dcl#:#dcl_display_action_menu_desc#:#The object can be copied from the entry.###28 11 2025 new variable dcl#:#dcl_display_record_alt#:#Visualizza questa voce -dcl#:#dcl_duplicate_non_unique_entries_exist#:#This may also concern existing records.###23 02 2024 new variable +dcl#:#dcl_duplicate_non_unique_entries_exist#:#This is not compatible with existing records.###23 02 2024 new variable dcl#:#dcl_edit#:#Modifica raccolta dati -dcl#:#dcl_edit_entry_rules#:#Entry Editing###29 07 2022 new variable +dcl#:#dcl_edit_entry_rules#:#Modifica delle voci dcl#:#dcl_edit_field#:#Modifica campo -dcl#:#dcl_edit_perm#:#Permission Edit Entry +dcl#:#dcl_edit_perm#:#Modifica autorizzazione dcl#:#dcl_edit_table#:#Modifica impostazioni tabella -dcl#:#dcl_edit_view#:#Edit Settings of View "%s"###29 10 2025 new variable -dcl#:#dcl_editable_in_table_gui#:#Si prega di votare nella visualizzazione della tabella. +dcl#:#dcl_edit_view#:#Edit Settings of View "%s"###28 11 2025 new variable +dcl#:#dcl_editable_in_table_gui#:#Si prega di votare dalla visualizzazione della tabella. dcl#:#dcl_err_formula_field_not_found#:#Non è stato trovato il campo con il titolo '%s' dcl#:#dcl_error_parsing_expression#:#Errore durante l'analisi dell'espressione dcl#:#dcl_export_enabled#:#Consenti funzione di esportazione per tutti gli utenti -dcl#:#dcl_export_enabled_desc#:#Alle Benutzer können die Daten der Tabelle selber exportieren. Dazu müssen in der Übersicht "Felder der ausgewählten Tabelle" die Felder einzeln als exportierbar ausgewählt werden. +dcl#:#dcl_export_enabled_desc#:#Tutti gli utenti possono esportare i dati nella tabella da soli. Per fare ciò, i campi devono essere selezionati individualmente come esportabili nella panoramica "Campi della tabella selezionata". dcl#:#dcl_export_finished#:#Esportazione terminata dcl#:#dcl_export_started#:#Avvio dell’esportazione asincrona -dcl#:#dcl_field_datatype#:#Field Datatype +dcl#:#dcl_field_datatype#:#Tipo di dati del campo dcl#:#dcl_field_description#:#Descrizione -dcl#:#dcl_field_description_desc#:#The description will be shown below the input field when making a new entry.###29 10 2025 new variable +dcl#:#dcl_field_description_desc#:#The description will be shown below the input field when making a new entry.###28 11 2025 new variable dcl#:#dcl_field_required#:#Richiesto dcl#:#dcl_field_title_change_warning#:#Il titolo del campo è stato modificato, per cui alcuni segnaposto nella definizione della visualizzazione potrebbero essere interrotti. Questi devono essere fissati manualmente quando possibile. dcl#:#dcl_field_title_unique#:#Esiste già un campo con questo titolo. Deve essere unico. dcl#:#dcl_field_visible#:#Visibile dcl#:#dcl_fieldtitle#:#Titolo campo -dcl#:#dcl_file#:#Fileupload###26 08 2024 new variable -dcl#:#dcl_file_desc#:#Field to upload arbitrary files. They can be downloaded with a link.###26 08 2024 new variable -dcl#:#dcl_file_format_description#:#The file needs to be an excel .XSL file with the data you want to import on the first sheet. In the first row there have to be exactly the names of the fields (case sensitive) you want to import and in the following rows you can add the values. It is strongly recommended to simulate your import first. -dcl#:#dcl_file_not_readable#:#The file could not be read. Please make sure to upload an XLS file. -dcl#:#dcl_filter#:#Filter +dcl#:#dcl_file#:#Fileupload###30 04 2024 new variable +dcl#:#dcl_file_desc#:#Field to upload arbitrary files. They can be downloaded with a link.###30 04 2024 new variable +dcl#:#dcl_file_format_description#:#Il file deve essere un file .XSL excel con i dati che si desidera importare nel primo foglio. Nella prima riga devono essere presenti esattamente i nomi dei campi (case sensitive) che si desidera importare e nelle righe seguenti è possibile aggiungere i valori. Si consiglia vivamente di simulare prima l'importazione. +dcl#:#dcl_file_not_readable#:#Impossibile leggere il file. Assicurati di caricare un file XLS. +dcl#:#dcl_filter#:#Filtro dcl#:#dcl_filter_changeable#:#Filtro modificabile dcl#:#dcl_formula#:#Formula -dcl#:#dcl_formula_desc#:#Ähnlich wie bei der Tabellenkalkulation können per Formel Einträge verbunden oder berechnet werden. +dcl#:#dcl_formula_desc#:#Simile al foglio di calcolo, le voci possono essere collegate o calcolate utilizzando una formula. dcl#:#dcl_formula_detail_desc#:#Le voci vengono generate automaticamente, tu non puoi modificare la voce. dcl#:#dcl_height#:#Altezza -dcl#:#dcl_height_desc#:#The height of the file will be reduced to this value during upload.###29 10 2025 new variable +dcl#:#dcl_height_desc#:#The height of the file will be reduced to this value during upload.###28 11 2025 new variable dcl#:#dcl_id#:#ID dcl#:#dcl_id_description#:#ID interno. dcl#:#dcl_ilias_reference#:#Collegamento a un modulo ILIAS @@ -8695,117 +8682,116 @@ dcl#:#dcl_ilias_reference_link#:#Mostra come collegamento nella tabella di visua dcl#:#dcl_import#:#Importa raccolta dati dcl#:#dcl_import_enabled#:#Consenti funzione di importazione per tutti gli utenti dcl#:#dcl_import_enabled_desc#:#Tutti gli utenti possono importare i dati nelle tabelle, purché dispongano dell'accesso in scrittura richiesto. -dcl#:#dcl_import_records .xls#:#Import .xls +dcl#:#dcl_import_records .xls#:#Importazione Excel dcl#:#dcl_import_terminated#:#L’importazione è terminata. Voci aggiunte -dcl#:#dcl_in_export#:#In Esporta +dcl#:#dcl_in_export#:#Esportabile dcl#:#dcl_invalid_regex_config#:#L'espressione regolare configurata per questo campo non è valida. Controlla le impostazioni per risolvere il problema. dcl#:#dcl_last_edit_by#:#Ultima modifica da dcl#:#dcl_last_edited_by#:#Ultima modifica da dcl#:#dcl_last_edited_by_description#:#L'utente che ha modificato questa voce per ultimo. dcl#:#dcl_last_update#:#Ultima modifica dcl#:#dcl_last_update_description#:#La data in cui è stato modificato per l’ultima volta l’accesso. -dcl#:#dcl_learning_progress#:#Show the learning progess of the linked module of the viewer -dcl#:#dcl_learning_progress_desc#:#Show each user their own learning progress for the selected object.###29 10 2025 new variable +dcl#:#dcl_learning_progress#:#Mostra l'avanzamento dell'apprendimento del modulo collegato del visualizzatore +dcl#:#dcl_learning_progress_desc#:#Show each user their own learning progress for the selected object.###28 11 2025 new variable dcl#:#dcl_legend_placeholders#:#Segnaposti dcl#:#dcl_length#:#Lunghezza -dcl#:#dcl_length_info#:#(for more than 200 characters, use the additional option Textarea) +dcl#:#dcl_length_info#:#(per più di 200 caratteri, utilizzare l'opzione aggiuntiva Textarea) dcl#:#dcl_limit_end#:#Fine dcl#:#dcl_limit_start#:#Avvio dcl#:#dcl_limited#:#Aggiungi/Modifica/Elimina periodo limitato -dcl#:#dcl_limited_desc#:#Benutzer können Einträge nur bis zum gewählten Datum hinzufügen, bearbeiten und löschen. +dcl#:#dcl_limited_desc#:#Gli utenti possono solo aggiungere, modificare ed eliminare le voci fino alla selezione dei dati. dcl#:#dcl_link_detail_page#:#Collegamento degli accessi alla pagina dei dettagli -dcl#:#dcl_link_detail_page_desc#:#Additionally, a detailed view template must have been created and activated within the tab ‘Detailed View’.###29 10 2025 new variable -dcl#:#dcl_list_fields#:#List Fields -dcl#:#dcl_list_visibility_and_filter#:#Visibility and filter###07 02 2020 new variable +dcl#:#dcl_link_detail_page_desc#:#Additionally, a detailed view template must have been created and activated within the tab ‘Detailed View’.###28 11 2025 new variable +dcl#:#dcl_list_fields#:#Elenco campi +dcl#:#dcl_list_visibility_and_filter#:#Visibilità e filtro dcl#:#dcl_locked#:#Bloccato dcl#:#dcl_locked_tooltip#:#Disabilita questo campo per gli utenti da modificare. Non include ruoli con l’autorizzazione 'Modifica impostazioni' dcl#:#dcl_manage#:#Gestisci dcl#:#dcl_max_digits#:#Numero massimo di cifre dcl#:#dcl_max_import#:#È stata raggiunta la somma massima di voci importate. dcl#:#dcl_max_text_length#:#Lunghezza massima -dcl#:#dcl_mob#:#Image -dcl#:#dcl_mob_desc#:#Möglichkeit zum Hochladen von Bild-, Audio- oder Video-Dateien, die direkt in der Datensammlung präsentiert werden. Erlaubte Dateitypen: %s +dcl#:#dcl_mob#:#Immagine +dcl#:#dcl_mob_desc#:#Possibilità di caricare file di immagini, audio o video presentati direttamente nella raccolta dati. Tipi di file consentiti: %s dcl#:#dcl_msg_field_modified#:#Campo aggiornato dcl#:#dcl_msg_fields_deleted#:#Campi eliminati dcl#:#dcl_msg_info_alternatives#:#Non si hanno autorizzazioni sufficienti per visualizzare questa registrazione o non c’è alcuna visualizzazione dettagliata per questa visualizzazione. Scegliere una visualizzazione dall’elenco seguente per visualizzare comunque la registrazione. dcl#:#dcl_msg_mc_to_sc_confirmation#:#Il passaggio da selezione multipla a selezione singola potrebbe portare alla perdita di dati nelle voci esistenti. Sei sicuro di voler continuare? -dcl#:#dcl_msg_no_perm_edit#:#No permission given to edit this record -dcl#:#dcl_msg_no_perm_view#:#No permission given to view this record +dcl#:#dcl_msg_no_perm_edit#:#Nessuna autorizzazione concessa per visualizzare questa registrazione +dcl#:#dcl_msg_no_perm_view#:#Nessuna autorizzazione concessa per visualizzare questa registrazione dcl#:#dcl_msg_table_created#:#Tabella creata dcl#:#dcl_msg_table_edited#:#Impostazioni tabella salvate dcl#:#dcl_msg_tableview_created#:#Visualizzazioni create dcl#:#dcl_msg_tableview_deleted#:#Visualizzazione eliminata dcl#:#dcl_msg_tableview_updated#:#Visualizzazione aggiornata -dcl#:#dcl_msg_tableviews_delete_all#:#Non possono essere eliminate: Deve esistere almeno una visualizzazione -dcl#:#dcl_msg_tableviews_order_updated#:#Ordine delle visualizzazioni aggiornate +dcl#:#dcl_msg_tableviews_delete_all#:#Non può essere eliminata: deve esistere almeno una visualizzazione dcl#:#dcl_multiple_selection#:#Selezione multipla dcl#:#dcl_new#:#Crea nuova raccolta dati -dcl#:#dcl_new_entries#:#New Entries###29 10 2025 new variable +dcl#:#dcl_new_entries#:#New Entries###28 11 2025 new variable dcl#:#dcl_new_field#:#Nuovo campo dcl#:#dcl_new_table#:#Nuova tabella -dcl#:#dcl_new_view#:#New View###29 10 2025 new variable -dcl#:#dcl_next_record#:#Next record -dcl#:#dcl_no_entries#:#Action not permitted###29 10 2025 new variable -dcl#:#dcl_no_entry#:#No entry###07 02 2020 new variable -dcl#:#dcl_no_export_async_config#:#No SOAP Configuration for asyncronous exports available.###29 10 2025 new variable -dcl#:#dcl_no_export_data_available#:#Dati e campi non disponibile per l’esportazione. +dcl#:#dcl_new_view#:#New View###28 11 2025 new variable +dcl#:#dcl_next_record#:#Nuova registrazione +dcl#:#dcl_no_entries#:#Action not permitted###28 11 2025 new variable +dcl#:#dcl_no_entry#:#Nessun inserimento +dcl#:#dcl_no_export_async_config#:#No SOAP Configuration for asyncronous exports available.###20 05 2025 new variable +dcl#:#dcl_no_export_data_available#:#Dati e campi non disponibili per l’esportazione. dcl#:#dcl_no_fields_yet#:#Non sono presenti campi definiti per questa tabella, pertanto non è possibile creare ancora alcuna voce. dcl#:#dcl_no_read_access_on_any_standard_view#:#Non si dispone di accesso in lettura in una qualsiasi visualizzazione standard sulla tabella. -dcl#:#dcl_no_search_results_found_for#:#Non sono stati trovati moduli per +dcl#:#dcl_no_search_results_found_for#:#Non sono stati trovati moduli per: dcl#:#dcl_no_such_reference#:#Il seguente valore non è disponibile nella tabella di riferimento: -dcl#:#dcl_no_tableview_found#:#No visible tableview found!###29 10 2025 new variable +dcl#:#dcl_no_table_found#:#No visible table found!###28 11 2025 new variable +dcl#:#dcl_no_tableview_found#:#No visible tableview found!###08 07 2025 new variable dcl#:#dcl_not_checked#:#Non controllato. -dcl#:#dcl_not_supported_in_import#:#Questo tipo di settore non è supportato nell’importazione -dcl#:#dcl_notification_activate#:#Activate Notification for Data Collection###29 10 2025 new variable +dcl#:#dcl_not_supported_in_import#:#Questo tipo di campo non è supportato nell’importazione +dcl#:#dcl_notification_activate#:#Activate Notification for Data Collection###28 11 2025 new variable dcl#:#dcl_notification_activated#:#Notifica attivata -dcl#:#dcl_notification_deactivate#:#Deactivate Notification for Data Collection###29 10 2025 new variable +dcl#:#dcl_notification_deactivate#:#Deactivate Notification for Data Collection###28 11 2025 new variable dcl#:#dcl_notification_deactivated#:#Notifica disattivata dcl#:#dcl_notification_info#:#Ogni utente può decidere sulla notifica -dcl#:#dcl_notification_settings#:#Notification Settings###29 10 2025 new variable -dcl#:#dcl_notimage_exception#:#Il file deve essere un’immagine. -dcl#:#dcl_noturl_exception#:#You have to enter a Link (beginning with http://) -dcl#:#dcl_number#:#Integer +dcl#:#dcl_notification_settings#:#Notification Settings###28 11 2025 new variable +dcl#:#dcl_noturl_exception#:#Devi inserire un collegamento (a partire da http:// o www.) +dcl#:#dcl_number#:#Numero intero dcl#:#dcl_number_desc#:#Campo per valori interni (massimo 9 cifre). Nessun decimale o frazioni. dcl#:#dcl_online_info#:#Solo se la raccolta dati è online, allora gli utenti possono utilizzarla. -dcl#:#dcl_open_detail_view#:#Open detail view###29 10 2025 new variable -dcl#:#dcl_open_url#:#Open link###29 10 2025 new variable +dcl#:#dcl_open_detail_view#:#Open detail view###26 08 2025 new variable +dcl#:#dcl_open_url#:#Open link###26 08 2025 new variable dcl#:#dcl_order#:#Ordine -dcl#:#dcl_origin_not_found#:#Origin field was not found!###29 10 2025 new variable -dcl#:#dcl_own_entries#:#Solo le proprie voci +dcl#:#dcl_origin_not_found#:#Origin field was not found!###10 12 2024 new variable +dcl#:#dcl_own_entries#:#Solo le voci proprie dcl#:#dcl_owner#:#Proprietario -dcl#:#dcl_owner_description#:#Il proprietario dell’accesso. +dcl#:#dcl_owner_description#:#Il proprietario dell’inserimento. dcl#:#dcl_owner_name#:#Proprietario (Nome) -dcl#:#dcl_page_type_dclf#:#Details View###29 07 2022 new variable -dcl#:#dcl_placeholder_info#:#To use data from the data collection in this view, please use the corresponding placeholders. These are available in the page element 'Text' and 'Data Table'.###29 10 2025 new variable +dcl#:#dcl_page_type_dclf#:#Dettagli +dcl#:#dcl_placeholder_info#:#To use data from the data collection in this view, please use the corresponding placeholders. These are available in the page element 'Text' and 'Data Table'.###28 11 2025 new variable dcl#:#dcl_please_select#:#--- Selezionare --- dcl#:#dcl_plugin#:#Plug-in dcl#:#dcl_plugin_desc#:#Raccolta dati campo plug-in dcl#:#dcl_plugin_no_hooks_available#:#Nessun plug-in tipo di campo attivo trovato -dcl#:#dcl_prev_record#:#Previous record +dcl#:#dcl_prev_record#:#Inserimento precedente dcl#:#dcl_prop_expression#:#Espressione -dcl#:#dcl_prop_expression_info#:#Supported operators: <b>%s</b><br>Supported functions: <b>%s</b><br>Use brackets <b>"(", ")"</b> to group calculations.<br>Concatenate strings and placeholders with &: <b>"The result is " & [[Int 1]] * [[Int2]]</b><br>Using functions: <b>SUM([[Int 1]];[[Int 2]])</b><br><br>Available fields (click on title to copy field inside expression):<br>%s -dcl#:#dcl_public_comments#:#Enable public comments for records -dcl#:#dcl_public_comments_desc#:#Benutzer können Datensätze dieser Tabelle kommentieren +dcl#:#dcl_prop_expression_info#:#Operatori supportati: <b>%s</b><br> Funzioni supportate: <b>%s</b><br> Usa le parentesi <b>"(", ")"</b> per raggruppare i calcoli.<br> Concatena stringhe e segnaposto con &: <b> "Il risultato è" & [[Int 1]] * [[Int2]]</b><br> Utilizzo delle funzioni: <b>SUM([[Int 1 ]];[[Int 2]])</b><br><br> Campi disponibili (fai clic sul titolo per copiare il campo all'interno dell'espressione):<br>%s +dcl#:#dcl_public_comments#:#Abilita commenti pubblici per le registrazioni +dcl#:#dcl_public_comments_desc#:#Gli utenti possono commentare le registrazioni in questa tabella dcl#:#dcl_rating#:#Classificazione -dcl#:#dcl_rating_desc#:#Benutzer können Einträge mit bis zu fünf Sternen bewerten. -dcl#:#dcl_rbac_roles_without_read_access_on_any_standard_view#:#I seguenti ruoli di controllo basati su ruolo hanno accesso in lettura sulla raccolta dati, ma nessun accesso in lettura su una qualsiasi visualizzazione standard della tabella: -dcl#:#dcl_record#:#Record -dcl#:#dcl_record_deleted#:#Record deleted +dcl#:#dcl_rating_desc#:#Gli utenti possono valutare le voci con un massimo di cinque stelle. +dcl#:#dcl_rbac_roles_without_read_access_on_any_standard_view#:#I seguenti ruoli di controllo hanno accesso in lettura alla raccolta dati, ma nessun accesso in lettura a una qualsiasi visualizzazione standard della tabella: +dcl#:#dcl_record#:#Registrazione +dcl#:#dcl_record_deleted#:#Registrazione Cancellata dcl#:#dcl_record_from_total#:#%d di %d -dcl#:#dcl_record_settings#:#Record Settings###29 10 2025 new variable +dcl#:#dcl_record_settings#:#Record Settings###28 11 2025 new variable dcl#:#dcl_reference#:#Riferimento -dcl#:#dcl_reference_desc#:#Bereitstellen von Auswahloptionen, die in einem anderen Feld einer Tabelle gepflegt werden -dcl#:#dcl_reference_link#:#Show as link in table view +dcl#:#dcl_reference_desc#:#Fornire opzioni di selezione mantenute in un altro campo di una tabella +dcl#:#dcl_reference_link#:#Mostra come collegamento nella vista tabella dcl#:#dcl_reference_link_info#:#La visualizzazione dettagliata deve essere attiva nella tabella di riferimento -dcl#:#dcl_reference_title#:#Referenz zu Tabelle und Feld -dcl#:#dcl_reference_title_desc#:#The data entries of the selected field will be the selectable options in this field.###29 10 2025 new variable +dcl#:#dcl_reference_title#:#Riferimento a tabella e campo +dcl#:#dcl_reference_title_desc#:#The data entries of the selected field will be the selectable options in this field.###28 11 2025 new variable dcl#:#dcl_regex#:#Espressione regolare -dcl#:#dcl_regex_info#:#(senza delimitatore) +dcl#:#dcl_regex_info#:#Inserimento senza delimitatore dcl#:#dcl_required#:#Campo richiesto dcl#:#dcl_row_not_found#:# - Questo campo non può essere trovato nella tabella. -dcl#:#dcl_save_confirmation#:#Salva conferma +dcl#:#dcl_save_confirmation#:#Conferma di salvataggio dcl#:#dcl_save_confirmation_desc#:#Gli utenti devono confermare la nuova voce Raccolta dati. -dcl#:#dcl_save_order#:#Salva ordine +dcl#:#dcl_save_order#:#Salva ordinamento dcl#:#dcl_select#:#Seleziona per la presentazione dcl#:#dcl_selection_options#:#Opzioni dcl#:#dcl_selection_type#:#Tipo @@ -8813,118 +8799,120 @@ dcl#:#dcl_selection_type_combobox#:#Casella combinata (Menu a tendina) dcl#:#dcl_selection_type_multi#:#Selezione multipla dcl#:#dcl_selection_type_single#:#Selezione singola dcl#:#dcl_simulate_import#:#Simula importazione -dcl#:#dcl_simulate_info#:#La simulazione dell’importazione non aggiungerà alcun campo alla raccolta dati, ma potrebbe fornire un feedback sui problemi con l’importazione del file per evitare accessi danneggiati. -dcl#:#dcl_skipped_delete_records#:#%s records were not deleted due to permission settings +dcl#:#dcl_simulate_info#:#La simulazione dell’importazione non aggiungerà alcun campo alla raccolta dati, ma potrebbe fornire un feedback sui problemi di importazione del file per evitare accessi danneggiati. +dcl#:#dcl_skipped_delete_records#:#%s registrazioni non sono stati eliminate a causa delle impostazioni di autorizzazione dcl#:#dcl_status#:#Il tuo stato dcl#:#dcl_std_field_not_importable#:# - I campi standard non possono essere importati. -dcl#:#dcl_std_filter#:#Standard filtro +dcl#:#dcl_std_filter#:#Filtro standard dcl#:#dcl_supported_filetypes#:#Consenti estensione file dcl#:#dcl_supported_filetypes_desc#:#È possibile impostare le estensioni consentite separate dalla virgola. Per esempio: pdf, docx -dcl#:#dcl_switch_table#:#Switch Table###26 08 2024 new variable -dcl#:#dcl_switch_view#:#Change View###26 08 2024 new variable +dcl#:#dcl_switch_table#:#Switch Table###30 04 2024 new variable +dcl#:#dcl_switch_view#:#Change View###30 04 2024 new variable dcl#:#dcl_table#:#Tabella dcl#:#dcl_table_id#:#ID tabella -dcl#:#dcl_table_list_fields#:#List Fields of current Table +dcl#:#dcl_table_list_fields#:#Campi della tabella selezionata dcl#:#dcl_table_list_tables#:#Tabelle disponibili -dcl#:#dcl_table_settings#:#Table Settings.###29 10 2025 new variable +dcl#:#dcl_table_settings#:#Table Settings.###28 11 2025 new variable dcl#:#dcl_table_settings_saved#:#Le impostazioni di tabella sono state salvate. dcl#:#dcl_table_title_not_matching#:#I titoli del foglio Excel e della tabella raccolta dati non corrispondono. Rinomina il foglio per un’importazione con successo. -dcl#:#dcl_table_title_unique#:#Esiste già una tabella con questo titolo. Deve essere unico. +dcl#:#dcl_table_title_unique#:#Esiste già una tabella con questo titolo. dcl#:#dcl_tables#:#Tabelle dcl#:#dcl_tableview#:#Visualizzazione dcl#:#dcl_tableview_add#:#Aggiungi nuova visualizzazione dcl#:#dcl_tableview_confirm_delete#:#Vuoi davvero eliminare le seguenti visualizzazione? -dcl#:#dcl_tableview_copy#:#View successfully copied###29 07 2022 new variable -dcl#:#dcl_tableview_default_value#:#Default Value###29 07 2022 new variable -dcl#:#dcl_tableview_default_value_fail#:#Some numeric default values couldn't be saved because they contained letters. Please try again.###29 07 2022 new variable -dcl#:#dcl_tableview_field_access#:#Field Access###29 07 2022 new variable +dcl#:#dcl_tableview_copy#:#Visualizzazione copiata correttamente +dcl#:#dcl_tableview_default_value#:#Valore di default +dcl#:#dcl_tableview_default_value_fail#:#Alcuni valori numerici predefiniti non possono essere salvati perché contenevano lettere. Per favore riprova. +dcl#:#dcl_tableview_field_access#:#Accesso al campo dcl#:#dcl_tableview_fieldsettings#:#Impostazioni specifiche del campo -dcl#:#dcl_tableview_fieldtitle#:#Field Title###29 07 2022 new variable -dcl#:#dcl_tableview_locked#:#Locked###29 07 2022 new variable -dcl#:#dcl_tableview_locked_visible#:#Locked & Visible###29 07 2022 new variable -dcl#:#dcl_tableview_not_visible#:#Not Visible###29 07 2022 new variable -dcl#:#dcl_tableview_required#:#Required###29 07 2022 new variable -dcl#:#dcl_tableview_required_visible#:#Required & Visible###29 07 2022 new variable -dcl#:#dcl_tableview_visible#:#Visible###29 07 2022 new variable +dcl#:#dcl_tableview_fieldtitle#:#Titolo del campo +dcl#:#dcl_tableview_locked#:#Bloccato +dcl#:#dcl_tableview_locked_visible#:#Bloccato & Visibile +dcl#:#dcl_tableview_not_visible#:#Non Visibile +dcl#:#dcl_tableview_required#:#Richiesto +dcl#:#dcl_tableview_required_visible#:#Richiesto & visibile +dcl#:#dcl_tableview_visible#:#Visibile dcl#:#dcl_tableviews#:#Visualizzazioni dcl#:#dcl_tableviews_confirm_delete#:#Vuoi davvero eliminare le seguenti visualizzazioni? -dcl#:#dcl_tableviews_of_X#:#Views of table %s###26 08 2024 new variable +dcl#:#dcl_tableviews_of_X#:#Views of table %s###28 11 2025 new variable dcl#:#dcl_tableviews_table#:#Visualizzazioni della tabella selezionata -dcl#:#dcl_text#:#Text -dcl#:#dcl_text_desc#:#Eingabefeld für Text, Links oder E-Mail-Adressen +dcl#:#dcl_text#:#Testo +dcl#:#dcl_text_desc#:#Campo di immissione per testo, collegamenti o indirizzi e-mail dcl#:#dcl_text_email_detail_desc#:#Digita un URL o un indirizzo e-mail valido. dcl#:#dcl_text_email_title#:#Titolo -dcl#:#dcl_text_email_title_info#:#Un titolo per l’URL p l’indirizzo email in alto (opzionale). +dcl#:#dcl_text_email_title_info#:#Un titolo per l’URL o l’indirizzo email in alto (opzionale). dcl#:#dcl_text_selection#:#Selezione del testo dcl#:#dcl_text_selection_desc#:#Offerta selezione di opzioni di testo. -dcl#:#dcl_title_standardview#:#Standard Views +dcl#:#dcl_title_standardview#:#Visione predefinita dcl#:#dcl_unique#:#Unico -dcl#:#dcl_unique_desc#:#In dieses Feld kann ein gleichlautender Eintrag nur einmal vorgenommen werden. -dcl#:#dcl_unique_exception#:#The value you entered is already taken by another record. -dcl#:#dcl_unknown#:#Unkown###29 10 2025 new variable +dcl#:#dcl_unique_desc#:#Il valore in questo campo deve essere unico tra tutte le voci. +dcl#:#dcl_unique_exception#:#Il valore inserito è già preso da un'altra registrazione. +dcl#:#dcl_unknown#:#Unkown###20 05 2025 new variable dcl#:#dcl_unknown_exception#:#Il valore che hai digitato non è valido. -dcl#:#dcl_unknown_plugin#:#Unknown plugin type###29 10 2025 new variable +dcl#:#dcl_unknown_plugin#:#Unknown plugin type###20 05 2025 new variable dcl#:#dcl_update_field#:#Aggiorna campo -dcl#:#dcl_update_record#:#Update Record -dcl#:#dcl_updated_entries#:#Updated Entries###29 10 2025 new variable +dcl#:#dcl_update_record#:#Aggiorna voce +dcl#:#dcl_updated_entries#:#Updated Entries###28 11 2025 new variable dcl#:#dcl_url#:#URL -dcl#:#dcl_view_configuration#:#View Configuration###29 07 2022 new variable +dcl#:#dcl_view_configuration#:#Vedi configurazione dcl#:#dcl_view_own_records_perm#:#Visualizza solo i propri accessi -dcl#:#dcl_view_own_records_perm_desc#:#The entries of other users are not visible.###29 10 2025 new variable -dcl#:#dcl_view_viewdefinition#:#Viewdefinition -dcl#:#dcl_visible#:#Visible in Table -dcl#:#dcl_visible_desc#:#Benutzer können diese Tabelle über das Auswahlmenü "Tabelle" aufrufen. +dcl#:#dcl_view_own_records_perm_desc#:#The entries of other users are not visible.###28 11 2025 new variable +dcl#:#dcl_view_viewdefinition#:#Vedi definizione +dcl#:#dcl_visible#:#Visibile nella tabella +dcl#:#dcl_visible_desc#:#Gli utenti possono accedere a questa tabella dal menu di selezione "Tabella". dcl#:#dcl_width#:#Larghezza -dcl#:#dcl_width_desc#:#The width of the file will be reduced to this value during upload.###29 10 2025 new variable +dcl#:#dcl_width_desc#:#The width of the file will be reduced to this value during upload.###28 11 2025 new variable dcl#:#dcl_wrong_input_type#:#Il valore che hai digitato non corrisponde alla specifica (Tipo errato). dcl#:#dcl_wrong_length#:#Il testo che hai digitato è troppo lungo. dcl#:#dcl_wrong_regex#:#Il testo che hai digitato non corrisponde alla specifica per questo campo (Espressione regolare). -dcl#:#dcl_xls_async_export#:#Asynchronous XLSX-Export###26 08 2024 new variable -dcl#:#disable_comments#:#Disable comments###26 08 2024 new variable -dcl#:#disable_visible#:#Disable visible###26 08 2024 new variable -dcl#:#duplicate_entries_exist#:#The existing records already contain duplicated entries.###29 10 2025 new variable -dcl#:#enable_comments#:#Enable comments###26 08 2024 new variable -dcl#:#enable_visible#:#Enable visible###26 08 2024 new variable -dcl#:#entry_of#:#Entry %1$d of %2$d###26 08 2024 new variable -dcl#:#fieldtitle_allow_chars#:#Allowed chars: %s -dcl#:#fileupload_not_migrated#:#File has not yet been migration and cannot be displayed. Please contact your System-Administrator.###26 08 2024 new variable -dcl#:#role_limitation#:#Role-based View Limitation###29 10 2025 new variable -dcl#:#roles#:#Roles with Access###29 10 2025 new variable -dcl#:#roles_desc#:#Define wich roles have access to the view.###29 10 2025 new variable -dcl#:#set_as_default#:#Set as default###26 08 2024 new variable +dcl#:#dcl_xls_async_export#:#as XLSX (asynchronous)###20 05 2025 new variable +dcl#:#disable_comments#:#Disable comments###28 11 2025 new variable +dcl#:#disable_visible#:#Disable visible###28 11 2025 new variable +dcl#:#duplicate_entries_exist#:#The existing records already contain duplicated entries.###28 11 2025 new variable +dcl#:#enable_comments#:#Enable comments###28 11 2025 new variable +dcl#:#enable_visible#:#Enable visible###28 11 2025 new variable +dcl#:#entry_of#:#Entry %1$d of %2$d###28 11 2025 new variable +dcl#:#fieldtitle_allow_chars#:#Caratteri consentiti: %s +dcl#:#fileupload_not_migrated#:#File has not yet been migration and cannot be displayed. Please contact your System-Administrator.###30 04 2024 new variable +dcl#:#role_limitation#:#Role-based View Limitation###28 11 2025 new variable +dcl#:#roles#:#Roles with Access###28 11 2025 new variable +dcl#:#roles_desc#:#Define wich roles have access to the view.###28 11 2025 new variable +dcl#:#set_as_default#:#Set as default###28 11 2025 new variable +dcl#:#table_not_found#:#Table not found!###28 11 2025 new variable +dcl#:#tableview_not_found#:#Tableview not found!###28 11 2025 new variable didactic#:#activate_exclusive_template#:#Grigio predefinito -didactic#:#activate_exclusive_template_info#:#Questo modello standard non sarà disponibile ovunque sia attivo questo modello. +didactic#:#activate_exclusive_template_info#:#Questo modello standard non sarà disponibile dove è attivo questo modello. didactic#:#activate_local_didactic_template#:#Ambito di applicazione didactic#:#activate_local_didactic_template_info#:#L’utilizzo di questo modello didattico sarà limitato a queste sottozone. -didactic#:#didactic_activated_msg#:#Modelli didattici attivati -didactic#:#didactic_adm_tab#:#Didactic -didactic#:#didactic_applicable_for#:#Applicalble for +didactic#:#didactic_activated_msg#:#I modelli didattici selezionati sono stati attivati +didactic#:#didactic_adm_tab#:#Modelli didattici +didactic#:#didactic_applicable_for#:#Applicabile per didactic#:#didactic_auto_generated#:#Generato automaticamente didactic#:#didactic_available_templates#:#Modelli didattici disponibili didactic#:#didactic_back_to_overview#:#Torna al sommario didactic#:#didactic_cannot_delete_auto_generated#:#Non è consentito eliminare i modelli didattici generati automaticamente. didactic#:#didactic_cannot_delete_auto_generated_confirmation#:#Almeno uno dei modelli didattici selezionati è generato automaticamente e non può essere eliminato. -didactic#:#didactic_confirm_apply_new_template#:#Vuoi davvero applicare il modello didattico scelto? Tutte le impostazioni di autorizzazione correnti andranno perse! +didactic#:#didactic_confirm_apply_new_template#:#Vuoi davvero applicare il modello didattico scelto? Tutte le impostazioni di autorizzazione corrente andranno perse! didactic#:#didactic_confirm_delete_msg#:#Vuoi davvero eliminare i seguenti modelli didattici? didactic#:#didactic_copy_suc_message#:#Modelli didattici copiati didactic#:#didactic_deactivated_msg#:#Modelli didattici disattivati didactic#:#didactic_default_type#:#Impostazione predefinita -didactic#:#didactic_default_type_info#:#Uses default permissions for %s -didactic#:#didactic_delete_msg#:#Deleted didactical templates. +didactic#:#didactic_default_type_info#:#Utilizza le autorizzazioni predefinite per %s +didactic#:#didactic_delete_msg#:#Modelli didattici eliminati. didactic#:#didactic_do_export#:#Esporta didactic#:#didactic_edit_tpl#:#Modifica modelli didattici -didactic#:#didactic_filter_with_icon#:#with Icon###29 07 2022 new variable -didactic#:#didactic_filter_without_icon#:#without Icon###29 07 2022 new variable -didactic#:#didactic_global#:#Global###29 07 2022 new variable -didactic#:#didactic_icon#:#Icon###29 07 2022 new variable -didactic#:#didactic_icon_error#:#Icons cannot be assigned to non-container objects.###29 07 2022 new variable -didactic#:#didactic_icon_info#:#The Icon is shown for all objects, which use this object template. "Custom Icons" of objects overwrite the didactic template icons. Icons can only be used for didactic templates assigned to container objects.###29 07 2022 new variable +didactic#:#didactic_filter_with_icon#:#Con icona +didactic#:#didactic_filter_without_icon#:#Senza icona +didactic#:#didactic_global#:#Globale +didactic#:#didactic_icon#:#Icona +didactic#:#didactic_icon_error#:#Le icone non possono essere assegnate a oggetti non contenitori. +didactic#:#didactic_icon_info#:#L'icona viene mostrata per tutti gli oggetti che utilizzano questo modello di oggetto. Le "icone personalizzate" degli oggetti sovrascrivono le icone dei modelli didattici. Le icone possono essere utilizzate solo per modelli didattici assegnati a oggetti contenitore. didactic#:#didactic_import_btn#:#Importa modelli didattici -didactic#:#didactic_import_failed#:#Importing the didactical template failed with message: -didactic#:#didactic_import_success#:#Successfully imported didactical template +didactic#:#didactic_import_failed#:#L'importazione del modello didattico non è riuscita: +didactic#:#didactic_import_success#:#Modello didattico importato correttamente didactic#:#didactic_import_table_title#:#Importazione di un modello didattico didactic#:#didactic_install_info#:#Informazioni generali -didactic#:#didactic_local#:#Local###29 07 2022 new variable +didactic#:#didactic_local#:#Locale didactic#:#didactic_not_changed#:#L'impostazione del modello didattico è invariata. didactic#:#didactic_scope#:#Ambito didactic#:#didactic_scope_list_header#:#Limitato a: @@ -8939,23 +8927,23 @@ didactic#:#grp_closed_info#:#Il gruppo non è visibile ai non iscritti. didactic#:#more_translations#:#Ulteriori traduzioni didactic#:#sess_closed#:#Sessione chiusa didactic#:#sess_closed_info#:#La sessione non è visibile per i non-partecipanti. -dpro#:#dpro_accept_usr_agreement_anonymous#:#Declaration of Data Protection###26 08 2024 new variable -dpro#:#dpro_accept_usr_agreement_anonymous_intro#:#Before you proceed to ILIAS you accept the following Declaration of Data Protection.###26 08 2024 new variable -dpro#:#dpro_account_reg_not_possible#:#Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your <a href="%1$s">system administrator</a> for further information.###26 08 2024 new variable -dpro#:#dpro_agree_date#:#Declaration of Data Protection agreed on###26 08 2024 new variable -dpro#:#dpro_last_reset_date#:#The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents.###26 08 2024 new variable -dpro#:#dpro_mode#:#Agreement Mode###26 08 2024 new variable -dpro#:#dpro_mode_desc#:#Please configure when and how the Declaration of Data Protection should be accepted.###26 08 2024 new variable -dpro#:#dpro_no_acceptance#:#Never, only informative###26 08 2024 new variable -dpro#:#dpro_no_documents_exist#:#There are currently no Declaration of Data Protection documents available.###26 08 2024 new variable -dpro#:#dpro_no_documents_exist_cant_save#:#There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service.###26 08 2024 new variable -dpro#:#dpro_once#:#Accept once###26 08 2024 new variable -dpro#:#dpro_reset_for_all_users#:#Reset the Declaration of Data Protection###26 08 2024 new variable -dpro#:#dpro_status_enable#:#Enable the Declaration of Data Protection###26 08 2024 new variable -dpro#:#dpro_status_enable_desc#:#Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS.###26 08 2024 new variable -dpro#:#dpro_sure_reset_tos#:#Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services.###26 08 2024 new variable -dpro#:#dpro_withdrawal_usr_deletion#:#Account deletion upon Declaration of Data Protection withdrawal###26 08 2024 new variable -dpro#:#dpro_withdrawal_usr_deletion_desc#:#If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account.###26 08 2024 new variable +dpro#:#dpro_accept_usr_agreement_anonymous#:#Declaration of Data Protection###18 06 2024 new variable +dpro#:#dpro_accept_usr_agreement_anonymous_intro#:#Before you proceed to ILIAS you accept the following Declaration of Data Protection.###18 06 2024 new variable +dpro#:#dpro_account_reg_not_possible#:#Self-registration is currently not possible because there is no Declaration of Data Protection agreement available. Please contact your <a href="%1$s">system administrator</a> for further information.###30 04 2024 new variable +dpro#:#dpro_agree_date#:#Declaration of Data Protection agreed on###30 04 2024 new variable +dpro#:#dpro_last_reset_date#:#The Declaration of Data Protection were reset on %s. Only reset the Declaration of Data Protection if changes have been made to the document(s) and you require all users to agree to the documents.###30 04 2024 new variable +dpro#:#dpro_mode#:#Agreement Mode###30 04 2024 new variable +dpro#:#dpro_mode_desc#:#Please configure when and how the Declaration of Data Protection should be accepted.###30 04 2024 new variable +dpro#:#dpro_no_acceptance#:#Never, only informative###30 04 2024 new variable +dpro#:#dpro_no_documents_exist#:#There are currently no Declaration of Data Protection documents available.###30 04 2024 new variable +dpro#:#dpro_no_documents_exist_cant_save#:#There are currently no Declaration of Data Protection documents available. Please add at least one document in order to activate this service.###30 04 2024 new variable +dpro#:#dpro_once#:#Accept once###30 04 2024 new variable +dpro#:#dpro_reset_for_all_users#:#Reset the Declaration of Data Protection###30 04 2024 new variable +dpro#:#dpro_status_enable#:#Enable the Declaration of Data Protection###30 04 2024 new variable +dpro#:#dpro_status_enable_desc#:#Display relevant language-based Declaration of Data Protection documents at the end of the registration form for new users and, if applicable, upon the user’s first login. Users are required to accept the Declaration of Data Protection before they can enter ILIAS.###30 04 2024 new variable +dpro#:#dpro_sure_reset_tos#:#Are you sure you want to reset the Declaration of Data Protection for all users in the system? This also applies, for example, to those accounts that are used for the SOAP web services.###30 04 2024 new variable +dpro#:#dpro_withdrawal_usr_deletion#:#Account deletion upon Declaration of Data Protection withdrawal###30 04 2024 new variable +dpro#:#dpro_withdrawal_usr_deletion_desc#:#If a user withdraws their acceptance from a previously accepted Declaration of Data Protection document, this will result in the deletion of the user’s account.###30 04 2024 new variable ecs#:#cert_serial#:#Numero di serie del certificato ecs#:#ecs_abr#:#Abbreviazione ecs#:#ecs_account_duration#:#Estensione del periodo di attivazione @@ -8974,13 +8962,13 @@ ecs#:#ecs_auth_type_apache#:#Nome utente/Password ecs#:#ecs_auth_type_cert#:#Certificato base ecs#:#ecs_availability#:#Disponibilita' ecs#:#ecs_available_ecs#:#ECS disponibile -ecs#:#ecs_back_settings#:#Setting ECS +ecs#:#ecs_back_settings#:#Impostazioni ECS ecs#:#ecs_ca_cert#:#Certificato CA ecs#:#ecs_campus_connect_title#:#CampusConnect Mappings ecs#:#ecs_cat_export#:#Release Categoria ecs#:#ecs_cat_export_disabled#:#Non rilasciare questa categoria ecs#:#ecs_cat_export_enabled#:#Sbolla questa categoria -ecs#:#ecs_cat_export_obj_settings#:#Setting di Release Categoria +ecs#:#ecs_cat_export_obj_settings#:#Settaggi di Release Categoria ecs#:#ecs_cat_mapping_by_type#:#Per tipo ecs#:#ecs_cat_mapping_by_type_info#:#Scegli questo modo per assegnare per oggetto. ecs#:#ecs_cat_mapping_duration#:#Intervallo di date @@ -9030,35 +9018,35 @@ ecs#:#ecs_cmap_multiple_atts#:#Attributi multipli ecs#:#ecs_cmap_overview#:#Sommario mappatura ecs#:#ecs_cms_dir_tree#:#Albero delle Directory CMS ecs#:#ecs_cms_directory_trees_tbl#:#Albero delle Directory CMS -ecs#:#ecs_cms_id#:#Root-Id in the Campus-Managment-System -ecs#:#ecs_cms_tree_deleted#:#The campus managment tree assignments have been deleted. +ecs#:#ecs_cms_id#:#Identificatore di ROOT (Root-Id) +ecs#:#ecs_cms_tree_deleted#:#Le assegnazioni della struttura di gestione del campus sono state eliminate. ecs#:#ecs_cms_tree_synchronize#:#Sincronizza struttura ecs#:#ecs_cms_tree_synchronized#:#La struttura è stata sincronizzata. ecs#:#ecs_communities#:#Partecipanti ecs#:#ecs_confirm_delete_tree#:#Confermi la cancellazione di tutte le assegnazioni per l'albero di management campus? ecs#:#ecs_connection_settings#:#Settaggi di connessione -ecs#:#ecs_consent_modal_btn_accept#:#Agree and Proceed###29 10 2025 new variable -ecs#:#ecs_consent_modal_title#:#Consent for data transfer###26 08 2024 new variable -ecs#:#ecs_consent_reset_confirm_title#:#Reset user consent for this participant###26 08 2024 new variable -ecs#:#ecs_cron_task_scheduler#:#ECS Task Scheduler###07 02 2020 new variable -ecs#:#ecs_cron_task_scheduler_info#:#ECS tasks will be executed according to the schedule settings. Only neccessary, if ECS servers are configured.###07 02 2020 new variable +ecs#:#ecs_consent_modal_btn_accept#:#Agree and Proceed###28 11 2025 new variable +ecs#:#ecs_consent_modal_title#:#Consent for data transfer###30 04 2024 new variable +ecs#:#ecs_consent_reset_confirm_title#:#Reset user consent for this participant###30 04 2024 new variable +ecs#:#ecs_cron_task_scheduler#:#Utilità di pianificazione ECS +ecs#:#ecs_cron_task_scheduler_info#:#Le attività ECS verranno eseguite in base alle impostazioni di pianificazione. Necessario solo se i server ECS sono configurati. ecs#:#ecs_crs_alloc#:#Allocazione Corso -ecs#:#ecs_crs_alloc_set#:#Edita allocazione corsi -ecs#:#ecs_crs_export#:#Release Corso +ecs#:#ecs_crs_alloc_set#:#Modifica allocazione corsi +ecs#:#ecs_crs_export#:#Autorizzazione corso ecs#:#ecs_crs_export_disabled#:#Non rilasciare questo Corso ecs#:#ecs_crs_export_enabled#:#Rilascia questo Corso -ecs#:#ecs_crs_export_obj_settings#:#Setting di release Corso +ecs#:#ecs_crs_export_obj_settings#:#Impostazioni autorizzazioni corsi ecs#:#ecs_deactivate#:#Disattiva ecs#:#ecs_delete_setting#:#Sei sicuro di voler cancellare il seguente ECS? -ecs#:#ecs_deprecated_token#:#Supporto per token di autenticazione sconsigliato +ecs#:#ecs_deprecated_token#:#Supporto per token di autenticazione scaduti ecs#:#ecs_deprecated_token_info#:#Offre supporto per installazioni (ad esempio, installazioni ILIAS della versione 4. x) che utilizzano un meccanismo di autenticazione token sconsigliato. ecs#:#ecs_dir_alloc#:#Allocazione Directory -ecs#:#ecs_dir_alloc_set#:#Edita allocazione directory +ecs#:#ecs_dir_alloc_set#:#Modifica allocazione directory ecs#:#ecs_dns#:#Nome del dominio ecs#:#ecs_duration#:#Durata ecs#:#ecs_econ_rcp#:#Notifiche su nuovo E-Content ecs#:#ecs_econ_rcp_info#:#Inserisci uno o piu' nomi utente di login (separati da virgola), che saranno informati via email, su nuovi contenuti di tipo ECS. -ecs#:#ecs_edit_category_mapping#:#Attribuzione di editing +ecs#:#ecs_edit_category_mapping#:#Modifica attribuzioni ecs#:#ecs_email#:#E-Mail ecs#:#ecs_enable_participant#:#Permetti Import/Export ecs#:#ecs_err_invalid_by_type#:#Selezionare un tipo quando si assegna per tipo. @@ -9068,17 +9056,17 @@ ecs#:#ecs_err_missing_value#:#Per favore controlla l'input: Valori Attribuiti.<b ecs#:#ecs_error_extract_serial#:#Impossibile leggere il numero di serie del certificato. Per favore controllare il percorso del certificato cliente. ecs#:#ecs_event_appointment#:#Data Evento ecs#:#ecs_export#:#Versioni del Corso -ecs#:#ecs_export_auth_type#:#Authentication method for users with external user attribute###26 08 2024 new variable -ecs#:#ecs_export_auth_type_ilias#:#User authentication via LDAP###26 08 2024 new variable -ecs#:#ecs_export_auth_type_info#:#Please choose the authentication method for users to authenticate via ECS, for whom an external user attribute was transferred via ECS.###26 08 2024 new variable -ecs#:#ecs_export_auth_type_none#:#Do not allow users with external user attribute###26 08 2024 new variable -ecs#:#ecs_export_auth_type_oidc#:#User authentication via OpenID Connect###29 10 2025 new variable -ecs#:#ecs_export_auth_type_shib#:#User authentication via Shibboleth###26 08 2024 new variable +ecs#:#ecs_export_auth_type#:#Authentication method for users with external user attribute###30 04 2024 new variable +ecs#:#ecs_export_auth_type_ilias#:#User authentication via LDAP###30 04 2024 new variable +ecs#:#ecs_export_auth_type_info#:#Please choose the authentication method for users to authenticate via ECS, for whom an external user attribute was transferred via ECS.###30 04 2024 new variable +ecs#:#ecs_export_auth_type_none#:#Do not allow users with external user attribute###30 04 2024 new variable +ecs#:#ecs_export_auth_type_oidc#:#User authentication via OpenID Connect###28 11 2025 new variable +ecs#:#ecs_export_auth_type_shib#:#User authentication via Shibboleth###30 04 2024 new variable ecs#:#ecs_export_created_body_a#:#Un nuovo corso e' stato rilasciato ecs#:#ecs_export_disabled#:#Non rilasciare questo Corso ecs#:#ecs_export_enabled#:#Rilascia questo Corso -ecs#:#ecs_export_local_account#:#Local ILIAS accounts###26 08 2024 new variable -ecs#:#ecs_export_local_account_info#:#If enabled, will allow the creation of local accounts via ECS. ECS users without external user attribute will receive a local user account on your installation.###26 08 2024 new variable +ecs#:#ecs_export_local_account#:#Local ILIAS accounts###30 04 2024 new variable +ecs#:#ecs_export_local_account_info#:#If enabled, will allow the creation of local accounts via ECS. ECS users without external user attribute will receive a local user account on your installation.###30 04 2024 new variable ecs#:#ecs_export_obj_settings#:#Settaggi del Corso rilasciato ecs#:#ecs_export_types#:#Tipi di oggetto esportabili ecs#:#ecs_field_begin#:#Inizio @@ -9097,14 +9085,14 @@ ecs#:#ecs_field_start#:#Inizio ecs#:#ecs_field_study_courses#:#Corso (i) di studio ecs#:#ecs_field_term#:#Termine ecs#:#ecs_field_time#:#tempo -ecs#:#ecs_file_export#:#Release File +ecs#:#ecs_file_export#:#File di rilascio ecs#:#ecs_file_export_disabled#:#Non rilasciare questo File ecs#:#ecs_file_export_enabled#:#Sblocca questo file -ecs#:#ecs_file_export_obj_settings#:#Setting di Release File -ecs#:#ecs_firstname#:#First name###26 08 2024 new variable -ecs#:#ecs_form_consent#:#Consent###26 08 2024 new variable -ecs#:#ecs_form_consent_option_title#:#I hereby consent to the transfer of the following data to the above-mentioned target system:###26 08 2024 new variable -ecs#:#ecs_form_target_platform#:#Target system###26 08 2024 new variable +ecs#:#ecs_file_export_obj_settings#:#Impostazione del file di rilascio +ecs#:#ecs_firstname#:#First name###30 04 2024 new variable +ecs#:#ecs_form_consent#:#Consent###30 04 2024 new variable +ecs#:#ecs_form_consent_option_title#:#I hereby consent to the transfer of the following data to the above-mentioned target system:###30 04 2024 new variable +ecs#:#ecs_form_target_platform#:#Target system###30 04 2024 new variable ecs#:#ecs_general_info#:#Informazioni Generali ecs#:#ecs_glo_export#:#Release Glossario ecs#:#ecs_glo_export_disabled#:#Non rilasciare questo Glossario @@ -9114,36 +9102,36 @@ ecs#:#ecs_global_role_info#:#Il ruolo scelto sara' attribuito ai nuovi account u ecs#:#ecs_grp_export#:#Rilascio Gruppo ecs#:#ecs_grp_export_disabled#:#Non rilasciare questo Gruppo ecs#:#ecs_grp_export_enabled#:#Sblocca questo gruppo -ecs#:#ecs_grp_export_obj_settings#:#Setting di Rilascio Gruppo +ecs#:#ecs_grp_export_obj_settings#:#Impostazioni di Rilascio Gruppo ecs#:#ecs_ignore_field#:#Disabilitare l'esportazione o l'aggiornamento di questo campo ecs#:#ecs_import#:#Importa -ecs#:#ecs_import_auth_mode#:#Allow accounts of authentication method %s for transmission via ECS###26 08 2024 new variable -ecs#:#ecs_import_auth_type_default#:#Allow accounts authentication method "Default" for transmission via ECS###26 08 2024 new variable -ecs#:#ecs_import_cms#:#Management Campus +ecs#:#ecs_import_auth_mode#:#Allow accounts of authentication method %s for transmission via ECS###30 04 2024 new variable +ecs#:#ecs_import_auth_type_default#:#Allow accounts authentication method "Default" for transmission via ECS###30 04 2024 new variable +ecs#:#ecs_import_cms#:#Gestione Campus ecs#:#ecs_import_id#:#Importa ID ecs#:#ecs_import_id_info#:#Per favore inserisci la ID della categoria dove il nuovo Corso-Link sara' creato. ecs#:#ecs_import_types#:#Tipi di oggetto importabili -ecs#:#ecs_import_user_credentials_by_auth_mode#:#Configuration of authentication methods for transmission via ECS###26 08 2024 new variable -ecs#:#ecs_import_user_credentials_by_auth_mode_info#:#Enable this option to allow accounts of authentication method "Default" to access participant's resources via ECS.###26 08 2024 new variable +ecs#:#ecs_import_user_credentials_by_auth_mode#:#Configuration of authentication methods for transmission via ECS###30 04 2024 new variable +ecs#:#ecs_import_user_credentials_by_auth_mode_info#:#Enable this option to allow accounts of authentication method "Default" to access participant's resources via ECS.###30 04 2024 new variable ecs#:#ecs_imported_content#:#E-Content importato ecs#:#ecs_imported_from#:#Importato da -ecs#:#ecs_institution#:#Institution###26 08 2024 new variable +ecs#:#ecs_institution#:#Institution###30 04 2024 new variable ecs#:#ecs_invalid_import_type_cms#:#L'import di tipo "Campus Management" puo'essere usato una sola volta ecs#:#ecs_key_password#:#Chiave Password -ecs#:#ecs_lastname#:#Last name###26 08 2024 new variable +ecs#:#ecs_lastname#:#Last name###30 04 2024 new variable ecs#:#ecs_lm_export#:#Release di Modulo ecs#:#ecs_lm_export_disabled#:#Non rilasciare questo Modulo ecs#:#ecs_lm_export_enabled#:#Rilascia questo modulo -ecs#:#ecs_lm_export_obj_settings#:#Setting di Rilascio di Modulo +ecs#:#ecs_lm_export_obj_settings#:#Impostazioni di Rilascio di Modulo ecs#:#ecs_local_information#:#Ulteriori Informazioni ecs#:#ecs_local_settings#:#Settaggi Locali -ecs#:#ecs_login#:#Username or External user account###26 08 2024 new variable +ecs#:#ecs_login#:#Username or External user account###30 04 2024 new variable ecs#:#ecs_mapping_crs#:#Mapping dei corsi ecs#:#ecs_mapping_exp_tbl#:#Mapping dei Metadata Avanzati ILIAS verso i Dati ECS ecs#:#ecs_mapping_rcrs#:#Mapping dei corsi ECS ecs#:#ecs_mapping_tbl#:#Mapping dei dati ECS a Metadata Avanzati ILIAS ecs#:#ecs_mappings#:#Mappatura dati ECS -ecs#:#ecs_member_auth_type#:#Course Member Auth Mode +ecs#:#ecs_member_auth_type#:#Modalità di autenticazione dei membri del corso ecs#:#ecs_meta_data#:#Metadati ecs#:#ecs_new_approval_subject#:#Un nuovo corso e' stato rilasciato ecs#:#ecs_new_category_mapping#:#Nuova attribuzione di Corsi- Link a categorie @@ -9163,20 +9151,20 @@ ecs#:#ecs_node_mapping_status_3#:#Non mappato ecs#:#ecs_not_configured#:#Non configurato ecs#:#ecs_not_published#:#Approvazioni non selezionate ecs#:#ecs_notifications#:#Notifiche -ecs#:#ecs_outgoing_user_credentials#:#User attribute###26 08 2024 new variable -ecs#:#ecs_outgoing_user_credentials_info#:#Please specify which user attribute should be used for transmission. Possible values [Login], [EXTERNAL_ACCOUNT]. You can modify the specified attribute by prepending or appending any strings. Example: [LOGIN]@example.com###26 08 2024 new variable +ecs#:#ecs_outgoing_user_credentials#:#User attribute###30 04 2024 new variable +ecs#:#ecs_outgoing_user_credentials_info#:#Please specify which user attribute should be used for transmission. Possible values [Login], [EXTERNAL_ACCOUNT]. You can modify the specified attribute by prepending or appending any strings. Example: [LOGIN]@example.com###30 04 2024 new variable ecs#:#ecs_part_settings#:#Impostazioni per partecipante: ecs#:#ecs_participants#:#Participanti ecs#:#ecs_participants_infos#:#Ulteriori Informazioni ecs#:#ecs_polling#:#Tempo d'interrogazione ecs#:#ecs_polling_info#:#Per favore definisci il tempo di polling per la creazione e l'aggiornamento di Corsi e Links ecs#:#ecs_port#:#Porta -ecs#:#ecs_position_updates#:#Aggiornamenti di Transfer Position +ecs#:#ecs_position_updates#:#Aggiornamenti di Posizione di trasferimento ecs#:#ecs_protocol#:#Protocollo ecs#:#ecs_publish_as#:#Pubblica come: ecs#:#ecs_publish_for#:#Rilasciato per: ecs#:#ecs_published_for#:#Pubblicato per: -ecs#:#ecs_rcat_created_body_a#:#A new ECS Category has been created:###28 10 2024 new variable +ecs#:#ecs_rcat_created_body_a#:#A new ECS Category has been created:###10 12 2024 new variable ecs#:#ecs_rcrs_created_body_a#:#Un nuovo Corso Remoto e' stato creato: ecs#:#ecs_read_remote_links#:#Aggiorna i Corsi remoti ecs#:#ecs_refresh_participants#:#Aggiorna i partecipanti ECS @@ -9208,7 +9196,7 @@ ecs#:#ecs_tbl_active_rules#:#Regole attive per l'Attribuzione di Categoria ecs#:#ecs_tbl_export#:#Esporta ecs#:#ecs_tbl_import#:#Importa ecs#:#ecs_tbl_import_type#:#Tipo di Import -ecs#:#ecs_tbl_settings_for_server#:#Setting ECS per %s +ecs#:#ecs_tbl_settings_for_server#:#Impostazioni ECS per %s ecs#:#ecs_title_updates#:#Aggiornamento titolo di trasferimento ecs#:#ecs_token_mechanism#:#Token di autenticazione ecs#:#ecs_token_mechanism_info#:#Se abilitata, l'autenticazione sulla piattaforma di hosting per gli oggetti remoti viene eseguita dal meccanismo ECS-token. @@ -9216,59 +9204,59 @@ ecs#:#ecs_tree_updates#:#Aggiornamento titolo di trasferimento ecs#:#ecs_tst_export#:#Sblocca test ecs#:#ecs_tst_export_disabled#:#Non rilasciare questo Test ecs#:#ecs_tst_export_enabled#:#Rilascia questo test -ecs#:#ecs_tst_export_obj_settings#:#Setting di rilascio test +ecs#:#ecs_tst_export_obj_settings#:#Impostazioni di rilascio test ecs#:#ecs_unique_id#:#ID del partecipante ecs#:#ecs_user_rcp#:#Notifiche relative a utenti ECS ecs#:#ecs_user_rcp_info#:#Inserisci uno o piu' nomi utente di login (separati da virgola), che saranno informati via email, su nuovi utenti ECS. ecs#:#ecs_wiki_export#:#Release Wiki ecs#:#ecs_wiki_export_disabled#:#Non rilasciare questo Test ecs#:#ecs_wiki_export_enabled#:#Rilascia questo Wiki -ecs#:#ecs_wiki_export_obj_settings#:#Setting di rilascio Wiki -error#:#error_back_to_repository#:#Torna al repository -error#:#error_sry_error#:#Sorry, an error occured. -etal#:#appointments#:#Appointments -etal#:#cal_type_tals#:#Talks -etal#:#change_date_of_series#:#Change date of talk series -etal#:#change_date_of_talk#:#Change date of talk -etal#:#date_of_talk#:#Start Date -etal#:#etal_add#:#Add Talk -etal#:#etal_add_new_item#:#Add new Talk -etal#:#etal_create_invalid_template_ref#:#Invalid Talk Template ID###26 08 2024 new variable -etal#:#etal_date_appointment_edit#:#Date of Talk -etal#:#etal_date_series_edit#:#Date of Talk Series -etal#:#etal_delete_confirmation_msg#:#Are you sure that you want to delete the following talk?###26 08 2024 new variable -etal#:#etal_edit#:#General -etal#:#etal_invalid_user#:#This user either does not exist or can't be invited.###26 08 2024 new variable -etal#:#etal_location#:#Location###29 10 2025 new variable -etal#:#etal_new#:#New Talk -etal#:#etal_open#:#Open Employee Talk -etal#:#etal_recurrence#:#Recurrence###29 10 2025 new variable -etal#:#etal_status_all#:#All -etal#:#etal_status_completed#:#Completed -etal#:#etal_status_pending#:#Pending -etal#:#etal_unknown_username#:#Unknown User -etal#:#lock_edititng_for_others#:#Lock editing for others -etal#:#meta_adv_records#:#Metadata -etal#:#mm_org_etal#:#Talks -etal#:#mm_talk_template#:#Talk Templates -etal#:#notification_talks_created#:#You have been invited by %s to the following employee talks. -etal#:#notification_talks_date_list_header#:#Dates -etal#:#notification_talks_removed#:#The following appointments have been canceled by %s. -etal#:#notification_talks_subject#:#Invitation -etal#:#notification_talks_subject_update#:#Update: %s###26 08 2024 new variable -etal#:#notification_talks_updated#:#The following talk appointments have been changed by %s. -etal#:#pending_talks_warning#:#The following pending talk appointments will be replaced:###26 08 2024 new variable -etal#:#tala_no_content_without_admin_info#:#The Administrator role is required for access to Talk Templates.###29 10 2025 new variable -etal#:#talk_serial#:#Talk Serial -etal#:#tals_add#:#Add Talks -etal#:#tals_new#:#New Talks -etal#:#talt_activation_online_info#:#Set the talk template online to make it visible and available for employees. If not, only administrators will have access to it. -etal#:#talt_add#:#Add Template -etal#:#talt_edit#:#General -etal#:#talt_etal#:#Employee Talk -etal#:#talt_new#:#New Talk Template -etal#:#will_update_series_info_lock#:#Lock the editing of all appointments in this series###26 08 2024 new variable -etal#:#will_update_series_info_title#:#Changes to the title will be made to all appointments in this series.###26 08 2024 new variable +ecs#:#ecs_wiki_export_obj_settings#:#Impostazioni di rilascio Wiki +error#:#error_back_to_repository#:#Torna all'archivio +error#:#error_sry_error#:#Ci scusiamo, si é verificato un errore. +etal#:#appointments#:#Appointments###31 03 2023 new variable +etal#:#cal_type_tals#:#Talks###31 03 2023 new variable +etal#:#change_date_of_series#:#Change date of talk series###31 03 2023 new variable +etal#:#change_date_of_talk#:#Change date of talk###31 03 2023 new variable +etal#:#date_of_talk#:#Start Date###31 03 2023 new variable +etal#:#etal_add#:#Add Talk###31 03 2023 new variable +etal#:#etal_add_new_item#:#Add new Talk###31 03 2023 new variable +etal#:#etal_create_invalid_template_ref#:#Invalid Talk Template ID###31 03 2023 new variable +etal#:#etal_date_appointment_edit#:#Date of Talk###31 03 2023 new variable +etal#:#etal_date_series_edit#:#Date of Talk Series###31 03 2023 new variable +etal#:#etal_delete_confirmation_msg#:#Are you sure that you want to delete the following talk?###30 04 2024 new variable +etal#:#etal_edit#:#General###31 03 2023 new variable +etal#:#etal_invalid_user#:#This user either does not exist or can't be invited.###31 03 2023 new variable +etal#:#etal_location#:#Location###04 11 2025 new variable +etal#:#etal_new#:#New Talk###31 03 2023 new variable +etal#:#etal_open#:#Open Employee Talk###31 03 2023 new variable +etal#:#etal_recurrence#:#Recurrence###04 11 2025 new variable +etal#:#etal_status_all#:#All###31 03 2023 new variable +etal#:#etal_status_completed#:#Completed###31 03 2023 new variable +etal#:#etal_status_pending#:#Pending###31 03 2023 new variable +etal#:#etal_unknown_username#:#Unknown User###31 03 2023 new variable +etal#:#lock_edititng_for_others#:#Lock editing for others###31 03 2023 new variable +etal#:#meta_adv_records#:#Metadata###31 03 2023 new variable +etal#:#mm_org_etal#:#Talks###31 03 2023 new variable +etal#:#mm_talk_template#:#Talk Templates###31 03 2023 new variable +etal#:#notification_talks_created#:#You have been invited to the following employee talks.###31 03 2023 new variable +etal#:#notification_talks_date_list_header#:#Dates###31 03 2023 new variable +etal#:#notification_talks_removed#:#The following appointments have been canceled.###31 03 2023 new variable +etal#:#notification_talks_subject#:#Invitation: %s###31 03 2023 new variable +etal#:#notification_talks_subject_update#:#Update: %s###31 03 2023 new variable +etal#:#notification_talks_updated#:#The following talk appointments have been changed.###31 03 2023 new variable +etal#:#pending_talks_warning#:#The following pending talk appointments will be replaced:###28 11 2023 new variable +etal#:#tala_no_content_without_admin_info#:#The Administrator role is required for access to Talk Templates.###08 07 2025 new variable +etal#:#talk_serial#:#Talk Serial###31 03 2023 new variable +etal#:#tals_add#:#Add Talks###31 03 2023 new variable +etal#:#tals_new#:#New Talks###31 03 2023 new variable +etal#:#talt_activation_online_info#:#Set the talk template online to make it visible and available for employees. If not, only administrators will have access to it.###31 03 2023 new variable +etal#:#talt_add#:#Add Template###31 03 2023 new variable +etal#:#talt_edit#:#General###31 03 2023 new variable +etal#:#talt_etal#:#Employee Talk###31 03 2023 new variable +etal#:#talt_new#:#New Talk Template###31 03 2023 new variable +etal#:#will_update_series_info_lock#:#Lock the editing of all appointments in this series###31 03 2023 new variable +etal#:#will_update_series_info_title#:#Changes to the title will be made to all appointments in this series.###31 03 2023 new variable exc#:#exc_add_assignment#:#Aggiungi assegnazione exc#:#exc_add_criteria#:#Aggiungi criteri exc#:#exc_add_criteria_catalogue#:#Aggiungi catalogo @@ -9280,12 +9268,12 @@ exc#:#exc_adopt_group_teams_blocked#:#%s L’utente è già assegnato. exc#:#exc_adopt_group_teams_conflict#:#L’utente "%1$s" è ancora selezionato per il gruppo "%2$s". exc#:#exc_adopt_group_teams_no_members#:#Nessun membro exc#:#exc_after_submission#:#Dopo la presentazione -exc#:#exc_all#:#All###26 08 2024 new variable +exc#:#exc_all#:#All###30 04 2024 new variable exc#:#exc_all_new_files_offered_already#:#Tutti i nuovi file sono già stati forniti per il download. Per un altro download, si prega di cliccare sui link di azione qui sotto. -exc#:#exc_ass_submission_zip#:#Submissions -exc#:#exc_ass_team_wiki#:#Assignment Team Wiki +exc#:#exc_ass_submission_zip#:#Contributi +exc#:#exc_ass_team_wiki#:#Incarico Team Wiki exc#:#exc_assignment#:#Assegnazione -exc#:#exc_assignment_list#:#Assignments List###26 08 2024 new variable +exc#:#exc_assignment_list#:#Assignments List###30 04 2024 new variable exc#:#exc_assignment_type#:#Tipo di presentazione exc#:#exc_assignment_view#:#Vista assegnazione exc#:#exc_assignments#:#Assegnazioni @@ -9293,25 +9281,25 @@ exc#:#exc_assignments_deleted#:#Questa assegnazione è stata cancellata. exc#:#exc_blog_created#:#Il blog e'stato creato exc#:#exc_blog_returned#:#Assegnazione di Blog exc#:#exc_blog_selected#:#Il blog è stato assegnato -exc#:#exc_cannot_submit_any_files#:#You cannot submit any files anymore.###29 10 2025 new variable +exc#:#exc_cannot_submit_any_files#:#You cannot submit any files anymore.###28 11 2025 new variable exc#:#exc_chars_remaining#:#Caratteri rimanenti: -exc#:#exc_comment_for_learner_edit#:#Edit Comment for Learner +exc#:#exc_comment_for_learner_edit#:#Modifica commento per studente exc#:#exc_comment_for_learner_info#:#Viene inviata una notifica all'utente e il feedback verrà elencato nella visualizzazione di assegnazione dell'utente. -exc#:#exc_compare_selected_submissions#:#Compare selected submissions###07 02 2020 new variable -exc#:#exc_compare_submissions#:#Compare submissions###07 02 2020 new variable +exc#:#exc_compare_selected_submissions#:#Confronta le consegne selezionate +exc#:#exc_compare_submissions#:#Confronta consegne exc#:#exc_completion_by_submission#:#Completato inserimento exc#:#exc_completion_by_submission_info#:#Se abilitato, l'inserimento di almeno un file provoca il completamento dell'assegnazione. Il punteggio puo'essere cambiato in un secondo tempo. Cambiare questo setting non ha effetti sulle soluzioni gia'proposte. exc#:#exc_completion_by_tutor#:#Solo manuale tramite tutor exc#:#exc_conf_del_assignments#:#Vuoi proprio cancellare quest'assegnazione? exc#:#exc_copy#:#Copia Esercizio -exc#:#exc_copy_zip_error#:#The submission can not be opened. An error occurred when copying the files.###07 02 2020 new variable +exc#:#exc_copy_zip_error#:#La presentazione non può essere aperta. Si è verificato un errore durante la copia dei file. exc#:#exc_create_blog#:#Crea Blog exc#:#exc_create_blog_select_info#:#Seleziona la directory risorse dove aggiungere il blog. exc#:#exc_create_portfolio#:#Crea Portfolio exc#:#exc_create_portfolio_no_template#:#Non utilizzare il modello exc#:#exc_create_team#:#Crea squadra exc#:#exc_create_team_times_up_warning#:#Non puoi più creare una squadra - si prega di contattare il proprio tutor. -exc#:#exc_create_wiki#:#Create Wiki +exc#:#exc_create_wiki#:#Crea Wiki exc#:#exc_crit_cat_protected_assignment#:#Feedback tra pari attivato exc#:#exc_crit_cat_protected_assignment_info#:#I cataloghi dei criteri delle assegnazioni con un feedback tra pari attivato non può essere ulteriormente modificato. exc#:#exc_criteria_catalogue_create_form#:#Aggiungi nuovo catalogo di criteri @@ -9319,41 +9307,41 @@ exc#:#exc_criteria_catalogue_default#:#Nessun catalogo exc#:#exc_criteria_catalogue_deletion_confirmation#:#Sei sicuro di voler eliminare i seguenti cataloghi di criteri? exc#:#exc_criteria_catalogue_update_form#:#Modifica catalogo di criteri exc#:#exc_criteria_catalogues#:#Cataloghi dei criteri -exc#:#exc_criteria_create_form#:#Add New Criteria -exc#:#exc_criteria_deletion_confirmation#:#Are you sure you want to delete the following criterias? +exc#:#exc_criteria_create_form#:#Aggiungi nuovi criteri +exc#:#exc_criteria_deletion_confirmation#:#Sei sicuro di voler eliminare i seguenti criteri? exc#:#exc_criteria_type_bool#:#Soddisfatto Sì/No exc#:#exc_criteria_type_file#:#File caricato exc#:#exc_criteria_type_rating#:#Valutazione a 5 stelle exc#:#exc_criteria_type_text#:#Testo exc#:#exc_criteria_update_form#:#Modifica criteri -exc#:#exc_criterias#:#Criterias +exc#:#exc_criterias#:#Criteri exc#:#exc_deadline#:#Scadenza exc#:#exc_deadline_ext_mismatch#:#Il periodo di tolleranza deve terminare dopo la scadenza. exc#:#exc_deadline_extended#:#Periodo di tolleranza exc#:#exc_deadline_extended_info#:#La presentazione tardiva è possibile tra la scadenza e la fine del periodo di tolleranza. -exc#:#exc_deadline_not_set_yet#:#Not Set Yet###26 08 2024 new variable -exc#:#exc_deadline_requested#:#Requested###26 08 2024 new variable +exc#:#exc_deadline_not_set_yet#:#Not Set Yet###30 04 2024 new variable +exc#:#exc_deadline_requested#:#Requested###30 04 2024 new variable exc#:#exc_delete_team#:#Elimina squadra -exc#:#exc_deleted_user#:#Deleted User###29 07 2022 new variable -exc#:#exc_denied_has_peer_reviews#:#Reason: Some assignments have peer reviewing activated.###07 02 2020 new variable -exc#:#exc_denied_has_submissions#:#Reason: Users have already submitted to assignments.###07 02 2020 new variable -exc#:#exc_denied_has_team_assignments#:#Reason: There are team assignments in this exercise.###07 02 2020 new variable -exc#:#exc_direct_no_submit#:#Non sottoscrivere -exc#:#exc_direct_submit#:#Richiedi +exc#:#exc_deleted_user#:#Utente eliminato +exc#:#exc_denied_has_peer_reviews#:#Motivo: per alcuni compiti è stata attivata la revisione tra pari. +exc#:#exc_denied_has_submissions#:#Motivo: gli utenti hanno già inviato le assegnazioni. +exc#:#exc_denied_has_team_assignments#:#Motivo: in questo esercizio sono presenti incarichi di squadra. +exc#:#exc_direct_no_submit#:#Non consegnare +exc#:#exc_direct_submit#:#Consegna exc#:#exc_direct_submit_blog#:#Volete pubblicare ora la versione attuale del blog? Potete farlo piu'tardi in qualsiasi momento dal blog editor. exc#:#exc_direct_submit_portfolio#:#Volete pubblicare ora la versione attuale del portfolio? Potete farlo piu'tardi in qualsiasi momento dal portfolio editor. -exc#:#exc_down_files_started_bg#:#Download of submission files has started. Please check your background tasks in the top right corner.###07 02 2020 new variable -exc#:#exc_download_selected#:#Download Selected Submission###26 08 2024 new variable +exc#:#exc_down_files_started_bg#:#Motivo: in questo esercizio sono presenti incarichi di squadra. +exc#:#exc_download_selected#:#Download Selected Submission###30 04 2024 new variable exc#:#exc_download_zip_structure#:#Scarica struttura ZIP -exc#:#exc_earliest_start_time#:#Earliest Start Time +exc#:#exc_earliest_start_time#:#Prima ora di inizio exc#:#exc_edit_assignment#:#edita assegnazione exc#:#exc_edit_assignments#:#edita assegnazioni -exc#:#exc_edit_blog#:#Edit Blog###26 08 2024 new variable -exc#:#exc_edit_criterias#:#Edit Criterias -exc#:#exc_edit_portfolio#:#Edit Portfolio###26 08 2024 new variable +exc#:#exc_edit_blog#:#Edit Blog###30 04 2024 new variable +exc#:#exc_edit_criterias#:#Modifica criteri +exc#:#exc_edit_portfolio#:#Edit Portfolio###30 04 2024 new variable exc#:#exc_edit_submission#:#edita richiesta -exc#:#exc_edit_wiki#:#Edit Wiki###26 08 2024 new variable -exc#:#exc_ended#:#Ended###26 08 2024 new variable +exc#:#exc_edit_wiki#:#Edit Wiki###30 04 2024 new variable +exc#:#exc_ended#:#Ended###30 04 2024 new variable exc#:#exc_ended_on#:#Finito il exc#:#exc_export_excel#:#Esporta (Excel) exc#:#exc_fb_files#:#file di feedback @@ -9361,141 +9349,141 @@ exc#:#exc_fb_tutor_info#:#Quando viene caricato un file di feedback, viene invia exc#:#exc_feedback#:#Feedback exc#:#exc_feedback_notification_body#:#Il feedback adesso è disponibile per la seguente assegnazione. exc#:#exc_feedback_notification_link#:#Link all’esercizio -exc#:#exc_feedback_notification_reason#:#You are receiving this email because you are a participant of the exercise mentioned above. +exc#:#exc_feedback_notification_reason#:#Ricevi questa email perché partecipi all'esercizio menzionato sopra. exc#:#exc_feedback_notification_subject#:#Il feedback è disponibile per l'assegnazione dell'esercizio "%s" exc#:#exc_files_returned_text#:#Assegnazione del testo -exc#:#exc_find_zip_error#:#The submission can not be opened. The original files are not found.###07 02 2020 new variable -exc#:#exc_fixed_date#:#Fixed Date -exc#:#exc_fixed_date_individual#:#Individual Deadlines Only###26 08 2024 new variable -exc#:#exc_fixed_date_individual_info#:#There is no common deadline. Tutors must set individual deadlines for each participant individually.###26 08 2024 new variable -exc#:#exc_fixed_date_info#:#Initially all users get the same fixed deadline. -exc#:#exc_fullscreen#:#Fullscreen###29 07 2022 new variable -exc#:#exc_future#:#Upcoming###26 08 2024 new variable -exc#:#exc_given_feedback#:#Given Feedback###26 08 2024 new variable -exc#:#exc_global_feedback_file#:#Feedback file for all learners -exc#:#exc_global_feedback_file_after_date#:#After set Date +exc#:#exc_find_zip_error#:#La presentazione non può essere aperta. I file originali non sono stati trovati. +exc#:#exc_fixed_date#:#Appuntamento fissato +exc#:#exc_fixed_date_individual#:#Individual Deadlines Only###30 04 2024 new variable +exc#:#exc_fixed_date_individual_info#:#There is no common deadline. Tutors must set individual deadlines for each participant individually.###30 04 2024 new variable +exc#:#exc_fixed_date_info#:#Inizialmente tutti gli utenti ottengono la stessa scadenza fissa. +exc#:#exc_fullscreen#:#Fullscreen###09 03 2022 new variable +exc#:#exc_future#:#Upcoming###30 04 2024 new variable +exc#:#exc_given_feedback#:#Given Feedback###30 04 2024 new variable +exc#:#exc_global_feedback_file#:#File di feedback per tutti gli studenti +exc#:#exc_global_feedback_file_after_date#:#Dopo la data impostata exc#:#exc_global_feedback_file_cron#:#Notifica -exc#:#exc_global_feedback_file_cron_info#:#All learners will be notified via cron job when the feedback file becomes available. +exc#:#exc_global_feedback_file_cron_info#:#Tutti gli studenti riceveranno una notifica tramite cron job quando il file di feedback sarà disponibile. exc#:#exc_global_feedback_file_date#:#Disponibilità exc#:#exc_global_feedback_file_date_deadline#:#Dopo la scadenza exc#:#exc_global_feedback_file_date_upload#:#Dopo la presentazione exc#:#exc_go_to_exercise#:#Vai all’esercizio -exc#:#exc_graded_mem_notified#:#All graded participants have been notified.###26 08 2024 new variable +exc#:#exc_graded_mem_notified#:#All graded participants have been notified.###30 04 2024 new variable exc#:#exc_grades#:#Panoramica Gradi exc#:#exc_grades_overview#:#Vista Gradi exc#:#exc_hand_in#:#Consegna -exc#:#exc_hand_in_lead_text#:#%s to Submit###26 08 2024 new variable -exc#:#exc_idl_request_and_tutor_needed#:#Please send a request to your tutor for setting an individual deadline for you.###26 08 2024 new variable -exc#:#exc_idl_tutor_needed#:#You already requested a deadline. The request is still pending. You will be notified once the individual deadline is set.###26 08 2024 new variable +exc#:#exc_hand_in_lead_text#:#%s to Submit###30 04 2024 new variable +exc#:#exc_idl_request_and_tutor_needed#:#Please send a request to your tutor for setting an individual deadline for you.###30 04 2024 new variable +exc#:#exc_idl_tutor_needed#:#You already requested a deadline. The request is still pending. You will be notified once the individual deadline is set.###30 04 2024 new variable exc#:#exc_import#:#Importa esercizio exc#:#exc_individual_deadline#:#Scadenza singola exc#:#exc_individual_deadline_action#:#Imposta scadenza singola exc#:#exc_individual_deadline_before_global#:#La data deve essere successiva all’(ultima) scadenza: %s. exc#:#exc_instruction_files#:#File di istruzioni -exc#:#exc_instruction_migration_not_run#:#The instruction file migration has not been finished yet. Please contact your system administrator.###26 08 2024 new variable +exc#:#exc_instruction_migration_not_run#:#The instruction file migration has not been finished yet. Please contact your system administrator.###30 04 2024 new variable exc#:#exc_late_submission#:#Presentazione tardiva exc#:#exc_late_submission_warning#:#Le presentazione successive a %s sono segnate come tardive. -exc#:#exc_lead_request_idl#:#Request Deadline###26 08 2024 new variable -exc#:#exc_lead_wait_for_idl#:#Waiting For Individual Deadline###26 08 2024 new variable +exc#:#exc_lead_request_idl#:#Request Deadline###30 04 2024 new variable +exc#:#exc_lead_wait_for_idl#:#Waiting For Individual Deadline###30 04 2024 new variable exc#:#exc_limit_characters#:#Limiti dei caratteri exc#:#exc_list_submission#:#Lista richieste exc#:#exc_list_text_assignment#:#Elenca tutte le presentazioni -exc#:#exc_mail_context_grade_reminder_info#:#Reminder Tutors/Teachers to Grade an Assignment -exc#:#exc_mail_context_grade_reminder_title#:#Exercise Grade Reminder -exc#:#exc_mail_context_peer_reminder_info#:#Reminder Users to provide Feedback in an Assignment -exc#:#exc_mail_context_peer_reminder_title#:#Exercise Feedback/Peer Reminder -exc#:#exc_mail_context_reminder_assignment_title#:#Assignment Title -exc#:#exc_mail_context_reminder_exercise_title#:#Exercise Title -exc#:#exc_mail_context_submit_reminder_info#:#Reminder Users to Submit an Assignment -exc#:#exc_mail_context_submit_reminder_title#:#Exercise Submit Reminder +exc#:#exc_mail_context_grade_reminder_info#:#Promemoria tutor/insegnanti per valutare un compito +exc#:#exc_mail_context_grade_reminder_title#:#Promemoria del grado di esercizio +exc#:#exc_mail_context_peer_reminder_info#:#Ricorda agli utenti di fornire feedback in un'assegnazione +exc#:#exc_mail_context_peer_reminder_title#:#Feedback sull'esercizio/promemoria tra pari +exc#:#exc_mail_context_reminder_assignment_title#:#Titolo dell'incarico +exc#:#exc_mail_context_reminder_exercise_title#:#Titolo dell'esercizio +exc#:#exc_mail_context_submit_reminder_info#:#Ricorda agli utenti di inviare un compito +exc#:#exc_mail_context_submit_reminder_title#:#Esercizio Invia promemoria exc#:#exc_mail_permanent_link#:#Clicca sul prossimo link per accedere all'esercizio. exc#:#exc_manage_team#:#Gestisci squadra exc#:#exc_mandatory#:#Obbligatorio exc#:#exc_mandatory_info#:#I compiti obbligatori devono essere superati per superare l'intero esercizio -exc#:#exc_mandatory_rand_determined#:#Randomly determined###07 02 2020 new variable +exc#:#exc_mandatory_rand_determined#:#Determinato a caso exc#:#exc_max_char_limit#:#Numero massimo di caratteri exc#:#exc_max_file#:#Numero massimo di file -exc#:#exc_max_file_info#:#Participants will not be able to upload more files once the limit is reached. +exc#:#exc_max_file_info#:#I partecipanti non potranno caricare più file una volta raggiunto il limite. exc#:#exc_max_file_reached#:#Non puoi caricare più di %s file. exc#:#exc_max_file_tgl#:#Limite caricato -exc#:#exc_max_team_participants#:#Maximal Number -exc#:#exc_members_already_assigned_team#:#This user is already assigned to a team.###07 02 2020 new variable +exc#:#exc_max_team_participants#:#Numero massimo +exc#:#exc_members_already_assigned_team#:#Questo utente è già assegnato a una squadra. exc#:#exc_min_char_limit#:#Numero minimo di caratteri exc#:#exc_min_nr#:#Numero compiti -exc#:#exc_min_nr_info#:#This value must be equal or higher than the number of obligatory assignments. -exc#:#exc_min_team_participants#:#Minimal Number +exc#:#exc_min_nr_info#:#Questo valore deve essere uguale o superiore al numero di incarichi obbligatori. +exc#:#exc_min_team_participants#:#Numero minimo exc#:#exc_msg_all_mandatory_ass#:#I compiti obbligatori devono essere superati per superare l'intero esercizio. -exc#:#exc_msg_deadline_request_body#:#the following user requested an individual deadline.###26 08 2024 new variable -exc#:#exc_msg_deadline_request_subject#:#A deadline has been requested in exercise "%s".###26 08 2024 new variable +exc#:#exc_msg_deadline_request_body#:#the following user requested an individual deadline.###30 04 2024 new variable +exc#:#exc_msg_deadline_request_subject#:#A deadline has been requested in exercise "%s".###30 04 2024 new variable exc#:#exc_msg_failed_mandatory#:#Hai sbagliato almeno un compito obbligatorio. -exc#:#exc_msg_grading_done#:#An assignment has been graded in exercise "%s".###26 08 2024 new variable -exc#:#exc_msg_grading_done_body#:#a tutor has graded your submission in exercise "%s".###26 08 2024 new variable -exc#:#exc_msg_idl_set_body#:#a new individual deadline has been set.###26 08 2024 new variable -exc#:#exc_msg_idl_set_subject#:#A new deadline has been set in exercise "%s".###26 08 2024 new variable +exc#:#exc_msg_grading_done#:#An assignment has been graded in exercise "%s".###30 04 2024 new variable +exc#:#exc_msg_grading_done_body#:#a tutor has graded your submission in exercise "%s".###30 04 2024 new variable +exc#:#exc_msg_idl_set_body#:#a new individual deadline has been set.###30 04 2024 new variable +exc#:#exc_msg_idl_set_subject#:#A new deadline has been set in exercise "%s".###30 04 2024 new variable exc#:#exc_msg_min_number_ass#:#Devi superare un minimo di %s compiti per superare l'esercizio. exc#:#exc_msg_missed_minimum_number#:#Non hai superato il numero minimo di compiti. exc#:#exc_msg_new_feedback_file_uploaded#:#Un nuovo feedback è stato aggiunto all'esercizio "%s". exc#:#exc_msg_new_feedback_file_uploaded2#:#Un tutor ha caricato un nuovo file di feedback per te. exc#:#exc_msg_new_feedback_text_uploaded#:#Un nuovo commento è stato aggiunto all’esercizio "%s". exc#:#exc_msg_new_feedback_text_uploaded2#:#un tutor ha aggiunto un commento per te. -exc#:#exc_msg_new_message_from_pf_giver#:#A new message from a peer feedback giver has been added to exercise "%s".###26 08 2024 new variable -exc#:#exc_msg_new_message_from_pf_giver2#:#a peer feedback giver has added a new message for you:###26 08 2024 new variable -exc#:#exc_msg_new_message_from_pf_recipient#:#A new message from a peer feedback recipient has been added to exercise "%s".###26 08 2024 new variable -exc#:#exc_msg_new_message_from_pf_recipient2#:#a peer feedback recipient has added a new message for you:###26 08 2024 new variable +exc#:#exc_msg_new_message_from_pf_giver#:#A new message from a peer feedback giver has been added to exercise "%s".###30 04 2024 new variable +exc#:#exc_msg_new_message_from_pf_giver2#:#a peer feedback giver has added a new message for you:###30 04 2024 new variable +exc#:#exc_msg_new_message_from_pf_recipient#:#A new message from a peer feedback recipient has been added to exercise "%s".###30 04 2024 new variable +exc#:#exc_msg_new_message_from_pf_recipient2#:#a peer feedback recipient has added a new message for you:###30 04 2024 new variable exc#:#exc_msg_participants_removed#:#I partecipanti sono stati rimossi dall'esercizio. exc#:#exc_msg_public_submission#:#Tutte le richieste saranno pubblicate dopo la scadenza. exc#:#exc_msg_saved_grades#:#I gradi sono stati salvati. exc#:#exc_msg_sure_to_deassign_participant#:#Siete sicuri di rimuovere i partecipanti da tutti i compiti dell'esercizio? questo cancellera' tutti i loro dati nelle risorse! -exc#:#exc_multi_feedb_info#:#On this screen you can upload multiple feedbacks in one file. First click on "Download ZIP Structure", save the ZIP file and extract it on your local computer. Put the feedback files into the corresponding user directories. Now compress the whole directory as one ZIP file agin. Browse your local filesystem for the file and select it as the "Multi-Feedback File" in the form below. After that click "Upload". A confirmation screen will list the files. Please avoid using any special characters in your filenames. -exc#:#exc_multi_feedback#:#Multi-Feedback +exc#:#exc_multi_feedb_info#:#In questa schermata è possibile caricare più feedback in un unico file. Fai prima clic su "Scarica ZIP Structure", salva il file ZIP ed estrailo sul tuo computer locale. Inserire i file di feedback nelle directory utente corrispondenti. Ora comprimi l'intera directory come un unico file ZIP. Cerca il file system locale per il file e selezionalo come "File multi-feedback" nel modulo seguente. Successivamente fai clic su "Carica". Una schermata di conferma elencherà i file. Si prega di evitare l'uso di caratteri speciali nei nomi dei file. +exc#:#exc_multi_feedback#:#Dare un riscontro a più partecipanti exc#:#exc_multi_feedback_file#:#File multi-feedback exc#:#exc_multi_feedback_files#:#File multi-feedback exc#:#exc_needs_deadline#:#Questa funzionalità funziona solo con una scadenza di assegnazione. -exc#:#exc_needs_fixed_deadline#:#This feature only works with a fixed deadline. +exc#:#exc_needs_fixed_deadline#:#Questa funzione necessita di un termine ultimo per la consegna. exc#:#exc_new_assignment#:#Nuovo compito -exc#:#exc_no_assignments#:#No assignments available.###26 08 2024 new variable +exc#:#exc_no_assignments#:#No assignments available.###30 04 2024 new variable exc#:#exc_no_assignments_available#:#Non vi sono compiti. Apri "Compiti" e "Edit" per creare un primo compito. -exc#:#exc_no_deadline#:#No Deadline###26 08 2024 new variable -exc#:#exc_no_deadline_info#:#There is no submission deadline for participants.###26 08 2024 new variable +exc#:#exc_no_deadline#:#No Deadline###30 04 2024 new variable +exc#:#exc_no_deadline_info#:#There is no submission deadline for participants.###30 04 2024 new variable exc#:#exc_no_deadline_specified#:#Non e'specificata alcuna scadenza. exc#:#exc_no_feedback_dir_found_in_zip#:#Impossibile elaborare la struttura di directory dell'archivio zip caricato. exc#:#exc_no_get_target#:#Non è stato inviato un obiettivo valido. -exc#:#exc_no_graded_mem_selected#:#Please select at least one graded participant.###26 08 2024 new variable +exc#:#exc_no_graded_mem_selected#:#Please select at least one graded participant.###30 04 2024 new variable exc#:#exc_no_participants#:#Non ci sono iscritti. -exc#:#exc_no_peer_feedback_deadline#:#No Deadline for Giving Feedback###26 08 2024 new variable +exc#:#exc_no_peer_feedback_deadline#:#No Deadline for Giving Feedback###30 04 2024 new variable exc#:#exc_no_portfolio_templates#:#Non ci sono modelli di portfolio disponibili. -exc#:#exc_no_submission_yet#:#No submission yet.###26 08 2024 new variable -exc#:#exc_no_team_yet#:#No team yet +exc#:#exc_no_submission_yet#:#No submission yet.###30 04 2024 new variable +exc#:#exc_no_team_yet#:#Ancora nessun Team exc#:#exc_no_team_yet_info#:#È possibile creare una squadra da soli o essere aggiunti a una squadra esistente dai membri della squadra. exc#:#exc_no_team_yet_info_tutor#:#Le squadre sono gestite dai tutor di esercizi. exc#:#exc_no_team_yet_notice#:#Non sei ancora stato assegnato a una squadra! exc#:#exc_note_for_tutor#:#Nota per i tutor exc#:#exc_notification#:#Notifica personale -exc#:#exc_nr_random_mand#:#Number of Mandatory Assignments###07 02 2020 new variable -exc#:#exc_num_teams#:#Number -exc#:#exc_ongoing#:#Ongoing###26 08 2024 new variable -exc#:#exc_optional#:#Optional###26 08 2024 new variable +exc#:#exc_nr_random_mand#:#Numero di consegne obbligatorie +exc#:#exc_num_teams#:#Numero +exc#:#exc_ongoing#:#Ongoing###30 04 2024 new variable +exc#:#exc_optional#:#Optional###30 04 2024 new variable exc#:#exc_order_by_deadline#:#Ordina per scadenza exc#:#exc_overview#:#Panoramica exc#:#exc_participant#:#Iscritto exc#:#exc_participant_view#:#Vista Iscritti -exc#:#exc_participants#:#Participants +exc#:#exc_participants#:#Partecipanti exc#:#exc_pass_all#:#Tutti i compiti obbligatori exc#:#exc_pass_all_info#:#Tutti i compiti obbligatori devono essere superati per passare l'esercizio. exc#:#exc_pass_minimum_nr#:#Numero Minimo di Compiti exc#:#exc_pass_minimum_nr_info#:#Tutti i compiti obbligatori devono essere superati per passare l'esercizio. Questo valore deve essere maggiore o uguale al numero di compiti obbligatori. exc#:#exc_pass_mode#:#Modalità pass -exc#:#exc_pass_mode_not_changeable_info#:#The pass mode cannot be changed anymore.###07 02 2020 new variable -exc#:#exc_passed_status_determination#:#Determination of Staus "Passed" +exc#:#exc_pass_mode_not_changeable_info#:#Questa opzione non può più essere cambiata. +exc#:#exc_passed_status_determination#:#Determinazione dello Staus "superato" exc#:#exc_passing_exc#:#Superamento dell’esercizio -exc#:#exc_past#:#Past###26 08 2024 new variable +exc#:#exc_past#:#Past###30 04 2024 new variable exc#:#exc_peer_deadline_mismatch#:#Poiché il feedback è dato dopo che la scadenza ha superato il termine di feedback non deve essere precedente al termine di assegnazione. exc#:#exc_peer_review#:#Feedback tra pari -exc#:#exc_peer_review_ass_setting_info#:#If enabled, users can rate their peers after the deadline. -exc#:#exc_peer_review_chars_invalid#:#At least one of your feedbacks does not have the required minimum length of %s characters. +exc#:#exc_peer_review_ass_setting_info#:#Se abilitato, gli utenti possono valutare i propri colleghi dopo la scadenza. +exc#:#exc_peer_review_chars_invalid#:#Almeno uno dei tuoi feedback non ha la lunghezza minima richiesta di %s caratteri. exc#:#exc_peer_review_completion#:#Definizione di stato "superato" exc#:#exc_peer_review_completion_all#:#Tutti i feedback richiesti -exc#:#exc_peer_review_completion_all_info#:#The assignment will be automatically set to "Passed" only after aubmission of a solution and all required feedbacks. +exc#:#exc_peer_review_completion_all_info#:#L'assegnazione verrà automaticamente impostata su "Passato" solo dopo l'invio di una soluzione e tutti i feedback richiesti. exc#:#exc_peer_review_completion_none#:#Il feedback tra pari è opzionale exc#:#exc_peer_review_completion_none_info#:#L'assegnazione verrà automaticamente impostata su "superato" dopo l'invio, indipendentemente dal feedback fornito o meno. exc#:#exc_peer_review_completion_one#:#Almeno un feedback @@ -9514,8 +9502,8 @@ exc#:#exc_peer_review_invalid_peer_ids#:#I destinatari peer che non sono più me exc#:#exc_peer_review_min_chars#:#Numero minimo dei caratteri exc#:#exc_peer_review_min_chars_info#:#Numero dei caratteri richiesti per un feedback valido. exc#:#exc_peer_review_min_chars_tgl#:#Lunghezza minima -exc#:#exc_peer_review_min_number#:#Number of feedback given required to see personal feedback -exc#:#exc_peer_review_min_number_info#:#This number of other users work must be evaluated by a participant before the evaluation of his/her own work will be visible. +exc#:#exc_peer_review_min_number#:#Numero di feedback fornito richiesto per visualizzare il feedback personale +exc#:#exc_peer_review_min_number_info#:#Questo numero di altri lavori degli utenti deve essere valutato da un partecipante prima che sia visibile la valutazione del proprio lavoro. exc#:#exc_peer_review_missing_info#:#Per vedere i feedback ricevuti, è necessario fornire dei %s feedback. exc#:#exc_peer_review_missing_info_deadline#:#Per vedere i feedback ricevuti, è necessario fornire dei %1$s feedback. L’accesso sarà concesso su: %2$s. exc#:#exc_peer_review_missing_users#:#Gli utenti con presentazioni che non fanno parte del feedback tra pari @@ -9536,11 +9524,11 @@ exc#:#exc_peer_review_show_missing#:#Non puoi visualizzare i feedback ricevuti s exc#:#exc_peer_review_show_received_none#:#Non hai ricevuto alcun feedback. exc#:#exc_peer_review_simple_unlock#:#Accesso ai feedback ricevuti exc#:#exc_peer_review_simple_unlock_active#:#Dopo aver fornito almeno 1 feedback valido -exc#:#exc_peer_review_simple_unlock_immed#:#Always show received peer feedback###26 08 2024 new variable +exc#:#exc_peer_review_simple_unlock_immed#:#Always show received peer feedback###30 04 2024 new variable exc#:#exc_peer_review_simple_unlock_inactive#:#Dopo aver fornito tutti i feedback richiesti -exc#:#exc_peer_review_text#:#Input di testo -exc#:#exc_peer_review_updated#:#Il tuo feedback è stato salvato. -exc#:#exc_peer_reviews_in_lead_text#:#%s to Give Feedback###26 08 2024 new variable +exc#:#exc_peer_review_text#:#Immissione di testo +exc#:#exc_peer_review_updated#:#Il tuo riscontro è stato salvato. +exc#:#exc_peer_reviews_in_lead_text#:#%s to Give Feedback###30 04 2024 new variable exc#:#exc_peer_reviews_invalid_warning#:#Gruppi peer non validi exc#:#exc_portfolio_created#:#Il portfolio e'stato creato exc#:#exc_portfolio_returned#:#Assegnazione Portfolio @@ -9548,50 +9536,50 @@ exc#:#exc_portfolio_selected#:#Il portfolio è stato assegnato exc#:#exc_portfolio_template#:#Modello di portfolio exc#:#exc_portfolio_unlinked_from_assignment#:#Portfolio rimosso da questa assegnazione exc#:#exc_presentation_order#:#Ordine presentazione -exc#:#exc_print_pdf#:#Print/PDF###29 07 2022 new variable +exc#:#exc_print_pdf#:#Print/PDF###31 03 2023 new variable exc#:#exc_public_submission#:#Presentazione pubblica exc#:#exc_publishing#:#Pubblicazione -exc#:#exc_rand_nr_mandatory#:#Number of Mandatory Assignments###07 02 2020 new variable -exc#:#exc_rand_overall_ass#:#Overall Number of Assignments###07 02 2020 new variable -exc#:#exc_random#:#Random###07 02 2020 new variable -exc#:#exc_random_assignment#:#Random Assignment###07 02 2020 new variable -exc#:#exc_random_assignment_info#:#When starting the exercise some assignments will be randomly selected being mandatory for you.###07 02 2020 new variable -exc#:#exc_random_selection#:#Random Selection###07 02 2020 new variable -exc#:#exc_random_selection_info#:#Each user gets assigned a random selection of mandatory assignments.###07 02 2020 new variable -exc#:#exc_random_selection_not_changeable_info#:#This mode cannot be activated.###07 02 2020 new variable -exc#:#exc_received_feedback#:#Received Feedbacks###26 08 2024 new variable -exc#:#exc_rel_last_submission#:#Last Possible Submission###07 02 2020 new variable -exc#:#exc_rel_last_submission_info#:#If this optional date is set, all user have to submit until this deadline is reached.###07 02 2020 new variable -exc#:#exc_rel_start_latest_lead_text#:#%s the Latest###26 08 2024 new variable -exc#:#exc_rel_start_lead_text#:#Submit %s Days After Start###26 08 2024 new variable -exc#:#exc_relative_date#:#Relative Date -exc#:#exc_relative_date_info#:#The deadline is set individually relative to the time when a user started the assignment. -exc#:#exc_relative_date_period#:#Working Time###26 08 2024 new variable -exc#:#exc_rem_time_after_start#:#Remaining Time after Start -exc#:#exc_reminder_cron_ok#:#Reminders sent: -exc#:#exc_reminder_end#:#Reminder ends -exc#:#exc_reminder_feedback_setting#:#Remind Participants to Feedback -exc#:#exc_reminder_feedback_start#:#Start Reminders before Feedback Deadline -exc#:#exc_reminder_frequency#:#Frequency -exc#:#exc_reminder_grade_body#:#the following assignment has not been graded by you yet -exc#:#exc_reminder_grade_setting#:#Remind Tutors to Grade -exc#:#exc_reminder_grade_subject#:#Assignment "%s" was not graded +exc#:#exc_rand_nr_mandatory#:#Numero di domande obbligatorie +exc#:#exc_rand_overall_ass#:#Numero complessivo di domande +exc#:#exc_random#:#Casuale +exc#:#exc_random_assignment#:#Selezione casuale +exc#:#exc_random_assignment_info#:#When starting the exercise some assignments will be randomly selected being mandatory for you. +exc#:#exc_random_selection#:#Selezione casuale +exc#:#exc_random_selection_info#:#Ad ogni utente viene assegnata una selezione casuale di domande obbligatorie. +exc#:#exc_random_selection_not_changeable_info#:#Questa opzione non può essere attivata. +exc#:#exc_received_feedback#:#Received Feedbacks###30 04 2024 new variable +exc#:#exc_rel_last_submission#:#Ultimo termine utile per la consegna +exc#:#exc_rel_last_submission_info#:#Se viene impostata una data, tutte le consegne devono avvenire prima di tale termine. +exc#:#exc_rel_start_latest_lead_text#:#%s the Latest###30 04 2024 new variable +exc#:#exc_rel_start_lead_text#:#Submit %s Days After Start###30 04 2024 new variable +exc#:#exc_relative_date#:#Data relativa +exc#:#exc_relative_date_info#:#La scadenza è impostata individualmente rispetto al momento in cui un utente ha iniziato l'incarico. +exc#:#exc_relative_date_period#:#Working Time###30 07 2024 new variable +exc#:#exc_rem_time_after_start#:#Tempo rimanente dopo l'avvio +exc#:#exc_reminder_cron_ok#:#Promemoria inviati: +exc#:#exc_reminder_end#:#Il promemoria termina +exc#:#exc_reminder_feedback_setting#:#Ricorda ai partecipanti di feedback +exc#:#exc_reminder_feedback_start#:#Avvia promemoria prima della scadenza del feedback +exc#:#exc_reminder_frequency#:#Frequenza +exc#:#exc_reminder_grade_body#:#il seguente incarico non è stato ancora valutato da te +exc#:#exc_reminder_grade_setting#:#Ricorda ai tutor di voto +exc#:#exc_reminder_grade_subject#:#L'assegnazione "%s" non è stata classificata exc#:#exc_reminder_link#:#URL -exc#:#exc_reminder_mail_no_tpl#:#Do not use mail template -exc#:#exc_reminder_mail_template#:#Mail Template -exc#:#exc_reminder_peer_body#:#the following assignment has no feedback from you yet -exc#:#exc_reminder_peer_subject#:#Assignment "%s" has no feedback -exc#:#exc_reminder_salutation#:#Hello %s, -exc#:#exc_reminder_start#:#Start Reminders before Deadline -exc#:#exc_reminder_start_info#:#All members of the parent course/group will be sent reminders.<br>No parent course/group girven - no reminder will be sent! -exc#:#exc_reminder_submit_body#:#the following assignment has not been finished by you yet -exc#:#exc_reminder_submit_setting#:#Remind Users to Submit -exc#:#exc_reminder_submit_subject#:#Assignment "%s" was not finished -exc#:#exc_reminders_cron#:#Reminders for Assignments -exc#:#exc_reminders_cron_info#:#If enabled, 3 reminders will be active: Users to Submit, Tutors to Grade and Participants to Feedback. -exc#:#exc_request_deadline#:#Request Deadline###26 08 2024 new variable -exc#:#exc_requirement#:#Requirement###26 08 2024 new variable -exc#:#exc_review_anytime#:#Give Feedback Anytime###26 08 2024 new variable +exc#:#exc_reminder_mail_no_tpl#:#Non utilizzare il modello di posta +exc#:#exc_reminder_mail_template#:#Modello e-mail +exc#:#exc_reminder_peer_body#:#il seguente incarico non ha ancora feedback da parte tua +exc#:#exc_reminder_peer_subject#:#L'assegnazione "%s" non ha feedback +exc#:#exc_reminder_salutation#:#Ciao%s, +exc#:#exc_reminder_start#:#Avvia promemoria prima della scadenza +exc#:#exc_reminder_start_info#:#A tutti i membri del corso / gruppo parent verranno inviati promemoria. <br> Nessun corso / gruppo parent girven - nessun promemoria verrà inviato! +exc#:#exc_reminder_submit_body#:#il seguente incarico non è stato ancora completato da te +exc#:#exc_reminder_submit_setting#:#Ricorda agli utenti di inviare +exc#:#exc_reminder_submit_subject#:#L'assegnazione "%s" non è stata completata +exc#:#exc_reminders_cron#:#Promemoria per le assegnazioni +exc#:#exc_reminders_cron_info#:#Se abilitato, saranno attivi 3 promemoria: Utenti da inviare, Tutor da classificare e Partecipanti a Feedback. +exc#:#exc_request_deadline#:#Request Deadline###30 04 2024 new variable +exc#:#exc_requirement#:#Requirement###30 04 2024 new variable +exc#:#exc_review_anytime#:#Give Feedback Anytime###30 04 2024 new variable exc#:#exc_save_all#:#Salva tutto exc#:#exc_save_order#:#Salva Ordine exc#:#exc_save_selected#:#Salva selezione @@ -9600,70 +9588,70 @@ exc#:#exc_select_ass#:#Seleziona Compiti exc#:#exc_select_blog#:#Usa blog esistente exc#:#exc_select_blog_change#:#Usa blog differente exc#:#exc_select_blog_info#:#Seleziona uno dei tuoi blog per usarlo all'interno del compito -exc#:#exc_select_blog_unlink#:#Remove Blog###26 08 2024 new variable +exc#:#exc_select_blog_unlink#:#Remove Blog###30 04 2024 new variable exc#:#exc_select_portfolio#:#Usa Portfolio esistente exc#:#exc_select_portfolio_change#:#Usa Portfolio diverso exc#:#exc_select_portfolio_info#:#Seleziona uno dei tuoi portfolio per usarlo all'interno di questo compito. exc#:#exc_select_portfolio_unlink#:#Rimuovi portfolio exc#:#exc_send_assignment#:#Invia Compito per email -exc#:#exc_send_grading_notification#:#Send Grading Notification###26 08 2024 new variable -exc#:#exc_set_failed#:#Set as Failed###26 08 2024 new variable -exc#:#exc_set_passed#:#Set as Passed###26 08 2024 new variable -exc#:#exc_settings_feedback#:#Tutor Feedback +exc#:#exc_send_grading_notification#:#Send Grading Notification###30 04 2024 new variable +exc#:#exc_set_failed#:#Set as Failed###30 04 2024 new variable +exc#:#exc_set_passed#:#Set as Passed###30 04 2024 new variable +exc#:#exc_settings_feedback#:#Riscontro exc#:#exc_settings_feedback_file#:#Tramite File exc#:#exc_settings_feedback_file_info#:#I tutor caricano un file. Il partecipante riceve una notifica e può accedere al file nella panoramica dell'assegnazione. exc#:#exc_settings_feedback_mail#:#Tramite Mail exc#:#exc_settings_feedback_mail_info#:#I tutor inseriscono la loro valutazione in un modulo di posta. La valutazione viene inviata ai partecipanti. -exc#:#exc_settings_feedback_text#:#Textinput +exc#:#exc_settings_feedback_text#:#Immissione di testo exc#:#exc_settings_feedback_text_info#:#I tutor digitano la loro valutazione in un campo di testo. Il partecipante riceve una notifica e il testo viene visualizzato nella panoramica dell'assegnazione. -exc#:#exc_show_instructions#:#Show Work Instructions###26 08 2024 new variable +exc#:#exc_show_instructions#:#Show Work Instructions###30 04 2024 new variable exc#:#exc_show_peer_review#:#Mostra feedback tra pari exc#:#exc_show_submissions#:#Pubblica le richieste dopo la scadenza exc#:#exc_show_submissions_info#:#Pubblica le richieste a tutti i discenti dopo la scadenza -exc#:#exc_start_assignment#:#Start Assignment -exc#:#exc_start_exercise#:#Start Exercise###07 02 2020 new variable +exc#:#exc_start_assignment#:#Inizia assegnazione +exc#:#exc_start_exercise#:#Inizia esercizio exc#:#exc_start_time#:#Ora di inizio exc#:#exc_starting_on#:#Inizia il -exc#:#exc_submission_and_grades_notification_link#:#Link to Exercise (Submissions and Grades): %s +exc#:#exc_submission_and_grades_notification_link#:#Link all'esercizio (presentazioni e voti): %s exc#:#exc_submission_downloads_notification_link#:#Scarica nuove presentazioni: %s -exc#:#exc_submission_file#:#Submission File +exc#:#exc_submission_file#:#File di invio exc#:#exc_submission_no_new_files#:#Non sono disponibili nuove presentazioni. exc#:#exc_submission_notification#:#Email di notifica sulle richieste exc#:#exc_submission_notification_body#:#Una nuova richiesta e'stata caricata per l'esercizio "%s" -exc#:#exc_submission_notification_info#:#Un messaggio confermera' il caricamento delle richieste. +exc#:#exc_submission_notification_info#:#Riceverai una notifica quando vengono caricati gli invii. Questa è un'impostazione personale che non influisce sugli altri amministratori dell'esercizio. exc#:#exc_submission_notification_link#:#Link all'esercizio: %s exc#:#exc_submission_notification_subject#:#Una nuova richiesta e'stata caricata per l'esercizio "%s" -exc#:#exc_submission_open_notification_link#:#Open submission: %s###26 08 2024 new variable -exc#:#exc_submission_text#:#Submission Text +exc#:#exc_submission_open_notification_link#:#Open submission: %s###30 04 2024 new variable +exc#:#exc_submission_text#:#Testo di presentazione exc#:#exc_submissions_and_grades#:#Richieste e Gradi -exc#:#exc_submit_anytime#:#Submit Anytime###26 08 2024 new variable +exc#:#exc_submit_anytime#:#Submit Anytime###30 04 2024 new variable exc#:#exc_submit_convenience_no_deadline#:#Invia il tuo a tuo piacimento. Non c’è una scadenza specifica. exc#:#exc_submitted_files_deleted#:#I file selezionati sono stati cancellati. -exc#:#exc_sure_unlink_blog#:#Are you sure to remove this blog form this assignment?###26 08 2024 new variable +exc#:#exc_sure_unlink_blog#:#Are you sure to remove this blog form this assignment?###30 04 2024 new variable exc#:#exc_sure_unlink_portfolio#:#Sei sicuro di voler rimuovere questo portfolio da questa assegnazione? exc#:#exc_target_not_valid#:#L’obiettivo richiesto non è valido o è incompleto. -exc#:#exc_task_grading#:#Grading of Assignment "%1"###07 02 2020 new variable -exc#:#exc_task_peer_feedback#:#Give Peer Feedback in Assignment "%1"###07 02 2020 new variable -exc#:#exc_task_submission#:#Submission of Assignment "%1"###07 02 2020 new variable +exc#:#exc_task_grading#:#Valutazione del compito "%1" +exc#:#exc_task_peer_feedback#:#Dare un riscontro tra pari per il compito "%1" +exc#:#exc_task_submission#:#Consegna del compito "%1" exc#:#exc_tbl_action_download_all_files#:#Scarica tutte le presentazioni exc#:#exc_tbl_action_download_files#:#Scarica presentazioni exc#:#exc_tbl_action_download_new_files#:#Scarica nuove presentazioni -exc#:#exc_tbl_action_feedback_file#:#Give Feedback As File -exc#:#exc_tbl_action_feedback_mail#:#Give Feedback As Mail -exc#:#exc_tbl_action_feedback_text#:#Give Feedback As Text -exc#:#exc_tbl_action_open_submission#:#Open Submission###07 02 2020 new variable +exc#:#exc_tbl_action_feedback_file#:#Invia feedback come file +exc#:#exc_tbl_action_feedback_mail#:#Invia feedback come posta +exc#:#exc_tbl_action_feedback_text#:#Invia feedback come testo +exc#:#exc_tbl_action_open_submission#:#Apri consegne exc#:#exc_tbl_action_peer_review_given#:#Mostra feedback tra pari forniti exc#:#exc_tbl_action_peer_review_received#:#Mostra feedback tra pari ricevuti exc#:#exc_tbl_action_team_log#:#Mostra registro di squadra exc#:#exc_tbl_action_text_assignment_show#:#Mostra presentazioni -exc#:#exc_tbl_calculated_deadline#:#Calculated Deadline -exc#:#exc_tbl_comment#:#Text Feedback -exc#:#exc_tbl_feedback_time#:#Feedback on +exc#:#exc_tbl_calculated_deadline#:#Scadenza calcolata +exc#:#exc_tbl_comment#:#Feedback Testo +exc#:#exc_tbl_feedback_time#:#Feedback attivo exc#:#exc_tbl_filter_has_no_submission#:#Non ha ancora presentato exc#:#exc_tbl_filter_has_submission#:#Ha presentato exc#:#exc_tbl_filter_submission#:#Presentazione -exc#:#exc_tbl_filter_submission_after#:#Submission After###26 08 2024 new variable -exc#:#exc_tbl_filter_submission_before#:#Submission Before###26 08 2024 new variable +exc#:#exc_tbl_filter_submission_after#:#Submission After###30 04 2024 new variable +exc#:#exc_tbl_filter_submission_before#:#Submission Before###30 04 2024 new variable exc#:#exc_tbl_individual_deadline#:#Scadenza singola exc#:#exc_tbl_mark#:#Segno exc#:#exc_tbl_notice#:#Nota per i tutor @@ -9680,82 +9668,82 @@ exc#:#exc_team_assignment_adopt_none_user#:#Crea nuova squadra exc#:#exc_team_assignment_adopt_teams#:#Squadre exc#:#exc_team_assignment_adopt_user#:#Adotta squadra da un’assegnazione exc#:#exc_team_at_least_one#:#Almeno un membro del team deve essere presente. -exc#:#exc_team_by_assignment#:#Adopt Teams from Assignment -exc#:#exc_team_by_assignment_info#:#Teams formed in other Assignments will be used for this Assignment too. -exc#:#exc_team_by_participants#:#Participants Self-Organise Forming Teams -exc#:#exc_team_by_participants_info#:#Participants opt for teams. -exc#:#exc_team_by_random#:#Teams are formed randomly and automatically. -exc#:#exc_team_by_random_add_info#:#Please note that you have to assign all participants first before using this mode.###07 02 2020 new variable -exc#:#exc_team_by_random_info#:#ILIAS will allocate participants to a set number of teams. -exc#:#exc_team_by_tutors#:#Teams are formed by Tutors. -exc#:#exc_team_by_tutors_info#:#Tutors allocate participants to teams, participants cannot self-organize. -exc#:#exc_team_by_tutors_manual#:#Manually -exc#:#exc_team_by_tutors_manual_info#:#Tutors manually allocate participants to teams. -exc#:#exc_team_creation#:#Creation -exc#:#exc_team_formation#:#Team Formation +exc#:#exc_team_by_assignment#:#Adotta squadre dall'assegnazione +exc#:#exc_team_by_assignment_info#:#Le squadre formate in altri incarichi verranno utilizzate anche per questo compito. +exc#:#exc_team_by_participants#:#I partecipanti si auto-organizzano formando squadre +exc#:#exc_team_by_participants_info#:#I partecipanti optano per i team. +exc#:#exc_team_by_random#:#Le squadre si formano casualmente e automaticamente. +exc#:#exc_team_by_random_add_info#:#Si noti che è necessario assegnare tutti i partecipanti prima di utilizzare questa modalità. +exc#:#exc_team_by_random_info#:#ILIAS assegnerà i partecipanti a un determinato numero di squadre. +exc#:#exc_team_by_tutors#:#Le squadre sono formate da tutor. +exc#:#exc_team_by_tutors_info#:#I tutor assegnano i partecipanti alle squadre, i partecipanti non possono auto-organizzarsi. +exc#:#exc_team_by_tutors_manual#:#Manualmente +exc#:#exc_team_by_tutors_manual_info#:#I tutor assegnano manualmente i partecipanti ai team. +exc#:#exc_team_creation#:#Creazione +exc#:#exc_team_formation#:#Formazione Team exc#:#exc_team_log#:#Log di squadra exc#:#exc_team_log_add_file#:#Aggiunto file %s. exc#:#exc_team_log_add_member#:#Aggiunto membro %s. exc#:#exc_team_log_create_team#:#Team creato. -exc#:#exc_team_log_remove_file#:#Removed file %s.###26 08 2024 new variable +exc#:#exc_team_log_remove_file#:#Removed file %s.###21 12 2022 new variable exc#:#exc_team_log_remove_member#:#Eliminato membro %s. -exc#:#exc_team_max_small_than_members#:#Maximal Number of Participants can not be set as %s because some teams need to be set with %s participants. +exc#:#exc_team_max_small_than_members#:#Il numero massimo di partecipanti non può essere impostato come %s perché alcuni team devono essere impostati con %s partecipanti. exc#:#exc_team_member_add#:#Aggiungi Membro Team (Ricerca) exc#:#exc_team_member_container_add#:#Aggiungi Membro Team da Corso o Gruppo exc#:#exc_team_member_remove_sure#:#Sei sicuro di voler rimuovere i seguenti membri della tua squadra? Si prega di ricordare che tutti i file caricati verranno anche rimossi dalla propria squadra. exc#:#exc_team_members#:#Membri del Team -exc#:#exc_team_min_big_than_max#:#Maximal number of team participants can not be smaller than Minimal number of team participants. -exc#:#exc_team_min_small_than_members#:#Minimal Number of Participants can not be set as %s because teams are set with %s participants. -exc#:#exc_team_minimal_too_big#:#Minimal number of team participants %s is too big, please decrease the value. +exc#:#exc_team_min_big_than_max#:#Il numero massimo di partecipanti al team non può essere inferiore al numero minimo di partecipanti al team. +exc#:#exc_team_min_small_than_members#:#Il numero minimo di partecipanti non può essere impostato come %s perché i team sono impostati con %s partecipanti. +exc#:#exc_team_minimal_too_big#:#Il numero minimo di partecipanti al team %s è troppo grande, si prega di ridurre il valore. exc#:#exc_team_multi_create#:#Crea squadra exc#:#exc_team_multi_dissolve#:#Sciogli squadra/e exc#:#exc_team_notification_body_add#:#sei stato aggiunto ad un compito di caricamento team. exc#:#exc_team_notification_body_rmv#:#sei stato eliminato da un compito di caricamento team. exc#:#exc_team_notification_link#:#Link all'esercizio -exc#:#exc_team_notification_reason#:#You are receiving this email because you are a participant of the exercise mentioned above. +exc#:#exc_team_notification_reason#:#Stai ricevendo questa email perché sei un partecipante dell'esercizio sopra menzionato. exc#:#exc_team_notification_subject_add#:#Sei stato aggiunto come membro del team per caricare compiti exc#:#exc_team_notification_subject_rmv#:#Rimosso da un compito -exc#:#exc_teams_assignment_adopted#:#Teams adopted from existing assignment +exc#:#exc_teams_assignment_adopted#:#Squadre adottate dall'incarico esistente exc#:#exc_template#:#Modello exc#:#exc_text_assignment_edit#:#Modifica testo exc#:#exc_text_assignment_show#:#Mostra testo -exc#:#exc_text_saved#:#Text has been saved.###07 02 2020 new variable -exc#:#exc_too_many_files#:#The upload contains too many files.###29 10 2025 new variable +exc#:#exc_text_saved#:#Il testo è stato salvato. +exc#:#exc_too_many_files#:#The upload contains too many files.###28 11 2025 new variable exc#:#exc_total_exc#:#Totale esercizio -exc#:#exc_total_members#:#Total Exercise Members -exc#:#exc_type#:#Type###26 08 2024 new variable +exc#:#exc_total_members#:#Membri totali dell'esercizio +exc#:#exc_type#:#Type###30 04 2024 new variable exc#:#exc_type_blog#:#Blog exc#:#exc_type_portfolio#:#Portfolio exc#:#exc_type_text#:#Testo exc#:#exc_type_upload#:#Carica exc#:#exc_type_upload_team#:#Squadra caricata -exc#:#exc_value_can_not_set#:#This value can not be set. -exc#:#exc_view_portfolio#:#View Portfolio###26 08 2024 new variable +exc#:#exc_value_can_not_set#:#Questo valore non può essere impostato. +exc#:#exc_view_portfolio#:#View Portfolio###30 04 2024 new variable exc#:#exc_wait_for_files#:#Il download dovrebbe iniziare automaticamente. Se il download non si avvia in 5 secondi, si prega di cliccare qui -exc#:#exc_wiki_container#:#Wiki Container -exc#:#exc_wiki_container_info#:#Location where wikis of participants will be created. +exc#:#exc_wiki_container#:#Contenitore Wiki +exc#:#exc_wiki_container_info#:#Luogo in cui verranno creati i wiki dei partecipanti. exc#:#exc_with_template#:#Con portfolio - Modello exc#:#exc_with_template_info#:#Un portfolio vuoto verrà derivato automaticamente da un modello di portfolio specifico. -exc#:#exc_with_wiki_template#:#With Wiki Template -exc#:#exc_with_wiki_template_info#:#The template wiki will be copied to create the wikis of participants. +exc#:#exc_with_wiki_template#:#Con modello Wiki +exc#:#exc_with_wiki_template_info#:#Il template wiki verrà copiato per creare le wiki dei partecipanti. exc#:#exc_without_template#:#Senza portfolio - Modello exc#:#exc_without_template_info#:#I partecipanti creeranno il loro portfolio da zero -exc#:#exc_without_wiki_template#:#Without Wiki Template -exc#:#exc_without_wiki_template_info#:#Participants will create their wiki from scratch. +exc#:#exc_without_wiki_template#:#Senza modello Wiki +exc#:#exc_without_wiki_template_info#:#I partecipanti creeranno la loro wiki da zero. exc#:#exc_work_instructions#:#Istruzioni del lavoro -exc#:#exc_x_of_y#:#of###26 08 2024 new variable +exc#:#exc_x_of_y#:#of###30 04 2024 new variable exc#:#exc_your_text#:#Il tuo testo -exc#:#feedback_from#:#Feedback from -exc#:#feedback_given#:#Feedback given -exc#:#feedback_received#:#Feedback received -exc#:#fiter_no_results#:#The current filter did not match any submission. -exc#:#grade_evaluate#:#Grade and Evaluate -exc#:#not_yet#:#not yet -exc#:#submissions_feedback#:#Submissions and Feedback -exc#:#submissions_only#:#Submissions Only -exc#:#text_assignment#:#Text Assignment -excv#:#excv_create#:#Create Exercise Verification -excv#:#excv_create_info#:#Select a completed exercise to generate a verification for it +exc#:#feedback_from#:#Feedback da +exc#:#feedback_given#:#Feedback dato +exc#:#feedback_received#:#Feedback ricevuto +exc#:#fiter_no_results#:#Il filtro corrente non corrisponde ad alcun invio. +exc#:#grade_evaluate#:#Classificare e valutare +exc#:#not_yet#:#non ancora +exc#:#submissions_feedback#:#Invio e feedback +exc#:#submissions_only#:#Solo invii +exc#:#text_assignment#:#Assegnazione del testo +excv#:#excv_create#:#Crea verifica esercizio +excv#:#excv_create_info#:#Seleziona un esercizio completato per generare una verifica per esso exercise#:#exc_admin_settings#:#Amministrazione servizio exercise#:#exc_comment#:#Commenti exercise#:#exc_comment_for_learner#:#Commenti per il discente @@ -9769,42 +9757,42 @@ exercise#:#exc_send_mail#:#Invia mail exercise#:#exc_start_date_should_be_before_end_date#:#Il momento dell'inizio dovrebbe essere prima della scadenza. exercise#:#exc_your_submission#:#La tua richiesta exp#:#exp_create_file#:#Crea file di export -exp#:#exp_error_disabled#:#The export feature is disabled for containers. You may contact your system administrator.###07 02 2020 new variable -exp#:#exp_error_too_many_objects#:#The export exceeds the maximum number of allowerd objects (%1). Please select a lower number of objects.###07 02 2020 new variable -exp#:#exp_export_dropdown#:#Export###29 10 2025 new variable +exp#:#exp_error_disabled#:#L'esportazione di oggetti container è disattivata. In caso di domande contatti il supporto tecnico. +exp#:#exp_error_too_many_objects#:#L'esportazione supera il massimale di oggetti consentiti (%1). Per favore scelga un numero inferiore di oggetti. +exp#:#exp_export_dropdown#:#Export###28 11 2025 new variable exp#:#exp_export_files#:#File di export -exp#:#exp_export_single_option#:#Export %s###29 10 2025 new variable +exp#:#exp_export_single_option#:#Export %s###28 11 2025 new variable exp#:#exp_file_created#:#Il file esportato è stato creato. -exp#:#exp_format_dropdown-csv#:#as CSV###29 10 2025 new variable -exp#:#exp_format_dropdown-html#:#as HTML###29 10 2025 new variable -exp#:#exp_format_dropdown-xls#:#as XLS###29 10 2025 new variable -exp#:#exp_format_dropdown-xml#:#as XML###29 10 2025 new variable -exp#:#exp_html#:#HTML###28 10 2024 new variable -exp#:#exp_import_validation_err_no_matching_xsd#:#No valid schema file for version %s exists.###26 08 2024 new variable -exp#:#exp_not_public_access_status#:#Not published###29 10 2025 new variable -exp#:#exp_print_pdf#:#Print/PDF###29 07 2022 new variable -exp#:#exp_print_pdf_info#:#To create a PDF please use the "Print to PDF" target as soon as the print view is presented.###29 07 2022 new variable -exp#:#exp_public_access_status#:#Available in ‘Info’-tab###29 10 2025 new variable +exp#:#exp_format_dropdown-csv#:#as CSV###28 11 2025 new variable +exp#:#exp_format_dropdown-html#:#as HTML###28 11 2025 new variable +exp#:#exp_format_dropdown-xls#:#as XLS###28 11 2025 new variable +exp#:#exp_format_dropdown-xml#:#as XML###28 11 2025 new variable +exp#:#exp_html#:#HTML +exp#:#exp_import_validation_err_no_matching_xsd#:#No valid schema file for version %s exists.###30 04 2024 new variable +exp#:#exp_not_public_access_status#:#Not published###28 11 2025 new variable +exp#:#exp_print_pdf#:#Print/PDF###31 03 2023 new variable +exp#:#exp_print_pdf_info#:#To create a PDF please use the "Print to PDF" target as soon as the print view is presented.###31 03 2023 new variable +exp#:#exp_public_access_status#:#Available in ‘Info’-tab###28 11 2025 new variable exp#:#exp_really_delete#:#Vuoi veramente cancellare questi file di export? -exp#:#exp_show_print_view#:#Show Print View###29 07 2022 new variable +exp#:#exp_show_print_view#:#Show Print View###31 03 2023 new variable exp#:#exp_xml#:#XML exp#:#export_created#:#Un nuovo file di export e'stato creato -exp#:#export_files_deleted#:#The selected export files have been deleted.###26 08 2024 new variable -exp#:#export_options#:#Export Options###28 10 2024 new variable -exp#:#export_type#:#Export Type###28 10 2024 new variable -export#:#exp_file#:#File Name###28 10 2024 new variable -export#:#exp_public_access#:#Public Access###28 10 2024 new variable -export#:#exp_size#:#File Size (MB)###28 10 2024 new variable -export#:#exp_timestamp#:#Creation Date###28 10 2024 new variable -export#:#exp_toggle_public_access#:#Toggle Public Access###28 10 2024 new variable -export#:#exp_type#:#Type###28 10 2024 new variable +exp#:#export_files_deleted#:#The selected export files have been deleted.###18 06 2024 new variable +exp#:#export_options#:#Export Options###28 11 2025 new variable +exp#:#export_type#:#Export Type###28 11 2025 new variable +export#:#exp_file#:#File Name###28 11 2025 new variable +export#:#exp_public_access#:#Public Access###28 11 2025 new variable +export#:#exp_size#:#File Size (MB)###28 11 2025 new variable +export#:#exp_timestamp#:#Creation Date###28 11 2025 new variable +export#:#exp_toggle_public_access#:#Toggle Public Access###28 11 2025 new variable +export#:#exp_type#:#Type###28 11 2025 new variable export#:#export_create#:#Crea export#:#export_create_new_file#:#Crea Nuovo File di Esportazione export#:#export_existing#:#Riutilizza export#:#export_export_date#:#Data di Esportazione -export#:#export_info_public_access#:#Public Access Export###28 10 2024 new variable -export#:#export_info_public_access_download#:#Download###28 10 2024 new variable -export#:#export_last_export#:#Ultimo Export +export#:#export_info_public_access#:#Public Access Export###28 11 2025 new variable +export#:#export_info_public_access_download#:#Download###28 11 2025 new variable +export#:#export_last_export#:#Ultima esportazione export#:#export_last_export_file#:#Usa Data dell'Ultima Esportazione export#:#export_last_file#:#Ultlimo File export#:#export_omit#:#Ometti @@ -9813,141 +9801,141 @@ export#:#export_resource#:#Risorsa export#:#export_save_selection#:#Inizia Export export#:#export_select_resources#:#Seleziona Risorsa export#:#no_file#:#Nessun file -file#:#add_icon#:#Add Icon###26 08 2024 new variable -file#:#amount_of_downloads#:#Downloads###26 08 2024 new variable -file#:#amount_of_downloads_since#:#%d times since %s###26 08 2024 new variable -file#:#copyright_custom#:#Custom###26 08 2024 new variable -file#:#copyright_custom_info#:#Choose a custom copyright which will be applied to all unzipped files of this archive.###26 08 2024 new variable -file#:#copyright_inherited#:#Inherited###26 08 2024 new variable -file#:#copyright_inherited_info#:#Apply the copyright of the zip archive to its unzipped files. <br \>Copyright of zip archive: %s.###26 08 2024 new variable -file#:#could_not_create_file_objs#:#An error occurred while creating your file objects. Please contact the administrators of this platform.###26 08 2024 new variable -file#:#de_activate_icon#:#Activate / Deactivate###26 08 2024 new variable -file#:#download_ascii_filename#:#Allow Only ASCII Characters in Downloaded Filenames###26 08 2024 new variable -file#:#download_ascii_filename_info#:#Downloaded files should only have ASCII-characters in their filename. Deactivate to use all characters.###26 08 2024 new variable -file#:#file_action_download#:#Download file or view content###29 10 2025 new variable -file#:#file_action_download_info#:#If WOPI is activated and the permission 'View Content' is given, the file is shown in tab 'Content'. If not, the file will be offered for direct download.###29 10 2025 new variable -file#:#file_action_show#:#Redirect user to the file’s ‘Info’ tab###29 10 2025 new variable -file#:#file_action_show_info#:#The 'Info' tab is shown where the file could be downloaded in a second step.###29 10 2025 new variable -file#:#file_btn_lp_toggle_state_completed#:#Set Not Completed###26 08 2024 new variable -file#:#file_btn_lp_toggle_state_not_completed#:#Set Completed###26 08 2024 new variable +file#:#add_icon#:#Add Icon###30 04 2024 new variable +file#:#amount_of_downloads#:#Downloads###30 04 2024 new variable +file#:#amount_of_downloads_since#:#%d times since %s###30 04 2024 new variable +file#:#copyright_custom#:#Custom###30 04 2024 new variable +file#:#copyright_custom_info#:#Choose a custom copyright which will be applied to all unzipped files of this archive.###30 04 2024 new variable +file#:#copyright_inherited#:#Inherited###30 04 2024 new variable +file#:#copyright_inherited_info#:#Apply the copyright of the zip archive to its unzipped files. <br \>Copyright of zip archive: %s.###30 04 2024 new variable +file#:#could_not_create_file_objs#:#An error occurred while creating the file objects, contact the administrators of the platform.###30 04 2024 new variable +file#:#de_activate_icon#:#Activate / Deactivate###30 04 2024 new variable +file#:#download_ascii_filename#:#Allow Only ASCII Characters in Downloaded Filenames###30 04 2024 new variable +file#:#download_ascii_filename_info#:#Only allow ASCII characters in the names of downloaded files. Non-ASCII-characters in the names of downloaded files will be replaced with a “_”. Deactivate to allow the use of all characters.###30 04 2024 new variable +file#:#file_action_download#:#Download file or view content###28 11 2025 new variable +file#:#file_action_download_info#:#If WOPI is activated and the permission 'View Content' is given, the file is shown in tab 'Content'. If not, the file will be offered for direct download.###28 11 2025 new variable +file#:#file_action_show#:#Redirect user to the file’s ‘Info’ tab###28 11 2025 new variable +file#:#file_action_show_info#:#The 'Info' tab is shown where the file could be downloaded in a second step.###28 11 2025 new variable +file#:#file_btn_lp_toggle_state_completed#:#Set Not Completed###30 04 2024 new variable +file#:#file_btn_lp_toggle_state_not_completed#:#Set Completed###30 04 2024 new variable file#:#file_copy#:#Copia File file#:#file_download#:#Scarica file file#:#file_import#:#Importa file file#:#file_new_version#:#Crea una nuova versione file#:#file_new_version_info#:#Crea una nuova versione del file. Versioni precedenti non saranno modificate. -file#:#file_publish#:#Publish Draft###26 08 2024 new variable -file#:#file_rollback_rollback_first#:#The selected version could not be published because an unpublished draft exists.###26 08 2024 new variable -file#:#file_rollback_same_version#:#This is already the published version!###26 08 2024 new variable -file#:#file_unpublish#:#Mark as Draft###26 08 2024 new variable -file#:#file_upload_info_file_with_critical_extension#:#The uploaded file contains a critical or unknown file ending. The file ending will be changed to .sec for every download. +file#:#file_publish#:#Publish Draft###30 04 2024 new variable +file#:#file_rollback_rollback_first#:#The version could not be reset because an unpublished draft exists.###30 04 2024 new variable +file#:#file_rollback_same_version#:#This is already the published version###30 04 2024 new variable +file#:#file_unpublish#:#Mark as Draft###30 04 2024 new variable +file#:#file_upload_info_file_with_critical_extension#:#The uploaded file contains a critical or unknown file ending. The file ending will be changed to .sec for every download. If necessary, contact your administrator.###09 03 2022 new variable file#:#file_uploaded_by#:#Caricato da -file#:#file_version_draft#:#Draft Version###26 08 2024 new variable -file#:#file_version_draft_info#:#The latest version of this file has the status ‘Draft’. As long as this version has not been published, no new versions can be created. People with read permission for the file get the most recent previously published version.###26 08 2024 new variable -file#:#form_icon_creation#:#Create Icon###26 08 2024 new variable -file#:#form_icon_updating#:#Update Icon###26 08 2024 new variable -file#:#general_upload_error_occured#:#An unexpected error occured during upload.###29 07 2022 new variable -file#:#important_info#:#Important Information###26 08 2024 new variable -file#:#important_info_byline#:#The information will be displayed in the ‘Info’ tab.###26 08 2024 new variable -file#:#input_active#:#Active###26 08 2024 new variable -file#:#input_desc_active#:#Activate this icon.###26 08 2024 new variable -file#:#input_desc_icon#:#Image to be used as the icon for files with the specified suffixes.###26 08 2024 new variable -file#:#input_desc_suffixes#:#List of comma-separated suffixes (characters and numbers only, without preceding full stop).###26 08 2024 new variable -file#:#input_icon#:#Icon###26 08 2024 new variable -file#:#input_suffixes#:#Suffixes###26 08 2024 new variable -file#:#migrated#:#Status###29 07 2022 new variable -file#:#mime_type#:#MIME Type###26 08 2024 new variable -file#:#msg_cant_unpublish#:#File could not be unpublished.###26 08 2024 new variable -file#:#msg_confirm_entry_deletion#:#Are you sure you want to delete the following entry?:###26 08 2024 new variable -file#:#msg_error_active_suffixes_blacklisted#:#One of the selected file extensions is on the global blacklist and cannot therefore be currently used.###26 08 2024 new variable -file#:#msg_error_active_suffixes_conflict#:#Error: It is not possible to have multiple icons activated for the same suffix. Please deactivate either this icon or the other activated icon whose suffixes overlap with those of this icon.###26 08 2024 new variable -file#:#msg_error_active_suffixes_not_whitelisted#:#The selected file extension is not on the global whitelist. The file suffixes will be changed to ‘.sec’ when downloaded.###26 08 2024 new variable -file#:#msg_error_duplicate_suffix_entries#:#Error: the comma separated list of suffixes contains duplicate entries.###26 08 2024 new variable -file#:#msg_error_icon_deletion#:#Error: icon deletion failed.###26 08 2024 new variable -file#:#msg_error_suffixes_with_forbidden_characters#:#Error: forbidden characters. Only letters, numbers, spaces and commas are allowed.###26 08 2024 new variable -file#:#msg_icon_missing_from_db#:#Icon missing from database.###26 08 2024 new variable -file#:#msg_icon_missing_from_irss#:#Icon missing from resource storage.###26 08 2024 new variable -file#:#msg_success_icon_activated#:#Icon successfully activated.###26 08 2024 new variable -file#:#msg_success_icon_created#:#Icon successfully created.###26 08 2024 new variable -file#:#msg_success_icon_deactivated#:#Icon successfully deactivated.###26 08 2024 new variable -file#:#msg_success_icon_deletion#:#Icon successfully deleted.###26 08 2024 new variable -file#:#msg_success_icon_updated#:#Icon successfully updated.###26 08 2024 new variable -file#:#msg_unzip_success#:#Archive has been successfully unziped.###29 07 2022 new variable -file#:#on_click_action#:#Action When Title Clicked###26 08 2024 new variable -file#:#preview_caption#:#Preview %sof %s###26 08 2024 new variable -file#:#preview_image_size_info#:#The preview versions of images will be downscaled or upscaled as appropriate, so that their longest side is the length (in px) entered here.###26 08 2024 new variable -file#:#preview_persisting#:#Persistent Preview Images###26 08 2024 new variable -file#:#preview_persisting_info#:#Generated preview images will be stored by ILIAS and used from then on each time the preview icon for that file is clicked on. If deactivated, previews will be generated anew each time.###26 08 2024 new variable -file#:#previews_for_tiles#:#Tiles###29 10 2025 new variable -file#:#previews_for_tiles_info#:#Use Preview for Tiles where possible.###29 10 2025 new variable -file#:#publish_before_delete#:#It was not possible to delete any of the existing versions because an unpublished draft exists.###26 08 2024 new variable +file#:#file_version_draft#:#Draft Version###30 04 2024 new variable +file#:#file_version_draft_info#:#The latest version is in "Draft" status. As long as the version has not been published, no new versions can be created. People with read permission on the file get the latest published version.###30 04 2024 new variable +file#:#form_icon_creation#:#Create Icon###30 04 2024 new variable +file#:#form_icon_updating#:#Update Icon###30 04 2024 new variable +file#:#general_upload_error_occured#:#Si è verificato un errore inaspettato alla carica del file. +file#:#important_info#:#Important Information###30 04 2024 new variable +file#:#important_info_byline#:#The information is displayed in the "Info" tab.###30 04 2024 new variable +file#:#input_active#:#Active###30 04 2024 new variable +file#:#input_desc_active#:#Activate this icon.###30 04 2024 new variable +file#:#input_desc_icon#:#Image to be used as the icon for files with the specified suffixes.###30 04 2024 new variable +file#:#input_desc_suffixes#:#List of comma-separated suffixes (characters and numbers only, without preceding full stop).###30 04 2024 new variable +file#:#input_icon#:#Icon###30 04 2024 new variable +file#:#input_suffixes#:#Suffixes###30 04 2024 new variable +file#:#migrated#:#Status###09 03 2022 new variable +file#:#mime_type#:#MIME Type###30 04 2024 new variable +file#:#msg_cant_unpublish#:#Action could not be executed###30 04 2024 new variable +file#:#msg_confirm_entry_deletion#:#Are you sure you want to delete the following entry?:###30 04 2024 new variable +file#:#msg_error_active_suffixes_blacklisted#:#One of the selected file extensions is on the global blacklist and cannot therefore be currently used.###30 04 2024 new variable +file#:#msg_error_active_suffixes_conflict#:#Error: It is not possible to have multiple icons activated for the same suffix. Please deactivate either this icon or the other activated icon whose suffixes overlap with those of this icon.###30 04 2024 new variable +file#:#msg_error_active_suffixes_not_whitelisted#:#The selected file extension is not on the global whitelist. The file suffixes will be changed to ‘.sec’ when downloaded.###30 04 2024 new variable +file#:#msg_error_duplicate_suffix_entries#:#Error: the comma separated list of suffixes contains duplicate entries.###30 04 2024 new variable +file#:#msg_error_icon_deletion#:#Error: icon deletion failed.###30 04 2024 new variable +file#:#msg_error_suffixes_with_forbidden_characters#:#Error: forbidden characters. Only letters, numbers, spaces and commas are allowed.###30 04 2024 new variable +file#:#msg_icon_missing_from_db#:#Icon missing from database.###30 04 2024 new variable +file#:#msg_icon_missing_from_irss#:#Icon missing from resource storage.###30 04 2024 new variable +file#:#msg_success_icon_activated#:#Icon successfully activated.###30 04 2024 new variable +file#:#msg_success_icon_created#:#Icon successfully created.###30 04 2024 new variable +file#:#msg_success_icon_deactivated#:#Icon successfully deactivated.###30 04 2024 new variable +file#:#msg_success_icon_deletion#:#Icon successfully deleted.###30 04 2024 new variable +file#:#msg_success_icon_updated#:#Icon successfully updated.###30 04 2024 new variable +file#:#msg_unzip_success#:#Archive has been successfully unziped.###31 03 2023 new variable +file#:#on_click_action#:#Action When Title Clicked###30 04 2024 new variable +file#:#preview_caption#:#Preview %sof %s###30 04 2024 new variable +file#:#preview_image_size_info#:#The preview versions of images will be downscaled or upscaled as appropriate, so that their longest side is the length (in px) entered here.###30 04 2024 new variable +file#:#preview_persisting#:#Persistent Preview Images###30 04 2024 new variable +file#:#preview_persisting_info#:#Generated preview images will be stored by ILIAS and used from then on each time the preview icon for that file is clicked on. If deactivated, previews will be generated anew each time.###30 04 2024 new variable +file#:#previews_for_tiles#:#Tiles###01 04 2025 new variable +file#:#previews_for_tiles_info#:#Use Preview for Tiles where possible.###01 04 2025 new variable +file#:#publish_before_delete#:#Version(s) could not be deleted because an unpublished draft exists.###30 04 2024 new variable file#:#replace_file_info#:#Tutte le versioni del file verranno cancellate. -file#:#resource_id#:#Resource ID###29 07 2022 new variable -file#:#service_settings#:#Additional Features###26 08 2024 new variable -file#:#service_settings_saved#:#Changes saved.###26 08 2024 new variable -file#:#set_license_for_all_files#:#Set License for All Files###26 08 2024 new variable -file#:#show_amount_of_downloads#:#Show Number of Downloads###26 08 2024 new variable -file#:#show_amount_of_downloads_info#:#Display the number of times a file object has been downloaded on its 'Info' page.###26 08 2024 new variable -file#:#storage_id#:#Storage ID###29 07 2022 new variable -file#:#suffix_specific_icons#:#Suffix-Specific Icons###26 08 2024 new variable -file#:#suffixes#:#Suffixes###26 08 2024 new variable -file#:#upload_files#:#Upload Files###26 08 2024 new variable -file#:#upload_files_limit#:#The maximum file size allowed is %s.###26 08 2024 new variable -file#:#upload_files_title#:#Upload Files###26 08 2024 new variable -file#:#upload_info#:#File###07 02 2020 new variable -file#:#upload_info_desc#:#Manage Uploads and Versions in Tab "Versions"###07 02 2020 new variable -file#:#version_uploaded#:#Version uploaded###29 07 2022 new variable -file#:#versionname#:#Title###29 07 2022 new variable -fils#:#add_upload_policy#:#Add Policy###26 08 2024 new variable -fils#:#edit_upload_policy#:#Edit Policy###26 08 2024 new variable -fils#:#file_services#:#File Services###29 07 2022 new variable -fils#:#file_services_description#:#Configuration of File Service Settings.###29 07 2022 new variable -fils#:#file_suffix_custom_expl_negative#:#Prohibited File Suffixes###29 07 2022 new variable -fils#:#file_suffix_custom_expl_negative_info#:#Files with these suffixes won't be accepted for upload.###29 07 2022 new variable -fils#:#file_suffix_custom_negative#:#File Suffixes: Negative List (Adaptations)###29 07 2022 new variable -fils#:#file_suffix_custom_negative_info#:#These file suffixes will be removed from the positive list.###29 07 2022 new variable -fils#:#file_suffix_custom_positive#:#File Suffixes: Positive List (Adaptations)###29 07 2022 new variable -fils#:#file_suffix_custom_positive_info#:#These file suffixes will be added to the positive list.###29 07 2022 new variable -fils#:#file_suffix_default_positive#:#File Suffixes: Positive List (Default List)###29 07 2022 new variable -fils#:#file_suffix_default_positive_info#:#Preset default list of accepted file suffixes.###29 07 2022 new variable -fils#:#file_suffix_overall_positive#:#Overall Positive List###29 07 2022 new variable -fils#:#file_suffix_overall_positive_info#:#This is the final list of accepted file suffixes.###29 07 2022 new variable -fils#:#policy_audience#:#Target Group###26 08 2024 new variable -fils#:#policy_audience_all_users_option_desc#:#Apply policy to all users.###26 08 2024 new variable -fils#:#policy_audience_global_roles_option_desc#:#Apply policy to users with specific global roles.###26 08 2024 new variable -fils#:#policy_confirm_deletion#:#Are you sure you want to delete the policy with the following properties?:###26 08 2024 new variable -fils#:#policy_deletion_failure_not_found#:#Error: Deletion failed because policy could not be found.###26 08 2024 new variable -fils#:#policy_deletion_successful#:#Policy successfully deleted.###26 08 2024 new variable -fils#:#policy_filter#:#Policy Filter###26 08 2024 new variable -fils#:#policy_no_validity_limitation_set#:#Valid indefinitely###26 08 2024 new variable -fils#:#policy_scope#:#Scope###26 08 2024 new variable -fils#:#policy_table_info_no_policies#:#No upload policies have been created yet.###26 08 2024 new variable -fils#:#policy_title_desc#:#Descriptive title for this policy.###26 08 2024 new variable -fils#:#policy_upload_limit#:#Upload Limit###26 08 2024 new variable -fils#:#policy_upload_limit_desc#:#Upload limit (in MB) imposed by this policy.###26 08 2024 new variable -fils#:#policy_valid_until#:#Valid Until###26 08 2024 new variable -fils#:#policy_valid_until_desc#:#Set an optional ‘valid until’ date, after which the policy expires.###26 08 2024 new variable -fils#:#policy_validity#:#Validity###26 08 2024 new variable -fils#:#upload_limits#:#Upload Limits###26 08 2024 new variable -fils#:#upload_policies#:#Upload Policies###26 08 2024 new variable +file#:#resource_id#:#Resource ID###09 03 2022 new variable +file#:#service_settings#:#Additional Features###30 04 2024 new variable +file#:#service_settings_saved#:#Saved###30 04 2024 new variable +file#:#set_license_for_all_files#:#Set License for All Files###30 04 2024 new variable +file#:#show_amount_of_downloads#:#Show Number of Downloads###30 04 2024 new variable +file#:#show_amount_of_downloads_info#:#Display the number of times a file object has been downloaded on its 'Info' page.###30 04 2024 new variable +file#:#storage_id#:#Storage ID###09 03 2022 new variable +file#:#suffix_specific_icons#:#Suffix-Specific Icons###30 04 2024 new variable +file#:#suffixes#:#Suffixes###30 04 2024 new variable +file#:#upload_files#:#Upload Files###30 04 2024 new variable +file#:#upload_files_limit#:#The maximum size of a file is %s.###30 04 2024 new variable +file#:#upload_files_title#:#Upload Files###30 04 2024 new variable +file#:#upload_info#:#File +file#:#upload_info_desc#:#Gestisci Upload e versioni nella scheda "Versioni" +file#:#version_uploaded#:#Version uploaded###09 03 2022 new variable +file#:#versionname#:#Title###09 03 2022 new variable +fils#:#add_upload_policy#:#Add Policy###30 04 2024 new variable +fils#:#edit_upload_policy#:#Edit Policy###30 04 2024 new variable +fils#:#file_services#:#File Services +fils#:#file_services_description#:#Configuration of File Service Settings. +fils#:#file_suffix_custom_expl_negative#:#Prohibited File Suffixes +fils#:#file_suffix_custom_expl_negative_info#:#Files with these suffixes won't be accepted for upload. +fils#:#file_suffix_custom_negative#:#File Suffixes: Negative List (Adaptations) +fils#:#file_suffix_custom_negative_info#:#These file suffixes will be removed from the positive list. +fils#:#file_suffix_custom_positive#:#File Suffixes: Positive List (Adaptations) +fils#:#file_suffix_custom_positive_info#:#These file suffixes will be added to the positive list. +fils#:#file_suffix_default_positive#:#File Suffixes: Positive List (Default List) +fils#:#file_suffix_default_positive_info#:#Preset default list of accepted file suffixes. +fils#:#file_suffix_overall_positive#:#Overall Positive List +fils#:#file_suffix_overall_positive_info#:#This is the final list of accepted file suffixes. +fils#:#policy_audience#:#Audience###30 04 2024 new variable +fils#:#policy_audience_all_users_option_desc#:#Apply policy for all users.###30 04 2024 new variable +fils#:#policy_audience_global_roles_option_desc#:#Apply policy for users with specific global roles.###30 04 2024 new variable +fils#:#policy_confirm_deletion#:#Are you sure you want to delete the policy with the following properties?:###30 04 2024 new variable +fils#:#policy_deletion_failure_not_found#:#Error: Deletion failed due to policy not being found.###30 04 2024 new variable +fils#:#policy_deletion_successful#:#Deletion of policy was successful.###30 04 2024 new variable +fils#:#policy_filter#:#Policy Filter###30 04 2024 new variable +fils#:#policy_no_validity_limitation_set#:#Valid indefinitely###30 04 2024 new variable +fils#:#policy_scope#:#Scope###30 04 2024 new variable +fils#:#policy_table_info_no_policies#:#No upload policies have been created yet.###30 04 2024 new variable +fils#:#policy_title_desc#:#Descriptive title for the policy.###30 04 2024 new variable +fils#:#policy_upload_limit#:#Upload Limit###30 04 2024 new variable +fils#:#policy_upload_limit_desc#:#Upload limit which is set by this policy in MB.###30 04 2024 new variable +fils#:#policy_valid_until#:#Valid Until###30 04 2024 new variable +fils#:#policy_valid_until_desc#:#Set an optional 'valid until' date after which the policy expires.###30 04 2024 new variable +fils#:#policy_validity#:#Validity###30 04 2024 new variable +fils#:#upload_limits#:#Upload Limits###30 04 2024 new variable +fils#:#upload_policies#:#Upload Policies###30 04 2024 new variable fold#:#fold_copy#:#Copia cartella fold#:#fold_import#:#Importa Cartella -fold#:#fold_presentation#:#Folder Presentation +fold#:#fold_presentation#:#Presentazione cartella fold#:#fold_settings#:#Impostazioni cartella -form#:#email_not_match#:#Your entries for the email address don't match! Please re-enter your email address. +form#:#email_not_match#:#Le voci per l'indirizzo e-mail non corrispondono! Inserisci nuovamente il tuo indirizzo email. form#:#form_alphabet_all#:#Tutto form#:#form_chars_remaining#:#Caratteri rimanenti: form#:#form_date_duration_end#:#Fine form#:#form_date_duration_start#:#Avvio form#:#form_days#:#Giorni -form#:#form_file_input#:#input file +form#:#form_file_input#:#Seleziona file form#:#form_format#:#Formato form#:#form_get_link#:#Seleziona l'oggetto obiettivo form#:#form_hier_click_to_add#:#Clicca qui per aggiungere nuovi elementi. form#:#form_hierarchy_add_elements#:#Clicca sul segnaposto per aggiungere un nuovo elemento. -form#:#form_hierarchy_drag_drop_help#:#Drag and drop le icone sul segnaposto per muovere gli elementi. +form#:#form_hierarchy_drag_drop_help#:#Copia e incolla le icone sul segnaposto per muovere gli elementi. form#:#form_hours#:#Ore form#:#form_image_file_input#:#Input del File Immagine -form#:#form_invalid_uri#:#Invalid URI format.###29 07 2022 new variable +form#:#form_invalid_uri#:#Invalid URI format. form#:#form_link_external#:#Esterno form#:#form_link_internal#:#Interno form#:#form_location_radius#:#Raggio @@ -9957,7 +9945,7 @@ form#:#form_min_value#:#Valutazione minima. form#:#form_minutes#:#Minuti form#:#form_months#:#Mesi form#:#form_msg_file_cannot_write_to_disk#:#Non è possibile sovrascrivere l'unita'. -form#:#form_msg_file_missing_file_ext#:#The uploaded file has no file type exension.###07 02 2020 new variable +form#:#form_msg_file_missing_file_ext#:#Il file caricato non ha estensione del tipo di file. form#:#form_msg_file_missing_tmp_dir#:#Directory momentanea del file mancante in upload. form#:#form_msg_file_no_upload#:#Questo input è richiesto. Per favore seleziona un file da caricare. form#:#form_msg_file_partially_uploaded#:#Non è stato possibile caricare completamente il file. @@ -9967,7 +9955,7 @@ form#:#form_msg_file_upload_stopped_ext#:#File upload è stato fermato dall'este form#:#form_msg_file_virus_found#:#Nel file caricato è stato trovato un virus. form#:#form_msg_file_wrong_file_type#:#Tipo file non ammesso. form#:#form_msg_formula_is_required#:#Inserire una formula corretta. -form#:#form_msg_max_upload#:#Maximum number of simultaneously uploadable files:###29 07 2022 new variable +form#:#form_msg_max_upload#:#Maximum number of simultaneously uploadable files: form#:#form_msg_numeric_value_required#:#Inserisci per favore un valore numerico. form#:#form_msg_value_too_high#:#Valore troppo alto. Inserisci un valore più basso. form#:#form_msg_value_too_low#:#Valore troppo basso. Inserisci un valore più alto. @@ -9977,11 +9965,11 @@ form#:#form_open_answer#:#Apri domanda form#:#form_password_not_allowed_for_auth#:#Non è possibile cambiare la password per il metodo di autenticazione prescelto. form#:#form_password_required_for_auth#:#Per questo metodo di autenticazione è richiesta la password. form#:#form_please_select#:#Selezionare -form#:#form_retype_email#:#Retype Email +form#:#form_retype_email#:#Riscrivi Email form#:#form_retype_password#:#Riscrivi password form#:#form_seconds#:#Secondi -form#:#form_take_snapshot#:#Take Snapshot###29 07 2022 new variable -form#:#form_use_camera#:#Use Camera###29 07 2022 new variable +form#:#form_take_snapshot#:#Take Snapshot###31 03 2023 new variable +form#:#form_use_camera#:#Use Camera###31 03 2023 new variable forum#:#activate_new_posts#:#Attiva i Posts forum#:#activate_only_current#:#Attiva corrente forum#:#activate_post#:#Attivare @@ -10002,28 +9990,28 @@ forum#:#content_censored_post#:#Contenuto dei messaggi censurati: forum#:#content_deleted_post#:#Contenuto dei messaggi eliminati: forum#:#content_deleted_thread#:#Contenuto delle conversazioni eliminate: forum#:#content_post_updated#:#Contenuto dei messaggi modificati: -forum#:#deletePosting#:#Delete Posting###29 07 2022 new variable -forum#:#deletePostingDraft#:#Delete Draft###29 07 2022 new variable +forum#:#deletePosting#:#Delete Posting +forum#:#deletePostingDraft#:#Delete Draft forum#:#delete_draft_successfully#:#La bozza è stata eliminata con successo. forum#:#delete_drafts_successfully#:#Le bozze sono state eliminate correttamente. -forum#:#delete_thread#:#Delete Thread###26 08 2024 new variable +forum#:#delete_thread#:#Delete Thread###30 04 2024 new variable forum#:#descending_order#:#Ultimi post in alto forum#:#edit_thread_draft#:#Modifica bozza di conversazione forum#:#empty_subject#:#Sulla risposta l'utente deve inserire un nuovo titolo. -forum#:#empty_thread#:#Empty Thread###29 07 2022 new variable +forum#:#empty_thread#:#Empty Thread###31 03 2023 new variable forum#:#enable_send_attachments#:#Invia allegati con notifiche del forum forum#:#enable_send_attachments_desc#:#Si prega di notare che i file allegati devono essere archiviati separatamente per ogni utente notificato. Ciò può causare un elevato utilizzo dello spazio su disco del server. forum#:#enable_thread_ratings#:#Classificazione conversazione forum#:#enable_thread_ratings_info#:#Se attiva, gli utenti possono classificare le conversazioni. forum#:#enter_new_subject#:#Per favore, inserisci un nuovo oggetto -forum#:#error_no_target_selected#:#Please select a forum.###29 07 2022 new variable +forum#:#error_no_target_selected#:#Please select a forum.###31 03 2023 new variable forum#:#error_reading_file#:#C’è stato un errore nella lettura del file forum#:#error_same_thread_ids#:#Le conversazioni di origine e di destinazione devono essere diverse. forum#:#file_upload_allowed#:#Consenti allegati forum#:#file_upload_allowed_fora#:#Allegati forum#:#file_upload_allowed_fora_desc#:#Se selezionato "Consenti allegati nei forum selezionati ", i moderatori del forum possono consentire individualmente di allegare file alle registrazioni nelle impostazioni di ciascun forum. Nei nuovi forum il caricamento degli allegati sarà disabilitato per impostazione predefinita. forum#:#file_upload_option_allow#:#Consenti allegati in tutti i forum -forum#:#file_upload_option_allow_info#:#Files can be attached to posts in all forums.###29 07 2022 new variable +forum#:#file_upload_option_allow_info#:#Files can be attached to posts in all forums.###09 03 2022 new variable forum#:#file_upload_option_disallow#:#Consenti allegati nei forum selezionati forum#:#fmr_copy_threads_info#:#Hai la possibilità di copiare singole frasi chiave. Solo l'inizio della frase chiave sarà duplicato. forum#:#forum_add_quote#:#Aggiungi citazione @@ -10039,8 +10027,8 @@ forum#:#forums_download_attachment#:#Download dell'allegato forum#:#forums_edit_draft#:#Modifica bozza forum#:#forums_edit_post#:#Modifica messaggio forum#:#forums_enable_notification#:#Abilita la notifica -forum#:#forums_forum_notification#:#Send Forum Notifications###28 10 2024 new variable -forum#:#forums_forum_notification_desc#:#If enabled, all users, who want to be informed about new posts in specified forum threads, will get notifications by mail.###28 10 2024 new variable +forum#:#forums_forum_notification#:#Send Forum Notifications###08 10 2024 new variable +forum#:#forums_forum_notification_desc#:#If enabled, all users, who want to be informed about new posts in specified forum threads, will get notifications by mail.###08 10 2024 new variable forum#:#forums_forum_notification_disabled#:#Non sarete piu'informati di nuovi messaggi in questo forum. forum#:#forums_info_censor2_post#:#Sei sicuro di voler continuare a nascondere questo messaggio? forum#:#forums_info_censor_post#:#Sei sicuro di voler nascondere questo messaggio? @@ -10074,15 +10062,15 @@ forum#:#forums_thread_new_entry#:#Un nuovo argomento e' stato creato forum#:#forums_threads_deleted#:#Le conversazioni selezionate comprendono tutti i messaggi che sono stati eliminati. forum#:#forums_threads_drafts_deleted#:#Le conversazioni selezionate comprendono tutte le registrazioni e le bozze selezionate. forum#:#forums_your_reply#:#tua risposta -forum#:#frm_action_not_possible_parent_deleted#:#Action not possible, the parent posting has been deleted. -forum#:#frm_action_not_possible_thr_closed#:#Action not possible, the thread has been closed. -forum#:#frm_action_not_possible_thr_deleted#:#Action not possible, the thread has been deleted. -forum#:#frm_activation_online_info#:#Set the forum online to make it visible and available to other users. If not, only administrators will have access to it.###29 07 2022 new variable -forum#:#frm_adm_sec_default_settings#:#Default Object Settings###26 08 2024 new variable -forum#:#frm_adm_sec_drafts#:#Drafts###26 08 2024 new variable -forum#:#frm_adm_sec_features#:#Forum Features###26 08 2024 new variable -forum#:#frm_adm_sec_notifications#:#Notifications###26 08 2024 new variable -forum#:#frm_all_threads#:#All Threads###26 08 2024 new variable +forum#:#frm_action_not_possible_parent_deleted#:#Azione impossibile, la pubblicazione principale è stata eliminata. +forum#:#frm_action_not_possible_thr_closed#:#Azione impossibile, il thread è stato chiuso. +forum#:#frm_action_not_possible_thr_deleted#:#Azione impossibile, il thread è stato eliminato. +forum#:#frm_activation_online_info#:#Set the forum online to make it visible and available to other users. If not, only administrators will have access to it.###31 03 2023 new variable +forum#:#frm_adm_sec_default_settings#:#Default Object Settings###30 04 2024 new variable +forum#:#frm_adm_sec_drafts#:#Drafts###30 04 2024 new variable +forum#:#frm_adm_sec_features#:#Forum Features###30 04 2024 new variable +forum#:#frm_adm_sec_notifications#:#Notifications###30 04 2024 new variable +forum#:#frm_all_threads#:#All Threads###31 03 2023 new variable forum#:#frm_anonymous_posting#:#Messaggi anonimi forum#:#frm_anonymous_posting_desc#:#Se selezionato sara'; consentito inserire messaggi anonimi all';interno di questo forum. forum#:#frm_at_least_one_moderator#:#Deve esserci almeno un amministratore. @@ -10091,9 +10079,9 @@ forum#:#frm_censorship_applied#:#La censura è stata applicata con successo. forum#:#frm_censorship_revoked#:#La censura è stata revocata con successo. forum#:#frm_copy#:#Copia Forum forum#:#frm_default_view#:#Vista predefinita -forum#:#frm_edit_title#:#Edita Title -forum#:#frm_enable_print_option#:#Enable print option###26 08 2024 new variable -forum#:#frm_enable_print_option_desc#:#If disabled, nobody is able to select the print option in Forum.###26 08 2024 new variable +forum#:#frm_edit_title#:#Edita Titolo +forum#:#frm_enable_print_option#:#Enable print option###30 04 2024 new variable +forum#:#frm_enable_print_option_desc#:#If disabled, nobody is able to select the print option in Forum.###30 04 2024 new variable forum#:#frm_mark_as_read#:#Segna come letto forum#:#frm_mark_as_unread#:#Segna come non letto forum#:#frm_max_notification_age#:#Periodo massimo di notifica @@ -10110,7 +10098,7 @@ forum#:#frm_moderators_detached_role_successfully#:#Il ruolo di moderatore è st forum#:#frm_moderators_not_exist_yet#:#Per favore seleziona un moderatore. forum#:#frm_moderators_select_at_least_one#:#Per favore, seleziona almeno un moderatore. forum#:#frm_moderators_select_one#:#Per favore, seleziona almeno un utente -forum#:#frm_move_invalid_file_type#:#The thread "%s" has an unsupported file type attached. Remove the file or contact the administrator of the system to add this file type to the file type whitelist.###07 02 2020 new variable +forum#:#frm_move_invalid_file_type#:#Il thread "%s" ha un tipo di file non supportato allegato. Rimuovere il file o contattare l'amministratore del sistema per aggiungere questo tipo di file alla whitelist del tipo di file. forum#:#frm_noti_message#:#Messaggio: forum#:#frm_noti_new_post#:#un nuovo messaggio è stato creato nel forum "%1$s". forum#:#frm_noti_obj_crs#:#course###29 07 2022 new variable @@ -10126,17 +10114,17 @@ forum#:#frm_noti_subject_upt_post#:#Messaggio modificato nel forum "%1$s", conve forum#:#frm_notification_activated#:#Notifica Attivata forum#:#frm_notification_deactivated#:#Notifica Disattivata forum#:#frm_post_not_activated_yet#:#Non ancora attivato. -forum#:#frm_posts#:#Forum Posts###29 07 2022 new variable +forum#:#frm_posts#:#Forum Posts forum#:#frm_pseudonym#:#Pseudonimo forum#:#frm_purifier_not_implemented_for_type_x#:#Filtro per tipo %s non ancora implementato. forum#:#frm_rating#:#Classificazione forum#:#frm_revoke_censorship#:#Revoca censura forum#:#frm_search#:#Cerca forum#:#frm_selected_merge_src#:#Selezionare una conversazione per unire: %s -forum#:#frm_settings_form_header#:#Forum Settings###07 02 2020 new variable -forum#:#frm_settings_mod_functions_header#:#Moderator Functions###07 02 2020 new variable -forum#:#frm_settings_privacy_header#:#Privacy###07 02 2020 new variable -forum#:#frm_settings_user_functions_header#:#User Functions###07 02 2020 new variable +forum#:#frm_settings_form_header#:#Impostazioni del forum +forum#:#frm_settings_mod_functions_header#:#Funzioni del moderatore +forum#:#frm_settings_privacy_header#:#Privacy +forum#:#frm_settings_user_functions_header#:#Funzioni utente forum#:#frm_statistics#:#Statistiche forum#:#frm_statistics_disabled_for_participants#:#Le statistiche sono disabilitate per i membri del forum. forum#:#frm_statistics_enabled#:#Abilita le statistiche @@ -10144,53 +10132,53 @@ forum#:#frm_statistics_enabled_desc#:#Abilita le statistiche dei post a tutti i forum#:#frm_statistics_ranking#:#Classifica forum#:#frm_subject_setting#:#Impostazioni Oggetto forum#:#frm_sure_delete_threads#:#Sei sicuro di voler eliminare le seguenti discussioni? -forum#:#frm_sure_merge_threads#:#Are you sure you want to merge these threads? Warning: This action can not be undone! Eventually ILIAS swaps source and target thread if the first posting of the source thread is created earlier than the first posting of the target thread. -forum#:#frm_task_publishing_draft_title#:#Publishing of Draft "%s"###07 02 2020 new variable +forum#:#frm_sure_merge_threads#:#Sei sicuro di voler unire questi thread? Attenzione: questa azione non può essere annullata! Alla fine ILIAS scambia il thread di origine e di destinazione se il primo post del thread di origine viene creato prima del primo post del thread di destinazione. +forum#:#frm_task_publishing_draft_title#:#Publishing of Draft "%s" forum#:#frm_wizard_page#:#Copia Forum (Passo 2/2) forum#:#is_read#:#segna come letto forum#:#make_topics_non_sticky#:#Crea Topics Non-Sticky forum#:#make_topics_sticky#:#Crea Topics Sticky forum#:#mark_moderator_posts#:#Segna i post del moderatore -forum#:#mark_moderator_posts_desc#:#Se il moderatore attivo posta questo verra' evidenziato +forum#:#mark_moderator_posts_desc#:#Se attivato i messaggi dei moderatori saranno evidenziati forum#:#merge#:#Unisci forum#:#merge_posts_into_thread#:#Unire le registrazioni in altre conversazioni forum#:#merged_threads_successfully#:#Le conversazioni selezionate sono state unite con successo forum#:#move_chosen_topics#:#Muovi i topics selezionati. forum#:#move_thread_to_forum#:#Sposta conversazione in altri forum forum#:#new_post#:#Nuovo messaggio -forum#:#new_thread_with_post#:#New Thread with Posting###29 07 2022 new variable +forum#:#new_thread_with_post#:#New Thread with Posting###31 03 2023 new variable forum#:#no_forum_selected#:#Non è selezionato nessun forum dove spostare i topics selezionati. forum#:#not_allowed_to_merge_into_another_forum#:#Non è possibile unire le conversazioni di diversi forum. -forum#:#notification_settings#:#Notification Settings###29 07 2022 new variable -forum#:#notify_censored#:#Censored Posts###29 07 2022 new variable -forum#:#notify_modified#:#Modified Posts###29 07 2022 new variable -forum#:#notify_post_deleted#:#Deleted Posts###29 07 2022 new variable -forum#:#notify_thread_deleted#:#Deleted Threads###29 07 2022 new variable -forum#:#notify_uncensored#:#Uncensored Posts###29 07 2022 new variable +forum#:#notification_settings#:#Notification Settings###31 03 2023 new variable +forum#:#notify_censored#:#Censored Posts###31 03 2023 new variable +forum#:#notify_modified#:#Modified Posts###31 03 2023 new variable +forum#:#notify_post_deleted#:#Deleted Posts###31 03 2023 new variable +forum#:#notify_thread_deleted#:#Deleted Threads###31 03 2023 new variable +forum#:#notify_uncensored#:#Uncensored Posts###31 03 2023 new variable forum#:#number_of_threads#:#Numero di discussioni visualizzate per pagina forum#:#please_choose_target#:#Si prega di scegliere una conversazione come destinazione di unione. forum#:#post_activation_desc#:#Se abilitato, il moderatore dovrà attivare i nuovi post. forum#:#post_censored_by#:#messaggio censurato nel forum "%2$s", tramite"%1$s": forum#:#post_censored_comment_by_moderator#:#Post Censurato, Commento del Moderatore forum#:#post_deleted_by#:#i seguenti messaggi del forum "%2$s" sono stati eliminati da "%1$s": -forum#:#post_draft_info#:#This post draft is only visible for you.###26 08 2024 new variable +forum#:#post_draft_info#:#This posting draft is only visible for you.###30 04 2024 new variable forum#:#post_reply#:#Re: forum#:#post_reply_count#:#Re(%s): forum#:#post_uncensored_by#:#un messaggio è stato censurato tramite "%1$s" forum#:#post_updated_by#:#messaggio successivamente modificato nel forum tramite "%1$s": "%2$s" forum#:#preset_subject#:#Imposta oggetto sulla risposta forum#:#publish#:#Pubblica -forum#:#relevance#:#Relevance###26 08 2024 new variable +forum#:#relevance#:#Relevance###30 04 2024 new variable forum#:#reopen_topics#:#Riaprire forum#:#reply_to_postings#:#Rispondi -forum#:#reset_limited_view#:#Limited view on this post an all posts below it.###29 07 2022 new variable -forum#:#reset_limited_view_button#:#Show entire thread###29 07 2022 new variable -forum#:#reset_limited_view_info#:#Limited view on this post and all posts below it.###29 07 2022 new variable +forum#:#reset_limited_view#:#Limited view on this post an all posts below it.###31 03 2023 new variable +forum#:#reset_limited_view_button#:#Show entire thread###31 03 2023 new variable +forum#:#reset_limited_view_info#:#Limited view on this post and all posts below it.###31 03 2023 new variable forum#:#restore#:#Ripristina forum#:#restore_draft_from_autosave#:#Ripristina bozza forum#:#save_draft_successfully#:#La bozza è stata salvata con successo. forum#:#sel_threads_already_sticky#:#Almeno una delle conversazioni selezionate è già permanente -forum#:#sel_threads_already_unsticky#:#At least one of the selected threads is already unsticky +forum#:#sel_threads_already_unsticky#:#Almeno uno dei thread selezionati è già non evidenziato forum#:#sel_threads_make_sticky#:#Le conversazioni selezionate sono state segnate come permanenti forum#:#sel_threads_make_unsticky#:#Le conversazioni selezionate non sono segnate ancora come permanenti forum#:#select_at_least_one_thread#:#Per favore, seleziona almeno un topic. @@ -10198,94 +10186,94 @@ forum#:#select_max_one_thread#:#Per favore seleziona solo una discussione! forum#:#selected_threads_closed#:#Le conversazioni selezionate sono state chiuse forum#:#selected_threads_reopened#:#Le conversazioni selezionate sono state riaperte forum#:#sort_by_date#:#Ordina per data -forum#:#sort_by_date_desc#:#The thread is presented in a flat view. The posts are shown in chronological order of creation.###26 08 2024 new variable +forum#:#sort_by_date_desc#:#The thread is presented in a flat view. The postings are shown in chronological order of creation.###31 03 2023 new variable forum#:#sort_by_posts#:#Ordina per post -forum#:#sort_by_posts_desc#:#The thread is presented in a tree view. Replies to posts are shown in the order in which they relate to each other.###26 08 2024 new variable -forum#:#sorting#:#Sorting###07 02 2020 new variable -forum#:#sticky#:#incolla +forum#:#sort_by_posts_desc#:#The thread is presented in a tree view. Replies to posts are shown in the order in which they relate to each other.###31 03 2023 new variable +forum#:#sorting#:#Ordinamento +forum#:#sticky#:#Incolla forum#:#sure_delete_drafts#:#Sei sicuro di voler eliminare le bozze selezionate? forum#:#switch_threads_for_merge#:#La conversazione selezionata è più datata rispetto a quella di destinazione. Per assicurarsi un’unione riuscita, la conversazione di origine e di destinazione verranno spostate. -forum#:#target_select#:#Select posting for limited view###29 07 2022 new variable -forum#:#thema#:#Threads###26 08 2024 new variable +forum#:#target_select#:#Select posting for limited view###31 03 2023 new variable +forum#:#thema#:#Threads###30 04 2024 new variable forum#:#thread#:#Argomento forum#:#thread_deleted_by#:#le seguenti conversazioni del forum "%2$s" sono state eliminate da "%1$s": -forum#:#thread_overview#:#Thread-Overview###26 08 2024 new variable -forum#:#threads_moved_successfully#:#I topics selezionati, sono stati spostati ad un altro forum, con esito positivo. -forum#:#top_thema#:#Top-Threads###26 08 2024 new variable -forum#:#topic_close#:#close -forum#:#topics_please_select_one_action#:#per favore seleziona un'azione +forum#:#thread_overview#:#Thread-Overview###30 04 2024 new variable +forum#:#threads_moved_successfully#:#I topics selezionati sono stati spostati ad un altro forum, con esito positivo. +forum#:#top_thema#:#Top-Threads###30 04 2024 new variable +forum#:#topic_close#:#Chiuso +forum#:#topics_please_select_one_action#:#Per favore seleziona un'azione forum#:#user_decides_notification#:#Ogni utente decide sulle notifiche. glo#:#glo_add_from_other#:#Raggruppa termini -glo#:#glo_add_glossary#:#Add Glossary###26 08 2024 new variable -glo#:#glo_add_to_collection#:#Add Glossary to Collection Glossary###26 08 2024 new variable -glo#:#glo_added_to_collection_info#:#The selected glossary has been added to the collection glossary.###26 08 2024 new variable -glo#:#glo_answered_correctly#:#I got it right###26 08 2024 new variable -glo#:#glo_answered_not_correctly#:#I was wrong###26 08 2024 new variable -glo#:#glo_box#:#Box###26 08 2024 new variable -glo#:#glo_box_completed#:#You have completed the box.###26 08 2024 new variable -glo#:#glo_box_last_presented#:#Box Last Presented###26 08 2024 new variable -glo#:#glo_boxes#:#Boxes###26 08 2024 new variable -glo#:#glo_boxes_really_reset#:#Do you really want to reset all boxes? All flashcards will be moved to the first box.###26 08 2024 new variable -glo#:#glo_boxes_reset#:#The boxes have been reset successfully.###26 08 2024 new variable -glo#:#glo_bulk_confirmation#:#Please check if all terms and definitions are listed correctly.###26 08 2024 new variable -glo#:#glo_bulk_creation#:#Bulk Creation###26 08 2024 new variable -glo#:#glo_change_to_collection_unavailable_info#:#To change the type of content assembly to "Collection Glossary", you first have to delete all existing terms within this glossary in tab "Content".###26 08 2024 new variable -glo#:#glo_change_to_standard_unavailable_info#:#To change the type of content assembly to "Standard Glossary", you first have to remove the selected glossaries in tab "Content".###26 08 2024 new variable -glo#:#glo_check#:#Check###29 10 2025 new variable -glo#:#glo_collection#:#Collection Glossary###29 07 2022 new variable -glo#:#glo_collection_empty_info#:#This collection glossary is currently empty. Please add at least one glossary to it.###26 08 2024 new variable -glo#:#glo_collection_info#:#The glossary collects additional terms of other glossaries.###29 07 2022 new variable -glo#:#glo_content_assembly#:#Content Assembly###29 07 2022 new variable +glo#:#glo_add_glossary#:#Add Glossary###30 04 2024 new variable +glo#:#glo_add_to_collection#:#Add Glossary to Collection Glossary###30 04 2024 new variable +glo#:#glo_added_to_collection_info#:#The selected glossary has been added to the collection glossary.###30 04 2024 new variable +glo#:#glo_answered_correctly#:#I got it right###30 04 2024 new variable +glo#:#glo_answered_not_correctly#:#I was wrong###30 04 2024 new variable +glo#:#glo_box#:#Box###30 04 2024 new variable +glo#:#glo_box_completed#:#You have completed the box.###30 04 2024 new variable +glo#:#glo_box_last_presented#:#Box Last Presented###30 04 2024 new variable +glo#:#glo_boxes#:#Boxes###30 04 2024 new variable +glo#:#glo_boxes_really_reset#:#Do you really want to reset all boxes? All flashcards will be moved to the first box.###30 04 2024 new variable +glo#:#glo_boxes_reset#:#The boxes have been reset successfully.###30 04 2024 new variable +glo#:#glo_bulk_confirmation#:#Please check if all terms and definitions are listed correctly.###30 04 2024 new variable +glo#:#glo_bulk_creation#:#Bulk Creation###30 04 2024 new variable +glo#:#glo_change_to_collection_unavailable_info#:#To change the type of content assembly to "Collection Glossary", you first have to delete all existing terms within this glossary in tab "Content".###30 04 2024 new variable +glo#:#glo_change_to_standard_unavailable_info#:#To change the type of content assembly to "Standard Glossary", you first have to remove the selected glossaries in tab "Content".###30 04 2024 new variable +glo#:#glo_check#:#Check###28 11 2025 new variable +glo#:#glo_collection#:#Collection Glossary###31 03 2023 new variable +glo#:#glo_collection_empty_info#:#This collection glossary is currently empty. Please add at least one glossary to it.###30 04 2024 new variable +glo#:#glo_collection_info#:#The glossary collects additional terms of other glossaries.###31 03 2023 new variable +glo#:#glo_content_assembly#:#Content Assembly###31 03 2023 new variable glo#:#glo_copy#:#Copia glossario glo#:#glo_copy_terms#:#Copia termini -glo#:#glo_create_term_definition_pairs#:#Create Term/Definition Pairs###26 08 2024 new variable -glo#:#glo_days_ago#:#%s days ago###26 08 2024 new variable -glo#:#glo_def_vs_term#:#Definition vs. Term###26 08 2024 new variable -glo#:#glo_def_vs_term_info#:#Show a definition first, the learner has to guess the term.###26 08 2024 new variable -glo#:#glo_flashcard_training#:#Flashcard Training###26 08 2024 new variable -glo#:#glo_flashcard_training_info#:#Offers a presentation as flashcards allowing the user to train the terms/definitions one by one.###26 08 2024 new variable -glo#:#glo_flashcards#:#Flashcards###26 08 2024 new variable -glo#:#glo_flashcards_from_today_confirmation#:#The box contains %s flashcards already presented today. Do you want to include only the remaining %s flashcards or all %s flashcards?###26 08 2024 new variable -glo#:#glo_flashcards_from_today_only_info#:#The box contains only flashcards already presented today. Please confirm that these %s flashcards will be shown to you again.###26 08 2024 new variable -glo#:#glo_flashcards_intro#:#Your goal is to correctly remember each flashcard four times in a row.<br />To begin with, all of the flashcards are in box 1.<br />Flagging a flashcard as "I got it right" will advance it to the next box.<br />Flagging a flashcard as "I was wrong" will return the card to the first box.<br />To start, select a box. This will reveal the flashcards.###26 08 2024 new variable -glo#:#glo_flashcards_progress#:#%s of %s###29 10 2025 new variable -glo#:#glo_introduction#:#Introduction###26 08 2024 new variable +glo#:#glo_create_term_definition_pairs#:#Create Term/Definition Pairs###30 04 2024 new variable +glo#:#glo_days_ago#:#%s days ago###30 04 2024 new variable +glo#:#glo_def_vs_term#:#Definition vs. Term###30 04 2024 new variable +glo#:#glo_def_vs_term_info#:#Show a definition first, the learner has to guess the term.###30 04 2024 new variable +glo#:#glo_flashcard_training#:#Flashcard Training###30 04 2024 new variable +glo#:#glo_flashcard_training_info#:#Offers a presentation as flashcards allowing the user to train the terms/definitions one by one.###30 04 2024 new variable +glo#:#glo_flashcards#:#Flashcards###30 04 2024 new variable +glo#:#glo_flashcards_from_today_confirmation#:#The box contains %s flashcards already presented today. Do you want to include only the remaining %s flashcards or all %s flashcards?###30 04 2024 new variable +glo#:#glo_flashcards_from_today_only_info#:#The box contains only flashcards already presented today. Please confirm that these %s flashcards will be shown to you again.###30 04 2024 new variable +glo#:#glo_flashcards_intro#:#Your goal is to correctly remember each flashcard four times in a row.<br />To begin with, all of the flashcards are in box 1.<br />Flagging a flashcard as "I got it right" will advance it to the next box.<br />Flagging a flashcard as "I was wrong" will return the card to the first box.<br />To start, select a box. This will reveal the flashcards.###30 04 2024 new variable +glo#:#glo_flashcards_progress#:#%s of %s###28 11 2025 new variable +glo#:#glo_introduction#:#Introduction###30 04 2024 new variable glo#:#glo_link_glo_in_glo#:#Tutti i termini del glossario del glossario di destinazione dovrebbero essere collegati adesso all’attuale glossario? -glo#:#glo_link_to_usages#:#Link###29 10 2025 new variable -glo#:#glo_md_advanced#:#Further Details###29 10 2025 new variable -glo#:#glo_page_type_gdf#:#Term Definition###29 07 2022 new variable -glo#:#glo_please_select_other_glo#:#Please select another glossary.###29 07 2022 new variable -glo#:#glo_quit_box#:#Quit Box###26 08 2024 new variable -glo#:#glo_really_remove_from_collection#:#Are you sure you want to remove the following glossary from the collection glossary?###26 08 2024 new variable +glo#:#glo_link_to_usages#:#Link###28 11 2025 new variable +glo#:#glo_md_advanced#:#Further Details###28 11 2025 new variable +glo#:#glo_page_type_gdf#:#Termine Definizione +glo#:#glo_please_select_other_glo#:#Please select another glossary.###29 06 2022 new variable +glo#:#glo_quit_box#:#Quit Box###30 04 2024 new variable +glo#:#glo_really_remove_from_collection#:#Are you sure you want to remove the following glossary from the collection glossary?###30 04 2024 new variable glo#:#glo_reference#:#Riferimento glo#:#glo_reference_terms#:#Termini di riferimento glo#:#glo_referenced_term#:#Termine riferito -glo#:#glo_removed_from_collection_info#:#The glossary has been removed from the collection glossary.###26 08 2024 new variable -glo#:#glo_reset_all_boxes#:#Reset All Boxes###26 08 2024 new variable -glo#:#glo_save_and_continue#:#Save and Continue###29 10 2025 new variable +glo#:#glo_removed_from_collection_info#:#The glossary has been removed from the collection glossary.###30 04 2024 new variable +glo#:#glo_reset_all_boxes#:#Reset All Boxes###30 04 2024 new variable +glo#:#glo_save_and_continue#:#Save and Continue###28 11 2025 new variable glo#:#glo_select_source_glo#:#Si prega di selezionare un glossario di origine. glo#:#glo_select_terms#:#Seleziona termini -glo#:#glo_selected_glossaries#:#Selected Glossaries###26 08 2024 new variable -glo#:#glo_selected_glossaries_info#:#Terms are collected from the following glossaries:###26 08 2024 new variable -glo#:#glo_selected_glossary_is_current_info#:#The selected glossary corresponds to the current glossary. Please select another glossary.###26 08 2024 new variable +glo#:#glo_selected_glossaries#:#Selected Glossaries###30 04 2024 new variable +glo#:#glo_selected_glossaries_info#:#Terms are collected from the following glossaries:###30 04 2024 new variable +glo#:#glo_selected_glossary_is_current_info#:#The selected glossary corresponds to the current glossary. Please select another glossary.###30 04 2024 new variable glo#:#glo_selected_terms_have_been_copied#:#I termini selezionati sono stati copiati negli appunti. Si prega di aprire il glossario di destinatario e clicca su "Incolla". -glo#:#glo_show_in_presentation#:#Shown in Presentation View###26 08 2024 new variable -glo#:#glo_show_in_presentation_off#:#Hide in Presentation View###26 08 2024 new variable -glo#:#glo_show_in_presentation_on#:#Show in Presentation View###26 08 2024 new variable -glo#:#glo_tax_info#:#A taxonomy in a Glossary classifies and filters the terms. It always is available in the editing view. For the presentation view, the taxonomy must first be activated. In glossaries, only one taxonomy can be used.###26 08 2024 new variable +glo#:#glo_show_in_presentation#:#Shown in Presentation View###30 04 2024 new variable +glo#:#glo_show_in_presentation_off#:#Hide in Presentation View###30 04 2024 new variable +glo#:#glo_show_in_presentation_on#:#Show in Presentation View###30 04 2024 new variable +glo#:#glo_tax_info#:#A taxonomy in a Glossary classifies and filters the terms. It always is available in the editing view. For the presentation view, the taxonomy must first be activated. In glossaries, only one taxonomy can be used.###30 04 2024 new variable glo#:#glo_term#:#Termine glossario -glo#:#glo_term_definition_pairs#:#Term/Definition Pairs###26 08 2024 new variable -glo#:#glo_term_definition_pairs_info#:#Please enter a term and a definition pair in each line. Term and definition must be separated by a semicolon or a TAB character (usually provided by clipboard actions from spreadsheet applications).###26 08 2024 new variable -glo#:#glo_term_letter#:#Letter###26 08 2024 new variable +glo#:#glo_term_definition_pairs#:#Term/Definition Pairs###30 04 2024 new variable +glo#:#glo_term_definition_pairs_info#:#Please enter a term and a definition pair in each line. Term and definition must be separated by a semicolon or a TAB character (usually provided by clipboard actions from spreadsheet applications).###30 04 2024 new variable +glo#:#glo_term_letter#:#Letter###30 04 2024 new variable glo#:#glo_term_reference#:#Riferimento termine -glo#:#glo_term_vs_def#:#Term vs. Definition###26 08 2024 new variable -glo#:#glo_term_vs_def_info#:#Show a term first, the learner has to guess the definition.###26 08 2024 new variable -glo#:#glo_terms_per_page#:#Terms per Page###26 08 2024 new variable -glo#:#glo_usage_link#:#Usage Link###29 10 2025 new variable -glo#:#glo_use_all_flashcards#:#Use All Flashcards (%s)###26 08 2024 new variable -glo#:#glo_use_remaining_flashcards#:#Use Remaining Flashcards (%s)###26 08 2024 new variable -glo#:#glo_what_means_definition#:#What does the following mean?###29 10 2025 new variable -glo#:#glo_what_means_term#:#What does "%s" mean?###29 10 2025 new variable +glo#:#glo_term_vs_def#:#Term vs. Definition###30 04 2024 new variable +glo#:#glo_term_vs_def_info#:#Show a term first, the learner has to guess the definition.###30 04 2024 new variable +glo#:#glo_terms_per_page#:#Terms per Page###30 04 2024 new variable +glo#:#glo_usage_link#:#Usage Link###28 11 2025 new variable +glo#:#glo_use_all_flashcards#:#Use All Flashcards (%s)###30 04 2024 new variable +glo#:#glo_use_remaining_flashcards#:#Use Remaining Flashcards (%s)###30 04 2024 new variable +glo#:#glo_what_means_definition#:#What does the following mean?###28 11 2025 new variable +glo#:#glo_what_means_term#:#What does "%s" mean?###28 11 2025 new variable grp#:#crs_add_grouping#:#Imposta una restrizione alle iscrizioni grp#:#crs_grouping_delete_sure#:#Sei sicuro di voler cancellare questa restrizione alle iscrizioni? grp#:#crs_grouping_deleted#:#La restrizione di iscrizione è stata rimossa. @@ -10296,31 +10284,31 @@ grp#:#crs_grp_no_courses_assigned#:#Nessun Gruppo Assegnato grp#:#events#:#Sessioni grp#:#grouping_change_assignment#:#Modifica Assegnazione grp#:#grp_activate_notification#:#Attiva notifica -grp#:#grp_activation_online_info#:#Set the group online to make it visible and available for group members. If not, only group administrators and roles with permission "Edit Settings" have access to it.###28 10 2024 new variable +grp#:#grp_activation_online_info#:#Set the group online to make it visible and available for group members. If not, only group administrators and roles with permission "Edit Settings" have access to it.###28 11 2025 new variable grp#:#grp_add_to_group#:#Aggiungi al gruppo grp#:#grp_add_user#:#Aggiungi utente grp#:#grp_add_user_to_group#:#Aggiungi utenti al gruppo grp#:#grp_added_to_list#:#Sei inserito nella lista d'attesa. Ti è stata assegnata la posizione %s nella lista. grp#:#grp_admins#:#Amministratori grp#:#grp_admission_link_failure_invalid_code#:#Impossibile registrarsi: Il link non è valido. -grp#:#grp_admission_link_failure_membership_limited#:#Can't registrate: Group membership is limited. -grp#:#grp_admission_link_failure_registration_period#:#Can't registrate: Group is out of registration period. -grp#:#grp_admission_link_success_registration#:#Successfully registrated to group "%s". +grp#:#grp_admission_link_failure_membership_limited#:#Impossibile registrarsi: l'appartenenza al gruppo è limitata. +grp#:#grp_admission_link_failure_registration_period#:#Impossibile registrarsi: il gruppo è fuori periodo di registrazione. +grp#:#grp_admission_link_success_registration#:#Registrato correttamente al corso "%s". grp#:#grp_agree#:#Accettazione grp#:#grp_agreement_header#:#Accordo d'utilizzo grp#:#grp_agreement_required#:#Devi accettare le condizioni d'uso, per accedere ai contenuti del gruppo. grp#:#grp_already_assigned#:#Hai gia'richiesto una iscrizione a questo gruppo. grp#:#grp_at_least_one_admin#:#Deve esserci almeno un amministratore del gruppo. -grp#:#grp_auto_notification#:#Welcome-Mail For New Members###07 02 2020 new variable -grp#:#grp_auto_notification_info#:#New members get a mail notification when added to the group.###07 02 2020 new variable +grp#:#grp_auto_notification#:#E-mail di benvenuto per i nuovi partecipanti +grp#:#grp_auto_notification_info#:#Ricevono automaticamente notifiche e-mail, tali partecipanti che sono stati ammessi nel gruppo da un amministratore. grp#:#grp_cancel_subscr_request#:#Cancella l'iscrizione al gruppo -grp#:#grp_cancellation_end#:#Cancellation Limit -grp#:#grp_cancellation_end_info#:#From this date on particiants cannot unsubscribe anymore. +grp#:#grp_cancellation_end#:#Limite di cancellazione +grp#:#grp_cancellation_end_info#:#Da questa data in poi i partecipanti non potranno più annullare l'iscrizione. grp#:#grp_cancellation_end_rbac_info#:#La scadenza della cancellazione è stata soddisfatta su %s, non è più possibile una cancellazione. grp#:#grp_cdf_edit_member#:#Modifica dati utente relativi al gruppo -grp#:#grp_cdf_tbl_last_edit#:#Last Update (Group-specific Data) +grp#:#grp_cdf_tbl_last_edit#:#Aggiornati (Dati specifici dei gruppi) grp#:#grp_change_type#:#Modifica la tipologia del gruppo -grp#:#grp_contact#:#Contact +grp#:#grp_contact#:#Assistenza grp#:#grp_copy#:#Copia gruppo grp#:#grp_create_and_add_user#:#Crea e aggiungi utente grp#:#grp_create_new#:#Crea nuovo gruppo @@ -10328,8 +10316,8 @@ grp#:#grp_create_new_grp_in#:#Crea nuovo gruppo in '%1'. grp#:#grp_create_or_use_existing#:#Si desidera aggiungere l'utente a un gruppo esistente o creare un nuovo gruppo? grp#:#grp_created_and_user_been_added#:#Il gruppo è stato creato e l'utente è stato aggiunto. grp#:#grp_custom_user_fields#:#Dati utente rilevanti per il gruppo -grp#:#grp_custom_user_fields_infobox#:#Create additional data fields for group members to fill in when they join. You can show this information as an additional column in the "Members" tab.###26 08 2024 new variable -grp#:#grp_custom_user_fields_table_title#:#Relevant User Data of This Group###26 08 2024 new variable +grp#:#grp_custom_user_fields_infobox#:#Create additional data fields for group members to fill in when they join. You can show this information as an additional column in the "Members" tab.###30 04 2024 new variable +grp#:#grp_custom_user_fields_table_title#:#Relevant User Data of This Group###18 06 2024 new variable grp#:#grp_deactivate_notification#:#Disattiva la notifica grp#:#grp_enable_map#:#Abilita la mappa del gruppo grp#:#grp_err_registration_limited#:#si prega di digitare una data di inizio e fine valida per la registrazione @@ -10347,11 +10335,11 @@ grp#:#grp_info_settings#:#Informazioni sul gruppo grp#:#grp_information#:#Informazioni Importanti grp#:#grp_information_info#:#Questa informazione sarà visualizzata nella pagina info e per nuove registrazioni. grp#:#grp_join_request#:#Invia -grp#:#grp_lim_assigned#:#Already assigned to associated group "%s".###07 02 2020 new variable +grp#:#grp_lim_assigned#:#Già assegnato al gruppo associato "%s". grp#:#grp_mail_admission_new_bod#:#Siamo lieti di confermare la tua iscrizione al gruppo "%s". grp#:#grp_mail_admission_new_sub#:#La tua iscrizione al gruppo "%s" grp#:#grp_mail_all#:#Per tutti i partecipanti -grp#:#grp_mail_all_info#:#Members and administrators can use the feature "Mail to Members" in the "Members" tab. +grp#:#grp_mail_all_info#:#I membri e gli amministratori possono utilizzare la funzione "Invia ai membri" nella scheda "Membri". grp#:#grp_mail_dismiss_bod#:#La tua iscrizione al gruppo "%s" e'stata cancellata. grp#:#grp_mail_dismiss_sub#:#Iscrizione finita per il gruppo "%s" grp#:#grp_mail_notification_reg_bod#:#%s e' stato iscritto al gruppo "%s". @@ -10372,23 +10360,23 @@ grp#:#grp_mail_sub_dec_sub#:#Registrazione rifiutata per il gruppo "%s" grp#:#grp_mail_subscribe_member_bod#:#siamo lieti di confermare la tua iscrizione al gruppo "%s". grp#:#grp_mail_subscribe_member_sub#:#Tua registrazione al gruppo "%s" grp#:#grp_mail_tutors_only#:#Solo per gli amministratori -grp#:#grp_mail_tutors_only_info#:#Only administrators can use the feature "Mail to Members" in the "Members" tab. +grp#:#grp_mail_tutors_only_info#:#Solo gli amministratori possono utilizzare la funzione "Invia ai membri" nella scheda "Membri". grp#:#grp_mail_type#:#Mail per i membri grp#:#grp_mail_unsubscribe_member_bod#:#confermiamo la tua cancellazione come membro del gruppo %s.\ Ci auguriamo avrai un’altra opportunità di partecipare a un altro gruppo. grp#:#grp_mail_unsubscribe_member_sub#:#La tua cancellazione come membro dal gruppo "%s" -grp#:#grp_mail_wl_bod#:#you have been assigned to the waiting list of group "%s".\nYou are assigned to position %s on the list.\n\n You will receive a message from a group administrator when your request has been approved or rejected. -grp#:#grp_mail_wl_sub#:#Your registration for group "%s". +grp#:#grp_mail_wl_bod#:#sei stato assegnato alla lista di attesa del gruppo "%s". Si è assegnato alla posizione %s sulla lista. Riceverai un messaggio da un amministratore di gruppo quando la tua richiesta è stata approvata o respinta. +grp#:#grp_mail_wl_sub#:#La tua registrazione per il gruppo "%s". grp#:#grp_map_location#:#Posizione della mappa di gruppo grp#:#grp_map_settings#:#Impostazioni della Mappa grp#:#grp_max_and_min_members_invalid#:#Il numero minimo deve essere minore del numero massimo dei membri. -grp#:#grp_mem_contacts#:#Tutorial Support +grp#:#grp_mem_contacts#:#Manuale assistenza grp#:#grp_mem_tbl_header#:#Partecipanti al gruppo grp#:#grp_member_administration#:#Modifica partecipanti grp#:#grp_members#:#Membri grp#:#grp_members_deleted#:#Elimina membri grp#:#grp_members_map#:#Mappa dei membri del gruppo grp#:#grp_members_print_title#:#Membri del gruppo -grp#:#grp_min_one_admin#:#There has to be at least one administrator assigned to this group.###26 08 2024 new variable +grp#:#grp_min_one_admin#:#There has to be at least one administrator assigned to this group.###23 10 2023 new variable grp#:#grp_missing_grp_type#:#Si prega di scegliere un tipo di gruppo. grp#:#grp_missing_password#:#Si prega di inserire la password del gruppo. grp#:#grp_new_status#:#Il tuo nuovo stato è: @@ -10397,7 +10385,7 @@ grp#:#grp_no_perm_to_add_create_first#:#Devi prima creare in gruppo. Si prega di grp#:#grp_notification#:#Notifica grp#:#grp_notification_activated#:#Notifica attivata grp#:#grp_notification_deactivated#:#Notifica disattivata -grp#:#grp_notification_explanation_admin#:#You receive this mail because you are group administrator with notification enabled. +grp#:#grp_notification_explanation_admin#:#Ricevi questa mail perché sei un amministratore di gruppo con la notifica abilitata. grp#:#grp_notification_salutation#:#Caro partecipante al gruppo, grp#:#grp_notify_off#:#Notifica delle nuove registrazioni disattivata grp#:#grp_notify_on#:#Notifica delle nuove registrazioni attivata @@ -10408,27 +10396,27 @@ grp#:#grp_presentation_type#:#Tipo di presentazione grp#:#grp_print_list#:#Genera lista grp#:#grp_public#:#Gruppo pubblico grp#:#grp_public_info#:#Il gruppo è visibile ai non iscritti ma sono presenti delle restrizioni per l'iscrizione. -grp#:#grp_reg_code#:#Registration Code -grp#:#grp_reg_code_enabled_info#:#If enabled, an automatic registration is possible using a particular registration link. -grp#:#grp_reg_code_link#:#Registration Link +grp#:#grp_reg_code#:#Codice di registrazione +grp#:#grp_reg_code_enabled_info#:#Se abilitato, è possibile una registrazione automatica utilizzando un collegamento di registrazione particolare. +grp#:#grp_reg_code_link#:#Link di registrazione grp#:#grp_reg_deac_info_screen#:#L'ammissione al gruppo è chiusa. grp#:#grp_reg_direct#:#Registrazione Diretta grp#:#grp_reg_direct_info_screen#:#Puoi unirti direttamente a questo gruppo. grp#:#grp_reg_disabled#:#Nessuna registrazione possibile grp#:#grp_reg_disabled_info#:#Solo gli amministratori del gruppo possono aggiungere utenti al gruppo. -grp#:#grp_reg_limited#:#Registration Period +grp#:#grp_reg_limited#:#Periodo di registrazione grp#:#grp_reg_max_members_info#:#Definisci il numero massimo di utenti che possono essere iscritti al gruppo. grp#:#grp_reg_no_selfreg#:#Nessuna iscrizione automatica grp#:#grp_reg_passwd_info_screen#:#Se l'amministratore di un gruppo ti ha dato la password del gruppo, puoi iscriverti. -grp#:#grp_reg_password_info#:#Users need to type in the correct password for joining the group. +grp#:#grp_reg_password_info#:#Gli utenti devono digitare la password corretta per unirsi al gruppo. grp#:#grp_reg_req_info_screen#:#Puoi richiedere l’iscrizione per questo gruppo. Riceverai un messaggio da un amministratore di gruppo quando la tua richiesta sarà ammessa o rifiutata. grp#:#grp_reg_request#:#Richiedi iscrizione grp#:#grp_reg_request_info#:#Gli utenti interessati possono spedire un messaggio/richiesta all'amministratore del gruppo. grp#:#grp_reg_subject#:#Messaggio -grp#:#grp_registration_unlimited#:#Unlimited registration period +grp#:#grp_registration_unlimited#:#Periodo di registrazione illimitato grp#:#grp_role_status#:#Ruolo/Stato grp#:#grp_search_users#:#Cerca utente -grp#:#grp_set_on_waiting_list#:#You can add your join request to the waiting list. You will receive a message from a group administrator when your request has been approved or rejected. +grp#:#grp_set_on_waiting_list#:#È possibile aggiungere la richiesta di iscrizione alla lista di attesa. Riceverai un messaggio da un amministratore di gruppo quando la tua richiesta è stata approvata o respinta. grp#:#grp_setting_header_presentation#:#Presentazione del gruppo grp#:#grp_setting_header_registration#:#Registrazione del gruppo grp#:#grp_settings#:#Impostazioni del gruppo @@ -10438,7 +10426,7 @@ grp#:#grp_subscription_min_members_info#:#Definire il numero minimo di utenti ri grp#:#grp_sure_add_user_to_group#:#Vuoi davvero aggiungere questo utente al gruppo? grp#:#grp_sure_create_group_add_user#:#Vuoi davvero creare il gruppo e aggiungere l’utente? grp#:#grp_typ#:#Tipologia del gruppo -grp#:#grp_unsubscribe#:#Unsubscrib +grp#:#grp_unsubscribe#:#Annulla l'iscrizione grp#:#grp_update_subscr_request#:#Aggiorna richiesta d’iscrizione grp#:#grp_use_existing#:#Utilizza gruppo esistente grp#:#grp_user_agreement#:#Tipi di dati rilasciati @@ -10449,120 +10437,120 @@ grp#:#grp_users_already_assigned#:#L’utente è appena stato assegnato a questo grp#:#grp_usr_agreement#:#Accordo con l’utente grp#:#grp_view_info_by_type#:#Questa presentazione di contenuto raggruppa tutti gli elementi per tipo di risorsa. grp#:#grp_view_info_simple#:#Questa presentazione di contenuto elenca tutti gli elementi in un blocco. -grp#:#grp_view_inherit#:#Standard -grp#:#grp_view_inherit_info#:#The group presentation type is adapted from a parent course. +grp#:#grp_view_inherit#:#Stabilito dal corso +grp#:#grp_view_inherit_info#:#Il tipo di presentazione di gruppo è adattato da un corso per genitori. grp#:#grp_waiting_list#:#Abilita la lista di attesa grp#:#grp_waiting_list_autofill#:#Con riempimento automatico -grp#:#grp_waiting_list_autofill_info#:#Participants are recruited from the waiting list automatically on cancellations. +grp#:#grp_waiting_list_autofill_info#:#I partecipanti vengono reclutati automaticamente dalla lista di attesa in caso di cancellazione. grp#:#grp_waiting_list_info#:#Se abilitato, e il numero massimo degli utenti è maggiore, le nuove registrazioni saranno inserite nella lista d'attesa. grp#:#grp_waiting_list_no_autofill#:#Senza riempimento automatico grp#:#grp_warn_grp_type_changed#:#Vuoi davvero modificare la tipologia del gruppo? Tutti i permessi saranno resettati. grp#:#grp_warn_no_max_set_on_waiting_list#:#È stato superato il numero massimo dei membri del gruppo. È possibile aggiungere la richiesta di partecipazione alla lista di attesa. Riceverai un messaggio da un amministratore di gruppo quando la tua richiesta sarà approvata o rifiutata. grp#:#grp_warn_wl_set_on_waiting_list#:#Alcuni utenti sono già assegnati alla lista di attesa. È possibile aggiungere la richiesta di partecipazione alla lista di attesa. Riceverai un messaggio da un amministratore di gruppo quando la tua richiesta sarà approvata o rifiutata. -grp#:#grp_wrong_max_members#:#Please check the maximum number of users. -grp#:#grp_wrong_min_max_members#:#Please check the minimum and maximum number of users. -grp#:#grp_wrong_reg_time_limit#:#Please check the registration start and end times. +grp#:#grp_wrong_max_members#:#Si prega di verificare il numero massimo di utenti. +grp#:#grp_wrong_min_max_members#:#Verifica il numero minimo e massimo di utenti. +grp#:#grp_wrong_reg_time_limit#:#Si prega di controllare gli orari di inizio e fine della registrazione. grp#:#reg_grp_max_members#:#Numero massimo di iscritti -grp#:#reg_grp_max_members_short#:#Number of Members +grp#:#reg_grp_max_members_short#:#Numero di membri grp#:#reg_grp_min_members#:#Numero minimo di membri -gsfo#:#accessibility#:#Accessibility###28 10 2024 new variable -gsfo#:#confirm_delete#:#Do you really want to delete the following Item(s)?###28 10 2024 new variable -gsfo#:#confirm_reset#:#Resetting the footer will restore all entries to their original state. All customizations and manual entries will be deleted. Do you want to continue?###28 10 2024 new variable -gsfo#:#entries_add#:#Add Entry###28 10 2024 new variable -gsfo#:#entries_edit#:#entries_edit###28 10 2024 new variable -gsfo#:#entries_parent#:#Select Group###28 10 2024 new variable -gsfo#:#entries_select_parent#:#Move Entry to Group###28 10 2024 new variable -gsfo#:#entry_action#:#Link###28 10 2024 new variable -gsfo#:#entry_action_info#:#Provide the full URL including the protocol (e.g. https://www.ilias.de)###28 10 2024 new variable -gsfo#:#entry_activation_toggled#:#Activation has been toggled###28 10 2024 new variable -gsfo#:#entry_active#:#Active###28 10 2024 new variable -gsfo#:#entry_active_info#:#Activate this Entry###28 10 2024 new variable -gsfo#:#entry_add#:#Add Entry###28 10 2024 new variable -gsfo#:#entry_delete#:#Delete###28 10 2024 new variable -gsfo#:#entry_deleted#:#Deleted###28 10 2024 new variable -gsfo#:#entry_edit#:#Edit###28 10 2024 new variable -gsfo#:#entry_external#:#Open in new Tab###28 10 2024 new variable -gsfo#:#entry_move#:#Move###28 10 2024 new variable -gsfo#:#entry_moved#:#Entry has been moved###28 10 2024 new variable -gsfo#:#entry_title#:#Title (Default Language)###28 10 2024 new variable -gsfo#:#entry_toggle_activation#:#(De-)Activate###28 10 2024 new variable -gsfo#:#group_activation_toggled#:#Activation has been toggled###28 10 2024 new variable -gsfo#:#group_active#:#Active###28 10 2024 new variable -gsfo#:#group_active_info#:#Activate this Group###28 10 2024 new variable -gsfo#:#group_add#:#Add Group###28 10 2024 new variable -gsfo#:#group_delete#:#Delete###28 10 2024 new variable -gsfo#:#group_deleted#:#Deleted###28 10 2024 new variable -gsfo#:#group_edit#:#Edit Group###28 10 2024 new variable -gsfo#:#group_edit_entries#:#Edit Entries###28 10 2024 new variable -gsfo#:#group_items#:#Items###28 10 2024 new variable -gsfo#:#group_not_empty#:#This Group contains Entries. Please move or delete them first.###28 10 2024 new variable -gsfo#:#group_title#:#Title (Default Language)###28 10 2024 new variable -gsfo#:#group_title_info#:#Additional Translations can be added with the Action "Add Translation" after saving the Group.###28 10 2024 new variable -gsfo#:#group_toggle_activation#:#(De-)Activate###28 10 2024 new variable -gsfo#:#group_translate#:#Translate###28 10 2024 new variable -gsfo#:#info_not_deletable_core#:#Default Items cannot be deleted.###28 10 2024 new variable -gsfo#:#info_not_deletable_not_empty#:#Groups with Entries cannot be deleted.###28 10 2024 new variable -gsfo#:#legal_information#:#Legal Information###28 10 2024 new variable -gsfo#:#order_saved#:#Order saved###28 10 2024 new variable -gsfo#:#permanent#:#permanent###28 10 2024 new variable -gsfo#:#reset_footer#:#Reset Footer###28 10 2024 new variable -gsfo#:#reset_success#:#Footer has been reset successfully###28 10 2024 new variable -gsfo#:#services#:#Services###28 10 2024 new variable -gsfo#:#support#:#Support###28 10 2024 new variable -gsfo#:#translate#:#Translate###29 10 2025 new variable -gsfo#:#translations#:#Translations###29 10 2025 new variable -help#:#gdtr_active#:#Active###29 10 2025 new variable -help#:#gdtr_add_step#:#Add Step###29 10 2025 new variable -help#:#gdtr_add_tour#:#Add Tour###29 10 2025 new variable -help#:#gdtr_close#:#End Tour###29 10 2025 new variable -help#:#gdtr_delete_step#:#Delete Step###29 10 2025 new variable -help#:#gdtr_delete_step_mess#:#Are you sure you want to delete this step?###29 10 2025 new variable -help#:#gdtr_delete_tour#:#Delete Tour###29 10 2025 new variable -help#:#gdtr_delete_tour_mess#:#Are you sure you want to delete this tour?###29 10 2025 new variable -help#:#gdtr_deleted_step#:#Step has been deleted.###29 10 2025 new variable -help#:#gdtr_deleted_tour#:#Tour has been deleted.###29 10 2025 new variable -help#:#gdtr_edit_content#:#Edit Content###29 10 2025 new variable -help#:#gdtr_edit_page_info#:#Edit the content that should be presented to explain the selected UI element.###29 10 2025 new variable -help#:#gdtr_edit_properties#:#Edit Properties###29 10 2025 new variable -help#:#gdtr_edit_step_info#:#On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element.###29 10 2025 new variable -help#:#gdtr_edit_steps#:#Edit Steps###29 10 2025 new variable -help#:#gdtr_element_id#:#Element ID###29 10 2025 new variable -help#:#gdtr_form#:#Form###29 10 2025 new variable -help#:#gdtr_form_info#:#The first form of the main content area. Usually views should only contain one form.###29 10 2025 new variable -help#:#gdtr_guided_tours#:#Guided Tours###29 10 2025 new variable -help#:#gdtr_id_pres_users#:#Show IDs for User Accounts###29 10 2025 new variable -help#:#gdtr_id_pres_users_info#:#Login names of user that should get element IDs presented. Separate multiple entries by comma.###29 10 2025 new variable -help#:#gdtr_id_settings#:#ID Settings###29 10 2025 new variable -help#:#gdtr_import_tour#:#Import Tour###29 10 2025 new variable -help#:#gdtr_language#:#Language###29 10 2025 new variable -help#:#gdtr_language_info#:#Activates a guided tour only for users with the selected language.###29 10 2025 new variable -help#:#gdtr_list_tours_mess#:#To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name.###29 10 2025 new variable -help#:#gdtr_mainbar#:#Mainbar###29 10 2025 new variable -help#:#gdtr_mainbar_info#:#The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items.###29 10 2025 new variable -help#:#gdtr_metabar#:#Metabar###29 10 2025 new variable -help#:#gdtr_metabar_info#:#The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items.###29 10 2025 new variable -help#:#gdtr_next_step#:#Next Step###29 10 2025 new variable -help#:#gdtr_permission#:#Permission###29 10 2025 new variable -help#:#gdtr_permission_info#:#Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with "edit settings" permission for a course. If you "Create" is selected, the tour is active, if the user has any creation permission.###29 10 2025 new variable -help#:#gdtr_primary_button#:#Primary Button###29 10 2025 new variable -help#:#gdtr_primary_button_info#:#The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button.###29 10 2025 new variable -help#:#gdtr_reset_tour#:#Reset Tour###29 10 2025 new variable -help#:#gdtr_reset_tour_mess#:#If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?###29 10 2025 new variable -help#:#gdtr_screen_ids#:#Screen IDs###29 10 2025 new variable -help#:#gdtr_screen_ids_info#:#Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma.###29 10 2025 new variable -help#:#gdtr_step#:#Step###29 10 2025 new variable -help#:#gdtr_step_type#:#User Interface Element###29 10 2025 new variable -help#:#gdtr_table#:#Table###29 10 2025 new variable -help#:#gdtr_table_info#:#The first table of the main content area. Usually views should only contain one table.###29 10 2025 new variable -help#:#gdtr_tabs#:#Tabs###29 10 2025 new variable -help#:#gdtr_tabs_info#:#The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items.###29 10 2025 new variable -help#:#gdtr_toolbar#:#Toolbar###29 10 2025 new variable -help#:#gdtr_toolbar_info#:#The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar.###29 10 2025 new variable -help#:#gdtr_tour_has_been_reset#:#Tour has been reset.###29 10 2025 new variable -help#:#gdtr_tour_steps#:#Tour Steps###29 10 2025 new variable -help#:#gdtr_tours#:#Tours###29 10 2025 new variable -help#:#gdtr_type#:#Type###29 10 2025 new variable -help#:#guided_tour#:#Guided Tour###29 10 2025 new variable +gsfo#:#accessibility#:#Accessibility###28 11 2025 new variable +gsfo#:#confirm_delete#:#Do you really want to delete the following Item(s)?###28 11 2025 new variable +gsfo#:#confirm_reset#:#Resetting the footer will restore all entries to their original state. All customizations and manual entries will be deleted. Do you want to continue?###28 11 2025 new variable +gsfo#:#entries_add#:#Add Entry###28 11 2025 new variable +gsfo#:#entries_edit#:#entries_edit###28 11 2025 new variable +gsfo#:#entries_parent#:#Select Group###28 11 2025 new variable +gsfo#:#entries_select_parent#:#Move Entry to Group###28 11 2025 new variable +gsfo#:#entry_action#:#Link###28 11 2025 new variable +gsfo#:#entry_action_info#:#Provide the full URL including the protocol (e.g. https://www.ilias.de)###28 11 2025 new variable +gsfo#:#entry_activation_toggled#:#Activation has been toggled###28 11 2025 new variable +gsfo#:#entry_active#:#Active###28 11 2025 new variable +gsfo#:#entry_active_info#:#Activate this Entry###28 11 2025 new variable +gsfo#:#entry_add#:#Add Entry###28 11 2025 new variable +gsfo#:#entry_delete#:#Delete###28 11 2025 new variable +gsfo#:#entry_deleted#:#Deleted###28 11 2025 new variable +gsfo#:#entry_edit#:#Edit###28 11 2025 new variable +gsfo#:#entry_external#:#Open in new Tab###28 11 2025 new variable +gsfo#:#entry_move#:#Move###28 11 2025 new variable +gsfo#:#entry_moved#:#Entry has been moved###28 11 2025 new variable +gsfo#:#entry_title#:#Title (Default Language)###28 11 2025 new variable +gsfo#:#entry_toggle_activation#:#(De-)Activate###28 11 2025 new variable +gsfo#:#group_activation_toggled#:#Activation has been toggled###28 11 2025 new variable +gsfo#:#group_active#:#Active###28 11 2025 new variable +gsfo#:#group_active_info#:#Activate this Group###28 11 2025 new variable +gsfo#:#group_add#:#Add Group###28 11 2025 new variable +gsfo#:#group_delete#:#Delete###28 11 2025 new variable +gsfo#:#group_deleted#:#Deleted###28 11 2025 new variable +gsfo#:#group_edit#:#Edit Group###28 11 2025 new variable +gsfo#:#group_edit_entries#:#Edit Entries###28 11 2025 new variable +gsfo#:#group_items#:#Items###28 11 2025 new variable +gsfo#:#group_not_empty#:#This Group contains Entries. Please move or delete them first.###28 11 2025 new variable +gsfo#:#group_title#:#Title (Default Language)###28 11 2025 new variable +gsfo#:#group_title_info#:#Additional Translations can be added with the Action "Add Translation" after saving the Group.###28 11 2025 new variable +gsfo#:#group_toggle_activation#:#(De-)Activate###28 11 2025 new variable +gsfo#:#group_translate#:#Translate###28 11 2025 new variable +gsfo#:#info_not_deletable_core#:#Default Items cannot be deleted.###28 11 2025 new variable +gsfo#:#info_not_deletable_not_empty#:#Groups with Entries cannot be deleted.###28 11 2025 new variable +gsfo#:#legal_information#:#Legal Information###28 11 2025 new variable +gsfo#:#order_saved#:#Order saved###28 11 2025 new variable +gsfo#:#permanent#:#permanent###28 11 2025 new variable +gsfo#:#reset_footer#:#Reset Footer###28 11 2025 new variable +gsfo#:#reset_success#:#Footer has been reset successfully###28 11 2025 new variable +gsfo#:#services#:#Services###28 11 2025 new variable +gsfo#:#support#:#Support###28 11 2025 new variable +gsfo#:#translate#:#Translate###28 11 2025 new variable +gsfo#:#translations#:#Translations###28 11 2025 new variable +help#:#gdtr_active#:#Active###28 11 2025 new variable +help#:#gdtr_add_step#:#Add Step###28 11 2025 new variable +help#:#gdtr_add_tour#:#Add Tour###28 11 2025 new variable +help#:#gdtr_close#:#End Tour###28 11 2025 new variable +help#:#gdtr_delete_step#:#Delete Step###28 11 2025 new variable +help#:#gdtr_delete_step_mess#:#Are you sure you want to delete this step?###28 11 2025 new variable +help#:#gdtr_delete_tour#:#Delete Tour###28 11 2025 new variable +help#:#gdtr_delete_tour_mess#:#Are you sure you want to delete this tour?###28 11 2025 new variable +help#:#gdtr_deleted_step#:#Step has been deleted.###28 11 2025 new variable +help#:#gdtr_deleted_tour#:#Tour has been deleted.###28 11 2025 new variable +help#:#gdtr_edit_content#:#Edit Content###28 11 2025 new variable +help#:#gdtr_edit_page_info#:#Edit the content that should be presented to explain the selected UI element.###28 11 2025 new variable +help#:#gdtr_edit_properties#:#Edit Properties###28 11 2025 new variable +help#:#gdtr_edit_step_info#:#On this screen you define, which element on the screen should be explained in this step of the tour. A popover with the explanation text you define will be presented pointing to this element.###28 11 2025 new variable +help#:#gdtr_edit_steps#:#Edit Steps###28 11 2025 new variable +help#:#gdtr_element_id#:#Element ID###28 11 2025 new variable +help#:#gdtr_form#:#Form###28 11 2025 new variable +help#:#gdtr_form_info#:#The first form of the main content area. Usually views should only contain one form.###28 11 2025 new variable +help#:#gdtr_guided_tours#:#Guided Tours###28 11 2025 new variable +help#:#gdtr_id_pres_users#:#Show IDs for User Accounts###28 11 2025 new variable +help#:#gdtr_id_pres_users_info#:#Login names of user that should get element IDs presented. Separate multiple entries by comma.###28 11 2025 new variable +help#:#gdtr_id_settings#:#ID Settings###28 11 2025 new variable +help#:#gdtr_import_tour#:#Import Tour###28 11 2025 new variable +help#:#gdtr_language#:#Language###28 11 2025 new variable +help#:#gdtr_language_info#:#Activates a guided tour only for users with the selected language.###28 11 2025 new variable +help#:#gdtr_list_tours_mess#:#To activate the presentation of screen and element IDs as tooltips, switch to ID Settings and enter your account name.###28 11 2025 new variable +help#:#gdtr_mainbar#:#Mainbar###28 11 2025 new variable +help#:#gdtr_mainbar_info#:#The mainbar ist the main menu on the left side. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items.###28 11 2025 new variable +help#:#gdtr_metabar#:#Metabar###28 11 2025 new variable +help#:#gdtr_metabar_info#:#The metabar is the menu on the top, right. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items.###28 11 2025 new variable +help#:#gdtr_next_step#:#Next Step###28 11 2025 new variable +help#:#gdtr_permission#:#Permission###28 11 2025 new variable +help#:#gdtr_permission_info#:#Activates a guided tour only for users with a certain permission on the current repository object, e.g. only for users with "edit settings" permission for a course. If you "Create" is selected, the tour is active, if the user has any creation permission.###28 11 2025 new variable +help#:#gdtr_primary_button#:#Primary Button###28 11 2025 new variable +help#:#gdtr_primary_button_info#:#The first primary button of the main content area. Primary buttons are presented emphasised compared to standard buttons. Usually views should only contain one primary button.###28 11 2025 new variable +help#:#gdtr_reset_tour#:#Reset Tour###28 11 2025 new variable +help#:#gdtr_reset_tour_mess#:#If you reset the tour, all users that previously ended the tour, will get the tour presented again. Are you sure to proceed?###28 11 2025 new variable +help#:#gdtr_screen_ids#:#Screen IDs###28 11 2025 new variable +help#:#gdtr_screen_ids_info#:#Enable a guided tour only for distinct views of the system. If element IDs are activated, you find the Screen ID of a current view on top in the header. Multiple IDs must be separated by comma.###28 11 2025 new variable +help#:#gdtr_step#:#Step###28 11 2025 new variable +help#:#gdtr_step_type#:#User Interface Element###28 11 2025 new variable +help#:#gdtr_table#:#Table###28 11 2025 new variable +help#:#gdtr_table_info#:#The first table of the main content area. Usually views should only contain one table.###28 11 2025 new variable +help#:#gdtr_tabs#:#Tabs###28 11 2025 new variable +help#:#gdtr_tabs_info#:#The tabs are displayed below the main header of the screen. If element-ID presentation is activated, the IDs will be shown in tooltips for the distinct items.###28 11 2025 new variable +help#:#gdtr_toolbar#:#Toolbar###28 11 2025 new variable +help#:#gdtr_toolbar_info#:#The first toolbar of the main content area, usually presented below the tabs. Views should only contain one toolbar.###28 11 2025 new variable +help#:#gdtr_tour_has_been_reset#:#Tour has been reset.###28 11 2025 new variable +help#:#gdtr_tour_steps#:#Tour Steps###28 11 2025 new variable +help#:#gdtr_tours#:#Tours###28 11 2025 new variable +help#:#gdtr_type#:#Type###28 11 2025 new variable +help#:#guided_tour#:#Guided Tour###28 11 2025 new variable help#:#help_all#:#Tutte help#:#help_component#:#Componente help#:#help_filter#:#Filtro @@ -10571,27 +10559,27 @@ help#:#help_help_only#:#Solo guida del flusso di lavoro help#:#help_imported_on#:#Importato in help#:#help_module_uploaded#:#Pacchetto della Guida caricato. help#:#help_modules#:#Pacchetti di Guida -help#:#help_no_content#:#There is no help content available for the current screen. You may use the search tool.###07 02 2020 new variable +help#:#help_no_content#:#Non è disponibile una sezione di aiuto per questa pagina. Puoi provare a utilizzare il tool di ricerca. help#:#help_open_online_help#:#Apri la guida in linea -help#:#help_order#:#Order###26 08 2024 new variable -help#:#help_search_label#:#Search Help###29 07 2022 new variable -help#:#help_select_a_file#:#Please select a file.###26 08 2024 new variable +help#:#help_order#:#Order###30 04 2024 new variable +help#:#help_search_label#:#Aiuto sulla ricerca +help#:#help_select_a_file#:#Please select a file.###31 03 2023 new variable help#:#help_set_mode#:#Modalità impostazione help#:#help_sure_delete_help_modules#:#Sei sicuro che questi pacchetti devono essere eliminati? help#:#help_toggle_tooltips#:#Attiva descrizione comando di aiuto -help#:#help_toggle_tooltips_info#:#Show Help Tooltips for menues and tabs. +help#:#help_toggle_tooltips_info#:#Mostra suggerimenti per menu e tab help#:#help_tooltip_id#:#ID descrizione comando help#:#help_tooltips#:#Descrizione comando di aiuto help#:#help_tooltips_and_help#:#Descrizioni comandi e guida del flusso di lavoro help#:#help_tooltips_only#:#Solo descrizioni comandi help#:#help_topcis#:#Argomenti help#:#help_tt_text#:#Testo -htlm#:#file_import_from_upload_dir_failed#:#File from Upload-Directory not imported###29 10 2025 new variable -htlm#:#file_imported_from_upload_dir#:#File imported from Upload-Directory###29 10 2025 new variable -htlm#:#import_from_upload_dir#:#Import from Upload-Directory###29 10 2025 new variable -htlm#:#import_from_upload_dir_file_name#:#Filename###29 10 2025 new variable -htlm#:#import_from_upload_dir_info#:#Please select file for import###29 10 2025 new variable -iass#:#download_assessment_paper#:#Download Record file###29 07 2022 new variable +htlm#:#file_import_from_upload_dir_failed#:#File from Upload-Directory not imported###28 11 2025 new variable +htlm#:#file_imported_from_upload_dir#:#File imported from Upload-Directory###28 11 2025 new variable +htlm#:#import_from_upload_dir#:#Import from Upload-Directory###28 11 2025 new variable +htlm#:#import_from_upload_dir_file_name#:#Filename###28 11 2025 new variable +htlm#:#import_from_upload_dir_info#:#Please select file for import###28 11 2025 new variable +iass#:#download_assessment_paper#:#Scarica il file di record iass#:#grading#:#Classificazione iass#:#grading_info#:#Informazioni di classificazione iass#:#grading_record#:#Resoconto della classificazione @@ -10600,10 +10588,10 @@ iass#:#iass_add_user_failure#:#Non possono essere aggiunti uno o più utenti. iass#:#iass_add_user_success#:#Utente aggiunto come candidato. iass#:#iass_added#:#Assegnazione individuale aggiunta iass#:#iass_amend_saved#:#La registrazione modificata è stata salvata. -iass#:#iass_assessment_not_completed#:#Assessment not completed -iass#:#iass_cancel#:#Cancel###29 07 2022 new variable +iass#:#iass_assessment_not_completed#:#Valutazione non completata +iass#:#iass_cancel#:#Cancella iass#:#iass_changed_by#:#Modificato dopo la finalizzazione -iass#:#iass_confirm_finalize#:#Finalize###29 07 2022 new variable +iass#:#iass_confirm_finalize#:#Finalizza iass#:#iass_consultation_hours#:#Ore di consultazione iass#:#iass_contact#:#Nome iass#:#iass_contact_info#:#Informazioni di contatto @@ -10613,129 +10601,129 @@ iass#:#iass_copy#:#Copia assegnazione individuale iass#:#iass_download#:#Download iass#:#iass_edit#:#Impostazioni iass#:#iass_edit_info#:#Impostazioni di informazione -iass#:#iass_edit_record#:#User record -iass#:#iass_event_time#:#Event time +iass#:#iass_edit_record#:#Storico utente +iass#:#iass_event_time#:#Data dell'evento: iass#:#iass_event_time_place_required#:#Data e luogo richiesti iass#:#iass_event_time_place_required_info#:#Data e luogo di assegnazione devono essere aggiunti a ogni registrazione del partecipante. iass#:#iass_file#:#File -iass#:#iass_file_dropzone#:#you can drop your files here###29 07 2022 new variable +iass#:#iass_file_dropzone#:#Puoi trascinare i tuoi file qui iass#:#iass_file_required#:#File di registrazione richiesto iass#:#iass_file_required_info#:#Un file di registrazione deve essere caricato per ogni registrazione del partecipante. iass#:#iass_file_visible_examinee#:#File visibile al partecipante -iass#:#iass_filter_all#:#All -iass#:#iass_filter_failed#:#Failed only -iass#:#iass_filter_finalized#:#Completed only -iass#:#iass_filter_not_finalized#:#Not completed only -iass#:#iass_filter_not_started#:#Not started only +iass#:#iass_filter_all#:#Tutti +iass#:#iass_filter_failed#:#Solo i falliti +iass#:#iass_filter_finalized#:#Solo i completati +iass#:#iass_filter_not_finalized#:#Solo i non completati +iass#:#iass_filter_not_started#:#Solo i non iniziati iass#:#iass_finalize#:#Finalizza -iass#:#iass_finalize_info#:#Individual Assessment will be finalized.###29 07 2022 new variable +iass#:#iass_finalize_info#:#La valutazione individuale verrà finalizzata iass#:#iass_finalize_user_qst#:#Lo stato del candidato dovrebbe davvero essere eliminato? Non sono possibili modifiche. -iass#:#iass_further_field_headline#:#Detailed Information +iass#:#iass_further_field_headline#:#Informazioni dettagliate iass#:#iass_graded_by#:#Classificato da -iass#:#iass_info_emails_expl#:#You may provide several addresses separated by a coma. -iass#:#iass_internal_note#:#Internal record note (should not be seen by examinee) +iass#:#iass_info_emails_expl#:#È possibile fornire diversi indirizzi, separati da una virgola +iass#:#iass_internal_note#:#Note interne (da non mostrare al partecipante) iass#:#iass_internal_note_info#:#Le note interne sono visibili solo per i tutor, ma non per i candidati. -iass#:#iass_location#:#Location -iass#:#iass_mails#:#Mails +iass#:#iass_location#:#Luogo +iass#:#iass_mails#:#E-Mail iass#:#iass_may_not_finalize#:#L’esaminato non può essere finalizzato. iass#:#iass_membership_finalized#:#Registrazione finalizzata iass#:#iass_membership_saved#:#Registrazione salvata, non ancora finalizzata -iass#:#iass_mess_notification_completed#:#You passed the assessment %s. Please check the following record for details: -iass#:#iass_mess_notification_failed#:#You failed the assessment %s. Please check the following record for details: -iass#:#iass_notify#:#Notify user after finalization -iass#:#iass_notify_explanation#:#The examinee will be notified via email after finalisation and will get access to her or his record on the Info screen. +iass#:#iass_mess_notification_completed#:#Hai superato la valutazione con punteggio <i>%s</i>. Controlla i seguenti risultati per dettagli: +iass#:#iass_mess_notification_failed#:#Hai fallito la valutazione con punteggio <i>%s</i>. Controlla i seguenti risultati per dettagli: +iass#:#iass_notify#:#Notifica l'utente dopo la finalizzazione +iass#:#iass_notify_explanation#:#L'utente esaminato verrà notificato via e-mail e riceverà l'accesso al suo risultato nella pagina di informazioni. iass#:#iass_phone#:#Telefono -iass#:#iass_place#:#Event location +iass#:#iass_place#:#Luogo di valutazione iass#:#iass_record#:#Nota di registrazione iass#:#iass_record_info#:#Il candidato può vedere la nota di registrazione dopo essere stato classificato. Se la notifica è abilitata di seguito, la nota di registrazione sarà inviata al candidato anche via e-mail. iass#:#iass_record_template#:#Modello di registrazione iass#:#iass_record_template_explanation#:#Modello per il resoconto della classificazione per il candidato. Verrà utilizzato automaticamente per ogni nuovo candidato. iass#:#iass_remove_user_qst#:#Il candidato dovrebbe essere davvero eliminato? -iass#:#iass_responsibility#:#Responsabilità -iass#:#iass_save_amend#:#Save Amend -iass#:#iass_settings_availability#:#Availability###26 08 2024 new variable +iass#:#iass_responsibility#:#Competenza +iass#:#iass_save_amend#:#Salva il record modificato +iass#:#iass_settings_availability#:#Availability###30 04 2024 new variable iass#:#iass_settings_saved#:#Impostazioni salvate. -iass#:#iass_sort_changetime_asc#:#Last Change ascending###07 02 2020 new variable -iass#:#iass_sort_changetime_desc#:#Last Change descending###07 02 2020 new variable -iass#:#iass_sort_examiner_login_asc#:#Examiner ascending -iass#:#iass_sort_examiner_login_desc#:#Examiner descending -iass#:#iass_sort_name_asc#:#Username ascending -iass#:#iass_sort_name_desc#:#Username descending -iass#:#iass_status_completed#:#Completato +iass#:#iass_sort_changetime_asc#:#Ultima modifica crescente +iass#:#iass_sort_changetime_desc#:#Ultima modifica decrescente +iass#:#iass_sort_examiner_login_asc#:#Esaminatore crescente +iass#:#iass_sort_examiner_login_desc#:#Esaminatore decrescente +iass#:#iass_sort_name_asc#:#Nome utente ? crescente +iass#:#iass_sort_name_desc#:#Nome utente ? decrescente +iass#:#iass_status_completed#:#Passato iass#:#iass_status_failed#:#Non riuscito -iass#:#iass_status_pending#:#Stato in sospeso +iass#:#iass_status_pending#:#Non ancora valutato iass#:#iass_subj_notification_completed#:#%s: Assegnazione individuale completata. iass#:#iass_subj_notification_failed#:#%s: Assegnazione individuale fallita. -iass#:#iass_upload_file#:#Upload a file -iass#:#iass_user_removed#:#User successfully removed.###29 07 2022 new variable +iass#:#iass_upload_file#:#Caricare un file +iass#:#iass_user_removed#:#Rimuovere correttamente il partecipante. iass#:#iass_usr_amend#:#Modifica della classificazione -iass#:#iass_usr_download_attachment#:#Allegato download -iass#:#iass_usr_edit#:#Edit user record and learning progress -iass#:#iass_usr_remove#:#Remove user from object -iass#:#iass_usr_view#:#User record +iass#:#iass_usr_download_attachment#:#Scarica allegato +iass#:#iass_usr_edit#:#Modifica i record degli utenti e i progressi di apprendimento +iass#:#iass_usr_remove#:#Rimuovi l'utente dall'oggetto +iass#:#iass_usr_view#:#Record dell'utente iass#:#il_iass_members#:#Partecipanti iass#:#lp_inactive#:#Nota: il progresso di apprendimento per questo oggetto non è attivo. Pertanto, le adesioni non possono essere finalizzate. -iass#:#save_amend#:#Save Amended Record###26 08 2024 new variable -impr#:#impr_page_type_impr#:#Imprint###29 07 2022 new variable +iass#:#save_amend#:#Save Amended Record###31 03 2023 new variable +impr#:#impr_page_type_impr#:#Dichiarazione di proprietà init#:#init_error_authentication_fail#:#Autenticazione fallita. init#:#init_error_maintenance#:#Il server non è disponibile a causa di manutenzione. Ci scusiamo per l’inconveniente. init#:#init_error_redirect_click#:#Si prega di cliccare per continuare. init#:#init_error_redirect_info#:#Reindirizzamento non supportato dal contesto. -irss#:#action_download#:#Download###26 08 2024 new variable -irss#:#action_goto#:#Open Resource###26 08 2024 new variable -irss#:#action_remove_resource#:#Delete Resource###26 08 2024 new variable -irss#:#action_remove_resource_msg#:#Do you want to delete the following Resource(s)?###26 08 2024 new variable -irss#:#action_remove_zip_path#:#Delete path###26 08 2024 new variable -irss#:#action_remove_zip_path_msg#:#Would you like to delete the following paths?###26 08 2024 new variable -irss#:#action_show_revisions#:#Show Revisions###26 08 2024 new variable -irss#:#by_creation_date_asc#:#By Creation Date (Ascending)###26 08 2024 new variable -irss#:#by_creation_date_desc#:#By Creation Date (Descending)###26 08 2024 new variable -irss#:#by_size_asc#:#By File Size (Ascending)###26 08 2024 new variable -irss#:#by_size_desc#:#By File Size (Descending)###26 08 2024 new variable -irss#:#by_title_asc#:#By Title (Ascending)###26 08 2024 new variable -irss#:#by_title_desc#:#By Title (Descending)###26 08 2024 new variable -irss#:#create_directory#:#Create Directory###26 08 2024 new variable -irss#:#creation_date#:#Creation Date (This Revision)###26 08 2024 new variable -irss#:#directory_name#:#Directory Name###26 08 2024 new variable -irss#:#directory_name_info#:#Name of the directory to be inserted at the current location.###26 08 2024 new variable -irss#:#download_zip#:#Download all files as ZIP###26 08 2024 new variable -irss#:#file_size#:#File Size (This Revision)###26 08 2024 new variable -irss#:#file_size_bigger_than#:#File Size > MB###26 08 2024 new variable -irss#:#full_size#:#Resource Size (All Revisions)###26 08 2024 new variable -irss#:#home_directory#:#Root-Directory###26 08 2024 new variable -irss#:#max_revision#:#Max. Revision###29 07 2022 new variable -irss#:#msg_error_adding_directory#:#The directory could not be created.###26 08 2024 new variable -irss#:#msg_success_adding_directory#:#The directory was created successfully.###26 08 2024 new variable -irss#:#msg_upload#:#Drop Files to upload###26 08 2024 new variable -irss#:#resource_id#:#Resource ID###29 07 2022 new variable -irss#:#resource_no_stakeholder_uri#:#No Stakeholder provides a valid Link to the usage of this Resource.###26 08 2024 new variable -irss#:#resource_overview#:#Resource Overview###26 08 2024 new variable -irss#:#revision#:#Revision###26 08 2024 new variable -irss#:#revision_status#:#Status###26 08 2024 new variable -irss#:#revision_status_10#:#Published###26 08 2024 new variable -irss#:#revision_status_20#:#Draft###26 08 2024 new variable -irss#:#revisions#:#Available Revisions###26 08 2024 new variable -irss#:#rid_deleted#:#File removed###26 08 2024 new variable -irss#:#rids_appended#:#Resource(s) added###26 08 2024 new variable -irss#:#rids_appended_failed#:#No Resource(s) added###29 10 2025 new variable -irss#:#rids_deleted#:#Resource(s) deleted###26 08 2024 new variable -irss#:#rids_updated#:#Ressource(n) updated###26 08 2024 new variable -irss#:#sorting#:#Default Ordering###26 08 2024 new variable -irss#:#sorting_1#:#By Title (Ascending)###26 08 2024 new variable -irss#:#sorting_2#:#By Title (Descending)###26 08 2024 new variable -irss#:#sorting_3#:#By File Size (Ascending)###26 08 2024 new variable -irss#:#sorting_4#:#By File Size (Descending)###26 08 2024 new variable -irss#:#sorting_5#:#By Creation Date (Ascending)###26 08 2024 new variable -irss#:#sorting_6#:#By Creation Date (Descending)###26 08 2024 new variable -irss#:#stakeholders#:#Stakeholders###29 07 2022 new variable -irss#:#storage_id#:#Storage ID###29 07 2022 new variable -irss#:#storage_info#:#Storage Information###29 07 2022 new variable -irss#:#title_manage_container#:#Manage files and folders###26 08 2024 new variable -irss#:#type#:#File Type###26 08 2024 new variable -irss#:#upload_field_title#:#Selected Files###26 08 2024 new variable -irss#:#upload_modal_title#:#Add Files###26 08 2024 new variable +irss#:#action_download#:#Download###30 04 2024 new variable +irss#:#action_goto#:#Open Resource###30 04 2024 new variable +irss#:#action_remove_resource#:#Delete Resource###30 04 2024 new variable +irss#:#action_remove_resource_msg#:#Do you want to delete the following Resource(s)?###30 04 2024 new variable +irss#:#action_remove_zip_path#:#Delete path###28 11 2025 new variable +irss#:#action_remove_zip_path_msg#:#Would you like to delete the following paths?###28 11 2025 new variable +irss#:#action_show_revisions#:#Show Revisions###30 04 2024 new variable +irss#:#by_creation_date_asc#:#By Creation Date (Ascending)###30 04 2024 new variable +irss#:#by_creation_date_desc#:#By Creation Date (Descending)###30 04 2024 new variable +irss#:#by_size_asc#:#By File Size (Ascending)###30 04 2024 new variable +irss#:#by_size_desc#:#By File Size (Descending)###30 04 2024 new variable +irss#:#by_title_asc#:#By Title (Ascending)###30 04 2024 new variable +irss#:#by_title_desc#:#By Title (Descending)###30 04 2024 new variable +irss#:#create_directory#:#Create Directory###28 11 2025 new variable +irss#:#creation_date#:#Creation Date (This Revision)###30 04 2024 new variable +irss#:#directory_name#:#Directory Name###28 11 2025 new variable +irss#:#directory_name_info#:#Name of the directory to be inserted at the current location.###28 11 2025 new variable +irss#:#download_zip#:#Download all files as ZIP###28 11 2025 new variable +irss#:#file_size#:#File Size (This Revision)###30 04 2024 new variable +irss#:#file_size_bigger_than#:#File Size > MB###30 04 2024 new variable +irss#:#full_size#:#Resource Size (All Revisions)###30 04 2024 new variable +irss#:#home_directory#:#Root-Directory###28 11 2025 new variable +irss#:#max_revision#:#Max. Revision###31 03 2023 new variable +irss#:#msg_error_adding_directory#:#The directory could not be created.###28 11 2025 new variable +irss#:#msg_success_adding_directory#:#The directory was created successfully.###28 11 2025 new variable +irss#:#msg_upload#:#Drop Files to upload###30 04 2024 new variable +irss#:#resource_id#:#Resource ID###31 03 2023 new variable +irss#:#resource_no_stakeholder_uri#:#No Stakeholder provides a valid Link to the usage of this Resource.###30 04 2024 new variable +irss#:#resource_overview#:#Resource Overview###30 04 2024 new variable +irss#:#revision#:#Revision###30 04 2024 new variable +irss#:#revision_status#:#Status###30 04 2024 new variable +irss#:#revision_status_10#:#Published###30 04 2024 new variable +irss#:#revision_status_20#:#Draft###30 04 2024 new variable +irss#:#revisions#:#Available Revisions###30 04 2024 new variable +irss#:#rid_deleted#:#File removed###30 04 2024 new variable +irss#:#rids_appended#:#Resource(s) added###30 04 2024 new variable +irss#:#rids_appended_failed#:#No Resource(s) added###28 11 2025 new variable +irss#:#rids_deleted#:#Resource(s) deleted###30 04 2024 new variable +irss#:#rids_updated#:#Ressource(n) updated###30 04 2024 new variable +irss#:#sorting#:#Default Ordering###30 04 2024 new variable +irss#:#sorting_1#:#By Title (Ascending)###30 04 2024 new variable +irss#:#sorting_2#:#By Title (Descending)###30 04 2024 new variable +irss#:#sorting_3#:#By File Size (Ascending)###30 04 2024 new variable +irss#:#sorting_4#:#By File Size (Descending)###30 04 2024 new variable +irss#:#sorting_5#:#By Creation Date (Ascending)###30 04 2024 new variable +irss#:#sorting_6#:#By Creation Date (Descending)###30 04 2024 new variable +irss#:#stakeholders#:#Stakeholders###31 03 2023 new variable +irss#:#storage_id#:#Storage ID###31 03 2023 new variable +irss#:#storage_info#:#Storage Information###31 03 2023 new variable +irss#:#title_manage_container#:#Manage files and folders###28 11 2025 new variable +irss#:#type#:#File Type###30 04 2024 new variable +irss#:#upload_field_title#:#Selected Files###30 04 2024 new variable +irss#:#upload_modal_title#:#Add Files###30 04 2024 new variable itgr#:#itgr_always_open#:#Sempre aperto -itgr#:#itgr_assign_materials#:#Assign Materials###29 07 2022 new variable +itgr#:#itgr_assign_materials#:#Assign Materials###31 03 2023 new variable itgr#:#itgr_assigned_materials#:#materiali assegnati itgr#:#itgr_assignment#:#assegnazione itgr#:#itgr_behaviour#:#Comportamento del blocco @@ -10745,18 +10733,18 @@ itgr#:#itgr_edit#:#modifica gruppi di oggetti itgr#:#itgr_expandable_closed#:#Espandibile (inizialmente chiuso) itgr#:#itgr_expandable_open#:#Espandibile (inizialmente aperto) itgr#:#itgr_item#:#oggetto -itgr#:#itgr_list#:#List###29 07 2022 new variable -itgr#:#itgr_list_default#:#Default###29 07 2022 new variable -itgr#:#itgr_list_default_info#:#Inherits value from upper container.###29 07 2022 new variable -itgr#:#itgr_list_presentation#:#Item Presentation###29 07 2022 new variable +itgr#:#itgr_list#:#List###31 03 2023 new variable +itgr#:#itgr_list_default#:#Default###31 03 2023 new variable +itgr#:#itgr_list_default_info#:#Inherits value from upper container.###31 03 2023 new variable +itgr#:#itgr_list_presentation#:#Item Presentation###31 03 2023 new variable itgr#:#itgr_materials#:#Materiali itgr#:#itgr_show_title#:#Mostra titolo itgr#:#itgr_show_title_info#:#Mostra il titolo del gruppo di articoli nella presentazione per l’allievo. -itgr#:#itgr_tile#:#Tiles###29 07 2022 new variable -itgr#:#itgr_tile_size#:#Tile Size###29 07 2022 new variable -jscalendar#:#about_calendar#:#A proposito dell& -jscalendar#:#about_calendar_long#:#DHTML Date/Time Selector\\n(c) dynarch.com 2002-2003\\nPer avere l& -jscalendar#:#about_time#:#\\n\\nSelezione ora:\\n- Per aumentare clicca sull& +itgr#:#itgr_tile#:#Tiles###31 03 2023 new variable +itgr#:#itgr_tile_size#:#Tile Size###31 03 2023 new variable +jscalendar#:#about_calendar#:#Informazioni sul calendario +jscalendar#:#about_calendar_long#:#Selettore data / ora DHTML (c) dynarch.com 2002-2003 Per l'ultima versione visitare: http://dynarch.com/mishoo/calendar.epl Distribuito sotto GNU LGPL. Vedi http://gnu.org/licenses/lgpl.html per i dettagli. Data selezione: - Usa i pulsanti  «, » per selezionare l'anno - Usa i pulsanti <,> per selezionare il mese - Tieni premuto il pulsante del mouse su uno dei pulsanti sopra per una selezione più rapida. +jscalendar#:#about_time#:# Tempo di tempo: - Fai clic su una delle parti del tempo per aumentarlo - o Maiusc + clic per ridurlo - oppure fai clic e trascina per una selezione più rapida. jscalendar#:#day_first#:#Mostra prima %s jscalendar#:#def_date_format#:#%A-%m-%g jscalendar#:#drag_to_move#:#Trascina per spostare @@ -10777,7 +10765,7 @@ jscalendar#:#l_fr#:#Venerdi jscalendar#:#l_mo#:#Lunedi jscalendar#:#l_sa#:#Sabato jscalendar#:#l_su#:#Domenica -jscalendar#:#l_th#:#giovedi +jscalendar#:#l_th#:#Giovedi jscalendar#:#l_tu#:#Martedi jscalendar#:#l_we#:#Mercoledi jscalendar#:#next_month#:#Mese successivo (tieni premuto per il menu) @@ -10807,16 +10795,16 @@ jscalendar#:#s_tu#:#Ma jscalendar#:#s_we#:#Me jscalendar#:#select_date#:#Seleziona una data jscalendar#:#time#:#Ora -jscalendar#:#time_part#:#(Shift-)Clicca o trascina per cambiare il valore +jscalendar#:#time_part#:#(Cambiare-)Clicca o trascina per cambiare il valore jscalendar#:#today#:#Oggi jscalendar#:#tt_date_format#:#%a, %b %e jscalendar#:#wk#:#wk ldap#:#add_ldap_server#:#Aggiungi Server -ldap#:#ldap_add_missing#:#Assegnare ruoli mancanti +ldap#:#ldap_add_missing#:#Assegna ruoli mancanti ldap#:#ldap_add_role_ass_rule#:#Nuova regola per le assegnazioni del ruolo -ldap#:#ldap_add_roles#:#Add Roles###29 10 2025 new variable -ldap#:#ldap_as_ds#:#Utilizza come origine dati -ldap#:#ldap_as_ds_info#:#Se attivata, questa configurazione LDAP viene utilizzato solo per la sincronizzazione di account utente in combinazione con altri metodi di autenticazione. +ldap#:#ldap_add_roles#:#Add Roles###28 11 2025 new variable +ldap#:#ldap_as_ds#:#Utilizza come sorgente dati +ldap#:#ldap_as_ds_info#:#Se attivata, questa configurazione LDAP viene utilizzata solo per la sincronizzazione degli account utente in combinazione con altri metodi di autenticazione (ad esempio CAS o Radius). ldap#:#ldap_assignment_type#:#Tipo di Proprietà ldap#:#ldap_authentication_settings#:#Regole di autenticazione ldap#:#ldap_bind_anonymous#:#Relaziona anonimamente @@ -10826,15 +10814,15 @@ ldap#:#ldap_check_role_assignment#:#Assegnazione di ruoli dopo gli ultimi access ldap#:#ldap_choose_role#:#Scegli ruolo ldap#:#ldap_confirm_del_role_ass#:#Cancella le assegnazioni di Ruolo ldap#:#ldap_deleted_role_mapping#:#Assegnazione cancellata. -ldap#:#ldap_deleted_rule#:#assegnazioni canellate di ruoli selezionati +ldap#:#ldap_deleted_rule#:#Cancellate le assegnazioni dei ruoli selezionati ldap#:#ldap_dn_info#:#Inserisci il nome esatto del gruppo LDAP. ldap#:#ldap_edit_role_ass_rule#:#Edita le regole di assegnazione del Ruolo. ldap#:#ldap_edit_role_assignment#:#Modifica ruolo -> Assegnazione gruppo -ldap#:#ldap_err_missing_plugin_id#:#Si prega si inserire un id plug-in valido. -ldap#:#ldap_escapedn#:#Escape DN###29 07 2022 new variable -ldap#:#ldap_escapedn_info#:#If enabled, special characters in the "Distinguished Name (DN)" of user accounts are escaped in queries for group membership.###29 07 2022 new variable +ldap#:#ldap_err_missing_plugin_id#:#Si prega si inserire un valido plug-in id. +ldap#:#ldap_escapedn#:#Salva i caratteri speciali in DN +ldap#:#ldap_escapedn_info#:#Se abilitato, i caratteri speciali in "Distinguished Name (DN)" degli account utenti sono salvati nelle query per i membri dei gruppi. ldap#:#ldap_filter_info#:#Filtro che sarà aggiunto ai filtri di ricerca in questo modo: (&(userattr=username)<strong>(userfilter)</strong>). -ldap#:#ldap_global_role#:#ruolo globale +ldap#:#ldap_global_role#:#Ruolo globale ldap#:#ldap_global_role_assignment#:#Assegnazione di ruolo in ILIAS ldap#:#ldap_global_role_info#:#Per favore scegli un ruolo ILIAS a cui i nuovi tenti verranno assegnati. ldap#:#ldap_group_attribute#:#Attributi del gruppo @@ -10843,65 +10831,65 @@ ldap#:#ldap_group_dn#:#Gruppo DN ldap#:#ldap_group_dn_info#:#Viene anteposto a "BaseDN" quando si ricercano gruppi. ldap#:#ldap_group_dn_short#:#Gruppo DN: ldap#:#ldap_group_filter#:#Filtro LDAP -ldap#:#ldap_group_filter_info#:#Filtro che sarà aggiunto ai filtri di ricerca, in caso di ricerca di gruppi, in questo modo: (&(groupattr=group)(memberattr=username)(groupfilter)). +ldap#:#ldap_group_filter_info#:#Filtro che sarà aggiunto ai filtri di ricerca, in caso di ricerca di gruppi, in questo modo: (&(groupattr=group)(memberattr=username)<strong>(groupfilter)</strong>). ldap#:#ldap_group_member#:#Attributi dei Membri di Gruppo -ldap#:#ldap_group_member_info#:#The attribute of the group object where the user dn may be found. Choose "Attribute Value is DN" if the member attribute is the distinguished name of the users. +ldap#:#ldap_group_member_info#:#L'attributo dell'oggetto gruppo in cui è possibile trovare l'utente dn. Scegli "Il valore dell'attributo è DN" se l'attributo membro è il nome distinto degli utenti. ldap#:#ldap_group_member_optional#:#L'appartenenza al gruppo è opzionale. ldap#:#ldap_group_member_short#:#Attributo: -ldap#:#ldap_group_membership#:#Apartenenza al gruppo -ldap#:#ldap_group_name#:#Nome di Gruppo +ldap#:#ldap_group_membership#:#Appartenenza al gruppo +ldap#:#ldap_group_name#:#Nome del Gruppo ldap#:#ldap_group_name_info#:#Il nome del gruppo degli utenti deve essere quello di un membro per essere autenticato con successo. -ldap#:#ldap_group_optional_info#:#Se abilitato l'appartenenza al gruppo non è richiesta per l'autenticazione. Per favore inserisci un filtro utenti per i membri di questi gruppi. Please enter a user filter for the members of these groups:<br />(&(userattr=username)<strong>(userfilter)</strong>) +ldap#:#ldap_group_optional_info#:#Se abilitato, l'appartenenza al gruppo non è richiesta per l'autenticazione. Per favore inserisci un filtro utenti per i membri di questi gruppi:<br />(&(userattr=username)<strong>(userfilter)</strong>) ldap#:#ldap_group_restrictions#:#Restrizioni dei Membri di Grupo ldap#:#ldap_group_scope#:#Tipo di ricerca ldap#:#ldap_group_scope_info#:#Estensione della ricerca di Gruppi. Se non sei sicuro, scegli "Sub". ldap#:#ldap_group_search_base#:#Base di ricerca del Gruppo -ldap#:#ldap_group_user_filter#:#Filtro Utenti +ldap#:#ldap_group_user_filter#:#Filtro utenti ldap#:#ldap_ilias_role#:#Ruolo in ILIAS ldap#:#ldap_info_text#:#Testo informativo -ldap#:#ldap_info_text_info#:#Se presente, questo testo sarà mostrato nella schermata d'informazioni dell'oggetto, assegnato a questo ruolo. Opzionalmente, questo testo è disponibile nel Repository e nel Desktop personale<br /><br /><br /><br />If entered, this text will be shown in the repository and on the info screen for the object this role is assigned to. +ldap#:#ldap_info_text_info#:#Se presente, questo testo sarà mostrato nella schermata delle informazioni dell'oggetto, assegnato a questo ruolo. Opzionalmente, questo testo è disponibile nel Repository. ldap#:#ldap_local_role#:#Ruolo locale -ldap#:#ldap_mapping_info_type#:#Mostra le Informazioni anche nel Repository/ Desktop Personal +ldap#:#ldap_mapping_info_type#:#Mostra le Informazioni anche nel Repository ldap#:#ldap_mapping_table#:#Assegnazione di attributi LDAP al profilo utente ILIAS. ldap#:#ldap_mapping_template#:#Modello per objectClass: -ldap#:#ldap_member_info#:#L'attributo dell'oggetto Gruppo, dove si trova lo userd dn -ldap#:#ldap_memberisdn#:#L'attributo del Valore è DN -ldap#:#ldap_missing_bind_user#:#Hai scelto "Relaziona come User". Per favore, inserisci un LDAP username e password validi. +ldap#:#ldap_member_info#:#L'attributo dell'oggetto Gruppo, dove si trova l'utente dn +ldap#:#ldap_memberisdn#:#Il valore dell'attributo è DN +ldap#:#ldap_missing_bind_user#:#Hai scelto "Relaziona come utente". Per favore, inserisci username e password LDAP validi. ldap#:#ldap_missing_role_assignment#:#Per favore scegli un Ruolo generale a cui saranno assegnati i nuovi utenti ldap#:#ldap_moment_sync#:#Tipo di sincronizzazione -ldap#:#ldap_new_role_assignment#:#Aggiungi un nuovo ruolo ->Gruppo assegnato -ldap#:#ldap_plugin#:#Assegnare ruoli mancanti -ldap#:#ldap_plugin_id#:#Id Plug-in -ldap#:#ldap_plugin_info#:#Convalidare l'assegnazione di ruolo con un plug-in. Si prega si inserire un id plug-in valido. -ldap#:#ldap_referrals#:#Referenza +ldap#:#ldap_new_role_assignment#:#Aggiungi un nuovo ruolo -> Assegnazione gruppo +ldap#:#ldap_plugin#:#Assegna tramite plugin +ldap#:#ldap_plugin_id#:#Id del plugin +ldap#:#ldap_plugin_info#:#Convalidare l'assegnazione di ruolo con un plugin. Si prega si inserire un valido id plugin. +ldap#:#ldap_referrals#:#Referenze ldap#:#ldap_referrals_info#:#Se impostato, determina se la libreria LDAP si aggiorna ai riferimenti del server LDAP, oppure no. Questo dovrebbe essere disabilitato, se si usa un Active Server Directory. -ldap#:#ldap_remove_deprecated#:#Separare ruoli obsoleti -ldap#:#ldap_remove_roles#:#Remove Roles###29 10 2025 new variable +ldap#:#ldap_remove_deprecated#:#Deassegna ruoli obsoleti +ldap#:#ldap_remove_roles#:#Remove Roles###28 11 2025 new variable ldap#:#ldap_role_active#:#Abilita la sincronizzazione del gruppo ldap#:#ldap_role_assignments#:#Assegnazione di ruolo ldap#:#ldap_role_at_info#:#L'assegnazione è basata su uno specifico attributo nel profilo utente LDAP. -ldap#:#ldap_role_at_name#:#Attributi del Nome -ldap#:#ldap_role_at_value#:#Attributo del Valore +ldap#:#ldap_role_at_name#:#Nome dell'attributo +ldap#:#ldap_role_at_value#:#Valore dell'attributo ldap#:#ldap_role_bind_pass#:#Password ldap#:#ldap_role_bind_pass_info#:#Password ldap#:#ldap_role_bind_user#:#Usern DN ldap#:#ldap_role_bind_user_info#:#Per favore inserisci il nome esatto di un account utente LDAP. Tale utente deve avere diritti di scrittura per i gruppi LDAP.<br /> ldap#:#ldap_role_by_attribute#:#Attributo LDAP ldap#:#ldap_role_by_group#:#Appartenenza al gruppo -ldap#:#ldap_role_by_plugin#:#Con Plugin -ldap#:#ldap_role_group_assignments#:#Ruoli esistenti -> Assegnazioni dei Gruppi +ldap#:#ldap_role_by_plugin#:#Con plugin +ldap#:#ldap_role_group_assignments#:#Ruoli esistenti -> Assegnazioni dei gruppi ldap#:#ldap_role_grp_at#:#Attributi ldap#:#ldap_role_grp_dn_info#:#Per favore inserisci il nome esatto del gruppo LDAP. ldap#:#ldap_role_grp_info#:#Membri di uno specifico gruppo LDAP sarano assegnati ad un dato ruolo ILIAS. ldap#:#ldap_role_grp_isdn#:#L'attributo del Valore è DN ldap#:#ldap_role_info#:#Inserisci il nome di un ruolo ILIAS che controllerà l'appartenenza al gruppo LDAP. -ldap#:#ldap_role_mapping#:#LDAP-Group -> Role Mapping +ldap#:#ldap_role_mapping#:#Ruolo ILIAS -> Mappatura gruppi LDAP ldap#:#ldap_role_name_info#:#Si prega di scegliere un ruolo globale o immettere il nome di un ruolo locale. ldap#:#ldap_role_not_exists#:#Non esiste un ruolo con questo nome. -ldap#:#ldap_role_selection#:#selezione del ruolo +ldap#:#ldap_role_selection#:#Selezione del ruolo ldap#:#ldap_role_selection_info#:#La tua selezione è ambigua. Si prega di scegliere uno dei seguenti ruoli. ldap#:#ldap_role_settings#:#Impostazioni delle sincronizzazioni dei Gruppi LDAP -ldap#:#ldap_rule_condition#:#condizione +ldap#:#ldap_rule_condition#:#Condizione ldap#:#ldap_rule_type#:#Tipo di assegnazione ldap#:#ldap_scope_one#:#Uno ldap#:#ldap_scope_sub#:#Richiesta @@ -10913,147 +10901,148 @@ ldap#:#ldap_server_binding#:#Relaziona ldap#:#ldap_server_name#:#Nome della configurazione LDAP ldap#:#ldap_server_name_info#:#Per favore scegli un nome per la configurazione di questo server LDAP. ldap#:#ldap_server_security_settings#:#Impostazioni di sicurezza -ldap#:#ldap_server_short#:#Server URL: -ldap#:#ldap_server_url_info#:#Un URL qualificato per specificare il protocollo, url e porta di connessione.<br />Esempio: "ldap://ldap.ilias.de:389".<br />Puoi aggiungere più servers separati da virgola. +ldap#:#ldap_server_short#:#URL del server: +ldap#:#ldap_server_url_info#:#Un URL qualificato per specificare il protocollo, url e porta di connessione.<br />Esempio: "ldap://ldap.ilias.de:389".<br />Puoi aggiungere più server separati da una virgola. ldap#:#ldap_server_version_info#:#Versione LDAP da usare, normalmente 3. ldap#:#ldap_servers#:#Server LDAP ldap#:#ldap_settings#:#Impostazioni del server ldap#:#ldap_sync_cron#:#Per Cron-Job ldap#:#ldap_sync_login#:#Al login ldap#:#ldap_tbl_role_ass#:#Regole attive -ldap#:#ldap_tls_conflict#:#LDAP-TLS non può essere usato in combinazione con LDAPv2. Per favore, usa LDAP v "3" o disabilita il supporto TLS. +ldap#:#ldap_tls_conflict#:#LDAP-TLS non può essere usato in combinazione con LDAPv2. Per favore, usa LDAP versione '3' o disabilita il supporto TLS. ldap#:#ldap_update_field_info#:#Aggiorna automaticamente ldap#:#ldap_update_roles#:#Assegnazioni di ruolo ldap#:#ldap_user_attribute#:#Attributi del Login Name -ldap#:#ldap_user_dn#:#User DN -ldap#:#ldap_user_mapping#:#Mappatura dei profili Utenti +ldap#:#ldap_user_dn#:#Base di ricerca utenti +ldap#:#ldap_user_mapping#:#Mappatura dei profili utenti ldap#:#ldap_user_scope#:#Tipo di ricerca -ldap#:#ldap_user_scope_info#:#Estensione della ricerca di Utenti. Se non sei sicuro, scegli "Sub". -ldap#:#ldap_user_sync#:#Impostazioni di sincronizzazione degli Utenti +ldap#:#ldap_user_scope_info#:#Ambito di ricerca degli utenti. Se non sei sicuro, scegli "Sub". +ldap#:#ldap_user_sync#:#Impostazioni di sincronizzazione degli utenti ldap#:#ldap_user_sync_cron#:#Sincronizzazione utente LDAP -ldap#:#ldap_user_sync_cron_info#:#Se attivati, i dati di base per le statistiche di utilizzo saranno raccolti ed elaborati. +ldap#:#ldap_user_sync_cron_info#:#Se attivo, gli account utenti saranno importati dalla directory LDAP e sincronizzati continuamente come operazione. ldap#:#ldap_user_sync_info#:#Definisce se i nuovi utenti sono creati automaticamente al login oppure con regolarità secondo un Cron-Job. ldap#:#ldap_username_filter#:#Filtro nome utente ldap#:#ldap_username_filter_info#:#Utilizza * come carattere jolly. -ldoc#:#deleteDocument#:#Delete###26 08 2024 new variable -ldoc#:#detachCriterionAssignment#:#Delete###26 08 2024 new variable -ldoc#:#ldoc_acceptance_history#:#Acceptance History###26 08 2024 new variable -ldoc#:#ldoc_account_reg_not_possible#:#Self-registration is currently not possible. Please contact your <a href="%1$s">system administrator</a> for further information.###26 08 2024 new variable -ldoc#:#ldoc_add_document_btn_label#:#Add Document###26 08 2024 new variable -ldoc#:#ldoc_agreement_document#:#Document###26 08 2024 new variable -ldoc#:#ldoc_agreement_document_missing#:#Missing###26 08 2024 new variable -ldoc#:#ldoc_agreement_documents_tab_label#:#Documents###26 08 2024 new variable -ldoc#:#ldoc_agreement_exists#:#Existent###26 08 2024 new variable -ldoc#:#ldoc_agreement_missing#:#Missing###26 08 2024 new variable -ldoc#:#ldoc_crit_type_usr_country#:#Profile Country###26 08 2024 new variable -ldoc#:#ldoc_crit_type_usr_country_info#:#Your document is displayed (and must be accepted the first time a user logs in) if the country set in their user profile matches the country criterion selected from the list below. Subsequent changes to the country in a user’s profile do not automatically lead to a new document being displayed. You cannot use the same country as the display criterion for more than one document.###26 08 2024 new variable -ldoc#:#ldoc_crit_type_usr_global_role#:#User Has Global Role###26 08 2024 new variable -ldoc#:#ldoc_crit_type_usr_global_role_info#:#The document is displayed (and must be accepted the first time a user logs in) if the global role the user has matches the global role selected from the list below. Subsequent changes to a user’s global role do not automatically lead to a new ToS document being displayed.###26 08 2024 new variable -ldoc#:#ldoc_crit_type_usr_language#:#Profile Language###26 08 2024 new variable -ldoc#:#ldoc_crit_type_usr_language_info#:#Your document is displayed (and must be accepted) during registration if the user’s language (selected from the list below) matches the language used during registration; or upon login if the user switches to this language in their preferences. Please note that each language can only be set as the display criterion for a single document.###26 08 2024 new variable -ldoc#:#ldoc_criterion_assignment_cannot_match#:#It is not possible to use this particular criterion for displaying your document. Because of another criterion this document would never match.###26 08 2024 new variable -ldoc#:#ldoc_criterion_assignment_must_be_unique#:#It is not possible to use this particular criterion for displaying your document. This criterion already exists.###26 08 2024 new variable -ldoc#:#ldoc_deleted_documents_p#:#The documents have been deleted.###26 08 2024 new variable -ldoc#:#ldoc_deleted_documents_s#:#The document has been deleted.###26 08 2024 new variable -ldoc#:#ldoc_disabled#:#Disabled###26 08 2024 new variable -ldoc#:#ldoc_doc_crit_attached#:#The criterion for displaying your document has been set successfully.###26 08 2024 new variable -ldoc#:#ldoc_doc_crit_changed#:#The criterion for displaying your document has been changed.###26 08 2024 new variable -ldoc#:#ldoc_doc_crit_detached#:#The criterion has been removed.###26 08 2024 new variable -ldoc#:#ldoc_doc_delete#:#Delete Document###26 08 2024 new variable -ldoc#:#ldoc_doc_detach_crit_confirm_title#:#Remove Criterion###26 08 2024 new variable -ldoc#:#ldoc_doc_sure_detach_crit#:#Are you sure that you want to remove this as the criterion for displaying your document?###26 08 2024 new variable -ldoc#:#ldoc_document#:#Document###26 08 2024 new variable -ldoc#:#ldoc_enabled#:#Enabled###26 08 2024 new variable -ldoc#:#ldoc_form_attach_criterion_head#:#Select Criterion for Displaying your Document###26 08 2024 new variable -ldoc#:#ldoc_form_criterion#:#Criterion###26 08 2024 new variable -ldoc#:#ldoc_form_document#:#Document###26 08 2024 new variable -ldoc#:#ldoc_form_document_content_changed#:#The uploaded file has had its html &lt;head&gt; information removed by ILIAS. Please check the result and upload a new file if necessary.###26 08 2024 new variable -ldoc#:#ldoc_form_document_info#:#Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will have their &lt;head/gt; information removed – only the contents of the body element will be used.###26 08 2024 new variable -ldoc#:#ldoc_form_document_new#:#Change Content###26 08 2024 new variable -ldoc#:#ldoc_form_document_new_info#:#Here you can select a file from your local filesystem to change the contents of the document. You can either upload a plain text file, or a simple HTML file. HTML files will have their &lt;head&gt; information removed - only the contents of the body element will be used. The existing contents of the document will be replaced. The acceptance history will not be affected.###26 08 2024 new variable -ldoc#:#ldoc_form_document_title#:#Title###26 08 2024 new variable -ldoc#:#ldoc_form_document_title_info#:#Please enter a title for the document.###26 08 2024 new variable -ldoc#:#ldoc_form_edit_criterion_head#:#Edit Criterion for Displaying Your Document###26 08 2024 new variable -ldoc#:#ldoc_form_edit_doc_head#:#Edit Document###26 08 2024 new variable -ldoc#:#ldoc_form_new_doc_head#:#Create Document###26 08 2024 new variable -ldoc#:#ldoc_last_modified#:#Last Change###26 08 2024 new variable -ldoc#:#ldoc_ldoc_settings#:#Settings###26 08 2024 new variable -ldoc#:#ldoc_period#:#Period###26 08 2024 new variable -ldoc#:#ldoc_period_from#:#From###26 08 2024 new variable -ldoc#:#ldoc_period_until#:#Until###26 08 2024 new variable -ldoc#:#ldoc_reevaluate_on_login#:#Re-evaluate on Successful Login###26 08 2024 new variable -ldoc#:#ldoc_reevaluate_on_login_desc#:#After a successful login, automatically have ILIAS check whether a previously-accepted document is still valid or not. If, for example, a user has changed a setting that is the criterion for displaying a particular document (for example their language setting or country], and ILIAS can find a document with that criterion, then the user has to accept the new agreement.###26 08 2024 new variable -ldoc#:#ldoc_saved_sorting#:#The new order has been saved.###26 08 2024 new variable -ldoc#:#ldoc_sure_delete_documents_p#:#Are you sure you want to delete the selected documents?###26 08 2024 new variable -ldoc#:#ldoc_sure_delete_documents_s#:#Are you sure you want to delete this document?###26 08 2024 new variable -ldoc#:#ldoc_tbl_docs_action_add_criterion#:#Add Criterion###26 08 2024 new variable -ldoc#:#ldoc_tbl_docs_cell_not_criterion#:#No criterion assigned###26 08 2024 new variable -ldoc#:#ldoc_tbl_docs_head_created#:#Creation Date###26 08 2024 new variable -ldoc#:#ldoc_tbl_docs_head_criteria#:#Criterion###26 08 2024 new variable -ldoc#:#ldoc_tbl_docs_head_last_change#:#Last Change###26 08 2024 new variable -ldoc#:#ldoc_tbl_docs_head_sorting#:#Order###26 08 2024 new variable -ldoc#:#ldoc_tbl_docs_head_title#:#Title###26 08 2024 new variable -ldoc#:#ldoc_tbl_docs_title#:#Documents###26 08 2024 new variable -ldoc#:#ldoc_tbl_hist_cell_not_criterion#:#No criterion assigned###26 08 2024 new variable -ldoc#:#ldoc_tbl_hist_head_acceptance_date#:#Date###26 08 2024 new variable -ldoc#:#ldoc_tbl_hist_head_criteria#:#Criterion###26 08 2024 new variable -ldoc#:#ldoc_tbl_hist_head_document#:#Document###26 08 2024 new variable -ldoc#:#ldoc_tbl_hist_head_firstname#:#First Name###26 08 2024 new variable -ldoc#:#ldoc_tbl_hist_head_lastname#:#Last Name###26 08 2024 new variable -ldoc#:#ldoc_tbl_hist_head_login#:#Username (Login)###26 08 2024 new variable -ldoc#:#ldoc_updated_document#:#Document uploaded###26 08 2024 new variable -lhist#:#cont_create_lhist#:#Create Learning History Element -lhist#:#cont_update_lhist#:#Edit Learning History Element -lhist#:#lhist_all#:#All -lhist#:#lhist_cont_placeholder_text#:#This element will show the learning history in the presentation mode of the portfolio. -lhist#:#lhist_enable_learning_history#:#Learning History###07 02 2020 new variable -lhist#:#lhist_enable_learning_history_info#:#Enables an overview of all achievements of a user.###07 02 2020 new variable -lhist#:#lhist_first_login#:#First Login -lhist#:#lhist_learning_history#:#Learning History -lhist#:#lhist_lhist#:#Learning History -lhist#:#lhist_manual#:#Manual -lhist#:#lhist_no_entries#:#Achieve your goals! Learn something today to further your learning history. -lhist#:#lhist_period#:#Period -lhist#:#lhist_selected#:#Selected -lhist#:#lhist_show_more#:#Show More -lhist#:#lhist_type_of_achievement#:#Type of Achievement -like#:#like#:#Like -like#:#reaction#:#Reaction +ldoc#:#deleteDocument#:#Delete###30 04 2024 new variable +ldoc#:#detachCriterionAssignment#:#Delete###30 04 2024 new variable +ldoc#:#ldoc_acceptance_history#:#Acceptance History###30 04 2024 new variable +ldoc#:#ldoc_account_reg_not_possible#:#Self-registration is currently not possible. Please contact your <a href="%1$s">system administrator</a> for further information.###30 04 2024 new variable +ldoc#:#ldoc_add_document_btn_label#:#Add Document###30 04 2024 new variable +ldoc#:#ldoc_agreement_document#:#Document###30 04 2024 new variable +ldoc#:#ldoc_agreement_document_missing#:#Missing###30 04 2024 new variable +ldoc#:#ldoc_agreement_documents_tab_label#:#Documents###30 04 2024 new variable +ldoc#:#ldoc_agreement_exists#:#Existent###30 04 2024 new variable +ldoc#:#ldoc_agreement_missing#:#Missing###30 04 2024 new variable +ldoc#:#ldoc_crit_type_usr_country#:#Profile Country###30 04 2024 new variable +ldoc#:#ldoc_crit_type_usr_country_info#:#Your document is displayed (and must be accepted the first time a user logs in) if the country set in their user profile matches the country criterion selected from the list below. Subsequent changes to the country in a user’s profile do not automatically lead to a new document being displayed. You cannot use the same country as the display criterion for more than one document.###30 04 2024 new variable +ldoc#:#ldoc_crit_type_usr_global_role#:#User Has Global Role###30 04 2024 new variable +ldoc#:#ldoc_crit_type_usr_global_role_info#:#The document is displayed (and must be accepted the first time a user logs in) if the global role the user has matches the global role selected from the list below. Subsequent changes to a user’s global role do not automatically lead to a new ToS document being displayed.###30 04 2024 new variable +ldoc#:#ldoc_crit_type_usr_language#:#Profile Language###30 04 2024 new variable +ldoc#:#ldoc_crit_type_usr_language_info#:#Your document is displayed (and must be accepted) during registration if the user’s language (selected from the list below) matches the language used during registration; or upon login if the user switches to this language in their preferences. Please note that each language can only be set as the display criterion for a single document.###30 04 2024 new variable +ldoc#:#ldoc_criterion_assignment_cannot_match#:#It is not possible to use this particular criterion for displaying your document. Because of another criterion this document would never match.###30 04 2024 new variable +ldoc#:#ldoc_criterion_assignment_must_be_unique#:#It is not possible to use this particular criterion for displaying your document. This criterion already exists.###30 04 2024 new variable +ldoc#:#ldoc_deleted_documents_p#:#The documents have been deleted.###30 04 2024 new variable +ldoc#:#ldoc_deleted_documents_s#:#The document has been deleted.###30 04 2024 new variable +ldoc#:#ldoc_disabled#:#Disabled###30 04 2024 new variable +ldoc#:#ldoc_doc_crit_attached#:#The criterion for displaying your document has been set successfully.###30 04 2024 new variable +ldoc#:#ldoc_doc_crit_changed#:#The criterion for displaying your document has been changed.###30 04 2024 new variable +ldoc#:#ldoc_doc_crit_detached#:#The criterion has been removed.###30 04 2024 new variable +ldoc#:#ldoc_doc_delete#:#Delete Document###30 04 2024 new variable +ldoc#:#ldoc_doc_detach_crit_confirm_title#:#Remove Criterion###30 04 2024 new variable +ldoc#:#ldoc_doc_sure_detach_crit#:#Are you sure that you want to remove this as the criterion for displaying your document?###30 04 2024 new variable +ldoc#:#ldoc_document#:#Document###30 04 2024 new variable +ldoc#:#ldoc_enabled#:#Enabled###30 04 2024 new variable +ldoc#:#ldoc_form_attach_criterion_head#:#Select Criterion for Displaying your Document###30 04 2024 new variable +ldoc#:#ldoc_form_criterion#:#Criterion###30 04 2024 new variable +ldoc#:#ldoc_form_criterion_standard_fields_info_text#:#Please check the settings of the standard fields before defining the criterion.###28 11 2025 new variable +ldoc#:#ldoc_form_document#:#Document###30 04 2024 new variable +ldoc#:#ldoc_form_document_content_changed#:#The uploaded file has had its html &lt;head&gt; information removed by ILIAS. Please check the result and upload a new file if necessary.###30 04 2024 new variable +ldoc#:#ldoc_form_document_info#:#Please select a file from your local filesystem. You can either upload a plain text file, or a simple HTML file. HTML files will have their &lt;head/gt; information removed – only the contents of the body element will be used.###30 04 2024 new variable +ldoc#:#ldoc_form_document_new#:#Change Content###30 04 2024 new variable +ldoc#:#ldoc_form_document_new_info#:#Here you can select a file from your local filesystem to change the contents of the document. You can either upload a plain text file, or a simple HTML file. HTML files will have their &lt;head&gt; information removed - only the contents of the body element will be used. The existing contents of the document will be replaced. The acceptance history will not be affected.###30 04 2024 new variable +ldoc#:#ldoc_form_document_title#:#Title###30 04 2024 new variable +ldoc#:#ldoc_form_document_title_info#:#Please enter a title for the document.###30 04 2024 new variable +ldoc#:#ldoc_form_edit_criterion_head#:#Edit Criterion for Displaying Your Document###30 04 2024 new variable +ldoc#:#ldoc_form_edit_doc_head#:#Edit Document###30 04 2024 new variable +ldoc#:#ldoc_form_new_doc_head#:#Create Document###30 04 2024 new variable +ldoc#:#ldoc_last_modified#:#Last Change###30 04 2024 new variable +ldoc#:#ldoc_ldoc_settings#:#Settings###30 04 2024 new variable +ldoc#:#ldoc_period#:#Period###30 04 2024 new variable +ldoc#:#ldoc_period_from#:#From###30 04 2024 new variable +ldoc#:#ldoc_period_until#:#Until###30 04 2024 new variable +ldoc#:#ldoc_reevaluate_on_login#:#Re-evaluate on Successful Login###30 04 2024 new variable +ldoc#:#ldoc_reevaluate_on_login_desc#:#After a successful login, automatically have ILIAS check whether a previously-accepted document is still valid or not. If, for example, a user has changed a setting that is the criterion for displaying a particular document (for example their language setting or country], and ILIAS can find a document with that criterion, then the user has to accept the new agreement.###30 04 2024 new variable +ldoc#:#ldoc_saved_sorting#:#The new order has been saved.###30 04 2024 new variable +ldoc#:#ldoc_sure_delete_documents_p#:#Are you sure you want to delete the selected documents?###30 04 2024 new variable +ldoc#:#ldoc_sure_delete_documents_s#:#Are you sure you want to delete this document?###30 04 2024 new variable +ldoc#:#ldoc_tbl_docs_action_add_criterion#:#Add Criterion###30 04 2024 new variable +ldoc#:#ldoc_tbl_docs_cell_not_criterion#:#No criterion assigned###30 04 2024 new variable +ldoc#:#ldoc_tbl_docs_head_created#:#Creation Date###30 04 2024 new variable +ldoc#:#ldoc_tbl_docs_head_criteria#:#Criterion###30 04 2024 new variable +ldoc#:#ldoc_tbl_docs_head_last_change#:#Last Change###30 04 2024 new variable +ldoc#:#ldoc_tbl_docs_head_sorting#:#Order###30 04 2024 new variable +ldoc#:#ldoc_tbl_docs_head_title#:#Title###30 04 2024 new variable +ldoc#:#ldoc_tbl_docs_title#:#Documents###30 04 2024 new variable +ldoc#:#ldoc_tbl_hist_cell_not_criterion#:#No criterion assigned###30 04 2024 new variable +ldoc#:#ldoc_tbl_hist_head_acceptance_date#:#Date###30 04 2024 new variable +ldoc#:#ldoc_tbl_hist_head_criteria#:#Criterion###30 04 2024 new variable +ldoc#:#ldoc_tbl_hist_head_document#:#Document###30 04 2024 new variable +ldoc#:#ldoc_tbl_hist_head_firstname#:#First Name###30 04 2024 new variable +ldoc#:#ldoc_tbl_hist_head_lastname#:#Last Name###30 04 2024 new variable +ldoc#:#ldoc_tbl_hist_head_login#:#Username (Login)###30 04 2024 new variable +ldoc#:#ldoc_updated_document#:#Document uploaded###30 04 2024 new variable +lhist#:#cont_create_lhist#:#Crea uno storico dell'apprendimento +lhist#:#cont_update_lhist#:#Modifica storico dell'apprendimento +lhist#:#lhist_all#:#Tutto +lhist#:#lhist_cont_placeholder_text#:#Questo elemento mostrerà lo storico dell'apprendimento nella modalità di presentazione del portfolio. +lhist#:#lhist_enable_learning_history#:#Storico di apprendimento +lhist#:#lhist_enable_learning_history_info#:#Abilita una panoramica dei traguardi dell'utente. +lhist#:#lhist_first_login#:#Primo accesso +lhist#:#lhist_learning_history#:#Storico dell'apprendimento +lhist#:#lhist_lhist#:#Storico dell'apprendimento +lhist#:#lhist_manual#:#Manuale +lhist#:#lhist_no_entries#:#Raggiungi i tuoi obiettivi! Impara qualcosa oggi per progredire nel tuo apprendimento. +lhist#:#lhist_period#:#Periodo +lhist#:#lhist_selected#:#Selezionato +lhist#:#lhist_show_more#:#Mostra di più +lhist#:#lhist_type_of_achievement#:#Tipo di traguardo +like#:#like#:#Mi piace +like#:#reaction#:#Reazione link#:#link_chapters#:#Capitoli link#:#link_link#:#Collegamento link#:#link_mobs#:#Oggetti multimediali link#:#link_terms#:#Termini link#:#link_wpages#:#Pagine Wiki -lm#:#lm_btn_lp_toggle_state_completed#:#Set Not Completed###29 07 2022 new variable -lm#:#lm_btn_lp_toggle_state_not_completed#:#Set Completed###29 07 2022 new variable +lm#:#lm_btn_lp_toggle_state_completed#:#Imposta come non completato +lm#:#lm_btn_lp_toggle_state_not_completed#:#Imposta come completato lm#:#lm_copy#:#Copia il modulo di apprendimento -lm#:#lm_edit_chapters#:#Edit Chapters###26 08 2024 new variable -lm#:#lm_edit_lm_settings#:#Edit Learning Module Settings###26 08 2024 new variable -lm#:#lm_est_reading_time#:#Estimated Reading Time###29 07 2022 new variable -lm#:#lm_est_reading_time_info#:#In Learning Modules in the repository the estimated reading time can be determined and displayed.###29 07 2022 new variable -lm#:#lm_insert_chapter#:#Insert chapter###28 10 2024 new variable -lm#:#lm_insert_chapter_after#:#Insert chapter after###28 10 2024 new variable -lm#:#lm_insert_chapter_before#:#Insert chapter before###28 10 2024 new variable -lm#:#lm_insert_chapter_clip#:#Insert chapter from clipboard###29 10 2025 new variable -lm#:#lm_insert_chapter_clip_after#:#Insert chapter from clipboard after###29 10 2025 new variable -lm#:#lm_insert_chapter_clip_before#:#Insert chapter from clipboard before###29 10 2025 new variable -lm#:#lm_insert_layout_after#:#Insert template after###28 10 2024 new variable -lm#:#lm_insert_layout_before#:#Insert template before###28 10 2024 new variable -lm#:#lm_insert_page#:#Insert page###28 10 2024 new variable -lm#:#lm_insert_page_after#:#Insert page after###28 10 2024 new variable -lm#:#lm_insert_page_before#:#Insert page before###28 10 2024 new variable -lm#:#lm_insert_page_clip#:#Insert page from clipboard###28 10 2024 new variable -lm#:#lm_insert_page_clip_after#:#Insert page from clipboard after###28 10 2024 new variable -lm#:#lm_insert_page_clip_before#:#Insert page from clipboard before###28 10 2024 new variable -lm#:#lm_page_added#:#Page has been added.###26 08 2024 new variable -lm#:#lm_page_type_lm#:#LM Page###29 07 2022 new variable -lm#:#lm_pages_added#:#Pages have been added.###26 08 2024 new variable +lm#:#lm_edit_chapters#:#Edit Chapters###23 10 2023 new variable +lm#:#lm_edit_lm_settings#:#Edit Learning Module Settings###23 10 2023 new variable +lm#:#lm_est_reading_time#:#Estimated Reading Time###31 03 2023 new variable +lm#:#lm_est_reading_time_info#:#In Learning Modules in the repository the estimated reading time can be determined and displayed.###31 03 2023 new variable +lm#:#lm_insert_chapter#:#Insert chapter###28 11 2025 new variable +lm#:#lm_insert_chapter_after#:#Insert chapter after###28 11 2025 new variable +lm#:#lm_insert_chapter_before#:#Insert chapter before###28 11 2025 new variable +lm#:#lm_insert_chapter_clip#:#Insert chapter from clipboard###28 11 2025 new variable +lm#:#lm_insert_chapter_clip_after#:#Insert chapter from clipboard after###28 11 2025 new variable +lm#:#lm_insert_chapter_clip_before#:#Insert chapter from clipboard before###28 11 2025 new variable +lm#:#lm_insert_layout_after#:#Insert template after###28 11 2025 new variable +lm#:#lm_insert_layout_before#:#Insert template before###28 11 2025 new variable +lm#:#lm_insert_page#:#Insert page###28 11 2025 new variable +lm#:#lm_insert_page_after#:#Insert page after###28 11 2025 new variable +lm#:#lm_insert_page_before#:#Insert page before###28 11 2025 new variable +lm#:#lm_insert_page_clip#:#Insert page from clipboard###28 11 2025 new variable +lm#:#lm_insert_page_clip_after#:#Insert page from clipboard after###28 11 2025 new variable +lm#:#lm_insert_page_clip_before#:#Insert page from clipboard before###28 11 2025 new variable +lm#:#lm_page_added#:#Page has been added.###28 11 2023 new variable +lm#:#lm_page_type_lm#:#Pagina LM +lm#:#lm_pages_added#:#Pages have been added.###28 11 2023 new variable lm#:#lm_save_titles#:#Titoli salvati. -lng#:#language_detection#:#Language Detection###29 07 2022 new variable -lng#:#lng_disable_language_detection#:#Disattiva rilevamento lingua +lng#:#language_detection#:#Riconoscimento della lingua +lng#:#lng_disable_language_detection#:#Disattiva riconoscimento lingua lng#:#lng_download_deprecated#:#Scarica elenco deprecato -lng#:#lng_enable_language_detection#:#Consenti rilevamento lingua -lng#:#lng_switch_language_detection#:#Switch Language Detection###26 08 2024 new variable +lng#:#lng_enable_language_detection#:#Abilita il riconoscimento della lingua +lng#:#lng_switch_language_detection#:#Switch Language Detection###30 04 2024 new variable log#:#log_browser#:#Registro della console del browser log#:#log_browser_users#:#Nomi utente utilizzando il registro della console log#:#log_cache_#:#Caching @@ -11061,9 +11050,9 @@ log#:#log_cache_info#:#Solo se un messaggio raggiunge o supera il livello di mem log#:#log_cache_level#:#Livello caching log#:#log_component_btn_reset#:#Ripristina impostazioni log#:#log_component_col_component#:#Componente -log#:#log_component_col_level#:#Livello-registro -log#:#log_component_root_desc#:#Livello coda per messaggi che non sono assegnati ad alcun componente. -log#:#log_components#:#Komponenten +log#:#log_component_col_level#:#Livello registro +log#:#log_component_root_desc#:#Livello registro per messaggi che non sono assegnati ad alcun componente. +log#:#log_components#:#Componenti log#:#log_general_settings#:#Impostazioni di registrazione log#:#log_level_alert#:#ALLARME log#:#log_level_critical#:#CRITICO @@ -11072,315 +11061,317 @@ log#:#log_level_emergency#:#EMERGENZA log#:#log_level_error#:#ERRORE log#:#log_level_info#:#INFO log#:#log_level_notice#:#AVVISO -log#:#log_level_off#:#Disabilita +log#:#log_level_off#:#Disabilitato log#:#log_level_warning#:#ATTENZIONE -log#:#log_log_level#:#Log-Level +log#:#log_log_level#:#Livello di registro log#:#log_memory#:#Utilizzo della memoria di registro logging#:#error_settings_saved#:#Impostazioni salvate logging#:#frm_clear_older_then#:#Elimina file più vecchi di logging#:#frm_clear_older_then_info#:#Si prega di digitare la durata in giorni. logging#:#log_error_file_cleanup_info#:#Elimina errore di registrazione file datato o orfano. -logging#:#log_error_file_cleanup_title#:#Elimina errore di registrazione file datato o orfano +logging#:#log_error_file_cleanup_title#:#Elimina errori di registrazione per file datati o orfani logging#:#log_error_folder#:#Percorso logging#:#log_error_mail#:#Destinatario mail -logging#:#log_error_message#:#Ha avuto luogo un %s errore. +logging#:#log_error_message#:#Spiacente, ha avuto luogo un errore. È stato creato un file di log, identificativo %s. logging#:#log_error_message_send_mail#:#Si prega di inviare una mail a <a href="mailto:%s?subject=code: %s">%s</a> -logging#:#log_error_path_not_configured_or_wrong#:#Path to errors (error_path) is not configured or unreachable.###07 02 2020 new variable +logging#:#log_error_path_not_configured_or_wrong#:#Il percorso degli errori (error_path) non è configurato o non è raggiungibile. logging#:#log_error_settings#:#Impostazioni di errore di registrazione logging#:#logs_settings#:#Impostazioni di registrazione -lso#:#abstract#:#Abstract -lso#:#abstract_img#:#Image for Abstract -lso#:#avail_time_period#:#Period -lso#:#completed_steps#:#Passed Steps -lso#:#condition_always#:#Always -lso#:#cont_ed_insert_lsocurriculum#:#Insert Learning Sequence Curriculum###26 08 2024 new variable -lso#:#cont_ed_insert_lsostartbutton#:#Insert Learning Sequence Start Button###26 08 2024 new variable +lso#:#abstract#:#Riassunto +lso#:#abstract_img#:#Immagine per il riassunto +lso#:#avail_time_period#:#Periodo +lso#:#completed_steps#:#Passi completati +lso#:#condition_always#:#Sempre +lso#:#cont_ed_insert_lsocurriculum#:#Insert Learning Sequence Curriculum###17 01 2024 new variable +lso#:#cont_ed_insert_lsostartbutton#:#Insert Learning Sequence Start Button###17 01 2024 new variable lso#:#curriculum#:#Curriculum -lso#:#delete_confirmation#:#Are you sure you want to delete this objects? -lso#:#entries_deleted#:#Successfuly delete entries -lso#:#entries_updated#:#Entries saved -lso#:#extro#:#Exitpage -lso#:#extro_img#:#Image for Exitpage -lso#:#failed#:#Failed###07 02 2020 new variable -lso#:#finished#:#Finished###07 02 2020 new variable -lso#:#first_access#:#First Access -lso#:#last_visited_step#:#Last visited Step -lso#:#learner_view#:#Overview -lso#:#lp_not_relevant_post_cond#:#currently not relevant for continuation###26 08 2024 new variable -lso#:#lso_activation_online_info#:#Set the Learning Sequence online to make it visible and available for Learning Sequence members. If not, only administrators and tutors will have access to it.###07 02 2020 new variable -lso#:#lso_at_least_one_admin#:#There has to be at least one learning sequence administrator. -lso#:#lso_edit_permission#:#User can change permission settings -lso#:#lso_header_delete_members#:#Would you like to remove the following members from this learning sequence? -lso#:#lso_header_edit_members#:#Edit Members -lso#:#lso_intropages_deprecationhint#:#You can edit the abstract and exit page in the tab "Content".###26 08 2024 new variable -lso#:#lso_legacy_info#:#The object will open in a new tab in your browser. Please return to this tab after processing/editing the contents. Reload the page if you have edited the content but the "Next" button remains disabled.###26 08 2024 new variable -lso#:#lso_mail_admission_new_bod#:#we are pleased to announce your registration for the learning sequence "%s". -lso#:#lso_mail_admission_new_sub#:#Your registration for learning sequence "%s" -lso#:#lso_mail_dismiss_bod#:#your membership in learning sequence "%s" has been terminated. -lso#:#lso_mail_dismiss_sub#:#Membership terminated in learning sequence "%s" -lso#:#lso_mail_notification_reg_bod#:#%s has registered for learning sequence "%s". -lso#:#lso_mail_notification_reg_req_bod#:#%s has requested membership for learning sequence "%s". -lso#:#lso_mail_notification_reg_req_bod2#:#To confirm this registration, go to: -lso#:#lso_mail_notification_reg_req_sub#:#Request to join learning sequence "%s" -lso#:#lso_mail_notification_reg_sub#:#User registered for learning sequence "%s" -lso#:#lso_mail_notification_unsub_bod#:#%s has cancelled his/her membership for the learning sequence "%s". -lso#:#lso_mail_notification_unsub_bod2#:#There might be other members on a waiting list of your learning sequence.\nYou should check for the waiting list now.\nTo view the members of your learning sequence, click here: -lso#:#lso_mail_notification_unsub_sub#:#User left learning sequence "%s" -lso#:#lso_mail_permanent_link#:#Click on the following link to find all of the information you need regarding the learning sequence: -lso#:#lso_mail_status_bod#:#your status in learning sequence "%s" has been changed. -lso#:#lso_mail_status_sub#:#Changed status in learning sequence "%s" -lso#:#lso_mail_sub_acc_bod#:#we are pleased to confirm your registration for the learning sequence "%s". -lso#:#lso_mail_sub_acc_sub#:#Registration confirmed for "%s" -lso#:#lso_mail_sub_dec_bod#:#we regret to say that your registration has been refused for learning sequence "%s". -lso#:#lso_mail_sub_dec_sub#:#Registration refused for learning sequence "%s" -lso#:#lso_mail_subscribe_member_bod#:#we are pleased to confirm your registration for the learning sequence "%s". -lso#:#lso_mail_subscribe_member_sub#:#Your registration for learning sequence "%s" -lso#:#lso_mail_unsubscribe_member_bod#:#we confirm your cancellation of membership in learning sequence %s.\nWe hope that you find an opportunity to participate in another learning sequence. -lso#:#lso_mail_unsubscribe_member_sub#:#Your cancellation of membership in learning sequence "%s" -lso#:#lso_mail_wl_bod#:#you have been assigned to the waiting list of learning sequence "%s".\nYou are assigned to position %s on the list.\n\nYou will receive a message from a learning sequence administrator when your request has been approved or rejected. -lso#:#lso_mail_wl_sub#:#Your registration for learning sequence "%s" -lso#:#lso_mainbar_button_label_curriculum#:#Curriculum###07 02 2020 new variable -lso#:#lso_mainbar_button_label_toc#:#Content###07 02 2020 new variable -lso#:#lso_mem_tbl_header#:#Learning Sequence Member -lso#:#lso_member_administration#:#Edit Participants -lso#:#lso_members_deleted#:#Deleted members -lso#:#lso_members_gallery#:#Learning Sequence Members Gallery -lso#:#lso_members_print_title#:#Learning sequence mebers -lso#:#lso_min_one_admin#:#There has to be at least one administrator assigned to this learning sequence. -lso#:#lso_msg_member_assigned#:#User(s) assigned as learning sequence member(s) -lso#:#lso_multidownload_not_available#:#Downloading multiple objects is currently not available for Learning Sequence Objects.###26 08 2024 new variable -lso#:#lso_new_status#:#Your new status is: -lso#:#lso_notification#:#Notification -lso#:#lso_notification_explanation_admin#:#You receive mail from ILIAS because you are learning sequence administrator with notification enabled. -lso#:#lso_notify_off#:#Notification about new registrations disabled -lso#:#lso_notify_on#:#Notification about new registrations enabled -lso#:#lso_player_abstract#:#Show Abstract Info -lso#:#lso_player_extro#:#Show Final Page -lso#:#lso_player_finish#:#Finish -lso#:#lso_player_next#:#Next -lso#:#lso_player_noitems#:#There are no available items in this Learning Sequence.###29 10 2025 new variable -lso#:#lso_player_previous#:#Previous -lso#:#lso_player_resume#:#Resume Learning Sequence -lso#:#lso_player_review#:#Review Learning Sequence -lso#:#lso_player_start#:#Start Learning Sequence -lso#:#lso_player_suspend#:#Suspend -lso#:#lso_player_viewmodelabel#:#Learning Sequence###29 07 2022 new variable -lso#:#lso_print_list#:#Print list -lso#:#lso_read#:#User has read access to Learning Sequence -lso#:#lso_search_users#:#Search user -lso#:#lso_settings_availability#:#availability -lso#:#lso_settings_availability_error#:#The end date can not be earlier than the start date###26 08 2024 new variable -lso#:#lso_settings_extro#:#Exitpage Settings -lso#:#lso_settings_intro#:#Intropage Settings -lso#:#lso_settings_old_extro#:#View Old Exit Page###26 08 2024 new variable -lso#:#lso_settings_old_intro#:#View Old Intro Page###26 08 2024 new variable -lso#:#lso_show_members_info#:#Member Gallery available for users -lso#:#lso_start_item#:#Open %s###07 02 2020 new variable -lso#:#lso_toast_completed_desc#:#You have completed this Learning Sequence. You might still keep looking through the content.###26 08 2024 new variable -lso#:#lso_toast_completed_title#:#Congratulations###26 08 2024 new variable -lso#:#lso_users_already_assigned#:#The user is already assigned to this learning sequence -lso#:#mail_lso_roles#:#Send mails to roles of learning sequence. -lso#:#manage#:#Manage###07 02 2020 new variable -lso#:#manage_content_maintab#:#Content -lso#:#members_gallery#:#Member Gallery -lso#:#no_entries_selected_for_delete#:#There has to be at least one entry selected. -lso#:#not_finished#:#Not Finished###07 02 2020 new variable -lso#:#notification_lso_completed_title#:#You completed the Learning Sequence %s.###26 08 2024 new variable +lso#:#delete_confirmation#:#Sei sicuro di voler eliminare questi oggetti? +lso#:#entries_deleted#:#Voci eliminate. +lso#:#entries_updated#:#Voci salvate. +lso#:#extro#:#Pagina di uscita +lso#:#extro_img#:#Immagine per pagina di uscita +lso#:#failed#:#Fallito +lso#:#finished#:#Finito +lso#:#first_access#:#Primo accesso +lso#:#last_visited_step#:#Ultimo passo visitato +lso#:#learner_view#:#Panoramica +lso#:#lp_not_relevant_post_cond#:#currently not relevant for continuation###30 04 2024 new variable +lso#:#lso_activation_online_info#:#Imposta la sequenza di apprendimento online per renderla visibile e disponibile per i membri della sequenza di apprendimento. In caso contrario, solo gli amministratori e i tutor potranno accedervi. +lso#:#lso_at_least_one_admin#:#Deve esserci almeno un amministratore della sequenza di apprendimento. +lso#:#lso_edit_permission#:#L'utente può modificare le impostazioni di autorizzazione +lso#:#lso_header_delete_members#:#Vuoi rimuovere i seguenti membri da questa sequenza di apprendimento? +lso#:#lso_header_edit_members#:#Modifica membri +lso#:#lso_intropages_deprecationhint#:#You can edit the abstract and exit page in the tab "Content".###31 03 2023 new variable +lso#:#lso_legacy_info#:#The object will open in a new tab in your browser. Please return to this tab after processing/editing the contents. Reload the page if you have edited the content but the "Next" button remains disabled.###30 04 2024 new variable +lso#:#lso_mail_admission_new_bod#:#Siamo lieti di annunciare la tua registrazione per la sequenza di apprendimento "%s". +lso#:#lso_mail_admission_new_sub#:#La tua registrazione per la sequenza di apprendimento "%s" +lso#:#lso_mail_dismiss_bod#:#La tua iscrizione alla sequenza di apprendimento "%s" è stata terminata. +lso#:#lso_mail_dismiss_sub#:#Iscrizione terminata nella sequenza di apprendimento "%s" +lso#:#lso_mail_notification_reg_bod#:#%s si è registrato per la sequenza di apprendimento "%s". +lso#:#lso_mail_notification_reg_req_bod#:#%s ha richiesto l'iscrizione alla sequenza di apprendimento "%s". +lso#:#lso_mail_notification_reg_req_bod2#:#Per confermare questa registrazione, vai a: +lso#:#lso_mail_notification_reg_req_sub#:#Richiesta di partecipare alla sequenza di apprendimento "%s" +lso#:#lso_mail_notification_reg_sub#:#Utente registrato per la sequenza di apprendimento "%s" +lso#:#lso_mail_notification_unsub_bod#:#%s ha annullato la sua iscrizione per la sequenza di apprendimento "%s". +lso#:#lso_mail_notification_unsub_bod2#:#Potrebbero esserci altri membri in una lista di attesa della tua sequenza di apprendimento. Dovresti controllare la lista di attesa ora. Per visualizzare i membri della tua sequenza di apprendimento, fai clic qui: +lso#:#lso_mail_notification_unsub_sub#:#L'utente ha lasciato la sequenza di apprendimento "%s" +lso#:#lso_mail_permanent_link#:#Fai clic sul seguente link per trovare tutte le informazioni necessarie sulla sequenza di apprendimento: +lso#:#lso_mail_status_bod#:#Il tuo stato nella sequenza di apprendimento "%s" è stato modificato. +lso#:#lso_mail_status_sub#:#Stato cambiato nella sequenza di apprendimento "%s" +lso#:#lso_mail_sub_acc_bod#:#Siamo lieti di confermare la tua registrazione alla sequenza di apprendimento "%s". +lso#:#lso_mail_sub_acc_sub#:#Registrazione confermata per "%s" +lso#:#lso_mail_sub_dec_bod#:#Ci dispiace informarti che la tua registrazione è stata rifiutata per l'apprendimento della sequenza "%s". +lso#:#lso_mail_sub_dec_sub#:#Registrazione rifiutata per la sequenza di apprendimento "%s" +lso#:#lso_mail_subscribe_member_bod#:#Siamo lieti di confermare la tua registrazione alla sequenza di apprendimento "%s". +lso#:#lso_mail_subscribe_member_sub#:#La tua registrazione per la sequenza di apprendimento "%s" +lso#:#lso_mail_unsubscribe_member_bod#:#Confermiamo la tua cancellazione all'iscrizione della sequenza di apprendimento %s. Speriamo che tu abbia l'opportunità di partecipare ad un'altra sequenza di apprendimento. +lso#:#lso_mail_unsubscribe_member_sub#:#Annullamento dell'iscrizione alla sequenza di apprendimento "%s" +lso#:#lso_mail_wl_bod#:#Sei stato assegnato alla lista di attesa della sequenza di apprendimento "%s", in posizione %s nell'elenco. Riceverai un messaggio da un amministratore della sequenza di apprendimento quando la richiesta sarà stata approvata o rifiutata. +lso#:#lso_mail_wl_sub#:#La tua registrazione per la sequenza di apprendimento "%s" +lso#:#lso_mainbar_button_label_curriculum#:#Curriculum +lso#:#lso_mainbar_button_label_toc#:#Contenuto +lso#:#lso_mem_tbl_header#:#Membro della sequenza di apprendimento +lso#:#lso_member_administration#:#Modifica partecipanti +lso#:#lso_members_deleted#:#Membri rimossi +lso#:#lso_members_gallery#:#Galleria dei membri della sequenza di apprendimento +lso#:#lso_members_print_title#:#Membri della sequenza di apprendimento +lso#:#lso_min_one_admin#:#Deve essere assegnato almeno un amministratore a questa sequenza di apprendimento. +lso#:#lso_msg_member_assigned#:#Utente/i assegnato/i come membro/i della sequenza di apprendimento +lso#:#lso_multidownload_not_available#:#Downloading multiple objects is currently not available for Learning Sequence Objects.###23 10 2023 new variable +lso#:#lso_new_status#:#Il tuo nuovo stato è: +lso#:#lso_notification#:#Notifica +lso#:#lso_notification_explanation_admin#:#Hai ricevuto una e-mail da ILIAS perchè sei un amministratore delle sequenze di apprendimento e hai le notifiche abilitate. +lso#:#lso_notify_off#:#Notifica per le nuove registrazioni disabilitata +lso#:#lso_notify_on#:#Notifica per le nuove registrazioni abilitata +lso#:#lso_player_abstract#:#Mostra informazioni riassunto +lso#:#lso_player_extro#:#Mostra ultima pagina +lso#:#lso_player_finish#:#Finito +lso#:#lso_player_next#:#Prossimo +lso#:#lso_player_noitems#:#There are no available items in this Learning Sequence.###08 07 2025 new variable +lso#:#lso_player_previous#:#Precedente +lso#:#lso_player_resume#:#Riprendi la sequenza di apprendimento +lso#:#lso_player_review#:#Rivedi la sequenza di apprendimento +lso#:#lso_player_start#:#Inizia la sequenza di apprendimento +lso#:#lso_player_suspend#:#Sospendi +lso#:#lso_player_viewmodelabel#:#Learning Sequence###31 03 2023 new variable +lso#:#lso_print_list#:#Stampa l'elenco +lso#:#lso_read#:#L'utente ha accesso in lettura alla sequenza di apprendimento +lso#:#lso_search_users#:#Cerca utente +lso#:#lso_settings_availability#:#Disponibilità +lso#:#lso_settings_availability_error#:#The end date can not be earlier than the start date###28 11 2025 new variable +lso#:#lso_settings_extro#:#Impostazioni della pagina di uscita +lso#:#lso_settings_intro#:#Impostazioni della pagina introduttiva +lso#:#lso_settings_old_extro#:#View Old Exit Page###31 03 2023 new variable +lso#:#lso_settings_old_intro#:#View Old Intro Page###31 03 2023 new variable +lso#:#lso_show_members_info#:#Galleria membri disponibile per gli utenti +lso#:#lso_start_item#:#Avvio di %s +lso#:#lso_toast_completed_desc#:#You have completed this Learning Sequence. You might still keep looking through the content.###30 04 2024 new variable +lso#:#lso_toast_completed_title#:#Congratulations###30 04 2024 new variable +lso#:#lso_users_already_assigned#:#L'utente è già assegnato a questa sequenza di apprendimento +lso#:#mail_lso_roles#:#Invia mail ai ruoli della sequenza di apprendimento. +lso#:#manage#:#Gestisci +lso#:#manage_content_maintab#:#Contenuto +lso#:#members_gallery#:#Galleria dei membri +lso#:#no_entries_selected_for_delete#:#Deve essere selezionata almeno una voce. +lso#:#not_finished#:#Non finito +lso#:#notification_lso_completed_title#:#You completed the Learning Sequence %s.###30 04 2024 new variable lso#:#show_summary#:#Info -lso#:#table_actions#:#Actions -lso#:#table_lp_settings#:#Learning Progress Settings###26 08 2024 new variable -lso#:#table_may_proceed#:#User may proceed +lso#:#table_actions#:#Azioni +lso#:#table_lp_settings#:#Learning Progress Settings###30 04 2024 new variable +lso#:#table_may_proceed#:#L'utente può procedere lso#:#table_online#:#Online -lso#:#table_position#:#Position -lso#:#table_sequence_content#:#Content Management -lso#:#table_title#:#Title -lso#:#unparticipate#:#Unsubscribe +lso#:#table_position#:#Posizione +lso#:#table_sequence_content#:#Gestione del contenuto +lso#:#table_title#:#Titolo +lso#:#unparticipate#:#Annulla l'iscrizione lti#:#act_lti_for_obj_type#:#Attiva LTI per tipo di oggetto -lti#:#activity_id#:#Activity ID###07 02 2020 new variable -lti#:#activity_id_info#:#This Activity ID is used by the LTI Provider to identify Statements.###07 02 2020 new variable -lti#:#auth_lti#:#LTI Aut -lti#:#conf_privacy_ident#:#User identification###26 08 2024 new variable -lti#:#conf_privacy_ident_il_uuid_SHA256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable -lti#:#conf_privacy_ident_il_uuid_SHA256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###26 08 2024 new variable -lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable -lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable -lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable -lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable -lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable -lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable -lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable -lti#:#conf_privacy_ident_real_email#:#E-Mail Address###26 08 2024 new variable -lti#:#conf_privacy_ident_real_email_info#:#Sends E-Mail Address of user as identification (Warning: an E-Mail Address might be used by multiple users!)###26 08 2024 new variable -lti#:#conf_privacy_name#:#User name###26 08 2024 new variable -lti#:#conf_privacy_name_firstname#:#First name###26 08 2024 new variable -lti#:#conf_privacy_name_firstname_info#:#Sends the first name of the user name from ILIAS###26 08 2024 new variable -lti#:#conf_privacy_name_fullname#:#Entire name###26 08 2024 new variable -lti#:#conf_privacy_name_fullname_info#:#Sends title, first name and last name###26 08 2024 new variable -lti#:#conf_privacy_name_info#:#Sending an user name is usually not required.###26 08 2024 new variable -lti#:#conf_privacy_name_lastname#:#Title and last name###26 08 2024 new variable -lti#:#conf_privacy_name_lastname_info#:#Sends Mister or Ms/Mrs. (unless otherwise specified) and the last name###26 08 2024 new variable -lti#:#conf_privacy_name_none#:#No one###26 08 2024 new variable -lti#:#conf_privacy_name_none_info#:#Sends '-' instead of a name###26 08 2024 new variable -lti#:#conf_user_ident#:#User identification###07 02 2020 new variable -lti#:#conf_user_ident_il_uuid_ext_account#:#External User Id combined with a unique ILIAS platform id formated as an email adress.###07 02 2020 new variable -lti#:#conf_user_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###07 02 2020 new variable -lti#:#conf_user_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formated as an email adress.###07 02 2020 new variable -lti#:#conf_user_ident_il_uuid_login_info#:#This is identical to each call, but may allow a direct conclusion about the ILIAS user.###07 02 2020 new variable -lti#:#conf_user_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formated as an email adress.###07 02 2020 new variable -lti#:#conf_user_ident_il_uuid_user_id_info#:#This is identical to each call, but doesn't allow a direct conclusion about the ILIAS user.###07 02 2020 new variable -lti#:#conf_user_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###07 02 2020 new variable -lti#:#conf_user_ident_real_email#:#E-Mail Address###07 02 2020 new variable -lti#:#conf_user_ident_real_email_info#:#Sends E-Mail Address of user as identification (Warning: an E-Mail Address might be used by multiple users!)###07 02 2020 new variable -lti#:#conf_user_name#:#User name###07 02 2020 new variable -lti#:#conf_user_name_firstname#:#First name###07 02 2020 new variable -lti#:#conf_user_name_firstname_info#:#Sends the first name of the user name from ILIAS###07 02 2020 new variable -lti#:#conf_user_name_fullname#:#Entire name###07 02 2020 new variable -lti#:#conf_user_name_fullname_info#:#Sends title, first name and last name###07 02 2020 new variable -lti#:#conf_user_name_info#:#Sending an user name is usually not required.###07 02 2020 new variable -lti#:#conf_user_name_lastname#:#Title and last name###07 02 2020 new variable -lti#:#conf_user_name_lastname_info#:#Sends Mister or Ms/Mrs. (unless otherwise specified) and the last name###07 02 2020 new variable -lti#:#conf_user_name_none#:#No one###07 02 2020 new variable -lti#:#conf_user_name_none_info#:#Sends '-' instead of a name###07 02 2020 new variable +lti#:#activity_id#:#ID attività +lti#:#activity_id_info#:#Questo ID attività viene utilizzato dal provider LTI per identificare gli statements. +lti#:#auth_lti#:#Auth LTI +lti#:#conf_privacy_ident#:#User identification###28 11 2025 new variable +lti#:#conf_privacy_ident_il_uuid_SHA256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###28 11 2025 new variable +lti#:#conf_privacy_ident_il_uuid_SHA256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###28 11 2025 new variable +lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a unique ILIAS platform id formatted as an E-Mail address###28 11 2025 new variable +lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###28 11 2025 new variable +lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###28 11 2025 new variable +lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###28 11 2025 new variable +lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###28 11 2025 new variable +lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###28 11 2025 new variable +lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###28 11 2025 new variable +lti#:#conf_privacy_ident_real_email#:#E-Mail Address###28 11 2025 new variable +lti#:#conf_privacy_ident_real_email_info#:#Sends E-Mail Address of user as identification (Warning: an E-Mail Address might be used by multiple users!)###28 11 2025 new variable +lti#:#conf_privacy_name#:#User name###28 11 2025 new variable +lti#:#conf_privacy_name_firstname#:#First name###28 11 2025 new variable +lti#:#conf_privacy_name_firstname_info#:#Sends the first name of the user name from ILIAS###28 11 2025 new variable +lti#:#conf_privacy_name_fullname#:#Entire name###28 11 2025 new variable +lti#:#conf_privacy_name_fullname_info#:#Sends title, first name and last name###28 11 2025 new variable +lti#:#conf_privacy_name_info#:#Sending an user name is usually not required.###28 11 2025 new variable +lti#:#conf_privacy_name_lastname#:#Title and last name###28 11 2025 new variable +lti#:#conf_privacy_name_lastname_info#:#Sends Mister or Ms/Mrs. (unless otherwise specified) and the last name###28 11 2025 new variable +lti#:#conf_privacy_name_none#:#No one###28 11 2025 new variable +lti#:#conf_privacy_name_none_info#:#Sends '-' instead of a name###28 11 2025 new variable +lti#:#conf_user_ident#:#User identification###28 11 2025 new variable +lti#:#conf_user_ident_il_uuid_ext_account#:#External User ID combined with a unique ILIAS platform id formated as an email adress.###28 11 2025 new variable +lti#:#conf_user_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###28 11 2025 new variable +lti#:#conf_user_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formated as an email adress.###28 11 2025 new variable +lti#:#conf_user_ident_il_uuid_login_info#:#This is identical to each call, but may allow a direct conclusion about the ILIAS user.###28 11 2025 new variable +lti#:#conf_user_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formated as an email adress.###28 11 2025 new variable +lti#:#conf_user_ident_il_uuid_user_id_info#:#This is identical to each call, but doesn't allow a direct conclusion about the ILIAS user.###28 11 2025 new variable +lti#:#conf_user_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###28 11 2025 new variable +lti#:#conf_user_ident_real_email#:#E-Mail Address###28 11 2025 new variable +lti#:#conf_user_ident_real_email_info#:#Sends E-Mail Address of user as identification (Warning: an E-Mail Address might be used by multiple users!)###28 11 2025 new variable +lti#:#conf_user_name#:#User name###28 11 2025 new variable +lti#:#conf_user_name_firstname#:#First name###28 11 2025 new variable +lti#:#conf_user_name_firstname_info#:#Sends the first name of the user name from ILIAS###28 11 2025 new variable +lti#:#conf_user_name_fullname#:#Entire name###28 11 2025 new variable +lti#:#conf_user_name_fullname_info#:#Sends title, first name and last name###28 11 2025 new variable +lti#:#conf_user_name_info#:#Sending an user name is usually not required.###28 11 2025 new variable +lti#:#conf_user_name_lastname#:#Title and last name###28 11 2025 new variable +lti#:#conf_user_name_lastname_info#:#Sends Mister or Ms/Mrs. (unless otherwise specified) and the last name###28 11 2025 new variable +lti#:#conf_user_name_none#:#No one###28 11 2025 new variable +lti#:#conf_user_name_none_info#:#Sends '-' instead of a name###28 11 2025 new variable lti#:#consumers#:#Consumatori -lti#:#description_info#:#The description will be shown below the title.###07 02 2020 new variable -lti#:#field_provider_xml#:#XML-File###07 02 2020 new variable -lti#:#field_provider_xml_info#:#Supported are XML-Files for Tool Consumer and for Common Cartridge according to https://www.imsglobal.org/specs/lti/xml.###07 02 2020 new variable -lti#:#form_import_provider#:#Import Global Provider###07 02 2020 new variable +lti#:#description_info#:#La descrizione verrà mostrata sotto il titolo. +lti#:#field_provider_xml#:#File XML +lti#:#field_provider_xml_info#:#Sono supportati file XML per strumento utenti e per cartuccia comune in accordo a https://www.imsglobal.org/specs/lti/xml. +lti#:#form_import_provider#:#Importa fornitore globale lti#:#gbl_roles_to_users#:#Ruolo globale assegnato agli utenti LTI -lti#:#global_provider_subtab#:#Global Providers for all Users###07 02 2020 new variable -lti#:#grade_activity_progress_all#:#All Information on Activity Progress###26 08 2024 new variable -lti#:#grade_activity_progress_completed#:#Completed###26 08 2024 new variable -lti#:#grade_activity_progress_initialized#:#Initialized###26 08 2024 new variable -lti#:#grade_activity_progress_inprogress#:#In Progress###26 08 2024 new variable -lti#:#grade_activity_progress_started#:#Started###26 08 2024 new variable -lti#:#grade_activity_progress_submitted#:#Submitted###26 08 2024 new variable -lti#:#grade_grading_progress_all#:#All Information on Grading Progress###26 08 2024 new variable -lti#:#grade_grading_progress_failed#:#The Grading could not complete (Failed)###26 08 2024 new variable -lti#:#grade_grading_progress_fullygraded#:#The Grading Process is completed###26 08 2024 new variable -lti#:#grade_grading_progress_notready#:#No Grading Process is occurring (NotReady)###26 08 2024 new variable -lti#:#grade_grading_progress_pending#:#Final Grade is pending###26 08 2024 new variable -lti#:#grade_grading_progress_pendingmanual#:#Final Grade is pending; requires Human Intervention###26 08 2024 new variable -lti#:#highscore_achieved_ts#:#Date###07 02 2020 new variable -lti#:#highscore_achieved_ts_description#:#A column containing the date will be included in the ranking.###07 02 2020 new variable -lti#:#highscore_all_tables#:#Participant's Own Rank and Top Ranking###07 02 2020 new variable -lti#:#highscore_all_tables_description#:#Participants get information about the top ranking and their own position in the ranking.###07 02 2020 new variable -lti#:#highscore_description#:#The names of other users could be displayed if the right 'View learning experiences of other users' is set.###07 02 2020 new variable -lti#:#highscore_enabled#:#Ranking###07 02 2020 new variable -lti#:#highscore_mode#:#Mode###07 02 2020 new variable -lti#:#highscore_own_table#:#Participant's Own Rank###07 02 2020 new variable -lti#:#highscore_own_table_description#:#Participants are advised of their own position in the ranking.###07 02 2020 new variable -lti#:#highscore_percentage#:#Percentage###07 02 2020 new variable -lti#:#highscore_percentage_description#:#A column containing the score as percentage will be included in the ranking.###07 02 2020 new variable -lti#:#highscore_score#:#Score###07 02 2020 new variable -lti#:#highscore_score_description#:#A column containing the score will be included in the ranking.###07 02 2020 new variable -lti#:#highscore_top_num#:#Length of Top Ranking###07 02 2020 new variable -lti#:#highscore_top_num_description#:#Specify how many ranks are to be included in the top ranking list.###07 02 2020 new variable -lti#:#highscore_top_num_unit#:#entries###07 02 2020 new variable -lti#:#highscore_top_table#:#Top Ranking###07 02 2020 new variable -lti#:#highscore_top_table_description#:#Participants are presented with a table containing the top rankings.###07 02 2020 new variable -lti#:#highscore_wtime#:#Duration###07 02 2020 new variable -lti#:#highscore_wtime_description#:#A column containing the duration will be included in the ranking.###07 02 2020 new variable -lti#:#launch_method#:#Options for Launch###07 02 2020 new variable -lti#:#launch_method_embedded#:#Embedded Content###07 02 2020 new variable -lti#:#launch_method_embedded_info#:#The content is opened within the ILIAS context. It is presented as embedded content within the content tab.###07 02 2020 new variable -lti#:#launch_method_new_win#:#New Window###07 02 2020 new variable -lti#:#launch_method_new_win_info#:#The content is opened in a new window. When leaving the content this window gets closed.###07 02 2020 new variable -lti#:#launch_method_own_win#:#Own Window###07 02 2020 new variable -lti#:#launch_method_own_win_info#:#The content is opened in the same window and replaces the ILIAS Screen. When leaving the content the user returns to ILIAS.###07 02 2020 new variable -lti#:#launched#:#Resource was already launched.###07 02 2020 new variable -lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable -lti#:#lm_only_one_download_per_type#:#Si prega di notare che è possibile creare un solo file per tipo (XLM, HTML, SCORM) pubblico accessibile. -lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable -lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable -lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable -lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable -lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable -lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable -lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable -lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable -lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable -lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable -lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable -lti#:#lti_action_edit_provider#:#Edit Provider###07 02 2020 new variable -lti#:#lti_action_reset_provider_to_user_scope#:#Reset Provider as User Defined Provider###07 02 2020 new variable -lti#:#lti_action_reset_providers_to_user_scope#:#Reset Providers as User Defined###07 02 2020 new variable -lti#:#lti_add_global_provider#:#Add Global Provider for all Users###07 02 2020 new variable -lti#:#lti_add_own_provider#:#Add Own Provider (not for all Users)###07 02 2020 new variable +lti#:#global_provider_subtab#:#Fornitori globali per tutti gli utenti +lti#:#grade_activity_progress_all#:#All Information on Activity Progress###30 04 2024 new variable +lti#:#grade_activity_progress_completed#:#Completed###30 04 2024 new variable +lti#:#grade_activity_progress_initialized#:#Initialized###30 04 2024 new variable +lti#:#grade_activity_progress_inprogress#:#In Progress###30 04 2024 new variable +lti#:#grade_activity_progress_started#:#Started###30 04 2024 new variable +lti#:#grade_activity_progress_submitted#:#Submitted###30 04 2024 new variable +lti#:#grade_grading_progress_all#:#All Information on Grading Progress###30 04 2024 new variable +lti#:#grade_grading_progress_failed#:#The Grading could not complete (Failed)###30 04 2024 new variable +lti#:#grade_grading_progress_fullygraded#:#The Grading Process is completed###30 04 2024 new variable +lti#:#grade_grading_progress_notready#:#No Grading Process is occurring (NotReady)###30 04 2024 new variable +lti#:#grade_grading_progress_pending#:#Final Grade is pending###30 04 2024 new variable +lti#:#grade_grading_progress_pendingmanual#:#Final Grade is pending; requires Human Intervention###30 04 2024 new variable +lti#:#highscore_achieved_ts#:#Data +lti#:#highscore_achieved_ts_description#:#Una colonna contenente la data sarà inclusa nella classifica. +lti#:#highscore_all_tables#:#Classifica personale e Migliori risultati +lti#:#highscore_all_tables_description#:#I partecipanti visualizzano la classifica dei migliori risultati e la propria posizione nella classifica. +lti#:#highscore_description#:#I nomi degli utenti che possono essere visualizzati se 'Visualizza progressi didattici degli altri utenti' è impostata. +lti#:#highscore_enabled#:#Classifica +lti#:#highscore_mode#:#Modalità +lti#:#highscore_own_table#:#Classifica personale +lti#:#highscore_own_table_description#:#I partecipanti visualizzano la propria posizione nella classifica. +lti#:#highscore_percentage#:#Percentuale +lti#:#highscore_percentage_description#:#Una colonna contenente il punteggio come percentuale sarà inclusa nella classifica. +lti#:#highscore_score#:#Punteggio +lti#:#highscore_score_description#:#Una colonna contenente il punteggio sarà inclusa nella classifica. +lti#:#highscore_top_num#:#Numero di voci dei migliori risultati +lti#:#highscore_top_num_description#:#Specifica quanti punteggi devono essere inclusi nella classifica dei migliori risultati. +lti#:#highscore_top_num_unit#:#voci +lti#:#highscore_top_table#:#Classifica dei migliori risultati +lti#:#highscore_top_table_description#:#Ai partecipanti sarà mostrata una tabella contenente la classifica dei migliori risultati. +lti#:#highscore_wtime#:#Durata +lti#:#highscore_wtime_description#:#Una colonna contenente la durata sarà inclusa nella classifica. +lti#:#launch_method#:#Opzioni di avvio +lti#:#launch_method_embedded#:#Contenuto integrato +lti#:#launch_method_embedded_info#:#Il contenuto viene aperto nel contesto ILIAS. Viene presentato come contenuto integrato nella tab "Contenuti" +lti#:#launch_method_new_win#:#Nuova finestra +lti#:#launch_method_new_win_info#:#Il contenuto si apre in una nuova finestra. Quando si abbandona il contenuto, la finestra viene chiusa. +lti#:#launch_method_own_win#:#Propria finestra +lti#:#launch_method_own_win_info#:#Il contenuto viene aperto nella stessa finestra e rimpiazza la schermata di ILIAS. Quando viene abbandonato il contenuto si ritornerà alla schermata ILIAS. +lti#:#launched#:#La risorsa è stata già avviata. +lti#:#learning_progress_options#:#Opzioni per i progressi didattici +lti#:#lm_only_one_download_per_type#:#Si prega di notare che è possibile creare un solo file per tipo (XLM, HTML, SCORM) accessibile al pubblico. +lti#:#lti13_hints#:#Hints###31 03 2023 new variable +lti#:#lti_13_client_id#:#Client-ID###31 03 2023 new variable +lti#:#lti_13_deployment_id#:#Deployment-ID###31 03 2023 new variable +lti#:#lti_13_platform_id#:#Platform-ID###31 03 2023 new variable +lti#:#lti_13_step1#:#Step 1###31 03 2023 new variable +lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###31 03 2023 new variable +lti#:#lti_13_step2#:#Step 2###31 03 2023 new variable +lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###31 03 2023 new variable +lti#:#lti_action_accept_provider_as_global#:#Accetta fornitori come globali per tutti gli utenti +lti#:#lti_action_accept_providers_as_global#:#Accetta fornitori come globali +lti#:#lti_action_delete_providers#:#Cancella fornitore +lti#:#lti_action_edit_provider#:#Modifica fornitore +lti#:#lti_action_reset_provider_to_user_scope#:#Resetta il fornitore come fornitore definito dall'utente +lti#:#lti_action_reset_providers_to_user_scope#:#Resetta i fornitori come definiti dall'utente +lti#:#lti_add_global_provider#:#Aggiungi fornitore globale per tutti gli utenti +lti#:#lti_add_own_provider#:#Aggiungi fornitore personale (non per tutti gli utenti) lti#:#lti_admin#:#Amministratore LTI -lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be deleted because this provider has usages (might be in trash).###07 02 2020 new variable +lti#:#lti_at_least_one_prov_has_usages#:#Almeno uno dei provider non può essere cancellato perchè sono utilizzati (potrebbero essere nel cestino) lti#:#lti_auth_failed_invalid_key#:#Autenticazione fallita, nessuna chiave del consumatore valida fornita. -lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable -lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable -lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable -lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable -lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable -lti#:#lti_con_key_type_jwk_url#:#URL###26 08 2024 new variable -lti#:#lti_con_key_type_rsa#:#RSA-Key###26 08 2024 new variable -lti#:#lti_con_key_type_rsa_public_key#:#Public Key###26 08 2024 new variable -lti#:#lti_con_key_type_rsa_public_key_info#:#Insert the key provided by the tool (provider) in PEM format here.###26 08 2024 new variable -lti#:#lti_con_prov_always_learner#:#LTI User is always Learner###07 02 2020 new variable -lti#:#lti_con_prov_always_learner_info#:#Usually the role in ILIAS is mapped to a LTI role. Course Administrators could have more rights in the Provider, e.g. to manipulate the object. Activate this option to avoid the Role Mapping.###07 02 2020 new variable -lti#:#lti_con_prov_authentication#:#Authentication###07 02 2020 new variable -lti#:#lti_con_prov_availability#:#Availability###07 02 2020 new variable -lti#:#lti_con_prov_availability_create#:#For Creating Objects###07 02 2020 new variable -lti#:#lti_con_prov_availability_existing#:#Only for existing Objects###07 02 2020 new variable -lti#:#lti_con_prov_availability_non#:#not available###07 02 2020 new variable -lti#:#lti_con_prov_category#:#Category###07 02 2020 new variable -lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer Object is created.###07 02 2020 new variable -lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable -lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable -lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable -lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable -lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable -lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable -lti#:#lti_con_prov_has_outcome_service#:#Provider supports Outcome Service###07 02 2020 new variable -lti#:#lti_con_prov_has_outcome_service_info#:#If the LTI Outcome Service is supported, Learning Progress could be activated. The Provider returns a value between 0 and 1 to indicate the Learning Progress.###07 02 2020 new variable -lti#:#lti_con_prov_hints#:#Hints###07 02 2020 new variable -lti#:#lti_con_prov_icon#:#Icon###07 02 2020 new variable -lti#:#lti_con_prov_inc_usr_pic#:#Send User Picture###07 02 2020 new variable -lti#:#lti_con_prov_inc_usr_pic_info#:#Links to ILIAS user pictures are included at launch of LTI consumer object.###07 02 2020 new variable -lti#:#lti_con_prov_instructor_email#:#Instructor E-Mail###26 08 2024 new variable -lti#:#lti_con_prov_instructor_email_info#:#In difference to the previously selected settings, the e-mail address can be transferred for instructors. To do this, they must be course or group administrators.###26 08 2024 new variable -lti#:#lti_con_prov_instructor_name#:#Instructor Name###26 08 2024 new variable -lti#:#lti_con_prov_instructor_name_info#:#In difference to the previously selected settings, the name can be transferred for instructors.###26 08 2024 new variable -lti#:#lti_con_prov_key#:#Key###07 02 2020 new variable -lti#:#lti_con_prov_keywords#:#Keywords###07 02 2020 new variable -lti#:#lti_con_prov_keywords_info#:#The keywords must be separated by a Semicolon (;). The Keywords are automatically taken to the Metadata as Keywords.###07 02 2020 new variable -lti#:#lti_con_prov_launch_options#:#Launch Options###07 02 2020 new variable -lti#:#lti_con_prov_learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable -lti#:#lti_con_prov_mastery_score_default#:#Default Mastery Score###07 02 2020 new variable -lti#:#lti_con_prov_mastery_score_default_info#:#The Learning Progress will be evaluated from the Provider Outcome Service and the mastery score threshold.###07 02 2020 new variable -lti#:#lti_con_prov_privacy_setting_conf#:#Configuration Options###07 02 2020 new variable -lti#:#lti_con_prov_privacy_setting_default#:#Default Settings, changeable for Objects###07 02 2020 new variable -lti#:#lti_con_prov_privacy_setting_force#:#Settings are not changeable for Objects###07 02 2020 new variable -lti#:#lti_con_prov_privacy_setting_info#:#Configuration Options for Privacy Settings###07 02 2020 new variable -lti#:#lti_con_prov_privacy_settings#:#Privacy Settings###07 02 2020 new variable -lti#:#lti_con_prov_provider_key_global#:#Predefined Key and Secret###07 02 2020 new variable -lti#:#lti_con_prov_provider_key_global_info#:#If not set, users have to add key and secret to use the provider.###07 02 2020 new variable -lti#:#lti_con_prov_remarks#:#Internal Remarks###07 02 2020 new variable -lti#:#lti_con_prov_secret#:#Secret###07 02 2020 new variable -lti#:#lti_con_prov_title#:#Title###07 02 2020 new variable -lti#:#lti_con_prov_url#:#URL of Provider###07 02 2020 new variable -lti#:#lti_con_prov_use_provider_id#:#Use Provider ID###07 02 2020 new variable -lti#:#lti_con_prov_use_provider_id_info#:#Usually the Ref-Id of the LTI Consumer is transferred to the Provider. Some Providers map this Ref-Id with the Resource of the Provider. To get always the same Resource for these Providers this Option should be activated.###07 02 2020 new variable -lti#:#lti_con_prov_use_xapi#:#Provider supports request of xAPI-Statements###07 02 2020 new variable -lti#:#lti_con_prov_use_xapi_info#:#Provider supports xAPI-Statements###07 02 2020 new variable -lti#:#lti_con_prov_xapi_activity_id#:#Activity ID###07 02 2020 new variable -lti#:#lti_con_prov_xapi_activity_id_info#:#The Activity ID is necessary to request data from the Learning Record Store. Only enter something here if the assignment of the provider's resource to an Activity Id is unique! If nothing is entered here, the Activity Id can be entered in LTI Consumer. The Activity Id could be requested from the LTI Provider.###07 02 2020 new variable -lti#:#lti_con_prov_xapi_launch_key#:#Key of LRS Endpoint###07 02 2020 new variable -lti#:#lti_con_prov_xapi_launch_key_info#:#&nbsp;###07 02 2020 new variable -lti#:#lti_con_prov_xapi_launch_secret#:#Secret of LRS Endpoint###07 02 2020 new variable -lti#:#lti_con_prov_xapi_launch_secret_info#:#&nbsp;###07 02 2020 new variable -lti#:#lti_con_prov_xapi_launch_url#:#URL of LRS Endpoint###07 02 2020 new variable -lti#:#lti_con_prov_xapi_launch_url_info#:#Please add full URL with https://###07 02 2020 new variable -lti#:#lti_con_redirection_uris#:#Redirection URI###26 08 2024 new variable -lti#:#lti_con_tool_url#:#Login URL###26 08 2024 new variable -lti#:#lti_con_version#:#LTI Version###26 08 2024 new variable -lti#:#lti_con_version_1.1#:#Version 1.1###26 08 2024 new variable -lti#:#lti_con_version_1.3#:#Version 1.3###26 08 2024 new variable -lti#:#lti_con_version_1.3_before_id#:#If dynamic registration is not used, after entering the data provided by the tool, additional data will appear that must be entered with the tool.###26 08 2024 new variable -lti#:#lti_confirm_delete_providers#:#Are you sure that you want to delete the following provider(s)?###07 02 2020 new variable -lti#:#lti_consumer#:#Freigabe für +lti#:#lti_con_content_item#:#Support for Deep Linking###31 03 2023 new variable +lti#:#lti_con_content_item_url#:#Content URL###31 03 2023 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable +lti#:#lti_con_initiate_login_url#:#Initiate Login URL###31 03 2023 new variable +lti#:#lti_con_key_type#:#Public Key Type###31 03 2023 new variable +lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###31 03 2023 new variable +lti#:#lti_con_key_type_jwk_url#:#URL###31 03 2023 new variable +lti#:#lti_con_key_type_rsa#:#RSA-Key###31 03 2023 new variable +lti#:#lti_con_key_type_rsa_public_key#:#Public Key###31 03 2023 new variable +lti#:#lti_con_key_type_rsa_public_key_info#:#Insert the key provided by the tool (provider) in PEM format here.###31 03 2023 new variable +lti#:#lti_con_prov_always_learner#:#L'utente LTI è sempre il Learner +lti#:#lti_con_prov_always_learner_info#:#Di solito il ruolo in ILIAS è mappato a un ruolo LTI. Gli amministratori del corso possono ottenere più diritti (esempio: manipolazione degli oggetti). Attiva questa opzione per evitare il mapping dei ruoli. +lti#:#lti_con_prov_authentication#:#Autenticazione +lti#:#lti_con_prov_availability#:#Disponibilità +lti#:#lti_con_prov_availability_create#:#Per la creazione di Oggetti +lti#:#lti_con_prov_availability_existing#:#Solo per Oggetti esistenti +lti#:#lti_con_prov_availability_non#:#Non disponibile +lti#:#lti_con_prov_category#:#Categoria +lti#:#lti_con_prov_category_info#:#Categoria da cui filtrare quando l'oggetto viene creato +lti#:#lti_con_prov_custom_params#:#Parametri personalizzati per questo fornitore +lti#:#lti_con_prov_custom_params_info#:#Per favore inseriscili con il formato: param1=value1; param2=value2 +lti#:#lti_con_prov_description#:#Descrizione +lti#:#lti_con_prov_external_provider#:#Fornitore esterno +lti#:#lti_con_prov_external_provider_info#:#Un suggerimento che verrà mostrato a tutti gli utenti che stanno lavorando con un fornitore esterno. Un fornitore esterno è caratterizzato da una insufficiente gestione del fornitore da parte del gestore della piattaforma ILIAS.<br />Questo è il caso in cui non ci sono diritti da rimuovere. +lti#:#lti_con_prov_group_options#:#Opzione per raggruppare e filtrare i fornitori +lti#:#lti_con_prov_has_outcome_service#:#Il fornitore supporta l'esito +lti#:#lti_con_prov_has_outcome_service_info#:#Se il protocollo LTI dell'esito è supportato, l'avanzamento del progresso può essere attivato.<br />Il fornitore produrrà un valore tra 0 e 1 per indicare il progresso. +lti#:#lti_con_prov_hints#:#Suggerimenti +lti#:#lti_con_prov_icon#:#Icone +lti#:#lti_con_prov_inc_usr_pic#:#Invia immagine utente +lti#:#lti_con_prov_inc_usr_pic_info#:#I link alle Immagini utente ILIAS sono incluse all'avvio del'oggetto consumatore LTI. +lti#:#lti_con_prov_instructor_email#:#Instructor E-Mail###31 03 2023 new variable +lti#:#lti_con_prov_instructor_email_info#:#In difference to the previously selected settings, the e-mail address can be transferred for instructors. To do this, they must be course or group administrators.###31 03 2023 new variable +lti#:#lti_con_prov_instructor_name#:#Instructor Name###31 03 2023 new variable +lti#:#lti_con_prov_instructor_name_info#:#In difference to the previously selected settings, the name can be transferred for instructors.###31 03 2023 new variable +lti#:#lti_con_prov_key#:#Chiave +lti#:#lti_con_prov_keywords#:#Parole chiave +lti#:#lti_con_prov_keywords_info#:#Le parole chiave devono essere separate da un punto e virgola (;). Le parole chiave vengono automaticamente trasformate in Metadati. +lti#:#lti_con_prov_launch_options#:#Opzioni di avvio +lti#:#lti_con_prov_learning_progress_options#:#Opzioni per l'avanzamento del progresso +lti#:#lti_con_prov_mastery_score_default#:#Soglia di punteggio predefinita +lti#:#lti_con_prov_mastery_score_default_info#:#Il progresso dell'apprendimento sarà valutato dal servizio di esito del fornitore e dal punteggio di soglia. +lti#:#lti_con_prov_privacy_setting_conf#:#Opzioni di configurazione +lti#:#lti_con_prov_privacy_setting_default#:#Opzioni predefinite, modificabili per gli Oggetti +lti#:#lti_con_prov_privacy_setting_force#:#Opzioni non modificabili per gli Oggetti +lti#:#lti_con_prov_privacy_setting_info#:#Opzioni di Configurazione per la Privacy +lti#:#lti_con_prov_privacy_settings#:#Opzioni di privacy +lti#:#lti_con_prov_provider_key_global#:#Chiave e segreto predefiniti +lti#:#lti_con_prov_provider_key_global_info#:#Se non impostata, gli utenti dovranno impostare la chiave e il segreto per utilizzare il fornitore. +lti#:#lti_con_prov_remarks#:#Note interne +lti#:#lti_con_prov_secret#:#Segreto +lti#:#lti_con_prov_title#:#Titolo +lti#:#lti_con_prov_url#:#URL del fornitore +lti#:#lti_con_prov_use_provider_id#:#Utilizza ID del fornitore +lti#:#lti_con_prov_use_provider_id_info#:#Solitamente il Ref-Id del consumatore LTI è inviato al fornitore. Alcuni fornitori mappano questo Ref-Id con la risorsa del fornitore. Per ottenere la stessa risorsa da questi fornitori questa opzione deve essere attivata. +lti#:#lti_con_prov_use_xapi#:#Il fornitore supporta la richiesta di statements xAPI +lti#:#lti_con_prov_use_xapi_info#:#Il fornitore supporta gli statements xAPI +lti#:#lti_con_prov_xapi_activity_id#:#ID Attività +lti#:#lti_con_prov_xapi_activity_id_info#:#L'ID Attività è necessario per richiedere dati dal Learning Record Store. Compila questo campo solo se l'assegnazione della risorsa del fornitore all'ID Attività è unica! Se viene lasciato vuoto, l'ID Attività può essere inserito dal consumatore LTI. L'ID attività può essere richiesto dal fornitore LTI. +lti#:#lti_con_prov_xapi_launch_key#:#Chiave dell'Endpoint LRS +lti#:#lti_con_prov_xapi_launch_key_info#:#&nbsp; +lti#:#lti_con_prov_xapi_launch_secret#:#Segreto dell'Endpoint LRS +lti#:#lti_con_prov_xapi_launch_secret_info#:#&nbsp; +lti#:#lti_con_prov_xapi_launch_url#:#URL dell'Endpoint LRS +lti#:#lti_con_prov_xapi_launch_url_info#:#Per favore inserisci l'URL completo con https:// +lti#:#lti_con_redirection_uris#:#Redirection URI###31 03 2023 new variable +lti#:#lti_con_tool_url#:#Login URL###31 03 2023 new variable +lti#:#lti_con_version#:#LTI Version###31 03 2023 new variable +lti#:#lti_con_version_1.1#:#Version 1.1###31 03 2023 new variable +lti#:#lti_con_version_1.3#:#Version 1.3###31 03 2023 new variable +lti#:#lti_con_version_1.3_before_id#:#If dynamic registration is not used, after entering the data provided by the tool, additional data will appear that must be entered with the tool.###28 07 2023 new variable +lti#:#lti_confirm_delete_providers#:#Sei sicuro di voler eliminare i seguenti fornitori? +lti#:#lti_consumer#:#Approvazione per lti#:#lti_consumer_created#:#Consumatore creato lti#:#lti_consumer_deleted#:#Consumatore eliminato lti#:#lti_consumer_key#:#Chiave del consumatore @@ -11388,118 +11379,118 @@ lti#:#lti_consumer_secret#:#Segreto del consumatore lti#:#lti_consumer_set_active#:#Consumatore attivato lti#:#lti_consumer_set_inactive#:#Consumatore disattivato lti#:#lti_consumer_updated#:#Consumatore aggiornato -lti#:#lti_consuming_tab#:#ILIAS as LTI Consumer###07 02 2020 new variable -lti#:#lti_copy#:#Copy Consumer###07 02 2020 new variable +lti#:#lti_consuming_tab#:#ILIAS come Consumatore LTI +lti#:#lti_copy#:#Copia consumatore lti#:#lti_create_consumer#:#Crea consumatore -lti#:#lti_create_lti_user_role#:#Create recommended global role for LTI users###29 07 2022 new variable -lti#:#lti_cron_title#:#LTI Outcome Service###07 02 2020 new variable -lti#:#lti_cron_title_desc#:#Synchronizes the learning progress of LTI users with the LTI consumer, if it supports the outcome service. This cron job is only required to transfer status updates after Learning progress settings updates.###07 02 2020 new variable -lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable -lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable -lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable -lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_create_lti_user_role#:#Crea un ruolo globale raccomandato per gli utenti LTI +lti#:#lti_cron_title#:#Servizio esiti LTI +lti#:#lti_cron_title_desc#:#Sincronizza i progressi didattici degli utenti LTI con i consumatori LTI, se supporta il servizio degli esiti. Questo cron job è richiesto solo per trasferire aggiornamenti di stato dopo l'aggiornamento dei settaggi dei progressi didattici. +lti#:#lti_custom_new#:#Impostazioni di creazione fornitore personale +lti#:#lti_delete_consume_provider#:#Elimina fornitore +lti#:#lti_delete_consume_providers#:#Elimina fornitori +lti#:#lti_delete_provider#:#Elimina fornitore lti#:#lti_edit_consumer#:#Modifica consumatore LTI lti#:#lti_exit#:#Chiudi sessione LTI lti#:#lti_exited#:#Sessione LTI chiusa lti#:#lti_exited_info#:#Sessione LTI chiusa con successo -lti#:#lti_form_provider_create#:#Create Provider Settings###07 02 2020 new variable -lti#:#lti_form_provider_edit#:#Edit Provider Settings###07 02 2020 new variable -lti#:#lti_form_section_appearance#:#Options for launch###07 02 2020 new variable -lti#:#lti_global_settings_form#:#Global Settings###07 02 2020 new variable -lti#:#lti_import_global_provider#:#Import Global Provider for all Users with XML-File###07 02 2020 new variable -lti#:#lti_info_external_provider_info#:#The used Provider is an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-Installation. This is the case e.g. if there are no rights to delete data.###07 02 2020 new variable -lti#:#lti_info_external_provider_label#:#Additional Info about this Provider###07 02 2020 new variable -lti#:#lti_info_learning_progress_section#:#Info about Determination of the Learning Progress###07 02 2020 new variable -lti#:#lti_info_privacy_section#:#Info about personal data transmitted to the provider at launch###07 02 2020 new variable +lti#:#lti_form_provider_create#:#Impostazioni di creazione fornitore +lti#:#lti_form_provider_edit#:#Modifica impostazioni del fornitore +lti#:#lti_form_section_appearance#:#Opzioni di avvio +lti#:#lti_global_settings_form#:#Impostazioni globali +lti#:#lti_import_global_provider#:#Importa il fornitore globale per gli utenti da un file XML +lti#:#lti_info_external_provider_info#:#Il fornitore utilizzato è un fornitore esterno. Un fornitore esterno è caratterizzato da una scarsa influenza sul fornitore da parte di ILIAS. Questo è il caso se non ci sono ad esempio i permessi di cancellare i dati. +lti#:#lti_info_external_provider_label#:#Informazioni aggiuntive su questo fornitore +lti#:#lti_info_learning_progress_section#:#Informazioni sulla determinazione dei progressi didattici +lti#:#lti_info_privacy_section#:#Informazioni sui dati personali trasmessi all'avvio al fornitore lti#:#lti_launch_url#:#Url lti#:#lti_member#:#Membro LTI lti#:#lti_navigation#:#Navigazione -lti#:#lti_no_provider_selected#:#No provider selected###07 02 2020 new variable +lti#:#lti_no_provider_selected#:#Nessun fornitore selezionato lti#:#lti_not_allowed#:#Accesso negato. La tua richiesta è stata reindirizzata alla radice dell’oggetto LTI. -lti#:#lti_obj_active#:#LTI- Fornitore strumenti +lti#:#lti_obj_active#:#Fornitore degli strumenti LTI lti#:#lti_obj_active_info#:#Se abilitato, questo oggetto funge da fornitore di strumenti LTI. I nuovi utenti LTI possono essere automaticamente assegnati ai seguenti ruoli locali. -lti#:#lti_obj_version#:#LTI Version###26 08 2024 new variable -lti#:#lti_obj_version_11#:#Version 1.1###26 08 2024 new variable -lti#:#lti_obj_version_13#:#Version 1.3###26 08 2024 new variable +lti#:#lti_obj_version#:#LTI Version###31 03 2023 new variable +lti#:#lti_obj_version_11#:#Version 1.1###31 03 2023 new variable +lti#:#lti_obj_version_13#:#Version 1.3###31 03 2023 new variable lti#:#lti_object_consumer#:#Consumatori LTI -lti#:#lti_object_release_settings_form#:#LTI Freigaben bearbeiten -lti#:#lti_provider#:#LTI-Freigaben -lti#:#lti_provider_not_avail_msg#:#LTI Provider is set to 'Not Available'###07 02 2020 new variable -lti#:#lti_provider_not_set_msg#:#Configuration of LTI Provider / tool is not completely finished.###29 10 2025 new variable -lti#:#lti_providing_tab#:#ILIAS as LTI Provider###07 02 2020 new variable -lti#:#lti_released_objects#:#Objekt-Freigaben -lti#:#lti_select_provider#:#Select Provider###07 02 2020 new variable +lti#:#lti_object_release_settings_form#:#Modifica versioni LTI +lti#:#lti_provider#:#Versioni LTI +lti#:#lti_provider_not_avail_msg#:#Il fornitore è impostato come 'Non disponibile' +lti#:#lti_provider_not_set_msg#:#Configuration of LTI Provider / tool is not completely finished.###08 07 2025 new variable +lti#:#lti_providing_tab#:#ILIAS come fornitore LTI +lti#:#lti_released_objects#:#Versioni degli Oggetti +lti#:#lti_select_provider#:#Seleziona un fornitore lti#:#lti_session#:#Sessione LTI lti#:#lti_settings#:#Impostazioni LTI -lti#:#lti_settings_form#:#Object Settings###07 02 2020 new variable -lti#:#lti_success_accept_as_global#:#Successfully accepted as Global Provider for all Users###07 02 2020 new variable -lti#:#lti_success_accept_as_global_multi#:#Successfully accepted as Global Provider for all Users###07 02 2020 new variable -lti#:#lti_success_delete_provider#:#Successfully deleted###07 02 2020 new variable -lti#:#lti_success_reset_to_usr_def#:#Successfully reseted as User Defined Provider###07 02 2020 new variable -lti#:#lti_success_reset_to_usr_def_multi#:#Successfully reseted as User Defined Provider###07 02 2020 new variable +lti#:#lti_settings_form#:#Impostazioni oggetto +lti#:#lti_success_accept_as_global#:#Accettato con successo come fornitore globale per tutti gli utenti +lti#:#lti_success_accept_as_global_multi#:#Accettato con successo come fornitore globale per tutti gli utenti +lti#:#lti_success_delete_provider#:#Eliminato correttamente +lti#:#lti_success_reset_to_usr_def#:#Reimpostato con successo come fornitore definito dall'utente +lti#:#lti_success_reset_to_usr_def_multi#:#Reimpostato con successo come fornitore definito dall'utente lti#:#lti_tutor#:#Istruttore LTI -lti#:#lti_user_role_created#:#The recommended global role for LTI users has been created.###29 07 2022 new variable -lti#:#lti_user_role_info#:#The recommended global role for LTI users has not yet been created in this installation. This special global role contains only the permission 'visible' for repository and categories.###29 07 2022 new variable -lti#:#mastery_score#:#Mastery Score###07 02 2020 new variable -lti#:#mastery_score_info#:#The Learning Progress will be evaluated from the Provider Outcome Service and the mastery score threshold.###07 02 2020 new variable -lti#:#obj_tile_image_info#:#Use an Image in Square Format###07 02 2020 new variable -lti#:#online_info#:#This makes the object visible and usable for the users.###07 02 2020 new variable +lti#:#lti_user_role_created#:#Il ruolo globale raccomandato per gli utenti LTI è stato creato. +lti#:#lti_user_role_info#:#Il ruolo globale raccomandato per gli utenti LTI non è ancora stato creato in questa installazione. Questo ruolo globale speciale contiene solo il permesso 'visibile' per il repository e per le categorie. +lti#:#mastery_score#:#Punteggio di padronanza +lti#:#mastery_score_info#:#Il progresso dell'apprendimento sarà valutato in base al servizio di risultato del fornitore e alla soglia del punteggio di padronanza. +lti#:#obj_tile_image_info#:#Utilizzare un'immagine quadrata +lti#:#online_info#:#Questo rende l'oggetto visibile e utilizzabile per gli utenti. lti#:#prefix#:#Prefisso -lti#:#provider_info#:#Used Provider###07 02 2020 new variable -lti#:#settings_subtab#:#Settings###07 02 2020 new variable -lti#:#show_statements#:#Display Learning Experiences###07 02 2020 new variable -lti#:#show_statements_info#:#The Learning Experiences of other users could be displayed if the right 'View learning experiences of other users' is set.###07 02 2020 new variable -lti#:#subtab_certificate#:#Certificate###07 02 2020 new variable -lti#:#subtab_object_settings#:#Object Settings###07 02 2020 new variable -lti#:#subtab_provider_settings#:#LTI Provider Settings###07 02 2020 new variable -lti#:#tab_content#:#Content###07 02 2020 new variable -lti#:#tab_info#:#Info###07 02 2020 new variable -lti#:#tab_scoring#:#Ranking###07 02 2020 new variable -lti#:#tab_settings#:#Settings###07 02 2020 new variable -lti#:#tab_statements#:#Learning Experiences###07 02 2020 new variable -lti#:#tbl_grade_activity_progress#:#Activity Progress###26 08 2024 new variable -lti#:#tbl_grade_actor#:#User###26 08 2024 new variable -lti#:#tbl_grade_date#:#Date###26 08 2024 new variable -lti#:#tbl_grade_grading_progress#:#Grading Progress###26 08 2024 new variable -lti#:#tbl_grade_period#:#Period###26 08 2024 new variable -lti#:#tbl_grade_score#:#Score###26 08 2024 new variable -lti#:#tbl_grade_stored#:#Transmitted to ILIAS###26 08 2024 new variable -lti#:#tbl_lti_prov_all_categories#:#All Categories###07 02 2020 new variable -lti#:#tbl_lti_prov_availability#:#Availability###07 02 2020 new variable -lti#:#tbl_lti_prov_category#:#Category###07 02 2020 new variable -lti#:#tbl_lti_prov_description#:#Description###07 02 2020 new variable -lti#:#tbl_lti_prov_icon#:#Icon###07 02 2020 new variable -lti#:#tbl_lti_prov_internal#:#Internal Provider###07 02 2020 new variable -lti#:#tbl_lti_prov_keyword#:#Keyword###07 02 2020 new variable -lti#:#tbl_lti_prov_keywords#:#Keywords###07 02 2020 new variable -lti#:#tbl_lti_prov_outcome#:#Outcome Service###07 02 2020 new variable -lti#:#tbl_lti_prov_own_provider#:#Own Provider###07 02 2020 new variable -lti#:#tbl_lti_prov_provider_creator#:#Creator###07 02 2020 new variable -lti#:#tbl_lti_prov_title#:#Title of Provider###07 02 2020 new variable -lti#:#tbl_lti_prov_usages#:#Usages###07 02 2020 new variable -lti#:#tbl_lti_prov_usages_trashed#:#Trashed Usages###07 02 2020 new variable -lti#:#tbl_lti_prov_usages_untrashed#:#Repository Usages###07 02 2020 new variable -lti#:#tbl_lti_prov_used_by#:#Provider Used by Objects in Tree###07 02 2020 new variable -lti#:#tbl_lti_prov_with_key#:#Predefined with Key / Secret###07 02 2020 new variable -lti#:#tbl_provider_header#:#LTI Provider###07 02 2020 new variable -lti#:#tbl_provider_usage_header#:#LTI Provider###07 02 2020 new variable -lti#:#tbl_provider_usage_header_info#:#Before deleting providers, trashed usages must also be deleted.###07 02 2020 new variable -lti#:#title_info#:#Give the object a title.###07 02 2020 new variable -lti#:#usage_subtab#:#Usage###07 02 2020 new variable -lti#:#use_xapi#:#Use xAPI-Support###07 02 2020 new variable -lti#:#use_xapi_info#:#This LTI Provider supports xAPI-Statements.###07 02 2020 new variable +lti#:#provider_info#:#Fornitore utilizzato +lti#:#settings_subtab#:#Impostazioni +lti#:#show_statements#:#Mostra esperienze di apprendimento +lti#:#show_statements_info#:#Le esperienze di apprendimento di altri utenti potrebbero essere visualizzate se è impostata correttamente "Visualizza esperienze di apprendimento di altri utenti". +lti#:#subtab_certificate#:#Certificato +lti#:#subtab_object_settings#:#Impostazioni oggetto +lti#:#subtab_provider_settings#:#Impostazioni fornitore LTI +lti#:#tab_content#:#Contenuto +lti#:#tab_info#:#Info +lti#:#tab_scoring#:#Classifica +lti#:#tab_settings#:#Impostazioni +lti#:#tab_statements#:#Esperienze di apprendimento +lti#:#tbl_grade_activity_progress#:#Activity Progress###30 04 2024 new variable +lti#:#tbl_grade_actor#:#User###31 03 2023 new variable +lti#:#tbl_grade_date#:#Date###31 03 2023 new variable +lti#:#tbl_grade_grading_progress#:#Grading Progress###30 04 2024 new variable +lti#:#tbl_grade_period#:#Period###31 03 2023 new variable +lti#:#tbl_grade_score#:#Score###31 03 2023 new variable +lti#:#tbl_grade_stored#:#Transmitted to ILIAS###30 04 2024 new variable +lti#:#tbl_lti_prov_all_categories#:#Tutte le categorie +lti#:#tbl_lti_prov_availability#:#Disponibilità +lti#:#tbl_lti_prov_category#:#Categoria +lti#:#tbl_lti_prov_description#:#Descrizione +lti#:#tbl_lti_prov_icon#:#Icona +lti#:#tbl_lti_prov_internal#:#Fornitore interno +lti#:#tbl_lti_prov_keyword#:#Parola chiave +lti#:#tbl_lti_prov_keywords#:#Parole chiave +lti#:#tbl_lti_prov_outcome#:#Servizio degli esiti +lti#:#tbl_lti_prov_own_provider#:#Fornitore personale +lti#:#tbl_lti_prov_provider_creator#:#Creatore +lti#:#tbl_lti_prov_title#:#Titolo del fornitore +lti#:#tbl_lti_prov_usages#:#Uso +lti#:#tbl_lti_prov_usages_trashed#:#Nel cestino +lti#:#tbl_lti_prov_usages_untrashed#:#Non nel cestino +lti#:#tbl_lti_prov_used_by#:#Fornitore utilizzato per gli oggetti nell'albero +lti#:#tbl_lti_prov_with_key#:#Predefinito con Chiave / Segreto +lti#:#tbl_provider_header#:#Fornitore LTI +lti#:#tbl_provider_usage_header#:#Fornitore LTI +lti#:#tbl_provider_usage_header_info#:#Prima di eliminare i fornitori, è necessario eliminare anche gli oggetti spostati nel cestino. +lti#:#title_info#:#Dai un titolo all'oggetto. +lti#:#usage_subtab#:#Utilizzi +lti#:#use_xapi#:#Utilizza il supporto alle xAPI +lti#:#use_xapi_info#:#Questo fornitore LTI supporta gli statements xAPI. lti#:#user_lng#:#Lingua utente -lti#:#user_provider_subtab#:#Providers Defined by Users###07 02 2020 new variable -ltiv#:#ltiv_create#:#Create Certificate for LTI Consumer Object###07 02 2020 new variable -ltiv#:#ltiv_create_info#:#Select a completed LTI consumer object to generate a certificate for it###07 02 2020 new variable +lti#:#user_provider_subtab#:#Fornitori definiti dagli utenti +ltiv#:#ltiv_create#:#Crea certificato per Oggetto consumatore LTI. +ltiv#:#ltiv_create_info#:#Seleziona un Oggetto consumatore LTI completato per generare un certificato. mail#:#back_to_folder#:#Torna alla cartella -mail#:#chat_users_have_been_invited#:#Gli utenti sono stati invitati. -mail#:#chat_users_without_login#:#I seguenti utenti non hanno un account di ILIAS e quindi non possono essere invitati alla Chat Room. -mail#:#chat_users_without_permission#:#I seguenti utenti non hanno accesso alla chat room +mail#:#chat_users_have_been_invited#:#I seguenti utenti sono stati invitati: +mail#:#chat_users_without_login#:#I seguenti utenti non hanno un account di ILIAS e quindi non possono essere invitati alla Chat Room: +mail#:#chat_users_without_permission#:#I seguenti utenti non hanno accesso alla chat room: mail#:#current_folder#:#Cartella attuale: %s -mail#:#deleteTemplate#:#Delete###29 07 2022 new variable -mail#:#edit_attachments#:#Edit Attachments###29 10 2025 new variable -mail#:#first_email_missing_info#:#Selection not possible because no email address has been entered +mail#:#deleteTemplate#:#Delete###31 03 2023 new variable +mail#:#edit_attachments#:#Edit Attachments###28 11 2025 new variable +mail#:#first_email_missing_info#:#Selezione impossibile perché non è stato inserito alcun indirizzo e-mail mail#:#forward#:#Inoltra mail#:#goto_invitation_chat#:#Apri la Chat Room mail#:#invite_to_chat#:#Invita alla chat @@ -11507,39 +11498,39 @@ mail#:#link_check_affected_links#:#Collegamenti interessati mail#:#link_check_introduction#:#I seguenti collegamenti web non sono validi: mail#:#link_check_perma_link#:#Collegamento permanente mail#:#link_check_reason#:#Ricevi questa mail perché è stata abilitata la notifica per i collegamenti non validi. -mail#:#mail_1#:#1 Mail###28 10 2024 new variable -mail#:#mail_absence_auto_responder_body#:#Message###26 08 2024 new variable -mail#:#mail_absence_auto_responder_body_hint#:#This is an automatically generated message. If you send further messages to this user during their absence, you will not receive another automatic reply until [NEXT_AUTO_RESPONDER_DATETIME].###26 08 2024 new variable -mail#:#mail_absence_auto_responder_body_info#:#This message will be sent automatically during your absence if users send you a Mail from within ILIAS. <br>Users will be notified of your absence every %1$s days if they send further messages.###26 08 2024 new variable -mail#:#mail_absence_auto_responder_body_info_single_day#:#This message will be sent automatically during your absence if users send you a Mail from within ILIAS. <br>Users will be notified again of your absence the next day if they send further messages.###26 08 2024 new variable -mail#:#mail_absence_auto_responder_subject#:#Subject###26 08 2024 new variable -mail#:#mail_absence_duration#:#Duration###26 08 2024 new variable -mail#:#mail_absence_status#:#Enable Autoresponder###26 08 2024 new variable -mail#:#mail_absence_status_info#:#Activate an automatic out-of-office message.###26 08 2024 new variable -mail#:#mail_absent_from#:#Absent from###26 08 2024 new variable -mail#:#mail_absent_until#:#Absent until###26 08 2024 new variable +mail#:#mail_1#:#1 Mail###28 11 2025 new variable +mail#:#mail_absence_auto_responder_body#:#Message###30 04 2024 new variable +mail#:#mail_absence_auto_responder_body_hint#:#This is an automatically generated message. If you send further messages to this user during their absence, you will not receive another automatic reply until [NEXT_AUTO_RESPONDER_DATETIME].###30 04 2024 new variable +mail#:#mail_absence_auto_responder_body_info#:#This message will be sent automatically during your absence if users send you a Mail from within ILIAS. <br>Users will be notified of your absence every %1$s days if they send further messages.###30 04 2024 new variable +mail#:#mail_absence_auto_responder_body_info_single_day#:#This message will be sent automatically during your absence if users send you a Mail from within ILIAS. <br>Users will be notified again of your absence the next day if they send further messages.###30 04 2024 new variable +mail#:#mail_absence_auto_responder_subject#:#Subject###30 04 2024 new variable +mail#:#mail_absence_duration#:#Duration###30 04 2024 new variable +mail#:#mail_absence_status#:#Enable Autoresponder###30 04 2024 new variable +mail#:#mail_absence_status_info#:#Activate an automatic out-of-office message.###30 04 2024 new variable +mail#:#mail_absent_from#:#Absent from###30 04 2024 new variable +mail#:#mail_absent_until#:#Absent until###30 04 2024 new variable mail#:#mail_account_mail#:#Account mail -mail#:#mail_add_folder#:#Add New Subfolder +mail#:#mail_add_folder#:#Aggiungi nuova sottocartella mail#:#mail_add_recipient#:#Per favore, specifica il destinatario mail#:#mail_add_subfolder#:#Aggiungi cartella -mail#:#mail_add_subject#:#Per favore, specifica l& -mail#:#mail_all_in_trash#:#All in Trash###28 10 2024 new variable -mail#:#mail_allow_external#:#External Emails -mail#:#mail_allow_external_info#:#If disabled, the delivery of external emails (via SMTP) is globally disabled. +mail#:#mail_add_subject#:#Per favore, inserisci un argomento +mail#:#mail_all_in_trash#:#All in Trash###28 11 2025 new variable +mail#:#mail_allow_external#:#Email esterne +mail#:#mail_allow_external_info#:#Se disabilitato, la consegna di e-mail esterne (tramite SMTP) è disabilitata a livello globale. mail#:#mail_assign_entry_to_mailing_list#:#Assegna un indirizzo della tua rubrica alla tua Mailing List -mail#:#mail_assign_to_mailing_list#:#Assign###26 08 2024 new variable +mail#:#mail_assign_to_mailing_list#:#Assign###30 04 2024 new variable mail#:#mail_attachment_file_not_exist#:#Almeno uno dei seguenti allegati non esiste: %1$s mail#:#mail_attachments#:#Allegati mail#:#mail_auto_generated_info#:#Questa mail ti è stata mandata in automatico dalla installazione %s, %s di ILIAS -mail#:#mail_auto_responder#:#Autoresponder###26 08 2024 new variable -mail#:#mail_auto_responder_idle_time#:#Resend###26 08 2024 new variable -mail#:#mail_auto_responder_idle_time_info#:#Specify here how many days should elapse before your out-of-office reply is resent to a mail correspondent who has sent you further mails.###26 08 2024 new variable -mail#:#mail_bcc#:#BCC###26 08 2024 new variable -mail#:#mail_bg_task_desc#:#Subject: %s###07 02 2020 new variable -mail#:#mail_bg_task_title#:#E-mail Delivery###07 02 2020 new variable -mail#:#mail_both_email#:#Both Email Addresses -mail#:#mail_cc#:#CC###26 08 2024 new variable -mail#:#mail_change_to_folder#:#Spostare nella cartella: +mail#:#mail_auto_responder#:#Autoresponder###30 04 2024 new variable +mail#:#mail_auto_responder_idle_time#:#Resend###30 04 2024 new variable +mail#:#mail_auto_responder_idle_time_info#:#Specify here how many days should elapse before your out-of-office reply is resent to a mail correspondent who has sent you further mails.###30 04 2024 new variable +mail#:#mail_bcc#:#BCC###16 03 2023 new variable +mail#:#mail_bg_task_desc#:#Soggetto: %s +mail#:#mail_bg_task_title#:#E-mail consegnata +mail#:#mail_both_email#:#Entrambi gli indirizzi e-mail +mail#:#mail_cc#:#CC###16 03 2023 new variable +mail#:#mail_change_to_folder#:#Spostare nella cartella: %s mail#:#mail_create_tpl#:#Crea modello di testo mail#:#mail_cronjob_notification_info#:#Puoi attivare qui una notifica periodica per nuove mail. mail#:#mail_crs_list_members_not_available#:#Non è possibile inserire in lista i seguenti utenti dei corsi selezionati. @@ -11547,166 +11538,166 @@ mail#:#mail_crs_list_members_not_available_for_at_least_one_crs#:#Gli utenti di mail#:#mail_crs_roles#:#Invia mail ai ruoli del corso mail#:#mail_deleted#:#Le eMail sono state cancellate mail#:#mail_deleted_entry#:#Le voci sono state cancellate -mail#:#mail_download_attachment#:#Download Attachment###28 10 2024 new variable -mail#:#mail_download_zip_no_attachments#:#Could not find any attachments. +mail#:#mail_download_attachment#:#Download Attachment###28 11 2025 new variable +mail#:#mail_download_zip_no_attachments#:#Impossibile trovare allegati. mail#:#mail_edit_tpl#:#Modifica modello di testo -mail#:#mail_email_sys_body#:#This is a test e-mail to test the delivery of system mails to the external mail account.###29 07 2022 new variable -mail#:#mail_email_sys_subject#:#Test E-Mail System Mail###29 07 2022 new variable -mail#:#mail_email_usr_body#:#This is a test e-mail to test the delivery of user mails to the external mail account.###29 07 2022 new variable -mail#:#mail_email_usr_subject#:#Test E-Mail User Mail###29 07 2022 new variable +mail#:#mail_email_sys_body#:#Questa è una e-mail di prova per testare la consegna delle mail di sistema all'account di posta esterno. +mail#:#mail_email_sys_subject#:#Prova del sistema di posta elettronica +mail#:#mail_email_usr_body#:#Questa è una mail di prova per testare la consegna delle mail degli utenti all'account di posta esterno. +mail#:#mail_email_usr_subject#:#Test E-Mail Posta Utente mail#:#mail_empty_trash#:#Svuota il cestino mail#:#mail_empty_trash_confirmation#:#Sei sicuro di voler spostare questa mail nel cestino? mail#:#mail_enable_crs_admin_notification#:#Notifica per gli amministratori del corso mail#:#mail_enable_crs_admin_notification_info#:#Nei nuovi corsi l’impostazione 'Notifica sui nuovi membri' verrà attivata per impostazione predefinita. Viene impostata nella scheda 'Membri' dei corsi. Gli amministratori del corso riceveranno una mail quando un membro parteciperà o abbandonerà il corso, o se il numero minimo dei partecipanti richiesti non è stato soddisfatto, affinché il corso avvenga. -mail#:#mail_enable_crs_member_notification#:#Course Notification -mail#:#mail_enable_crs_member_notification_info#:#If enabled, course participants will be notified automatically about membership changes. +mail#:#mail_enable_crs_member_notification#:#Notifica i membri del corso +mail#:#mail_enable_crs_member_notification_info#:#Se abilitato, i partecipanti al corso verranno avvisati automaticamente delle modifiche all'iscrizione. Questa impostazione si applica a tutti i corsi della piattaforma. mail#:#mail_enable_grp_admin_notification#:#Notifica per gli amministratori del gruppo mail#:#mail_enable_grp_admin_notification_info#:#Nei nuovi gruppi l’impostazione 'Notifica' verrà attivata per impostazione predefinita. Viene impostata nella scheda 'Membri' dei gruppi. Gli amministratori del corso riceveranno una mail quando un membro parteciperà o abbandonerà il gruppo, o se il numero minimo dei partecipanti richiesti non è stato soddisfatto, affinché il gruppo si formi. -mail#:#mail_enable_grp_member_notification#:#Group Notification -mail#:#mail_enable_grp_member_notification_info#:#If enabled, group participants will be notified automatically about membership changes. -mail#:#mail_enable_lso_admin_notification#:#Notify Learning Sequence Administrators###29 07 2022 new variable -mail#:#mail_enable_lso_admin_notification_info#:#In new Learning Sequences the setting 'Notification About New Members' will be activated by default. It is set in the 'Member'-tab of Learning Sequences. Administrators will receive an e-mail when a member joins the Learning Sequence or leaves it.###29 07 2022 new variable -mail#:#mail_enable_lso_member_notification#:#Notify Learning Sequence Members###29 07 2022 new variable -mail#:#mail_enable_lso_member_notification_info#:#ILIAS will automatically send an e-mail to every member if his or her membership status is changed. This setting applies to all Learning Sequences on the platform.###29 07 2022 new variable +mail#:#mail_enable_grp_member_notification#:#Notifica del gruppo +mail#:#mail_enable_grp_member_notification_info#:#Se abilitato, i partecipanti al gruppo verranno avvisati automaticamente delle modifiche all'iscrizione. Questa impostazione si applica a tutti i corsi della piattaforma. Questa impostazione si applica a tutti i corsi della piattaforma. +mail#:#mail_enable_lso_admin_notification#:#Notifica agli amministratori delle sequenze di apprendimento +mail#:#mail_enable_lso_admin_notification_info#:#Nelle nuove sequenze di apprendimento l'impostazione "Notifica sui nuovi membri" sarà attivata di default. E' impostata nella scheda 'Membro' delle sequenze di apprendimento. Gli amministratori riceveranno una e-mail quando un membro si unisce alla sequenza di apprendimento o la lascia. +mail#:#mail_enable_lso_member_notification#:#Notifica ai membri della sequenza di apprendimento +mail#:#mail_enable_lso_member_notification_info#:#ILIAS invierà automaticamente un'e-mail ad ogni membro se il suo stato di membro è cambiato. Questa impostazione si applica a tutte le sequenze di apprendimento della piattaforma. mail#:#mail_entry_of_contacts#:#Inserimento dei contatti -mail#:#mail_error_reading_attachment#:#Could not determine any attachment. -mail#:#mail_external_send_test_sys#:#Send Test Email (System Mail) -mail#:#mail_external_send_test_usr#:#Send Test Email (User Mail) -mail#:#mail_external_test_sent#:#An email was sent to the email address defined in your profile. +mail#:#mail_error_reading_attachment#:#Impossibile determinare alcun allegato. +mail#:#mail_external_send_test_sys#:#Invia e-mail di prova (posta di sistema) +mail#:#mail_external_send_test_usr#:#Invia e-mail di prova (posta utente) +mail#:#mail_external_test_sent#:#È stata inviata un'email all'indirizzo di posta elettronica definito nel profilo. mail#:#mail_file_name#:#Nome del file mail#:#mail_file_size#:#Dimensioni del file mail#:#mail_files_deleted#:#I file sono stati cancellati mail#:#mail_filter#:#Filtro mail#:#mail_filter_attach#:#Allegati -mail#:#mail_filter_body#:#Corpo -mail#:#mail_filter_display#:#Display###28 10 2024 new variable +mail#:#mail_filter_body#:#Testo +mail#:#mail_filter_display#:#Display###28 11 2025 new variable mail#:#mail_filter_field_placeholder#:#Filtra questi messaggi... -mail#:#mail_filter_period#:#Period -mail#:#mail_filter_recipients#:#Recipienti +mail#:#mail_filter_period#:#Periodo +mail#:#mail_filter_recipients#:#Destinatari mail#:#mail_filter_sender#:#Mittente -mail#:#mail_filter_show_read#:#Show Read###28 10 2024 new variable -mail#:#mail_filter_show_system_mails#:#Show System Notifications###28 10 2024 new variable -mail#:#mail_filter_show_unread#:#Show Unread###28 10 2024 new variable -mail#:#mail_filter_show_user_mails#:#Show User Mails###28 10 2024 new variable -mail#:#mail_filter_show_with_attachments#:#Show With Attachments###28 10 2024 new variable -mail#:#mail_filter_show_without_attachment#:#Show Without Attachment###28 10 2024 new variable +mail#:#mail_filter_show_read#:#Show Read###28 11 2025 new variable +mail#:#mail_filter_show_system_mails#:#Show System Notifications###28 11 2025 new variable +mail#:#mail_filter_show_unread#:#Show Unread###28 11 2025 new variable +mail#:#mail_filter_show_user_mails#:#Show User Mails###28 11 2025 new variable +mail#:#mail_filter_show_with_attachments#:#Show With Attachments###28 11 2025 new variable +mail#:#mail_filter_show_without_attachment#:#Show Without Attachment###28 11 2025 new variable mail#:#mail_filter_subject#:#Oggetto mail#:#mail_filter_txt#:#Filtra messaggi per -mail#:#mail_first_email#:#First Email Address -mail#:#mail_firstname_last_name_superior#:#Eine kommaseparierte Liste von Vor- und Nachname des/der jeweiligen Vorgesetzten.###07 02 2020 new variable -mail#:#mail_folder_created#:#Una nuova cartella & -mail#:#mail_folder_deleted#:#La cartella &egrave stata cancellata -mail#:#mail_folder_exists#:#Esiste gi& -mail#:#mail_folder_name_changed#:#La cartella & +mail#:#mail_first_email#:#Primo indirizzo email +mail#:#mail_firstname_last_name_superior#:#Una lista separata da virgole del nome e cognome del rispettivo supervisore (o dei rispettivi supervisori). +mail#:#mail_folder_created#:#È stata creata una nuova cartella +mail#:#mail_folder_deleted#:#La cartella è stata cancellata +mail#:#mail_folder_exists#:#Esiste già una cartella con questo nome +mail#:#mail_folder_name_changed#:#La cartella è stata rinominata mail#:#mail_following_rcp_not_valid#:#I seguenti destinatari non sono validi: -mail#:#mail_form_placeholders_label#:#Available Placeholders###26 08 2024 new variable -mail#:#mail_generic_rcp_error#:#Ha avuto luogo un errore durante la convalida dei recipienti: %1$s -mail#:#mail_global_reply_to_addr#:#Reply-To###29 07 2022 new variable -mail#:#mail_global_reply_to_addr_info#:#Please enter the desired 'Reply-To' address.###29 07 2022 new variable +mail#:#mail_form_placeholders_label#:#Available Placeholders###31 03 2023 new variable +mail#:#mail_generic_rcp_error#:#Ha avuto luogo un errore durante la convalida dei destinatari: %1$s +mail#:#mail_global_reply_to_addr#:#Rispondi a +mail#:#mail_global_reply_to_addr_info#:#Inserisci l'indirizzo a cui desideri ricevere la risposta mail#:#mail_grp_roles#:#Invia mail ai ruoli del gruppo -mail#:#mail_hint_add_placeholder_x#:#Add the placeholder '%s' to the message body.###26 08 2024 new variable -mail#:#mail_incoming#:#eMail in arrivo -mail#:#mail_incoming_both#:#locali ed esterne -mail#:#mail_incoming_local#:#solamente locali +mail#:#mail_hint_add_placeholder_x#:#Add the placeholder '%s' to the message body.###31 03 2023 new variable +mail#:#mail_incoming#:#E-Mail in arrivo +mail#:#mail_incoming_both#:#Interna a ILIAS ed inoltro alle mail principali +mail#:#mail_incoming_local#:#Solamente interna a ILIAS mail#:#mail_incoming_mail#:#Posta in arrivo -mail#:#mail_incoming_smtp#:#invia all& +mail#:#mail_incoming_smtp#:#Inoltra all'indirizzo e-mail mail#:#mail_insert_folder_name#:#Per favore, inserisci il nome della cartella mail#:#mail_insert_query#:#Per favore, inserisci la parola da cercare mail#:#mail_invite_users_to_chat#:#Invita l'utente alla chat -mail#:#mail_is_read#:#gelesen###29 07 2022 new variable -mail#:#mail_is_unread#:#ungelesen###29 07 2022 new variable +mail#:#mail_is_read#:#gelesen###29 06 2022 new variable +mail#:#mail_is_unread#:#ungelesen###29 06 2022 new variable mail#:#mail_list_members#:#Lista degli indirizzi email mail#:#mail_mailing_list#:#Elenco mail mail#:#mail_mailing_lists#:#Elenchi mail mail#:#mail_mailing_lists_all_contact_entries_assigned#:#Hai già assegnato tutti i tuoi contatti a questo elenco mail. mail#:#mail_mailing_lists_no_contact_entries#:#Non sono presenti voci nei contatti da aggiungere a un elenco. -mail#:#mail_main_folder#:#Main Folder###29 10 2025 new variable -mail#:#mail_manage_attachments#:#Manage Attachments###26 08 2024 new variable -mail#:#mail_manage_attachments_back_to_compose#:#Back to Compose###26 08 2024 new variable -mail#:#mail_manage_attachments_drop_files_msg#:#Drop file to upload###26 08 2024 new variable +mail#:#mail_main_folder#:#Main Folder###28 11 2025 new variable +mail#:#mail_manage_attachments#:#Manage Attachments###28 11 2025 new variable +mail#:#mail_manage_attachments_back_to_compose#:#Back to Compose###28 11 2025 new variable +mail#:#mail_manage_attachments_drop_files_msg#:#Drop file to upload###28 11 2025 new variable mail#:#mail_mark_read#:#Segna la eMail come letta mail#:#mail_mark_unread#:#Segna la eMail come non letta -mail#:#mail_max_size_attachments_total#:#Please enter the maximum file size allowed as attachment per mail. This setting is not related to other resource limits, e.g. upload_max_filesize etc. (since you can attach multiple files). +mail#:#mail_max_size_attachments_total#:#Inserisci la dimensione massima del file consentita come allegato per email. Questa impostazione non è correlata ad altri limiti di risorse, ad es. upload_max_filesize ecc. (poiché è possibile allegare più file). mail#:#mail_max_size_attachments_total_error#:#La grandezza dell’allegato consentito è: -mail#:#mail_maxsize_attachment_error#:#Il limite per l& +mail#:#mail_maxsize_attachment_error#:#Il limite di upload è: mail#:#mail_member_notification#:#Notifica dei partecipanti mail#:#mail_members_of_mailing_list#:#Membri della Mailing List mail#:#mail_members_search_continue#:#Continua -mail#:#mail_message_send#:#Il messaggio & +mail#:#mail_message_send#:#Messaggio inviato mail#:#mail_move_error#:#Errore nell'invio della eMail mail#:#mail_move_to#:#Sposta le eMail in -mail#:#mail_move_to_folder_btn_label#:#Move Mail###26 08 2024 new variable -mail#:#mail_move_to_folder_x#:#to "%s"###26 08 2024 new variable +mail#:#mail_move_to_folder_btn_label#:#Move Mail###30 04 2024 new variable +mail#:#mail_move_to_folder_x#:#to "%s"###30 04 2024 new variable mail#:#mail_moved#:#Le eMail sono state spostate mail#:#mail_moved_to_trash#:#Le eMail sono state spostate nel cestino -mail#:#mail_multiple_role_recipients_found#:#%1$s (trova diversi ruoli per il recipiente: %2$s) +mail#:#mail_multiple_role_recipients_found#:#%1$s (trova diversi ruoli per il destinatario: %2$s) mail#:#mail_my_courses#:#Miei corsi mail#:#mail_my_groups#:#Miei gruppi mail#:#mail_my_mailing_lists#:#Mia mailing list mail#:#mail_nacc_admin_mail#:#Indirizzo e-mail dell'amministratore mail#:#mail_nacc_if_timelimit#:#Questo testo è incluso solo se l'utente ha un periodo di accesso limitato. mail#:#mail_nacc_ilias_url#:#URL del sistema di ILIAS -mail#:#mail_nacc_installation_desc#:#Installation Description###26 08 2024 new variable -mail#:#mail_nacc_installation_name#:#Installation Name###26 08 2024 new variable +mail#:#mail_nacc_installation_desc#:#Installation Description###31 03 2023 new variable +mail#:#mail_nacc_installation_name#:#Installation Name###31 03 2023 new variable mail#:#mail_nacc_login#:#Account del login mail#:#mail_nacc_no_pw_block#:#Questo blocco di testo verrà creato solamente alla creazione di un nuovo utente senza password. mail#:#mail_nacc_pw_block#:#Questo blocco di testo verrà creato solamente quando il nuovo utente di ILIAS avrà incluso una password. -mail#:#mail_nacc_salutation#:#Intestazione. +mail#:#mail_nacc_salutation#:#Intestazione mail#:#mail_nacc_target#:#URL dell'oggetto chiave, p.e. un link ad un corso esterno da ILIAS mail#:#mail_nacc_target_block#:#Questo blocco di testo verrà inserito solamente quando sarà stabilito un oggetto chiave. -mail#:#mail_nacc_target_title#:#Titolo dell'oggetto chiave, p.e. del corso -mail#:#mail_nacc_target_type#:#Tipo di oggetto chiave, p.e. "Corso" per il tipo di corso +mail#:#mail_nacc_target_title#:#Titolo dell'oggetto chiave, p.e. titolo del corso +mail#:#mail_nacc_target_type#:#Tipo di oggetto chiave, p.e. "Corso" per un oggetto Corso mail#:#mail_nacc_timelimit#:#Periodo di accesso dell’utente mail#:#mail_nacc_title#:#Titolo -mail#:#mail_nacc_use_placeholder#:#I seguenti segnaposto possono essere utilizzati -mail#:#mail_nacc_user_fullname#:#User Full Name###26 08 2024 new variable -mail#:#mail_nacc_user_login#:#User Login###26 08 2024 new variable -mail#:#mail_new#:#New Mail###29 10 2025 new variable +mail#:#mail_nacc_use_placeholder#:#I seguenti segnaposto possono essere utilizzati (solo nel contenuto del messaggio) +mail#:#mail_nacc_user_fullname#:#User Full Name###28 11 2025 new variable +mail#:#mail_nacc_user_login#:#User Login###28 11 2025 new variable +mail#:#mail_new#:#New Mail###28 11 2025 new variable mail#:#mail_new_template#:#Nuovo modello di testo -mail#:#mail_no_mail_items#:#No unread mails.###26 08 2024 new variable -mail#:#mail_no_permissions_write_smtp#:#Non hai permessi per scrivere eMail all& -mail#:#mail_no_subject#:#No subject available###29 07 2022 new variable +mail#:#mail_no_mail_items#:#No unread mails.###28 11 2025 new variable +mail#:#mail_no_permissions_write_smtp#:#Non sei autorizzato a scrivere e-mail verso l'esterno +mail#:#mail_no_subject#:#No Subject available###27 04 2022 new variable mail#:#mail_no_valid_mailing_list#:#Mailing List errata mail#:#mail_notification_membership_section#:#Appartenenza -mail#:#mail_notification_subject#:#nuova mail nella tua inbox +mail#:#mail_notification_subject#:#Nuova mail nella tua casella mail#:#mail_notify_orphaned#:#Mail di notifica -mail#:#mail_notify_orphaned_info#:#If you enter a value here is larger than or equal to 1, ILIAS will send an email to the user before an internal mail is deleted. Please make sure that an external e-mail reception is possible. -mail#:#mail_operation_on_invalid_folder#:#It was not possible to carry out the requested operation. The folder given in the server request is invalid. Please contact an administrator.###26 08 2024 new variable -mail#:#mail_options#:#Mail Options###29 10 2025 new variable +mail#:#mail_notify_orphaned_info#:#Se inserisci un valore qui maggiore o uguale a 1, ILIAS invierà un'email all'utente prima che venga eliminata una e-mail interna. Assicurati che sia possibile ricevere un'e-mail esterna. +mail#:#mail_operation_on_invalid_folder#:#The operation cannot be executed, the folder given in the server request is invalid. Please contact an administrator.###19 03 2024 new variable +mail#:#mail_options#:#Mail Options###28 11 2025 new variable mail#:#mail_options_saved#:#Opzioni salvate mail#:#mail_orphaned_mails#:#Eliminare mail vecchie o orfane mail#:#mail_orphaned_mails_desc#:#Eliminare mail vecchie o orfane -mail#:#mail_recipient_not_found#:#%1$s (non è possibile trovare un recipiente valido) +mail#:#mail_recipient_not_found#:#%1$s (non è possibile trovare un destinatario valido) mail#:#mail_rename_folder#:#Rinomina cartella -mail#:#mail_roles#:#to users with the following local roles###29 07 2022 new variable +mail#:#mail_roles#:#Users with the following local roles###31 03 2023 new variable mail#:#mail_s#:#eMail mail#:#mail_salutation_anonymous#:#Salve mail#:#mail_salutation_f#:#Salve -mail#:#mail_salutation_female#:#Intestazione, femminile -mail#:#mail_salutation_general#:#Intestazione, generale -mail#:#mail_salutation_m#:#salve -mail#:#mail_salutation_male#:#Intestazione, maschile +mail#:#mail_salutation_female#:#Output per il segnaposto [MAIL_SALUTATION], se il saluto è 'Ms.' +mail#:#mail_salutation_general#:#Output per il segnaposto [MAIL_SALUTATION], se nessun saluto è desiderato o specificato +mail#:#mail_salutation_m#:#Salve +mail#:#mail_salutation_male#:#Output per il segnaposto [MAIL_SALUTATION], se il saluto è 'Mr.' mail#:#mail_salutation_n#:#Salve -mail#:#mail_saved#:#La eMail & -mail#:#mail_second_email#:#Second Email Address -mail#:#mail_sel_label#:#Choose the Recipients###29 07 2022 new variable +mail#:#mail_saved#:#Il messaggio è stato salvato +mail#:#mail_second_email#:#Secondo indirizzo email +mail#:#mail_sel_label#:#Scegli i destinatari mail#:#mail_sel_users#:#Invia mail agli utenti selezionati mail#:#mail_select_attachment#:#Seleziona per favore un allegato da scaricare. -mail#:#mail_select_crs#:#Please select at least one course.###26 08 2024 new variable -mail#:#mail_select_grp#:#Please select at least one group.###26 08 2024 new variable +mail#:#mail_select_crs#:#Please select at least one course.###30 04 2024 new variable +mail#:#mail_select_grp#:#Please select at least one group.###30 04 2024 new variable mail#:#mail_select_one_entry#:#Devi selezionare almeno una voce mail#:#mail_select_one_file#:#Devi selezionare almeno un file -mail#:#mail_send_html#:#HTML Frame for External Emails +mail#:#mail_send_html#:#HTML Frame per e-mail esterne mail#:#mail_send_html_info#:#Se abilitata, il corpo delle e-mail esterne verrà incorporato in un fotogramma HTML. Il modello corrispondente può essere personalizzato creando una copia di './Services/Mail/templates/default/tpl.html_mail_template.html' at './Customizing/global/skin/[SKIN]/Services/Mail/tpl.html_mail_template.html' . -mail#:#mail_sent_datetime#:#Date###26 08 2024 new variable +mail#:#mail_sent_datetime#:#Date###28 11 2025 new variable mail#:#mail_serial_letter_placeholders#:#Segnaposti di lettera seriale -mail#:#mail_settings_external_frm_head#:#External Emails +mail#:#mail_settings_external_frm_head#:#Email esterne mail#:#mail_settings_external_tab#:#Esterno mail#:#mail_settings_general_tab#:#Generale -mail#:#mail_settings_incoming_type_see_also#:#How incoming e-mails for users are handled can also be set <a href="%s">here</a>.###29 10 2025 new variable -mail#:#mail_settings_system_frm_head#:#System Emails -mail#:#mail_settings_user_frm_head#:#User Emails -mail#:#mail_smtp_encryption#:#Crittografia +mail#:#mail_settings_incoming_type_see_also#:#Puoi trovare un'ulteriore possibilità di modificare il tipo di e-mail in arrivo per gli utenti <a href="%s"> qui </a> +mail#:#mail_settings_system_frm_head#:#Email di sistema +mail#:#mail_settings_user_frm_head#:#Email dell'utente +mail#:#mail_smtp_encryption#:#Cifratura mail#:#mail_smtp_encryption_ssl#:#SSL mail#:#mail_smtp_encryption_tls#:#TLS mail#:#mail_smtp_host#:#Host @@ -11716,132 +11707,132 @@ mail#:#mail_smtp_password_req#:#Se è stato definito un utente a scopo di autent mail#:#mail_smtp_port#:#Porta mail#:#mail_smtp_port_info#:#Immettere un valore numerico per la porta del server di posta (ad es. 25). mail#:#mail_smtp_status#:#Invia tramite SMTP -mail#:#mail_smtp_status_info#:#If enabled, ILIAS will dispatch external emails to an SMTP server instead of using the the internal functionality provided by the PHP runtime (mail() function, sendmail). +mail#:#mail_smtp_status_info#:#Se abilitato, ILIAS invierà e-mail esterne a un server SMTP invece di utilizzare la funzionalità interna fornita dalla funzione di runtime PHP (mail (), sendmail). mail#:#mail_smtp_user#:#Utente -mail#:#mail_subject_prefix#:#soggetto di posta -mail#:#mail_subject_prefix_info#:#Inserisci un testo, che verrà anteposto alla riga dell'oggetto di auto generazione di e-mail in uscita -mail#:#mail_subject_too_long#:#The subject is too long.###26 08 2024 new variable -mail#:#mail_success_removed_user#:#User(s) successfully removed from mailing list.###28 10 2024 new variable +mail#:#mail_subject_prefix#:#Oggetto +mail#:#mail_subject_prefix_info#:#Inserisci un testo, che verrà anteposto alla riga dell'oggetto di auto generazione di e-mail in uscita. Si raccomanda l'uso di un prefisso per supportare il filtraggio dei messaggi da parte degli utenti. +mail#:#mail_subject_too_long#:#The subject is too long.###13 09 2023 new variable +mail#:#mail_success_removed_user#:#User(s) successfully removed from mailing list.###08 10 2024 new variable mail#:#mail_sure_delete_entry#:#Sei sicuro di voler eliminare le voci selezionate? mail#:#mail_sure_delete_file#:#Sei sicuro di voler eliminare il file selezionato? mail#:#mail_sure_delete_folder#:#Sei sicuro di voler eliminare la cartella selezionata? -mail#:#mail_sure_delete_p#:#Are you sure you want to delete the following mails?###29 10 2025 new variable -mail#:#mail_sure_delete_s#:#Are you sure you want to delete the following mail?###29 10 2025 new variable -mail#:#mail_sure_remove_user#:#Are you sure you want to remove the following user(s) from the members list?###28 10 2024 new variable +mail#:#mail_sure_delete_p#:#Are you sure you want to delete the following mails?###28 11 2025 new variable +mail#:#mail_sure_delete_s#:#Are you sure you want to delete the following mail?###28 11 2025 new variable +mail#:#mail_sure_remove_user#:#Are you sure you want to remove the following user(s) from the members list?###08 10 2024 new variable mail#:#mail_system_sys_env_from_addr#:#Mittente tecnico -mail#:#mail_system_sys_env_from_addr_info#:#If you leave this field empty, the sender email address will be used if SMTP transfer is enabled. Otherwise it is the server administrator's responsibility to configure this value. -mail#:#mail_system_sys_from_addr#:#Sender Email (From) -mail#:#mail_system_sys_from_addr_info#:#Please enter the e-mail address to be put in the 'FROM' header. The 'FROM' header is used to display the sender in the recipient e-mail client.<br /><br />Examples: <span style="font-style: italic">info@institution.de</span> or <span style="font-style: italic">no-reply@institution.de</span> +mail#:#mail_system_sys_env_from_addr_info#:#Se si lascia vuoto questo campo, verrà utilizzato l'indirizzo e-mail del mittente se il trasferimento SMTP è abilitato. In caso contrario, è responsabilità dell'amministratore del server configurare questo valore. +mail#:#mail_system_sys_from_addr#:#Email mittente (da) +mail#:#mail_system_sys_from_addr_info#:#Inserisci l'indirizzo e-mail da mettere nell'intestazione 'FROM'. L'intestazione 'FROM' è usata per visualizzare il mittente nel client di posta elettronica del destinatario.<br /><br />Esempi: <span style="font-style: italic">info@institution.de</span> o <span style="font-style: italic">no-reply@institution.de</span> mail#:#mail_system_sys_from_name#:#Nome completo mittente (Da) -mail#:#mail_system_sys_general_signature#:#Signature###26 08 2024 new variable +mail#:#mail_system_sys_general_signature#:#Signature###28 11 2025 new variable mail#:#mail_system_sys_reply_to_addr#:#Rispondi a mail#:#mail_system_usr_env_from_addr#:#Mittente tecnico -mail#:#mail_system_usr_env_from_addr_info#:#If you leave this field empty, the sender email address will be used if SMTP transfer is enabled. Otherwise it is the server administrator's responsibility to configure this value. -mail#:#mail_system_usr_from_addr#:#Sender Email (From) -mail#:#mail_system_usr_from_addr_info#:#Please enter the e-mail address to be put in the 'FROM' header. The 'FROM' header is used to display the sender in the recipient e-mail client. The e-mail address of the user sending an e-mail via ILIAS will be automatically put in the 'Reply-To' header.<br /><br />Examples: <span style="font-style: italic">info@institution.de</span> or <span style="font-style: italic">no-reply@institution.de</span> +mail#:#mail_system_usr_env_from_addr_info#:#Se si lascia vuoto questo campo, verrà utilizzato l'indirizzo e-mail del mittente se il trasferimento SMTP è abilitato. In caso contrario, è responsabilità dell'amministratore del server configurare questo valore. +mail#:#mail_system_usr_from_addr#:#Mittente e-mail (Da) +mail#:#mail_system_usr_from_addr_info#:#Inserisci l'indirizzo e-mail da inserire nell'intestazione 'FROM'. L'intestazione 'FROM' è utilizzata per visualizzare il mittente nel client di posta elettronica del destinatario. L'indirizzo e-mail dell'utente che invia un'e-mail tramite ILIAS sarà automaticamente messo nell'intestazione 'Reply-To'.<br /><br />Esempi: <span style="font-style: italic">info@institution.de</span> o <span style="font-style: italic">no-reply@institution.de</span> mail#:#mail_system_usr_from_name#:#Nome completo mittente (Da) -mail#:#mail_system_usr_from_name_info#:#You can use the placeholders [FULLNAME], [FIRSTNAME] and [LASTNAME]. These will then be replaced by the respective date of the email initiator. -mail#:#mail_system_usr_general_signature#:#User Signature###26 08 2024 new variable -mail#:#mail_tbl_head_attachments#:#Attachment +mail#:#mail_system_usr_from_name_info#:#Puoi utilizzare i segnaposto [FULLNAME], [FIRSTNAME] e [LASTNAME]. Questi verranno quindi sostituiti dalla rispettiva data dell'iniziatore e-mail. +mail#:#mail_system_usr_general_signature#:#User Signature###28 11 2025 new variable +mail#:#mail_tbl_head_attachments#:#Allegato mail#:#mail_template_client#:#Modello di testo mail#:#mail_template_client_info#:#Scegli uno dei modelli di testo disponibili e utilizza i suoi segnaposti. Se si sceglie un modello di testo, il corpo e l'oggetto di questo modulo (se definito nel modello di testo) verranno sostituiti. mail#:#mail_template_context#:#Contesto -mail#:#mail_template_default#:# (Default) -mail#:#mail_template_invalid_tpl_syntax#:#An invalid syntax has been detected. Please ensure a valid input, especially regarding the placeholder syntax.###26 08 2024 new variable +mail#:#mail_template_default#:# (Predefinito) +mail#:#mail_template_invalid_tpl_syntax#:#An invalid syntax has been detected. Please ensure a valid input, especially regarding the placeholder syntax.###30 04 2024 new variable mail#:#mail_template_missing_id#:#Impossibile eseguire l'azione perché manca l'ID del modello di testo. mail#:#mail_template_no_context_available#:#Non esiste alcun contesto fornito da alcun servizio o modulo ILIAS. Non è quindi possibile creare o modificare un modello di testo. mail#:#mail_template_no_valid_context#:#Il contesto fornito non è valido. mail#:#mail_template_orphaned_context#:#Contesto orfano -mail#:#mail_template_set_as_default#:#Set as Default +mail#:#mail_template_set_as_default#:#Imposta come predefinito mail#:#mail_template_title#:#Nome -mail#:#mail_template_unset_as_default#:#Unset as Default +mail#:#mail_template_unset_as_default#:#Disinserito come predefinito mail#:#mail_templates#:#Modelli di testo -mail#:#mail_threshold#:#Limite +mail#:#mail_threshold#:#Soglia mail#:#mail_threshold_info#:#I messaggi interni che sono più datati del valore di soglia definito qui, verranno eliminati (compresi gli allegati eventualmente esistenti). <br> Si prega di ricordare che alla prima esecuzione di questo cron job, molti messaggi verranno eliminati e per questo non è possibile inviare una mail come avvertimento. mail#:#mail_to#:#A mail#:#mail_tpl_deleted_p#:#I modelli di testo sono stati eliminati con successo. mail#:#mail_tpl_deleted_s#:#Il modello di testo è stato eliminato con successo. -mail#:#mail_tpl_sure_delete_entries#:#Are you sure you want to delete the following entries? -mail#:#mail_tpl_sure_delete_entry#:#Are you sure you want to delete the text template? -mail#:#mail_use_global_reply_to_addr#:#Use Global Reply-To###29 07 2022 new variable -mail#:#mail_use_global_reply_to_addr_info#:#If enabled, the email address entered below is used as value for the 'Reply-To' header. The sender's email address will be not disclosed to recipients. A direct reply is not possible anymore.###29 07 2022 new variable -mail#:#nc_mail_noti_item_title#:#Inbox###07 02 2020 new variable -mail#:#nc_mail_prop_time#:#Time###07 02 2020 new variable -mail#:#nc_mail_unread_messages#:#You have %s in your inbox.###07 02 2020 new variable -mail#:#nc_mail_unread_messages_number_p#:#%s Unread Mails###07 02 2020 new variable -mail#:#nc_mail_unread_messages_number_s#:#1 Unread Mail###07 02 2020 new variable -mail#:#only_inbox_trash#:#Considera solo la posta in arrivo/cestino -mail#:#only_inbox_trash_info#:#If enabled, emails are only deleted if they are located in the Inbox and Trash of the respective user. Otherwise, all messages are deleted regardless of the folder. -mail#:#orphaned_mail_body#:#There are old or orphaned mails in the following mailboxes. Please note, that these mails will be deleted automatically soon. +mail#:#mail_tpl_sure_delete_entries#:#Sei sicuro di voler eliminare le seguenti voci? +mail#:#mail_tpl_sure_delete_entry#:#Sei sicuro di voler eliminare il modello di testo? +mail#:#mail_use_global_reply_to_addr#:#Utilizza 'Rispondi a' globale +mail#:#mail_use_global_reply_to_addr_info#:#Se abilitato, l'indirizzo mail inserito è utilizzato come valore dell'intestazione 'Rispondi a'. L'indirizzo email del mittente non sarà divulgato ai destinatari. Una risposta diretta non è più possibile. +mail#:#nc_mail_noti_item_title#:#Posta in arrivo +mail#:#nc_mail_prop_time#:#Tempo +mail#:#nc_mail_unread_messages#:#Hai %s mail nella tua casella. +mail#:#nc_mail_unread_messages_number_p#:#%s messaggi non letti +mail#:#nc_mail_unread_messages_number_s#:#1 mail non letta +mail#:#only_inbox_trash#:#Considera solo la posta in arrivo e il cestino +mail#:#only_inbox_trash_info#:#Se abilitato, le e-mail vengono eliminate solo se si trovano nella Posta in arrivo e nel Cestino del rispettivo utente. Altrimenti, tutti i messaggi vengono eliminati indipendentemente dalla cartella. +mail#:#orphaned_mail_body#:#Ci sono mail vecchie o orfane nelle seguenti caselle di posta. Si noti che queste e-mail verranno eliminate automaticamente a breve. mail#:#orphaned_mail_subject#:#Notifica sulle mail orfane mail#:#placeholders_advise#:#I segnaposto vengono mantenuti solo per gli indirizzi inseriti nel campo "A".%sAgli indirizzi nei campi CC e BCC il messaggio verrà inviato senza segnaposto/i. mail#:#search_content#:#Cerca risultato mail#:#search_recipients#:#Cerca destinatario -mail#:#second_email_missing_info#:#Selection not possible because no second email address has been entered -mail#:#select_mail_with_subject_x#:#Select mail with subject „%s“###26 08 2024 new variable +mail#:#second_email_missing_info#:#Selezione impossibile perché non è stato inserito un secondo indirizzo e-mail +mail#:#select_mail_with_subject_x#:#Select mail with subject „%s“###16 03 2023 new variable mail#:#send_mail_admins#:#Tutti gli amministratori mail#:#send_mail_members#:#Tutti i membri mail#:#send_mail_to#:#Mail a mail#:#send_mail_tutors#:#Tutti i tutor -mail#:#show_mail_settings#:#Show Mail Settings -mail#:#show_mail_settings_info#:#If enabled, the user's `Mail Settings` are accessible via the `Personal Settings` or `Mail` section. +mail#:#show_mail_settings#:#Mostra impostazioni di posta +mail#:#show_mail_settings_info#:#Se abilitato, le "Impostazioni posta" dell'utente sono accessibili tramite la sezione "Impostazioni personali" o "Posta". mail#:#system_notification_installation_changed_by#:#Modificato da -mail#:#usrFieldChange_second_mail_visible_in_personal_data#:#You have changed the attribute "%s" of the field "%s".<br>This leads to all accounts settings being reset to "receive on primary address" for external delivery,<br>not only for all new accounts but also dismissing the currently active settings made by users.###29 07 2022 new variable +mail#:#usrFieldChange_second_mail_visible_in_personal_data#:#You have changed the attribute "%s" of the field "%s".<br>This leads to all accounts settings being reset to "receive on primary address" for external delivery,<br>not only for all new accounts but also dismissing the currently active settings made by users.###31 03 2023 new variable maps#:#configure_geolocation#:#Si prega di terminare la configurazione della geolocalizzazione nel menu di amministrazione "Software di parti terze" per abilitare la ricerca degli indirizzi. maps#:#maps_custom_geolocation_server_info#:#URL server per gestire i dati di geolocalizzazione attraverso Nominatim. La voce deve contenere il segnaposto [QUERY] per definire una posizione per le informazioni sulla richiesta. Esempio nominatim.esempio.com/cerca/[QUERY]?formato=json. maps#:#maps_custom_tile_server_info#:#URL server per fornire dati nel riquadro. Gli ingressi multipli devono essere separati da spazi. I valori predefiniti sono "%s". -maps#:#maps_enable_maps#:#Consenti Maps +maps#:#maps_enable_maps#:#Abilita Maps maps#:#maps_enable_maps_info#:#Attiva Maps nei profili utente, gruppi e corsi. maps#:#maps_geolocation_server#:#Server per la geolocalizzazione inversa maps#:#maps_google_maps#:#Google Maps -maps#:#maps_https_for_reverse_lookup#:#Https for Reverse Lookup###29 07 2022 new variable +maps#:#maps_https_for_reverse_lookup#:#HTTPS per ricerca inversa maps#:#maps_latitude#:#Latitudine maps#:#maps_longitude#:#Longitudine maps#:#maps_lookup_address#:#Indirizzo di ricerca -maps#:#maps_map_type#:#Typ +maps#:#maps_map_type#:#Tipo maps#:#maps_open_layers_maps#:#Apri livelli Maps maps#:#maps_settings#:#Impostazioni Maps maps#:#maps_std_location#:#Posizione predefinita maps#:#maps_std_location_desc#:#Clicca sulla mappa per impostare la posizione. -maps#:#maps_tile_server#:#Server per titoli +maps#:#maps_tile_server#:#Server per blocchi maps#:#maps_zoom_level#:#Livello di zoom mcst#:#mcst_add_new_item#:#Aggiungi nuovo elemento Mediacast -mcst#:#mcst_audio_files#:#Audio Files###29 07 2022 new variable +mcst#:#mcst_audio_files#:#Audio Files###31 03 2023 new variable mcst#:#mcst_audioportable_settings_info#:#Lista di suffissi di files, separati da virgola mcst#:#mcst_audioportable_settings_title#:#Estensioni di file in formato audio mcst#:#mcst_audioportable_title#:#File audio addizionale per dispositivi portatili -mcst#:#mcst_automatic_detection#:#rilevamento automatico -mcst#:#mcst_autoplay#:#Autoplay###29 07 2022 new variable -mcst#:#mcst_autoplay_active#:#Autoplay (Default on)###29 07 2022 new variable -mcst#:#mcst_autoplay_inactive#:#Autoplay (Default off)###29 07 2022 new variable -mcst#:#mcst_autoplay_info#:#Starts automatically the next video when reaching the end of the previous one. This feature is not supported by youtube videos.###26 08 2024 new variable +mcst#:#mcst_automatic_detection#:#Rilevamento automatico +mcst#:#mcst_autoplay#:#Autoplay###31 03 2023 new variable +mcst#:#mcst_autoplay_active#:#Autoplay (Default on)###31 03 2023 new variable +mcst#:#mcst_autoplay_inactive#:#Autoplay (Default off)###31 03 2023 new variable +mcst#:#mcst_autoplay_info#:#Starts automatically the next video when reaching the end of the previous one. This feature is not supported by youtube videos.###30 04 2024 new variable mcst#:#mcst_clear_purpose_title#:#Cancella -mcst#:#mcst_confirm_deletion#:#Confirm Deletion###26 08 2024 new variable +mcst#:#mcst_confirm_deletion#:#Confirm Deletion###30 04 2024 new variable mcst#:#mcst_converted_file#:#File convertito mcst#:#mcst_copy#:#Copia Mediacast mcst#:#mcst_current_value_info#:#Mostra i valori correnti di questo formato. -mcst#:#mcst_default_visibility#:#Accesso di default +mcst#:#mcst_default_visibility#:#Accesso predefinito mcst#:#mcst_det_playtime#:#Determina tempo di esecuzione -mcst#:#mcst_download_all#:#Download All###29 07 2022 new variable +mcst#:#mcst_download_all#:#Download All###31 03 2023 new variable mcst#:#mcst_download_audioportable#:#Scarica audio portatile mcst#:#mcst_download_cnt#:#Scaricati mcst#:#mcst_download_standard#:#Scarica -mcst#:#mcst_download_started_bg#:#Download of files has started. Please check your background tasks in the top right corner.###29 07 2022 new variable +mcst#:#mcst_download_started_bg#:#Download of files has started. Please check your background tasks in the top right corner.###31 03 2023 new variable mcst#:#mcst_download_videoalternative#:#Scarica file alternativo mcst#:#mcst_download_videoportable#:#Scarica video portatile mcst#:#mcst_downloadable#:#Scarica collegamenti -mcst#:#mcst_downloadable_info#:#Se questa opzione è abilitata, sono forniti dei links di download. +mcst#:#mcst_downloadable_info#:#Se questa opzione è abilitata, sono forniti dei link di download. mcst#:#mcst_duration#:#Tempo di esecuzione mcst#:#mcst_duration_info#:#Se lasciato in bianco, ILIAS cercherà di determinare il tempo di esecuzione, automaticamente. mcst#:#mcst_edit_item#:#Modifica elemento Mediacast mcst#:#mcst_edit_settings#:#Impostazioni del MediaCast mcst#:#mcst_gallery#:#Gallery -mcst#:#mcst_img_gallery#:#Image Gallery###29 07 2022 new variable +mcst#:#mcst_img_gallery#:#Image Gallery###31 03 2023 new variable mcst#:#mcst_import#:#Importa Mediacast mcst#:#mcst_incl_files_in_rss#:#Includi file multimediali Nel feed mcst#:#mcst_incl_files_in_rss_info#:#Se abilitato, i files media sono inclusi come allegati nel feed RSS. Altrimenti il feed notificherà i sottoscrittori del servizio solamente su nuovi inserimenti. mcst#:#mcst_input_either_file_or_url#:#Si prega di specificare un file o un URL. Se si fornisce un file, bisogna ricordare la grandezza file consentita per il download del file. -mcst#:#mcst_items#:#Items###26 08 2024 new variable +mcst#:#mcst_items#:#Items###30 04 2024 new variable mcst#:#mcst_last_submission#:#Ultimo sottoposto mcst#:#mcst_list#:#Lista mcst#:#mcst_manage#:#Gestisci @@ -11849,16 +11840,16 @@ mcst#:#mcst_media_cast#:#Media Cast mcst#:#mcst_media_cast_not_online#:#Il Mediacast non è in linea mcst#:#mcst_media_cast_not_online_text#:#Il Mediacast inon è in linea o non è stato abilitato. mcst#:#mcst_mimetype#:#Tipo di MIme -mcst#:#mcst_mimetype_info#:# Selezionare il tipo di MIME per controllare il plugin utilizzato per la riproduzione <br> Attenzione: Tenere presente che non tutti i browser contengono il plugin che si intende utilizzare. +mcst#:#mcst_mimetype_info#:#Selezionare il tipo di MIME per controllare il plugin utilizzato per la riproduzione <br> Attenzione: Tenere presente che non tutti i browser contengono il plugin che si intende utilizzare. mcst#:#mcst_mimetypes#:#Tipi di Mime mcst#:#mcst_mimetypes_info#:#Elenco separato da virgole di tipi di MIME -mcst#:#mcst_new_items_det_lp#:#Add new items to learning progress###29 07 2022 new variable -mcst#:#mcst_new_items_det_lp_info#:#New items are automatically added to determine the overall learning progress.###29 07 2022 new variable +mcst#:#mcst_new_items_det_lp#:#Add new items to learning progress###31 03 2023 new variable +mcst#:#mcst_new_items_det_lp_info#:#New items are automatically added to determine the overall learning progress.###31 03 2023 new variable mcst#:#mcst_news_item_visibility_info#:#Le news pubbliche sono accessibili senza autenticazione, fuori da ILIAS, via RSS. Per favore non includere nessuna informazione confidenziale. -mcst#:#mcst_next_items#:#Next Items###29 07 2022 new variable -mcst#:#mcst_no_autoplay#:#No Autoplay###29 07 2022 new variable +mcst#:#mcst_next_items#:#Next Items###31 03 2023 new variable +mcst#:#mcst_no_autoplay#:#No Autoplay###31 03 2023 new variable mcst#:#mcst_nr_items#:#Numero di oggetti -mcst#:#mcst_nr_videos#:#Number of Initial Videos###29 07 2022 new variable +mcst#:#mcst_nr_videos#:#Number of Initial Videos###31 03 2023 new variable mcst#:#mcst_ordering#:#ordinamento mcst#:#mcst_ordering_creation_date_asc#:#Per data di creazione (Crescente) mcst#:#mcst_ordering_creation_date_desc#:#Per data di creazione (Discendente) @@ -11867,53 +11858,53 @@ mcst#:#mcst_ordering_title#:#Per titolo mcst#:#mcst_play#:#Play mcst#:#mcst_play_cnt#:#Riprodotto mcst#:#mcst_play_time#:#Tempo di esecuzione -mcst#:#mcst_podcast#:#Podcast###29 07 2022 new variable -mcst#:#mcst_prev_items#:#Previous Items###29 07 2022 new variable -mcst#:#mcst_preview#:#Preview###26 08 2024 new variable -mcst#:#mcst_preview_picture#:#anteprima immagine +mcst#:#mcst_podcast#:#Podcast###31 03 2023 new variable +mcst#:#mcst_prev_items#:#Previous Items###31 03 2023 new variable +mcst#:#mcst_preview#:#Preview###30 04 2024 new variable +mcst#:#mcst_preview_picture#:#Anteprima immagine mcst#:#mcst_preview_picture_info#:#Supportato solo con i seguenti principali tipi di media: mcst#:#mcst_reference_info#:#Fornisci indirizzo URL a cui puntare mcst#:#mcst_save_order#:#Memorizza l'ordine -mcst#:#mcst_set_playtime#:#Il tempo di lavoro è sato impostato +mcst#:#mcst_set_playtime#:#Il tempo di lavoro è stato impostato mcst#:#mcst_settings#:#impostazioni MediaCast -mcst#:#mcst_show_description#:#Show Description###29 07 2022 new variable +mcst#:#mcst_show_description#:#Show Description###31 03 2023 new variable mcst#:#mcst_standard_settings_info#:#Lista di suffissi di files, separati da virgola mcst#:#mcst_standard_settings_title#:#Estensioni di file in formato standard mcst#:#mcst_standard_title#:#Media File normale mcst#:#mcst_unable_to_determin_playtime#:#Impossibile determinare il tempo di riproduzione. Si prega di impostarlo manualmente cliccando su Modifica. -mcst#:#mcst_video_cast#:#Videocast###29 07 2022 new variable -mcst#:#mcst_video_completion_threshold#:#Video Completion Threshold###29 07 2022 new variable -mcst#:#mcst_video_completion_threshold_info#:#Amount of video that triggers the completion status. Please note that the user may skip forward to reach this point.###29 07 2022 new variable +mcst#:#mcst_video_cast#:#Videocast###31 03 2023 new variable +mcst#:#mcst_video_completion_threshold#:#Video Completion Threshold###31 03 2023 new variable +mcst#:#mcst_video_completion_threshold_info#:#Amount of video that triggers the completion status. Please note that the user may skip forward to reach this point.###31 03 2023 new variable mcst#:#mcst_videoalternative_title#:#File video alternativo (utilizzo nel Browser) mcst#:#mcst_videoportable_settings_info#:#Lista di suffissi di files, separati da virgola mcst#:#mcst_videoportable_settings_title#:#Estensioni di file in formato video mcst#:#mcst_videoportable_title#:#File video addizionale per dispositivi portatili -mcst#:#mcst_view_abandoned#:#The current presentation mode has been abandoned. Please open the settings and switch to another mode.###29 07 2022 new variable +mcst#:#mcst_view_abandoned#:#The current presentation mode has been abandoned. Please open the settings and switch to another mode.###31 03 2023 new variable mcst#:#mcst_viewmode#:#Modalità di presentazione mcst#:#mcst_visibility_info#:#I contenuti pubblici sono accessibili via RSS senza nessuna autenticazione. mcst#:#mcst_visibility_public#:#Pubblico mcst#:#mcst_visibility_users#:#utenti registrati -mcst#:#mcst_watched#:#watched###29 07 2022 new variable +mcst#:#mcst_watched#:#watched###31 03 2023 new variable mcst#:#mcst_webfeed#:#RSS Feed web -mem#:#mem_period_without_time#:#Without Time Indication###07 02 2020 new variable +mem#:#mem_period_without_time#:#Senza indicazione del tempo mem#:#mem_print_view_form#:#Impostazioni predefinite per visualizzazione stampa mem#:#mem_settings_tab_print_view#:#Impostazioni di visualizzazione stampa mem#:#mem_settings_tab_settings#:#Impostazioni generali -mem#:#mmbr_gallery_user_actions#:#Benutzeraktionen in Mitgliedergalerie -membership#:#mem_error_preconditions#:#A registration is not possible, since minimum one precondition is not fullfilled. +mem#:#mmbr_gallery_user_actions#:#Azioni dell'utente nella galleria dei membri +membership#:#mem_error_preconditions#:#Una registrazione non è possibile, in quanto non è soddisfatta una precondizione minima. membership#:#mem_force_notification#:#Notifica tramite mail membership#:#mem_force_notification_mode_all#:#Notifica attivata per tutti i membri (variabile) membership#:#mem_force_notification_mode_all_sub_blocked#:#I membri possono disattivare le notifiche membership#:#mem_force_notification_mode_blocked#:#I membri riceveranno automaticamente la notifica membership#:#mem_force_notification_mode_custom#:#Personalizza -membership#:#mem_force_notification_mode_self#:#Members have to manually activate notifcation -mep#:#mep_all#:#tutti -mep#:#mep_all_mobs#:#tutti gli oggetti Media -mep#:#mep_bulk_upload#:#Bulk Upload -mep#:#mep_choose_from_folder#:#scegli dalla cartella -mep#:#mep_choose_from_mep#:#scegli tra pool +membership#:#mem_force_notification_mode_self#:#I membri devono attivare manualmente la notifica +mep#:#mep_all#:#Tutti +mep#:#mep_all_mobs#:#Tutti gli oggetti Media +mep#:#mep_bulk_upload#:#Caricamento collettivo +mep#:#mep_choose_from_folder#:#Scegli dalla cartella +mep#:#mep_choose_from_mep#:#Scegli dal pool mep#:#mep_content#:#Contenuto -mep#:#mep_content_snippet_in_use#:#Frammento di contenuto '% s' è in uso e non può essere eliminato. +mep#:#mep_content_snippet_in_use#:#Frammento di contenuto '%s' è in uso e non può essere eliminato. mep#:#mep_content_snippet_used_in_older_versions#:#Si prega di notare: Questo frammento di codice viene utilizzato nelle versioni precedenti di alcune pagine. Se queste pagine sono ripristinate ad una versione che include questo frammento, il frammento di codice mancherà nella pagina. mep#:#mep_copy_to_mep#:#Copia nella libreria multimediale mep#:#mep_create_content_snippet#:#Crea frammento Contenuto @@ -11922,26 +11913,26 @@ mep#:#mep_create_media_files#:#Creazione di oggetti multimediali mep#:#mep_create_mob#:#Crea oggetto multimediale mep#:#mep_default_height#:#Altezza predefinita mep#:#mep_default_width#:#Larghezza Predefinita -mep#:#mep_default_width_height_info#:#la Larghezza e l'altezza di default vengono utilizzate come impostazioni predefinite per la creazione di nuovi oggetti media. +mep#:#mep_default_width_height_info#:#La Larghezza e l'altezza di default vengono utilizzate come impostazioni predefinite per la creazione di nuovi oggetti media. mep#:#mep_edit_content_snippet#:#Modifica frammento di Contenuto -mep#:#mep_edit_folder#:#modifica cartella +mep#:#mep_edit_folder#:#Modifica cartella mep#:#mep_file#:#File -mep#:#mep_folder#:#cartella +mep#:#mep_folder#:#Cartella mep#:#mep_format#:#Formato mep#:#mep_import#:#Importazione di un pool di supporti mep#:#mep_import_lang#:#Lingua di destinazione mep#:#mep_import_trans#:#Importa traduzione mep#:#mep_master_language_only#:#Lingua principale per traduzione mep#:#mep_master_language_only_no_media#:#Lingua principale senza media -mep#:#mep_media_files#:#Media Files +mep#:#mep_media_files#:#File multimediali mep#:#mep_media_subtitles#:#Sottotitoli multimediali -mep#:#mep_mob#:#Media Object -mep#:#mep_move_select_insert#:#Navigate to target folder and click "Insert"###26 08 2024 new variable -mep#:#mep_mpg#:#Content Snippet###29 07 2022 new variable +mep#:#mep_mob#:#Oggetto multimediale +mep#:#mep_move_select_insert#:#Navigate to target folder and click "Insert"###31 03 2023 new variable +mep#:#mep_mpg#:#Content Snippet###31 03 2023 new variable mep#:#mep_new_content_snippet#:#Nuovo frammento di contenuto mep#:#mep_new_folder#:#Nuova cartella mep#:#mep_page_properties#:#Proprieà della pagina -mep#:#mep_page_type_mep#:#Content Snippet###29 07 2022 new variable +mep#:#mep_page_type_mep#:#Frammento di contenuto mep#:#mep_thumbnail#:#Miniatura mep#:#mep_title_and_description#:#Titolo e descrizione mep#:#mep_trans_import_info#:#Se hai esportato questo modulo come XML/Lingua principale per traduzione in un’altra installazione, adesso puoi importare nuovamente i file di traduzione esportati da questa seconda installazione. @@ -11950,18 +11941,18 @@ mep#:#mep_up_dir_copy#:#Copia files dalla directory di Upload (Mantiene i files mep#:#mep_up_dir_move#:#Spostare files da directory di Upload (più veloce) mep#:#mep_upload_dir_files#:#Files dalla directory di Upload mep#:#mobs_activate_pages#:#Attivare la gestione Pagine dei contenuti -mep#:#mobs_activate_pages_info#:#Permette di aggiungere pagine di contenuto al pool dei Media. Queste pagine possono essere riutilizzati (non modificato) in moduli di apprendimento, ecc +mep#:#mobs_activate_pages_info#:#Permette di aggiungere pagine di contenuto al pool dei Media. Queste pagine possono essere riutilizzate (non modificabili) in moduli di apprendimento. mep#:#mobs_always_show_file_manager#:#Mostra sempre File Manager mep#:#mobs_always_show_file_manager_info#:#Se disattivato il file manager per gli oggetti multimediali sarà nascosto per tipi semplici di mime (es. immagini). mep#:#mobs_black_list_file_types#:#Tipi di file vietati -mep#:#mobs_black_list_file_types_and_allowed_info#:#Enter a comma separated list of mime types. This list will restrict the set of allowed file types. Currently allowed mime types are:###26 08 2024 new variable +mep#:#mobs_black_list_file_types_and_allowed_info#:#Enter a comma separated list of mime types. This list will restrict the set of allowed file types. Currently allowed mime types are:###30 04 2024 new variable mep#:#mobs_restrict_file_types#:#Limitare i tipi di file mep#:#mobs_restrict_file_types_info#:#Inserire un elenco separato da virgole di suffissi di file (ad esempio jpg, gif), che possono essere caricati in oggetti multimediali. Se nessun valore viene immesso, tutti i tipi di file sono ammessi. meta#:#adt_error_max_length#:#Si prega di inserire un testo più breve. -meta#:#md_adn_int_error_no_default#:#Please select on activated language as "Default-Language".###29 07 2022 new variable +meta#:#md_adn_int_error_no_default#:#Seleziona la lingua attiva come "Lingua predefinita". meta#:#md_adv_active#:#Attivo meta#:#md_adv_added_new_record#:#Aggiunto nuovo Dataset -meta#:#md_adv_col_presentation_ordering#:#Position +meta#:#md_adv_col_presentation_ordering#:#Posizione meta#:#md_adv_confirm_definition#:#Si prega di confermare le nuove impostazioni di definizione. meta#:#md_adv_confirm_definition_select_option#:#Opzione eliminata meta#:#md_adv_confirm_definition_select_option_all#:#Gestisci tutte le stesse voci @@ -11979,155 +11970,155 @@ meta#:#md_adv_deleted_fields#:#I campi sono stati eliminati. meta#:#md_adv_deleted_files#:#Esporta Files cancellati meta#:#md_adv_deleted_records#:#Dataset Cancellato meta#:#md_adv_desc_show#:#Descrizione Show -meta#:#md_adv_edit_complex_option#:#Edit Option Properties###07 02 2020 new variable +meta#:#md_adv_edit_complex_option#:#Modifica delle proprietà delle opzioni meta#:#md_adv_edit_field#:#Edita Campo meta#:#md_adv_edit_record#:#Edita Dataset meta#:#md_adv_field_fields#:#Campi meta#:#md_adv_field_filter_warning#:#I tipi di campo %s non sono attualmente supportati come filtri di tabella. -meta#:#md_adv_field_list#:#Fields###29 07 2022 new variable -meta#:#md_adv_field_names#:#Nome Campi -meta#:#md_adv_field_table#:#Edita Campi +meta#:#md_adv_field_list#:#Campi +meta#:#md_adv_field_names#:#Nome campi +meta#:#md_adv_field_table#:#Modifica campi meta#:#md_adv_fields_show#:#Mostra i nomi dei campi -meta#:#md_adv_file_list#:#Esporta Files +meta#:#md_adv_file_list#:#Esporta files meta#:#md_adv_import_record#:#Importa set di Metadati -meta#:#md_adv_int_current#:#Current Language:###29 07 2022 new variable -meta#:#md_adv_int_default#:#Default Language:###29 07 2022 new variable -meta#:#md_adv_int_translation_info#:#Translation:###29 07 2022 new variable -meta#:#md_adv_no_fields#:#Nessun Campo Definito +meta#:#md_adv_int_current#:#Lingua attuale: +meta#:#md_adv_int_default#:#Lingua predefinita: +meta#:#md_adv_int_translation_info#:#Traduzione: +meta#:#md_adv_no_fields#:#Nessun campo definito meta#:#md_adv_number_decimals#:#Decimali meta#:#md_adv_number_max#:#Valore massimo meta#:#md_adv_number_min#:#Valore minimo meta#:#md_adv_number_suffix#:#Suffisso meta#:#md_adv_presentation#:#Presentazione -meta#:#md_adv_record_activate_languages#:#Activate Languages###29 07 2022 new variable +meta#:#md_adv_record_activate_languages#:#Attiva lingue meta#:#md_adv_record_list#:#Datasets -meta#:#md_adv_record_lng_table#:#Language Managment###29 07 2022 new variable -meta#:#md_adv_record_lng_table_active#:#Active###29 07 2022 new variable -meta#:#md_adv_record_lng_table_default#:#Default###29 07 2022 new variable -meta#:#md_adv_record_lng_table_inst#:#Installed###29 07 2022 new variable -meta#:#md_adv_record_lng_table_lng#:#Language###29 07 2022 new variable +meta#:#md_adv_record_lng_table#:#Gestione lingue +meta#:#md_adv_record_lng_table_active#:#Attiva +meta#:#md_adv_record_lng_table_default#:#Predefinita +meta#:#md_adv_record_lng_table_inst#:#Installata +meta#:#md_adv_record_lng_table_lng#:#Lingua meta#:#md_adv_records#:#Dataset inclusi -meta#:#md_adv_records_exported#:#E'stato creato un nuovo file di export +meta#:#md_adv_records_exported#:#È stato creato un nuovo file di export meta#:#md_adv_scope#:#Ambito -meta#:#md_adv_scope_info#:#Usage of this custom metadata set will be limited to selected parts of the repository.###26 08 2024 new variable +meta#:#md_adv_scope_info#:#Usage of this custom metadata set will be limited to selected parts of the repository.###01 02 2023 new variable meta#:#md_adv_scope_list_header#:#Limitato a: -meta#:#md_adv_scope_objects#:#Data Set Effective From###26 08 2024 new variable +meta#:#md_adv_scope_objects#:#Data Set Effective From###01 02 2023 new variable meta#:#md_adv_searchable#:#Ricercabile meta#:#md_adv_select_one_file#:#Scegli un file. -meta#:#md_adv_show#:#mostra -meta#:#md_adv_substitution_table#:#Presentazione nel Repository/Personal Desktop +meta#:#md_adv_show#:#Mostra +meta#:#md_adv_substitution_table#:#Presentazione nel Repository/Desktop Personale meta#:#md_adv_text_max_length#:#Lunghezza massima meta#:#md_adv_text_multi#:#Multilinea -meta#:#md_adv_text_multi_val#:#Multilingual Values###26 08 2024 new variable -meta#:#md_adv_text_multi_val_info#:#Allow multilingual field values for this data field. Deactivating this option is recommended for texts that do not need translating, such as personal names.###26 08 2024 new variable -meta#:#md_advanced#:#Advanced Metadata -meta#:#md_aria_language_selection#:#Language Selection###29 07 2022 new variable +meta#:#md_adv_text_multi_val#:#Multilingual Values###30 04 2024 new variable +meta#:#md_adv_text_multi_val_info#:#Allow multilingual field values for this data field. Deactivating this option is recommended for texts that do not need translating, such as personal names.###30 04 2024 new variable +meta#:#md_advanced#:#Metadata avanzati +meta#:#md_aria_language_selection#:#Selezione della lingua meta#:#md_copyright#:#Copyright -meta#:#md_copyright_add#:#Aggiungi Preset di Copyright -meta#:#md_copyright_admin_tab#:#Copyright & OER###28 10 2024 new variable -meta#:#md_copyright_alt_text#:#Text Representation###26 08 2024 new variable -meta#:#md_copyright_alt_text_info#:#Used for image ‘alt’ attribute###26 08 2024 new variable -meta#:#md_copyright_default#:#Default###26 08 2024 new variable -meta#:#md_copyright_edit#:#Edita il preset di Copyright +meta#:#md_copyright_add#:#Aggiungi preset di Copyright +meta#:#md_copyright_admin_tab#:#Copyright & OER###28 11 2025 new variable +meta#:#md_copyright_alt_text#:#Text Representation###23 10 2023 new variable +meta#:#md_copyright_alt_text_info#:#Used for image ‘alt’ attribute###23 10 2023 new variable +meta#:#md_copyright_default#:#Default###14 02 2024 new variable +meta#:#md_copyright_edit#:#Modifica il preset di Copyright meta#:#md_copyright_enable_info#:#Seleziona questa opzione per mostrare una selezione di copyright predefiniti. meta#:#md_copyright_enabled#:#Abilita la selezione dei Copyright -meta#:#md_copyright_full_name#:#Full Name###26 08 2024 new variable -meta#:#md_copyright_image#:#Image###26 08 2024 new variable -meta#:#md_copyright_image_file#:#File###26 08 2024 new variable -meta#:#md_copyright_image_is_file#:#Upload File###26 08 2024 new variable -meta#:#md_copyright_image_is_link#:#Enter URL###26 08 2024 new variable -meta#:#md_copyright_image_link#:#URL###26 08 2024 new variable -meta#:#md_copyright_link#:#URL###26 08 2024 new variable -meta#:#md_copyright_link_info#:#Link to the licence###26 08 2024 new variable +meta#:#md_copyright_full_name#:#Full Name###23 10 2023 new variable +meta#:#md_copyright_image#:#Image###30 04 2024 new variable +meta#:#md_copyright_image_file#:#File###30 04 2024 new variable +meta#:#md_copyright_image_is_file#:#Upload File###30 04 2024 new variable +meta#:#md_copyright_image_is_link#:#Enter URL###30 04 2024 new variable +meta#:#md_copyright_image_link#:#Image URL###23 10 2023 new variable +meta#:#md_copyright_link#:#URL###23 10 2023 new variable +meta#:#md_copyright_link_info#:#Link to the licence###23 10 2023 new variable meta#:#md_copyright_preview#:#Copyright (Anteprima) meta#:#md_copyright_selection#:#Preset di Copyright meta#:#md_copyright_value#:#Copyright -meta#:#md_copyrights_deleted#:#Copyright Cancellato +meta#:#md_copyrights_deleted#:#Copyright cancellato meta#:#md_days#:#Giorni: meta#:#md_delete_cp_sure#:#Vuoi cancellare veramente i seguenti valori? meta#:#md_delimiter#:#Carattere di delimitazione -meta#:#md_delimiter_info#:#The delimiter is used in the quick editing screen for keywords and authors separation. Default is ','. -meta#:#md_editor_custom_input#:#Custom###28 10 2024 new variable -meta#:#md_editor_from_vocab_input#:#From Vocabulary###28 10 2024 new variable -meta#:#md_editor_value#:#Value###28 10 2024 new variable +meta#:#md_delimiter_info#:#Il delimitatore viene utilizzato nella schermata di modifica rapida per la separazione di parole chiave e autori. L'impostazione predefinita è ','. +meta#:#md_editor_custom_input#:#Custom###28 11 2025 new variable +meta#:#md_editor_from_vocab_input#:#From Vocabulary###28 11 2025 new variable +meta#:#md_editor_value#:#Value###28 11 2025 new variable meta#:#md_fields#:#Campi -meta#:#md_import_file_vocab#:#Import File###28 10 2024 new variable -meta#:#md_import_vocab#:#Import###28 10 2024 new variable -meta#:#md_import_vocab_modal#:#Import From File###28 10 2024 new variable +meta#:#md_import_file_vocab#:#Import File###28 11 2025 new variable +meta#:#md_import_vocab#:#Import###28 11 2025 new variable +meta#:#md_import_vocab_modal#:#Import From File###28 11 2025 new variable meta#:#md_months#:#Mese: -meta#:#md_oai_contact_mail#:#Contact E-Mail###28 10 2024 new variable -meta#:#md_oai_identifier_prefix#:#OAI Prefix###28 10 2024 new variable -meta#:#md_oai_identifier_prefix_info#:#This prefix is used as a namespace in the identifiers of returned OER records.###28 10 2024 new variable -meta#:#md_oai_pmh_enabled#:#Allow Querying via OAI-PMH Interface###28 10 2024 new variable -meta#:#md_oai_pmh_enabled_info#:#If enabled, harvested OER can be queried by external interested parties, e.g. OER referatories.###28 10 2024 new variable -meta#:#md_oai_repository_name#:#Repository Name###28 10 2024 new variable -meta#:#md_oai_repository_name_info#:#This is returned as the name of this ILIAS installation when queried.###28 10 2024 new variable -meta#:#md_obj_types#:#Oggetti Assegnati -meta#:#md_record_export_table#:#Esporta Files -meta#:#md_record_list_table#:#Advanced Metadata Set +meta#:#md_oai_contact_mail#:#Contact E-Mail###28 11 2025 new variable +meta#:#md_oai_identifier_prefix#:#OAI Prefix###28 11 2025 new variable +meta#:#md_oai_identifier_prefix_info#:#This prefix is used as a namespace in the identifiers of returned OER records.###28 11 2025 new variable +meta#:#md_oai_pmh_enabled#:#Allow Querying via OAI-PMH Interface###28 11 2025 new variable +meta#:#md_oai_pmh_enabled_info#:#If enabled, harvested OER can be queried by external interested parties, e.g. OER repositories.###28 11 2025 new variable +meta#:#md_oai_repository_name#:#Repository Name###28 11 2025 new variable +meta#:#md_oai_repository_name_info#:#This is returned as the name of this ILIAS installation when queried.###28 11 2025 new variable +meta#:#md_obj_types#:#Oggetti assegnati +meta#:#md_record_export_table#:#Esporta files +meta#:#md_record_list_table#:#Set di metadati avanzati meta#:#md_separated_by#:#Separato da %s -meta#:#md_settings#:#Settings###29 10 2025 new variable -meta#:#md_settings_harvester#:#OER Harvester###29 10 2025 new variable -meta#:#md_settings_licence#:#Terms of Usage###29 10 2025 new variable -meta#:#md_settings_publishing#:#Querying by Repositories###29 10 2025 new variable +meta#:#md_settings#:#Settings###28 11 2025 new variable +meta#:#md_settings_harvester#:#OER Harvester###28 11 2025 new variable +meta#:#md_settings_licence#:#Terms of Usage###28 11 2025 new variable +meta#:#md_settings_publishing#:#Querying by Repositories###28 11 2025 new variable meta#:#md_time#:#Tempo: -meta#:#md_unknown_vocabulary_flag#:#(unknown vocabulary)###28 10 2024 new variable +meta#:#md_unknown_vocabulary_flag#:#(unknown vocabulary)###28 11 2025 new variable meta#:#md_used#:#Uso -meta#:#md_vocab_activate_action#:#Activate###28 10 2024 new variable -meta#:#md_vocab_active_column#:#Active###28 10 2024 new variable -meta#:#md_vocab_all_values_title#:#Values for %s (%s)###28 10 2024 new variable -meta#:#md_vocab_allow_custom_input_action#:#Allow Custom Input###28 10 2024 new variable -meta#:#md_vocab_custom_input_column#:#Custom Input Allowed###28 10 2024 new variable -meta#:#md_vocab_deactivate_action#:#Deactivate###28 10 2024 new variable -meta#:#md_vocab_delete_action#:#Delete###28 10 2024 new variable -meta#:#md_vocab_delete_confirmation_text#:#Are you sure you want to delete the vocabulary for %s (%s) with the following values?###28 10 2024 new variable -meta#:#md_vocab_delete_confirmation_title#:#Delete Vocabulary###28 10 2024 new variable -meta#:#md_vocab_deletion_successful#:#Vocabulary successfully deleted.###28 10 2024 new variable -meta#:#md_vocab_disallow_custom_input_action#:#Disallow Custom Input###28 10 2024 new variable -meta#:#md_vocab_element_column#:#Element###28 10 2024 new variable -meta#:#md_vocab_element_with_condition#:#%s where %s is %s###28 10 2024 new variable -meta#:#md_vocab_import_invalid#:#The import file is invalid:<br/>%s###28 10 2024 new variable -meta#:#md_vocab_import_successful#:#Vocabulary successfully imported.###28 10 2024 new variable -meta#:#md_vocab_import_upload_failed#:#Upload of the import file failed.###28 10 2024 new variable -meta#:#md_vocab_preview_column#:#Preview###28 10 2024 new variable -meta#:#md_vocab_show_all_action#:#Show All Values###28 10 2024 new variable -meta#:#md_vocab_source_column#:#Source###28 10 2024 new variable -meta#:#md_vocab_table_title#:#Vocabularies###28 10 2024 new variable -meta#:#md_vocab_type_column#:#Type###28 10 2024 new variable -meta#:#md_vocab_type_controlled_string#:#Controlled Text###28 10 2024 new variable -meta#:#md_vocab_type_controlled_vocab_value#:#Controlled Selection###28 10 2024 new variable -meta#:#md_vocab_type_copyright#:#Copyright###28 10 2024 new variable -meta#:#md_vocab_type_standard#:#Standard###28 10 2024 new variable -meta#:#md_vocab_update_successful#:#Vocabulary successfully updated.###28 10 2024 new variable -meta#:#md_vocabularies_config#:#LOM Vocabularies###28 10 2024 new variable -meta#:#meta_1#:#1###26 08 2024 new variable -meta#:#meta_2#:#2###26 08 2024 new variable -meta#:#meta_3#:#3###26 08 2024 new variable -meta#:#meta_4#:#4###26 08 2024 new variable -meta#:#meta_accessibility_restrictions#:#Restrizioni nell& +meta#:#md_vocab_activate_action#:#Activate###28 11 2025 new variable +meta#:#md_vocab_active_column#:#Active###28 11 2025 new variable +meta#:#md_vocab_all_values_title#:#Values for %s (%s)###28 11 2025 new variable +meta#:#md_vocab_allow_custom_input_action#:#Allow Custom Input###28 11 2025 new variable +meta#:#md_vocab_custom_input_column#:#Custom Input Allowed###28 11 2025 new variable +meta#:#md_vocab_deactivate_action#:#Deactivate###28 11 2025 new variable +meta#:#md_vocab_delete_action#:#Delete###28 11 2025 new variable +meta#:#md_vocab_delete_confirmation_text#:#Are you sure you want to delete the vocabulary for %s (%s) with the following values?###28 11 2025 new variable +meta#:#md_vocab_delete_confirmation_title#:#Delete Vocabulary###28 11 2025 new variable +meta#:#md_vocab_deletion_successful#:#Vocabulary successfully deleted.###28 11 2025 new variable +meta#:#md_vocab_disallow_custom_input_action#:#Disallow Custom Input###28 11 2025 new variable +meta#:#md_vocab_element_column#:#Element###28 11 2025 new variable +meta#:#md_vocab_element_with_condition#:#%s where %s is %s###28 11 2025 new variable +meta#:#md_vocab_import_invalid#:#The import file is invalid:<br/>%s###28 11 2025 new variable +meta#:#md_vocab_import_successful#:#Vocabulary successfully imported.###28 11 2025 new variable +meta#:#md_vocab_import_upload_failed#:#Upload of the import file failed.###28 11 2025 new variable +meta#:#md_vocab_preview_column#:#Preview###28 11 2025 new variable +meta#:#md_vocab_show_all_action#:#Show All Values###28 11 2025 new variable +meta#:#md_vocab_source_column#:#Source###28 11 2025 new variable +meta#:#md_vocab_table_title#:#Vocabularies###28 11 2025 new variable +meta#:#md_vocab_type_column#:#Type###28 11 2025 new variable +meta#:#md_vocab_type_controlled_string#:#Controlled Text###28 11 2025 new variable +meta#:#md_vocab_type_controlled_vocab_value#:#Controlled Selection###28 11 2025 new variable +meta#:#md_vocab_type_copyright#:#Copyright###28 11 2025 new variable +meta#:#md_vocab_type_standard#:#Standard###28 11 2025 new variable +meta#:#md_vocab_update_successful#:#Vocabulary successfully updated.###28 11 2025 new variable +meta#:#md_vocabularies_config#:#LOM Vocabularies###28 11 2025 new variable +meta#:#meta_1#:#1###30 04 2024 new variable +meta#:#meta_2#:#2###30 04 2024 new variable +meta#:#meta_3#:#3###30 04 2024 new variable +meta#:#meta_4#:#4###30 04 2024 new variable +meta#:#meta_accessibility_restrictions#:#Restrizioni di accessibilità meta#:#meta_active#:#Attivo meta#:#meta_add#:#Aggiungi -meta#:#meta_add_element#:#Add %s###26 08 2024 new variable -meta#:#meta_add_element_success#:#Element added successfully###26 08 2024 new variable -meta#:#meta_advmd_add_field#:#Add New Field###26 08 2024 new variable -meta#:#meta_advmd_select_delete_option#:#Delete This Entry###26 08 2024 new variable -meta#:#meta_advmd_select_first_position_identifier#:#First###26 08 2024 new variable -meta#:#meta_advmd_select_new_option#:#Add New Entry###26 08 2024 new variable -meta#:#meta_advmd_select_option_position#:#Position###26 08 2024 new variable -meta#:#meta_advmd_select_option_value#:#Value###26 08 2024 new variable +meta#:#meta_add_element#:#Add %s###30 04 2024 new variable +meta#:#meta_add_element_success#:#Element added successfully###30 04 2024 new variable +meta#:#meta_advmd_add_field#:#Add New Field###30 04 2024 new variable +meta#:#meta_advmd_select_delete_option#:#Delete This Entry###30 04 2024 new variable +meta#:#meta_advmd_select_first_position_identifier#:#First###30 04 2024 new variable +meta#:#meta_advmd_select_new_option#:#Add New Entry###30 04 2024 new variable +meta#:#meta_advmd_select_option_position#:#Position###30 04 2024 new variable +meta#:#meta_advmd_select_option_value#:#Value###30 04 2024 new variable meta#:#meta_advmd_select_options#:#Voci -meta#:#meta_advmd_select_options_edit#:#Edit Entries###26 08 2024 new variable -meta#:#meta_advmd_select_position_identifier#:#After %s###26 08 2024 new variable -meta#:#meta_aggregation_level#:#Aggregation Level###26 08 2024 new variable -meta#:#meta_amaya#:#Amaya###26 08 2024 new variable +meta#:#meta_advmd_select_options_edit#:#Edit Entries###30 04 2024 new variable +meta#:#meta_advmd_select_position_identifier#:#After %s###30 04 2024 new variable +meta#:#meta_aggregation_level#:#Aggregation Level###30 04 2024 new variable +meta#:#meta_amaya#:#Amaya###30 04 2024 new variable meta#:#meta_annotation#:#Annotazione -meta#:#meta_annotation_plural#:#Annotations###26 08 2024 new variable -meta#:#meta_any#:#Any###26 08 2024 new variable +meta#:#meta_annotation_plural#:#Annotations###30 04 2024 new variable +meta#:#meta_any#:#Any###30 04 2024 new variable meta#:#meta_atomic#:#Atomico meta#:#meta_author#:#Autore -meta#:#meta_authors#:#Authors###26 08 2024 new variable +meta#:#meta_authors#:#Authors###30 04 2024 new variable meta#:#meta_browser#:#Browser -meta#:#meta_button_to_full_editor_label#:#Edit the Full Learning Object Metadata###26 08 2024 new variable +meta#:#meta_button_to_full_editor_label#:#Edit the Full Learning Object Metadata###30 04 2024 new variable meta#:#meta_c_AD#:#Andorra meta#:#meta_c_AE#:#Emirati Arabi Uniti meta#:#meta_c_AF#:#Afghanistan @@ -12170,7 +12161,7 @@ meta#:#meta_c_CC#:#Isole Cocos (Keeling) meta#:#meta_c_CF#:#Repubblica Centrafricana meta#:#meta_c_CG#:#Congo meta#:#meta_c_CH#:#Svizzera -meta#:#meta_c_CI#:#Costa D& +meta#:#meta_c_CI#:#Costa D'Avorio meta#:#meta_c_CK#:#Isole Cook meta#:#meta_c_CL#:#Cile meta#:#meta_c_CM#:#Camerun @@ -12377,71 +12368,71 @@ meta#:#meta_c_ZM#:#Zambia meta#:#meta_c_ZW#:#Zimbabwe meta#:#meta_catalog#:#Catalogo meta#:#meta_classification#:#Classificazione -meta#:#meta_classification_plural#:#Classifications###26 08 2024 new variable +meta#:#meta_classification_plural#:#Classifications###30 04 2024 new variable meta#:#meta_collection#:#Collezione -meta#:#meta_competency#:#Competenza -meta#:#meta_contentprovider#:#Provider del contenuto +meta#:#meta_competency#:#Competenze +meta#:#meta_contentprovider#:#Fornitore del contenuto meta#:#meta_context#:#Contesto -meta#:#meta_context_plural#:#Contexts###26 08 2024 new variable +meta#:#meta_context_plural#:#Contexts###30 04 2024 new variable meta#:#meta_contribute#:#Contributo -meta#:#meta_contribute_plural#:#Contribute###26 08 2024 new variable +meta#:#meta_contribute_plural#:#Contribute###30 04 2024 new variable meta#:#meta_copyright#:#Copyright meta#:#meta_copyright_and_other_restrictions#:#Copyright ed altre restrizioni. -meta#:#meta_copyright_change_info#:#You are going to change the licence assigned to this content. This should only be done in accordance with the copyright owner. Please continue only if the new licence is not more restrictive than the one used before. -meta#:#meta_copyright_change_oer_info#:#The copyright licence you have selected makes this object eligible to be harvested as an Open Educational Resource. If you continue, it might be listed as such along with an export file, and it might get published beyond this platform.###28 10 2024 new variable -meta#:#meta_copyright_change_warning_title#:#Modification of Copyright Settings -meta#:#meta_copyright_in_use#:#In use -meta#:#meta_copyright_outdated#:#Outdated -meta#:#meta_copyright_outdated_error#:#The chosen copyright is outdated and no longer in use.###26 08 2024 new variable -meta#:#meta_copyright_show_usages#:#Show usages -meta#:#meta_copyright_status#:#Status -meta#:#meta_copyright_sub_items#:#Sub Items -meta#:#meta_copyright_usage#:#Usage +meta#:#meta_copyright_change_info#:#Stai per cambiare la licenza assegnata a questo contenuto. Questo dovrebbe essere fatto solo in conformità con il proprietario del copyright. Continua solo se la nuova licenza non è più restrittiva di quella utilizzata in precedenza. +meta#:#meta_copyright_change_oer_info#:#The copyright licence you have selected makes this object eligible to be harvested as an Open Educational Resource. If you continue, it might be listed as such along with an export file, and it might get published beyond this platform.###28 11 2025 new variable +meta#:#meta_copyright_change_warning_title#:#Modifica delle impostazioni del copyright +meta#:#meta_copyright_in_use#:#In uso +meta#:#meta_copyright_outdated#:#Obsoleto +meta#:#meta_copyright_outdated_error#:#The chosen copyright is outdated and no longer in use.###30 04 2024 new variable +meta#:#meta_copyright_show_usages#:#Mostra gli usi +meta#:#meta_copyright_status#:#Stato +meta#:#meta_copyright_sub_items#:#Sottovoci +meta#:#meta_copyright_usage#:#Uso meta#:#meta_cost#:#A pagamento meta#:#meta_coverage#:#Copertura -meta#:#meta_coverage_plural#:#Coverage###26 08 2024 new variable +meta#:#meta_coverage_plural#:#Coverage###30 04 2024 new variable meta#:#meta_cp_own#:#Informazione sotto proprio copyright: meta#:#meta_creator#:#Creatore meta#:#meta_current_value#:#Valore corrente meta#:#meta_date#:#Data -meta#:#meta_date_time#:#Date###26 08 2024 new variable +meta#:#meta_date_time#:#Date###30 04 2024 new variable meta#:#meta_delete#:#Cancella -meta#:#meta_delete_confirm#:#Are you sure you want to delete this element and its content?###26 08 2024 new variable -meta#:#meta_delete_element#:#Delete %s###26 08 2024 new variable -meta#:#meta_delete_element_success#:#Element deleted successfully###26 08 2024 new variable -meta#:#meta_delete_this_element#:#Delete This Element###26 08 2024 new variable +meta#:#meta_delete_confirm#:#Are you sure you want to delete this element and its content?###30 04 2024 new variable +meta#:#meta_delete_element#:#Delete %s###30 04 2024 new variable +meta#:#meta_delete_element_success#:#Element deleted successfully###30 04 2024 new variable +meta#:#meta_delete_this_element#:#Delete This Element###30 04 2024 new variable meta#:#meta_description#:#Descrizione -meta#:#meta_description_plural#:#Descriptions###26 08 2024 new variable +meta#:#meta_description_plural#:#Descriptions###30 04 2024 new variable meta#:#meta_diagramm#:#Diagramma meta#:#meta_difficult#:#Difficile -meta#:#meta_difficulty#:#Difficolt& -meta#:#meta_discipline#:#Discipline###26 08 2024 new variable +meta#:#meta_difficulty#:#Difficoltà +meta#:#meta_discipline#:#Discipline###30 04 2024 new variable meta#:#meta_draft#:#Bozza meta#:#meta_duration#:#Durata meta#:#meta_easy#:#Facile -meta#:#meta_edit_element#:#Edit %s###26 08 2024 new variable -meta#:#meta_edit_element_success#:#Element edited successfully###26 08 2024 new variable -meta#:#meta_editor#:#Editore +meta#:#meta_edit_element#:#Edit %s###30 04 2024 new variable +meta#:#meta_edit_element_success#:#Element edited successfully###30 04 2024 new variable +meta#:#meta_editor#:#Editor meta#:#meta_education#:#Educazione meta#:#meta_educational#:#Educativo meta#:#meta_educational_level#:#Livello educativo meta#:#meta_educational_objective#:#Scopo educativo -meta#:#meta_educational_plural#:#Educational###26 08 2024 new variable +meta#:#meta_educational_plural#:#Educational###30 04 2024 new variable meta#:#meta_educationalvalidator#:#Supervisore contenuti educativi -meta#:#meta_entity#:#Entit& -meta#:#meta_entity_plural#:#Entities###26 08 2024 new variable +meta#:#meta_entity#:#Entità +meta#:#meta_entity_plural#:#Entities###30 04 2024 new variable meta#:#meta_entry#:#Voce -meta#:#meta_error_empty_input#:#Please make sure that at least one of the following input fields is not empty.###26 08 2024 new variable +meta#:#meta_error_empty_input#:#Please make sure that at least one of the following input fields is not empty.###30 04 2024 new variable meta#:#meta_exam#:#Esame meta#:#meta_exercise#:#Esercitazione meta#:#meta_experiment#:#Esperimento meta#:#meta_expositive#:#Esposizione meta#:#meta_figure#:#Figura meta#:#meta_final#:#Finale -meta#:#meta_first_author#:#First Author###26 08 2024 new variable +meta#:#meta_first_author#:#First Author###30 04 2024 new variable meta#:#meta_format#:#Formato -meta#:#meta_format_plural#:#Formats###26 08 2024 new variable -meta#:#meta_full_editor_navigation_info#:#To navigate and edit this metadata set, use the ‘LOM’-tree in the ‘Tools’ entry of the main menu.###26 08 2024 new variable +meta#:#meta_format_plural#:#Formats###30 04 2024 new variable +meta#:#meta_full_editor_navigation_info#:#To navigate and edit this metadata set, use the ‘LOM’-tree in the ‘Tools’ entry of the main menu.###30 04 2024 new variable meta#:#meta_general#:#Generale meta#:#meta_global#:#Globale meta#:#meta_graph#:#Grafico @@ -12455,26 +12446,26 @@ meta#:#meta_higher_education#:#Educazione superiore meta#:#meta_id#:#Id meta#:#meta_idea#:#Idea meta#:#meta_identifier#:#Identificatore -meta#:#meta_identifier_plural#:#Identifiers###26 08 2024 new variable +meta#:#meta_identifier_plural#:#Identifiers###30 04 2024 new variable meta#:#meta_index#:#Indice -meta#:#meta_info_licence_section#:#Licence and Use###28 10 2024 new variable -meta#:#meta_info_only_repository_objects#:#Only repository objects are listed below (and no media objects or LM pages). +meta#:#meta_info_licence_section#:#Licence and Use###28 11 2025 new variable +meta#:#meta_info_only_repository_objects#:#Di seguito sono elencati solo gli oggetti repository (e nessun oggetto multimediale o pagine LM). meta#:#meta_initiator#:#Iniziatore -meta#:#meta_installation_remarks#:#Note sull& +meta#:#meta_installation_remarks#:#Note sull'installazione meta#:#meta_instructionaldesigner#:#Instruction designer meta#:#meta_intended_end_user_role#:#Ruolo progettato per utente finale -meta#:#meta_intended_end_user_role_plural#:#Intended End User Roles###26 08 2024 new variable +meta#:#meta_intended_end_user_role_plural#:#Intended End User Roles###30 04 2024 new variable meta#:#meta_interactivity_level#:#Livello di interazione meta#:#meta_interactivity_type#:#Tipo di interazione -meta#:#meta_is_based_on#:#E& -meta#:#meta_is_basis_for#:#E& -meta#:#meta_is_format_of#:#E& -meta#:#meta_is_part_of#:#E& -meta#:#meta_is_referenced_by#:#E& -meta#:#meta_is_required_by#:#E& -meta#:#meta_is_version_of#:#E& +meta#:#meta_is_based_on#:#È basato su +meta#:#meta_is_basis_for#:#È base per +meta#:#meta_is_format_of#:#È il formato di +meta#:#meta_is_part_of#:#È parte di +meta#:#meta_is_referenced_by#:#È indicato da +meta#:#meta_is_required_by#:#È richiesto da +meta#:#meta_is_version_of#:#È la versione di meta#:#meta_keyword#:#Parola Chiave -meta#:#meta_keyword_plural#:#Keywords###26 08 2024 new variable +meta#:#meta_keyword_plural#:#Keywords###30 04 2024 new variable meta#:#meta_kind#:#Tipo meta#:#meta_l_aa#:#Regione degli Afar meta#:#meta_l_ab#:#Abcasia @@ -12610,70 +12601,70 @@ meta#:#meta_l_vi#:#Vietnamita meta#:#meta_l_vo#:#Volapük meta#:#meta_l_wo#:#Wolof meta#:#meta_l_xh#:#Xhosa -meta#:#meta_l_xx#:#none###26 08 2024 new variable +meta#:#meta_l_xx#:#none###30 04 2024 new variable meta#:#meta_l_yi#:#Ebraico meta#:#meta_l_yo#:#Yoruba meta#:#meta_l_za#:#Zhuang meta#:#meta_l_zh#:#Cinese meta#:#meta_l_zu#:#Zulu meta#:#meta_language#:#Lingua -meta#:#meta_language_plural#:#Languages###26 08 2024 new variable +meta#:#meta_language_plural#:#Languages###30 04 2024 new variable meta#:#meta_learner#:#Studente meta#:#meta_learning_resource_type#:#Tipo di risorsa -meta#:#meta_learning_resource_type_plural#:#Learning Resource Types###26 08 2024 new variable +meta#:#meta_learning_resource_type_plural#:#Learning Resource Types###30 04 2024 new variable meta#:#meta_lecture#:#Lettura meta#:#meta_lifecycle#:#Ciclo di vita meta#:#meta_linear#:#Lineare meta#:#meta_local#:#Locale meta#:#meta_location#:#Collocazione -meta#:#meta_location_plural#:#Locations###26 08 2024 new variable -meta#:#meta_lom#:#Learning Object Metadata###26 08 2024 new variable -meta#:#meta_lom_short#:#LOM###26 08 2024 new variable -meta#:#meta_low#:#basso -meta#:#meta_macos#:#MAC-OS###26 08 2024 new variable +meta#:#meta_location_plural#:#Locations###30 04 2024 new variable +meta#:#meta_lom#:#Learning Object Metadata###30 04 2024 new variable +meta#:#meta_lom_short#:#LOM###30 04 2024 new variable +meta#:#meta_low#:#Basso +meta#:#meta_macos#:#MAC-OS###30 04 2024 new variable meta#:#meta_manager#:#Gestore meta#:#meta_maximum_version#:#Versione massima meta#:#meta_medium#:#Mezzo meta#:#meta_meta_metadata#:#Meta-Metadati meta#:#meta_metadatascheme#:#Schema dei metadati -meta#:#meta_metadatascheme_plural#:#Metadata Schemas###26 08 2024 new variable +meta#:#meta_metadatascheme_plural#:#Metadata Schemas###30 04 2024 new variable meta#:#meta_minimum_version#:#Versione minima meta#:#meta_mixed#:#Misto -meta#:#meta_ms-internet_explorer#:#MS-Internet Explorer###26 08 2024 new variable -meta#:#meta_ms-windows#:#MS-Windows###26 08 2024 new variable -meta#:#meta_multi-os#:#Multi-OS###26 08 2024 new variable +meta#:#meta_ms-internet_explorer#:#MS-Internet Explorer###30 04 2024 new variable +meta#:#meta_ms-windows#:#MS-Windows###30 04 2024 new variable +meta#:#meta_multi-os#:#Multi-OS###30 04 2024 new variable meta#:#meta_name#:#Nome meta#:#meta_narrative_text#:#Testo narrativo -meta#:#meta_netscape_communicator#:#Netscape Communicator###26 08 2024 new variable +meta#:#meta_netscape_communicator#:#Netscape Communicator###30 04 2024 new variable meta#:#meta_networked#:#Collegato in rete meta#:#meta_new_element#:#Nuovo elemento meta#:#meta_no#:#No -meta#:#meta_none#:#None###26 08 2024 new variable -meta#:#meta_obj_type_active#:#Dataset offered###29 07 2022 new variable -meta#:#meta_obj_type_inactive#:#Not Used -meta#:#meta_obj_type_mandatory#:#Mandatory -meta#:#meta_obj_type_optional#:#Optional -meta#:#meta_oer_blocked#:#Ignored by OER Harvester -meta#:#meta_oer_blocked_info#:#Will not be listed automatically as Open Educational Ressource (OER) -meta#:#meta_oer_categories#:#Categories for Objects Gathered###29 10 2025 new variable -meta#:#meta_oer_copyright_selection#:#Lizenzauswahl -meta#:#meta_oer_copyright_selection_info#:#Nur Objekte, die unter den/der ausgewählten Lizenz veröffentlicht sind, werden in die OER-Kategorie verknüpft. -meta#:#meta_oer_exposed_source#:#Category for Published OER Content###28 10 2024 new variable -meta#:#meta_oer_harvested_licences#:#Licences for Harvesting###29 10 2025 new variable -meta#:#meta_oer_harvested_types#:#Types of Objects to be Harvested###29 10 2025 new variable +meta#:#meta_none#:#None###30 04 2024 new variable +meta#:#meta_obj_type_active#:#Data set offered###31 03 2023 new variable +meta#:#meta_obj_type_inactive#:#Non usato +meta#:#meta_obj_type_mandatory#:#Obbligatorio +meta#:#meta_obj_type_optional#:#Il set di dati deve essere attivato +meta#:#meta_oer_blocked#:#Ignorato da OER Harvester +meta#:#meta_oer_blocked_info#:#Non verrà elencato automaticamente come Open Educational Resource (OER) +meta#:#meta_oer_categories#:#Categories for Objects Gathered###28 11 2025 new variable +meta#:#meta_oer_copyright_selection#:#Selezione della licenza +meta#:#meta_oer_copyright_selection_info#:#Solo gli oggetti pubblicati sotto le licenze selezionate sono collegati alla categoria OER. +meta#:#meta_oer_exposed_source#:#Category for Published OER Content###28 11 2025 new variable +meta#:#meta_oer_harvested_licences#:#Licences for Harvesting###28 11 2025 new variable +meta#:#meta_oer_harvested_types#:#Types of Objects to be Harvested###28 11 2025 new variable meta#:#meta_oer_harvester#:#OER Harvester meta#:#meta_oer_harvester_desc#:#OER Harvester -meta#:#meta_oer_object_type_selection#:#Harvested Object Types###28 10 2024 new variable -meta#:#meta_oer_target#:#Category for Release OER Content -meta#:#meta_opera#:#Opera###26 08 2024 new variable +meta#:#meta_oer_object_type_selection#:#Harvested Object Types###28 11 2025 new variable +meta#:#meta_oer_target#:#Categoria per rilascio o contenuto +meta#:#meta_opera#:#Opera###30 04 2024 new variable meta#:#meta_operating_system#:#Sistema Operativo -meta#:#meta_or_composite#:#o composito -meta#:#meta_or_composite_plural#:#Or Composites###26 08 2024 new variable +meta#:#meta_or_composite#:#O composito +meta#:#meta_or_composite_plural#:#Or Composites###30 04 2024 new variable meta#:#meta_order#:#Order meta#:#meta_other#:#Altro -meta#:#meta_other_plattform_requirements#:#altri requisiti della piattaforma -meta#:#meta_pc-dos#:#PC-DOS###26 08 2024 new variable -meta#:#meta_pointofcontact#:#Point of Contact +meta#:#meta_other_plattform_requirements#:#Altri requisiti della piattaforma +meta#:#meta_pc-dos#:#PC-DOS###30 04 2024 new variable +meta#:#meta_pointofcontact#:#Punto di contatto meta#:#meta_prerequisite#:#Prerequisito meta#:#meta_problem_statement#:#Esposizione del problema meta#:#meta_publisher#:#Editore @@ -12681,29 +12672,29 @@ meta#:#meta_purpose#:#Scopo meta#:#meta_questionnaire#:#Sondaggio meta#:#meta_references#:#Riferimenti meta#:#meta_relation#:#Relazione -meta#:#meta_relation_plural#:#Relations###26 08 2024 new variable +meta#:#meta_relation_plural#:#Relations###30 04 2024 new variable meta#:#meta_requirement#:#Requisito -meta#:#meta_requirement_plural#:#Requirements###26 08 2024 new variable +meta#:#meta_requirement_plural#:#Requirements###30 04 2024 new variable meta#:#meta_requires#:#Richiede meta#:#meta_resource#:#Risorsa meta#:#meta_revised#:#Rivisto meta#:#meta_rights#:#Diritti meta#:#meta_role#:#Ruolo -meta#:#meta_save_order#:#Save Order +meta#:#meta_save_order#:#Salvare l'ordine meta#:#meta_school#:#Scuola meta#:#meta_scriptwriter#:#Scrittore -meta#:#meta_second_author#:#Second Author###26 08 2024 new variable +meta#:#meta_second_author#:#Second Author###30 04 2024 new variable meta#:#meta_section#:#Sezione meta#:#meta_security_level#:#Livello di sicurezza meta#:#meta_self_assessment#:#Autovalutazione -meta#:#meta_semantic_density#:#Densit& +meta#:#meta_semantic_density#:#Densità semantica meta#:#meta_simulation#:#Simulazione meta#:#meta_size#:#Dimensioni -meta#:#meta_skill_level#:#Livello di capacit& +meta#:#meta_skill_level#:#Livello di competenza meta#:#meta_slide#:#Immagine meta#:#meta_source#:#Sorgente meta#:#meta_status#:#Stato -meta#:#meta_string#:#Text###26 08 2024 new variable +meta#:#meta_string#:#Text###30 04 2024 new variable meta#:#meta_structure#:#Struttura meta#:#meta_subjectmatterexpert#:#Esperto della materia meta#:#meta_tab_advmd#:#Metadati personalizzati @@ -12712,22 +12703,22 @@ meta#:#meta_tab_lom#:#LOM meta#:#meta_table#:#Tabella meta#:#meta_taxon#:#Tassonomia meta#:#meta_taxon_path#:#Percorso Tassonomico -meta#:#meta_taxon_path_plural#:#Taxon Paths###26 08 2024 new variable -meta#:#meta_taxon_plural#:#Taxons###26 08 2024 new variable +meta#:#meta_taxon_path_plural#:#Taxon Paths###30 04 2024 new variable +meta#:#meta_taxon_plural#:#Taxons###30 04 2024 new variable meta#:#meta_teacher#:#Insegnante meta#:#meta_technical#:#Tecnico meta#:#meta_technicalimplementer#:#Implementazione meta#:#meta_technicalvalidator#:#Supervisore tecnico meta#:#meta_terminator#:#Concluso da -meta#:#meta_third_author#:#Third Author###26 08 2024 new variable +meta#:#meta_third_author#:#Third Author###30 04 2024 new variable meta#:#meta_title#:#Titolo meta#:#meta_training#:#Formazione meta#:#meta_type#:#Tipo -meta#:#meta_typical_age_range#:#Intervallo di et& -meta#:#meta_typical_age_range_plural#:#Typical Age Ranges###26 08 2024 new variable +meta#:#meta_typical_age_range#:#Fascia d'età tipica +meta#:#meta_typical_age_range_plural#:#Typical Age Ranges###30 04 2024 new variable meta#:#meta_typical_learning_time#:#Tempo di apprendimento consigliato meta#:#meta_unavailable#:#Non disponibile -meta#:#meta_unix#:#Unix###26 08 2024 new variable +meta#:#meta_unix#:#Unix###30 04 2024 new variable meta#:#meta_unknown#:#Sconosciuto meta#:#meta_validator#:#Validatore meta#:#meta_value#:#Valore @@ -12737,196 +12728,196 @@ meta#:#meta_very_easy#:#Molto facile meta#:#meta_very_high#:#Molto alto meta#:#meta_very_low#:#Molto basso meta#:#meta_yes#:#Si -meta#:#udf_type_address#:#Address###07 02 2020 new variable +meta#:#udf_type_address#:#Indirizzo meta#:#udf_type_externallink#:#Collegamento esterno -meta#:#udf_type_float#:#Mobile -meta#:#udf_type_integer#:#Integer +meta#:#udf_type_float#:#Valore decimale +meta#:#udf_type_integer#:#Valore intero meta#:#udf_type_internallink#:#Collegamento interno meta#:#udf_type_location#:#Posizione -meta#:#udf_type_selectmulti#:#Selection List (Checkboxes) +meta#:#udf_type_selectmulti#:#Elenco di selezione (caselle di controllo) mmbr#:#info_refuse_sure#:#Sei sicuro di voler rifiutare il/i seguente/i utente/i? mmbr#:#mmbr_awrn_my_groups_courses#:#I miei gruppi e corsi -mmbr#:#mmbr_awrn_my_groups_courses_info#:#Sono elencati tutti i membri di gruppi o corsi dell’attuale utente. +mmbr#:#mmbr_awrn_my_groups_courses_info#:#Sono elencati tutti i membri di gruppi o corsi dell'attuale utente. mmbr#:#mmbr_btn_mail_selected_users#:#Invia mail -mmbr#:#mmbr_info_delete_sure_unsubscribe#:#Are you sure you want to unsubscribe from the following objects?###07 02 2020 new variable -mmbr#:#mmbr_memberships#:#Memberships###29 07 2022 new variable +mmbr#:#mmbr_info_delete_sure_unsubscribe#:#Sei sicuro di voler annullare l'iscrizione ai seguenti oggetti? +mmbr#:#mmbr_memberships#:#Memberships mmbr#:#mmbr_selected_users#:#Seleziona partecipanti -mmbr#:#mmbr_unsubscribed_from_objs#:#You have been unsubscribed from the selected objects.###07 02 2020 new variable -mme#:#add_languages#:#Add Language -mme#:#additional_langs#:#Additional Languages -mme#:#button_save#:#Save -mme#:#component_not_active#:#Component is not activated. -mme#:#confirm_move#:#Would you like to move this item to Top Items?###29 07 2022 new variable -mme#:#deactived_by_configuration#:#Deactivated by configuration###29 10 2025 new variable -mme#:#edit_sub_tems#:#Edit Entries###29 10 2025 new variable -mme#:#err_uri_not_valid#:#Please provide a valid URL###29 07 2022 new variable -mme#:#field_external#:#External Link -mme#:#field_external_info#:#Link will be opnened in a separate Window. -mme#:#field_ref_id#:#ILIAS Reference-ID -mme#:#field_ref_id_info#:#The Reference-ID of the desired ILIAS-Object from the Repository, you find the Reference-ID in the URL of a object (...?ref_id=123) +mmbr#:#mmbr_unsubscribed_from_objs#:#Sei stato cancellato dagli oggetti selezionati. +mme#:#add_languages#:#Aggiungi lingua +mme#:#additional_langs#:#Lingue aggiuntive +mme#:#button_save#:#Salva +mme#:#component_not_active#:#Il componente non è attivato. +mme#:#confirm_move#:#Vuoi rimuovere gli oggetti selezionati dagli oggetti preferiti? +mme#:#deactived_by_configuration#:#Deactivated by configuration###28 11 2025 new variable +mme#:#edit_sub_tems#:#Edit Entries###28 11 2025 new variable +mme#:#err_uri_not_valid#:#Inserisci un URL valido +mme#:#field_external#:#Link esterno +mme#:#field_external_info#:#Il link verrà aperto in una finestra separata. +mme#:#field_ref_id#:#ID di riferimento ILIAS +mme#:#field_ref_id_info#:#L'ID di riferimento dell'oggetto ILIAS desiderato dal repository, l'ID di riferimento si trova nell'URL di un oggetto (...?ref_id=123) mme#:#field_url#:#URL -mme#:#field_url_info#:#Link to the desired website, lead by http(s):// -mme#:#flush#:#Remove Lost Items###29 07 2022 new variable -mme#:#item_must_be_always_active#:#Item must be active. -mme#:#item_updated#:#Item stored###29 10 2025 new variable -mme#:#main#:#Main Menu -mme#:#mm_translation_lang#:#Language -mme#:#mm_translation_trans#:#Translation -mme#:#move_to_item#:#Move to Items###29 07 2022 new variable -mme#:#move_to_top_item#:#Move to Top Items###29 07 2022 new variable -mme#:#msg_languages_added#:#Added languages -mme#:#msg_moved#:#Item successfully moved###29 07 2022 new variable -mme#:#msg_not_changed#:#The following entries could not be changed: %s###29 10 2025 new variable -mme#:#msg_not_moved#:#Item could not be moved, please select a valid parent.###29 07 2022 new variable -mme#:#msg_ref_id_not_callable#:#This reference ID cannot be used by Main-Menu. Only targets in the magazine are supported.###26 08 2024 new variable -mme#:#msg_restore_confirm#:#All Custom Items and Translations will be deleted, all Standard items will be reset to factory default. All customization will be lost.###07 02 2020 new variable -mme#:#msg_restored#:#Main Menu completely reset###07 02 2020 new variable -mme#:#msg_subitem_deleted#:#Item deleted. -mme#:#msg_subitem_flushed#:#Lost Items removed.###29 07 2022 new variable -mme#:#msg_success#:#Successfully stored###29 10 2025 new variable -mme#:#msg_topitem_deleted#:#Item deleted. -mme#:#msg_translations_deleted#:#Translations deleted###07 02 2020 new variable -mme#:#msg_translations_saved#:#Translations saved -mme#:#restore#:#Reset Main Menu###07 02 2020 new variable -mme#:#select_parent#:#Select Parent###29 07 2022 new variable -mme#:#sub_actions#:#Actions -mme#:#sub_active#:#Active -mme#:#sub_active_byline#:#Activate this Item for all users. -mme#:#sub_global_roles#:#Global Roles###29 07 2022 new variable -mme#:#sub_icon#:#Icon###07 02 2020 new variable -mme#:#sub_icon_byline#:#Upload a custom icon for this Item. Please note that the SVG-Icons will be inverted.###07 02 2020 new variable -mme#:#sub_parent#:#Top Item -mme#:#sub_position#:#Position -mme#:#sub_provider#:#Provider -mme#:#sub_role_based_visibility#:#Visibility for roles###29 07 2022 new variable -mme#:#sub_role_based_visibility_byline#:#Choose global roles which can see this item. If not activated, the item is always shown.###29 07 2022 new variable -mme#:#sub_status#:#Status -mme#:#sub_title#:#Title -mme#:#sub_title_default#:#Title (Default Language) -mme#:#sub_title_default_byline#:#Other Translations can be added with the Translation Action after. -mme#:#sub_type#:#Type -mme#:#sub_type_byline#:#Specific type for the Item additional configuration may be needed. -mme#:#subitem#:#Subitem###29 10 2025 new variable -mme#:#subitem_add#:#Add Item -mme#:#subitem_confirm_delete#:#Do you really want to delete the following Item? -mme#:#subitem_delete#:#Delete -mme#:#subitem_edit#:#Edit -mme#:#subitem_translate#:#Translate -mme#:#subtab_subitems#:#Items -mme#:#subtab_topitems#:#Top Items -mme#:#tab_back#:#Back -mme#:#table_show_inactive#:#Show inactive -mme#:#topitem_actions#:#Actions -mme#:#topitem_active#:#Active -mme#:#topitem_active_byline#:#Activate this Top Item for all users. -mme#:#topitem_add#:#Add Top Item -mme#:#topitem_confirm_delete#:#Do you really want to delete the following Item? -mme#:#topitem_delete#:#Delete -mme#:#topitem_edit#:#Edit -mme#:#topitem_icon#:#Icon###07 02 2020 new variable -mme#:#topitem_icon_byline#:#Upload a custom icon for this Item. Please note that the SVG-Icons will be inverted.###07 02 2020 new variable -mme#:#topitem_position#:#Position -mme#:#topitem_provider#:#Provider -mme#:#topitem_subentries#:#Items -mme#:#topitem_title#:#Title -mme#:#topitem_title_default#:#Title (Default Language) -mme#:#topitem_title_default_byline#:#Other Translations can be added with the Translation Action after. -mme#:#topitem_translate#:#Translate -mme#:#topitem_type#:#Type -mme#:#topitem_type_byline#:#Top Items can be links directly or can contain Items. +mme#:#field_url_info#:#Link al sito web desiderato, guidato da http(s):// +mme#:#flush#:#Rimuovi oggetti persi +mme#:#item_must_be_always_active#:#L'articolo deve essere attivo. +mme#:#item_updated#:#Item stored###28 11 2025 new variable +mme#:#main#:#Menu principale +mme#:#mm_translation_lang#:#Lingua +mme#:#mm_translation_trans#:#Traduzione +mme#:#move_to_item#:#Sposta oggetti +mme#:#move_to_top_item#:#Sposta negli oggetti preferiti +mme#:#msg_languages_added#:#Lingue aggiunte +mme#:#msg_moved#:#Oggetto spostato correttamente +mme#:#msg_not_changed#:#The following entries could not be changed: %s###28 11 2025 new variable +mme#:#msg_not_moved#:#L'oggetto non può essere spostato, seleziona una cartella madre valida. +mme#:#msg_ref_id_not_callable#:#This reference ID cannot be used by Main-Menu. Only targets in the magazine are supported.###28 11 2023 new variable +mme#:#msg_restore_confirm#:#Tutti gli articoli personalizzati e le traduzioni verranno eliminati, tutti gli articoli standard verranno ripristinati alle impostazioni di fabbrica. Tutta la personalizzazione andrà persa. +mme#:#msg_restored#:#Menu principale reimpostato +mme#:#msg_subitem_deleted#:#Oggetto cancellato. +mme#:#msg_subitem_flushed#:#Oggetti persi cancellati. +mme#:#msg_success#:#Successfully stored###28 11 2025 new variable +mme#:#msg_topitem_deleted#:#Oggetto cancellato. +mme#:#msg_translations_deleted#:#Traduzioni cancellate +mme#:#msg_translations_saved#:#Traduzioni salvate +mme#:#restore#:#Ripristina menu principale +mme#:#select_parent#:#Seleziona cartella madre +mme#:#sub_actions#:#Azioni +mme#:#sub_active#:#Attivo +mme#:#sub_active_byline#:#Attiva questo oggetto per tutti gli utenti. +mme#:#sub_global_roles#:#Ruoli globali +mme#:#sub_icon#:#Icona +mme#:#sub_icon_byline#:#Carica un'icona personalizzata per questo articolo. Si prega di notare che le icone SVG saranno invertite. +mme#:#sub_parent#:#Oggetti preferiti +mme#:#sub_position#:#Posizione +mme#:#sub_provider#:#Fornitore +mme#:#sub_role_based_visibility#:#Visibilità dei ruoli +mme#:#sub_role_based_visibility_byline#:#Scegli i ruoli globali che possono visualizzare questo oggetto. Se non attivo, l'oggetto sarà sempre visibile. +mme#:#sub_status#:#Stato +mme#:#sub_title#:#Titolo +mme#:#sub_title_default#:#Titolo (lingua di default) +mme#:#sub_title_default_byline#:#Altre traduzioni possono essere aggiunte con l'azione Traduci dopo. +mme#:#sub_type#:#Tipo +mme#:#sub_type_byline#:#Potrebbe essere necessario un tipo specifico per la configurazione aggiuntiva dell'articolo. +mme#:#subitem#:#Subitem###28 11 2025 new variable +mme#:#subitem_add#:#Aggiungi oggetto +mme#:#subitem_confirm_delete#:#Vuoi veramente cancellare il seguente oggetto? +mme#:#subitem_delete#:#Elimina +mme#:#subitem_edit#:#Modifica +mme#:#subitem_translate#:#Traduci +mme#:#subtab_subitems#:#Oggetti +mme#:#subtab_topitems#:#Oggetti preferiti +mme#:#tab_back#:#Indietro +mme#:#table_show_inactive#:#Mostra inattivi +mme#:#topitem_actions#:#Azioni +mme#:#topitem_active#:#Attivo +mme#:#topitem_active_byline#:#Attiva questo oggetto principale per tutti gli utenti. +mme#:#topitem_add#:#Aggiungi oggetto preferito +mme#:#topitem_confirm_delete#:#Vuoi veramente cancellare il seguente oggetto? +mme#:#topitem_delete#:#Elimina +mme#:#topitem_edit#:#Modifica +mme#:#topitem_icon#:#Icona +mme#:#topitem_icon_byline#:#Le icone SVG caricate vengono visualizzate invertite. +mme#:#topitem_position#:#Posizione +mme#:#topitem_provider#:#Fornitore +mme#:#topitem_subentries#:#Oggetti +mme#:#topitem_title#:#Titolo +mme#:#topitem_title_default#:#Titolo (lingua predefinita) +mme#:#topitem_title_default_byline#:#Altre traduzioni possono essere aggiunte con l'azione "Traduci" dopo. +mme#:#topitem_translate#:#Traduci +mme#:#topitem_type#:#Tipo +mme#:#topitem_type_byline#:#Gli articoli principali possono essere collegati direttamente come link o possono contenere ulteriori articoli. mme#:#topitem_type_link#:#Link -mme#:#topitem_type_parent#:#Top Item -mme#:#type_complex#:#Complex +mme#:#topitem_type_parent#:#Articolo preferito +mme#:#type_complex#:#Complesso mme#:#type_link#:#Link -mme#:#type_link_list#:#Link List -mme#:#type_lost#:#Lost###07 02 2020 new variable -mme#:#type_repository_link#:#Repository-Link -mme#:#type_separator#:#Separator -mme#:#type_separator_info#:#The title of this item will be displayed in a grey banner. If you do not enter any title, a simple line will be shown.###07 02 2020 new variable +mme#:#type_link_list#:#Elenco dei link +mme#:#type_lost#:#Perduto +mme#:#type_repository_link#:#Link del repository +mme#:#type_separator#:#Separatore +mme#:#type_separator_info#:#Il titolo di questo oggetto verrà visualizzato in un banner grigio. Se non si inserisce alcun titolo, verrà visualizzata una linea semplice. mme#:#type_top_link_item#:#Link -mme#:#type_top_parent_item#:#Container -mme#:#unable_to_render#:#Unable to show '%s' in '%s'.###26 08 2024 new variable -mob#:#mob_choose_from_pool#:#Choose from Media Pool###29 07 2022 new variable -mob#:#mob_copyright#:#Copyright###29 10 2025 new variable -mob#:#mob_copyright_icon#:#Copyright Icon###29 10 2025 new variable -mob#:#mob_external_url#:#External URL###29 07 2022 new variable -mob#:#mob_extract_preview_image#:#Extract Preview Image###26 08 2024 new variable +mme#:#type_top_parent_item#:#Contenitore +mme#:#unable_to_render#:#Unable to show '%s' in '%s'.###18 06 2024 new variable +mob#:#mob_choose_from_pool#:#Scegli dal Media Pool +mob#:#mob_copyright#:#Copyright###28 11 2025 new variable +mob#:#mob_copyright_icon#:#Copyright Icon###28 11 2025 new variable +mob#:#mob_external_url#:#URL esterno +mob#:#mob_extract_preview_image#:#Extract Preview Image###30 04 2024 new variable mob#:#mob_file#:#File mob#:#mob_file_could_not_be_uploaded#:#Il file non può essere caricato. mob#:#mob_general#:#Generale -mob#:#mob_image_extracted#:#Image has been extracted.###26 08 2024 new variable -mob#:#mob_internal_usages_in_object#:#Page Usages###29 10 2025 new variable +mob#:#mob_image_extracted#:#Image has been extracted.###30 04 2024 new variable +mob#:#mob_internal_usages_in_object#:#Page Usages###28 11 2025 new variable mob#:#mob_language#:#Lingua -mob#:#mob_last_update#:#Last Update###29 10 2025 new variable -mob#:#mob_media#:#Media###29 10 2025 new variable -mob#:#mob_media_objects_overview#:#Media Objects on Pages###29 10 2025 new variable -mob#:#mob_mime_type_not_allowed#:#The following mime types are not allowed at the destination.###29 07 2022 new variable +mob#:#mob_last_update#:#Last Update###28 11 2025 new variable +mob#:#mob_media#:#Media###28 11 2025 new variable +mob#:#mob_media_objects_overview#:#Media Objects on Pages###28 11 2025 new variable +mob#:#mob_mime_type_not_allowed#:#The following mime types are not allowed at the destination.###31 03 2023 new variable mob#:#mob_multi_srt_files#:#File SRT -mob#:#mob_no_extraction_possible#:#Sorry, it was not able to extract an image from the file.###26 08 2024 new variable -mob#:#mob_no_fixed_size_map_editing#:#Please define a fixed size for your image before using map areas. If your image is scaled by content style or other CSS rules, your map areas will not fit anymore. +mob#:#mob_no_extraction_possible#:#Sorry, it was not able to extract an image from the file.###30 04 2024 new variable +mob#:#mob_no_fixed_size_map_editing#:#Si prega di definire una dimensione fissa per l'immagine prima di utilizzare le aree della mappa. Se l'immagine viene ridimensionata in base allo stile del contenuto o ad altre regole CSS, le aree della mappa non si adatteranno più. mob#:#mob_object#:#Oggetto -mob#:#mob_please_select_pool#:#Bitte wählen Sie einen Medienpool aus.###26 08 2024 new variable -mob#:#mob_preview_picture#:#Preview Picture###26 08 2024 new variable +mob#:#mob_please_select_pool#:#Bitte wählen Sie einen Medienpool aus.###31 03 2023 new variable +mob#:#mob_preview_picture#:#Preview Picture###30 04 2024 new variable mob#:#mob_really_delete_srt#:#Vuoi davvero eliminare i seguenti file srt? -mob#:#mob_second#:#Second###26 08 2024 new variable -mob#:#mob_srt_files_deleted#:#I sottotitoli dei file sono stati eliminati. -mob#:#mob_srt_not_allowed#:#Files with a .srt suffix are currently not allowed to be uploaded. If you would like to use srt files, contact your system administrator.###26 08 2024 new variable -mob#:#mob_subtitle_file#:#Sottotitoli file -mob#:#mob_subtitle_files#:#Sottotitoli file +mob#:#mob_second#:#Second###30 04 2024 new variable +mob#:#mob_srt_files_deleted#:#I file dei sottotitoli sono stati eliminati. +mob#:#mob_srt_not_allowed#:#Files with a .srt suffix are currently not allowed to be uploaded. If you would like to use srt files, contact your system administrator.###31 03 2023 new variable +mob#:#mob_subtitle_file#:#File dei sottotitoli +mob#:#mob_subtitle_files#:#File dei sottotitoli mob#:#mob_subtitles#:#Sottotitoli -mob#:#mob_type_not_supported#:#Mime type not supported:###26 08 2024 new variable -mob#:#mob_upload_file#:#Upload File###29 07 2022 new variable +mob#:#mob_type_not_supported#:#Mime type not supported:###31 03 2023 new variable +mob#:#mob_upload_file#:#Carica file mob#:#mob_upload_multi_srt#:#Carica come ZIP mob#:#mob_upload_multi_srt_howto#:#Il file. zip non deve contenere alcuna sottodirectory, tutti i file. srt dovrebbero trovarsi al livello superiore. I nomi dei file dovrebbero terminare con "_&lt;codice lang&gt;.srt" dove il codice lang è per esempio "en", "it", "de". -mob#:#mob_url#:#URL###29 07 2022 new variable -mob#:#mob_url_info#:#External resource URL, e.g. Youtube or Vimeo URL.###29 07 2022 new variable -mob#:#mob_url_info1#:#External resource URL, allowed suffixes are:###26 08 2024 new variable -mob#:#mob_url_info_video#:#You may also refer to a Youtube or Vimeo URL.###26 08 2024 new variable -mob#:#mob_usages_in_media_pools#:#Media Pool Usages###29 10 2025 new variable -mob#:#mob_usages_in_other_objects#:#Other Usages###29 10 2025 new variable -mst#:#mst_cert_issued_on#:#Issued On###07 02 2020 new variable +mob#:#mob_url#:#URL +mob#:#mob_url_info#:#URL della risorsa esterna, ad esempio URL Youtube o Vimeo. +mob#:#mob_url_info1#:#External resource URL, allowed suffixes are:###31 03 2023 new variable +mob#:#mob_url_info_video#:#You may also refer to a Youtube or Vimeo URL.###31 03 2023 new variable +mob#:#mob_usages_in_media_pools#:#Media Pool Usages###28 11 2025 new variable +mob#:#mob_usages_in_other_objects#:#Other Usages###28 11 2025 new variable +mst#:#mst_cert_issued_on#:#Rilasciato il mst#:#mst_courses_of#:#Iscrizioni di %s -mst#:#mst_download_certificate#:#Download Certificate###07 02 2020 new variable -mst#:#mst_list_certificates#:#Certificates###07 02 2020 new variable -mst#:#mst_list_competences#:#Competences###07 02 2020 new variable +mst#:#mst_download_certificate#:#Scarica il certificato +mst#:#mst_list_certificates#:#Certificati +mst#:#mst_list_competences#:#Competenze mst#:#mst_list_courses#:#Iscrizioni mst#:#mst_list_users#:#Lista staff mst#:#mst_memb_status_registered#:#Registrati mst#:#mst_memb_status_requested#:#Richiesti -mst#:#mst_memb_status_waitinglist#:#Lista di attesta +mst#:#mst_memb_status_waitinglist#:#Lista di attesa mst#:#mst_my_staff#:#Staff mst#:#mst_opt_all#:#Tutte mst#:#mst_please_select_course#:#Si prega di selezionare un corso. -mst#:#mst_profile_fulfilled#:#Not met, yet###07 02 2020 new variable -mst#:#mst_profile_not_fulfilled#:#Fulfilled###07 02 2020 new variable +mst#:#mst_profile_fulfilled#:#Profilo non ancora completo +mst#:#mst_profile_not_fulfilled#:#Realizzato mst#:#mst_select_course#:#Seleziona corso mst#:#mst_show_courses#:#Iscrizioni -news#:#lso_news_online_title#:#A new learning sequence object is online!###07 02 2020 new variable -news#:#lso_news_online_txt#:#A new object for your learning sequence was just published.###07 02 2020 new variable -news#:#new_test_online#:#Il test è stato impostato online. -news#:#news_1_file_created#:#Un File è stato aggiunto. -news#:#news_1_file_updated#:#Un File è stato aggiornato. -news#:#news_1_postings#:#One post has been added.###26 08 2024 new variable +news#:#lso_news_online_title#:#Un nuovo oggetto sequenza di apprendimento è online! +news#:#lso_news_online_txt#:#È stato appena pubblicato un nuovo oggetto per la sequenza di apprendimento. +news#:#new_test_online#:#Il test è ora online. +news#:#news_1_file_created#:#Un file è stato aggiunto. +news#:#news_1_file_updated#:#Un file è stato aggiornato. +news#:#news_1_postings#:#Un post è stato aggiunto. news#:#news_add_news#:#Aggiungi notizie -news#:#news_all_items#:#Tutti gli oggetti +news#:#news_all_items#:#Notizie per tutti gli articoli preferiti news#:#news_allow_longer_periods#:#Permetti periodi più lunghi -news#:#news_allow_longer_periods_info#:#Gli utenti posso scegliere periodi di News, sul proprio Personal Desktop, più lunghi. +news#:#news_allow_longer_periods_info#:#Gli utenti posso scegliere periodi di News, sul proprio Desktop Personale, più lunghi. news#:#news_allow_shorter_periods#:#Permetti periodi più corti -news#:#news_allow_shorter_periods_info#:#Gli utenti posso scegliere periodi di News, sul proprio Personal Desktop, più corti. +news#:#news_allow_shorter_periods_info#:#Gli utenti posso scegliere periodi di News, sul proprio Desktop Personale, più corti. news#:#news_attached_to#:#Assegnato a news#:#news_block_information#:#Il blocco delle <b>News</b> mostra cronologicamente l'elenco di tutte le news che sono relazionate ai <b>Contenuti personali</b> che hai selezionato nel Desktop Personale. news#:#news_block_news_for_context#:#Notizie -news#:#news_cache#:#News Cache (Minuti) -news#:#news_cache_info#:#Update news blocks all x minutes. '0' means everytime. Higher values improve performance, but news may link to non-accessible items. -news#:#news_default_visibility#:#Accesso di default +news#:#news_cache#:#Cache delle notizie (Minuti) +news#:#news_cache_info#:#Aggiorna notizie blocca tutti i x minuti. '0' significa ogni volta. Valori più alti migliorano le prestazioni, ma le notizie potrebbero essere collegate ad elementi non accessibili. +news#:#news_default_visibility#:#Accesso predefinito news#:#news_edit_news_settings#:#Impostazioni di modifica -news#:#news_enable_internal_news#:#Abilita le News interne +news#:#news_enable_internal_news#:#Abilita le notizie interne news#:#news_enable_internal_news_info#:#Attiva nuovi blocchi di news per Categorie, Corsi, Gruppi e altri oggetti. Gli utenti sottoscrivono le news e tali news sono presenti nel Desktop Personale. news#:#news_enable_internal_rss#:#Abilita RSS per News Interne news#:#news_enable_internal_rss_info#:#Permette di pubblicare nuovi oggetti via RSS. Questi oggetti saranno accessibili, fuori dal sistema, senza autenticazione. -news#:#news_enable_private_feed#:#Abilita Newsfeed privato -news#:#news_enable_private_feed_info#:#se questa opzione è abilitata, news pubbliche e private saranno ottenute via feed RSS personale, fuori da ILIAS. Autenticazione è fornita via password. -news#:#news_feed_url#:#URL Feed +news#:#news_enable_private_feed#:#Abilita newsfeed privato +news#:#news_enable_private_feed_info#:#Se questa opzione è abilitata, news pubbliche e private saranno ottenute via feed RSS personale, fuori da ILIAS. Autenticazione è fornita via password. +news#:#news_feed_url#:#Feed URL news#:#news_feed_url_for#:#Feed URL per '%s' news#:#news_first_letter_of_word_notification#:#B news#:#news_get_feed_info#:#Questo è l'URL dei tuoi feed personali. Questo feed contiene tutte le notizie che sono state definite come pubbliche dagli autori. Questo feed non è protetto da nessun misura di autentificazione. @@ -12943,11 +12934,11 @@ news#:#news_inactive_private_feed_info#:#Il tuo feed privato di notizie è disat news#:#news_internal_news#:#News interne news#:#news_keep_minimal_x_items#:#Mantenere per gli oggetti news#:#news_keep_minimal_x_items_info#:#Se il valore è > 0, questo è il numero di oggetti compresi nel feed, solo se sono più vecchi della loro durata di default. -news#:#news_loading_news#:#Le News vengono caricate... +news#:#news_loading_news#:#Caricamento delle notizie... news#:#news_media#:#Media File -news#:#news_new_comments#:#New comments -news#:#news_new_reactions#:#New reactions -news#:#news_news_block#:#News Block +news#:#news_new_comments#:#Nuovo commento +news#:#news_new_reactions#:#Nuove reazioni +news#:#news_news_block#:#Nuovo blocco news#:#news_news_item_content#:#Testo news#:#news_news_item_content_long#:#Testo lungo news#:#news_news_item_content_long_info#:#Questo testo non sarà pubblicato via RSS. @@ -12971,9 +12962,9 @@ news#:#news_period_1_month#:#Ultimo mese news#:#news_period_1_week#:#Ultima settimana news#:#news_period_1_year#:#Ultimo anno news#:#news_period_x_days#:#Ultimi %s giorni -news#:#news_period_x_months#:#Ultimi %s Mesi -news#:#news_period_x_weeks#:#Ultimi %s Settimane -news#:#news_public_feed#:#Extra Feed URL +news#:#news_period_x_months#:#Ultimi %s mesi +news#:#news_period_x_weeks#:#Ultimi %s settimane +news#:#news_public_feed#:#URL del feed aggiuntivo news#:#news_public_feed_info#:#Se questa opzione è attivata verrà creata una propria Newsfeed-URL per questo oggetto. news#:#news_really_delete_news#:#Vuoi davvero eliminare questa nuova voce? news#:#news_rss#:#RSS @@ -12981,16 +12972,16 @@ news#:#news_rss_period#:#Periodo temporale del RSS news#:#news_rss_title_format#:#Formato di titolo RSS news#:#news_rss_title_format_news_obj#:#Titolo della news (titolo dell'oggetto) news#:#news_rss_title_format_obj_news#:#Titolo dell'oggetto - Titolo della news -news#:#news_settings#:#Impostazione delle News +news#:#news_settings#:#Impostazione delle notizie news#:#news_sorry_not_accessible_anymore#:#Spiacenti, questa voce non è più accessibile. news#:#news_time_period#:#Periodo di tempo news#:#news_timline_add_entries_info#:#Non ci sono notizie disponibili. Clicca su "Aggiungi" per creare nuove voci. -news#:#news_timline_no_entries#:#No news have been found.###26 08 2024 new variable +news#:#news_timline_no_entries#:#No news have been found.###30 04 2024 new variable news#:#news_visibility_public#:#Pubblico news#:#news_visibility_users#:#Utenti collegati -news#:#news_x_files_created#:#% dei files è stato aggiunto. -news#:#news_x_files_updated#:#% dei files è stato aggiornato. -news#:#news_x_postings#:#% dei post è stato aggiunto. +news#:#news_x_files_created#:#%s file sono stati aggiunti. +news#:#news_x_files_updated#:#%s file sono stati aggiornati. +news#:#news_x_postings#:#%s post sono stati aggiunti. news#:#passwd_equals_ilpasswd#:#Per favore, inserisci una password diversa da quella di ILIAS. news#:#priv_feed_disabled#:#Il News Feed privato è stato disabilitato. news#:#priv_feed_settings#:#Impostazioni del Newsfeed privato @@ -13000,180 +12991,183 @@ note#:#note_comment_notification_salutation#:#Ciao %s, note#:#note_comment_notification_subject#:#Un commento è stato aggiunto a "%s" note#:#note_comment_notification_subjectc#:#Un commento è stato modificato in "%s" note#:#note_comment_notification_user_has_written#:#%s ha scritto: -note#:#note_comments_notification#:#General notification about all comments###07 02 2020 new variable -note#:#note_comments_notification_info#:#Comma separated list of accounts that are notified for each comment###07 02 2020 new variable -note#:#note_enable_comments#:#Enable Comments###07 02 2020 new variable -note#:#note_enable_comments_del_tutor#:#Any Comment may be deleted by tutors###07 02 2020 new variable -note#:#note_enable_comments_del_tutor_info#:#User with "Edit Settings" permission for an object can delete any comment made in this object.###07 02 2020 new variable -note#:#note_enable_comments_del_user#:#Comments may be deleted by their authors###07 02 2020 new variable -note#:#note_enable_comments_del_user_info#:#Comments can be deleted by the person who created them.###26 08 2024 new variable -note#:#note_enable_comments_export_info#:#This option enables comments export for content objects like portfolio, blog and wiki.###29 07 2022 new variable -note#:#note_enable_notes#:#Enable Notes###07 02 2020 new variable -note#:#note_html_export_include_comments#:#Should comments be included in the export?###29 07 2022 new variable +note#:#note_comments_notification#:#Notifica generale su tutti i commenti +note#:#note_comments_notification_info#:#Elenco separato da virgole degli account che vengono notificati per ogni commento +note#:#note_enable_comments#:#Abilitare i commenti +note#:#note_enable_comments_del_tutor#:#Qualsiasi commento può essere cancellato dai tutor +note#:#note_enable_comments_del_tutor_info#:#L'utente con il permesso "Edit Settings" per un oggetto può cancellare qualsiasi commento fatto in questo oggetto. +note#:#note_enable_comments_del_user#:#I commenti possono essere cancellati dai loro autori +note#:#note_enable_comments_del_user_info#:#Comments can be deleted by the person who created them.###30 04 2024 new variable +note#:#note_enable_comments_export_info#:#This option enables comments export for content objects like portfolio, blog and wiki. +note#:#note_enable_notes#:#Abilitare le note +note#:#note_html_export_include_comments#:#I commenti devono essere inclusi nelle esportazioni? notes#:#comments_feature_currently_not_activated_for_object#:#La funzione di commento non è al momento attivata per questa risorsa. notes#:#note_add_comment#:#Aggiungi commento -notes#:#note_add_message#:#Add Message###26 08 2024 new variable +notes#:#note_add_message#:#Add Message###30 04 2024 new variable notes#:#note_add_note#:#Aggiungi nota notes#:#note_content_removed#:#Il contenuto è stato rimosso. -notes#:#note_text#:#Text###29 07 2022 new variable +notes#:#note_text#:#Text###31 03 2023 new variable notes#:#note_update_comment#:#Aggiorna il commento -notes#:#note_update_message#:#Update Message###26 08 2024 new variable +notes#:#note_update_message#:#Update Message###30 04 2024 new variable notes#:#note_update_note#:#Aggiorna la nota -notes#:#note_without_object#:#Without reference###29 07 2022 new variable -notes#:#notes_activate_comments#:#Attiva Commenti Pubblici +notes#:#note_without_object#:#Senza riferimento +notes#:#notes_activate_comments#:#Attiva commenti pubblici notes#:#notes_add_comment#:#Aggiungi commento -notes#:#notes_add_edit_comment#:#Add/Edit Comment -notes#:#notes_add_edit_message#:#Add/Edit Message###26 08 2024 new variable -notes#:#notes_add_edit_note#:#Add/Edit Note###26 08 2024 new variable +notes#:#notes_add_edit_comment#:#Aggiungi/Modifica Commento +notes#:#notes_add_edit_message#:#Add/Edit Message###30 04 2024 new variable +notes#:#notes_add_edit_note#:#Add/Edit Note###30 04 2024 new variable notes#:#notes_all_comments#:#Tutti i commenti notes#:#notes_comment#:#Commento notes#:#notes_comment_deleted#:#Il commento è stato eliminato. notes#:#notes_comments#:#Commenti notes#:#notes_comments_deleted#:#I commenti sono stati eliminati. notes#:#notes_deactivate_comments#:#Disattiva commenti pubblici -notes#:#notes_delete_comment#:#Do you really want to delete this comment?###29 07 2022 new variable -notes#:#notes_delete_message#:#Do you really want to delete this message?###26 08 2024 new variable -notes#:#notes_delete_note#:#Do you really want to delete this note?###29 07 2022 new variable +notes#:#notes_delete_comment#:#Do you really want to delete this comment?###31 03 2023 new variable +notes#:#notes_delete_message#:#Do you really want to delete this message?###30 04 2024 new variable +notes#:#notes_delete_note#:#Do you really want to delete this note?###31 03 2023 new variable notes#:#notes_hide_comments#:#Nascondi commenti -notes#:#notes_html_export#:#HTML Export###29 07 2022 new variable -notes#:#notes_latest_comment#:#Latest Comment -notes#:#notes_latest_message#:#Latest Message###26 08 2024 new variable -notes#:#notes_message_author_counterpart#:#Respondent###26 08 2024 new variable -notes#:#notes_message_author_you#:#You###26 08 2024 new variable -notes#:#notes_messages#:#Messages###26 08 2024 new variable -notes#:#notes_my_comments#:#Miei commenti +notes#:#notes_html_export#:#HTML Export###31 03 2023 new variable +notes#:#notes_latest_comment#:#Ultimo commento +notes#:#notes_latest_message#:#Latest Message###30 04 2024 new variable +notes#:#notes_message_author_counterpart#:#Respondent###30 04 2024 new variable +notes#:#notes_message_author_you#:#You###30 04 2024 new variable +notes#:#notes_messages#:#Messages###30 04 2024 new variable +notes#:#notes_my_comments#:#I miei commenti notes#:#notes_no_comments#:#Nessun commento è stato ancora pubblicato. -notes#:#notes_no_comments_found#:#No comments found that match your seach criteria.###29 07 2022 new variable -notes#:#notes_no_messages#:#No messages have been attached yet.###26 08 2024 new variable -notes#:#notes_no_messages_found#:#No messages found that match your seach criteria.###26 08 2024 new variable -notes#:#notes_no_notes#:#No notes have been attached yet.###29 07 2022 new variable -notes#:#notes_no_notes_found#:#No notes found that match your seach criteria.###29 07 2022 new variable +notes#:#notes_no_comments_found#:#No comments found that match your seach criteria.###31 03 2023 new variable +notes#:#notes_no_messages#:#No messages have been attached yet.###30 04 2024 new variable +notes#:#notes_no_messages_found#:#No messages found that match your seach criteria.###30 04 2024 new variable +notes#:#notes_no_notes#:#No notes have been attached yet.###31 03 2023 new variable +notes#:#notes_no_notes_found#:#No notes found that match your seach criteria.###31 03 2023 new variable notes#:#notes_note_deleted#:#La nota è stata cancellata. notes#:#notes_notes_deleted#:#Le note sono state cancellate. -notes#:#notes_origin#:#Origin###29 07 2022 new variable +notes#:#notes_origin#:#Origin###31 03 2023 new variable notes#:#notes_public_comments#:#Commenti pubblici notes#:#notes_show_comments#:#Mostra commenti notes#:#notes_sort_asc#:#Ordinamento ascendente notes#:#notes_sort_desc#:#Ordinamento discendente -notes#:#notes_text#:#Text###29 07 2022 new variable -noti#:#noti_activate_notification#:#Activate Notification -noti#:#noti_deactivate_notification#:#Deactivate Notification -noti#:#noti_notification_activated#:#Notification Activated -noti#:#noti_notification_deactivated#:#Notification Deactivated -notifications#:#push_notification#:#Push Notifications###29 10 2025 new variable -notifications_adm#:#enable_osd#:#Enable Toasts###26 08 2024 new variable -notifications_adm#:#enable_osd_desc#:#If enabled, users are notified by a pop-up about new notifications.###26 08 2024 new variable -notifications_adm#:#enable_push#:#Enable Push Notifications###29 10 2025 new variable -notifications_adm#:#enable_push_desc#:#If enabled, users are notified by push notifications. User can change this behaviour within their user settings.###29 10 2025 new variable -notifications_adm#:#notification_settings#:#Notification Settings###26 08 2024 new variable -notifications_adm#:#osd_error_refresh_interval_too_small#:#The Refresh Interval has to be at least than 3000 miliseconds.###26 08 2024 new variable -notifications_adm#:#osd_interval#:#Refreshinterval###26 08 2024 new variable -notifications_adm#:#osd_interval_desc#:#Polling interval for checking of new notifications in miliseconds. A lower number will notify the user more quickly but increases the number of requests the web server must handle.###26 08 2024 new variable -notifications_adm#:#osd_play_sound#:#Play a Sound###26 08 2024 new variable -notifications_adm#:#osd_play_sound_desc#:#Play a sound when receiving a new notficiation.###26 08 2024 new variable -notifications_adm#:#osd_settings#:#Toasts###26 08 2024 new variable -notifications_adm#:#push_client_already_used#:#Push notifications are already used by another user for this client.###29 10 2025 new variable -notifications_adm#:#push_client_edge_case#:#The Edge Browser might have deactivated notifications without your consent. Enter your browser settings to reactivate them.###29 10 2025 new variable -notifications_adm#:#push_client_inactive#:#Push notifications are disabled for this website. Open your browser settings to activate them.###29 10 2025 new variable -notifications_adm#:#push_client_ios_case#:#If you are using IOS (Iphone, Ipad, Ipod) push notifications for websites are not supported. Create an access via web app to enable them.###29 10 2025 new variable -notifications_adm#:#push_settings#:#Push Notifications###29 10 2025 new variable -notifications_adm#:#push_subscription_successfull#:#Push Notifications activation successful###29 10 2025 new variable -notifications_adm#:#push_subscription_successfull_desc#:#This is a dummy notification to verify the successful activation of push notifications.###29 10 2025 new variable -obj#:#activation_visible_when_disabled#:#Visibilità -obj#:#activation_visible_when_disabled_info#:#Se selezionato il materiale è visibile anche all'esterno delle disponibilità attivate -obj#:#availability_period_changed#:#The availability period for the selected objects has been changed successfully.###26 08 2024 new variable -obj#:#available_languages#:#Available Languages###29 10 2025 new variable -obj#:#cont_filter_empty#:#Please use the filter to see any objects.###07 02 2020 new variable +notes#:#notes_text#:#Text###31 03 2023 new variable +noti#:#noti_activate_notification#:#Attiva notifica +noti#:#noti_deactivate_notification#:#Disattiva notifica +noti#:#noti_notification_activated#:#Notifica attivata +noti#:#noti_notification_deactivated#:#Notifica disattivata +notifications#:#push_notification#:#Push Notifications###28 11 2025 new variable +notifications_adm#:#available_providers#:#Available Providers###28 11 2025 new variable +notifications_adm#:#client_settings#:#Client Settings###28 11 2025 new variable +notifications_adm#:#enable_osd#:#Enable On-Screen Notifications###31 03 2023 new variable +notifications_adm#:#enable_osd_desc#:#If enabled, users are notified by a popup about new notifications.###31 03 2023 new variable +notifications_adm#:#enable_push#:#Enable Push Notifications###28 11 2025 new variable +notifications_adm#:#enable_push_desc#:#If enabled, users are notified by push notifications. User can change this behaviour within their user settings.###28 11 2025 new variable +notifications_adm#:#notification_settings#:#Notification Settings###31 03 2023 new variable +notifications_adm#:#osd_error_refresh_interval_too_small#:#The Refresh Interval has to be at least than 3000 miliseconds.###31 03 2023 new variable +notifications_adm#:#osd_interval#:#Refreshinterval###31 03 2023 new variable +notifications_adm#:#osd_interval_desc#:#Polling interval for checking of new notifications in miliseconds. A lower number will notify the user more quickly but increases the number of requests the web server must handle.###31 03 2023 new variable +notifications_adm#:#osd_play_sound#:#Play a Sound###31 03 2023 new variable +notifications_adm#:#osd_play_sound_desc#:#Play a sound when receiving a new notficiation.###31 03 2023 new variable +notifications_adm#:#osd_settings#:#On-Screen Notifications###31 03 2023 new variable +notifications_adm#:#push_client_already_used#:#Push notifications are already used by another user for this client.###28 11 2025 new variable +notifications_adm#:#push_client_edge_case#:#The Edge Browser might have deactivated notifications without your consent. Enter your browser settings to reactivate them.###28 11 2025 new variable +notifications_adm#:#push_client_inactive#:#Push notifications are disabled for this website. Open your browser settings to activate them.###28 11 2025 new variable +notifications_adm#:#push_client_ios_case#:#If you are using IOS (Iphone, Ipad, Ipod) push notifications for websites are not supported. Create an access via web app to enable them.###28 11 2025 new variable +notifications_adm#:#push_settings#:#Push Notifications###28 11 2025 new variable +notifications_adm#:#push_subscription_successfull#:#Push Notifications activation successful###28 11 2025 new variable +notifications_adm#:#push_subscription_successfull_desc#:#This is a dummy notification to verify the successful activation of push notifications.###28 11 2025 new variable +notifications_adm#:#user_settings#:#User Settings###28 11 2025 new variable +obj#:#activation_visible_when_disabled#:#Visibility###30 04 2024 new variable +obj#:#activation_visible_when_disabled_info#:#The item is visible outside of the selected availability period, but it cannot be opened.###30 04 2024 new variable +obj#:#availability_period_changed#:#The availability period for the selected objects has been changed successfully.###30 04 2024 new variable +obj#:#available_languages#:#Available Languages###28 11 2025 new variable +obj#:#cont_filter_empty#:#Please use the filter to see any objects. obj#:#cont_skll_published#:#Sono state pubblicate tutte le assegnazioni. -obj#:#cont_skll_published_some_not#:#Sono state pubblicate tutte le assegnazioni fornite. Alcuni utenti non disponevano di incarichi di competenza, quindi non potevano essere pubblicate per loro. -obj#:#copy_container_page_no_label#:#Don't Copy Content Page###26 08 2024 new variable -obj#:#copy_container_page_yes_byline#:#The content page and corresponding style settings of the source object will be copied to this object. Pre-existing page elements will be overwritten.###26 08 2024 new variable -obj#:#copy_container_page_yes_label#:#Copy Content Page###26 08 2024 new variable -obj#:#custom_icon#:#Icona personalizzata -obj#:#default_base_lang_not_deletable#:#Neither the base language nor the default language can be deleted.###29 10 2025 new variable -obj#:#edit_availability_period#:#Availability Period###26 08 2024 new variable -obj#:#edit_language#:#Edit Language###29 10 2025 new variable +obj#:#cont_skll_published_some_not#:#Sono state pubblicate tutte le assegnazioni fornite. Alcuni utenti non disponevano di incarichi di competenze, quindi non potevano essere pubblicate per loro. +obj#:#copy_container_page_no_label#:#Don't Copy Content Page###30 04 2024 new variable +obj#:#copy_container_page_yes_byline#:#The content page and corresponding style settings of the source object will be copied to this object. Pre-existing page elements will be overwritten.###30 04 2024 new variable +obj#:#copy_container_page_yes_label#:#Copy Content Page###30 04 2024 new variable +obj#:#custom_icon#:#Custom Icon###30 04 2024 new variable +obj#:#default_base_lang_not_deletable#:#Neither the base language nor the default language can be deleted.###28 11 2025 new variable +obj#:#edit_availability_period#:#Availability Period###30 04 2024 new variable +obj#:#edit_language#:#Edit Language###28 11 2025 new variable obj#:#edit_questions#:#Modifica domande -obj#:#make_default_language#:#Make Default Language###29 10 2025 new variable -obj#:#missing_migration#:#You cannot edit information on this page until all migrations have been run. Please contact your system administrator.###29 10 2025 new variable -obj#:#multiple_reference_deletion_info#:#Further references exist for the following objects.###29 10 2025 new variable -obj#:#multiple_selection#:#Selezione multipla -obj#:#no_objects_selected#:#At least one object needs to be selected.###26 08 2024 new variable +obj#:#make_default_language#:#Make Default Language###28 11 2025 new variable +obj#:#missing_migration#:#You cannot edit information on this page until all migrations have been run. Please contact your system administrator.###28 11 2025 new variable +obj#:#multiple_reference_deletion_info#:#Further references exist for the following objects.###01 04 2025 new variable +obj#:#multiple_selection#:#Multiple Selection###28 11 2025 new variable +obj#:#no_objects_selected#:#At least one object needs to be selected.###30 04 2024 new variable obj#:#obj_activate_content_lang#:#Attiva traduzione per la modifica delle pagine -obj#:#obj_activate_multilang#:#Activate Multilinguality +obj#:#obj_activate_multilang#:#Attiva il multilinguismo obj#:#obj_activation#:#Attivazione obj#:#obj_activation_list_gui#:#Disponibilità -obj#:#obj_add_language#:#Add Language###29 10 2025 new variable +obj#:#obj_add_language#:#Add Language###28 11 2025 new variable obj#:#obj_additional_langs#:#Lingue aggiuntive -obj#:#obj_base_lang#:#Lingua principale -obj#:#obj_conf_delete_lang#:#Do you really want to stop the presentation of title and description in these languages?###26 08 2024 new variable +obj#:#obj_base_lang#:#Master Language###28 11 2025 new variable +obj#:#obj_conf_delete_lang#:#Do you really want to stop the presentation of title and description in these languages?###28 11 2023 new variable obj#:#obj_cont_transl_deactivated#:#La traduzione per la modifica delle pagine è stata disattivata. obj#:#obj_copy_progress#:#Progresso di copia -obj#:#obj_copy_progress_estimate#:#Estimating duration...###29 10 2025 new variable -obj#:#obj_copy_progress_failure#:#Copying failed.###29 10 2025 new variable -obj#:#obj_copy_progress_success#:#Copied successfully.###29 10 2025 new variable -obj#:#obj_copy_progress_to#:#Copying to %s###29 10 2025 new variable +obj#:#obj_copy_progress_estimate#:#Estimating duration...###28 11 2025 new variable +obj#:#obj_copy_progress_failure#:#Copying failed.###28 11 2025 new variable +obj#:#obj_copy_progress_success#:#Copied successfully.###28 11 2025 new variable +obj#:#obj_copy_progress_to#:#Copying to %s###28 11 2025 new variable obj#:#obj_deactivate_content_lang#:#Disattiva traduzione per la modifica delle pagine obj#:#obj_deactivate_content_transl_conf#:#Vuoi davvero disattivare la traduzione per la modifica delle pagine? Verranno conservati solo i contenuti della lingua principale. -obj#:#obj_deactivate_multilang#:#Deactivate Multilinguality -obj#:#obj_deactivate_multilang_conf#:#Do you really want to deactivate multilinguality? Only contents of the master language will be kept. -obj#:#obj_fallback_lang#:#Default Language###29 07 2022 new variable -obj#:#obj_features#:#Features +obj#:#obj_deactivate_multilang#:#Disattiva il multilinguismo +obj#:#obj_deactivate_multilang_conf#:#Vuoi veramente disattivare il multilinguismo? Solo i contenuti nella lingua principale verranno conservati. +obj#:#obj_fallback_lang#:#Lingua predefinita +obj#:#obj_features#:#Caratteristiche aggiuntive obj#:#obj_import_file_error#:#Questo file non può essere importato. Si prega di assicurarsi che questo sia un file valido di esportazione ILIAS (Esporta XML) dello stesso tipo di oggetto. Il nome del file non deve essere modificato dopo l’esportazione. Messaggio di errore: obj#:#obj_insert_into_clipboard#:#Inserisci negli Appunti obj#:#obj_inserted_clipboard#:#Gli oggetti sono stati spostati negli Appunti. -obj#:#obj_master_lang#:#Master Language###29 10 2025 new variable -obj#:#obj_more_translations#:#More Translations -obj#:#obj_multilang_deactivated#:#Multilinguality has been deactivated. -obj#:#obj_multilang_title_descr_only#:#Translation is activated for title and description only. Translation support for Page editing ("Customize Page") needs additional activation. -obj#:#obj_multilinguality#:#Multilinguality +obj#:#obj_master_lang#:#Lingua principale +obj#:#obj_more_translations#:#Altre traduzioni +obj#:#obj_multilang_deactivated#:#Il multilinguismo è stato disattivato. +obj#:#obj_multilang_title_descr_only#:#La traduzione è stata attivata solo per il titolo e la descrizione. La traduzione per le pagine ("Pagine personalizzate") necessita di un'ulteriore attivazione. +obj#:#obj_multilinguality#:#Multilinguismo obj#:#obj_orgunit_positions#:#Controllo accessi per posizioni di unità organizzative obj#:#obj_orgunit_positions_info#:#Se abilitate, le regole di controllo dell'accesso aggiuntive possono essere abilitate da posizioni a unità organizzative. obj#:#obj_permission_settings#:#Impostazioni di autorizzazione obj#:#obj_presentation#:#Presentazione -obj#:#obj_select_base_lang#:#Si prega di selezionare la lingua principale. Il contenuto attuale verrà assegnato alla lingua principale. La lingua principale non può essere cambiata successivamente. -obj#:#obj_select_one_language#:#Please select one language###29 07 2022 new variable -obj#:#obj_set_fallback_lang#:#Set default language###29 07 2022 new variable +obj#:#obj_select_base_lang#:#Please select the base language. The current content will be assigned to the base language. The base language cannot be changed afterwards.###28 11 2025 new variable +obj#:#obj_select_one_language#:#Per favore seleziona una lingua +obj#:#obj_set_fallback_lang#:#Imposta la lingua principale obj#:#obj_settings_for_all_members#:#I membri riceveranno automaticamente la notifica -obj#:#obj_show_header_actions#:#Show Header Actions -obj#:#obj_show_title_and_icon#:#Show Title and Icon +obj#:#obj_show_header_actions#:#Mostra le azioni di intestazione +obj#:#obj_show_title_and_icon#:#Mostra il titolo e l'icona obj#:#obj_target_location#:#Posizione di destinazione -obj#:#obj_tile_image#:#Tile Image -obj#:#obj_tile_image_info#:#The tile image will be used, if the container (course, folder, group, ...) activates the tile view presentation. -obj#:#obj_tool_booking#:#Resources###07 02 2020 new variable -obj#:#obj_tool_booking_info#:#Use the booking pools to book resources.###07 02 2020 new variable -obj#:#obj_tool_ext_mail_subject_prefix#:#Mail Subject Prefix###29 07 2022 new variable -obj#:#obj_tool_ext_mail_subject_prefix_info#:#Enter a short text that is added to the subject line of external mails send to members to make identifying these mails easier.###29 07 2022 new variable +obj#:#obj_tile_image#:#Immagine mattonella +obj#:#obj_tile_image_info#:#L'immagine sara' utilizzata se il contenitore (corso, contesto, gruppo, ...) e' in modalita' mattonelle (tiles). +obj#:#obj_tool_booking#:#Risorse +obj#:#obj_tool_booking_info#:#Utilizza l'archivio di prenotazione per prenotare una risorsa +obj#:#obj_tool_ext_mail_subject_prefix#:#Prefisso dell'oggetto della mail +obj#:#obj_tool_ext_mail_subject_prefix_info#:#Inserisci un breve testo che viene aggiunto all'oggetto delle mail esterne inviate ai membri per facilitare l'identificazione di queste mail. obj#:#obj_tool_setting_badges#:#Badge -obj#:#obj_tool_setting_badges_info#:#If activated badges can be managed. -obj#:#obj_tool_setting_booking#:#Resources###07 02 2020 new variable -obj#:#obj_tool_setting_filter#:#Filter###07 02 2020 new variable -obj#:#obj_tool_setting_filter_empty#:#Show on Empty Filter###07 02 2020 new variable -obj#:#obj_tool_setting_filter_empty_info#:#Show all items while filter is empty.###07 02 2020 new variable -obj#:#obj_tool_setting_filter_info#:#A filter will be displayed in the content tab.###07 02 2020 new variable -obj#:#obj_tool_setting_info_tab#:#Show Info Tab -obj#:#obj_tool_setting_info_tab_info#:#The "Info" tab will be displayed. +obj#:#obj_tool_setting_badges_info#:#Attiva la gestione dei badge e l'assegnazione dei badge ai membri. +obj#:#obj_tool_setting_booking#:#Risorse +obj#:#obj_tool_setting_filter#:#Filtro +obj#:#obj_tool_setting_filter_empty#:#Mostra su filtro vuoto +obj#:#obj_tool_setting_filter_empty_info#:#Mostra tutti gli elementi quando il filtro è vuoto. +obj#:#obj_tool_setting_filter_info#:#Un filtro verrà visualizzato nella scheda del contenuto. +obj#:#obj_tool_setting_info_tab#:#Mostra Info Tab +obj#:#obj_tool_setting_info_tab_info#:#"Info" tab verrà visualizzata. obj#:#obj_tool_setting_skills#:#Competenze obj#:#obj_tool_setting_skills_info#:#Attiva la gestione delle competenze e le competenze assegnate ai membri. obj#:#obj_tool_setting_tag_cloud#:#Tag Cloud -obj#:#obj_tool_setting_tag_cloud_info#:#The "tag cloud" block will be displayed inside the "Content" tab. +obj#:#obj_tool_setting_tag_cloud_info#:#il blocco del "tag cloud" verrà visualizzata nel "Content" tab. obj#:#obj_tool_setting_taxonomies#:#Tassonomie -obj#:#obj_tool_setting_taxonomies_info#:#Taxonomies allow the filtering of objects. They are created in the "Taxonomy" sub-tab in the "Settings" tab.###29 10 2025 new variable +obj#:#obj_tool_setting_taxonomies_info#:#Taxonomies allow the filtering of objects. They are created in the "Taxonomy" sub-tab in the "Settings" tab.###10 12 2024 new variable obj#:#obj_tool_setting_use_news#:#Notizie obj#:#obj_tool_setting_use_news_info#:#Attiva il blocco notizie e/o visualizzazione calendario. obj#:#obj_tool_setting_use_news_open_settings#:#Apri impostazioni obj#:#obj_user_decides_notification#:#I membri deve attivare manualmente le notifiche obj#:#obj_user_not_disable_not#:#I membri non sono autorizzati per disattivare le notifiche -obj#:#online_input_byline#:#The object has been published and can be accessed by anyone with read access. Other access prerequisites or time-based access restrictions may still apply. This settings applies to the object wherever it is used in the repository.###26 08 2024 new variable -obj#:#select_import_type_info#:#The type of the object in the file to be imported cannot be determined automatically. The file was probably renamed. Please select the type of object in the file.###29 10 2025 new variable -obj#:#select_object_type#:#Select Object Type###26 08 2024 new variable +obj#:#online_input_byline#:#The object has been published and can be accessed by anyone with read access. Other access prerequisites or time-based access restrictions may still apply. This settings applies to the object wherever it is used in the repository.###30 04 2024 new variable +obj#:#select_import_type_info#:#The type of the object in the file to be imported cannot be determined automatically. The file was probably renamed. Please select the type of object in the file.###28 11 2025 new variable +obj#:#select_object_type#:#Select Object Type###30 04 2024 new variable obj#:#svy_results#:#Risultati -obj#:#unequal_items_for_availability_period_message#:#You have selected items with different availability periods. Overwrite existing settings below or cancel action to keep current availability periods.###26 08 2024 new variable -obj#:#user_owns_no_objects#:#No Repository Objects Available###26 08 2024 new variable +obj#:#unequal_items_for_availability_period_message#:#You have selected items with different availability periods. Overwrite existing settings below or cancel action to keep current availability periods.###30 04 2024 new variable +obj#:#user_owns_no_objects#:#No Repository Objects Available###30 04 2024 new variable objref#:#objref_custom_title#:#Usa il proprio titolo objref#:#objref_edit_ref#:#Target di riferimento objref#:#objref_edit_title#:#Titolo dell'oggetto -objref#:#objref_failure_target_type#:#Das Ziel des Links muss vom folgendem Typ sein:###07 02 2020 new variable +objref#:#objref_failure_target_type#:#Il target del link deve essere del seguente tipo: objref#:#objref_reuse_title#:#Assumere il titolo del riferimento objref#:#objref_title_settings#:#Titolo del riferimento orgu#:#Staff#:#Staff @@ -13185,26 +13179,26 @@ orgu#:#change_to_employee#:#Passa a dipendente orgu#:#change_to_superior#:#Passa a superiore orgu#:#confirm_deletion_and_assign#:#Elimina e assegna utente orgu#:#confirm_deletion_button#:#Elimina -orgu#:#deassign_user_successful#:#Users have been deasigned successfuly from this role. +orgu#:#deassign_user_successful#:#Gli utenti sono stati deassegnati con successo da questo ruolo orgu#:#edit_translations#:#Titolo e Descrizione orgu#:#employee#:#Dipendente orgu#:#ext_id#:#ID Esterno orgu#:#ext_id_updated#:#L’ID Esterno è stato aggiornato con successo. orgu#:#form_title_org_default_permissions_update#:#Permessi predefiniti -orgu#:#import_failed#:#The import failed. Make sure your file is in the xml format and is has a valid structure. +orgu#:#import_failed#:#L'importazione non è riuscita. Assicurati che il tuo file sia nel formato xml e abbia una struttura valida. orgu#:#import_successful#:#L’importazione è terminata con successo. Creato: %s, modificato/spostato: %s, eliminato: %s. -orgu#:#import_terminated_with_errors#:#The import terminated with errors, some organisational couldn't be created, edited or deleted. +orgu#:#import_terminated_with_errors#:#Durante l'importazione sono stati rilevati errori, orgu#:#import_terminated_with_warnings#:#L’importazione termina con avvisi -orgu#:#import_xml_file#:#Import Datei -orgu#:#local_other_roles#:#Additional Roles %s +orgu#:#import_xml_file#:#Importazione File +orgu#:#local_other_roles#:#Ruoli locali aggiuntivi %s orgu#:#local_staff#:#Dipendenti %s orgu#:#msg_assignment_to_employee_done#:#Assegnazione alla posizione dipendente eseguita orgu#:#msg_confirm_d_ua#:#Vuoi assegnare queste persone alla posizione dipendente delle rispettive unità organizzative? -orgu#:#msg_confirm_deletion#:#Would you really like to delete tho following Position? +orgu#:#msg_confirm_deletion#:#Vuoi davvero cancellare la seguente Posizione? orgu#:#msg_confirm_remove_user#:#Vuoi davvero rimuovere i seguenti utenti da questa posizione %s? orgu#:#msg_deleted#:#Eliminato orgu#:#msg_position_created#:#Posizione creata. -orgu#:#msg_position_delete_fail#:#Position wurde nicht gefunden.###29 10 2025 new variable +orgu#:#msg_position_delete_fail#:#Position wurde nicht gefunden.###28 11 2025 new variable orgu#:#msg_position_updated#:#Posizione aggiornata. orgu#:#msg_success_permission_saved#:#Autorizzazioni salvate. orgu#:#no_assignment#:#Si prega di controllare il proprio File XML. Non c’è alcuna assegnazione utente. @@ -13212,20 +13206,20 @@ orgu#:#no_orgunit#:#Si prega di controllare il proprio File XML. Non c’è alcu orgu#:#no_roles#:#A questo punto non sono presenti ruoli aggiuntivi. orgu#:#not_movable_to_subtree#:#Un’unità organizzativa non può essere spostata nella propria sottostruttura. Questo porterebbe una riproduzione a ciclo continuo. orgu#:#org_op_access_enrolments#:#Visualizza iscrizioni -orgu#:#org_op_access_results#:#Access Results -orgu#:#org_op_create_employee_talk#:#Create talk appointments / edit talk appointments that you have created yourself -orgu#:#org_op_edit_employee_talk#:#Edit Talk appointments -orgu#:#org_op_edit_individual_plan#:#Edit Individual Plan###07 02 2020 new variable +orgu#:#org_op_access_results#:#Accedi ai risultati +orgu#:#org_op_create_employee_talk#:#Create talk appointments / edit talk appointments that you have created yourself###31 03 2023 new variable +orgu#:#org_op_edit_employee_talk#:#Edit Talk appointments###31 03 2023 new variable +orgu#:#org_op_edit_individual_plan#:#Modifica piano individuale orgu#:#org_op_edit_submissions_grades#:#Modifica le presentazioni degli altri utenti orgu#:#org_op_manage_members#:#Gestisci membri -orgu#:#org_op_manage_participants#:#Manage Participants -orgu#:#org_op_read_employee_talk#:#Read access talk appointments +orgu#:#org_op_manage_participants#:#Gestisci partecipanti +orgu#:#org_op_read_employee_talk#:#Read access talk appointments###31 03 2023 new variable orgu#:#org_op_read_learning_progress#:#Visualizza il progresso di apprendimento degli altri utenti -orgu#:#org_op_score_participants#:#Score Participants -orgu#:#org_op_view_certificates#:#View certificates of other users###07 02 2020 new variable -orgu#:#org_op_view_competences#:#View competences of other users###07 02 2020 new variable -orgu#:#org_op_view_individual_plan#:#View Individual Plan###07 02 2020 new variable -orgu#:#org_op_view_members#:#View Members###07 02 2020 new variable +orgu#:#org_op_score_participants#:#Punteggio Partecipanti +orgu#:#org_op_view_certificates#:#Visualizza i certificati di altri utenti +orgu#:#org_op_view_competences#:#Visualizza le competenze di altri utenti +orgu#:#org_op_view_individual_plan#:#Visualizza piano individuale +orgu#:#org_op_view_members#:#Visualizza membri orgu#:#org_op_write_learning_progress#:#Imposta il progresso di apprendimento degli altri utenti orgu#:#org_unit_not_found#:#Unità organizzativa non trovata. orgu#:#orgu_add#:#Aggiungi unità organizzativa @@ -13266,16 +13260,16 @@ orgu#:#orgu_type_msg_setting_member_prevented#:#Impostazione '%s' impedita dai p orgu#:#orgu_type_msg_unable_delete#:#Non è consentito eliminare questo tipo perché è ancora assegnato alle seguenti unità organizzative: %s orgu#:#orgu_type_msg_updating_prevented#:#Aggiornamento dell’oggetto impedito dai plug-in: %s orgu#:#orgu_types#:#Tipi -orgu#:#orgunit_position_permissions_not_active_for#:#You cannot override the position specific permissions for the type: -orgu#:#ou_external_id_exists#:#A unit with the External ID already exists on this system or in trash bin. +orgu#:#orgunit_position_permissions_not_active_for#:#Non è possibile ignorare le autorizzazioni specifiche della posizione per il tipo: +orgu#:#ou_external_id_exists#:#Un'unità con l'ID esterno esiste già su questo sistema o nel cestino. orgu#:#ou_id_not_valid#:#ID di importazione non trovato. -orgu#:#ou_more_than_one_match_found#:#More then one match found.###07 02 2020 new variable -orgu#:#ou_parent_id_not_valid#:#The ou_parent_id type is not valid. Valid are: "reference_id" or "external_id". +orgu#:#ou_more_than_one_match_found#:#E' stata trovata più di una corrispondenza +orgu#:#ou_parent_id_not_valid#:#Il tipo ou_parent_id non è valido. I validi sono: "reference_id" o "external_id". orgu#:#over#:#Oltre orgu#:#over_-1#:#Tutte orgu#:#placeholder#:#... orgu#:#positions#:#Posizioni -orgu#:#rec_staff#:#Employees %s recursivly +orgu#:#rec_staff#:#Dipendenti %s ricorrenti orgu#:#remove_successful#:#L’utente è stato rimosso con successo. orgu#:#remove_user#:#Rimuovi orgu#:#scope#:#In @@ -13289,24 +13283,24 @@ orgu#:#simple_xls#:#Semplice esportazione Excel orgu#:#simple_xml#:#Semplice esportazione XML orgu#:#superior#:#Superiore orgu#:#user_assignments#:#Assegnazioni utente -orgu#:#user_assignments_recursive#:#User Assignments Subtree###29 07 2022 new variable +orgu#:#user_assignments_recursive#:#User Assignments Subtree orgu#:#user_changed_successful#:#L’utente è stato modificato con successo. orgu#:#user_import_successful#:#L’importazione è terminata con successo. Assegnato: %s , Rimosso: %s. orgu#:#users_successfuly_added#:#L’utente è stato aggiunto con successo. orgu#:#view_learning_progress#:#Visualizza il progresso dell'apprendimento -orgu#:#view_learning_progress_rec#:#View Learning Progress Recursivly +orgu#:#view_learning_progress_rec#:#Visualizza il progresso dell'apprendimento in modo ricorrente pd#:#block_show_chatviewer#:#Mostra chatviewer pd#:#block_show_pdbookm#:#Mostra i segnalibri pd#:#block_show_pdcal#:#Mostra il calendario -pd#:#block_show_pdfrmpostdraft#:#Show Postings Drafts###07 02 2020 new variable +pd#:#block_show_pdfrmpostdraft#:#Mostra bozze pd#:#block_show_pdmail#:#Mostra le mail pd#:#block_show_pdnews#:#Mostra le news pd#:#block_show_pdnotes#:#Mostra le note pd#:#block_show_pdportf#:#Mostra portfolio pd#:#block_show_pdtag#:#Mostra i tag -pd#:#block_show_pdtasks#:#Show Tasks###07 02 2020 new variable +pd#:#block_show_pdtasks#:#Show Tasks pd#:#block_show_x#:#Mostra %s -pd#:#pd_achievements#:#Achievements +pd#:#pd_achievements#:#Risultati pd#:#pd_bookmarks#:#Segnalibri pd#:#pd_download_last_export_file#:#Scarica l'ultimo file esportato pd#:#pd_enable_comments#:#Abilita i commenti @@ -13317,13 +13311,13 @@ pd#:#pd_ended#:#Concluso pd#:#pd_export_profile#:#Esporta i dati personali pd#:#pd_import_personal_data#:#Importa i dati personali pd#:#pd_my_memberships_sort_default#:#Default dell’opzione ordina -pd#:#pd_no_items_to_manage#:#No items available for removal.###26 08 2024 new variable -pd#:#pd_not_dated#:#Not Dated###26 08 2024 new variable +pd#:#pd_no_items_to_manage#:#No items available for removal.###30 04 2024 new variable +pd#:#pd_not_dated#:#Not Dated###30 04 2024 new variable pd#:#pd_ongoing#:#Costante pd#:#pd_personal_items_default_view#:#Vista di default pd#:#pd_personal_items_default_view_info#:#Scegli la vista preferita degli oggetti personali. -pd#:#pd_presentation_mode_list#:#Item List Presentation###07 02 2020 new variable -pd#:#pd_presentation_mode_tile#:#Tile Presentation###07 02 2020 new variable +pd#:#pd_presentation_mode_list#:#Presentazione dell'elenco degli articoli +pd#:#pd_presentation_mode_tile#:#Presentazione delle tessere pd#:#pd_private_calendars#:#Calendario privato pd#:#pd_profile_data#:#Dati personali pd#:#pd_remove_multi_confirm#:#Gli oggetti sono stati rimossi. @@ -13339,26 +13333,26 @@ poll#:#poll_activation_online_info#:#Se selezionato rendera' possibile agli uten poll#:#poll_add#:#Aggiungi sondaggio poll#:#poll_anonymous_warning#:#Il tuo nome non è visibile nel gruppo di risultati. poll#:#poll_answer#:#Risposta -poll#:#poll_answer_selected_alt_text#:#Selected###26 08 2024 new variable +poll#:#poll_answer_selected_alt_text#:#Selected###17 01 2024 new variable poll#:#poll_answers#:#Risposte possibili poll#:#poll_barchart#:#Diagramma a barre poll#:#poll_block_message_already_voted#:#Hai già votato in questo sondaggio poll#:#poll_block_message_no_answers#:#Questo sondaggio non è completo poll#:#poll_block_results_available_on#:#I risultati saranno disponibili il %s. -poll#:#poll_cannot_set_online_no_answers#:#The status cannot be changed to &quot;online&quot; because this poll has no question!###26 08 2024 new variable -poll#:#poll_chart_votes#:#Votes###28 10 2024 new variable +poll#:#poll_cannot_set_online_no_answers#:#The status cannot be changed to &quot;online&quot; because this poll has no question!###30 04 2024 new variable +poll#:#poll_chart_votes#:#Votes###28 11 2025 new variable poll#:#poll_comments#:#Commenti poll#:#poll_copy#:#Copia sondaggio poll#:#poll_delete_votes#:#Cancella tutte le votazioni poll#:#poll_delete_votes_sure#:#Sei sicureo di voler cancellare tutte le votazioni? poll#:#poll_edit#:#Modifica sondaggio -poll#:#poll_edit_question#:#Edit Question###26 08 2024 new variable +poll#:#poll_edit_question#:#Edit Question###30 04 2024 new variable poll#:#poll_image#:#Immagine poll#:#poll_import#:#Importa gruppo -poll#:#poll_limit_not_below_answer_count#:#The answer limit must be below the number of possible answers.###26 08 2024 new variable -poll#:#poll_limit_number_of_answers#:#Limit Number of Answers per Participant###26 08 2024 new variable +poll#:#poll_limit_not_below_answer_count#:#The answer limit must be below the number of possible answers.###30 04 2024 new variable +poll#:#poll_limit_number_of_answers#:#Limit Number of Answers per Participant###30 04 2024 new variable poll#:#poll_max_number_of_answers#:#Numero massimo di risposte per partecipante -poll#:#poll_max_number_of_answers_info#:#You may choose up to %s answers.###26 08 2024 new variable +poll#:#poll_max_number_of_answers_info#:#You may choose up to %s answers.###30 04 2024 new variable poll#:#poll_mode#:#Modalità poll#:#poll_mode_anonymous#:#Anonimo poll#:#poll_mode_anonymous_info#:#I voti non possono essere ricondotti ai partecipanti. @@ -13366,15 +13360,15 @@ poll#:#poll_mode_personal#:#Personale poll#:#poll_mode_personal_info#:#Un elenco dei partecipanti con i rispettivi voti è disponibile quando si dispone di un permesso sufficiente. poll#:#poll_new#:#Aggiungi nuovo sondaggio poll#:#poll_non_anonymous_warning#:#Il tuo nome e il tuo voto sono visibili agli amministratori nei risultati. -poll#:#poll_notification_activated#:#Notification Activated###26 08 2024 new variable -poll#:#poll_notification_deactivated#:#Notification Deactivated###26 08 2024 new variable +poll#:#poll_notification_activated#:#Notification Activated###30 04 2024 new variable +poll#:#poll_notification_deactivated#:#Notification Deactivated###30 04 2024 new variable poll#:#poll_notification_subscribe#:#Attiva notifica poll#:#poll_notification_unsubscribe#:#Disattiva notifica poll#:#poll_percentage#:#Percentuale corrente -poll#:#poll_population#:#%s voti -poll#:#poll_population_singular#:#1 Participant###26 08 2024 new variable +poll#:#poll_population#:#%s partecipanti +poll#:#poll_population_singular#:#1 Participant###30 04 2024 new variable poll#:#poll_question#:#Domanda -poll#:#poll_result#:#Voting Result +poll#:#poll_result#:#Risultati della votazione poll#:#poll_result_answers#:#Voti poll#:#poll_result_sorting#:#Ordinamento poll#:#poll_result_sorting_answers#:#Nell’ordine delle risposte @@ -13382,7 +13376,7 @@ poll#:#poll_result_sorting_votes#:#Per numero di voti (decrescente) poll#:#poll_result_users#:#Partecipanti poll#:#poll_show_results_as#:#Mostra risultati come poll#:#poll_sortorder#:#Ordinamento -poll#:#poll_stacked_chart#:#Stacked Chart###28 10 2024 new variable +poll#:#poll_stacked_chart#:#Stacked Chart###28 11 2025 new variable poll#:#poll_view_results#:#Mostra i rislutati poll#:#poll_view_results_after_period#:#Periodo post voto poll#:#poll_view_results_after_period_impossible#:#Il periodo di votazione non è limitato. @@ -13391,275 +13385,275 @@ poll#:#poll_view_results_always#:#Sempre poll#:#poll_view_results_never#:#Mai poll#:#poll_vote#:#Vota poll#:#poll_vote_error_multi#:#Si preda di non selezionare più di %s risposte. -poll#:#poll_vote_error_multi_no_answer#:#Please select at least 1 answer.###26 08 2024 new variable +poll#:#poll_vote_error_multi_no_answer#:#Please select at least 1 answer.###30 04 2024 new variable poll#:#poll_vote_error_single#:#Si prega di selezionare 1 risposta. poll#:#poll_vote_notification_body#:#il seguente sondaggio ha ricevuto un voto. poll#:#poll_vote_notification_link#:#Collega al sondaggio -poll#:#poll_vote_notification_reason#:#You are receiving this email because you activated notifications for the poll mentioned above. +poll#:#poll_vote_notification_reason#:#Stai ricevendo questa e-mail perché hai attivato le notifiche per il sondaggio sopra menzionato. poll#:#poll_vote_notification_subject#:#Sondaggio "%s": nuovo voto poll#:#poll_votes_no_edit#:#Questo sondaggio contiene già delle voci. Non potra' essere modificato finche' le voci non saranno cancellate. poll#:#poll_voting_period_and_results#:#Periodo di voto e risultati -poll#:#poll_voting_period_ended_info#:#The voting period ended %s.###26 08 2024 new variable +poll#:#poll_voting_period_ended_info#:#The voting period ended %s.###30 04 2024 new variable poll#:#poll_voting_period_full_info#:#Periodo di votazione da %s a %s poll#:#poll_voting_period_info#:#Scadenza per la votazione: %s poll#:#poll_voting_period_limited#:#Limitato -prg#:#access_ctr_by_orgu_position#:#Access control according to Organisational Unit Positions###07 02 2020 new variable -prg#:#active_only#:#active users only###26 08 2024 new variable -prg#:#add_automembership_source#:#Add Source###07 02 2020 new variable -prg#:#add_category#:#Add Category###07 02 2020 new variable -prg#:#assignment_date#:#Assignment Date###07 02 2020 new variable -prg#:#assignments#:#Assignments###29 07 2022 new variable -prg#:#auto_add_success#:#Add automatism successfully.###29 07 2022 new variable -prg#:#auto_membership_description#:#Rules are only executed when a criterion gets fulfilled after activation of the rule. Deleting rules will not remove assignments if any other active criterion is fulfilled by that time.###29 07 2022 new variable -prg#:#auto_membership_src_type#:#Type###07 02 2020 new variable -prg#:#auto_membership_title#:#Sources for Membership Automation###07 02 2020 new variable -prg#:#auto_memberships#:#Membership Automation###07 02 2020 new variable -prg#:#category#:#Category###07 02 2020 new variable -prg#:#cert_relevance#:#Certificate###29 10 2025 new variable -prg#:#completion_date#:#Completion Date###07 02 2020 new variable -prg#:#confirm_to_remove_selected_assignments#:#Do you really want to remove the user assignment(s)?###29 07 2022 new variable -prg#:#cont_ed_insert_prgactionnote#:#Insert Study Programme Action Note###26 08 2024 new variable -prg#:#cont_ed_insert_prgstatusinfo#:#Insert Study Programme Status Information###26 08 2024 new variable -prg#:#content_automation#:#Content Automation###07 02 2020 new variable -prg#:#content_automation_title#:#Automatically add and remove Courses from these categories###07 02 2020 new variable -prg#:#could_not_add_users_no_permissons#:#Could not assign %d Users due to lacking permissions.###07 02 2020 new variable -prg#:#crs_affiliation_to_prg#:#Affiliation to study programmes###26 08 2024 new variable -prg#:#deadline#:#Deadline###26 08 2024 new variable -prg#:#deadline_information#:#Information regarding processing period###07 02 2020 new variable -prg#:#deadline_updated#:#Updated deadline###29 07 2022 new variable -prg#:#edit_participants#:#Edit Members###07 02 2020 new variable -prg#:#error_updating_deadline#:#Error during updating deadline.###07 02 2020 new variable -prg#:#error_updating_expire_date#:#Error during updating expire date.###07 02 2020 new variable -prg#:#export_memberships#:#Export Assignments###26 08 2024 new variable -prg#:#foreign_assignment#:#not top node###26 08 2024 new variable +prg#:#access_ctr_by_orgu_position#:#Controllo dell'accesso secondo le posizioni dell'unità organizzativa +prg#:#active_only#:#active users only###31 03 2023 new variable +prg#:#add_automembership_source#:#Aggiungi fonte +prg#:#add_category#:#Aggiungi categoria +prg#:#assignment_date#:#Assegna data +prg#:#assignments#:#Assignments###09 03 2022 new variable +prg#:#auto_add_success#:#Aggiunta automatismo effettuata con successo. +prg#:#auto_membership_description#:#Rules are only executed when a criterion gets fulfilled after activation of the rule. Deleting rules will not remove assignments if any other active criterion is fulfilled by that time.###09 03 2022 new variable +prg#:#auto_membership_src_type#:#Tipo +prg#:#auto_membership_title#:#Fonte di automazione dell'iscrizione +prg#:#auto_memberships#:#Automazione dell'iscrizione +prg#:#category#:#Categoria +prg#:#cert_relevance#:#Certificate###08 07 2025 new variable +prg#:#completion_date#:#Data di completamento +prg#:#confirm_to_remove_selected_assignments#:#Do you really want to remove the user assignment(s)?###09 03 2022 new variable +prg#:#cont_ed_insert_prgactionnote#:#Insert Study Programme Action Note###30 04 2024 new variable +prg#:#cont_ed_insert_prgstatusinfo#:#Insert Study Programme Status Information###30 04 2024 new variable +prg#:#content_automation#:#Automazione del contenuto +prg#:#content_automation_title#:#Aggiungi e rimuovi automaticamente i corsi da queste categorie +prg#:#could_not_add_users_no_permissons#:#Non è stato possibile assegnare %d utenti a causa della mancanza di permessi +prg#:#crs_affiliation_to_prg#:#Affiliation to study programmes###31 03 2023 new variable +prg#:#deadline#:#Deadline###30 04 2024 new variable +prg#:#deadline_information#:#Informazioni sul periodo di fruizione +prg#:#deadline_updated#:#Updated deadline###09 03 2022 new variable +prg#:#edit_participants#:#Modifica membri +prg#:#error_updating_deadline#:#Errore durante l'aggiornamento della scadenza. +prg#:#error_updating_expire_date#:#Errore durante l'aggiornamento della data di scadenza. +prg#:#export_memberships#:#Export Assignments###30 04 2024 new variable +prg#:#foreign_assignment#:#not top node###30 04 2024 new variable prg#:#form_msg_file_wrong_file_type#:#Tipi di file sbagliati. -prg#:#header_remove_certificate#:#Do you really want to remove the certificate for the selected Users?###26 08 2024 new variable -prg#:#header_update_certificate#:#Do you really want to update the certificate?###26 08 2024 new variable -prg#:#header_update_current_plan#:#Do you really want to reset all individual settings for the selected assignments?###26 08 2024 new variable -prg#:#inactive_only#:#inactive users only###26 08 2024 new variable -prg#:#info_to_re_assign_mail_body#:#%s %s,<br \><br \>The validity of their participation in the study programm '% s' expires soon. Please sign in again.###07 02 2020 new variable -prg#:#info_to_re_assign_mail_subject#:#Reminder of renewed participation in the study programm###07 02 2020 new variable -prg#:#invalidated#:#validity###26 08 2024 new variable -prg#:#label_crs#:#Course Name###07 02 2020 new variable -prg#:#label_grp#:#Group Name###07 02 2020 new variable -prg#:#label_role#:#Role Name###07 02 2020 new variable -prg#:#last_edited#:#Last edited###07 02 2020 new variable -prg#:#last_edited_by#:#Last Editor###07 02 2020 new variable -prg#:#mail_assignments#:#Mail to assigned Users###29 07 2022 new variable -prg#:#mails_foreign_assignment_failed#:#Selected assignments are not in current context. Mails should be sent from Study Programme's top node.###26 08 2024 new variable -prg#:#manage_assignments#:#Manage Assignments###29 07 2022 new variable -prg#:#membership_source_id#:#Id###07 02 2020 new variable -prg#:#membership_source_id_byline_objid#:#Please use the <b>object-id</b>###07 02 2020 new variable -prg#:#membership_source_id_byline_refid#:#Please use the <b>reference-id</b>###07 02 2020 new variable -prg#:#membership_source_type#:#Source###07 02 2020 new variable -prg#:#modal_automembership_title#:#Automatismus hinzufügen###07 02 2020 new variable -prg#:#modal_categories_title#:#Category to be monitored###07 02 2020 new variable -prg#:#modal_member_auto_select_title#:#Select Source for auto assignment###07 02 2020 new variable -prg#:#msg_acknowledge_courses#:#Completed Courses have been acknowledged.###26 08 2024 new variable -prg#:#msg_change_deadline_date#:#Updated deadline for %s users.###29 07 2022 new variable -prg#:#msg_change_deadline_date_failed#:#Deadline not updated for:###29 07 2022 new variable -prg#:#msg_change_expire_date#:#Updated expire date for %s users.###29 07 2022 new variable -prg#:#msg_change_expire_date_failed#:#Expire date not updated for:###29 07 2022 new variable -prg#:#msg_fill_required#:#Please fill all required fields.###29 07 2022 new variable -prg#:#msg_impossible_target_status#:#Impossible target status###29 07 2022 new variable -prg#:#msg_mark_accredited#:#%s users successfully marked accredited###29 07 2022 new variable -prg#:#msg_mark_accredited_failed#:#Not marked accredited:###29 07 2022 new variable -prg#:#msg_mark_not_relevant#:#%s users successfully unmarked relevant###29 07 2022 new variable -prg#:#msg_mark_not_relevant_failed#:#Not unmarked relevant:###29 07 2022 new variable -prg#:#msg_mark_relevant#:#%s users successfully marked relevant###29 07 2022 new variable -prg#:#msg_mark_relevant_failed#:#Not marked marked relevant:###29 07 2022 new variable -prg#:#msg_points_must_be_positive#:#Only positive numbers are allowed.###29 07 2022 new variable -prg#:#msg_unmark_accredited#:#Unmarked %s users accredited.###29 07 2022 new variable -prg#:#msg_unmark_accredited_failed#:#Unmarking accredited not successful for:###29 07 2022 new variable -prg#:#msg_update_certificate#:#%s Certificate(s) updated.###26 08 2024 new variable -prg#:#msg_update_certificate_failed#:#Certificate(s) not updated:###26 08 2024 new variable -prg#:#msg_update_from_settings#:#Updated %s users from settings:###29 07 2022 new variable -prg#:#msg_update_from_settings_failed#:#Updated from settings failed:###29 07 2022 new variable -prg#:#msg_update_individual_plan#:#Individual plan: %s successfully updated.###29 07 2022 new variable -prg#:#msg_update_individual_plan_failed#:#Update of individual plan failed###29 07 2022 new variable -prg#:#no_permission_to_update_certificate#:#You have no permission to update certificates.###26 08 2024 new variable -prg#:#no_srctype_or_id#:#Id and type may not be empty.###29 07 2022 new variable -prg#:#not_a_valid_cat_id#:#%s is not a valid ref-id of a category.###07 02 2020 new variable -prg#:#obj_prg_select#:#-- Please select a study programme --###26 08 2024 new variable -prg#:#optgrp_label_restart#:#Restart###26 08 2024 new variable -prg#:#optgrp_label_validity#:#Expiry###26 08 2024 new variable -prg#:#orgu#:#Organisational Unit###07 02 2020 new variable -prg#:#pc_prg_action_note_label#:#Required Actions Study Programme###26 08 2024 new variable -prg#:#pc_prg_statusinfo_label#:#Statusinformation Study Programme###26 08 2024 new variable -prg#:#pc_prgactionnote_complete_content#:#You are assigned to the Study Programme, but have not completed its content. Please complete the content.###26 08 2024 new variable -prg#:#pc_prgactionnote_complete_content_with_deadline#:#You are assigned to the Study Programme, but have not completed its content. Please complete the content until###26 08 2024 new variable -prg#:#pc_prgactionnote_headline#:#Required actions###26 08 2024 new variable -prg#:#pc_prgactionnote_no_actions_required#:#No actions required.###26 08 2024 new variable -prg#:#pc_prgstatus_edit_qualification#:#Re-processing required from###26 08 2024 new variable -prg#:#pc_prgstatus_expiration_date#:#Expiry date###26 08 2024 new variable -prg#:#pc_prgstatus_qualification_headline#:#Status of your qualification###26 08 2024 new variable -prg#:#pc_prgstatus_status_no_qualification#:#No qualification###26 08 2024 new variable -prg#:#pc_prgstatus_status_valid_qualification#:#Valid###26 08 2024 new variable -prg#:#pc_prgstatus_text_no_qualification#:#Your qualification is not valid###26 08 2024 new variable -prg#:#pc_prgstatus_unlimited_validation#:#Unlimited validity###26 08 2024 new variable -prg#:#percentage#:#%###07 02 2020 new variable -prg#:#prg_access_by_orgu#:#Access Control by Organisation Unit Positions###29 07 2022 new variable -prg#:#prg_access_by_orgu_byline#:#If enabled, additional access control rules can be defined by positions in organisational units.###29 07 2022 new variable -prg#:#prg_acknowledge_all_completed_courses#:#Acknowledge All Completed Courses###29 10 2025 new variable +prg#:#header_remove_certificate#:#Do you really want to remove the certificate for the selected Users?###30 04 2024 new variable +prg#:#header_update_certificate#:#Do you really want to update the certificate?###30 04 2024 new variable +prg#:#header_update_current_plan#:#Do you really want to reset all individual settings for the selected assignments?###31 03 2023 new variable +prg#:#inactive_only#:#inactive users only###31 03 2023 new variable +prg#:#info_to_re_assign_mail_body#:#%s %s,<br/><br/>La validità della tua partecipazione al programma di studio '%' scadrà presto. Per favore, accedi di nuovo. +prg#:#info_to_re_assign_mail_subject#:#Promemoria della rinnovata partecipazione al programma di studio +prg#:#invalidated#:#validity###31 03 2023 new variable +prg#:#label_crs#:#Nome del corso +prg#:#label_grp#:#Nome del gruppo +prg#:#label_role#:#Nome del ruolo +prg#:#last_edited#:#Ultima modifica +prg#:#last_edited_by#:#Ultimo redattore +prg#:#mail_assignments#:#Mail to assigned Users###09 03 2022 new variable +prg#:#mails_foreign_assignment_failed#:#Selected assignments are not in current context. Mails should be sent from Study Programme's top node.###30 04 2024 new variable +prg#:#manage_assignments#:#Manage Assignments###09 03 2022 new variable +prg#:#membership_source_id#:#Id +prg#:#membership_source_id_byline_objid#:#Per favore utilizza <b>object-id</b> +prg#:#membership_source_id_byline_refid#:#Per favore utilizza <b>reference-id</b> +prg#:#membership_source_type#:#Fonte +prg#:#modal_automembership_title#:#Aggiungere l'automatismo +prg#:#modal_categories_title#:#Categoria da monitorare +prg#:#modal_member_auto_select_title#:#Seleziona la fonte per l'assegnazione automatica +prg#:#msg_acknowledge_courses#:#Completed Courses have been acknowledged.###30 04 2024 new variable +prg#:#msg_change_deadline_date#:#Updated deadline for %s users.###09 03 2022 new variable +prg#:#msg_change_deadline_date_failed#:#Deadline not updated for:###09 03 2022 new variable +prg#:#msg_change_expire_date#:#Updated expire date for %s users.###09 03 2022 new variable +prg#:#msg_change_expire_date_failed#:#Expire date not updated for:###09 03 2022 new variable +prg#:#msg_fill_required#:#Si prega di compilare tutti i campi richiesti. +prg#:#msg_impossible_target_status#:#Impossible target status###09 03 2022 new variable +prg#:#msg_mark_accredited#:#%s users successfully marked accredited###09 03 2022 new variable +prg#:#msg_mark_accredited_failed#:#Not marked accredited:###09 03 2022 new variable +prg#:#msg_mark_not_relevant#:#%s users successfully unmarked relevant###09 03 2022 new variable +prg#:#msg_mark_not_relevant_failed#:#Not unmarked relevant:###09 03 2022 new variable +prg#:#msg_mark_relevant#:#%s users successfully marked relevant###09 03 2022 new variable +prg#:#msg_mark_relevant_failed#:#Not marked marked relevant:###09 03 2022 new variable +prg#:#msg_points_must_be_positive#:#Only positive numbers are allowed.###09 03 2022 new variable +prg#:#msg_unmark_accredited#:#Unmarked %s users accredited.###09 03 2022 new variable +prg#:#msg_unmark_accredited_failed#:#Unmarking accredited not successful for:###09 03 2022 new variable +prg#:#msg_update_certificate#:#%s Certificate(s) updated.###30 04 2024 new variable +prg#:#msg_update_certificate_failed#:#Certificate(s) not updated:###30 04 2024 new variable +prg#:#msg_update_from_settings#:#Updated %s users from settings:###09 03 2022 new variable +prg#:#msg_update_from_settings_failed#:#Updated from settings failed:###09 03 2022 new variable +prg#:#msg_update_individual_plan#:#Successfully updated individual plan (%)###09 03 2022 new variable +prg#:#msg_update_individual_plan_failed#:#Update of individual plan failed###09 03 2022 new variable +prg#:#no_permission_to_update_certificate#:#You have no permission to update certificates.###30 04 2024 new variable +prg#:#no_srctype_or_id#:#Id e tipo non possono essere vuoti +prg#:#not_a_valid_cat_id#:#%s non è un ref-id valido di una categoria. +prg#:#obj_prg_select#:#-- Please select a study programme --###31 03 2023 new variable +prg#:#optgrp_label_restart#:#Restart###31 03 2023 new variable +prg#:#optgrp_label_validity#:#Expiry###31 03 2023 new variable +prg#:#orgu#:#Unità organizzative +prg#:#pc_prg_action_note_label#:#Required Actions Study Programme###30 04 2024 new variable +prg#:#pc_prg_statusinfo_label#:#Statusinformation Study Programme###30 04 2024 new variable +prg#:#pc_prgactionnote_complete_content#:#You are assigned to the Study Programme, but have not completed its content. Please complete the content.###30 04 2024 new variable +prg#:#pc_prgactionnote_complete_content_with_deadline#:#You are assigned to the Study Programme, but have not completed its content. Please complete the content until###30 04 2024 new variable +prg#:#pc_prgactionnote_headline#:#Required actions###30 04 2024 new variable +prg#:#pc_prgactionnote_no_actions_required#:#No actions required.###30 04 2024 new variable +prg#:#pc_prgstatus_edit_qualification#:#Re-processing required from###30 04 2024 new variable +prg#:#pc_prgstatus_expiration_date#:#Expiry date###30 04 2024 new variable +prg#:#pc_prgstatus_qualification_headline#:#Status of your qualification###30 04 2024 new variable +prg#:#pc_prgstatus_status_no_qualification#:#No qualification###30 04 2024 new variable +prg#:#pc_prgstatus_status_valid_qualification#:#Valid###30 04 2024 new variable +prg#:#pc_prgstatus_text_no_qualification#:#Your qualification is not valid###30 04 2024 new variable +prg#:#pc_prgstatus_unlimited_validation#:#Unlimited validity###30 04 2024 new variable +prg#:#percentage#:#% +prg#:#prg_access_by_orgu#:#Controllo dell'accesso per posizioni dell'unità organizzativa +prg#:#prg_access_by_orgu_byline#:#Se abilitato, è possibile definire ulteriori regole di controllo dell'accesso per posizioni in unità organizzative. +prg#:#prg_acknowledge_all_completed_courses#:#Acknowledge All Completed Courses###10 12 2024 new variable prg#:#prg_acknowledge_completed_courses#:#Conferma corsi completati prg#:#prg_add#:#Aggiungi programma di studio -prg#:#prg_added_course_ref_successful#:#New course-reference was added successfully +prg#:#prg_added_course_ref_successful#:#Il nuovo corso di riferimento è stato aggiunto con successo prg#:#prg_added_member#:#Il nuovo membro è stato aggiunto con successo. prg#:#prg_added_members#:#I nuovi membri sono stati aggiunti con successo. -prg#:#prg_additional_settings#:#Additional Features###29 07 2022 new variable +prg#:#prg_additional_settings#:#Caratteristiche aggiuntive prg#:#prg_assessment#:#Stima programma di studio prg#:#prg_assign_date#:#Data di assegnazione prg#:#prg_assigned_by#:#Assegnato da prg#:#prg_async_create#:#Aggiungi nuovo albero figlio prg#:#prg_async_settings#:#Impostazioni -prg#:#prg_auto_member_select_crs#:#Courses###07 02 2020 new variable -prg#:#prg_auto_member_select_grp#:#Groups###07 02 2020 new variable -prg#:#prg_auto_member_select_role#:#Roles###07 02 2020 new variable -prg#:#prg_autoassignment#:#(auto)###07 02 2020 new variable -prg#:#prg_availability_action_not_allowed#:#Cannot set Availability Period on Study Programmes.###28 10 2024 new variable +prg#:#prg_auto_member_select_crs#:#Corsi +prg#:#prg_auto_member_select_grp#:#Gruppi +prg#:#prg_auto_member_select_role#:#Ruoli +prg#:#prg_autoassignment#:#(auto) +prg#:#prg_availability_action_not_allowed#:#Cannot set Availability Period on Study Programmes.###28 11 2025 new variable prg#:#prg_belongs_to#:#Appartiene a prg#:#prg_can_not_manage_in_repo#:#Non puoi gestire il programma di studio a causa delle assegnazioni dell’utente. -prg#:#prg_cancel#:#Cancel###29 07 2022 new variable -prg#:#prg_cancel_acknowledge_completed_courses#:#Don't acknowledge any Courses###26 08 2024 new variable +prg#:#prg_cancel#:#Cancella +prg#:#prg_cancel_acknowledge_completed_courses#:#Don't acknowledge any Courses###30 04 2024 new variable prg#:#prg_cancel_tree_order#:#Ignora ordine albero -prg#:#prg_change_deadline#:#Change deadline###26 08 2024 new variable -prg#:#prg_change_expire_date#:#Change expire date###26 08 2024 new variable +prg#:#prg_change_deadline#:#Change deadline###28 07 2023 new variable +prg#:#prg_change_expire_date#:#Change expire date###28 07 2023 new variable prg#:#prg_changed_by#:#Modificato da prg#:#prg_completion_by#:#Completamento da -prg#:#prg_completion_date#:#Completion date###07 02 2020 new variable -prg#:#prg_confirm_delete#:#Delete###29 07 2022 new variable -prg#:#prg_copy_threads_info#:#Please decide which Study Programme elements are to be copied, linked or omitted.###26 08 2024 new variable +prg#:#prg_completion_date#:#Data di completamento +prg#:#prg_confirm_delete#:#Elimina +prg#:#prg_copy_threads_info#:#Please decide which Study Programme elements are to be copied, linked or omitted.###31 03 2023 new variable prg#:#prg_create_new_leaf#:#Crea nuovo foglio prg#:#prg_create_new_node#:#Crea nuovo nodo -prg#:#prg_cron_job_configuration#:#Configuration automatic Mails###07 02 2020 new variable +prg#:#prg_cron_job_configuration#:#Configurazione delle mail automatiche prg#:#prg_custom_plan#:#Piano personalizzato -prg#:#prg_cut_action_not_allowed#:#Cannot move Study Programmes###28 10 2024 new variable -prg#:#prg_dash_label_finish_until#:#Finish until###07 02 2020 new variable -prg#:#prg_dash_label_gain#:#Current Completion###07 02 2020 new variable -prg#:#prg_dash_label_minimum#:#Minimum Completion###07 02 2020 new variable -prg#:#prg_dash_label_restart_from#:#Restart from###07 02 2020 new variable -prg#:#prg_dash_label_status#:#Status###07 02 2020 new variable -prg#:#prg_dash_label_unreachable#:#- cannot be achieved###26 08 2024 new variable -prg#:#prg_dash_label_valid#:#Valid###07 02 2020 new variable +prg#:#prg_cut_action_not_allowed#:#Cannot move Study Programmes###28 11 2025 new variable +prg#:#prg_dash_label_finish_until#:#Completamento entro: +prg#:#prg_dash_label_gain#:#Completamento attuale: +prg#:#prg_dash_label_minimum#:#Completamento minimo: +prg#:#prg_dash_label_restart_from#:#Riavviare da: +prg#:#prg_dash_label_status#:#Stato: +prg#:#prg_dash_label_unreachable#:#- cannot be achieved###31 03 2023 new variable +prg#:#prg_dash_label_valid#:#Validità: prg#:#prg_deadline#:#Scadenza -prg#:#prg_deadline_date#:#Processing time expires at fixed date###07 02 2020 new variable -prg#:#prg_deadline_date_desc#:#The programme must be finished until a given date.###07 02 2020 new variable -prg#:#prg_deadline_date_label#:#Process until###26 08 2024 new variable -prg#:#prg_deadline_period#:#Processing time is determined inividually###07 02 2020 new variable -prg#:#prg_deadline_period_desc#:#The programme must be finished within a given timespan.###07 02 2020 new variable -prg#:#prg_deadline_period_label#:#Days after assignment###26 08 2024 new variable -prg#:#prg_deadline_settings#:#Processing Period###07 02 2020 new variable -prg#:#prg_delete_confirmation#:#Do you really want to delete the selected entries?###29 07 2022 new variable -prg#:#prg_delete_failure#:#Delete failed.###29 07 2022 new variable -prg#:#prg_delete_nothing_selected#:#Please select at least one entry to delete.###29 07 2022 new variable -prg#:#prg_delete_single_confirmation#:#Do you really want to delete the selected entry?###29 07 2022 new variable -prg#:#prg_delete_single_success#:#Successfuly delete entry.###29 07 2022 new variable -prg#:#prg_delete_success#:#Successfuly delete entries.###29 07 2022 new variable +prg#:#prg_deadline_date#:#Il tempo di fruizione scade alla data stabilita +prg#:#prg_deadline_date_desc#:#Il programma deve essere terminato entro una certa data. +prg#:#prg_deadline_date_label#:#Process until###31 03 2023 new variable +prg#:#prg_deadline_period#:#Il tempo di fruizione è determinato individualmente +prg#:#prg_deadline_period_desc#:#Il programma deve essere terminato entro un determinato periodo di tempo. +prg#:#prg_deadline_period_label#:#Days after assignment###31 03 2023 new variable +prg#:#prg_deadline_settings#:#Periodo di fruizione +prg#:#prg_delete_confirmation#:#Vuoi davvero cancellare le voci selezionate? +prg#:#prg_delete_failure#:#Eliminazione fallita. +prg#:#prg_delete_nothing_selected#:#Seleziona almeno una voce da cancellare. +prg#:#prg_delete_single_confirmation#:#Vuoi davvero cancellare la voce selezionata? +prg#:#prg_delete_single_success#:#La voce è stata eliminata con successo. +prg#:#prg_delete_success#:#Elimina con successo le voci. prg#:#prg_deleted_safely#:#Il nodo è stato eliminato in modo sicuro -prg#:#prg_description#:#Description###29 07 2022 new variable +prg#:#prg_description#:#Descrizione prg#:#prg_edit#:#Modifica programma di studio -prg#:#prg_expiry_date#:#Expiry date###07 02 2020 new variable -prg#:#prg_formatted_period#:#%d days###07 02 2020 new variable -prg#:#prg_import_action_not_allowed#:#Cannot import into Study Programmes.###28 10 2024 new variable -prg#:#prg_invalidate_expired_progresses_desc#:#Marks expired progresses at Studyprogrammes as 'not passed'###07 02 2020 new variable -prg#:#prg_invalidate_expired_progresses_title#:#Limited validity of Studyprogramme progress###07 02 2020 new variable -prg#:#prg_link#:#Link###29 07 2022 new variable -prg#:#prg_mail_context_info#:#For the participant e-mails on the member and learning progress screens of a study programme###29 07 2022 new variable -prg#:#prg_mail_context_title#:#Study Programme: Mail to Members###29 07 2022 new variable -prg#:#prg_mail_permanent_link#:#Click on the following link to find all of the information you need regarding the study programm:###07 02 2020 new variable +prg#:#prg_expiry_date#:#Data di scadenza +prg#:#prg_formatted_period#:#%d giorni +prg#:#prg_import_action_not_allowed#:#Cannot import into Study Programmes.###28 11 2025 new variable +prg#:#prg_invalidate_expired_progresses_desc#:#Segna i progressi scaduti nel programma di studi come 'non superato'. +prg#:#prg_invalidate_expired_progresses_title#:#Validità limitata dei progressi del programma di studio +prg#:#prg_link#:#Link +prg#:#prg_mail_context_info#:#Per i partecipanti, le e-mail nelle schermate dei membri e dei progressi di apprendimento di un programma di studio +prg#:#prg_mail_context_title#:#Programma di studio: Mail ai membri +prg#:#prg_mail_permanent_link#:#Clicca sul seguente link per trovare tutte le informazioni necessarie sul programma di studio: prg#:#prg_manage#:#Gestisci -prg#:#prg_manage_members#:#Manage Enrolments of Study Programme###26 08 2024 new variable -prg#:#prg_manage_members_short#:#Manage Assignments###29 07 2022 new variable +prg#:#prg_manage_members#:#Manage Enrolments of Study Programme###31 03 2023 new variable +prg#:#prg_manage_members_short#:#Manage Assignments###09 03 2022 new variable prg#:#prg_manual_status#:#Stato manuale prg#:#prg_mark_accredited#:#Segna accreditato prg#:#prg_mark_accredited_multi_success#:#Segna utenti selezionati come accreditati prg#:#prg_mark_accredited_success#:#Nodo programma accreditato per l'utente con successo. prg#:#prg_mark_not_relevant_multi_success#:#Deselezione utenti selezionati come pertinenti -prg#:#prg_mark_relevant#:#Mark Relevant###26 08 2024 new variable +prg#:#prg_mark_relevant#:#Mark Relevant###28 07 2023 new variable prg#:#prg_mark_relevant_multi_success#:#Segna utenti selezionati come pertinenti prg#:#prg_more_objects_without_read_permission#:#Il programma di studio contiene più oggetti che non si possono visualizzare a causa di meno visualizzazioni. -prg#:#prg_multi_change_deadline#:#Change deadline###07 02 2020 new variable -prg#:#prg_multi_change_expire_date#:#Change expire date###07 02 2020 new variable -prg#:#prg_multi_mail_user#:#Send Mail###26 08 2024 new variable +prg#:#prg_multi_change_deadline#:#Modifica la data di scadenza +prg#:#prg_multi_change_expire_date#:#Modifica la data di scadenza +prg#:#prg_multi_mail_user#:#Send Mail###31 03 2023 new variable prg#:#prg_multi_mark_accredited#:#Accreditato prg#:#prg_multi_mark_relevant#:#Segna pertinente -prg#:#prg_multi_remove_certificate#:#Remove Certificates###26 08 2024 new variable +prg#:#prg_multi_remove_certificate#:#Remove Certificates###30 04 2024 new variable prg#:#prg_multi_remove_user#:#Rimuovi utente prg#:#prg_multi_unmark_accredited#:#Deseleziona accreditato prg#:#prg_multi_unmark_relevant#:#Deseleziona pertinente -prg#:#prg_multi_update_certificate#:#Update Certificates###26 08 2024 new variable +prg#:#prg_multi_update_certificate#:#Update Certificates###30 04 2024 new variable prg#:#prg_multi_update_from_current_plan#:#Aggiorna dal piano attuale prg#:#prg_new#:#Nuovo programma di studio -prg#:#prg_no_deadline#:#No fixed prozessing time###07 02 2020 new variable +prg#:#prg_no_deadline#:#Scadenza non prestabilita prg#:#prg_no_members_not_active#:#Non si possono aggiungere membri poiché questo programma non è attivo. -prg#:#prg_no_permission_to_remove_certificate#:#You do not have permission to remove certificates###26 08 2024 new variable -prg#:#prg_no_restart#:#No restart required###07 02 2020 new variable +prg#:#prg_no_permission_to_remove_certificate#:#You do not have permission to remove certificates###30 04 2024 new variable +prg#:#prg_no_restart#:#Nessun riavvio richiesto prg#:#prg_no_user_selected#:#Nessun utente selezionato -prg#:#prg_no_validity_qualification#:#Long-Lasting qualification###29 07 2022 new variable +prg#:#prg_no_validity_qualification#:#Qualificazione di lunga durata prg#:#prg_not_allowed_node_to_delete#:#Non ti è permesso eliminare questo nodo -prg#:#prg_not_valid#:#not valid###07 02 2020 new variable +prg#:#prg_not_valid#:#Non valido prg#:#prg_open_node#:#Passa a questo nodo -prg#:#prg_orgus#:#Organisational Units###07 02 2020 new variable -prg#:#prg_please_select_a_course_for_creating_a_leaf#:#Please select a course for creating a course-reference leaf +prg#:#prg_orgus#:#Unità organizzative +prg#:#prg_please_select_a_course_for_creating_a_leaf#:#Seleziona un corso per creare una foglia di riferimento del corso prg#:#prg_points#:#Punti -prg#:#prg_points_byline#:#Students get a certain amount of points when they succeed in this programme and need to get this many points in subsequent programmes.###29 07 2022 new variable +prg#:#prg_points_byline#:#Gli studenti superano questo programma se ottengono un certo punteggio quando e devono ottenere questo punteggio anche nei successivi programmi. prg#:#prg_points_current#:#Punti attuali prg#:#prg_points_reachable#:#Punti ottenibili prg#:#prg_points_required#:#Punti richiesti prg#:#prg_possible#:#Possibile prg#:#prg_prg_type#:#Tipo di programma di studio -prg#:#prg_processing_ends_no_success#:#Reminder mail failing###07 02 2020 new variable -prg#:#prg_processing_ends_no_success_info#:#Reminds the user x days before the program expires that he is at risk of failing.###07 02 2020 new variable -prg#:#prg_profile_not_public#:#Profile of the user is not public.###29 07 2022 new variable +prg#:#prg_processing_ends_no_success#:#Mail di promemoria non correttamente inviata +prg#:#prg_processing_ends_no_success_info#:#Ricorda all'utente x giorni prima della scadenza del programma che il programma sta per scadere. +prg#:#prg_profile_not_public#:#Il profilo dell'utente non è pubblico. prg#:#prg_progress_info#:#Hai %1$d punti. Il programma di studio è completato con %2$d punti. prg#:#prg_progress_status#:# %1$d di %2$d Punti -prg#:#prg_progress_status_with_child_sp#:# %1$d of %2$d Points -prg#:#prg_quali_not_valid#:#Qualification not valid###07 02 2020 new variable -prg#:#prg_quali_still_valid#:#Qualification still valid###07 02 2020 new variable -prg#:#prg_remove_certificate#:#Remove Certificate###26 08 2024 new variable +prg#:#prg_progress_status_with_child_sp#:# %1$d di %2$d Punti possibili +prg#:#prg_quali_not_valid#:#Qualificazione non valida +prg#:#prg_quali_still_valid#:#Qualificazione ancora valida +prg#:#prg_remove_certificate#:#Remove Certificate###30 04 2024 new variable prg#:#prg_remove_user#:#Rimuovi utente prg#:#prg_remove_user_success#:#Utente rimosso con successo. prg#:#prg_remove_users_not_possible#:#Non è possibile rimuovere gli utenti selezionati -prg#:#prg_remove_users_partial_success#:#Assignments (partially) removed.###26 08 2024 new variable +prg#:#prg_remove_users_partial_success#:#Assignments (partially) removed.###31 03 2023 new variable prg#:#prg_remove_users_success#:#Rimuovi utenti selezionati -prg#:#prg_restart_assignments_temporal_progress_desc#:#Restart Studyprogramme assignments with progresses about to expire###07 02 2020 new variable -prg#:#prg_restart_assignments_temporal_progress_title#:#Restart Studyprogramme assignments###07 02 2020 new variable +prg#:#prg_restart_assignments_temporal_progress_desc#:#Riavviare le assegnazioni del programma di studio con progressi che stanno per scadere +prg#:#prg_restart_assignments_temporal_progress_title#:#Riavviare le assegnazioni del programma prg#:#prg_save_tree_order#:#Salva ordine albero prg#:#prg_saved_order_successful#:#Ordine salvato con successo prg#:#prg_show_individual_plan#:#Mostra piano individuale prg#:#prg_show_programmes#:#Visibilità prg#:#prg_show_programmes_on_pd_always#:#I programmi di studio sono sempre visibili nel desktop personale. prg#:#prg_show_programmes_on_pd_only_read#:#I programmi di studio sono solo visibili nel desktop personale con l’autorizzazione “di lettura”. -prg#:#prg_some_users_may_not_be_accredited#:#Partially marked users accredited.###07 02 2020 new variable -prg#:#prg_some_users_may_not_be_marked_not_relevant#:#Partially unmarked relevant.###07 02 2020 new variable -prg#:#prg_some_users_may_not_be_marked_relevant#:#Partially marked relevant.###07 02 2020 new variable -prg#:#prg_some_users_may_not_be_unmarked_accredited#:#Partially unmarked users accredited.###07 02 2020 new variable +prg#:#prg_some_users_may_not_be_accredited#:#Utenti parzialmente marcati accreditati. +prg#:#prg_some_users_may_not_be_marked_not_relevant#:#Parzialmente non segnato rilevante. +prg#:#prg_some_users_may_not_be_marked_relevant#:#Parzialmente segnato come rilevante. +prg#:#prg_some_users_may_not_be_unmarked_accredited#:#Utenti parzialmente non contrassegnati accreditati. prg#:#prg_status#:#Stato -prg#:#prg_status_1#:#In Progress###07 02 2020 new variable -prg#:#prg_status_2#:#Completed###07 02 2020 new variable -prg#:#prg_status_3#:#Accredited###07 02 2020 new variable -prg#:#prg_status_4#:#Not Relevant###07 02 2020 new variable -prg#:#prg_status_5#:#failed###07 02 2020 new variable +prg#:#prg_status_1#:#In corso +prg#:#prg_status_2#:#Completato +prg#:#prg_status_3#:#Accreditato +prg#:#prg_status_4#:#Non rilevante +prg#:#prg_status_5#:#Failed prg#:#prg_status_accredited#:#Accreditato prg#:#prg_status_active#:#Attiva -prg#:#prg_status_byline#:#Use the status to control if this programme is assigned to students.###29 07 2022 new variable +prg#:#prg_status_byline#:#Usa lo stato per controllare se questo programma è assegnato agli studenti. prg#:#prg_status_completed#:#Completato prg#:#prg_status_draft#:#Bozza prg#:#prg_status_failed#:#non riuscito -prg#:#prg_status_hide_irrelevant#:#hide irrelevant###26 08 2024 new variable +prg#:#prg_status_hide_irrelevant#:#hide irrelevant###31 03 2023 new variable prg#:#prg_status_in_progress#:#In corso prg#:#prg_status_not_relevant#:#Non pertinente -prg#:#prg_status_outdated#:#Obsolete -prg#:#prg_still_valid#:#still valid###07 02 2020 new variable +prg#:#prg_status_outdated#:#Obsoleto +prg#:#prg_still_valid#:#ancora valido prg#:#prg_subtype_add#:#Aggiungi nuovo sottotipo prg#:#prg_subtypes#:#Sottotipi -prg#:#prg_successfully_removed_certificate#:#Successfully removed certificate of selected Users###26 08 2024 new variable -prg#:#prg_title#:#Title###07 02 2020 new variable +prg#:#prg_successfully_removed_certificate#:#Successfully removed certificate of selected Users###30 04 2024 new variable +prg#:#prg_title#:#Titolo prg#:#prg_type#:#Tipo di programma di studio prg#:#prg_type_add#:#Tipo di programma di studio prg#:#prg_type_assign_amd_sets#:#Assegna serie di metadati avanzati prg#:#prg_type_available_amd_sets#:#Serie di metadati avanzati disponibile -prg#:#prg_type_byline#:#Set a type to use certain custom metadata sets or icons.###29 07 2022 new variable +prg#:#prg_type_byline#:#Imposta un tipo per utilizzare determinati set o icone di metadati personalizzati. prg#:#prg_type_custom_icon#:#Icone personalizzate prg#:#prg_type_custom_icon_info#:#Informazioni icone personalizzate prg#:#prg_type_edit#:#Modifica sottotipo @@ -13671,101 +13665,101 @@ prg#:#prg_type_msg_unable_delete#:#Non è consentito eliminare questo tipo perch prg#:#prg_unmark_accredited#:#Deseleziona accreditato prg#:#prg_unmark_accredited_multi_success#:#Deselezione utenti selezionati come accreditati prg#:#prg_unmark_accredited_success#:#Nodo programma non accreditato per l'utente con successo. -prg#:#prg_unmark_relevant#:#Unmark Relevant###26 08 2024 new variable -prg#:#prg_update_certificate#:#Update Certificate###26 08 2024 new variable +prg#:#prg_unmark_relevant#:#Unmark Relevant###28 07 2023 new variable +prg#:#prg_update_certificate#:#Update Certificate###30 04 2024 new variable prg#:#prg_update_from_current_plan#:#Aggiorna dal piano attuale prg#:#prg_update_from_current_plan_not_possible#:#Non è possibile aggiornare dal piano attuale prg#:#prg_update_from_current_plan_partitial_success#:#Aggiorna parzialmente dal piano attuale -prg#:#prg_update_from_current_plan_success#:#Aggiorna dal piano attuale -prg#:#prg_update_from_plan_successful#:#Aggiorna con successo dal piano attuale! -prg#:#prg_update_progress_description#:#Set Progress from 'In Progress' to 'failed' after crossing Deadline.###29 07 2022 new variable -prg#:#prg_update_progress_title#:#Set Progress to Failed after Deadline###29 07 2022 new variable +prg#:#prg_update_from_current_plan_success#:#Aggiornato dal piano attuale +prg#:#prg_update_from_plan_successful#:#Aggiornato con successo dal piano attuale! +prg#:#prg_update_progress_description#:#Impostare l'avanzamento da 'In Progress' a 'failed' dopo aver superato la Deadline. +prg#:#prg_update_progress_title#:#Impostare l'avanzamento su Fallito dopo la scadenza prg#:#prg_update_successful#:#Modifiche salvate con successo! -prg#:#prg_user_not_restarted_desc#:#Sends users a warning mail if a qualification at a study programme expires and they haven't restarted the program yet.###07 02 2020 new variable -prg#:#prg_user_not_restarted_time_input#:#Reminder mail restart###07 02 2020 new variable -prg#:#prg_user_not_restarted_time_input_info#:#Reminder Mail Reminds the user x days before the invalidation that he must restart the programm.###07 02 2020 new variable -prg#:#prg_user_not_restarted_title#:#Send warning mail about restart###07 02 2020 new variable -prg#:#prg_user_risky_to_fail_desc#:#Sends users a warning mail if they are at the risk to fail a study programme due to a deadline.###07 02 2020 new variable -prg#:#prg_user_risky_to_fail_title#:#Send warning mail about possible failure###07 02 2020 new variable -prg#:#prg_validity#:#Validity###07 02 2020 new variable -prg#:#prg_validity_of_qualification#:#Validity of Achieved Qualifications###07 02 2020 new variable -prg#:#prg_validity_of_qualification_limit#:#Qualification Expiry###07 02 2020 new variable -prg#:#prg_validity_of_qualification_restart#:#Restart###07 02 2020 new variable +prg#:#prg_user_not_restarted_desc#:#Invia agli utenti una mail di avviso se una qualifica in un programma di studio sta per scadere non hanno ancora riavviato il programma. +prg#:#prg_user_not_restarted_time_input#:#Riavvio della mail di promemoria +prg#:#prg_user_not_restarted_time_input_info#:#Mail di promemoria che ricorda all'utente x giorni prima dell'invalidazione che deve riavviare il programma. +prg#:#prg_user_not_restarted_title#:#Inviare mail di avvertimento sul riavvio +prg#:#prg_user_risky_to_fail_desc#:#Invia agli utenti una mail di avvertimento se sono se un programma di studio sta per decadere +prg#:#prg_user_risky_to_fail_title#:#Inviare mail di avvertimento su una possibile decadenza +prg#:#prg_validity#:#Validità +prg#:#prg_validity_of_qualification#:#Validità delle qualifiche ottenute +prg#:#prg_validity_of_qualification_limit#:#Scadenza della qualifica +prg#:#prg_validity_of_qualification_restart#:#Ricomincia prg#:#prg_view#:#Visualizzazione -prg#:#prgr_may_not_create_circular_reference#:#This Study Programme may not be linked here since the parent object is alredy linked within the target.###07 02 2020 new variable -prg#:#re_assigned_mail_body#:#%s %s,<br \><br \>you were reassigned to study program '%s' as participants.###07 02 2020 new variable -prg#:#re_assigned_mail_subject#:#Renewed participation in the study programm###07 02 2020 new variable -prg#:#restart_information#:#Information regarding automatic restart upon pending qualification expiration###07 02 2020 new variable -prg#:#restart_period#:#Restart obligatory###07 02 2020 new variable -prg#:#restart_period_desc#:#days before expiry###07 02 2020 new variable -prg#:#restart_period_info#:#Days before qualification expiration to restart qualification###07 02 2020 new variable -prg#:#restart_period_label#:#Days before expiry###26 08 2024 new variable -prg#:#restart_recheck_desc#:#For assignments made via an automatism, the system rechecks whether criteria for the assignment still exist.###26 08 2024 new variable -prg#:#restart_recheck_label#:#Check prerequisites again###26 08 2024 new variable -prg#:#restarted#:#restarted###26 08 2024 new variable -prg#:#risky_to_fail_mail_body#:#%s %s,<br/><br/>the deadline for completing the study program '%s' will soon be reached.###29 07 2022 new variable -prg#:#risky_to_fail_mail_subject#:#Reminder, that the deadline for the study program will soon be reached###29 07 2022 new variable -prg#:#rol#:#Role###07 02 2020 new variable -prg#:#select_crs#:#Search for Courses###07 02 2020 new variable -prg#:#select_grp#:#Search for Groups###07 02 2020 new variable -prg#:#select_org#:#Search for Organisational Unit###07 02 2020 new variable -prg#:#select_role#:#Search for Roles###07 02 2020 new variable -prg#:#send_info_to_re_assign_mail#:#E-mail reminder restart###07 02 2020 new variable -prg#:#send_info_to_re_assign_mail_info#:#Send an e-mail to remind the user to restart the study program.###07 02 2020 new variable -prg#:#send_re_assigned_mail#:#E-mail renewed participation###07 02 2020 new variable -prg#:#send_re_assigned_mail_info#:#Send an e-mail to automatically re-join the sudy program.###07 02 2020 new variable -prg#:#send_risky_to_fail_mail#:#E-mail in case of failure###07 02 2020 new variable -prg#:#send_risky_to_fail_mail_info#:#Send an e-mail if the user is at risk of failure of the study program.###07 02 2020 new variable -prg#:#sp_certificate_completion_date#:#Date of completion###07 02 2020 new variable -prg#:#sp_certificate_description#:#Description of the Study Programme###07 02 2020 new variable -prg#:#sp_certificate_points#:#Amount of points that have been acquired###07 02 2020 new variable -prg#:#sp_certificate_progress_expires_at#:#Date of expiry of qualification###07 02 2020 new variable -prg#:#sp_certificate_title#:#Title of the Study Programme###07 02 2020 new variable -prg#:#sp_certificate_type#:#Type of the Study Programme###07 02 2020 new variable -prg#:#status_changed#:#Updated status###29 07 2022 new variable -prg#:#status_changed_due_to_deadline#:#Status changed according to deadline.###26 08 2024 new variable -prg#:#status_transition_not_allowed#:#Status change not allowed###29 07 2022 new variable -prg#:#status_unchanged#:#Status unchanged###29 07 2022 new variable -prg#:#study_programme_icon#:#Page Editor Study Programme Icon###26 08 2024 new variable -prg#:#update_deadline#:#Successfuly update deadline.###07 02 2020 new variable -prg#:#update_expire_date#:#Successfuly update expire date.###07 02 2020 new variable -prg#:#updated_from_settings#:#Updated from settings###29 07 2022 new variable -prg#:#usr_active#:#User###26 08 2024 new variable -prg#:#validity_qualification_date#:#Qualification expires at fixed date###29 07 2022 new variable -prg#:#validity_qualification_date_desc#:#expiry date###29 07 2022 new variable -prg#:#validity_qualification_period#:#Qualification expires individually###29 07 2022 new variable -prg#:#validity_qualification_period_desc#:#days after completion###29 07 2022 new variable -prg#:#validity_updated#:#Updated validity###29 07 2022 new variable -prg#:#vq_date#:#Expiration###26 08 2024 new variable -prg#:#vq_date_info#:#Qualification expires at fixed date###07 02 2020 new variable -prg#:#vq_date_label#:#Expiry date###26 08 2024 new variable -prg#:#vq_information#:#Information regarding validity of achived qualification###07 02 2020 new variable -prg#:#vq_period_info#:#Days until qualification will expire after achivement###07 02 2020 new variable -prg#:#vq_period_label#:#Days after completion###26 08 2024 new variable +prg#:#prgr_may_not_create_circular_reference#:#Questo programma di studio non può essere collegato qui poiché l'oggetto padre è già collegato all'interno dell'obiettivo. +prg#:#re_assigned_mail_body#:#%s %s,<br \><br \>sono stati riassegnati al programma di studio '%s' come partecipanti. +prg#:#re_assigned_mail_subject#:#Rinnovo della partecipazione al programma di studio +prg#:#restart_information#:#Informazioni sul riavvio automatico alla scadenza della qualifica pendente +prg#:#restart_period#:#Riavvio obbligatorio +prg#:#restart_period_desc#:#giorni prima della scadenza +prg#:#restart_period_info#:#Giorni prima della scadenza della qualifica per ricominciare la qualifica +prg#:#restart_period_label#:#Days before expiry###31 03 2023 new variable +prg#:#restart_recheck_desc#:#For assignments made via an automatism, the system rechecks whether criteria for the assignment still exist.###30 04 2024 new variable +prg#:#restart_recheck_label#:#Check prerequisites again###30 04 2024 new variable +prg#:#restarted#:#restarted###30 04 2024 new variable +prg#:#risky_to_fail_mail_body#:#%s %s,<br/><br/>il termine per completare il programma di studio '%s' sarà presto raggiunto. +prg#:#risky_to_fail_mail_subject#:#Promemoria, che la scadenza per il programma di studio sarà presto raggiunta +prg#:#rol#:#Role +prg#:#select_crs#:#Search for Courses +prg#:#select_grp#:#Search for Groups +prg#:#select_org#:#Cerca unità organizzativa +prg#:#select_role#:#Search for Roles +prg#:#send_info_to_re_assign_mail#:#E-mail promemoria di riavvio +prg#:#send_info_to_re_assign_mail_info#:#Invia un'e-mail per ricordare all'utente di riavviare il programma di studio. +prg#:#send_re_assigned_mail#:#Partecipazione rinnovata via e-mail +prg#:#send_re_assigned_mail_info#:#Invia un'e-mail per rientrare automaticamente nel programma di studio. +prg#:#send_risky_to_fail_mail#:#E-mail in caso di decadenza +prg#:#send_risky_to_fail_mail_info#:#Invia un'e-mail se l'utente è a rischio di fallimento del programma di studio. +prg#:#sp_certificate_completion_date#:#Data di completamento +prg#:#sp_certificate_description#:#Descrizione del programma di studio +prg#:#sp_certificate_points#:#Quantità di punti che acquisiti +prg#:#sp_certificate_progress_expires_at#:#Data di scadenza della qualifica +prg#:#sp_certificate_title#:#Titolo del programma di studio +prg#:#sp_certificate_type#:#Tipo di programma di studio +prg#:#status_changed#:#Updated status###09 03 2022 new variable +prg#:#status_changed_due_to_deadline#:#Status changed according to deadline.###31 03 2023 new variable +prg#:#status_transition_not_allowed#:#Status change not allowed###09 03 2022 new variable +prg#:#status_unchanged#:#Status unchanged###09 03 2022 new variable +prg#:#study_programme_icon#:#Page Editor Study Programme Icon###30 04 2024 new variable +prg#:#update_deadline#:#Data di scadenza aggiornata con successo. +prg#:#update_expire_date#:#Data di scadenza aggiornata con successo. +prg#:#updated_from_settings#:#Updated from settings###09 03 2022 new variable +prg#:#usr_active#:#User###31 03 2023 new variable +prg#:#validity_qualification_date#:#La qualifica scade ad una data prestabilita +prg#:#validity_qualification_date_desc#:#Data di scadenza +prg#:#validity_qualification_period#:#La qualifica scade individualmente +prg#:#validity_qualification_period_desc#:#giorni dopo il completamento +prg#:#validity_updated#:#Updated validity###09 03 2022 new variable +prg#:#vq_date#:#Expiration###31 03 2023 new variable +prg#:#vq_date_info#:#La qualifica scade ad una data prestabilita +prg#:#vq_date_label#:#Expiry date###31 03 2023 new variable +prg#:#vq_information#:#Informazioni sulla validità della qualifica raggiunta +prg#:#vq_period_info#:#Giorni allo scadere della qualifica dopo il completamento +prg#:#vq_period_label#:#Days after completion###31 03 2023 new variable prg#:#warning#:#Avvertenza! -prg#:#will_not_modify_deadline_on_successful_progress#:#No change because already completed or marked accredited###29 07 2022 new variable -prg#:#will_not_modify_irrelevant_progress#:#No change because not relevant###29 07 2022 new variable -prg#:#will_not_modify_relevant_progress#:#already relevant###29 07 2022 new variable -prg#:#will_not_modify_validity_on_non_successful_progress#:#Can change only when successful###29 07 2022 new variable -prg#:#will_not_set_top_progress_to_irrelevant#:#Cannot change top node to irrelevant.###29 07 2022 new variable -prg#:#will_not_update_cert_for_unsuccessful_progress#:#No certificate for unsuccessful programme###26 08 2024 new variable +prg#:#will_not_modify_deadline_on_successful_progress#:#No change because already completed or marked accredited###09 03 2022 new variable +prg#:#will_not_modify_irrelevant_progress#:#No change because not relevant###09 03 2022 new variable +prg#:#will_not_modify_relevant_progress#:#already relevant###09 03 2022 new variable +prg#:#will_not_modify_validity_on_non_successful_progress#:#Can change only when successful###09 03 2022 new variable +prg#:#will_not_set_top_progress_to_irrelevant#:#Cannot change top node to irrelevant.###09 03 2022 new variable +prg#:#will_not_update_cert_for_unsuccessful_progress#:#No certificate for unsuccessful programme###30 04 2024 new variable prtf#:#pdf_export#:#Esportazione PDF -prtf#:#prtf_add_assignment#:#Add Assignment###29 07 2022 new variable +prtf#:#prtf_add_assignment#:#Add Assignment###31 03 2023 new variable prtf#:#prtf_add_page#:#Aggiungi pagina prtf#:#prtf_add_portfolio#:#Aggiungi portfolio -prtf#:#prtf_add_portfolio_from_template#:#Add Portfolio From Template###26 08 2024 new variable +prtf#:#prtf_add_portfolio_from_template#:#Add Portfolio From Template###30 04 2024 new variable prtf#:#prtf_all_pages#:#Tutte le pagine prtf#:#prtf_allow_html#:#Consenti HTML/Javascript prtf#:#prtf_allow_html_info#:#Consente agli utenti di includere HTML e/o JavaScript nelle rispettive pagine di portfolio. Questo può portare a problemi di sicurezza. -prtf#:#prtf_allow_my_courses#:#Page Element "My Courses" +prtf#:#prtf_allow_my_courses#:#Elemento pagina "Miei Corsi" prtf#:#prtf_allow_my_courses_info#:#Consente di includere una lista di adesioni al corso attuale in un portfolio. prtf#:#prtf_author#:#Autore prtf#:#prtf_back_to_portfolio_owner#:#Modifica portfolio prtf#:#prtf_blog_page_created#:#Il blog è stato aggiunto. -prtf#:#prtf_copy_blog_pg#:#Copy Blog Page###29 07 2022 new variable +prtf#:#prtf_copy_blog_pg#:#Copy Blog Page###29 06 2022 new variable prtf#:#prtf_copy_page#:#Copia pagina/e -prtf#:#prtf_copy_pg#:#Copy Page###29 07 2022 new variable -prtf#:#prtf_copy_tab#:#Copy Tab +prtf#:#prtf_copy_pg#:#Copy Page###29 06 2022 new variable +prtf#:#prtf_copy_tab#:#Copia scheda prtf#:#prtf_create_portfolio#:#Aggiungi Portfolio prtf#:#prtf_create_template_from_portfolio#:#Portfolio prtf#:#prtf_create_template_from_portfolio_info#:#Seleziona un portfolio per utilizzare il suo contenuto e le sue impostazioni per il modello. @@ -13773,41 +13767,41 @@ prtf#:#prtf_creation_mode#:#Nuovo portfolio prtf#:#prtf_creation_mode_scratch#:#Crea senza modello prtf#:#prtf_creation_mode_template#:#Crea dal modello prtf#:#prtf_date_of_print#:#Data di stampa -prtf#:#prtf_decl_authorship#:#Declaration of Authorship +prtf#:#prtf_decl_authorship#:#Dichiarazione di autorialità prtf#:#prtf_default_portfolio#:#Profilo personale -prtf#:#prtf_delete_assignment#:#Delete Assignments###29 07 2022 new variable -prtf#:#prtf_delete_assignment_sure#:#Do you really want to delete the following assignment(s)?###29 07 2022 new variable -prtf#:#prtf_download_submission#:#Download Submission -prtf#:#prtf_edit_content#:#Edit Content -prtf#:#prtf_edit_data#:#Edit Data###29 07 2022 new variable +prtf#:#prtf_delete_assignment#:#Delete Assignments###31 03 2023 new variable +prtf#:#prtf_delete_assignment_sure#:#Do you really want to delete the following assignment(s)?###31 03 2023 new variable +prtf#:#prtf_download_submission#:#Scarica presentazioneIl portfolio mostrerà qui un blog dello spazio di lavoro personale. +prtf#:#prtf_edit_content#:#Modifica contenuto +prtf#:#prtf_edit_data#:#Edit Data###31 03 2023 new variable prtf#:#prtf_edit_embedded_blog#:#Modifica blog"%s" prtf#:#prtf_edit_portfolio#:#Modifica Portfolio prtf#:#prtf_exercise_info#:#Questo portfolio fa parte dell'unità di esercitazione "%s" dell'esercizio "%s". -prtf#:#prtf_exercise_submitted_info#:#Il tuo ultimo inserimento è stato il %s, per favore controlla il file di esportazione: %s. +prtf#:#prtf_exercise_submitted_info#:#Hai inviato il tuo portfolio su %s. Inoltre potresti voler salvare una copia per i tuoi file: %s prtf#:#prtf_existing_portfolio#:#Portfolio esistente prtf#:#prtf_finalize_portfolio#:#Salva portfolio e carica prtf#:#prtf_finalized#:#Questo portfolio è stato caricato. prtf#:#prtf_first_page_title#:#Titolo della prima pagina -prtf#:#prtf_has_been_set_online#:#Portfolio has been set online. +prtf#:#prtf_has_been_set_online#:#Il portfolio è stato impostato online. prtf#:#prtf_link#:#Collegamento prtf#:#prtf_manage_portfolios#:#Gestisci portfolio prtf#:#prtf_new_portfolio#:#Nuovo Portfolio prtf#:#prtf_no_blogs_info#:#Se vuoi creare un blog ricordati che può essere parte del tuo portfolio. -prtf#:#prtf_no_offline_share_info#:#A portfolio has to be online to be shared by other users. -prtf#:#prtf_no_submission#:#No Submission +prtf#:#prtf_no_offline_share_info#:#Un portfolio deve essere online per essere condiviso da altri utenti. +prtf#:#prtf_no_submission#:#Nessuna presentazione prtf#:#prtf_page_created#:#La pagina è stata creata prtf#:#prtf_page_element_my_courses_info#:#Questo è un elenco di tutti i miei corsi attualmente online e di cui sono membro. -prtf#:#prtf_page_element_my_courses_title#:#Current Courses +prtf#:#prtf_page_element_my_courses_title#:#Corsi attuali prtf#:#prtf_page_element_teaser_blog_template#:#Il portfolio mostrerà qui un blog dello spazio di lavoro personale. prtf#:#prtf_page_element_teaser_consultation_hours#:#Il portfolio mostrerà qui un calendario delle ore di consultazione. prtf#:#prtf_page_element_teaser_my_courses#:#Il portfolio mostrerà qui un elenco dei tuoi corsi attuali. prtf#:#prtf_page_element_teaser_settings#:#Impostazioni -prtf#:#prtf_page_element_teaser_skills#:#Il portfolio mostrerà qui il tuo livello di competenza. -prtf#:#prtf_page_type_prtf#:#Portfolio Page###29 07 2022 new variable -prtf#:#prtf_page_type_prtt#:#Portfolio Template Page###29 07 2022 new variable +prtf#:#prtf_page_element_teaser_skills#:#Il portfolio mostrerà qui il tuo livello di competenze. +prtf#:#prtf_page_type_prtf#:#Pagina del Portfolio +prtf#:#prtf_page_type_prtt#:#Pagina di Modello del Portfolio prtf#:#prtf_pages_copied#:#Questa pagina è stata copiata. prtf#:#prtf_pdf#:#PDF -prtf#:#prtf_permanent_link#:#Link to Portfolio:###26 08 2024 new variable +prtf#:#prtf_permanent_link#:#Link to Portfolio:###30 04 2024 new variable prtf#:#prtf_portfolio_created#:#Portfolio aggiunto prtf#:#prtf_portfolio_created_from_template#:#Questa è l’anteprima del tuo nuovo portfolio. Per aggiungere pagine e gestire il contenuto del portfolio, fare clic su "Modifica portfolio " in alto a questa pagina. prtf#:#prtf_portfolio_deleted#:#I portfolios sono stati cancellati @@ -13818,10 +13812,10 @@ prtf#:#prtf_print_selection#:#Selezione pagina prtf#:#prtf_profile_picture#:#Mostra immagine del profilo prtf#:#prtf_properties#:#Proprietà Portfolio prtf#:#prtf_public_comments#:#Commenti pubblici -prtf#:#prtf_role_assignment#:#Role Assignment###29 07 2022 new variable -prtf#:#prtf_role_title#:#Role###29 07 2022 new variable +prtf#:#prtf_role_assignment#:#Role Assignment###31 03 2023 new variable +prtf#:#prtf_role_title#:#Role###31 03 2023 new variable prtf#:#prtf_save_status_and_titles#:#Salva status e titolo -prtf#:#prtf_sec_protected_info#:#Protected sections cannot be edited by portfolio owners.###29 07 2022 new variable +prtf#:#prtf_sec_protected_info#:#Protected sections cannot be edited by portfolio owners.###31 03 2023 new variable prtf#:#prtf_selected_pages#:#Pagine selezionate prtf#:#prtf_set_default_publish_global#:#Condividi anche con gli utenti non registrati prtf#:#prtf_set_default_publish_registered#:#Condividi solo con gli utenti registrati @@ -13833,24 +13827,24 @@ prtf#:#prtf_signature#:#Campo di firma prtf#:#prtf_signature_date#:#Data, firma prtf#:#prtf_signature_info#:#Aggiunge un campo alla stampa in cui l'autore può firmare il portfolio. prtf#:#prtf_style#:#Stile Portfolio -prtf#:#prtf_submission_on#:#Submitted on $1 -prtf#:#prtf_successfully_shared_prtf#:#Confirmation Shared Portfolio '%s'###26 08 2024 new variable -prtf#:#prtf_successfully_shared_prtf_body#:#You have shared your portfolio '%s' with:###26 08 2024 new variable +prtf#:#prtf_submission_on#:#Inviato $1 +prtf#:#prtf_successfully_shared_prtf#:#Confirmation Shared Portfolio '%s'###30 04 2024 new variable +prtf#:#prtf_successfully_shared_prtf_body#:#You have shared your portfolio '%s' with:###30 04 2024 new variable prtf#:#prtf_sure_delete_portfolio_pages#:#Sei sicuro di voler cancellare le seguenti pagine del portfolio? prtf#:#prtf_sure_delete_portfolios#:#Sei sicuro di voler cancellare i seguenti portfolios? prtf#:#prtf_tab_other_users#:#Portfolios di altri utenti prtf#:#prtf_tab_portfolios#:#Il mio portfolio -prtf#:#prtf_table_of_contents#:#Table of Contents###29 10 2025 new variable +prtf#:#prtf_table_of_contents#:#Table of Contents###28 11 2025 new variable prtf#:#prtf_template_editor_placeholder_info#:#Questo segnaposto verrà sostituito nel portfolio. prtf#:#prtf_template_import_blog_create#:#Crea nuovo blog prtf#:#prtf_template_import_blog_ignore#:#Elimina pagine blog prtf#:#prtf_template_import_blog_reuse#:#Utilizza blog esistente prtf#:#prtf_template_import_new_skills#:#Se attivate, queste voci verranno aggiunte alle proprie competenze personali. -prtf#:#prtf_template_title#:#Portfolio Template###29 07 2022 new variable +prtf#:#prtf_template_title#:#Portfolio Template###31 03 2023 new variable prtf#:#prtf_unset_as_default#:#Non usare come mio profilo prtf#:#prtf_unset_default_share_info#:#I cambiamenti sono stati salvati. Controlla per favore l'autorizzazione per il portfolio. prtf#:#prtf_use_page_layout#:#Usa il layout della pagina -prtf#:#prtf_visible_for_tutor#:#Visible For Tutor###26 08 2024 new variable +prtf#:#prtf_visible_for_tutor#:#Visible For Tutor###30 04 2024 new variable prtf#:#prtt_title_info#:#Please note that this will be also the default title for all portfolios being created form this template. prtt#:#prtt_activation_limited_visibility_info#:#Se scelto, il modello del portfolio è visibile anche al di fuori della disponibilità specificata. prtt#:#prtt_activation_online_info#:#Attiva questa impostazione per rendere accessibile il modello di portfolio agli utenti. @@ -13859,10 +13853,10 @@ prtt#:#prtt_copy#:#Copia modello di portfolio prtt#:#prtt_edit#:#Modifica modello di portfolio prtt#:#prtt_import#:#Importa modello di portfolio prtt#:#prtt_new#:#Nuovo modello di portfolio -prtt#:#prtt_pfpg#:#Portfolio Page###29 07 2022 new variable +prtt#:#prtt_pfpg#:#Portfolio Page###31 03 2023 new variable prtt#:#prtt_portfolio_created#:#Aggiungi modello di portfolio prtt#:#prtt_properties#:#Proprietà modello di portfolio -prtt#:#prtt_select_datasets#:#Select Datasets###29 07 2022 new variable +prtt#:#prtt_select_datasets#:#Select Datasets###31 03 2023 new variable prtt#:#prtt_style#:#Stile modello di portfolio ps#:#cdf_edited_by_self#:#dall’utente ps#:#crs_ps_cdf_info#:#Ulteriori dati relativi al corso. Compila i seguenti campi. @@ -13903,15 +13897,15 @@ ps#:#ps_error_message_password_min3_because_chars_numbers_sc#:#La grandezza mini ps#:#ps_export_admin#:#Amministratori ps#:#ps_export_confirm#:#Attiva le condizioni di utilizzo all'accesso per l'utente ps#:#ps_export_confirm_group#:#Attiva le condizioni di utilizzo per il partecipante al gruppo -ps#:#ps_export_confirm_group_info#:#When joining a group, users are required to accept that their personal data can be viewed by the group admins.###29 10 2025 new variable -ps#:#ps_export_confirm_info#:#When joining a course, users are required to accept that their personal data can be viewed by the course admins.###29 10 2025 new variable +ps#:#ps_export_confirm_group_info#:#When joining a group, users are required to accept that their personal data can be viewed by the group admins.###28 11 2025 new variable +ps#:#ps_export_confirm_info#:#When joining a course, users are required to accept that their personal data can be viewed by the course admins.###28 11 2025 new variable ps#:#ps_export_course#:#Mostra dati utente ed export nei corsi. ps#:#ps_export_data#:#Dati del Profilo Personale ps#:#ps_export_excel#:#Inizia l'esportazione excel ps#:#ps_export_files#:#Esporta files ps#:#ps_export_groups#:#Mostra ed esporta i dati personali ps#:#ps_export_member#:#Membri -ps#:#ps_export_prgs#:#Allow export of user profile data in Study Programmes###26 08 2024 new variable +ps#:#ps_export_prgs#:#Allow export of user profile data in Study Programmes###30 04 2024 new variable ps#:#ps_export_settings#:#Esporta Impostazioni ps#:#ps_export_sub#:#Partecipanti ps#:#ps_export_tutor#:#Tutor @@ -13923,14 +13917,14 @@ ps#:#ps_grp_user_fields#:#Campi utente specifici per gruppo ps#:#ps_login_max_attempts#:#Numero massimo di tentativi di login ps#:#ps_login_max_attempts_info#:#Numero massimo di tentativi di login. Inserire zero (0) per disabilitare questa opzione. ps#:#ps_not_accepted#:#Non accettato -ps#:#ps_participants_list_courses#:#Allow Activation of Participant Lists in the Member Gallery of Courses###29 07 2022 new variable -ps#:#ps_passwd_policy_change_force_user_reset_succ#:#The changes have been successfully applied.###07 02 2020 new variable -ps#:#ps_passwd_policy_changed_force_user_reset#:#The changes were saved successfully. You just modified at least one password policy setting. Should local users be forced to change their password after the next successful login?###07 02 2020 new variable +ps#:#ps_participants_list_courses#:#Permettere l'attivazione di liste di partecipanti nella galleria dei membri dei corsi +ps#:#ps_passwd_policy_change_force_user_reset_succ#:#Le modifiche sono state applicate con successo. +ps#:#ps_passwd_policy_changed_force_user_reset#:#Le modifiche sono state salvate con successo. Hai appena modificato almeno un'impostazione della politica delle password. Gli utenti locali dovrebbero essere costretti a cambiare la loro password dopo il prossimo login riuscito? ps#:#ps_password_change_on_first_login_enabled#:#Cambia la password al primo accesso ps#:#ps_password_change_on_first_login_enabled_info#:#Se abilitato, gli utenti devono cambiare le password al primo login (eccetto gli utenti che si sono registrati da soli). ps#:#ps_password_chars_and_numbers_enabled#:#Caratteri e Numeri ps#:#ps_password_chars_and_numbers_enabled_info#:#Se abilitato, le password devono contenere sia caratteri che cifre numeriche. -ps#:#ps_password_force_user_reset#:#Force Password Reset###29 10 2025 new variable +ps#:#ps_password_force_user_reset#:#Force Password Reset###28 11 2025 new variable ps#:#ps_password_max_age#:#Durata massima della password ps#:#ps_password_max_age_info#:#Imposta la durata massima della password in giorni. Inserire zero (0) per disabilitare questa opzione. ps#:#ps_password_max_length#:#Lunghezza massima della password @@ -13949,7 +13943,7 @@ ps#:#ps_security_protection#:#Impostazioni di sicurezza ps#:#ps_select_one#:#Seleziona un file di export ps#:#ps_show_crs_access#:#Visualizza l'ultimo tempo di accesso dei partecipanti al corso ps#:#ps_show_grp_access#:#Visualizza l'ultimo tempo di accesso dei partecipanti del grupo -ps#:#ps_show_lso_access#:#Show last access time of learning sequence participants###26 08 2024 new variable +ps#:#ps_show_lso_access#:#Show last access time of learning sequence participants###26 04 2023 new variable ps#:#ps_size#:#Dimensioni ps#:#ps_type_select#:#Seleziona Campo ps#:#ps_type_select_long#:#Seleziona Box (valori fissi) @@ -13965,36 +13959,36 @@ ps#:#show_privacy#:#Privacy ps#:#show_security#:#Sicurezza pwassist#:#password_assistance#:#Servizio di assistenza per le password pwassist#:#pwassist_disabled_no_access#:#L'assistenza per la password non è abilitata. Si prega di contattare l'amministrazione del sistema per ulteriore assistenza: %s -pwassist#:#pwassist_enter_email#:#Per favore, indica un indirizzo di eMail valido e premi Invia.\\nILIAS ti inviera' una eMail all'indirizzo indicato che conterra' tutti i nomi degli utenti registrati con quell& -pwassist#:#pwassist_enter_username_and_email#:#Inserisci il nome dell& -pwassist#:#pwassist_enter_username_and_new_password#:#Inserisci il nome dell& -pwassist#:#pwassist_login_not_match#:#Per favore, inserisci un altro nome di utente.\\nIl nome dell& -pwassist#:#pwassist_mail_body#:#Registrazione di una nuova password per l& -pwassist#:#pwassist_mail_sent#:#Un messaggio e' stato inviato a %1$s.\\nPer favore controlla la tua casella di posta. -pwassist#:#pwassist_mail_sent_generic#:#A message has been sent to the email address defined in ILIAS.\nPlease check your mail box. +pwassist#:#pwassist_enter_email#:#Inserisci un indirizzo e-mail e invia il modulo. ILIAS invierà un'e-mail a tale indirizzo. L'e-mail contiene tutti i nomi utente che hanno registrato questo indirizzo e-mail. Scegliere un nome utente adatto e utilizzare il servizio password per recuperare una nuova password. Se non si recupera alcuna e-mail da questo servizio, contattare l'amministratore del corso o %1$s. +pwassist#:#pwassist_enter_username_and_email#:#Immettere un nome utente e l'indirizzo e-mail associato nei campi indicati di seguito. ILIAS invierà un messaggio a tale indirizzo e-mail. Il messaggio contiene un indirizzo per una pagina Web, in cui è possibile inserire una nuova password per l'account utente. Se non è possibile assegnare una password al proprio account utente utilizzando questo modulo, contattare l'amministrazione del corso o inviare un'e-mail a %1$s. +pwassist#:#pwassist_enter_username_and_new_password#:#Inserisci il nome utente e la nuova password nei campi sottostanti. +pwassist#:#pwassist_login_not_match#:#Inserisci un altro nome utente. \ Il nome utente che hai inserito non corrisponde al nome utente per il quale hai richiesto l'assistenza tramite password. +pwassist#:#pwassist_mail_body#:#Registra una nuova password per il tuo account utente: \ t %1$s Questo messaggio è stato generato automaticamente dal server ILIAS \ t %2$s You (o qualcuno a %3$s ) ha richiesto l'assistenza per la password per l'account utente " %4$s". Controlla attentamente le condizioni elencate di seguito e procedi di conseguenza: - Se hai utilizzato il modulo di assistenza per la password sul server ILIAS da incidente: Elimina questa mail. - Se sei sicuro di non aver mai chiesto assistenza per la password su questo server ILIAS: Si prega di contattare %5$s. - Se hai chiesto assistenza per la password, per favore procedere come segue: 1. Apri il tuo browser. 2. Immettere il seguente indirizzo nel browser: \ t %6$s Importante: l'indirizzo è una riga singola. Se vedi questo indirizzo diviso in più righe, il tuo programma di posta elettronica ha inserito queste interruzioni di riga. 3. Nella pagina Web visualizzata dal browser, inserisci una nuova password per il tuo account utente. Si prega di notare che, per motivi di sicurezza, è possibile eseguire i tre passaggi sopra esattamente una sola volta e solo per un periodo di tempo limitato. Successivamente l'indirizzo non è più valido e è necessario utilizzare nuovamente la pagina di assistenza per la password sul server ILIAS. +pwassist#:#pwassist_mail_sent#:#Un messaggio e' stato inviato a %1$s.\ Per favore controlla la tua casella di posta. +pwassist#:#pwassist_mail_sent_generic#:#È stato inviato un messaggio all'indirizzo di posta elettronica definito in ILIAS. Per favore controlla la tua casella di posta. pwassist#:#pwassist_mail_subject#:#Servizio di assistenza per le password di ILIAS -pwassist#:#pwassist_password_assigned#:#La password e' stata assegnata con successo all& -pwassist#:#pwassist_session_expired#:#Per favore riempi i campi del form di nuovo.\\nLa tua sessione con il servizio di assistenza per le password e' scaduta. Questo puo' essere stato causato dall& -pwassist#:#pwassist_username_mail_body#:#Questi sono gli utenti attivi che sono stati trovati nel database con l& +pwassist#:#pwassist_password_assigned#:#La password è stata assegnata correttamente all'utente " %1$s". +pwassist#:#pwassist_session_expired#:#Compila nuovamente questo modulo. La tua sessione di assistenza per la password è scaduta. Ciò può essere accaduto perché hai tentato di utilizzare il link che ti è stato inviato più di una volta via e-mail o perché è trascorso troppo tempo dall'invio del link. +pwassist#:#pwassist_username_mail_body#:#Questi sono i nomi utente attivi trovati per l'indirizzo e-mail indicato: %s. Questo messaggio è stato creato automaticamente dal seguente server ILIAS: %s. Tu (o qualcuno con IP %s) ha richiesto il supporto per i nomi utente dimenticati per l'indirizzo e-mail "%s". Si prega di controllare quanto segue e agire come suggerito:\n- Hai richiesto questa e-mail per sbaglio: Elimina questa e-mail.\n- Sei sicuro di non aver mai richiesto questa e-mail: Si prega di contattare %s.\n- Se hai richiesto questa e-mail, procedi come segue:\n 1. Avvia il tuo browser Internet.\n 2. Immettere il seguente URL: %s\n Importante: l'indirizzo è una riga singola. Se vedi questo indirizzo diviso in più righe, il tuo programma di posta elettronica ha inserito queste interruzioni di riga.\n 3. Il tuo browser ora mostra il servizio password. Utilizzare questa pagina insieme a uno dei nomi utente e all'indirizzo e-mail corrispondente per recuperare una nuova password. pwassist#:#unassist_disabled_no_access#:#L'assistenza per il nome utente non è abilitata. Si prega di contattare l'amministrazione del sistema per ulteriore assistenza: %s -pwsp#:#pwsp_enable_personal_resources#:#Enable personal resources###07 02 2020 new variable -pwsp#:#pwsp_enable_wsp_blogs#:#Enable Blogs###07 02 2020 new variable -pwsp#:#pwsp_enable_wsp_files#:#Enable Files###07 02 2020 new variable -pwsp#:#pwsp_enable_wsp_links#:#Enable Links###07 02 2020 new variable -pwsp#:#pwsp_type_cannot_be_copied#:#Objects of type '%s' cannot be copied.###29 10 2025 new variable -qpl#:#qpl_filter_commented_exclude#:#Questions without comments###26 08 2024 new variable -qpl#:#qpl_filter_commented_only#:#Questions with comments###26 08 2024 new variable -qpl#:#qpl_page_type_qfbg#:#General Feedback###29 07 2022 new variable -qpl#:#qpl_page_type_qfbs#:#Special Feedback###29 07 2022 new variable -qpl#:#qpl_page_type_qht#:#Hint###29 07 2022 new variable -qpl#:#qpl_page_type_qpl#:#Question Page###29 07 2022 new variable +pwsp#:#pwsp_enable_personal_resources#:#Attiva risorse personali +pwsp#:#pwsp_enable_wsp_blogs#:#Attiva blog +pwsp#:#pwsp_enable_wsp_files#:#Attiva files +pwsp#:#pwsp_enable_wsp_links#:#Attiva links +pwsp#:#pwsp_type_cannot_be_copied#:#Objects of type '%s' cannot be copied.###23 09 2025 new variable +qpl#:#qpl_filter_commented_exclude#:#Questions without comments###30 04 2024 new variable +qpl#:#qpl_filter_commented_only#:#Questions with comments###30 04 2024 new variable +qpl#:#qpl_page_type_qfbg#:#Feedback generale +qpl#:#qpl_page_type_qfbs#:#Feedback speciali +qpl#:#qpl_page_type_qht#:#Suggerimento +qpl#:#qpl_page_type_qpl#:#Pagina delle domande rating#:#rat_not_rated_yet#:#Non valutato rating#:#rat_nr_ratings#:#%s Valutazioni rating#:#rat_one_rating#:#Una valutazione rating#:#rating_activate_rating#:#Consenti valutazione rating#:#rating_activate_rating_info#:#Se abilitata, gli utenti possono valutare quest’oggetto. rating#:#rating_add_category#:#Aggiungi categoria -rating#:#rating_avg_rating#:#Average Rating###29 07 2022 new variable +rating#:#rating_avg_rating#:#Average Rating###09 03 2022 new variable rating#:#rating_categories#:#Rating delle categorie rating#:#rating_category_add#:#Aggiungi rating#:#rating_category_create#:#Crea categoria @@ -14007,13 +14001,13 @@ rating#:#rating_category_updated#:#Categoria salvata. rating#:#rating_export_category#:#Categoria rating#:#rating_export_date#:#Data rating#:#rating_export_rating#:#Classificazione -rating#:#rating_new_objects_auto#:#Enable Rating for new Objects -rating#:#rating_new_objects_auto_info#:#If enabled, new files, learning modules and wikis can be rated. +rating#:#rating_new_objects_auto#:#Abilita la valutazione per i nuovi oggetti +rating#:#rating_new_objects_auto_info#:#Se abilitato i nuovi file, i moduli di apprendimento e wiki possono essere valutati. rating#:#rating_number_votes#:#%s Classificazioni -rating#:#rating_open_dialog#:#Open rating dialog###29 07 2022 new variable +rating#:#rating_open_dialog#:#Open rating dialog###09 03 2022 new variable rating#:#rating_overlay_submit#:#Invia voto -rating#:#rating_personal_rating#:#Your Rating###29 07 2022 new variable -rating#:#rating_rate_x_of_5#:#Rate with %s of 5 stars###29 07 2022 new variable +rating#:#rating_personal_rating#:#Your Rating###09 03 2022 new variable +rating#:#rating_rate_x_of_5#:#Rate with %s of 5 stars###09 03 2022 new variable rating#:#rating_remove#:#Rimuovi valutazione rating#:#rating_update_positions#:#Salva l'ordine rating#:#rating_your_rating#:#La Tua Qualificazione. @@ -14024,18 +14018,18 @@ rbac#:#accs_write#:#Modifica le Impostazioni di Accessibilita' rbac#:#activate_wiki_protection#:#Imposta solo lettura rbac#:#active_preconditions#:#Condizioni preliminari rbac#:#add_consultation_hours#:#Aggiungi orario di colloquio -rbac#:#add_consume_provider#:#Add Own LTI Provider Settings###07 02 2020 new variable -rbac#:#add_pages#:#Add Pages###26 08 2024 new variable +rbac#:#add_consume_provider#:#Add Own LTI Provider Settings +rbac#:#add_pages#:#Add Pages###30 04 2024 new variable rbac#:#add_reply#:#Aggiungi risposta rbac#:#add_thread#:#Aggiungi Thread rbac#:#adm_edit_permission#:#Modifica le impostazioni dei permessi rbac#:#adm_read#:#Accedere in lettura alla sezione di amministrazione rbac#:#adm_visible#:#Vedere la sezione di amministrazione -rbac#:#adm_write#:#Modificare la sezione di amministrazione -rbac#:#adn_edit_permission#:#User can change permissions of Administrative Notifications' administration.###29 07 2022 new variable -rbac#:#adn_read#:#User has read access to administration of Administrative Notifications.###29 07 2022 new variable -rbac#:#adn_visible#:#Administration of Administrative Notifications is visible.###29 07 2022 new variable -rbac#:#adn_write#:#User can add and edit Administrative Notifications.###29 07 2022 new variable +rbac#:#adm_write#:#L'utente può modificare le impostazioni generali in Amministrazione. +rbac#:#adn_edit_permission#:#User can change permissions of Administrative Notifications' administration. +rbac#:#adn_read#:#User has read access to administration of Administrative Notifications. +rbac#:#adn_visible#:#Administration of Administrative Notifications is visible. +rbac#:#adn_write#:#User can add and edit Administrative Notifications. rbac#:#adopt_perm_from_template#:#Copia Impostazioni Permesi rbac#:#adve_edit_permission#:#Modifica Impostazioni dei Permessi rbac#:#adve_read#:#Gestione avanzata dell'amministrazione @@ -14044,12 +14038,12 @@ rbac#:#adve_write#:#Amministrazione Avanzata Editing rbac#:#amend_grading#:#Modifica la classificazione finalizzata rbac#:#assf_edit_permission#:#Modificare i permessi rbac#:#assf_read#:#Accedere in lettura alla Amministrazione di Test e Valutazioni -rbac#:#assf_visible#:#Vedere Test&Valutazioni -rbac#:#assf_write#:#Modificare Test&Valutazioni -rbac#:#auth_edit_permission#:#Modificare la modalita' di autenticazione +rbac#:#assf_visible#:#L'amministrazione del test e della valutazione è visibile +rbac#:#assf_write#:#L'utente può modificare le impostazioni di Test and Assessment Administration +rbac#:#auth_edit_permission#:#L'utente può modificare le impostazioni di autorizzazione dell'amministrazione di autenticazione e registrazione rbac#:#auth_read#:#Accedere in lettura alla modalita' di autenticazione rbac#:#auth_visible#:#Vedere la modalita' di autenticazione -rbac#:#auth_write#:#Modificare la modalita' di autenticazione +rbac#:#auth_write#:#L'utente può modificare le impostazioni per l'autenticazione e la registrazione rbac#:#awra_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione nell’amministrazione “Chi è online?” rbac#:#awra_read#:#L’utente ha l’accesso di lettura all’amministrazione “Chi è online?” rbac#:#awra_visible#:#L’amministrazione “Chi è online” è visibile @@ -14058,7 +14052,7 @@ rbac#:#bdga_edit_permission#:#L’utente può modificare le impostazioni di auto rbac#:#bdga_read#:#L’utente può leggere il contenuto del badge di amministrazione rbac#:#bdga_visible#:#Il badge di amministrazione è visibile rbac#:#bdga_write#:#L’utente può modificare le impostazioni del badge di amministrazione -rbac#:#bibl_copy#:#User can copy bibliography +rbac#:#bibl_copy#:#L'utente può copiare la bibliografia rbac#:#bibl_delete#:#L’utente può spostare o eliminare la bibliografia rbac#:#bibl_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione rbac#:#bibl_read#:#L’utente può leggere il contenuto della bibliografia @@ -14074,19 +14068,19 @@ rbac#:#blga_edit_permission#:#Cambia le impostazioni dei permessi rbac#:#blga_read#:#Accesso consentito a Blog-Administration rbac#:#blga_visible#:#Blog Administration è visibile rbac#:#blga_write#:#Modifica Blog Administration -rbac#:#blog_contribute#:#User can contribute +rbac#:#blog_contribute#:#L'utente può contribuire rbac#:#blog_copy#:#Copia blog rbac#:#blog_delete#:#Cancella il blog rbac#:#blog_edit_permission#:#Cambiare le impostazioni rbac#:#blog_read#:#Il blog è leggibile -rbac#:#blog_redact#:#User can edit all postings +rbac#:#blog_redact#:#L'utente può modificare tutti i post rbac#:#blog_visible#:#Il blog iè visibile rbac#:#blog_write#:#L'utente può modificare il blog rbac#:#book_copy#:#L’utente può copiare il gruppo di prenotazione rbac#:#book_delete#:#L'utente può cancellare o spostare il pool di prenotazione rbac#:#book_edit_permission#:#Cambia permessi di accesso -rbac#:#book_manage_all_reservations#:#User can manage all reservations###28 10 2024 new variable -rbac#:#book_manage_own_reservations#:#User can manage own reservations###28 10 2024 new variable +rbac#:#book_manage_all_reservations#:#User can manage all reservations###28 11 2025 new variable +rbac#:#book_manage_own_reservations#:#User can manage own reservations###28 11 2025 new variable rbac#:#book_read#:#Salva le prenotazioni in Booking Pool rbac#:#book_visible#:#Booking Pool è visibile rbac#:#book_write#:#Modifica Booking Pool @@ -14125,54 +14119,54 @@ rbac#:#change_existing_prefix#:#Modifica esistente rbac#:#change_existing_prefix_single#:#Modifica rbac#:#change_existing_suffix#:#Cambiare rbac#:#change_existing_suffix_single#:#Adattare -rbac#:#change_presentation#:#Change Presentation###07 02 2020 new variable -rbac#:#chtr_delete#:#User can move or delete course +rbac#:#change_presentation#:#Presentazione del cambiamento +rbac#:#chtr_delete#:#L'utente può spostare o cancellare il corso rbac#:#chtr_edit_permission#:#Cambia i permessi rbac#:#chtr_moderate#:#Modera la Chatroom rbac#:#chtr_read#:#Leggi rbac#:#chtr_visible#:#Visibile rbac#:#chtr_write#:#Scrivi -rbac#:#cmis_edit_permission#:#User can change permission settings of xAPI/cmi5 administration.###29 10 2025 new variable -rbac#:#cmis_read#:#User has read access to xAPI/cmi5 administration.###29 07 2022 new variable -rbac#:#cmis_visible#:#Administration of xAPI/cmi5 is visible.###29 07 2022 new variable -rbac#:#cmis_write#:#User can edit settings of xAPI/cmi5 administration.###29 07 2022 new variable -rbac#:#cmix_copy#:#User can copy xAPI/cmi5 Object###07 02 2020 new variable -rbac#:#cmix_delete#:#User can move or delete xAPI/cmi5 Object###07 02 2020 new variable -rbac#:#cmix_edit_learning_progress#:#User can edit learning progress settings###07 02 2020 new variable -rbac#:#cmix_edit_permission#:#User can change permission settings###07 02 2020 new variable -rbac#:#cmix_read#:#User can see xAPI/cmi5 Object###07 02 2020 new variable -rbac#:#cmix_read_learning_progress#:#User can view learning progress of other users###07 02 2020 new variable -rbac#:#cmix_read_outcomes#:#User can see learning experiences and ranking of other users###07 02 2020 new variable -rbac#:#cmix_visible#:#xAPI/cmi5 Object is visible###07 02 2020 new variable -rbac#:#cmix_write#:#User can edit settings of xAPI/cmi5 Object###07 02 2020 new variable +rbac#:#cmis_edit_permission#:#User can change permission settings of xAPI/cmi5 administration.###01 04 2025 new variable +rbac#:#cmis_read#:#L'utente ha accesso in lettura all'amministrazione di xAPI/cmi5. +rbac#:#cmis_visible#:#L'amministrazione di xAPI/cmi5 è visibile. +rbac#:#cmis_write#:#L'utente può modificare le impostazioni dell'amministrazione di xAPI/cmi5. +rbac#:#cmix_copy#:#L'utente può copiare l'oggetto xAPI/cmi5 +rbac#:#cmix_delete#:#L'utente può spostare o cancellare l'oggetto xAPI/cmi5 Object +rbac#:#cmix_edit_learning_progress#:#L'utente può modificare le impostazioni del progresso dell'apprendimento +rbac#:#cmix_edit_permission#:#L'utente può cambiare le impostazioni dei permessi +rbac#:#cmix_read#:#L'utente può vedere l'oggetto xAPI/cmi5 +rbac#:#cmix_read_learning_progress#:#L'utente può visualizzare i progressi di apprendimento degli altri utenti +rbac#:#cmix_read_outcomes#:#L'utente può vedere le esperienze di apprendimento e la classifica degli altri utenti +rbac#:#cmix_visible#:#L'oggetto xAPI/cmi5 è visibile +rbac#:#cmix_write#:#L'utente può modificare le impostazioni dell'oggetto xAPI/cmi5 rbac#:#cmps_edit_permission#:#Cambia le impostazioni dei permessi rbac#:#cmps_read#:#Accesso in lettura alle impostazioni dei Componenti rbac#:#cmps_visible#:#Le impostazioni dei componenti sono visibili rbac#:#cmps_write#:#Edita le impostazioni dei Componenti -rbac#:#coms_edit_permissions#:#User can change permission settings of administration of Comments.###29 07 2022 new variable -rbac#:#coms_read#:#User has read access to administration of Comments.###29 07 2022 new variable -rbac#:#coms_visible#:#Administration of Comments is visible.###29 07 2022 new variable -rbac#:#coms_write#:#User can edit settings of administration of Comments.###29 07 2022 new variable +rbac#:#coms_edit_permissions#:#L'utente può cambiare le impostazioni dei permessi di amministrazione dei commenti. +rbac#:#coms_read#:#L'utente ha accesso in lettura all'amministrazione dei commenti. +rbac#:#coms_visible#:#L'amministrazione dei commenti è visibile. +rbac#:#coms_write#:#L'utente può modificare le impostazioni di amministrazione dei commenti. rbac#:#condition_failed#:#Non riuscito rbac#:#condition_learning_progress#:#Derivare dal progresso di apprendimento -rbac#:#condition_result_range_percentage#:#Result Range###28 10 2024 new variable +rbac#:#condition_result_range_percentage#:#Result Range###28 11 2025 new variable rbac#:#contribute#:#Contribuisci -rbac#:#copa_copy#:#Copy Content Page -rbac#:#copa_delete#:#User can move or delete Content Page -rbac#:#copa_edit_learning_progress#:#User can edit learning progress settings -rbac#:#copa_edit_permission#:#User can change permission settings -rbac#:#copa_read#:#User can read Content Page -rbac#:#copa_read_learning_progress#:#User can view learning progress of other users -rbac#:#copa_visible#:#Content Page is visible -rbac#:#copa_write#:#User can edit Content Page -rbac#:#cpad_edit_permissions#:#User can change permission settings of administration of Content Pages.###29 07 2022 new variable -rbac#:#cpad_read#:#User has read access to administration of Content Pages.###29 07 2022 new variable -rbac#:#cpad_visible#:#Administration of Content Pages is visible.###29 07 2022 new variable -rbac#:#cpad_write#:#User can edit settings of administration of Content Pages.###29 07 2022 new variable +rbac#:#copa_copy#:#Copiare il contenuto della pagina +rbac#:#copa_delete#:#L'utente può spostare o eliminare la pagina dei contenuti +rbac#:#copa_edit_learning_progress#:#L'utente può modificare le impostazioni del progresso dell'apprendimento +rbac#:#copa_edit_permission#:#L'utente può cambiare le impostazioni dei permessi +rbac#:#copa_read#:#L'utente può leggere la pagina dei contenuti +rbac#:#copa_read_learning_progress#:#L'utente può visualizzare i progressi di apprendimento degli altri utenti +rbac#:#copa_visible#:#La pagina dei contenuti è visibile +rbac#:#copa_write#:#L'utente può modificare la pagina dei contenuti +rbac#:#cpad_edit_permissions#:#L'utente può cambiare le impostazioni dei permessi di amministrazione delle pagine di contenuto. +rbac#:#cpad_read#:#L'utente ha accesso in lettura all'amministrazione delle pagine di contenuto. +rbac#:#cpad_visible#:#L'amministrazione delle pagine di contenuto è visibile. +rbac#:#cpad_write#:#L'utente può modificare le impostazioni di amministrazione delle pagine di contenuto. rbac#:#crs_copy#:#Copia Corso rbac#:#crs_delete#:#Cancella un corso rbac#:#crs_edit_event#:#Edita gli Eventi del Calendario -rbac#:#crs_edit_learning_progress#:#Modifica i progressi dell& +rbac#:#crs_edit_learning_progress#:#L'utente può modificare le impostazioni di avanzamento dell'apprendimento rbac#:#crs_edit_permission#:#Modificare le impostazioni dei permessi rbac#:#crs_grade#:#Punteggio membri del corso rbac#:#crs_join#:#Iscriversi ad un corso @@ -14185,9 +14179,9 @@ rbac#:#crs_visible#:#Vedere un corso rbac#:#crs_write#:#Modificare un corso rbac#:#crsr_copy#:#Copia il Riferimento del Corso rbac#:#crsr_delete#:#Cancella il Riferimento del Corso -rbac#:#crsr_edit_learning_progress#:#User can edit learning progress settings###26 08 2024 new variable +rbac#:#crsr_edit_learning_progress#:#User can edit learning progress settings###28 07 2023 new variable rbac#:#crsr_edit_permission#:#Cambia le impostazioni dei permessi -rbac#:#crsr_read_learning_progress#:#User can view learning progress of other users###26 08 2024 new variable +rbac#:#crsr_read_learning_progress#:#User can view learning progress of other users###28 07 2023 new variable rbac#:#crsr_visible#:#Il riferimento del Corso è visibile rbac#:#crsr_write#:#Edita i Riferimenti del Corso rbac#:#crss_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione nell’amministrazione del corso @@ -14205,26 +14199,26 @@ rbac#:#dcl_write#:#L’utente può modificare le impostazioni e il contenuto del rbac#:#delete_files#:#Elimina file rbac#:#delete_folders#:#Elimina cartelle rbac#:#delete_wiki_pages#:#Elimina pagine -rbac#:#dpro_edit_permission#:#User can change permission settings in the Declaration of Data Protected administration###29 10 2025 new variable -rbac#:#dpro_read#:#User has read access to the Declaration of Data Protection administration###29 10 2025 new variable -rbac#:#dpro_visible#:#Declaration of Data Protection administration is visible###29 10 2025 new variable -rbac#:#dpro_write#:#Edit settings in the Declaration of Data Protection###29 10 2025 new variable -rbac#:#dshs_change_presentation#:#Change presentation of dashboard view###07 02 2020 new variable -rbac#:#dshs_edit_permission#:#User can change permission settings of Dashboard administration###07 02 2020 new variable -rbac#:#dshs_read#:#User has read access to Dashboard administration###07 02 2020 new variable -rbac#:#dshs_visible#:#Dashboard administration is visible###07 02 2020 new variable -rbac#:#dshs_write#:#Edit settings of Dashboard administration###07 02 2020 new variable +rbac#:#dpro_edit_permission#:#User can change permission settings in the Declaration of Data Protected administration###01 04 2025 new variable +rbac#:#dpro_read#:#User has read access to the Declaration of Data Protection administration###01 04 2025 new variable +rbac#:#dpro_visible#:#Declaration of Data Protection administration is visible###01 04 2025 new variable +rbac#:#dpro_write#:#Edit settings in the Declaration of Data Protection###01 04 2025 new variable +rbac#:#dshs_change_presentation#:#Cambiare la presentazione della vista della dashboard +rbac#:#dshs_edit_permission#:#L'utente può cambiare le impostazioni dei permessi di amministrazione della Dashboard +rbac#:#dshs_read#:#L'utente ha accesso in lettura all'amministrazione della Dashboard +rbac#:#dshs_visible#:#L'amministrazione della Dashboard è visibile +rbac#:#dshs_write#:#Modifica le impostazioni dell'amministrazione della Dashboard rbac#:#ecss_edit_permission#:#L’utente può modificare le impostazioni di autorizzazioni dell’amministrazione ESC rbac#:#ecss_read#:#L’utente può leggere le impostazioni generali di ECS rbac#:#ecss_visible#:#Le impostazioni ESC sono visibili rbac#:#ecss_write#:#L’utente può modificare le impostazioni ESC rbac#:#edit_event#:#Modifica calendario -rbac#:#edit_file#:#Edit File###26 08 2024 new variable -rbac#:#edit_in_online_editor#:#Open in online editor###29 07 2022 new variable +rbac#:#edit_file#:#Edit File###30 04 2024 new variable +rbac#:#edit_in_online_editor#:#Open in online editor rbac#:#edit_learning_progress#:#Modificare i progressi didattici rbac#:#edit_members#:#Gestisci membri rbac#:#edit_permission#:#Modifica delle autorizzazioni -rbac#:#edit_roleassignment#:#Modifica l& +rbac#:#edit_roleassignment#:#Modifica assegnazione di ruolo rbac#:#edit_submissions_grades#:#Modifica di presentazioni e punteggi rbac#:#edit_userassignment#:#Modifica assegnazione utente rbac#:#edit_wiki_navigation#:#Modifica navigazione @@ -14241,37 +14235,37 @@ rbac#:#excs_edit_permission#:#L’utente può modificare le impostazioni di auto rbac#:#excs_read#:#L’utente ha l’accesso di lettura all’amministrazione dell’esercizio rbac#:#excs_visible#:#L'amministrazione dell’esercizio è visibile rbac#:#excs_write#:#Modifica impostazioni nell’amministrazione dell’esercizio -rbac#:#export_member_data#:#Access to User Data +rbac#:#export_member_data#:#Accesso ai dati dell'utente rbac#:#extt_edit_permission#:#Modifica le impostazioni dei permessi rbac#:#extt_read#:#Accedere alle impostazioni del software di una terza parte rbac#:#extt_visible#:#Vedere le impostazioni del software di terze parti rbac#:#extt_write#:#Modificare le impostazioni del software di terze parti rbac#:#facs_edit_permission#:#Cambia le impostazioni dei permessi rbac#:#facs_read#:#Accesso in lettura alle impostazioni di files e cartelle -rbac#:#facs_upload_blacklisted_files#:#Upload indexed file types despite blacklist###07 02 2020 new variable +rbac#:#facs_upload_blacklisted_files#:#Caricare tipi di file indicizzati nonostante la lista nera rbac#:#facs_visible#:#Le impostazioni dei files e cartelle sono visibili rbac#:#facs_write#:#Edita le impostazioni dei files e cartelle rbac#:#feed_copy#:#L’utente può copiare il web feed rbac#:#feed_delete#:#Cancella Web Feed rbac#:#feed_edit_permission#:#Modifica impostazioni dei permessi -rbac#:#feed_read#:#Read access to Web Feed +rbac#:#feed_read#:#Leggi l'accesso al Web Feed rbac#:#feed_write#:#Modifica Web Feed -rbac#:#file_content#:#Show Content###29 10 2025 new variable +rbac#:#file_content#:#Show Content###28 11 2025 new variable rbac#:#file_copy#:#Copia File rbac#:#file_delete#:#Cancellare un file -rbac#:#file_edit_file#:#Allow to edit the file in an external editor, if available###26 08 2024 new variable +rbac#:#file_edit_file#:#Allow to edit the file in an external editor, if available###30 04 2024 new variable rbac#:#file_edit_learning_progress#:#L’utente può modificare le impostazioni di progresso rbac#:#file_edit_permission#:#Modificare le impostazioni dei permessi rbac#:#file_read#:#Scaricare un file rbac#:#file_read_learning_progress#:#L’utente può visualizzare il progresso di apprendimento degli altri utenti -rbac#:#file_view_content#:#File content presented in browser (if WOPI is active)###29 10 2025 new variable +rbac#:#file_view_content#:#File content presented in browser (if WOPI is active)###28 11 2025 new variable rbac#:#file_visible#:#Vedere un file rbac#:#file_write#:#Creare un file rbac#:#files_visible#:#File visibili -rbac#:#fils_edit_permissions#:#User can change permission settings of File Services administration.###29 07 2022 new variable -rbac#:#fils_read#:#User has read access to File Services administration.###29 07 2022 new variable -rbac#:#fils_visible#:#Administration of File Services is visible.###29 07 2022 new variable -rbac#:#fils_write#:#User can edit and configure File Services.###29 07 2022 new variable +rbac#:#fils_edit_permissions#:#User can change permission settings of File Services administration. +rbac#:#fils_read#:#User has read access to File Services administration. +rbac#:#fils_visible#:#Administration of File Services is visible. +rbac#:#fils_write#:#User can edit and configure File Services. rbac#:#filter_all_roles#:#Mostra tutti i ruoli del contesto corrente rbac#:#filter_global_roles#:#Mostra solo i ruoli globali rbac#:#filter_local_roles#:#Mostra solo i ruoli locali al contesto corrente @@ -14292,11 +14286,11 @@ rbac#:#frm_add_reply#:#Lo user può rispondere ad un post rbac#:#frm_add_thread#:#Aggiungi nuovo argomento rbac#:#frm_copy#:#Copia Forum rbac#:#frm_delete#:#Cancella un forum -rbac#:#frm_edit_learning_progress#:#User can edit learning progress settings###29 10 2025 new variable +rbac#:#frm_edit_learning_progress#:#User can edit learning progress settings###14 01 2025 new variable rbac#:#frm_edit_permission#:#Modifica le impostazioni dei permessi rbac#:#frm_moderate_frm#:#Modifica, cancella o censura un post rbac#:#frm_read#:#Accedi in lettura ad un forum -rbac#:#frm_read_learning_progress#:#User can view learning progress of other users###29 10 2025 new variable +rbac#:#frm_read_learning_progress#:#User can view learning progress of other users###14 01 2025 new variable rbac#:#frm_visible#:#Vedi un forum rbac#:#frm_write#:#Modifica un forum rbac#:#frma_edit_permission#:#Cambia le impostazioni dei permessi @@ -14324,11 +14318,11 @@ rbac#:#grp_read#:#Accedere in lettura ad un gruppo rbac#:#grp_read_learning_progress#:#L’utente può visualizzare il progresso di apprendimento degli altri utenti rbac#:#grp_visible#:#Vedere un gruppo rbac#:#grp_write#:#Modificare un gruppo -rbac#:#grpr_copy#:#User can copy group reference -rbac#:#grpr_delete#:#User can move or delete group reference +rbac#:#grpr_copy#:#L'utente può copiare i riferimenti di gruppo +rbac#:#grpr_delete#:#L'utente può spostare o eliminare il riferimento di gruppo rbac#:#grpr_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione -rbac#:#grpr_visible#:#Group reference is visible -rbac#:#grpr_write#:#User can edit settings of group reference +rbac#:#grpr_visible#:#Il riferimento al gruppo è visibile +rbac#:#grpr_write#:#L'utente può modificare le impostazioni di riferimento del gruppo rbac#:#grps_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione nell’amministrazione del gruppo rbac#:#grps_read#:#L’utente ha l’accesso di lettura all’amministrazione del gruppo rbac#:#grps_visible#:#L'amministrazione del gruppo è visibile @@ -14345,38 +14339,38 @@ rbac#:#htlm_read#:#Accedere in lettura ad un modulo HTML rbac#:#htlm_read_learning_progress#:#L’utente può visualizzare il progresso di apprendimento degli altri utenti rbac#:#htlm_visible#:#Vedere un modulo HTML rbac#:#htlm_write#:#Modificare un modulo HTML -rbac#:#iass_amend_grading#:#Amend gradings in an Individual Assessment###07 02 2020 new variable -rbac#:#iass_copy#:#Copy a Individual Assessment -rbac#:#iass_delete#:#Delete a Individual Assessment -rbac#:#iass_edit_learning_progress#:#Edit learning progress information of a Individual Assessment -rbac#:#iass_edit_members#:#Edit members of a Individual Assessment -rbac#:#iass_edit_permission#:#Edit permissions of a Individual Assessment -rbac#:#iass_read#:#Read content of a Individual Assessment -rbac#:#iass_read_learning_progress#:#View learning progress information of a Individual Assessment +rbac#:#iass_amend_grading#:#Modificare i gradi in una valutazione individuale +rbac#:#iass_copy#:#Copiare una valutazione individuale +rbac#:#iass_delete#:#Cancellare una valutazione individuale +rbac#:#iass_edit_learning_progress#:#Modifica le informazioni sul progresso dell'apprendimento di una valutazione individuale +rbac#:#iass_edit_members#:#Modifica i membri di una valutazione individuale +rbac#:#iass_edit_permission#:#Modifica i permessi di una valutazione individuale +rbac#:#iass_read#:#Leggere il contenuto di una valutazione individuale +rbac#:#iass_read_learning_progress#:#Visualizza le informazioni sul progresso dell'apprendimento di una valutazione individuale rbac#:#iass_visible#:#L’assegnazione individuale è visibile -rbac#:#iass_write#:#Edit a Individual Assessment -rbac#:#il_lti_global_role#:#LTI User###29 07 2022 new variable +rbac#:#iass_write#:#Modifica una valutazione individuale +rbac#:#il_lti_global_role#:#LTI User###09 03 2022 new variable rbac#:#il_sess_participant#:#Partecipante alla sessione rbac#:#il_sess_status_closed#:#Sessione chiusa non partecipante rbac#:#ilias_id#:#ILIAS-ID -rbac#:#impr_edit_permission#:#User can change permission settings of Legal Notice administration###29 10 2025 new variable -rbac#:#impr_read#:#User can read in Legal Notice administration###29 10 2025 new variable -rbac#:#impr_visible#:#Administration of Legal Notice is visible###29 10 2025 new variable -rbac#:#impr_write#:#User can edit content and settings of Legal Notice###29 10 2025 new variable +rbac#:#impr_edit_permission#:#User can change permission settings of Legal Notice administration###01 04 2025 new variable +rbac#:#impr_read#:#User can read in Legal Notice administration###01 04 2025 new variable +rbac#:#impr_visible#:#Administration of Legal Notice is visible###01 04 2025 new variable +rbac#:#impr_write#:#User can edit content and settings of Legal Notice###01 04 2025 new variable rbac#:#info_user_view_changed#:#Vista dell'utente modificata rbac#:#internal_mail#:#Mail interna rbac#:#invite#:#Invita per il sondaggio rbac#:#itgr_copy#:#L’utente può copiare il gruppo di elementi rbac#:#itgr_delete#:#L’utente può spostare o eliminare il gruppo di elementi rbac#:#itgr_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione -rbac#:#itgr_read#:#User can read item group +rbac#:#itgr_read#:#L'utente può leggere il gruppo di articoli rbac#:#itgr_visible#:#Il gruppo di articoli è visibile rbac#:#itgr_write#:#L’utente può modificare il contenuto e le impostazioni del gruppo di elementi rbac#:#leave#:#Abbandona -rbac#:#lhts_edit_permissions#:#User can change permission settings of Learning History administration.###29 07 2022 new variable -rbac#:#lhts_read#:#User has read access to Learning History administration.###29 07 2022 new variable -rbac#:#lhts_visible#:#Administration of Learning History is visible.###29 07 2022 new variable -rbac#:#lhts_write#:#User can edit settings of Learning History administration.###29 07 2022 new variable +rbac#:#lhts_edit_permissions#:#L'utente può cambiare le impostazioni di autorizzazione dell'amministrazione di Learning History. +rbac#:#lhts_read#:#L'utente ha accesso in lettura all'amministrazione di Learning History. +rbac#:#lhts_visible#:#L'amministrazione della Learning History è visibile. +rbac#:#lhts_write#:#L'utente può modificare le impostazioni dell'amministrazione di Learning History. rbac#:#lm_copy#:#Copia ILIAS Learning Module rbac#:#lm_delete#:#Eliminare un modulo ILIAS rbac#:#lm_edit_learning_progress#:#Modifica i progressi didattici @@ -14387,66 +14381,66 @@ rbac#:#lm_visible#:#Vedere un modulo ILIAS rbac#:#lm_write#:#Modificare un modulo ILIAS rbac#:#lngf_edit_permission#:#Modificare le impostazioni dei permessi rbac#:#lngf_read#:#Accedere in lettura all'impostazione delle lingue -rbac#:#lngf_visible#:#Vedere l& -rbac#:#lngf_write#:#Write access, needed for extended language maintenance +rbac#:#lngf_visible#:#L'amministrazione della lingua è visibile +rbac#:#lngf_write#:#Accesso in scrittura, necessario per la manutenzione estesa della lingua rbac#:#logs_edit_permission#:#L’utente può modificare le impostazioni di autorizzazioni dell’amministrazione di registrazione rbac#:#logs_read#:#L’utente può leggere le impostazioni generali di registrazione rbac#:#logs_visible#:#Le impostazioni di registrazione sono visibili rbac#:#logs_write#:#L’utente può modificare le impostazioni della registrazione rbac#:#lp_other_users#:#Vedi panoramica del progresso di apprendimento degli altri utenti rbac#:#lrss_edit_permission#:#Modifica impostazioni dei permessi -rbac#:#lrss_read#:#Read access to Learning Resources Settings -rbac#:#lrss_visible#:#Learning Resources Settings are visible +rbac#:#lrss_read#:#Leggere l'accesso alle impostazioni delle risorse di apprendimento +rbac#:#lrss_visible#:#Le impostazioni delle risorse di apprendimento sono visibili rbac#:#lrss_write#:#Modifica Impostazioni delle Risorse Didattiche -rbac#:#lso_copy#:#User can copy Learning Sequence -rbac#:#lso_delete#:#User can delete Learning Sequence -rbac#:#lso_edit_learning_progress#:#User can edit learning progress settings###07 02 2020 new variable -rbac#:#lso_edit_permission#:#User can change permission settings of Learning Sequence###07 02 2020 new variable -rbac#:#lso_lp_other_users#:#User can view learning progress of other users###07 02 2020 new variable -rbac#:#lso_manage_members#:#Manage members of Learning Sequence###07 02 2020 new variable -rbac#:#lso_participate#:#User can subscribe to a Learning Sequence###07 02 2020 new variable -rbac#:#lso_read#:#Users can access the Learning Sequence###07 02 2020 new variable -rbac#:#lso_read_learning_progress#:#User can view learning progress of other users###07 02 2020 new variable -rbac#:#lso_unparticipate#:#User can unsubscribe from a Learning Sequence###07 02 2020 new variable -rbac#:#lso_visible#:#Learning Sequence is visible -rbac#:#lso_write#:#User can edit settings of Learning Sequence -rbac#:#lsos_edit_permission#:#User can change permission settings of Learning Sequences administration.###29 10 2025 new variable -rbac#:#lsos_read#:#User has read access to Learning Sequences administration.###29 07 2022 new variable -rbac#:#lsos_visible#:#Administration of Learning Sequences is visible.###29 07 2022 new variable -rbac#:#lsos_write#:#User can edit settings of Learning Sequences administration.###29 07 2022 new variable -rbac#:#lti_copy#:#User can copy LTI consumer###07 02 2020 new variable -rbac#:#lti_delete#:#User can move or delete LTI consumer###07 02 2020 new variable -rbac#:#lti_edit_learning_progress#:#User can edit learning progress settings###07 02 2020 new variable -rbac#:#lti_edit_permission#:#User can change permission settings###07 02 2020 new variable -rbac#:#lti_read#:#User can see LTI consumer###07 02 2020 new variable -rbac#:#lti_read_learning_progress#:#User can view learning progress of other users###07 02 2020 new variable -rbac#:#lti_read_outcomes#:#User can see learning experiences and ranking of other users###07 02 2020 new variable -rbac#:#lti_visible#:#LTI consumer is visible###07 02 2020 new variable -rbac#:#lti_write#:#User can edit settings of LTI consumer###07 02 2020 new variable -rbac#:#ltis_add_consume_provider#:#User can add own provider settings for LTI consumer###07 02 2020 new variable +rbac#:#lso_copy#:#L'utente può copiare la sequenza di apprendimento +rbac#:#lso_delete#:#L'utente può cancellare la sequenza di apprendimento +rbac#:#lso_edit_learning_progress#:#L'utente può modificare la sequenza di apprendimento +rbac#:#lso_edit_permission#:#L'utente può cambiare le impostazioni di autorizzazione della sequenza di apprendimento +rbac#:#lso_lp_other_users#:#L'utente può visualizzare i progressi di apprendimento degli altri utenti +rbac#:#lso_manage_members#:#Gestire i membri della sequenza di apprendimento +rbac#:#lso_participate#:#L'utente può iscriversi a una sequenza di apprendimento +rbac#:#lso_read#:#Gli utenti possono accedere alla sequenza di apprendimento +rbac#:#lso_read_learning_progress#:#L'utente può visualizzare i progressi di apprendimento degli altri utenti +rbac#:#lso_unparticipate#:#L'utente può cancellarsi da una sequenza di apprendimento +rbac#:#lso_visible#:#La sequenza di apprendimento è visibile +rbac#:#lso_write#:#L'utente può modificare le impostazioni della sequenza di apprendimento +rbac#:#lsos_edit_permission#:#User can change permission settings of Learning Sequences administration.###01 04 2025 new variable +rbac#:#lsos_read#:#L'utente ha accesso in lettura all'amministrazione delle sequenze di apprendimento. +rbac#:#lsos_visible#:#L'amministrazione delle sequenze di apprendimento è visibile. +rbac#:#lsos_write#:#L'utente può modificare le impostazioni dell'amministrazione delle sequenze di apprendimento. +rbac#:#lti_copy#:#L'utente può copiare il consumatore LTI +rbac#:#lti_delete#:#L'utente può spostare o cancellare il consumatore LTI +rbac#:#lti_edit_learning_progress#:#L'utente può modificare le impostazioni del progresso dell'apprendimento +rbac#:#lti_edit_permission#:#L'utente può cambiare le impostazioni dei permessi +rbac#:#lti_read#:#L'utente può vedere il consumer LTI +rbac#:#lti_read_learning_progress#:#L'utente può visualizzare i progressi di apprendimento degli altri utenti +rbac#:#lti_read_outcomes#:#L'utente può vedere le esperienze di apprendimento e la classifica degli altri utenti +rbac#:#lti_visible#:#LTI consumer è visibile +rbac#:#lti_write#:#L'utente può modificare le impostazioni del LTI consumer +rbac#:#ltis_add_consume_provider#:#L'utente può aggiungere le impostazioni del proprio fornitore per il consumatore LTI rbac#:#ltis_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione nell’amministrazione LTI rbac#:#ltis_read#:#L’utente ha l’accesso di lettura all’amministrazione LTI rbac#:#ltis_release_objects#:#L’utente può immettere gli oggetti per il cliente LTI rbac#:#ltis_visible#:#L’amministrazione LTI è visibile rbac#:#ltis_write#:#L’utente può modificare le impostazioni dell’amministrazione LTI rbac#:#mail_internal_mail#:#L’utente può utilizzare il sistema di mail interne (ILIAS) -rbac#:#mail_mail_to_global_roles#:#User may send Emails to global roles +rbac#:#mail_mail_to_global_roles#:#L'utente può inviare e-mail a ruoli globali rbac#:#mail_read#:#Accedere in lettura alle impostazioni della posta rbac#:#mail_smtp_mail#:#Inviare eMail via SMTP -rbac#:#mail_to_global_roles#:#Mail to Global Roles +rbac#:#mail_to_global_roles#:#Mail a ruoli globali rbac#:#mail_visible#:#Vedere le impostazioni della posta rbac#:#mail_write#:#Modificare le impostazioni della posta -rbac#:#manage_all_reservations#:#Manage All Reservations###28 10 2024 new variable -rbac#:#manage_comp#:#User can edit Competences###29 07 2022 new variable -rbac#:#manage_comp_temp#:#User can edit Competence Templates###29 07 2022 new variable -rbac#:#manage_materials#:#Manage Materials -rbac#:#manage_own_reservations#:#Manage Own Reservations###28 10 2024 new variable -rbac#:#manage_profiles#:#User can edit Competence Profiles###29 07 2022 new variable +rbac#:#manage_all_reservations#:#Manage All Reservations###28 11 2025 new variable +rbac#:#manage_comp#:#User can edit Competences###31 03 2023 new variable +rbac#:#manage_comp_temp#:#User can edit Competence Templates###31 03 2023 new variable +rbac#:#manage_materials#:#Gestire i materiali +rbac#:#manage_own_reservations#:#Manage Own Reservations###28 11 2025 new variable +rbac#:#manage_profiles#:#User can edit Competence Profiles###31 03 2023 new variable rbac#:#mcst_copy#:#Copia MediaCast rbac#:#mcst_delete#:#Cancella Mediacast -rbac#:#mcst_edit_learning_progress#:#User can edit learning progress settings###07 02 2020 new variable +rbac#:#mcst_edit_learning_progress#:#L'utente può modificare le impostazioni del progresso dell'apprendimento rbac#:#mcst_edit_permission#:#Modifica impostazioni dei permessi -rbac#:#mcst_read#:#Read access to MediaCast +rbac#:#mcst_read#:#Leggi l'accesso a MediaCast rbac#:#mcst_read_learning_progress#:#L’utente può visualizzare il progresso di apprendimento degli altri utenti rbac#:#mcst_visible#:#MediaCast è visibile rbac#:#mcst_write#:#Modifica MediaCast @@ -14464,35 +14458,35 @@ rbac#:#mep_edit_permission#:#Modificare le impostazioni dei permessi rbac#:#mep_read#:#Leggi il contenuto del Media Pool rbac#:#mep_visible#:#Vedere una libreria multimediale rbac#:#mep_write#:#Modificare il contenuto di una libreria multimediale -rbac#:#mme_edit_permission#:#User can change permission settings of Main Menu administration###07 02 2020 new variable -rbac#:#mme_read#:#User has read access to administration of Main Menu###07 02 2020 new variable -rbac#:#mme_visible#:#Administration of Main Menu is visible###07 02 2020 new variable -rbac#:#mme_write#:#User can edit settings of Main Menu administration###07 02 2020 new variable -rbac#:#mobs_edit_permission#:#Change permission settings -rbac#:#mobs_read#:#Read access to Media Objects/Pools Settings -rbac#:#mobs_visible#:#Media Objects/Pools Settings are visible -rbac#:#mobs_write#:#Edit Media Objects/Pools Settings +rbac#:#mme_edit_permission#:#L'utente può cambiare le impostazioni di autorizzazione dell'amministrazione del menu principale +rbac#:#mme_read#:#L'utente ha accesso in lettura all'amministrazione del menu principale +rbac#:#mme_visible#:#L'amministrazione del menu principale è visibile +rbac#:#mme_write#:#L'utente può modificare le impostazioni dell'amministrazione del menu principale +rbac#:#mobs_edit_permission#:#Modifica le impostazioni di autorizzazione +rbac#:#mobs_read#:#Accesso in lettura agli oggetti multimediali/Pools Impostazioni +rbac#:#mobs_visible#:#Le impostazioni degli oggetti multimediali/dei pool sono visibili +rbac#:#mobs_write#:#L'utente può modificare le impostazioni degli oggetti multimediali/dei pool rbac#:#moderate#:#Moderare rbac#:#moderate_frm#:#Moderare -rbac#:#msg_anonymous_cannot_be_assigned#:#Anonymous cannot be assigned to a role.###26 08 2024 new variable +rbac#:#msg_anonymous_cannot_be_assigned#:#Anonymous cannot be assigned to a role.###19 03 2024 new variable rbac#:#msg_no_roles_of_type#:#Non sono disponibili ruoli, con queste impostazioni di filtro. rbac#:#news_add_news#:#Aggiungi notizie -rbac#:#no_corresponding_roles#:#No corresponding roles could be found.###29 10 2025 new variable -rbac#:#nots_edit_permission#:#User can change permission settings of Notes administration.###29 10 2025 new variable -rbac#:#nots_read#:#User has read access to Notes administration.###29 07 2022 new variable -rbac#:#nots_visible#:#Administration of Notes is visible.###29 07 2022 new variable -rbac#:#nots_write#:#User can edit settings of Notes administration.###29 07 2022 new variable +rbac#:#no_corresponding_roles#:#No corresponding roles could be found.###01 04 2025 new variable +rbac#:#nots_edit_permission#:#User can change permission settings of Notes administration.###01 04 2025 new variable +rbac#:#nots_read#:#L'utente ha accesso in lettura all'amministrazione di Notes. +rbac#:#nots_visible#:#L'amministrazione di Notes è visibile. +rbac#:#nots_write#:#L'utente può modificare le impostazioni dell'amministrazione di Notes. rbac#:#nwss_edit_permission#:#Modifica impostazioni dei permessi -rbac#:#nwss_read#:#Read access to News and Web Feeds Settings -rbac#:#nwss_visible#:#News and Web Feeds Settings are visible +rbac#:#nwss_read#:#Accesso in lettura alle impostazioni Notizie e feed Web +rbac#:#nwss_visible#:#Le impostazioni delle notizie e dei feed web sono visibili rbac#:#nwss_write#:#Modifica le impostazioni alle News ed ai Web Feeds -rbac#:#obj_skee#:#Competence Tree###29 07 2022 new variable -rbac#:#org_op_access_results#:#Access Results of Subordinated Users +rbac#:#obj_skee#:#Competence Tree###31 03 2023 new variable +rbac#:#org_op_access_results#:#Risultati di accesso degli utenti subordinati rbac#:#org_op_edit_submissions_grades#:#Modifica le presentazioni degli altri utenti -rbac#:#org_op_manage_participants#:#Manage Subordinated Participants -rbac#:#org_op_score_participants#:#Score Subordinated Participants -rbac#:#org_op_view_certificates#:#View certificates of subordinated users###07 02 2020 new variable -rbac#:#org_op_view_competences#:#View competences of subordinated users###07 02 2020 new variable +rbac#:#org_op_manage_participants#:#Gestire i partecipanti in oggetto +rbac#:#org_op_score_participants#:#Punteggio Partecipanti in oggetto +rbac#:#org_op_view_certificates#:#Visualizzare i certificati degli utenti in oggetto +rbac#:#org_op_view_competences#:#Visualizzare le competenze degli utenti in oggetto rbac#:#org_op_write_learning_progress#:#Imposta il progresso di apprendimento degli utenti subordinati rbac#:#orgu_cat_administrate_users#:#L’utente può creare e amministrare gli account degli utenti locali in questa unità organizzativa rbac#:#orgu_copy#:#Copia unità organizzativa @@ -14504,23 +14498,23 @@ rbac#:#orgu_view_learning_progress#:#Visualizza il progresso dell'apprendimento rbac#:#orgu_view_learning_progress_rec#:#Visualizza il progresso dell'apprendimento delle unità incluse le sottounità rbac#:#orgu_visible#:#L’unità organizzativa è visibile rbac#:#orgu_write#:#L’utente può modificare le impostazione dell’unità organizzativa -rbac#:#otpl_edit_permission#:#Change Permission Settings -rbac#:#otpl_read#:#Read Access to Object Template Settings -rbac#:#otpl_visible#:#Object Template Settings are visible -rbac#:#otpl_write#:#Edit Object Template Settings +rbac#:#otpl_edit_permission#:#Cambiare le impostazioni dei permessi +rbac#:#otpl_read#:#Accesso in lettura alle impostazioni del modello di oggetto +rbac#:#otpl_visible#:#Le impostazioni del modello di oggetto sono visibili +rbac#:#otpl_write#:#Modifica delle impostazioni del modello di oggetto rbac#:#perm_class_create#:#Creare nuovi oggetti -rbac#:#perm_class_create_desc#:#Determina quale tipo di oggetto pu& +rbac#:#perm_class_create_desc#:#Determina quali tipi di oggetto possono essere creati sotto l'oggetto corrente. rbac#:#perm_class_object#:#Operazioni speciali rbac#:#perm_class_object_desc#:#Operazioni relative ai singoli oggetti, sono disponibili solamente per alcuni tipi di oggetto. rbac#:#perm_global_role#:#Ruolo globale rbac#:#perm_local_role#:#Ruoli locali -rbac#:#perm_local_role_desc#:#Questo ruolo & +rbac#:#perm_local_role_desc#:#Questo ruolo è definito localmente nell'oggetto corrente e corrisponde a una politica locale rbac#:#perm_protected_global_role#:#Ruolo globale protetto rbac#:#perm_protected_local_role#:#Ruolo locale protetto rbac#:#perm_role_path_info_created#:#Creato in %1$s "%2$s" rbac#:#perm_role_path_info_inheritance#:#utilizzo della politica locale da %1$s "%2$s" rbac#:#perm_use_local_policy#:#Utilizzare una politica locale -rbac#:#perm_use_local_policy_desc#:#Se la politica locale & +rbac#:#perm_use_local_policy_desc#:#Se la politica locale è attivata, è possibile definire diverse impostazioni di autorizzazione predefinite per l'oggetto corrente. rbac#:#poll_copy#:#L’utente può copiare il gruppo rbac#:#poll_delete#:#L’utente può spostare o eliminare il gruppo rbac#:#poll_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione @@ -14530,38 +14524,38 @@ rbac#:#poll_write#:#L’utente può modificare le impostazione e il contenuto de rbac#:#positions_override_operations#:#Ignora impostazioni globali rbac#:#precondition_not_obligatory_alt#:#La condizione preliminare è facoltativa rbac#:#precondition_num_obligatory#:#Numero di materiali richiesti -rbac#:#precondition_num_optional_info#:#Please enter the minimum number of materials which is required for fullfilling this precondition. -rbac#:#precondition_obligatory#:#Obligatory +rbac#:#precondition_num_optional_info#:#Si prega di inserire il numero minimo di materiali che è richiesto per soddisfare questa precondizione. +rbac#:#precondition_obligatory#:#Obbligatorio rbac#:#precondition_obligatory_alt#:#La condizione preliminare deve essere soddisfatta -rbac#:#precondition_obligatory_info#:#Obligatory preconditions must be fulfilled, for having access. +rbac#:#precondition_obligatory_info#:#Devono essere soddisfatte precondizioni obbligatorie per avere accesso. rbac#:#precondition_obligatory_settings#:#Impostazioni condizione preliminare -rbac#:#precondition_operator_range_err_min_max#:#The minimum value must be less than the maximum value.###28 10 2024 new variable -rbac#:#precondition_operator_range_max#:#Maximum Percentage###28 10 2024 new variable -rbac#:#precondition_operator_range_min#:#Minimum Percentage###28 10 2024 new variable -rbac#:#prfa_edit_permission#:#Change permission settings -rbac#:#prfa_read#:#Read access to Portfolio Administration +rbac#:#precondition_operator_range_err_min_max#:#The minimum value must be less than the maximum value.###28 11 2025 new variable +rbac#:#precondition_operator_range_max#:#Maximum Percentage###28 11 2025 new variable +rbac#:#precondition_operator_range_min#:#Minimum Percentage###28 11 2025 new variable +rbac#:#prfa_edit_permission#:#L'utente può cambiare le impostazioni dei permessi dell'amministrazione del Portfolio +rbac#:#prfa_read#:#L'utente ha accesso in lettura all'amministrazione del Portfolioportafoglio rbac#:#prfa_visible#:#L'amministrazione del portfolio è visibile -rbac#:#prfa_write#:#Edit Portfolio Administration +rbac#:#prfa_write#:#Modifica amministrazione del portafoglio rbac#:#prg_copy#:#L’utente può copiare il programma di studio -rbac#:#prg_delete#:#L’utente può eliminare il programma di studio +rbac#:#prg_delete#:#L'utente può eliminare il programma di studio rbac#:#prg_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione rbac#:#prg_manage_members#:#Gestisci membri del programma di studio rbac#:#prg_read#:#L’utente ha l’accesso di lettura al programma di studio rbac#:#prg_visible#:#Programma di studio visibile rbac#:#prg_write#:#L’utente può modificare le impostazione del programma di studio -rbac#:#prgr_copy#:#User can copy links to study programmes.###29 07 2022 new variable -rbac#:#prgr_delete#:#User can move or delete links to study programmes.###29 07 2022 new variable -rbac#:#prgr_edit_permission#:#User can change permission settings.###29 07 2022 new variable -rbac#:#prgr_visible#:#Links to study programmes are visible and can be used###29 07 2022 new variable -rbac#:#prgr_write#:#User can edit settings of links to study programmes.###29 07 2022 new variable +rbac#:#prgr_copy#:#L'utente può copiare i link ai programmi di studio +rbac#:#prgr_delete#:#L'utente può spostare o cancellare i link ai programmi di studio +rbac#:#prgr_edit_permission#:#L'utente può cambiare le impostazioni dei permessi +rbac#:#prgr_visible#:#I link ai programmi di studio sono visibili e possono essere utilizzati +rbac#:#prgr_write#:#L'utente può modificare le impostazioni dei collegamenti ai programmi di studio rbac#:#prgs_edit_permission#:#Cambia impostazioni di autorizzazione nell’amministrazione del programma di studio rbac#:#prgs_read#:#L’utente ha l’accesso di lettura all’amministrazione del programma di studio rbac#:#prgs_visible#:#Amministrazione del programma di studio visibile rbac#:#prgs_write#:#Modifica impostazioni nell’amministrazione del programma di studio -rbac#:#prss_edit_permission#:#User can change permission settings of Personal Resources administration.###29 10 2025 new variable -rbac#:#prss_read#:#User has read access to Personal Resources administration.###29 07 2022 new variable -rbac#:#prss_visible#:#Administration of Personal Resources is visible.###29 07 2022 new variable -rbac#:#prss_write#:#User can edit settings of Personal Resources administration.###29 07 2022 new variable +rbac#:#prss_edit_permission#:#User can change permission settings of Personal Resources administration.###01 04 2025 new variable +rbac#:#prss_read#:#L'utente ha accesso in lettura all'amministrazione delle risorse personali. +rbac#:#prss_visible#:#L'amministrazione delle risorse personali è visibile. +rbac#:#prss_write#:#L'utente può modificare le impostazioni dell'amministrazione delle risorse personali. rbac#:#prtt_copy#:#L’utente può copiare il modello di portfolio rbac#:#prtt_delete#:#L’utente può spostare o eliminare il modello di portfolio rbac#:#prtt_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione per il modello di portfolio @@ -14569,37 +14563,37 @@ rbac#:#prtt_read#:#L’utente ha l’accesso di lettura al modello di portfolio rbac#:#prtt_visible#:#Il modello del portfolio è visibile rbac#:#prtt_write#:#L’utente può modificare le impostazioni e il contenuto del modello di portfolio rbac#:#ps_edit_permission#:#Modifica impostazioni dei permessi -rbac#:#ps_export_member_data#:#User may Export Member Data -rbac#:#ps_read#:#Read Access to Privacy/Security Settings -rbac#:#ps_visible#:#Privacy/Security Settings are Visible -rbac#:#ps_write#:#Modifica Privacy/Security -rbac#:#push_desktop_items#:#Recommend Content###29 07 2022 new variable -rbac#:#qpl_copy#:#Copy Test Question Pool +rbac#:#ps_export_member_data#:#L'utente può esportare i dati dei membri +rbac#:#ps_read#:#L'utente ha accesso in lettura all'amministrazione di Privacy/Sicurezza +rbac#:#ps_visible#:#Le impostazioni di privacy/sicurezza sono visibili +rbac#:#ps_write#:#L'utente può modificare le impostazioni nell'amministrazione di Privacy/Sicurezza +rbac#:#push_desktop_items#:#Raccomandare il contenuto +rbac#:#qpl_copy#:#L'utente può copiare il pool di domande per i test rbac#:#qpl_delete#:#Eliminare una raccolta di domande rbac#:#qpl_edit_permission#:#Modificare le impostazioni dei permessi rbac#:#qpl_read#:#Accedere in lettura ad una raccolta di domande rbac#:#qpl_visible#:#Vedere una raccolta di domande rbac#:#qpl_write#:#Modificare una raccolta di domande rbac#:#rbac_add_new_local_role#:#Aggiungi nuovo ruolo locale -rbac#:#rbac_add_recommended_content#:#Recommended Content###07 02 2020 new variable -rbac#:#rbac_add_recommended_content_info#:#Adds the current object '%1' for all members of the role as recommended content.###07 02 2020 new variable +rbac#:#rbac_add_recommended_content#:#Contenuto raccomandato +rbac#:#rbac_add_recommended_content_info#:#Aggiunge l'oggetto corrente '%1' per tutti i membri del ruolo come contenuto raccomandato. rbac#:#rbac_admin_permissions#:#Autorizzazioni di amministrazione rbac#:#rbac_auto_global#:#Ruolo globale generato automaticamente rbac#:#rbac_auto_local#:#Ruolo locale generato automaticamente rbac#:#rbac_auto_rolt#:#Modello di ruolo generato automaticamente rbac#:#rbac_back_to_overview#:#Torna all’elenco ruolo rbac#:#rbac_cant_import_role_wrong_type#:#Non si può importare un ruolo dalla voce %s alla voce %s. -rbac#:#rbac_change_existing_confirm_tbl#:#Settings for "Change Existing Objects" -rbac#:#rbac_change_existing_objects_desc_new_role#:#The permission settings of this role will be adpoted to ALL existing objects. +rbac#:#rbac_change_existing_confirm_tbl#:#Impostazioni per "Cambiare gli oggetti esistenti +rbac#:#rbac_change_existing_objects_desc_new_role#:#Le impostazioni dei permessi di questo ruolo saranno applicate a TUTTI gli oggetti esistenti. rbac#:#rbac_changes#:#Modifiche -rbac#:#rbac_choose_copy_targets#:#Please enter a quer for selecting the target roles. +rbac#:#rbac_choose_copy_targets#:#Inserisci una domanda per selezionare i ruoli di destinazione. rbac#:#rbac_condition_delete_sure#:#Sei sicuro di voler eliminare le seguenti condizioni preliminari? rbac#:#rbac_context_global#:#Globale rbac#:#rbac_copy_behaviour#:#Impostazioni copia ruolo -rbac#:#rbac_copy_behaviour_info#:#Transfer Permissions from: %s to: %s###29 10 2025 new variable +rbac#:#rbac_copy_behaviour_info#:#Transfer Permissions from: %s to: %s###20 05 2025 new variable rbac#:#rbac_copy_finished#:#Copia terminata. -rbac#:#rbac_copy_multi_targets#:#%s, %s and %s further Roles selected%s###29 10 2025 new variable -rbac#:#rbac_copy_no_targets#:#At least one Role must be selected as Target###29 10 2025 new variable +rbac#:#rbac_copy_multi_targets#:#%s, %s and %s further Roles selected%s###20 05 2025 new variable +rbac#:#rbac_copy_no_targets#:#At least one Role must be selected as Target###20 05 2025 new variable rbac#:#rbac_copy_role#:#Copia ruolo rbac#:#rbac_copy_role_add_perm#:#Aggiungi permessi rbac#:#rbac_copy_role_copy#:#Autorizzazioni di copia @@ -14607,13 +14601,13 @@ rbac#:#rbac_copy_role_remove_perm#:#Rimuovi permessi rbac#:#rbac_create_bibl#:#Crea bibliografia rbac#:#rbac_create_blog#:#Crea blog rbac#:#rbac_create_book#:#Crea gruppo di prenotazione -rbac#:#rbac_create_cat#:#Creare nuovi contesti -rbac#:#rbac_create_catr#:#Creare il Riferimento di Categoria -rbac#:#rbac_create_chtr#:#Create Chatroom -rbac#:#rbac_create_cmix#:#Create xAPI/cmi5 Object###07 02 2020 new variable -rbac#:#rbac_create_copa#:#Create Content Page +rbac#:#rbac_create_cat#:#Crea nuovi contesti +rbac#:#rbac_create_catr#:#Crea il Riferimento di Categoria +rbac#:#rbac_create_chtr#:#Crea Chatroom +rbac#:#rbac_create_cmix#:#Crea un oggetto xAPI/cmi5 +rbac#:#rbac_create_copa#:#Crea una pagina di contenuto rbac#:#rbac_create_crs#:#Crea corso -rbac#:#rbac_create_crsr#:#Create Course Referenc +rbac#:#rbac_create_crsr#:#Crea un riferimento al corso rbac#:#rbac_create_dcl#:#Crea raccolta dati rbac#:#rbac_create_exc#:#Crea esercizio rbac#:#rbac_create_file#:#Carica file @@ -14621,27 +14615,27 @@ rbac#:#rbac_create_fold#:#Crea una cartella rbac#:#rbac_create_frm#:#Crea forum rbac#:#rbac_create_glo#:#Crea glossario rbac#:#rbac_create_grp#:#Crea gruppo -rbac#:#rbac_create_grpr#:#Create Group Reference +rbac#:#rbac_create_grpr#:#Crea un riferimento di gruppo rbac#:#rbac_create_htlm#:#Crea modulo di apprendimento HTML rbac#:#rbac_create_iass#:#Crea assegnazione individuale rbac#:#rbac_create_itgr#:#Crea gruppo di elementi rbac#:#rbac_create_lm#:#Crea modulo di apprendimento ILIAS -rbac#:#rbac_create_lso#:#Create Learning Sequence -rbac#:#rbac_create_lti#:#Create LTI Consumer###07 02 2020 new variable +rbac#:#rbac_create_lso#:#Crea una sequenza di apprendimento +rbac#:#rbac_create_lti#:#Crea LTI Consumer rbac#:#rbac_create_mcst#:#Crea Mediacast rbac#:#rbac_create_mep#:#Crea gruppo di supporto rbac#:#rbac_create_orgu#:#Crea unità organizzative rbac#:#rbac_create_poll#:#Crea gruppo rbac#:#rbac_create_prg#:#Crea programma di studio -rbac#:#rbac_create_prgr#:#Create link to study programme###29 07 2022 new variable +rbac#:#rbac_create_prgr#:#Creare un collegamento al programma di studio rbac#:#rbac_create_prtt#:#Crea modello di portfolio rbac#:#rbac_create_qpl#:#Crea un testo del gruppo di domande -rbac#:#rbac_create_rcrs#:#Create Course-Link +rbac#:#rbac_create_rcrs#:#Creare il link al corso rbac#:#rbac_create_role#:#Crea nuovo ruolo rbac#:#rbac_create_rolt#:#Crea nuovo modello di ruolo -rbac#:#rbac_create_sahs#:#Create SCORM/AICC Learning Module +rbac#:#rbac_create_sahs#:#Creare un modulo di apprendimento SCORM/AICC rbac#:#rbac_create_sess#:#Crea sessione -rbac#:#rbac_create_skee#:#Create Competence Tree###26 08 2024 new variable +rbac#:#rbac_create_skee#:#Create Competence Tree###28 11 2023 new variable rbac#:#rbac_create_spl#:#Crea sondaggio gruppo di domande rbac#:#rbac_create_svy#:#Crea sondaggio rbac#:#rbac_create_tst#:#Crea test @@ -14652,26 +14646,26 @@ rbac#:#rbac_delete_local_policies#:#Elimina criteri locali rbac#:#rbac_delete_local_policies_info#:#Se attivati, tutti i criteri locali verranno eliminati. Le autorizzazioni degli oggetti verranno riscritte e protette. rbac#:#rbac_delete_role#:#Cancella ruolo rbac#:#rbac_edit_condition#:#Modifica condizione preliminare -rbac#:#rbac_form_copy_roles_adjust_button#:#Rechte anpassen###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_adjust_type#:#Typ der Rechteanpassung###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_adjust_type_add#:#Rechte hinzufügen###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_adjust_type_add_info#:#Fügt MARKIERTE Rechte der ausgewählten globalen Rollenvorlage zu den lokalen Rechtevorgabe hinzu.###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_adjust_type_clone#:#Rechte kopieren###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_adjust_type_clone_info#:#Alle Rechte der ausgewählten globalen Rollenvorlage überschreiben alle lokalen Rechtevorgaben.###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_adjust_type_remove#:#Rechte entfernen###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_adjust_type_remove_info#:#Entfernt die MARKIERTEN Rechte der ausgewählten globalen Rollenvorlage aus den lokalen Rechtevorgaben.###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_ce_add_no#:#Vorhandene Objekte NICHT anpassen###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_ce_add_no_info#:#Vorhandene lokale Rechtevorgaben entsprechend ergänzt, die vorhandenen Objekte werden nicht in ihren Rechten angepasst.###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_ce_add_yes#:#Vorhandene Objekte nur um ausgewählte Rechte ergänzen###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_ce_add_yes_info#:#Vorhandene lokale Rechtevorgaben und die Rechteeinstellungen vorhandener Objekte werden entsprechend ergänzt.###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_ce_clone_no#:#Vorhandene Objekte NICHT anpassen###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_ce_clone_no_info#:#Vorhandene lokale Rechtevorgaben werden überschrieben, die vorhandenen Objekte werden nicht in ihren Rechten angepasst.###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_ce_clone_yes#:#Vorhandene Objekte ändern###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_ce_clone_yes_info#:#Vorhandene lokale Rechtevorgaben entsprechend überschreiben und IN GÄNZE mit allen gecheckten und ungecheckten Vorgaben auf vorhandene Objekte angewendet.###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_ce_remove_no#:#Vorhandene Objekte NICHT anpassen###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_ce_remove_no_info#:#Markierte Rechte werden aus vorhandenen lokalen Rechtevorgaben entfernt, die vorhandenen Objekte werden nicht in ihren Rechten angepasst.###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_ce_remove_yes#:#Vorhandene Objekte nur um ausgewählte Rechte reduzieren###29 07 2022 new variable -rbac#:#rbac_form_copy_roles_ce_remove_yes_info#:#Vorhandene lokale Rechtevorgaben und die Rechteeinstellungen vorhandener Objekte werden entsprechend reduziert.###29 07 2022 new variable +rbac#:#rbac_form_copy_roles_adjust_button#:#Adattare i diritti +rbac#:#rbac_form_copy_roles_adjust_type#:#Tipo di regolazione dei diritti +rbac#:#rbac_form_copy_roles_adjust_type_add#:#Aggiungere diritti +rbac#:#rbac_form_copy_roles_adjust_type_add_info#:#Aggiunge i diritti MARKED del modello di ruolo globale selezionato al modello dei diritti locali. +rbac#:#rbac_form_copy_roles_adjust_type_clone#:#Diritti di copia +rbac#:#rbac_form_copy_roles_adjust_type_clone_info#:#Tutti i permessi del modello di ruolo globale selezionato sovrascrivono tutte le impostazioni dei permessi locali. +rbac#:#rbac_form_copy_roles_adjust_type_remove#:#Rimuovere i diritti +rbac#:#rbac_form_copy_roles_adjust_type_remove_info#:#Rimuove i permessi MARCATI del modello di ruolo globale selezionato dalle impostazioni dei permessi locali. +rbac#:#rbac_form_copy_roles_ce_add_no#:#NON modificare gli oggetti esistenti +rbac#:#rbac_form_copy_roles_ce_add_no_info#:#Le specifiche dei diritti locali esistenti sono completate di conseguenza, i diritti degli oggetti esistenti non sono adattati. +rbac#:#rbac_form_copy_roles_ce_add_yes#:#Aggiungere solo i diritti selezionati agli oggetti esistenti +rbac#:#rbac_form_copy_roles_ce_add_yes_info#:#Le impostazioni dei diritti locali esistenti e le impostazioni dei diritti degli oggetti esistenti sono integrate di conseguenza. +rbac#:#rbac_form_copy_roles_ce_clone_no#:#NON modificare gli oggetti esistenti +rbac#:#rbac_form_copy_roles_ce_clone_no_info#:#I diritti locali predefiniti esistenti vengono sovrascritti, gli oggetti esistenti non vengono regolati nei loro diritti. +rbac#:#rbac_form_copy_roles_ce_clone_yes#:#Modificare gli oggetti esistenti +rbac#:#rbac_form_copy_roles_ce_clone_yes_info#:#Sovrascrivere le impostazioni predefinite dei diritti locali esistenti di conseguenza e applicate IN TUTTO con tutte le impostazioni predefinite spuntate e non spuntate applicate agli oggetti esistenti. +rbac#:#rbac_form_copy_roles_ce_remove_no#:#NON modificare gli oggetti esistenti +rbac#:#rbac_form_copy_roles_ce_remove_no_info#:#I diritti marcati vengono rimossi dalle impostazioni dei diritti locali esistenti, gli oggetti esistenti non vengono adeguati nei loro diritti. +rbac#:#rbac_form_copy_roles_ce_remove_yes#:#Ridurre gli oggetti esistenti solo per i diritti selezionati +rbac#:#rbac_form_copy_roles_ce_remove_yes_info#:#Le impostazioni dei diritti locali esistenti e le impostazioni dei diritti degli oggetti esistenti vengono ridotte di conseguenza. rbac#:#rbac_global_rolt#:#Modello ruolo globale rbac#:#rbac_import_role#:#Importa ruolo rbac#:#rbac_info_only_position_access#:#Sei presentato solo a quei membri che hanno una posizione all’interno della tua unità organizzativa. I membri con un’altra posizione organizzativa non vengono mostrati ma può risiedere in questi corsi senza esserti mostrato. @@ -14697,7 +14691,7 @@ rbac#:#rbac_log_source_object#:#Oggetto di origine rbac#:#rbac_msg_user_already_assigned#:#L’utente scelto è appena stato assegnato a questo ruolo. rbac#:#rbac_not_change_existing_objects#:#NON modificare gli oggetti esistenti rbac#:#rbac_permissions#:#Autorizzazioni -rbac#:#rbac_precondition_condition#:#Access requires having this status###29 10 2025 new variable +rbac#:#rbac_precondition_condition#:#Access requires having this status###28 11 2025 new variable rbac#:#rbac_precondition_hide#:#Nascondi oggetto rbac#:#rbac_precondition_hide_info#:# Questa opzione consente di nascondere l'oggetto per gli utenti che attualmente non hanno soddisfatto le condizioni preliminari. Pertanto, tutti i contenuti non accessibili non sono visibili. rbac#:#rbac_precondition_minimum_optional#:#Almeno 2 condizioni preliminari devono rimanere facoltativi. @@ -14705,8 +14699,8 @@ rbac#:#rbac_precondition_mode#:#Modalità rbac#:#rbac_precondition_mode_all#:#Tutte le condizioni preliminari rbac#:#rbac_precondition_mode_all_info#:#Tutte le condizioni preliminari devono essere soddisfatte per fornire l’accesso. rbac#:#rbac_precondition_mode_subset#:#Sottoinsieme di condizioni preliminari -rbac#:#rbac_precondition_mode_subset_info#:#A subset of preconditions need to be fulfilled to give access. Some preconditions may still be set as obligatory. -rbac#:#rbac_precondition_save_obligatory#:#Save Obligatory +rbac#:#rbac_precondition_mode_subset_info#:#Un sottoinsieme di precondizioni deve essere soddisfatto per dare accesso. Alcune precondizioni possono ancora essere impostate come obbligatorie. +rbac#:#rbac_precondition_save_obligatory#:#Salvataggio obbligatorio rbac#:#rbac_precondition_source#:#Condizione trigger rbac#:#rbac_precondition_target#:#La condizione limita l’accesso a rbac#:#rbac_repository_permissions#:#Condizioni preliminari del repository @@ -14726,7 +14720,7 @@ rbac#:#rbac_ud_local#:#Ruolo locale definito dall’utente rbac#:#rbac_ud_rolt#:#Modello di ruolo definito dall’utente rbac#:#rbac_unprotected_delete_local_policies_info#:#Se attivati, tutti i criteri locali verranno eliminati. Le autorizzazioni nei corsi e nei gruppi sono appena state generate. rbac#:#rbac_unprotected_keep_local_policies_info#:#Scegli questa modalità per mantenere tutti i criteri locali. -rbac#:#rbac_view_content#:#View Content###29 10 2025 new variable +rbac#:#rbac_view_content#:#View Content###28 11 2025 new variable rbac#:#rcat_delete#:#L’utente può spostare o eliminare la Categoria ESC rbac#:#rcat_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione rbac#:#rcat_read#:#L’utente può utilizzare la categoria ESC @@ -14737,13 +14731,13 @@ rbac#:#rcrs_edit_permission#:#Cambia le impostazioni dei permessi rbac#:#rcrs_read#:#Accesso in lettura ai link del Corso rbac#:#rcrs_visible#:#Il link al Corso è visibile rbac#:#rcrs_write#:#Edita i link al Corso -rbac#:#read_all_accounts#:#Read All Accounts###29 10 2025 new variable -rbac#:#read_comp#:#User has read access to Competences and Competence Templates###29 07 2022 new variable +rbac#:#read_all_accounts#:#Read All Accounts###28 11 2025 new variable +rbac#:#read_comp#:#User has read access to Competences and Competence Templates###31 03 2023 new variable rbac#:#read_learning_progress#:#Visualizza il progresso di apprendimento degli altri utenti -rbac#:#read_outcomes#:#View learning experiences of other users###07 02 2020 new variable -rbac#:#read_profiles#:#User has read access to Competence Profiles###29 07 2022 new variable -rbac#:#read_results#:#Survey Results###07 02 2020 new variable -rbac#:#read_users#:#Read Access to Local User Accounts +rbac#:#read_outcomes#:#Visualizza le esperienze di apprendimento di altri utenti +rbac#:#read_profiles#:#User has read access to Competence Profiles###31 03 2023 new variable +rbac#:#read_results#:#Risultati del sondaggio +rbac#:#read_users#:#Accesso in lettura agli account utente locali rbac#:#recf_edit_permission#:#Cambia le impostazioni dei permessi rbac#:#recf_read#:#Accesso in lettura agli Oggetti ripristinati rbac#:#recf_visible#:#Gli Oggetti ripristinati sono visibili @@ -14778,8 +14772,8 @@ rbac#:#role_block_role#:#Blocca ruolo rbac#:#role_block_role_desc#:#L'accesso a questo e a tutti gli oggetti subordinati sarà revocato. rbac#:#role_blocked#:#: <i>Il ruolo verrà bloccato</i> rbac#:#role_confirm_block_role#:#Salva stato del ruolo -rbac#:#role_confirm_block_role_header#:#Do you really want to block the chosen roles? -rbac#:#role_confirm_block_role_info#:#The following operations will be performed:<br /><br />- the role permissions of this and all subordinated objects will be blocked.<br />- the new permission settings will be protected. +rbac#:#role_confirm_block_role_header#:#Vuoi davvero bloccare i ruoli scelti? +rbac#:#role_confirm_block_role_info#:#Verranno eseguite le seguenti operazioni:<br /><br />- i permessi di ruolo di questo e di tutti gli oggetti subordinati saranno bloccati.<br />- le nuove impostazioni di permesso saranno protette. rbac#:#role_confirm_unblock_role_info#:#I seguenti passaggi verranno eseguiti per l'azione "Sblocca ruolo":<br /><br />- i criteri locali verranno eliminati. rbac#:#role_unblocked#:#: <i>Il ruolo sarà sbloccato</i> rbac#:#root_edit_permission#:#Modificare le impostazioni dei permessi @@ -14796,7 +14790,7 @@ rbac#:#rwik_edit_permission#:#L’utente può modificare le impostazioni di auto rbac#:#rwik_read#:#L’utente può utilizzare Wiki ESC rbac#:#rwik_visible#:#ECS Wiki è visibile rbac#:#rwik_write#:#L’utente può modificare le impostazione di Wiki ESC -rbac#:#sahs_copy#:#User can copy SCORM/AICC learning module +rbac#:#sahs_copy#:#L'utente può copiare il modulo di apprendimento SCORM rbac#:#sahs_delete#:#Eliminare un modulo SCORM/AICC rbac#:#sahs_edit_learning_progress#:#Modificare i progressi di apprendimento rbac#:#sahs_edit_permission#:#Modificare le impostazioni dei permessi @@ -14805,53 +14799,53 @@ rbac#:#sahs_read_learning_progress#:#L’utente può visualizzare il progresso d rbac#:#sahs_visible#:#Vedere un modulo SCORM/AICC rbac#:#sahs_write#:#Modificare un modulo SCORM/AICC rbac#:#seas_edit_permission#:#Modificare le impostazioni dei permessi -rbac#:#seas_read#:#Vedere la ricerca -rbac#:#seas_search#:#Consentire l& +rbac#:#seas_read#:#L'utente ha accesso in lettura all'amministrazione della ricerca +rbac#:#seas_search#:#L'utente può utilizzare la ricerca globale in ILIAS rbac#:#seas_visible#:#Vedere le impostazioni di ricerca rbac#:#seas_write#:#Modificare le impostazioni di ricerca -rbac#:#sess_copy#:#Copy Session +rbac#:#sess_copy#:#Copia sessione rbac#:#sess_delete#:#Cancella la Sessione rbac#:#sess_edit_event#:#Edita gli Eventi del Calendario rbac#:#sess_edit_learning_progress#:#L’utente può modificare le impostazioni di progresso -rbac#:#sess_edit_metadata#:#Edit Metadata###07 02 2020 new variable +rbac#:#sess_edit_metadata#:#Edit Metadata rbac#:#sess_edit_permission#:#Cambia le impostazioni dei permessi -rbac#:#sess_manage_materials#:#Manage Session Materials -rbac#:#sess_manage_members#:#Manage Participants of a Session -rbac#:#sess_read#:#Accesso in lettura alla Sessione +rbac#:#sess_manage_materials#:#Gestire i materiali della sessione +rbac#:#sess_manage_members#:#Gestire i partecipanti di una sessione +rbac#:#sess_read#:#L'utente ha accesso in lettura alle sessioni rbac#:#sess_read_learning_progress#:#L’utente può visualizzare il progresso di apprendimento degli altri utenti rbac#:#sess_visible#:#La sessione è visibile -rbac#:#sess_write#:#Edita la Sessione -rbac#:#skee_copy#:#User can copy Competence Tree (currently not available)###26 08 2024 new variable -rbac#:#skee_delete#:#User can delete Competence Tree###26 08 2024 new variable -rbac#:#skee_edit_permission#:#User can change permission settings of Competence Tree administration###26 08 2024 new variable -rbac#:#skee_manage_comp#:#User can edit Competences in Competence Tree###26 08 2024 new variable -rbac#:#skee_manage_comp_temp#:#User can edit Competence Templates in Competence Tree###26 08 2024 new variable -rbac#:#skee_manage_profiles#:#User can edit Competence Profiles in Competence Tree###26 08 2024 new variable -rbac#:#skee_read#:#User has read access to administration of Competence Tree###26 08 2024 new variable -rbac#:#skee_read_comp#:#User has read access to Competences and Competence Templates in Competence Tree###26 08 2024 new variable -rbac#:#skee_read_profiles#:#User has read access to Competence Profiles in Competence Tree###26 08 2024 new variable -rbac#:#skee_visible#:#Competence Tree is visible###26 08 2024 new variable -rbac#:#skee_write#:#User can edit settings of Competence Tree###26 08 2024 new variable -rbac#:#skmg_edit_permission#:#Change permission settings -rbac#:#skmg_read#:#Read access to Skill Management -rbac#:#skmg_visible#:#Skill Management is visible -rbac#:#skmg_write#:#Edit Skill Management -rbac#:#smtp_mail#:#Send Mail -rbac#:#spl_copy#:#Copy Survey Question Pool -rbac#:#spl_delete#:#Eliminare una raccolta di domande -rbac#:#spl_edit_permission#:#Modificare le impostazioni dei permessi -rbac#:#spl_read#:#Accedere in lettura ad una raccolta di domande -rbac#:#spl_visible#:#Vedere una raccolta di domande -rbac#:#spl_write#:#Modificare una raccolta di domande +rbac#:#sess_write#:#L'utente può modificare il contenuto e le impostazioni della sessione +rbac#:#skee_copy#:#User can copy Competence Tree (currently not available)###28 11 2023 new variable +rbac#:#skee_delete#:#User can delete Competence Tree###28 11 2023 new variable +rbac#:#skee_edit_permission#:#User can change permission settings of Competence Tree administration###28 11 2023 new variable +rbac#:#skee_manage_comp#:#User can edit Competences in Competence Tree###28 11 2023 new variable +rbac#:#skee_manage_comp_temp#:#User can edit Competence Templates in Competence Tree###28 11 2023 new variable +rbac#:#skee_manage_profiles#:#User can edit Competence Profiles in Competence Tree###28 11 2023 new variable +rbac#:#skee_read#:#User has read access to administration of Competence Tree###28 11 2023 new variable +rbac#:#skee_read_comp#:#User has read access to Competences and Competence Templates in Competence Tree###28 11 2023 new variable +rbac#:#skee_read_profiles#:#User has read access to Competence Profiles in Competence Tree###28 11 2023 new variable +rbac#:#skee_visible#:#Competence Tree is visible###28 11 2023 new variable +rbac#:#skee_write#:#User can edit settings of Competence Tree###28 11 2023 new variable +rbac#:#skmg_edit_permission#:#L'utente può cambiare le impostazioni dei permessi dell'amministrazione della gestione delle competenze +rbac#:#skmg_read#:#L'utente ha accesso in lettura all'amministrazione della Gestione delle competenze +rbac#:#skmg_visible#:#La gestione delle competenze è visibile +rbac#:#skmg_write#:#L'utente ha accesso in lettura all'amministrazione della Gestione delle competenze +rbac#:#smtp_mail#:#Inviare mail +rbac#:#spl_copy#:#L'utente può copiare il pool di domande per i sondaggi +rbac#:#spl_delete#:#L'utente può spostare o eliminare il pool di domande +rbac#:#spl_edit_permission#:#L'utente può cambiare le impostazioni dei permessi +rbac#:#spl_read#:#L'utente può leggere le domande del sondaggio nel pool e inserirle nel sondaggio +rbac#:#spl_visible#:#La raccolta di domande è visibile +rbac#:#spl_write#:#L'utente può modificare le domande del sondaggio e le impostazioni del pool di domande rbac#:#statistics_read#:#Visualizza statistiche -rbac#:#stus_edit_permission#:#User can change permission settings in Shortlink administration###29 10 2025 new variable -rbac#:#stus_read#:#User can see the Shortlink Administration###29 10 2025 new variable -rbac#:#stus_write#:#User can edit Shortlinks###29 10 2025 new variable +rbac#:#stus_edit_permission#:#User can change permission settings in Shortlink administration###28 11 2025 new variable +rbac#:#stus_read#:#User can see the Shortlink Administration###28 11 2025 new variable +rbac#:#stus_write#:#User can edit Shortlinks###28 11 2025 new variable rbac#:#sty_write_content#:#Modifica stili contenuto rbac#:#sty_write_page_layout#:#Modifica layout pagina rbac#:#sty_write_system#:#Modifica stili sistema -rbac#:#stys_edit_permission#:#Modificare le impostazioni dei permessi -rbac#:#stys_read#:#Accedere in lettura alle impostazioni degli stili +rbac#:#stys_edit_permission#:#L'utente può cambiare le impostazioni di autorizzazione dell'amministrazione di Layout e Stili +rbac#:#stys_read#:#L'utente ha accesso in lettura all'amministrazione di Layout e Stili rbac#:#stys_sty_write_content#:#Modifica stili contenuto rbac#:#stys_sty_write_custom#:#Modifica stili contenuto rbac#:#stys_sty_write_page_layout#:#Modifica layout pagina @@ -14864,7 +14858,7 @@ rbac#:#svy_edit_permission#:#Modificare le impostazioni dei permessi rbac#:#svy_invite#:#Invitare utenti ad un sondaggio rbac#:#svy_read#:#Accedere in lettura ad un sondaggio rbac#:#svy_read_learning_progress#:#L’utente può visualizzare il progresso di apprendimento degli altri utenti -rbac#:#svy_read_results#:#User has access to survey results of others###07 02 2020 new variable +rbac#:#svy_read_results#:#L'utente ha accesso ai risultati del sondaggio di altri rbac#:#svy_visible#:#Vedere un sondaggio rbac#:#svy_write#:#Modificare un sondaggio rbac#:#svyf_edit_permission#:#Cambia le impostazioni dei permessi @@ -14875,14 +14869,14 @@ rbac#:#sysc_edit_permission#:#L’utente può modificare le autorizzazioni del c rbac#:#sysc_read#:#L’utente ha l’accesso di lettura al controllo del sistema. rbac#:#sysc_visible#:#Il controllo del sistema è visibile. rbac#:#sysc_write#:#L’utente può svolgere il controllo del sistema. -rbac#:#tags_edit_permission#:#Modifica impostazioni dei permessi -rbac#:#tags_read#:#Read access to Tagging Settings -rbac#:#tags_visible#:#Tagging Settings are visible -rbac#:#tags_write#:#Modifina Impostazioni del Tagging -rbac#:#tala_edit_permission#:#User can change permission settings in Talk Templates administration###26 08 2024 new variable -rbac#:#tala_read#:#User has read access to Talk Templates administration###26 08 2024 new variable -rbac#:#tala_visible#:#Talk Templates administration is visible###26 08 2024 new variable -rbac#:#tala_write#:#User can create and edit Talk Templates###26 08 2024 new variable +rbac#:#tags_edit_permission#:#L'utente può cambiare le impostazioni dei permessi nell'amministrazione dei tag +rbac#:#tags_read#:#L'utente ha accesso in lettura all'amministrazione dei tag +rbac#:#tags_visible#:#Le impostazioni del tagging sono visibili +rbac#:#tags_write#:#Modifica le impostazioni del Tagging +rbac#:#tala_edit_permission#:#User can change permission settings in Talk Templates administration###31 03 2023 new variable +rbac#:#tala_read#:#User has read access to Talk Templates administration###31 03 2023 new variable +rbac#:#tala_visible#:#Talk Templates administration is visible###31 03 2023 new variable +rbac#:#tala_write#:#User can create and edit Talk Templates###31 03 2023 new variable rbac#:#taxs_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione nell’amministrazione della tassonomia rbac#:#taxs_read#:#L’utente ha l’accesso di lettura all’amministrazione della tassonomia rbac#:#taxs_visible#:#L'amministrazione della tassonomia è visibile @@ -14894,33 +14888,33 @@ rbac#:#tos_write#:#Modifica impostazioni nell’amministrazione dei termini di s rbac#:#trac_delete#:#Eliminare i dati di tracciamento rbac#:#trac_edit_permission#:#Modificare le impostazioni dei permessi rbac#:#trac_lp_other_users#:#Vedi panoramica del progresso di apprendimento degli altri utenti -rbac#:#trac_read#:#Accedere in lettura ai dati di tracciamento -rbac#:#trac_visible#:#Vedere i dati di tracciamento -rbac#:#trac_write#:#Modifica impostazioni nell'amministrazione statistiche e progresso dell'apprendimento +rbac#:#trac_read#:#Accesso in lettura per accedere alle statistiche e alla gestione dei progressi di apprendimento +rbac#:#trac_visible#:#Sono visibili le statistiche di accesso e la gestione dei progressi di apprendimento +rbac#:#trac_write#:#Modifica le impostazioni per le statistiche di accesso e la gestione dei progressi di apprendimento rbac#:#tst_copy#:#Copia Test -rbac#:#tst_delete#:#Eliminare un test -rbac#:#tst_edit_learning_progress#:#Modificare i progressi didattici +rbac#:#tst_delete#:#Eliminare o spostare un test +rbac#:#tst_edit_learning_progress#:#L'utente può modificare i progressi didattici rbac#:#tst_edit_permission#:#Modificare le impostazioni dei permessi rbac#:#tst_read#:#Accedere in lettura ad un test rbac#:#tst_read_learning_progress#:#L’utente può visualizzare il progresso di apprendimento degli altri utenti -rbac#:#tst_tst_history_read#:#View History###29 10 2025 new variable -rbac#:#tst_tst_results#:#User has access to test results -rbac#:#tst_visible#:#Vedere un test -rbac#:#tst_write#:#Modificare un test -rbac#:#upload_blacklisted_files#:#Bypass blacklist###07 02 2020 new variable +rbac#:#tst_tst_history_read#:#View History###28 11 2025 new variable +rbac#:#tst_tst_results#:#L'utente ha accesso ai risultati dei test degli altri +rbac#:#tst_visible#:#Il test è visibile +rbac#:#tst_write#:#Compilare il test e modificare le impostazioni +rbac#:#upload_blacklisted_files#:#Bypassa la blacklist rbac#:#usrf_delete#:#Eliminare un utente rbac#:#usrf_edit_permission#:#Modificare le impostazioni dei permessi rbac#:#usrf_edit_roleassignment#:#Cambiare i ruoli assegnati agli utenti rbac#:#usrf_push_desktop_items#:#Consentire di inviare oggetti sul desktop. rbac#:#usrf_read#:#Accedere in lettura alle registrazioni degli utenti -rbac#:#usrf_read_all_accounts#:#User can list all accounts in User administration###29 10 2025 new variable +rbac#:#usrf_read_all_accounts#:#User can list all accounts in User administration###28 11 2025 new variable rbac#:#usrf_read_users#:#Assegnare ruoli ad amministratori locali rbac#:#usrf_visible#:#Vedere le registrazioni degli utenti rbac#:#usrf_write#:#Modificare le registrazioni degli utenti -rbac#:#wbdv_edit_permission#:#User can change permission settings of WebDAV administration.###29 10 2025 new variable -rbac#:#wbdv_read#:#User has read access to WebDAV administration.###29 07 2022 new variable -rbac#:#wbdv_visible#:#Administration of WebDAV is visible.###29 07 2022 new variable -rbac#:#wbdv_write#:#User can edit settings of WebDAV administration.###29 07 2022 new variable +rbac#:#wbdv_edit_permission#:#User can change permission settings of WebDAV administration.###01 04 2025 new variable +rbac#:#wbdv_read#:#L'utente ha accesso in lettura all'amministrazione di WebDAV. +rbac#:#wbdv_visible#:#L'amministrazione di WebDAV è visibile. +rbac#:#wbdv_write#:#L'utente può modificare le impostazioni dell'amministrazione WebDAV. rbac#:#wbrs_edit_permission#:#L’utente può modificare le impostazioni di autorizzazione nell’amministrazione del collegamento web rbac#:#wbrs_read#:#L’utente ha l’accesso di lettura all’amministrazione del collegamento web rbac#:#wbrs_visible#:#L'amministrazione del collegamento web è visibile @@ -14932,7 +14926,7 @@ rbac#:#webr_read#:#Accedere in lettura alle risorse web rbac#:#webr_visible#:#Vedere le risorse web rbac#:#webr_write#:#Modificare le risorse web rbac#:#wiki_activate_wiki_protection#:#Imposta le pagine Wiki su solo lettura -rbac#:#wiki_add_pages#:#User can create wiki pages###26 08 2024 new variable +rbac#:#wiki_add_pages#:#User can create wiki pages###30 04 2024 new variable rbac#:#wiki_copy#:#Copia Wiki rbac#:#wiki_delete#:#Cancella Wiki rbac#:#wiki_delete_wiki_pages#:#Elimina pagine Wiki @@ -14941,7 +14935,7 @@ rbac#:#wiki_edit_page_meta#:#Modifica metadati pagina Wiki rbac#:#wiki_edit_permission#:#Modifica impostazioni dei permessi rbac#:#wiki_edit_wiki_navigation#:#Modifica navigazione Wiki rbac#:#wiki_html_export#:#Esporta HTML -rbac#:#wiki_read#:#Read Wiki +rbac#:#wiki_read#:#L'utente può leggere il contenuto del wiki rbac#:#wiki_statistics_read#:#Visualizza statistiche rbac#:#wiki_visible#:#Wiki è visibile rbac#:#wiki_wiki_html_export#:#Esporta Wiki come HTML @@ -14969,18 +14963,18 @@ registration#:#reg_add_assignment#:#Nuova Assegnazione registration#:#reg_added_assignment#:#Aggiunta nuova assegnazione registration#:#reg_allow_codes#:#Consenti Codici registration#:#reg_allow_codes_info#:#Gli utenti hanno anche la facoltà di registrare tramite codici. -registration#:#reg_allowed_domains#:#Allowed Email Address Domains -registration#:#reg_allowed_domains_info#:#Use * as wildcard and ; as separator. +registration#:#reg_allowed_domains#:#Domini di indirizzi e-mail consentiti +registration#:#reg_allowed_domains_info#:#Usa * come carattere jolly e ; come separatore registration#:#reg_approve#:#Registrazione con approvazione registration#:#reg_approve_info#:#Se abilitato, ogni registrazione di nuovo Utente dovrà essere approvata da un Amministratore. registration#:#reg_approve_needs_recipient#:#È necessario definire almeno un utente che sarà notificato circa le nuove registrazioni, se il tipo di registrazione "Registrazione con approvazione" è selezionato. registration#:#reg_available_roles#:#Ruoli disponibili: -registration#:#reg_confirmation_already_confirmed#:#The registration is no longer pending, it has already been confirmed.###29 10 2025 new variable +registration#:#reg_confirmation_already_confirmed#:#The registration is no longer pending, it has already been confirmed.###28 11 2025 new variable registration#:#reg_confirmation_hash_life_time#:#Illimitato registration#:#reg_confirmation_hash_life_time_expired#:#Il link di conferma non è più valido. registration#:#reg_confirmation_hash_life_time_info#:#Inserire la durata (in secondi) del link di conferma. registration#:#reg_confirmation_hash_not_found#:#Nessun account utente potrebbe essere presente a questo link di conferma. -registration#:#reg_confirmation_hash_not_passed#:#The confirmation link is incomplete.###26 08 2024 new variable +registration#:#reg_confirmation_hash_not_passed#:#The confirmation link is incomplete.###01 02 2023 new variable registration#:#reg_confirmation_link_successful#:#Hai presentato con successo una richiesta di account ad ILIAS. Riceverai una mail di conferma entro qualche minuto. Si prega di confermare la registrazione cliccando sul link di conferma in questa mail.<br />Sarai reindirizzato alla <a href="%s" title="login screen">pagina login</a> entro 20 secondi. registration#:#reg_default#:#Impostazione predefinita registration#:#reg_deleted_assignment#:#Cancella l'assegnazione (i). @@ -14988,15 +14982,15 @@ registration#:#reg_direct#:#Registrazione diretta registration#:#reg_direct_info#:#Se abilitato, ogni richiesta di registrazione di nuovo utente, è automaticamente approvato. registration#:#reg_disabled#:#Non è possibile registrarsi registration#:#reg_domain#:#Dominio -registration#:#reg_domain_already_assigned_p#:#The domains '%s' were already entered for another role.###26 08 2024 new variable -registration#:#reg_domain_already_assigned_s#:#The domain '%s' was already entered for another role. ###26 08 2024 new variable +registration#:#reg_domain_already_assigned_p#:#The domains '%s' were already entered for another role.###27 08 2024 new variable +registration#:#reg_domain_already_assigned_s#:#The domain '%s' was already entered for another role. ###27 08 2024 new variable registration#:#reg_email#:#Assegnazione automatica di Ruolo -registration#:#reg_email_domains#:#The following email address domains are valid: %s +registration#:#reg_email_domains#:#I seguenti domini di indirizzi e-mail sono validi: %s registration#:#reg_email_domains_code#:#Con un codice di registrazione qualsiasi indirizzo email è valido. registration#:#reg_email_role_assignment#:#Ruolo assegnato dal dominio registration#:#reg_fixed#:#Seleziona dalla lista specifica registration#:#reg_info_pwd#:#Se abilitato le password saranno inviate automaticamente al nuovo utente per email. -registration#:#reg_mail_body_activation#:#to activate your account and confirm ownership of this email address, click the link below: +registration#:#reg_mail_body_activation#:#per attivare il tuo account e confermare la proprietà di questo indirizzo email, clicca sul link sottostante: registration#:#reg_mail_body_approve#:#Sei già registrato su eLearning ILIAS e hai ricevuto una mail con i dati del tuo account. Ora il tuo account è stato attivato da un amministratore. registration#:#reg_mail_body_confirmation#:#Per confermare questa registrazione inserisci ILIAS user administration e attivare l'account. registration#:#reg_mail_body_profile#:#Dati del Profilo: @@ -15023,7 +15017,7 @@ registration#:#reg_type_confirmation_info#:#Questo tipo permette l'auto-registra registration#:#reg_unknown_recipients#:#Il seguente login non è valido: registration#:#registration_code#:#Codice registration#:#registration_code_not_valid#:#Il codice di registrazione non è valido o è già stato utilizzato. -registration#:#registration_code_optional_info#:#If you have an ILIAS registration code, you can enter it now. +registration#:#registration_code_optional_info#:#Se hai un codice di registrazione ILIAS, puoi inserirlo ora. registration#:#registration_code_required_info#:#Un codice predefinito è obbligatorio per il processo di registrazione. registration#:#registration_code_role_info#:#Se si utilizza un codice di registrazione, la selezione del ruolo può essere sostituita dal codice. registration#:#registration_codes_access_limitation_all#:#Tutte @@ -15033,7 +15027,7 @@ registration#:#registration_codes_export#:#Esporta Codici registration#:#registration_codes_no_assigned_role#:#Nessun ruolo predefinito assegnato registration#:#registration_codes_number#:#Numero Di Codici registration#:#registration_codes_override_global_info#:#Queste impostazioni possono essere sostituite da codici di registrazione. -registration#:#registration_codes_override_info#:#This setting overrides any values defined in "Registration Settings". +registration#:#registration_codes_override_info#:#Questa impostazione prevale su qualsiasi valore definito in "Impostazioni di registrazione". registration#:#registration_codes_roles#:#Ruolo per i Nuovi Accounts registration#:#registration_codes_roles_limitation_none#:#Nessuna limitazione di accesso predefinita registration#:#registration_codes_roles_local#:#Ruolo/i locale @@ -15056,13 +15050,13 @@ registration#:#registration_tab_codes#:#Codici di Registrazione registration#:#registration_tab_settings#:#Configurazione Registrazione registration#:#registration_used#:#Data di utilizzo registration#:#registration_user_new_account_mail#:#Modifica il Nuovo Account Mail -rep#:#btn_undelete_new_location#:#Restore (new location)###07 02 2020 new variable -rep#:#btn_undelete_origin_location#:#Restore (same location)###07 02 2020 new variable +rep#:#btn_undelete_new_location#:#Ripristino (nuova posizione) +rep#:#btn_undelete_origin_location#:#Ripristino (stessa posizione) rep#:#rep_activation_access#:#Accesso rep#:#rep_activation_access_ref_info#:#Questa impostazione influisce solo su questo e nessun altro riferimento nel repository. rep#:#rep_activation_availability#:#Disponibilità -rep#:#rep_activation_limited_end#:#Ending Time -rep#:#rep_activation_limited_start#:#Starting Time +rep#:#rep_activation_limited_end#:#Orario di fine +rep#:#rep_activation_limited_start#:#Orario di inizio rep#:#rep_activation_limited_visibility#:#Sempre visibile rep#:#rep_activation_online#:#Online rep#:#rep_activation_online_object_info#:#Questa impostazione influisce su tutti i riferimenti nel repository. @@ -15072,37 +15066,37 @@ rep#:#rep_add_new_def_grp_content#:#Contenuto rep#:#rep_add_new_def_grp_feedback#:#Feedback e valutazione rep#:#rep_add_new_def_grp_organisation#:#Organizzazione rep#:#rep_add_new_def_grp_templates#:#Modelli -rep#:#rep_add_to_favourites#:#Add to Favourites###07 02 2020 new variable -rep#:#rep_added_rec_content#:#Recommended content has been added.###07 02 2020 new variable -rep#:#rep_added_to_favourites#:#The item has been added to your favourites.###07 02 2020 new variable -rep#:#rep_allowed_types#:#Allowed Types###26 08 2024 new variable -rep#:#rep_breadcr_crs#:#Breadcrumb starts with course -rep#:#rep_breadcr_crs_config#:#Configuration###26 08 2024 new variable -rep#:#rep_breadcr_crs_overwrite#:#Setting is changeable on course level -rep#:#rep_breadcr_crs_overwrite_not#:#Setting is not changeable on course level -rep#:#rep_breadcr_crs_overwrite_settings#:#Allow Exceptions###26 08 2024 new variable -rep#:#rep_breadcr_crs_overwrite_with_default#:#Setting is changeable on course level, with this as default###26 08 2024 new variable -rep#:#rep_configure#:#Configure###07 02 2020 new variable -rep#:#rep_crs_default_shortened#:#Default: Breadcrumbs Shortened###26 08 2024 new variable +rep#:#rep_add_to_favourites#:#Aggiungi ai preferiti +rep#:#rep_added_rec_content#:#Il contenuto raccomandato è stato aggiunto. +rep#:#rep_added_to_favourites#:#L'articolo è stato aggiunto ai tuoi preferiti. +rep#:#rep_allowed_types#:#Allowed Types###31 03 2023 new variable +rep#:#rep_breadcr_crs#:#Breadcrumb inizia con corso +rep#:#rep_breadcr_crs_config#:#Configuration###24 11 2022 new variable +rep#:#rep_breadcr_crs_overwrite#:#L'impostazione è modificabile a livello di corso +rep#:#rep_breadcr_crs_overwrite_not#:#L'impostazione non è modificabile a livello di corso +rep#:#rep_breadcr_crs_overwrite_settings#:#Allow Exceptions###30 04 2024 new variable +rep#:#rep_breadcr_crs_overwrite_with_default#:#Setting is changeable on course level, with this as default###30 04 2024 new variable +rep#:#rep_configure#:#Configura +rep#:#rep_crs_default_shortened#:#Default: Breadcrumbs Shortened###24 11 2022 new variable rep#:#rep_custom_icons#:#Icone personalizzate -rep#:#rep_default#:#Default -rep#:#rep_deleted_account#:#Deleted Account###26 08 2024 new variable +rep#:#rep_default#:#Predefinito +rep#:#rep_deleted_account#:#Deleted Account###30 04 2024 new variable rep#:#rep_dependencies#:#Dipendenze rep#:#rep_dependency#:#Dipendenza -rep#:#rep_dependent_object#:#Ressource with dependence -rep#:#rep_export_limit_number#:#Number of Objects###07 02 2020 new variable -rep#:#rep_export_limitation#:#Container Export Limitation###07 02 2020 new variable -rep#:#rep_export_limitation_disabled#:#Container Export Disabled###07 02 2020 new variable -rep#:#rep_export_limitation_info#:#Limits the number of objects for container exports (courses, categories, ...) in the repository.###07 02 2020 new variable -rep#:#rep_export_limitation_limited#:#Limit Export###07 02 2020 new variable -rep#:#rep_export_limitation_unlimited#:#Unlimited Export###26 08 2024 new variable -rep#:#rep_failure_trashed_trash#:#You selected objects that cannot be restored to their original location, because their parent objects were deleted. Please uncheck the respective object in the table or select the Restore to New Location instead.###07 02 2020 new variable -rep#:#rep_fav_intro1#:#Sie haben aktuell noch keine Favoriten ausgewählt. Um dies zu tun, müssen Sie zwei Schritte machen:###07 02 2020 new variable -rep#:#rep_fav_intro2#:#Klicken Sie auf '%s' und wählen Sie aus dem verfügbaren Angebot ein Lernobjekt aus, z. B. ein Lernmodul oder ein Forum.###07 02 2020 new variable -rep#:#rep_fav_intro3#:#Wenn Sie etwas gefunden haben, das Sie interessiert, können Sie es ganz einfach zu Ihren Favoriten hinzufügen. Wählen Sie beim gewünschten Objekt im <i>Aktionen</i>-Menü die Option "<i>Zu Favoriten hinzufügen</i>".###07 02 2020 new variable -rep#:#rep_favourites#:#Favourites###29 07 2022 new variable -rep#:#rep_favourites_info#:#Users can mark single repository items as favourites. Favourites lists can be activated and configured in the dashboard and menu settings.###29 07 2022 new variable -rep#:#rep_input_not_empty#:#This field must not be empty, please provide a value.###29 10 2025 new variable +rep#:#rep_dependent_object#:#Risorse con dipendenza +rep#:#rep_export_limit_number#:#Numero di oggetti +rep#:#rep_export_limitation#:#Limitazione all'esportazione di container +rep#:#rep_export_limitation_disabled#:#Esportazione del contenitore disabilitata +rep#:#rep_export_limitation_info#:#Limita il numero di oggetti per le esportazioni di contenitori (corsi, categorie, ...) nel repository. +rep#:#rep_export_limitation_limited#:#Limite di esportazione +rep#:#rep_export_limitation_unlimited#:#Unlimited Export###30 04 2024 new variable +rep#:#rep_failure_trashed_trash#:#Hai selezionato degli oggetti che non possono essere ripristinati nella loro posizione originale, perché i loro oggetti genitori sono stati cancellati. Deseleziona il rispettivo oggetto nella tabella o seleziona invece la voce Ripristina in nuova posizione. +rep#:#rep_fav_intro1#:#Al momento non hai selezionato nessun favorito. Per fare questo, è necessario fare due passi: +rep#:#rep_fav_intro2#:#Clicca su '%s' e seleziona un oggetto di apprendimento dall'offerta disponibile, per esempio un modulo di apprendimento o un forum. +rep#:#rep_fav_intro3#:#Quando hai trovato qualcosa che ti interessa, puoi facilmente aggiungerlo ai tuoi preferiti. Seleziona l'opzione "<i>Aggiungi ai preferiti</i>" nel menu <i>Azioni</i> per l'oggetto desiderato. +rep#:#rep_favourites#:#Favourites###09 03 2022 new variable +rep#:#rep_favourites_info#:#Users can mark single repository items as favourites. Favourites lists can be activated and configured in the dashboard and menu settings.###09 03 2022 new variable +rep#:#rep_input_not_empty#:#This field must not be empty, please provide a value.###01 04 2025 new variable rep#:#rep_intro#:#Benvenuto nel Repository! rep#:#rep_intro1#:#In quest'area puoi creare risorse didattiche e di lavoro per tutti gli Utenti. Tutte le risorse sono organizzate in Categorie. le Categorie possono riflettere la struttura della tua organizzazione, ad esempio uffici, dipartimenti, ecc., una gerarchia di discipline, o le classi di una scuola. rep#:#rep_intro2#:#Sono richiesti tre passi per costruire una struttura iniziale: @@ -15110,42 +15104,42 @@ rep#:#rep_intro3#:#Clicca sul pulsante <i>%s</i> a lato della lista di selezione rep#:#rep_intro4#:#Nella seguente forma, inserisci un titolo e una descrizione e clicca su <i>%s</i>. rep#:#rep_intro5#:#Cliccando sul titolo della categoria, puoi entrare nella Categoria. rep#:#rep_intro6#:#Dopo questa procedura puoi aggiungere qualsiasi risorsa, didattica e di lavoro, alla tua categoria -rep#:#rep_mo_mem_dash#:#Sie sind aktuell noch nicht Mitglied eines Kurses oder einer Gruppe.###07 02 2020 new variable +rep#:#rep_mo_mem_dash#:#Non sei attualmente membro di un corso o di un gruppo. rep#:#rep_multiple_reference_deletion_instruction#:#Si prega di selezionare quello che dovrebbe essere eliminato: rep#:#rep_multiple_reference_deletion_intro#:#Per questo oggetto esistono ulteriori riferimenti. -rep#:#rep_new_item_group_add#:#Add Group -rep#:#rep_new_item_group_delete_sure#:#Are you sure you want to delete the following groups? -rep#:#rep_new_item_group_edit#:#Edit Group +rep#:#rep_new_item_group_add#:#Aggiungi Gruppo +rep#:#rep_new_item_group_delete_sure#:#Sei sicuro di voler eliminare i seguenti gruppi? +rep#:#rep_new_item_group_edit#:#Modifica raggruppamento rep#:#rep_new_item_group_nr_subitems#:#Numero degli oggetti assegnati rep#:#rep_new_item_group_other#:#Altro rep#:#rep_new_item_group_unassigned#:#Non assegnato rep#:#rep_new_item_group_unassigned_subitems#:#Numero degli oggetti non assegnati: %s -rep#:#rep_new_item_groups#:#New Item Groups -rep#:#rep_new_item_menu#:#"Add New Item"-Menu -rep#:#rep_no_last_visited_mess#:#You did not visited any resources yet.###29 07 2022 new variable +rep#:#rep_new_item_groups#:#Nuovi Item Group +rep#:#rep_new_item_menu#:#"Menu" Aggiungi nuovo elemento +rep#:#rep_no_last_visited_mess#:#Non hai ancora visitato nessuna risorsa. rep#:#rep_no_permission_to_delete#:#Nessuna autorizzazione per eliminare rep#:#rep_object_lists#:#Liste oggetti rep#:#rep_object_references_cannot_be_read#:#Nessuna autorizzazione per %s maggiori riferimenti. rep#:#rep_object_to_delete#:#Da eliminare -rep#:#rep_rec_content_removed#:#Recommended content has been removed.###07 02 2020 new variable -rep#:#rep_recommended_content#:#Recommended Content###07 02 2020 new variable -rep#:#rep_remove_from_favourites#:#Remove from Favourites###07 02 2020 new variable -rep#:#rep_remove_rec_content#:#Are you sure you want to remove the following recommended content?###07 02 2020 new variable -rep#:#rep_removed_from_favourites#:#The item has been removed from your favourites.###07 02 2020 new variable -rep#:#rep_target_location#:#Target Location###07 02 2020 new variable -rep#:#rep_target_location_info#:#Bitte wählen Sie nun das Ziel aus, an dem die ausgewählten Objekte wiederhergestellt werden sollen.###07 02 2020 new variable -rep#:#rep_time_based_availability#:#Temporarily Available -rep#:#rep_time_based_availability_info#:#The selected items will only be visible between the start and end date.###26 08 2024 new variable +rep#:#rep_rec_content_removed#:#Il contenuto raccomandato è stato rimosso. +rep#:#rep_recommended_content#:#Contenuto raccomandato +rep#:#rep_remove_from_favourites#:#Rimuovi dai preferiti +rep#:#rep_remove_rec_content#:#Sei sicuro di voler rimuovere il seguente contenuto raccomandato? +rep#:#rep_removed_from_favourites#:#L'articolo è stato rimosso dai tuoi preferiti. +rep#:#rep_target_location#:#Posizione target +rep#:#rep_target_location_info#:#Seleziona ora la destinazione dove gli oggetti selezionati devono essere ripristinati. +rep#:#rep_time_based_availability#:#Limited Availability Period###30 04 2024 new variable +rep#:#rep_time_based_availability_info#:#The selected items will only be visible between the start and end date.###30 04 2024 new variable rep#:#rep_time_period#:#Periodo -rep#:#rep_trash_deleted_by_unknown#:#Unknown###07 02 2020 new variable -rep#:#rep_trash_table_col_deleted_by#:#Deleted by###07 02 2020 new variable -rep#:#rep_trash_table_col_deleted_on#:#Deleted on###07 02 2020 new variable -rep#:#rep_trash_table_col_num_subs#:#Number Subitems###07 02 2020 new variable -rep#:#rep_trash_table_title#:#Deleted objects below:###07 02 2020 new variable -rep#:#rep_tree_limit#:#Limit Items in Tree -rep#:#rep_tree_limit_info#:#The number of objects in the repository tree will be limited to enhance performance. -rep#:#rep_tree_limit_number#:#Maximum Number -rep#:#rep_tree_limit_number_info#:#Maximum Number of children elements that are initially shown for an expanded node. If more children elements are present, a search input field is shown to filter the children elements by title. +rep#:#rep_trash_deleted_by_unknown#:#Sconosciuto +rep#:#rep_trash_table_col_deleted_by#:#Cancellato da +rep#:#rep_trash_table_col_deleted_on#:#Cancellato il +rep#:#rep_trash_table_col_num_subs#:#Numero di sottoggetti +rep#:#rep_trash_table_title#:#Oggetti cancellati di seguito: +rep#:#rep_tree_limit#:#Limitare gli elementi nell'albero +rep#:#rep_tree_limit_info#:#Il numero di oggetti nell'albero del repository sarà limitato per migliorare le prestazioni. +rep#:#rep_tree_limit_number#:#Numero massimo +rep#:#rep_tree_limit_number_info#:#Numero massimo di elementi figli che sono inizialmente mostrati per un nodo espanso. Se sono presenti più elementi figli, viene mostrato un campo di input di ricerca per filtrare gli elementi figli per titolo. rfil#:#rfil_call#:#Richiama file ESC rfil#:#rfil_version_tstamp#:#Carica dati rglo#:#rglo_call#:#Richiama Glossario ESC @@ -15156,10 +15150,10 @@ rwik#:#rwik_call#:#Richiama Wiki ESC sahs#:#cont_insert_after_chap#:#Inserisci l'Oggetto dopo il Capitolo sahs#:#cont_insert_into_chap#:#Inserisci l'Oggetto dentro il Capitolo sahs#:#sahs_activate_expert_mode#:#Attiva la Sequenza in Modo Esperto -sahs#:#sahs_activate_expert_mode_info#:#Attenzione: the sequencing expert mode allows you to directly edit the sequencing information of the package tree. Se non sei sicuro di cosa significhi questa scelta, ti raccomandiamo di usare l'opzione di Default Sequency Behaviour. +sahs#:#sahs_activate_expert_mode_info#:#Attenzione: la modalità esperto di sequenziamento permette di modificare direttamente le informazioni di sequenziamento dell'albero dei pacchetti. Se non sei sicuro di cosa significhi questa scelta, ti raccomandiamo di usare l'opzione di Default Sequency Behaviour. sahs#:#sahs_add#:#Crea modulo di apprendimento SCORM sahs#:#sahs_authoring_mode#:#Modalità di authoring -sahs#:#sahs_authoring_mode_info#:#The package must have been created with the ILIAS SCORM editor and it must have been exported as SCORM 1.2/2004 package. +sahs#:#sahs_authoring_mode_info#:#Il pacchetto deve essere stato creato con l'editore ILIAS SCORM e deve essere stato esportato come pacchetto SCORM 1.2/2004. sahs#:#sahs_chapter#:#Capitolo sahs#:#sahs_choose_page_template#:#Scegli il Template di Pagina sahs#:#sahs_choose_pages_chap_scos_ass_only#:#Per favore seleziona solo Pagine, oppure solo SCOs, oppure solo assets, oppure solo Capitoli. @@ -15185,7 +15179,7 @@ sahs#:#sahs_insert_special_page#:#Inserisci Pagina Speciale sahs#:#sahs_learning_objectives#:#Obiettivi di Apprendimento sahs#:#sahs_list_info#:#Usa il marcatore * per lista puntata o il marcatore sahs#:#sahs_mail_context_lp#:#SCORM progresso dell'apprendimento -sahs#:#sahs_mail_context_lp_info#:#For the participant emails on the learning progress screens of a scorm module +sahs#:#sahs_mail_context_lp_info#:#Per i partecipanti e-mail nelle schermate di avanzamento dell'apprendimento di un modulo scorm sahs#:#sahs_new_asset#:#Nuovo Asset sahs#:#sahs_new_chapter#:#Nuovo Capitolo sahs#:#sahs_new_page#:#Nuova Pagina @@ -15202,7 +15196,7 @@ sahs#:#sahs_std_sequencing#:#Sequenziamento standard sahs#:#sahs_std_sequencing_info#:#Utilizza il comportamento di sequenziamento standard ILIAS. sahs#:#sahs_unit#:#SCO sahs#:#scorm_create_export_file_html_one#:#Creare Export File (HTML, One Page, Review Mode) -sc13#:#sc13_page_type_sahs#:#SCORM Editor Page###29 07 2022 new variable +sc13#:#sc13_page_type_sahs#:#SCORM Editor Page scormdebug#:#API-call#:#Chiamata API scormdebug#:#Commit#:#memorizza i dati scormdebug#:#GetDiagnostic#:#consente all'LMS (!) di definire ulteriori informazioni diagnostiche @@ -15213,7 +15207,7 @@ scormdebug#:#Initialize#:#inizializzare comunicazione API scormdebug#:#SCO-name#:#nome SCO scormdebug#:#SCO-title#:#titolo SCO scormdebug#:#SetValue#:#invia dati -scormdebug#:#Terminate#:#memorizza i dati e termina comunicazione API +scormdebug#:#Terminate#:#Memorizza i dati e termina la comunicazione con lo SCORM-API scormdebug#:#adl.nav.request#:#La richiesta di navigazione deve essere elaborata immediatamente dopo Termina() scormdebug#:#adl.nav.request_valid.choice#:#Utilizzata da SCO per determinare se una richiesta di navigazione Scegli per una determinata attività andrà a buon fine. scormdebug#:#adl.nav.request_valid.continue#:#Utilizzata da SCO per determinare se una richiesta di navigazione Continua andrà a buon fine. @@ -15303,7 +15297,7 @@ scormdebug#:#debugwindow_submission_failed#:#Richiesta non riuscita scormdebug#:#debugwindow_submit#:#Richiedi scormdebug#:#description_for#:#descrizione per scormdebug#:#error0#:#Nessun errore -scormdebug#:#error101#:#General Exeption +scormdebug#:#error101#:#Eccezione generale scormdebug#:#error102#:#Errore di inizializzazione generale scormdebug#:#error103#:#Già inizializzato scormdebug#:#error104#:#Istanza del contenuto terminata @@ -15329,7 +15323,7 @@ scormdebug#:#error406#:#Tipo di elemento del modello di dati non corrispondente scormdebug#:#error407#:#Valore dell'elemento del modello di dati fuori intervallo scormdebug#:#error408#:#Dipendenza del modello di dati non stabilita scormdebug#:#generated#:#generata -scormdebug#:#i_fuchsia#:#fuchsia: likely a failure by ILIAS +scormdebug#:#i_fuchsia#:#fucsia: probabilmente un errore di ILIAS scormdebug#:#i_gray#:#grigio: errore corretto da ILIAS scormdebug#:#i_green#:#verde: ok scormdebug#:#i_orange#:#arancione: attenzione! @@ -15342,11 +15336,11 @@ scormdebug#:#no_missing_API-calls#:#Le chiamate API mancanti non erano state ric scormdebug#:#nr_session#:#numero di sessione scormdebug#:#only_important_API-Calls_shown#:#Sono attualmente mostrate solo le chiamate API importanti. scormdebug#:#return_value#:#valore di ritorno -scormdebug#:#scormdebug_disable_cache#:#disable SCORM 2004 Browser-Cache -scormdebug#:#scormdebug_disable_cache_info#:#Ciò impedisce l'archiviazione dei file JavaScript SCORM 2004 nella cache del browser. Si prega di utilizzare questa funzione in tempo prima di una nuova emissione! -scormdebug#:#scormdebug_global_activate#:#Enable SCORM 2004 test tool -scormdebug#:#scormdebug_global_activate_info#:#If enabled, the SCORM 2004 test tool can be activated for desired learning modules. If disabled, the test tool is deactivated for all learning modules. -scormdebug#:#sent_values_not_checked#:#proprietà selezionata: i valori inviati da SCO non sono completamente controllati +scormdebug#:#scormdebug_disable_cache#:#disabilitare SCORM 2004 Browser-Cache +scormdebug#:#scormdebug_disable_cache_info#:#Questo impedisce l'archiviazione dei file JavaScript SCORM 2004 nella cache del browser. Si prega di utilizzare questa funzione in tempo prima di una nuova emissione! +scormdebug#:#scormdebug_global_activate#:#Abilitare lo strumento di test SCORM 2004 +scormdebug#:#scormdebug_global_activate_info#:#Se abilitato, lo strumento di test SCORM 2004 può essere attivato per i moduli di apprendimento desiderati. Se disattivato, lo strumento di test è disattivato per tutti i moduli di apprendimento. +scormdebug#:#sent_values_not_checked#:#Proprietà selezionata: i valori inviati da SCO non sono completamente controllati scormdebug#:#show_all_API-calls#:#Mostra tutte le chiamate API! scormdebug#:#show_only_important_API-calls#:#Mostra solo chiamate API importanti! scormdebug#:#started#:#avviato @@ -15354,14 +15348,14 @@ scormdebug#:#strange_API-Call#:#chiamata API insolita scormdebug#:#strange_error#:#errore insolito scormdebug#:#success_status_by_score_scaled#:#Poiché c’è un valore per cmi.scaled_passing_score, il valore per cmi.success_status è valutato da LMS! Questo viene fatto comparando il valore per cmi.scaled_passing_score con il valore per cmi.score.scaled. Il valore per cmi.success_status è attualmente: scormdebug#:#summary_csv#:#Il riepilogo viene generato come file CSV da importare ad esempio in Excel -scormdebug#:#summary_download#:#You can klick to 'Logs' and download it when you start this tool again. +scormdebug#:#summary_download#:#Puoi cliccare su 'Logs' e scaricarlo quando riavvii questo strumento. scormdebug#:#summary_for_SCO_with_test#:#Riassunto per SCO con un test scormdebug#:#summary_for_SCO_without_test#:#Riassunto per SCO senza un test scormdebug#:#undefined_color#:#colore indefinito scormdebug#:#unknown#:#sconosciuto -scormtrac#:#LearningModuleId#:#Id of the learning module -scormtrac#:#LearningModuleTitle#:#Title of the learning module -scormtrac#:#LearningModuleVersion#:#Version of the learning module +scormtrac#:#LearningModuleId#:#Id del modulo e-learning +scormtrac#:#LearningModuleTitle#:#Titolo del modulo di apprendimento +scormtrac#:#LearningModuleVersion#:#Versione del modulo di apprendimento scormtrac#:#Percentage#:#Percentuale degli SCO completati scormtrac#:#Status#:#Stato totale scormtrac#:#audio_captioning#:#cmi.learner_preference.audio_captioning @@ -15376,7 +15370,7 @@ scormtrac#:#c_mode#:#cmi.mode scormtrac#:#c_raw#:#cmi.score.raw: achieved score scormtrac#:#c_timestamp#:#Ultimo accesso scormtrac#:#c_type#:#cmi.interactions.n.type -scormtrac#:#completedSCOs#:#Number of fully completed SCO +scormtrac#:#completedSCOs#:#Numero di SCO completamente completato scormtrac#:#completion_status#:#cmi.completion_status scormtrac#:#completion_threshold#:#cmi.completion_threshold scormtrac#:#counter#:#contatore @@ -15399,18 +15393,18 @@ scormtrac#:#delivery_speed#:#cmi.learner_preference.delivery_speed scormtrac#:#existingSCOs#:#Numero degli SCO esistenti scormtrac#:#exportobjglobaltosystem#:#Report per obiettivi Global To System (usato da Sequencing) scormtrac#:#exportselectedcore#:#Relazione di base per capitoli (SCO) -scormtrac#:#exportselectedinteractions#:#Basic report forinteractions +scormtrac#:#exportselectedinteractions#:#Report di base per interazioni scormtrac#:#exportselectedobjectives#:#Rapporto per oggetti scormtrac#:#exportselectedraw#:#Dati CMI (RAW) scormtrac#:#exportselectedsuccess#:#Rapporto di base per il successo scormtrac#:#identifierref#:#Rilevatore ID scormtrac#:#interaction_description#:#Decription of the interaction scormtrac#:#interaction_id#:#Id of the interaction -scormtrac#:#interaction_value#:#result of the interaction +scormtrac#:#interaction_value#:#risultato dell'interazione scormtrac#:#latency#:#cmi.interactions.n.latency: time -scormtrac#:#latency_seconds#:#cmi.interactions.n.latency: time in seconds -scormtrac#:#launch_data#:#cmi.launch_data: data at start of the SCO -scormtrac#:#learner_response#:#cmi.interactions.n.learner_response: Response +scormtrac#:#latency_seconds#:#cmi.interactions.n.latency: tempo in secondi +scormtrac#:#launch_data#:#cmi.launch_data: data all'avvio dello SCO +scormtrac#:#learner_response#:#cmi.interactions.n.learner_response: Risposta scormtrac#:#lesson_status#:#stato_lezione scormtrac#:#lm_id#:#Id del modello di apprendimento scormtrac#:#lm_title#:#Titolo del modello di apprendimento @@ -15424,23 +15418,23 @@ scormtrac#:#result#:#cmi.interactions.n.result scormtrac#:#roundedTotal_timeSeconds#:#Tempo totale in secondi (arrotondato) scormtrac#:#rvalue#:#Valore scormtrac#:#satisfied#:#Stato: soddisfatto -scormtrac#:#scaled#:#cmi.score.scaled: score achieved as a decimal fraction -scormtrac#:#scaled_passing_score#:#cmi.scaled_passing_score: score required to pass as a decimal fraction -scormtrac#:#sco_id#:#Id of the chapter (SCO) +scormtrac#:#scaled#:#cmi.score.scaled: punteggio ottenuto come frazione decimale +scormtrac#:#scaled_passing_score#:#cmi.scaled_passing_score: punteggio richiesto per passare come una frazione decimale +scormtrac#:#sco_id#:#Id del capitolo (SCO) scormtrac#:#sco_marked_for_learning_progress#:#rilevanti per il progresso dell'apprendimento -scormtrac#:#sco_title#:#title of the chapter (SCO) +scormtrac#:#sco_title#:#titolo del capitolo (SCO) scormtrac#:#scope#:#ambito -scormtrac#:#session_time#:#cmi.session_time: time in the last session -scormtrac#:#session_time_seconds#:#cmi.session_time: time in the last session in seconds -scormtrac#:#startedSCOs#:#Number of SCOs been started +scormtrac#:#session_time#:#cmi.session_time: tempo nell'ultima sessione +scormtrac#:#session_time_seconds#:#cmi.session_time: tempo nell'ultima sessione in secondi +scormtrac#:#startedSCOs#:#Numero di SCOs avviati scormtrac#:#student_response#:#risposta_dello studente: Risposta -scormtrac#:#success_status#:#cmi.success_status: success -scormtrac#:#suspend_data#:#cmi.suspend_data: variable buffer of the SCO -scormtrac#:#total_time#:#cmi.total_time: total time -scormtrac#:#total_time_seconds#:#cmi.total_time: total time in seconds -scormtrac#:#tracinteractionitem#:#Valutazione per interazione -scormtrac#:#tracinteractionuser#:#Valutazione per utente -scormtrac#:#tracinteractionuseranswers#:#Risposte degli utenti +scormtrac#:#success_status#:#cmi.success_status: successo +scormtrac#:#suspend_data#:#cmi.suspend_data: buffer variabile di SCO +scormtrac#:#total_time#:#cmi.total_time: tempo totale +scormtrac#:#total_time_seconds#:#cmi.total_time: tempo totale in secondi +scormtrac#:#tracinteractionitem#:#Rapporto riassuntivo delle attività del capitolo +scormtrac#:#tracinteractionuser#:#Rapporto relativo al partecipante sul capitolo con valutazione dei compiti del capitolo +scormtrac#:#tracinteractionuseranswers#:#Compiti del capitolo per partecipante (solo risultati) scormtrac#:#user_id#:#Id-Utente scormtrac#:#weighting#:#cmi.interactions.n.weighting scov#:#crsv_create#:#Crea certificato SCORM @@ -15487,7 +15481,7 @@ search#:#lucene_offline_filter#:#Offline-Status search#:#lucene_or#:#O search#:#lucene_port#:#Porta search#:#lucene_prefix_wildcard#:#Query prefisso caratteri jolly -search#:#lucene_prefix_wildcard_info#:#If enabled, prefix wildcard queries (*LIAS finds ILIAS) are supported. +search#:#lucene_prefix_wildcard_info#:#Se abilitato, sono supportate le query con caratteri jolly prefisso (* LIAS trova ILIAS). search#:#lucene_settings_tab#:#Lucene search#:#lucene_settings_title#:#Impostazioni Lucene search#:#lucene_size_frag_info#:#Scegli la dimensione massima degli elementi di testo evidenziati. @@ -15502,24 +15496,24 @@ search#:#search_auto_complete_length#:#Numero di di elementi di lista Auto Compl search#:#search_cdate_filter#:#Filtro da data di creazione search#:#search_cdate_filter_info#:#Se consentito, la ricerca degli oggetti può essere filtrata da un filtro data di creazione facoltativo. search#:#search_content#:#Contenuto della pagina -search#:#search_copyright#:#Copyright###29 10 2025 new variable +search#:#search_copyright#:#Copyright###28 11 2025 new variable search#:#search_created_after#:#Oggetti creati successivamente search#:#search_created_before#:#Oggetti creati in precedenza... search#:#search_created_on#:#Oggetti creati su... search#:#search_crs_title#:#Nome del Corso -search#:#search_detailed_results_title#:#Detailed results in %s###29 10 2025 new variable +search#:#search_detailed_results_title#:#Detailed results in %s###28 11 2025 new variable search#:#search_details_info#:#Ricerca dettagliata. Scegli uno o più Oggetti tra quelli indicati sopra. search#:#search_direct#:#Ricerca diretta search#:#search_err_user_not_exist#:#L'utente con quel nome di login non esiste. search#:#search_fast_info#:#Ricerca nel titolo, nella descrizione e tra le chiavi di ricerca. -search#:#search_field#:#Search Input Field###29 07 2022 new variable -search#:#search_field_perform#:#Perform Search###26 08 2024 new variable +search#:#search_field#:#Search Input Field +search#:#search_field_perform#:#Perform Search###31 03 2023 new variable search#:#search_filter_by_type#:#Filtro per tipo search#:#search_filter_cd#:#Filtro da data di creazione search#:#search_for_crs_members#:#Cerca i membri del corso search#:#search_for_grp_members#:#Ricerca membri del gruppo -search#:#search_for_orgu_members#:#Search for Organisational Units###07 02 2020 new variable -search#:#search_for_orgu_members_recursive#:#Include Subunits?###26 08 2024 new variable +search#:#search_for_orgu_members#:#Cerca unità organizzative +search#:#search_for_orgu_members_recursive#:#Include Subunits?###28 11 2025 new variable search#:#search_for_role_members#:#Ricerca Ruoli search#:#search_for_users#:#Ricerca Utenti search#:#search_grp_title#:#Nome del gruppo @@ -15530,7 +15524,7 @@ search#:#search_limit_reached#:#La ricerca ha prodotto più di %s risultati. Per search#:#search_lucene#:#Ricerca con Lucene search#:#search_mime_excel#:#File Excel search#:#search_mime_filter_form#:#Filtro tipo Mime -search#:#search_mime_filter_form_info#:#Search can be restricted to the chosen mime types.###07 02 2020 new variable +search#:#search_mime_filter_form_info#:#Search can be restricted to the chosen mime types. search#:#search_mime_image#:#Immagini search#:#search_mime_pdf#:#File PDF search#:#search_mime_powerpoint#:#File Powerpoint @@ -15543,137 +15537,138 @@ search#:#search_no_match#:#La ricerca non ha prodotto risultati search#:#search_no_match_hint#:#La tua ricerca - <b>%s</b> - non ha prodotto risultati.<br /><br />Suggerimento:<br />Controlla l'ortografia.<br />Prova con termini differenti.<br />Prova con termini più generali.<br />Prova con meno termini. search#:#search_no_selection#:#Nessuma selezione search#:#search_off#:#Off -search#:#search_readme_file#:#Readme File###29 10 2025 new variable -search#:#search_results_show_subitems#:#See detailed results###29 10 2025 new variable -search#:#search_results_too_many_subitems#:#More results are available, please make your search terms more precise.###29 10 2025 new variable +search#:#search_readme_file#:#Readme File###28 11 2025 new variable +search#:#search_results_show_subitems#:#See detailed results###28 11 2025 new variable +search#:#search_results_too_many_subitems#:#More results are available, please make your search terms more precise.###28 11 2025 new variable search#:#search_role_title#:#Nome del ruolo search#:#search_select_search_area#:#Seleziona area di ricerca -search#:#search_server_further_information#:#You can find further information about the Lucene server configuration in the readme file.###29 10 2025 new variable +search#:#search_server_further_information#:#You can find further information about the Lucene server configuration in the readme file.###28 11 2025 new variable search#:#search_show_inactive_user#:#Mostra utenti disattivi -search#:#search_show_inactive_user_info#:#If enabled, the user search will show inactive users. -search#:#search_show_limited_user#:#Show Limited Users -search#:#search_show_limited_user_info#:#If enabled, the user search will show users with limited access and outside their allowed time period. -search#:#search_sort_by#:#Sortation: %s###28 10 2024 new variable -search#:#search_sort_creation_date_asc#:#Oldest###28 10 2024 new variable -search#:#search_sort_creation_date_desc#:#Latest###28 10 2024 new variable -search#:#search_sort_generic_asc#:#%s, asc.###28 10 2024 new variable -search#:#search_sort_generic_desc#:#%s, desc.###28 10 2024 new variable -search#:#search_sort_relevance#:#By Relevance###28 10 2024 new variable -search#:#search_sort_title_asc#:#Alphabetically: A-Z###28 10 2024 new variable -search#:#search_sort_title_desc#:#Alphabetically: Z-A###28 10 2024 new variable +search#:#search_show_inactive_user_info#:#Se abilitato, la ricerca dell'utente mostrerà gli utenti inattivi. +search#:#search_show_limited_user#:#Mostra utenti con accesso limitato +search#:#search_show_limited_user_info#:#Se abilitato, la ricerca dell'utente mostrerà gli utenti con accesso limitato e al di fuori del periodo di tempo consentito. +search#:#search_sort_by#:#Sortation:###28 11 2025 new variable +search#:#search_sort_creation_date_asc#:#Oldest###28 11 2025 new variable +search#:#search_sort_creation_date_desc#:#Latest###28 11 2025 new variable +search#:#search_sort_generic_asc#:#%s, asc.###28 11 2025 new variable +search#:#search_sort_generic_desc#:#%s, desc.###28 11 2025 new variable +search#:#search_sort_relevance#:#By Relevance###28 11 2025 new variable +search#:#search_sort_title_asc#:#Alphabetically: A-Z###28 11 2025 new variable +search#:#search_sort_title_desc#:#Alphabetically: Z-A###28 11 2025 new variable search#:#search_term_combination#:#Combinazione termini di ricerca search#:#search_title_description#:#Titolo / Descrizione search#:#search_tst_svy#:#Test/Sondaggi search#:#search_type#:#Tipo di ricerca search#:#search_user#:#Utenti search#:#search_user_extended#:#Ricerca estesa -search#:#search_user_search_form#:#User Search -search#:#search_user_search_info_form#:#If enabled, users data will be indexed and is searchable. -search#:#seas_search_type#:#Tipo di ricerca -search#:#select_orgu#:#Select Organisational Units###07 02 2020 new variable +search#:#search_user_search_form#:#Cerca nei profili personali +search#:#search_user_search_info_form#:#Se abilitato, i dati degli utenti saranno indicizzati e saranno ricercabili. +search#:#seas_search_type#:#Type###28 11 2025 new variable +search#:#select_orgu#:#Seleziona Unità organizzative search#:#until#:#a: -search#:#user_search_settings_section#:#User Search in 'Member'-tabs###29 10 2025 new variable -sess#:#il_sess_participant#:#Session Participants +search#:#user_search_settings_section#:#User Search in 'Member'-tabs###28 11 2025 new variable +sess#:#il_sess_participant#:#Partecipanti alla sessione sess#:#il_sess_status_open#:#Open Session###29 07 2022 new variable -sess#:#mail_sess_roles#:#Send Mail to Session Roles -sess#:#notification#:#Notification###07 02 2020 new variable +sess#:#mail_sess_roles#:#Invia posta ai ruoli di sessione +sess#:#notification#:#Notifica sess#:#objs_crs_role#:#Ruoli del corso sess#:#objs_grp_role#:#Ruoli del gruppo -sess#:#send_mail_participants#:#All Participants of Session +sess#:#send_mail_participants#:#Tutti i partecipanti alla sessione sess#:#sess_accept_request#:#Accetta partecipazione -sess#:#sess_assign#:#Assign###07 02 2020 new variable -sess#:#sess_bt_refuse#:#Cannot Participate###07 02 2020 new variable +sess#:#sess_assign#:#Assegnare +sess#:#sess_bt_refuse#:#Cannot Participate sess#:#sess_change_type#:#Change Session Type###29 07 2022 new variable -sess#:#sess_contact#:#Contact +sess#:#sess_contact#:#Contatto sess#:#sess_copy#:#Copia Sessione -sess#:#sess_filter_all_types#:#All types -sess#:#sess_filter_not_assigned#:#Not Assigned +sess#:#sess_filter_all_types#:#Tutti i tipi +sess#:#sess_filter_not_assigned#:#Non assegnato sess#:#sess_import#:#Importa Sessione sess#:#sess_info_new_sess_type#:#New Session Type###29 07 2022 new variable sess#:#sess_is_assigned#:#is Assigned sess#:#sess_list_reg_limit_places#:#Posti disponibili sess#:#sess_lp_preset#:#Attiva il progresso dell'apprendimento -sess#:#sess_lp_preset_info#:#(De-)Actives the learning progress for all session events. -sess#:#sess_mail_admins_only#:#For Administrators only -sess#:#sess_mail_admins_only_info#:#Only administrators can use the feature ‘Mail to Participants’ in the ‘Participants’ tab. -sess#:#sess_mail_all#:#For all Participants -sess#:#sess_mail_all_info#:#All participants can use the feature ‘Mail to Participants’ in the ‘Participants’ tab. -sess#:#sess_mail_context_participant_info#:#For the participant e-mails on the participants and learning progress screens of a session -sess#:#sess_mail_context_participant_title#:#Sitzung: Mail to Participants +sess#:#sess_lp_preset_info#:#(De-) Attiva l'avanzamento dell'apprendimento per tutti gli eventi della sessione. +sess#:#sess_mail_admins_only#:#Solo per amministratori +sess#:#sess_mail_admins_only_info#:#Solo gli amministratori possono utilizzare la funzione "Invia ai partecipanti" nella scheda "Partecipanti". +sess#:#sess_mail_all#:#Per tutti i partecipanti +sess#:#sess_mail_all_info#:#Tutti i partecipanti possono utilizzare la funzione "Invia ai partecipanti" nella scheda "Partecipanti". +sess#:#sess_mail_context_participant_info#:#Per i partecipanti e-mail sui partecipanti e schermate di avanzamento dell'apprendimento di una sessione +sess#:#sess_mail_context_participant_title#:#Sezione: Mail ai partecipanti sess#:#sess_mail_permanent_link#:#Clicca sul seguente link per avere tutte le informazioni di cui hai bisogno riguardo la sessione: -sess#:#sess_mail_permanent_link_participants#:#Click on the following link to edit the participants of the session:###07 02 2020 new variable -sess#:#sess_mail_sub_acc_bod#:#sei stato registrato per la sessione "%s". +sess#:#sess_mail_permanent_link_participants#:#Fare clic sul seguente collegamento per modificare i partecipanti alla sessione: +sess#:#sess_mail_sub_acc_bod#:#Sei stato registrato per la sessione "%s". sess#:#sess_mail_sub_acc_sub#:#Registrazione per la sessione "%s" sess#:#sess_mail_sub_dec_bod#:#Siamo spiacenti nel dirti che la tua registrazione è stata rifiutata per la sessione "%s". sess#:#sess_mail_sub_dec_sub#:#Registrazione rifiutato per la sessione "%s" -sess#:#sess_mail_type#:#Mail to Participants -sess#:#sess_material_assigned#:#Assigned###07 02 2020 new variable -sess#:#sess_material_not_assigned#:#Not Assigned###07 02 2020 new variable +sess#:#sess_mail_type#:#Mail ai partecipanti +sess#:#sess_material_assigned#:#Assegnato +sess#:#sess_material_not_assigned#:#Not Assegnato sess#:#sess_max_members_needed#:#Per la funzionalità della lista di attesta è necessario un numero massimo dei membri. sess#:#sess_mem_contacts#:#Tutorial Support -sess#:#sess_mem_send_mail#:#Send Mail###26 08 2024 new variable +sess#:#sess_mem_send_mail#:#Send Mail###30 04 2024 new variable sess#:#sess_mem_tbl_header#:#Partecipanti alla sessione -sess#:#sess_member_administration#:#Edit Participants -sess#:#sess_members#:#Participants -sess#:#sess_members_gallery#:#Session Gallery +sess#:#sess_member_administration#:#Modifica partecipanti +sess#:#sess_members#:#Participanti +sess#:#sess_members_gallery#:#Galleria delle sessioni sess#:#sess_members_print_title#:#Partecipanti alla sessione sess#:#sess_msg_applicants_assigned#:#Candidato/i registrato/i per la sessione. sess#:#sess_msg_applicants_removed#:#Candidato/i rimosso/i dalla lista. +sess#:#sess_new#:#Create Session###28 11 2025 new variable sess#:#sess_new_registrations#:#Partecipa alla richiesta -sess#:#sess_notification_option#:#Option###07 02 2020 new variable -sess#:#sess_notification_option_inherit#:#Inherit from Parent###07 02 2020 new variable -sess#:#sess_notification_option_inherit_info#:#Use the parent notification settings (e.g. notification settings from course or group) for members of this session###07 02 2020 new variable -sess#:#sess_notification_option_manual#:#Set manually###07 02 2020 new variable -sess#:#sess_notification_option_manual_info#:#Notification setting for users has to be set manually in tab 'Participants'###07 02 2020 new variable +sess#:#sess_notification_option#:#Opzione +sess#:#sess_notification_option_inherit#:#Eredita da Genitore +sess#:#sess_notification_option_inherit_info#:#Utilizza le impostazioni di notifica dei genitori (ad es. Le impostazioni di notifica del corso o del gruppo) per i membri di questa sessione +sess#:#sess_notification_option_manual#:#Imposta manualmente +sess#:#sess_notification_option_manual_info#:#L'impostazione delle notifiche per gli utenti deve essere impostata manualmente nella scheda "Partecipanti" sess#:#sess_open#:#Apri sessione sess#:#sess_part_filter_participated#:#Solo frequentato sess#:#sess_part_filter_registered#:#Solo registrato -sess#:#sess_part_table_excused#:#Excused###07 02 2020 new variable -sess#:#sess_participation_refused_info#:#Your participation for this event has been canceled.###07 02 2020 new variable +sess#:#sess_part_table_excused#:#Scusato +sess#:#sess_participation_refused_info#:#La tua partecipazione a questo evento è stata annullata. sess#:#sess_print_list#:#Genera lista sess#:#sess_reg_added_to_wl#:#Sei stato aggiunto alla lista di attesta del gruppo. -sess#:#sess_reg_cannot_participate#:#Cannot Participate###29 07 2022 new variable -sess#:#sess_reg_cannot_participate_info#:#Users can indicate that they cannot participate in the session.###29 07 2022 new variable -sess#:#sess_reg_direct#:#Direct Registration +sess#:#sess_reg_cannot_participate#:#Cannot Participate +sess#:#sess_reg_cannot_participate_info#:#Users can indicate that they cannot participate in the session. +sess#:#sess_reg_direct#:#Registrazione diretta sess#:#sess_reg_direct_info#:#L’utente ha il pulsante “Partecipa” per partecipare alla sessione -sess#:#sess_reg_disabled#:#No Self-enrolment -sess#:#sess_reg_disabled_info#:#A registration is not required for this session appointment +sess#:#sess_reg_disabled#:#Nessuna iscrizione automatica +sess#:#sess_reg_disabled_info#:#Non è richiesta la registrazione per questo appuntamento di sessione sess#:#sess_reg_max_members#:#Numero limitato di membri -sess#:#sess_reg_max_members_info#:#Define the maximum number of users that can participate to this session. +sess#:#sess_reg_max_members_info#:#Definire il numero massimo di utenti che possono partecipare a questa sessione. sess#:#sess_reg_max_members_short#:#Numero dei membri sess#:#sess_reg_max_users_exceeded#:#Non è possibile registrarsi fino a quando il numero massimo degli utente sarà superato. sess#:#sess_reg_max_users_exceeded_wl#:#Il numero massimo degli utenti per questo appuntamento della sessione è stato superato. -sess#:#sess_reg_request#:#Request Membership -sess#:#sess_reg_request_info#:#Interested users can send a request/message to administrators. -sess#:#sess_reg_tutor#:#No Registration Possible###29 07 2022 new variable -sess#:#sess_reg_tutor_info#:#Users cannot register for this session on their own. Only administrators can register users.###29 07 2022 new variable -sess#:#sess_reg_type#:# Procedura di registrazione +sess#:#sess_reg_request#:#Richiedi la partecipazione +sess#:#sess_reg_request_info#:#Gli utenti interessati possono inviare una richiesta / messaggio agli amministratori. +sess#:#sess_reg_tutor#:#No Registration Possible +sess#:#sess_reg_tutor_info#:#Users cannot register for this session on their own. Only administrators can register users. +sess#:#sess_reg_type#:#Procedura di registrazione sess#:#sess_reg_waiting_list#:#Lista di attesta sess#:#sess_reg_waiting_list_autofill#:#Con riempimento automatico -sess#:#sess_reg_waiting_list_autofill_info#:#Participants are recruited from the waiting list automatically on cancellations. +sess#:#sess_reg_waiting_list_autofill_info#:#I partecipanti vengono reclutati automaticamente dalla lista di attesa in caso di cancellazione. sess#:#sess_reg_waiting_list_no_autofill#:#Senza riempimento automatico sess#:#sess_reg_waiting_list_no_autofill_info#:#Se viene superato il numero massimo di utenti, le nuove registrazioni verranno inserite in una lista di attesa. sess#:#sess_reg_waiting_list_none#:#Nessuno -sess#:#sess_registered_confirm#:#The registration requires a confirmation of an administrator. You will be notified after the registration process is completed. -sess#:#sess_registration_notification#:#Notification###07 02 2020 new variable -sess#:#sess_registration_notification_info#:#Shows column in tab 'Participants' to select users being notified about new or leaving participants###07 02 2020 new variable +sess#:#sess_registered_confirm#:#La registrazione richiede la conferma di un amministratore. Riceverai una notifica al termine della procedura di registrazione. +sess#:#sess_registration_notification#:#Notifica +sess#:#sess_registration_notification_info#:#Mostra la colonna nella scheda "Partecipanti" per selezionare gli utenti a cui vengono notificati i partecipanti nuovi o in uscita sess#:#sess_section_reg#:#Impostazioni di registrazione -sess#:#sess_setting_header_presentation#:#Presentation###29 07 2022 new variable -sess#:#sess_show_members#:#Show Participants -sess#:#sess_show_participants_info#:#If activated, session participants can access the participant gallery -sess#:#sess_title#:#Title of Session###29 07 2022 new variable +sess#:#sess_setting_header_presentation#:#Presentation +sess#:#sess_show_members#:#Mostra partecipanti +sess#:#sess_show_participants_info#:#Se attivato, i partecipanti alla sessione possono accedere alla galleria dei partecipanti +sess#:#sess_title#:#Titolo della sessione sess#:#sess_users_added#:#Utenti selezionati registrati per la sessione. sess#:#sess_users_already_assigned#:#L’utente si è appena registrato a questa sessione. sess#:#sess_users_removed_from_list#:#Gli utenti selezionati sono stati eliminati dalla lista di attesta. sess#:#sess_warn_sess_type_changed#:#Do you really want to change the session type? All permission settings will be reset.###29 07 2022 new variable -shib#:#shib_account_creation#:#Account Creation###28 10 2024 new variable -shib#:#shib_account_creation_disabled#:#Disabled###28 10 2024 new variable -shib#:#shib_account_creation_disabled_info#:#No new account is created.###28 10 2024 new variable -shib#:#shib_account_creation_enabled#:#Enabled###28 10 2024 new variable -shib#:#shib_account_creation_enabled_info#:#An active new account is created.###28 10 2024 new variable -shib#:#shib_account_creation_info#:#Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth.###28 10 2024 new variable -shib#:#shib_account_creation_with_approval#:#With approval###28 10 2024 new variable -shib#:#shib_account_creation_with_approval_info#:#An inactive new account is created. The account remains inactive until activated by an administrator.###28 10 2024 new variable +shib#:#shib_account_creation#:#Account Creation###28 11 2025 new variable +shib#:#shib_account_creation_disabled#:#Disabled###28 11 2025 new variable +shib#:#shib_account_creation_disabled_info#:#No new account is created.###28 11 2025 new variable +shib#:#shib_account_creation_enabled#:#Enabled###28 11 2025 new variable +shib#:#shib_account_creation_enabled_info#:#An active new account is created.###28 11 2025 new variable +shib#:#shib_account_creation_info#:#Account creation is triggered, when a user without a pre-existing ILIAS Account tries to log in via Shibboleth.###28 11 2025 new variable +shib#:#shib_account_creation_with_approval#:#With approval###28 11 2025 new variable +shib#:#shib_account_creation_with_approval_info#:#An inactive new account is created. The account remains inactive until activated by an administrator.###28 11 2025 new variable shib#:#shib_add_missing#:#Assegna Ruoli Mancanti shib#:#shib_add_remove#:#Aggiungi/Rimuovi Ruoli shib#:#shib_assignment_type#:#Tipo di assegnazione @@ -15711,182 +15706,182 @@ shib#:#shib_settings#:#Impostazioni Shibboleth shib#:#shib_update_role_ass_table#:#Modifica Regola di Assegnazione Ruolo shib#:#shib_update_roles#:#Assegnazioni Ruoli skll#:#skll_competence_achievements#:#Nuovi raggiungimenti di competenze e valutazioni -skll#:#skll_intro_skill_notification_for#:#questa è una panoramica dei tuoi ultimi successi di competenza. +skll#:#skll_intro_skill_notification_for#:#questa è una panoramica dei tuoi ultimi successi di competenze. skll#:#skll_lhist_skill_achieved#:#Status $4$ of $3$ was assigned in $1$. -skll#:#skll_lhist_skill_profile_fulfilled#:#Competence Profile $3$ was fulfilled.###29 07 2022 new variable -skll#:#skll_lhist_skill_self_eval#:#Status $4$ of $3$ was self-assigned.###07 02 2020 new variable -skll#:#skll_lhist_skill_self_eval_in#:#Status $4$ of $3$ was self-assigned in $1$.###07 02 2020 new variable -skll#:#skll_new_skill_achievements#:#Hai raggiunto nuovi livelli di competenza nel periodo da %1$s a %2$s: -skll#:#skll_skill_notification#:#Notifica competenza -skll#:#skll_skill_notification_desc#:#Informa l'utente sui livelli di competenza appena impostati. -skmg#:#scat#:#Categoria di Competenza +skll#:#skll_lhist_skill_profile_fulfilled#:#Competence Profile $3$ was fulfilled.###31 03 2023 new variable +skll#:#skll_lhist_skill_self_eval#:#Lo status $4$ of $3$ è stato auto-assegnato +skll#:#skll_lhist_skill_self_eval_in#:#Lo status $4$ of $3$ è stato auto-assegnato in $1$. +skll#:#skll_new_skill_achievements#:#Hai raggiunto nuovi livelli di competenza nel periodo da %1$sa %2$s: +skll#:#skll_skill_notification#:#Notifica competenze +skll#:#skll_skill_notification_desc#:#Informa l'utente sui livelli di competenze appena impostati. +skmg#:#scat#:#Categoria di competenze skmg#:#skll#:#Competenze di base skmg#:#skmg_360_survey#:#Sondaggio a 360° -skmg#:#skmg_add_assignment#:#Add Roles / Members###07 02 2020 new variable +skmg#:#skmg_add_assignment#:#Aggiungi ruoli / membri skmg#:#skmg_add_level#:#Aggiungi Livello -skmg#:#skmg_add_local_profile#:#Add Local Profile###29 07 2022 new variable +skmg#:#skmg_add_local_profile#:#Add Local Profile skmg#:#skmg_add_profile#:#Aggiungi profilo skmg#:#skmg_add_resource#:#Aggiungi risorsa -skmg#:#skmg_add_skill#:#Aggiungi Competenza -skmg#:#skmg_add_skill_tree#:#Add Competence Tree###29 07 2022 new variable -skmg#:#skmg_add_user_to_profile#:#Add users or roles to profile###07 02 2020 new variable -skmg#:#skmg_all#:#All -skmg#:#skmg_allow_local_profiles#:#Allow Creation of Local Profiles###29 07 2022 new variable -skmg#:#skmg_allow_local_profiles_info#:#Users with permission 'Edit Settings' in Courses and Groups can create local competence profiles using globally defined competences.###29 07 2022 new variable -skmg#:#skmg_ass_materials_from_workspace#:#Qui è possibile assegnare materiali, per esempio file dal tuo spazio di lavoro personale ai livelli di competenza. Se si desidera aggiungere materiali al proprio spazio di lavoro personale ora, cliccare sul seguente link. +skmg#:#skmg_add_skill#:#Aggiungi competenze +skmg#:#skmg_add_skill_tree#:#Add Competence Tree###31 03 2023 new variable +skmg#:#skmg_add_user_to_profile#:#Aggiungi utenti o ruoli al profilo +skmg#:#skmg_all#:#Tutto +skmg#:#skmg_allow_local_profiles#:#Allow Creation of Local Profiles +skmg#:#skmg_allow_local_profiles_info#:#Users with permission 'Edit Settings' in Courses and Groups can create local competence profiles using globally defined competences. +skmg#:#skmg_ass_materials_from_workspace#:#Qui è possibile assegnare materiali, per esempio file dal tuo spazio di lavoro personale ai livelli di competenze. Se si desidera aggiungere materiali al proprio spazio di lavoro personale ora, cliccare sul seguente link. skmg#:#skmg_assign_level#:#Assegna livello skmg#:#skmg_assign_materials#:#Assegna Materiali skmg#:#skmg_assign_user#:#Assegna utente -skmg#:#skmg_assigned_objects#:#Assigned Objects###29 07 2022 new variable +skmg#:#skmg_assigned_objects#:#Assigned Objects skmg#:#skmg_assigned_profiles#:#Profili assegnati -skmg#:#skmg_assigned_skill_levels#:#Livelli di competenza assegnati +skmg#:#skmg_assigned_skill_levels#:#Livelli di competenze assegnati skmg#:#skmg_assigned_users#:#Utenti assegnati -skmg#:#skmg_bar_charts#:#Bar Charts###26 08 2024 new variable +skmg#:#skmg_bar_charts#:#Bar Charts###28 11 2025 new variable skmg#:#skmg_cannot_delete_nodes_in_use#:#Alcune voci non possono essere eliminate perché ancora in uso. -skmg#:#skmg_cert_skill_level_title#:#Titolo del Livello di Competenza -skmg#:#skmg_cert_skill_title#:#Titolo della Competenza -skmg#:#skmg_cert_skill_trigger_title#:#Skill Trigger Title -skmg#:#skmg_confirm_level_resources_removal#:#Do you really want to remove the followin resources from the competence level? -skmg#:#skmg_confirm_remove_level_ass#:#Vuoi davvero rimuovere i seguenti livelli di competenza da questo profilo? +skmg#:#skmg_cert_skill_level_title#:#Titolo del Livello di competenze +skmg#:#skmg_cert_skill_title#:#Titolo della competenze +skmg#:#skmg_cert_skill_trigger_title#:#Titolo trigger competenze +skmg#:#skmg_confirm_level_resources_removal#:#Vuoi veramente rimuovere le seguenti risorse dal livello di competenze? +skmg#:#skmg_confirm_remove_level_ass#:#Vuoi davvero rimuovere i seguenti livelli di competenze da questo profilo? skmg#:#skmg_confirm_user_removal#:#Vuoi davvero rimuovere i seguenti utenti da questo profilo? -skmg#:#skmg_cont_profiles_info#:#In this view, you can select the competence profiles with competence entries, which are related to the currently open object (course/group). To get to the global view with all competence profiles you are assigned to and all competence entries, click on the link below.###26 08 2024 new variable -skmg#:#skmg_cont_profiles_info_empty#:#There are no competence profiles related to the currently open object.###26 08 2024 new variable -skmg#:#skmg_cont_records_info_empty#:#There are no competences related to the currently opened object.###26 08 2024 new variable -skmg#:#skmg_context_global#:#Global###29 07 2022 new variable -skmg#:#skmg_context_local#:#Local###29 07 2022 new variable -skmg#:#skmg_count_references#:#Number of referenced competences:###26 08 2024 new variable +skmg#:#skmg_cont_profiles_info#:#In this view, you can select the competence profiles with competence entries, which are related to the currently open object (course/group). To get to the global view with all competence profiles you are assigned to and all competence entries, click on the link below.###31 08 2022 new variable +skmg#:#skmg_cont_profiles_info_empty#:#There are no competence profiles related to the currently open object.###30 04 2024 new variable +skmg#:#skmg_cont_records_info_empty#:#There are no competences related to the currently opened object.###30 04 2024 new variable +skmg#:#skmg_context_global#:#Global +skmg#:#skmg_context_local#:#Local +skmg#:#skmg_count_references#:#Number of referenced competences:###23 10 2023 new variable skmg#:#skmg_create_sctp#:#Crea una Categoria di Template -skmg#:#skmg_create_skill_category#:#Crea una Categoria di Competenza -skmg#:#skmg_create_skill_template#:#Crea Template di Competenza -skmg#:#skmg_create_skill_template_category#:#Crea una Categoria di Template di Competenza -skmg#:#skmg_create_skill_template_reference#:#Create Relazione di Template di Competenza -skmg#:#skmg_create_skll#:#Crea Competenza -skmg#:#skmg_custom_image_alt#:#Custom image for competence profile###29 07 2022 new variable +skmg#:#skmg_create_skill_category#:#Crea una Categoria di competenze +skmg#:#skmg_create_skill_template#:#Crea Template di competenze +skmg#:#skmg_create_skill_template_category#:#Crea una Categoria di Template di competenze +skmg#:#skmg_create_skill_template_reference#:#Create Relazione di Template di competenze +skmg#:#skmg_create_skll#:#Crea competenze +skmg#:#skmg_custom_image_alt#:#Custom image for competence profile###31 03 2023 new variable skmg#:#skmg_delete_profiles#:#Vuoi davvero eliminare i seguenti profili? -skmg#:#skmg_delete_warning#:#Are you sure that you want to delete the following item(s)? When you delete the items, you also delete all usages, assignments and achievements of it. To be on the safe side, you find a list of all usages below. If the item is used in a competence profile, it will be removed from the profile, too. This may cause the fulfilment of the competence profile for the assigned users. If your are not sure whether an item should really be deleted, please use the statuses in the settings of a single item.###26 08 2024 new variable -skmg#:#skmg_description_info#:#The description comes from the template.###07 02 2020 new variable +skmg#:#skmg_delete_warning#:#Are you sure that you want to delete the following item(s)? When you delete the items, you also delete all usages, assignments and achievements of it. To be on the safe side, you find a list of all usages below. If the item is used in a competence profile, it will be removed from the profile, too. This may cause the fulfilment of the competence profile for the assigned users. If your are not sure whether an item should really be deleted, please use the statuses in the settings of a single item.###30 04 2024 new variable +skmg#:#skmg_description_info#:#La descrizione proviene dal template. skmg#:#skmg_edit_level#:#Livello di modifica skmg#:#skmg_edit_profile#:#Modifica profilo -skmg#:#skmg_edit_scat#:#Edita la Categoria di Competenza -skmg#:#skmg_edit_sctp#:#Edit Template Category###07 02 2020 new variable -skmg#:#skmg_edit_skll#:#Edita le impostazioni di Competenza -skmg#:#skmg_edit_sktr#:#Edita Relazione dei Template di Competenza +skmg#:#skmg_edit_scat#:#Edita la Categoria di competenze +skmg#:#skmg_edit_sctp#:#Edit Template Category +skmg#:#skmg_edit_skll#:#Edita le impostazioni di competenze +skmg#:#skmg_edit_sktr#:#Edita Relazione dei Template di competenze skmg#:#skmg_enable_skmg#:#Attivare la Gestione delle Competenze. skmg#:#skmg_eval_type_1#:#Valutazione skmg#:#skmg_eval_type_2#:#Misurazione skmg#:#skmg_eval_type_3#:#Autovalutazione -skmg#:#skmg_eval_type_latest_1#:#Latest Appraisal###29 07 2022 new variable -skmg#:#skmg_eval_type_latest_2#:#Latest Measurement###29 07 2022 new variable -skmg#:#skmg_eval_type_latest_3#:#Latest Self-Evaluation###29 07 2022 new variable -skmg#:#skmg_execute_self_evaluation#:#Inizia. -skmg#:#skmg_form_presentation#:#Presentation###29 07 2022 new variable +skmg#:#skmg_eval_type_latest_1#:#Latest Appraisal###31 03 2023 new variable +skmg#:#skmg_eval_type_latest_2#:#Latest Measurement###31 03 2023 new variable +skmg#:#skmg_eval_type_latest_3#:#Latest Self-Evaluation###31 03 2023 new variable +skmg#:#skmg_execute_self_evaluation#:#Inizia +skmg#:#skmg_form_presentation#:#Presentation###31 03 2023 new variable skmg#:#skmg_from_lower_to_higher_levels#:#Per favore ordina i Livelli dal più basso in cima alla lista e il più alto, in fondo alla lista. skmg#:#skmg_hide_profile_self_eval#:#Nascondi profilo senza autovalutazione -skmg#:#skmg_hide_profile_self_eval_info#:#I valori di destinazione del profilo non verranno mostrati a un utente, se non è stata effettuata un'autovalutazione per una specifica competenza. +skmg#:#skmg_hide_profile_self_eval_info#:#I valori di destinazione del profilo non verranno mostrati a un utente, se non è stata effettuata un'autovalutazione per una specifica competenze. skmg#:#skmg_import_skills#:#Importa skmg#:#skmg_input_file#:#Importa file skmg#:#skmg_insert_basic_skill_from_clip#:#Inserisci le Competenze di base, dal Clipboard. skmg#:#skmg_insert_please_choose_one_type_only#:#Per favore seleziona un solo tipo di oggetto. -skmg#:#skmg_insert_skill_category_from_clip#:#Inserisci Categoria di Competenza, dal Clipboard. -skmg#:#skmg_insert_skill_template_from_clip#:#Inserisci Template di Competenza, dal Clpboard. -skmg#:#skmg_insert_skill_template_reference_from_clip#:#Inserisci Relazione Template di Competenza, dal Clipboard. +skmg#:#skmg_insert_skill_category_from_clip#:#Inserisci Categoria di competenze, dal Clipboard. +skmg#:#skmg_insert_skill_template_from_clip#:#Inserisci Template di competenze, dal Clpboard. +skmg#:#skmg_insert_skill_template_reference_from_clip#:#Inserisci Relazione Template di competenze, dal Clipboard. skmg#:#skmg_insert_template_category_from_clip#:#Inserisci Categoria di Template dal Clipboard. skmg#:#skmg_items#:#Oggetti skmg#:#skmg_level#:#Livello skmg#:#skmg_list_skills#:#Elenca le Competenze. -skmg#:#skmg_local_assignment_profiles#:#Allow Local Assignment of Global Profiles###29 07 2022 new variable +skmg#:#skmg_local_assignment_profiles#:#Allow Local Assignment of Global Profiles skmg#:#skmg_lp_triggers_level#:#Innescato dal completamento skmg#:#skmg_materials#:#Materiali. -skmg#:#skmg_materials_resources#:#Learning Materials###26 08 2024 new variable +skmg#:#skmg_materials_resources#:#Learning Materials###28 07 2023 new variable skmg#:#skmg_new_level#:#Nuovo Livello. -skmg#:#skmg_new_sktr#:#Nuova Relazione di Template di Competenza. +skmg#:#skmg_new_sktr#:#Nuova Relazione di Template di competenze. skmg#:#skmg_next_step#:#Prossima azione. skmg#:#skmg_no_nodes_selectable#:#Attualmente non ci sono competenze selezionabili. -skmg#:#skmg_no_skill_entries#:#You do not have any entries for this competence yet.###26 08 2024 new variable -skmg#:#skmg_no_skills_selected_info#:#You have not selected any competences yet. Click on the button "Add Competence" to select a competence and to see it here. You can add any number of competences.###29 07 2022 new variable +skmg#:#skmg_no_skill_entries#:#You do not have any entries for this competence yet.###31 03 2023 new variable +skmg#:#skmg_no_skills_selected_info#:#You have not selected or fulfilled any competences yet. Click on the "Add Competence"-button to select a competence. You can add any number of competences. If you fulfill competences by editing learning materials, they will be automatically listed here.###09 11 2022 new variable skmg#:#skmg_no_trigger#:#No Trigger. skmg#:#skmg_nr#:#Nr. skmg#:#skmg_number#:#Numero -skmg#:#skmg_open#:#Open###26 08 2024 new variable -skmg#:#skmg_open_all_assigned_profiles#:#Open All Assigned Competence Profiles###26 08 2024 new variable +skmg#:#skmg_open#:#Open###30 04 2024 new variable +skmg#:#skmg_open_all_assigned_profiles#:#Open All Assigned Competence Profiles###31 08 2022 new variable skmg#:#skmg_order#:#Ordine. skmg#:#skmg_order_nr#:#Numero d'ordine. -skmg#:#skmg_order_nr_info#:#Posizioni competenza nell'elenco delle competenze. -skmg#:#skmg_please_select_self_skill#:#Inizia una nuova auto valutazione. Competenza: -skmg#:#skmg_please_select_your_skill_levels#:#Per favore seleziona il tuo Livello di Competenza +skmg#:#skmg_order_nr_info#:#Posizioni competenze nell'elenco delle competenze. +skmg#:#skmg_please_select_self_skill#:#Inizia una nuova auto valutazione. competenze: +skmg#:#skmg_please_select_your_skill_levels#:#Per favore seleziona il tuo Livello di competenze skmg#:#skmg_previous_step#:#Azione precedente. skmg#:#skmg_profile#:#Profilo -skmg#:#skmg_really_delete_levels#:#Vuoi veramente cancellare il seguente Livello di Competenza? +skmg#:#skmg_really_delete_levels#:#Vuoi veramente cancellare il seguente Livello di competenze? skmg#:#skmg_really_remove_skills#:#Vuoi veramente Rimuovere le seguenti Competenze dalla tua lista? -skmg#:#skmg_recommended_learning_material_crs#:#Achieve your targets in this course###26 08 2024 new variable -skmg#:#skmg_recommended_learning_material_global#:#Achieve your targets###26 08 2024 new variable -skmg#:#skmg_recommended_learning_material_grp#:#Achieve your targets in this group###26 08 2024 new variable -skmg#:#skmg_recommended_learning_material_info#:#Select exactly one of the following learning materials. Please work through it to achieve the competence target.###29 07 2022 new variable -skmg#:#skmg_refresh_view#:#Refresh -skmg#:#skmg_remove#:#Remove###26 08 2024 new variable +skmg#:#skmg_recommended_learning_material_crs#:#Achieve your targets in this course###28 07 2023 new variable +skmg#:#skmg_recommended_learning_material_global#:#Achieve your targets###28 07 2023 new variable +skmg#:#skmg_recommended_learning_material_grp#:#Achieve your targets in this group###28 07 2023 new variable +skmg#:#skmg_recommended_learning_material_info#:#Select exactly one of the following learning materials. Please work through it to achieve the competence target.###31 03 2023 new variable +skmg#:#skmg_refresh_view#:#Ricarica +skmg#:#skmg_remove#:#Remove###30 04 2024 new variable skmg#:#skmg_remove_levels#:#Rimuovi livelli -skmg#:#skmg_remove_skill#:#Rimuovi la Competenza. -skmg#:#skmg_remove_trigger#:#Remuovi Trigger. +skmg#:#skmg_remove_skill#:#Rimuovi la competenze. +skmg#:#skmg_remove_trigger#:#Rimuovi Trigger. skmg#:#skmg_resources#:#Risorse skmg#:#skmg_save_order#:#Salva l'ordine. skmg#:#skmg_save_self_evaluation#:#Finisci l'auto valutazione. skmg#:#skmg_save_settings#:#Salva impostazioni -skmg#:#skmg_sctp#:#Categoria di Template di Competenza. -skmg#:#skmg_select_level#:#Select Competence Level###26 08 2024 new variable -skmg#:#skmg_select_skill#:#Clicca su una Competenza per aggiungerla alle tue Competenze personali. -skmg#:#skmg_select_skill_level_assign#:#Si prega di selezionare una competenza. +skmg#:#skmg_sctp#:#Categoria di Template di competenze. +skmg#:#skmg_select_level#:#Select Competence Level###30 04 2024 new variable +skmg#:#skmg_select_skill#:#Clicca su una competenze per aggiungerla alle tue Competenze personali. +skmg#:#skmg_select_skill_level_assign#:#Si prega di selezionare una competenze. skmg#:#skmg_select_trigger#:#Seleziona Trigger. skmg#:#skmg_selectable#:#Selezionabile -skmg#:#skmg_selectable_info#:#Permetti all'utente di selezionare questa Categoria come Competenza personale. +skmg#:#skmg_selectable_info#:#Permetti all'utente di selezionare questa Categoria come competenze personale. skmg#:#skmg_selected_items_have_been_copied#:#Gli oggetti selezionati sono stati copiati. skmg#:#skmg_selected_items_have_been_cut#:#Gli oggetti selezionati sono stati tagliati. skmg#:#skmg_selected_skills#:#Competenze selezionate skmg#:#skmg_self_evaluation#:#Auto-valutazione. -skmg#:#skmg_self_evaluation_byline#:#The self-evaluation will be excluded from target achievement. It is used for your guidance.###29 07 2022 new variable +skmg#:#skmg_self_evaluation_byline#:#The self-evaluation will be excluded from target achievement. It is used for your guidance.###31 03 2023 new variable skmg#:#skmg_self_evaluations#:#Auto-valutazioni. -skmg#:#skmg_set_as_lp_trigger#:#Completion Should Trigger Competence Record###26 08 2024 new variable -skmg#:#skmg_set_as_no_lp_trigger#:#Completion Should Not Trigger Competence Record###26 08 2024 new variable -skmg#:#skmg_set_as_no_suggested#:#Do not Show as Learning Material###26 08 2024 new variable -skmg#:#skmg_set_as_suggested#:#Show as Learning Material###26 08 2024 new variable +skmg#:#skmg_set_as_lp_trigger#:#Completion Should Trigger Competence Record###30 04 2024 new variable +skmg#:#skmg_set_as_no_lp_trigger#:#Completion Should Not Trigger Competence Record###30 04 2024 new variable +skmg#:#skmg_set_as_no_suggested#:#Do not Show as Learning Material###30 04 2024 new variable +skmg#:#skmg_set_as_suggested#:#Show as Learning Material###30 04 2024 new variable skmg#:#skmg_settings#:#Impostazionei di gestione delle Competenze. -skmg#:#skmg_show_all#:#Show All###29 07 2022 new variable -skmg#:#skmg_show_latest_entries#:#Show Latest Entries###29 07 2022 new variable -skmg#:#skmg_skill#:#Competenza. -skmg#:#skmg_skill_in_use#:#Questa competenza è utilizzata dall’utente o dal contenuto. Non tutti i comandi sono disponibili. Si prega di ricordare che qualsiasi modifica apportata avrà effetti sugli utilizzi attuali. -skmg#:#skmg_skill_level#:#Livello di Competenza. -skmg#:#skmg_skill_level_trigger#:#Trigger di Livello di Competenza. -skmg#:#skmg_skill_levels#:#Livelli di Competenza. +skmg#:#skmg_show_all#:#Show All###31 03 2023 new variable +skmg#:#skmg_show_latest_entries#:#Show Latest Entries###31 03 2023 new variable +skmg#:#skmg_skill#:#competenze. +skmg#:#skmg_skill_in_use#:#Questa competenze è utilizzata dall’utente o dal contenuto. Non tutti i comandi sono disponibili. Si prega di ricordare che qualsiasi modifica apportata avrà effetti sugli utilizzi attuali. +skmg#:#skmg_skill_level#:#Livello di competenze. +skmg#:#skmg_skill_level_trigger#:#Trigger di Livello di competenze. +skmg#:#skmg_skill_levels#:#Livelli di competenze. skmg#:#skmg_skill_management_deactivated#:#La gestione delle Competenze è attualmente disattivata. -skmg#:#skmg_skill_needs_impr_no_res#:#È necessario migliorare questa competenza. Sfortunatamente non sono attualmente disponibili risorse di apprendimento per fornire materiale didattico adeguato al livello di competenza di destinazione. -skmg#:#skmg_skill_needs_impr_res#:#È necessario migliorare questa competenza. Le seguenti risorse forniscono materiale didattico adeguato al livello di competenza di destinazione. -skmg#:#skmg_skill_needs_self_eval#:#Please conduct a self-evaluation first to see your competence target. Please click on "Actions" for that.###29 07 2022 new variable -skmg#:#skmg_skill_needs_self_eval_box#:#Please note that you have not conducted a self-evaluation for at least one competence in this profile. You will not see the competence target for the affected competences until a self-evaluation is done.###29 07 2022 new variable -skmg#:#skmg_skill_no_needs_impr#:#Il tuo livello di competenza è sufficiente per il profilo selezionato. -skmg#:#skmg_skill_no_needs_impr_info#:#You achieved the target for this competence.###29 07 2022 new variable -skmg#:#skmg_skill_overview#:#Overview###26 08 2024 new variable -skmg#:#skmg_skill_profile_records#:#Competence Records###26 08 2024 new variable +skmg#:#skmg_skill_needs_impr_no_res#:#È necessario migliorare questa competenze. Sfortunatamente non sono attualmente disponibili risorse di apprendimento per fornire materiale didattico adeguato al livello di competenze di destinazione. +skmg#:#skmg_skill_needs_impr_res#:#È necessario migliorare questa competenze. Le seguenti risorse forniscono materiale didattico adeguato al livello di competenze di destinazione. +skmg#:#skmg_skill_needs_self_eval#:#Please conduct a self-evaluation first to see your competence target.###09 11 2022 new variable +skmg#:#skmg_skill_needs_self_eval_box#:#Please note that you have not conducted a self-evaluation for at least one competence in this profile. You will not see the competence target for the affected competences until a self-evaluation is done.###09 11 2022 new variable +skmg#:#skmg_skill_no_needs_impr#:#Il tuo livello di competenze è sufficiente per il profilo selezionato. +skmg#:#skmg_skill_no_needs_impr_info#:#You achieved the target for this competence.###31 03 2023 new variable +skmg#:#skmg_skill_overview#:#Overview###28 07 2023 new variable +skmg#:#skmg_skill_profile_records#:#Competence Records###28 07 2023 new variable skmg#:#skmg_skill_profiles#:#Profili -skmg#:#skmg_skill_template#:#Template di Competenza. -skmg#:#skmg_skill_templates#:#Templates di Competenza. -skmg#:#skmg_skill_tree#:#Competence Tree###29 07 2022 new variable -skmg#:#skmg_skill_trees#:#Competence Trees###29 07 2022 new variable +skmg#:#skmg_skill_template#:#Template di competenze. +skmg#:#skmg_skill_templates#:#Templates di competenze. +skmg#:#skmg_skill_tree#:#Competence Tree###31 03 2023 new variable +skmg#:#skmg_skill_trees#:#Competence Trees###31 03 2023 new variable skmg#:#skmg_skills#:#Competenze. -skmg#:#skmg_sktr#:#Relazione di Templates di Competenza. +skmg#:#skmg_sktr#:#Relazione di Templates di competenze. skmg#:#skmg_status#:#Stato skmg#:#skmg_status_draft#:#Bozza (Offline) skmg#:#skmg_status_draft_info#:#La voce verrà nascosta. -skmg#:#skmg_status_outdated#:#Obsolete -skmg#:#skmg_status_outdated_info#:#Le voci non possono essere nuovamente selezionate dagli utenti come abilità personale o assegnate agli oggetti repository o profili di abilità. Tuttavia, le assegnazioni e i dati esistenti vengono ancora presentati. +skmg#:#skmg_status_outdated#:#Obsoleto +skmg#:#skmg_status_outdated_info#:#Le voci non possono essere nuovamente selezionate dagli utenti come competenze personale o assegnate agli oggetti repository o profili di competenze. Tuttavia, le assegnazioni e i dati esistenti vengono ancora presentati. skmg#:#skmg_status_publish#:#Pubblicato skmg#:#skmg_status_publish_info#:#La voce può essere utilizzata se anche tutti i principali sono pubblicati. Una volta che le voci sono utilizzate, lo stato non può più essere impostato per la bozza, e non possono nemmeno essere eliminate. skmg#:#skmg_suggested#:#Risorsa suggerita skmg#:#skmg_suggested_resources#:#Risorse suggerite skmg#:#skmg_sure_delete_self_evaluation#:#Vuoi veramente cancellare le seguenti auto valutazioni? skmg#:#skmg_target_level#:#Livello profilo di destinazione -skmg#:#skmg_target_levels#:#Competence Targets###29 07 2022 new variable +skmg#:#skmg_target_levels#:#Target Levels skmg#:#skmg_trigger#:#Trigger. skmg#:#skmg_type#:#Tipo -skmg#:#skmg_type_of_formation#:#Type of Formation +skmg#:#skmg_type_of_formation#:#Tipo di formazione skmg#:#skmg_update_order#:#Aggiorna l'Ordine. skmg#:#skmg_usage#:#Utilizzo skmg#:#skmg_usage_obj_objects#:#Oggetto/i @@ -15894,57 +15889,57 @@ skmg#:#skmg_usage_obj_profiles#:#Profilo/i skmg#:#skmg_usage_obj_users#:#Utente/i skmg#:#skmg_usage_type_info_gen#:#Utilizzo generico negli oggetti repository skmg#:#skmg_usage_type_info_mat#:#Gli utenti hanno assegnato materiale dal loro spazio di lavoro personale -skmg#:#skmg_usage_type_info_pers#:#Selezionato dagli utenti come abilità personale -skmg#:#skmg_usage_type_info_prof#:#Utilizzato nei profili di abilità +skmg#:#skmg_usage_type_info_pers#:#Selezionato dagli utenti come competenze personale +skmg#:#skmg_usage_type_info_prof#:#Utilizzato nei profili di competenze skmg#:#skmg_usage_type_info_res#:#Oggetti repository assegnati come risorsa suggerita skmg#:#skmg_usage_type_info_user#:#Assegnato agli utenti skmg#:#skmg_your_self_evaluation#:#La tua auto valutazione. -stus#:#stus_action_delete#:#Delete###29 10 2025 new variable -stus#:#stus_action_edit#:#Edit###29 10 2025 new variable -stus#:#stus_action_toggle#:#Activate/Deactivate###29 10 2025 new variable -stus#:#stus_active#:#Active###29 10 2025 new variable -stus#:#stus_alias#:#Shortlink###29 10 2025 new variable -stus#:#stus_alias_already_exists#:#The shortlink is already taken. Please choose another one.###29 10 2025 new variable -stus#:#stus_alias_invalid#:#The shortlink contains invalid characters. Permitted characters: A-Z, a-z, 0-9, - and _###29 10 2025 new variable -stus#:#stus_confirm_delete#:#Delete entries###29 10 2025 new variable -stus#:#stus_create_shortlink#:#Create shortlink###29 10 2025 new variable -stus#:#stus_delete#:#Delete###29 10 2025 new variable -stus#:#stus_delete_shortlink#:#Delete###29 10 2025 new variable -stus#:#stus_delete_shortlink_msg#:#Shortlink deleted###29 10 2025 new variable -stus#:#stus_index#:#Manage###29 10 2025 new variable -stus#:#stus_info#:#Information###29 10 2025 new variable -stus#:#stus_info_active#:#Inactive shortlinks are not redirected when called up.###29 10 2025 new variable -stus#:#stus_info_alias#:#May only contain the following characters: A-Z, a-z, 0-9, - und _###29 10 2025 new variable -stus#:#stus_info_target_ref_id#:#Target object###29 10 2025 new variable -stus#:#stus_order_saved#:#Order saved###29 10 2025 new variable -stus#:#stus_prefix#:#Prefix###29 10 2025 new variable -stus#:#stus_rbac_permissions#:#Permissions###29 10 2025 new variable -stus#:#stus_shortlink#:#Shortlink###29 10 2025 new variable -stus#:#stus_shortlinks#:#Shortlinks###29 10 2025 new variable -stus#:#stus_shortlinks_deleted#:#Shortlinks have been deleted###29 10 2025 new variable -stus#:#stus_shortlinks_toggled#:#Shortlinks have been deactivated/activated###29 10 2025 new variable -stus#:#stus_stus_stored_sucessfully#:#Shortlink successfully saved###29 10 2025 new variable -stus#:#stus_stus_toggle#:#Deactivate/Activate###29 10 2025 new variable -stus#:#stus_target_link#:#Target object###29 10 2025 new variable -stus#:#stus_target_ref_id#:#Target object###29 10 2025 new variable -stus#:#stus_target_ref_id_required#:#Select a target object.###29 10 2025 new variable -stus#:#stus_toggle#:#Deactivate/Activate###29 10 2025 new variable -stus#:#stus_toggle_shortlink#:#Change status###29 10 2025 new variable -stus#:#stus_toggle_shortlink_msg#:#Would you like to change the active status of the following entries?###29 10 2025 new variable -style#:#Style#:#Style###07 02 2020 new variable +stus#:#stus_action_delete#:#Delete###28 11 2025 new variable +stus#:#stus_action_edit#:#Edit###28 11 2025 new variable +stus#:#stus_action_toggle#:#Activate/Deactivate###28 11 2025 new variable +stus#:#stus_active#:#Active###28 11 2025 new variable +stus#:#stus_alias#:#Shortlink###28 11 2025 new variable +stus#:#stus_alias_already_exists#:#The shortlink is already taken. Please choose another one.###28 11 2025 new variable +stus#:#stus_alias_invalid#:#The shortlink contains invalid characters. Permitted characters: A-Z, a-z, 0-9, - and _###28 11 2025 new variable +stus#:#stus_confirm_delete#:#Delete entries###28 11 2025 new variable +stus#:#stus_create_shortlink#:#Create shortlink###28 11 2025 new variable +stus#:#stus_delete#:#Delete###28 11 2025 new variable +stus#:#stus_delete_shortlink#:#Delete###28 11 2025 new variable +stus#:#stus_delete_shortlink_msg#:#Shortlink deleted###28 11 2025 new variable +stus#:#stus_index#:#Manage###28 11 2025 new variable +stus#:#stus_info#:#Information###28 11 2025 new variable +stus#:#stus_info_active#:#Inactive shortlinks are not redirected when called up.###28 11 2025 new variable +stus#:#stus_info_alias#:#May only contain the following characters: A-Z, a-z, 0-9, - und _###28 11 2025 new variable +stus#:#stus_info_target_ref_id#:#Target object###28 11 2025 new variable +stus#:#stus_order_saved#:#Order saved###28 11 2025 new variable +stus#:#stus_prefix#:#Prefix###28 11 2025 new variable +stus#:#stus_rbac_permissions#:#Permissions###28 11 2025 new variable +stus#:#stus_shortlink#:#Shortlink###28 11 2025 new variable +stus#:#stus_shortlinks#:#Shortlinks###28 11 2025 new variable +stus#:#stus_shortlinks_deleted#:#Shortlinks have been deleted###28 11 2025 new variable +stus#:#stus_shortlinks_toggled#:#Shortlinks have been deactivated/activated###28 11 2025 new variable +stus#:#stus_stus_stored_sucessfully#:#Shortlink successfully saved###28 11 2025 new variable +stus#:#stus_stus_toggle#:#Deactivate/Activate###28 11 2025 new variable +stus#:#stus_target_link#:#Target object###28 11 2025 new variable +stus#:#stus_target_ref_id#:#Target object###28 11 2025 new variable +stus#:#stus_target_ref_id_required#:#Select a target object.###28 11 2025 new variable +stus#:#stus_toggle#:#Deactivate/Activate###28 11 2025 new variable +stus#:#stus_toggle_shortlink#:#Change status###28 11 2025 new variable +stus#:#stus_toggle_shortlink_msg#:#Would you like to change the active status of the following entries?###28 11 2025 new variable +style#:#Style#:# style#:#adapt_icon#:#Adatta icona style#:#adapt_icon_description#:#Adatta colori icona o cambia l’icona. style#:#adapt_icons#:#Adatta colori icona style#:#adapt_icons_description#:#Tutte le icone che si possono trovare nelle icone svg nella cartella delle immagini di interfaccia sono elencate qui. Se viene cambiato un colore, verrà cambiato in tutte le icone che hanno questo colore. -style#:#adapt_scss#:#Adapt scss###26 08 2024 new variable -style#:#adapt_scss_description#:#This is a direct representation of all scss variables from the settings files used in the selected skin. Variable names and descriptions are drawn directly from those files and are therefore only available in their original language. The selected style will be recompiled completely by updating/reseting the variables. Resetting variables will create a copy of the default delos style.###26 08 2024 new variable +style#:#adapt_scss#:#Adapt scss###30 04 2024 new variable +style#:#adapt_scss_description#:#This is a direct representation of all scss variables from the settings files used in the selected skin. Variable names and descriptions are drawn directly from those files and are therefore only available in their original language. The selected style will be recompiled completely by updating/reseting the variables. Resetting variables will create a copy of the default delos style.###30 04 2024 new variable style#:#add_substyle#:#Aggiungi sottotitolo style#:#add_system_style#:#Aggiungi stile di sistema style#:#assignment#:#Assegnazione style#:#blue_color#:#Colore blu style#:#blue_colors#:#Colori blu style#:#blue_colors_description#:#Descrizione colore blu -style#:#can_not_read_scss_file#:#Cannot read scss file. Path:###26 08 2024 new variable +style#:#can_not_read_scss_file#:#Cannot read scss file. Path:###30 04 2024 new variable style#:#cant_deactivate_default_style#:#Gli stili predefiniti non possono essere disattivati. style#:#cant_delete_activated_style#:#Gli stili attivati non possono essere eliminati. style#:#cant_delete_if_users_assigned#:#Gli stili non possono essere eliminati se gli utenti sono ancora assegnati. @@ -15956,11 +15951,11 @@ style#:#color_changed_to#:#a: style#:#color_reset#:#I colori delle icone sono state ripristinate. Importante: Bisogna notare che il caching potrebbe prevenire le tue modifiche dall’essere mostrate. Potrebbe essere necessario cancellare la cache nel browser. style#:#color_update#:#I colori delle icone sono state aggiornate. Importante: Bisogna notare che il caching potrebbe prevenire le tue modifiche dall’essere mostrate. Potrebbe essere necessario cancellare la cache nel browser. style#:#default_style_set_to#:#Lo stile di sistema predefinito è stato impostato per: -style#:#dir_changed_to#:#The directory has been moved to:###26 08 2024 new variable +style#:#dir_changed_to#:#The directory has been moved to:###30 04 2024 new variable style#:#dir_copied_from#:#Il seguente elenco è stato copiato da: -style#:#dir_created#:#The following directory has been created:###26 08 2024 new variable +style#:#dir_created#:#The following directory has been created:###30 04 2024 new variable style#:#dir_deleted#:#Il seguente elenco dei dati è stato eliminato: -style#:#dir_preserved_backup#:#Preserved Backup folder:###26 08 2024 new variable +style#:#dir_preserved_backup#:#Preserved Backup folder:###30 04 2024 new variable style#:#dir_preserved_linked#:#Link mantenuto: style#:#directory_created#:#Elenco copiato: style#:#documentation#:#Documentazione @@ -15982,23 +15977,23 @@ style#:#icons#:#Icone style#:#icons_gallery#:#Galleria icone style#:#image_dir#:#Elenco immagine style#:#image_dir_description#:#Cartella per memorizzare le immagini (per lo più icone) dell’interfaccia. Questa directory può essere condivisa con altri stili e stili secondari dell’interfaccia. -style#:#in_main_scss_file#:#is not imported inside the system styles main scss file:###26 08 2024 new variable -style#:#invalid_scss_path#:#The provided sass/scss path is either not valid or the webserver does not have the proper permission to read and execute sass/scss. Sass/scss (or the file linked to by the file pointed to by the scss path) has to be readable and executable by your webserver.###26 08 2024 new variable +style#:#in_main_scss_file#:#is not imported inside the system styles main scss file:###30 04 2024 new variable +style#:#invalid_scss_path#:#The provided sass/scss path is not valid or the webserver does not have the proper permission to read and execute sass/scss. Sass/scss (or the file linked to by the file pointed to by the scss path) has to be readabele and executable by your webserver.###30 04 2024 new variable style#:#ks_documentation_of_style#:#Kitchen Sink documentazione di stile: style#:#ks_documentation_of_substyle#:#Kitchen Sink documentazione dello stile secondario: -style#:#main_scss_created#:#Main SCSS has been created:###26 08 2024 new variable +style#:#main_scss_created#:#Main SCSS has been created:###30 04 2024 new variable style#:#manage_system_styles#:#Gestisci stili sistema style#:#msg_sub_style_created#:#Lo stile secondario è stato creato. style#:#msg_sys_style_created#:#Il nuovo stile di sistema è stato creato con successo. style#:#msg_sys_style_update#:#Gli stili del sistema sono stati aggiornati -style#:#no_scss_path_set#:#No Scss Path set###26 08 2024 new variable +style#:#no_scss_path_set#:#No Scss Path set###30 04 2024 new variable style#:#no_style_selected#:#Nessun stile secondario è stato selezionato. style#:#of_parent#:#del principale: style#:#open_documentation#:#Apri documentazione style#:#parent#:#Stile principale style#:#personal#:#Personale style#:#personal_style_set_to#:#Il tuo stile personale è stato impostato per: -style#:#provided_scss_path#:#Provided scss path:###26 08 2024 new variable +style#:#provided_scss_path#:#Provided scss path:###30 04 2024 new variable style#:#red_color#:#Colore rosso style#:#red_colors#:#Colori rosso style#:#red_colors_description#:#Descrizione colore rosso @@ -16007,17 +16002,17 @@ style#:#remove_assignment#:#Rimuovi assegnazione style#:#reset_icons#:#Reimposta icone style#:#reset_variables#:#Ripristina variabili style#:#scope#:#Ambito -style#:#scss#:#Scss###26 08 2024 new variable -style#:#scss_can_not_be_modified#:#Scss cannot be modified###26 08 2024 new variable -style#:#scss_compile_failed#:#Something in the compilation of the scss file went wrong. Is scss installed and the path set correctly in ILIAS setup? Original error:###26 08 2024 new variable -style#:#scss_file_reset#:#The scss variables have been reset. Important: Note that caching might prevent your changes from being shown. You might need to clear your browsers cache.###26 08 2024 new variable -style#:#scss_file_updated#:#The scss variables have been updated. Important: Note that caching might prevent your changes from being shown. You might need to clear your browsers cache.###26 08 2024 new variable -style#:#scss_folder_reset#:#Scss folder reset###26 08 2024 new variable -style#:#scss_folder_updated#:#Scss folder has been updated###26 08 2024 new variable -style#:#scss_scss_installation_detected#:#Scss/sass installation detected at:###26 08 2024 new variable -style#:#scss_variable_empty#:#This variable was empty. The default from your settings files has been set. Please check if this is correct before compiling.###26 08 2024 new variable -style#:#scss_variables_empty_might_have_changed#:#There are empty variables in your form. You might have changed your settings files since loading this form. The defaults from the settings files have been set for the empty fields. Please check those marked empty fields before compiling and saving the values to your settings files.###26 08 2024 new variable -style#:#scss_variables_file_not_included#:#The scss variables files:###26 08 2024 new variable +style#:#scss#:#Scss###30 04 2024 new variable +style#:#scss_can_not_be_modified#:#Scss cannot be modified###30 04 2024 new variable +style#:#scss_compile_failed#:#Something in the compilation of the scss file went wrong. Is scss installed and the path set correctly in ILIAS setup? Original error:###30 04 2024 new variable +style#:#scss_file_reset#:#The scss variables have been reset. Important: Note that caching might prevent your changes from being shown. You might need to clear your browsers cache.###30 04 2024 new variable +style#:#scss_file_updated#:#The scss variables have been updated. Important: Note that caching might prevent your changes from being shown. You might need to clear your browsers cache.###30 04 2024 new variable +style#:#scss_folder_reset#:#Scss folder reset###30 04 2024 new variable +style#:#scss_folder_updated#:#Scss folder has been updated###30 04 2024 new variable +style#:#scss_scss_installation_detected#:#Scss/sass installation detected at:###30 04 2024 new variable +style#:#scss_variable_empty#:#This variable was empty. The default from your settings files has been set. Please check if this is correct before compiling.###30 04 2024 new variable +style#:#scss_variables_empty_might_have_changed#:#There are empty variables in your form. You might have changed your settings files since loading this form. The defaults from the settings files have been set for the empty fields. Please check those marked empty fields before compiling and saving the values to your settings files.###30 04 2024 new variable +style#:#scss_variables_file_not_included#:#The scss variables files:###30 04 2024 new variable style#:#select_icon#:#Seleziona icona style#:#settings_of_style#:#Gestisci stile style#:#settings_of_substyle#:#Gestisci sottotitolo @@ -16028,18 +16023,18 @@ style#:#skin_id_description#:#Le interfacce sono contenitori per stili e stili s style#:#skin_id_exists#:#Esiste già un’interfaccia con questo ID. style#:#skin_name#:#Nome interfaccia style#:#skin_name_description#:#Il nome dell’interfaccia può essere utilizzato per descrivere l’area di applicazione dell’interfaccia in forma leggibile. Apparirà in tutti gli elementi dell’interfaccia utente permettendo la selezione delle interfacce. -style#:#skin_version#:#Versione interfaccia -style#:#skin_version_description#:#La versione interfaccia è utilizzata per memorizzare nuovamente lo stile dopo le modifiche. Viene aggiornato automaticamente. +style#:#skin_version#:#Versione Interfaccia +style#:#skin_version_description#:#La versione interfaccia è utilizzata per memorizzare nuovamente lo stile dopo le modifiche. Viene aggiornata automaticamente. style#:#sound_dir#:#Elenco suoni style#:#sound_dir_description#:#Cartella per memorizzare i suoni dell’interfaccia. Questa directory può essere condivisa con altri stili e stili secondari dell’interfaccia. style#:#sty_acopy#:#Copia. -style#:#sty_add_assignment#:#Add Assignment. +style#:#sty_add_assignment#:#Aggiungi assegnazione. style#:#sty_add_characteristic#:#Aggiungi Classe di Stile. style#:#sty_add_color#:#Aggiungi Colore. style#:#sty_add_content_style#:#Aggiungi Stile di Contenuto. style#:#sty_add_image#:#Aggiungi Immagine style#:#sty_add_media_query#:#Aggiungi Media Query -style#:#sty_add_media_query_info#:#E.g. "only screen and (max-width: 600px)" for browser window smaller than 600px or "print" for printing devices.###07 02 2020 new variable +style#:#sty_add_media_query_info#:#Per esempio. "solo schermo e (larghezza massima: 600 px)" per la finestra del browser inferiore a 600 px o "stampa" per i dispositivi di stampa. style#:#sty_add_pgl#:#Aggiungi Layout di Pagina style#:#sty_add_template#:#Aggiungi Template style#:#sty_added_characteristic#:#Classe di Stile Aggiunta. @@ -16054,7 +16049,7 @@ style#:#sty_background_position#:#Posizione Sfondo style#:#sty_background_repeat#:#Ripeti Sfondo style#:#sty_base_color#:#Colore di base style#:#sty_based_on#:#Basato su -style#:#sty_bg_img_info#:#To add images to the dropdown selection please upload them in the "Images" section of the style first.###29 07 2022 new variable +style#:#sty_bg_img_info#:#To add images to the dropdown selection please upload them in the "Images" section of the style first.###31 03 2023 new variable style#:#sty_border#:#Bordo style#:#sty_border_color#:#Colore Bordo style#:#sty_border_style#:#Stile Bordo @@ -16064,15 +16059,15 @@ style#:#sty_ca_cntr_class#:#Sequenza contenitore style#:#sty_ca_icntr_class#:#Sequenza contenitore di oggetti style#:#sty_ca_icont_class#:#Sequenza contenuto della voce style#:#sty_ca_ihead_class#:#Sequenza intestazione della voce -style#:#sty_cannot_be_copied#:#The following style types cannot be copied###29 10 2025 new variable +style#:#sty_cannot_be_copied#:#The following style types cannot be copied###20 05 2025 new variable style#:#sty_caption#:#Didascalia style#:#sty_caption_class#:#Didascalia style#:#sty_carousel_templates#:#Modelli di sequenza -style#:#sty_cat_assignments#:#Stile/Categoria Assignments -style#:#sty_change_user_assignment#:#Change User Assignment###29 10 2025 new variable +style#:#sty_cat_assignments#:#Stile/Categoria Compiti +style#:#sty_change_user_assignment#:#Change User Assignment###28 11 2025 new variable style#:#sty_characteristic_already_exists#:#Una classe di stile con questo titolo esiste già in questo stile. -style#:#sty_class#:#Style Class###29 07 2022 new variable -style#:#sty_class_name#:#Class Name###29 07 2022 new variable +style#:#sty_class#:#Style Class###31 03 2023 new variable +style#:#sty_class_name#:#Class Name###31 03 2023 new variable style#:#sty_clear#:#Pulisci style#:#sty_col_foot_class#:#pie' di pagina della Colonna. style#:#sty_col_head_class#:#Intestazione Colonna @@ -16081,7 +16076,7 @@ style#:#sty_color_already_exists#:#Un colore con questo nome esiste già in ques style#:#sty_color_code#:#Codice Colore style#:#sty_color_flavors#:#Tipi di Colore style#:#sty_color_info#:#I Colori Predefiniti permettono un facile riutilizzo per diverse applicazioni. Fai riferimento ad un colore predefinito utilizzando il suo nome standard "!" per ogni attributo colore presente nella Classe di Stile. Per utilizzare un attributo, aggiungere il valore tra parentesi dopo nome del colore, ad esempio: MyColor (20). -style#:#sty_color_name#:#Nome del Colore. +style#:#sty_color_name#:#Nome del Colore style#:#sty_colors#:#Colori style#:#sty_commands#:#Comandi style#:#sty_confirm_char_deletion#:#Sei sicuro di voler cancellare le seguenti classi di stile? @@ -16091,20 +16086,20 @@ style#:#sty_confirm_del_ind_styles_desc#:#Tutte le unità didattiche con stili i style#:#sty_confirm_template_deletion#:#Conferma Cancellazione del Template style#:#sty_copied_please_select_target#:#Le Classi di Stile sono state copiate. Per favore apri lo Stile di destinazionee clicca su "Incolla Classi di Stile". style#:#sty_copy_other_stylesheet#:#Copia Stile dalle Risorse Locali -style#:#sty_copy_other_system_style#:#Clone an existing system style. -style#:#sty_copy_to#:#to:###29 07 2022 new variable +style#:#sty_copy_other_system_style#:#Clonare uno stile di sistema esistente. +style#:#sty_copy_to#:#to: style#:#sty_create_ind_style#:#Crea Stile Personale -style#:#sty_create_new_class#:#Create new style class###29 07 2022 new variable +style#:#sty_create_new_class#:#Create new style class###31 03 2023 new variable style#:#sty_create_new_stylesheet#:#Crea Nuovo Stile -style#:#sty_create_new_system_style#:#Create a new system style. -style#:#sty_create_new_system_sub_style#:#Create a new system sub style. +style#:#sty_create_new_system_style#:#Crea un nuovo stile di sistema. +style#:#sty_create_new_system_sub_style#:#Crea un nuovo stile secondario di sistema. style#:#sty_create_pgl#:#Crea Layout di Pagina style#:#sty_cursor#:#Cursore style#:#sty_custom#:#Personalizza style#:#sty_custom_par#:#Parametri personalizzati -style#:#sty_custom_par_info#:#Add custom CSS parameters using format "parameter: value". +style#:#sty_custom_par_info#:#Aggiungi parametri CSS personalizzati usando il formato "parametro: valore". style#:#sty_default#:#Impostazione predefinita -style#:#sty_default_style#:#Stile di Default +style#:#sty_default_style#:#Stile Predefinito style#:#sty_del_template#:#Cancella Templates e Classi style#:#sty_del_template_keep_classes#:#Cancella ed Archivia le Classi di Stile style#:#sty_delete_other_selected#:#Continua @@ -16124,23 +16119,23 @@ style#:#sty_font_weight#:#Spessore Font style#:#sty_from#:#Da style#:#sty_generate_template#:#Genera Template style#:#sty_glo_char#:#Glossario -style#:#sty_ha_cntr_class#:#Hor. Contenitore a fisarmonica -style#:#sty_ha_icntr_class#:#Hor. Contenitore di oggetti a fisarmonica -style#:#sty_ha_icont_class#:#Hor. Contenuto di oggetti a fisarmonica +style#:#sty_ha_cntr_class#:#Orizzontale Contenitore a fisarmonica +style#:#sty_ha_icntr_class#:#Orizzontale Contenitore di oggetti a fisarmonica +style#:#sty_ha_icont_class#:#Orizzontale Contenuto di oggetti a fisarmonica style#:#sty_ha_ihcap_class#:#Orizzontale Didascalia a fisarmonica -style#:#sty_ha_ihead_class#:#Hor. Testata di Oggetto a fisarmonica +style#:#sty_ha_ihead_class#:#Orizzontale Testata di Oggetto a fisarmonica style#:#sty_ha_iheada_class#:#Orizzontale Intestazione a fisarmonica (attiva) -style#:#sty_haccordion_templates#:#Hor. Template a fisarmonica +style#:#sty_haccordion_templates#:#Orizzontale Template a fisarmonica style#:#sty_height#:#Altezza style#:#sty_hide#:#Nascondi style#:#sty_horizontal#:#Orizzontale style#:#sty_if_style_class_already_exists#:#Se la Classe di Stile già esiste... style#:#sty_image_file#:#File Immagine style#:#sty_images#:#Immagini -style#:#sty_import_page_layout#:#Importa il lay out di pagina. +style#:#sty_import_page_layout#:#Importa il layout di pagina. style#:#sty_import_stylesheet#:#Importa Stile -style#:#sty_import_system_style#:#Import an existing system style as zip. -style#:#sty_imported_layout#:#Imported Page Layout###29 10 2025 new variable +style#:#sty_import_system_style#:#Importa uno stile di sistema esistente come zip. +style#:#sty_imported_layout#:#Imported Page Layout###28 11 2025 new variable style#:#sty_individual_styles#:#Stili Personali style#:#sty_keep_existing#:#Mantieni l'esistente style#:#sty_left#:#Sinistra @@ -16156,41 +16151,41 @@ style#:#sty_lightness_header_text#:#Luminosità del Testo del Titolo style#:#sty_line_height#:#Altezza Righe style#:#sty_link_char#:#Collegamento style#:#sty_list_char#:#Lista -style#:#sty_list_style_position#:#List Style Position###26 08 2024 new variable -style#:#sty_list_style_type#:#List Style Type###26 08 2024 new variable -style#:#sty_make_global_default#:#Assegna come Default Globale -style#:#sty_make_global_fixed#:#Assegna come Fisso Globale +style#:#sty_list_style_position#:#List Style Position###30 04 2024 new variable +style#:#sty_list_style_type#:#List Style Type###30 04 2024 new variable +style#:#sty_make_global_default#:#Imposta come stile predefinito +style#:#sty_make_global_fixed#:#Forza questo stile su tutti gli oggetti style#:#sty_margin#:#Margine -style#:#sty_margin_and_padding#:#Margine e Padding +style#:#sty_margin_and_padding#:#Margine e Rientro style#:#sty_media_char#:#Supporti style#:#sty_media_queries#:#Media Query -style#:#sty_media_query_info#:#A separete CSS block is added for each media query after the default (no special media query) block. +style#:#sty_media_query_info#:#Un blocco CSS separato viene aggiunto per ogni media query dopo il blocco predefinito (nessuna media query speciale). style#:#sty_min_height#:#Altezza Minima style#:#sty_move_lm_styles#:#Cambia lo Stile dell'Unità Didattica style#:#sty_move_style#:#Cambia Stile style#:#sty_move_user_styles#:#Cambia Stile degli Utenti -style#:#sty_move_user_styles_saved#:#The assignment of the users assigned to skind-id %s has been changed to skin-id %s.###29 10 2025 new variable +style#:#sty_move_user_styles_saved#:#The assignment of the users assigned to skind-id %s has been changed to skin-id %s.###28 11 2025 new variable style#:#sty_msg_characteristic_must_only_include#:#Il titolo della Classe di Stile deve includere i seguenti caratteri: style#:#sty_msg_color_must_only_include#:#Il nome del Colore deve contenere i seguenti caratteri: style#:#sty_msg_input_must_be_numeric#:#Il Valore inserito deve essere un numero style#:#sty_name#:#Nome style#:#sty_nr_learning_modules#:#Numero di Unità Didattiche -style#:#sty_nr_objects#:#Number of Objects###29 10 2025 new variable +style#:#sty_nr_objects#:#Number of Objects###23 09 2025 new variable style#:#sty_odd_col_class#:#Colonne Dispari style#:#sty_odd_row_class#:#Righe Dispari -style#:#sty_ol#:#Ordered List###26 08 2024 new variable +style#:#sty_ol#:#Ordered List###30 04 2024 new variable style#:#sty_opacity#:#Opacità style#:#sty_opt_saved#:#Opzioni salvate style#:#sty_order#:#Ordine -style#:#sty_outdated#:#Outdated###29 07 2022 new variable +style#:#sty_outdated#:#Outdated###31 03 2023 new variable style#:#sty_overflow#:#Overflow style#:#sty_overwrite#:#Sovrascrivi -style#:#sty_overwrite_existing_class#:#Overwrite existing style class###29 07 2022 new variable +style#:#sty_overwrite_existing_class#:#Overwrite existing style class###31 03 2023 new variable style#:#sty_padding#:#Spaziatura interna style#:#sty_page_char#:#Pagina -style#:#sty_parameters#:#Parameters###29 07 2022 new variable +style#:#sty_parameters#:#Parameters###31 03 2023 new variable style#:#sty_paste_characteristics#:#Incolla le Classi di Stile -style#:#sty_paste_chars#:#Paste Classes###29 07 2022 new variable +style#:#sty_paste_chars#:#Paste Classes###31 03 2023 new variable style#:#sty_paste_style_classes#:#Incolla le Classi di Stile style#:#sty_position#:#Posizione style#:#sty_positioning#:#Posizionamento @@ -16199,24 +16194,24 @@ style#:#sty_query#:#Query style#:#sty_question_char#:#Domanda style#:#sty_remove_global_default_state#:#Rimuovi lo stato di "default" globale style#:#sty_remove_global_fixed_state#:#Rimuovi lo stato di "fisso" globale -style#:#sty_remove_outdated#:#Remove Outdated Status###29 07 2022 new variable -style#:#sty_resize#:#Resize###29 07 2022 new variable -style#:#sty_resize_image#:#Resize Image###29 07 2022 new variable +style#:#sty_remove_outdated#:#Remove Outdated Status###31 03 2023 new variable +style#:#sty_resize#:#Resize###31 03 2023 new variable +style#:#sty_resize_image#:#Resize Image###31 03 2023 new variable style#:#sty_right#:#Destra style#:#sty_row_foot_class#:#Pie' di pagina della Riga style#:#sty_row_head_class#:#Intestazione Riga style#:#sty_rte_char#:#RTE SCORM style#:#sty_save_active_styles#:#Salva Stili Attivi -style#:#sty_save_hide_order_status#:#Save Order and Hidden Status###29 07 2022 new variable +style#:#sty_save_hide_order_status#:#Save Order and Hidden Status###31 03 2023 new variable style#:#sty_save_hide_status#:#Salva Status Nascosti style#:#sty_save_order#:#Salva ordine -style#:#sty_save_order_status#:#Save Order###29 07 2022 new variable +style#:#sty_save_order_status#:#Save Order###31 03 2023 new variable style#:#sty_sco_char#:#SCO & Obiettivo style#:#sty_scope#:#Obiettivo style#:#sty_section_char#:#Sezione -style#:#sty_set_outdated#:#Set Outdated###29 07 2022 new variable +style#:#sty_set_outdated#:#Set Outdated###31 03 2023 new variable style#:#sty_set_scope#:#Imposta Obiettivo -style#:#sty_some_styles_obligatory_delete_rest#:#The following style classes are obligatory and cannot be deleted. Do you want to continue and delete the remaining selected style classes? +style#:#sty_some_styles_obligatory_delete_rest#:#Le seguenti classi di stile sono obbligatorie e non possono essere eliminate. Vuoi continuare ed eliminare le restanti classi di stile selezionate? style#:#sty_source#:#Sorgente style#:#sty_special#:#Speciale style#:#sty_style_chars#:#Classi di Stili @@ -16246,7 +16241,7 @@ style#:#sty_text_decoration#:#Decorazione Testo style#:#sty_text_indent#:#Indentazione Testo style#:#sty_text_inline_char#:#Testo (Carattere) style#:#sty_text_transform#:#Trasforma Testo -style#:#sty_titles#:#Titles###29 07 2022 new variable +style#:#sty_titles#:#Titles###31 03 2023 new variable style#:#sty_to#:#A style#:#sty_top#:#Superiore style#:#sty_top_bottom_padding#:#Margine Interno delle Celle (Superiore/Inferiore) @@ -16257,9 +16252,9 @@ style#:#sty_type_ca_cntr#:#Sequenza contenitore style#:#sty_type_ca_icntr#:#Sequenza contenitore di oggetti style#:#sty_type_ca_icont#:#Sequenza contenuto della voce style#:#sty_type_ca_ihead#:#Sequenza intestazione della voce -style#:#sty_type_code_block#:#Code (Block)###07 02 2020 new variable -style#:#sty_type_code_inline#:#Code (Inline)###07 02 2020 new variable -style#:#sty_type_em#:#Emphasised###26 08 2024 new variable +style#:#sty_type_code_block#:#Codice (blocco) +style#:#sty_type_code_inline#:#Codice (in linea) +style#:#sty_type_em#:#Emphasised###30 04 2024 new variable style#:#sty_type_flist#:#Lista di File style#:#sty_type_flist_a#:#Link Elemento Lista di File style#:#sty_type_flist_cont#:#Contenitore di Lista di File @@ -16270,11 +16265,11 @@ style#:#sty_type_glo_overlay#:#Glossario sovrapposizione style#:#sty_type_glo_ovtitle#:#Termine/Titolo (Sovrapposizione) style#:#sty_type_glo_ovuglink#:#Link unità glossario style#:#sty_type_glo_ovuglistlink#:#Elenco link unità glossario -style#:#sty_type_ha_cntr#:#Hor. Contenitore a fisarmonica -style#:#sty_type_ha_icntr#:#Hor. Contenitore di oggetti, a fisarmonica. -style#:#sty_type_ha_icont#:#Hor. Contenuto di oggetto, a fisarmonica +style#:#sty_type_ha_cntr#:#Orizzontale Contenitore a fisarmonica +style#:#sty_type_ha_icntr#:#Orizzontale Contenitore di oggetti, a fisarmonica. +style#:#sty_type_ha_icont#:#Orizzontale Contenuto di oggetto, a fisarmonica style#:#sty_type_ha_ihcap#:#Orizzontale Didascalia a fisarmonica -style#:#sty_type_ha_ihead#:#Hor. Testata di oggetto, a fisarmonica +style#:#sty_type_ha_ihead#:#Orizzontale Testata di oggetto, a fisarmonica style#:#sty_type_ha_iheada#:#Orizzontale Intestazione a fisarmonica (attiva) style#:#sty_type_heading1#:#Intestazione 1 style#:#sty_type_heading2#:#Intestazione 2 @@ -16331,7 +16326,7 @@ style#:#sty_type_sco_keyw#:#Parole chiave SCO style#:#sty_type_sco_obj#:#SCO Obiettivo style#:#sty_type_sco_title#:#Titolo SCO style#:#sty_type_section#:#Sezione -style#:#sty_type_strong#:#Strong###26 08 2024 new variable +style#:#sty_type_strong#:#Strong###30 04 2024 new variable style#:#sty_type_sub#:#Indice inferiore style#:#sty_type_sup#:#Indice superiore style#:#sty_type_table#:#Tabella @@ -16344,7 +16339,7 @@ style#:#sty_type_va_icont#:#Verticale Contenuto dell'elemento della fisarmonica style#:#sty_type_va_ihcap#:#Verticale Didascalia a fisarmonica style#:#sty_type_va_ihead#:#Verticale Intestazione dell'elemento della fisarmonica style#:#sty_type_va_iheada#:#Verticale Intestazione a fisarmonica (attiva) -style#:#sty_ul#:#Unordered List###26 08 2024 new variable +style#:#sty_ul#:#Unordered List###30 04 2024 new variable style#:#sty_va_cntr_class#:#Verticale Contenitore fisarmonica style#:#sty_va_icntr_class#:#Verticale Contenitore di oggetti per fisarmonica style#:#sty_va_icont_class#:#Verticale Contenuto dell'elemento della fisarmonica @@ -16358,7 +16353,7 @@ style#:#sty_white_space#:#Spazio Vuoto style#:#sty_width#:#Larghezza style#:#sty_width_height#:#Larghezza x Altezza style#:#sty_word_spacing#:#Spaziatura delle Parole -style#:#style#:#Stile +style#:#style#:#Style###09 03 2022 new variable style#:#style_assignments_deleted#:#Le assegnazioni di stile del seguente stile secondario è stato eliminato: style#:#style_copied#:#Lo stile è stato copiato con successo. style#:#style_current_style#:#Stile corrente. @@ -16371,11 +16366,11 @@ style#:#style_imported#:#Lo stile è stato importato con successo in: style#:#style_name#:#Nome stile style#:#style_name_description#:#Il nome dello stile può essere utilizzato per descrivere l’area di applicazione dello stile in forma leggibile. Apparirà in tutti gli elementi dell’interfaccia utente permettendo la selezione degli stili. style#:#style_not_deleted#:#Lo stile non è stato eliminato per le seguenti ragioni: -style#:#style_page_layout_module_learning_module#:#ILIAS Learning Module###07 02 2020 new variable -style#:#style_page_layout_module_portfolio#:#Portfolio. -style#:#style_page_layout_module_scorm#:#Scorm. -style#:#style_support_reuse#:#Re-Use###29 07 2022 new variable -style#:#style_support_reuse_info#:#Allow sub-objects of the current container to re-use this content style.###29 07 2022 new variable +style#:#style_page_layout_module_learning_module#:#Modulo di apprendimento ILIAS +style#:#style_page_layout_module_portfolio#:#Portfolio +style#:#style_page_layout_module_scorm#:#Scorm +style#:#style_support_reuse#:#Re-Use###31 03 2023 new variable +style#:#style_support_reuse_info#:#Allow sub-objects of the current container to re-use this content style.###31 03 2023 new variable style#:#styles_not_deleted#:#Gli stili non sono stati eliminati per le seguenti ragioni: style#:#sub_style#:#Sottotitolo style#:#sub_style_id#:#ID sottotitolo @@ -16392,7 +16387,7 @@ style#:#update_icon#:#Aggiorna icona style#:#update_variables#:#Aggiorna variabili style#:#usages#:#Utilizzi: style#:#used_colors#:#Colori utilizzati: -style#:#zip_export_failed#:#L’esportazione ZIP è fallita. Sono avvenuti i seguenti errori: +style#:#zip_export_failed#:#L’esportazione ZIP è fallita. Si sono verificati i seguenti errori: survey#:#SurveyMatrixQuestion#:#Matrice di Domande survey#:#SurveyMetricQuestion#:#Domanda Metrica survey#:#SurveyMultipleChoiceQuestion#:#Domanda a scelta multipla (Risposta Multipla) @@ -16419,7 +16414,7 @@ survey#:#combobox#:#Menu a tendina survey#:#concatenation#:#Concatenazione survey#:#confirm_delete_all_user_data#:#Sei sicuro di voler eliminare tutti i dati del sondaggio? survey#:#confirm_delete_single_user_data#:#Sei sicuro di voler cancellare i dati di sondaggio degli utenti selezionati? -survey#:#confirm_remove_heading#:#Sei sicuro di voler eliminare l& +survey#:#confirm_remove_heading#:#Vuoi rimuovere l'intestazione? survey#:#confirm_sync_questions#:#La domanda che hai cambiato è la copia di una che è stata creata per essere usata in un sondaggio ancora attivo. Vuoi modificare anche la domanda originale? survey#:#conjunction_and#:#se ogni condizioni è stata soddisfatta survey#:#conjunction_and_title#:#Soddisfa ciascuna delle seguenti condizioni @@ -16428,8 +16423,8 @@ survey#:#conjunction_or_title#:#Soddisfa una delle seguenti condizioni survey#:#constraint_add#:#Aggiungi precondizioni survey#:#constraint_fulfilled#:#Mostra pagina survey#:#constraints#:#Vincoli -survey#:#constraints_first_question_description#:#La prima entit& -survey#:#constraints_introduction#:#Per tutte le entit& +survey#:#constraints_first_question_description#:#La prima entità non può avere alcun routing perché non ci sono domande precedenti. +survey#:#constraints_introduction#:#È possibile aggiungere una regola di routing a una singola domanda o un blocco di domande con più domande. A seconda della risposta specifica data a una domanda precedente, i partecipanti ricevono una domanda successiva definita. Pertanto, le domande irrilevanti per un partecipante non verranno poste e il sondaggio diventa più breve o più specifico a seconda delle risposte fornite in precedenza. Non è possibile impostare regole di routing per la prima domanda o il blocco di domande in un sondaggio. survey#:#constraints_list_of_entities#:#Disponibili sondaggi per precondizioni survey#:#constraints_no_nonessay_available#:#Non ci sono domande (o sono disponibili solo domande di autovalutazione) per il calcolo delle precondizioni (le domande di autovalutazione non sono valide per il calcolo delle precondizioni) survey#:#constraints_no_questions_or_questionblocks_selected#:#Seleziona almeno una domanda o un blocco di domande! @@ -16446,8 +16441,8 @@ survey#:#dc_fair#:#giusto survey#:#dc_false#:#sbagliato survey#:#dc_good#:#buono survey#:#dc_manytimes#:#molte volte -survey#:#dc_morenegative#:#pi& -survey#:#dc_morepositive#:#pi& +survey#:#dc_morenegative#:#più negativo +survey#:#dc_morepositive#:#più positivo survey#:#dc_mostcertainly#:#molto sicuro survey#:#dc_mostcertainlynot#:#molto insicuro survey#:#dc_must#:#deve @@ -16476,16 +16471,16 @@ survey#:#default_codes_mail_subject#:#Il tuo codice d'accesso è %s survey#:#define_questionblock#:#Definisci un blocco di domande survey#:#delete_saved_message#:#Cancella il testo del messaggio survey#:#display_all_available#:#Mostra -survey#:#dont_use_questionpool#:#Don't insert the questions in a questionpool (only available in this survey) +survey#:#dont_use_questionpool#:#Non inserire le domande in un pool di domande (disponibile solo in questo sondaggio) survey#:#duplicate#:#Duplica -survey#:#edit_heading#:#Modifica l& +survey#:#edit_heading#:#Modifica intestazione survey#:#end_date#:#Termine ultimo -survey#:#end_date_reached#:#Non puoi iniziare il sondaggio. La data di scadenza & +survey#:#end_date_reached#:#Non è possibile avviare il sondaggio. La data di fine è stata raggiunta! survey#:#enter_anonymous_id#:#Codice di accesso al sondaggio survey#:#enter_valid_number_of_codes#:#Per favore indica un numero valido per poter generare i codici di accesso al sondaggio! survey#:#err_external_rcp_no_email#:#I dati importati devono contenere almeno un campo 'email' -survey#:#err_external_rcp_no_email_column#:#The import data must at least contain a column 'email' with the title 'email' in the first row and the email addresses in the following rows -survey#:#err_maxvaluegeminvalue#:#Il valore massimo deve essere maggiore del valore minimo e minore o uguale del numero massimo di risposte. +survey#:#err_external_rcp_no_email_column#:#I dati di importazione devono contenere almeno una colonna "email" con il titolo "email" nella prima riga e gli indirizzi email nelle righe seguenti +survey#:#err_maxvaluegeminvalue#:#Il valore massimo deve essere maggiore o uguale al valore minimo e inferiore o uguale al numero massimo di risposte. survey#:#err_minvalueganswers#:#Il numero minimo di risposte deve essere minore o uguale di quello massimo. survey#:#err_no_exact_answers#:#Per favore spunta esattamente %s risposte. survey#:#err_no_max_answers#:#Per favore spunta al massimo %s risposte. @@ -16547,11 +16542,11 @@ survey#:#mail_sent_short#:#Invia survey#:#mail_survey_codes#:#Codice di accesso mail survey#:#mailaddresses#:#Indirizzo del destinatario survey#:#mailaddresses_info#:#Scrivi un elenco di destinatari, separato da virgola, che riceveranno la notifica ad ogni sondaggio terminato. -survey#:#mailnotification#:#Notifica via e-mail +survey#:#mailnotification#:#Notifica via e-mail per ogni sondaggio terminato survey#:#mailparticipantdata#:#Dati aggiuntivi per i partecipanti -survey#:#mailparticipantdata_info#:#Aggiunge un'introduzione alla mail di notifica. Puoi utilizzare dei segnaposto per i dati relativi ai partecipanti, es. [matriculation], [email], [firstname]. I segnaposto saranno sostituiti dai dati reali dell'utente nel sondaggi personalizzati. -survey#:#mailparticipantdata_placeholder#:#The following placeholders will be replaced with real user data in personalized surveys: -survey#:#maintenance#:#Manutenzione +survey#:#mailparticipantdata_info#:#Questa informazione sarà preceduta dalla sezione dei risultati inclusa automaticamente nella mail di notifica. +survey#:#mailparticipantdata_placeholder#:#I seguenti segnaposto verranno sostituiti con dati utente reali in sondaggi personalizzati: +survey#:#maintenance#:#Partecipanti survey#:#matrix_appearance#:#Aspetto survey#:#matrix_bipolar_adjectives#:#Aggettivi Bipolari survey#:#matrix_bipolar_adjectives_description#:#Puoi utilizzare un paio di aggettivi bipolari per limitare la colonna di risposte a parole, brevi frasi o testi. @@ -16579,16 +16574,16 @@ survey#:#median_between#:#tra survey#:#menuback#:#Indietro survey#:#menubacktosurvey#:#Indietro al sondaggio survey#:#message_content_info#:#Scrivi il messaggio della e-mail di notifica contenente il codice per i partecipanti al sondaggio. Puoi utilizzare i segnaposto [code] (il codice d'accesso), [url] (l'indirizzo web del sondaggio), e quelli dei dati relativi ai partecipanti, in base ai tuoi campi di importazione: %s. I segnaposto saranno sostituiti con i dati del singolo destinatario. -survey#:#metric_question_floating_point#:#Il valore indicato & -survey#:#metric_question_not_a_value#:#Il valore indicato non & -survey#:#metric_question_out_of_bounds#:#Il valore che hai inserito non & +survey#:#metric_question_floating_point#:#Il valore inserito è un valore in virgola mobile. I valori in virgola mobile non sono consentiti per questo tipo di domanda! +survey#:#metric_question_not_a_value#:#Il valore inserito non è un valore numerico! +survey#:#metric_question_out_of_bounds#:#Il valore inserito non è compreso tra il valore minimo e massimo! survey#:#metric_subtype_description_interval#:#Intervalli equivalenti fra le misure permettono un confronto significativo fra coppie casuali di misure. Lo zero scala è arbitrario, in questo modo possono essere utilizzati valori negativi. Esempi di intervalli di valori sono le date od intervalli di temperatura (es. scala Celsius) -survey#:#metric_subtype_description_ratioabsolute#:#La misurazione assoluta del rapporto utilizza numeri naturali in aggiunta al non-arbitrario punto zero, e.s. il numero di bambini in una famiglia o la sua probabilità. +survey#:#metric_subtype_description_ratioabsolute#:#La misurazione assoluta del rapporto utilizza numeri naturali in aggiunta al non-arbitrario punto zero, e.s. il numero di bambini in una famiglia o la sua probcompetenze. survey#:#metric_subtype_description_rationonabsolute#:#Oltre alla misurazione dell'intervallo ci sono anche rapporti significativi tra coppie arbitrarie di numeri. Il valore zero su una scala di rapporto non è arbitrario. La maggior parte delle quantità fisiche, come la lunghezza in centimetri o la durata in secondi, vengono misurate su scale di rapporto. survey#:#minimum#:#Valore minimo -survey#:#mode#:#Valore pi& +survey#:#mode#:#Valore più selezionato survey#:#mode_nr_of_selections#:#Nr di selezioni -survey#:#mode_text#:#Valore pi& +survey#:#mode_text#:#Valore più selezionato (testo) survey#:#msg_duplicate_scale#:#Per favore scrivi un'unica scala di valori survey#:#msg_enter_value_for_valid_constraint#:#Per favore scrivi un valore per creare una condizione preliminare valida! survey#:#msg_input_only_positive_numbers#:#Si prega di digitare numeri positivi nella scala dei valori. @@ -16630,7 +16625,7 @@ survey#:#question_mr_no_other_answer#:#Per favore scrivi un testo per l'altra ri survey#:#question_mr_no_other_answer_checked#:#È necessario selezionare la casella di controllo se si inserisce un testo per una risposta survey#:#question_mr_not_checked#:#Per favore spunta almeno una della domande! survey#:#question_not_checked#:#Per favore, seleziona una delle risposte disponibili! -survey#:#question_obligatory#:#Questa domanda & +survey#:#question_obligatory#:#La domanda è obbligatoria! survey#:#question_sr_no_other_answer_checked#:#È necessario selezionare il pulsante di opzione se si inserisce un testo per una risposta survey#:#question_type#:#Tipo di domanda survey#:#questionblock#:#Blocco di domande @@ -16658,8 +16653,8 @@ survey#:#search_groups#:#Gruppi survey#:#search_term#:#Ricerca il termine survey#:#select_option#:#--- Scegli un valore --- survey#:#select_prior_question#:#Seleziona la domanda precedente -survey#:#select_questionpool#:#Scegli la raccolta di domande alla quale verr& -survey#:#select_questionpool_short#:#Scegli la raccolta +survey#:#select_questionpool#:#Seleziona un pool di domande per memorizzare la domanda creata +survey#:#select_questionpool_short#:#Pool di domande Sondaggio survey#:#select_relation#:#Seleziona una relazione survey#:#select_target_position_for_move_question#:#Per favore, seleziona la posizione di destinazione nella quale spostare le domande e premi uno dei pulsanti Inserisci! survey#:#select_value#:#Seleziona un valore @@ -16669,19 +16664,19 @@ survey#:#send_to_answered#:#A tutti i partecipanti che hanno completato il sonda survey#:#send_to_unanswered#:#A tutti i partecipanti che non hanno completato il sondaggio survey#:#show_questiontext#:#Visualizza il testo della domanda survey#:#show_questiontext_description#:#Se la casella è spuntata, verrà mostrato il testo di ogni domanda del blocco; altrimenti sarà nascosto. -survey#:#skipped#:#saltato +survey#:#skipped#:#Saltato survey#:#spl_copy_insert_clipboard#:#Le domande selezionate sono state copiate negli appunti survey#:#spl_copy_select_none#:#Per favore spunta almeno una domanda da copiare negli appunti survey#:#spl_move_insert_clipboard#:#Le domande selezionate sono pronte ad essere spostate survey#:#spl_move_same_pool#:#Spostare domande all'interno della stessa raccolta non comporta alcuna modifica. survey#:#spl_move_select_none#:#Per favore spunta almeno una domanda da muovere survey#:#spl_online_property#:#Online -survey#:#spl_online_property_description#:#Se la raccolta di domande non & +survey#:#spl_online_property_description#:#Se il pool di domande non è online, non può essere utilizzato nei sondaggi. survey#:#spl_paste_no_objects#:#Non sono presenti domande negli appunti. Per favore copia o muovi una domanda negli appunti. survey#:#spl_paste_success#:#Le domande sono state incollate nella raccolta di domade. -survey#:#spl_save_obligatory_state#:#Save Obligatory States +survey#:#spl_save_obligatory_state#:#Salva gli Stati obbligatori survey#:#start_date#:#Giorno di esecuzione -survey#:#start_date_not_reached#:#Non puoi eseguire il sondaggio fino a che la data di inizio non & +survey#:#start_date_not_reached#:#Non è possibile avviare il sondaggio fino al raggiungimento della data di inizio! survey#:#start_survey#:#Inizia il sondaggio survey#:#subtype#:#Sottotipo survey#:#survey_360_add_external_rater#:#Aggiungi valutatore esterno @@ -16689,7 +16684,7 @@ survey#:#survey_360_add_self_appraisee#:#Aggiungi te stesso come valutato a ques survey#:#survey_360_appraisee#:#Valutato survey#:#survey_360_appraisee_close_action#:#Chiudi sondaggio per i valutatori survey#:#survey_360_appraisee_close_action_info#:#Questo fornirà l’accesso alle tue statistiche. -survey#:#survey_360_appraisee_close_action_info_skill#:#Questo fornirà l’accesso alle tue statistiche e aggiornerà i livello di competenza. +survey#:#survey_360_appraisee_close_action_info_skill#:#Questo fornirà l’accesso alle tue statistiche e aggiornerà i livello di competenze. survey#:#survey_360_appraisee_close_action_status#:#Il sondaggio è stato chiuso al %s. survey#:#survey_360_appraisee_close_action_success#:#Hai chiuso il tuo sondaggio a 360° per i tupi valutatori. survey#:#survey_360_appraisee_close_action_success_admin#:#I sondaggi a 360° sono stati chiusi dai valutati per i valutatori. @@ -16702,7 +16697,7 @@ survey#:#survey_360_mode#:#Feedback a 360° survey#:#survey_360_mode_info#:#Utilizza per revisione tra pari di persone survey#:#survey_360_no_appraisees#:#Attualmente non ci sono valutati per te da valutare. survey#:#survey_360_no_closed_appraisees#:#Nessun valutato ha ancora chiuso il proprio sondaggio. -survey#:#survey_360_rate_other_appraisee#:#Rate Appraisee###28 10 2024 new variable +survey#:#survey_360_rate_other_appraisee#:#Rate Appraisee###28 11 2025 new variable survey#:#survey_360_rate_other_appraisees#:#Effettua valutazione valutati survey#:#survey_360_rater_finished#:#Sondaggio terminato survey#:#survey_360_rater_mail_sent#:#Invia mail @@ -16716,46 +16711,46 @@ survey#:#survey_360_raters_finished#:#Valutazioni terminate survey#:#survey_360_raters_status_info#:#Valutazioni terminate survey#:#survey_360_remove_appraisees#:#Rimuovi valutato/i survey#:#survey_360_results#:#Accesso ai risultati per i valutati -survey#:#survey_360_results_all#:#To All Appraisees -survey#:#survey_360_results_all_info#:#todo11 -survey#:#survey_360_results_none#:#None -survey#:#survey_360_results_none_info#:#todo9 -survey#:#survey_360_results_own#:#To Own Raters -survey#:#survey_360_results_own_info#:#todo10 +survey#:#survey_360_results_all#:#A tutti i valutati +survey#:#survey_360_results_all_info#:#Tutti i valutatori del sondaggio a 360° possono visualizzare tutti i feedback forniti da tutti i valutatori, non solo dai propri valutatori. +survey#:#survey_360_results_none#:#Nessun accesso ai risultati +survey#:#survey_360_results_none_info#:#I valutatori non possono accedere al feedback fornito dai valutatori +survey#:#survey_360_results_own#:#Accesso al feedback dei propri valutatori +survey#:#survey_360_results_own_info#:#I valutatori possono accedere solo al feedback dei propri valutatori. survey#:#survey_360_select_appraisee#:#Seleziona -survey#:#survey_360_self_appraisee#:#Users Can Add Themselves As Appraisees -survey#:#survey_360_self_appraisee_info#:#todo8 -survey#:#survey_360_self_evaluation#:#Appraisees Can Rate Themselves -survey#:#survey_360_self_evaluation_info#:#todo6 -survey#:#survey_360_self_raters#:#Appraisees Can Manage Their Raters -survey#:#survey_360_self_raters_info#:#todo7 +survey#:#survey_360_self_appraisee#:#Apri Feedback a 360° +survey#:#survey_360_self_appraisee_info#:#Nella scheda "Informazioni" viene visualizzato un collegamento a tutti gli utenti. Facendo clic su questo collegamento possono aggiungersi come periti e ricevere feedback. +survey#:#survey_360_self_evaluation#:#Auto Valutazione +survey#:#survey_360_self_evaluation_info#:#I valutatori possono valutare loro stessi utilizzando le domande. +survey#:#survey_360_self_raters#:#I periti possono gestire i loro valutatori +survey#:#survey_360_self_raters_info#:#I valutatori selezionano e invitano autonomamente le persone che dovrebbero fornire loro un feedback. survey#:#survey_360_sure_appraisee_close#:#Sei sicuro di voler chiudere il sondaggio per tutti i tuoi valutatori? survey#:#survey_360_sure_appraisee_close_admin#:#Sei sicuro di voler chiudere il sondaggio per tutti i seguenti valutati? survey#:#survey_360_sure_delete_appraises#:#Sei sicuro di voler rimuovere i seguenti valutati? survey#:#survey_360_sure_delete_raters#:#Sei sicuro di voler rimuovere i seguenti valutati per %s? -survey#:#survey_access_codes#:#Autenticazione tramite codici di accesso -survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'. -survey#:#survey_activate_skill_service#:#Attivare il servizio di competenza -survey#:#survey_activate_skill_service_info#:#todo12 -survey#:#survey_add_new_question#:#Add new Page -survey#:#survey_assign_competence#:#Assegna competenza +survey#:#survey_access_code#:#Autenticazione tramite codici di accesso +survey#:#survey_access_codes_info#:#Gli utenti ottengono l'accesso al sondaggio inserendo un codice nella scheda "Informazioni". Questi codici di accesso sono generati in una sottoscheda "Codici di accesso" nella scheda "Partecipanti". +survey#:#survey_activate_skill_service#:#Attivare il servizio di competenze +survey#:#survey_activate_skill_service_info#:#Verrà visualizzata una nuova scheda "Competenze". In questa scheda le domande vengono assegnate alle competenze, quindi vengono attribuite le soglie per raggiungere un livello specifico di una competenza. +survey#:#survey_add_new_question#:#Crea domanda +survey#:#survey_assign_competence#:#Assegna competenze survey#:#survey_auto_block_title#:#Intestazione pagina survey#:#survey_available_question_pools#:#Gruppi disponibili -survey#:#survey_calc_skills#:#Determina livelli di competenza -survey#:#survey_calculate_sum_score#:#Calculate Sum Score###29 07 2022 new variable -survey#:#survey_calculate_sum_score_info#:#Calculates the sum of all scale values for single choice, multiple choice and matrix questions for each participant. Caution: If participants skip these kind of questions, the whole sum score will not be calculated anymore.###29 07 2022 new variable +survey#:#survey_calc_skills#:#Determina livelli di competenze +survey#:#survey_calculate_sum_score#:#Calculate Sum Score +survey#:#survey_calculate_sum_score_info#:#Calculates the sum of all scale values for single choice, multiple choice and matrix questions for each participant. Caution: If participants skip these kind of questions, the whole sum score will not be calculated anymore. survey#:#survey_cancel_preview#:#Elimina anteprima survey#:#survey_cannot_preview_survey#:#Anteprima non disponibile survey#:#survey_code#:#Codice di accesso al sondaggio survey#:#survey_code_delete_sure#:#Sei sicuro di voler eliminare i seguenti codici di accesso? -survey#:#survey_code_url#:#URL per l& -survey#:#survey_code_url_name#:#URL (usa il tasto destro del mouse per copiare l& +survey#:#survey_code_url#:#URL per accesso diretto +survey#:#survey_code_url_name#:#URL <small> (utilizzare il pulsante destro del mouse per copiare l'URL) </small> survey#:#survey_code_used#:#Stato del codice survey#:#survey_codes_lang#:#Lingua del sondaggio survey#:#survey_codes_no_anonymization#:#Devi creare un sondaggio anonimo con codici d'accesso per poter creare un nuovi codici d'accesso! survey#:#survey_competences#:#Competenze survey#:#survey_constraint_deleted#:#La regola di gestione è stata eliminata. -survey#:#survey_copy_questions_to_pool#:#Copy Questions To Pool +survey#:#survey_copy_questions_to_pool#:#Copia domande nel pool survey#:#survey_copy_select_questionpool#:#Gruppo di domande per inserire le copie survey#:#survey_copy_to_questionpool_success#:#Le domande sono state copiate con successo nel gruppo. survey#:#survey_delete_heading#:#Rimuovi intestazione @@ -16763,25 +16758,25 @@ survey#:#survey_edit_heading#:#Modifica intestazione survey#:#survey_edit_settings#:#Modifica impostazioni survey#:#survey_error_insert_incomplete_question#:#Hai provato ad inserire nel sondaggio una domanda incompleta! La domanda non è stata inserita. survey#:#survey_execution_exit#:#Torna al repository -survey#:#survey_execution_exit_360#:#Back###26 08 2024 new variable +survey#:#survey_execution_exit_360#:#Back###31 03 2023 new variable survey#:#survey_execution_sure_finish#:#Sei sicuro di voler terminare questo sondaggio? In seguito non potrai modificare le tue risposte. survey#:#survey_existing_pool#:#Utilizza gruppo di domande esistente survey#:#survey_finish#:#Salva e finisci il sondaggio >>> -survey#:#survey_finished#:#Il sondaggio & +survey#:#survey_finished#:#Hai finito il sondaggio. Grazie per la vostra partecipazione! survey#:#survey_has_datasets_warning#:#Il sondaggio contiene già dei dati di partecipazione. Non puoi modificare le domande prima di aver rimosso i dati stessi, utilizzando la sezione "Manutenzione" -survey#:#survey_has_datasets_warning_page_view#:#The survey already contains datasets. You cannot edit the survey questions until you remove these datasets. +survey#:#survey_has_datasets_warning_page_view#:#Il sondaggio contiene già set di dati. Non è possibile modificare le domande del sondaggio fino a quando non si rimuovono questi set di dati. survey#:#survey_has_datasets_warning_page_view_link#:#Modifica partecipanti -survey#:#survey_introduction_info#:#This message appears at the beginning of the survey. -survey#:#survey_is_offline#:#Non puoi eseguire il sondaggio! Il sondaggio & +survey#:#survey_introduction_info#:#Questo messaggio appare all'inizio del sondaggio. +survey#:#survey_is_offline#:#Non puoi iniziare il sondaggio! Il sondaggio è attualmente offline. survey#:#survey_new_pool#:#Crea nuovo gruppo di domande survey#:#survey_next#:#Salva e vai avanti >>> survey#:#survey_no_pool#:#Non utilizzare gruppo di domande survey#:#survey_not_available#:#non pertinente survey#:#survey_notification_finished_introduction#:#I seguenti partecipanti hanno terminato il sondaggio. -survey#:#survey_notification_finished_reason#:#You are receiving this email because you activated notifications for the survey mentioned above. +survey#:#survey_notification_finished_reason#:#Ricevi questa email perché hai attivato le notifiche per il sondaggio sopra menzionato. survey#:#survey_notification_target_group#:#Gruppo di destinazione -survey#:#survey_notification_target_group_invited#:#All users who got the survey put on their Personal Desktop###29 07 2022 new variable -survey#:#survey_notification_target_group_invited_info#:#Currently invited users: %s +survey#:#survey_notification_target_group_invited#:#All users manually invited to the survey +survey#:#survey_notification_target_group_invited_info#:#Utenti attualmente invitati: %s survey#:#survey_notification_target_group_parent_course#:#Tutti i membri del corso/gruppo principale survey#:#survey_notification_target_group_parent_course_inactive#:#Nessun corso/gruppo principale fornito - non sarà inviato alcun promemoria! survey#:#survey_notification_tutor_body#:#Il seguente sondaggio è stato terminato da tutti i partecipanti @@ -16789,26 +16784,26 @@ survey#:#survey_notification_tutor_link#:#Link al sondaggio survey#:#survey_notification_tutor_recipients#:#Tutor (accesso/i) survey#:#survey_notification_tutor_recipients_invalid#:#Si prega di dichiarare gli utenti con permessi di scrittura. survey#:#survey_notification_tutor_salutation#:#Ciao %s, -survey#:#survey_notification_tutor_setting#:#Notify tutors when all participants have finished +survey#:#survey_notification_tutor_setting#:#Avvisa i tutor quando tutti i partecipanti hanno terminato survey#:#survey_notification_tutor_subject#:#Tutti i partecipanti hanno terminato il sondaggio "%s" survey#:#survey_order#:#Ordinamento survey#:#survey_pool_selection#:#Selezione del gruppo survey#:#survey_previous#:#<<< Salva e torna indietro survey#:#survey_question_editor#:#Lista Domande -survey#:#survey_question_obligatory#:#(Questa domanda & +survey#:#survey_question_obligatory#:#Questa domanda è obbligatoria. Devi rispondere alla domanda! survey#:#survey_question_pool#:#Gruppo di domande survey#:#survey_question_pool_title#:#Titolo del gruppo -survey#:#survey_question_pool_usage#:#Choose Pool when creating questions +survey#:#survey_question_pool_usage#:#Scegli Pool durante la creazione di domande survey#:#survey_question_pool_usage_active#:#Questions can be added optionally to a question pool. -survey#:#survey_question_pool_usage_active_info#:#The questions can be re-used in other surveys. +survey#:#survey_question_pool_usage_active_info#:#Le domande possono essere riutilizzate in altri sondaggi. survey#:#survey_question_pool_usage_inactive#:#Le domande sono create direttamente nel sondaggio. -survey#:#survey_question_pool_usage_inactive_info#:#The questions cannot be re-used in other surveys. +survey#:#survey_question_pool_usage_inactive_info#:#Le domande non possono essere riutilizzate in altri sondaggi. survey#:#survey_question_title#:#Titolo domanda survey#:#survey_questions#:#Domande survey#:#survey_questions_to_clipboard_copy#:#La/e domanda/e è/sono copiata/e negli appunti. Si prega di selezionare un obiettivo o svuota gli appunti. survey#:#survey_reached_level#:#Livello raggiunto survey#:#survey_reminder_body#:#non hai ancora terminato il seguente sondaggio -survey#:#survey_reminder_cron#:#Remind users to participate###29 07 2022 new variable +survey#:#survey_reminder_cron#:#Remind users to participate / Send results to tutors survey#:#survey_reminder_cron_info#:#Se attivato, agli utenti verrà ricordato di partecipare ai sondaggi. survey#:#survey_reminder_end#:#Fine survey#:#survey_reminder_frequency#:#Frequenza @@ -16818,23 +16813,23 @@ survey#:#survey_reminder_salutation#:#Ciao %s, survey#:#survey_reminder_setting#:#Ricorda agli utenti di partecipare survey#:#survey_reminder_start#:#Avvio survey#:#survey_reminder_subject#:#Il sondaggio "%s" non è stato terminato -survey#:#survey_remove_competence#:#Rimuovi competenza +survey#:#survey_remove_competence#:#Rimuovi competenze survey#:#survey_results_anonymization#:#Privacy -survey#:#survey_results_anonymized#:#Without Names -survey#:#survey_results_anonymized_info#:#In the tab 'Results' participants' names are replaced by codes. Users having acces to this tab cannot attribute answers to named participants but only to user "iTXaF" (example). +survey#:#survey_results_anonymized#:#Senza nomi +survey#:#survey_results_anonymized_info#:#Nella scheda "Risultati" i nomi dei partecipanti sono sostituiti da codici. Gli utenti che hanno accesso a questa scheda non possono attribuire le risposte ai partecipanti nominati ma solo all'utente "iT XaF" (esempio). survey#:#survey_results_finished#:#Sondaggio terminato survey#:#survey_results_not_started#:#Sondaggio non iniziato survey#:#survey_results_personalized#:#Con nomi -survey#:#survey_results_personalized_info#:#In the tab 'Results' the names of the partcipants and their respective answers are listed. Users having access to this tab can inspect who has provided which answer. +survey#:#survey_results_personalized_info#:#Nella scheda "Risultati" sono elencati i nomi dei partecipanti e le rispettive risposte. Gli utenti che hanno accesso a questa scheda possono verificare chi ha fornito la risposta. survey#:#survey_results_started#:#Sondaggio iniziato survey#:#survey_show_blocktitle#:#Mostra titolo blocco survey#:#survey_show_blocktitle_description#:#Se attivato, il titolo del blocco verrà visualizzato nel sondaggio. -survey#:#survey_skill#:#Competenza -survey#:#survey_skill_assign#:#Assegnazione della domanda/competenza -survey#:#survey_skill_level#:#Livello di competenza +survey#:#survey_skill#:#competenze +survey#:#survey_skill_assign#:#Assegnazione della domanda/competenze +survey#:#survey_skill_level#:#Livello di competenze survey#:#survey_skill_max_scale_points#:#Punti di massima Scala survey#:#survey_skill_nr_q#:#Numero delle domande -survey#:#survey_skill_thresholds#:#Limiti di competenza +survey#:#survey_skill_thresholds#:#Limiti di competenze survey#:#survey_start#:#<<< Salva e vai alla pagina iniziale survey#:#survey_sum_of_means#:#Somma aritmetica Strumenti per domanda survey#:#survey_sure_delete_constraint#:#Sei sicuro di voler eliminare la regola di gestione "%1$s" per la domanda "%2$s"? @@ -16845,12 +16840,12 @@ survey#:#survey_sync_question_copies_info#:#Le domande selezionate verranno sost survey#:#survey_sync_success#:#Le domande selezionate sono state aggiornate. survey#:#survey_up_to_x_points#:#Fino a x punti survey#:#survey_use_start_button#:#Premi il tasto "Inizia il sondaggio" per iniziare! -survey#:#svy_activation_limited_visibility_info#:#If chosen, the survey is visible even outside of the given availability. -survey#:#svy_activation_online_info#:#Activate this setting to make the survey accessible to users. -survey#:#svy_add_internal_user#:#Add User###29 07 2022 new variable -survey#:#svy_add_internal_user_info#:#The rater has a registered user on this platform.###29 07 2022 new variable -survey#:#svy_add_rater#:#Add Rater###29 07 2022 new variable -survey#:#svy_all_raters#:#All Raters###29 07 2022 new variable +survey#:#svy_activation_limited_visibility_info#:#Se scelto, il sondaggio è visibile anche al di fuori della data disponibilità. +survey#:#svy_activation_online_info#:#Attiva questa impostazione per rendere il sondaggio accessibile agli utenti. +survey#:#svy_add_internal_user#:#Add User###31 03 2023 new variable +survey#:#svy_add_internal_user_info#:#The rater has a registered user on this platform.###31 03 2023 new variable +survey#:#svy_add_rater#:#Add Rater###31 03 2023 new variable +survey#:#svy_all_raters#:#All Raters###31 03 2023 new variable survey#:#svy_all_survey_competences#:#Tutte le competenze di sondaggio survey#:#svy_all_user_data_deleted#:#Tutti i dati degli utenti di questo sondaggio sono stati eliminati! survey#:#svy_analysis#:#Analisi @@ -16860,34 +16855,34 @@ survey#:#svy_anonymous_participants_min#:#Numero minimo di partecipanti survey#:#svy_anonymous_participants_min_info#:#La lista sarà disponibile solo se c’è almeno un numero minimo di partecipanti. survey#:#svy_anonymous_participants_svy#:#Lista dei partecipanti survey#:#svy_anonymous_participants_svy_info#:#Se attivata, una lista dei partecipanti è disponibile dopo la fine della data. -survey#:#svy_answer_too_long#:#Your current answer is too long (%s characters). Please shorten your answer.###07 02 2020 new variable -survey#:#svy_app_see_rater_info#:#Appraisees can access rater information in the results screens, including names and e-mail addresses, if entered before when adding raters.###29 07 2022 new variable -survey#:#svy_appraisses_cannot_be_raters#:#User cannot be added as rater. Use self evaluation option in the survey settings instead.###07 02 2020 new variable +survey#:#svy_answer_too_long#:#La tua risposta attuale è troppo lunga (%s caratteri). Per favore abbrevia la tua risposta. +survey#:#svy_app_see_rater_info#:#Appraisees can access rater information in the results screens, including names and e-mail addresses, if entered before when adding raters.###31 03 2023 new variable +survey#:#svy_appraisses_cannot_be_raters#:#L'utente non può essere aggiunto come rater. Utilizzare invece l'opzione di autovalutazione nelle impostazioni del sondaggio. survey#:#svy_back#:#Indietro -survey#:#svy_categories#:#Risposte -survey#:#svy_check_evaluation_access_introduction#:#Il sondaggio di prova & +survey#:#svy_categories#:#Answers###28 11 2025 new variable +survey#:#svy_check_evaluation_access_introduction#:#Poiché questa valutazione del sondaggio è accessibile solo dai partecipanti al sondaggio, è necessario inserire il codice di accesso al sondaggio per aprire la valutazione. survey#:#svy_check_evaluation_authentication_needed#:#Autenticazione necessaria survey#:#svy_check_evaluation_wrong_key#:#Hai inserito un codice di accesso non riconosciuto o non puoi partecipare al sondaggio. Accesso negato. -survey#:#svy_compress_view#:#Compressed View###29 07 2022 new variable -survey#:#svy_compress_view_info#:#If activated, all single choice questions with similar scales will be presented matrix-like.###29 07 2022 new variable +survey#:#svy_compress_view#:#Visualizzazione compressa +survey#:#svy_compress_view_info#:#Se attivato, tutte le domande a scelta singola con scale simili saranno presentate a matrice. survey#:#svy_copy#:#Copia sondaggio survey#:#svy_create_question#:#Crea domanda survey#:#svy_delete_all_user_data#:#Elimina tutti i dati degli utenti -survey#:#svy_dont_send#:#Don't send a message###29 07 2022 new variable +survey#:#svy_dont_send#:#Don't send a message###31 03 2023 new variable survey#:#svy_eval_captions#:#Valori survey#:#svy_eval_captions_abs#:#Assoluto survey#:#svy_eval_captions_abs_perc#:#Assoluti e percentuali survey#:#svy_eval_captions_perc#:#Percentuale -survey#:#svy_eval_competences#:#Risultati di competenza +survey#:#svy_eval_competences#:#Risultati di competenze survey#:#svy_eval_cumulated#:#Risultati aggregati survey#:#svy_eval_detail#:#Risultati aggregati (dettagli) -survey#:#svy_eval_skipped_value#:#Results: "skipped" +survey#:#svy_eval_skipped_value#:#Risultati: "ignorato" survey#:#svy_eval_skipped_value_custom#:#Utilizza valore personalizzato survey#:#svy_eval_skipped_value_custom_info#:#Definire qualsiasi valore (o vuoto) da utilizzare per le risposte saltate survey#:#svy_eval_skipped_value_custom_value#:#Valore survey#:#svy_eval_skipped_value_lng#:#Utilizza la voce del file di lingua survey#:#svy_eval_skipped_value_lng_info#:#Valore attuale: "%s" -survey#:#svy_eval_user#:#Risultati dell& +survey#:#svy_eval_user#:#Per Participant survey#:#svy_eval_view#:#Visualizza survey#:#svy_eval_view_charts#:#Grafici survey#:#svy_eval_view_tables#:#Tabella @@ -16897,84 +16892,84 @@ survey#:#svy_evaluation_access_off_info#:#Solo gli utenti che possono modificare survey#:#svy_evaluation_access_participants_info#:#Tutti gli utenti che hanno partecipato al sondaggio possono scegliere di guardare i risultati dopo averlo terminato. survey#:#svy_export_files#:#Esporta file survey#:#svy_export_format#:#Esporta dati di sondaggio come -survey#:#svy_export_pdf#:#Export PDF###07 02 2020 new variable -survey#:#svy_ext_rater_firstname#:#First name of external rater###29 07 2022 new variable -survey#:#svy_ext_rater_lastname#:#Last name of external rater###29 07 2022 new variable -survey#:#svy_external_rater#:#Add External Rater###29 07 2022 new variable -survey#:#svy_external_rater_info#:#The rater is not registered on this platform.###29 07 2022 new variable +survey#:#svy_export_pdf#:#Export PDF +survey#:#svy_ext_rater_firstname#:#First name of external rater###31 03 2023 new variable +survey#:#svy_ext_rater_lastname#:#Last name of external rater###31 03 2023 new variable +survey#:#svy_external_rater#:#Add External Rater###31 03 2023 new variable +survey#:#svy_external_rater_info#:#The rater is not registered on this platform.###31 03 2023 new variable survey#:#svy_fraction_of_selections#:#Frazioni delle selezioni survey#:#svy_gap_analysis#:#Analisi gap survey#:#svy_general_properties#:#Proprietà generali survey#:#svy_import_codes#:#Importa codici survey#:#svy_import_codes_info#:#Questa importazione richiede un "%s" file di esportazione. -survey#:#svy_ind_feedb_info#:#Users get distinct evaluations by others.###29 07 2022 new variable -survey#:#svy_ind_feedb_mode#:#Individual Feedback###29 07 2022 new variable +survey#:#svy_ind_feedb_info#:#Users get distinct evaluations by others.###31 03 2023 new variable +survey#:#svy_ind_feedb_mode#:#Individual Feedback###31 03 2023 new variable survey#:#svy_mail_confirmation_subject#:#Sondaggio "%s" - La tua conferma di partecipazione -survey#:#svy_mail_context_rater_invitation_info#:#Invite raters to participate in a survey.###29 07 2022 new variable -survey#:#svy_mail_context_rater_invitation_survey_title#:#Survey Title###29 07 2022 new variable -survey#:#svy_mail_context_rater_invitation_title#:#Survey: Rater Invitation###29 07 2022 new variable +survey#:#svy_mail_context_rater_invitation_info#:#Invite raters to participate in a survey.###31 03 2023 new variable +survey#:#svy_mail_context_rater_invitation_survey_title#:#Survey Title###31 03 2023 new variable +survey#:#svy_mail_context_rater_invitation_title#:#Survey: Rater Invitation###31 03 2023 new variable survey#:#svy_mail_context_reminder_info#:#Ricorda agli utenti di partecipare al sondaggio survey#:#svy_mail_context_reminder_survey_title#:#Titolo di sondaggio survey#:#svy_mail_context_reminder_title#:#Promemoria sondaggio survey#:#svy_mail_own_results#:#Visualizza le risposte date -survey#:#svy_mail_own_results_body#:#the following is a complete summary of your survey participation. +survey#:#svy_mail_own_results_body#:#di seguito è riportato un riepilogo completo della partecipazione al sondaggio. survey#:#svy_mail_own_results_subject#:#Sondaggio "%s" - Le tue risposte survey#:#svy_mail_send_confirmation#:#Invia conferma di partecipazione survey#:#svy_matrix_layout_percentages_sum_invalid#:#Le impostazioni di colonna non raggiungono il 100%. -survey#:#svy_max_sum_score#:#Maximum Sum Score###29 07 2022 new variable -survey#:#svy_neutral_answer#:#Text for a Neutral Answer ("Not Specified", "I don't know" etc.) -survey#:#svy_no_appraisees_found#:#No appraisees with feedbacks found.###26 08 2024 new variable -survey#:#svy_notification_tutor_results#:#One E-Mail including Survey Results###07 02 2020 new variable -survey#:#svy_notification_tutor_results_alert#:#This requires an end date.###07 02 2020 new variable -survey#:#svy_notification_tutor_results_info#:#After reaching the end data a cron job will send an email with the detailed survey results attached to it.###07 02 2020 new variable -survey#:#svy_only_max_one_external_rater#:#Please select only one external rater.###29 07 2022 new variable +survey#:#svy_max_sum_score#:#Maximum Sum Score +survey#:#svy_neutral_answer#:#Testo per una risposta neutra ("Non specificato", "Non lo so" ecc.) +survey#:#svy_no_appraisees_found#:#No appraisees with feedbacks found.###28 11 2023 new variable +survey#:#svy_notification_tutor_results#:#One E-Mail including Survey Results +survey#:#svy_notification_tutor_results_alert#:#This requires an end date. +survey#:#svy_notification_tutor_results_info#:#After reaching the end data a cron job will send an email with the detailed survey results attached to it. +survey#:#svy_only_max_one_external_rater#:#Please select only one external rater.###31 03 2023 new variable survey#:#svy_page_add_question#:#Aggiungi nuovo %s -survey#:#svy_page_error#:#Si & +survey#:#svy_page_error#:#Si è verificato un errore durante la risposta a una domanda del sondaggio. Si prega di fare riferimento alla domanda per ottenere maggiori informazioni sull'errore! survey#:#svy_page_errors#:#Si sono verificati degli errori rispondendo alle domande del sondaggio. Specifica le domande se vuoi avere maggiori informazioni sugli errori! -survey#:#svy_participant#:#Participant -survey#:#svy_participants#:#Participants###26 08 2024 new variable +survey#:#svy_participant#:#Partecipante +survey#:#svy_participants#:#Participants###30 07 2024 new variable survey#:#svy_participation#:#Adesione -survey#:#svy_please_select_unused_codes#:#Please select at least one unused code.###26 08 2024 new variable +survey#:#svy_please_select_unused_codes#:#Please select at least one unused code.###31 03 2023 new variable survey#:#svy_print_hide_labels#:#Nascondi etichette survey#:#svy_print_show_labels#:#Mostra etichette -survey#:#svy_privacy_info#:#Privacy###29 07 2022 new variable -survey#:#svy_rater#:#Rater###29 07 2022 new variable -survey#:#svy_rater_see_app_info#:#The names of appraisees will be presented to raters to enable them evaluating the questions.###29 07 2022 new variable +survey#:#svy_privacy_info#:#Privacy###31 03 2023 new variable +survey#:#svy_rater#:#Rater###31 03 2023 new variable +survey#:#svy_rater_see_app_info#:#The names of appraisees will be presented to raters to enable them evaluating the questions.###31 03 2023 new variable survey#:#svy_reminder_mail_template#:#Modello di mail survey#:#svy_reminder_mail_template_none#:#Non utilizzare il modello di mail survey#:#svy_result_mail_notification_info#:#Al termine del sondaggio, le risposte di ciascun partecipante saranno inviate ai destinatari definiti. survey#:#svy_results#:#Risultati survey#:#svy_results_mail_confirm#:#I partecipanti possono richiedere la conferma di partecipazione survey#:#svy_results_mail_confirm_info#:#I partecipanti possono richiedere una mail di conferma della partecipazione alla fine del sondaggio. -survey#:#svy_results_mail_own#:#Participant can mail own answers -survey#:#svy_results_mail_own_info#:#todo5 -survey#:#svy_results_view_own#:#Participant can view own answers -survey#:#svy_results_view_own_info#:#todo4 -survey#:#svy_save_and_continue#:#Save and Continue###29 07 2022 new variable +survey#:#svy_results_mail_own#:#Includere le risposte fornite +survey#:#svy_results_mail_own_info#:#Le risposte fornite saranno incluse nella conferma di partecipazione. +survey#:#svy_results_view_own#:#I partecipanti possono visualizzare le proprie risposte +survey#:#svy_results_view_own_info#:#Dopo aver terminato il sondaggio, i partecipanti possono visualizzare un elenco di tutte le risposte fornite. Non possono cambiare le loro risposte +survey#:#svy_save_and_continue#:#Save and Continue###31 03 2023 new variable survey#:#svy_save_sync#:#Salva e sincronizza le copie delle domande -survey#:#svy_search_user#:#Search User###29 07 2022 new variable -survey#:#svy_search_user_info#:#Search for users or roles and pick participants.###29 07 2022 new variable +survey#:#svy_search_user#:#Search User###31 03 2023 new variable +survey#:#svy_search_user_info#:#Search for users or roles and pick participants.###31 03 2023 new variable survey#:#svy_search_users#:#Cerca partecipanti -survey#:#svy_select_rater#:#Select Rater###29 07 2022 new variable +survey#:#svy_select_rater#:#Select Rater###31 03 2023 new variable survey#:#svy_selected_user_data_deleted#:#I dati di partecipazione al sondaggio degli utenti selezionati sono stati rimossi con successo -survey#:#svy_self_ev_access_results_all#:#Access to Self-Evaluations of All Participants -survey#:#svy_self_ev_access_results_none#:#No Access to Results -survey#:#svy_self_ev_access_results_own#:#Access to Own Self-Evaluations -survey#:#svy_self_ev_info#:#Use for self evaluation. -survey#:#svy_self_ev_mode#:#Self-Evaluation Only +survey#:#svy_self_ev_access_results_all#:#Accesso alle autovalutazioni di tutti i partecipanti +survey#:#svy_self_ev_access_results_none#:#Nessun accesso ai risultati +survey#:#svy_self_ev_access_results_own#:#Accesso alle proprie autovalutazioni +survey#:#svy_self_ev_info#:#Utilizzare per l'autovalutazione. +survey#:#svy_self_ev_mode#:#Solo autovalutazione survey#:#svy_settings_section_access#:#Amministrare il sondaggio: Accesso survey#:#svy_settings_section_before_start#:#Informazioni prima di iniziare il sondaggio survey#:#svy_settings_section_finishing#:#Terminare il sondaggio -survey#:#svy_settings_section_question_behaviour#:#Administering the Survey: Behaviour of the Question +survey#:#svy_settings_section_question_behaviour#:#Gestione del sondaggio: comportamento della domanda survey#:#svy_settings_section_reminders#:#Promemoria survey#:#svy_show_questiontitles#:#Mostra i titoli delle domande nel sondaggio survey#:#svy_skl_comp_assignm_not_supported#:#L'assegnazione delle competenze non è supportata per questo tipo di domanda. -survey#:#svy_sum_score#:#Sum Score###29 07 2022 new variable -survey#:#svy_type_of_rater#:#Type of Rater###29 07 2022 new variable +survey#:#svy_sum_score#:#Sum Score +survey#:#svy_type_of_rater#:#Type of Rater###31 03 2023 new variable survey#:#svy_view_own_results#:#Visualizza le risposte date -survey#:#svy_wrong_or_expired_code#:#Sorry, you entered an invalid or expired code.###26 08 2024 new variable -survey#:#text_maximum_chars_allowed#:#Per favore non inserire pi& -survey#:#text_question_not_filled_out#:#Per favore, riempi il campo della risposta! +survey#:#svy_wrong_or_expired_code#:#Sorry, you entered an invalid or expired code.###31 03 2023 new variable +survey#:#text_maximum_chars_allowed#:#Non inserire più di un massimo di %s caratteri. Tutti i caratteri in eccedenza saranno tagliati. +survey#:#text_question_not_filled_out#:#Per favore, riempi ogni campo di risposta! survey#:#unfold#:#Apri blocco di domande survey#:#upper_limit#:#Limite superiore survey#:#use_anonymous_id#:#Mostra il codice del sondaggio @@ -16989,47 +16984,47 @@ survey#:#users_invited#:#%s degli utenti sono stati invitati survey#:#users_skipped#:#Utenti che hanno saltato survey#:#values#:#Valori survey#:#vertical#:#verticale -survey#:#warning_question_not_complete#:#La domanda non & +survey#:#warning_question_not_complete#:#La domanda non è completa! survey#:#workingtime#:#Tempo di lavoro svy#:#survey_360_appraisees_remind_info#:#Se l’autovalutazione è attivata, ai valutati che non hanno ancora terminato il sondaggio verrà inviato un promemoria. svy#:#survey_360_raters_remind_info#:#Ai valutatori che non hanno ancora terminato il sondaggio verrà inviato un promemoria. -svy#:#svy_0_open_appraisees#:#You cannot perform the survey for any appraisee anymore.###28 10 2024 new variable -svy#:#svy_all_pages#:#All Pages###29 07 2022 new variable -svy#:#svy_all_participants#:#All Participants###29 07 2022 new variable -svy#:#svy_all_questions#:#All Questions###29 07 2022 new variable -svy#:#svy_code#:#Access Code###28 10 2024 new variable -svy#:#svy_codes#:#Access Codes###07 02 2020 new variable -svy#:#svy_current_page#:#Current Page###29 07 2022 new variable -svy#:#svy_finish_survey#:#Finish survey '%1'###07 02 2020 new variable -svy#:#svy_finished_x_appraisees#:#You have finished the survey for %s appraisee(s).###28 10 2024 new variable -svy#:#svy_information#:#Information###28 10 2024 new variable -svy#:#svy_invite_participants#:#Invite Participants###07 02 2020 new variable -svy#:#svy_link_to_svy#:#Link to Survey###26 08 2024 new variable -svy#:#svy_part_overview#:#Overview###07 02 2020 new variable -svy#:#svy_placeholders_label#:#Available Placeholders###26 08 2024 new variable -svy#:#svy_print_selection#:#Print View Selection###29 07 2022 new variable -svy#:#svy_remove_all_participants#:#Remove all Participants###07 02 2020 new variable -svy#:#svy_remove_participants#:#Remove Participants###07 02 2020 new variable -svy#:#svy_selected_participants#:#Selected Participants###29 07 2022 new variable -svy#:#svy_selected_questions#:#Selected Questions###29 07 2022 new variable -svy#:#svy_selection#:#Selection###29 07 2022 new variable -svy#:#svy_status#:#Status###07 02 2020 new variable -svy#:#svy_status_finished#:#Finished###07 02 2020 new variable -svy#:#svy_status_in_progress#:#In Progress###07 02 2020 new variable -svy#:#svy_status_invited#:#Invited###07 02 2020 new variable -svy#:#svy_user_added_appraisee#:#Survey '%1'###26 08 2024 new variable -svy#:#svy_user_added_appraisee_close_mail#:#The survey has been closed for your raters.###26 08 2024 new variable -svy#:#svy_user_added_appraisee_mail#:#You have been added to the survey as an appraisee.###26 08 2024 new variable -svy#:#svy_user_added_rater#:#Survey '%1'###26 08 2024 new variable -svy#:#svy_user_added_rater_mail#:#You have been added as a rater to the survey.###26 08 2024 new variable -svy#:#svy_user_added_rater_reminder_mail#:#Please finish to rate the following appraisees:###26 08 2024 new variable -svy#:#svy_user_not_found#:#User not found.###26 08 2024 new variable -svy#:#svy_users_invited#:#Users have been invited.###07 02 2020 new variable -svy#:#svy_x_appraisees_closed_for_raters#:#%s appraisee(s) has/have closed the survey for raters.###28 10 2024 new variable -svy#:#svy_x_open_appraisees#:#%s appraisee(s) are open for you to rate.###28 10 2024 new variable -svy#:#svy_your_appraisees#:#Your Appraisees###28 10 2024 new variable -svy#:#svy_your_raters#:#Your Raters###28 10 2024 new variable -svy#:#svy_your_raters_finished#:#%s of your raters have finished the survey.###28 10 2024 new variable +svy#:#svy_0_open_appraisees#:#There are no more appraisees for you to rate or the survey is no longer open to raters.###28 11 2025 new variable +svy#:#svy_all_pages#:#All Pages###31 03 2023 new variable +svy#:#svy_all_participants#:#All Participants###31 03 2023 new variable +svy#:#svy_all_questions#:#All Questions###31 03 2023 new variable +svy#:#svy_code#:#Access Code###28 11 2025 new variable +svy#:#svy_codes#:#Codici di accesso +svy#:#svy_current_page#:#Current Page###31 03 2023 new variable +svy#:#svy_finish_survey#:#Finish survey '%1' +svy#:#svy_finished_x_appraisees#:#You have already completed the survey for %s appraisee(s).###28 11 2025 new variable +svy#:#svy_information#:#Information###28 11 2025 new variable +svy#:#svy_invite_participants#:#Invita partecipanti +svy#:#svy_link_to_svy#:#Link to Survey###31 03 2023 new variable +svy#:#svy_part_overview#:#Panoramica +svy#:#svy_placeholders_label#:#Verfügbare Platzhalter###14 02 2024 new variable +svy#:#svy_print_selection#:#Print View Selection###31 03 2023 new variable +svy#:#svy_remove_all_participants#:#Rimuovi tutti i partecipanti +svy#:#svy_remove_participants#:#Rimuovi partecipanti +svy#:#svy_selected_participants#:#Selected Participants###31 03 2023 new variable +svy#:#svy_selected_questions#:#Selected Questions###31 03 2023 new variable +svy#:#svy_selection#:#Selection###31 03 2023 new variable +svy#:#svy_status#:#Stato +svy#:#svy_status_finished#:#Finito +svy#:#svy_status_in_progress#:#In Progress +svy#:#svy_status_invited#:#Invitato +svy#:#svy_user_added_appraisee#:#Survey '%1'###31 03 2023 new variable +svy#:#svy_user_added_appraisee_close_mail#:#The survey has been closed for your raters.###31 03 2023 new variable +svy#:#svy_user_added_appraisee_mail#:#You have been added to the survey as an appraisee.###31 03 2023 new variable +svy#:#svy_user_added_rater#:#Survey '%1'###31 03 2023 new variable +svy#:#svy_user_added_rater_mail#:#You have been added as a rater to the survey.###31 03 2023 new variable +svy#:#svy_user_added_rater_reminder_mail#:#Please finish to rate the following appraisees:###31 03 2023 new variable +svy#:#svy_user_not_found#:#User not found.###31 03 2023 new variable +svy#:#svy_users_invited#:#Gli utenti sono stati invitati. +svy#:#svy_x_appraisees_closed_for_raters#:#The survey has been closed to raters by %s appraisee(s).###28 11 2025 new variable +svy#:#svy_x_open_appraisees#:#You have %s appraisee(s) awaiting your feedback.###28 11 2025 new variable +svy#:#svy_your_appraisees#:#Your Appraisees###28 11 2025 new variable +svy#:#svy_your_raters#:#Your Raters###28 11 2025 new variable +svy#:#svy_your_raters_finished#:#%s of your raters have finished the survey.###28 11 2025 new variable sysc#:#sysc_action_list_tree#:#Crea dump dell’albero del repository sysc#:#sysc_action_repair#:#Ripara sysc#:#sysc_action_show_tree#:#Mostra dump dell’albero del repository @@ -17037,10 +17032,10 @@ sysc#:#sysc_action_validate#:#Convalida sysc#:#sysc_administrate_deleted#:#Amministra oggetti eliminati sysc#:#sysc_btn_tree_missing#:#Ripristina mancante sysc#:#sysc_btn_tree_structure#:#Ricrea struttura ad albero -sysc#:#sysc_completed_num#:#Fullfilled Tasks +sysc#:#sysc_completed_num#:#Compiti svolti sysc#:#sysc_cron_empty_trash#:#Elimina cestino sysc#:#sysc_cron_empty_trash_desc#:#Se abilitato, il cestino del repository verrà eliminato in base a determinati criteri (età, tipo di oggetto o numero massimo di oggetti). -sysc#:#sysc_failed_num#:#Not Fullfilled Tasks +sysc#:#sysc_failed_num#:#Attività non soddisfatte sysc#:#sysc_groups#:#Gruppi di controllo del sistema sysc#:#sysc_grp_tree#:#Albero repository sysc#:#sysc_grp_tree_desc#:#Esegue un’analisi della struttura e stampa i nodi di struttura insieme ai dati dell’analisi. @@ -17073,102 +17068,102 @@ sysc#:#sysc_trash_limit_type#:#Limite per tipo sysc#:#sysc_trash_remove#:#Rimuovi oggetti eliminati dal sistema sysc#:#sysc_trash_remove_info#:#Rimuovi oggetti eliminati (nel cestino) dal sistema sysc#:#sysc_trash_restore#:#Ripristina oggetti eliminati -sysc#:#sysc_trash_restore_info#:#Restore deleted objects from trash bin and move the to the "Recovery Folder" -sysc#:#sysc_tree_duplicate_failures#:#Found duplicate entries in tree structure. Number of duoplicate entries +sysc#:#sysc_trash_restore_info#:#Ripristina gli oggetti eliminati dal cestino e sposta la "Cartella di ripristino" +sysc#:#sysc_tree_duplicate_failures#:#Trovate voci duplicate nella struttura ad albero. Numero di voci duplicate sysc#:#sysc_tree_list_failures#:#È stato creato un dump dell’albero del repository. Numero degli errori nella struttura ad albero: sysc#:#sysc_tree_missing_failures#:#Voci mancanti trovate nella struttura ad albero. Numero delle voci mancanti: sysc#:#sysc_tree_structure_failures#:#Numero dei guasti nella struttura ad albero (Relazione principale): -tagging#:#no_tag_text_1#:#You have not yet used any tags. To do this, you must take two steps:###29 07 2022 new variable -tagging#:#no_tag_text_2#:#Click on '%s' and select a learning object from the available offer, e.g. a learning module or a forum.###29 07 2022 new variable -tagging#:#no_tag_text_3#:#To attach any tags to the object select 'Set Tags' from the actions menu.###29 07 2022 new variable +tagging#:#no_tag_text_1#:#Non hai utilizzato ancora alcun tag. Per farlo, devi seguire due passaggi: +tagging#:#no_tag_text_2#:#Clicca su '%s' e selezione un oggetto formativo dalla variabile offerta, ad esempio un modulo formativo o un forum. +tagging#:#no_tag_text_3#:#Per associare qualsiasi tag all'ggetto, seleziona "Imposta Tag" dal menù delle azioni. tagging#:#tag_remove_tags_of_obj_without_access#:#Rimuovi tag tagging#:#tag_some_obj_tagged_without_access#:#Non si hanno più le autorizzazione per accedere ad alcuni degli oggetti contrassegnati. Il tag deve essere rimosso per questi oggetti? tagging#:#tag_tags_deleted#:#Il tag è stato rimosso dagli oggetti non accessibili. tagging#:#tagging_all_users#:#Tutti gli utenti tagging#:#tagging_edit_settings#:#Modifica le impostazioni tagging#:#tagging_enable_all_users#:#Mostra i tag di tutti gli utenti -tagging#:#tagging_enable_all_users_info#:#Aggiundi una sezione "Tutti gli utenti" alle scrren info che elenchi tutti i tag di tutti gli utenti legati alla risorsa. -tagging#:#tagging_enable_tagging#:#Attiva il Tagging -tagging#:#tagging_forbidden_tags#:#Tags negati -tagging#:#tagging_no_obj_for_tag#:#No Resources tagged with %s.###29 07 2022 new variable -tagging#:#tagging_no_perm_write#:#You have no permission to change this data.###28 10 2024 new variable -tagging#:#tagging_other_users#:#Other Users +tagging#:#tagging_enable_all_users_info#:#Aggiungi una sezione "Tutti gli utenti" alle screen info che elenchi tutti i tag di tutti gli utenti legati alla risorsa. +tagging#:#tagging_enable_tagging#:#Attiva il tagging +tagging#:#tagging_forbidden_tags#:#Tags vietati +tagging#:#tagging_no_obj_for_tag#:#No Resources tagged with %s.###09 03 2022 new variable +tagging#:#tagging_no_perm_write#:#You have no permission to change this data.###10 12 2024 new variable +tagging#:#tagging_other_users#:#Tag di altri utenti tagging#:#tagging_resources_for_tag#:#Risorse taggate col %s tagging#:#tagging_search_users#:#Cerca utenti tagging#:#tagging_set_tag#:#Imposta tag tagging#:#tagging_settings#:#Impostazioni tagging#:#tagging_tag#:#Tag -tagging#:#tagging_tag_info#:#Per assegnare un tag ad una risorsa, apri la schermata info delle risorse ed inserisci il tuo tag. -tagging#:#tagging_tags#:#Tag +tagging#:#tagging_tag_info#:#Per assegnare un tag ad una risorsa, apri la schermata info della risorsa ed inserisci il tuo tag. +tagging#:#tagging_tags#:#Tags tagging#:#tagging_users_using_tag#:#Utenti che utilizzano i tag -task#:#task_deadline#:#End###07 02 2020 new variable -task#:#task_derived_tasks#:#Tasks###07 02 2020 new variable -task#:#task_details#:#Details###07 02 2020 new variable -task#:#task_no_task_items#:#Es sind keine To-Dos für Sie vorhanden.###07 02 2020 new variable -task#:#task_no_tasks#:#You do not have any open tasks.###07 02 2020 new variable -task#:#task_start#:#Start###07 02 2020 new variable -task#:#task_task#:#Task###07 02 2020 new variable -task#:#task_tasks_with_deadline#:#With Deadline###07 02 2020 new variable -task#:#task_tasks_without_deadline#:#Without Deadline###07 02 2020 new variable +task#:#task_deadline#:#Fine +task#:#task_derived_tasks#:#Attività +task#:#task_details#:#Dettagli +task#:#task_no_task_items#:#Non ci sono attività per te. +task#:#task_no_tasks#:#Non hai nessuna attività aperta. +task#:#task_start#:#Inizia +task#:#task_task#:#Attività +task#:#task_tasks_with_deadline#:#Con scadenza +task#:#task_tasks_without_deadline#:#Senza scadenza tax#:#obj_taxn#:#Nodo tax#:#tax_add_taxonomy#:#Aggiungi tassonomia tax#:#tax_added#:#La tassonomia è stata creata. -tax#:#tax_admin_settings_repository#:#Tassonomie repository +tax#:#tax_admin_settings_repository#:#Repository delle tassonomie tax#:#tax_alphabetical#:#Alfabetico tax#:#tax_assigned_items#:#Voci assegnate tax#:#tax_confirm_deletion#:#Vuoi davvero eliminare l’intera tassonomia e tutte le sue relazioni? tax#:#tax_create_node#:#Crea nodo -tax#:#tax_item_sorting#:#Supporto ordinamento degli elementi assegnati +tax#:#tax_item_sorting#:#Supportare l'ordinamento degli elementi assegnati tax#:#tax_manual#:#Manuale -tax#:#tax_max_one_tax#:#Puoi utilizzare al massimo una tassonomia in questo contesto. +tax#:#tax_max_one_tax#:#Puoi utilizzare solo una tassonomia in questo contesto. tax#:#tax_new_tax_node#:#Nuovo nodo tax#:#tax_node#:#Nodo tax#:#tax_node_sorting#:#Ordinamento dei nodi tax#:#tax_nodes#:#Nodi tax#:#tax_order#:#Ordine -tax#:#tax_order_nr#:#Numero Ordine -tax#:#tax_please_select_target#:#Si prega di selezionare la destinazione. -tax#:#tax_target_within_nodes#:#The target must not be a subnode of the selected items. -tax#:#tax_tax_assignment#:#Assegnazione tassonomia +tax#:#tax_order_nr#:#Numero dell ordine +tax#:#tax_please_select_target#:#Si prega di selezionare la destinazione! +tax#:#tax_target_within_nodes#:#Il target non può essere un nodo secondario degli elementi selezionati. +tax#:#tax_tax_assignment#:#Assegnazione della tassonomia tax#:#tax_tax_deleted#:#La tassonomia è stata eliminata. tax#:#tax_tax_settings#:#Impostazioni tassonomia tax#:#tax_taxonomy#:#Tassonomia -tbl#:#tbl_export_csv#:#Export .csv -tbl#:#tbl_export_excel#:#Export .xls -tos#:#tos_accept_usr_agreement_anonymous#:#Terms of Service###26 08 2024 new variable -tos#:#tos_accept_usr_agreement_anonymous_intro#:#Before you proceed to ILIAS you accept the following Terms of Service.###26 08 2024 new variable -tos#:#tos_account_reg_not_possible#:#A self registration is not possible because of a missing user agreement. Please contact your <a href="%1$s">system administrator</a> for further information. -tos#:#tos_agree_date#:#ToS agreed on###26 08 2024 new variable +tbl#:#tbl_export_csv#:#Esporta .csv +tbl#:#tbl_export_excel#:#Esporta .xls +tos#:#tos_accept_usr_agreement_anonymous#:#Terms of Service###18 06 2024 new variable +tos#:#tos_accept_usr_agreement_anonymous_intro#:#Before you proceed to ILIAS you accept the following Terms of Service.###18 06 2024 new variable +tos#:#tos_account_reg_not_possible#:#Una registrazione automatica non è possibile a causa del contratto utente mancante. Per favore contatta il tuo<a href="%1$s">amministratore di sistema</a> per maggiori informazioni. +tos#:#tos_agree_date#:#ToS agreed on###30 04 2024 new variable tos#:#tos_agreement#:#Termini di servizio -tos#:#tos_disabled_no_docs_left#:#The user agreements are now disabled, because all documents have been deleted. Please create at least one document before enabling the user agreements again. -tos#:#tos_last_reset_date#:#I termini di servizio sono stati azzerati %s. -tos#:#tos_never_reset#:#The terms of service have not been reset, yet. +tos#:#tos_disabled_no_docs_left#:#I contratti utente sono ora disabilitati, poiché tutti i documenti sono stati eliminati. Si prega di creare almeno un documento prima di abilitare nuovamente gli accordi utente. +tos#:#tos_last_reset_date#:#Gli accordi utente sono stati reimpostati l'ultima volta il %s. Reimposta il contratto utente solo se nel frattempo è cambiato e desideri approvare il contratto modificato. +tos#:#tos_never_reset#:#I termini di servizio non sono ancora stati ripristinati. tos#:#tos_no_documents_exist#:#Attualmente non ci sono termini di servizio per ogni lingua installata. tos#:#tos_no_documents_exist_cant_save#:#Attualmente non ci sono termini di servizio per ogni lingua installata. Si prega di aggiungere almeno un documento per ogni lingua installata. -tos#:#tos_reset_for_all_users#:#Reset Terms of Service###26 08 2024 new variable -tos#:#tos_reset_successful#:#The terms of service have been reset successfully. +tos#:#tos_reset_for_all_users#:#Reset Terms of Service###30 04 2024 new variable +tos#:#tos_reset_successful#:#I termini di servizio sono stati ripristinati correttamente. tos#:#tos_status_desc#:#Se attivato, gli utenti sono costretti ad accettare i termini di servizio prima di poter entrare in ILIAS. -tos#:#tos_status_enable#:#Consentito -tos#:#tos_sure_reset_tos#:#Are you sure you want to reset the terms of service for all users in system? This also applies to those accounts that are used for the SOAP webservices, the chat server, or the cron job. -tos#:#tos_withdrawal_usr_deletion#:#Account Deletion Upon Withdrawal From Terms of Service###29 07 2022 new variable -tos#:#tos_withdrawal_usr_deletion_desc#:#If a user withdraws their acceptance from a previously accepted Terms of Service document, this will result in the deletion of the user’s account.###26 08 2024 new variable -trac#:#cmix_lp_mode_deactivated#:#Learning Progress is Deactivated###07 02 2020 new variable -trac#:#cmix_lp_mode_deactivated_info#:#The learning progress status is not displayed and does not influence parent objects.###07 02 2020 new variable -trac#:#cmix_lp_mode_when_completed#:#Completed when 'completed'###07 02 2020 new variable -trac#:#cmix_lp_mode_when_completed_info#:#ILIAS status 'completed' is set when verb of last relevant xAPI-Statement is 'completed'.###07 02 2020 new variable -trac#:#cmix_lp_mode_when_passed#:#Completed when 'passed'###07 02 2020 new variable -trac#:#cmix_lp_mode_when_passed_info#:#ILIAS status 'completed' is set when verb of last relevant xAPI-Statement is 'passed' or 'satisfied'.###07 02 2020 new variable -trac#:#cmix_lp_mode_when_passed_or_completed#:#Completed when passed or completed###07 02 2020 new variable -trac#:#cmix_lp_mode_when_passed_or_completed_info#:#ILIAS status 'completed' is set when verb of last relevant xAPI-Statement is 'completed' or 'passed' or 'satisfied'.###07 02 2020 new variable -trac#:#cmix_lp_mode_with_failed#:#Also consider failed###07 02 2020 new variable -trac#:#cmix_lp_mode_with_failed_info#:#The status could be 'failed' instead of 'in progress'.###07 02 2020 new variable +tos#:#tos_status_enable#:#Attiva i contratti di utilizzo +tos#:#tos_sure_reset_tos#:#Sei sicuro di voler ripristinare i termini di servizio per tutti gli utenti del sistema? Questo vale anche per quegli account che vengono utilizzati per i servizi web SOAP, il server di chat o il cron job. +tos#:#tos_withdrawal_usr_deletion#:#Eliminazione dell'account in caso di ritiro dei termini di servizio +tos#:#tos_withdrawal_usr_deletion_desc#:#If a user withdraws their acceptance from a previously accepted Terms of Service document, this will result in the deletion of the user’s account.###30 04 2024 new variable +trac#:#cmix_lp_mode_deactivated#:#Il progresso di apprendimento è disattivato +trac#:#cmix_lp_mode_deactivated_info#:#Lo stato di avanzamento dell'apprendimento non viene visualizzato e non influenza gli oggetti padre. +trac#:#cmix_lp_mode_when_completed#:#Completato quando "completato" +trac#:#cmix_lp_mode_when_completed_info#:#Lo stato ILIAS 'completato' è impostato quando il verbo dell'ultima dichiarazione xAPI rilevante è 'completato'. +trac#:#cmix_lp_mode_when_passed#:#Completato quando "superato" +trac#:#cmix_lp_mode_when_passed_info#:#Lo stato ILIAS 'completato' è impostato quando il verbo dell'ultima dichiarazione xAPI rilevante è 'passato' o 'soddisfatto'. +trac#:#cmix_lp_mode_when_passed_or_completed#:#Completato quando superato o completato +trac#:#cmix_lp_mode_when_passed_or_completed_info#:#Lo stato ILIAS 'completato' è impostato quando il verbo dell'ultima dichiarazione xAPI rilevante è 'completato' o 'passato' o 'soddisfatto'. +trac#:#cmix_lp_mode_with_failed#:#Considera anche fallito +trac#:#cmix_lp_mode_with_failed_info#:#Lo stato potrebbe essere "fallito" anziché "in corso". trac#:#create_date_max#:#Ultima registrazione trac#:#create_date_min#:#Prima registrazione trac#:#info_valid_request#:#Tempo massimo disponibile tra due richieste dello stesso utente. trac#:#meta_typical_learning_time#:#Tempo tipico di apprendimento trac#:#obj_types#:#Tipi di oggetto: -trac#:#personal_learning_progress_view_description#:#Ongoing courses with membership###29 10 2025 new variable -trac#:#personal_learning_progress_view_title#:#Your Learning Progress###29 10 2025 new variable +trac#:#personal_learning_progress_view_description#:#Ongoing courses with membership###28 11 2025 new variable +trac#:#personal_learning_progress_view_title#:#Your Learning Progress###28 11 2025 new variable trac#:#read_count_avg#:#Visualizzazioni della pagina media trac#:#registration_filter#:#Data di registrazione trac#:#search_area_info#:#Seleziona un oggetto. @@ -17177,7 +17172,7 @@ trac#:#session_statistics#:#Statistiche di sessione trac#:#trac_aggregation#:#Raggruppamento trac#:#trac_all#:#Tutte trac#:#trac_anonymized#:#Rendi anonimo -trac#:#trac_anonymized_info#:#Se selezionato, tutte le statistiche saranno rese anonime. +trac#:#trac_anonymized_info#:#Se attivato non verranno rilasciati dati personali trac#:#trac_anonymized_info_short#:#(Anonimo) trac#:#trac_assigned#:#Assegnato trac#:#trac_average#:#Media @@ -17185,9 +17180,9 @@ trac#:#trac_begin_at#:#Data di inizio trac#:#trac_closed_expire#:#Timeout trac#:#trac_closed_login#:#Anonimo per l’accesso trac#:#trac_closed_manual#:#Logout -trac#:#trac_closed_misc#:#Vari -trac#:#trac_collection_assign#:#Assegna -trac#:#trac_collection_deassign#:#Rimuovi assegnamento +trac#:#trac_closed_misc#:#Altri +trac#:#trac_collection_assign#:#Selezionare per determinare il progresso dell'apprendimento +trac#:#trac_collection_deassign#:#Rimuovi assegnazione trac#:#trac_collection_manual_learner_changed_ts#:#Cambiato in trac#:#trac_collection_manual_learner_info#:#Il processo di apprendimento per questo oggetto deve essere impostato manualmente. trac#:#trac_collection_manual_learner_lm_info#:#Attiva tutti i capitoli completati. @@ -17196,132 +17191,132 @@ trac#:#trac_collection_tlt_learner_subitem#:#Hai utilizzato %s del %s necessario trac#:#trac_comment#:#Commento trac#:#trac_completed#:#Completato trac#:#trac_cron_info#:#Si prega di attivare le "Statistiche oggetti" cron job per raccogliere i dati. -trac#:#trac_crs_objects#:#Learning progress of course members +trac#:#trac_crs_objects#:#Progressi di apprendimento dei membri del corso trac#:#trac_current#:#Attuale trac#:#trac_current_system_load#:#Carico di sistema corrente trac#:#trac_data_deleted#:#I dati sono stati eliminati. trac#:#trac_defaults#:#Stato di completamento -trac#:#trac_defaults_inactive#:#Disattiva -trac#:#trac_defaults_info#:#Imposta la modalità di determinazione dello stato di completamento per i tipi di oggetti supportati. Utilizzata da alcuni tipi di badge. +trac#:#trac_defaults_inactive#:#Tracciamento inattivo +trac#:#trac_defaults_info#:#Imposta la modalità di determinazione dello stato di completamento per i tipi di oggetti supportati. Utilizzata da alcuni tipi di badge e certificati. trac#:#trac_delete_data#:#Elimina dati trac#:#trac_determines_learning_progress#:#Determina il progresso dell'apprendimento -trac#:#trac_edit_collection#:#Assegna le risorse del corso. Se lo stato di tutti gli oggetti & +trac#:#trac_edit_collection#:#Si prega di assegnare materiali. Se lo stato di tutti gli elementi assegnati è "Completato", lo stato generale viene completato dall'utente. trac#:#trac_end_at#:#Data di fine trac#:#trac_failed#:#Non riuscito trac#:#trac_figure#:#Figura chiave -trac#:#trac_filter_area#:#Area: -trac#:#trac_filter_has_status#:#Show not attempted objects -trac#:#trac_filter_hidden#:#Nascosto: +trac#:#trac_filter_area#:#Area +trac#:#trac_filter_has_status#:#Mostra oggetti non utilizzati +trac#:#trac_filter_hidden#:#Nascosto trac#:#trac_first_access#:#Primo accesso -trac#:#trac_first_and_last_access#:#First and Last Acces -trac#:#trac_frm_contribution_num_postings#:#Minimum number of Postings###29 07 2022 new variable -trac#:#trac_frm_contribution_num_postings_info_p#:#%s: %s Posts###26 08 2024 new variable -trac#:#trac_frm_contribution_num_postings_info_s#:#%s: %s Post###26 08 2024 new variable -trac#:#trac_group_materials#:#Group Materials -trac#:#trac_group_materials_save#:#Save Number of Obligatory Materials -trac#:#trac_grouped_material_obligatory_err#:#Il numero di materiali che devono essere passati deve essere maggiore di 0 e minore del numero di materiali del raggruppamento. +trac#:#trac_first_and_last_access#:#Primo e ultimo accesso +trac#:#trac_frm_contribution_num_postings#:#Minimum number of Postings###31 03 2023 new variable +trac#:#trac_frm_contribution_num_postings_info_p#:#%s: %s Postings###30 04 2024 new variable +trac#:#trac_frm_contribution_num_postings_info_s#:#%s: %s Posting###30 04 2024 new variable +trac#:#trac_group_materials#:#Crea raggruppamenti con materiali opzionali +trac#:#trac_group_materials_save#:#Salva il numero di materiali obbligatori +trac#:#trac_grouped_material_obligatory_err#:#Il numero di materiali che devono essere superati deve essere maggiore di 0 e minore del numero di materiali del raggruppamento. trac#:#trac_hide#:#Nascondi trac#:#trac_hide_selected#:#Nascondi elementi selezionati trac#:#trac_in_progress#:#In esecuzione -trac#:#trac_info_edited#:#Modifica lo stato a & +trac#:#trac_info_edited#:#Imposta lo stato su "Completato" se ritieni di aver elaborato tutto il contenuto. trac#:#trac_last_access#:#Ultimo accesso trac#:#trac_last_aggregation#:#Ultimo raggruppamento trac#:#trac_learning_progress#:#Progressi di apprendimento -trac#:#trac_learning_progress_of#:#Lernfortschritt von %s -trac#:#trac_learning_progress_settings_info#:#Activate the display of the following values inside the Learning Progress tables: -trac#:#trac_lhist_obj_completed#:#$1$ was completed. -trac#:#trac_lhist_obj_completed_in#:#$1$ was completed in $2$. +trac#:#trac_learning_progress_of#:#Progressi di apprendimento da %s +trac#:#trac_learning_progress_settings_info#:#Attiva la visualizzazione dei seguenti valori nelle tabelle Avanzamento apprendimento: +trac#:#trac_lhist_obj_completed#:#$1$ è stato terminato. +trac#:#trac_lhist_obj_completed_in#:#$1$ è stato completato in $2$. trac#:#trac_log_info#:#Ultimo raggruppamento: %s (Elementi non elaborati: %s) trac#:#trac_log_info_link#:#Aggiorna trac#:#trac_long_system_load#:#A lungo termine -trac#:#trac_lp_determination#:#Learning Progress Status Determination -trac#:#trac_lp_determination_info_crs#:#Select the items that determine the overall learning progress status of the course. +trac#:#trac_lp_determination#:#Determinazione dello stato di avanzamento dell'apprendimento +trac#:#trac_lp_determination_info_crs#:#Seleziona gli elementi che determinano lo stato generale di avanzamento dell'apprendimento del corso. trac#:#trac_lp_determination_info_crs_tutor#:#Questa selezione non è connessa allo stato di avanzamento dell'apprendimento. trac#:#trac_lp_determination_info_mob#:#Seleziona gli elementi che determinano lo stato generale di avanzamento dell'apprendimento del Mediacast trac#:#trac_lp_determination_info_sco#:#Selezionare gli elementi che determinano lo stato generale di avanzamento dell'apprendimento del modulo di apprendimento SCORM. trac#:#trac_lp_determination_tutor#:#Visualizzazione di oggetti in corso di apprendimento -trac#:#trac_lp_learner_access#:#View Own Learning Progress###29 07 2022 new variable +trac#:#trac_lp_learner_access#:#Guarda il tuo avanzamento dell'apprendimento trac#:#trac_lp_learner_access_info#:#Se attivo, gli utenti possono accedere al loro stato di progresso di apprendimento. -trac#:#trac_lp_list_gui#:#Desktop personale, Repository, Cerca +trac#:#trac_lp_list_gui#:#Desktop personale, Repository, Ricerca trac#:#trac_lp_list_gui_info#:#Se attivo, lo stato del progresso di apprendimento è incluso nelle liste degli oggetti. -trac#:#trac_lp_settings_info_parent_container#:#Learning Progress of Parent Objects +trac#:#trac_lp_settings_info_parent_container#:#Progressi di apprendimento degli oggetti padre trac#:#trac_lp_settings_info_parent_legend#:#Lo stato del progresso di apprendimento di questo oggetto è influenzato da "%s". -trac#:#trac_manual_display#:#Visualizzazione in corso di apprendimento -trac#:#trac_manual_is_displayed#:#Viene visualizzato -trac#:#trac_manual_no_display#:#Non visualizzare in corso di apprendimento -trac#:#trac_mark#:#Segno +trac#:#trac_manual_display#:#Mostra in progresso di apprendimento +trac#:#trac_manual_is_displayed#:#Determina il progresso di apprendimento +trac#:#trac_manual_no_display#:#Non mostrare in progresso di apprendimento +trac#:#trac_mark#:#Valutazione trac#:#trac_matrix#:#Visualizzazione matrice trac#:#trac_measure#:#Valore trac#:#trac_members_short#:#Membri trac#:#trac_min_passed#:#Numero minimo di materiali passati: -trac#:#trac_mode#:#Modalit& -trac#:#trac_mode_cmix_compl_or_passed_with_failed#:#Completed when verb 'completed' or 'passed' or 'satisfied' was sent. Verb 'failed' sets status of ILIAS to 'Failed'.###26 08 2024 new variable -trac#:#trac_mode_cmix_compl_or_passed_with_failed_info#:#&nbsp;###26 08 2024 new variable -trac#:#trac_mode_cmix_compl_with_failed#:#Completed when verb 'completed' was sent. Verb 'failed' sets status of ILIAS to 'Failed'.###26 08 2024 new variable -trac#:#trac_mode_cmix_compl_with_failed_info#:#&nbsp;###26 08 2024 new variable -trac#:#trac_mode_cmix_completed#:#Completed when verb 'completed' was sent. Verb 'failed' sets status of ILIAS to 'In Progress'.###26 08 2024 new variable -trac#:#trac_mode_cmix_completed_info#:#&nbsp;###26 08 2024 new variable -trac#:#trac_mode_cmix_completed_or_passed#:#Completed when verb 'completed' or 'passed' or 'satisfied' was sent. Verb 'failed' sets status of ILIAS to 'In Progress'.###26 08 2024 new variable -trac#:#trac_mode_cmix_completed_or_passed_info#:#&nbsp;###26 08 2024 new variable -trac#:#trac_mode_cmix_passed#:#Completed when verb 'passed' or 'satisfied' was sent. Verb 'failed' sets status of ILIAS to 'In Progress'.###26 08 2024 new variable -trac#:#trac_mode_cmix_passed_info#:#&nbsp;###26 08 2024 new variable -trac#:#trac_mode_cmix_passed_with_failed#:#Completed when verb 'passed' or 'satisfied' was sent. Verb 'failed' sets status of ILIAS to 'Failed'.###26 08 2024 new variable -trac#:#trac_mode_cmix_passed_with_failed_info#:#&nbsp;###26 08 2024 new variable -trac#:#trac_mode_collection#:#Collezione di oggetti -trac#:#trac_mode_collection_info#:#Define the materials that will determine the learning progress status. -trac#:#trac_mode_collection_manual#:#Manual by Learner (per Chapter) -trac#:#trac_mode_collection_manual_info#:#Users have to decide for each chapter whether their status is completed or not. -trac#:#trac_mode_collection_mobs#:#Raccolta oggetti multimediali -trac#:#trac_mode_collection_mobs_info#:#Lo stato del processo di apprendimento sarà determinato dallo stato di visualizzazione degli oggetti multimediali selezionati. -trac#:#trac_mode_collection_tlt#:#Typical Learning Time (per Chapter) -trac#:#trac_mode_collection_tlt_info#:#Users who reached the Typical Learning Time of all relevant chapters will gain the status 'Completed'. -trac#:#trac_mode_content_visited#:#Visited -trac#:#trac_mode_content_visited_info#:#Learning progress status is set to 'completed' when object has been presented to user. -trac#:#trac_mode_contribution_to_discussion#:#Contributions to Discussion###29 07 2022 new variable -trac#:#trac_mode_contribution_to_discussion_info#:#The learning progress status will be determined by the number of written postings.###29 07 2022 new variable -trac#:#trac_mode_course_reference#:#Adopted from Course###07 02 2020 new variable -trac#:#trac_mode_course_reference_info#:#The mode is automatically adopted from the course this course link points to.###07 02 2020 new variable -trac#:#trac_mode_deactivated#:#Deattivato -trac#:#trac_mode_deactivated_info_new#:#The learning progress status will not be displayed. -trac#:#trac_mode_event#:#Participation in Sessions -trac#:#trac_mode_event_info#:#The learning progress status will be determined by the participation status. -trac#:#trac_mode_exercise_returned#:#Exercise returned -trac#:#trac_mode_exercise_returned_info#:#The status 'Completed' can be set only by tutors. +trac#:#trac_mode#:#Modalità in progresso di apprendimento +trac#:#trac_mode_cmix_compl_or_passed_with_failed#:#Completato quando è stato inviato il verbo 'completato' o 'passato' o 'soddisfatto'. Il verbo 'Fallito' imposta lo stato di ILIAS su 'Fallito'. +trac#:#trac_mode_cmix_compl_or_passed_with_failed_info#:#&nbsp;###31 03 2023 new variable +trac#:#trac_mode_cmix_compl_with_failed#:#Completato quando è stato inviato il verbo 'completato'. Il verbo 'Fallito' imposta lo stato di ILIAS su 'Fallito'. +trac#:#trac_mode_cmix_compl_with_failed_info#:#&nbsp;###31 03 2023 new variable +trac#:#trac_mode_cmix_completed#:#Completato quando è stato inviato il verbo 'completato'. Il verbo "fallito" imposta lo stato di ILIAS su "In corso". +trac#:#trac_mode_cmix_completed_info#:#&nbsp;###31 03 2023 new variable +trac#:#trac_mode_cmix_completed_or_passed#:#Completato quando è stato inviato il verbo 'completato' o 'passato' o 'soddisfatto'. Il verbo "fallito" imposta lo stato di ILIAS su "In corso". +trac#:#trac_mode_cmix_completed_or_passed_info#:#&nbsp;###31 03 2023 new variable +trac#:#trac_mode_cmix_passed#:#Completato quando è stato inviato il verbo 'passato' o 'soddisfatto'. Il verbo "fallito" imposta lo stato di ILIAS su "In corso". +trac#:#trac_mode_cmix_passed_info#:#&nbsp;###31 03 2023 new variable +trac#:#trac_mode_cmix_passed_with_failed#:#Completato quando è stato inviato il verbo 'passato' o 'soddisfatto'. Il verbo 'Failed' imposta lo stato di ILIAS su 'Failed'. +trac#:#trac_mode_cmix_passed_with_failed_info#:#&nbsp;###31 03 2023 new variable +trac#:#trac_mode_collection#:#Lo stato è determinato sulla base di una selezione di oggetti +trac#:#trac_mode_collection_info#:#Lo stato dell'avanzamento dell'apprendimento dell'oggetto è determinato automaticamente dallo stato degli oggetti selezionati. Dopo aver salvato questa impostazione, gli oggetti desiderati possono essere selezionati in questa pagina. +trac#:#trac_mode_collection_manual#:#L'utente decide autonomamente sullo stato del progresso dell'apprendimento nel rispettivo capitolo. +trac#:#trac_mode_collection_manual_info#:#Gli utenti decidono da soli quando hanno lavorato con successo a un capitolo del modulo di apprendimento. Non appena hai finito di modificare un capitolo, imposta lo stato di questo capitolo su "Modificato" nella scheda "Informazioni". Dopo aver salvato queste impostazioni, è possibile selezionare i capitoli in questa pagina per il progresso dell'apprendimento. +trac#:#trac_mode_collection_mobs#:#Scelta tra gli oggetti multimediali +trac#:#trac_mode_collection_mobs_info#:#Lo stato del processo di apprendimento sarà determinato automaticamente dallo stato di visualizzazione degli oggetti multimediali selezionati. +trac#:#trac_mode_collection_tlt#:#Tempo di apprendimento tipico (per capitolo) +trac#:#trac_mode_collection_tlt_info#:#Lo stato di un utente viene impostato automaticamente in base al tempo che questo utente trascorre a lavorare su un capitolo. Lo stato di un capitolo su "elaborato" viene fornito se il "tempo di apprendimento tipico" di tutti i capitoli rilevanti per il progresso dell'apprendimento viene superato. Dopo aver salvato queste impostazioni, è possibile selezionare i capitoli in questa pagina e definire i "Tempi di apprendimento tipici". +trac#:#trac_mode_content_visited#:#Visitato +trac#:#trac_mode_content_visited_info#:#Lo stato di avanzamento dell'apprendimento è impostato su "completato" quando l'oggetto è stato presentato all'utente. +trac#:#trac_mode_contribution_to_discussion#:#Contributions to Discussion###31 03 2023 new variable +trac#:#trac_mode_contribution_to_discussion_info#:#The learning progress status will be determined by the number of written postings.###31 03 2023 new variable +trac#:#trac_mode_course_reference#:#Ripreso dal corso +trac#:#trac_mode_course_reference_info#:#La modalità viene adottata automaticamente dal percorso a cui punta questo collegamento al corso. +trac#:#trac_mode_deactivated#:#I progressi di apprendimento sono stati disattivati +trac#:#trac_mode_deactivated_info_new#:#Lo stato di avanzamento dell'apprendimento non verrà visualizzato. +trac#:#trac_mode_event#:#Partecipazione a sessioni +trac#:#trac_mode_event_info#:#Lo stato di avanzamento dell'apprendimento sarà determinato dallo stato di partecipazione. +trac#:#trac_mode_exercise_returned#:#Il tutor decide lo stato +trac#:#trac_mode_exercise_returned_info#:#Lo stato 'Completato' può essere impostato solo dai tutor. trac#:#trac_mode_individual_assessment#:#Classificato manualmente dal tutor o dal formatore trac#:#trac_mode_individual_assessment_info#:#La registrazione dell’utente deve essere finalizzata dal tutor al fine di completare l’assegnazione individuale. -trac#:#trac_mode_lti_outcome#:#Mastery Score Must be reached###07 02 2020 new variable -trac#:#trac_mode_lti_outcome_info#:#The Learning Progress will be evaluated from the LTI outcome and the mastery score threshold.###07 02 2020 new variable -trac#:#trac_mode_manual#:#Manuale -trac#:#trac_mode_manual_by_tutor#:#Manual by Tutor -trac#:#trac_mode_manual_by_tutor_info#:#The overall status can only be set by tutors. -trac#:#trac_mode_manual_info#:#Users have to decide whether their status is completed or not. +trac#:#trac_mode_lti_outcome#:#Il punteggio master deve essere raggiunto +trac#:#trac_mode_lti_outcome_info#:#Il Learning Progress sarà valutato in base al risultato LTI e alla soglia del punteggio di padronanza. +trac#:#trac_mode_manual#:#L'utente decide autonomamente lo stato del progresso di apprendimento per l'intero oggetto. +trac#:#trac_mode_manual_by_tutor#:#I tutor monitorano e impostano lo stato +trac#:#trac_mode_manual_by_tutor_info#:#Lo stato generale può essere impostato solo dai tutor. +trac#:#trac_mode_manual_info#:#Gli utenti devono decidere se il loro stato è completato o meno. trac#:#trac_mode_objectives#:#Obiettivi formativi -trac#:#trac_mode_objectives_info#:#The learning progress will be calculated automatically according to the number of passed learning objectives. +trac#:#trac_mode_objectives_info#:#Il progresso dell'apprendimento verrà calcolato automaticamente in base al numero di obiettivi di apprendimento superati. trac#:#trac_mode_plugin#:#Plug-in -trac#:#trac_mode_questions#:#Questions -trac#:#trac_mode_questions_info#:#Users who answered all questions correctly will gain the status 'Completed'. -trac#:#trac_mode_scorm#:#SCORM/AICC -trac#:#trac_mode_scorm_info#:#The learning progress status will be determined by the status of SCO's. -trac#:#trac_mode_scorm_package#:#Automatic by SCORM Course Status -trac#:#trac_mode_scorm_package_info#:#The learning progress status will be determined by the SCORM course package status directly. +trac#:#trac_mode_questions#:#E' stato risposto correttamente a tutte le domande +trac#:#trac_mode_questions_info#:#Gli utenti che hanno risposto correttamente a tutte le domande otterranno lo stato "Completato". +trac#:#trac_mode_scorm#:#Lo stato è determinato sulla base di una selezione di capitoli SCORM (per SCO) +trac#:#trac_mode_scorm_info#:#Lo stato del progresso di apprendimento dell'intero modulo di apprendimento è determinato automaticamente dallo stato dei capitoli selezionati (SCO). Dopo aver salvato questa impostazione, gli SCO desiderati possono essere selezionati in questa pagina. +trac#:#trac_mode_scorm_package#:#Lo stato è determinato dal pacchetto SCORM (intero modulo di apprendimento) +trac#:#trac_mode_scorm_package_info#:#Lo stato di un utente viene impostato automaticamente su "Completato" quando l'intero modulo di apprendimento è stato elaborato. Tutti gli SCO contenuti nel pacchetto vengono presi in considerazione nel processo di apprendimento. trac#:#trac_mode_study_programme#:#Programma di studio completato trac#:#trac_mode_survey_finished#:#Sondaggio terminato trac#:#trac_mode_survey_finished_info#:#Il sondaggio deve essere terminato da un utente per ricevere lo stato di 'Completato'. -trac#:#trac_mode_test_finished#:#Test completato -trac#:#trac_mode_test_finished_info#:#Users have to finish a test completely. -trac#:#trac_mode_test_passed#:#Test superato -trac#:#trac_mode_test_passed_info#:#The test has to be passed by an user to receive the status 'Completed'. -trac#:#trac_mode_tlt#:#Tempo tipico di apprendimento -trac#:#trac_mode_tlt_info#:#Users who reached the Typical Learning Time will gain the status 'Completed'. -trac#:#trac_mode_visited_pages#:#Visited Pages -trac#:#trac_mode_visited_pages_info#:#Users who visited all pages will gain the status ‘Completed’. -trac#:#trac_mode_visits#:#Numero di accessi -trac#:#trac_mode_visits_info#:#Define the number of visits that is required for completing this learning material. +trac#:#trac_mode_test_finished#:#Gli utenti devono completare completamente un test. +trac#:#trac_mode_test_finished_info#:#Lo stato di un utente viene impostato automaticamente su "Modificato" dopo che l'utente ha fatto clic su "Termina test". Non importa se l'utente ha superato o meno il test. +trac#:#trac_mode_test_passed#:#Gli utenti devono superare completamente un test. +trac#:#trac_mode_test_passed_info#:#Lo stato di un utente viene impostato automaticamente su "Modificato" dopo che l'utente ha superato il test. Nella scheda "Impostazioni", nella sezione "Schema di valutazione", è possibile impostare i valori di soglia per il superamento del test. +trac#:#trac_mode_tlt#:#Tempo di apprendimento minimo per l'intero modulo di apprendimento +trac#:#trac_mode_tlt_info#:#Lo stato di un utente viene impostato automaticamente in base al tempo che questo utente trascorre lavorando sul modulo di apprendimento. Lo stato "elaborato" viene assegnato non appena il "tempo di apprendimento tipico" è stato superato. Il "Tempo di apprendimento tipico" del modulo di apprendimento è specificato nella scheda "Metadati". +trac#:#trac_mode_visited_pages#:#Pagine visitate +trac#:#trac_mode_visited_pages_info#:#Gli utenti che hanno visitato tutte le pagine otterranno lo stato "Completato". +trac#:#trac_mode_visits#:#Lo stato viene determinato in base al numero di accessi +trac#:#trac_mode_visits_info#:#Lo stato di un utente viene impostato automaticamente su "Completato" se l'utente ha richiamato il modulo di apprendimento più spesso del numero minimo di chiamate richiesto. Gli utenti possono vedere il numero di chiamate effettuate e la percentuale che soddisfano i requisiti minimi. trac#:#trac_name_of_installation#:#Nome dell’installazione trac#:#trac_no_attempted#:#Non eseguito trac#:#trac_not_accessed#:#Non accceduto trac#:#trac_not_assigned#:#Non assegnato -trac#:#trac_not_attempted#:#Non eseguito +trac#:#trac_not_attempted#:#Non cominciato trac#:#trac_not_completed#:#Non completato trac#:#trac_not_participated#:#Non partecipato trac#:#trac_not_registered#:#Non registrato @@ -17331,28 +17326,28 @@ trac#:#trac_object_owner#:#Proprietario dell'oggetto trac#:#trac_object_stat_access#:#Intensità di utilizzo trac#:#trac_object_stat_admin#:#Gestisci dati trac#:#trac_object_stat_daily#:#Utilizzo giornaliero -trac#:#trac_object_stat_lp#:#Corso di statistica sui progressi di apprendimento +trac#:#trac_object_stat_lp#:#Corso di statistica dello stato di apprendimento trac#:#trac_object_stat_lp_max#:#Max. trac#:#trac_object_stat_lp_min#:#Min. -trac#:#trac_object_stat_types#:#Numero degli oggetto -trac#:#trac_object_statistics#:#Statistiche oggetti +trac#:#trac_object_stat_types#:#Numero degli oggetti +trac#:#trac_object_statistics#:#Statistiche dell'oggetto trac#:#trac_object_statistics_info#:#Se attivati, i dati di base per le statistiche di utilizzo saranno raccolti ed elaborati. trac#:#trac_objects#:#Liste di oggetti -trac#:#trac_others#:#Other +trac#:#trac_others#:#Altri trac#:#trac_participants#:#Mostra partecipanti trac#:#trac_participated#:#Partecipato -trac#:#trac_paths#:#Paths###29 07 2022 new variable +trac#:#trac_paths#:#Paths###31 03 2023 new variable trac#:#trac_percentage#:#Percentuale -trac#:#trac_periodic_system_load#:#Periodica +trac#:#trac_periodic_system_load#:#Visualizzazione periodica del carico trac#:#trac_progress#:#Progressi didattici personali -trac#:#trac_progress_block_title#:#Your Learning Progress###29 10 2025 new variable -trac#:#trac_read_count#:#Numero di accesso -trac#:#trac_read_count_spent_seconds#:#Tempo impiegato/Accesso +trac#:#trac_progress_block_title#:#Your Learning Progress###28 11 2025 new variable +trac#:#trac_read_count#:#Numero di accessi +trac#:#trac_read_count_spent_seconds#:#Tempo impiegato/Accessi trac#:#trac_reference#:#Riferimenti -trac#:#trac_reference_ids_column#:#Reference-Ids###29 07 2022 new variable -trac#:#trac_registered#:#Registrati -trac#:#trac_release_materials#:#Disintegrate Material Group -trac#:#trac_report_date#:#Data di segnalazione +trac#:#trac_reference_ids_column#:#Reference-Ids###31 03 2023 new variable +trac#:#trac_registered#:#Registrato +trac#:#trac_release_materials#:#Sciogliere il raggruppamento con materiali opzionali +trac#:#trac_report_date#:#Data della segnalazione trac#:#trac_report_owner#:#Titolare della segnalazione trac#:#trac_required_visits#:#Numero di accessi richiesto trac#:#trac_sahs_relevant_items#:#SCO @@ -17369,16 +17364,16 @@ trac#:#trac_session_statistics_mode_month#:#Mese trac#:#trac_session_statistics_mode_today#:#Oggi trac#:#trac_session_statistics_mode_week#:#Settimana trac#:#trac_session_statistics_mode_year#:#Anno -trac#:#trac_session_statistics_no_data#:#Non possono essere trovati dati per queste statistiche. -trac#:#trac_sessions_closed#:#Permessi +trac#:#trac_session_statistics_no_data#:#Non ci sono dati per queste statistiche. +trac#:#trac_sessions_closed#:#Uscite trac#:#trac_sessions_opened#:#Accessi trac#:#trac_settings#:#Impostazioni -trac#:#trac_settings_saved#:#Impostazioni salvate -trac#:#trac_short_system_load#:#A breve termine -trac#:#trac_show_graph#:#Mostra grafico -trac#:#trac_show_progress_block#:#Show Personal Progress Chart in ‘Content’-Tab###29 10 2025 new variable -trac#:#trac_show_repository_views#:#Changes in the repository -trac#:#trac_show_repository_views_info#:#Mostra le informazioni di tracking per gli oggetti del repository nella pagina informazioni. +trac#:#trac_settings_saved#:#Le impostazioni sono state salvate +trac#:#trac_short_system_load#:#Storia a breve termine +trac#:#trac_show_graph#:#Mostra come grafico +trac#:#trac_show_progress_block#:#Show Personal Progress Chart in ‘Content’-Tab###28 11 2025 new variable +trac#:#trac_show_repository_views#:#Mostra numero di accessi +trac#:#trac_show_repository_views_info#:#Mostra le informazioni di accesso per gli oggetti del repository nella pagina informazioni. trac#:#trac_spent_seconds#:#Tempo trascorso trac#:#trac_spent_time#:#Tempo trascorso trac#:#trac_status#:#Stato @@ -17386,16 +17381,16 @@ trac#:#trac_status_changed#:#Ultima modifica dello stato trac#:#trac_subitems#:#Mostra elementi secondari trac#:#trac_sum#:#Somma trac#:#trac_summary#:#Riepilogo -trac#:#trac_sure_delete_data#:#Are you sure you want to delete the complete data for the following months? +trac#:#trac_sure_delete_data#:#Vuoi davvero cancellare i dati per i mesi successivi? Ciò rimuove le seguenti statistiche per questo periodo: intensità di utilizzo, corso della giornata, statistiche sullo stato di apprendimento del corso e numero di oggetti. trac#:#trac_sync_obj_stats#:#Aggiorna dati trac#:#trac_sync_obj_stats_success#:#I dati sono stati aggiornati. trac#:#trac_sync_session_stats#:#Raggruppa dati trac#:#trac_sync_session_stats_success#:#I dati sono stati raggruppati con successo. -trac#:#trac_time_passed#:#Modifica del tempo superato +trac#:#trac_time_passed#:#Tempo di elaborazione superato trac#:#trac_title#:#Titolo trac#:#trac_title_description#:#Titolo/Descrizione trac#:#trac_total_online#:#Tempo totale di connessione -trac#:#trac_trash#:#sposta nel Cestino +trac#:#trac_trash#:#di cui nel cestino trac#:#trac_update_edit_user#:#Impostazioni salvate trac#:#trac_updated_status#:#Stato dei progressi didattici salvato trac#:#trac_user_data#:#Dati utente @@ -17405,108 +17400,108 @@ trac#:#trac_view_list#:#Torna alla lista trac#:#trac_view_mode#:#Visualizza modalità trac#:#trac_view_mode_all#:#Tutti gli oggetti trac#:#trac_view_mode_collection#:#Solo gli oggetti che determinano lo stato generale -trac#:#trac_visits#:#Numero delle visite -trac#:#trac_visits_info#:#Conta le pagine viste nello stesso accesso come una. +trac#:#trac_visits#:#Numero minimo di chiamate +trac#:#trac_visits_info#:#Una chiamata viene conteggiata come una nuova chiamata solo dopo %s secondi. trac#:#user_total#:#Totale utenti trac#:#view_mode#:#Visualizza modalità -trac#:#view_mode_all#:#All###29 10 2025 new variable -trac#:#view_mode_current#:#Current###29 10 2025 new variable -trac#:#view_mode_future#:#Future###29 10 2025 new variable -trac#:#view_mode_past#:#Past###29 10 2025 new variable -tstv#:#tstv_create#:#Create Test Verification -tstv#:#tstv_create_info#:#Select a completed test to generate a verification for it -ui#:#1stars#:#one of five stars###26 08 2024 new variable -ui#:#2stars#:#two of five stars###26 08 2024 new variable -ui#:#3stars#:#three of five stars###26 08 2024 new variable -ui#:#4stars#:#four of five stars###26 08 2024 new variable -ui#:#5stars#:#five of five stars###26 08 2024 new variable -ui#:#datatable_close_warning#:#OK###29 10 2025 new variable -ui#:#datatable_multiaction_label#:#Bulk Actions###26 08 2024 new variable -ui#:#datatable_multiactionmodal_actionlabel#:#Action for All Entries###26 08 2024 new variable -ui#:#datatable_multiactionmodal_apply#:#Apply###26 08 2024 new variable -ui#:#datatable_multiactionmodal_listentry#:#Actions for Entire Table###26 08 2024 new variable -ui#:#datatable_multiactionmodal_msg#:#Selected action will affect all entries in this table.###26 08 2024 new variable -ui#:#datatable_multiactionmodal_title#:#Actions for Entire Table###26 08 2024 new variable -ui#:#drilldown_no_items#:#No Matching Elements###26 08 2024 new variable -ui#:#duration_default_label_end#:#end###29 07 2022 new variable -ui#:#duration_default_label_start#:#start###29 07 2022 new variable -ui#:#duration_end_must_not_be_earlier_than_start#:#Start must not be later than end.###29 07 2022 new variable -ui#:#filter_nodes_in#:#Filter Nodes in %s###26 08 2024 new variable -ui#:#footer_icons#:#Footer Icons###28 10 2024 new variable -ui#:#footer_link_groups#:#Footer Link-Groups###28 10 2024 new variable -ui#:#footer_links#:#Footer Links###28 10 2024 new variable -ui#:#footer_permanent_link#:#Footer Permanent Link###28 10 2024 new variable -ui#:#footer_texts#:#Footer Texts###28 10 2024 new variable -ui#:#image_alt_text#:#Alternate Text###29 10 2025 new variable -ui#:#image_purpose_decorative#:#Decorative Image###29 10 2025 new variable -ui#:#image_purpose_informative#:#Informative Image###29 10 2025 new variable -ui#:#image_purpose_user_defined#:#Image Purpose###29 10 2025 new variable -ui#:#label_fieldselection#:#Field Selection###26 08 2024 new variable -ui#:#label_fieldselection_refresh#:#Apply###26 08 2024 new variable -ui#:#label_modeviewcontrol#:#view mode###29 10 2025 new variable -ui#:#label_pagination_limit#:#Pagination Number of Rows###26 08 2024 new variable -ui#:#label_pagination_offset#:#Pagination Offset###26 08 2024 new variable -ui#:#label_sortation#:#Sortation###26 08 2024 new variable -ui#:#order_option_alphabetical_ascending#:#A to Z###26 08 2024 new variable -ui#:#order_option_alphabetical_descending#:#Z to A###26 08 2024 new variable -ui#:#order_option_chronological_ascending#:#Earliest first###26 08 2024 new variable -ui#:#order_option_chronological_descending#:#Most Recent first###26 08 2024 new variable -ui#:#order_option_first#:#first###26 08 2024 new variable -ui#:#order_option_generic_ascending#:#ascending###26 08 2024 new variable -ui#:#order_option_generic_descending#:#descending###26 08 2024 new variable -ui#:#order_option_numerical_ascending#:#0 to 9###26 08 2024 new variable -ui#:#order_option_numerical_descending#:#9 to 0###26 08 2024 new variable -ui#:#presentation_table_collapse#:#collapse all###26 08 2024 new variable -ui#:#presentation_table_expand#:#expand all###26 08 2024 new variable -ui#:#rating_average#:#others rated %s of 5###26 08 2024 new variable -ui#:#reset_stars#:#neutral###26 08 2024 new variable -ui#:#select_node#:#Add node %s to selection###29 10 2025 new variable -ui#:#table_posinput_col_title#:#Position###26 08 2024 new variable -ui#:#ui_chars_max#:#Maximum: -ui#:#ui_chars_min#:#Minimum: -ui#:#ui_chars_remaining#:#Characters remaining: -ui#:#ui_error#:#Error###28 10 2024 new variable -ui#:#ui_error_in_group#:#There is some error in this part.###29 07 2022 new variable -ui#:#ui_error_switchable_group_required#:#Please select an option.###29 07 2022 new variable -ui#:#ui_field_option_filter_clear_search#:#Clear search###29 10 2025 new variable -ui#:#ui_field_option_filter_filtered_results_aria_label#:#List of options - collapsible and filterable###29 10 2025 new variable -ui#:#ui_field_option_filter_no_match#:#There was no match for the search term you entered.###29 10 2025 new variable -ui#:#ui_field_option_filter_no_selection#:#Nothing selected.###29 10 2025 new variable -ui#:#ui_field_option_filter_options_shown#:#Currently showing %s options.###29 10 2025 new variable -ui#:#ui_field_option_filter_screen_reader_hint#:#Start typing and the field options below will be filtered accordingly.###29 10 2025 new variable -ui#:#ui_field_option_filter_search_in#:#Find###29 10 2025 new variable -ui#:#ui_field_option_filter_show_all_options#:#Show all options###29 10 2025 new variable -ui#:#ui_field_option_filter_show_less#:#Show less###29 10 2025 new variable -ui#:#ui_file_input_general_error#:#An error occurred! You can check the JavaScript console of your browser for more information and/or contact your ILIAS system administration about this incident.###29 07 2022 new variable -ui#:#ui_file_input_invalid_amount#:#You cannot upload this many files, please remove some in order to continue.###29 07 2022 new variable -ui#:#ui_file_input_invalid_mime#:#Files of type '%s' are not allowed###29 07 2022 new variable -ui#:#ui_file_input_invalid_size#:#File exceeds the maximum size of %s.###29 07 2022 new variable -ui#:#ui_file_upload_max_nr#:#Max Number of Files:###26 08 2024 new variable -ui#:#ui_invalid_url#:#Invalid URL-format###29 07 2022 new variable -ui#:#ui_link_label#:#Label###29 07 2022 new variable -ui#:#ui_link_url#:#URL###29 07 2022 new variable -ui#:#ui_md_input_edit#:#Edit###26 08 2024 new variable -ui#:#ui_md_input_view#:#View###26 08 2024 new variable -ui#:#ui_nav_sequence_control_label#:#Sequence control for contents below###29 10 2025 new variable -ui#:#ui_nav_sequence_description#:#Used to navigate through this content or trigger actions and filters on the entire sequence.###29 10 2025 new variable -ui#:#ui_pagination_unlimited#:#Unlimited###26 08 2024 new variable -ui#:#ui_select_dropdown_label#:#Please select###26 08 2024 new variable -ui#:#ui_table_no_records#:#No records###26 08 2024 new variable -ui#:#ui_table_order#:#Order###29 10 2025 new variable -ui#:#ui_transcription#:#Transcript###29 07 2022 new variable -ui#:#unselect_node#:#Remove node %s from selection###29 10 2025 new variable -ui#:#vc_sort#:#Sort by:###29 10 2025 new variable -ui#:#warning_url_too_long_msg#:#The amount of selected rows will result in a very large URL; the Server will probably block this request.<br>Please select less rows or perform the action on all entries.###29 10 2025 new variable -user#:#activate_in_profile_fields#:#To change this setting, the user must first be allowed to change their login name under Profile > Profile Fields###29 10 2025 new variable -user#:#administrative_settings#:#Administrative Settings###29 10 2025 new variable +trac#:#view_mode_all#:#All###28 11 2025 new variable +trac#:#view_mode_current#:#Current###28 11 2025 new variable +trac#:#view_mode_future#:#Future###28 11 2025 new variable +trac#:#view_mode_past#:#Past###28 11 2025 new variable +tstv#:#tstv_create#:#Crea certificato del test +tstv#:#tstv_create_info#:#Scegli un test per il quale hai bisogno di un certificato +ui#:#1stars#:#one of five stars###28 11 2025 new variable +ui#:#2stars#:#two of five stars###28 11 2025 new variable +ui#:#3stars#:#three of five stars###28 11 2025 new variable +ui#:#4stars#:#four of five stars###28 11 2025 new variable +ui#:#5stars#:#five of five stars###28 11 2025 new variable +ui#:#datatable_close_warning#:#OK###28 11 2025 new variable +ui#:#datatable_multiaction_label#:#Bulk Actions###30 04 2024 new variable +ui#:#datatable_multiactionmodal_actionlabel#:#operation###30 04 2024 new variable +ui#:#datatable_multiactionmodal_apply#:#Apply###18 06 2024 new variable +ui#:#datatable_multiactionmodal_listentry#:#apply to all objects###30 04 2024 new variable +ui#:#datatable_multiactionmodal_msg#:#<b>Caution!</b> multiple objects affected.###30 04 2024 new variable +ui#:#datatable_multiactionmodal_title#:#Operation on multiple objects###30 04 2024 new variable +ui#:#drilldown_no_items#:#No Matching Elements###28 11 2025 new variable +ui#:#duration_default_label_end#:#end###31 03 2023 new variable +ui#:#duration_default_label_start#:#start###31 03 2023 new variable +ui#:#duration_end_must_not_be_earlier_than_start#:#Start must not be later than end.###09 03 2022 new variable +ui#:#filter_nodes_in#:#Filter Nodes in %s###28 11 2025 new variable +ui#:#footer_icons#:#Footer Icons###28 11 2025 new variable +ui#:#footer_link_groups#:#Footer Link-Groups###28 11 2025 new variable +ui#:#footer_links#:#Footer Links###28 11 2025 new variable +ui#:#footer_permanent_link#:#Footer Permanent Link###28 11 2025 new variable +ui#:#footer_texts#:#Footer Texts###28 11 2025 new variable +ui#:#image_alt_text#:#Alternate Text###28 11 2025 new variable +ui#:#image_purpose_decorative#:#Decorative Image###28 11 2025 new variable +ui#:#image_purpose_informative#:#Informative Image###28 11 2025 new variable +ui#:#image_purpose_user_defined#:#Image Purpose###28 11 2025 new variable +ui#:#label_fieldselection#:#Field Selection###30 04 2024 new variable +ui#:#label_fieldselection_refresh#:#Apply###30 04 2024 new variable +ui#:#label_modeviewcontrol#:#view mode###28 11 2025 new variable +ui#:#label_pagination_limit#:#Pagination Number of Rows###30 04 2024 new variable +ui#:#label_pagination_offset#:#Pagination Offset###30 04 2024 new variable +ui#:#label_sortation#:#Sortation###30 04 2024 new variable +ui#:#order_option_alphabetical_ascending#:#A to Z###30 04 2024 new variable +ui#:#order_option_alphabetical_descending#:#Z to A###30 04 2024 new variable +ui#:#order_option_chronological_ascending#:#Earliest first###30 04 2024 new variable +ui#:#order_option_chronological_descending#:#Most Recent first###30 04 2024 new variable +ui#:#order_option_first#:#first###30 04 2024 new variable +ui#:#order_option_generic_ascending#:#ascending###30 04 2024 new variable +ui#:#order_option_generic_descending#:#descending###30 04 2024 new variable +ui#:#order_option_numerical_ascending#:#0 to 9###30 04 2024 new variable +ui#:#order_option_numerical_descending#:#9 to 0###30 04 2024 new variable +ui#:#presentation_table_collapse#:#collapse all###30 04 2024 new variable +ui#:#presentation_table_expand#:#expand all###30 04 2024 new variable +ui#:#rating_average#:#Others rated %s of 5###28 11 2025 new variable +ui#:#reset_stars#:#neutral###28 11 2025 new variable +ui#:#select_node#:#Add node %s to selection###28 11 2025 new variable +ui#:#table_posinput_col_title#:#Position###01 04 2025 new variable +ui#:#ui_chars_max#:#Massimo: +ui#:#ui_chars_min#:#Minimo: +ui#:#ui_chars_remaining#:#Caratteri rimanenti: +ui#:#ui_error#:#Error###28 11 2025 new variable +ui#:#ui_error_in_group#:#C'è un errore in questa parte. +ui#:#ui_error_switchable_group_required#:#Please select an option.###31 03 2023 new variable +ui#:#ui_field_option_filter_clear_search#:#Clear search###28 11 2025 new variable +ui#:#ui_field_option_filter_filtered_results_aria_label#:#List of options - collapsible and filterable###28 11 2025 new variable +ui#:#ui_field_option_filter_no_match#:#There was no match for the search term you entered.###28 11 2025 new variable +ui#:#ui_field_option_filter_no_selection#:#Nothing selected.###28 11 2025 new variable +ui#:#ui_field_option_filter_options_shown#:#Currently showing %s options.###28 11 2025 new variable +ui#:#ui_field_option_filter_screen_reader_hint#:#Start typing and the field options below will be filtered accordingly.###28 11 2025 new variable +ui#:#ui_field_option_filter_search_in#:#Find###28 11 2025 new variable +ui#:#ui_field_option_filter_show_all_options#:#Show all options###28 11 2025 new variable +ui#:#ui_field_option_filter_show_less#:#Show less###28 11 2025 new variable +ui#:#ui_file_input_general_error#:#An error occurred! You can check the JavaScript console of your browser for more information and/or contact your ILIAS system administration about this incident.###31 03 2023 new variable +ui#:#ui_file_input_invalid_amount#:#You cannot upload this many files, please remove some in order to continue.###31 03 2023 new variable +ui#:#ui_file_input_invalid_mime#:#Files of type '%s' are not allowed###31 03 2023 new variable +ui#:#ui_file_input_invalid_size#:#File exceeds the maximum size of %s MiB.###31 08 2022 new variable +ui#:#ui_file_upload_max_nr#:#Max Number of Files:###28 11 2025 new variable +ui#:#ui_invalid_url#:#Invalid URL-format###31 03 2023 new variable +ui#:#ui_link_label#:#Label###31 03 2023 new variable +ui#:#ui_link_url#:#URL###31 03 2023 new variable +ui#:#ui_md_input_edit#:#Edit###30 04 2024 new variable +ui#:#ui_md_input_view#:#View###30 04 2024 new variable +ui#:#ui_nav_sequence_control_label#:#Sequence control for contents below###28 11 2025 new variable +ui#:#ui_nav_sequence_description#:#Used to navigate through this content or trigger actions and filters on the entire sequence.###28 11 2025 new variable +ui#:#ui_pagination_unlimited#:#Unlimited###30 04 2024 new variable +ui#:#ui_select_dropdown_label#:#Please select###30 04 2024 new variable +ui#:#ui_table_no_records#:#No records###30 04 2024 new variable +ui#:#ui_table_order#:#Order###28 11 2025 new variable +ui#:#ui_transcription#:#Transcript###31 03 2023 new variable +ui#:#unselect_node#:#Remove node %s from selection###28 11 2025 new variable +ui#:#vc_sort#:#Sort by:###28 11 2025 new variable +ui#:#warning_url_too_long_msg#:#The amount of selected rows will result in a very large URL; the Server will probably block this request.<br>Please select less rows or perform the action on all entries.###28 11 2025 new variable +user#:#activate_in_profile_fields#:#To change this setting, the user must first be allowed to change their login name under Profile > Profile Fields###28 11 2025 new variable +user#:#administrative_settings#:#Administrative Settings###28 11 2025 new variable user#:#all_roles_has_starting_point#:#Tutti i ruoli hanno dei punti di inizio user#:#back_to_starting_points_list#:#Torna ai punti di inizio -user#:#change_email_email_confirmation_body#:#The email address for the account %s was changed. To confirm this change, please click on this link %s. The link is valid for %s minutes.###28 10 2024 new variable -user#:#change_email_email_confirmation_subject#:#Confirm Email Address###28 10 2024 new variable -user#:#change_email_email_information_body#:#The process to change the email address for the account %s to %s was started. An email with a link to confirm the change was sent to the new address. The link is valid for %s minutes.###28 10 2024 new variable -user#:#change_email_email_information_subject#:#Information about Change of Email Address###28 10 2024 new variable -user#:#change_email_email_sent#:#An email with a link to confirm your change has been sent. Please check your inbox and make sure to also look in the spam-folder if the email doesn't arrive within the next minutes.###28 10 2024 new variable -user#:#change_email_info_message#:#There is a pending request to change the email address for this account.###28 10 2024 new variable +user#:#change_email_email_confirmation_body#:#The email address for the account %s was changed. To confirm this change, please click on this link %s. The link is valid for %s minutes.###28 11 2025 new variable +user#:#change_email_email_confirmation_subject#:#Confirm Email Address###28 11 2025 new variable +user#:#change_email_email_information_body#:#The process to change the email address for the account %s to %s was started. An email with a link to confirm the change was sent to the new address. The link is valid for %s minutes.###28 11 2025 new variable +user#:#change_email_email_information_subject#:#Information about Change of Email Address###28 11 2025 new variable +user#:#change_email_email_sent#:#An email with a link to confirm your change has been sent. Please check your inbox and make sure to also look in the spam-folder if the email doesn't arrive within the next minutes.###28 11 2025 new variable +user#:#change_email_info_message#:#There is a pending request to change the email address for this account.###28 11 2025 new variable user#:#clipboard_add_btn#:#Aggiungi agli Appunti user#:#clipboard_add_from_btn#:#Aggiungi da Appunti user#:#clipboard_empty_btn#:#Svuota Appunti @@ -17514,55 +17509,55 @@ user#:#clipboard_remove_btn#:#Rimuovi da Appunti user#:#clipboard_table_title#:#Appunti (account utente) user#:#clipboard_user_added#:#Aggiunti gli utenti selezionati agli Appunti. user#:#confirm_delete_starting_point#:#Sei sicuro di voler eliminare questa regola? -user#:#confirm_logout_for_email_change#:#You changed your email. To finalize this change, you will need to provide your password. The system is thus going to log you out and you will have 5 minutes to log in again. All other changes will be saved before logging you out.###26 08 2024 new variable -user#:#confirm_logout_for_email_change_with_confirmation#:#Additionally, a confirmation that you control the new email address will be required. After you have logged in again, an email will be sent to you. Please click on the link in the email to confirm that you contoll the address. The change of the email address will only take effect once this second step is also finalized.###28 10 2024 new variable +user#:#confirm_logout_for_email_change#:#You changed your email. To finalize this change, you will need to provide your password. The system is thus going to log you out and you will have 5 minutes to log in again. All other changes will be saved before logging you out.###23 10 2023 new variable +user#:#confirm_logout_for_email_change_with_confirmation#:#Additionally, a confirmation that you control the new email address will be required. After you have logged in again, an email will be sent to you. Please click on the link in the email to confirm that you contoll the address. The change of the email address will only take effect once this second step is also finalized.###28 11 2025 new variable user#:#create_starting_point#:#Crea ruolo user#:#criteria#:#Criteri -user#:#del_mail_body#:#Hello %1$s, %2$s you haven't logged in for a long period of time, on %3$s. So your account will be deleted in %4$s days. You have to login again to prevent the deletion of your account. -user#:#del_mail_subject#:#(ILIAS) - Il tuo account verrà eliminato +user#:#del_mail_body#:#Ciao %1$s, %2$s non hai effettuato l'accesso per un lungo periodo di tempo, su %3$s. Quindi il tuo account verrà eliminato tra %4$ s giorni. Devi accedere di nuovo per impedire la cancellazione del tuo account. +user#:#del_mail_subject#:#[ILIAS] - Il tuo account verrà eliminato user#:#delete_inactive_user_accounts_frequency#:#Frequenza -user#:#delete_inactive_user_accounts_frequency_desc#:#Frequency, in which the deletion and email distibution will be tested. -user#:#edit_field#:#Edit Field###29 10 2025 new variable -user#:#edit_setting#:#Edit Setting###29 10 2025 new variable +user#:#delete_inactive_user_accounts_frequency_desc#:#Frequenza, in cui verranno testati la cancellazione e la distribuzione della posta elettronica. +user#:#edit_field#:#Edit Field###28 11 2025 new variable +user#:#edit_setting#:#Edit Setting###28 11 2025 new variable user#:#editing_this_role#:#Ruolo -user#:#email_could_not_be_changed#:#The request to change your email could not be finalized.###26 08 2024 new variable +user#:#email_could_not_be_changed#:#The request to change your email could not be finalized.###23 10 2023 new variable user#:#enable_local_user_administration#:#Abilita l'amministrazione di utenti locali user#:#enable_local_user_administration_info#:#Se abilitato, gli account degli utenti locali possono essere categorizzati. -user#:#feedhash#:#Newsfeedhash -user#:#field_type_custom#:#Custom###29 10 2025 new variable +user#:#feedhash#:#News feed hash +user#:#field_type_custom#:#Custom###28 11 2025 new variable user#:#has_role#:#Ruolo -user#:#info_accessFree_sure#:#Are you sure you want to remove the valid until date from the following accounts?###26 08 2024 new variable -user#:#inform_user_mail_info#:#If activated, an email will be sent to the user. Its content can be defined in Administration > User Management > Settings > New Account Mail. +user#:#info_accessFree_sure#:#Are you sure you want to remove the valid until date from the following accounts?###30 07 2024 new variable +user#:#inform_user_mail_info#:#Se attivato, verrà inviata un'email all'utente. Il suo contenuto può essere definito in Amministrazione> Gestione utenti> Impostazioni> Nuova posta account. user#:#interests#:#Interessi user#:#interests_general#:#Interessi generali user#:#interests_help_looking#:#Cercare aiuto user#:#interests_help_offered#:#Offrire aiuto -user#:#ldoc_accepted_content#:#Accepted Content###26 08 2024 new variable -user#:#ldoc_not_accepted_yet#:#Not accepted yet###26 08 2024 new variable -user#:#msg_spoint_not_modified#:#Starting point not modified###07 02 2020 new variable -user#:#no_deactivate_yourself#:#You cannot deactivate your own user account.###26 08 2024 new variable -user#:#obj_ref_id_not_exist#:#The entered Reference-Id does not exist###07 02 2020 new variable -user#:#personalise_additional#:#Personalise Additional Settings###29 10 2025 new variable -user#:#personalise_communication#:#Personalise Communication Settings###29 10 2025 new variable -user#:#personalise_privacy#:#Personalise Privacy Settings###29 10 2025 new variable -user#:#profile_fields#:#Profile Fields###29 10 2025 new variable -user#:#profile_section#:#Section###29 10 2025 new variable +user#:#ldoc_accepted_content#:#Accepted Content###30 04 2024 new variable +user#:#ldoc_not_accepted_yet#:#Not accepted yet###30 04 2024 new variable +user#:#msg_spoint_not_modified#:#Punto di partenza non modificato +user#:#no_deactivate_yourself#:#You cannot deactivate your own user account.###28 07 2023 new variable +user#:#obj_ref_id_not_exist#:#L'ID di riferimento inserito non esiste +user#:#personalise_additional#:#Personalise Additional Settings###28 11 2025 new variable +user#:#personalise_communication#:#Personalise Communication Settings###28 11 2025 new variable +user#:#personalise_privacy#:#Personalise Privacy Settings###28 11 2025 new variable +user#:#profile_fields#:#Profile Fields###28 11 2025 new variable +user#:#profile_section#:#Section###28 11 2025 new variable user#:#restrict_user_access#:#Accesso Ristretto agli Account Utenti user#:#restrict_user_access_info#:#Se abilitato, l'accesso agli utenti è ristretto. L'accesso dipende dal "Permesso di Lettura agli utenti locali" in "Account Utente" e "Categorie". user#:#roles_without_starting_point#:#Ruoli senza un punto di inizio definito: user#:#save_order#:#Salva ordine user#:#send_mail_reminder_window_too_small#:#L’impostazione di frequenza è troppo grande per questo valore di promemoria. -user#:#send_mail_to_inactive_users#:#Earliest date in days for sending a reminder mail -user#:#send_mail_to_inactive_users_desc#:#A reminder mail will be send to user's e-mail address to warn about an upcoming account deletion. -user#:#send_mail_to_inactive_users_must_be_smaller_than#:#This value must be smaller than the value 'Days passed since last login'. +user#:#send_mail_to_inactive_users#:#Mail di avviso +user#:#send_mail_to_inactive_users_desc#:#Se impostato, un messaggio di avviso verrà inviato all'utente prima che il suo account venga eliminato a causa di inattività. Assicurati che sia possibile inviare mail esterne. All'attivazione con posta promemoria, può accadere che il lasso di tempo tra la posta promemoria e cancellazione sia inferiore al periodo di tempo configurato. +user#:#send_mail_to_inactive_users_must_be_smaller_than#:#Questo valore deve essere inferiore al valore "Giorni trascorsi dall'ultimo accesso". user#:#send_mail_to_inactive_users_numbers_only#:#Vengono accettati solo numeri non decimali positivi. user#:#send_mail_to_inactive_users_suffix#:#Giorni precedenti alla cancellazione. -user#:#show_own_online_status#:#Show My Online Status###07 02 2020 new variable -user#:#starting_page#:#Punto di inizio +user#:#show_own_online_status#:#Mostra il mio stato in linea +user#:#starting_page#:#Pagina di inizio user#:#starting_point#:#Punto di inizio user#:#starting_point_settings#:#Impostazione punto di inizio user#:#starting_points#:#Punti di inizio -user#:#udf_select_options#:#Options###29 10 2025 new variable +user#:#udf_select_options#:#Options###28 11 2025 new variable user#:#user_access_limited#:#Limitato user#:#user_access_unlimited#:#Illimitato user#:#user_account_code#:#Codice @@ -17580,33 +17575,33 @@ user#:#user_account_codes_add#:#Aggiungi codici user#:#user_account_codes_edit_header#:#Aggiungi codici user#:#user_account_codes_export#:#Esporta codici user#:#user_account_codes_number#:#Numero dei codici -user#:#user_account_deleted_confirmation#:#Your account has been deleted. An email containing detailed information has been sent to you. +user#:#user_account_deleted_confirmation#:#Il tuo account è stato cancellato Ti è stata inviata un'e-mail con informazioni dettagliate. user#:#user_activate_public_profile#:#Attiva un profilo pubblico user#:#user_activate_public_profile_info#:#Attivazione globale del tuo profilo utente. Se attivato il tuo nome e cognome sarà visibile agli altri utenti. user#:#user_activation#:#Attivazione -user#:#user_admin_options#:#Options###29 10 2025 new variable +user#:#user_admin_options#:#Options###28 11 2025 new variable user#:#user_all#:#Tutti user#:#user_allow_delete_own_account#:#Consente agli utenti di eliminare il proprio account user#:#user_any#:#Qualsiasi user#:#user_awrn_all_users#:#Tutti gli utenti -user#:#user_awrn_all_users_info#:#All users of the platform are listed. -user#:#user_check_profile_data#:#Check profile data###07 02 2020 new variable +user#:#user_awrn_all_users_info#:#Tutti gli utenti della piattaforma sono elencati. Si prega di notare che l'impostazione "Online e Offline" può ridurre notevolmente le prestazioni su installazioni con un numero elevato di utenti. +user#:#user_check_profile_data#:#Controlla i dati del profilo user#:#user_chooses_starting_page#:#L’utente sceglie il punto di inizio user#:#user_delete_own_account#:#Elimina account user#:#user_delete_own_account_aborted#:#Eliminazione interrotta, l'account non è stato modificato. -user#:#user_delete_own_account_email_body#:#Your user account "%s" has been deleted from %s. +user#:#user_delete_own_account_email_body#:#Il tuo account utente "%s" è stato eliminato da %s. user#:#user_delete_own_account_email_subject#:#Account utente eliminato user#:#user_delete_own_account_final_confirmation#:#Si prega di confermare l’ultima volta per rimuovere l’account utente da ILIAS! user#:#user_delete_own_account_info#:#Qui è possibile eliminare l’attuale account. Tieni a mente che la cancellazione del tuo account è irreversibile! user#:#user_delete_own_account_logout_button#:#Procedi con l’autenticazione user#:#user_delete_own_account_logout_confirmation#:#Il tuo account è stato contrassegnato per l'eliminazione. Si prega di autenticare per continuare il processo. -user#:#user_delete_own_account_notification_email#:#Notification Email +user#:#user_delete_own_account_notification_email#:#Email di notifica user#:#user_field#:#Campo user#:#user_global_role#:#Ruolo Globale user#:#user_last_login_before#:#Ultimo login user#:#user_limited_access#:#Accesso Limitato -user#:#user_local_role#:#Local Role###29 07 2022 new variable -user#:#user_lv_do_not_store#:#Never remeber last visited +user#:#user_local_role#:#Local Role###31 03 2023 new variable +user#:#user_lv_do_not_store#:#Non ricordare mai l'ultima visita user#:#user_lv_keep_entries#:#Ricorda ultima visita user#:#user_lv_keep_only_for_session#:#Ricorda solo durante la sessione attuale user#:#user_make_profile_public#:#Pubblica profilo @@ -17618,39 +17613,39 @@ user#:#user_ownership#:#Oggetti repository user#:#user_please_select_course_group#:#Per favore seleziona un corso o un gruppo user#:#user_portfolios#:#Portfolio user#:#user_portfolios_desc#:#Gli utenti possono creare un portfolio e utilizzarlo come profilo. -user#:#user_privacy_checklist#:#Privacy Checklist###07 02 2020 new variable -user#:#user_profile_data#:#Profile Data###07 02 2020 new variable -user#:#user_profile_data_checked#:#Profile data checked###07 02 2020 new variable -user#:#user_profile_info#:#Informazione profilo utente -user#:#user_profile_info_std#:#Default User Profile Info###07 02 2020 new variable +user#:#user_privacy_checklist#:#Lista di controllo sulla privacy +user#:#user_profile_data#:#Dati del Profilo +user#:#user_profile_data_checked#:#Dati del profilo controllati +user#:#user_profile_info#:#Informazioni Utente +user#:#user_profile_info_std#:#Informazioni Utente Default user#:#user_profile_info_text_info#:#Questo testo è presentato in cima al modulo per l'inserimento dei dati personali. -user#:#user_profile_portfolio#:#You can use a portfolio as public profile. -user#:#user_profile_portfolio_selected#:#You are currently using a portfolio as your profile. +user#:#user_profile_portfolio#:#Se vuoi utilizzare un portfolio come profilo, vai nella sezione "Portfolio" e seleziona "Mio profilo" per quel portfolio. +user#:#user_profile_portfolio_selected#:#Attualmente stai utilizzando un portfolio come profilo. user#:#user_profile_preview#:#Anteprima -user#:#user_profile_prompt_text#:#Prompt Text###28 10 2024 new variable -user#:#user_profile_prompt_text_info#:#This text will replace the default info text, if a user has been prompted to the profile. -user#:#user_prompt_incomplete#:#Only if profile is incomplete -user#:#user_prompt_incomplete_info#:#If the user has to enter required fields, the profile will be shown after login. -user#:#user_prompt_once_after_login#:#Once after specific number of days after first login -user#:#user_prompt_once_after_login_info#:#After this period the user will be prompted with the profile, if the user did not publish the profile yet. -user#:#user_prompt_repeat#:#Repeat every specific number of days -user#:#user_prompt_repeat_info#:#The user will be prompted periodically with the profile, if the user did not publish the profile yet. -user#:#user_prompting_recurrence#:#Prompting Recurrence -user#:#user_prompting_settings#:#Prompting Settings +user#:#user_profile_prompt_text#:#Prompt Text###28 11 2025 new variable +user#:#user_profile_prompt_text_info#:#Questo testo sostituirà il testo informativo predefinito, se al profilo è stato richiesto un utente. +user#:#user_prompt_incomplete#:#Solo se il profilo è incompleto +user#:#user_prompt_incomplete_info#:#Se l'utente deve inserire i campi richiesti, il profilo verrà mostrato dopo il login. +user#:#user_prompt_once_after_login#:#Una volta dopo il numero specifico di giorni dopo il primo accesso +user#:#user_prompt_once_after_login_info#:#Dopo questo periodo verrà richiesto all'utente con il profilo, se l'utente non ha ancora pubblicato il profilo. +user#:#user_prompt_repeat#:#Ripeti ogni numero specifico di giorni +user#:#user_prompt_repeat_info#:#All'utente verrà richiesto periodicamente il profilo, se l'utente non ha ancora pubblicato il profilo. +user#:#user_prompting_recurrence#:#Richiesta di ricorrenza +user#:#user_prompting_settings#:#Impostazioni di richiesta user#:#user_public_profile_info#:#Seleziona quali dati personali saranno visibili agli altri utenti. -user#:#user_publish_options#:#Publish Profile###07 02 2020 new variable -user#:#user_role_selection#:#Role Selection###26 08 2024 new variable +user#:#user_publish_options#:#Pubblica Profilo +user#:#user_role_selection#:#Role Selection###28 11 2023 new variable user#:#user_role_starting_point#:#Utente - Punto di inizio -user#:#user_save_continue#:#Save and Continue###07 02 2020 new variable +user#:#user_save_continue#:#Salva e Continua user#:#user_save_ordering_and_titles#:#Salva ordine e titoli user#:#user_select_course_group#:#Seleziona Corso/Gruppo -user#:#user_set_publishing_options#:#Set publishing options###07 02 2020 new variable -user#:#user_set_visibilty_options#:#Set visibility options###07 02 2020 new variable -user#:#user_settings#:#User Settings###29 10 2025 new variable +user#:#user_set_publishing_options#:#Imposta le opzioni di pubblicazione +user#:#user_set_visibilty_options#:#Imposta le opzioni di visibilità +user#:#user_settings#:#User Settings###28 11 2025 new variable user#:#user_store_last_visited#:#Ultima visita -user#:#user_visibility_settings#:#Visibility###07 02 2020 new variable +user#:#user_visibility_settings#:#Visibilità user#:#user_visible_in_profile#:#Visibile nel Profilo -user#:#usr_id#:#System ID +user#:#usr_id#:#ID Utente user#:#usr_letter_avatars#:#Lettera avatar user#:#usr_letter_avatars_info#:#Mostra l'iniziale del nome utente o l'accesso come immagine del profilo, se non viene fornita alcuna immagine pubblica. user#:#usr_public_profile_disabled#:#Profilo Pubblico disabilitato @@ -17660,137 +17655,137 @@ user#:#usr_public_profile_logged_in#:#Utenti connessi usr#:#user_action#:#Azione utente usr#:#user_actions#:#Azioni utente usr#:#user_actions_activation_info#:#Le azioni saranno elencate solo per gli utenti, se i servizi corrispondenti vengono attivati e vengono fornite tutte le condizioni preliminari (ad esempio, i requisiti di autorizzazione). -validation#:#datetime_required#:#Time/Date required###29 07 2022 new variable -validation#:#no_array#:#Given value is not an array###29 07 2022 new variable -validation#:#not_a_null#:#Value of type '%s' is not a null. -validation#:#not_a_string#:#Value of type '%s' is not a string. -validation#:#not_an_array#:#'%s' is not an array. -validation#:#not_an_array_of#:#The elements of the array fail constraints: %s -validation#:#not_an_int#:#Value of type '%s' is not an integer. -validation#:#not_generic#:#It is not the case that: %s -validation#:#not_greater_than#:#'%s' is not greater than '%s'. -validation#:#not_greater_than_or_equal#:#The value is not greater than or equal '%s'.###29 07 2022 new variable -validation#:#not_less_than#:#'%s' is not less than '%s'. -validation#:#not_less_than_or_equal#:#The value is not less than or equal '%s'.###29 07 2022 new variable -validation#:#not_max_length#:#The entered text has a length more than '%s'. -validation#:#not_min_length#:#Your input has a length of %d and falls below the minimum length %d. -validation#:#not_numeric#:#'%s' is not numeric. -validation#:#not_numeric_empty_string#:#Your input is not numeric.###07 02 2020 new variable -validation#:#numeric_only#:#Please insert a whole number.###26 08 2024 new variable -validation#:#required#:#This input is required.###29 10 2025 new variable -validation#:#tag_required#:#Please insert at least one tag.###26 08 2024 new variable -violation#:#not_a_string#:#Given value is not a String###29 07 2022 new variable +validation#:#datetime_required#:#Time/Date required###30 04 2024 new variable +validation#:#no_array#:#Given value is not an array###31 03 2023 new variable +validation#:#not_a_null#:#Value of type '%s' non è un null. +validation#:#not_a_string#:#Value of type '%s' non è una stringa. +validation#:#not_an_array#:#'%s' non è un array. +validation#:#not_an_array_of#:#Gli elementi della matrice non vincolano i vincoli: %s +validation#:#not_an_int#:#Il valore di tipo '%s' non è un numero intero. +validation#:#not_generic#:#Non è il caso che:%s +validation#:#not_greater_than#:#'%s' non è maggiore di '%s'. +validation#:#not_greater_than_or_equal#:#The value is not greater than or equal '%s'.###31 03 2023 new variable +validation#:#not_less_than#:#'%s' non è inferiore a '%s'. +validation#:#not_less_than_or_equal#:#The value is not less than or equal '%s'.###31 03 2023 new variable +validation#:#not_max_length#:#Il testo inserito ha una lunghezza superiore a '%s'. +validation#:#not_min_length#:#L'input ha una lunghezza di %d e scende al di sotto della lunghezza minima %d. +validation#:#not_numeric#:# '%s' non è numerico. +validation#:#not_numeric_empty_string#:#Your input is not numeric. +validation#:#numeric_only#:#Please insert a whole number.###30 04 2024 new variable +validation#:#required#:#This input is required.###08 07 2025 new variable +validation#:#tag_required#:#Please insert at least one tag.###30 04 2024 new variable +violation#:#not_a_string#:#Given value is not a String###31 03 2023 new variable webr#:#invalid_links_tbl#:#Collegamenti non validi webr#:#webr_active#:#Attiva -webr#:#webr_container_info#:#Si prega di inserire un titolo e facoltativamente una descrizione per la presentazione di questo elenco collegamento web nel repository. -webr#:#webr_copy#:#Copia link web -webr#:#webr_deactivate#:#Deactivate Link -webr#:#webr_edit_links#:#Edit Links -webr#:#webr_edit_list#:#Edit Web Resource Lis +webr#:#webr_container_info#:#Si prega di inserire un titolo e facoltativamente una descrizione per la presentazione di questo elenco di collegamenti web nel repository. +webr#:#webr_copy#:#Copia collegamento web +webr#:#webr_deactivate#:#Disattiva collegamento web +webr#:#webr_edit_links#:#Modifica collegamento web +webr#:#webr_edit_list#:#Modifica raccolta collegamenti web webr#:#webr_edit_settings#:#Modifica impostazioni webr#:#webr_import#:#Importa collegamento web -webr#:#webr_inactive_success#:#Il collegamento scelto è disattivo. -webr#:#webr_link_added#:#È stato creato un nuovo collegamento. -webr#:#webr_link_target#:#Link Target -webr#:#webr_link_title#:#Link Name -webr#:#webr_link_type_list#:#Weblink List###29 07 2022 new variable -webr#:#webr_link_type_single#:#Single Weblink###29 07 2022 new variable -webr#:#webr_list_added#:#A new weblink list has been created.###29 07 2022 new variable -webr#:#webr_list_desc#:#Description of Web Resource List -webr#:#webr_list_set#:#The weblink has been set to a weblink list.###29 07 2022 new variable -webr#:#webr_list_title#:#Title of Web Resource List -webr#:#webr_new#:#Create Weblink###29 10 2025 new variable -webr#:#webr_new_link#:#Add New Link -webr#:#webr_new_list#:#Add New Weblink List###29 07 2022 new variable -webr#:#webr_new_list_info#:#Please enter a title and optionally a description for the presentation of this Weblink List in the repository.###29 07 2022 new variable -webr#:#webr_set_to_list#:#Set to Weblink List###29 07 2022 new variable +webr#:#webr_inactive_success#:#Il collegamento web scelto è stato disattivato. +webr#:#webr_link_added#:#È stato creato un nuovo collegamento web. +webr#:#webr_link_target#:#Target collegamento web +webr#:#webr_link_title#:#Nome collegamento web/ Nome raccolta collegamento web +webr#:#webr_link_type_list#:#Elenco dei collegamenti web +webr#:#webr_link_type_single#:#Collegamento web singolo +webr#:#webr_list_added#:#È stato creato un nuovo elenco di collegamenti web. +webr#:#webr_list_desc#:#Descrizione della raccolta di collegamenti web +webr#:#webr_list_set#:#Il collegamento web è stato modificato in una raccolta di collegamenti web. +webr#:#webr_list_title#:#Titolo dell'a raccolta di collegamenti web +webr#:#webr_new#:#Create Weblink###28 11 2025 new variable +webr#:#webr_new_link#:#Aggiungi Nuovo collegamento web +webr#:#webr_new_list#:#Aggiungi nuova raccolta di collegamenti web +webr#:#webr_new_list_info#:#Si prega di inserire un titolo e, facoltativamente, una descrizione per la presentazione di questa raccolta di collegamento web nel repository. +webr#:#webr_set_to_list#:#Modificare in elenco di collegamenti web webr#:#webr_sort_manual#:#Ordina manualmente -webr#:#webr_sort_title#:#Sort by Title -webr#:#webr_sorting#:#Link Sorting +webr#:#webr_sort_title#:#Ordina alfabeticamente per titolo +webr#:#webr_sorting#:#Ordinamento dei collegamenti web wfld#:#wfld_add#:#Crea cartella -wfld#:#wfld_alphabetically_asc#:#Alphabetically, asc.###07 02 2020 new variable -wfld#:#wfld_alphabetically_desc#:#Alphabetically, desc.###07 02 2020 new variable -wfld#:#wfld_creation_asc#:#Creation Date, asc.###07 02 2020 new variable -wfld#:#wfld_creation_desc#:#Creation Date, desc.###07 02 2020 new variable -wfld#:#wfld_derive#:#Adopt from parent###07 02 2020 new variable +wfld#:#wfld_alphabetically_asc#:#Alfabetico, asc. +wfld#:#wfld_alphabetically_desc#:#Alfabetico, disc. +wfld#:#wfld_creation_asc#:#Data di creazione, asc. +wfld#:#wfld_creation_desc#:#Data di creazione, disc. +wfld#:#wfld_derive#:#Come cartella principale wfld#:#wfld_edit#:#Modifica cartella wfld#:#wfld_new#:#Crea nuova cartella -wfld#:#wfld_sortation#:#Sortation###07 02 2020 new variable -wiki#:#wiki_activate_extended_rating#:#Attiva categorie di classificazione -wiki#:#wiki_activate_new_page_rating#:#Attiva classificazione per Nuove pagine -wiki#:#wiki_activate_page_rating#:#Attiva classificazione -wiki#:#wiki_activate_rating#:#Activate Rating +wfld#:#wfld_sortation#:#Ordinamento +wiki#:#wiki_activate_extended_rating#:#Attiva categorie di valutazione +wiki#:#wiki_activate_new_page_rating#:#Attiva valutazione per nuove pagine +wiki#:#wiki_activate_page_rating#:#Attiva valutazione +wiki#:#wiki_activate_rating#:#Attiva valutazione per le pagine wiki#:#wiki_add_link#:#Aggiungi link -wiki#:#wiki_add_template#:#Imposta stato del modello -wiki#:#wiki_advmd_block_title#:#Metadati avanzati della pagina +wiki#:#wiki_add_template#:#Utilizzare come modello di contenuto +wiki#:#wiki_advmd_block_title#:#Metadati personalizzati della pagina wiki#:#wiki_all_pages#:#Tutte le pagine -wiki#:#wiki_block_page#:#Block Page -wiki#:#wiki_change_notification_body_new#:#è stata creata la seguente pagina Wiki -wiki#:#wiki_change_notification_link#:#Link to wiki: %s -wiki#:#wiki_change_notification_page_body_comment#:#a comment has been added to the following wiki page###07 02 2020 new variable -wiki#:#wiki_change_notification_page_body_delete#:#the following wiki page has been deleted###07 02 2020 new variable -wiki#:#wiki_change_notification_page_body_update#:#In wiki "%s" the page "%s" was updated. -wiki#:#wiki_change_notification_page_link#:#Link to wiki page: %s +wiki#:#wiki_block_page#:#Imposta in sola lettura +wiki#:#wiki_change_notification_body_new#:# la seguente pagina Wiki è nuova +wiki#:#wiki_change_notification_link#:#URL +wiki#:#wiki_change_notification_page_body_comment#:#un commento è stato aggiunto alla seguente pagina wiki +wiki#:#wiki_change_notification_page_body_delete#:#la seguente pagina wiki è stata cancellata +wiki#:#wiki_change_notification_page_body_update#:#la seguente pagina wiki è stata aggiornata +wiki#:#wiki_change_notification_page_link#:#URL wiki#:#wiki_change_notification_salutation#:#Ciao %s, -wiki#:#wiki_change_notification_subject#:#Wiki "%s" has been changed +wiki#:#wiki_change_notification_subject#:#Wiki "%1$s" è stato cambiato: %2$s wiki#:#wiki_changed_by#:#Modificato da -wiki#:#wiki_commented_by#:#Commented by###07 02 2020 new variable -wiki#:#wiki_contributor#:#Contribuente -wiki#:#wiki_contributors#:#Contribuenti +wiki#:#wiki_commented_by#:#Autore +wiki#:#wiki_contributor#:#Collaboratore +wiki#:#wiki_contributors#:#Collaboratori wiki#:#wiki_copy#:#Copia wiki wiki#:#wiki_create_page#:#Crea pagina wiki#:#wiki_created_by#:#Creato da -wiki#:#wiki_deactivate_page_rating#:#Disattiva classificazione +wiki#:#wiki_deactivate_page_rating#:#Valutazione disattivata wiki#:#wiki_delete_page#:#Elimina pagina -wiki#:#wiki_download_submission#:#Download Submission File +wiki#:#wiki_download_submission#:#Scarica il file di invio wiki#:#wiki_empty_page#:#Pagina vuota -wiki#:#wiki_empty_page_template#:#Modello di pagina vuoto nella creazione della pagina -wiki#:#wiki_exc_template#:#Wiki Template -wiki#:#wiki_exc_wiki_created#:#Wiki has been created. -wiki#:#wiki_exercise_info#:#This wiki is part of the assignment "%s" of exercise "%s". -wiki#:#wiki_exercise_submitted_info#:#Your last submission was on %s. Please check the export file. +wiki#:#wiki_empty_page_template#:#Creazione di una nuova pagina senza un modello (pagina vuota) +wiki#:#wiki_exc_template#:#Modello Wiki +wiki#:#wiki_exc_wiki_created#:#Wiki è stato creato. +wiki#:#wiki_exercise_info#:#Questo wiki fa parte del compito "%s" dell'esercizio "%s". +wiki#:#wiki_exercise_submitted_info#:#Il tuo ultimo invio è stato il %s. Si prega di controllare il file di esportazione. wiki#:#wiki_failed#:#Non riuscito wiki#:#wiki_feedback_from_tutor#:#Feedback dal tutor -wiki#:#wiki_finalize_wiki#:#Finalize and Submit Wiki -wiki#:#wiki_finalized#:#Wiki has been finalized and submitted. +wiki#:#wiki_finalize_wiki#:#Finalizza e invia Wiki +wiki#:#wiki_finalized#:#Wiki è stato finalizzato e inviato. wiki#:#wiki_functions#:#Funzioni Wiki wiki#:#wiki_general_settings#:#Impostazioni generali -wiki#:#wiki_grading#:#Classificazione -wiki#:#wiki_html_export#:#HTML exportieren -wiki#:#wiki_imp_page_added#:#Pagina aggiunta. +wiki#:#wiki_grading#:#Valutazione +wiki#:#wiki_html_export#:#Esporta HTML +wiki#:#wiki_imp_page_added#:#La pagina è stata aggiunta wiki#:#wiki_import#:#Importa Wiki -wiki#:#wiki_incl_comments#:#including comments###29 07 2022 new variable +wiki#:#wiki_incl_comments#:#Commenti inclusi wiki#:#wiki_indentation#:#Rientro wiki#:#wiki_introduction#:#Introduzione wiki#:#wiki_last_changed#:#Ultima modifica -wiki#:#wiki_last_changed_by#:#Ultima modifica da +wiki#:#wiki_last_changed_by#:#Ultima modifica di wiki#:#wiki_last_edited#:#Ultima modifica wiki#:#wiki_last_visited_page#:#Ultima pagina visitata wiki#:#wiki_link_md_values#:#Collegamento automatico wiki#:#wiki_link_md_values_info#:#Collega automaticamente le proprietà presentate nel blocco laterale alle pagine wiki con lo stesso nome. wiki#:#wiki_link_text#:#Link di testo wiki#:#wiki_mark#:#Segno -wiki#:#wiki_master_existing#:#Page Exists in Master Language###26 08 2024 new variable -wiki#:#wiki_master_title#:#Title of Page in Master Language###26 08 2024 new variable +wiki#:#wiki_master_existing#:#Page Exists in Master Language###30 04 2024 new variable +wiki#:#wiki_master_title#:#Title of Page in Master Language###30 04 2024 new variable wiki#:#wiki_navigation#:#Navigazione Wiki -wiki#:#wiki_navigation_info#:#Qui è possibile aggiungere e rimuovere i collegamenti alle pagine wiki esistenti nel blocca di navigazione nel wiki. +wiki#:#wiki_navigation_info#:#Qui è possibile aggiungere e rimuovere i collegamenti alle pagine wiki esistenti nel blocco di navigazione del wiki. wiki#:#wiki_new_page#:#Nuova pagina -wiki#:#wiki_new_page_name#:#Nuovo titolo +wiki#:#wiki_new_page_name#:#Nuovo titolo della pagina wiki#:#wiki_new_pages#:#Nuove pagine wiki#:#wiki_news_page_changed#:#La pagina Wiki è stata aggiornata. wiki#:#wiki_news_page_created#:#È stata creata una nuova pagina wiki. -wiki#:#wiki_no_master#:#Page Does Not Exist in Master Language###26 08 2024 new variable +wiki#:#wiki_no_master#:#Page Does Not Exist in Master Language###30 04 2024 new variable wiki#:#wiki_no_page_found#:#Nessun pagina wiki trovata per il termine di ricerca '$1'. wiki#:#wiki_no_search_term#:#Non è stato inserito alcun termine di ricerca. Tutte le pagine del wiki sono elencate di seguito. wiki#:#wiki_no_start_page#:#In Wiki manca una pagina di partenza valida. -wiki#:#wiki_not_existing#:#not existing yet###26 08 2024 new variable -wiki#:#wiki_notgraded#:#Non classificata +wiki#:#wiki_not_existing#:#not existing yet###30 04 2024 new variable +wiki#:#wiki_notgraded#:#Non valutata wiki#:#wiki_notification_activate_page#:#Attiva notifica per pagina wiki#:#wiki_notification_activate_wiki#:#Attiva notifica per Wiki wiki#:#wiki_notification_activated#:#Notifica attivata (Wiki intero) -wiki#:#wiki_notification_comment#:#the following Wiki Page has been commented.###07 02 2020 new variable -wiki#:#wiki_notification_comment_subject#:#A comment was added to %s: %s###07 02 2020 new variable -wiki#:#wiki_notification_deactivate_page#:#Disattiva notifica per pagina +wiki#:#wiki_notification_comment#:#La seguente pagina Wiki è stata commentata +wiki#:#wiki_notification_comment_subject#:#È stato aggiunto un commento alla pagina %s: %s aggiunto +wiki#:#wiki_notification_deactivate_page#:#Disattiva notifica per pagina wiki wiki#:#wiki_notification_deactivate_wiki#:#Disattiva notifica per Wiki wiki#:#wiki_notification_deactivated#:#Notifica disattivata wiki#:#wiki_number_users_notes_or_comments#:#Numero di utenti che hanno allegato note o commenti a questa pagina @@ -17801,28 +17796,28 @@ wiki#:#wiki_other_pages_linking#:#Altre pagine collegate a questa pagina wiki#:#wiki_page#:#Pagina wiki#:#wiki_page_actions#:#Azioni pagina wiki#:#wiki_page_already_exists#:#Una pagina con questo titolo esiste già. -wiki#:#wiki_page_blocked#:#Wiki page blocked. -wiki#:#wiki_page_changes#:#Modifiche pagina +wiki#:#wiki_page_blocked#:#Pagina Wiki bloccata. Solo gli utenti con il diritto «Modifica impostazioni» hanno accesso in scrittura. +wiki#:#wiki_page_changes#:#Pagine modificate wiki#:#wiki_page_deleted#:#Pagina Wiki eliminata. wiki#:#wiki_page_deletion_confirmation#:#Vuoi davvero eliminare questa pagina Wiki? wiki#:#wiki_page_exists#:#Pagina esistente wiki#:#wiki_page_hits#:#Riscontri pagina -wiki#:#wiki_page_in_master_language#:#Page in Master Language###26 08 2024 new variable -wiki#:#wiki_page_list_form_info#:#Adds a list of pages of this wiki that are all assigned to the selected metadata below. +wiki#:#wiki_page_in_master_language#:#Page in Master Language###30 04 2024 new variable +wiki#:#wiki_page_list_form_info#:#Aggiungi un elenco di pagine di questa wiki che sono tutte assegnate ai metadati selezionati di seguito. wiki#:#wiki_page_list_mode#:#Tipo di lista wiki#:#wiki_page_list_mode_ordered#:#Numerata wiki#:#wiki_page_list_mode_unordered#:#Non numerata wiki#:#wiki_page_lists#:#Elenchi pagina wiki#:#wiki_page_not_exist_select_templ#:#Questa pagina non esiste ancora. Si prega di selezionare un modello per la nuova pagina. wiki#:#wiki_page_notification_activated#:#Notifica attivata (Pagina singola) -wiki#:#wiki_page_status_blocked#:#Editing of this page is currently blocked for learners. +wiki#:#wiki_page_status_blocked#:#La modifica di questa pagina è attualmente bloccata. wiki#:#wiki_page_template#:#Modello di pagina wiki#:#wiki_page_templates#:#Modelli di pagina wiki#:#wiki_page_title_too_long#:#Spiacenti, il titolo della pagina Wiki è troppo lungo. Si prega di sostituirlo con un titolo più breve. wiki#:#wiki_page_toc#:#Consenti blocco panoramica della pagina wiki#:#wiki_page_toc_info#:#In questo elenco vengono elencate tutte le intestazioni collegate al contenuto all'inizio di ogni pagina se tale pagina utilizza almeno due intestazioni. -wiki#:#wiki_page_type_wpg#:#Wiki Page###29 07 2022 new variable -wiki#:#wiki_page_unblocked#:#Wiki page unblocked. +wiki#:#wiki_page_type_wpg#:#Pagina Wiki +wiki#:#wiki_page_unblocked#:#Pagina Wiki sbloccata. wiki#:#wiki_pages#:#Pagine wiki#:#wiki_pages_found#:#Le pagine seguenti corrispondono al tuo termine di ricerca '$1'. wiki#:#wiki_passed#:#Approvata @@ -17833,26 +17828,26 @@ wiki#:#wiki_print_view#:#Visualizzazione stampa wiki#:#wiki_public_comments#:#Commenti pubblici wiki#:#wiki_purpose#:#Obiettivo wiki#:#wiki_quick_navigation#:#Navigazione veloce Wiki -wiki#:#wiki_rate_overall#:#Classifica Wiki -wiki#:#wiki_rate_page#:#Rate this Page +wiki#:#wiki_rate_overall#:#Valutazione Wiki +wiki#:#wiki_rate_page#:#Valuta questa pagina wiki#:#wiki_recent_changes#:#Modifiche recenti -wiki#:#wiki_remove_template_status#:#Rimuovi stato del modello -wiki#:#wiki_removed_imp_pages#:#Pagine importanti eliminate dall’elenco. +wiki#:#wiki_remove_template_status#:#Rimuovi template +wiki#:#wiki_removed_imp_pages#:#Le pagine sono state eliminate dall’elenco. wiki#:#wiki_rename#:#Rinomina wiki#:#wiki_rename_page#:#Rinomina pagina wiki#:#wiki_save_ordering_and_indent#:#Salva ordine e rientro wiki#:#wiki_search#:#Cerca -wiki#:#wiki_search_results#:#Cerca risultati -wiki#:#wiki_sec_protect_info#:#Protected sections can only be edited by users having "Edit Settings" permission.###29 07 2022 new variable +wiki#:#wiki_search_results#:#Risultati +wiki#:#wiki_sec_protect_info#:#Protected sections can only be edited by users having "Edit Settings" permission.###31 03 2023 new variable wiki#:#wiki_select_one_item#:#Si prega di selezionare una voce. wiki#:#wiki_selected_pages#:#Pagine selezionate -wiki#:#wiki_set_as_start_page#:#Imposta come pagina di avvio +wiki#:#wiki_set_as_start_page#:#Imposta come pagina di partenza wiki#:#wiki_settings#:#Impostazioni Wiki wiki#:#wiki_short_title_already_in_use#:#Questo titolo è già utilizzato da un altro wiki. Si prega di selezionare un titolo differente. wiki#:#wiki_show_pdf_export#:#Esportazione PDF wiki#:#wiki_show_print_view#:#Visualizzazione stampa wiki#:#wiki_start_page#:#Inizio pagina -wiki#:#wiki_start_page_info#:#Se non esiste ancora una pagina con questo titolo, ne verrà creata una nuova. +wiki#:#wiki_start_page_info#:#Se non esiste ancora una pagina con questo titolo, ne verrà creata una vuota. wiki#:#wiki_stat_chars#:#Numero dei caratteri wiki#:#wiki_stat_chars_avg#:#Numero medio di caratteri per pagina wiki#:#wiki_stat_deleted_pages#:#Numero di pagine eliminate @@ -17876,96 +17871,96 @@ wiki#:#wiki_stat_page_characters#:#Numero dei caratteri wiki#:#wiki_stat_page_external_links#:#Numero di collegamenti esterni wiki#:#wiki_stat_page_footnotes#:#Numero delle note a piè di pagina wiki#:#wiki_stat_page_internal_links#:#Numero di collegamenti interni -wiki#:#wiki_stat_page_ratings#:#Numero dei classificazioni +wiki#:#wiki_stat_page_ratings#:#Numero delle valutazioni wiki#:#wiki_stat_page_read#:#Numero di accessi in lettura wiki#:#wiki_stat_page_user_edit#:#Numero di utenti che hanno modificato le pagine wiki#:#wiki_stat_page_words#:#Numero delle parole -wiki#:#wiki_stat_rating_avg#:#Classificazione media +wiki#:#wiki_stat_rating_avg#:#Valutazione media wiki#:#wiki_stat_read_pages#:#Numero di accessi in lettura wiki#:#wiki_stat_scope#:#Lasso di tempo wiki#:#wiki_stat_user_edit_pages#:#Numero di utenti che ha modificato le pagine wiki#:#wiki_stat_user_edit_pages_avg#:#Numero medio di utenti che hanno modificato le pagine wiki#:#wiki_stat_words#:#Numero delle parole -wiki#:#wiki_stat_words_avg#:# Numero medio di parole per pagina +wiki#:#wiki_stat_words_avg#:#Numero medio di parole per pagina wiki#:#wiki_style#:#Stile wiki#:#wiki_sure_remove_imp_pages#:#Vuoi davvero eliminare le seguenti pagine dalla lista delle pagine importanti? wiki#:#wiki_target_page#:#Pagina di destinazione -wiki#:#wiki_team_members#:#Team Members +wiki#:#wiki_team_members#:#Membri del team wiki#:#wiki_templ_add_to_page#:#Disponibile per essere aggiunto alle pagine esistenti -wiki#:#wiki_templ_new_pages#:#Disponibile per la creazione di pagine -wiki#:#wiki_template_added#:#Pagina modella aggiunta. -wiki#:#wiki_template_status_removed#:#Stato del modello rimosso. -wiki#:#wiki_translate_page_master_info#:#You are creating a new wiki page translation. Please specify, if this translation belongs to an existing master version of the page, or if a completely new page is being created. In the second case you need to specify a page title for the master version.###26 08 2024 new variable -wiki#:#wiki_translation_page#:#Translation Page###26 08 2024 new variable -wiki#:#wiki_translations#:#Translations###26 08 2024 new variable +wiki#:#wiki_templ_new_pages#:#Disponibile per le nuove pagine +wiki#:#wiki_template_added#:#Modello di pagina aggiunta. +wiki#:#wiki_template_status_removed#:#Utilizzo come modello di contenuto annullato. +wiki#:#wiki_translate_page_master_info#:#You are creating a new wiki page translation. Please specify, if this translation belongs to an existing master version of the page, or if a completely new page is being created. In the second case you need to specify a page title for the master version.###30 04 2024 new variable +wiki#:#wiki_translation_page#:#Translation Page###30 04 2024 new variable +wiki#:#wiki_translations#:#Translations###30 04 2024 new variable wiki#:#wiki_type_wiki_team#:#Team Wiki -wiki#:#wiki_unblock_page#:#Unblock Page +wiki#:#wiki_unblock_page#:#Togli sblocco wiki#:#wiki_unhide_meta_adv_records#:#Mostra proprietà aggiuntive -wiki#:#wiki_what_links_here#:#Quali collegamenti qui? -wiki#:#wiki_what_links_to_page#:#Quali collegamenti alla pagina "%s"? +wiki#:#wiki_what_links_here#:#Cosa è collegato qui? +wiki#:#wiki_what_links_to_page#:#Cosa collega alla pagina "%s"? wiki#:#wiki_whole_wiki#:#Wiki intero wiki#:#wiki_wiki_page#:#Pagina Wiki wiki#:#wiki_wiki_search#:#Cerca Wiki wiki#:#wiki_wpg#:#Pagina Wiki -wopi#:#action_edit#:#Edit###28 10 2024 new variable -wopi#:#action_view#:#View###28 10 2024 new variable -wopi#:#activate_saving_interval#:#Activate Saving Interval###28 10 2024 new variable -wopi#:#activate_wopi#:#Activate WOPI###26 08 2024 new variable -wopi#:#close_wopi_editor#:#Close Editor###26 08 2024 new variable -wopi#:#close_wopi_editor_info#:#It can take up to several minutes for the external editor to transfer the changes to ILIAS. Visit this page again at a later time if the changes you have made are not yet visible.###26 08 2024 new variable -wopi#:#currently_supported#:#Currently supported Suffixes: %s###26 08 2024 new variable -wopi#:#msg_error_wopi_invalid_discorvery_url#:#The Discovery URL entered is invalid or cannot be accessed.###26 08 2024 new variable -wopi#:#msg_wopi_settings_modified#:#Settings stored###26 08 2024 new variable -wopi#:#open_external_editor#:#Open in external Editor###26 08 2024 new variable -wopi#:#open_external_viewer#:#Show Content###28 10 2024 new variable -wopi#:#saving_interval#:#Interval###28 10 2024 new variable -wopi#:#saving_interval_byline#:#By default, ILIAS adds all changes made by an external editor to a draft version until this version is published manually. Activating the save interval causes a new version to be published after the specified number of seconds, if possible. Please note that a low value can lead to a large number of file versions, which in turn takes up a multiple of the hard disk space.###28 10 2024 new variable -wopi#:#wopi_crawler_cronjob_description#:#Updates the information of the connected WOPI service.###26 08 2024 new variable -wopi#:#wopi_crawler_cronjob_no_apps#:#No WOPI apps were found in the discovery.###26 08 2024 new variable -wopi#:#wopi_crawler_cronjob_not_activated#:#WOPI is not activated.###26 08 2024 new variable -wopi#:#wopi_crawler_cronjob_success#:#WOPI information updated successfully.###26 08 2024 new variable -wopi#:#wopi_crawler_cronjob_title#:#Update WOPI Discovery###26 08 2024 new variable -wopi#:#wopi_settings#:#WOPI###26 08 2024 new variable -wopi#:#wopi_url#:#WOPI Discovery URL###26 08 2024 new variable -wopi#:#wopi_url_byline#:#Complete URL of the WOPI-Discovery, this must be accessible through the ILIAS server. The XML data of the Discover is read in and stored by ILIAS, the information is regularly updated by the cronjob "Update WOPI Discovery". Example: https://example.org/hosting/discovery###26 08 2024 new variable -wsp#:#element_already_shared#:#Questo oggetto è appena condiviso con questo utente. -wsp#:#element_shared#:#Oggetto condiviso. -wsp#:#error_creating_certificate_pdf#:#The certificate could not be created. Please contact the administrator to check the certificate server. -wsp#:#search_no_match#:#La ricerca non corrisponde a nessun risultato. +wopi#:#action_edit#:#Edit###28 11 2025 new variable +wopi#:#action_view#:#View###28 11 2025 new variable +wopi#:#activate_saving_interval#:#Activate Saving Interval###28 11 2025 new variable +wopi#:#activate_wopi#:#Activate WOPI###30 04 2024 new variable +wopi#:#close_wopi_editor#:#Close Editor###30 04 2024 new variable +wopi#:#close_wopi_editor_info#:#It can take up to several minutes for the external editor to transfer the changes to ILIAS. Visit this page again at a later time if the changes you have made are not yet visible.###30 04 2024 new variable +wopi#:#currently_supported#:#Currently supported Suffixes: %s###30 04 2024 new variable +wopi#:#msg_error_wopi_invalid_discorvery_url#:#The Discovery URL entered is invalid or cannot be accessed.###30 04 2024 new variable +wopi#:#msg_wopi_settings_modified#:#Settings stored###30 04 2024 new variable +wopi#:#open_external_editor#:#Open in external Editor###30 04 2024 new variable +wopi#:#open_external_viewer#:#Show Content###28 11 2025 new variable +wopi#:#saving_interval#:#Interval###28 11 2025 new variable +wopi#:#saving_interval_byline#:#By default, ILIAS adds all changes made by an external editor to a draft version until this version is published manually. Activating the saving interval causes a new version to be published, if possible, after the specified number of seconds. Please note that a low value can lead to a large number of file versions, which in turn will take up a much larger amount of hard disk space.###28 11 2025 new variable +wopi#:#wopi_crawler_cronjob_description#:#Updates the information of the connected WOPI service.###30 04 2024 new variable +wopi#:#wopi_crawler_cronjob_no_apps#:#No WOPI apps were found in the discovery.###30 04 2024 new variable +wopi#:#wopi_crawler_cronjob_not_activated#:#WOPI is not activated.###30 04 2024 new variable +wopi#:#wopi_crawler_cronjob_success#:#WOPI information updated successfully.###30 04 2024 new variable +wopi#:#wopi_crawler_cronjob_title#:#Update WOPI Discovery###30 04 2024 new variable +wopi#:#wopi_settings#:#WOPI###30 04 2024 new variable +wopi#:#wopi_url#:#WOPI Discovery URL###30 04 2024 new variable +wopi#:#wopi_url_byline#:#Complete URL of the WOPI-Discovery, this must be accessible through the ILIAS server. The XML data of the Discover is read in and stored by ILIAS, the information is regularly updated by the cronjob "Update WOPI Discovery". Example: https://example.org/hosting/discovery###30 04 2024 new variable +wsp#:#element_already_shared#:#La risorsa è già stata rilasciata per questo utente. +wsp#:#element_shared#:#Risorsa condivisa. +wsp#:#error_creating_certificate_pdf#:#Non è stato possibile creare il certificato. Si prega di contattare l'amministratore per verificare il server dei certificati. +wsp#:#search_no_match#:#Non è stato trovato nessun utente con questo nome utente wsp#:#share#:#Condividi -wsp#:#share_content#:#Condividi oggetto +wsp#:#share_content#:#Condividi risorsa wsp#:#share_with#:#Nome utente wsp#:#wsp_copy_to_repository#:#Copia nel repository wsp#:#wsp_invalid_password#:#La password fornita non è valida. -wsp#:#wsp_list_cmxv#:#Certificate of xAPI/cmi5 Object###07 02 2020 new variable +wsp#:#wsp_list_cmxv#:#Certificato dell'oggetto xAPI/cmi5 wsp#:#wsp_list_crsv#:#Certificato del corso -wsp#:#wsp_list_excv#:#Esercizio certificato -wsp#:#wsp_list_ltiv#:#Certificate of LTI Consumer Object###07 02 2020 new variable +wsp#:#wsp_list_excv#:#Certificato dell'esercizio +wsp#:#wsp_list_ltiv#:#Certificato dell'oggetto LTI Consumer wsp#:#wsp_list_scov#:#Certificato SCORM -wsp#:#wsp_list_tstv#:#Test certificato -wsp#:#wsp_move_to_repository#:#Sposta in repository +wsp#:#wsp_list_tstv#:#Certificato del test +wsp#:#wsp_move_to_repository#:#Sposta nel repository wsp#:#wsp_password_for#:#Password per wsp#:#wsp_password_protected_resource#:#Risorsa protetta da password wsp#:#wsp_password_protected_resource_info#:#Per accedere a questa risorsa è necessario immettere una password. -wsp#:#wsp_permission_all_info#:#This object has been published. +wsp#:#wsp_permission_all_info#:#Questo oggetto è stato pubblicato. wsp#:#wsp_permission_all_pw_info#:#Dopo aver fornito la password questo oggetto è visibile per tutti gli utenti di Internet. wsp#:#wsp_permission_registered_info#:#Questo oggetto è condiviso con tutti gli utenti registrati. -wsp#:#wsp_permission_removed#:#The item has been removed. +wsp#:#wsp_permission_removed#:#L'articolo è stato rimosso. wsp#:#wsp_permissions#:#Condividi -wsp#:#wsp_personal_resources_description#:#Here you can manage your private files, blogs and artifacts.###07 02 2020 new variable -wsp#:#wsp_send_mail#:#Send Mail###26 08 2024 new variable -wsp#:#wsp_set_permission_all#:#Publish -wsp#:#wsp_set_permission_all_password#:#Publish (Password required) -wsp#:#wsp_set_permission_course#:#Course -wsp#:#wsp_set_permission_group#:#Group +wsp#:#wsp_personal_resources_description#:#Da qui è possibile gestire i tuoi files privati, blog e prove didattiche. +wsp#:#wsp_send_mail#:#Send Mail###30 04 2024 new variable +wsp#:#wsp_set_permission_all#:#Pubblica +wsp#:#wsp_set_permission_all_password#:#Pubblica (richiesta password) +wsp#:#wsp_set_permission_course#:#Corso +wsp#:#wsp_set_permission_group#:#Membro del gruppo wsp#:#wsp_set_permission_registered#:#Tutti gli utenti registrati -wsp#:#wsp_set_permission_single_user#:#Single User +wsp#:#wsp_set_permission_single_user#:#Singolo utente wsp#:#wsp_share_search_users#:#Cerca utenti wsp#:#wsp_share_success#:#È stata aggiunta una nuova voce. wsp#:#wsp_share_with_members#:#Condividi con i membri wsp#:#wsp_share_with_users#:#Condividi con gli utenti wsp#:#wsp_shared_date#:#Data di condivisione -wsp#:#wsp_shared_date_filter#:#Condiviso da +wsp#:#wsp_shared_date_filter#:#Condiviso dal wsp#:#wsp_shared_filter_button#:#Cerca wsp#:#wsp_shared_filter_reset_button#:#Ripristina ricerca wsp#:#wsp_shared_mandatory_filter_info#:#Si prega di impostare almeno un attributo di filtro. I filtri di testo devono essere lunghi almeno 4 caratteri. @@ -17973,23 +17968,23 @@ wsp#:#wsp_shared_member_filter#:#Membri del corso/gruppo wsp#:#wsp_shared_object_type#:#Tipo di risorsa wsp#:#wsp_shared_resources#:#Risorse condivise wsp#:#wsp_shared_table_title#:#Condivisi -wsp#:#wsp_shared_title#:#Titolo di risorsa +wsp#:#wsp_shared_title#:#Titolo della risorsa wsp#:#wsp_shared_type#:#Condiviso con wsp#:#wsp_shared_user_filter#:#Accesso/Nome wsp#:#wsp_shared_with#:#Condiviso con wsp#:#wsp_status_shared#:#Condiviso -wsp#:#wsp_switch_to_repo_tree#:#Switch to Repository###07 02 2020 new variable -wsp#:#wsp_switch_to_wsp_tree#:#Switch to Personal Resources###07 02 2020 new variable +wsp#:#wsp_switch_to_repo_tree#:#Cambia a "Repository" +wsp#:#wsp_switch_to_wsp_tree#:#Cambia a "Risorse Personali" wsp#:#wsp_tab_ownership#:#Il mio oggetto repository wsp#:#wsp_tab_personal#:#Le mie risorse -wsp#:#wsp_tab_shared#:#Shared By Other Users +wsp#:#wsp_tab_shared#:#Condiviso da altri utenti wsp#:#wsp_type_blog#:#Blog -wsp#:#wsp_type_cmxv#:#Certificate: xAPI/cmi5###07 02 2020 new variable +wsp#:#wsp_type_cmxv#:#Certificato: xAPI/cmi5 wsp#:#wsp_type_crsv#:#Certificato: Corso -wsp#:#wsp_type_excv#:#Verification: Exercise +wsp#:#wsp_type_excv#:#Certificato: Esercizio wsp#:#wsp_type_file#:#File -wsp#:#wsp_type_ltiv#:#Certificate: LTI Consumer###07 02 2020 new variable +wsp#:#wsp_type_ltiv#:#Certificato: LTI Consumer wsp#:#wsp_type_scov#:#Certificato: SCORM -wsp#:#wsp_type_tstv#:#Verification: Test +wsp#:#wsp_type_tstv#:#Certificato: Test wsp#:#wsp_type_webr#:#Collegamento web wsp#:#wsp_type_wfld#:#Cartella \ No newline at end of file diff --git a/lang/ilias_ja.lang b/lang/ilias_ja.lang index 0ecae743c12d..0e35fa1d0e0b 100644 --- a/lang/ilias_ja.lang +++ b/lang/ilias_ja.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS テスト実施 ID assessment#:#examid_in_test_res_desc#:#ILIASテスト実施IDはテスト結果内に含まれます。 assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#評価データ用にエクスポート -assessment#:#exp_file_created#:#エクスポートファイルを作成しました。 assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#証明書 (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#カンマ区切り (CSV) assessment#:#expected_result_type#:#予想結果タイプ assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#削除を進むには一つはマーク assessment#:#tst_derive_new_pool#:#新規問題集を得る assessment#:#tst_derive_new_pools#:#新規問題集を得る assessment#:#tst_dont_show_msg_again_in_current_session#:#現在のセッションへこのメッセージを再表示しません。 -assessment#:#tst_dont_use_previous_answers#:#前回の解答が今後の試験の初期設定値として使用されることはありません assessment#:#tst_edit_competence_assign#:#割り当てのプロパティを編集 assessment#:#tst_edit_scoring#:#点数を編集 assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#はい、テストを終了します assessment#:#tst_finish_confirm_cancel_button#:#いいえ、前の問題へ戻ります assessment#:#tst_finish_confirmation_question#:#このテストを終了すると最大受験可能回数に達します。解答を変更しようとしても再度入力する事はできなくなります。本当にこのテストを終了しますか? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#e-mailしない assessment#:#tst_finished#:#終了 assessment#:#tst_form_dynamic_question_set_config#:#問題選択の継続 assessment#:#tst_gap_analysis#:#ギャップ分析 @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#問題一覧を表示しない assessment#:#tst_highscore_achieved_ts#:#日付 assessment#:#tst_highscore_achieved_ts_description#:#テストデータの含まれる列は順位に含まれます。 assessment#:#tst_highscore_all_tables#:#受験者の自身ランクとトップランキング @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#点数 assessment#:#tst_highscore_score_description#:#点数入りの列はランキングへ含まれます。 assessment#:#tst_highscore_top_num#:#トップランキングの長さ assessment#:#tst_highscore_top_num_description#:#何位をトップ順位リスト内に含めるかを決める -assessment#:#tst_highscore_top_num_unit#:#エントリー assessment#:#tst_highscore_top_table#:#トップ順位 assessment#:#tst_highscore_top_table_description#:#受験者はトップランクに含まれるテーブルで表示されます。 assessment#:#tst_highscore_wtime#:#テスト受験時間 @@ -1752,8 +1746,7 @@ assessment#:#tst_postpone_on#:#未回答問題を待ち行列にする assessment#:#tst_postpone_on_desc#:#ユーザが見ただけで回答しないで飛ばした問題は、テスト最後に自動再表示するように待ち行列になります。 assessment#:#tst_presentation_properties#:#テスト管理:問題の振る舞い assessment#:#tst_presentation_settings_section#:#Presentation -assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#テストとアセスメント - 印刷表示 +assessment#:#tst_previous_access_code_not_available#:#以前のコードは見当たりません! assessment#:#tst_proceed#:#Proceed assessment#:#tst_processing_time#:#制限時間 assessment#:#tst_processing_time_desc#:#受験者は決められた時間内でテスト受験ができます。時間はユーザが最初にテスト開始した時間からカウントされます。テスト保留時間のカウント停止はしません。 @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#テスト結果を表示 assessment#:#tst_show_side_list#:#脇に問題一覧を表示 assessment#:#tst_show_solution_answers_only#:#結果印刷表示(解答のみ) assessment#:#tst_show_solution_answers_only_desc#:#選択すると"コンテンツ編集"タブを使って問題の周りに配置したILIASコンテンツのページは印刷には表示されません。少し紙面スペースを保存したい場合はこのオプションを選択します。 -assessment#:#tst_show_solution_compare#:#解答一覧の正解と解答を比較 -assessment#:#tst_show_solution_compare_desc#:#受験者は模範解答の回答と自身の全体回答を比較して表示されます。このビューは、''Info'タブの'テスト結果表示ボタン'を通してアクセス可能な'詳細結果'内へ表示されます。ここに設定しても印刷領域の'回答のリスト'には表示されません。 -assessment#:#tst_show_solution_details#:#受験者の得点回答 -assessment#:#tst_show_solution_details_desc#:#詳細テスト結果表'へadd-onとして追加し、受験者は各問題のページのリンクを得ます。このリンクページには問題、受験者の回答、この回答が正しいかどうかの情報、この問題による得点等が含まれます。 assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#フィードバック @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#この前に能力は assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#これにより処理される能力の一つはこのテストは、必須問題最小数でトリガーされません。<br />必須問題数は: %sです。 assessment#:#tst_skl_level_thresholds_link#:#能力-スレッショールドを構成 assessment#:#tst_skl_level_thresholds_missing#:#関連する能力のスレッショールドがありません! -assessment#:#tst_skl_res_interpretation_hint_msg#:#単一テストの能力結果は限定的な意味であることを考慮してください。詳細は能力別に収集されます。何もエントリーのない単一能力は価値のない情報収集になります。 assessment#:#tst_skl_sub_tab_thresholds#:#能力しきい値 assessment#:#tst_sol_comp_expressions#:#能力しきい値 assessment#:#tst_solution_compare_cfg#:#正解比較用の構成 @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#プリセット回答は正しい assessment#:#tst_unchanged_order_is_correct#:#プリセット順番は正しい assessment#:#tst_use_previous_answers#:#前回の回答を使用 assessment#:#tst_use_previous_answers_description#:#参加者には前回使用の回答が表示されます。このオプションは登録開始前にInfoタブ上に参加者個々で有効する必要があります。 -assessment#:#tst_use_previous_answers_user#:#回答を続ける際の初期値に前の回答を使用 assessment#:#tst_user_finished_test#:#終了したテスト(%s) を使用 assessment#:#tst_view_competence_assign#:#割り当てプロパティを表示 assessment#:#tst_virtual_pass_header_lo_initial#:#学習目標に対する最初のテスト結果<br />%s @@ -2563,10 +2550,9 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information book#:#book_booking_objects#:#Booking Objects###19 08 2022 new variable book#:#book_booking_reminders#:#今後の予約 -book#:#book_bookings_per_user#:#Bookings per User###19 08 2022 new variable -book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable -book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable -book#:#book_bulk_data#:#Item Data###26 08 2024 new variable +book#:#book_bulk_confirmation#:#全ての項目が正しいことを確認してください。 +book#:#book_bulk_creation#:#大量作成 +book#:#book_bulk_data#:#項目データ book#:#book_cal_entry#:#予約名: book#:#book_confirm_booking#:#予約確認 book#:#book_confirm_booking_for_users#:#Are you sure you want to book this item for the following user(s)?###29 10 2025 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#メールアドレスとしてユ lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#これはコール毎に区別されますがILIASユーザに関して直接結論を許可する可能性があります。 lti#:#conf_privacy_ident_il_uuid_login#:#メールアドレスとしてユニークなILIASプラットフォームIDでフォーマットされて結合されたILIAS Login lti#:#conf_privacy_ident_il_uuid_login_info#:#これはコール毎に区別されますがILIASユーザに関して直接結論を許可する可能性があります。 +lti#:#conf_privacy_ident_il_uuid_random#:#EメールアドレスでユニークなILIASプラットフォームでフォーマットされて組み合されたランダムID###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#それぞれILIASオブジェクトとILIASユーザランダムIDは、コール毎に同一のままのランダムIDを生成します。オブジェクトを超えたユーザプロファイル生成がほぼ不可能でる事によりユーザに関する結論は、極めて限定的です。###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#EメールアドレスでユニークなILIASプラットフォームでフォーマットされて組み合されたハッシュ###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#これはコール毎に同じですが、ILIASユーザに関してはダイレクトに終結は許可されません。###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#EメールアドレスのILIASドメインでフォーマットされたハッシュ###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#これはコール毎に同じILIASプラットホームIDで可変の最高80文字よりかなり短く、ILIASユーザーに関して非常に限定された結果のみを許容。###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#メールアドレスとしてユニークなILIASプラットフォームでフォーマットされて結合されたILIASユーザID lti#:#conf_privacy_ident_il_uuid_user_id_info#:#これはコール毎に区別されますがILIASユーザに関して直接結論は許可しません。 lti#:#conf_privacy_ident_info#:#標準はメールアドレスが使用されます。ユニークなILIASプラットフォームid: @@ -11291,13 +11283,16 @@ lti#:#launched#:#リソースは既に起動しています。 lti#:#learning_progress_options#:#学習進捗オプション lti#:#lm_only_one_download_per_type#:#パブリックアクセス可能なタイプ(XML, HTML, SCORM)当たり1ファイルしか作成できない事に注意願います。 lti#:#lti13_hints#:#Hints###19 08 2022 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###19 08 2022 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###19 08 2022 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###19 08 2022 new variable lti#:#lti_13_step1#:#Step 1###19 08 2022 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###19 08 2022 new variable lti#:#lti_13_step2#:#Step 2###19 08 2022 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###19 08 2022 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#全ユーザ用のグローバルプロバイダーとしてプロバイダを承認 lti#:#lti_action_accept_providers_as_global#:#グローバルとしてプロバイダーを承認 lti#:#lti_action_delete_providers#:#プロバイダーを削除 @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:# 一つ以上にこのプロバイダ lti#:#lti_auth_failed_invalid_key#:#有効なconsumer keyがないので認証を失敗しました。 lti#:#lti_con_content_item#:#Support for Deep Linking###19 08 2022 new variable lti#:#lti_con_content_item_url#:#Content URL###19 08 2022 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###19 08 2022 new variable lti#:#lti_con_key_type#:#Public Key Type###19 08 2022 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###19 08 2022 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#LTI Consumerオブジェクトが作成され lti#:#lti_con_prov_custom_params#:#この特定のプロバイダー用のカスタムパラメータ lti#:#lti_con_prov_custom_params_info#:#フォームへ入力してください。 param1=value1; param2=value2 lti#:#lti_con_prov_description#:#説明 +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider lti#:#lti_con_prov_external_provider_info#:#External Providerと通信中ユーザへヒントが表示されます。External ProviderはILIASシステムのオペレータによりプロバイダに対しては不十分な影響として特徴づけられます。これは削除する権利がない時の場合です。 lti#:#lti_con_prov_group_options#:#グループオプションとプロバイダフィルター @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#自身のプロバイダー設定を作成 lti#:#lti_delete_consume_provider#:#プロバイダーを削除 lti#:#lti_delete_consume_providers#:#プロバイダーを削除 lti#:#lti_delete_provider#:#プロバイダーを削除 +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#LTI Consumerを編集 lti#:#lti_exit#:#LTI Sessionをクローズ lti#:#lti_exited#:#LTI セッションをクローズしました @@ -15619,6 +15621,7 @@ sess#:#sess_members_gallery#:#セッションギャラリー sess#:#sess_members_print_title#:#セッション参加者 sess#:#sess_msg_applicants_assigned#:#応募者はセッションを登録しました。 sess#:#sess_msg_applicants_removed#:#応募者はリストから削除しました。 +sess#:#sess_new#:#セッションを生成 sess#:#sess_new_registrations#:#リクエストへ参加 sess#:#sess_notification_option#:#オプション sess#:#sess_notification_option_inherit#:#親から引き継ぐ @@ -16733,7 +16736,7 @@ survey#:#survey_360_sure_appraisee_close#:#本当に全ての評価のサーベ survey#:#survey_360_sure_appraisee_close_admin#:#本当に次の評価者のサーベイを終了しますか? survey#:#survey_360_sure_delete_appraises#:#本当に次の評価者を削除しますか? survey#:#survey_360_sure_delete_raters#:#本当に次の%sの考課者を削除しますか? -survey#:#survey_access_codes#:#アクセスコードによる認証 +survey#:#survey_access_code#:#アクセスコードによる認証 survey#:#survey_access_codes_info#:#ユーザは"Info"タブのコード入力でサーベイへアクセスします。このアクセスコードは"受験者"タブ内の"アクセスコード"サブタブに作成されます。 survey#:#survey_activate_skill_service#:#能力サービスをアクティブ survey#:#survey_activate_skill_service_info#:#新規"能力"タブが表示されます。このタブ内の質問は能力へ割り当てられてしきい値が能力の特定のレベルに達していること示します。 diff --git a/lang/ilias_ka.lang b/lang/ilias_ka.lang index e1f247cd181c..f5155f81a636 100644 --- a/lang/ilias_ka.lang +++ b/lang/ilias_ka.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#გადავაგზავნოთ შეფასების მონაცემები როგორც -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#სერთიფიკატი (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#მძიმეთი გამოყოფილი ღირებულება (CSV) assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#გთხოვთ აირჩიოთ assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#თქვენი წინა პასუხები არ გამოიყენება სტანდარტების ღირებულებად მომავალ ტესტის ჩაბარების დროს assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:# დიახ, მე მსურს assessment#:#tst_finish_confirm_cancel_button#:#არა, დავბრუნდეთ წინამდებარე კითხვასთან assessment#:#tst_finish_confirmation_question#:#თქვენ აპირებთ ტესტის დასრულებას და დაშვებული ჩაბარებების მაქსიმალური რაოდენობის მიღწევას. თქვენ ვერ შეძლებთ ამ ტესტში ხელახლა შესვას პასუხების შესაცვლელად. Nამდვილად გსურთ ტესტის დასრულება? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#დასრულებული assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#დავმალოთ კითხვების სია assessment#:#tst_highscore_achieved_ts#:#Show date of test assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown. assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Show score assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown. assessment#:#tst_highscore_top_num#:#Number of ranks assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table. -assessment#:#tst_highscore_top_num_unit#:#entries assessment#:#tst_highscore_top_table#:#Show table 'top ranking' assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown. assessment#:#tst_highscore_wtime#:#Show working time @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#პრეზენტაციის პარამეტრები assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#ტესტი&შეფასება ამობეჭდვის წინ ჩვენება assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#ტესტის მაქსიმალური დრო assessment#:#tst_processing_time_desc#:#ტესტის წერის მაქსიმალური დრო იწყება მომხმარებლის მიერ ტესტის წერის მომენტიდან და მთავრდება შეყვანილი საათების, წუთებისა და წამების გასვლის შემდეგ @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#აჩვენე ტესტის პას assessment#:#tst_show_side_list#:#აჩვენე კითხვების სია ცალკე assessment#:#tst_show_solution_answers_only#:#შედეგების ამობეჭდვის წინ ჩვენება ( მხოლოდ პასუხები) assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#აჩვენე ამოხსნები ტესტის შედეგებში -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#აჩვენე პასუხების უკუკავშირი ტესტის შედეგებში @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#გამოიყენე წინა პასუხები assessment#:#tst_use_previous_answers_description#:#თუ შემოწმებულია, მონაწილეს შეუძლია გამოიყენოს პასუხები მომავალ ტესტში როგორც სტანდარტული ღირებულება, სხვა შემთხვევაში წინა შედეგები არ გამოჩნდება მომავალი ტესტის ჩაბარების დროს -assessment#:#tst_use_previous_answers_user#:#გამოიყენე ჩემი წინა შედეგი მომავალ ტესტში როგორ სტანდარტული ღირებულება assessment#:#tst_user_finished_test#:#მომხმარებელმა დაასრულა ტესტი assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_lt.lang b/lang/ilias_lt.lang index bc8de2f68284..947e15fd3520 100644 --- a/lang/ilias_lt.lang +++ b/lang/ilias_lt.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Eksportuoti vertinimo rezultatus kaip -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Sertifikatas (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Kableliu atskirta reikšmė (CSV) assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Prašome pasirinkti bent vertinimą (mark assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Jūsų ankstesni atsakymai nebus naudojami kaip numatytosio vertės būsimuose testo laikymuose assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring###28 08 2012 new variable assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Taip, aš noriu baigti testą assessment#:#tst_finish_confirm_cancel_button#:#Ne, grižti į ankstesnį atsakymą assessment#:#tst_finish_confirmation_question#:#Baigdami šį testą jūs būsite išnaudoję maksimalų šiam testui skirtų bandymų skaičių. Jūs nebegalėsite pakeisti savo pateiktų atsakymų. Ar tikrai norite baigti šį testą? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Baigtas assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Hide question list###24 07 2009 new variable assessment#:#tst_highscore_achieved_ts#:#Show date of test###28 08 2012 new variable assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown.###28 08 2012 new variable assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Show score###28 08 2012 new variable assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown.###28 08 2012 new variable assessment#:#tst_highscore_top_num#:#Number of ranks###28 08 2012 new variable assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table.###28 08 2012 new variable -assessment#:#tst_highscore_top_num_unit#:#entries###28 08 2012 new variable assessment#:#tst_highscore_top_table#:#Show table 'top ranking'###28 08 2012 new variable assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown.###28 08 2012 new variable assessment#:#tst_highscore_wtime#:#Show working time###28 08 2012 new variable @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Presentation Settings###12 06 2011 new variable assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Testavimo ir Vertinimo Peržiūra Spausdinimui assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Maks. atlikimo laikas assessment#:#tst_processing_time_desc#:#The maximum processing time starts from the time when a user starts a test and ends after the expiration of the entered hours, minutes and seconds.###09 06 2007 new variable @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Rodyti testo rezultatus assessment#:#tst_show_side_list#:#Show question list aside###24 07 2009 new variable assessment#:#tst_show_solution_answers_only#:#Rezultatai spausdinimo formatu (tik atsakymai) assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Įvertinimas detaliau -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Show Answer-Specific Feedback in Test Results###10 05 2007 new variable @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Naudoti Ankstesnius Atsakymus assessment#:#tst_use_previous_answers_description#:#Jei pažymėta, ankstesni dalyvio atsakymai bus naudojami kaip numatytosios reikšmės būsimuose testo laikymuose -assessment#:#tst_use_previous_answers_user#:#Naudoti mano ankstesnius atsakymus kaip numatytasias reikšmes būsimuose testo laikymuose assessment#:#tst_user_finished_test#:#User finished test (%s)###24 07 2009 new variable assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_nl.lang b/lang/ilias_nl.lang index f5e1608957b5..00b9b0ff66c4 100644 --- a/lang/ilias_nl.lang +++ b/lang/ilias_nl.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#Tonen Examennummer assessment#:#examid_in_test_res_desc#:#Tonen Examennummer assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Evaluatiegegevens exporteren als -assessment#:#exp_file_created#:#Export bestand aangemaakt. assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certificaat (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Door komma's gescheiden waarde(CVS) assessment#:#expected_result_type#:#Verwacht resultaat-type assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Selecteer op zijn minst één markerings- assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Je vorige antwoorden zullen niet gebruikt worden als standaardwaarden in toekomstige toetspogingen assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Wijzig Scores assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Ja, Ik wil de toets beeïndigen assessment#:#tst_finish_confirm_cancel_button#:#Nee, ga terug naar de vorige vraag assessment#:#tst_finish_confirmation_question#:#Je wilt de toets beeïndigen en het maximum aantal toegelaten pogingen overschrijden. Je zult niet meer in staat zijn om deze toets aan te passen. Ben je zeker dat je deze toets wilt beeïndigen assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#Verzend geen mailbericht als een gebruiker een toets afmaakt assessment#:#tst_finished#:#Klaar assessment#:#tst_form_dynamic_question_set_config#:#Doorgaan met vragenselectie assessment#:#tst_gap_analysis#:#Gap Analyse @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Verberg vragen bestand assessment#:#tst_highscore_achieved_ts#:#Toon toetsdatum assessment#:#tst_highscore_achieved_ts_description#:#Bepaalt of een kolom met de datum van de toets wordt getoond. assessment#:#tst_highscore_all_tables#:#Alle beoordelingen @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Toon score assessment#:#tst_highscore_score_description#:#Bepaalt of een kolom met de score wordt getoond. assessment#:#tst_highscore_top_num#:#Aantal scores assessment#:#tst_highscore_top_num_description#:#Bepaalt hoeveel items worden getoond in de top-score lijst. -assessment#:#tst_highscore_top_num_unit#:#bezoeken aan objecten assessment#:#tst_highscore_top_table#:#Toon tabel met top scores assessment#:#tst_highscore_top_table_description#:#Bepaalt of de tabel "top scores" wordt getoond. assessment#:#tst_highscore_wtime#:#Toon werktijd @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Presentatie instellingen assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Toets & Beoordeling Print View assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Max. toetsduur assessment#:#tst_processing_time_desc#:#De maximale toetsduur, deze begint op het moment dat een deelnemer een toets begint en eindigt na afloop van de opgegeven tijdsduur. Als deze optie wordt gebruikt moet ook de mogelijkheid om een toetst uit te schakelen worden uitgezet. @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Laat toetsresultaten zien assessment#:#tst_show_side_list#:#Tonen vragenlijst aan zijkant assessment#:#tst_show_solution_answers_only#:#Resultaten overzicht (alleen de antwoorden) assessment#:#tst_show_solution_answers_only_desc#:#Als geselecteerd zal de ILIAS inhoud die je rond een vraag hebt aangemaakt met behulp van de pagina editor niet worden getoond bij het afdrukken. Als je bezuinigt op papier, selecteer dan deze optie. -assessment#:#tst_show_solution_compare#:#Vergelijk antwoord met oplossing in antwoordenlijst -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Score details -assessment#:#tst_show_solution_details_desc#:#Als geselecteerd is de gedetailleerde oplossing beschikbaar voor deelnemers in de toetsresultaten. Dit is inclusief de exacte score voor ieder antwoord. Anders wordt alleen een overzicht met de vragentitles en de behaalde punten getoond. assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Toon antwoord feedback in toetsresultaten. @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competentiedrempel assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Gebruik vorige antwoorden assessment#:#tst_use_previous_answers_description#:#Indien aangevinkt, kan een deelnemer verkiezen om de vorige antwoorden te gebruiken aangezien de standaardwaarden passen toetsen, anders worden de vorige antwoorden voortaan getoond toets geen passen -assessment#:#tst_use_previous_answers_user#:#Vul bij toekomstige toetspogingen mijn eerder gegeven antwoorden alvast in. assessment#:#tst_user_finished_test#:#Gebruiker beëindigde toets (%s) assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Weet je zeker dat je de enqûete wilt survey#:#survey_360_sure_appraisee_close_admin#:#Weet je zeker dat je de 360° Feedback wilt sluiten voor de volgende gebruikers? survey#:#survey_360_sure_delete_appraises#:#Weet je zeker dat je de volgende beoordelingen wilt verwijderen? survey#:#survey_360_sure_delete_raters#:#Weet je zeker dat je de volgende feedbackgevers voor %s wilt verwijderen? -survey#:#survey_access_codes#:#Authentication by Access Codes###06 02 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###06 02 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the ‘Info’-tab. These access codes are generated in a sub-tab ‘Access Codes’ in the tab ‘Participants’.###06 02 2015 new variable survey#:#survey_activate_skill_service#:#Inschakelen van Competentie Service survey#:#survey_activate_skill_service_info#:#todo12 diff --git a/lang/ilias_pl.lang b/lang/ilias_pl.lang index d5fee2303dee..bb1511423509 100644 --- a/lang/ilias_pl.lang +++ b/lang/ilias_pl.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#Pokaż numer egzaminacyjny ILIAS assessment#:#examid_in_test_res_desc#:#Numer egzaminacyjny ILIAS widoczny jest w wynikach testu. assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Eksport danej szacunkowej -assessment#:#exp_file_created#:#Utworzono plik eksportowy ILIAS 2. assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certyfikat (PDF) assessment#:#exp_type_excel#:#Excel -assessment#:#exp_type_spss#:#SPSS assessment#:#expected_result_type#:#Oczekiwany typ wyniku assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Wybierz co najmniej jedną pozycję, aby assessment#:#tst_derive_new_pool#:#Utwórz nową pulę pytań assessment#:#tst_derive_new_pools#:#Utwórz nowe pule pytań assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session. -assessment#:#tst_dont_use_previous_answers#:#Twoje poprzednie odpowiedzi nie będą użyte jako domyślne wartości w następnych wykonaniach testu assessment#:#tst_edit_competence_assign#:#Przetwarzaj właściwości przydziału assessment#:#tst_edit_scoring#:#Edytuj punktację assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Tak, chcę skończyć test assessment#:#tst_finish_confirm_cancel_button#:#Nie, powrót do poprzedniej odpowiedzi assessment#:#tst_finish_confirmation_question#:#Kończysz test i wyczerpałeś wszystkie próby. Już nie będziesz mógł powtórzyć tego testu aby zmienić odpowiedzi. Na pewno chcesz skończyć test? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#Brak wiadomości assessment#:#tst_finished#:#Ukończone assessment#:#tst_form_dynamic_question_set_config#:#Bieżący wybór pytań assessment#:#tst_gap_analysis#:#Analiza GAP @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Ukryj listy pytań. assessment#:#tst_highscore_achieved_ts#:#Data assessment#:#tst_highscore_achieved_ts_description#:#Wyświetlana jest dodatkowa kolumna z czasem, w którym test został przeprowadzony. assessment#:#tst_highscore_all_tables#:#Własne miejsce na liście rankingowej i lista najlepszych @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Punkty assessment#:#tst_highscore_score_description#:#Wyświetlana jest dodatkowa kolumna z liczbą uzyskanych punktów. assessment#:#tst_highscore_top_num#:#Długość listy najlepszych assessment#:#tst_highscore_top_num_description#:#Określa, ile wpisów wyświetlanych jest w liście najlepszych. -assessment#:#tst_highscore_top_num_unit#:#Listy rankingowe assessment#:#tst_highscore_top_table#:#Lista najlepszych assessment#:#tst_highscore_top_table_description#:#Uczestnikom wyświetla się tabela z najlepszymi wynikami. assessment#:#tst_highscore_wtime#:#Czas pracy @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Pytania, których odpowiedzi uczestnicy anul assessment#:#tst_presentation_properties#:#Ustawienia prezentacji assessment#:#tst_presentation_settings_section#:#Presentation assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Test i ocena - Podgląd wydruku assessment#:#tst_proceed#:#Proceed assessment#:#tst_processing_time#:#Maks. czas wykonania assessment#:#tst_processing_time_desc#:#Maksymalny czas wykonania startuje od chwili, gdy użytkownik rozpocznie test i kończy się po podanym dopuszczalnym czasie (godzin, minut, i sekund). @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Pokaż wyniki testu assessment#:#tst_show_side_list#:#Lista pytań do assessment#:#tst_show_solution_answers_only#:#Wydruk wyników (tylko odpowiedzi) assessment#:#tst_show_solution_answers_only_desc#:#Jeśli aktywna jest opcja „Drukowanie wyników (tylko odpowiedzi)", treści ILIAS, które w zakładce "Przetwarzanie treści" można umieszczać przed i za właściwym tekstem pytania, nie będą drukowane. -assessment#:#tst_show_solution_compare#:#Pokaż najlepsze możliwe rozwiązanie w 'Tabeli ze szczegółowymi wynikami' -assessment#:#tst_show_solution_compare_desc#:#Uczestnikom prezentowany jest widok ogólny jako część 'Tabeli ze szczegółowymi wynikami', gdzie porównywane są odpowiedzi uczestników i najlepsze możliwe odpowiedzi.<br> Ten widok nie jest prezentowany za pomocą przycisku 'Lista odpowiedzi', nawet wówczas, gdy to ustawienie zostało tutaj aktywowane. -assessment#:#tst_show_solution_details#:#Szczegóły punktacji -assessment#:#tst_show_solution_details_desc#:#Uczestnicy oprócz 'Tabeli ze szczegółowymi danymi dotyczącymi wyników testu' otrzymają na osobnej stronie dla każdego pytania informacje o tym, jakich odpowiedzi udzielili, czy te odpowiedzi były prawidłowe oraz ile punktów za nie otrzymali. assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Pokaż specyficzną dla odpowiedzi reakcję w wynikach testu @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Kompetencje podnoszone assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#Przynajmniej jedna zawarta w teście kompetencja nie została przyporządkowana do wystarczającej liczby pytań.<br />Minimalna liczba dla przyporządkowanych pytań: %s assessment#:#tst_skl_level_thresholds_link#:#Skonfiguruj wartości progowe kompetencji assessment#:#tst_skl_level_thresholds_missing#:#Nie zdefiniowano jeszcze wartości progowych dla wszystkich istotnych kompetencji. -assessment#:#tst_skl_res_interpretation_hint_msg#:#Pamiętaj, że wyniki kompetencyjne jednego testu są miarodajne jedynie w ograniczonym zakresie. Im więcej informacji dotyczących poszczególnych kompetencji zebrano, tym bardziej miarodajne jest stwierdzenie. Jeśli niektóre kompetencje nie otrzymały żadnej wartości, oznacza to, że dla tej kompetencji brakowało informacji. assessment#:#tst_skl_sub_tab_thresholds#:#Wartości progowe kompetencji assessment#:#tst_sol_comp_expressions#:#Stwierdzenia porównawcze assessment#:#tst_solution_compare_cfg#:#Konfiguracja na potrzeby porównania odpowiedzi @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#Poprzednia odpowiedź jest prawid assessment#:#tst_unchanged_order_is_correct#:#Poprzedni układ jest poprawny. assessment#:#tst_use_previous_answers#:#Użyj poprzednich odpowiedzi assessment#:#tst_use_previous_answers_description#:#Jeśli zaznaczone, uczestnik może wybrać poprzednie odpowiedzi jako wartości domyślne w przyszłych wykonaniach testu, w przeciwnym razie poprzednie odpowiedzi nie są wyświetlane w kolejnych wykonaniach testu. -assessment#:#tst_use_previous_answers_user#:#Użyj moich poprzednich odpowiedzi jako domyślnych wartości w przyszłych wykonaniach testu assessment#:#tst_user_finished_test#:#Jeden uczestnik zakończył test (%s) assessment#:#tst_view_competence_assign#:#Pokaż właściwości przydziału assessment#:#tst_virtual_pass_header_lo_initial#:#Wyniki początkowe dla celu dydaktycznego<br />%s @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Informacja book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Dla każdego typu (XML, HTML, SCORM) można udostępnić tylko jeden plik do pobrania. lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Identyfikacja nie jest możliwa. Nie przekazano ważnego klucza odbiorcy. lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edytuj odbiorcę LTI lti#:#lti_exit#:#Zakończ sesję LTI lti#:#lti_exited#:#Sesja LTI zakończona @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Czy naprawdę chcesz zamknąć ankiet survey#:#survey_360_sure_appraisee_close_admin#:#Czy naprawdę chcesz zamknąć ankietę dla poniższych odbiorców feedbacku? survey#:#survey_360_sure_delete_appraises#:#Czy naprawdę chcesz usunąć poniższych odbiorców feedbacku? survey#:#survey_360_sure_delete_raters#:#0 -survey#:#survey_access_codes#:#Identyfikacja z kodami dostępu +survey#:#survey_access_code#:#Identyfikacja z kodami dostępu survey#:#survey_access_codes_info#:#Użytkownicy otrzymują dostęp do ankiety po wpisaniu w zakładce 'Informacje' kodu dostępu. Te kody dostępu generowane są w zakładce 'Uczestnicy' w podzakładce o tej samej nazwie. survey#:#survey_activate_skill_service#:#Aktywuj serwis kompetencyjny survey#:#survey_activate_skill_service_info#:#Wyświetlona zostanie kolejna zakładka 'Kompetencje'. Tutaj w pierwszej kolejności o pytań przydzielane są kompetencje, a następnie ustalane są wartości progowe dla osiągnięcia poszczególnych poziomów kompetencji. diff --git a/lang/ilias_pt.lang b/lang/ilias_pt.lang index bd5acbbe0cb5..d9ed52ab02f2 100644 --- a/lang/ilias_pt.lang +++ b/lang/ilias_pt.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ID de tentativa de teste ILIAS assessment#:#examid_in_test_res_desc#:#O ID de tentativa de teste ILIAS será incluído nos resultados do teste. assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Exportar dados de avaliação como -assessment#:#exp_file_created#:#Exportar ficheiro criado. assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certificado (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Comma Separated Value (CSV) assessment#:#expected_result_type#:#Tipo de resultado esperado assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Selecione pelo menos um avanço de nota p assessment#:#tst_derive_new_pool#:#Derivar novo banco de perguntas assessment#:#tst_derive_new_pools#:#Derivar novo banco de perguntas assessment#:#tst_dont_show_msg_again_in_current_session#:#Não mostrar esta mensagem novamente durante a minha sessão atual. -assessment#:#tst_dont_use_previous_answers#:#As suas respostas anteriores não serão usadas como valores predefinidos em futuras tentativas de teste assessment#:#tst_edit_competence_assign#:#Editar propriedades de atribuição assessment#:#tst_edit_scoring#:#Editar pontuação assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Sim, quero terminar o teste assessment#:#tst_finish_confirm_cancel_button#:#Notificação assessment#:#tst_finish_confirmation_question#:#Não, voltar à resposta anterior assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#Nenhum e-mail assessment#:#tst_finished#:#Terminado assessment#:#tst_form_dynamic_question_set_config#:#Continuar seleção de perguntas assessment#:#tst_gap_analysis#:#Análise de intervalo @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Data assessment#:#tst_highscore_achieved_ts#:#Será incluída na classificação uma coluna que contém a data do teste. assessment#:#tst_highscore_achieved_ts_description#:#Classificação própria do participante e Top da classificação assessment#:#tst_highscore_all_tables#:#Os participantes recebem informação sobre o Top da classificação e a respetiva posição própria na classificação. @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Será incluída na classificação uma coluna assessment#:#tst_highscore_score_description#:#Comprimento do Top de classificação assessment#:#tst_highscore_top_num#:#Especifica quantas classificações devem ser incluídas na lista de classificação. assessment#:#tst_highscore_top_num_description#:#Top de classificação -assessment#:#tst_highscore_top_num_unit#:#entradas assessment#:#tst_highscore_top_table#:#Aos participantes é apresentada uma tabela com o top das classificações. assessment#:#tst_highscore_top_table_description#:#Duração do teste assessment#:#tst_highscore_wtime#:#Será incluída na classificação uma coluna que contém a duração do teste. @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Seleção das perguntas do teste assessment#:#tst_presentation_properties#:#Lista de perguntas - Todas as perguntas de um banco de perguntas assessment#:#tst_presentation_settings_section#:#Os participantes revêm as perguntas de um banco de perguntas. As perguntas respondidas erradamente serão novamente apresentadas. As perguntas podem ser adicionadas e editadas num teste de funcionamento. assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Conjunto fixo de perguntas assessment#:#tst_proceed#:#Todos os participantes recebem o mesmo conjunto de perguntas. assessment#:#tst_processing_time#:#Conjunto aleatório de perguntas assessment#:#tst_processing_time_desc#:#Cada participante obtém um conjunto diferente de perguntas. As perguntas são selecionadas à sorte de um ou mais bancos de perguntas. @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Tempo médio para analisar assessment#:#tst_show_side_list#:#Primeira visita assessment#:#tst_show_solution_answers_only#:#Última visita assessment#:#tst_show_solution_answers_only_desc#:#Percentagem do trabalho total já feito -assessment#:#tst_show_solution_compare#:#Perguntas já processadas -assessment#:#tst_show_solution_compare_desc#:#Resultados de testes em anotações -assessment#:#tst_show_solution_details#:#Resultados de testes em pontos -assessment#:#tst_show_solution_details_desc#:#Tempo para trabalhar assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Para terminar este teste, tem de responder a todas as perguntas obrigatórias (*). @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#As competências não assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#Pelo menos uma das competências abordadas por este teste não é ativada pela quantidade mínima exigida de perguntas.<br />A quantidade de perguntas exigida: %s assessment#:#tst_skl_level_thresholds_link#:#Resultados de teste iniciais para o objetivo de aprendizagem<br />%s assessment#:#tst_skl_level_thresholds_missing#:#Faltam limites para as competências relevantes! -assessment#:#tst_skl_res_interpretation_hint_msg#:#Note que os resultados de competência a partir de um único teste tem uma importância limitada. Quanto mais informação é recolhida por competência, mais importância terá. Se houver competências únicas sem qualquer entrada, foi recolhida informação a menos. assessment#:#tst_skl_sub_tab_thresholds#:#Limites de competência assessment#:#tst_sol_comp_expressions#:#Expressões de comparação assessment#:#tst_solution_compare_cfg#:#Configuração para comparação de soluções @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#A resposta predefinida está corr assessment#:#tst_unchanged_order_is_correct#:#A ordem predefinida está correta assessment#:#tst_use_previous_answers#:#Cria automaticamente contas de utilizador ILIAS, para utilizadores autenticados com sucesso contra CAS, sem ter ainda uma conta ILIAS. assessment#:#tst_use_previous_answers_description#:#Ativar editor para idiomas selecionados -assessment#:#tst_use_previous_answers_user#:#O editor de páginas ativo foi modificado assessment#:#tst_user_finished_test#:#Utilizador terminou o teste (%s) assessment#:#tst_view_competence_assign#:#Ver propriedades de atribuição assessment#:#tst_virtual_pass_header_lo_initial#:#Usar o editor de páginas ILIAS @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Informação book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Todas as entradas relacionadas com o idioma e a base de dados foram apagadas e o plugin foi inativado. Agora pode remover o diretório do plugin e o código da fonte no diretório ‘Personalizar’ para desinstalar o plugin definitivamente. -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Note que pode apenas dar acesso público a um ficheiro por tipo (XML, HTML, SCORM). lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Autenticação falhou, nenhuma chave de consumidor fornecida. lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Editar consumidor LIT lti#:#lti_exit#:#Fechar sessão LTI lti#:#lti_exited#:#Sessão LTI fechada @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Tem a certeza que quer fechar o inqu survey#:#survey_360_sure_appraisee_close_admin#:#Tem a certeza que quer fechar os inquéritos para os seguintes avaliados? survey#:#survey_360_sure_delete_appraises#:#Tem a certeza que quer remover os seguintes avaliados? survey#:#survey_360_sure_delete_raters#:#Tem a certeza que quer remover os seguintes examinadores para %s? -survey#:#survey_access_codes#:#Autenticação por códigos de acesso +survey#:#survey_access_code#:#Autenticação por códigos de acesso survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'. survey#:#survey_activate_skill_service#:#Ativar serviço de competência survey#:#survey_activate_skill_service_info#:#todo12 diff --git a/lang/ilias_ro.lang b/lang/ilias_ro.lang index 463c89c53cb4..80a5089a6b90 100644 --- a/lang/ilias_ro.lang +++ b/lang/ilias_ro.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Exportati datele evaluarii ca -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certificate (PDF)###10 10 2006 new variable assessment#:#exp_type_excel#:#Microsoft Excel###10 Jul 2006 content changed -assessment#:#exp_type_spss#:#Valori separate de virgula (CSV) assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Va rugam sa selectati cel putin o nota in assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Your previous answers will not be used as default values in future test passes###12 11 2006 new variable assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring###28 08 2012 new variable assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Yes, I want to finish the test###10 Jul assessment#:#tst_finish_confirm_cancel_button#:#No, go back to the previous question###10 Jul 2006 new variable assessment#:#tst_finish_confirmation_question#:#You are going to finish this test and reach the maximum number of allowed test passes. You won't be able to enter this test again to change your answers. Do you really want to finish the test? ###10 Jul 2006 new variable assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Terminat assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Hide question list###24 07 2009 new variable assessment#:#tst_highscore_achieved_ts#:#Show date of test###28 08 2012 new variable assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown.###28 08 2012 new variable assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Show score###28 08 2012 new variable assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown.###28 08 2012 new variable assessment#:#tst_highscore_top_num#:#Number of ranks###28 08 2012 new variable assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table.###28 08 2012 new variable -assessment#:#tst_highscore_top_num_unit#:#entries###28 08 2012 new variable assessment#:#tst_highscore_top_table#:#Show table 'top ranking'###28 08 2012 new variable assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown.###28 08 2012 new variable assessment#:#tst_highscore_wtime#:#Show working time###28 08 2012 new variable @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Presentation Settings###12 06 2011 new variable assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Verificare imprimare test si examen assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Timpul maxim de procesare assessment#:#tst_processing_time_desc#:#The maximum processing time starts from the time when a user starts a test and ends after the expiration of the entered hours, minutes and seconds.###09 06 2007 new variable @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Aratati rezultatele testului assessment#:#tst_show_side_list#:#Show question list aside###24 07 2009 new variable assessment#:#tst_show_solution_answers_only#:#Results print view (answers only)###14 11 2007 new variable assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Score details###10 Jul 2006 new variable -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Show Answer-Specific Feedback in Test Results###10 05 2007 new variable @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Use Previous Answers###26 10 2006 new variable assessment#:#tst_use_previous_answers_description#:#If checked, the previous answers of a participant will be used as default values in future test passes###26 10 2006 new variable -assessment#:#tst_use_previous_answers_user#:#Use my previous answers as default values in future test passes###26 10 2006 new variable assessment#:#tst_user_finished_test#:#User finished test (%s)###24 07 2009 new variable assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_ru.lang b/lang/ilias_ru.lang index f3e1840bba63..ddd4b5d42b59 100644 --- a/lang/ilias_ru.lang +++ b/lang/ilias_ru.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Экспортировать данные оценивания как -assessment#:#exp_file_created#:#Export file created. assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Сертификат (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Текст разделенный запятыми (CSV) assessment#:#expected_result_type#:#Expected result type assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Пожалуйста, выберите х assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Ваши предыдущие ответы не будут использоваться, как значения по умолчанию при следующих прохождениях теста assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Оценить assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Да, я хочу закончить т assessment#:#tst_finish_confirm_cancel_button#:#Нет, вернуться к предыдущему вопросу assessment#:#tst_finish_confirmation_question#:#You are going to finish this test and reach the maximum number of allowed test passes. You won't be able to enter this test again to change your answers. Do you really want to finish the test? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Окончен assessment#:#tst_form_dynamic_question_set_config#:#Продолжить выбор вопросов assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Скрыть список вопросов assessment#:#tst_highscore_achieved_ts#:#Показать дату прохождения теста assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown. assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Показать баллы assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown. assessment#:#tst_highscore_top_num#:#Число рангов assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table. -assessment#:#tst_highscore_top_num_unit#:#записи assessment#:#tst_highscore_top_table#:#Показать таблицу 'лучший ранг' assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown. assessment#:#tst_highscore_wtime#:#Показать время работы @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Настройки отображения assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Тесты и оценки - просмотр перед печатью assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Макс. время работы assessment#:#tst_processing_time_desc#:#The maximum processing time begins to countdown the moment a user starts a test for the first time and ends when the given time period expires. If this option is used, the option of suspending a test should be deactivated (see 'Sequence Settings') because suspending the test does prevent the maximum processing time from counting down. @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Просмотреть результаты те assessment#:#tst_show_side_list#:#Показать список вопросов сбоку assessment#:#tst_show_solution_answers_only#:#Печатный вид результатов (только ответы) assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Показать решения в результатах теста -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Показать отзывы на отдельные вопросы в результатах теста @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Использовать предыдущие ответы assessment#:#tst_use_previous_answers_description#:#Если включено, то участник тестирования может использовать ранее выбранные ответы как значения по умолчанию для будущих попыток прохождения теста, иначе ранее выбранные ответы не отображаются в последующих попытках. -assessment#:#tst_use_previous_answers_user#:#Использовать мои предыдущие ответы, как значения по умолчанию для будущих прохождений assessment#:#tst_user_finished_test#:#Пользователь завершил тест (%s) assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees? survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees? survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s? -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_sk.lang b/lang/ilias_sk.lang index 4ffba0a69445..c31d28dac398 100644 --- a/lang/ilias_sk.lang +++ b/lang/ilias_sk.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Exportovat data hodnocení jako -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certifikát (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Desetinnou čárkou oddělená hodnota (CSV) assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Vyberte alespoň jednu známku kroku ke s assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Vaše předchozí odpovědi nebudou použity jako výchozí hodnoty v budoucích průchodech testem assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring###28 08 2012 new variable assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Ano, chci tento test ukončit assessment#:#tst_finish_confirm_cancel_button#:#Ne, jít zpět na předchozí otázku assessment#:#tst_finish_confirmation_question#:#Hodláte ukončit tento test a dosáhl(a) jste maximálního počtu povolených průchodů testem. Nebudete již moci do tohoto testu vstoupit znovu a změnit své odpovědi. Upravdu chcete tento test ukončit? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Ukončeno assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Skrýt seznam otázek assessment#:#tst_highscore_achieved_ts#:#Show date of test###28 08 2012 new variable assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown.###28 08 2012 new variable assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Show score###28 08 2012 new variable assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown.###28 08 2012 new variable assessment#:#tst_highscore_top_num#:#Number of ranks###28 08 2012 new variable assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table.###28 08 2012 new variable -assessment#:#tst_highscore_top_num_unit#:#entries###28 08 2012 new variable assessment#:#tst_highscore_top_table#:#Show table 'top ranking'###28 08 2012 new variable assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown.###28 08 2012 new variable assessment#:#tst_highscore_wtime#:#Show working time###28 08 2012 new variable @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Presentation Settings###12 06 2011 new variable assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Zobrazit přehled testu a hodnocení assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Max. čas zpracování assessment#:#tst_processing_time_desc#:#Maximum času na zpracování testu začíná okamžikem prvního startu uživatele a končí po vypršení vložené hodiny, minuty a sekundy. @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Zobrazit výsledky testu assessment#:#tst_show_side_list#:#Zobrazit boční seznam otázek assessment#:#tst_show_solution_answers_only#:#Přehled výsledků (jen odpovědi) assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Zobrazit řešení ve výsledcích testu -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Zobrazit odpovědi-specifikovaný ohlas ve výsledcích testu @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Použít předchozí odpovědi assessment#:#tst_use_previous_answers_description#:#Pokud je vybráno, účastník může zvolit použití předchozích odpovědí jako výchozích hodnot v dalších průchodech testem, jinak předchozí odpovědi nebudou v dalších průchodech testem zobrazeny. -assessment#:#tst_use_previous_answers_user#:#Použít mé předchozí odpovědi jako výchozí hodnoty v budoucích průchodech testem assessment#:#tst_user_finished_test#:#Uživatel ukončil test (%s) assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_sl.lang b/lang/ilias_sl.lang index 58d8dad58fa1..f075c41fb1c5 100644 --- a/lang/ilias_sl.lang +++ b/lang/ilias_sl.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#Prikaži ILIAS številko preizkusa: assessment#:#examid_in_test_res_desc#:#V rezultatih testa je prikazana ILIAS številka preizkusa: assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Izvozi ocenjevalne podatke kot -assessment#:#exp_file_created#:#Datoteka za izvoz je ustvarjena. assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certifikat (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Z vejico ločene vrednosti (CSV) assessment#:#expected_result_type#:#Pričakovani tip rezultata assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Izberite vsaj eno oceno, ki jo želite od assessment#:#tst_derive_new_pool#:#Izpelji novo skupino vprašanj assessment#:#tst_derive_new_pools#:#Ustvarite nove skupine vprašanj assessment#:#tst_dont_show_msg_again_in_current_session#:#Ne prikaži več tega sporočila med mojo trenutno sejo. -assessment#:#tst_dont_use_previous_answers#:#Vaši prejšnji odgovori ne bodo uporabljeni kot privzete vrednosti pri prihodnjih opravljanjih testa assessment#:#tst_edit_competence_assign#:#Obdelaj značilnosti dodelitve assessment#:#tst_edit_scoring#:#Drugo ocenjevanje assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Da, želim končati test assessment#:#tst_finish_confirm_cancel_button#:#Ne, rad bi se vrnil na prejšnji odgovor assessment#:#tst_finish_confirmation_question#:#Kmalu boste zaključili ta test in dosegli maksimalno število dovoljenih opravljanj testa. Po tem se ne boste mogli znova prijaviti na ta test, da bi spremenili svoje odgovore. Ali res želite dokončati test? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#Ni obvestila assessment#:#tst_finished#:#Zaključeno assessment#:#tst_form_dynamic_question_set_config#:#Zaporedni izbor vprašanj assessment#:#tst_gap_analysis#:#Analiza praznine @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Seznam vprašanj iz assessment#:#tst_highscore_achieved_ts#:#Date assessment#:#tst_highscore_achieved_ts_description#:#Prikaže se dodaten stolpec z datumom testiranja. assessment#:#tst_highscore_all_tables#:#Lastna razvrstitev in seznam najboljših @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Točke assessment#:#tst_highscore_score_description#:#Prikaže se dodaten stolpec z informacijo o doseženih točkah. assessment#:#tst_highscore_top_num#:#Dolžina seznama najboljših assessment#:#tst_highscore_top_num_description#:#Določi število prikazanih vnosov s seznama najboljših -assessment#:#tst_highscore_top_num_unit#:#Razvrstitev assessment#:#tst_highscore_top_table#:#Seznam najboljših assessment#:#tst_highscore_top_table_description#:#Udeležencem se prikaže tabela z najboljšimi razvrstitvami. assessment#:#tst_highscore_wtime#:#Trajanje obdelave @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Vprašanja, pri katerih udeleženci odgovore assessment#:#tst_presentation_properties#:#Izvedba: Lastnosti vprašanj assessment#:#tst_presentation_settings_section#:#Prikaz assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Test in ocena - prikaz za tiskanje assessment#:#tst_proceed#:#Nadaljuj assessment#:#tst_processing_time#:#Omeji trajanje obdelave assessment#:#tst_processing_time_desc#:#Udeleženci imajo omejen čas opravljanja testa. Čas teče od trenutka, ko udeleženec prvič začne s testom. "Prekini test" ne ustavi časa obdelave. Če je število možnih opravljanj testa omejeno, se na zavihku »Nadzorna plošča« prikaže dodatna funkcija, ki udeležencem omogoči dodatni čas. @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Rezultati testa assessment#:#tst_show_side_list#:#Seznam vprašanj za assessment#:#tst_show_solution_answers_only#:#Tiskana različica rezultatov (samo odgovori) assessment#:#tst_show_solution_answers_only_desc#:#Če je izbrana "Tiskana različica rezultatov (samo odgovori)", vsebine v ILIAS, ki jih prek zavihka "Uredi vsebino" lahko uvrstite pred in za besedilom vprašanja z zavihkom 'Uredi vsebino', ne bodo vidne na izpisu. -assessment#:#tst_show_solution_compare#:#Pokaži najboljšo rešitev v ‚Tabela s podrobnimi rezultati testa' -assessment#:#tst_show_solution_compare_desc#:#Udeležencem se kot del ‚Tabele s podrobnimi rezultati testa' prikaže pregled z vzporednim prikazom njihovih odgovorov in najboljših možnih rešitev. <br> Ta pregled ni prikazan v podzavihku ‚Oceni odgovore' zavihka ‚Rezultati‘, čeprav je tukaj izbrana ta rešitev. -assessment#:#tst_show_solution_details#:#Ocenjeni odgovori udeležencev -assessment#:#tst_show_solution_details_desc#:#Poleg ‚Tabele s podrobnimi rezultati testa' udeleženci za vsako vprašanje na posebni strani prejmejo prikaz lastnega odgovora, informacijo o tem, ali je bil odgovor pravilen in koliko točk so prejeli zanj. assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Povratne informacije @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Kompetence se ugotavlj assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#Najmanj ena od kompetenc, ki jih vključuje test, ni bila dodeljena zadostnemu številu vprašanj. Za te kompetence niso zabeleženi nobeni vnosi kompetenc za udeležence.<br />Minimalno število za dodeljena vprašanja: %s assessment#:#tst_skl_level_thresholds_link#:#Konfiguriraj mejne vrednosti kompetenc assessment#:#tst_skl_level_thresholds_missing#:#Za vse relevantne kompetence še ni opredeljenih mejnih vrednosti! -assessment#:#tst_skl_res_interpretation_hint_msg#:#Upoštevajte, da je pomen rezultatov kompetenc iz enega testa omejen. Čim več je zbranih informacij o posameznih kompetencah, bolj verodostojno je sporočilo. Če za posamezne kompetence ni nobenega vnosa, je bilo zanje na voljo premalo podatkov. assessment#:#tst_skl_sub_tab_thresholds#:#Mejne vrednosti kompetenc assessment#:#tst_sol_comp_expressions#:#Primerjalni izrazi assessment#:#tst_solution_compare_cfg#:#Konfiguracija za primerjavo odgovorov @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#Privzeti odgovor je pravilen. assessment#:#tst_unchanged_order_is_correct#:#Privzeti vrstni red je pravilen. assessment#:#tst_use_previous_answers#:#Uporaba prejšnjih rešitev assessment#:#tst_use_previous_answers_description#:#Udeležencem prikaže odgovore iz prejšnjega opravljanja testa. To možnost mora udeleženec aktivirati v zavihku 'Informacije' pred začetkom testa. -assessment#:#tst_use_previous_answers_user#:#Uporabi moje rešitve iz prejšnjega opravljanja testa kot privzete vrednosti assessment#:#tst_user_finished_test#:#Udeleženec je zaključil test (%s) assessment#:#tst_view_competence_assign#:#Pokaži lastnosti dodeljevanja assessment#:#tst_virtual_pass_header_lo_initial#:#Vstopni rezultati za učni cilj <br/>%s @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Informacija book#:#book_booking_objects#:#Booking Objects###19 08 2022 new variable book#:#book_booking_reminders#:#Rezervacije na čakanju -book#:#book_bookings_per_user#:#Bookings per User###19 08 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User Id combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user. lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formated as an email adress. lti#:#conf_privacy_ident_il_uuid_login_info#:#This is identical to each call, but may allow a direct conclusion about the ILIAS user. +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formated as an email adress. lti#:#conf_privacy_ident_il_uuid_user_id_info#:#This is identical to each call, but doesn't allow a direct conclusion about the ILIAS user. lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched. lti#:#learning_progress_options#:#Options for Learning Progress lti#:#lm_only_one_download_per_type#:#Za vsak tip (XML, HTML, SCORM) lahko daste na razpolago samo eno datoteko za prenos. lti#:#lti13_hints#:#Hints###19 08 2022 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###19 08 2022 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###19 08 2022 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###19 08 2022 new variable lti#:#lti_13_step1#:#Step 1###19 08 2022 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###19 08 2022 new variable lti#:#lti_13_step2#:#Step 2###19 08 2022 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###19 08 2022 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global lti#:#lti_action_delete_providers#:#Delete Providers @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Avtentikacija ni mogoča. Noben veljaven consumer key ni bil prenesen. lti#:#lti_con_content_item#:#Support for Deep Linking###19 08 2022 new variable lti#:#lti_con_content_item_url#:#Content URL###19 08 2022 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###19 08 2022 new variable lti#:#lti_con_key_type#:#Public Key Type###19 08 2022 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###19 08 2022 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2 lti#:#lti_con_prov_description#:#Description +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete. lti#:#lti_con_prov_group_options#:#Options to group and filter Providers @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings lti#:#lti_delete_consume_provider#:#Delete Provider lti#:#lti_delete_consume_providers#:#Delete Providers lti#:#lti_delete_provider#:#Delete Provider +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Uredi potrošnika LTI lti#:#lti_exit#:#Zaključi sejo LTI lti#:#lti_exited#:#Seja LTI je zaključena @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Ali res želite zapreti anketo za vse survey#:#survey_360_sure_appraisee_close_admin#:#Ali res želite zapreti anketo za naslednje prejemnike povratnih informacij? survey#:#survey_360_sure_delete_appraises#:#Ali res želite odstraniti naslednje ocenjevane osebe? survey#:#survey_360_sure_delete_raters#:#Ali res želite odstraniti naslednje dajalce povratnih informacij za %s? -survey#:#survey_access_codes#:#Avtentikacija s kodo za dostop +survey#:#survey_access_code#:#Avtentikacija s kodo za dostop survey#:#survey_access_codes_info#:#Uporabniki dobijo dostop do ankete z vnosom kode za dostop v zavihku 'Info'. Te kode za dostop se ustvarijo v istoimenskem podzavihku zavihku 'Udeleženec'. survey#:#survey_activate_skill_service#:#Aktiviraj kompetenčno podporo survey#:#survey_activate_skill_service_info#:#Prikazal se bo nadaljnji zavihek 'Kompetence'. Tukaj so najprej vprašanjem dodeljene kompetence in nato se nastavijo mejne vrednosti za doseganje določene ravni kompetenc. diff --git a/lang/ilias_sq.lang b/lang/ilias_sq.lang index e2a91e6c844b..554a51935d25 100644 --- a/lang/ilias_sq.lang +++ b/lang/ilias_sq.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Eksporto të dhënat e vlerësimit si -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certificate (PDF)###10 10 2006 new variable assessment#:#exp_type_excel#:#Microsoft Excel###17 May 2005 content changed -assessment#:#exp_type_spss#:#Vlera të ndara me presje (CSV) assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Ju lutem zgjedhni së paku një rresht t assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Your previous answers will not be used as default values in future test passes###12 11 2006 new variable assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring###28 08 2012 new variable assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Yes, I want to finish the test###10 Jul assessment#:#tst_finish_confirm_cancel_button#:#No, go back to the previous question###10 Jul 2006 new variable assessment#:#tst_finish_confirmation_question#:#You are going to finish this test and reach the maximum number of allowed test passes. You won't be able to enter this test again to change your answers. Do you really want to finish the test? ###10 Jul 2006 new variable assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Finished ### 2006-8-11 --- Add new translation here. assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Hide question list###24 07 2009 new variable assessment#:#tst_highscore_achieved_ts#:#Show date of test###28 08 2012 new variable assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown.###28 08 2012 new variable assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Show score###28 08 2012 new variable assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown.###28 08 2012 new variable assessment#:#tst_highscore_top_num#:#Number of ranks###28 08 2012 new variable assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table.###28 08 2012 new variable -assessment#:#tst_highscore_top_num_unit#:#entries###28 08 2012 new variable assessment#:#tst_highscore_top_table#:#Show table 'top ranking'###28 08 2012 new variable assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown.###28 08 2012 new variable assessment#:#tst_highscore_wtime#:#Show working time###28 08 2012 new variable @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Presentation Settings###12 06 2011 new variable assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Test & Assessment Print View ### 2006-8-11 --- Add new translation here. assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Koha maksimale e procesimit assessment#:#tst_processing_time_desc#:#The maximum processing time starts from the time when a user starts a test and ends after the expiration of the entered hours, minutes and seconds.###09 06 2007 new variable @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Shih rezultatet e testit assessment#:#tst_show_side_list#:#Show question list aside###24 07 2009 new variable assessment#:#tst_show_solution_answers_only#:#Results print view (answers only)###14 11 2007 new variable assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Score details###10 Jul 2006 new variable -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Show Answer-Specific Feedback in Test Results###10 05 2007 new variable @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Use Previous Answers###26 10 2006 new variable assessment#:#tst_use_previous_answers_description#:#If checked, the previous answers of a participant will be used as default values in future test passes###26 10 2006 new variable -assessment#:#tst_use_previous_answers_user#:#Use my previous answers as default values in future test passes###26 10 2006 new variable assessment#:#tst_user_finished_test#:#User finished test (%s)###24 07 2009 new variable assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_sr.lang b/lang/ilias_sr.lang index a1f7a363881c..86538bcfc9c2 100644 --- a/lang/ilias_sr.lang +++ b/lang/ilias_sr.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Ispišite podatke o ocenjivanju kao -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certificate (PDF)###10 10 2006 new variable assessment#:#exp_type_excel#:#Microsoft Excel###17 May 2005 content changed -assessment#:#exp_type_spss#:#Zarezom odvojene vrednosti (CSV) assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Molimo odaberite bar jedan postupak ocenj assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Your previous answers will not be used as default values in future test passes###12 11 2006 new variable assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring###28 08 2012 new variable assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Yes, I want to finish the test###10 Jul assessment#:#tst_finish_confirm_cancel_button#:#No, go back to the previous question###10 Jul 2006 new variable assessment#:#tst_finish_confirmation_question#:#You are going to finish this test and reach the maximum number of allowed test passes. You won't be able to enter this test again to change your answers. Do you really want to finish the test? ###10 Jul 2006 new variable assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Finished ### 2006-8-11 --- Add new translation here. assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Hide question list###24 07 2009 new variable assessment#:#tst_highscore_achieved_ts#:#Show date of test###28 08 2012 new variable assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown.###28 08 2012 new variable assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Show score###28 08 2012 new variable assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown.###28 08 2012 new variable assessment#:#tst_highscore_top_num#:#Number of ranks###28 08 2012 new variable assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table.###28 08 2012 new variable -assessment#:#tst_highscore_top_num_unit#:#entries###28 08 2012 new variable assessment#:#tst_highscore_top_table#:#Show table 'top ranking'###28 08 2012 new variable assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown.###28 08 2012 new variable assessment#:#tst_highscore_wtime#:#Show working time###28 08 2012 new variable @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Presentation Settings###12 06 2011 new variable assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Test & Assessment Print View ### 2006-8-11 --- Add new translation here. assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Max. vreme obrade assessment#:#tst_processing_time_desc#:#The maximum processing time starts from the time when a user starts a test and ends after the expiration of the entered hours, minutes and seconds.###09 06 2007 new variable @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Prikaži rezultate testa assessment#:#tst_show_side_list#:#Show question list aside###24 07 2009 new variable assessment#:#tst_show_solution_answers_only#:#Results print view (answers only)###14 11 2007 new variable assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Score details###10 Jul 2006 new variable -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Show Answer-Specific Feedback in Test Results###10 05 2007 new variable @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Use Previous Answers###26 10 2006 new variable assessment#:#tst_use_previous_answers_description#:#If checked, the previous answers of a participant will be used as default values in future test passes###26 10 2006 new variable -assessment#:#tst_use_previous_answers_user#:#Use my previous answers as default values in future test passes###26 10 2006 new variable assessment#:#tst_user_finished_test#:#User finished test (%s)###24 07 2009 new variable assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_sv.lang b/lang/ilias_sv.lang index 0f22833e0343..72ee29f35f07 100644 --- a/lang/ilias_sv.lang +++ b/lang/ilias_sv.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#Visa ILIAS provnummer assessment#:#examid_in_test_res_desc#:#I testresultaten, statistiken och Excel-exporten visas ILIAS-examensnumret. assessment#:#exp_all_test_runs#:#All test runs###21 11 2023 new variable assessment#:#exp_eval_data#:#Exportera utvärderingsdata som -assessment#:#exp_file_created#:#Exportfil genererad. assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt assessment#:#exp_type_certificate#:#Certifikat (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Kommaseparerade värden (CSV) assessment#:#expected_result_type#:#Typ av förväntat resultat assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Välj minst en årskurs för att ta bort! assessment#:#tst_derive_new_pool#:#Skapa ny frågepool assessment#:#tst_derive_new_pools#:#Skapa nya frågepooler assessment#:#tst_dont_show_msg_again_in_current_session#:#Visa inte detta meddelande igen i min nuvarande session. -assessment#:#tst_dont_use_previous_answers#:#Dina tidigare svar kommer inte att användas som standardvärden i framtida testkörningar assessment#:#tst_edit_competence_assign#:#Redigera egenskaper för tilldelning assessment#:#tst_edit_scoring#:#Ändra betyg assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###21 11 2023 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Ja, jag vill avsluta testet assessment#:#tst_finish_confirm_cancel_button#:#Nej, jag vill gå tillbaka till det senaste svaret assessment#:#tst_finish_confirmation_question#:#Du är på väg att avsluta testet och nå det maximala antalet tillåtna testkörningar. Efter det kommer du inte längre att kunna komma åt testet igen för att ändra dina svar. Vill du verkligen avsluta testet? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###21 11 2023 new variable -assessment#:#tst_finish_notification_no#:#Ingen anmälan assessment#:#tst_finished#:#Färdig assessment#:#tst_form_dynamic_question_set_config#:#Kontinuerligt urval av frågor assessment#:#tst_gap_analysis#:#Analys av luckor @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###21 11 2023 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###21 11 2023 new variable assessment#:#tst_hide_pagecontents#:# Dölj sidans innehåll assessment#:#tst_hide_pagecontents_desc#:#ILIAS-innehåll som placeras före och efter den faktiska frågetexten via knappen "Redigera sida" visas inte i resultatvyerna och utskriften. -assessment#:#tst_hide_side_list#:#Frågelista från assessment#:#tst_highscore_achieved_ts#:#Datum assessment#:#tst_highscore_achieved_ts_description#:#En extra kolumn med tiden för testet visas. assessment#:#tst_highscore_all_tables#:#Egen rankning och leaderboard @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Poäng assessment#:#tst_highscore_score_description#:#Ytterligare en kolumn visas med antalet uppnådda poäng. assessment#:#tst_highscore_top_num#:#Bästa listlängd assessment#:#tst_highscore_top_num_description#:#Bestämmer hur många poster som visas i topplistan. -assessment#:#tst_highscore_top_num_unit#:#Placeringar assessment#:#tst_highscore_top_table#:#Bästalista assessment#:#tst_highscore_top_table_description#:#Deltagarna kommer att få se en tabell med de bästa placeringarna. assessment#:#tst_highscore_wtime#:#Bearbetningstid @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Frågor vars svar deltagarna ignorerar eller assessment#:#tst_presentation_properties#:#Utförande assessment#:#tst_presentation_settings_section#:#Presentation assessment#:#tst_previous_access_code_not_available#:#No previous code available!###21 11 2023 new variable -assessment#:#tst_print#:#Test och bedömning - utskriftsvy assessment#:#tst_proceed#:#Fortsättning assessment#:#tst_processing_time#:#Begränsad bearbetningstid assessment#:#tst_processing_time_desc#:#Använd denna inställning för e-tester/distanstester för att ge deltagarna en fast tidsperiod för att slutföra testet. Tiden löper för varje deltagare från det ögonblick då den första testkörningen startades. "Avbryt test" stoppar inte testets varaktighet @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Testresultat assessment#:#tst_show_side_list#:#Frågelista till assessment#:#tst_show_solution_answers_only#:#Skriv ut resultaten (endast svar) assessment#:#tst_show_solution_answers_only_desc#:#Om "Skriv ut resultat (endast svar)" är markerat, kommer ILIAS-innehåll som du kan placera före och efter den faktiska frågetexten via fliken "Redigera innehåll" i frågorna inte att visas i en utskrift. -assessment#:#tst_show_solution_compare#:#Visa bästa möjliga lösning i 'Tabell med detaljerade testresultat'. -assessment#:#tst_show_solution_compare_desc#:#Deltagarna presenteras med en översikt som en del av 'Tabell med detaljerade testresultat', som jämför deras egna svar och den bästa möjliga lösningen. <br> Denna översikt visas inte i underfliken "Poängbedömda svar" på fliken "Resultat", även om denna i -assessment#:#tst_show_solution_details#:#Rated svar som en lista -assessment#:#tst_show_solution_details_desc#:#En lista med dina egna svar läggs till i tabellen "Detaljerade testresultat". assessment#:#tst_show_solution_details_singlepage#:#Relaterade svar på enskilda sidor assessment#:#tst_show_solution_details_singlepage_desc#:#Deltagarna kan ringa upp varje fråga individuellt och se om deras svar var korrekta och hur många poäng de fick. assessment#:#tst_show_solution_feedback#:#Tillbaka @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Kompetens samlas endas assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#Minst en kompetens som tas upp i testet har inte tilldelats ett tillräckligt antal frågor. För dessa kompetenser registreras inga kompetensposter för deltagarna.<br />Minsta antal tilldelade frågor assessment#:#tst_skl_level_thresholds_link#:#Konfigurera tröskelvärden för kompetens assessment#:#tst_skl_level_thresholds_missing#:#Tröskelvärden har ännu inte definierats för alla relevanta kompetenser! -assessment#:#tst_skl_res_interpretation_hint_msg#:#Tänk på att kompetensresultaten från ett enskilt test endast är villkorligt meningsfulla. Ju mer information som samlas in om de enskilda kompetenserna, desto mer giltigt blir påståendet. Om enskilda kompetenser inte har angetts, har för lite information assessment#:#tst_skl_sub_tab_thresholds#:#Tröskelvärden för kompetens assessment#:#tst_sol_comp_expressions#:#Jämförelse av uttryck assessment#:#tst_solution_compare_cfg#:#Konfiguration för jämförelse av svar @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#Det angivna svaret är korrekt. assessment#:#tst_unchanged_order_is_correct#:#Det givna arrangemanget är korrekt. assessment#:#tst_use_previous_answers#:#Använda tidigare lösningar assessment#:#tst_use_previous_answers_description#:#Visar deltagarna svaren från föregående testkörning. Alternativet måste aktiveras av deltagaren via en kryssruta på fliken "Info" innan testet påbörjas. -assessment#:#tst_use_previous_answers_user#:#Använd mina lösningar från en tidigare testkörning som standardvärden assessment#:#tst_user_finished_test#:#En deltagare har avslutat testet (%s) assessment#:#tst_view_competence_assign#:#Visa egenskaper för tilldelning assessment#:#tst_virtual_pass_header_lo_initial#:#Establishment-resultat för lärandemålet<br />%s @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###21 11 2023 new variable book#:#book_booking_information#:#Information book#:#book_booking_objects#:#Bokningsobjekt book#:#book_booking_reminders#:#Väntande reservationer -book#:#book_bookings_per_user#:#Bokningar per användare book#:#book_bulk_confirmation#:#Please check, if all values are listed correctly.###21 11 2023 new variable book#:#book_bulk_creation#:#Bulk Creation###21 11 2023 new variable book#:#book_bulk_data#:#Object Data###21 11 2023 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#Externt användar-ID kombinerat m lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#Detta är identiskt med varje samtal, men kan göra det möjligt att dra direkta slutsatser om användaren. lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS-inloggning som e-postadress, kombinerat med ett unikt ILIAS-plattforms-ID om så krävs. lti#:#conf_privacy_ident_il_uuid_login_info#:#Sänder inloggningsnamnet. Detta är identiskt med varje anrop, men kan tillåta direkta slutsatser till ILIAS-användaren. +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ID för ILIAS-kontot kombinerat med ett unikt ILIAS-plattforms-ID formaterat som en e-postadress. lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sänder det interna numeriska användar-ID:t. Detta är identiskt för varje anrop, men gör det möjligt att dra slutsatser om ILIAS-användaren. lti#:#conf_privacy_ident_info#:#Standard är ofta e-postadressen. Det unika ILIAS-plattforms-ID:t är @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resursen har redan startats. lti#:#learning_progress_options#:#Alternativ för lärande framsteg lti#:#lm_only_one_download_per_type#:#Endast en fil per typ (XML, HTML, SCORM) kan göras tillgänglig för nedladdning. lti#:#lti13_hints#:#Om verktyget skapades utan dynamisk registrering måste följande data anges för att verktyget ska kunna köras. +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Klient-ID lti#:#lti_13_deployment_id#:#ID för utplacering +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform ID lti#:#lti_13_step1#:#Steg 1 lti#:#lti_13_step1_info#:#För den initierande plattformen (konsumenten), ange följande adress för Launch URL, Initiate Login URL, Redirection URI och Registration URL lti#:#lti_13_step2#:#Steg 2 lti#:#lti_13_step2_info#:#Du kommer att få information från den initierande plattformen (konsumenten) som du måste ange i följande fält. Efter att ha sparat är LTI 1.3-funktionerna tillgängliga. +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Tillämpa leverantören eller verktyget globalt för alla användare. lti#:#lti_action_accept_providers_as_global#:#Ta över leverantören eller verktyget som en global leverantör eller ett globalt verktyg. lti#:#lti_action_delete_providers#:#Ta bort leverantör eller verktyg @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#Minst en leverantör eller ett verktyg lti#:#lti_auth_failed_invalid_key#:#Autentisering inte möjlig. Ingen giltig konsumentnyckel överfördes. lti#:#lti_con_content_item#:#Stöd för djuplänkning lti#:#lti_con_content_item_url#:#URL för innehåll +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiera inloggnings-URL lti#:#lti_con_key_type#:#Typ av den offentliga nyckeln lti#:#lti_con_key_type_jwk#:#URL (Json Web Token) @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Kategori för att filtrera poster när ett LT lti#:#lti_con_prov_custom_params#:#Användardefinierade parametrar för denna specifika leverantör lti#:#lti_con_prov_custom_params_info#:#Var god ange dem i formuläret lti#:#lti_con_prov_description#:#Beskrivning +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#Extern leverantör eller externt verktyg lti#:#lti_con_prov_external_provider_info#:#När du arbetar med en extern leverantör eller ett externt verktyg visas en notering för användarna. Externa leverantörer eller verktyg kännetecknas av att ILIAS-installatörens inflytande på leverantören eller verktyget är otillräckligt. Detta är fallet o lti#:#lti_con_prov_group_options#:#Alternativ för gruppering och filtrering av leverantörer eller verktyg @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Skapa din egen leverantör eller verktygsinställningar lti#:#lti_delete_consume_provider#:#Ta bort leverantör eller verktyg lti#:#lti_delete_consume_providers#:#Ta bort leverantör eller verktyg lti#:#lti_delete_provider#:#Ta bort leverantör eller verktyg +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI konsument lti#:#lti_exit#:#Avsluta LTI-session lti#:#lti_exited#:#LTI-sessionen avslutad @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Vill du verkligen stänga enkäten f survey#:#survey_360_sure_appraisee_close_admin#:#Vill du verkligen stänga enkäten för följande feedbackmottagare? survey#:#survey_360_sure_delete_appraises#:#Vill du verkligen ta bort följande feedbackmottagare? survey#:#survey_360_sure_delete_raters#:#Vill du verkligen ta bort följande feedbackgivare för %s? -survey#:#survey_access_codes#:#Autentisering med åtkomstnycklar +survey#:#survey_access_code#:#Autentisering med åtkomstnycklar survey#:#survey_access_codes_info#:#Användare får tillgång till undersökningen genom att ange en åtkomstnyckel på fliken "Info". Dessa åtkomstnycklar genereras i underfliken med samma namn i fliken "Deltagare". survey#:#survey_activate_skill_service#:#Aktivera kompetenstjänst survey#:#survey_activate_skill_service_info#:#Ytterligare en flik "Kompetenser" visas. Här tilldelas först kompetenser till frågorna, sedan sätts tröskelvärden för att uppnå vissa kompetensnivåer. diff --git a/lang/ilias_tr.lang b/lang/ilias_tr.lang index 8a155a2b7eb8..46db44d08936 100644 --- a/lang/ilias_tr.lang +++ b/lang/ilias_tr.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Değerlendirme verilerini dışa aktar -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Sertifika (PDF) assessment#:#exp_type_excel#:#Microsoft Excel -assessment#:#exp_type_spss#:#Virgülle Ayrılmış Değer (CSV) assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Silmek için en az bir adım seçiniz. assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Sonraki testleriniz için önceki cevaplarınız varsayılan olarak kullanılmayacaktır. assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Puanlama Düzenle assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Evet, testi bitirmek istiyorum assessment#:#tst_finish_confirm_cancel_button#:#Hayır, önceki soruya geri dön assessment#:#tst_finish_confirmation_question#:#Testi sonlandırmak üzeresiniz. Cevaplarınızı değiştirmek için bu teste tekrar giremeyeceksiniz. Gerçekten testi bitirmek istiyor musunuz? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Bitti assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Soru listesini Gizle assessment#:#tst_highscore_achieved_ts#:#Test tarihini göster assessment#:#tst_highscore_achieved_ts_description#:#Kontroller, test tarihi sütunda gösterilecekse assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Skoru Göster assessment#:#tst_highscore_score_description#:#Skor sütununu göstermek için kontroller assessment#:#tst_highscore_top_num#:#Başarı Sırası Eleman Sayısı assessment#:#tst_highscore_top_num_description#:#En iyi derece tablosuna kaç adet kayıt eklenmeli -assessment#:#tst_highscore_top_num_unit#:#eleman assessment#:#tst_highscore_top_table#:#'En iyi derece' Tablosunu Göster assessment#:#tst_highscore_top_table_description#:#Kontroller, tablo 'üst düzey' gösterildiği gibi olmalıdır eğer. assessment#:#tst_highscore_wtime#:#Çalışma süresini göster @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Sunu Ayarları assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Test ve Değerlendirme - Yazdır assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Maks. İşlem Süresi assessment#:#tst_processing_time_desc#:#Testin süresini belirleyin. @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Test Sonuçlarını Göster assessment#:#tst_show_side_list#:#Soru listesini göster assessment#:#tst_show_solution_answers_only#:#Sonuçları Yazdır (Sadece Yanıtlar) assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Test Sonuçlarında Çözümleri Göster -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Soruya Özgü Geri Bildirimleri Test Sonuçlarında Göster @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Önceki Cevapları Kullan assessment#:#tst_use_previous_answers_description#:#Etkinse, katılımcı önceki cevaplarını geçtiği her testte varsayılan cevaplar olarak seçebilir. Etkin değilse, önceki cevaplar geçilen testlerde gösterilmez. -assessment#:#tst_use_previous_answers_user#:#Geçilen testlerde önceki cevaplarımı varsayılan değer olarak kullan assessment#:#tst_user_finished_test#:#Kullanıcı testi bitirdi (% s) assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_uk.lang b/lang/ilias_uk.lang index 1ab5101fe027..a7052fcb1636 100644 --- a/lang/ilias_uk.lang +++ b/lang/ilias_uk.lang @@ -684,12 +684,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Експортувати Оціночну Дату -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certificate (PDF)###25 02 2007 new variable assessment#:#exp_type_excel#:# Excel ###17 May 2005 content changed -assessment#:#exp_type_spss#:# SPSS assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1453,7 +1451,6 @@ assessment#:#tst_delete_missing_mark#:#Будь ласка виберіть пр assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Your previous answers will not be used as default values in future test passes###25 02 2007 new variable assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring###28 08 2012 new variable assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1509,7 +1506,6 @@ assessment#:#tst_finish_confirm_button#:#Yes, I want to finish the test###01 Mar assessment#:#tst_finish_confirm_cancel_button#:#No, go back to the previous answer###01 Mar 2006 new variable assessment#:#tst_finish_confirmation_question#:#You are going to finish this test and reach the maximum number of allowed test passes. You won't be able to enter this test again to change your answers. Do you really want to finish the test?###01 Mar 2006 new variable assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Закінчений assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1521,7 +1517,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Hide question list###24 07 2009 new variable assessment#:#tst_highscore_achieved_ts#:#Show date of test###28 08 2012 new variable assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown.###28 08 2012 new variable assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1539,7 +1534,6 @@ assessment#:#tst_highscore_score#:#Show score###28 08 2012 new variable assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown.###28 08 2012 new variable assessment#:#tst_highscore_top_num#:#Number of ranks###28 08 2012 new variable assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table.###28 08 2012 new variable -assessment#:#tst_highscore_top_num_unit#:#entries###28 08 2012 new variable assessment#:#tst_highscore_top_table#:#Show table 'top ranking'###28 08 2012 new variable assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown.###28 08 2012 new variable assessment#:#tst_highscore_wtime#:#Show working time###28 08 2012 new variable @@ -1753,7 +1747,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Presentation Settings###12 06 2011 new variable assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Тест & Оцінювання Огляд Перед Друком assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Максимальний час роботи assessment#:#tst_processing_time_desc#:#The maximum processing time starts from the time when a user starts a test and ends after the expiration of the entered hours, minutes and seconds.###09 06 2007 new variable @@ -1890,10 +1883,6 @@ assessment#:#tst_show_results#:#Показати результати тесту assessment#:#tst_show_side_list#:#Show question list aside###24 07 2009 new variable assessment#:#tst_show_solution_answers_only#:#Results print view (answers only)###14 11 2007 new variable assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Show Solutions in Test Results###25 02 2007 new variable -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Show Answer-Specific Feedback in Test Results###10 05 2007 new variable @@ -1916,7 +1905,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1978,7 +1966,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Use Previous Answers###25 02 2007 new variable assessment#:#tst_use_previous_answers_description#:#If checked, a participant may choose to use the previous answers as default values in future test passes, otherwise the previous answers are not shown in future test passes###25 02 2007 new variable -assessment#:#tst_use_previous_answers_user#:#Use my previous answers as default values in future test passes###25 02 2007 new variable assessment#:#tst_user_finished_test#:#User finished test (%s)###24 07 2009 new variable assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2563,7 +2550,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11206,6 +11192,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11291,13 +11283,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11311,6 +11306,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11330,6 +11327,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11398,6 +11399,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16733,7 +16735,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_vi.lang b/lang/ilias_vi.lang index f1b697d592d5..79653ad05322 100644 --- a/lang/ilias_vi.lang +++ b/lang/ilias_vi.lang @@ -686,12 +686,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#Xuất kết quả đánh giá như là -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certificate (PDF)###25 02 2007 new variable assessment#:#exp_type_excel#:#Microsoft Excel###23 Mar 2006 content changed -assessment#:#exp_type_spss#:#Giá trị phân tách bằng dấu phẩy (CSV) assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1455,7 +1453,6 @@ assessment#:#tst_delete_missing_mark#:#Hãy chọn ít nhất một thang điể assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#Your previous answers will not be used as default values in future test passes###25 02 2007 new variable assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#Edit Scoring###28 08 2012 new variable assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1511,7 +1508,6 @@ assessment#:#tst_finish_confirm_button#:#Yes, I want to finish the test###01 Mar assessment#:#tst_finish_confirm_cancel_button#:#No, go back to the previous answer###01 Mar 2006 new variable assessment#:#tst_finish_confirmation_question#:#You are going to finish this test and reach the maximum number of allowed test passes. You won't be able to enter this test again to change your answers. Do you really want to finish the test?###01 Mar 2006 new variable assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#Kết thúc assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1523,7 +1519,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#Hide question list###24 07 2009 new variable assessment#:#tst_highscore_achieved_ts#:#Show date of test###28 08 2012 new variable assessment#:#tst_highscore_achieved_ts_description#:#Controls, if a column with the test date should be shown.###28 08 2012 new variable assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1541,7 +1536,6 @@ assessment#:#tst_highscore_score#:#Show score###28 08 2012 new variable assessment#:#tst_highscore_score_description#:#Controls, if a column with the score should be shown.###28 08 2012 new variable assessment#:#tst_highscore_top_num#:#Number of ranks###28 08 2012 new variable assessment#:#tst_highscore_top_num_description#:#Controls, how many ranks should be included in the top ranking table.###28 08 2012 new variable -assessment#:#tst_highscore_top_num_unit#:#entries###28 08 2012 new variable assessment#:#tst_highscore_top_table#:#Show table 'top ranking'###28 08 2012 new variable assessment#:#tst_highscore_top_table_description#:#Controls, if the table 'top ranking' should be shown.###28 08 2012 new variable assessment#:#tst_highscore_wtime#:#Show working time###28 08 2012 new variable @@ -1755,7 +1749,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#Presentation Settings###12 06 2011 new variable assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Xem Kiểm tra & Đánh giá kiểu in assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#Thời gian làm bài tối đa assessment#:#tst_processing_time_desc#:#The maximum processing time starts from the time when a user starts a test and ends after the expiration of the entered hours, minutes and seconds.###09 06 2007 new variable @@ -1892,10 +1885,6 @@ assessment#:#tst_show_results#:#Hiện kết quả bài kiểm tra assessment#:#tst_show_side_list#:#Show question list aside###24 07 2009 new variable assessment#:#tst_show_solution_answers_only#:#Results print view (answers only)###14 11 2007 new variable assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#Show Solutions in Test Results###25 02 2007 new variable -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#Show Answer-Specific Feedback in Test Results###10 05 2007 new variable @@ -1918,7 +1907,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1980,7 +1968,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#Use Previous Answers###25 02 2007 new variable assessment#:#tst_use_previous_answers_description#:#If checked, a participant may choose to use the previous answers as default values in future test passes, otherwise the previous answers are not shown in future test passes###25 02 2007 new variable -assessment#:#tst_use_previous_answers_user#:#Use my previous answers as default values in future test passes###25 02 2007 new variable assessment#:#tst_user_finished_test#:#User finished test (%s)###24 07 2009 new variable assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2565,7 +2552,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11208,6 +11194,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11293,13 +11285,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11313,6 +11308,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11332,6 +11329,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11400,6 +11401,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16735,7 +16737,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/lang/ilias_zh.lang b/lang/ilias_zh.lang index 531125f5f066..d08b5adb489c 100644 --- a/lang/ilias_zh.lang +++ b/lang/ilias_zh.lang @@ -683,12 +683,10 @@ assessment#:#examid_in_test_res#:#ILIAS Testpass ID###27 01 2015 new variable assessment#:#examid_in_test_res_desc#:#The ILIAS Testpass ID will be included in the test results.###27 01 2015 new variable assessment#:#exp_all_test_runs#:#All test attempts###26 08 2024 new variable assessment#:#exp_eval_data#:#导出评价数据 -assessment#:#exp_file_created#:#Export file created.###24 10 2013 new variable assessment#:#exp_grammar_as#:#as###26 08 2024 new variable assessment#:#exp_scored_test_attempt#:#Scored Test Attempt###28 10 2024 new variable assessment#:#exp_type_certificate#:#Certificate (PDF) xy assessment#:#exp_type_excel#:# Excel -assessment#:#exp_type_spss#:# SPSS assessment#:#expected_result_type#:#Expected result type###24 10 2013 new variable assessment#:#export_cert_failed_for_users_p#:#No certificate file could be generated and added for the following %s accounts: %s. Please contact an administrator to check the log file.###26 08 2024 new variable assessment#:#export_cert_failed_for_users_s#:#No certificate file could be generated and added to the archive for the following account: %s. Please contact an administrator to check the log file.###26 08 2024 new variable @@ -1452,7 +1450,6 @@ assessment#:#tst_delete_missing_mark#:#请至少选择一个标记步骤去删 assessment#:#tst_derive_new_pool#:#Derive New Question Pool###25 10 2016 new variable assessment#:#tst_derive_new_pools#:#Derive New Question Pools###25 10 2016 new variable assessment#:#tst_dont_show_msg_again_in_current_session#:#Don't show this message again in my current session.###10 11 2018 new variable -assessment#:#tst_dont_use_previous_answers#:#您之前的答案将不会在未来的测试中作为默认值使用 assessment#:#tst_edit_competence_assign#:#Edit Assignment Properties###30 08 2015 new variable assessment#:#tst_edit_scoring#:#编辑评分 assessment#:#tst_enable_questionlist#:#Show 'List of Questions’###26 08 2024 new variable @@ -1508,7 +1505,6 @@ assessment#:#tst_finish_confirm_button#:#是的,我想完成这个测试 assessment#:#tst_finish_confirm_cancel_button#:#不,返回之前的答案 assessment#:#tst_finish_confirmation_question#:#您将要完成这次测试并且达到了测试所允许的最大次数。您将不能再次进入这次测试去修改您的答案。您真的想完成这次测试吗? assessment#:#tst_finish_confirmation_question_no_attempts_left#:#You are going to finish this test and reach the maximum number of allowed test attempts. You won’t be able to enter this test again to change your answers. Do you really want to finish the test?###26 08 2024 new variable -assessment#:#tst_finish_notification_no#:#No e-mail###06 02 2015 new variable assessment#:#tst_finished#:#已完成 assessment#:#tst_form_dynamic_question_set_config#:#Continues Question Selection###24 10 2013 new variable assessment#:#tst_gap_analysis#:#Gap Analysis###26 09 2014 new variable @@ -1520,7 +1516,6 @@ assessment#:#tst_hide_info_tab#:#Hide Info Tab###26 08 2024 new variable assessment#:#tst_hide_info_tab_desc#:#Hides the tab ‘Info’ of the test.###26 08 2024 new variable assessment#:#tst_hide_pagecontents#:#Hide page content###26 08 2024 new variable assessment#:#tst_hide_pagecontents_desc#:#ILIAS content placed before and after the actual question text via the "Edit Page" button will not be displayed in the result views and print output.###26 08 2024 new variable -assessment#:#tst_hide_side_list#:#隐藏题目列表 assessment#:#tst_highscore_achieved_ts#:#显示测试的日期 assessment#:#tst_highscore_achieved_ts_description#:#控制,如果测试日期应被显示的一列。 assessment#:#tst_highscore_all_tables#:#All Rankings###07 11 2014 new variable @@ -1538,7 +1533,6 @@ assessment#:#tst_highscore_score#:#显示得分 assessment#:#tst_highscore_score_description#:#控制,如果得分应被显示的一列。 assessment#:#tst_highscore_top_num#:#行列数 assessment#:#tst_highscore_top_num_description#:#控制,多少行列应包含在顶部行列表中。 -assessment#:#tst_highscore_top_num_unit#:#条目 assessment#:#tst_highscore_top_table#:#显示表“顶部排名” assessment#:#tst_highscore_top_table_description#:#控制,如果表“顶部行列”应显示。 assessment#:#tst_highscore_wtime#:#显示工作时间 @@ -1752,7 +1746,6 @@ assessment#:#tst_postpone_on_desc#:#Not answered questions will be postponed to assessment#:#tst_presentation_properties#:#展示设置 assessment#:#tst_presentation_settings_section#:#Presentation###10 11 2018 new variable assessment#:#tst_previous_access_code_not_available#:#No previous code available!###26 08 2024 new variable -assessment#:#tst_print#:#Test & Assessment Print View测试和评估打印视图 assessment#:#tst_proceed#:#Proceed###10 11 2018 new variable assessment#:#tst_processing_time#:#最大处理时间 assessment#:#tst_processing_time_desc#:#The maximum processing time starts from the time when a user starts a test and ends after the expiration of the entered hours, minutes and seconds. @@ -1889,10 +1882,6 @@ assessment#:#tst_show_results#:#显示测试成绩 assessment#:#tst_show_side_list#:#在旁边显示题目列表 assessment#:#tst_show_solution_answers_only#:#成绩打印视图(仅答案) assessment#:#tst_show_solution_answers_only_desc#:#If is selected, the ILIAS content you place around a question using the "Edit content" tab page will not be visible in a print-out. If you want to save some paper space, select this option.###07 11 2014 new variable -assessment#:#tst_show_solution_compare#:#Compare Answer with Solution in List of Answers###24 10 2013 new variable -assessment#:#tst_show_solution_compare_desc#:#Participants are presented with an overview comparing their own answers with the best solutions. Please note that this view will be displayed in the ‘Detailed Results’ that can be accessed via the ‘Show Test Results‘-button on the ‘Info’-tab. It will not be displayed in the printable ‘List of Answers’ even though the setting is made here.###06 02 2015 new variable -assessment#:#tst_show_solution_details#:#显示测试成绩的方案 -assessment#:#tst_show_solution_details_desc#:#If selected, the detailed question solution is available to participants in the test results presentation. This includes the exact scoring of every answer, otherwise only an overview with the question titles and the reached points is shown.###07 11 2014 new variable assessment#:#tst_show_solution_details_singlepage#:#Scored Answers on single pages###26 08 2024 new variable assessment#:#tst_show_solution_details_singlepage_desc#:#Participants can access each question individually and see if their answers were correct and how many points they scored.###26 08 2024 new variable assessment#:#tst_show_solution_feedback#:#在测试成绩中显示特定的答案反馈 @@ -1915,7 +1904,6 @@ assessment#:#tst_skill_triggerings_num_req_answers_desc#:#Competences aren't tri assessment#:#tst_skill_triggerings_num_req_answers_not_reached_warn#:#At least one of the competences addressed by this test is not triggered by the minimal required amount of questions.<br />The required amount of questions: %s###10 11 2018 new variable assessment#:#tst_skl_level_thresholds_link#:#Configure Competence-Thresholds###30 08 2015 new variable assessment#:#tst_skl_level_thresholds_missing#:#There are missing thresholds for the relevant competences!###30 08 2015 new variable -assessment#:#tst_skl_res_interpretation_hint_msg#:#Please consider that competence results from a single test has a limited significance. The more information is collected per competence, the merrier valid the significance will be. Should there are single competences without any entry, there is to less information collected.###30 08 2015 new variable assessment#:#tst_skl_sub_tab_thresholds#:#Competence Thresholds###26 09 2014 new variable assessment#:#tst_sol_comp_expressions#:#Comparison Expressions###30 08 2015 new variable assessment#:#tst_solution_compare_cfg#:#Configuration for Solution Compare###30 08 2015 new variable @@ -1977,7 +1965,6 @@ assessment#:#tst_unchanged_answer_is_correct#:#The preset answer is correct###fa assessment#:#tst_unchanged_order_is_correct#:#The preset order is correct###fau: testNav assessment#:#tst_use_previous_answers#:#使用之前的答案 assessment#:#tst_use_previous_answers_description#:#如果勾选,在未来的测试过程中,参与者可以选择使用以前的答案做为默认值,否则以前的答案不显示在未来的测试过程中 -assessment#:#tst_use_previous_answers_user#:#在未来的测试过程中使用我以前的答案做为默认值 assessment#:#tst_user_finished_test#:#用户已完成的测试(%s) assessment#:#tst_view_competence_assign#:#View Assignment Properties###30 08 2015 new variable assessment#:#tst_virtual_pass_header_lo_initial#:#Initial Test Results for the Learning Objectives<br />%s###30 08 2015 new variable @@ -2562,7 +2549,6 @@ book#:#book_booking#:#Booking###26 08 2024 new variable book#:#book_booking_information#:#Information###31 08 2017 new variable book#:#book_booking_objects#:#Booking Objects###29 07 2022 new variable book#:#book_booking_reminders#:#Upcoming reservations###10 11 2018 new variable -book#:#book_bookings_per_user#:#Bookings per User###29 07 2022 new variable book#:#book_bulk_confirmation#:#Please check that all values are listed correctly.###26 08 2024 new variable book#:#book_bulk_creation#:#Bulk Creation###26 08 2024 new variable book#:#book_bulk_data#:#Item Data###26 08 2024 new variable @@ -11205,6 +11191,12 @@ lti#:#conf_privacy_ident_il_uuid_ext_account#:#External User ID combined with a lti#:#conf_privacy_ident_il_uuid_ext_account_info#:#This is identical to each call, but may allow a direct conclusion about the user.###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login#:#ILIAS Login combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_login_info#:#Sends the login name. This is identical to each call, but may allow a direct conclusion about the ILIAS user.###26 08 2024 new variable +lti#:#conf_privacy_ident_il_uuid_random#:#Random ID combined with a unique ILIAS platform ID formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_random_info#:#For each ILIAS object and ILIAS user a random ID is generated which remains identical for each call. Conclusions about a user are very limited because it is practically impossible to create user profiles across objects.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256#:#Hash combined with a unique ILIAS platform id formatted as an E-Mail address###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256_info#:#This is identical to each call, but does not permit any direct conclusions about the ILIAS user.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url#:#Hash combined with the ILIAS Domain formatted as an E-Mail address.###04 12 2025 new variable +lti#:#conf_privacy_ident_il_uuid_sha256url_info#:#This is identical to each call, with with a maximum of 80 characters significantly shorter than the variant with the ILIAS platform ID and allows only very limited conclusions about the ILIAS user.###04 12 2025 new variable lti#:#conf_privacy_ident_il_uuid_user_id#:#ILIAS user id combined with a unique ILIAS platform id formatted as an E-Mail address###26 08 2024 new variable lti#:#conf_privacy_ident_il_uuid_user_id_info#:#Sends the internal numeric user id. This is identical to each call, but may allow conclusions about the ILIAS user.###26 08 2024 new variable lti#:#conf_privacy_ident_info#:#Standard is frequently the email address. The unique ILIAS platform id is:###26 08 2024 new variable @@ -11290,13 +11282,16 @@ lti#:#launched#:#Resource was already launched.###07 02 2020 new variable lti#:#learning_progress_options#:#Options for Learning Progress###07 02 2020 new variable lti#:#lm_only_one_download_per_type#:#Please note that you can only make one file per type (XML, HTML, SCORM) public accessible.###31 08 2017 new variable lti#:#lti13_hints#:#If the tool was created without dynamic registration, the following data must be entered for the tool to run.###26 08 2024 new variable +lti#:#lti_13_authentication_url#:#Authentication Request URL###04 12 2025 new variable lti#:#lti_13_client_id#:#Client-ID###26 08 2024 new variable lti#:#lti_13_deployment_id#:#Deployment-ID###26 08 2024 new variable +lti#:#lti_13_keyset_url#:#Public Keyset URL###04 12 2025 new variable lti#:#lti_13_platform_id#:#Platform-ID###26 08 2024 new variable lti#:#lti_13_step1#:#Step 1###26 08 2024 new variable lti#:#lti_13_step1_info#:#For the initiating platform (consumer), enter the following address for Launch URL, Initiate Login URL, Redirection URI, and Registration URL:###26 08 2024 new variable lti#:#lti_13_step2#:#Step 2###26 08 2024 new variable lti#:#lti_13_step2_info#:#You will receive information from the initiating platform (Consumer), which you must enter in the following fields. After saving, the LTI 1.3 functionalities are available.###26 08 2024 new variable +lti#:#lti_13_token_url#:#Access Token URL###04 12 2025 new variable lti#:#lti_action_accept_provider_as_global#:#Accept Provider as Global Provider for all Users###07 02 2020 new variable lti#:#lti_action_accept_providers_as_global#:#Accept Providers as Global###07 02 2020 new variable lti#:#lti_action_delete_providers#:#Delete Providers###07 02 2020 new variable @@ -11310,6 +11305,8 @@ lti#:#lti_at_least_one_prov_has_usages#:#At least one provider could not be dele lti#:#lti_auth_failed_invalid_key#:#Authentication failed, no valid consumer key given.###31 08 2017 new variable lti#:#lti_con_content_item#:#Support for Deep Linking###26 08 2024 new variable lti#:#lti_con_content_item_url#:#Content URL###26 08 2024 new variable +lti#:#lti_con_grade_synchronization#:#Advanced Grading Services###04 12 2025 new variable +lti#:#lti_con_grade_synchronization_info#:#The LTI tool must offer 'Assignment and Grade Services'.###04 12 2025 new variable lti#:#lti_con_initiate_login_url#:#Initiate Login URL###26 08 2024 new variable lti#:#lti_con_key_type#:#Public Key Type###26 08 2024 new variable lti#:#lti_con_key_type_jwk#:#URL (Json Web Token)###26 08 2024 new variable @@ -11329,6 +11326,10 @@ lti#:#lti_con_prov_category_info#:#Category to filter entries when LTI Consumer lti#:#lti_con_prov_custom_params#:#Custom Parameters for this specific Provider###07 02 2020 new variable lti#:#lti_con_prov_custom_params_info#:#Please enter them in the form param1=value1; param2=value2###07 02 2020 new variable lti#:#lti_con_prov_description#:#Description###07 02 2020 new variable +lti#:#lti_con_prov_dyn_reg_params#:#Optional Parameters###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_params_info#:#Here, for example, references to target objects in the tool can be specified.###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url#:#Registration URL of the Tool###04 12 2025 new variable +lti#:#lti_con_prov_dyn_reg_url_info#:#Note: Not every tool supports dynamic registration.###04 12 2025 new variable lti#:#lti_con_prov_external_provider#:#External Provider###07 02 2020 new variable lti#:#lti_con_prov_external_provider_info#:#A hint will be shown to users when dealing with an external Provider. An external Provider is characterized by insufficient influence on the Provider by the operator of the ILIAS-installation. This is the case when there are no rights to delete.###07 02 2020 new variable lti#:#lti_con_prov_group_options#:#Options to group and filter Providers###07 02 2020 new variable @@ -11397,6 +11398,7 @@ lti#:#lti_custom_new#:#Create Own Provider Settings###07 02 2020 new variable lti#:#lti_delete_consume_provider#:#Delete Provider###07 02 2020 new variable lti#:#lti_delete_consume_providers#:#Delete Providers###07 02 2020 new variable lti#:#lti_delete_provider#:#Delete Provider###07 02 2020 new variable +lti#:#lti_dynamic_registration#:#Create Own Settings for Tool with Dynamic Registration (LTI 1.3)###04 12 2025 lti#:#lti_edit_consumer#:#Edit LTI Consumer###31 08 2017 new variable lti#:#lti_exit#:#Close LTI Session###31 08 2017 new variable lti#:#lti_exited#:#LTI Session closed###31 08 2017 new variable @@ -16732,7 +16734,7 @@ survey#:#survey_360_sure_appraisee_close#:#Are you sure you want to close the su survey#:#survey_360_sure_appraisee_close_admin#:#Are you sure you want to close the surveys for the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_appraises#:#Are you sure you want to remove the following appraisees?###24 10 2013 new variable survey#:#survey_360_sure_delete_raters#:#Are you sure you want to remove the following raters for %s?###24 10 2013 new variable -survey#:#survey_access_codes#:#Authentication by Access Codes###27 01 2015 new variable +survey#:#survey_access_code#:#Authentication by Access Codes###27 01 2015 new variable survey#:#survey_access_codes_info#:#Users get access to the survey by entering a code on the 'Info'-tab. These access codes are generated in a sub-tab 'Access Codes' in the tab 'Participants'.###27 01 2015 new variable survey#:#survey_activate_skill_service#:#Activate Competence Service###24 10 2013 new variable survey#:#survey_activate_skill_service_info#:#todo12###07 11 2014 new variable diff --git a/scripts/PHPStan/run_legacy_ui_report.sh b/scripts/PHPStan/run_legacy_ui_report.sh index a1847f22a943..3c4393e05af6 100755 --- a/scripts/PHPStan/run_legacy_ui_report.sh +++ b/scripts/PHPStan/run_legacy_ui_report.sh @@ -17,6 +17,9 @@ else xargs -0I % echo "%" | tr "\n" "\0" | xargs -0)) + # Sort directories alphabetically + IFS=$'\n' REPORT_DIRECTORIES=($(sort <<<"${REPORT_DIRECTORIES[*]}")) + unset IFS fi # Run PHPStan for each directory diff --git a/templates/default/060-elements/_elements_dialog.scss b/templates/default/060-elements/_elements_dialog.scss index 8d01f0c38b17..e59f8f3580c6 100644 --- a/templates/default/060-elements/_elements_dialog.scss +++ b/templates/default/060-elements/_elements_dialog.scss @@ -13,10 +13,11 @@ dialog::backdrop { animation-duration: .3s; animation-timing-function: cubic-bezier(0.22, 0.61, 0.36, 1); animation-fill-mode: both; + backdrop-filter: blur(dialog.$modal-backdrop-blur) brightness(dialog.$modal-backdrop-opacity); } @keyframes fadeBackdropIn { - from { backdrop-filter: blur(0 px) brightness(dialog.$modal-backdrop-opacity); } + from { backdrop-filter: blur(0) brightness(1); } to { backdrop-filter: blur(dialog.$modal-backdrop-blur) brightness(dialog.$modal-backdrop-opacity); } } diff --git a/templates/default/070-components/UI-framework/Input/_ui-component_input.scss b/templates/default/070-components/UI-framework/Input/_ui-component_input.scss index 540c006dd3b6..3cfe33a42477 100755 --- a/templates/default/070-components/UI-framework/Input/_ui-component_input.scss +++ b/templates/default/070-components/UI-framework/Input/_ui-component_input.scss @@ -82,6 +82,10 @@ display: block; grid-area: label; padding-right: l.$il-margin-large-horizontal; + + > .asterisk:first-child { + padding-left: $il-padding-base-vertical; + } } > .c-input__field { diff --git a/templates/default/070-components/UI-framework/Item/_ui-component_item.scss b/templates/default/070-components/UI-framework/Item/_ui-component_item.scss index 69c501f27829..4672f296ae4d 100755 --- a/templates/default/070-components/UI-framework/Item/_ui-component_item.scss +++ b/templates/default/070-components/UI-framework/Item/_ui-component_item.scss @@ -208,44 +208,6 @@ $il-item-gap-xs: 1px; } } -@media only screen and (min-width: ($il-grid-float-breakpoint-max + 1px)) { - - .panel-secondary .il-item { - width: 100%; - - .il-item-title { - word-break: break-word; - } - - .il-item-description { - padding-top: 0; - word-break: break-word; - } - - .il-item-divider { - padding: $il-padding-large-vertical 0 0 0; - margin: 0 0 $il-margin-large-vertical 0; - } - - .col-sm-3 { - margin-top: $il-margin-base-vertical; - margin-left: 0; - width: 45px; - img { - width: 40px; - } - } - - .col-sm-9{ - width: calc(100% - 45px); - } - .col-md-6{ - width: 100%; - } - - } -} - /* otherwise dropdowns in items with icon do not work */ .il-std-item .media .media-body, .il-std-item .media, .il-notification-item .media, .il-notification-item .media .media-body { overflow: visible; @@ -265,4 +227,4 @@ $il-item-gap-xs: 1px; min-width: calc($il-icon-size-small + 2 * $il-padding-xlarge-horizontal); } } -} \ No newline at end of file +} diff --git a/templates/default/070-components/UI-framework/MainControls/Slate/_ui-component_slate.scss b/templates/default/070-components/UI-framework/MainControls/Slate/_ui-component_slate.scss index 6c0d49293914..2c0dd4a609ad 100755 --- a/templates/default/070-components/UI-framework/MainControls/Slate/_ui-component_slate.scss +++ b/templates/default/070-components/UI-framework/MainControls/Slate/_ui-component_slate.scss @@ -31,6 +31,11 @@ $il-slate-tree-padding: $il-padding-small-vertical 0; filter: invert(50%); } } + .c-tooltip__container:has(.btn-bulky), + .c-tooltip__container:has(.link-bulky) { + width: 100%; + } + .il-maincontrols-slate .btn-bulky { background-color: $il-slate-bulky-level2-bg-color; } diff --git a/templates/default/070-components/UI-framework/Player/_ui-component_player.scss b/templates/default/070-components/UI-framework/Player/_ui-component_player.scss index c592cad1becd..c0e63df92d73 100755 --- a/templates/default/070-components/UI-framework/Player/_ui-component_player.scss +++ b/templates/default/070-components/UI-framework/Player/_ui-component_player.scss @@ -2,6 +2,7 @@ //== Player $il-player-audio-width: 100%; +$il-player-audio-height: 30px; // audio .il-audio-container { @@ -10,5 +11,20 @@ $il-player-audio-width: 100%; } } .il-audio-player { - background: $il-neutral-color; + background: transparent; + height: $il-player-audio-height; + width: $il-player-audio-width; } +.il-video-container { + video { + background-position: center; + background-size: contain; + background-repeat: no-repeat; + width:100%; + } + iframe { + width:100%; + aspect-ratio: 16/9; + border:0; + } +} \ No newline at end of file diff --git a/templates/default/070-components/UI-framework/_ui-component_tooltip.scss b/templates/default/070-components/UI-framework/_ui-component_tooltip.scss index 7d2ea84559c3..44f0c9ad15c2 100755 --- a/templates/default/070-components/UI-framework/_ui-component_tooltip.scss +++ b/templates/default/070-components/UI-framework/_ui-component_tooltip.scss @@ -25,6 +25,7 @@ $c-tooltip-z-index: 9999; transform: translateX(-50%); border: $c-tooltip-arrow-height solid transparent; border-bottom-color: $c-tooltip-arrow-background-color; + z-index: $c-tooltip-z-index; } // Invisible bridge so users can move cursor from button to tooltip @@ -35,6 +36,7 @@ $c-tooltip-z-index: 9999; left: -20%; display: block; height: calc($c-tooltip-arrow-height * 2); + z-index: $c-tooltip-z-index; } // making bridge amd arrow visible @@ -73,8 +75,8 @@ $c-tooltip-z-index: 9999; max-width: $c-tooltip-max-width; max-height: $c-tooltip-max-height; overflow: auto; - z-index: $c-tooltip-z-index; display: none; + z-index: $c-tooltip-z-index; @include tool-typography.strip-paragraph-margin__first-and-last; } @@ -85,4 +87,4 @@ $c-tooltip-z-index: 9999; /* Shows the tooltip */ .c-tooltip__container.c-tooltip--visible [role="tooltip"] { display: inline-block; -} \ No newline at end of file +} diff --git a/templates/default/070-components/legacy/Modules/_component_test_legacy.scss b/templates/default/070-components/legacy/Modules/_component_test_legacy.scss index 4cae37feb12d..fc89928f1838 100755 --- a/templates/default/070-components/legacy/Modules/_component_test_legacy.scss +++ b/templates/default/070-components/legacy/Modules/_component_test_legacy.scss @@ -14,6 +14,7 @@ $il-test-longmenu-selectionlist-bg: $il-main-bg; $il-test-longmenu-selectionlist-bg-hover: $il-highlight-bg; $il-test-longmenu-selectionlist-border: $il-main-border; $il-test-longmenu-selectionlist-padding: $il-padding-xs-horizontal; +$il-test-icon-min-size: $il-font-size-base; .fullwidth_invisible { background-color: transparent !important; @@ -139,6 +140,11 @@ div.ilc_Question { } } +img.ilc_solution_image { + min-width: $il-test-icon-min-size; + min-height: $il-test-icon-min-size; +} + .solutionbox { color: black; background-color: white; @@ -676,4 +682,4 @@ div.ilc_Page.readonly textarea[disabled] & li:hover { background-color: $il-test-longmenu-selectionlist-bg-hover; } -} \ No newline at end of file +} diff --git a/templates/default/070-components/legacy/Services/UIComponent/_component_tabs.scss b/templates/default/070-components/legacy/Services/UIComponent/_component_tabs.scss index 55870c76f1bd..e93999156c99 100755 --- a/templates/default/070-components/legacy/Services/UIComponent/_component_tabs.scss +++ b/templates/default/070-components/legacy/Services/UIComponent/_component_tabs.scss @@ -20,7 +20,8 @@ $nav-tabs-border: 2px solid $nav-tabs-active-link-hover-bg !default; margin: 0 $il-padding-xs-horizontal 0 0; // Actual tabs (as links) - > a { + > a, + > .c-tooltip__container > a { margin: 0; margin-right: 2px; font-size: $il-font-size-base; @@ -37,8 +38,8 @@ $nav-tabs-border: 2px solid $nav-tabs-active-link-hover-bg !default; } // Active state, and its :hover to override normal :hover - &.active>a { - + &.active > a, + &.active > .c-tooltip__container > a { &, &:hover, &:focus { @@ -62,7 +63,8 @@ $nav-tabs-border: 2px solid $nav-tabs-active-link-hover-bg !default; padding: $il-padding-large-vertical 0; margin: 0; - > li:first-child > a { + > li:first-child > a, + > li:first-child > .c-tooltip__container > a { padding-left: $il-padding-large-horizontal; } @@ -70,7 +72,8 @@ $nav-tabs-border: 2px solid $nav-tabs-active-link-hover-bg !default; > li { float: left; - > a { + > a, + > .c-tooltip__container > a { border-radius: 0; padding: $il-padding-base-vertical $il-padding-base; font-size: ($il-font-size-small); @@ -82,7 +85,8 @@ $nav-tabs-border: 2px solid $nav-tabs-active-link-hover-bg !default; @include focus.clear-focus-for-override($clearAfter: true); @include focus.il-focus(); } - &.active > a { + &.active > a, + &.active > .c-tooltip__container > a { &, &:hover, &:focus { @@ -96,4 +100,4 @@ $nav-tabs-border: 2px solid $nav-tabs-active-link-hover-bg !default; .il_after_tabs_spacing { margin-bottom: $il-margin-xxlarge-vertical; -} \ No newline at end of file +} diff --git a/templates/default/070-components/legacy/Services/UIComponent/_component_toolbar.scss b/templates/default/070-components/legacy/Services/UIComponent/_component_toolbar.scss index 2262499a8735..47424afc7af3 100755 --- a/templates/default/070-components/legacy/Services/UIComponent/_component_toolbar.scss +++ b/templates/default/070-components/legacy/Services/UIComponent/_component_toolbar.scss @@ -43,7 +43,7 @@ $il-toolbar-border: 1px solid $il-main-border-color !default; position: relative; display: block; - >a { + > a, > .c-tooltip__container > a { position: relative; display: block; padding: $nav-link-padding; @@ -56,7 +56,7 @@ $il-toolbar-border: 1px solid $il-main-border-color !default; } // Disabled state sets text to gray and nukes hover/tab effects - &.disabled>a { + &.disabled>a, &.disabled>.c-tooltip__container>a { color: $nav-disabled-link-color; &:hover, @@ -130,4 +130,4 @@ $il-toolbar-border: 1px solid $il-main-border-color !default; width: auto; } } -} \ No newline at end of file +} diff --git a/templates/default/070-components/legacy/Services/_component_badge.scss b/templates/default/070-components/legacy/Services/_component_badge.scss index d716ef185868..e642397c22f5 100755 --- a/templates/default/070-components/legacy/Services/_component_badge.scss +++ b/templates/default/070-components/legacy/Services/_component_badge.scss @@ -5,16 +5,14 @@ img.ilBadgeImage { max-height: 150px; } -.ilBadgeImageThumbnail a .img-responsive { - max-width: 50px; - max-height: 50px; - display: inline-block; -} - -.ilBadgeImageThumbnail .modal .img-responsive { - margin: auto; - width: 50%; - height: auto; +.badge_table-wrapper { + button, a { + > img.img-responsive { + max-width: 150px; + max-height: 150px; + display: inline-block; + } + } } div.ilBadgeBackpackPanelContent { diff --git a/templates/default/070-components/legacy/Services/_component_form.scss b/templates/default/070-components/legacy/Services/_component_form.scss index d420fb23d934..9db63b8baafe 100755 --- a/templates/default/070-components/legacy/Services/_component_form.scss +++ b/templates/default/070-components/legacy/Services/_component_form.scss @@ -20,7 +20,7 @@ $il-form-autocomplete-padding: $il-padding-xs-horizontal; // -------------------------------------------------- -// Normalize non-controls +// Normalize non-controlsHm // // Restyle and baseline non-control form elements. @@ -519,6 +519,10 @@ input[type="checkbox"] { &.col-sm-3.il_textarea { width: 100%; } + + > .asterisk { + padding-left: $il-padding-base-vertical; + } } /* // Reset spacing and right align labels, but scope to media queries so that diff --git a/templates/default/delos.css b/templates/default/delos.css index 16888b55034c..dc6d341fe43e 100644 --- a/templates/default/delos.css +++ b/templates/default/delos.css @@ -2064,11 +2064,12 @@ dialog::backdrop { animation-duration: 0.3s; animation-timing-function: cubic-bezier(0.22, 0.61, 0.36, 1); animation-fill-mode: both; + backdrop-filter: blur(3px) brightness(0.5); } @keyframes fadeBackdropIn { from { - backdrop-filter: blur(0 px) brightness(0.5); + backdrop-filter: blur(0) brightness(1); } to { backdrop-filter: blur(3px) brightness(0.5); @@ -2547,6 +2548,7 @@ details[open] > summary::before { transform: translateX(-50%); border: 0.5em solid transparent; border-bottom-color: #757575; + z-index: 9999; } .c-tooltip__container::after { @@ -2556,6 +2558,7 @@ details[open] > summary::before { left: -20%; display: block; height: 1em; + z-index: 9999; } .c-tooltip__container.c-tooltip--visible::before, @@ -2590,8 +2593,8 @@ details[open] > summary::before { max-width: 50vw; max-height: 40vh; overflow: auto; - z-index: 9999; display: none; + z-index: 9999; } .c-tooltip__container .c-tooltip p:first-child { margin-top: 0; @@ -2695,22 +2698,6 @@ ol.breadcrumb > li + li:before { .il-drilldown .menulevel, .navbar-form > a { display: inline-flex; vertical-align: middle; - align-items: center; - justify-content: center; - cursor: pointer; - user-select: none; - touch-action: manipulation; - font-family: "Open Sans", Verdana, Arial, Helvetica, sans-serif; - text-align: center; - line-height: inherit; - font-size: inherit; - font-weight: 400; - text-decoration: none; - min-height: 28px; - min-width: 28px; - font-size: 0.75rem; - padding: 3px 6px; - gap: 6px; } .btn + .btn, .c-input-tree_select > input[type=button] + .btn, .c-drilldown .c-drilldown__menulevel--trigger + .btn, .c-input-tree_select > .btn + input[type=button], .c-input-tree_select > input[type=button] + input[type=button], .c-drilldown .c-input-tree_select > .c-drilldown__menulevel--trigger + input[type=button], .c-drilldown .btn + .c-drilldown__menulevel--trigger, .c-drilldown .c-input-tree_select > input[type=button] + .c-drilldown__menulevel--trigger, .c-drilldown .c-drilldown__menulevel--trigger + .c-drilldown__menulevel--trigger, .il-link.link-bulky + .btn, .c-input-tree_select > .il-link.link-bulky + input[type=button], .c-drilldown .il-link.link-bulky + .c-drilldown__menulevel--trigger, .il-drilldown .menulevel + .btn, @@ -2728,11 +2715,33 @@ ol.breadcrumb > li + li:before { .il-drilldown .navbar-form > .menulevel + a, .navbar-form > a + a { margin-left: 3px; } +.btn, .c-input-tree_select > input[type=button], .c-drilldown .c-drilldown__menulevel--trigger, .il-link.link-bulky, +.il-drilldown .menulevel, .navbar-form > a { + align-items: center; + justify-content: center; + cursor: pointer; + user-select: none; + touch-action: manipulation; + font-family: "Open Sans", Verdana, Arial, Helvetica, sans-serif; + text-align: center; + line-height: inherit; + font-size: inherit; + font-weight: 400; + text-decoration: none; +} .btn:focus-visible, .c-input-tree_select > input[type=button]:focus-visible, .c-drilldown .c-drilldown__menulevel--trigger:focus-visible, .il-link.link-bulky:focus-visible, .il-drilldown .menulevel:focus-visible, .navbar-form > a:focus-visible { outline: 3px solid #0078D7; box-shadow: inset 0px 0px 0px 2px #FFFFFF, 0px 0px 0px 5px #FFFFFF; } +.btn, .c-input-tree_select > input[type=button], .c-drilldown .c-drilldown__menulevel--trigger, .il-link.link-bulky, +.il-drilldown .menulevel, .navbar-form > a { + min-height: 28px; + min-width: 28px; + font-size: 0.75rem; + padding: 3px 6px; + gap: 6px; +} .btn .glyph, .c-input-tree_select > input[type=button] .glyph, .c-drilldown .c-drilldown__menulevel--trigger .glyph, .il-link.link-bulky .glyph, .il-drilldown .menulevel .glyph, .navbar-form > a .glyph, .btn .glyph .glyphicon, @@ -2890,28 +2899,6 @@ input.btn, .c-input-tree_select > input[type=button], .c-drilldown input.c-drill .ilTableNav > table > tbody > tr > td > .dropdown.navbar-form > a { display: inline-flex; vertical-align: middle; - align-items: center; - justify-content: center; - cursor: pointer; - user-select: none; - touch-action: manipulation; - font-family: "Open Sans", Verdana, Arial, Helvetica, sans-serif; - text-align: center; - line-height: inherit; - font-size: inherit; - font-weight: 400; - text-decoration: none; - min-height: 2.2rem; - min-width: 2.2rem; - font-size: 0.75rem; - padding: 3px 6px; - gap: 6px; - background-color: rgb(226.2857142857, 231.6428571429, 238.7142857143); - color: #4c6586; - border-width: 1px; - border-style: solid; - border-color: rgb(226.2857142857, 231.6428571429, 238.7142857143); - border-radius: 10px; } .btn-ctrl + .btn-ctrl, .il-viewcontrol-sortation > .btn-default + .btn-ctrl, .il-viewcontrol-sortation > .btn-link + .btn-ctrl, .il-viewcontrol-section > .btn-default + .btn-ctrl, @@ -3770,6 +3757,41 @@ input.btn, .c-input-tree_select > input[type=button], .c-drilldown input.c-drill .ilTableNav > table > tbody > tr > td > .dropdown.navbar-form > a + a { margin-left: 3px; } +.btn-ctrl, .il-viewcontrol-sortation > .btn-default, .il-viewcontrol-sortation > .btn-link, +.il-viewcontrol-section > .btn-default, +.il-viewcontrol-section > .btn-link, +.il-viewcontrol-section .btn-group > .btn-default, +.il-viewcontrol-section .btn-group > .btn-link, +.il-viewcontrol-pagination__sectioncontrol > .btn-default, +.il-viewcontrol-pagination__sectioncontrol > .btn-link, +.il-viewcontrol-pagination__num-of-items > .btn-default, +.il-viewcontrol-pagination__num-of-items > .btn-link, +.il-viewcontrol-pagination > .btn-default, +.il-viewcontrol-pagination > .btn-link, +.il-viewcontrol-pagination .dropdown > .btn-default, +.il-viewcontrol-pagination .dropdown > .btn-link, +.il-viewcontrol-pagination .last > .btn-default, +.il-viewcontrol-pagination .last > .btn-link, +.il-viewcontrol-mode > .btn-default, +.il-viewcontrol-mode > .btn-link, .il-viewcontrol-sortation > .btn-default.btn, +.il-viewcontrol-sortation .dropdown > .btn-default.btn, +.il-table-presentation-viewcontrols .l-bar__space-keeper .l-bar__group .l-bar__element > .btn-default.btn, .c-sequence__navigation--back > .btn-default, .c-sequence__navigation--back.navbar-form > a, +.c-sequence__navigation--next > .btn-default, +.c-sequence__navigation--next.navbar-form > a, .ilTableNav > table > tbody > tr > td > .btn-group > .btn-link, .ilTableNav > table > tbody > tr > td > .btn-group.c-input-tree_select > input[type=button], +.ilTableNav > table > tbody > tr > td > .dropdown > .btn-default, +.ilTableNav > table > tbody > tr > td > .dropdown.navbar-form > a { + align-items: center; + justify-content: center; + cursor: pointer; + user-select: none; + touch-action: manipulation; + font-family: "Open Sans", Verdana, Arial, Helvetica, sans-serif; + text-align: center; + line-height: inherit; + font-size: inherit; + font-weight: 400; + text-decoration: none; +} .btn-ctrl:focus-visible, .il-viewcontrol-sortation > .btn-default:focus-visible, .il-viewcontrol-sortation > .btn-link:focus-visible, .il-viewcontrol-section > .btn-default:focus-visible, .il-viewcontrol-section > .btn-link:focus-visible, @@ -3796,6 +3818,41 @@ input.btn, .c-input-tree_select > input[type=button], .c-drilldown input.c-drill outline: 3px solid #0078D7; box-shadow: inset 0px 0px 0px 2px #FFFFFF, 0px 0px 0px 5px #FFFFFF; } +.btn-ctrl, .il-viewcontrol-sortation > .btn-default, .il-viewcontrol-sortation > .btn-link, +.il-viewcontrol-section > .btn-default, +.il-viewcontrol-section > .btn-link, +.il-viewcontrol-section .btn-group > .btn-default, +.il-viewcontrol-section .btn-group > .btn-link, +.il-viewcontrol-pagination__sectioncontrol > .btn-default, +.il-viewcontrol-pagination__sectioncontrol > .btn-link, +.il-viewcontrol-pagination__num-of-items > .btn-default, +.il-viewcontrol-pagination__num-of-items > .btn-link, +.il-viewcontrol-pagination > .btn-default, +.il-viewcontrol-pagination > .btn-link, +.il-viewcontrol-pagination .dropdown > .btn-default, +.il-viewcontrol-pagination .dropdown > .btn-link, +.il-viewcontrol-pagination .last > .btn-default, +.il-viewcontrol-pagination .last > .btn-link, +.il-viewcontrol-mode > .btn-default, +.il-viewcontrol-mode > .btn-link, .il-viewcontrol-sortation > .btn-default.btn, +.il-viewcontrol-sortation .dropdown > .btn-default.btn, +.il-table-presentation-viewcontrols .l-bar__space-keeper .l-bar__group .l-bar__element > .btn-default.btn, .c-sequence__navigation--back > .btn-default, .c-sequence__navigation--back.navbar-form > a, +.c-sequence__navigation--next > .btn-default, +.c-sequence__navigation--next.navbar-form > a, .ilTableNav > table > tbody > tr > td > .btn-group > .btn-link, .ilTableNav > table > tbody > tr > td > .btn-group.c-input-tree_select > input[type=button], +.ilTableNav > table > tbody > tr > td > .dropdown > .btn-default, +.ilTableNav > table > tbody > tr > td > .dropdown.navbar-form > a { + min-height: 2.2rem; + min-width: 2.2rem; + font-size: 0.75rem; + padding: 3px 6px; + gap: 6px; + background-color: rgb(226.2857142857, 231.6428571429, 238.7142857143); + color: #4c6586; + border-width: 1px; + border-style: solid; + border-color: rgb(226.2857142857, 231.6428571429, 238.7142857143); + border-radius: 10px; +} .btn-ctrl:hover, .il-viewcontrol-sortation > .btn-default:hover, .il-viewcontrol-sortation > .btn-link:hover, .il-viewcontrol-section > .btn-default:hover, .il-viewcontrol-section > .btn-link:hover, @@ -4226,14 +4283,16 @@ button > .glyphicon { background-image: url("../images/media/loader.svg"); background-color: #b0b0b0; border-color: #b0b0b0; - background-repeat: no-repeat; - background-position: right center; - padding-right: 18px; } .il-btn-with-loading-animation:hover { background-color: #b0b0b0; border-color: #b0b0b0; } +.il-btn-with-loading-animation { + background-repeat: no-repeat; + background-position: right center; + padding-right: 18px; +} .minimize, .close, .c-input-tree_select .c-input-tree_select__selection button[type=remove] { font-size: 1.3125rem; @@ -4263,17 +4322,6 @@ button .minimize, button .close, button .c-input-tree_select .c-input-tree_selec white-space: nowrap; padding: 1px 3px; margin: 3px 6px 3px 0; - min-height: 28px; - min-width: 28px; - font-size: 0.75rem; - padding: 3px 6px; - gap: 6px; - background-color: #4c6586; - color: white; - border-width: 1px; - border-style: solid; - border-color: #4c6586; - border-radius: 3px; } .btn-tag.btn-tag-inactive { cursor: default !important; @@ -4303,6 +4351,19 @@ button .minimize, button .close, button .c-input-tree_select .c-input-tree_selec background-color: #75deea; border-color: rgb(132.9, 209.3615384615, 218.1); } +.btn-tag { + min-height: 28px; + min-width: 28px; + font-size: 0.75rem; + padding: 3px 6px; + gap: 6px; + background-color: #4c6586; + color: white; + border-width: 1px; + border-style: solid; + border-color: #4c6586; + border-radius: 3px; +} .btn-tag:hover { text-decoration: none; background-color: rgb(57.5428571429, 76.4714285714, 101.4571428571); @@ -4426,7 +4487,6 @@ button .minimize, button .close, button .c-input-tree_select .c-input-tree_selec border: 1px solid #dddddd; border-radius: 0; box-shadow: none; - /* see bug #24947 */ } .il-card .il-card-image-container { width: 100%; @@ -4440,6 +4500,9 @@ button .minimize, button .close, button .c-input-tree_select .c-input-tree_selec max-height: 100%; margin: auto; } +.il-card { + /* see bug #24947 */ +} .il-card a { overflow: hidden; } @@ -4883,9 +4946,6 @@ hr.il-divider-with-label { .c-entity.__actions .dropdown { height: max-content; } -.c-entity.__secondary-identifier { - grid-area: second-id; -} .c-entity.__secondary-identifier.--string, .c-entity.__secondary-identifier.--shy, .c-entity.__secondary-identifier.--shylink { width: 10rem; } @@ -4895,6 +4955,9 @@ hr.il-divider-with-label { .c-entity.__secondary-identifier.--image { width: 15rem; } +.c-entity.__secondary-identifier { + grid-area: second-id; +} .c-entity.__primary-identifier { grid-area: prim-id; font-weight: 600; @@ -5081,36 +5144,6 @@ hr.il-divider-with-label { gap: 6px; } -@media only screen and (min-width: 992px) { - .panel-secondary .il-item { - width: 100%; - } - .panel-secondary .il-item .il-item-title { - word-break: break-word; - } - .panel-secondary .il-item .il-item-description { - padding-top: 0; - word-break: break-word; - } - .panel-secondary .il-item .il-item-divider { - padding: 6px 0 0 0; - margin: 0 0 6px 0; - } - .panel-secondary .il-item .col-sm-3 { - margin-top: 3px; - margin-left: 0; - width: 45px; - } - .panel-secondary .il-item .col-sm-3 img { - width: 40px; - } - .panel-secondary .il-item .col-sm-9 { - width: calc(100% - 45px); - } - .panel-secondary .il-item .col-md-6 { - width: 100%; - } -} /* otherwise dropdowns in items with icon do not work */ .il-std-item .media .media-body, .il-std-item .media, .il-notification-item .media, .il-notification-item .media .media-body { overflow: visible; @@ -5133,8 +5166,6 @@ hr.il-divider-with-label { border-style: solid; border-color: rgb(84.5, 122.9090909091, 46.0909090909); border-radius: 10px; - min-width: 50%; - width: max-content; } .c-launcher .btn-bulky:hover { text-decoration: none; @@ -5173,6 +5204,10 @@ hr.il-divider-with-label { border-color: rgb(84.5, 122.9090909091, 46.0909090909); color: #000; } +.c-launcher .btn-bulky { + min-width: 50%; + width: max-content; +} .c-launcher .btn-bulky[disabled] { cursor: not-allowed; } @@ -5343,14 +5378,14 @@ main { display: block; } +.il-layout-page-content:focus-visible { + outline: none; +} .il-layout-page-content { display: flex; flex-flow: column; overflow: auto; } -.il-layout-page-content:focus-visible { - outline: none; -} .il-layout-page-content #mainspacekeeper { flex-grow: 1; width: 100%; @@ -5669,16 +5704,16 @@ a[aria-disabled].il-link.link-bulky:hover { } /* common css for characteristic value listing */ -.il-listing-characteristic-value-row { - /* i tried .ilClearFloat, did not work as expected */ - border-top: solid #dddddd 1px; - padding: 12px 0; -} .il-listing-characteristic-value-row::after { display: block; clear: both; content: ""; } +.il-listing-characteristic-value-row { + /* i tried .ilClearFloat, did not work as expected */ + border-top: solid #dddddd 1px; + padding: 12px 0; +} .il-listing-characteristic-value-row:first-child { border-top: none; @@ -5894,12 +5929,22 @@ a[aria-disabled].il-link.link-bulky:hover { .il-maincontrols-slate .link-bulky .icon { filter: invert(50%); } +.il-maincontrols-slate .c-tooltip__container:has(.btn-bulky), +.il-maincontrols-slate .c-tooltip__container:has(.link-bulky) { + width: 100%; +} .il-maincontrols-slate .il-maincontrols-slate .btn-bulky { background-color: #f9f9f9; } .il-maincontrols-slate.il-maincontrols-slate-notification .il-maincontrols-slate-notification-title { padding: 12px; } +.il-maincontrols-slate.il-maincontrols-slate-notification .il-maincontrols-slate-notification-title .btn-bulky .glyph :before { + content: " \e605"; + font-family: "il-icons"; + font-size: 1.0625rem; + margin-right: 10px; +} .il-maincontrols-slate.il-maincontrols-slate-notification .il-maincontrols-slate-notification-title .btn-bulky { margin: -12px; border: none; @@ -5909,12 +5954,6 @@ a[aria-disabled].il-link.link-bulky:hover { background-color: transparent; width: 50%; } -.il-maincontrols-slate.il-maincontrols-slate-notification .il-maincontrols-slate-notification-title .btn-bulky .glyph :before { - content: " \e605"; - font-family: "il-icons"; - font-size: 1.0625rem; - margin-right: 10px; -} .il-maincontrols-slate #il-tag-slate-container .btn-bulky .glyph :before, .il-maincontrols-slate #ilHelpPanel .btn-bulky .glyph :before { content: " \e605"; font-family: "il-icons"; @@ -6068,17 +6107,17 @@ a[aria-disabled].il-link.link-bulky:hover { .il-maincontrols-metabar .il-counter { font-size: 1.4375rem; } +.il-maincontrols-metabar > li > .btn.btn-bulky:focus-visible, .il-maincontrols-metabar > li > a.il-link.link-bulky:focus-visible { + outline: none; + border: 3px solid #0078D7; + box-shadow: inset 0px 0px 0px 2px #FFFFFF, 0px 0px 0px 2px #FFFFFF; +} .il-maincontrols-metabar > li > .btn.btn-bulky, .il-maincontrols-metabar > li > a.il-link.link-bulky { border: none; background-color: transparent; height: 60px; min-width: 60px; } -.il-maincontrols-metabar > li > .btn.btn-bulky:focus-visible, .il-maincontrols-metabar > li > a.il-link.link-bulky:focus-visible { - outline: none; - border: 3px solid #0078D7; - box-shadow: inset 0px 0px 0px 2px #FFFFFF, 0px 0px 0px 2px #FFFFFF; -} @media only screen and (max-width: 991px) { .il-maincontrols-metabar > li > .btn.btn-bulky, .il-maincontrols-metabar > li > a.il-link.link-bulky { height: 45px; @@ -6130,14 +6169,16 @@ a[aria-disabled].il-link.link-bulky:hover { background-color: #fafafa; position: absolute; max-width: 500px; +} +.il-metabar-slates .il-maincontrols-slate { + min-width: 500px; +} +.il-metabar-slates { max-height: 90vh; overflow-y: auto; right: 0; top: 60px; } -.il-metabar-slates .il-maincontrols-slate { - min-width: 500px; -} .il-metabar-slates .bulky-label { margin-top: auto; margin-bottom: auto; @@ -6247,20 +6288,6 @@ a[aria-disabled].il-link.link-bulky:hover { .il-mainbar-tools-button .btn-bulky .bulky-label, .il-mainbar-tools-button .il-link.link-bulky .bulky-label, .il-mainbar-tool-trigger-item .btn-bulky .bulky-label, -.il-mainbar-tool-trigger-item .il-link.link-bulky .bulky-label { - /* edge, chrome, safari go here... */ - /* may come with next firefox 68, https://caniuse.com/#search=clamp */ - word-break: break-word; - -ms-hyphens: auto; - -moz-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} -.il-mainbar-triggers .btn-bulky .bulky-label, -.il-mainbar-triggers .il-link.link-bulky .bulky-label, -.il-mainbar-tools-button .btn-bulky .bulky-label, -.il-mainbar-tools-button .il-link.link-bulky .bulky-label, -.il-mainbar-tool-trigger-item .btn-bulky .bulky-label, .il-mainbar-tool-trigger-item .il-link.link-bulky .bulky-label { position: relative; max-height: 3em; @@ -6282,6 +6309,14 @@ a[aria-disabled].il-link.link-bulky:hover { height: 1.5em; background: linear-gradient(to right, rgba(255, 255, 255, 0), rgb(255, 255, 255) 80%); } +.il-mainbar-triggers .btn-bulky .bulky-label, +.il-mainbar-triggers .il-link.link-bulky .bulky-label, +.il-mainbar-tools-button .btn-bulky .bulky-label, +.il-mainbar-tools-button .il-link.link-bulky .bulky-label, +.il-mainbar-tool-trigger-item .btn-bulky .bulky-label, +.il-mainbar-tool-trigger-item .il-link.link-bulky .bulky-label { + /* edge, chrome, safari go here... */ +} @supports (-webkit-line-clamp: 2) { .il-mainbar-triggers .btn-bulky .bulky-label, .il-mainbar-triggers .il-link.link-bulky .bulky-label, @@ -6304,6 +6339,14 @@ a[aria-disabled].il-link.link-bulky:hover { display: none; } } +.il-mainbar-triggers .btn-bulky .bulky-label, +.il-mainbar-triggers .il-link.link-bulky .bulky-label, +.il-mainbar-tools-button .btn-bulky .bulky-label, +.il-mainbar-tools-button .il-link.link-bulky .bulky-label, +.il-mainbar-tool-trigger-item .btn-bulky .bulky-label, +.il-mainbar-tool-trigger-item .il-link.link-bulky .bulky-label { + /* may come with next firefox 68, https://caniuse.com/#search=clamp */ +} @supports (-moz-line-clamp: 2) { .il-mainbar-triggers .btn-bulky .bulky-label, .il-mainbar-triggers .il-link.link-bulky .bulky-label, @@ -6326,6 +6369,18 @@ a[aria-disabled].il-link.link-bulky:hover { display: none; } } +.il-mainbar-triggers .btn-bulky .bulky-label, +.il-mainbar-triggers .il-link.link-bulky .bulky-label, +.il-mainbar-tools-button .btn-bulky .bulky-label, +.il-mainbar-tools-button .il-link.link-bulky .bulky-label, +.il-mainbar-tool-trigger-item .btn-bulky .bulky-label, +.il-mainbar-tool-trigger-item .il-link.link-bulky .bulky-label { + word-break: break-word; + -ms-hyphens: auto; + -moz-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} .il-mainbar-triggers .il-mainbar-entries { min-width: 100%; @@ -6509,12 +6564,15 @@ a[aria-disabled].il-link.link-bulky:hover { .il-mainbar-tools-entries .btn-bulky.engaged, .il-mainbar-tools-entries .btn-bulky.engaged, .il-mainbar-tools-entries .il-link.link-bulky.engaged { background-color: white; - color: #2c2c2c; } .il-mainbar-tools-entries .btn-bulky.engaged:not(:focus-visible), .il-mainbar-tools-entries .btn-bulky.engaged:not(:focus-visible), .il-mainbar-tools-entries .il-link.link-bulky.engaged:not(:focus-visible) { border: 0; } +.il-mainbar-tools-entries .btn-bulky.engaged, .il-mainbar-tools-entries .btn-bulky.engaged, +.il-mainbar-tools-entries .il-link.link-bulky.engaged { + color: #2c2c2c; +} .il-mainbar-tools-entries .btn-bulky.engaged .icon, .il-mainbar-tools-entries .btn-bulky.engaged .icon, .il-mainbar-tools-entries .il-link.link-bulky.engaged .icon { filter: invert(60%); @@ -6590,12 +6648,12 @@ a[aria-disabled].il-link.link-bulky:hover { position: relative; } -.il-mainbar-slates > .il-maincontrols-slate.engaged > .il-maincontrols-slate-content { - height: 0px; -} .il-mainbar-slates > .il-maincontrols-slate.engaged > .il-maincontrols-slate-content > :first-child { z-index: 1; } +.il-mainbar-slates > .il-maincontrols-slate.engaged > .il-maincontrols-slate-content { + height: 0px; +} .il-mainbar-slates > .il-maincontrols-slate.engaged > .il-maincontrols-slate-content .panel-secondary { margin-bottom: 0; border: none; @@ -7021,11 +7079,6 @@ code { .c-mode-info__close a:hover { color: white; } -.c-mode-info__label { - /* edge, chrome, safari go here... */ - /* may come with next firefox 68, https://caniuse.com/#search=clamp */ - flex-grow: 1; -} .c-mode-info__label { position: relative; max-height: 1.5em; @@ -7042,6 +7095,9 @@ code { height: 1.5em; background: linear-gradient(to right, rgba(255, 255, 255, 0), rgb(255, 255, 255) 80%); } +.c-mode-info__label { + /* edge, chrome, safari go here... */ +} @supports (-webkit-line-clamp: 2) { .c-mode-info__label { overflow: hidden; @@ -7054,6 +7110,9 @@ code { display: none; } } +.c-mode-info__label { + /* may come with next firefox 68, https://caniuse.com/#search=clamp */ +} @supports (-moz-line-clamp: 2) { .c-mode-info__label { overflow: hidden; @@ -7066,6 +7125,9 @@ code { display: none; } } +.c-mode-info__label { + flex-grow: 1; +} @media only screen and (max-width: 991px) { .c-mode-info__mobile-padding { height: 45px; @@ -7094,16 +7156,6 @@ code { /** nagtive or positive contrast color for text and glyph **/ /** contrast threshold for contrast color **/ /** three color variants for neutral, important, breaking Head Infos **/ -.il-system-info { - line-height: 20px; - padding-top: 6px; - padding-bottom: 6px; - height: 32px; - display: flex; - flex-wrap: nowrap; - flex-direction: row; - justify-content: flex-start; -} .il-system-info.il-system-info-neutral { -webkit-box-shadow: inset 0px -10px 4px -10px rgba(0, 0, 0, 0.25); -moz-box-shadow: inset 0px -10px 4px -10px rgba(0, 0, 0, 0.25); @@ -7155,6 +7207,16 @@ code { .il-system-info.il-system-info-breaking a.glyph { color: white; } +.il-system-info { + line-height: 20px; + padding-top: 6px; + padding-bottom: 6px; + height: 32px; + display: flex; + flex-wrap: nowrap; + flex-direction: row; + justify-content: flex-start; +} .il-system-info.full { height: auto; overflow: visible; @@ -7217,22 +7279,6 @@ code { .il-drilldown .menulevel, .navbar-form > a { display: inline-flex; vertical-align: middle; - align-items: center; - justify-content: center; - cursor: pointer; - user-select: none; - touch-action: manipulation; - font-family: "Open Sans", Verdana, Arial, Helvetica, sans-serif; - text-align: center; - line-height: inherit; - font-size: inherit; - font-weight: 400; - text-decoration: none; - min-height: 28px; - min-width: 28px; - font-size: 0.75rem; - padding: 3px 6px; - gap: 6px; } .btn + .btn, .c-drilldown .c-drilldown__menulevel--trigger + .btn, .c-drilldown .btn + .c-drilldown__menulevel--trigger, .c-drilldown .c-drilldown__menulevel--trigger + .c-drilldown__menulevel--trigger, .il-link.link-bulky + .btn, .c-drilldown .il-link.link-bulky + .c-drilldown__menulevel--trigger, @@ -7250,12 +7296,36 @@ code { margin-left: 3px; } +.btn, .c-drilldown .c-drilldown__menulevel--trigger, .il-link.link-bulky, +.il-drilldown .menulevel, .navbar-form > a { + align-items: center; + justify-content: center; + cursor: pointer; + user-select: none; + touch-action: manipulation; + font-family: "Open Sans", Verdana, Arial, Helvetica, sans-serif; + text-align: center; + line-height: inherit; + font-size: inherit; + font-weight: 400; + text-decoration: none; +} + .btn:focus-visible, .c-drilldown .c-drilldown__menulevel--trigger:focus-visible, .il-link.link-bulky:focus-visible, .il-drilldown .menulevel:focus-visible, .navbar-form > a:focus-visible { outline: 3px solid #0078D7; box-shadow: inset 0px 0px 0px 2px #FFFFFF, 0px 0px 0px 5px #FFFFFF; } +.btn, .c-drilldown .c-drilldown__menulevel--trigger, .il-link.link-bulky, +.il-drilldown .menulevel, .navbar-form > a { + min-height: 28px; + min-width: 28px; + font-size: 0.75rem; + padding: 3px 6px; + gap: 6px; +} + .btn .glyph, .c-drilldown .c-drilldown__menulevel--trigger .glyph, .il-link.link-bulky .glyph, .il-drilldown .menulevel .glyph, .navbar-form > a .glyph, .btn .glyph .glyphicon, @@ -7404,28 +7474,6 @@ input.btn, .c-drilldown input.c-drilldown__menulevel--trigger, input.il-link.lin .ilTableNav > table > tbody > tr > td > .dropdown.navbar-form > a { display: inline-flex; vertical-align: middle; - align-items: center; - justify-content: center; - cursor: pointer; - user-select: none; - touch-action: manipulation; - font-family: "Open Sans", Verdana, Arial, Helvetica, sans-serif; - text-align: center; - line-height: inherit; - font-size: inherit; - font-weight: 400; - text-decoration: none; - min-height: 2.2rem; - min-width: 2.2rem; - font-size: 0.75rem; - padding: 3px 6px; - gap: 6px; - background-color: rgb(226.2857142857, 231.6428571429, 238.7142857143); - color: #4c6586; - border-width: 1px; - border-style: solid; - border-color: rgb(226.2857142857, 231.6428571429, 238.7142857143); - border-radius: 10px; } .btn-ctrl + .btn-ctrl, .c-sequence__navigation--back > .btn-default + .btn-ctrl, .c-sequence__navigation--back.navbar-form > a + .btn-ctrl, @@ -7456,6 +7504,24 @@ input.btn, .c-drilldown input.c-drilldown__menulevel--trigger, input.il-link.lin margin-left: 3px; } +.btn-ctrl, .c-sequence__navigation--back > .btn-default, .c-sequence__navigation--back.navbar-form > a, +.c-sequence__navigation--next > .btn-default, +.c-sequence__navigation--next.navbar-form > a, .ilTableNav > table > tbody > tr > td > .btn-group > .btn-link, +.ilTableNav > table > tbody > tr > td > .dropdown > .btn-default, +.ilTableNav > table > tbody > tr > td > .dropdown.navbar-form > a { + align-items: center; + justify-content: center; + cursor: pointer; + user-select: none; + touch-action: manipulation; + font-family: "Open Sans", Verdana, Arial, Helvetica, sans-serif; + text-align: center; + line-height: inherit; + font-size: inherit; + font-weight: 400; + text-decoration: none; +} + .btn-ctrl:focus-visible, .c-sequence__navigation--back > .btn-default:focus-visible, .c-sequence__navigation--back.navbar-form > a:focus-visible, .c-sequence__navigation--next > .btn-default:focus-visible, .c-sequence__navigation--next.navbar-form > a:focus-visible, .ilTableNav > table > tbody > tr > td > .btn-group > .btn-link:focus-visible, @@ -7465,6 +7531,24 @@ input.btn, .c-drilldown input.c-drilldown__menulevel--trigger, input.il-link.lin box-shadow: inset 0px 0px 0px 2px #FFFFFF, 0px 0px 0px 5px #FFFFFF; } +.btn-ctrl, .c-sequence__navigation--back > .btn-default, .c-sequence__navigation--back.navbar-form > a, +.c-sequence__navigation--next > .btn-default, +.c-sequence__navigation--next.navbar-form > a, .ilTableNav > table > tbody > tr > td > .btn-group > .btn-link, +.ilTableNav > table > tbody > tr > td > .dropdown > .btn-default, +.ilTableNav > table > tbody > tr > td > .dropdown.navbar-form > a { + min-height: 2.2rem; + min-width: 2.2rem; + font-size: 0.75rem; + padding: 3px 6px; + gap: 6px; + background-color: rgb(226.2857142857, 231.6428571429, 238.7142857143); + color: #4c6586; + border-width: 1px; + border-style: solid; + border-color: rgb(226.2857142857, 231.6428571429, 238.7142857143); + border-radius: 10px; +} + .btn-ctrl:hover, .c-sequence__navigation--back > .btn-default:hover, .c-sequence__navigation--back.navbar-form > a:hover, .c-sequence__navigation--next > .btn-default:hover, .c-sequence__navigation--next.navbar-form > a:hover, .ilTableNav > table > tbody > tr > td > .btn-group > .btn-link:hover, @@ -7735,9 +7819,6 @@ button > .glyphicon { background-image: url("../images/media/loader.svg"); background-color: #b0b0b0; border-color: #b0b0b0; - background-repeat: no-repeat; - background-position: right center; - padding-right: 18px; } .il-btn-with-loading-animation:hover { @@ -7745,6 +7826,12 @@ button > .glyphicon { border-color: #b0b0b0; } +.il-btn-with-loading-animation { + background-repeat: no-repeat; + background-position: right center; + padding-right: 18px; +} + .minimize, .close { font-size: 1.3125rem; font-weight: 600; @@ -8711,10 +8798,6 @@ ul.c-input--has-mustache-variables__definitions > li { .c-form .c-input[data-il-ui-component=switchable-group-field-input] > .c-input__field > .c-input { display: grid; grid-template-columns: 25% 75%; - grid-template-rows: repeat(3, max-content) 1fr; - transition-property: grid-template-rows; - transition-duration: 0.3s; - transition-timing-function: ease-in-out; } .c-form .c-input[data-il-ui-component=optional-group-field-input] > .c-input__field, .c-form .c-input[data-il-ui-component=switchable-group-field-input] > .c-input__field > .c-input > .c-input__field { @@ -8725,13 +8808,16 @@ ul.c-input--has-mustache-variables__definitions > li { .c-form .c-input[data-il-ui-component=optional-group-field-input] > .c-input__field > .c-input, .c-form .c-input[data-il-ui-component=switchable-group-field-input] > .c-input__field > .c-input > .c-input__field > .c-input { margin: 0; - padding: 12px 15px; - background-color: #f9f9f9; } .c-form .c-input[data-il-ui-component=optional-group-field-input] > .c-input__field > .c-input:first-child, .c-form .c-input[data-il-ui-component=switchable-group-field-input] > .c-input__field > .c-input > .c-input__field > .c-input:first-child { margin-top: 6px; } +.c-form .c-input[data-il-ui-component=optional-group-field-input] > .c-input__field > .c-input, +.c-form .c-input[data-il-ui-component=switchable-group-field-input] > .c-input__field > .c-input > .c-input__field > .c-input { + padding: 12px 15px; + background-color: #f9f9f9; +} .c-form .c-input[data-il-ui-component=optional-group-field-input] > .c-input__field > .c-input:hover, .c-form .c-input[data-il-ui-component=optional-group-field-input] > .c-input__field > .c-input:has(:focus-visible), .c-form .c-input[data-il-ui-component=switchable-group-field-input] > .c-input__field > .c-input > .c-input__field > .c-input:hover, .c-form .c-input[data-il-ui-component=switchable-group-field-input] > .c-input__field > .c-input > .c-input__field > .c-input:has(:focus-visible) { @@ -8753,6 +8839,13 @@ ul.c-input--has-mustache-variables__definitions > li { .c-form .c-input[data-il-ui-component=switchable-group-field-input] > .c-input__field > .c-input > .c-input__error-msg { grid-area: error; } +.c-form .c-input[data-il-ui-component=optional-group-field-input], +.c-form .c-input[data-il-ui-component=switchable-group-field-input] > .c-input__field > .c-input { + grid-template-rows: repeat(3, max-content) 1fr; + transition-property: grid-template-rows; + transition-duration: 0.3s; + transition-timing-function: ease-in-out; +} .c-form .c-input[data-il-ui-component=optional-group-field-input] > .c-input__field, .c-form .c-input[data-il-ui-component=switchable-group-field-input] > .c-input__field > .c-input > .c-input__field { transition-property: display; @@ -9091,6 +9184,11 @@ ul.c-input--has-mustache-variables__definitions > li { width: calc(100% - 50.4px); float: left; } +.c-input-tree_select .c-drilldown .c-input-node__select:focus-visible { + outline: none; + border: 3px solid #0078D7; + box-shadow: inset 0px 0px 0px 2px #FFFFFF, 0px 0px 0px 2px #FFFFFF; +} .c-input-tree_select .c-drilldown .c-input-node__select { min-height: 50.4px; min-width: 50.4px; @@ -9103,15 +9201,6 @@ ul.c-input--has-mustache-variables__definitions > li { border-style: solid; border-color: transparent; border-radius: 0px; - margin-bottom: 2px; - margin-left: 0; - display: none; - float: left; -} -.c-input-tree_select .c-drilldown .c-input-node__select:focus-visible { - outline: none; - border: 3px solid #0078D7; - box-shadow: inset 0px 0px 0px 2px #FFFFFF, 0px 0px 0px 2px #FFFFFF; } .c-input-tree_select .c-drilldown .c-input-node__select:hover { text-decoration: none; @@ -9148,6 +9237,12 @@ ul.c-input--has-mustache-variables__definitions > li { border-color: transparent; color: #000; } +.c-input-tree_select .c-drilldown .c-input-node__select { + margin-bottom: 2px; + margin-left: 0; + display: none; + float: left; +} .c-input-tree_select .c-drilldown .c-input-node__select:focus-visible { z-index: 100; } @@ -9243,6 +9338,9 @@ ul.c-input--has-mustache-variables__definitions > li { grid-area: label; padding-right: 12px; } +.c-input[data-il-ui-component] > label > .asterisk:first-child { + padding-left: 3px; +} .c-input[data-il-ui-component] > .c-input__field { grid-area: field; } @@ -9285,11 +9383,13 @@ ul.c-input--has-mustache-variables__definitions > li { } .c-form .c-input__error-msg { margin-top: 3px; - margin-bottom: 0; } .c-form .c-input__error-msg:first-child { margin-top: 0; } +.c-form .c-input__error-msg { + margin-bottom: 0; +} .c-form .c-input[data-il-ui-component]:not([data-il-ui-component=section-field-input]):has(> .c-input__error-msg) { border-inline-start: 6px solid rgb(255, 214.54, 214.54); padding-left: 9px; @@ -9911,7 +10011,21 @@ div.alert ul { } .il-audio-player { - background: #2c2c2c; + background: transparent; + height: 30px; + width: 100%; +} + +.il-video-container video { + background-position: center; + background-size: contain; + background-repeat: no-repeat; + width: 100%; +} +.il-video-container iframe { + width: 100%; + aspect-ratio: 16/9; + border: 0; } .webui-popover-content { @@ -11948,12 +12062,14 @@ div.alert ul { text-color: white; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - min-height: 20px; - font-size: 0.75rem; } .il-table-presentation-row .il-table-presentation-row-expanded .il-table-presentation-details .il-table-presentation-fields blockquote { border-color: #dddddd; } +.il-table-presentation-row .il-table-presentation-row-expanded .il-table-presentation-details .il-table-presentation-fields { + min-height: 20px; + font-size: 0.75rem; +} .il-table-presentation-row .il-table-presentation-row-expanded .il-table-presentation-details .il-table-presentation-fields .il-item-property-name { color: rgb(111.25, 111.25, 111.25); } @@ -14512,15 +14628,15 @@ ul.il-book-obj-selection li { width: 100%; } +.chatroom-centered-checkboxes label { + margin: 0 5px 0 0; +} .chatroom-centered-checkboxes { display: flex; align-items: center; justify-content: space-between; margin-bottom: 5px; } -.chatroom-centered-checkboxes label { - margin: 0 5px 0 0; -} @media only screen and (max-width: 991px) { #message-controls .msg-control { @@ -15475,11 +15591,13 @@ div#right_bottom_area iframe { } #il-mcst-img-gallery .modal-content { min-height: 100%; - background-color: black; } #il-mcst-img-gallery .modal-content img { margin: 30px auto 0 auto; } +#il-mcst-img-gallery .modal-content { + background-color: black; +} #il-mcst-img-gallery .modal-title { color: white; } @@ -15664,13 +15782,13 @@ div.ilPrtfToc { margin-top: 40px; } -body.ilPrtfPdfBody { - margin: 0; -} body.ilPrtfPdfBody > div.ilInvisibleBorder { padding: 0; padding-left: 40px; } +body.ilPrtfPdfBody { + margin: 0; +} body.ilPrtfPdfBody h1.ilc_PrintPageTitle { border-bottom: 1px solid #000000; @@ -15989,6 +16107,11 @@ div.ilc_Question { padding-right: 15px; } +img.ilc_solution_image { + min-width: 0.875rem; + min-height: 0.875rem; +} + .solutionbox { color: black; background-color: white; @@ -17182,18 +17305,12 @@ img.ilBadgeImage { max-height: 150px; } -.ilBadgeImageThumbnail a .img-responsive { - max-width: 50px; - max-height: 50px; +.badge_table-wrapper button > img.img-responsive, .badge_table-wrapper a > img.img-responsive { + max-width: 150px; + max-height: 150px; display: inline-block; } -.ilBadgeImageThumbnail .modal .img-responsive { - margin: auto; - width: 50%; - height: auto; -} - div.ilBadgeBackpackPanelContent { min-height: 200px; } @@ -17418,16 +17535,18 @@ table.calmini { table.calmini tr, table.calmini td, table.calmini th { border: none; padding: 5px 3px; - text-align: center; - vertical-align: middle; - color: #161616; - background-color: transparent; } @media only screen and (max-width: 991px) { table.calmini tr, table.calmini td, table.calmini th { padding: 5px 1px; } } +table.calmini tr, table.calmini td, table.calmini th { + text-align: center; + vertical-align: middle; + color: #161616; + background-color: transparent; +} table.calmini tr { background-color: white; } @@ -19193,16 +19312,6 @@ fieldset[disabled] .checkbox label { .form-horizontal { margin-bottom: 15px; background: white; - /* - // Reset spacing and right align labels, but scope to media queries so that - // labels on narrow viewports stack the same as a default form example. - @media (min-width: $screen-sm-min) { - .control-label { - text-align: right; - margin-bottom: 0; - padding-top: ($il-padding-base-vertical + 1); // Default padding plus a border - } - } */ } .form-horizontal .form-group { margin: 0px; @@ -19253,6 +19362,21 @@ fieldset[disabled] .checkbox label { .form-horizontal .control-label.col-sm-3.il_textarea { width: 100%; } +.form-horizontal .control-label > .asterisk { + padding-left: 3px; +} +.form-horizontal { + /* + // Reset spacing and right align labels, but scope to media queries so that + // labels on narrow viewports stack the same as a default form example. + @media (min-width: $screen-sm-min) { + .control-label { + text-align: right; + margin-bottom: 0; + padding-top: ($il-padding-base-vertical + 1); // Default padding plus a border + } + } */ +} .ilFormHeader { padding: 12px 0 12px 15px; @@ -19531,18 +19655,18 @@ a#ilHelpClose { } } -.ilStartupSection { - padding-top: 20px; - width: fit-content; - margin-left: auto; - margin-right: auto; -} .ilStartupSection .control-label { width: 33.33%; } .ilStartupSection .control-label + div { width: 66.67%; } +.ilStartupSection { + padding-top: 20px; + width: fit-content; + margin-left: auto; + margin-right: auto; +} @media only screen and (max-width: 991px) { .ilStartupSection { padding-top: 15px; @@ -19566,8 +19690,6 @@ ul.ilStartupSectionRegistrationLinks li { div.ilStartupSection form.form-horizontal { border: 1px solid #dddddd; border-radius: 3px; - text-align: left; - width: 40em; } div.ilStartupSection form.form-horizontal .ilFormHeader { padding: 9px 15px; @@ -19576,6 +19698,10 @@ div.ilStartupSection form.form-horizontal .ilFormHeader { div.ilStartupSection form.form-horizontal .form-group { margin: 9px 0; } +div.ilStartupSection form.form-horizontal { + text-align: left; + width: 40em; +} @media only screen and (max-width: 991px) { div.ilStartupSection form.form-horizontal { width: auto; @@ -21974,7 +22100,8 @@ a.ilMediaLightboxClose:hover { float: left; margin: 0 3px 0 0; } -#ilTab > li > a { +#ilTab > li > a, +#ilTab > li > .c-tooltip__container > a { margin: 0; margin-right: 2px; font-size: 0.875rem; @@ -21983,37 +22110,45 @@ a.ilMediaLightboxClose:hover { border: 0 none; border-radius: 0px 0px 0 0; } -#ilTab > li > a:hover { +#ilTab > li > a:hover, +#ilTab > li > .c-tooltip__container > a:hover { border-color: white white white; } -#ilTab > li > a:focus { +#ilTab > li > a:focus, +#ilTab > li > .c-tooltip__container > a:focus { border: inherit; box-shadow: inherit; outline: none; outline-offset: 0px; } -#ilTab > li > a:focus::after { +#ilTab > li > a:focus::after, +#ilTab > li > .c-tooltip__container > a:focus::after { content: none; } -#ilTab > li > a:focus-visible { +#ilTab > li > a:focus-visible, +#ilTab > li > .c-tooltip__container > a:focus-visible { border: inherit; box-shadow: inherit; outline: none; outline-offset: 0px; } -#ilTab > li > a:focus-visible::after { +#ilTab > li > a:focus-visible::after, +#ilTab > li > .c-tooltip__container > a:focus-visible::after { content: none; } -#ilTab > li > a:focus { +#ilTab > li > a:focus, +#ilTab > li > .c-tooltip__container > a:focus { outline: none; outline-offset: 0px; } -#ilTab > li > a:focus-visible { +#ilTab > li > a:focus-visible, +#ilTab > li > .c-tooltip__container > a:focus-visible { position: relative; outline: 2px solid #FFFFFF; outline-offset: 5px; } -#ilTab > li > a:focus-visible::after { +#ilTab > li > a:focus-visible::after, +#ilTab > li > .c-tooltip__container > a:focus-visible::after { content: " "; position: absolute; top: -2px; @@ -22023,7 +22158,7 @@ a.ilMediaLightboxClose:hover { border: 2px solid #FFFFFF; outline: 3px solid #0078D7; } -#ilTab > li.active > a, #ilTab > li.active > a:hover, #ilTab > li.active > a:focus { +#ilTab > li.active > a, #ilTab > li.active > a:hover, #ilTab > li.active > a:focus, #ilTab > li.active > .c-tooltip__container > a, #ilTab > li.active > .c-tooltip__container > a:hover, #ilTab > li.active > .c-tooltip__container > a:focus { color: white; cursor: default; background-color: #161616; @@ -22040,49 +22175,59 @@ a.ilMediaLightboxClose:hover { padding: 6px 0; margin: 0; } -#ilSubTab > li:first-child > a { +#ilSubTab > li:first-child > a, +#ilSubTab > li:first-child > .c-tooltip__container > a { padding-left: 12px; } #ilSubTab > li { float: left; } -#ilSubTab > li > a { +#ilSubTab > li > a, +#ilSubTab > li > .c-tooltip__container > a { border-radius: 0; padding: 3px 9px; font-size: 0.75rem; } -#ilSubTab > li > a:hover { +#ilSubTab > li > a:hover, +#ilSubTab > li > .c-tooltip__container > a:hover { text-decoration: underline; background-color: transparent; } -#ilSubTab > li > a:focus { +#ilSubTab > li > a:focus, +#ilSubTab > li > .c-tooltip__container > a:focus { border: inherit; box-shadow: inherit; outline: none; outline-offset: 0px; } -#ilSubTab > li > a:focus::after { +#ilSubTab > li > a:focus::after, +#ilSubTab > li > .c-tooltip__container > a:focus::after { content: none; } -#ilSubTab > li > a:focus-visible { +#ilSubTab > li > a:focus-visible, +#ilSubTab > li > .c-tooltip__container > a:focus-visible { border: inherit; box-shadow: inherit; outline: none; outline-offset: 0px; } -#ilSubTab > li > a:focus-visible::after { +#ilSubTab > li > a:focus-visible::after, +#ilSubTab > li > .c-tooltip__container > a:focus-visible::after { content: none; } -#ilSubTab > li > a:focus { +#ilSubTab > li > a:focus, +#ilSubTab > li > .c-tooltip__container > a:focus { outline: none; outline-offset: 0px; } -#ilSubTab > li > a:focus-visible { +#ilSubTab > li > a:focus-visible, +#ilSubTab > li > .c-tooltip__container > a:focus-visible { position: relative; outline: 2px solid #FFFFFF; outline-offset: 5px; } -#ilSubTab > li > a:focus-visible::after { +#ilSubTab > li > a:focus-visible::after, +#ilSubTab > li > .c-tooltip__container > a:focus-visible::after { content: " "; position: absolute; top: -2px; @@ -22092,7 +22237,7 @@ a.ilMediaLightboxClose:hover { border: 2px solid #FFFFFF; outline: 3px solid #0078D7; } -#ilSubTab > li.active > a, #ilSubTab > li.active > a:hover, #ilSubTab > li.active > a:focus { +#ilSubTab > li.active > a, #ilSubTab > li.active > a:hover, #ilSubTab > li.active > a:focus, #ilSubTab > li.active > .c-tooltip__container > a, #ilSubTab > li.active > .c-tooltip__container > a:hover, #ilSubTab > li.active > .c-tooltip__container > a:focus { color: #4c6586; background-color: transparent; text-decoration: underline; @@ -22117,19 +22262,19 @@ a.ilMediaLightboxClose:hover { position: relative; display: block; } -.nav > li > a { +.nav > li > a, .nav > li > .c-tooltip__container > a { position: relative; display: block; padding: 6px 12px; } -.nav > li > a:hover, .nav > li > a:focus { +.nav > li > a:hover, .nav > li > a:focus, .nav > li > .c-tooltip__container > a:hover, .nav > li > .c-tooltip__container > a:focus { text-decoration: none; background-color: #f0f0f0; } -.nav > li.disabled > a { +.nav > li.disabled > a, .nav > li.disabled > .c-tooltip__container > a { color: #f9f9f9; } -.nav > li.disabled > a:hover, .nav > li.disabled > a:focus { +.nav > li.disabled > a:hover, .nav > li.disabled > a:focus, .nav > li.disabled > .c-tooltip__container > a:hover, .nav > li.disabled > .c-tooltip__container > a:focus { color: #f9f9f9; text-decoration: none; cursor: not-allowed; @@ -22492,10 +22637,6 @@ div.ilFrame { vertical-align: middle; } -.il-multi-line-cap-2 { - /* edge, chrome, safari go here... */ - /* may come with next firefox 68, https://caniuse.com/#search=clamp */ -} .il-multi-line-cap-2 { position: relative; max-height: 3em; @@ -22512,6 +22653,9 @@ div.ilFrame { height: 1.5em; background: linear-gradient(to right, rgba(255, 255, 255, 0), rgb(255, 255, 255) 80%); } +.il-multi-line-cap-2 { + /* edge, chrome, safari go here... */ +} @supports (-webkit-line-clamp: 2) { .il-multi-line-cap-2 { overflow: hidden; @@ -22524,6 +22668,9 @@ div.ilFrame { display: none; } } +.il-multi-line-cap-2 { + /* may come with next firefox 68, https://caniuse.com/#search=clamp */ +} @supports (-moz-line-clamp: 2) { .il-multi-line-cap-2 { overflow: hidden; @@ -22537,10 +22684,6 @@ div.ilFrame { } } -.il-multi-line-cap-3 { - /* edge, chrome, safari go here... */ - /* may come with next firefox 68, https://caniuse.com/#search=clamp */ -} .il-multi-line-cap-3 { position: relative; max-height: 4.5em; @@ -22557,6 +22700,9 @@ div.ilFrame { height: 1.5em; background: linear-gradient(to right, rgba(255, 255, 255, 0), rgb(255, 255, 255) 80%); } +.il-multi-line-cap-3 { + /* edge, chrome, safari go here... */ +} @supports (-webkit-line-clamp: 2) { .il-multi-line-cap-3 { overflow: hidden; @@ -22569,6 +22715,9 @@ div.ilFrame { display: none; } } +.il-multi-line-cap-3 { + /* may come with next firefox 68, https://caniuse.com/#search=clamp */ +} @supports (-moz-line-clamp: 2) { .il-multi-line-cap-3 { overflow: hidden; @@ -22582,10 +22731,6 @@ div.ilFrame { } } -.il-multi-line-cap-5 { - /* edge, chrome, safari go here... */ - /* may come with next firefox 68, https://caniuse.com/#search=clamp */ -} .il-multi-line-cap-5 { position: relative; max-height: 7.5em; @@ -22602,6 +22747,9 @@ div.ilFrame { height: 1.5em; background: linear-gradient(to right, rgba(255, 255, 255, 0), rgb(255, 255, 255) 80%); } +.il-multi-line-cap-5 { + /* edge, chrome, safari go here... */ +} @supports (-webkit-line-clamp: 2) { .il-multi-line-cap-5 { overflow: hidden; @@ -22614,6 +22762,9 @@ div.ilFrame { display: none; } } +.il-multi-line-cap-5 { + /* may come with next firefox 68, https://caniuse.com/#search=clamp */ +} @supports (-moz-line-clamp: 2) { .il-multi-line-cap-5 { overflow: hidden; @@ -22627,10 +22778,6 @@ div.ilFrame { } } -.il-multi-line-cap-10 { - /* edge, chrome, safari go here... */ - /* may come with next firefox 68, https://caniuse.com/#search=clamp */ -} .il-multi-line-cap-10 { position: relative; max-height: 15em; @@ -22647,6 +22794,9 @@ div.ilFrame { height: 1.5em; background: linear-gradient(to right, rgba(255, 255, 255, 0), rgb(255, 255, 255) 80%); } +.il-multi-line-cap-10 { + /* edge, chrome, safari go here... */ +} @supports (-webkit-line-clamp: 2) { .il-multi-line-cap-10 { overflow: hidden; @@ -22659,6 +22809,9 @@ div.ilFrame { display: none; } } +.il-multi-line-cap-10 { + /* may come with next firefox 68, https://caniuse.com/#search=clamp */ +} @supports (-moz-line-clamp: 2) { .il-multi-line-cap-10 { overflow: hidden; diff --git a/vendor/ilias/Style/basic_style/style.zip b/vendor/ilias/Style/basic_style/style.zip old mode 100755 new mode 100644 index a08ac7a46369..ee86d56552cc Binary files a/vendor/ilias/Style/basic_style/style.zip and b/vendor/ilias/Style/basic_style/style.zip differ