Skip to content

Commit

Permalink
Split semesters avoid colission
Browse files Browse the repository at this point in the history
  • Loading branch information
philcali committed May 11, 2012
1 parent d427ef0 commit 8cabfab
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 28 deletions.
14 changes: 12 additions & 2 deletions classes/lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -226,16 +226,23 @@ class cps_split extends ues_user_section_accessor implements unique, undoable, v
var $groupingid;

public static function is_valid($courses) {
$valids = self::filter_valid($courses);
$valids = self::filter_valid_courses($courses);
return !empty($valids);
}

public static function filter_valid($courses) {
public static function filter_valid_courses($courses) {
return array_filter($courses, function ($course) {
return count($course->sections) > 1;
});
}

public static function filter_valid($semesters) {
return array_filter($semesters, function($semester) {
$semester->courses = cps_split::filter_valid_courses($semester->courses);
return count($semester->courses) > 0;
});
}

public static function in_course($course) {
global $USER;

Expand All @@ -247,6 +254,9 @@ public static function in_course($course) {
$sections = cps_unwant::active_sections_for($teacher, true);

foreach ($sections as $section) {
if ($section->courseid != $course->id) {
continue;
}
$course->sections[$section->id] = $section;
}
}
Expand Down
12 changes: 6 additions & 6 deletions split.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@
print_error('no_section', 'block_cps');
}

$courses = ues_course::merge_sections($sections);
$semesters = ues_semester::merge_sections($sections);

$valid_courses = cps_split::filter_valid($courses);
$valid_semesters = cps_split::filter_valid($semesters);

if (empty($valid_courses)) {
if (empty($valid_semesters)) {
print_error('no_courses', 'block_cps');
}

Expand All @@ -48,7 +48,7 @@
$PAGE->requires->js('/blocks/cps/js/selection.js');
$PAGE->requires->js('/blocks/cps/js/split.js');

$form = split_form::create($valid_courses);
$form = split_form::create($valid_semesters);

if ($form->is_cancelled()) {
redirect(new moodle_url('/my'));
Expand All @@ -61,7 +61,7 @@
$form = new split_form_finish();

try {
$form->process($data, $valid_courses);
$form->process($data, $valid_semesters);

$form->display();
} catch (Exception $e) {
Expand All @@ -72,7 +72,7 @@
die();
}

$form = split_form::next_from($form->next, $data, $valid_courses);
$form = split_form::next_from($form->next, $data, $valid_semesters);
}

echo $OUTPUT->header();
Expand Down
43 changes: 23 additions & 20 deletions split_form.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,30 +28,29 @@ class split_form_select extends split_form {
var $current = self::SELECT;
var $next = self::SHELLS;

public static function build($courses) {
return array('courses' => $courses);
public static function build($semesters) {
return array('semesters' => $semesters);
}

function definition() {
$m =& $this->_form;

$m->addElement('header', 'select', self::_s('select'));

$semesters = ues_semester::get_all();

$courses = $this->_customdata['courses'];
$semesters = $this->_customdata['semesters'];

foreach ($courses as $course) {
foreach ($semesters as $semester) {

$semester = $semesters[reset($course->sections)->semesterid];
foreach ($semester->courses as $course) {
$display = ' ' . $this->display_course($course, $semester);

$display = ' ' . $this->display_course($course, $semester);
if (cps_split::exists($course)) {
$display .= ' (' . self::_s('split_option_taken') . ')';
}

if (cps_split::exists($course)) {
$display .= ' (' . self::_s('split_option_taken') . ')';
$key = $semester->id . '_' . $course->id;
$m->addElement('radio', 'selected', '', $display, $key);
}

$m->addElement('radio', 'selected', '', $display, $course->id);
}

$m->addRule('selected', self::_s('err_select_one'), 'required', null, 'client');
Expand All @@ -60,19 +59,20 @@ function definition() {
}

function validation($data) {
$courses = $this->_customdata['courses'];
$semesters = $this->_customdata['semesters'];

if (empty($data['selected'])) {
return array('selected' => self::_s('err_select_one'));
}

if (empty($courses[$data['selected']])) {
list($semid, $couid) = explode('_', $data['selected']);
if (empty($semesters[$semid]->courses[$couid])) {
return array('selected' => self::_s('err_select'));
}

$errors = array();

$course = $courses[$data['selected']];
$course = $semesters[$semid]->courses[$couid];

$section_count = count($course->sections);

Expand All @@ -97,10 +97,12 @@ class split_form_shells extends split_form {
var $next = self::DECIDE;
var $prev = self::SELECT;

public static function build($courses) {
$selected = required_param('selected', PARAM_INT);
public static function build($semesters) {
$selected = required_param('selected', PARAM_RAW);

list($semid, $couid) = explode('_', $selected);

return array('course' => $courses[$selected]);
return array('course' => $semesters[$semid]->courses[$couid]);
}

function definition() {
Expand Down Expand Up @@ -406,8 +408,9 @@ function validation($data) {

class split_form_finish implements finalized_form {

function process($data, $valid_courses) {
$course = $valid_courses[$data->selected];
function process($data, $semesters) {
list($semid, $couid) = explode('_', $data->selected);
$course = $semesters[$semid]->courses[$couid];

$current_splits = cps_split::in_course($course);

Expand Down
4 changes: 4 additions & 0 deletions styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
text-align: center;
}

.split_available_sections select[multiple] {
min-height: 200px;
}

.split_available_sections {
float: left;
padding: 0 0 0 15px;
Expand Down

0 comments on commit 8cabfab

Please sign in to comment.