Skip to content

Commit 2c9eb0b

Browse files
authored
Merge branch 'develop' into feature/CUR-4122-columlayout-upgrade
2 parents 6d0e5f1 + 0845735 commit 2c9eb0b

28 files changed

+110748
-44943
lines changed

.env.example

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,7 @@ MSTEAMS_TENANT_ID=
152152
MSTEAMS_OAUTH_URL=
153153
MSTEAMS_LANDING_URL=
154154
MSTEAMS_REDIRECT_URL=
155+
ASSIGNMENT_DUE_DATE_DAYS=
155156

157+
#true for only vivensity
158+
GCR_ENV_PERMISSION_VIV=true

app/Http/Controllers/Api/V1/MicroSoftTeamController.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Illuminate\Support\Facades\Http;
1616
use App\Http\Requests\V1\MSTeamCreateClassRequest;
1717
use App\Http\Requests\V1\MSTeamCreateAssignmentRequest;
18+
use App\Http\Requests\V1\MSSaveAccessTokenRequest;
1819
use App\Models\Playlist;
1920
use App\Models\Project;
2021
use App\Models\Activity;
@@ -107,6 +108,51 @@ public function getAccessToken(Request $request)
107108
}
108109

109110
}
111+
112+
/**
113+
* Save Access Token
114+
*
115+
* Save GraphAPI access token in the database.
116+
*
117+
* @bodyParam access_token string required The stringified of the GraphAPI access token JSON object
118+
*
119+
* @response {
120+
* "message": "Access token has been saved successfully."
121+
* }
122+
*
123+
* @response 500 {
124+
* "errors": [
125+
* "Validation error: Access token is required"
126+
* ]
127+
* }
128+
*
129+
* @response 500 {
130+
* "errors": [
131+
* "Failed to save the token."
132+
* ]
133+
* }
134+
*
135+
* @param MSSaveAccessTokenRequest $accessTokenRequest
136+
* @return Response
137+
*/
138+
public function saveAccessToken(MSSaveAccessTokenRequest $accessTokenRequest)
139+
{
140+
$data = $accessTokenRequest->validated();
141+
$authUser = auth()->user();
142+
$isUpdated = $this->userRepository->update([
143+
'msteam_access_token' => $data['access_token']
144+
], $authUser->id);
145+
146+
if ($isUpdated) {
147+
return response([
148+
'message' => 'Access token has been saved successfully.',
149+
], 200);
150+
}
151+
152+
return response([
153+
'errors' => ['Failed to save the token.'],
154+
], 500);
155+
}
110156

111157
/**
112158
* Get List of Classes

app/Http/Controllers/Api/V1/SuborganizationController.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use App\Http\Requests\V1\SuborganizationUpdate;
1313
use App\Http\Requests\V1\SuborganizationAddUser;
1414
use App\Http\Requests\V1\SuborganizationAddRole;
15+
use App\Http\Requests\V1\SuborganizationAddRoleUiPermissions;
1516
use App\Http\Requests\V1\SuborganizationUpdateUser;
1617
use App\Http\Requests\V1\SuborganizationInviteMember;
1718
use App\Http\Requests\V1\SuborganizationSearchRequest;
@@ -797,6 +798,53 @@ public function addRole(SuborganizationAddRole $request, Organization $suborgani
797798
], 500);
798799
}
799800

801+
/**
802+
* Add Suborganization Role With UI Permissions
803+
*
804+
* Add role for the specified suborganization with UI permissions
805+
*
806+
* @urlParam suborganization required The Id of a suborganization Example: 1
807+
* @bodyParam name string required Name of a suborganization role Example: member
808+
* @bodyParam display_name string required Display name of a suborganization role Example: Member
809+
* @bodyParam permissions array required Ids of the permissions to assign the role Example: [1, 2]
810+
*
811+
* @response {
812+
* "message": "Role has been added successfully."
813+
* }
814+
*
815+
* @response 500 {
816+
* "errors": [
817+
* "Failed to add role."
818+
* ]
819+
* }
820+
*
821+
* @param SuborganizationAddRoleUiPermissions $request
822+
* @param Organization $suborganization
823+
* @return Response
824+
*/
825+
public function addRoleUiPermissions(
826+
SuborganizationAddRoleUiPermissions $request,
827+
Organization $suborganization
828+
)
829+
{
830+
$this->authorize('addRole', $suborganization);
831+
832+
$data = $request->validated();
833+
834+
$role = $this->organizationRepository->addRoleUiPermissions($suborganization, $data);
835+
836+
if ($role) {
837+
return response([
838+
'message' => 'Role has been added successfully.',
839+
'data' => $role,
840+
], 200);
841+
}
842+
843+
return response([
844+
'errors' => ['Failed to add role.'],
845+
], 500);
846+
}
847+
800848
/**
801849
* Update Suborganization Role
802850
*
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace App\Http\Requests\V1;
4+
5+
use Illuminate\Foundation\Http\FormRequest;
6+
7+
class MSSaveAccessTokenRequest extends FormRequest
8+
{
9+
/**
10+
* Determine if the user is authorized to make this request.
11+
*
12+
* @return bool
13+
*/
14+
public function authorize()
15+
{
16+
return true;
17+
}
18+
19+
/**
20+
* Get the validation rules that apply to the request.
21+
*
22+
* @return array
23+
*/
24+
public function rules()
25+
{
26+
return [
27+
'access_token' => 'required'
28+
];
29+
}
30+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
namespace App\Http\Requests\V1;
4+
5+
use Illuminate\Foundation\Http\FormRequest;
6+
use Illuminate\Validation\Rule;
7+
8+
class SuborganizationAddRoleUiPermissions extends FormRequest
9+
{
10+
/**
11+
* Determine if the user is authorized to make this request.
12+
*
13+
* @return bool
14+
*/
15+
public function authorize()
16+
{
17+
return true;
18+
}
19+
20+
/**
21+
* Get the validation rules that apply to the request.
22+
*
23+
* @return array
24+
*/
25+
public function rules()
26+
{
27+
$suborganization = $this->route('suborganization');
28+
29+
return [
30+
'name' => [
31+
'required',
32+
'string',
33+
'max:255',
34+
Rule::unique('organization_role_types')->where(function ($query) use ($suborganization) {
35+
return $query->where('organization_id', $suborganization->id);
36+
})
37+
],
38+
'display_name' => [
39+
'required',
40+
'string',
41+
'max:255',
42+
Rule::unique('organization_role_types')->where(function ($query) use ($suborganization) {
43+
return $query->where('organization_id', $suborganization->id);
44+
})
45+
],
46+
'permissions' => 'required|array|exists:ui_module_permissions,id'
47+
];
48+
}
49+
}

app/Http/Resources/V1/SearchPostgreSqlResource.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace App\Http\Resources\V1;
44

55
use App\Http\Resources\V1\SearchUserResource;
6+
use App\Models\Project;
67
use Illuminate\Http\Request;
78
use Illuminate\Http\Resources\Json\JsonResource;
89

@@ -16,7 +17,7 @@ class SearchPostgreSqlResource extends JsonResource
1617
*/
1718
public function toArray($request)
1819
{
19-
return [
20+
$resource = [
2021
'id' => $this->entity_id,
2122
'project_id' => $this->project_id,
2223
'playlist_id' => $this->when(isset($this->playlist_id), $this->playlist_id),
@@ -40,5 +41,14 @@ public function toArray($request)
4041
"image" => $this->org_image
4142
]
4243
];
44+
45+
if ($this->entity == 'Activity') {
46+
$project = Project::find($this->project_id);
47+
$playlist = $project->playlists()->find($this->playlist_id);
48+
$resource['location'] = $project->name.' > '.$playlist->title;
49+
$resource['activity_type'] = explode(' ', explode('.', $this->h5plib)[1])[0];
50+
}
51+
52+
return $resource;
4353
}
4454
}

app/Http/Resources/V1/UiModulePermissionResource.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,23 @@ public function toArray($request)
1717
{
1818
$organizationRoleType = $this->organizationRoleTypes()->find($request->role);
1919

20+
// to set all permissions as "View" selected in case of to show all permissions
21+
if (isset($request->view) && $request->view === 'all') {
22+
if ($this->title === 'View') {
23+
$selected = true;
24+
} else {
25+
$selected = false;
26+
}
27+
}
28+
else {
29+
$selected = $organizationRoleType ? true : false;
30+
}
31+
// ended
32+
2033
return [
2134
'id' => $this->id,
2235
'title' => $this->title,
23-
'selected' => $organizationRoleType ? true : false
36+
'selected' => $selected
2437
];
2538
}
2639
}

app/Http/Resources/V1/UiModuleResource.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,28 @@ class UiModuleResource extends JsonResource
1515
*/
1616
public function toArray($request)
1717
{
18+
$subModules = UiSubModuleResource::collection($this->uiSubModules)->resolve();
19+
$count = count($subModules);
20+
$general = '';
21+
$viewCount = $editCount = $noneCount = 0;
22+
foreach ($subModules as $row) {
23+
if ($row['selected'] === 'View') {
24+
$viewCount++;
25+
}
26+
if ($row['selected'] === 'Edit' ) {
27+
$editCount++;
28+
}
29+
}
30+
31+
if ($viewCount === $count) {
32+
$general = 'View';
33+
} else if ($editCount === $count) {
34+
$general = 'Edit';
35+
}
36+
1837
return [
1938
'title' => $this->title,
39+
'general' => $general,
2040
'ui_sub_modules' => UiSubModuleResource::collection($this->uiSubModules)
2141
];
2242
}

app/Http/Resources/V1/UiSubModuleResource.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,17 @@ class UiSubModuleResource extends JsonResource
1515
*/
1616
public function toArray($request)
1717
{
18+
$data = UiModulePermissionResource::collection($this->uiModulePermissions)->resolve();
19+
$selected = '';
20+
foreach ($data as $row) {
21+
if ($row['selected'] === true) {
22+
$selected = $row['title'];
23+
}
24+
}
25+
1826
return [
1927
'title' => $this->title,
28+
'selected' => $selected,
2029
'ui_module_permissions' => UiModulePermissionResource::collection($this->uiModulePermissions)
2130
];
2231
}

app/Repositories/MicrosoftTeam/MicrosoftTeamRepository.php

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,11 @@ public function createMSTeamAssignment($token, $classId, $project)
158158
$activities = $playlist->activities;
159159
foreach($activities as $activity) {
160160

161+
$assignmentDueDays = config('ms-team-configs.assignment_due_days');
161162
// Logic is in progress
162163
$postInput = [
163-
'link' => config('constants.front-url') . '/activity/' . $activity->id . '/shared', // Need to discuss the link logic currently hardcoded
164164
'displayName' => $activity->title,
165-
'dueDateTime' => '2023-01-01T00:00:00Z', // Need to discuss the due date logic currently hardcoded
165+
'dueDateTime' => date('c', strtotime(date('Y-m-d'). ' + ' . $assignmentDueDays . ' days')), // Need to discuss the due date logic currently hardcoded
166166
];
167167

168168
$headers = [
@@ -171,17 +171,36 @@ public function createMSTeamAssignment($token, $classId, $project)
171171
'Authorization' => 'Bearer ' . $token
172172
];
173173

174-
$response = Http::withHeaders($headers)->withOptions(["verify"=>false])->post($apiURL, $postInput);
174+
$response = Http::withHeaders($headers)->withOptions(["verify"=>false])
175+
->retry(3, 6000)->post($apiURL, $postInput);
175176
$responseBody = json_decode($response->getBody(), true);
177+
176178
$statusCode = $response->status();
177179
if ($statusCode !== 201) {
180+
178181
$returnArr = [
179-
"code" => $statusCode,
180-
"message" => $responseBody['error']['message'] ,
182+
"code" => $resourceStatusCode,
183+
"message" => $resourceResponseBody['error']['message'],
181184
];
182185

183186
return json_encode($returnArr);
184187
}
188+
//Add link resource
189+
$assignmentId = $responseBody['id'];
190+
$resourceApiUrl = $this->landingUrl . 'education/classes/' . $classId . '/assignments/' . $assignmentId . '/resources';
191+
$postResourceInput = [
192+
"distributeForStudentWork" => false,
193+
"resource" => [
194+
"displayName" => $activity->title,
195+
"link" => config('constants.front-url') . '/activity/' . $activity->id . '/shared', // Need to discuss the link logic currently shared link
196+
"@odata.type" => "#microsoft.graph.educationLinkResource"
197+
]
198+
];
199+
200+
$responseResource = Http::withHeaders($headers)->withOptions(["verify"=>false])->post($resourceApiUrl, $postResourceInput);
201+
$resourceResponseBody = json_decode($responseResource->getBody(), true);
202+
$resourceStatusCode = $responseResource->status();
203+
185204
}
186205
}
187206
$returnArr = [

0 commit comments

Comments
 (0)