calendar-callback-procs.tcl

Does not contain a contract.

Location:
/packages/calendar/tcl/calendar-callback-procs.tcl

Related Files

[ hide source ] | [ make this the default ]

File Contents

ad_library {
    Callbacks for the calendar package.

    @author Dirk Gomez <openacs@dirkgomez.de>
    @creation-date 2005-06-12
    @cvs-id $Id: calendar-callback-procs.tcl,v 1.11 2018/08/24 10:54:55 antoniop Exp $
}

d_proc -callback merge::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 { $cals eq "" } {
        lappend return_msg "none"
    } else {
        lappend return_msg $cals
    }

    return $return_msg
}

d_proc -callback merge::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
            lassign $calendar l_cal_id l_pkg_id

            # if the pkg_id of this cal_id is
            # 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 "  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
}

# Local variables:
#    mode: tcl
#    tcl-indent-level: 4
#    indent-tabs-mode: nil
# End: