Browse Source

Squashed commit of the following:

commit f75627ee58
Author: Gabriel A. Santiago Plaza <gabriel.santiago21@upr.edu>
Date:   Fri Jun 25 17:13:57 2021 -0400

    Antes de volver al merge

commit 025103dc98
Author: Gabriel A. Santiago Plaza <gabriel.santiago21@upr.edu>
Date:   Tue Jun 22 15:58:10 2021 -0400

    sE ACAbo ese juego

commit 996d4d8f12
Merge: 6592b0a 02d188a
Author: Gabriel A. Santiago Plaza <gabriel.santiago21@upr.edu>
Date:   Tue Jun 22 14:51:04 2021 -0400

    Merge branch 'Merge_gabriel_mayo' into ANTES-DE-MEZCLAR

commit 6592b0a485
Author: Gabriel A. Santiago Plaza <gabriel.santiago21@upr.edu>
Date:   Tue Jun 22 11:12:34 2021 -0400

    ANtes de terminar assessment

commit 25016ca2d3
Author: Gabriel A. Santiago Plaza <gabriel.santiago21@upr.edu>
Date:   Sun Jun 20 13:41:34 2021 -0400

    Cambioos a rubrics, y poco de assessment
parent
commit
2c2cc2494e

+ 1
- 0
.gitignore View File

12
 app/config/database.php
12
 app/config/database.php
13
 node_modules/
13
 node_modules/
14
 app/config/
14
 app/config/
15
+app/controllers/AuthController.php

+ 75
- 9
app/controllers/ActivitiesController.php View File

169
         Log::info($activity);
169
         Log::info($activity);
170
         $criterion_rubric = DB::table('criteria')
170
         $criterion_rubric = DB::table('criteria')
171
             ->join("criterion_rubric", "criterion_rubric.criterion_id", "=", "criteria.id")
171
             ->join("criterion_rubric", "criterion_rubric.criterion_id", "=", "criteria.id")
172
-            ->where('criterion_rubric.rubric_id', '=', $rubric->id)->get();
172
+            ->join("activity_criterion", "criteria.id", '=', 'activity_criterion.criterion_id')
173
+            ->where("activity_criterion.activity_id", '=', $activity->id)
174
+            ->where('criterion_rubric.rubric_id', '=', $rubric->id)
175
+            ->select('criteria.name', 'criteria.id as criterion_id', 'criteria.subcriteria')
176
+            ->addSelect('activity_criterion.activity_id', 'activity_criterion.weight', 'activity_criterion.id as activity_criterion_id')
177
+            ->addSelect('criterion_rubric.rubric_id', 'criterion_rubric.id as rubric_criterion_id')
178
+            ->addSelect('criterion_rubric.copyright', 'criterion_rubric.notes')
179
+            ->get();
180
+        Log::info($criterion_rubric);
181
+        foreach ($criterion_rubric as $index => $singleCR) {
182
+            $singleCR->scales = json_encode(DB::table('scales')->join('rubric_criteria_scale', 'rubric_criteria_scale.scale_id', '=', 'scales.id')
183
+                ->where('rubric_criteria_scale.rubric_criterion_id', '=', $singleCR->rubric_criterion_id)
184
+                ->orderBy('position')
185
+                ->lists('description'));
186
+        }
187
+        $criterion_rubric_ids = DB::table('criterion_rubric')->where('rubric_id', '=', $rubric->id)->lists('id');
173
         Log::info($rubric);
188
         Log::info($rubric);
174
         Log::info($criterion_rubric);
189
         Log::info($criterion_rubric);
175
 
190
 
176
-        $rubric_contents = json_decode($rubric->contents);
177
 
191
 
178
-        // Get results
179
-        $assessments = DB::table('assessments')->join('students', 'assessments.student_id', '=', 'students.id')->where('activity_id', '=', $activity->id)->orderBy('assessments.id', 'asc')->get();
180
 
192
 
193
+
194
+
195
+        // Get results
196
+        $activity_criterion_ids = DB::table('activity_criterion')->where("activity_id", '=', $activity->id)->lists('id');
197
+        Log::info($activity_criterion_ids);
198
+        $assessments = DB::table('assessments')->join('students', 'assessments.student_id', '=', 'students.id')->whereIn('activity_criterion_id', $activity_criterion_ids)->orderBy('assessments.id', 'asc')->get();
199
+        Log::info($assessments);
181
         // Decode the scores (blade workaround)
200
         // Decode the scores (blade workaround)
182
         $scores_array = array();
201
         $scores_array = array();
202
+
183
         foreach ($assessments as $index => $assessment) {
203
         foreach ($assessments as $index => $assessment) {
184
-            $scores_array[$assessment->id] = json_decode($assessment->scores, true);
204
+            $scores_array[$assessment->student_id][$index] = $assessment->score;
205
+            $scores_array[$assessment->student_id]['comments'] = DB::table('activity_student')->where('student_id', '=', $assessment->student_id)
206
+                ->where("activity_id", '=', $activity->id)
207
+                ->select('comments')->first()->comments;
185
         }
208
         }
186
 
209
 
187
-        return View::make('local.professors.assessment', compact('activity', 'title', 'students', 'course', 'rubric_contents', 'assessments', 'scores_array', 'rubric'));
210
+        Log::info($scores_array);
211
+
212
+
213
+        return View::make('local.professors.assessment', compact('activity', 'title', 'students', 'course', 'criterion_rubric', 'assessments', 'scores_array', 'rubric'));
188
     }
214
     }
189
 
215
 
190
     public function saveAssessment()
216
     public function saveAssessment()
193
             $exception = DB::transaction(function () {
219
             $exception = DB::transaction(function () {
194
                 DB::transaction(function () {
220
                 DB::transaction(function () {
195
                     // Student assessment data
221
                     // Student assessment data
196
-                    $student_data = json_decode(Input::get('student_scores'));
197
 
222
 
223
+                    $activity_id = Input::get('activity_id');
224
+                    $student_data = json_decode(Input::get('student_info'));
225
+                    $weights = json_decode(Input::get('weights'));
226
+                    Log::info(json_encode($weights));
227
+                    Log::info(json_encode($student_data));
228
+
229
+                    foreach ($student_data as $index => $student_dict) {
230
+                        $student_id = $student_dict->studentId;
231
+                        foreach ($student_dict->activity_crit_id as $act_crit_id => $score) {
232
+                            if (DB::table('assessments')->where('student_id', '=', $student_id)
233
+                                ->where('activity_criterion_id', '=', $act_crit_id)
234
+                                ->first()
235
+                            ) {
236
+                                DB::table('assessments')->where('student_id', '=', $student_id)
237
+                                    ->where('activity_criterion_id', '=', $act_crit_id)
238
+                                    ->update(array('score' => $score));
239
+                            } else {
240
+                                DB::insert("insert into assessments (`activity_criterion_id`, `student_id`, `score`) values ({$act_crit_id}, {$student_id}, {$score})");
241
+                            }
242
+                        }
243
+                        if (DB::table('activity_student')
244
+                            ->where('student_id', '=', $student_id)->where('activity_id', '=', $activity_id)
245
+                            ->first()
246
+                        ) {
247
+                            DB::table('activity_student')
248
+                                ->where('student_id', '=', $student_id)->where('activity_id', '=', $activity_id)
249
+                                ->update(array('comments' => $student_dict->comments));
250
+                        } else {
251
+                            DB::insert("insert into activity_student (`activity_id`, `student_id`, `comments`) values ({$activity_id}, {$student_id}, '{$student_dict->comments}')");
252
+                        }
253
+                    }
254
+                    $activity_draft = Input::get('draft');
255
+
256
+                    foreach ($weights as $act_crit => $weigh) {
257
+                        DB::update("update activity_criterion set weight = {$weigh} where id = {$act_crit}");
258
+                    }
259
+                    DB::update("update activities set draft = {$activity_draft} where id = {$activity_id}");
198
                     // Outcome count
260
                     // Outcome count
261
+                    Session::flash('status', 'success');
262
+                    Session::flash('message', 'Assessment Saved. To add transforming actions click "Transforming Actions".');
263
+                    return action('ActivitiesController@show', array(Input::get('activity_id')));
264
+
199
                     $outcomeCount = Outcome::all()->count();
265
                     $outcomeCount = Outcome::all()->count();
200
 
266
 
201
 
267
 
215
                             }
281
                             }
216
 
282
 
217
                             // Add the assessment to the pivot table
283
                             // Add the assessment to the pivot table
284
+
218
                             $student->assessed_activities()->attach($activity->id, array(
285
                             $student->assessed_activities()->attach($activity->id, array(
219
                                 'scores' => json_encode($single_student_data->scores),
286
                                 'scores' => json_encode($single_student_data->scores),
220
-                                'percentage' => $single_student_data->percentage,
221
                                 'comments' => $single_student_data->comments
287
                                 'comments' => $single_student_data->comments
222
                             ));
288
                             ));
223
                         }
289
                         }
676
         $rubric_contents = Rubric::select('contents')->where('id', '=', $activity->rubric_id)->get();
742
         $rubric_contents = Rubric::select('contents')->where('id', '=', $activity->rubric_id)->get();
677
         $rubric_contents = json_decode($rubric_contents['0']->contents);
743
         $rubric_contents = json_decode($rubric_contents['0']->contents);
678
 
744
 
679
-        $rubric = Rubric::find($activity->rubric_id);
745
+        $rubric = Rubric::find($activity->rubric[0]->id);
680
 
746
 
681
         // Get results
747
         // Get results
682
         $assessments = DB::table('assessments')->where('activity_id', '=', $activity->id)->orderBy('id', 'asc')->get();
748
         $assessments = DB::table('assessments')->where('activity_id', '=', $activity->id)->orderBy('id', 'asc')->get();

+ 5
- 1
app/controllers/CriteriaController.php View File

54
     {
54
     {
55
         $json_to_send = array();
55
         $json_to_send = array();
56
         $json_to_send['criterion'] = DB::table('criteria')->where('id', '=', Input::get('id'))->first();
56
         $json_to_send['criterion'] = DB::table('criteria')->where('id', '=', Input::get('id'))->first();
57
+        $num_scales = Input::get('numberOfScale');
58
+        $criterionID = Input::get('id');
59
+        $json_to_send['scales'] = DB::select("select * from scales, template_criterion_scale where template_criterion_scale.template_criterion_id in (select id from template_criterion where template_criterion.template_id in (SELECT id FROM templates where num_scales = {$num_scales}) and template_criterion.criterion_id = {$criterionID}) and scales.id = template_criterion_scale.scale_id GROUP BY position order by position");
60
+        Log::info("select * from scales, template_criterion_scale where template_criterion_scale.template_criterion_id in (select id from template_criterion where template_criterion.template_id in (SELECT id FROM templates where num_scales = {$num_scales}) and template_criterion.criterion_id = {$criterionID}) and scales.id = template_criterion_scale.scale_id GROUP BY position order by position");
57
 
61
 
58
 
62
 
59
 
63
 
63
     public function fetchCriterion()
67
     public function fetchCriterion()
64
     {
68
     {
65
         $json_to_send = array();
69
         $json_to_send = array();
66
-        $json_to_send['criterion'] = DB::table('criteria')->where('id', '=', Input::get('id'))->first();
67
 
70
 
71
+        $json_to_send['criterion'] = DB::table('criteria')->where('id', '=', Input::get('id'))->first();
68
 
72
 
69
 
73
 
70
 
74
 

+ 193
- 82
app/controllers/RubricsController.php View File

33
         $outcomes = Outcome::orderBy('name', 'ASC')->get();
33
         $outcomes = Outcome::orderBy('name', 'ASC')->get();
34
         $criteria = Criterion::orderBy('name', 'ASC')->get();
34
         $criteria = Criterion::orderBy('name', 'ASC')->get();
35
         $rubric = $activity->rubric;
35
         $rubric = $activity->rubric;
36
+        Log::info($rubric);
37
+        Log::info($activity->rubric_id);
38
+        Log::info($activity->rubric[0]->id);
36
 
39
 
37
         return View::make('local.professors.rubrics', compact('title', 'templates', 'outcomes', 'criteria', 'rubrics', 'activity', 'rubric'));
40
         return View::make('local.professors.rubrics', compact('title', 'templates', 'outcomes', 'criteria', 'rubrics', 'activity', 'rubric'));
38
     }
41
     }
91
         $rubric->user_id = Auth::id();
94
         $rubric->user_id = Auth::id();
92
         $rubric->num_scales = count($scales[0]);
95
         $rubric->num_scales = count($scales[0]);
93
         $rubric->max_score = Input::get('max_score');
96
         $rubric->max_score = Input::get('max_score');
94
-        $division = $rubric->max_score / count($scales[0]);
97
+        $defaultWeight = round(100 / $rubric->num_scales, 2);
98
+
95
         if ($rubric->save()) {
99
         if ($rubric->save()) {
96
 
100
 
97
             // Process activity
101
             // Process activity
105
             $rubricId = $rubric->id;
109
             $rubricId = $rubric->id;
106
             foreach ($criteria as $index => $criterion_id) {
110
             foreach ($criteria as $index => $criterion_id) {
107
                 DB::insert("insert into criterion_rubric (`rubric_id`,`criterion_id`) values ({$rubricId},{$criterion_id})");
111
                 DB::insert("insert into criterion_rubric (`rubric_id`,`criterion_id`) values ({$rubricId},{$criterion_id})");
112
+                DB::commit();
108
                 $rubric_criterion_id = DB::table('criterion_rubric')->where('rubric_id', '=', $rubricId)
113
                 $rubric_criterion_id = DB::table('criterion_rubric')->where('rubric_id', '=', $rubricId)
109
                     ->where('criterion_id', '=', $criterion_id)->first();
114
                     ->where('criterion_id', '=', $criterion_id)->first();
110
 
115
 
116
+
117
+
111
                 for ($i = 0; $i < count($scales[$index]); $i++) {
118
                 for ($i = 0; $i < count($scales[$index]); $i++) {
112
-                    $scale = new Scale;
113
-                    $scale->description = $scales[$index][$i];
114
-                    $scale->min_score = 1 + ($division * $i);
115
-                    $scale->max_score = ($division * ($i + 1));
116
-                    if ($scale->save()) {
119
+                    $scale =  Scale::where('description', '=', $scales[$index][$i])->first();
120
+                    Log::info($scale);
121
+                    if ($scale) {
117
                         DB::insert("insert into `rubric_criteria_scale` (`rubric_criterion_id`, `scale_id`, `position`) values ({$rubric_criterion_id->id},{$scale->id}, {$i})");
122
                         DB::insert("insert into `rubric_criteria_scale` (`rubric_criterion_id`, `scale_id`, `position`) values ({$rubric_criterion_id->id},{$scale->id}, {$i})");
123
+                        DB::commit();
118
                     } else {
124
                     } else {
119
-                        Session::flash('status', 'danger');
120
-                        Session::flash('message', 'Rubric could not be created.');
125
+                        $scale = new Scale;
126
+                        $scale->description = $scales[$index][$i];
127
+
128
+                        if ($scale->save()) {
129
+                            DB::insert("insert into `rubric_criteria_scale` (`rubric_criterion_id`, `scale_id`, `position`) values ({$rubric_criterion_id->id},{$scale->id}, {$i})");
130
+                            DB::commit();
131
+                        } else {
132
+                            Session::flash('status', 'danger');
133
+                            Session::flash('message', 'Rubric could not be created.');
134
+                        }
121
                     }
135
                     }
122
                 }
136
                 }
137
+
138
+                $activity_id = Input::get("activity_id");
139
+                DB::insert("insert into `activity_criterion` (`activity_id`,`criterion_id`, `weight`) values ({$activity_id}, {$criterion_id}, {$defaultWeight})");
140
+                DB::commit();
123
             }
141
             }
124
             Session::flash('status', 'success');
142
             Session::flash('status', 'success');
125
             Session::flash('message', 'Rubric assigned.');
143
             Session::flash('message', 'Rubric assigned.');
150
      */
168
      */
151
     public function update()
169
     public function update()
152
     {
170
     {
171
+        Log::info('entré???');
153
         $rubric = Rubric::find(Input::get('id'));
172
         $rubric = Rubric::find(Input::get('id'));
173
+
174
+        $scales = Input::get('scales');
175
+        $criteria = Input::get('criteria');
176
+
177
+        // Process rubric
154
         $rubric->name = Input::get('name');
178
         $rubric->name = Input::get('name');
155
 
179
 
156
         $rubric->expected_percentage = Input::get('expected_percentage');
180
         $rubric->expected_percentage = Input::get('expected_percentage');
157
         $rubric->expected_points = Input::get('expected_points');
181
         $rubric->expected_points = Input::get('expected_points');
158
 
182
 
183
+        $rubric->num_scales = count($scales[0]);
184
+        $rubric->max_score = Input::get('max_score');
185
+        $defaultWeight = round(100 / $rubric->num_scales, 2);
186
+
187
+
159
         DB::beginTransaction();
188
         DB::beginTransaction();
160
 
189
 
161
-        try {
162
-            // Get associated activity
163
-            $activity = Activity::where('rubric_id', '=', $rubric->id)->first();
164
 
190
 
165
-            // If the associated activity has been assessed, delete the records
191
+        // Get associated activity
192
+        //$activity = Activity::where('rubric_id', '=', $rubric->id)->first();
193
+
194
+        $activity_id = DB::table('activities')
195
+            ->join('rubric_activity', 'rubric_activity.activity_id', '=', 'activities.id')
196
+            ->where('rubric_id', '=', $rubric->id)
197
+            ->first();
198
+
199
+        $activity = Activity::where('id', '=', $activity_id->activity_id)->first();
200
+
201
+
202
+
203
+        // If the associated activity has been assessed, delete the records
204
+        if ($activity->outcomes_attempted != NULL) {
205
+            DB::table('assessments')->where('activity_id', '=', $activity->id)->delete();
206
+            $activity->criteria_achieved_percentage = NULL;
207
+            $activity->criteria_achieved = NULL;
208
+            $activity->outcomes_achieved = NULL;
209
+            $activity->outcomes_attempted = NULL;
210
+        }
211
+        Log::info('entré3???');
212
+
213
+        $rubric->save();
214
+        Log::info("????");
215
+        $activity->save();
216
+        Log::info("????22");
217
+        // Get all the course's activities
218
+        Log::info($activity->course);
219
+        $course = Course::find($activity->course->id);
220
+        $activities = $course->activities;
221
+
222
+        // Check if any assessed activities remain
223
+        $remainingAssessed = false;
224
+        foreach ($course->activities as $activity) {
166
             if ($activity->outcomes_attempted != NULL) {
225
             if ($activity->outcomes_attempted != NULL) {
167
-                DB::table('assessments')->where('activity_id', '=', $activity->id)->delete();
168
-                $activity->criteria_achieved_percentage = NULL;
169
-                $activity->criteria_achieved = NULL;
170
-                $activity->outcomes_achieved = NULL;
171
-                $activity->outcomes_attempted = NULL;
226
+                $remainingAssessed = true;
227
+                break;
172
             }
228
             }
229
+        }
230
+        Log::info('entré4???');
173
 
231
 
174
-            $rubric->save();
175
-            $activity->save();
176
-
177
-            // Get all the course's activities
178
-            $course = Course::find($activity->course->id);
179
-            $activities = $course->activities;
232
+        //If there are still evaluated activities in the course, recalculate course outcomes
233
+        if (!$activities->isEmpty() && $remainingAssessed) {
234
+            // Variables to hold recalculated outcomes for the course
235
+            $course_outcomes_attempted = array_fill(1, Outcome::all()->count(), 0);
236
+            $course_outcomes_achieved = array_fill(1, Outcome::all()->count(), 0);
180
 
237
 
181
-            // Check if any assessed activities remain
182
-            $remainingAssessed = false;
183
-            foreach ($course->activities as $activity) {
238
+            // For each activity
239
+            foreach ($activities as $activity) {
240
+                // If activity has been assessed
184
                 if ($activity->outcomes_attempted != NULL) {
241
                 if ($activity->outcomes_attempted != NULL) {
185
-                    $remainingAssessed = true;
186
-                    break;
242
+                    // Get the achieved criteria
243
+                    $criteria_achievement = json_decode($activity->criteria_achieved, true);
244
+                    foreach ($criteria_achievement as $criterion_id => $criterion_achieved) {
245
+                        // Find corresponding learning outcome;
246
+                        $criterion = Criterion::find($criterion_id);
247
+                        $outcome = Outcome::find($criterion->outcome_id);
248
+
249
+                        // If criterion is achieved (1), add 1 to both arrays
250
+                        if ($criterion_achieved === 1) {
251
+                            $course_outcomes_attempted[$outcome->id] += 1;
252
+                            $course_outcomes_achieved[$outcome->id] += 1;
253
+                        }
254
+                        // Else, only add to the attempted outcomes arrays
255
+                        elseif ($criterion_achieved === 0) {
256
+                            $course_outcomes_attempted[$outcome->id] += 1;
257
+                        }
258
+                    }
187
                 }
259
                 }
188
             }
260
             }
261
+            Log::info('entré5???');
262
+            // Update course
263
+            $course->outcomes_achieved = json_encode($course_outcomes_achieved);
264
+            $course->outcomes_attempted = json_encode($course_outcomes_attempted);
265
+        } else {
266
+            // Update course
267
+            $course->outcomes_achieved = NULL;
268
+            $course->outcomes_attempted = NULL;
269
+        }
189
 
270
 
190
-            //If there are still evaluated activities in the course, recalculate course outcomes
191
-            if (!$activities->isEmpty() && $remainingAssessed) {
192
-                // Variables to hold recalculated outcomes for the course
193
-                $course_outcomes_attempted = array_fill(1, Outcome::all()->count(), 0);
194
-                $course_outcomes_achieved = array_fill(1, Outcome::all()->count(), 0);
195
-
196
-                // For each activity
197
-                foreach ($activities as $activity) {
198
-                    // If activity has been assessed
199
-                    if ($activity->outcomes_attempted != NULL) {
200
-                        // Get the achieved criteria
201
-                        $criteria_achievement = json_decode($activity->criteria_achieved, true);
202
-                        foreach ($criteria_achievement as $criterion_id => $criterion_achieved) {
203
-                            // Find corresponding learning outcome;
204
-                            $criterion = Criterion::find($criterion_id);
205
-                            $outcome = Outcome::find($criterion->outcome_id);
206
-
207
-                            // If criterion is achieved (1), add 1 to both arrays
208
-                            if ($criterion_achieved === 1) {
209
-                                $course_outcomes_attempted[$outcome->id] += 1;
210
-                                $course_outcomes_achieved[$outcome->id] += 1;
211
-                            }
212
-                            // Else, only add to the attempted outcomes arrays
213
-                            elseif ($criterion_achieved === 0) {
214
-                                $course_outcomes_attempted[$outcome->id] += 1;
215
-                            }
271
+        $course->save();
272
+        Log::info('entré6???');
273
+        DB::delete("delete from criterion_rubric where rubric_id ={$rubric->id}");
274
+        DB::delete("delete from activity_criterion where activity_id = {$activity->id}");
275
+        foreach ($criteria as $index => $criterion_id) {
276
+            if (
277
+
278
+                DB::insert("insert into criterion_rubric (`rubric_id`, `criterion_id`) values ({$rubric->id}, {$criterion_id}) ")
279
+                &&  DB::insert("insert into `activity_criterion` (`activity_id`,`criterion_id`, `weight`) values ({$activity->id}, {$criterion_id}, {$defaultWeight})")
280
+            ) {
281
+
282
+                $rubric_criterion_id =  DB::table('criterion_rubric')
283
+                    ->where('rubric_id', '=', $rubric->id)
284
+                    ->where('criterion_id', '=', $criterion_id)
285
+                    ->first();
286
+
287
+                foreach ($scales[$index] as $in => $scale) {
288
+                    Log::info("AH2");
289
+                    $new_scale =  Scale::where('description', '=', $scale)->first();
290
+
291
+                    if ($new_scale) {
292
+                        DB::insert("insert into `rubric_criteria_scale` (`rubric_criterion_id`, `scale_id`, `position`) values ({$rubric_criterion_id->id},{$new_scale->id}, {$in})");
293
+                        DB::commit();
294
+                    } else {
295
+                        $new_scale = new Scale;
296
+                        $new_scale->description = $scales[$index][$in];
297
+                        if ($new_scale->save()) {
298
+                            DB::insert("insert into `rubric_criteria_scale` (`rubric_criterion_id`, `scale_id`, `position`) values ({$rubric_criterion_id->id},{$new_scale->id}, {$in})");
299
+                            DB::commit();
300
+                        } else {
301
+                            DB::rollBack();
302
+                            Session::flash('status', 'danger');
303
+                            Session::flash('message', 'Rubric could not be created.');
304
+                            return action('ActivitiesController@show', array($activity->id));
216
                         }
305
                         }
217
                     }
306
                     }
218
                 }
307
                 }
219
-
220
-                // Update course
221
-                $course->outcomes_achieved = json_encode($course_outcomes_achieved);
222
-                $course->outcomes_attempted = json_encode($course_outcomes_attempted);
223
             } else {
308
             } else {
224
-                // Update course
225
-                $course->outcomes_achieved = NULL;
226
-                $course->outcomes_attempted = NULL;
309
+                DB::rollBack();
310
+                Session::flash('status', 'danger');
311
+                Session::flash('message', 'Rubric could not be created.');
312
+                return action('ActivitiesController@show', array($activity->id));
227
             }
313
             }
314
+        }
315
+        Log::info('entré7???');
228
 
316
 
229
-            $course->save();
230
-            DB::commit();
317
+        DB::commit();
231
 
318
 
232
-            Session::flash('status', 'success');
233
-            Session::flash('message', 'Rubric updated.');
234
 
319
 
235
-            return action('ActivitiesController@show', array($activity->id));
236
-        } catch (Exception $e) {
237
-            DB::rollBack();
238
-            Session::flash('status', 'danger');
239
-            Session::flash('message', 'Error: The rubric could not be updated. Try again later.');
240
-        }
320
+        Session::flash('status', 'success');
321
+        Session::flash('message', 'Rubric updated.');
322
+
323
+        return action('ActivitiesController@show', array($activity->id));
241
     }
324
     }
242
 
325
 
243
     /**
326
     /**
277
         Log::info($activity->rubric[0]->id);
360
         Log::info($activity->rubric[0]->id);
278
 
361
 
279
         $rubric = Rubric::where('id', '=', $activity->rubric[0]->id)->firstOrFail();
362
         $rubric = Rubric::where('id', '=', $activity->rubric[0]->id)->firstOrFail();
363
+        $criterion_rubric = DB::table('criteria')
364
+            ->join('criterion_rubric', 'criterion_rubric.criterion_id', '=', 'criteria.id')
365
+            ->where('criterion_rubric.rubric_id', '=', $activity->rubric[0]->id)
366
+            ->get();
367
+        Log::info($criterion_rubric);
368
+
369
+        foreach ($criterion_rubric as $single_cr) {
370
+            $single_cr->scales = json_encode(DB::table('scales')
371
+                ->join('rubric_criteria_scale', 'rubric_criteria_scale.scale_id', '=', 'scales.id')
372
+                ->where('rubric_criteria_scale.rubric_criterion_id', '=', $single_cr->id)
373
+                ->orderBy('position')
374
+                ->lists('description'));
375
+            $single_cr->outcomes = json_encode(DB::table('outcomes')
376
+                ->join('criterion_objective_outcome', 'outcomes.id', '=', 'criterion_objective_outcome.outcome_id')
377
+                ->where('criterion_objective_outcome.criterion_id', '=', $single_cr->criterion_id)->lists('name'));
378
+        }
379
+
380
+
381
+        Log::info($criterion_rubric);
382
+
280
         $title = $activity->name . ': ' . $rubric->name;
383
         $title = $activity->name . ': ' . $rubric->name;
281
-        return View::make('local.professors.viewrubric', compact('rubric', 'activity', 'title', 'course'));
384
+        return View::make('local.professors.viewrubric', compact('rubric', 'activity', 'criterion_rubric', 'title', 'course'));
282
     }
385
     }
283
 
386
 
284
     /**
387
     /**
330
 
433
 
331
     public function fetchRubricCriterion()
434
     public function fetchRubricCriterion()
332
     {
435
     {
333
-        $rubric = Rubric::findOrFail(Input::get('rubric_id'));
334
-        $criterion_id = Input::get('criterion_id');
335
-
336
-        $rubric_contents = json_decode($rubric->contents);
337
-
338
-        foreach ($rubric_contents as $key => $criterion) {
339
-            if ($criterion->id == $criterion_id) {
340
-                return json_encode($criterion);
341
-            }
342
-        }
436
+        $rubric = DB::table("rubric_criteria_scale")
437
+            ->join('scales', 'scales.id', '=', 'rubric_criteria_scale.scale_id')
438
+            ->where("rubric_criterion_id", '=', Input::get('rubric_criterion_id'))->get();
439
+        Log::info($rubric);
440
+
441
+        $rubric["criteria"] = DB::table("criteria")
442
+            ->join("criterion_rubric", 'criterion_rubric.criterion_id', '=', 'criteria.id')
443
+            ->where("criterion_rubric.id", '=', Input::get('rubric_criterion_id'))
444
+            ->select('name', 'criterion_rubric.notes')
445
+            ->first();
446
+        return json_encode($rubric);
447
+
448
+        //$rubric_contents = json_decode($rubric->contents);
449
+
450
+        //foreach ($rubric_contents as $key => $criterion) {
451
+        //    if ($criterion->id == $criterion_id) {
452
+        //        return json_encode($criterion);
453
+        //    }
343
     }
454
     }
344
 }
455
 }

+ 34
- 16
app/controllers/TemplatesController.php View File

145
 
145
 
146
 		$template->num_scales = count($scales[0]);
146
 		$template->num_scales = count($scales[0]);
147
 		$template->max_score = $max_score;
147
 		$template->max_score = $max_score;
148
-		$division = $max_score / count($scales[0]);
148
+
149
 		if ($template->save()) {
149
 		if ($template->save()) {
150
 			$templateId = $template->id;
150
 			$templateId = $template->id;
151
 			foreach ($criteria as $index => $criterion_id) {
151
 			foreach ($criteria as $index => $criterion_id) {
154
 					->where('criterion_id', '=', $criterion_id)->first();
154
 					->where('criterion_id', '=', $criterion_id)->first();
155
 
155
 
156
 				for ($i = 0; $i < count($scales[$index]); $i++) {
156
 				for ($i = 0; $i < count($scales[$index]); $i++) {
157
-					$scale = new Scale;
158
-					$scale->description = $scales[$index][$i];
159
-					$scale->min_score = 1 + ($division * $i);
160
-					$scale->max_score = ($division * ($i + 1));
161
-					if ($scale->save()) {
157
+					$scale =  Scale::where('description', '=', $scales[$index][$i])->first();
158
+					Log::info($scale);
159
+					if ($scale) {
162
 						DB::insert("insert into `template_criterion_scale` (`template_criterion_id`, `scale_id`, `position`) values ({$template_criterion_id->id},{$scale->id}, {$i})");
160
 						DB::insert("insert into `template_criterion_scale` (`template_criterion_id`, `scale_id`, `position`) values ({$template_criterion_id->id},{$scale->id}, {$i})");
161
+						DB::commit();
163
 					} else {
162
 					} else {
164
-						Session::flash('status', 'danger');
165
-						Session::flash('message', 'Rubric could not be created.');
163
+						$scale = new Scale;
164
+						$scale->description = $scales[$index][$i];
165
+
166
+						if ($scale->save()) {
167
+							DB::insert("insert into `template_criterion_scale` (`template_criterion_id`, `scale_id`, `position`) values ({$template_criterion_id->id},{$scale->id}, {$i})");
168
+							DB::commit();
169
+						} else {
170
+							Session::flash('status', 'danger');
171
+							Session::flash('message', 'Rubric could not be created.');
172
+						}
166
 					}
173
 					}
167
 				}
174
 				}
168
 			}
175
 			}
251
 		Log::info(Input::all());
258
 		Log::info(Input::all());
252
 		$template->num_scales = count($scales[0]);
259
 		$template->num_scales = count($scales[0]);
253
 		$template->max_score = $max_score;
260
 		$template->max_score = $max_score;
254
-		$division = $max_score / count($scales[0]);
261
+		//$division = $max_score / count($scales[0]);
255
 
262
 
256
 		if ($template->save()) {
263
 		if ($template->save()) {
257
 			$templateId = $template->id;
264
 			$templateId = $template->id;
263
 					->where('criterion_id', '=', $criterion_id)->first();
270
 					->where('criterion_id', '=', $criterion_id)->first();
264
 				DB::delete("delete from template_criterion_scale where template_criterion_id ={$template_criterion_id->id}");
271
 				DB::delete("delete from template_criterion_scale where template_criterion_id ={$template_criterion_id->id}");
265
 				for ($i = 0; $i < count($scales[$index]); $i++) {
272
 				for ($i = 0; $i < count($scales[$index]); $i++) {
266
-					$scale = new Scale;
267
-					$scale->description = $scales[$index][$i];
268
-					$scale->min_score = 1 + ($division * $i);
269
-					$scale->max_score = ($division * ($i + 1));
270
-					if ($scale->save()) {
273
+					$scale =  Scale::where('description', '=', $scales[$index][$i])
274
+						//->where('max_score', '=', ($division * ($i + 1)))
275
+						//->where("min_score", '=', (1 + ($division * $i)))
276
+						->first();
277
+					Log::info($scale);
278
+					if ($scale) {
271
 						DB::insert("insert into `template_criterion_scale` (`template_criterion_id`, `scale_id`, `position`) values ({$template_criterion_id->id},{$scale->id}, {$i})");
279
 						DB::insert("insert into `template_criterion_scale` (`template_criterion_id`, `scale_id`, `position`) values ({$template_criterion_id->id},{$scale->id}, {$i})");
280
+						DB::commit();
272
 					} else {
281
 					} else {
273
-						Session::flash('status', 'danger');
274
-						Session::flash('message', 'Rubric could not be created.');
282
+						$scale = new Scale;
283
+						$scale->description = $scales[$index][$i];
284
+						//$scale->min_score = 1 + ($division * $i);
285
+						//$scale->max_score = ($division * ($i + 1));
286
+						if ($scale->save()) {
287
+							DB::insert("insert into `template_criterion_scale` (`template_criterion_id`, `scale_id`, `position`) values ({$template_criterion_id->id},{$scale->id}, {$i})");
288
+							DB::commit();
289
+						} else {
290
+							Session::flash('status', 'danger');
291
+							Session::flash('message', 'Rubric could not be created.');
292
+						}
275
 					}
293
 					}
276
 				}
294
 				}
277
 			}
295
 			}

+ 34
- 0
app/database/migrations/2021_06_22_150017_delete_min_max_scales.php View File

1
+<?php
2
+
3
+use Illuminate\Database\Schema\Blueprint;
4
+use Illuminate\Database\Migrations\Migration;
5
+use Illuminate\Support\Facades\Blade;
6
+
7
+class DeleteMinMaxScales extends Migration
8
+{
9
+
10
+	/**
11
+	 * Run the migrations.
12
+	 *
13
+	 * @return void
14
+	 */
15
+	public function up()
16
+	{
17
+		Schema::table('scales', function (Blueprint $table) {
18
+			$table->dropColumn(array('min_score', 'max_score'));
19
+		});
20
+	}
21
+
22
+	/**
23
+	 * Reverse the migrations.
24
+	 *
25
+	 * @return void
26
+	 */
27
+	public function down()
28
+	{
29
+		Schema::table('scales', function (Blueprint $table) {
30
+			$table->integer('min_score')->unsigned();
31
+			$table->integer('max_score')->unsigned();
32
+		});
33
+	}
34
+}

+ 41
- 0
app/database/migrations/2021_06_22_150108_add_copyright_notes_rubric_criterion.php View File

1
+<?php
2
+
3
+use Illuminate\Database\Schema\Blueprint;
4
+use Illuminate\Database\Migrations\Migration;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+class AddCopyrightNotesRubricCriterion extends Migration
8
+{
9
+
10
+	/**
11
+	 * Run the migrations.
12
+	 *
13
+	 * @return void
14
+	 */
15
+	public function up()
16
+	{
17
+		Schema::table('criterion_rubric', function (Blueprint $table) {
18
+			$table->text('copyright')->nullable();
19
+			$table->text('notes')->nullable();
20
+		});
21
+		Schema::table('template_criterion', function (Blueprint $table) {
22
+			$table->text('copyright')->nullable();
23
+			$table->text('notes')->nullable();
24
+		});
25
+	}
26
+
27
+	/**
28
+	 * Reverse the migrations.
29
+	 *
30
+	 * @return void
31
+	 */
32
+	public function down()
33
+	{
34
+		Schema::table('criterion_rubric', function (Blueprint $table) {
35
+			$table->dropColumn(array('copyright', 'notes'));
36
+		});
37
+		Schema::table('template_criterion', function (Blueprint $table) {
38
+			$table->dropColumn(array('copyright', 'notes'));
39
+		});
40
+	}
41
+}

+ 34
- 0
app/database/migrations/2021_06_22_150135_change_weight_float.php View File

1
+<?php
2
+
3
+use Illuminate\Database\Schema\Blueprint;
4
+use Illuminate\Database\Migrations\Migration;
5
+
6
+class ChangeWeightFloat extends Migration
7
+{
8
+
9
+	/**
10
+	 * Run the migrations.
11
+	 *
12
+	 * @return void
13
+	 */
14
+	public function up()
15
+	{
16
+		Schema::table('activity_criterion', function (Blueprint $table) {
17
+
18
+			DB::statement("ALTER TABLE `activity_criterion` MODIFY COLUMN `weight` decimal(6,2)");
19
+		});
20
+	}
21
+
22
+	/**
23
+	 * Reverse the migrations.
24
+	 *
25
+	 * @return void
26
+	 */
27
+	public function down()
28
+	{
29
+		Schema::table('activity_criterion', function (Blueprint $table) {
30
+
31
+			DB::statement("ALTER TABLE `activity_criterion` MODIFY COLUMN `weight` decimal(3,2)");
32
+		});
33
+	}
34
+}

+ 0
- 3
app/models/Scale.php View File

4
 
4
 
5
 class Scale extends Eloquent
5
 class Scale extends Eloquent
6
 {
6
 {
7
-    use SoftDeletingTrait;
8
-    protected $dates = ['deleted_at'];
9
-
10
     protected $table = 'scales';
7
     protected $table = 'scales';
11
 
8
 
12
     public function outcomes()
9
     public function outcomes()

+ 2
- 1
app/models/Student.php View File

16
 
16
 
17
   public function assessed_activities()
17
   public function assessed_activities()
18
   {
18
   {
19
-  	return $this->belongsToMany('Activity', 'assessments')->withPivot('scores', 'percentage')->withTimestamps();
19
+    //return $this->belongsToMany('Activity', 'assessments')->withPivot('scores', 'percentage')->withTimestamps();
20
+    return $this->belongsToMany('Activity', 'assessments')->withPivot('scores')->withTimestamps();
20
   }
21
   }
21
 }
22
 }

+ 11
- 2
app/views/local/managers/shared/rubrics.blade.php View File

371
 
371
 
372
     // Check for duplicates
372
     // Check for duplicates
373
     var duplicates=false;
373
     var duplicates=false;
374
+    numberOfScale = $('#number_of_scales').find(':selected').val();
374
     $('tbody tr').each(function()
375
     $('tbody tr').each(function()
375
     {
376
     {
376
         if ($(this).data('criterion-id') == id)
377
         if ($(this).data('criterion-id') == id)
398
     $.post
399
     $.post
399
     (
400
     (
400
         "{{ URL::route('fetchCriterionWithTemplate') }}",
401
         "{{ URL::route('fetchCriterionWithTemplate') }}",
401
-        { id: id},
402
+        { id: id,
403
+        numberOfScale: numberOfScale },
402
         function(data)
404
         function(data)
403
         {
405
         {
404
             // Append the fetched data
406
             // Append the fetched data
425
                 str+='<span>'+data.criterion.name+'</span><sup></sup>'+subcriteria+'</td>';
427
                 str+='<span>'+data.criterion.name+'</span><sup></sup>'+subcriteria+'</td>';
426
             }
428
             }
427
             numberOfScale = $('#number_of_scales').find(':selected').val();
429
             numberOfScale = $('#number_of_scales').find(':selected').val();
430
+            if(data.scales.length)
428
             for(i=0; i<numberOfScale; i++){
431
             for(i=0; i<numberOfScale; i++){
429
-                str+='<td class="editable" data-type="textarea"></td>';
432
+                str+='<td class="editable" data-type="textarea">'+data.scales[i].description+'</td>';
433
+                
430
           
434
           
431
             }
435
             }
436
+            else{
437
+                for(i=0; i<numberOfScale; i++){
438
+                str+='<td class="editable" data-type="textarea"></td>';
439
+            }
440
+        }
432
 
441
 
433
             str +='<th><span class="glyphicon glyphicon-remove icon-btn" aria-hidden="true"></span></th></tr>';
442
             str +='<th><span class="glyphicon glyphicon-remove icon-btn" aria-hidden="true"></span></th></tr>';
434
 
443
 

+ 210
- 170
app/views/local/professors/assessment.blade.php View File

23
             </div>
23
             </div>
24
             <div class="modal-body">
24
             <div class="modal-body">
25
                 <table class="table table-bordered">
25
                 <table class="table table-bordered">
26
-                    <thead>
27
-                        <th>Beginning (1-2)</th>
28
-                        <th>In Progress (3-4)</th>
29
-                        <th>Good (5-6)</th>
30
-                        <th>Excellent (7-8)</th>
26
+                    <thead id = "criteria-header">;
27
+                        @for($i=0; $i<$rubric->num_scales; $i++)
28
+                        <th>Scale {{$i+1}} ({{1+($i*($rubric->max_score/$rubric->num_scales))}} - {{(1+$i)*($rubric->max_score/$rubric->num_scales)}})</th>
29
+                        @endfor
31
                         <th>Notes</th>
30
                         <th>Notes</th>
32
                     </thead>
31
                     </thead>
33
                     <tbody>
32
                     <tbody>
34
-                        <tr></tr>
33
+                        <tr>
34
+                            
35
+                            
36
+                        </tr>
35
                     </tbody>
37
                     </tbody>
36
                 </table>
38
                 </table>
37
             </div>
39
             </div>
59
                     <li>If a particular criterion was assessed but the student did not complete the necessary work, you must select "0". This <strong>will</strong> affect the student's score.</li>
61
                     <li>If a particular criterion was assessed but the student did not complete the necessary work, you must select "0". This <strong>will</strong> affect the student's score.</li>
60
                     <li>If a student did not complete any work for this activity, select "0" for all columns in that student's row.</li>
62
                     <li>If a student did not complete any work for this activity, select "0" for all columns in that student's row.</li>
61
                     <li>If a student dropped the class, select "N/A" (Not Applicable) for all columns in that student's row.</li>
63
                     <li>If a student dropped the class, select "N/A" (Not Applicable) for all columns in that student's row.</li>
62
-                    <li>Cells with "N/A" <strong>will not</strong> be used to determine whether a criterion is achieved. Only scores from 0 to 8 will be considered for this purpose.</li>
63
-                    <li><strong>At least one score must be from 1-8.</strong> Otherwise, the 'Publish Assessment' and 'Save as Draft' buttons will be <strong>disabled</strong>. If you want to delete previously saved scores, go back to the activity and click the "Delete Assessment" button.</li>
64
+                    <li>Cells with "N/A" <strong>will not</strong> be used to determine whether a criterion is achieved. Only scores from 0 to {{$rubric->max_score}} will be considered for this purpose.</li>
65
+                    <li>For this activity, <strong>at least one score must be from 1-{{$rubric->max_score}}.</strong> Otherwise, the 'Publish Assessment' and 'Save as Draft' buttons will be <strong>disabled</strong>. If you want to delete previously saved scores, go back to the activity and click the "Delete Assessment" button.</li>
64
 
66
 
65
                 </ul>
67
                 </ul>
66
             </div>
68
             </div>
80
                     <li>Si un criterio particular fue evaluado, pero el estudiante no completó el trabajo necesario, debe seleccionar "0". Esto <strong>sí</strong> afectará la puntuación final del estudiante.</li>
82
                     <li>Si un criterio particular fue evaluado, pero el estudiante no completó el trabajo necesario, debe seleccionar "0". Esto <strong>sí</strong> afectará la puntuación final del estudiante.</li>
81
                     <li>Si un estudiante no completó el trabajo para esta actividad, seleccione "0" en todas las columnas de la fila de ese estudiante.</li>
83
                     <li>Si un estudiante no completó el trabajo para esta actividad, seleccione "0" en todas las columnas de la fila de ese estudiante.</li>
82
                     <li>Si un estudiante se dio de baja, seleccione "N/A" (No Aplica) en todas las columnas de la fila de ese estudiante.</li>
84
                     <li>Si un estudiante se dio de baja, seleccione "N/A" (No Aplica) en todas las columnas de la fila de ese estudiante.</li>
83
-                    <li>Las celdas con "N/A" <strong>no</strong> serán utilizadas para determinar si un criterio se alcanzó o no. Solamente las puntuaciones del 0 al 8 serán consideradas.</li>
84
-                    <li><strong>Al menos una puntuación deber ser del 1 al 8.</strong> De otra manera, el botón para guardar <strong>se desactivará</strong>. Si quiere borrar los resultados del avalúo, vuelva a la actividad y oprima el botón que dice "Delete Assessment".</li>
85
+                    <li>Las celdas con "N/A" <strong>no</strong> serán utilizadas para determinar si un criterio se alcanzó o no. Solamente las puntuaciones del 0 al {{$rubric->max_score}} serán consideradas.</li>
86
+                    <li>Para esta actividad, <strong>al menos una puntuación deber ser del 1 al {{$rubric->max_score}}.</strong> De otra manera, el botón para guardar <strong>se desactivará</strong>. Si quiere borrar los resultados del avalúo, vuelva a la actividad y oprima el botón que dice "Delete Assessment".</li>
85
 
87
 
86
 
88
 
87
                 </ul>
89
                 </ul>
88
             </div>
90
             </div>
89
 
91
 
90
         </div>
92
         </div>
91
-
93
+        <input type='hidden' id='max' name= 'max' value='{{$rubric->max_score}}'>
94
+        <input type ='hidden' id='num_of_scales' name ='num_of_scales' value ='{{$rubric->num_scales}}'>
92
         <p id="course">Course: {{{ $course->code }}} {{{ $course->number }}}</p>
95
         <p id="course">Course: {{{ $course->code }}} {{{ $course->number }}}</p>
93
         <p id="section">Section: {{{ $course->section }}}</p>
96
         <p id="section">Section: {{{ $course->section }}}</p>
94
         {{ HTML::linkAction('ActivitiesController@show', 'Back to Activity', array($activity->id), array('class'=>'btn btn-default btn-sm pull-right')) }}
97
         {{ HTML::linkAction('ActivitiesController@show', 'Back to Activity', array($activity->id), array('class'=>'btn btn-default btn-sm pull-right')) }}
97
 
100
 
98
         <table data-rubric-id="{{{ $rubric->id }}}" id="assessment-table" class="table table-striped table-condensed table-bordered">
101
         <table data-rubric-id="{{{ $rubric->id }}}" id="assessment-table" class="table table-striped table-condensed table-bordered">
99
             <thead>
102
             <thead>
103
+                <tr>
104
+                    <th>
105
+                    </th>
106
+                    @foreach ($criterion_rubric as $index => $criterion)
107
+                    <th  data-criterion-id="{{{ $criterion->criterion_id }}}" ><div class="th-box">
108
+                        
109
+                        Weight<input class="form-control" id="weight-{{$index}}" name='weight[]' type="text"  value="{{$criterion->weight}}" data-activity-criterion-id="{{$criterion->activity_criterion_id}}">
110
+                        </div></th>
111
+                @endforeach
112
+                </tr>
100
                     <tr>
113
                     <tr>
101
                         <th>
114
                         <th>
102
                             <div class="th-box">
115
                             <div class="th-box">
103
                                 Student
116
                                 Student
104
                             </div>
117
                             </div>
105
                         </th>
118
                         </th>
106
-                        @foreach ($rubric_contents as $criterion)
107
-                            <th class="criterion-field" data-criterion-id="{{{ $criterion->id }}}"><div class="th-box">{{ $criterion->name}}</div></th>
119
+                        @foreach ($criterion_rubric as $criterion)
120
+                            <th class="criterion-field" data-activity-criterion-id = "{{$criterion->activity_criterion_id}}"data-rubric-criterion-id = "{{$criterion->rubric_criterion_id}}" data-criterion-id="{{{ $criterion->criterion_id }}}" ><div class="th-box">{{ $criterion->name}}</div></th>
108
                         @endforeach
121
                         @endforeach
109
                         <th>Student Percentage</th>
122
                         <th>Student Percentage</th>
123
+                        <th>Student % per Weight</th>
110
                         <th>Comments</th>
124
                         <th>Comments</th>
111
                     </tr>
125
                     </tr>
112
             </thead>
126
             </thead>
115
             <!-- If the activity was assessed, load the assessment. Otherwise load empty sheet -->
129
             <!-- If the activity was assessed, load the assessment. Otherwise load empty sheet -->
116
             @if(sizeof($assessments)!=0)
130
             @if(sizeof($assessments)!=0)
117
                 <!-- For each assessment -->
131
                 <!-- For each assessment -->
118
-                @foreach ($assessments as $assessment)
132
+                @foreach ($students as $student)
119
                     <tr class="student-row">
133
                     <tr class="student-row">
120
                         <!-- Fetch student name -->
134
                         <!-- Fetch student name -->
121
-                        <td class="student-field" data-student-id="{{ $assessment->student_id }}">
122
-                            {{{ $assessment->name }}}
135
+                        <td class="student-field" data-student-id="{{ $student->id }}">
136
+                            {{{ $student->name }}}
123
                         </td>
137
                         </td>
124
 
138
 
125
                         <!-- For each criterion in the rubric, there's a score field -->
139
                         <!-- For each criterion in the rubric, there's a score field -->
126
-                        @for ($i = 0; $i<sizeof($rubric_contents); $i++)
140
+                        @for ($i = 0; $i<sizeof($criterion_rubric); $i++)
127
                             <td class="score-field">
141
                             <td class="score-field">
128
-                                <select name="" id="" class="form-control" data-toggle="tooltip" data-placement="right" title="{{{ $assessment->name }}}">
142
+                                <select name="" id="" class="form-control" data-toggle="tooltip" data-placement="right" title="{{{ $student->name }}}">
129
                                 <!-- Option from 0-8 -->
143
                                 <!-- Option from 0-8 -->
130
-                                @for ($j=0; $j<=8; $j++)
144
+                                @for ($j=0; $j<=$rubric->max_score; $j++)
131
                                     <!-- If the decoded scores with index as the assessment id and second index as criterion id equals the loop index, mark it as selected -->
145
                                     <!-- If the decoded scores with index as the assessment id and second index as criterion id equals the loop index, mark it as selected -->
132
-                                    @if( $j ==  $scores_array[$assessment->id][$rubric_contents[$i]->id])
146
+                                    @if( $j ==  $scores_array[$student->id][$i])
133
                                         <option value="{{$j}}" selected="selected">{{ $j }}</option>
147
                                         <option value="{{$j}}" selected="selected">{{ $j }}</option>
134
                                     @else
148
                                     @else
135
                                         <option value="{{$j}}">{{ $j }}</option>
149
                                         <option value="{{$j}}">{{ $j }}</option>
137
                                 @endfor
151
                                 @endfor
138
 
152
 
139
                                 <!-- N/A option -->
153
                                 <!-- N/A option -->
140
-                                @if( $scores_array[$assessment->id][$rubric_contents[$i]->id]=="N/A")
154
+                                @if( $scores_array[$student->id][$i]=="N/A")
141
                                     <option value="N/A" selected="selected">N/A</option>
155
                                     <option value="N/A" selected="selected">N/A</option>
142
                                 @else
156
                                 @else
143
                                     <option value="N/A">N/A</option>
157
                                     <option value="N/A">N/A</option>
145
                                 </select>
159
                                 </select>
146
                             </td>
160
                             </td>
147
                         @endfor
161
                         @endfor
148
-                        <td class="percentage">{{{ $assessment->percentage }}}</td>
162
+                        <td class="percentage"></td>
163
+                        <td class="percentage-per-weight"></td>
149
                         <td class="">
164
                         <td class="">
150
-                            <textarea class="comments full-textarea" placeholder="Max. 255 characters" maxLength="255" >{{ $assessment->comments }}</textarea>
165
+                            <textarea class="comments full-textarea" placeholder="Max. 255 characters" maxLength="255" >{{ $scores_array[$student->id]["comments"] }}</textarea>
151
                         </td>
166
                         </td>
152
                      </tr>
167
                      </tr>
153
                 @endforeach
168
                 @endforeach
155
                 @foreach ($students as $student)
170
                 @foreach ($students as $student)
156
                     <tr class="student-row">
171
                     <tr class="student-row">
157
                         <td class="student-field" data-student-id={{ $student->id }}>{{{ $student->name }}}</td>
172
                         <td class="student-field" data-student-id={{ $student->id }}>{{{ $student->name }}}</td>
158
-                        @for ($i = 0; $i<sizeof($rubric_contents); $i++)
159
-                            <td class="score-field">
173
+                        @for ($i = 0; $i<sizeof($criterion_rubric); $i++)
174
+                            <td class="score-field" data-weight = '1'>
160
                                 <select name="" id="" class="form-control" data-toggle="tooltip" data-placement="right" title="{{{ $student->name }}}">
175
                                 <select name="" id="" class="form-control" data-toggle="tooltip" data-placement="right" title="{{{ $student->name }}}">
161
-                                    <option value="0">0</option>
162
-                                    <option value="1">1</option>
163
-                                    <option value="2">2</option>
164
-                                    <option value="3">3</option>
165
-                                    <option value="4">4</option>
166
-                                    <option value="5">5</option>
167
-                                    <option value="6">6</option>
168
-                                    <option value="7">7</option>
169
-                                    <option value="8">8</option>
176
+                                    @for($j=0; $j<=$rubric->max_score; $j++)
177
+                                    <option value ='{{$j}}'>{{$j}}</option>
178
+                                    @endfor
170
                                     <option selected="selected" value="N/A">N/A</option>
179
                                     <option selected="selected" value="N/A">N/A</option>
171
                                 </select>
180
                                 </select>
172
                             </td>
181
                             </td>
173
                         @endfor
182
                         @endfor
174
                         <td class="percentage"></td>
183
                         <td class="percentage"></td>
184
+                        <td class="percentage-per-weight"></td>
175
                         <td class="comments"><textarea class="comments full-textarea" placeholder="Max. 255 characters" maxLength="255" ></textarea></td>
185
                         <td class="comments"><textarea class="comments full-textarea" placeholder="Max. 255 characters" maxLength="255" ></textarea></td>
176
                      </tr>
186
                      </tr>
177
                 @endforeach
187
                 @endforeach
182
                     <td>
192
                     <td>
183
                         <strong>Passed Criteria Percentage </strong>
193
                         <strong>Passed Criteria Percentage </strong>
184
                     </td>
194
                     </td>
185
-                    @for ($i = 0; $i<sizeof($rubric_contents); $i++)
195
+                    @for ($i = 0; $i<sizeof($criterion_rubric); $i++)
186
                         <td class="total"><strong><span class="total-value"></span><span class="percent-sign">%</span></strong>
196
                         <td class="total"><strong><span class="total-value"></span><span class="percent-sign">%</span></strong>
187
                         </td>
197
                         </td>
188
                     @endfor
198
                     @endfor
198
         </div>
208
         </div>
199
     </div>
209
     </div>
200
 </div>
210
 </div>
211
+<script>
212
+$('#button-submit-assessment, #button-draft-assessment').on('click', function(e)
213
+{
214
+
215
+    var draft = 0;
216
+
217
+    if($(this).hasClass('draft'))
218
+        draft = 1;
219
+
220
+    var expected_points = parseInt($('#expected_points').text());
221
+    var expected_percentage = parseInt($('#expected_percentage').text());
222
+
223
+    //Prevent page refresh
224
+    e.preventDefault();
225
+
226
+    // Row in the database
227
+    var activity_id   =  $('#activity').data('activity-id');
228
+
229
+    var student_info = new Object();
230
+
231
+    // Object to hold the score sum of each criterion
232
+    var criteriaSumObject = new Object();
233
+
234
+    // Object to hold % of students that passed each criterion
235
+    var CriteriaAchievedPercentage = new Object();
236
+
237
+    // Object to hold all student evaluations
238
+    var studentAssessments = new Array();
239
+
240
+    var weights = new Object();
241
+
242
+    $('input[name="weight[]"]').each(function (index){
243
+        activity_criterion_id = $(this).data('activity-criterion-id');
244
+        weights[activity_criterion_id] = $(this).val();
245
+    });
246
+
247
+    // Iterate through all students
248
+    $('#assessment-table tbody tr').each(function( index )
249
+    {   
250
+
251
+        student_info[index] = new Object()
252
+        student_info[index].studentId = $(this).find('.student-field').data('student-id');
253
+        student_info[index].activity_crit_id = new Object();
254
+
255
+       /* var ScoresObject     = new Object();        // Scores column in database
256
+        var CriterionObject = new Object();     // Objects inside ScoresObject
257
+        var SingleStudentAssessment = new Object();
258
+        SingleStudentAssessment.student_id = $(this).find('.student-field').data('student-id');
259
+        */
260
+        // For each criterion, store the score in array
261
+        $(this).children('td.score-field').each(function(index2)
262
+        {
263
+            // Table cell with a score
264
+            var scoreField = $(this);
265
+
266
+            // Criterion being evaluated in current iteration
267
+            activity_criterion_id = $('.criterion-field').eq(index2).data('activity-criterion-id');
268
+            student_info[index].activity_crit_id[activity_criterion_id] = scoreField.children('select').find(':selected').val();
269
+
270
+            // Score in the cell
271
+            //var score = scoreField.children('select').find(':selected').val();
272
+
273
+            // Store the score in the scores Object
274
+            //ScoresObject[criterion_id]=score;
275
+
276
+            // Initialize the index for the sum object, if it's undefined
277
+            //if(typeof(criteriaSumObject[criterion_id]) == 'undefined')
278
+            //{
279
+            //    criteriaSumObject[criterion_id]=0;
280
+            //}
281
+
282
+            // Add to this criterion's total
283
+            //criteriaSumObject[criterion_id]+=parseInt(score);
284
+        });
285
+        student_info[index].comments = $.trim($(this).find('.comments').val());
286
+
287
+        //SingleStudentAssessment.scores = ScoresObject;
288
+        //SingleStudentAssessment.percentage = $(this).find('.percentage').text();
289
+        //SingleStudentAssessment.comments = $.trim($(this).find('.comments').val());
290
+        // console.log('comment '+index+': '+SingleStudentAssessment.comments);
291
+        // console.log('student object: '+JSON.stringify(SingleStudentAssessment));
292
+
293
+        //var clone = jQuery.extend({}, SingleStudentAssessment);
294
+        //studentAssessments.push(clone);
295
+
296
+
297
+    });
298
+
299
+    // console.log('students: '+JSON.stringify(studentAssessments));
300
+    // console.log('total points per criteria: '+JSON.stringify(criteriaSumObject));
301
+
302
+    // Iterate through all evaluated criteria, determining which were achieved
303
+    // by comparing the completion percentage to the expected percentage
304
+    /*var CriteriaAchievedResults = new Object();
305
+
306
+
307
+    $('.total').each(function(index)
308
+    {
309
+        var id = $('.criterion-field').eq(index).data('criterion-id');
310
+
311
+        CriteriaAchievedPercentage[id] = parseFloat($(this).find('span').text());
312
+
313
+        //Set whether criterion was achieved (1) or not (0)
314
+        if(CriteriaAchievedPercentage[id] >= expected_percentage)
315
+        {
316
+            CriteriaAchievedResults[id]=1;
317
+        }
318
+        else if (CriteriaAchievedPercentage[id] < expected_percentage)
319
+        {
320
+            CriteriaAchievedResults[id]=0;
321
+        }
322
+        else
323
+        {
324
+            CriteriaAchievedResults[id]=null;
325
+        }
326
+
327
+    });
328
+*/
329
+    // console.log('criteria percentages: '+JSON.stringify(CriteriaAchievedPercentage));
330
+    // console.log('criteria achieved results: '+JSON.stringify(CriteriaAchievedResults));
331
+
332
+
333
+    // Save activity to the database
334
+    $.post
335
+    (
336
+        "{{ URL::action('ActivitiesController@saveAssessment') }}",
337
+        {
338
+            activity_id: activity_id,
339
+            draft: draft,
340
+            weights: JSON.stringify(weights),
341
+        
342
+            student_info: JSON.stringify(student_info)
343
+        },
344
+        function(data)
345
+        {
346
+            location.replace(data);
347
+        }
348
+    );
201
 
349
 
350
+});
351
+    </script>
202
 @stop
352
 @stop
203
 
353
 
204
 @section('included-js')
354
 @section('included-js')
306
     var sum = 0 ;
456
     var sum = 0 ;
307
     var total = 0;
457
     var total = 0;
308
     var percentage = 0;
458
     var percentage = 0;
459
+    var max_score = parseInt($('#max').val());
460
+    sum_of_weight = 0;
461
+    per_of_weight =0;
309
 
462
 
310
     row.find('td.score-field').each(function(index)
463
     row.find('td.score-field').each(function(index)
311
     {
464
     {
314
         {
467
         {
315
             sum += val;
468
             sum += val;
316
             total+=1;
469
             total+=1;
470
+            per_of_weight += val * parseInt($('#weight-'+index).val()); 
471
+            sum_of_weight += parseInt($('#weight-'+index).val());
317
         }
472
         }
318
-    });
319
 
473
 
320
-    percentage =((sum/(total*8))*100).toFixed(2);
474
+    });
475
+    percentage_per_weight = (100 *(per_of_weight/(max_score*sum_of_weight))).toFixed(2);
476
+    percentage =((sum/(total*max_score))*100).toFixed(2);
321
 
477
 
322
     //If percentage is not a number, set it to 0.
478
     //If percentage is not a number, set it to 0.
323
     if(isNaN(percentage))
479
     if(isNaN(percentage))
329
     {
485
     {
330
         row.find('.percentage').html('<strong>'+percentage+'%</strong>');
486
         row.find('.percentage').html('<strong>'+percentage+'%</strong>');
331
     }
487
     }
488
+    if(isNaN(percentage_per_weight)){
489
+        percentage_per_weight="N/A";
490
+        row.find('.percentage-per-weight').html('<strong>'+percentage_per_weight+'</strong>');
491
+    }
492
+    else{
493
+        row.find('.percentage-per-weight').html('<strong>'+percentage_per_weight+'%</strong>');
494
+    }
332
 
495
 
333
 
496
 
334
 }
497
 }
382
     percentagePerStudent($(this).closest('tr'));
545
     percentagePerStudent($(this).closest('tr'));
383
     toggleSaveButton();
546
     toggleSaveButton();
384
 });
547
 });
385
-
548
+//LA LINEA DONDE VA, 410
386
 // Submit button is clicked
549
 // Submit button is clicked
387
-$('#button-submit-assessment, #button-draft-assessment').on('click', function(e)
388
-{
389
 
550
 
390
-    var draft = 0;
391
-
392
-    if($(this).hasClass('draft'))
393
-        draft = 1;
394
-
395
-    var expected_points = parseInt($('#expected_points').text());
396
-    var expected_percentage = parseInt($('#expected_percentage').text());
397
-
398
-    //Prevent page refresh
399
-    e.preventDefault();
400
-
401
-    // Row in the database
402
-    var activity_id   =  $('#activity').data('activity-id');
403
-
404
-    // Object to hold the score sum of each criterion
405
-    var criteriaSumObject = new Object();
406
-
407
-    // Object to hold % of students that passed each criterion
408
-    var CriteriaAchievedPercentage = new Object();
409
-
410
-    // Object to hold all student evaluations
411
-    var studentAssessments = new Array();
412
-
413
-    // Iterate through all students
414
-    $('#assessment-table tbody tr').each(function( index )
415
-    {
416
-        var ScoresObject     = new Object();        // Scores column in database
417
-        var CriterionObject = new Object();     // Objects inside ScoresObject
418
-        var SingleStudentAssessment = new Object();
419
-        SingleStudentAssessment.student_id = $(this).find('.student-field').data('student-id');
420
-
421
-        // For each criterion, store the score in array
422
-        $(this).children('td.score-field').each(function(index)
423
-        {
424
-            // Table cell with a score
425
-            var scoreField = $(this);
426
-
427
-            // Criterion being evaluated in current iteration
428
-            var criterion_id = $('.criterion-field').eq(index).data('criterion-id');
429
-
430
-            // Score in the cell
431
-            var score = scoreField.children('select').find(':selected').val();
432
-
433
-            // Store the score in the scores Object
434
-            ScoresObject[criterion_id]=score;
435
-
436
-            // Initialize the index for the sum object, if it's undefined
437
-            if(typeof(criteriaSumObject[criterion_id]) == 'undefined')
438
-            {
439
-                criteriaSumObject[criterion_id]=0;
440
-            }
441
-
442
-            // Add to this criterion's total
443
-            criteriaSumObject[criterion_id]+=parseInt(score);
444
-        });
445
-
446
-        SingleStudentAssessment.scores = ScoresObject;
447
-        SingleStudentAssessment.percentage = $(this).find('.percentage').text();
448
-        SingleStudentAssessment.comments = $.trim($(this).find('.comments').val());
449
-        // console.log('comment '+index+': '+SingleStudentAssessment.comments);
450
-        // console.log('student object: '+JSON.stringify(SingleStudentAssessment));
451
-
452
-        var clone = jQuery.extend({}, SingleStudentAssessment);
453
-        studentAssessments.push(clone);
454
-
455
-
456
-    });
457
-
458
-    // console.log('students: '+JSON.stringify(studentAssessments));
459
-    // console.log('total points per criteria: '+JSON.stringify(criteriaSumObject));
460
-
461
-    // Iterate through all evaluated criteria, determining which were achieved
462
-    // by comparing the completion percentage to the expected percentage
463
-    var CriteriaAchievedResults = new Object();
464
-
465
-
466
-    $('.total').each(function(index)
467
-    {
468
-        var id = $('.criterion-field').eq(index).data('criterion-id');
469
-
470
-        CriteriaAchievedPercentage[id] = parseFloat($(this).find('span').text());
471
-
472
-        //Set whether criterion was achieved (1) or not (0)
473
-        if(CriteriaAchievedPercentage[id] >= expected_percentage)
474
-        {
475
-            CriteriaAchievedResults[id]=1;
476
-        }
477
-        else if (CriteriaAchievedPercentage[id] < expected_percentage)
478
-        {
479
-            CriteriaAchievedResults[id]=0;
480
-        }
481
-        else
482
-        {
483
-            CriteriaAchievedResults[id]=null;
484
-        }
485
-
486
-    });
487
-
488
-    // console.log('criteria percentages: '+JSON.stringify(CriteriaAchievedPercentage));
489
-    // console.log('criteria achieved results: '+JSON.stringify(CriteriaAchievedResults));
490
-
491
-
492
-    // Save activity to the database
493
-    $.post
494
-    (
495
-        "{{ URL::action('ActivitiesController@saveAssessment') }}",
496
-        {
497
-            activity_id: activity_id,
498
-            draft: draft,
499
-            criteria_achieved_percentage: JSON.stringify(CriteriaAchievedPercentage),
500
-            criteria_achievement: JSON.stringify(CriteriaAchievedResults),
501
-            student_scores: JSON.stringify(studentAssessments),
502
-        },
503
-        function(data)
504
-        {
505
-            location.replace(data);
506
-        }
507
-    );
508
-
509
-});
510
 
551
 
511
 // Language button is clicked
552
 // Language button is clicked
512
 $('#button-language').on('click', function(e)
553
 $('#button-language').on('click', function(e)
523
         type: 'POST',
564
         type: 'POST',
524
         url: "{{ URL::action('RubricsController@fetchRubricCriterion') }}",
565
         url: "{{ URL::action('RubricsController@fetchRubricCriterion') }}",
525
         data: {
566
         data: {
526
-            rubric_id: $(this).closest('table').data('rubric-id'),
527
-            criterion_id: $(this).data('criterion-id'),
567
+            rubric_criterion_id: $(this).data('rubric-criterion-id')
528
         },
568
         },
529
         success: function(data)
569
         success: function(data)
530
         {
570
         {
531
             data = JSON.parse(data);
571
             data = JSON.parse(data);
532
-            $('.modal-title').html(data.name);
533
-
572
+            $('.modal-title').html(data.criteria.name);
573
+            descriptions = '';
534
             $('.modal-body tbody tr').empty();
574
             $('.modal-body tbody tr').empty();
575
+            for(i =0; i<{{$rubric->num_scales}}; i++){
576
+                descriptions += '<td>'+data[i].description+'</td>'
577
+            }
535
             $('.modal-body tbody tr').append
578
             $('.modal-body tbody tr').append
536
             (
579
             (
537
-                '<td>'+data.description12+'</td>'
538
-                +'<td>'+data.description34+'</td>'
539
-                +'<td>'+data.description56+'</td>'
540
-                +'<td>'+data.description78+'</td>'
580
+                descriptions
541
             );
581
             );
542
 
582
 
543
-            if(data.notes!=null)
544
-                $('.modal-body tbody tr').append('<td>'+data.notes+'</td>');
583
+            if(data.criteria.notes!=null)
584
+                $('.modal-body tbody tr').append('<td>'+data.criteria.notes+'</td>');
545
             else
585
             else
546
                 $('.modal-body tbody tr').append('<td></td>');
586
                 $('.modal-body tbody tr').append('<td></td>');
547
 
587
 

+ 10
- 6
app/views/local/professors/rubrics.blade.php View File

42
 
42
 
43
 
43
 
44
     <div class="well">
44
     <div class="well">
45
-      @if($activity->rubric_id!=NULL)
46
-        <span id="assigned_rubric" class="hidden" data-assigned-rubric="{{{ $activity->rubric_id }}}"></span>
45
+      @if(count($activity->rubric)!=0)
46
+        <span id="assigned_rubric" class="hidden" data-assigned-rubric="{{{ $activity->rubric[0]->id }}}"></span>
47
       @endif
47
       @endif
48
       <input id="activity_id" type="hidden" value="{{{ $activity->id}}}">
48
       <input id="activity_id" type="hidden" value="{{{ $activity->id}}}">
49
 
49
 
51
         <label>Select a Rubric:</label>
51
         <label>Select a Rubric:</label>
52
         <select id="select-template" class="form-control selectpicker">
52
         <select id="select-template" class="form-control selectpicker">
53
           @foreach ($templates as $template)
53
           @foreach ($templates as $template)
54
-            @if($activity->rubric_id!=NULL && $template->name == Rubric::find($activity->rubric_id)->name)
54
+            @if(count($activity->rubric)!=0 && $template->name == Rubric::find($activity->rubric[0]->id)->name)
55
               <option data-template-id="{{ $template->id }}" class="template" selected="selected">{{ $template->name }}</option>
55
               <option data-template-id="{{ $template->id }}" class="template" selected="selected">{{ $template->name }}</option>
56
             @else
56
             @else
57
               <option data-template-id="{{ $template->id }}" class="template">{{ $template->name }}</option>
57
               <option data-template-id="{{ $template->id }}" class="template">{{ $template->name }}</option>
541
       {
541
       {
542
         name: $('#select-template').find(':selected').text(),
542
         name: $('#select-template').find(':selected').text(),
543
         activity_id: parseInt($('#activity_id').val()),
543
         activity_id: parseInt($('#activity_id').val()),
544
-        contents: " ",
544
+        
545
         expected_percentage: $('#expected_percentage').text(),
545
         expected_percentage: $('#expected_percentage').text(),
546
         expected_points: $('#expected_points').text(),
546
         expected_points: $('#expected_points').text(),
547
         criteria: criteria,
547
         criteria: criteria,
566
       {
566
       {
567
         id: $('#assigned_rubric').data('assigned-rubric'),
567
         id: $('#assigned_rubric').data('assigned-rubric'),
568
         name: $('#select-template').find(':selected').text(),
568
         name: $('#select-template').find(':selected').text(),
569
-        contents: JSON.stringify(criteriaArray),
569
+        activity_id: parseInt($('#activity_id').val()),
570
+        
570
         expected_percentage: $('#expected_percentage').text(),
571
         expected_percentage: $('#expected_percentage').text(),
571
-        expected_points: $('#expected_points').text()
572
+        expected_points: $('#expected_points').text(),
573
+        criteria: criteria,
574
+        scales: scales,
575
+        max_score:max_score
572
       },
576
       },
573
       function(data)
577
       function(data)
574
       {
578
       {

+ 17
- 12
app/views/local/professors/viewrubric.blade.php View File

32
           <tr>
32
           <tr>
33
             <th></th>
33
             <th></th>
34
             <th>Criterion</th>
34
             <th>Criterion</th>
35
-            <th>Beginning (1-2)</th>
36
-            <th>In Progress (3-4)</th>
37
-            <th>Good (5-6)</th>
38
-            <th>Excellent (7-8)</th>
35
+            @for($i = 0; $i<$rubric->num_scales; $i++)
36
+            <th>Scale {{$i+1}} ({{1+($i*($rubric->max_score/$rubric->num_scales))}} - {{(1+$i)*($rubric->max_score/$rubric->num_scales)}})</th>
37
+            @endfor
39
             <th>Learning Outcome</th>
38
             <th>Learning Outcome</th>
40
           </tr>
39
           </tr>
41
         </thead>
40
         </thead>
42
         <tbody>
41
         <tbody>
43
-        @foreach(json_decode($rubric->contents) as $index => $criterion)
42
+        @foreach($criterion_rubric as $index => $criterion)
44
           <tr data-criterion-copyright="{{ $criterion->copyright }}" data-criterion-notes="{{ $criterion->notes }}">
43
           <tr data-criterion-copyright="{{ $criterion->copyright }}" data-criterion-notes="{{ $criterion->notes }}">
45
             <td>{{ $index + 1 }}.</td>
44
             <td>{{ $index + 1 }}.</td>
46
             @if(isset($criterion->notes))
45
             @if(isset($criterion->notes))
49
               <sup></sup>
48
               <sup></sup>
50
               @if(property_exists($criterion, 'subcriteria'))
49
               @if(property_exists($criterion, 'subcriteria'))
51
                 <ul class="list-unstyled">
50
                 <ul class="list-unstyled">
52
-                  @foreach($criterion->subcriteria as $subcriterion)
51
+                  @foreach(json_decode($criterion->subcriteria) as $subcriterion)
53
                       <li>{{ $subcriterion }}</li>
52
                       <li>{{ $subcriterion }}</li>
54
                   @endforeach
53
                   @endforeach
55
                 </ul>
54
                 </ul>
60
               <span>{{{ $criterion->name }}}</span><sup></sup>
59
               <span>{{{ $criterion->name }}}</span><sup></sup>
61
               @if(property_exists($criterion, 'subcriteria'))
60
               @if(property_exists($criterion, 'subcriteria'))
62
                 <ul class="list-unstyled">
61
                 <ul class="list-unstyled">
63
-                  @foreach($criterion->subcriteria as $subcriterion)
62
+                  @foreach(json_decode($criterion->subcriteria) as $subcriterion)
64
                       <li>{{ $subcriterion }}</li>
63
                       <li>{{ $subcriterion }}</li>
65
                   @endforeach
64
                   @endforeach
66
                 </ul>
65
                 </ul>
67
               @endif
66
               @endif
68
             </td>
67
             </td>
69
             @endif
68
             @endif
70
-            <td>{{ nl2br($criterion->description12) }}</td>
71
-            <td>{{ nl2br($criterion->description34) }}</td>
72
-            <td>{{ nl2br($criterion->description56) }}</td>
73
-            <td>{{ nl2br($criterion->description78) }}</td>
74
-            <td>{{ Outcome::where('id', $criterion->outcome_id)->first()->name }}</td>
69
+            @foreach(json_decode($criterion->scales) as $scale)
70
+            <td>{{ nl2br($scale) }}</td>
71
+
72
+            @endforeach
73
+
74
+            <td>
75
+            
76
+            @foreach (json_decode($criterion->outcomes) as $index => $outcome)
77
+            {{$index+1}}. {{$outcome}}<br>                 
78
+            @endforeach  
79
+            </td>
75
           </tr>
80
           </tr>
76
         @endforeach
81
         @endforeach
77
         </tbody>
82
         </tbody>