summaryrefslogtreecommitdiff
path: root/rt-liberation-multi.el
diff options
context:
space:
mode:
authorJohnathan Rabkin <yonirabkin@member.fsf.org>2013-12-13 15:14:45 -0500
committerJohnathan Rabkin <yonirabkin@member.fsf.org>2013-12-13 15:14:45 -0500
commit5de9af64f18301ca1943ed1e362255f050424fcd (patch)
treead35d76fe74696d092dba59b1d30f40ce95ab7a8 /rt-liberation-multi.el
import for initial Savannah tree
Diffstat (limited to 'rt-liberation-multi.el')
-rw-r--r--rt-liberation-multi.el113
1 files changed, 113 insertions, 0 deletions
diff --git a/rt-liberation-multi.el b/rt-liberation-multi.el
new file mode 100644
index 0000000..3e9c208
--- /dev/null
+++ b/rt-liberation-multi.el
@@ -0,0 +1,113 @@
+;;; rt-liberation-multi.el --- Free from RT
+
+;; Copyright (C) 2010 Yoni Rabkin
+;;
+;; Authors: Yoni Rabkin <yonirabkin@member.fsf.org>
+;;
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2 of the
+;; License, or (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public
+;; License along with this program; if not, write to the Free
+;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+;; MA 02111-1307, USA.
+
+;;; Code:
+
+(require 'rt-liberation)
+
+(defface rt-liber-marked-ticket-face
+ '((((class color) (background dark))
+ (:foreground "Red"))
+ (((class color) (background light))
+ (:foreground "Red"))
+ (((type tty) (class mono))
+ (:inverse-video t))
+ (t (:background "Red")))
+ "Face for marked tickets in browser buffer.")
+
+(defvar rt-liber-marked-tickets nil
+ "Marked tickets (becomes ticket-browser buffer local).")
+
+(defun rt-liber-ticket-marked-p (ticket)
+ "Return a truth value if TICKET is marked, otherwise NIL."
+ (let ((ticket-id (rt-liber-ticket-id-only ticket)))
+ (member ticket-id rt-liber-marked-tickets)))
+
+(defun rt-liber-mark-ticket-at-point ()
+ "Mark/unmark the ticket at point for future action."
+ (interactive)
+ (let ((ticket (get-text-property (point) 'rt-ticket)))
+ (if ticket
+ (let ((ticket-id (rt-liber-ticket-id-only ticket))
+ (inhibit-read-only t))
+ (set (make-local-variable 'rt-liber-marked-tickets)
+ (if (rt-liber-ticket-marked-p ticket)
+ (remove ticket-id rt-liber-marked-tickets)
+ (append (list ticket-id) rt-liber-marked-tickets)))
+ (let ((p (point)))
+ (rt-liber-ticketlist-browser-redraw
+ rt-liber-ticket-list
+ rt-liber-query)
+ (goto-char p)
+ (rt-liber-next-ticket-in-browser)
+ (recenter-top-bottom)))
+ (error "no ticket at point"))))
+
+(defun rt-liber-multi-set-status-open ()
+ "Set the status of all marked tickets to `open'."
+ (interactive)
+ (when (not rt-liber-marked-tickets)
+ (error "no marked tickets"))
+ (dolist (ticket-id rt-liber-marked-tickets)
+ (message "setting status for ticket #%s ..." ticket-id)
+ (rt-liber-command-set-status-open ticket-id)
+ (message "setting status for ticket #%s ...done" ticket-id))
+ (rt-liber-browser-refresh))
+
+(defun rt-liber-multi-set-status-resolved ()
+ "Set the status of all marked tickets to `resolve'."
+ (interactive)
+ (when (not rt-liber-marked-tickets)
+ (error "no marked tickets"))
+ (dolist (ticket-id rt-liber-marked-tickets)
+ ;; these are less for the user and more to leave a trail in the
+ ;; `*Messages*' buffer
+ (message "setting status for ticket #%s ..." ticket-id)
+ (rt-liber-command-set-status-resolved ticket-id))
+ (rt-liber-browser-refresh))
+
+(defun rt-liber-multi-assign (name)
+ "Assign marked tickets to a user NAME."
+ (interactive "sAssign to: ")
+ (when (not rt-liber-marked-tickets)
+ (error "no marked tickets"))
+ (dolist (ticket-id rt-liber-marked-tickets)
+ (message "setting status for ticket #%s ..." ticket-id)
+ (rt-liber-command-set-owner
+ ticket-id name))
+ (rt-liber-browser-refresh))
+
+(defun rt-liber-multi-flag-as-spam-and-delete ()
+ "Flag all marked tickets as spam, and delete them."
+ (interactive)
+ (when (not rt-liber-marked-tickets)
+ (error "no marked tickets"))
+ (dolist (ticket-id rt-liber-marked-tickets)
+ (rt-liber-command-set-cf
+ ticket-id
+ (rt-liber-command-get-custom-field-string
+ 'cf-is-spam) "yes")
+ (rt-liber-command-set-status-deleted ticket-id))
+ (rt-liber-browser-refresh))
+
+(provide 'rt-liberation-multi)
+
+;;; rt-liberation-multi.el ends here.