Commit 7e0d314f authored by Adam Rambousek's avatar Adam Rambousek
Browse files

Lock entries, fix #103

parent 9eac73d3
Loading
Loading
Loading
Loading
+4 KiB (16 KiB)

File changed.

No diff preview for this file type.

+25 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ class TeCu < DictSedna
    @list_thes = list_thesaurus
    @notif_db = SQLite3::Database.new("/var/lib/deb-server/db/notif.sqlite")
    @notif_db.results_as_hash = true
    @lock_timeout = 20*60
  end

  def list_thesaurus
@@ -1272,4 +1273,28 @@ Subject: #{subject}
    #smtp.send_message(message, from, to)
    #smtp.send_message(message, from, copy) if copy != ''
  end

  def who_locked(entry)
    query = "SELECT * FROM locks WHERE entry=?"
    res = false
    @notif_db.execute(query, [entry]).each{|row|
      $stderr.puts row
      if row['time'].to_i < (Time.now.to_i - @lock_timeout)
        query2 = "DELETE FROM locks WHERE entry=? AND time=?"
        @notif_db.execute(query2, [entry, row['time']])
      else
        res = row['login']
      end
    }
    return res
  end
  def lock_entry(entry, user, time)
    time = Time.now.to_i if time == nil
    query = "INSERT INTO locks values (?,?,?)"
    @notif_db.execute(query, [user, entry, time])
  end
  def unlock_entry(entry, user)
    query = "DELETE FROM locks WHERE entry=? AND login=?"
    @notif_db.execute(query, [entry,user])
  end
end
+11 −0
Original line number Diff line number Diff line
@@ -874,6 +874,16 @@ def do_GET(request, response)
        when 'del'
          res = @dict_array['tecudel'].get(key)
        when 'edit'
          locked_by = @dict_array['notification'].who_locked(key)
          $stderr.puts 'LOCKED BY '+locked_by.to_s
          if locked_by != false and locked_by != user
            response.body = '{"entry":{"terms":{"term":[]},"error_msg":"'+locked_by.to_s+'"}}'
            response['Content-Type'] = 'application/json; charset=utf-8'
            return response
          end
          if locked_by == false
            @dict_array['notification'].lock_entry(key, user, Time.now.to_i)
          end
          res = @dict_array['tecuwork'].get_doc(key)
          if res == ''
            res = @dict.get_doc(key) 
@@ -1299,6 +1309,7 @@ def do_GET(request, response)
      return response
    end
    id = request.query['id'].to_s.force_encoding('UTF-8')
    @dict_array['notification'].unlock_entry(id, user)
    diffnotes = []
    diffchanges = []
    new_entry = false