--- /dev/null
+require 'pg'
+
+require 'common/roundcube_plugin'
+require 'rm/rm_plugin'
+
+class RoundcubeRm
+
+ include RoundcubePlugin
+ include RmPlugin
+
+ def delete_account(account)
+ # Delete the given username and any records in other tables
+ # belonging to it.
+ raise NonexistentAccountError.new(account) if not user_exists(account)
+
+ user_id = self.get_user_id(account)
+
+ # The Roundcube developers were nice enough to include
+ # DBMS-specific install and upgrade scripts, so Postgres can take
+ # advantage of ON DELETE triggers. Here's an example:
+ #
+ # ...
+ # user_id integer NOT NULL
+ # REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE
+ #
+ # This query is of course necessary with any DBMS:
+ sql_queries = ['DELETE FROM users WHERE user_id = $1::int;']
+
+ begin
+ 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, [user_id])
+ end
+
+ connection.close()
+
+ rescue PGError => e
+ # Pretend like we're database-agnostic in case we ever are.
+ raise DatabaseError.new(e)
+ end
+
+ end
+
+end