prepareActivityDirectory($exportDir, 'assign', $moduleId); // Retrieve assign data $assignData = $this->getData($activityId, $sectionId); // Generate XML files for the assign $this->createAssignXml($assignData, $assignDir); $this->createModuleXml($assignData, $assignDir); $this->createGradesXml($assignData, $assignDir); $this->createGradingXml($assignData, $assignDir); $this->createInforefXml($assignData, $assignDir); $this->createGradeHistoryXml($assignData, $assignDir); $this->createRolesXml($assignData, $assignDir); $this->createCommentsXml($assignData, $assignDir); $this->createCalendarXml($assignData, $assignDir); $this->createFiltersXml($assignData, $assignDir); } /** * Get all the data related to the assign activity. */ public function getData(int $assignId, int $sectionId): ?array { $work = $this->course->resources[RESOURCE_WORK][$assignId]; $workFiles = getAllDocumentToWork($assignId, $this->course->info['real_id']); $files = []; if (!empty($workFiles)) { foreach ($workFiles as $file) { $docData = DocumentManager::get_document_data_by_id($file['document_id'], $this->course->info['code']); if (!empty($docData)) { $files[] = [ 'id' => $file['document_id'], 'contenthash' => hash('sha1', basename($docData['path'])), ]; } } } $adminData = MoodleExport::getAdminUserData(); $adminId = $adminData['id']; return [ 'id' => (int) $work->params['id'], 'moduleid' => (int) $work->params['id'], 'modulename' => 'assign', 'contextid' => $this->course->info['real_id'], 'sectionid' => $sectionId, 'sectionnumber' => 0, 'name' => htmlspecialchars($work->params['title']), 'intro' => $work->params['description'], 'duedate' => strtotime($work->params['sent_date']), 'gradingduedate' => strtotime($work->params['sent_date']) + 86400 * 7, 'allowsubmissionsfromdate' => strtotime($work->params['sent_date']), 'timemodified' => time(), 'grade_item_id' => 0, 'files' => $files, 'users' => [$adminId], 'area_id' => 0, ]; } /** * Create the grades.xml file for the assign activity. */ protected function createGradesXml(array $data, string $directory): void { $xmlContent = ''.PHP_EOL; $xmlContent .= ''.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' '.htmlspecialchars($data['name']).''.PHP_EOL; $xmlContent .= ' mod'.PHP_EOL; $xmlContent .= ' '.$data['modulename'].''.PHP_EOL; $xmlContent .= ' '.$data['id'].''.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' $@NULL@$'.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' $@NULL@$'.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 100.00000'.PHP_EOL; $xmlContent .= ' 0.00000'.PHP_EOL; $xmlContent .= ' $@NULL@$'.PHP_EOL; $xmlContent .= ' $@NULL@$'.PHP_EOL; $xmlContent .= ' 0.00000'.PHP_EOL; $xmlContent .= ' 1.00000'.PHP_EOL; $xmlContent .= ' 0.00000'.PHP_EOL; $xmlContent .= ' 0.00000'.PHP_EOL; $xmlContent .= ' 0.23810'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 5'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' $@NULL@$'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' '.$data['timemodified'].''.PHP_EOL; $xmlContent .= ' '.$data['timemodified'].''.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ''; $this->createXmlFile('grades', $xmlContent, $directory); } /** * Create the XML file for the assign activity. */ private function createAssignXml(array $assignData, string $assignDir): void { $xmlContent = ''.PHP_EOL; $xmlContent .= ''.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.htmlspecialchars($assignData['name']).''.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' '.$assignData['duedate'].''.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' '.$assignData['gradingduedate'].''.PHP_EOL; $xmlContent .= ' '.$assignData['allowsubmissionsfromdate'].''.PHP_EOL; $xmlContent .= ' 100'.PHP_EOL; $xmlContent .= ' '.$assignData['timemodified'].''.PHP_EOL; $xmlContent .= ' 1'.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 .= ' 0'.PHP_EOL; $xmlContent .= ' none'.PHP_EOL; $xmlContent .= ' 1'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' 0'.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ''; $this->createXmlFile('assign', $xmlContent, $assignDir); } /** * Create the grading.xml file for the assign activity. */ private function createGradingXml(array $data, string $assignDir): void { $xmlContent = ''.PHP_EOL; $xmlContent .= ''.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' submissions'.PHP_EOL; $xmlContent .= ' $@NULL@$'.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ' '.PHP_EOL; $xmlContent .= ''; $this->createXmlFile('grading', $xmlContent, $assignDir); } }