Skip to content

Commit be8a0c5

Browse files
committed
Merge branch '1.11.x' of github.com:chamilo/chamilo-lms into 1.11.x
2 parents 27f204f + a480dbd commit be8a0c5

File tree

3 files changed

+410
-1
lines changed

3 files changed

+410
-1
lines changed

main/inc/lib/webservices/Rest.php

Lines changed: 318 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,19 @@ class Rest extends WebService
6060
const SAVE_FORUM_THREAD = 'save_forum_thread';
6161
const SET_THREAD_NOTIFY = 'set_thread_notify';
6262

63+
const GET_WORK_LIST = 'get_work_list';
64+
const GET_WORK_STUDENTS_WITHOUT_PUBLICATIONS = 'get_work_students_without_publications';
65+
const GET_WORK_USERS = 'get_work_users';
66+
const GET_WORK_STUDENT_LIST = 'get_work_student_list';
6367
const PUT_WORK_STUDENT_ITEM_VISIBILITY = 'put_course_work_visibility';
68+
const DELETE_WORK_STUDENT_ITEM = 'delete_work_student_item';
69+
const DELETE_WORK_CORRECTIONS = 'delete_work_corrections';
70+
71+
const VIEW_DOCUMENT_IN_FRAME = 'view_document_in_frame';
72+
73+
const VIEW_QUIZ_TOOL = 'view_quiz_tool';
74+
75+
const VIEW_SURVEY_TOOL = 'view_survey_tool';
6476

6577
const CREATE_CAMPUS = 'add_campus';
6678
const EDIT_CAMPUS = 'edit_campus';
@@ -178,6 +190,8 @@ public static function decodeParams($encoded)
178190
*/
179191
public function setCourse($id)
180192
{
193+
global $_course;
194+
181195
if (!$id) {
182196
$this->course = null;
183197

@@ -198,9 +212,12 @@ public function setCourse($id)
198212

199213
$this->course = $course;
200214

215+
$courseInfo = api_get_course_info($course->getCode());
216+
$_course = $courseInfo;
217+
201218
ChamiloSession::write('_real_cid', $course->getId());
202219
ChamiloSession::write('_cid', $course->getCode());
203-
ChamiloSession::write('_course', api_get_course_info($course->getCode()));
220+
ChamiloSession::write('_course', $courseInfo);
204221
}
205222

206223
/**
@@ -2608,6 +2625,306 @@ public function putCourseWorkVisibility(int $workId, int $status): bool
26082625
}
26092626
}
26102627

2628+
public function deleteWorkStudentItem(int $workId): string
2629+
{
2630+
Event::event_access_tool(TOOL_STUDENTPUBLICATION);
2631+
2632+
require_once api_get_path(SYS_CODE_PATH).'work/work.lib.php';
2633+
2634+
$courseInfo = api_get_course_info_by_id($this->course->getId());
2635+
2636+
$fileDeleted = deleteWorkItem($workId, $courseInfo);
2637+
2638+
if ($fileDeleted) {
2639+
return get_lang('TheDocumentHasBeenDeleted');
2640+
}
2641+
2642+
return get_lang('YouAreNotAllowedToDeleteThisDocument');
2643+
}
2644+
2645+
public function deleteWorkCorrections(int $workId): string
2646+
{
2647+
Event::event_access_tool(TOOL_STUDENTPUBLICATION);
2648+
2649+
require_once api_get_path(SYS_CODE_PATH).'work/work.lib.php';
2650+
2651+
$courseInfo = api_get_course_info_by_id($this->course->getId());
2652+
2653+
$result = get_work_user_list(null, null, null, null, $workId);
2654+
2655+
if ($result) {
2656+
foreach ($result as $item) {
2657+
$workInfo = get_work_data_by_id($item['id']);
2658+
2659+
deleteCorrection($courseInfo, $workInfo);
2660+
}
2661+
}
2662+
2663+
return get_lang('Deleted');
2664+
}
2665+
2666+
public function getWorkList(int $workId): array
2667+
{
2668+
$isAllowedToEdit = api_is_allowed_to_edit();
2669+
2670+
Event::event_access_tool(TOOL_STUDENTPUBLICATION);
2671+
2672+
require_once api_get_path(SYS_CODE_PATH).'work/work.lib.php';
2673+
2674+
$userId = $this->user->getId();
2675+
$courseId = $this->course->getId();
2676+
$sessionId = $this->session ? $this->session->getId() : 0;
2677+
2678+
$courseInfo = api_get_course_info_by_id($courseId);
2679+
$webPath = api_get_path(WEB_PATH);
2680+
2681+
$whereCondition = !$isAllowedToEdit ? " AND u.id = $userId" : '';
2682+
2683+
$works = get_work_user_list(
2684+
0,
2685+
0,
2686+
'title',
2687+
'asc',
2688+
$workId,
2689+
$whereCondition,
2690+
null,
2691+
false,
2692+
$courseId,
2693+
$sessionId
2694+
);
2695+
2696+
return array_map(
2697+
function (array $work) use ($courseInfo, $webPath) {
2698+
$itemId = $work['id'];
2699+
$count = getWorkCommentCount($itemId, $courseInfo);
2700+
2701+
$work['feedback'] = $count.' '.Display::returnFontAwesomeIcon('comments-o');
2702+
$work['feedback_clean'] = $count;
2703+
2704+
$workInfo = get_work_data_by_id($itemId);
2705+
$commentsTmp = getWorkComments($workInfo);
2706+
$comments = [];
2707+
2708+
foreach ($commentsTmp as $comment) {
2709+
$comment['comment'] = str_replace('src="/', 'src="'.$webPath.'app/', $comment['comment']);
2710+
$comments[] = $comment;
2711+
}
2712+
2713+
$work['comments'] = $comments;
2714+
2715+
if (empty($workInfo['qualificator_id'])) {
2716+
$qualificator_id = Display::label(get_lang('NotRevised'), 'warning');
2717+
} else {
2718+
$qualificator_id = Display::label(get_lang('Revised'), 'success');
2719+
}
2720+
2721+
$work['qualificator_id'] = $qualificator_id;
2722+
2723+
return $work;
2724+
},
2725+
$works
2726+
);
2727+
}
2728+
2729+
public function getWorkStudentsWithoutPublications(int $workId): array
2730+
{
2731+
Event::event_access_tool(TOOL_STUDENTPUBLICATION);
2732+
2733+
require_once api_get_path(SYS_CODE_PATH).'work/work.lib.php';
2734+
2735+
return get_list_users_without_publication($workId);
2736+
}
2737+
2738+
public function getWorkUsers(int $workId): array
2739+
{
2740+
Event::event_access_tool(TOOL_STUDENTPUBLICATION);
2741+
2742+
require_once api_get_path(SYS_CODE_PATH).'work/work.lib.php';
2743+
2744+
$courseId = $this->course->getId();
2745+
$sessionId = $this->session ? $this->session->getId() : 0;
2746+
$courseInfo = api_get_course_info_by_id($courseId);
2747+
2748+
$items = getAllUserToWork($workId, $courseId);
2749+
$usersAdded = [];
2750+
$result = [
2751+
'users_added' => [],
2752+
'users_to_add' => [],
2753+
];
2754+
2755+
if (!empty($items)) {
2756+
foreach ($items as $data) {
2757+
$usersAdded[] = $data['user_id'];
2758+
2759+
$userInfo = api_get_user_info($data['user_id']);
2760+
2761+
$result['users_added'][] = [
2762+
'user_id' => (int) $data['user_id'],
2763+
'complete_name_with_username' => $userInfo['complete_name_with_username'],
2764+
];
2765+
}
2766+
}
2767+
2768+
if (empty($sessionId)) {
2769+
$status = STUDENT;
2770+
} else {
2771+
$status = 0;
2772+
}
2773+
2774+
$userList = CourseManager::get_user_list_from_course_code(
2775+
$courseInfo['code'],
2776+
$sessionId,
2777+
null,
2778+
null,
2779+
$status
2780+
);
2781+
2782+
$userToAddList = [];
2783+
foreach ($userList as $user) {
2784+
if (!in_array($user['user_id'], $usersAdded)) {
2785+
$userToAddList[] = $user;
2786+
}
2787+
}
2788+
2789+
if (!empty($userToAddList)) {
2790+
foreach ($userToAddList as $user) {
2791+
$userName = api_get_person_name($user['firstname'], $user['lastname']).' ('.$user['username'].') ';
2792+
2793+
$result['users_to_add'][] = [
2794+
'user_id' => (int) $user['user_id'],
2795+
'complete_name_with_username' => $userName,
2796+
];
2797+
}
2798+
}
2799+
2800+
return $result;
2801+
}
2802+
2803+
public function getWorkStudentList(int $workId): array
2804+
{
2805+
Event::event_access_tool(TOOL_STUDENTPUBLICATION);
2806+
2807+
require_once api_get_path(SYS_CODE_PATH).'work/work.lib.php';
2808+
2809+
$courseId = $this->course->getId();
2810+
$courseCode = $this->course->getCode();
2811+
$sessionId = $this->session ? $this->session->getId() : 0;
2812+
2813+
$myFolderData = get_work_data_by_id($workId);
2814+
2815+
$workParents = [];
2816+
2817+
if (empty($myFolderData)) {
2818+
$workParents = getWorkList($workId, $myFolderData);
2819+
}
2820+
2821+
$workIdList = [];
2822+
2823+
if (!empty($workParents)) {
2824+
foreach ($workParents as $work) {
2825+
$workIdList[] = $work->id;
2826+
}
2827+
}
2828+
2829+
$userList = getWorkUserList(
2830+
$courseCode,
2831+
$sessionId,
2832+
0,
2833+
0,
2834+
null,
2835+
null,
2836+
null
2837+
);
2838+
2839+
return array_map(
2840+
function ($userId) use ($courseId, $sessionId, $workParents, $workIdList) {
2841+
$user = api_get_user_info($userId);
2842+
2843+
$userWorks = 0;
2844+
2845+
if (!empty($workIdList)) {
2846+
$userWorks = getUniqueStudentAttempts(
2847+
$workIdList,
2848+
0,
2849+
$courseId,
2850+
$sessionId,
2851+
$user['user_id']
2852+
);
2853+
}
2854+
2855+
$works = $userWorks." / ".count($workParents);
2856+
2857+
return [
2858+
'id' => $userId,
2859+
'complete_name' => api_get_person_name($user['firstname'], $user['lastname']),
2860+
'works' => $works,
2861+
];
2862+
},
2863+
$userList
2864+
);
2865+
}
2866+
2867+
public function viewDocumentInFrame(int $documentId)
2868+
{
2869+
$courseCode = $this->course->getCode();
2870+
$sessionId = $this->session ? $this->session->getId() : 0;
2871+
2872+
$url = api_get_path(WEB_CODE_PATH).'document/showinframes.php?'
2873+
.http_build_query(
2874+
[
2875+
'cidReq' => $courseCode,
2876+
'id_session' => $sessionId,
2877+
'gidReq' => 0,
2878+
'gradebook' => 0,
2879+
'origin' => self::SERVICE_NAME,
2880+
'id' => $documentId,
2881+
]
2882+
);
2883+
2884+
header("Location: $url");
2885+
exit;
2886+
}
2887+
2888+
public function viewQuizTool()
2889+
{
2890+
$courseCode = $this->course->getCode();
2891+
$sessionId = $this->session ? $this->session->getId() : 0;
2892+
2893+
$url = api_get_path(WEB_CODE_PATH).'exercise/exercise.php?'
2894+
.http_build_query(
2895+
[
2896+
'cidReq' => $courseCode,
2897+
'id_session' => $sessionId,
2898+
'gidReq' => 0,
2899+
'gradebook' => 0,
2900+
'origin' => self::SERVICE_NAME,
2901+
]
2902+
);
2903+
2904+
header("Location: $url");
2905+
exit;
2906+
}
2907+
2908+
public function viewSurveyTool()
2909+
{
2910+
$courseCode = $this->course->getCode();
2911+
$sessionId = $this->session ? $this->session->getId() : 0;
2912+
2913+
$url = api_get_path(WEB_CODE_PATH).'survey/survey_list.php?'
2914+
.http_build_query(
2915+
[
2916+
'cidReq' => $courseCode,
2917+
'id_session' => $sessionId,
2918+
'gidReq' => 0,
2919+
'gradebook' => 0,
2920+
'origin' => self::SERVICE_NAME,
2921+
]
2922+
);
2923+
2924+
header("Location: $url");
2925+
exit;
2926+
}
2927+
26112928
public static function isAllowedByRequest(bool $inpersonate = false): bool
26122929
{
26132930
$username = $_GET['username'] ?? null;

main/inc/lib/webservices/WebService.class.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ protected function __construct($username, $apiKey)
3939
'uidReset' => true,
4040
];
4141
ChamiloSession::write('_user', $_user);
42+
ChamiloSession::write('is_allowed_in_course', true);
4243

4344
Login::init_user($this->user->getId(), true);
4445
}

0 commit comments

Comments
 (0)