prepareActivityDirectory($exportDir, 'glossary', $moduleId); // Retrieve glossary data $glossaryData = $this->getData($activityId, $sectionId); // Generate XML files for the glossary $this->createGlossaryXml($glossaryData, $glossaryDir); $this->createModuleXml($glossaryData, $glossaryDir); $this->createGradesXml($glossaryData, $glossaryDir); $this->createGradeHistoryXml($glossaryData, $glossaryDir); $this->createInforefXml($glossaryData, $glossaryDir); $this->createRolesXml($glossaryData, $glossaryDir); $this->createCalendarXml($glossaryData, $glossaryDir); $this->createCommentsXml($glossaryData, $glossaryDir); $this->createCompetenciesXml($glossaryData, $glossaryDir); $this->createFiltersXml($glossaryData, $glossaryDir); } /** * Get all terms from the course and group them into a single glossary. */ public function getData(int $glossaryId, int $sectionId): ?array { $adminData = MoodleExport::getAdminUserData(); $adminId = $adminData['id']; $glossaryEntries = []; foreach ($this->course->resources['glossary'] as $glossary) { $glossaryEntries[] = [ 'id' => $glossary->glossary_id, 'userid' => $adminId, 'concept' => $glossary->name, 'definition' => $glossary->description, 'timecreated' => time(), 'timemodified' => time(), ]; } // Return the glossary data with all terms included return [ 'id' => $glossaryId, 'moduleid' => $glossaryId, 'modulename' => 'glossary', 'contextid' => $this->course->info['real_id'], 'name' => get_lang('Glossary'), 'description' => '', 'timecreated' => time(), 'timemodified' => time(), 'sectionid' => $sectionId, 'sectionnumber' => 0, 'userid' => $adminId, 'entries' => $glossaryEntries, 'users' => [$adminId], 'files' => [], ]; } /** * Create the XML file for the glossary with all terms combined. */ private function createGlossaryXml(array $glossaryData, string $glossaryDir): void { $xmlContent = ''.PHP_EOL; $xmlContent .= ''.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.htmlspecialchars($glossaryData['name']).''.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' dictionary'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 10'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 100'.PHP_EOL; $xmlContent .= ' '.$glossaryData['timecreated'].''.PHP_EOL; $xmlContent .= ' '.$glossaryData['timemodified'].''.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' '.PHP_EOL; // Add glossary terms (entries) foreach ($glossaryData['entries'] as $entry) { $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.$entry['userid'].''.PHP_EOL; $xmlContent .= ' '.htmlspecialchars($entry['concept']).''.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.$entry['timecreated'].''.PHP_EOL; $xmlContent .= ' '.$entry['timemodified'].''.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; } $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ''; $this->createXmlFile('glossary', $xmlContent, $glossaryDir); } }