Skip to content

Commit 368f40d

Browse files
committed
Merge branch 'develop'
2 parents 30c79f1 + 8553a80 commit 368f40d

File tree

11 files changed

+350
-45
lines changed

11 files changed

+350
-45
lines changed

app/Course.php

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
class Course extends Model
88
{
99
protected $fillable = [
10-
'name', 'category', 'public', 'description', 'picture'
10+
'name', 'category', 'public', 'description', 'picture', 'public', 'admin_id', 'theme', 'color'
1111
];
1212

1313
protected $hidden = [];
@@ -18,10 +18,15 @@ public function users()
1818
return $this->belongsToMany('App\User')->withPivot(['confirmed', 'member_since']);;
1919
}
2020

21-
22-
21+
// Esto está mal, hay que hacerlo tal y como esta hecho en subjects
2322
public function admins()
2423
{
25-
return $this->hasMany('App\Course', 'admin_id');
24+
return $this->hasMany('App\User', 'id', 'admin_id');
25+
}
26+
27+
// Forma correcta de hacer el hasMany
28+
public function subjects()
29+
{
30+
return $this->hasMany('App\Subject', 'course_id');
2631
}
2732
}

app/Http/Controllers/CourseController.php

Lines changed: 48 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -12,66 +12,81 @@
1212

1313
class CourseController extends Controller{
1414

15-
function index(Request $request, $list = 'all'){
15+
function index(Request $request){
16+
//Parameters: , $list = 'all', $id = null
1617
$courses = [];
1718

18-
// Si el parametro opcional es 'all', devuelve los cursos publicos y los del usuario
19+
/* if ($list == 'user' && $id != null) {
20+
$course = Course::find($id);
21+
$user_courses = User::find($request['current_user'])->courses;
22+
23+
// Si el usuario que pide este curso es el admin retorna el curso y un flag a true
24+
// Si el curso no es publico y el usuario no esta registrado en el curso solicitado retorna un mensaje de error
25+
// Si el curso es publico o el usuaio esta registrado en el curso solicitado y no es el admin retorna el curso
26+
if ($course->admin_id == $request['current_user']) {
27+
$course['admin'] = true;
28+
return $course;
29+
}else if ($course->public == 0 && !in_array($course, (array) $user_courses)) {
30+
return response()->json(["message" => 'This user is not registered in this course'], 400);
31+
}
1932
33+
return $course;
34+
} */
2035

2136
// Si el parametro opcional es 'user', devuelve solo los cursos del usuario
22-
if( $list == 'user' || $list == 'all' ){
23-
24-
$user = User::find($request['current_user']);
25-
$courses['user_courses'] = $user->courses;
37+
/* if( $list == 'user' || $list == 'all') {
2638
27-
}
39+
$user_courses = User::find($request['current_user'])->courses;
40+
$courses['user_courses'] = $user_courses;
41+
} */
2842

2943
// Si el parametro opcional es 'public', devuelve solo los cursos publicos
30-
if ( $list == 'public' || $list == 'all' ){
44+
/* if ( $list == 'public' || $list == 'all' ){
3145
3246
$publicCourses = Course::where('public', 1)->get();
3347
$courses['public_courses'] = $publicCourses;
48+
} */
3449

35-
}
50+
$user_courses = User::find($request['current_user'])->courses;
51+
$courses['user_courses'] = $user_courses;
52+
53+
$publicCourses = Course::where('public', 1)->get();
54+
$courses['public_courses'] = $publicCourses;
3655

3756
return $courses;
3857
}
3958

4059
function addCourse(Request $request){
4160
$this->validate($request, [
42-
'name' => 'required|max:255',
43-
'category' => 'required'
61+
'name' => 'required|max:255'
4462
]);
4563

46-
// Sets a default image if no one provided
47-
if( !array_key_exists('picture', $request) ){
48-
$request['picture'] = 'https://placeholdit.co//i/500x200?&bg=ecf0f1&fc=e74c3c&text=Goodle%20Course';
49-
}
64+
$input = $request->except('current_user');
65+
$input['admin_id'] = $request['current_user'];
5066

51-
// Sets a default description if no one provided
52-
if( !array_key_exists('description', $request ) ){
53-
$request['description'] = 'This course has no description';
54-
}
67+
//dd($input);
5568

56-
$course = Course::create([
57-
'name' => $request['name'],
58-
'admin_id' => $request['current_user'],
59-
'category' => $request['category'],
60-
'picture' => $request['picture'],
61-
'description' => $request['description']
62-
]);
69+
70+
$course = Course::create($input);
71+
//TODO: eloquent
72+
DB::select('insert into course_user (user_id, course_id, confirmed) values ('. $request['current_user'] .', ' . $course->id . ', 1);');
73+
// UserCourse::create([
74+
// 'user_id' => $request['current_user'],
75+
// 'course_id' => $course->id,
76+
// 'confirmed' => 1
77+
// ]);
6378

6479
return response()->json($course, 201);
6580

6681
}
67-
82+
6883
function updateCourse(Request $request){
6984
$this->validate($request, [
7085
'id' => 'required'
7186
]);
7287

7388

74-
$course = Course::find($request['id']);
89+
$course = Course::find($request['id']);
7590

7691
// Si el usuario no es el admin del curso le devuelve unauthorized.
7792
if ( $course['admin_id'] != $request['current_user'] ) {
@@ -95,16 +110,16 @@ function deleteCourse(Request $request, $id) {
95110
if( $param == 0 ){
96111
return response()->json(["Message" => 'A valid course_id must be provided'], 401);
97112
}
98-
113+
99114
$course = Course::findOrFail($param);
100115

101116
//Si el usuario no es el admin devuelve unauthorized
102117
if ( $course['admin_id'] != $request['current_user'] ) {
103118
return response()->json(["Message" => 'You need to be the admin of this course to delete it'], 401);
104119
}
105-
120+
106121
$course->delete();
107-
122+
108123
return response()->json(["Message" => 'The course has been deleted'], 200);
109124

110125
} catch (ModelNotFoundException $e) { // Si el curso solicitado no existe devuelve una excepcion
@@ -123,7 +138,7 @@ function inviteUsers(Request $request, $username, $courseId){
123138
if( $courseId == 0 ){
124139
return response()->json(["Message" => 'A valid course_id must be provided'], 401);
125140
}
126-
141+
127142
// Guardamos el curso solicitado en la request
128143
$course = Course::findOrFail($courseId);
129144

@@ -185,7 +200,7 @@ function acceptInvite( Request $request, $course_id ){
185200
return response()->json(["Message" => 'Course not found or does not exist'], 404);
186201
}
187202

188-
203+
return response()->json(["Message" => 'Something went wrong'], 500);
189204

190205
}
191206

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Course;
6+
use App\User;
7+
use App\UserCourse;
8+
use App\Subject;
9+
10+
use Illuminate\Support\Facades\DB;
11+
use Illuminate\Http\Request;
12+
use Illuminate\Support\Facades\Hash;
13+
use Illuminate\Database\Eloquent\ModelNotFoundException;
14+
15+
class SubjectController extends Controller{
16+
17+
function index(Request $request, $course_id){
18+
19+
try{
20+
$course_id = intval($course_id);
21+
$course = Course::findOrFail($course_id);
22+
23+
// Buscamos en el curso al usuario que realiza la peticion
24+
$user = $course->users->where('id', $request['current_user'])->first();
25+
26+
// Comprueba que el usuario que realiza la peticion pertenece al curso o que el curso sea publico
27+
if ($course->public == 0 && (!$user || $user['pivot']['confirmed'] == 0)) {
28+
return response()->json(["message" => 'Unauthorized'], 401);
29+
}
30+
31+
$subjects = $course->subjects;
32+
33+
return $subjects;
34+
35+
} catch( ModelNotFoundException $e ) {
36+
return response()->json(["Message" => 'Course not found or does not exist'], 404);
37+
}
38+
39+
return response()->json(["Message" => 'Something went wrong'], 500);
40+
}
41+
42+
function addSubject(Request $request, $course_id){
43+
44+
try{
45+
$course_id = intval($course_id);
46+
$course = Course::findOrFail($course_id);
47+
48+
// Buscamos en el curso al usuario que realiza la peticion
49+
$user = $course->users->where('id', $request['current_user'])->first();
50+
51+
// Comprueba que el usuario que realiza la peticion pertenece al curso o que el curso sea publico
52+
if ($course->public == 0 && (!$user || $user['pivot']['confirmed'] == 0)) {
53+
return response()->json(["message" => 'Unauthorized'], 401);
54+
}
55+
56+
// Comprobamos que el usuario que realiza la peticion es el admin del curso
57+
if( $course->admin_id !== $request['current_user'] ) {
58+
return response()->json(["message" => 'Unauthorized, you must be the admin of this course'], 401);
59+
}
60+
61+
// Validamos
62+
$this->validate($request, [
63+
'title' => 'required|max:255',
64+
'order' => 'required'
65+
]);
66+
67+
// Guardamos en una variable todo el cuerpo de la peticion del usuario.
68+
$input = $request->except('current_user');
69+
70+
// Creamos el recurso en la base de datos
71+
$subject = $course->subjects()->create($input);
72+
73+
return $subject;
74+
75+
} catch( ModelNotFoundException $e ) {
76+
return response()->json(["Message" => 'Course not found or does not exist'], 404);
77+
}
78+
79+
return response()->json(["Message" => 'Something went wrong'], 500);
80+
}
81+
82+
function updateSubject(Request $request, $course_id, $subject_id){
83+
84+
try{
85+
$course_id = intval($course_id);
86+
$subject_id = intval($subject_id);
87+
88+
$course = Course::findOrFail($course_id);
89+
90+
// Buscamos en el curso al usuario que realiza la peticion
91+
$user = $course->users->where('id', $request['current_user'])->first();
92+
93+
// Comprueba que el usuario que realiza la peticion pertenece al curso o que el curso sea publico
94+
if ($course->public == 0 && (!$user || $user['pivot']['confirmed'] == 0)) {
95+
return response()->json(["message" => 'Unauthorized'], 401);
96+
}
97+
98+
// Comprobamos que el usuario que realiza la peticion es el admin del curso
99+
if( $course->admin_id !== $request['current_user'] ) {
100+
return response()->json(["message" => 'Unauthorized, you must be the admin of this course'], 401);
101+
}
102+
103+
// Buscamos en el curso el tema solicitado
104+
$subject = $course->subjects->find($subject_id);
105+
106+
// Si el tema no existe en el curso devuelve un 404
107+
if ( !$subject ){
108+
return response()->json(["message" => 'The provided subject does not exists in the provided course'], 404);
109+
}
110+
111+
// Guardamos en una variable todo el cuerpo de la peticion del usuario.
112+
$input = $request->except('current_user');
113+
114+
// Actualizamos el recurso en la base de datos
115+
$subject->update($input);
116+
117+
return 'Updated';
118+
119+
} catch( ModelNotFoundException $e ) {
120+
return response()->json(["Message" => 'Course not found or does not exist'], 404);
121+
}
122+
123+
return response()->json(["Message" => 'Something went wrong'], 500);
124+
}
125+
126+
function deleteSubject(Request $request, $course_id, $subject_id){
127+
128+
try{
129+
$course_id = intval($course_id);
130+
$subject_id = intval($subject_id);
131+
132+
$course = Course::findOrFail($course_id);
133+
134+
// Buscamos en el curso al usuario que realiza la peticion
135+
$user = $course->users->where('id', $request['current_user'])->first();
136+
137+
// Comprueba que el usuario que realiza la peticion pertenece al curso o que el curso sea publico
138+
if ($course->public == 0 && (!$user || $user['pivot']['confirmed'] == 0)) {
139+
return response()->json(["message" => 'Unauthorized'], 401);
140+
}
141+
142+
// Comprobamos que el usuario que realiza la peticion es el admin del curso
143+
if( $course->admin_id !== $request['current_user'] ) {
144+
return response()->json(["message" => 'Unauthorized, you must be the admin of this course'], 401);
145+
}
146+
147+
// Buscamos en el curso el tema solicitado
148+
$subject = $course->subjects->find($subject_id);
149+
150+
// Si el tema no existe en el curso devuelve un 404
151+
if ( !$subject ){
152+
return response()->json(["message" => 'The provided subject does not exists in the provided course'], 404);
153+
}
154+
155+
// Guardamos en una variable todo el cuerpo de la peticion del usuario.
156+
$input = $request->except('current_user');
157+
158+
// Actualizamos el recurso en la base de datos
159+
$subject->delete();
160+
161+
return 'Deleted';
162+
163+
} catch( ModelNotFoundException $e ) {
164+
return response()->json(["Message" => 'Course not found or does not exist'], 404);
165+
}
166+
167+
return response()->json(["Message" => 'Something went wrong'], 500);
168+
}
169+
170+
}

app/Http/Controllers/UserController.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@
66
use Illuminate\Support\Facades\DB;
77
use Illuminate\Http\Request;
88
use Illuminate\Support\Facades\Hash;
9+
use Illuminate\Support\Facades\Auth;
910

1011
class UserController extends Controller{
1112

13+
function userInfo(Request $request){
14+
return response()->json(Auth::user());
15+
}
16+
1217
function register(Request $request){
1318

1419
$user = User::create([

app/Subject.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace App;
4+
5+
use Illuminate\Database\Eloquent\Model;
6+
7+
class Subject extends Model
8+
{
9+
protected $fillable = [
10+
'title', 'description', 'order'
11+
];
12+
13+
protected $hidden = [];
14+
}

database/migrations/2018_04_13_202548_create_courses_table.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ public function up()
1818
$table->timestamp('created_at')->useCurrent();
1919
$table->timestamp('updated_at')->useCurrent();
2020
$table->string('name');
21-
$table->string('description');
22-
$table->string('category');
23-
$table->string('picture');
21+
$table->string('description')->default('No description provided');
22+
$table->string('category')->default('Others');
23+
$table->string('picture')->default('https://placeholdit.co//i/200x200?&bg=ecf0f1&fc=e74c3c&text=Goodle%20Course');
24+
$table->string('theme')->default('city');
25+
$table->string('color')->default('rgba(55,74,93,.58)');
2426
$table->boolean('public')->default(0);
2527
$table->unsignedInteger('admin_id');
2628
$table->foreign('admin_id')->references('id')->on('users')->onDelete('cascade');

0 commit comments

Comments
 (0)