require 'pg' require 'common/davical_plugin' require 'rm/rm_plugin' class DavicalMv # # DAViCal only supports Postgres, so even if we ever are # database-agnostic, this plugin can't be. # include DavicalPlugin include MvPlugin def mv_user(src, dst) # Switch the given usernames. DAViCal uses foreign keys properly # and only supports postgres, so we let the ON UPDATE CASCADE # trigger handle most of the work. # It's obviously an error if the source user does not exist. It # would also be an error if the destination domain didn't exist; # however, DAViCal doesn't know about domains, so we let that slide. raise NonexistentUserError.new(src.to_s()) if not user_exists(src) # And it's an error if the destination user exists already. raise UserAlreadyExistsError.new(dst.to_s()) if user_exists(dst) sql_queries = ['UPDATE usr SET username = $1 WHERE username = $2'] connection = PGconn.connect(@db_host, @db_port, @db_opts, @db_tty, @db_name, @db_user, @db_pass) sql_queries.each do |sql_query| connection.query(sql_query, [dst.to_s(), src.to_s()]) end connection.close() end end