curriculum_sync

one of the documented procedures in this installation of the ACS
Usage:
curriculum_sync
What it does:
Looks at input cookie and looks in database. Returns a new cookie to write to the browser. Returns empty string if a new cookie isn't necessary. Inserts rows into the database if necessary. Assumes that there is a user logged in.
Defined in: /web/philip/tcl/curriculum.tcl

Source code:


    set user_id [ad_get_user_id]
    set cookie [ns_set get [ns_conn headers] Cookie]
    if ![regexp {CurriculumProgress=([^;]+)} $cookie {} input_cookie] {
	# we had no cookie
	set input_cookie [list]
    }
    # initialize
    set new_cookie $input_cookie
    set new_cookie_necessary_p 0
    set db [ns_db gethandle]
    set elts_from_database [database_to_tcl_list $db "select curriculum_element_id from user_curriculum_map where user_id = $user_id"]
    foreach dbelt $elts_from_database {
	if { [lsearch $input_cookie $dbelt] == -1 } {
	    set new_cookie_necessary_p 1
	    set new_cookie [curriculum_progress_cookie_value $new_cookie $dbelt]
	}
    }
    foreach cookie_elt $input_cookie {
	if { [lsearch $elts_from_database $cookie_elt] == -1 && ![regexp {[A-z]} $cookie_elt] } {
	    # cookie contains no alphabet chars
	    set dupe_free_insert_sql "insert into user_curriculum_map (user_id, curriculum_element_id, completion_date)
select $user_id, $cookie_elt, sysdate
from dual
where not exists (select 1 from user_curriculum_map 
                  where user_id = $user_id
                  and curriculum_element_id = $cookie_elt)"
            if [catch { ns_db dml $db $dupe_free_insert_sql } errmsg] {
		# we got an error, probably because there is garbage in the user's
		# cookie and/or the publisher has deleted one of the curriculum elements
		ns_log Notice "curriculum_sync got an error from the database.  The user's cookie coming in was \"$cookie\".  Here's what the RDBMS had to say:\n\n$errmsg"
	    }
	}
    }
    ns_db releasehandle $db 
    if { $new_cookie_necessary_p && ($new_cookie != $input_cookie) } {
	return $new_cookie
    } else {
	return ""
    }


philg@mit.edu