Index: openacs-4/packages/calendar/tcl/calendar-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/tcl/calendar-procs.tcl,v diff -u -r1.25 -r1.26 --- openacs-4/packages/calendar/tcl/calendar-procs.tcl 6 May 2004 15:21:40 -0000 1.25 +++ openacs-4/packages/calendar/tcl/calendar-procs.tcl 13 Jun 2005 16:25:26 -0000 1.26 @@ -15,7 +15,98 @@ namespace eval calendar {} namespace eval calendar::notification {} +namespace eval calendar::merge { + ad_proc -callback MergeShowUserInfo -impl calendar { + -user_id:required + } { + Shows the calendar tables user info + } { + set msg "Calendars of user_id: $user_id" + set return_msg [list $msg] + + set cals [db_list get_calendars {*SQL*} ] + if { [empty_string_p $cals ] } { + lappend return_msg "none" + } else { + lappend return_msg $cals + } + + return $return_msg + } + ad_proc -callback MergePackageUser -impl calendar { + -from_user_id:required + -to_user_id:required + } { + Merge the calendars of two users. + The from_user_id is the user_id of the user + that will be deleted and all the calendar elements + of this user will be mapped to the to_user_id. + } { + set msg "Merging calendar" + ns_log Notice $msg + set return_msg [list $msg] + + set from_calendars [db_list_of_lists get_from_calendars {*SQL*} ] + db_transaction { + ns_log Notice " Entering to calendar transaction" + foreach calendar $from_calendars { + # l_* vars will represent + # each item of the from_user_id list of lists + set l_cal_id [lindex $calendar 0] + set l_pkg_id [lindex $calendar 1] + set l_cal_priv [lindex $calendar 2] + + # if the pkg_id of this cal_id is the + # the same for some to_user_id cal + # we have to delete it, else we must + # change the items from one cal to the other one + if { [db_string get_repeated_pkgs {*SQL*} ] } { + # We will move the cal items if the + # calendars are of the same type (package_id) + set to_cal_id [db_string gettocalid {*SQL*} ] + + db_dml calendar_items_upd { *SQL* } + + # ns_log Notice " Deleting calendar" + # TODO: calendar::delete -calendar_id $l_cal_i is broken + # so, we will delete directly from the calendars table + db_dml del_from_cal { *SQL* } + + } else { + ns_log notice " Working on calendar with permissions , executing permission::grant -object_id $l_cal_id -party_id $to_user_id -privilege $l_cal_priv" + + ns_log Notice " grant per to $to_user_id of $calendar" + + # grant the permissions + permission::grant -object_id $l_cal_id -party_id $to_user_id -privilege $l_cal_priv + + ns_log notice " Working on calendar with permissions, executing permission::revoke -object_id $l_cal_id -party_id $from_user_id -privilege $l_cal_priv" + # revoke the permissions + permission::revoke -object_id $l_cal_id -party_id $from_user_id -privilege $l_cal_priv + + ns_log Notice " Change owner of $calendar" + # change the owner + db_dml calendars_upd { *SQL* } + } + } + set msg " Calendar merge is done" + ns_log Notice $msg + lappend return_msg $msg + } + # I commented this section to avoid partial merges + # If something is wrong the merge should be stopped. + # on_error { + # set msg " I couldn't merge calendar. The error was $errmsg" + # ns_log Notice $msg + # lappend return_msg $msg + # } + return $return_msg + } +} + + + ad_proc calendar::make_datetime { event_date {event_time ""} Index: openacs-4/packages/calendar/tcl/calendar-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/tcl/calendar-procs.xql,v diff -u -r1.6 -r1.7 --- openacs-4/packages/calendar/tcl/calendar-procs.xql 10 Jan 2004 18:59:50 -0000 1.6 +++ openacs-4/packages/calendar/tcl/calendar-procs.xql 13 Jun 2005 16:25:26 -0000 1.7 @@ -1,85 +1,142 @@ - - - - - update calendars - set calendar_name = :calendar_name - where calendar_id = :calendar_id - - - - - + + + + + update calendars + set calendar_name = :calendar_name + where calendar_id = :calendar_id + + + + - select calendar_id - from calendars - where owner_id = :party_id - and private_p = 't' + select calendar_id + from calendars + where owner_id = :party_id + and private_p = 't' - - - + + + - select calendar_id - from calendars - where owner_id = :party_id - and private_p = 't' - and calendar_id in ([join $calendar_id_list ", "]) + select calendar_id + from calendars + where owner_id = :party_id + and private_p = 't' + and calendar_id in ([join $calendar_id_list ", "]) - + - - -select type, item_type_id from cal_item_types -where calendar_id= :calendar_id - - + + + select type, item_type_id from cal_item_types + where calendar_id= :calendar_id + + - - -insert into cal_item_types -(item_type_id, calendar_id, type) -values -(:item_type_id, :calendar_id, :type) - - + + + insert into cal_item_types + (item_type_id, calendar_id, type) + values + (:item_type_id, :calendar_id, :type) + + - - -update cal_items -set item_type_id= NULL -where item_type_id = :item_type_id -and on_which_calendar= :calendar_id - - + + + update cal_items + set item_type_id= NULL + where item_type_id = :item_type_id + and on_which_calendar= :calendar_id + + - - -delete from cal_item_types where item_type_id= :item_type_id -and calendar_id= :calendar_id - - + + + delete from cal_item_types where item_type_id= :item_type_id + and calendar_id= :calendar_id + + - - + + select calendar_name from calendars where calendar_id = :calendar_id; - - + + + + + select calendar_id, + calendar_name, + private_p, + owner_id, + package_id + from calendars + where calendar_id = :calendar_id + + - - - select calendar_id, - calendar_name, - private_p, - owner_id, - package_id - from calendars - where calendar_id = :calendar_id - - + + + select calendar_name + from calendars + where owner_id = :user_id + + - + + + select calendar_id,package_id + from calendars + where owner_id = :from_user_id + + + + + + select count(*) + from calendars + where owner_id = :to_user_id + and package_id = :l_pkg_id + + + + + + update calendars + set owner_id = :to_user_id + where owner_id = :from_user_id + and calendar_id = :l_cal_id + + + + + + select calendar_id + from calendars + where package_id = :l_pkg_id + and owner_id = :to_user_id + + + + + + update cal_items + set on_which_calendar = :to_cal_id + where on_which_calendar = :l_cal_id + + + + + + delete + from calendars + where calendar_id = :l_cal_id + + + + \ No newline at end of file