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);
}
}