function admin_duplicate_year_form_submit

6.x admin.module admin_duplicate_year_form_submit($form, &$form_state)
4.x admin.module admin_duplicate_year_form_submit($form, $form_state)
5.x admin.module admin_duplicate_year_form_submit($form, &$form_state)

This function should perform the actual copy of data!

_state

Parameters

unknown_type $form:

File

modules/admin/admin.module, line 671
The administrative configurations for FlightPath.

Code

function admin_duplicate_year_form_submit($form, &$form_state) {


  set_time_limit(300); // Extend time limit since this may take a little while.    
  $values = $form_state ["values"];


  // Check to make sure they entered the transfer passcode correctly.
  $db = get_global_database_handler();

  // Okay, we made it this far, let's proceed with the copy!
  $new_year = $values ["destination_year"];
  $old_year = $values ["source_year"];

  $form_state ['duplication']['src_catalog_year'] = $old_year;
  $form_state ['duplication']['dest_catalog_year'] = $new_year;

  /////////////////////////////////////////////////////////////////////
  // We must first begin by deleting any entries for the new_year
  // from our tables.  This is because we may have to run the parser
  // more than once while debugging and such.
  $res = db_query("DELETE FROM draft_courses WHERE `catalog_year`= ? ", $new_year);


  $res = db_query("DELETE FROM draft_degree_tracks WHERE `catalog_year` = ? ", $new_year);
  // For degrees, we first need to select all of the new_year degrees.
  $res = db_query("SELECT * FROM draft_degrees WHERE `catalog_year` = ? ", $new_year);
  while ($cur = db_fetch_array($res)) {
    $res2 = db_query("DELETE FROM draft_degree_requirements WHERE `degree_id`='{$cur ["degree_id"]}' ");
  }

  $res = db_query("DELETE FROM draft_degrees WHERE `catalog_year`=? ", $new_year);
  // For groups, begin by selecting all the groups in that year...
  $res = db_query("SELECT * FROM draft_groups WHERE `catalog_year`=? ", $new_year);
  while ($cur = db_fetch_array($res)) 
   {
    // Now, select all the requirements and see if there are any sub groups...
    $res2 = db_query("SELECT * FROM draft_group_requirements WHERE `group_id`='{$cur ["group_id"]}' ");
    while ($cur2 = db_fetch_array($res2)) 
     {
      if ($cur2 ["child_group_id"] > 0) 
       {
        // Delete the child group.
        $res3 = db_query("DELETE FROM draft_group_requirements WHERE `group_id`='{$cur2 ["child_group_id"]}' ");
      }
    }
    // Now, delete the original requirement.
    $res3 = db_query("DELETE FROM draft_group_requirements WHERE `group_id`='{$cur ["group_id"]}' ");
  }
  $res = db_query("DELETE FROM draft_groups WHERE `catalog_year`=? ", $new_year);
  //////////////////////////////////////////////////////////////////////////

  //  Okay, we have deleted any possible old entries for the new year.



  /////////////////////////////////////////////////////////////////////////
  // Our first step is to copy all of the courses from the old_year to the new_year.  
  $res = db_query("SELECT * FROM draft_courses WHERE `catalog_year`=? ", $old_year);
  while ($cur = db_fetch_array($res)) 
   {
    extract($cur, 3, "db");

    $course = new Course($db_course_id, false, $db, false, $old_year);
    $course->subject_id = $db_subject_id;
    $course->course_num = $db_course_num;
    $course->db_exclude = $db_exclude;
    $course->min_hours = $db_min_hours;
    $course->max_hours = $db_max_hours;
    $course->repeat_hours = $db_repeat_hours;
    $course->school_id = $db_school_id;

    // Now, duplicate it for the new_year.
    $db->duplicate_course_for_year($course, $new_year);

    // Store what courses we are working on, for other modules.
    $form_state ['courses'][] = $db_course_id;

  }



  //////////////////////////////////////////////////////////////////////////
  //  Now, let's copy over the groups.  
  $group_id_array = array();
  $subgroup_id_array = array();

  $res = db_query("SELECT * FROM draft_groups WHERE `catalog_year`=? ", $old_year);
  while ($cur = db_fetch_array($res)) 
   {
    extract($cur, 3, "db");
    // First, let's request a new group ID for this new group.
    $new_group_id = $db->request_new_group_id();
    $group_id_array [$db_group_id] = $new_group_id;

    //$db_data_entry_comment = mysql_real_escape_string($db_data_entry_comment);
    // Now, let's insert this top-level group back into the table
    // as the new_year, with the new_group_id.
    $query = "INSERT INTO draft_groups(`group_id`,`group_name`,
                `title`,`public_note`,`definition`,`icon_filename`,`catalog_year`,
                `priority`,`delete_flag`,`data_entry_comment`, `catalog_repeat`,school_id)
                VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ";
    $res2 = db_query($query, $new_group_id, $db_group_name, $db_title, $db_public_note, 
    $db_definition, $db_icon_filename, $new_year, 
    $db_priority, $db_delete_flag, $db_data_entry_comment, $db_catalog_repeat, $db_school_id);

    // Okay, now we need to go through the requirements for the group, and copy
    // those over to the new_year.
    $res3 = db_query("SELECT * FROM draft_group_requirements
                WHERE `group_id`='$db_group_id' ");
    while ($cur3 = db_fetch_array($res3)) 
     {
      extract($cur3, 3, "db3");

      $child_group_id = 0;
      // Was there a child_group (a branch)?  If so, we need to copy that
      // over too, with a new child_group_id.
      if ($db3_child_group_id > 0) 
       {
        // First, create the child group...
        $new_sub_group_id = $db->request_new_group_id();
        $subgroup_id_array [$db3_child_group_id] = $new_sub_group_id;
        $res4 = db_query("SELECT * FROM draft_group_requirements
                WHERE `group_id`='$db3_child_group_id' ");
        while ($cur4 = db_fetch_array($res4)) 
         {
          extract($cur4, 3, "db4");
          $res5 = db_query("INSERT INTO draft_group_requirements
                      (`group_id`,`course_id`,`course_min_grade`,
                      `course_repeats`,`attributes`,`data_entry_value`)
                      VALUES (?,?,?,?,?,?) ", 
          $new_sub_group_id, $db4_course_id, 
          $db4_course_min_grade, $db4_course_repeats, $db4_attributes, 
          $db4_data_entry_value);
        }

        // Now, add the replace the db3_child_group_id with this new id
        // so it will get added as a requirement.
        $child_group_id = $new_sub_group_id;
      }

      // Add the row into the table...
      $res5 = db_query("INSERT INTO draft_group_requirements
                  (`group_id`,`course_id`,`course_min_grade`,
                  `course_repeats`,`attributes`,`data_entry_value`,`child_group_id`)
                  VALUES (?,?,?,?,?,?,?) ", 
      array($new_group_id, $db3_course_id,
        $db3_course_min_grade, $db3_course_repeats, $db3_attributes,
        $db3_data_entry_value, $child_group_id));


    }
  }

  // Store what groups we are working on, for other modules.
  $form_state ['groups'] = $group_id_array;



  /////////////////////////////////////////////////////////////////////
  //  Now, on to transfering the degrees.
  //  We will have to use the groupIDArray we constructed earlier, which
  //  looks like $arr[old_id] = new_id.
  // Do the tracks first, since they are easier and straight forward...
  $res = db_query("SELECT * FROM draft_degree_tracks WHERE `catalog_year`='$old_year' ");
  while ($cur = db_fetch_array($res)) 
   {
    extract($cur, 3, "db");

    $res2 = db_query("INSERT INTO draft_degree_tracks
              (`catalog_year`,`major_code`,`track_code`,`track_title`,
              `track_short_title`,`track_description`,school_id)
              VALUES
              (?,?,?,?,?,?,?) ", 
    $new_year, $db_major_code, $db_track_code, $db_track_title, 
    $db_track_short_title, $db_track_description, $db_school_id);

  }
  // Now, let's do the degrees themselves.
  $res = db_query("SELECT * FROM draft_degrees WHERE `catalog_year`='$old_year' ");
  while ($cur = db_fetch_array($res)) 
   {
    extract($cur, 3, "db");

    $new_degree_id = $db->request_new_degree_id();

    // Store what degrees we are working on, for other modules.
    $form_state ['degrees'][] = array(
      'src' => $db_degree_id,
      'src_catalog_year' => $old_year,
      'school_id' => $db_school_id,
      'dest' => $new_degree_id,
      'dest_major_code' => $db_major_code,
      'dest_catalog_year' => $new_year,
    );

    // add in the top-level degree to the table.
    $res2 = db_query("INSERT INTO draft_degrees
              (degree_id, major_code, degree_type, degree_level, degree_class, title,
               semester_titles_csv, catalog_year, exclude, public_note,
               allow_dynamic, advising_weight, override_degree_hours, min_tracks, max_tracks, default_tracks, track_selection_config, school_id)
               VALUES
              (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
              ", $new_degree_id, $db_major_code, $db_degree_type, $db_degree_level, $db_degree_class, $db_title, 
    $db_semester_titles_csv, $new_year, $db_exclude, $db_public_note, 
    $db_allow_dynamic, $db_advising_weight, $db_override_degree_hours, $db_min_tracks, $db_max_tracks, $db_default_tracks, $db_track_selection_config, $db_school_id);

    // now, pull out all of the degree_requirements.
    $res3 = db_query("SELECT * FROM draft_degree_requirements
                WHERE degree_id = ? ", array($db_degree_id));
    while ($cur3 = db_fetch_array($res3)) 
     {
      extract($cur3, 3, "db3");
      // If there is a required group, we must convert it to the
      // new groupID !
      $required_group_id = intval($db3_group_id);
      if ($db3_group_id > 0 && trim($db3_group_id) != "") 
       {
        $required_group_id = $group_id_array [$db3_group_id];
        if ($required_group_id < 1 || $required_group_id == "") 
         {
          //die("could not find new group for $old_year $db3_group_id!  Group id is $required_group_id");
          fp_add_message(t("Couldn't find the specified group with ID $db3_group_id in catalog year $old_year, required by degree with ID $db_degree_id ($db_major_code).  The group was possibly deleted?
                            Be aware that any degrees in the new year will be missing this group requirement."), 'error');
        }
      }


      $res4 = db_query("INSERT INTO draft_degree_requirements
                (degree_id, semester_num, group_id, group_requirement_type,
                group_hours_required, group_min_hours_allowed, group_min_grade, course_id,
                course_min_grade, course_requirement_type, data_entry_value)
                VALUES
                (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
                ", $new_degree_id, $db3_semester_num, $required_group_id, $db3_group_requirement_type, 
      $db3_group_hours_required, $db3_group_min_hours_allowed, $db3_group_min_grade, $db3_course_id, 
      $db3_course_min_grade, $db3_course_requirement_type, $db3_data_entry_value);


    }


  }


  watchdog("admin", "Duplicated all degree/group/courses data from $old_year to $new_year");


  fp_add_message(t("The copy operation is now completed.  You may view the new year
                    by using the Data Entry links on the admin main menu.  Remember, you must
                    apply draft changes before they will be visible in FlightPath."));


}