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