summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rt-liberation-rest.el10
-rw-r--r--rt-liberation.el38
2 files changed, 36 insertions, 12 deletions
diff --git a/rt-liberation-rest.el b/rt-liberation-rest.el
index af8c1a5..dec5b57 100644
--- a/rt-liberation-rest.el
+++ b/rt-liberation-rest.el
@@ -244,6 +244,7 @@
(defun rt-liber-rest-edit-runner (ticket-id field value)
"Run edit comment to set FIELD to VALUE."
(message "started edit command at %s..." (current-time-string))
+ (message "ticket #%s, %s <- %s" ticket-id field value)
(let ((request-data
(format "content=%s: %s"
(url-hexify-string field)
@@ -260,7 +261,14 @@
rt-liber-rest-username
rt-liber-rest-password)))
(rt-liber-rest-handle-response response-buffer)))
- (message "command ended at %s" (current-time-string)))
+ (message "edit command ended at %s" (current-time-string)))
+
+(defun rt-liber-rest-command-set-status (id status)
+ "Set ticket ID status to be STATUS."
+ (let ((field (rt-liber-get-field-string 'status)))
+ (rt-liber-parse-answer
+ (rt-liber-rest-edit-runner id field status)
+ 'rt-liber-command-runner-parser-f)))
(provide 'rt-liberation-rest)
diff --git a/rt-liberation.el b/rt-liberation.el
index a266123..849dec2 100644
--- a/rt-liberation.el
+++ b/rt-liberation.el
@@ -181,7 +181,8 @@ specific strings which would produce the desired effect in the
server.")
(defvar rt-liber-field-dictionary
- '((owner . "Owner"))
+ '((owner . "Owner")
+ (status . "Status"))
"Mapping between field symbols and RT field strings.
The field symbols provide the programmer with a consistent way of
@@ -190,7 +191,8 @@ referring to RT fields.")
(defvar rt-liber-status-dictionary
'((deleted . "deleted")
(resolved . "resolved")
- (open . "open"))
+ (open . "open")
+ (new . "new"))
"Mapping between status symbols and status strings.
The status symbols provide the programmer with a consistent way
@@ -550,13 +552,14 @@ AFTER date after predicate."
(defun rt-liber-get-field-string (field-symbol)
(when (not field-symbol)
(error "null field symbol"))
+ (cdr (assoc field-symbol rt-liber-field-dictionary)))
- (defun rt-liber-ticket-owner-only (ticket-alist)
- "Return the string value of the ticket owner."
- (when (not ticket-alist)
- (error "null ticket-alist"))
- (cdr (assoc (rt-liber-get-field-string 'owner))
- ticket-alist)))
+(defun rt-liber-ticket-owner-only (ticket-alist)
+ "Return the string value of the ticket owner."
+ (when (not ticket-alist)
+ (error "null ticket-alist"))
+ (cdr (assoc (rt-liber-get-field-string 'owner)
+ ticket-alist)))
(defun rt-liber-viewer-visit-in-browser ()
"Visit this ticket in the RT Web interface."
@@ -1147,6 +1150,7 @@ string then that will be the name of the new buffer."
(define-key map (kbd "a") 'rt-liber-browser-assign)
(define-key map (kbd "r") 'rt-liber-browser-resolve)
(define-key map (kbd "o") 'rt-liber-browser-open)
+ (define-key map (kbd "N") 'rt-liber-browser-new)
(define-key map (kbd "t") 'rt-liber-browser-take-ticket-at-point)
(define-key map (kbd "A") 'rt-liber-browser-ancillary-text)
(define-key map (kbd "SPC") 'scroll-up)
@@ -1316,17 +1320,22 @@ If FIELD already exists, update to VALUE."
(defun rt-liber-command-set-status-deleted (id)
"Set the status of ticket ID to `deleted'."
- (rt-liber-command-set-status
+ (rt-liber-rest-command-set-status
id (rt-liber-command-get-status-string 'deleted)))
+(defun rt-liber-command-set-status-new (id)
+ "Set the status of ticket ID to `new'."
+ (rt-liber-rest-command-set-status
+ id (rt-liber-command-get-status-string 'new)))
+
(defun rt-liber-command-set-status-resolved (id)
"Set the status of ticket ID to `resolved'."
- (rt-liber-command-set-status
+ (rt-liber-rest-command-set-status
id (rt-liber-command-get-status-string 'resolved)))
(defun rt-liber-command-set-status-open (id)
"Set the status of ticket ID to `open'."
- (rt-liber-command-set-status
+ (rt-liber-rest-command-set-status
id (rt-liber-command-get-status-string 'open)))
;; This is brittle because the server doesn't respond with a code but
@@ -1394,6 +1403,13 @@ If FIELD already exists, update to VALUE."
(rt-liber-browser-ticket-id-at-point))
(rt-liber-browser-refresh-and-return))
+(defun rt-liber-browser-new ()
+ "Change the current ticket's status to `new'."
+ (interactive)
+ (rt-liber-command-set-status-new
+ (rt-liber-browser-ticket-id-at-point))
+ (rt-liber-browser-refresh-and-return))
+
(defun rt-liber-browser-move (queue)
"Move the current ticket to a different queue."
(interactive "sQueue: ")