#include "manhat-lib/shared_xml_course_create_util.h"
#include "manhat-lib/shared_super_menu.h"





static void
set_back_url(const char *key)
{
   char url[MAX_PATH +1];
   snprintf (url, MAX_PATH +1, "%s?id=%s","super_admin_page",  key);
   cs_set_value("back_url", url);
}

int is_auto_update_file(char *roster)
{
    char *ptr;
    ptr = strstr(roster, "auto_update");
    if(ptr)
	return 1;
    else
	return 0;

}

int main()
{
   char key[MAX_KEY +1];
   
   XML_COURSE_INFO_LIST *xml_info_list;                                  /* shared_roster_xml_parser.h */
   DIRECTORY_NAME_NODE *directory_name_head;
   CREATED_COURSE_NODE *course_head = 0, *standalone_course = 0;
   USER_GROUP_INFO_LIST *user_list = 0;
   INDEX_USER_LIST *index_list = 0;
   char *self;

   
   SESSION user;
   int standalone;     /* was there at least one standalone course? */
   char roster_path[MAX_PATH + 1];   /* full (relative) path to xml file */ 
  
   cs_cgi_init(); 

   /* build a linked list of directory names assigned to each course by the user */
   directory_name_head = get_parameters(key, &standalone, roster_path);
  
   self = hdf_get_value(global_cgi->hdf, "Query.from", "");
   if(strlen(self) >0 && strcmp(self, "self") == 0)
   {
     validate_server_key(key,&user);      /* shared_util.c */  
     cs_set_int_value("from_faculty", 1);
   }
   else
   { 
       validate_super_key(key, &user);
       set_admin_page(&user, key, 0, "super_new_course_form"); /* shared_super_main_menu.c */
   }
   
   /* parse the xml file into a linked list */
   xml_info_list = parse_xml_file(roster_path);   /* parse xml file  shared_xml_course_create_util.c */

   /* incorporate any directory name changes made by the user into the xml_info_list */
   update_xml_info_list(xml_info_list, directory_name_head);         /* add correct course type and internal name to list */
   
   /* no longer need the list of directory names - free it */
   free_directory_name_list(directory_name_head);
   
   
   /* make sure the directory names provided are reasonable */
   check_internal_course_names(xml_info_list);   /* shared_xml_course_create_util.c */
   

   set_back_url(key);
  
   /* only one admin can create a course at a time */
   get_new_course_lock();    /* shared_new_course_lock.c */
   
   
   /* start list with normal and template courses
   ** and only teacher info 
   */
   course_head = build_normal_template_course_list(xml_info_list);   
   
 
   if(course_head)
   {
      index_list = (INDEX_USER_LIST *)malloc(sizeof(INDEX_USER_LIST));   
      index_list->current =0;
      index_list->head =0;
      index_list = build_index_user_list(index_list);     /* shared_user_index.c */
      index_list = derive_teacher_username_password(course_head,index_list);
      
      course_head =create_course_with_teachers(course_head); /* shared_xml_course_create_util.c */
      
      user_list = build_user_list(xml_info_list);    /* list contains all students, with their courses */
      
      
      if(user_list)
       {
          index_list=derive_student_username_password(user_list,index_list); /* shared_xml_course_create_util.c */
          course_head = add_students_to_courses(course_head, user_list);     /* shared_xml_course_create_util.c */
          course_head = write_students_to_password_file(course_head);        /* shared_xml_course_create_util.c */
          if(global_new_central_user_count >0) 
	      reindex_users("../users");     /* shared_user_index.c */
          set_course_table(course_head, "ctr");                              /* shared_xml_course_create_util.c */
	  write_add_drop_list(course_head);                                  /* shared_xml_course_create_util.c */
     } 
   }
     
     
     
   if(standalone)
    standalone_course = standalone_course_list(xml_info_list);       /* shared_xml_course_create_util.c */
   if(standalone_course)
   {
        update_standalone_username(standalone_course);               /* shared_xml_course_create_util.c */
        create_course_with_teachers(standalone_course);              /* shared_xml_course_create_util.c */
        create_standalone_with_students(standalone_course);          /* shared_xml_course_create_util.c */
        write_students_to_password_file(standalone_course);          /* shared_xml_course_create_util.c */
        set_course_table(standalone_course, "std");                  /* shared_xml_course_create_util.c */
   }


   free_xml_data_list(xml_info_list);
   if(index_list)
     free_index_user_list(index_list);     /* shared_user_index.c */
   if(course_head)
     free_course_f_list(course_head);     /* shared_xml_course_create_util.c */
   if(standalone_course)
     free_course_f_list(standalone_course);   /* shared_xml_course_create_util.c */
   if(user_list)
     free_user_group_info_list(user_list);    /* shared_xml_course_create_util.c */
     
   free_new_course_lock();   /* shared_new_course_lock.c */  

  if(!is_auto_update_file(roster_path))
   unlink(roster_path);
   cs_cgi_display("super_xml_course_create", 1);
   cs_cgi_destroy(); 
   return 0;
}
    



	       
