Index: openacs-4/packages/curriculum-central/catalog/curriculum-central.en_US.ISO-8859-1.xml =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/catalog/curriculum-central.en_US.ISO-8859-1.xml,v diff -u -r1.22 -r1.23 --- openacs-4/packages/curriculum-central/catalog/curriculum-central.en_US.ISO-8859-1.xml 4 Jan 2006 23:32:33 -0000 1.22 +++ openacs-4/packages/curriculum-central/catalog/curriculum-central.en_US.ISO-8859-1.xml 6 Jan 2006 04:50:18 -0000 1.23 @@ -2,6 +2,27 @@ <message_catalog package_key="curriculum-central" package_version="0.1d" locale="en_US" charset="ISO-8859-1"> <msg key="uos">UoS</msg> + <msg key="current_assessment_total">Current Assessment Total</msg> + <msg key="help_assess_method_ids">Select one or more assessment methods that are used in this Unit of Study. To select more than one item from the list, hold down the Shirt key whilst selecting an item. If an item doesn't appear in the list, then click <a href="assess-method-ae?return_url=%return_url%">here</a> to add it (Note: clicking on the link will redirect you to another page).</msg> + <msg key="assessment_methods">Assessment Methods</msg> + <msg key="help_enter_type_of_assess_method">Enter a name for the type of assessment.</msg> + <msg key="help_enter_assess_identifier">Enter an identifier to distinguish this assessment method from other assessment methods that you have created. Use something like GENERAL for generic methods, or the UoS code such as ELEC1000 for more specific assessment methods.</msg> + <msg key="help_enter_assess_description">Enter a description for this assessment method.</msg> + <msg key="help_enter_assess_weighting">The weighting of the assessment as a percentage. Enter a value between 0 and 100 inclusive.</msg> + <msg key="add_assess_method">Add Assessment Method</msg> + <msg key="no_assess_methods_created">No assessment methods have been created.</msg> + <msg key="add_assess_method_to_list">Add assessment method to list</msg> + <msg key="weighting">Weighting</msg> + <msg key="edit_assess_method">Edit Assessment Method</msg> + <msg key="add_assess_method">Add Assessment Method</msg> + <msg key="assess_methods">Assessment Methods</msg> + <msg key="assessment_and_schedule">Asessment and Schedule</msg> + <msg key="edit_assess_sched">Edit Assessment and Schedule</msg> + <msg key="edited_assess_sched">Edited Assessment and Schedule</msg> + <msg key="uos_assessment">Uos Assessment</msg> + <msg key="uos_assessments">Uos Assessments</msg> + <msg key="uos_assessment_revision">Uos Assessment Revision</msg> + <msg key="uos_assessment_revisions">Uos Assessment Revisions</msg> <msg key="no_graduate_attributes_created">No graduate attributes have been created</msg> <msg key="add_graduate_attribute_to_list">Add graduate attributes to the list.</msg> <msg key="help_graduate_attributes">Select one or more graduate attributes from the list that are associated with this Unit of Study. To select more than one item from the list, hold down the Shirt key whilst selecting an item. If an item doesn't appear in the list, then click <a href="gradattr-ae?return_url=%return_url%">here</a> to add it (Note: clicking on the link will redirect you to another page).</msg> Index: openacs-4/packages/curriculum-central/sql/postgresql/uos-assess-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/sql/postgresql/uos-assess-create.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/curriculum-central/sql/postgresql/uos-assess-create.sql 6 Jan 2006 04:50:18 -0000 1.1 @@ -0,0 +1,448 @@ +-- +-- packages/curriculum-central/sql/postgresql/uos-assess-create.sql +-- +-- @author Nick Carroll (nick.c@rroll.net) +-- @creation-date 2005-12-28 +-- @cvs-id $Id: uos-assess-create.sql,v 1.1 2006/01/06 04:50:18 ncarroll Exp $ +-- +-- + + +create function inline_0 () +returns integer as' +begin + PERFORM acs_object_type__create_type ( + ''cc_uos_assess'', -- object_type + ''#curriculum-central.uos_assessment#'', -- pretty_name + ''#curriculum-central.uos_assessments#'', -- pretty_plural + ''acs_object'', -- supertype + ''cc_uos_assess'', -- table_name + ''assess_id'', -- id_column + null, -- package_name + ''f'', -- abstract_p + null, -- type_extension_table + null -- name_method + ); + + return 0; +end;' language 'plpgsql'; + +select inline_0 (); +drop function inline_0 (); + + +-- Register UoS assessment as a child type of Uos. +select content_type__register_child_type ( + 'cc_uos', -- parent_type + 'cc_uos_assess', -- child_type + 'generic', -- relation_tag + 0, -- min_n + null -- max_n +); + + +-- content_item subtype +create table cc_uos_assess ( + assess_id integer + constraint cc_uos_assess_fk + references cr_items(item_id) + on delete cascade + constraint cc_uos_assess_pk + primary key, + parent_uos_id integer, + live_revision_id integer, + latest_revision_id integer +); + + +-- Create the UoS Assessment content_revision +-- A revision may point to many Assessment methods in the mapping +-- table below. +create table cc_uos_assess_revisions ( + assess_revision_id integer + constraint cc_uos_assess_rev_pk + primary key + constraint cc_uos_assess_rev_fk + references cr_revisions(revision_id) + on delete cascade +); + +-- Create the UoS revision content type. +select content_type__create_type ( + 'cc_uos_assess_revision', + 'content_revision', + '#curriculum-central.uos_assessment_revision#', + '#curriculum-central.uos_assessment_revisions#', + 'cc_uos_assess_revisions', + 'assess_revision_id', + 'content_revision.revision_name' +); + +-- Register uos_assess_revision as a child type of uos_revision. +select content_type__register_child_type ( + 'cc_uos_revision', -- parent_type + 'cc_uos_assess_revision', -- child_type + 'generic', -- relation_tag + 0, -- min_n + null -- max_n +); + +-- Create Assessment Methods object +create function inline_0 () +returns integer as ' +begin + PERFORM acs_object_type__create_type ( + ''cc_uos_assess_method'', -- object_type + ''#curriculum-central.assessment_method#'', -- pretty_name + ''#curriculum-central.assessment_methods#'', -- pretty_plural + ''acs_object'', -- supertype + ''cc_uos_assess_method'', -- table_name + ''assess_id'', -- id_column + null, -- package_name + ''f'', -- abstract_p + null, -- type_extension_table + ''cc_uos_assess_method__name'' -- name_method + ); + + return 0; +end;' language 'plpgsql'; + +select inline_0 (); +drop function inline_0 (); + +-- Create the table that will be used to store information about an +-- assessment method. Types of methods include exam, quiz, project, +-- online activities, etc. +create table cc_uos_assess_method ( + method_id integer + constraint cc_uos_assess_method_fk + references acs_objects(object_id) + constraint cc_uos_assess_method_pk + primary key, + name varchar(256), -- eg. Exam, Quiz, etc. + identifier varchar(256), -- for form multiselect. + description text, -- method description + weighting integer -- eg 10 (% added later) +); + +-- Create Mapping table between revision and assessment method. +-- A revision can refer to many assessment methods, since a +-- Unit of Study can have many multiple exams, quizzes, etc. +create table cc_uos_assess_method_map ( + assess_revision_id integer + constraint cc_uos_assess_method_map_rev_fk + references + cc_uos_assess_revisions(assess_revision_id), + method_id integer + constraint cc_uos_assess_method_map_meth_fk + references cc_uos_assess_method(method_id) +); + + +-- +-- +-- Create the functions for the assessment content item and revisions. +-- +-- + +select define_function_args('cc_uos_assess__new', 'assess_id,parent_uos_id,creation_user,creation_ip,context_id,item_subtype;cc_uos_assess,content_type;cc_uos_assess_revision,object_type,package_id'); + +create function cc_uos_assess__new( + integer, -- assess_id + integer, -- parent_uos_id + integer, -- creation_user + varchar, -- creation_ip + integer, -- context_id + varchar, -- item_subtype + varchar, -- content_type + varchar, -- object_type + integer -- package_id +) returns integer as' +declare + + p_assess_id alias for $1; + p_parent_uos_id alias for $2; + p_creation_user alias for $3; + p_creation_ip alias for $4; + p_context_id alias for $5; + p_item_subtype alias for $6; + p_content_type alias for $7; + p_object_type alias for $8; + p_package_id alias for $9; + + v_assess_id cc_uos_assess.assess_id%TYPE; + v_folder_id integer; + v_revision_id integer; + v_name varchar; + v_rel_id integer; +begin + -- get the content folder for this instance + select folder_id into v_folder_id + from cc_curriculum + where curriculum_id = p_package_id; + + -- Create a unique name + -- Can only have one assess per Unit of Study, so append uos_id + -- to "uos_assess_for_". + v_name := ''uos_assess_for_'' || p_parent_uos_id; + + -- create the content item + v_assess_id := content_item__new ( + v_name, -- name + v_folder_Id, -- parent_id + p_assess_id, -- item_id + null, -- locale + now(), -- creation_date + p_creation_user, -- creation_user + v_folder_id, -- context_id + p_creation_ip, -- creation_ip + p_item_subtype, -- item_subtype + p_content_type, -- content_type + null, -- title + null, -- description + null, -- mime_type + null, -- nls_language + null, -- data + p_package_id + ); + + -- create the initial revision + v_revision_id := cc_uos_assess_revision__new ( + null, -- assess_revision_id + v_assess_id, -- assess_id + now(), -- creation_date + p_creation_user, -- creation_user + p_creation_ip -- creation_ip + ); + + -- create the item type row + INSERT INTO cc_uos_assess (assess_id, parent_uos_id, + latest_revision_id) + VALUES (v_assess_id, p_parent_uos_id, v_revision_id); + + + -- associate the UoS assess with the parent UoS + v_rel_id := acs_object__new( + NULL, + ''cr_item_child_rel'', + current_timestamp, + p_creation_user, + p_creation_ip, + p_package_id + ); + + INSERT INTO cr_child_rels ( + rel_id, parent_id, child_id, relation_tag + ) VALUES ( + v_rel_id, p_parent_uos_id, v_assess_id, ''cc_uos_assess'' + ); + + return v_assess_id; + +end; +' language plpgsql; + + +select define_function_args('cc_uos_assess__delete', 'assess_id'); + +create function cc_uos_assess__delete (integer) +returns integer as ' +declare + p_assess_id alias for $1; +begin + + perform content_item__delete(p_assess_id); + + return 0; + +end; +' language 'plpgsql'; + + +create or replace function cc_uos_assess_revision__new ( + integer, -- assess_revision_id + integer, -- assess_id + timestamptz, -- creation_date + integer, -- creation_user + varchar -- creation_ip +) returns int +as ' +declare + p_assess_revision_id alias for $1; + p_assess_id alias for $2; + p_creation_date alias for $3; + p_creation_user alias for $4; + p_creation_ip alias for $5; + + v_revision_id integer; + v_title varchar; +begin + + -- create the initial revision + v_revision_id := content_revision__new ( + ''#curriculum-central.uos_assessment#'', -- title + null, -- description + current_timestamp, -- publish_date + null, -- mime_type + null, -- nls_language + null, -- new_data + p_assess_id, -- item_id + p_assess_revision_id, -- revision_id + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip -- creation_ip + ); + + -- insert into the uos-specific revision table + INSERT INTO cc_uos_assess_revisions (assess_revision_id) + VALUES (v_revision_id); + + -- Update the latest revision id in cc_uos_assess + UPDATE cc_uos_assess SET latest_revision_id = v_revision_id + WHERE assess_id = p_assess_id; + + return v_revision_id; +end; +' language 'plpgsql'; + + +-- +-- +-- Create the functions for the assessment method object. +-- +-- + +select define_function_args('cc_uos_assess_method__new','method_id,name,identifier,description,weighting,creation_date;now,creation_user,creation_ip,package_id,context_id'); + +create function cc_uos_assess_method__new ( + integer, -- method_id + varchar, -- name + varchar, -- identifier + text, -- description + integer, -- weighting + timestamptz, -- creation_date + integer, -- creation_user + varchar, -- creation_ip + integer, -- package_id + integer -- context_id +) returns integer as ' +declare + p_method_id alias for $1; -- default null + p_name alias for $2; + p_identifier alias for $3; + p_description alias for $4; + p_weighting alias for $5; + p_creation_date alias for $6; -- default now() + p_creation_user alias for $7; -- default null + p_creation_ip alias for $8; -- default null + p_package_id alias for $9; + p_context_id alias for $10; -- default null + + v_method_id cc_uos_assess_method.method_id%TYPE; + v_title varchar; +begin + v_title := p_name || '' ('' || p_identifier || '')''; + + v_method_id := acs_object__new ( + p_method_id, + ''cc_uos_assess_method'', + p_creation_date, + p_creation_user, + p_creation_ip, + p_context_id, + v_title, + p_package_id + ); + + INSERT INTO cc_uos_assess_method ( + method_id, name, identifier, description, weighting + ) + VALUES ( + v_method_id, p_name, p_identifier, p_description, p_weighting + ); + + return v_method_id; + +end;' language 'plpgsql'; + + +select define_function_args('cc_uos_assess_method__del','method_id'); + +create function cc_uos_assess_method__del (integer) +returns integer as ' +declare + p_method_id alias for $1; +begin + DELETE FROM acs_permissions WHERE object_id = p_method_id; + + DELETE FROM cc_uos_assess_method WHERE method_id = p_method_id; + + RAISE NOTICE ''Deleting assessment method...''; + PERFORM acs_object__delete(p_method_id); + + return 0; + +end;' language 'plpgsql'; + + +select define_function_args('cc_uos_assess_method__name','method_id'); + +create function cc_uos_assess_method__name (integer) +returns varchar as ' +declare + p_method_id alias for $1; + + v_method_name cc_uos_assess_method.name%TYPE; +begin + SELECT name INTO v_method_name + FROM cc_uos_assess_method + WHERE method_id = p_method_id; + + return v_method_name; +end; +' language 'plpgsql'; + + +-- +-- Maps a method to an assessment revision. +-- +create function cc_uos_assess_method__map ( + integer, -- assess_revision_id + integer -- method_id +) returns integer as ' +declare + p_assess_revision_id alias for $1; + p_method_id alias for $2; +begin + + RAISE NOTICE ''Mapping method to an assessment revision...''; + + INSERT INTO cc_uos_assess_method_map (assess_revision_id, method_id) + VALUES (p_assess_revision_id, p_method_id); + + return 0; +end; +' language 'plpgsql'; + + +-- +-- Unmaps a method to an assessment revision. +-- +create function cc_uos_assess_method__unmap ( + integer, -- assess_revision_id + integer -- method_id +) returns integer as ' +declare + p_assess_revision_id alias for $1; + p_method_id alias for $2; +begin + + RAISE NOTICE ''Deleting mapping between method and assess revision...''; + + DELETE FROM cc_uos_assess_method_map + WHERE assess_revision_id = p_assess_revision_id + AND method_id = p_method_id; + + return 0; +end; +' language 'plpgsql'; Index: openacs-4/packages/curriculum-central/sql/postgresql/uos-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/sql/postgresql/uos-create.sql,v diff -u -r1.8 -r1.9 --- openacs-4/packages/curriculum-central/sql/postgresql/uos-create.sql 4 Jan 2006 23:32:35 -0000 1.8 +++ openacs-4/packages/curriculum-central/sql/postgresql/uos-create.sql 6 Jan 2006 04:50:18 -0000 1.9 @@ -317,3 +317,6 @@ -- UoS Graduate Attributes \i uos-gradattr-create.sql + +-- UoS Assessment Methods +\i uos-assess-create.sql Index: openacs-4/packages/curriculum-central/tcl/curriculum-central-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/tcl/curriculum-central-procs.tcl,v diff -u -r1.7 -r1.8 --- openacs-4/packages/curriculum-central/tcl/curriculum-central-procs.tcl 4 Jan 2006 23:32:35 -0000 1.7 +++ openacs-4/packages/curriculum-central/tcl/curriculum-central-procs.tcl 6 Jan 2006 04:50:18 -0000 1.8 @@ -55,6 +55,11 @@ -content_type "cc_uos_gradattr_set_rev" \ -include_subtypes "t" + content::folder::register_content_type \ + -folder_id $folder_id \ + -content_type "cc_uos_assess_revision" \ + -include_subtypes "t" + set keyword_id [content::keyword::new -heading "$instance_name"] # Inserts into cc_curriculum Index: openacs-4/packages/curriculum-central/tcl/uos-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/tcl/uos-procs-postgresql.xql,v diff -u -r1.11 -r1.12 --- openacs-4/packages/curriculum-central/tcl/uos-procs-postgresql.xql 4 Jan 2006 23:32:35 -0000 1.11 +++ openacs-4/packages/curriculum-central/tcl/uos-procs-postgresql.xql 6 Jan 2006 04:50:18 -0000 1.12 @@ -65,6 +65,24 @@ </querytext> </fullquery> + <fullquery name="curriculum_central::uos::get_assessment.latest_assess"> + <querytext> + SELECT a.assess_id, a.latest_revision_id + FROM cc_uos u, cc_uos_revisions r, cr_items i, cc_uos_assess a + WHERE u.uos_id = :uos_id + AND i.item_id = u.uos_id + AND r.uos_revision_id = i.latest_revision + AND a.parent_uos_id = :uos_id + </querytext> + </fullquery> + + <fullquery name="curriculum_central::uos::get_assessment.latest_assess_method_ids"> + <querytext> + SELECT method_id FROM cc_uos_assess_method_map + WHERE assess_revision_id = :latest_revision_id + </querytext> + </fullquery> + <fullquery name="curriculum_central::uos::get_tl.latest_tl_method_ids"> <querytext> SELECT method_id FROM cc_uos_tl_method_map @@ -185,6 +203,18 @@ </querytext> </fullquery> + <fullquery name="curriculum_central::uos::update_assess.update_assess"> + <querytext> + SELECT cc_uos_assess_revision__new ( + null, + :assess_id, + now(), + :user_id, + :creation_ip + ); + </querytext> + </fullquery> + <fullquery name="curriculum_central::uos::update_graduate_attributes.update_ga"> <querytext> SELECT cc_uos_gradattr_set_rev__new ( @@ -224,6 +254,15 @@ </querytext> </fullquery> + <fullquery name="curriculum_central::uos::update_assess.map_assess_to_revision"> + <querytext> + SELECT cc_uos_assess_method__map ( + :revision_id, + :assess_method_id + ); + </querytext> + </fullquery> + <fullquery name="curriculum_central::uos::update_graduate_attributes.map_ga_to_revision"> <querytext> SELECT cc_uos_gradattr__map ( @@ -253,6 +292,16 @@ </querytext> </fullquery> + <fullquery name="curriculum_central::uos::assess_method_get_options.assess_methods"> + <querytext> + SELECT m.name || ' (' || m.identifier || '): ' || m.weighting || '%' + AS method_name, m.method_id + FROM cc_uos_assess_method m, acs_objects o + WHERE o.object_id = m.method_id + AND o.package_id = :package_id + </querytext> + </fullquery> + <fullquery name="curriculum_central::uos::go_live::do_side_effect.get_latest_revision"> <querytext> SELECT latest_revision FROM cr_items WHERE item_id = :object_id @@ -279,6 +328,16 @@ </querytext> </fullquery> + <fullquery name="curriculum_central::uos::go_live::do_side_effect.get_latest_assess_revision"> + <querytext> + SELECT i.latest_revision AS latest_assess_revision + FROM cr_items i, cr_child_rels c + WHERE c.relation_tag = 'cc_uos_assess' + AND c.parent_id = :object_id + AND i.item_id = c.child_id + </querytext> + </fullquery> + <fullquery name="curriculum_central::uos::go_live::do_side_effect.get_latest_ga_revision"> <querytext> SELECT i.latest_revision AS latest_ga_revision @@ -320,6 +379,13 @@ </querytext> </fullquery> + <fullquery name="curriculum_central::uos::go_live::do_side_effect.set_live_assess_revision"> + <querytext> + UPDATE cc_uos_assess SET live_revision_id = :latest_assess_revision + WHERE parent_uos_id = :object_id + </querytext> + </fullquery> + <fullquery name="curriculum_central::uos::go_live::do_side_effect.set_live_ga_revision"> <querytext> UPDATE cc_uos_gradattr_set SET live_revision_id = :latest_ga_revision @@ -346,4 +412,16 @@ </querytext> </partialquery> + <partialquery name="curriculum_central::uos::get_assessment_total.latest_assess_total"> + <querytext> + SELECT sum(weighting) + FROM cc_uos_assess a, + cc_uos_assess_method_map map, + cc_uos_assess_method meth + WHERE a.assess_id = :assess_id + AND map.assess_revision_id = a.latest_revision_id + AND map.method_id = meth.method_id + </querytext> + </partialquery> + </queryset> Index: openacs-4/packages/curriculum-central/tcl/uos-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/tcl/uos-procs.tcl,v diff -u -r1.15 -r1.16 --- openacs-4/packages/curriculum-central/tcl/uos-procs.tcl 4 Jan 2006 23:32:35 -0000 1.15 +++ openacs-4/packages/curriculum-central/tcl/uos-procs.tcl 6 Jan 2006 04:50:18 -0000 1.16 @@ -147,6 +147,20 @@ } assigned_states { open } } + edit_assess { + pretty_name "#curriculum-central.edit_assess_sched#" + pretty_past_tense "#curriculum-central.edited_assess_sched#" + allowed_roles { + stream_coordinator + unit_coordinator + lecturer + } + privileges { write } + edit_fields { + assess_method_ids + } + assigned_states { open } + } submit { pretty_name "#curriculum-central.submit#" pretty_past_tense "#curriculum-central.submitted#" @@ -414,6 +428,13 @@ [list object_type "cc_uos_workload"]] \ "cc_uos_workload"] + # Initiate cc_uos_assess + set assess_id [package_instantiate_object \ + -var_list [list [list parent_uos_id $uos_id] \ + [list package_id $package_id] \ + [list object_type "cc_uos_assess"]] \ + "cc_uos_assess"] + return $uos_id } @@ -713,6 +734,47 @@ } +ad_proc -public curriculum_central::uos::update_assess { + -assess_id:required + -assess_method_ids + {-user_id ""} + {-creation_ip ""} +} { + Updates the assessment component for a Unit of Study. + This update proc creates a new assessment revision. + + @param assess_id The ID of the assessment object to update. + @param assess_method_ids List of IDs that need to be mapped to the set + of assessment methods. + @param user_id The ID of the user that updated the Unit of Study. + @param creation_ip The IP of the user that made the update. + + @return revision_id Returns the ID of the newly created revision for + convenience, otherwise the empty string if unsuccessful. +} { + if { $user_id eq "" } { + set user_id [ad_conn user_id] + } + if { $creation_ip eq "" } { + set creation_ip [ad_conn peeraddr] + } + + # Set the default value for revision_id. + set revision_id "" + db_transaction { + set revision_id [db_exec_plsql update_assess {}] + + # Foreach assess_method_id map to the newly created revision_id + # retrieved above. + foreach assess_method_id $assess_method_ids { + db_exec_plsql map_assess_to_revision {} + } + } + + return $revision_id +} + + ad_proc -public curriculum_central::uos::get_details { {-uos_id:required} {-array:required} @@ -835,6 +897,37 @@ } +ad_proc -public curriculum_central::uos::get_assessment { + {-uos_id:required} + {-array:required} +} { + Get the assessment info for a Unit of Study. + + @param uos_id The ID of the Unit of Study for which we return + assessment info for. + @param array A predefined array for returning fields in. Values include + assess_id, assess_method_ids, latest_revision_id. + + @return Array containing all valid fields for the cc_uos_assess table. +} { + # Select the info into the upvar'ed Tcl array + upvar $array row + + if { ![db_0or1row latest_assess {} -column_array row] } { + # Set default values + set row(assess_id) "" + set row(latest_revision_id) "" + } + + if { $row(latest_revision_id) ne "" } { + set latest_revision_id $row(latest_revision_id) + set row(assess_method_ids) [db_list latest_assess_method_ids {}] + } else { + set row(assess_method_ids) "" + } +} + + ad_proc curriculum_central::uos::tl_method_get_options { {-package_id ""} } { @@ -870,6 +963,23 @@ } +ad_proc curriculum_central::uos::assess_method_get_options { + {-package_id ""} +} { + Returns a two-column list of registered assessment methods. + + @return Returns a two-column list of registered assessment methods. +} { + if { $package_id eq ""} { + set package_id [ad_conn package_id] + } + + set method_list [db_list_of_lists assess_methods {}] + + return $method_list +} + + ##### # # UoS Pending @@ -1076,4 +1186,37 @@ db_1row get_latest_workload_revision {} content::item::set_live_revision -revision_id $latest_workload_revision db_dml set_live_workload_revision {} + + # Do the same for cc_uos_assess + db_1row get_latest_assess_revision {} + content::item::set_live_revision -revision_id $latest_assess_revision + db_dml set_live_assess_revision {} } + + +##### +# +# Utility procs +# +##### + +ad_proc -public curriculum_central::uos::get_assessment_total { + {-assess_id:required} +} { + Get the current assessment weighting total for the given assessment group. + + @param assess_id The ID for an assessment group. + + @return Returns the sum of all assessment weightings for a given + assessment group identified by the assess_id in table cc_uos_assess. + If the result is an empty string, then 0 is returned. +} { + set total [db_string latest_assess_total {} -default ""] + + # Return 0 if there is an empty result. + if { $total eq ""} { + return 0 + } + + return $total +} \ No newline at end of file Index: openacs-4/packages/curriculum-central/www/coordinate/assess-method-ae-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/www/coordinate/assess-method-ae-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/curriculum-central/www/coordinate/assess-method-ae-postgresql.xql 6 Jan 2006 04:50:18 -0000 1.1 @@ -0,0 +1,27 @@ +<?xml version="1.0"?> + +<queryset> + <rdbms><type>postgresql</type><version>7.4</version></rdbms> + + <fullquery name="assess_method_update"> + <querytext> + UPDATE cc_uos_assess_method + SET name = :name, + identifier = :identifier, + description = :description, + weighting = :weighting + WHERE method_id = :method_id + </querytext> + </fullquery> + + <fullquery name="object_update"> + <querytext> + UPDATE acs_objects + SET modifying_user = :modifying_user, + modifying_ip = :modifying_ip, + package_id = :package_id + WHERE object_id = :method_id + </querytext> + </fullquery> + +</queryset> Index: openacs-4/packages/curriculum-central/www/coordinate/assess-method-ae.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/www/coordinate/assess-method-ae.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/curriculum-central/www/coordinate/assess-method-ae.adp 6 Jan 2006 04:50:18 -0000 1.1 @@ -0,0 +1,6 @@ +<master> +<property name="title">@page_title;noquote@</property> +<property name="context">@context;noquote@</property> +<property name="focus">assess_method.name</property> + +<formtemplate id="assess_method"></formtemplate> \ No newline at end of file Index: openacs-4/packages/curriculum-central/www/coordinate/assess-method-ae.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/www/coordinate/assess-method-ae.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/curriculum-central/www/coordinate/assess-method-ae.tcl 6 Jan 2006 04:50:18 -0000 1.1 @@ -0,0 +1,68 @@ +ad_page_contract { + Add/Edit an assessment method. + + @author Nick Carroll (nick.c@rroll.net) + @creation-date 2006-01-04 + @cvs-id $Id: assess-method-ae.tcl,v 1.1 2006/01/06 04:50:18 ncarroll Exp $ +} { + method_id:integer,optional + {return_url "assess-methods"} +} + +auth::require_login + +if { [info exists method_id] } { + set page_title [_ curriculum-central.edit_assess_method] +} else { + set page_title [_ curriculum-central.add_assess_method] +} + +set context [list $page_title] +set package_id [ad_conn package_id] + +ad_form -name assess_method -cancel_url $return_url -form { + {method_id:key(acs_object_id_seq)} + {return_url:text(hidden) {value $return_url}} + {name:text + {html {size 25}} + {label "[_ curriculum-central.name]" } + {help_text "[_ curriculum-central.help_enter_type_of_assess_method]"} + } + {identifier:text + {html {size 25}} + {label "[_ curriculum-central.identifier]" } + {help_text "[_ curriculum-central.help_enter_assess_identifier]"} + } + {description:text(textarea) + {html {cols 40 rows 10}} + {label "[_ curriculum-central.description]" } + {help_text "[_ curriculum-central.help_enter_assess_description]"} + } + {weighting:integer + {html {size 3}} + {label "[_ curriculum-central.weighting]" } + {help_text "[_ curriculum-central.help_enter_assess_weighting]"} + } +} -select_query { + SELECT name, identifier, description, weighting + FROM cc_uos_assess_method WHERE method_id = :method_id +} -new_data { + package_instantiate_object \ + -var_list [list [list package_id $package_id] \ + [list object_type cc_uos_assess_method] \ + [list name $name] \ + [list identifier $identifier] \ + [list description $description] \ + [list weighting $weighting]] \ + -form_id assess_method cc_uos_assess_method + +} -edit_data { + set modifying_user [ad_conn user_id] + set modifying_ip [ad_conn peeraddr] + + db_dml assess_method_update {} + db_dml object_update {} +} -after_submit { + ad_returnredirect $return_url + ad_script_abort +} Index: openacs-4/packages/curriculum-central/www/coordinate/assess-methods-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/www/coordinate/assess-methods-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/curriculum-central/www/coordinate/assess-methods-postgresql.xql 6 Jan 2006 04:50:18 -0000 1.1 @@ -0,0 +1,16 @@ +<?xml version="1.0"?> + +<queryset> + <rdbms><type>postgresql</type><version>7.4</version></rdbms> + + <fullquery name="get_methods"> + <querytext> + SELECT m.method_id, m.name, m.identifier, m.description, m.weighting + FROM cc_uos_assess_method m, acs_objects o + WHERE package_id = :package_id + AND m.method_id = o.object_id + [template::list::orderby_clause -orderby -name "methods"] + </querytext> + </fullquery> + +</queryset> Index: openacs-4/packages/curriculum-central/www/coordinate/assess-methods.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/www/coordinate/assess-methods.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/curriculum-central/www/coordinate/assess-methods.adp 6 Jan 2006 04:50:18 -0000 1.1 @@ -0,0 +1,5 @@ +<master> +<property name="title">@page_title;noquote@</property> +<property name="context">@context;noquote@</property> + +<listtemplate name="methods"></listtemplate> Index: openacs-4/packages/curriculum-central/www/coordinate/assess-methods.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/www/coordinate/assess-methods.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/curriculum-central/www/coordinate/assess-methods.tcl 6 Jan 2006 04:50:18 -0000 1.1 @@ -0,0 +1,51 @@ +ad_page_contract { + Page for listing assessment methods. + + @author Nick Carroll (nick.c@rroll.net) + @creation-date 2006-01-04 + @cvs-id $Id: assess-methods.tcl,v 1.1 2006/01/06 04:50:18 ncarroll Exp $ +} { + {orderby "name,asc"} +} + +set page_title "[_ curriculum-central.assess_methods]" +set context [list [list . [_ curriculum-central.coordinate]] $page_title] +set package_id [ad_conn package_id] + +set elements { + edit { + sub_class narrow + display_template { + <img src="/shared/images/Edit16.gif" height="16" width="16" border="0"> + } + link_url_eval {[export_vars -base assess-method-ae { method_id }]} + link_html {title "#curriculum-central.edit_assess_method#"} + } + name { + label "#curriculum-central.name#" + } + identifier { + label "#curriculum-central.identifier#" + } + description { + label "#curriculum-central.description#" + } + weighting { + label "#curriculum-central.weighting#" + } +} + +template::list::create \ + -name methods \ + -actions [list "#curriculum-central.add_assess_method#" [export_vars -base assess-method-ae {}] "#curriculum-central.add_assess_method_to_list#"] \ + -multirow methods \ + -no_data "#curriculum-central.no_assess_methods_created#" \ + -elements $elements \ + -orderby { + name {orderby {lower(name)}} + identifier {orderby {lower(identifier)}} + } + +db_multirow methods get_methods {} + +ad_return_template Index: openacs-4/packages/curriculum-central/www/coordinate/uos-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/curriculum-central/www/coordinate/uos-edit.tcl,v diff -u -r1.9 -r1.10 --- openacs-4/packages/curriculum-central/www/coordinate/uos-edit.tcl 4 Jan 2006 23:32:36 -0000 1.9 +++ openacs-4/packages/curriculum-central/www/coordinate/uos-edit.tcl 6 Jan 2006 04:50:18 -0000 1.10 @@ -254,6 +254,36 @@ } +# Add assessment and schedule section. +template::form::section uos [_ curriculum-central.assessment_and_schedule] + +# TODO: Work on the following assessment section. +# Retrieve assessment info for Unit of Study. +curriculum_central::uos::get_assessment \ + -uos_id $uos_id \ + -array uos_assess + +# Add widgets for Assessment +ad_form -extend -name uos -form { + {assess_id:integer(hidden),optional + {value $uos_assess(assess_id)} + } + {assess_method_ids:text(multiselect),multiple,optional + {label "[_ curriculum-central.assessment_methods]"} + {options [curriculum_central::uos::assess_method_get_options]} + {html {size 5}} + {values $uos_assess(assess_method_ids)} + {mode display} + {help_text "[_ curriculum-central.help_assess_method_ids]"} + } + {assess_total:text(inform) + {label "[_ curriculum-central.current_assessment_total]"} + {value "[curriculum_central::uos::get_assessment_total -assess_id $uos_assess(assess_id)]%"} + {mode display} + } +} + + # Add history section template::form::section uos [_ curriculum-central.history] @@ -342,6 +372,13 @@ -expected_feedback $expected_feedback \ -student_feedback $student_feedback \ -assumed_concepts $assumed_concepts + + } elseif { $action_info(short_name) eq "edit_assess" } { + + curriculum_central::uos::update_assess \ + -assess_id $assess_id \ + -assess_method_ids $assess_method_ids + } # Do a general edit update.