function DegreePlan::load_degree_plan
Search API
7.x DegreePlan.php | DegreePlan::load_degree_plan() |
6.x DegreePlan.php | DegreePlan::load_degree_plan() |
Load our complete degree plan, including all courses and groups.
1 call to DegreePlan::load_degree_plan()
- DegreePlan::__construct in classes/
DegreePlan.php
File
- classes/
DegreePlan.php, line 505
Class
Code
function load_degree_plan() {
// Load this degree plan from the database and fully
// assemble it.
$degree_id = $this->degree_id;
$old_semester = "";
$table_name1 = "degrees";
$table_name2 = "degree_requirements";
if ($this->bool_use_draft) {
$table_name1 = "draft_$table_name1";
$table_name2 = "draft_$table_name2";
}
// Degrees we should exclude from the "appears in" counts. Used later...
$exclude_degree_ids = NULL;
$res = $this->db->db_query("SELECT * FROM $table_name1 a, $table_name2 b
WHERE a.degree_id = ?
AND a.degree_id = b.degree_id
ORDER BY semester_num ", array($this->degree_id));
while ($cur = $this->db->db_fetch_array($res))
{
$this->title = $cur ["title"];
$this->major_code = $cur ["major_code"];
$this->school_id = intval($cur ['school_id']);
if (!$exclude_degree_ids) {
$exclude_degree_ids = system_get_exclude_degree_ids_from_appears_in_counts($this->school_id);
}
$this->degree_level = strtoupper(trim($cur ["degree_level"]));
if ($this->degree_level == "") {
$this->degree_level = "UG"; // undergrad by default
}
$this->degree_class = $cur ["degree_class"];
$this->db_override_degree_hours = $cur ["override_degree_hours"];
$this->db_advising_weight = intval($cur ["advising_weight"]);
$data_entry_value = trim($cur ['data_entry_value']);
$this->db_track_selection_config = trim((string) $cur ["track_selection_config"]);
$this->parse_track_selection_config(); // load into the track_selection_config_array as needed.
$semester_num = $cur ["semester_num"];
if ($semester_num != $old_semester)
{
// This is a new semester object we are dealing with.
$old_semester = $semester_num;
$obj_semester = new Semester($semester_num);
$obj_semester->title = trim((string) @$this->array_semester_titles [$semester_num]);
if ($obj_semester->title == "") {
$obj_semester->assign_title();
}
$this->list_semesters->add($obj_semester);
}
if ($cur ["course_id"] * 1 > 0)
{
// A course is the next degree requirement.
//if ($this->bool_use_draft) $cat_year = $this->catalog_year;
$cat_year = $this->catalog_year;
$course_c = new Course($cur ["course_id"], false, $this->db, false, $cat_year, $this->bool_use_draft);
$course_c->assigned_to_semester_num = $semester_num;
$course_c->min_grade = trim(strtoupper($cur ["course_min_grade"]));
if ($course_c->min_grade == "")
{ // By default, all courses have a
// min grade requirement of the lowest passing grade.
$course_c->min_grade = variable_get_for_school("minimum_passing_grade", "D", $this->school_id);
}
$course_c->requirement_type = trim($cur ["course_requirement_type"]);
// Set which degree_id this course is a requirement of (for multiple degrees)
$course_c->req_by_degree_id = $this->degree_id;
$course_c->db_degree_requirement_id = $cur ['id'];
//adminDebug($course_c->to_string() . $course_c->getCatalogHours());
$obj_semester->list_courses->add($course_c);
if (!in_array($this->degree_id, $exclude_degree_ids)) {
// array is sectioned like: course_id | degree_id | group_id. Group id = 0 means "on the bare degree plan"
$this->required_course_id_array [$course_c->course_id][$this->degree_id][0] = TRUE;
}
} // if course_id > 0
if ($cur ["group_id"] * 1 > 0)
{
// A group is the next degree requirement.
$title = "";
$icon_filename = "";
// Add the real Group (with all the courses, branches, etc)
// to the DegreePlan's group list!
// First, see if this group already exists. If it does,
// simply add the number of hours required to it. If not,
// create it fresh.
if ($new_group = $this->find_group($cur ["group_id"] . '_' . $this->degree_id)) // group_id's will always have db_group_id _ degree_id from now on...
{
// Was already there (probably in another semester),
// so, just increment the required hours.
if (!isset($new_group->hours_required_by_type [$cur ["group_requirement_type"]])) {
$new_group->hours_required_by_type [$cur ["group_requirement_type"]] = 0;
}
$new_group->hours_required = $new_group->hours_required + ($cur ["group_hours_required"] * 1);
$new_group->hours_required_by_type [$cur ["group_requirement_type"]] += ($cur ["group_hours_required"] * 1);
//Set which degree_id this is required by.
$new_group->req_by_degree_id = $this->degree_id;
$title = $new_group->title;
$icon_filename = $new_group->icon_filename;
}
else {
// Was not already there; insert it.
$group_n = new Group($cur ["group_id"] . '_' . $this->degree_id, $this->db, $semester_num, $this->student_array_significant_courses, $this->bool_use_draft, $cur ["group_requirement_type"]);
$group_n->hours_required = $cur ["group_hours_required"] * 1;
if (!isset($group_n->hours_required_by_type [$cur ["group_requirement_type"]])) {
$group_n->hours_required_by_type [$cur ["group_requirement_type"]] = 0;
}
$group_n->hours_required_by_type [$cur ["group_requirement_type"]] += $group_n->hours_required;
$group_n->set_req_by_degree_id($this->degree_id);
if (trim($cur ["group_min_grade"]) != "")
{
$group_n->assign_min_grade(trim(strtoupper($cur ["group_min_grade"])));
}
$title = $group_n->title;
$icon_filename = $group_n->icon_filename;
$this->list_groups->add($group_n);
}
// Add a placeholder to the Semester....
$group_g = new Group();
$group_g->bool_use_draft = $this->bool_use_draft;
$group_g->group_id = $cur ["group_id"] . '_' . $this->degree_id;
$group_g->set_req_by_degree_id($this->degree_id);
$group_g->load_descriptive_data();
$group_g->set_requirement_type($cur ["group_requirement_type"]);
if (trim($cur ["group_min_grade"]) != "")
{
$group_g->assign_min_grade(trim(strtoupper($cur ["group_min_grade"])));
}
$group_g->assigned_to_semester_num = $semester_num;
$group_g->title = "$title";
$group_g->icon_filename = $icon_filename;
$group_g->hours_required = floatval($cur ["group_hours_required"]);
$group_g->min_hours_allowed = floatval($cur ["group_min_hours_allowed"]);
$group_g->bool_placeholder = true;
$obj_semester->list_groups->add($group_g);
}
// if group_id > 0
} // while db results
$this->list_groups->sort_priority();
if (!is_array($exclude_degree_ids)) {
$exclude_degree_ids = array();
}
if (!in_array($this->degree_id, $exclude_degree_ids)) {
$group_course_id_array = $this->list_groups->get_group_course_id_array();
// Add to our required_course_id_array.
foreach ($group_course_id_array as $group_id => $details) {
foreach ($group_course_id_array [$group_id] as $course_id => $val) {
$this->required_course_id_array [$course_id][$this->degree_id][$group_id] = $val;
}
}
}
// When we load this degree plan, let's also check for any hooks.
// Since this class might be used outside of FP, only do this if we know
// that the bootstrap.inc file has been executed.
if ($GLOBALS ["fp_bootstrap_loaded"] == TRUE) {
invoke_hook("degree_plan_load", array(&$this));
}
}