summaryrefslogtreecommitdiff
path: root/help/app
diff options
context:
space:
mode:
Diffstat (limited to 'help/app')
-rw-r--r--help/app/models/ticket.rb59
-rw-r--r--help/app/models/ticket_comment.rb33
2 files changed, 92 insertions, 0 deletions
diff --git a/help/app/models/ticket.rb b/help/app/models/ticket.rb
new file mode 100644
index 0000000..8a282b5
--- /dev/null
+++ b/help/app/models/ticket.rb
@@ -0,0 +1,59 @@
+class Ticket < CouchRest::Model::Base
+ #include ActiveModel::Validations
+
+ use_database "tickets"
+ require 'securerandom'
+=begin
+ title
+ created_at
+ updated_at
+ email_address
+ user
+ user_verified?
+ admins (list of admins who have commented on the ticket)
+ code (secret url)
+=end
+
+ #belongs_to :user #from leap_web_users. doesn't necessarily belong to a user though
+ property :created_by, Integer #nil unless user was authenticated for ticket creation, #THIS should not be changed after being set
+ property :regarding_user, Integer # form cannot be submitted if they type in a username w/out corresponding ID. this field can be nil. for authenticated ticket creation by non-admins, should this just automatically be set to be same as created_by? or maybe we don't use this field unless created_by is nil?
+ #also, both created_by and regarding_user could be nil---say user forgets username, or has general question
+ property :title, String
+ property :email, String #verify
+
+ #property :user_verified, TrueClass, :default => false #will be true exactly when user is set
+ #admins
+ property :code, String, :protected => true # only should be set if created_by is nil
+ property :comments, [TicketComment]
+
+ timestamps!
+
+ before_validation :set_code, :on => :create
+
+ design do
+ view :by_title
+ end
+
+
+ validates :email, :format => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/, :if => :email #email address is optional
+
+ #set created_by to be current_user
+
+ def is_creator_validated?
+ !!created_by
+ end
+
+ def set_code
+ # ruby 1.9 provides url-safe option---this is not necessarily url-safe
+ self.code = SecureRandom.hex(8) if !is_creator_validated?
+ end
+
+
+=begin
+ def validate
+ if email_address and not email_address.strip =~ RFC822::EmailAddress
+ errors.add 'email', 'contains an invalid address'
+ end
+ end
+=end
+end
diff --git a/help/app/models/ticket_comment.rb b/help/app/models/ticket_comment.rb
new file mode 100644
index 0000000..1e23136
--- /dev/null
+++ b/help/app/models/ticket_comment.rb
@@ -0,0 +1,33 @@
+class TicketComment < CouchRest::Model::Base #?? do we want this to be a base model?
+ include CouchRest::Model::Embeddable
+
+ #use_database "ticket_comments"
+
+ #belongs_to :ticket #is this best way to do it? will want to access all of a tickets comments, so maybe this isn't the way?
+ property :posted_by, Integer, :protected => true# maybe this should be current_user if that is set, meaning the user is logged in #String # user??
+ # if the current user is not set, then we could just say the comment comes from an 'unauthenticated user', which would be somebody with the secret URL
+ property :posted_at, Time, :protected => true
+ #property :posted_verified, TrueClass, :protected => true #should be true if current_user is set when the comment is created
+ property :body, String
+
+ before_validation :set_time, :set_posted_by, :on => :create # hmm, this requires object to be validated for these methods to be called, but if this is only embeddedable (which might be best), then not clear how to do this without manually validating.
+
+ #design do
+ # view :by_posted_at
+ # view :by_body
+ #end
+
+ def is_comment_validated?
+ !!posted_by
+ end
+
+ def set_time
+ self.posted_at = Time.now
+ end
+
+ def set_posted_by
+ #should be something like this, but current_user is not set yet
+ #self.posted_by = current_user if current_user
+ end
+
+end