/** * Creates a new task (directory) in the assignment tool * @param array $params * @param int $user_id * @param array $courseInfo * @param int $group_id * @param int $session_id * @return bool|int * @note $params can have the following elements, but should at least have the 2 first ones: ( * 'new_dir' => 'some-name', * 'description' => 'some-desc', * 'qualification' => 20 (e.g. 20), * 'weight' => 50 (percentage) to add to gradebook (e.g. 50), * 'allow_text_assignment' => 0/1/2, * @todo Rename createAssignment or createWork, or something like that */ function addDir($params, $user_id, $courseInfo, $group_id, $session_id) { $work_table = Database :: get_course_table(TABLE_STUDENT_PUBLICATION); $user_id = intval($user_id); $group_id = intval($group_id); $session_id = intval($session_id); $base_work_dir = api_get_path(SYS_COURSE_PATH).$courseInfo['path'].'/work'; $course_id = $courseInfo['real_id']; $directory = replace_dangerous_char($params['new_dir']); $directory = disable_dangerous_file($directory); $created_dir = create_unexisting_work_directory($base_work_dir, $directory); if (!empty($created_dir)) { $dirName = '/'.$created_dir; $today = api_get_utc_datetime(); $sql = "INSERT INTO " . $work_table . " SET c_id = $course_id, url = '".Database::escape_string($dirName)."', title = '".Database::escape_string($params['new_dir'])."', description = '".Database::escape_string($params['description'])."', author = '', active = '1', accepted = '1', filetype = 'folder', post_group_id = '".$group_id."', sent_date = '".$today."', qualification = '".(($params['qualification'] != '') ? Database::escape_string($params['qualification']) : '') ."', parent_id = '', qualificator_id = '', date_of_qualification = '0000-00-00 00:00:00', weight = '".Database::escape_string($params['weight'])."', session_id = '".$session_id."', allow_text_assignment = '".Database::escape_string($params['allow_text_assignment'])."', contains_file = 0, user_id = '".$user_id."'"; Database::query($sql); // Add the directory $id = Database::insert_id(); if ($id) { // Folder created api_item_property_update( $courseInfo, 'work', $id, 'DirectoryCreated', $user_id, $group_id ); updatePublicationAssignment($id, $params, $courseInfo, $group_id); if (api_get_course_setting('email_alert_students_on_new_homework') == 1) { send_email_on_homework_creation(api_get_course_id()); } return $id; } } return false; }
if ($form->validate()) { $params = $form->exportValues(); $workId = $params['work_id']; $editCheck = false; $workData = get_work_data_by_id($workId); if (!empty($workData)) { $editCheck = true; } else { $editCheck = true; } if ($editCheck) { updateWork($workId, $params, $courseInfo, $sessionId); updatePublicationAssignment($workId, $params, $courseInfo, $groupId); updateDirName($workData, $params['new_dir']); $currentUrl = api_get_path(WEB_CODE_PATH).'work/edit_work.php?id='.$workId.'&'.api_get_cidreq(); Session::write('message', Display::return_message(get_lang('FolderEdited'), 'success')); header('Location: '.$currentUrl); exit; } else { Session::write('message', Display::return_message(get_lang('FileExists'), 'warning')); } } Display::display_header(); $message = Session::read('message');
/** * Restore Works * @param int $sessionId */ public function restore_works($sessionId = 0) { require_once api_get_path(SYS_CODE_PATH) . 'work/work.lib.php'; if ($this->course->has_resources(RESOURCE_WORK)) { $table_work_assignment = Database::get_course_table(TABLE_STUDENT_PUBLICATION_ASSIGNMENT); $resources = $this->course->resources; foreach ($resources[RESOURCE_WORK] as $obj) { // check resources inside html from ckeditor tool and copy correct urls into recipient course $obj->params['description'] = DocumentManager::replace_urls_inside_content_html_from_copy_course($obj->params['description'], $this->course->code, $this->course->destination_path, $this->course->backup_path, $this->course->info['path']); $id_work = $obj->params['id']; $obj->params['id'] = null; $obj->params['c_id'] = $this->destination_course_info['real_id']; // re-create dir // @todo check security against injection of dir in crafted course backup here! $path = $obj->params['url']; $path = '/' . str_replace('/', '', substr($path, 1)); $workData = array(); switch ($this->file_option) { case FILE_SKIP: $workData = get_work_data_by_path($path, $this->destination_course_info['real_id']); if (!empty($workData)) { continue; } case FILE_OVERWRITE: // Creating folder. $workData = get_work_data_by_path($path, $this->destination_course_info['real_id']); case FILE_RENAME: $obj->params['new_dir'] = $obj->params['title']; if (!empty($this->course_origin_id)) { $sql = 'SELECT * FROM ' . $table_work_assignment . ' WHERE c_id = ' . $this->course_origin_id . ' AND publication_id = ' . $id_work; $result = Database::query($sql); $cant = Database::num_rows($result); if ($cant > 0) { $row = Database::fetch_assoc($result); } //$obj->params['qualification'] = empty($row['enable_qualification']) ? true : false; $obj->params['enableExpiryDate'] = $row['expires_on'] == '0000-00-00 00:00:00' ? false : true; $obj->params['enableEndDate'] = $row['ends_on'] == '0000-00-00 00:00:00' ? false : true; $obj->params['expires_on'] = $row['expires_on']; $obj->params['ends_on'] = $row['ends_on']; $obj->params['enable_qualification'] = $row['enable_qualification']; $obj->params['add_to_calendar'] = !empty($row['add_to_calendar']) ? 1 : 0; if (empty($workData)) { addDir($obj->params, api_get_user_id(), $this->destination_course_info, 0, $sessionId); } else { $workId = $workData['id']; updateWork($workId, $obj->params, $this->destination_course_info, $sessionId); updatePublicationAssignment($workId, $obj->params, $this->destination_course_info, 0); } } break; } } } }
/** * Creates a new task (directory) in the assignment tool * @param array $params * @param int $user_id * @param array $courseInfo * @param int $group_id * @param int $session_id * @return bool|int * @note $params can have the following elements, but should at least have the 2 first ones: ( * 'new_dir' => 'some-name', * 'description' => 'some-desc', * 'qualification' => 20 (e.g. 20), * 'weight' => 50 (percentage) to add to gradebook (e.g. 50), * 'allow_text_assignment' => 0/1/2, * @todo Rename createAssignment or createWork, or something like that */ function addDir($formValues, $user_id, $courseInfo, $group_id, $session_id) { $work_table = Database::get_course_table(TABLE_STUDENT_PUBLICATION); $user_id = intval($user_id); $group_id = intval($group_id); $session_id = intval($session_id); $base_work_dir = api_get_path(SYS_COURSE_PATH) . $courseInfo['path'] . '/work'; $course_id = $courseInfo['real_id']; $directory = api_replace_dangerous_char($formValues['new_dir']); $directory = disable_dangerous_file($directory); $created_dir = create_unexisting_work_directory($base_work_dir, $directory); if (!empty($created_dir)) { $dirName = '/' . $created_dir; $today = api_get_utc_datetime(); $params = ['c_id' => $course_id, 'url' => $dirName, 'title' => $formValues['new_dir'], 'description' => $formValues['description'], 'author' => '', 'active' => '1', 'accepted' => '1', 'filetype' => 'folder', 'post_group_id' => $group_id, 'sent_date' => $today, 'qualification' => $formValues['qualification'] != '' ? $formValues['qualification'] : '', 'parent_id' => '', 'qualificator_id' => '', 'weight' => $formValues['weight'], 'session_id' => $session_id, 'allow_text_assignment' => $formValues['allow_text_assignment'], 'contains_file' => 0, 'user_id' => $user_id]; $id = Database::insert($work_table, $params); if ($id) { $sql = "UPDATE {$work_table} SET id = iid WHERE iid = {$id}"; Database::query($sql); // Folder created api_item_property_update($courseInfo, 'work', $id, 'DirectoryCreated', $user_id, $group_id); updatePublicationAssignment($id, $formValues, $courseInfo, $group_id); if (api_get_course_setting('email_alert_students_on_new_homework') == 1) { send_email_on_homework_creation($course_id, $session_id, $id); } return $id; } } return false; }