-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.rb
219 lines (184 loc) · 5.2 KB
/
main.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
# TimeClock V2
# Basic timeclock functionality
require 'rubygems'
require 'sinatra'
require 'dm-core'
require 'dm-migrations'
require 'digest/sha1'
require 'haml'
require './tc_functions'
require 'sinatra/reloader'
# DataMapper.setup(:default, 'mysql://rubytest:[email protected]/rubytest')
DataMapper.setup(:default, 'sqlite3:timeclock.db')
class Punch
include DataMapper::Resource
property :id, Serial
property :username, String
property :punchtime, DateTime
property :punchstate, String
end
class User
include DataMapper::Resource
property :id, Serial
property :username, String
property :password, String
property :cookie, String
property :admin, Boolean
end
class Taker
include DataMapper::Resource
property :id, Serial
property :username, String
property :hours, Float
property :note, String
end
DataMapper.auto_upgrade!
class Dummy
def admin
@admin
end
def admin=(admin)
@admin = admin
end
end
get '/' do
@title="Timeclock"
@username = cookiecheck(request.cookies["MainSiteKey"])
if !@username
@title="Timeclock - Log In"
@alert=alert()
@admininfo=Dummy.new
@admininfo.admin = false
@hoursused = Punch.all(:username => @username)
haml :loginpage
else
@punchstate=getstate(@username)
@username = cookiecheck(request.cookies["MainSiteKey"])
@alert=alert()
@admininfo=User.first(:username => @username)
@output=""
@total = 0
@list = Punch.all(:username => @username) #
([email protected]).step(2) do |i|
@output << "#{@list[i].username} punched #{@list[i].punchstate} on #{@list[i].punchtime.strftime(fmt='%F')} at #{@list[i].punchtime.strftime(fmt='%T')}</br>"
@output << "#{@list[i+1].username} punched #{@list[i+1].punchstate} on #{@list[i+1].punchtime.strftime(fmt='%F')} at #{@list[i+1].punchtime.strftime(fmt='%T')}</br>"
@output << "Hours worked: #{((@list[i+1].punchtime - @list[i].punchtime).to_f*24).to_s}</br></br>"
@total += ((@list[i+1].punchtime - @list[i].punchtime).to_f*24)
end
@output << "</br></br>Total Hours Worked: " << @total.to_s
haml :mainpage
end
end
get '/logout' do
response.set_cookie("MainSiteKey", {:value => "", :expires => Time.now})
setalert("Succesfully logged out.")
redirect '/'
end
post '/submitpunch' do
return params[:textings]
end
post '/submit' do
@username = cookiecheck(request.cookies["MainSiteKey"])
if !@username
redirect '/'
end
@punchstate = getstate(@username)
Punch.create(
:username => @username,
:punchtime => Time.now,
:punchstate => @punchstate
)
setalert("Punch #{@punchstate} for #{@username} successful!")
redirect '/'
end
post '/loginsubmit' do
username=params[:username]
password=params[:password]
passcheck(username,password)
redirect '/'
end
get '/admin' do
@username = cookiecheck(request.cookies["MainSiteKey"])
if !@username
redirect '/'
end
@admininfo=User.first(:username => @username)
if @admininfo.admin
haml :adminpage
else
# return "You are not logged in as an administrative user."
setalert("You are not logged in as an administrative user.")
redirect '/'
end
end
post '/createuser' do
logincheck = cookiecheck(request.cookies["MainSiteKey"])
if !logincheck
setalert("Login expired")
redirect '/'
end
username = params[:username]
password = params[:password]
if params[:admin] == 'true'
admin = true
else
admin = false
end
if !(username == '') && !(password=='')
User.create(
:username => username,
:password => Digest::SHA1.hexdigest(password),
:cookie => "none",
:admin => admin
)
setalert("User successfully created!")
else
setalert("Username and password fields are required.")
end
redirect '/admin'
end
get '/report' do
@username = cookiecheck(request.cookies["MainSiteKey"])
if !@username
redirect '/'
end
# @output=""
# @total = 0
# @list = Punch.all(:username => @username) #
# ([email protected]).step(2) do |i|
# @output << "#{@list[i].username} punched #{@list[i].punchstate} on #{@list[i].punchtime.strftime(fmt='%F')} at #{@list[i].punchtime.strftime(fmt='%T')}</br>"
# @output << "#{@list[i+1].username} punched #{@list[i+1].punchstate} on #{@list[i+1].punchtime.strftime(fmt='%F')} at #{@list[i+1].punchtime.strftime(fmt='%T')}</br>"
# @output << "#{((@list[i+1].punchtime - @list[i].punchtime).to_f*24).to_s}</br>"
# @total += ((@list[i+1].punchtime - @list[i].punchtime).to_f*24)
# end
# @output << "</br></br>Hours Worked: " << @total.to_s
# return @output
end
post '/moduser' do
query = User.all(:fields => [:id, :username])
listem = Array.new
newlist = Array.new
query.each do |c|
listem << c.username
end
listem.each do |username|
tempthing = User.first(:username => username)
if params[username]
tempthing.admin = true
else
tempthing.admin = false
end
tempthing.save
end
listem.each do |username|
temp_User = User.first(:username => username)
temp_param = username + "delete"
if params[temp_param]
temp_User.destroy!
temp_punches = Punch.all(:username => username)
temp_punches.destroy!
end
end
setalert("User modification successful")
redirect '/admin'
end