function save_custom_class_to_db($a_values, $i_user_id, $sem, $year)
{
    global $maindb;
    // index the array
    foreach ($a_values as $k => $v) {
        unset($a_values[$k]);
        $a_values[$v->name] = $v->value;
    }
    // standardize the inputs
    $semester_string = number_to_season($sem);
    $semester_string = strtolower(substr($semester_string, 0, 3));
    $realyear = school_to_real_year($year, $sem);
    $a_matches = array();
    $a_values["Days"] = strtoupper($a_values["Days"]);
    $a_values["Days"] = preg_replace("/[^UMTWRFS]+/", "", $a_values["Days"]);
    preg_match('/U?M?T?W?R?F?S?/', $a_values["Days"], $a_matches);
    $a_values["Days"] = count($a_matches) > 0 ? $a_matches[0] : "";
    $a_values["Time"] = preg_replace("/[^\\d-]+/", "", $a_values["Time"]);
    preg_match('/\\d\\d\\d\\d-\\d\\d\\d\\d/', $a_values["Time"], $a_matches);
    $a_values["Time"] = count($a_matches) > 0 ? $a_matches[0] : "";
    foreach (array("Hrs", "Limit") as $cat) {
        $a_values[$cat] = preg_replace("/[^\\d]+/", "", $a_values[$cat]);
    }
    // check that none of the fields are blank
    foreach ($a_values as $k => $v) {
        if ($v == "") {
            return json_encode(array(new command("failure", "Failure: bad value for {$k}")));
        }
    }
    // get the next crn for custom classes
    $i_crn = 1;
    $a_custom_classes = db_query("SELECT `crn` FROM `{$maindb}`.`classes` WHERE `semester`='[sem]' AND `year`='[year]' AND `subject`='CUSTOM' ORDER BY `crn` DESC LIMIT 1", array("sem" => $semester_string, "year" => $realyear));
    if (count($a_custom_classes) > 0) {
        $i_crn = (int) $a_custom_classes[0]["crn"];
        $i_crn++;
        // check that it doesn't conflict with other types of classes
        $query_string = "SELECT `crn` FROM `{$maindb}`.`classes WHERE `semester`='[sem]' AND `year`='[year]' AND `crn`='[crn]'";
        $query_vars = array("sem" => $semester_string, "year" => $realyear, "crn" => $i_crn);
        $a_class = db_query($query_string, $query_vars);
        while ($a_class !== FALSE && count($a_class) > 0) {
            $i_crn++;
            $query_vars["crn"] = $i_crn;
            $a_class = db_query($query_string, $query_vars);
        }
    }
    // find some specific information
    $a_days = str_split($a_values["Days"]);
    $a_days_times_locations = array();
    foreach ($a_days as $s_day) {
        $a_days_times_locations[] = array($s_day, $a_values["Time"], $a_values["Location"]);
    }
    $s_days_times_locations = json_encode($a_days_times_locations);
    $a_dates = getStartEndDays($semester_string, $realyear);
    // build the class
    $a_class = array("crn" => $i_crn, "year" => $realyear, "semester" => $semester_string, "subject" => "CUSTOM", "course" => "CUSTOM {$i_crn}", "campus" => $a_values["*Campus"], "days" => $a_values["Days"], "days_times_locations" => $s_days_times_locations, "start_date" => $a_dates["start"], "end_date" => $a_dates["end"], "time" => $a_values["Time"], "location" => $a_values["Location"], "hours" => $a_values["Hrs"], "title" => $a_values["Title"], "instructor" => $a_values["Instructor"], "seats" => 0, "limit" => $a_values["Limit"], "enroll" => 0, "parent_class" => "", "subclass_identifier" => "", "user_ids_with_access" => "rwx|{$i_user_id},", "last_mod_time" => date("Y-m-d H:i:s"));
    // insert into the database
    $s_insert_clause = array_to_insert_clause($a_class);
    $query = db_query("INSERT INTO `{$maindb}`.`classes` {$s_insert_clause}", $a_class);
    if ($query !== FALSE) {
        return json_encode(array(new command("success", "")));
    }
    return json_encode(array(new command("failure", "failure")));
}
Example #2
0
/**
 * Saves the classes to the mysql database
 * @$term: the semester data, including "semester", "year", and "classes"
 */
function saveClasses($term)
{
    // get some common data
    $semester = $term["semester"];
    $year = $term["year"];
    $s_sem = strtolower(substr($semester, 0, 3));
    $a_dates = getStartEndDays($s_sem, $year);
    $start_date = $a_dates["start"];
    $end_date = $a_dates["end"];
    $modtime = date("Y-m-d H:i:s");
    // build the class data
    $last_class_crn = "";
    $classes_to_save = array();
    $subclasses_to_save = array();
    foreach ($term["classes"] as $a_class) {
        fillClass($a_class, array("CRN" => 0, "subject" => "", "Course" => "", "*Campus" => "", "Days" => "", "Time" => "", "Location" => "", "Hrs" => 0, "Title" => "", "Instructor" => "", "Seats" => 0, "Limit" => 0, "Enroll" => 0));
        $a_days = str_split(str_replace(" ", "", $a_class["Days"]));
        $a_days_times_locations = array();
        foreach ($a_days as $s_day) {
            $a_days_times_locations[] = array($s_day, $a_class["Time"], $a_class["Location"]);
        }
        $days_times_locations = json_encode($a_days_times_locations);
        if ((int) $a_class["CRN"] == 0) {
            $parent_class = (int) $last_class_crn;
            $subclass_index++;
            $is_subclass = TRUE;
        } else {
            $last_class_crn = $a_class["CRN"];
            $parent_class = 0;
            $subclass_index = 0;
            $is_subclass = FALSE;
        }
        $subclass_id = (int) "{$parent_class}{$subclass_index}";
        $a_class_to_save = array("crn" => $a_class["CRN"], "year" => $year, "semester" => $s_sem, "subject" => $a_class["subject"], "course" => $a_class["Course"], "campus" => $a_class["*Campus"], "days" => $a_class["Days"], "days_times_locations" => $days_times_locations, "start_date" => $start_date, "end_date" => $end_date, "time" => $a_class["Time"], "location" => $a_class["Location"], "hours" => $a_class["Hrs"], "title" => $a_class["Title"], "instructor" => $a_class["Instructor"], "seats" => $a_class["Seats"], "limit" => $a_class["Limit"], "enroll" => $a_class["Enroll"], "parent_class" => $parent_class, "subclass_identifier" => $subclass_id, "last_mod_time" => $modtime);
        if ($is_subclass) {
            $subclasses_to_save[] = $a_class_to_save;
        } else {
            $classes_to_save[] = $a_class_to_save;
        }
    }
    // build the array of fields to pass through
    $fields = array();
    if (isset($classes_to_save[0]) && count($classes_to_save[0]) > 0) {
        foreach ($classes_to_save[0] as $k => $v) {
            $fields[] = $k;
        }
    } else {
        echo "no classes";
        return "no classes";
    }
    saveData($semester, $year, $subclasses_to_save, $fields, "subclass_identifier", "classes", array("last_mod_time"), array("crn" => "0"));
    return saveData($semester, $year, $classes_to_save, $fields, "crn", "classes", array("last_mod_time"), array("parent_class" => "0"));
}