knjrbfw 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (208) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +32 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +19 -0
  7. data/Rakefile +49 -0
  8. data/VERSION +1 -0
  9. data/lib/knj/.gitignore +1 -0
  10. data/lib/knj/arrayext.rb +157 -0
  11. data/lib/knj/autoload/activesupport.rb +2 -0
  12. data/lib/knj/autoload/backups/facets_dictionary.rb +430 -0
  13. data/lib/knj/autoload/backups/parsedate.rb +53 -0
  14. data/lib/knj/autoload/backups/ping.rb +64 -0
  15. data/lib/knj/autoload/cinch.rb +2 -0
  16. data/lib/knj/autoload/erubis.rb +6 -0
  17. data/lib/knj/autoload/facebooker.rb +3 -0
  18. data/lib/knj/autoload/facets_dictionary.rb +7 -0
  19. data/lib/knj/autoload/gd2.rb +2 -0
  20. data/lib/knj/autoload/gettext.rb +9 -0
  21. data/lib/knj/autoload/gtk2.rb +5 -0
  22. data/lib/knj/autoload/json_autoload.rb +7 -0
  23. data/lib/knj/autoload/magick.rb +6 -0
  24. data/lib/knj/autoload/mysql.rb +6 -0
  25. data/lib/knj/autoload/parsedate.rb +1 -0
  26. data/lib/knj/autoload/ping.rb +64 -0
  27. data/lib/knj/autoload/rexml.rb +12 -0
  28. data/lib/knj/autoload/soap.rb +3 -0
  29. data/lib/knj/autoload/sqlite3.rb +6 -0
  30. data/lib/knj/autoload/tmail.rb +6 -0
  31. data/lib/knj/autoload/twitter.rb +2 -0
  32. data/lib/knj/autoload/xmlsimple.rb +6 -0
  33. data/lib/knj/autoload/zip.rb +6 -0
  34. data/lib/knj/autoload.rb +136 -0
  35. data/lib/knj/compiler.rb +53 -0
  36. data/lib/knj/cpufreq.rb +40 -0
  37. data/lib/knj/datarow.rb +256 -0
  38. data/lib/knj/datestamp.rb +91 -0
  39. data/lib/knj/datet.rb +448 -0
  40. data/lib/knj/degulesider.rb +46 -0
  41. data/lib/knj/erb/apache_knjerb.conf +8 -0
  42. data/lib/knj/erb/cache/README +1 -0
  43. data/lib/knj/erb/erb.rb +21 -0
  44. data/lib/knj/erb/erb_1.9.rb +13 -0
  45. data/lib/knj/erb/erb_cache_clean.rb +20 -0
  46. data/lib/knj/erb/erb_fcgi.rb +44 -0
  47. data/lib/knj/erb/erb_fcgi_1.9.rb +44 -0
  48. data/lib/knj/erb/erb_fcgi_jruby.rb +7 -0
  49. data/lib/knj/erb/erb_jruby.rb +22 -0
  50. data/lib/knj/erb/include.rb +248 -0
  51. data/lib/knj/errors.rb +19 -0
  52. data/lib/knj/eruby.rb +224 -0
  53. data/lib/knj/event_filemod.rb +53 -0
  54. data/lib/knj/event_handler.rb +69 -0
  55. data/lib/knj/exchangerates.rb +39 -0
  56. data/lib/knj/ext/webrick.rb +31 -0
  57. data/lib/knj/filesystem.rb +8 -0
  58. data/lib/knj/fs/drivers/filesystem.rb +14 -0
  59. data/lib/knj/fs/drivers/ftp.rb +33 -0
  60. data/lib/knj/fs/drivers/ssh.rb +28 -0
  61. data/lib/knj/fs/fs.rb +36 -0
  62. data/lib/knj/gettext_fallback.rb +17 -0
  63. data/lib/knj/gettext_threadded.rb +77 -0
  64. data/lib/knj/google_sitemap.rb +59 -0
  65. data/lib/knj/gtk2.rb +277 -0
  66. data/lib/knj/gtk2_cb.rb +85 -0
  67. data/lib/knj/gtk2_menu.rb +57 -0
  68. data/lib/knj/gtk2_statuswindow.rb +64 -0
  69. data/lib/knj/gtk2_tv.rb +63 -0
  70. data/lib/knj/hash_methods.rb +37 -0
  71. data/lib/knj/http.rb +190 -0
  72. data/lib/knj/includes/appserver_cli.rb +39 -0
  73. data/lib/knj/ip2location.rb +22 -0
  74. data/lib/knj/ironruby-gtk2/button.rb +19 -0
  75. data/lib/knj/ironruby-gtk2/dialog.rb +44 -0
  76. data/lib/knj/ironruby-gtk2/entry.rb +9 -0
  77. data/lib/knj/ironruby-gtk2/gdk_event.rb +3 -0
  78. data/lib/knj/ironruby-gtk2/gdk_eventbutton.rb +13 -0
  79. data/lib/knj/ironruby-gtk2/gdk_pixbuf.rb +11 -0
  80. data/lib/knj/ironruby-gtk2/gladexml.rb +104 -0
  81. data/lib/knj/ironruby-gtk2/glib.rb +15 -0
  82. data/lib/knj/ironruby-gtk2/gtk2.rb +148 -0
  83. data/lib/knj/ironruby-gtk2/gtk_builder.rb +31 -0
  84. data/lib/knj/ironruby-gtk2/gtk_cellrenderertext.rb +5 -0
  85. data/lib/knj/ironruby-gtk2/gtk_combobox.rb +19 -0
  86. data/lib/knj/ironruby-gtk2/gtk_filechooserbutton.rb +5 -0
  87. data/lib/knj/ironruby-gtk2/gtk_liststore.rb +18 -0
  88. data/lib/knj/ironruby-gtk2/gtk_menu.rb +5 -0
  89. data/lib/knj/ironruby-gtk2/gtk_menuitem.rb +7 -0
  90. data/lib/knj/ironruby-gtk2/gtk_statusicon.rb +8 -0
  91. data/lib/knj/ironruby-gtk2/gtk_treeiter.rb +24 -0
  92. data/lib/knj/ironruby-gtk2/gtk_treeselection.rb +16 -0
  93. data/lib/knj/ironruby-gtk2/gtk_treeview.rb +19 -0
  94. data/lib/knj/ironruby-gtk2/gtk_treeviewcolumn.rb +32 -0
  95. data/lib/knj/ironruby-gtk2/iconsize.rb +3 -0
  96. data/lib/knj/ironruby-gtk2/image.rb +15 -0
  97. data/lib/knj/ironruby-gtk2/label.rb +19 -0
  98. data/lib/knj/ironruby-gtk2/stock.rb +4 -0
  99. data/lib/knj/ironruby-gtk2/tests/test.glade +15 -0
  100. data/lib/knj/ironruby-gtk2/tests/test_2.rb +22 -0
  101. data/lib/knj/ironruby-gtk2/tests/test_ironruby_window.rb +47 -0
  102. data/lib/knj/ironruby-gtk2/vbox.rb +5 -0
  103. data/lib/knj/ironruby-gtk2/window.rb +23 -0
  104. data/lib/knj/jruby-gtk2/builder/test_builder.glade +43 -0
  105. data/lib/knj/jruby-gtk2/builder/test_builder.rb +19 -0
  106. data/lib/knj/jruby-gtk2/builder/test_builder.ui +43 -0
  107. data/lib/knj/jruby-gtk2/builder.rb +27 -0
  108. data/lib/knj/jruby-gtk2/cellrenderertext.rb +12 -0
  109. data/lib/knj/jruby-gtk2/checkbutton.rb +3 -0
  110. data/lib/knj/jruby-gtk2/combobox.rb +29 -0
  111. data/lib/knj/jruby-gtk2/dialog.rb +44 -0
  112. data/lib/knj/jruby-gtk2/eventbutton.rb +21 -0
  113. data/lib/knj/jruby-gtk2/gladexml.rb +99 -0
  114. data/lib/knj/jruby-gtk2/gtk-4.0.jar +0 -0
  115. data/lib/knj/jruby-gtk2/gtk2.rb +246 -0
  116. data/lib/knj/jruby-gtk2/hbox.rb +10 -0
  117. data/lib/knj/jruby-gtk2/iconsize.rb +5 -0
  118. data/lib/knj/jruby-gtk2/image.rb +10 -0
  119. data/lib/knj/jruby-gtk2/liststore.rb +56 -0
  120. data/lib/knj/jruby-gtk2/menu.rb +40 -0
  121. data/lib/knj/jruby-gtk2/progressbar.rb +12 -0
  122. data/lib/knj/jruby-gtk2/statusicon.rb +8 -0
  123. data/lib/knj/jruby-gtk2/stock.rb +8 -0
  124. data/lib/knj/jruby-gtk2/tests/test_glade_window.glade +163 -0
  125. data/lib/knj/jruby-gtk2/tests/test_glade_window.rb +47 -0
  126. data/lib/knj/jruby-gtk2/tests/test_normal_window.rb +17 -0
  127. data/lib/knj/jruby-gtk2/tests/test_trayicon.png +0 -0
  128. data/lib/knj/jruby-gtk2/tests/test_trayicon.rb +18 -0
  129. data/lib/knj/jruby-gtk2/treeview.rb +105 -0
  130. data/lib/knj/jruby-gtk2/vbox.rb +12 -0
  131. data/lib/knj/jruby-gtk2/window.rb +11 -0
  132. data/lib/knj/jruby_compiler.rb +14 -0
  133. data/lib/knj/knj.rb +19 -0
  134. data/lib/knj/knj_controller.rb +13 -0
  135. data/lib/knj/knjdb/dbtime.rb +30 -0
  136. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +327 -0
  137. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +130 -0
  138. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb +30 -0
  139. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +255 -0
  140. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +93 -0
  141. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +151 -0
  142. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb +29 -0
  143. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +300 -0
  144. data/lib/knj/knjdb/libknjdb.rb +438 -0
  145. data/lib/knj/knjdb/libknjdb_java_sqlite3.rb +83 -0
  146. data/lib/knj/knjdb/libknjdb_row.rb +149 -0
  147. data/lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb +69 -0
  148. data/lib/knj/knjdb/mysql-connector-java-5.1.13-bin.jar +0 -0
  149. data/lib/knj/knjdb/sqlitejdbc-v056.jar +0 -0
  150. data/lib/knj/libqt.rb +75 -0
  151. data/lib/knj/libqt_window.rb +10 -0
  152. data/lib/knj/locale_strings.rb +3 -0
  153. data/lib/knj/locales.rb +54 -0
  154. data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +56 -0
  155. data/lib/knj/mail.rb +75 -0
  156. data/lib/knj/mailobj.rb +82 -0
  157. data/lib/knj/mount.rb +115 -0
  158. data/lib/knj/notify.rb +13 -0
  159. data/lib/knj/nvidia_settings.rb +45 -0
  160. data/lib/knj/objects.rb +731 -0
  161. data/lib/knj/opts.rb +38 -0
  162. data/lib/knj/os.rb +158 -0
  163. data/lib/knj/php.rb +717 -0
  164. data/lib/knj/php_parser/arguments.rb +5 -0
  165. data/lib/knj/php_parser/functions.rb +97 -0
  166. data/lib/knj/php_parser/php_parser.rb +99 -0
  167. data/lib/knj/php_parser/tests/test.rb +12 -0
  168. data/lib/knj/php_parser/tests/test_function.php +8 -0
  169. data/lib/knj/php_parser/tests/test_function_run.rb +19 -0
  170. data/lib/knj/power_manager.rb +31 -0
  171. data/lib/knj/rand.rb +10 -0
  172. data/lib/knj/retry.rb +71 -0
  173. data/lib/knj/rhodes/mutex.rb +11 -0
  174. data/lib/knj/rhodes/rhodes.js +3 -0
  175. data/lib/knj/rhodes/rhodes.rb +11 -0
  176. data/lib/knj/rsvgbin.rb +20 -0
  177. data/lib/knj/scripts/degulesider.rb +12 -0
  178. data/lib/knj/scripts/filesearch.rb +51 -0
  179. data/lib/knj/scripts/ip2location.rb +12 -0
  180. data/lib/knj/scripts/keepalive.rb +6 -0
  181. data/lib/knj/scripts/svn_merge.rb +29 -0
  182. data/lib/knj/scripts/upgrade_knjrbfw_checker.rb +41 -0
  183. data/lib/knj/sms.rb +54 -0
  184. data/lib/knj/sshrobot/sshrobot.rb +93 -0
  185. data/lib/knj/strings.rb +65 -0
  186. data/lib/knj/sysuser.rb +27 -0
  187. data/lib/knj/tests/compiler/compiler_test.rb +13 -0
  188. data/lib/knj/tests/compiler/compiler_test_file.rb +62 -0
  189. data/lib/knj/tests/test_degulesider.rb +11 -0
  190. data/lib/knj/tests/test_mount.rb +30 -0
  191. data/lib/knj/tests/test_retry.rb +30 -0
  192. data/lib/knj/thread.rb +32 -0
  193. data/lib/knj/thread2.rb +47 -0
  194. data/lib/knj/threadhandler.rb +130 -0
  195. data/lib/knj/threadpool.rb +177 -0
  196. data/lib/knj/translations.rb +139 -0
  197. data/lib/knj/unix_proc.rb +82 -0
  198. data/lib/knj/web.rb +932 -0
  199. data/lib/knj/webscripts/image.rhtml +82 -0
  200. data/lib/knj/win.rb +4 -0
  201. data/lib/knj/win_registry.rb +60 -0
  202. data/lib/knj/win_tightvnc.rb +127 -0
  203. data/lib/knj/x11vnc.rb +48 -0
  204. data/lib/knj/youtube.rb +38 -0
  205. data/lib/knjrbfw.rb +4 -0
  206. data/spec/knjrbfw_spec.rb +269 -0
  207. data/spec/spec_helper.rb +12 -0
  208. metadata +336 -0
data/lib/knj/web.rb ADDED
@@ -0,0 +1,932 @@
1
+ class Knj::Web
2
+ attr_reader :session, :cgi, :data
3
+
4
+ def initialize(args = {})
5
+ @args = Knj::ArrayExt.hash_sym(args)
6
+ @db = @args[:db] if @args[:db]
7
+ @args[:tmp] = "/tmp" if !@args[:tmp]
8
+
9
+ raise "No ID was given." if !@args[:id]
10
+ raise "No DB was given." if !@args[:db]
11
+
12
+ if @args[:cgi]
13
+ @cgi = @args[:cgi]
14
+ elsif $_CGI
15
+ @cgi = $_CGI
16
+ else
17
+ if ENV["HTTP_HOST"] or $knj_eruby or Knj::Php.class_exists("Apache")
18
+ @cgi = CGI.new
19
+ end
20
+ end
21
+
22
+ $_CGI = @cgi if !$_CGI
23
+ self.read_cgi
24
+
25
+ if $_FCGI
26
+ KnjEruby.connect("exit") do
27
+ @session.close
28
+
29
+ @post = nil
30
+ @get = nil
31
+ @server = nil
32
+ @cookie = nil
33
+
34
+ $_POST = nil
35
+ $_GET = nil
36
+ $_SERVER = nil
37
+ $_COOKIE = nil
38
+ end
39
+ else
40
+ Kernel.at_exit do
41
+ @session.close
42
+
43
+ @post = nil
44
+ @get = nil
45
+ @server = nil
46
+ @cookie = nil
47
+
48
+ $_POST = nil
49
+ $_GET = nil
50
+ $_SERVER = nil
51
+ $_COOKIE = nil
52
+ end
53
+ end
54
+ end
55
+
56
+ def read_cgi(args = {})
57
+ args.each do |key, value|
58
+ if key == :cgi
59
+ @cgi = value
60
+ else
61
+ raise "No such key: #{key.to_s}"
62
+ end
63
+ end
64
+
65
+ if $_FCGI_COUNT and $_FCGI and $_CGI
66
+ @server = {}
67
+ $_CGI.env_table.each do |key, value|
68
+ @server[key] = value
69
+ end
70
+ elsif $_CGI and ENV["HTTP_HOST"] and ENV["REMOTE_ADDR"]
71
+ @server = {}
72
+ ENV.each do |key, value|
73
+ @server[key] = value
74
+ end
75
+ elsif Knj::Php.class_exists("Apache")
76
+ @server = {
77
+ "HTTP_HOST" => Apache.request.hostname,
78
+ "HTTP_USER_AGENT" => Apache.request.headers_in["User-Agent"],
79
+ "REMOTE_ADDR" => Apache.request.remote_host(1),
80
+ "REQUEST_URI" => Apache.request.unparsed_uri
81
+ }
82
+ else
83
+ @server = {}
84
+ end
85
+
86
+ @files = {}
87
+ @post = {}
88
+ if @cgi and @cgi.request_method == "POST"
89
+ @cgi.params.each do |pair|
90
+ do_files = false
91
+ isstring = true
92
+ varname = pair[0]
93
+ stringparse = nil
94
+
95
+ if pair[1][0].class.name == "Tempfile"
96
+ if varname[0..3] == "file"
97
+ isstring = false
98
+ do_files = true
99
+
100
+ if pair[1][0].size > 0
101
+ stringparse = {
102
+ "name" => pair[1][0].original_filename,
103
+ "tmp_name" => pair[1][0].path,
104
+ "size" => pair[1][0].size,
105
+ "error" => 0
106
+ }
107
+
108
+ stringparse["name"] = pair[1][0].original_filename if pair[1][0].respond_to?("original_filename")
109
+ end
110
+ else
111
+ stringparse = File.read(pair[1][0].path)
112
+ end
113
+ elsif pair[1][0].is_a?(StringIO)
114
+ if varname[0..3] == "file"
115
+ tmpname = @args[:tmp] + "/knj_web_upload_#{Time.now.to_f.to_s}_#{rand(1000).to_s.untaint}"
116
+ isstring = false
117
+ do_files = true
118
+ cont = pair[1][0].string
119
+ Knj::Php.file_put_contents(tmpname, cont.to_s)
120
+
121
+ if cont.length > 0
122
+ stringparse = {
123
+ "tmp_name" => tmpname,
124
+ "size" => cont.length,
125
+ "error" => 0
126
+ }
127
+
128
+ stringparse["name"] = pair[1][0].original_filename if pair[1][0].respond_to?("original_filename")
129
+ end
130
+ else
131
+ stringparse = pair[1][0].string
132
+ end
133
+ else
134
+ stringparse = pair[1][0]
135
+ end
136
+
137
+ if stringparse
138
+ if !do_files
139
+ if isstring
140
+ Knj::Web.parse_name(@post, varname, stringparse)
141
+ else
142
+ @post[varname] = stringparse
143
+ end
144
+ else
145
+ if isstring
146
+ Knj::Web.parse_name(@files, varname, stringparse)
147
+ else
148
+ @files[varname] = stringparse
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
154
+
155
+
156
+ if @cgi and @cgi.query_string
157
+ @get = Knj::Web.parse_urlquery(@cgi.query_string)
158
+ else
159
+ @get = {}
160
+ end
161
+
162
+ @cookie = {}
163
+ if @cgi
164
+ @cgi.cookies.each do |key, value|
165
+ @cookie[key] = value[0]
166
+ end
167
+ end
168
+
169
+ self.global_params if @args[:globals]
170
+
171
+ if @cookie[@args[:id]] and (sdata = @args[:db].single(:sessions, :id => @cookie[@args[:id]]))
172
+ @data = Knj::ArrayExt.hash_sym(sdata)
173
+
174
+ if @data
175
+ if @data[:user_agent] != @server["HTTP_USER_AGENT"] or @data[:ip] != @server["REMOTE_ADDR"]
176
+ @data = nil
177
+ else
178
+ @db.update(:sessions, {"last_url" => @server["REQUEST_URI"].to_s, "date_active" => Datestamp.dbstr}, {"id" => @data[:id]})
179
+ session_id = @args[:id] + "_" + @data[:id]
180
+ end
181
+ end
182
+ end
183
+
184
+ if !@data or !session_id
185
+ @db.insert(:sessions,
186
+ :date_start => Knj::Datet.new.dbstr,
187
+ :date_active => Knj::Datet.new.dbstr,
188
+ :user_agent => @server["HTTP_USER_AGENT"],
189
+ :ip => @server["REMOTE_ADDR"],
190
+ :last_url => @server["REQUEST_URI"].to_s
191
+ )
192
+
193
+ @data = Knj::ArrayExt.hash_sym(@db.single(:sessions, :id => @db.last_id))
194
+ session_id = @args[:id] + "_" + @data[:id]
195
+ Knj::Php.setcookie(@args[:id], @data[:id])
196
+ end
197
+
198
+ require "cgi/session"
199
+ require "cgi/session/pstore"
200
+ @session = CGI::Session.new(@session, "database_manager" => CGI::Session::PStore, "session_id" => session_id, "session_path" => @args[:tmp])
201
+ end
202
+
203
+ def [](key)
204
+ return @session[key.to_sym]
205
+ end
206
+
207
+ def []=(key, value)
208
+ return @session[key.to_sym] = value
209
+ end
210
+
211
+ def self.parse_cookies(str)
212
+ ret = {}
213
+
214
+ str.split("; ").each do |cookie_str|
215
+ splitted = cookie_str.split("=")
216
+ ret[Knj::Php.urldecode(splitted[0])] = Knj::Php.urldecode(splitted[1])
217
+ end
218
+
219
+ return ret
220
+ end
221
+
222
+ def self.parse_urlquery(querystr, args = {})
223
+ get = {}
224
+ querystr.to_s.split("&").each do |value|
225
+ pos = value.index("=")
226
+
227
+ if pos != nil
228
+ name = value[0..pos-1]
229
+ name = name.to_sym if args[:syms]
230
+ valuestr = value.slice(pos+1..-1)
231
+ Knj::Web.parse_name(get, Knj::Php.urldecode(name), valuestr, args)
232
+ end
233
+ end
234
+
235
+ return get
236
+ end
237
+
238
+ def self.parse_secname(seton, secname, args)
239
+ secname_empty = false
240
+ if secname.length <= 0
241
+ secname_empty = true
242
+ try = 0
243
+
244
+ loop do
245
+ if !seton.has_key?(try)
246
+ break
247
+ else
248
+ try += 1
249
+ end
250
+ end
251
+
252
+ secname = try
253
+ else
254
+ secname = secname.to_i if Knj::Php.is_numeric(secname)
255
+ end
256
+
257
+ secname = secname.to_sym if args[:syms] and secname.is_a?(String)
258
+
259
+ return [secname, secname_empty]
260
+ end
261
+
262
+ def self.parse_name(seton, varname, value, args = {})
263
+ if value.respond_to?(:filename) and value.filename
264
+ realvalue = value
265
+ else
266
+ realvalue = value.to_s
267
+ end
268
+
269
+ realvalue = Knj::Php.urldecode(realvalue) if args[:urldecode] and !value.respond_to?(:filename)
270
+
271
+ if varname and varname.index("[") != nil
272
+ if match = varname.match(/\[(.*?)\]/)
273
+ namepos = varname.index(match[0])
274
+ name = varname.slice(0..namepos - 1)
275
+ name = name.to_sym if args[:syms]
276
+ seton[name] = {} if !seton.has_key?(name)
277
+
278
+ secname, secname_empty = Knj::Web.parse_secname(seton[name], match[1], args)
279
+
280
+ valuefrom = namepos + secname.to_s.length + 2
281
+ restname = varname.slice(valuefrom..-1)
282
+
283
+ if restname and restname.index("[") != nil
284
+ seton[name][secname] = {} if !seton[name].has_key?(secname)
285
+ Knj::Web.parse_name_second(seton[name][secname], restname, value, args)
286
+ else
287
+ seton[name][secname] = realvalue
288
+ end
289
+ else
290
+ seton[varname][match[1]] = realvalue
291
+ end
292
+ else
293
+ seton[varname] = realvalue
294
+ end
295
+ end
296
+
297
+ def self.parse_name_second(seton, varname, value, args = {})
298
+ if value.respond_to?(:filename) and value.filename
299
+ realvalue = value
300
+ else
301
+ realvalue = value.to_s
302
+ end
303
+
304
+ match = varname.match(/^\[(.*?)\]/)
305
+ if match
306
+ namepos = varname.index(match[0])
307
+ name = match[1]
308
+ secname, secname_empty = Knj::Web.parse_secname(seton, match[1], args)
309
+
310
+ valuefrom = namepos + match[1].length + 2
311
+ restname = varname.slice(valuefrom..-1)
312
+
313
+ if restname and restname.index("[") != nil
314
+ seton[secname] = {} if !seton.has_key?(secname)
315
+ Knj::Web.parse_name_second(seton[secname], restname, value, args)
316
+ else
317
+ seton[secname] = realvalue
318
+ end
319
+ else
320
+ seton[varname] = realvalue
321
+ end
322
+ end
323
+
324
+ def global_params
325
+ $_POST = @post
326
+ $_GET = @get
327
+ $_COOKIE = @cookie
328
+ $_FILES = @files
329
+ $_SERVER = @server
330
+ end
331
+
332
+ def destroy
333
+ @cgi = nil
334
+ @post = nil
335
+ @get = nil
336
+ @session = nil
337
+ @args = nil
338
+ end
339
+
340
+ def self.require_eruby(filepath)
341
+ cont = File.read(filepath).untaint
342
+ parse = Erubis.Eruby.new(cont)
343
+ eval(parse.src.to_s)
344
+ end
345
+
346
+ def self.alert(string)
347
+ @alert_sent = true
348
+ html = "<script type=\"text/javascript\">alert(\"#{Knj::Strings.js_safe(string.to_s)}\");</script>"
349
+ print html
350
+ end
351
+
352
+ def self.redirect(string, args = {})
353
+ do_js = true
354
+
355
+ #Header way
356
+ if !@alert_sent
357
+ if args[:perm]
358
+ Knj::Php.header("Status: 301 Moved Permanently")
359
+ else
360
+ Knj::Php.header("Status: 303 See Other")
361
+ end
362
+
363
+ Knj::Php.header("Location: #{string}")
364
+ end
365
+
366
+ print "<script type=\"text/javascript\">location.href=\"#{string}\";</script>" if do_js
367
+ exit
368
+ end
369
+
370
+ def self.back
371
+ print "<script type=\"text/javascript\">history.go(-1);</script>"
372
+ exit
373
+ end
374
+
375
+ def self.checkval(value, val1, val2 = nil)
376
+ if val2 != nil
377
+ if !value or value == "" or value == "false"
378
+ return val2
379
+ else
380
+ return val1
381
+ end
382
+ else
383
+ if !value or value == "" or value == "false"
384
+ return val1
385
+ else
386
+ return value
387
+ end
388
+ end
389
+ end
390
+
391
+ def self.inputs(arr)
392
+ html = ""
393
+ arr.each do |args|
394
+ html += self.input(args)
395
+ end
396
+
397
+ return html
398
+ end
399
+
400
+ def self.input(args)
401
+ Knj::ArrayExt.hash_sym(args)
402
+
403
+ if args.has_key?(:value)
404
+ if args[:value].is_a?(Array) and args[:value][0].is_a?(NilClass)
405
+ value = nil
406
+ elsif args[:value].is_a?(Array)
407
+ if !args[:value][2] or args[:value][2] == :key
408
+ value = args[:value][0][args[:value][1]]
409
+ elsif args[:value][2] == :callb
410
+ value = args[:value][0].send(args[:value][1])
411
+ end
412
+ elsif args[:value].is_a?(String) or args[:value].is_a?(Integer)
413
+ value = args[:value].to_s
414
+ else
415
+ value = args[:value]
416
+ end
417
+ end
418
+
419
+ args[:value_default] = args[:default] if args[:default]
420
+
421
+ if value.is_a?(NilClass) and args[:value_default]
422
+ value = args[:value_default]
423
+ elsif value.is_a?(NilClass)
424
+ value = ""
425
+ end
426
+
427
+ if value and args.has_key?(:value_func) and args[:value_func]
428
+ cback = args[:value_func]
429
+
430
+ if cback.is_a?(Method)
431
+ value = cback.call(value)
432
+ elsif cback.is_a?(Array)
433
+ value = Knj::Php.call_user_func(args[:value_func], value)
434
+ elsif cback.is_a?(Proc)
435
+ value = cback.call(value)
436
+ else
437
+ raise "Unknown class: #{cback.class.name}."
438
+ end
439
+ end
440
+
441
+ value = args[:values] if args[:values]
442
+ args[:id] = args[:name] if !args[:id]
443
+
444
+ if !args[:type]
445
+ if args[:opts]
446
+ args[:type] = :select
447
+ elsif args[:name] and args[:name].to_s[0..2] == "che"
448
+ args[:type] = :checkbox
449
+ elsif args[:name] and args[:name].to_s[0..3] == "file"
450
+ args[:type] = :file
451
+ else
452
+ args[:type] = :text
453
+ end
454
+ else
455
+ args[:type] = args[:type].to_sym
456
+ end
457
+
458
+ if args.has_key?(:disabled) and args[:disabled]
459
+ disabled = "disabled "
460
+ else
461
+ disabled = ""
462
+ end
463
+
464
+ raise "No name given to the Web::input()-method." if !args[:name] and args[:type] != :info and args[:type] != :textshow
465
+
466
+ checked = ""
467
+ checked += " value=\"#{args[:value_active]}\"" if args.has_key?(:value_active)
468
+ checked += " checked" if value.is_a?(String) and value == "1" or value.to_s == "1"
469
+ checked += " checked" if value.is_a?(TrueClass)
470
+
471
+ html = ""
472
+
473
+ if args[:type] == :checkbox
474
+ html += "<tr>"
475
+ html += "<td colspan=\"2\" class=\"tdcheck\">"
476
+ html += "<input type=\"checkbox\" class=\"input_checkbox\" id=\"#{args[:id].html}\" name=\"#{args[:name].html}\"#{checked} />"
477
+ html += "<label for=\"#{args[:id].html}\">#{args[:title].html}</label>"
478
+ html += "</td>"
479
+ html += "</tr>"
480
+ else
481
+ html += "<tr>"
482
+ html += "<td class=\"tdt\">"
483
+ html += args[:title].to_s.html
484
+ html += "</td>"
485
+ html += "<td class=\"tdc\">"
486
+
487
+ if args[:type] == :textarea
488
+ if args.has_key?(:height)
489
+ styleadd = " style=\"height: #{args[:height].html}px;\""
490
+ else
491
+ styleadd = ""
492
+ end
493
+
494
+ html += "<textarea#{styleadd} class=\"input_textarea\" name=\"#{args[:name].html}\" id=\"#{args[:id].html}\">#{value}</textarea>"
495
+ html += "</td>"
496
+ elsif args[:type] == :fckeditor
497
+ args[:height] = 400 if !args[:height]
498
+
499
+ require "/usr/share/fckeditor/fckeditor.rb"
500
+ fck = FCKeditor.new(args[:name])
501
+ fck.Height = args[:height].to_i
502
+ fck.Value = value
503
+ html += fck.CreateHtml
504
+
505
+ html += "</td>"
506
+ elsif args[:type] == :select
507
+ html += "<select name=\"#{args[:name].html}\" id=\"#{args[:id].html}\" class=\"input_select\""
508
+ html += " onchange=\"#{args[:onchange]}\"" if args[:onchange]
509
+ html += " multiple" if args[:multiple]
510
+ html += " size=\"#{args[:size].to_s}\"" if args[:size]
511
+ html += ">"
512
+ html += Knj::Web.opts(args[:opts], value, args[:opts_args])
513
+ html += "</select>"
514
+ html += "</td>"
515
+ elsif args[:type] == :imageupload
516
+ html += "<table class=\"designtable\"><tr><td style=\"width: 100%;\">"
517
+ html += "<input type=\"file\" name=\"#{args[:name].html}\" class=\"input_file\" />"
518
+ html += "</td><td style=\"padding-left: 5px;\">"
519
+
520
+ raise "No path given for imageupload-input." if !args.has_key?(:path)
521
+ raise "No value given in arguments for imageupload-input." if !args.has_key?(:value)
522
+
523
+ path = args[:path].gsub("%value%", value.to_s).untaint
524
+ if File.exists?(path)
525
+ html += "<img src=\"image.php?picture=#{Knj::Php.urlencode(path).html}&smartsize=100&edgesize=25&force=true&ts=#{Time.new.to_f}\" alt=\"Image\" />"
526
+
527
+ if args[:dellink]
528
+ dellink = args[:dellink].gsub("%value%", value.to_s)
529
+ html += "<div style=\"text-align: center;\">(<a href=\"javascript: if (confirm('#{_("Do you want to delete the image?")}')){location.href='#{dellink}';}\">#{_("delete")}</a>)</div>"
530
+ end
531
+ end
532
+
533
+ html += "</td></tr></table>"
534
+ html += "</td>"
535
+ elsif args[:type] == :file
536
+ html += "<input type=\"#{args[:type].to_s}\" class=\"input_#{args[:type].to_s}\" name=\"#{args[:name].html}\" /></td>"
537
+ elsif args[:type] == :textshow or args[:type] == :info
538
+ html += "#{value}</td>"
539
+ elsif args[:type] == :editarea
540
+ css = {
541
+ "width" => "100%"
542
+ }
543
+ css["height"] = args[:height] if args.has_key?(:height)
544
+
545
+ styleadd = " style=\""
546
+ css.each do |key, val|
547
+ styleadd += "#{key}: #{val};"
548
+ end
549
+ styleadd += "\""
550
+
551
+ styleadd += "width=\"100%\""
552
+ styleadd += "height=\"#{args[:height]}\"" if args[:height]
553
+ html += "<textarea#{styleadd} id=\"#{args[:id]}\" name=\"#{args[:name]}\">#{value}</textarea>"
554
+
555
+ jshash = {
556
+ "id" => args[:id],
557
+ "start_highlight" => true
558
+ }
559
+
560
+ pos_keys = [:skip_init, :allow_toggle, :replace_tab_by_spaces, :toolbar, :syntax]
561
+ pos_keys.each do |key|
562
+ jshash[key.to_s] = args[key] if args.has_key?(key)
563
+ end
564
+
565
+ html += "<script type=\"text/javascript\">"
566
+ html += "function knj_web_init_#{args[:name]}(){"
567
+ html += "editAreaLoader.init(#{Knj::Php.json_encode(jshash)});"
568
+ html += "}"
569
+ html += "</script>"
570
+ else
571
+ html += "<input #{disabled}type=\"#{args[:type].to_s.html}\" class=\"input_#{args[:type].html}\" id=\"#{args[:id].html}\" name=\"#{args[:name].html}\" value=\"#{value.html}\" /></td>"
572
+ html += "</td>"
573
+ end
574
+
575
+ html += "</tr>"
576
+ end
577
+
578
+ html += "<tr><td colspan=\"2\" class=\"tdd\">#{args[:descr]}</td></tr>" if args[:descr]
579
+ return html
580
+ end
581
+
582
+ def self.opts(opthash, curvalue = nil, opts_args = {})
583
+ opts_args = {} if !opts_args
584
+ opts_args.each do |key, value|
585
+ if !key.is_a?(Symbol)
586
+ opts_args[key.to_sym] = value
587
+ opts_args.delete(key)
588
+ end
589
+ end
590
+
591
+ return "" if !opthash
592
+ cname = curvalue.class.name
593
+ curvalue = curvalue.id if (cname == "Knj::Db_row" or cname == "Knj::Datarow")
594
+
595
+ html = ""
596
+ addsel = " selected=\"selected\"" if !curvalue
597
+
598
+ html += "<option#{addsel} value=\"\">#{_("Add new")}</option>" if opts_args and (opts_args[:add] or opts_args[:addnew])
599
+ html += "<option#{addsel} value=\"\">#{_("Choose")}</option>" if opts_args and opts_args[:choose]
600
+ html += "<option#{addsel} value=\"\">#{_("None")}</option>" if opts_args and opts_args[:none]
601
+
602
+ if opthash.is_a?(Hash) or opthash.class.to_s == "Dictionary"
603
+ opthash.each do |key, value|
604
+ html += "<option"
605
+
606
+ if curvalue.is_a?(Array) and curvalue.index(key) != nil
607
+ html += " selected=\"selected\""
608
+ elsif curvalue.to_s == key.to_s
609
+ html += " selected=\"selected\""
610
+ end
611
+
612
+ html += " value=\"#{key.html}\">#{value.html}</option>"
613
+ end
614
+ elsif opthash.is_a?(Array)
615
+ opthash.each do |key|
616
+ if opthash[key.to_i] != nil
617
+ html += "<option"
618
+ html += " selected=\"selected\"" if curvalue.to_i == key.to_i
619
+ html += " value=\"#{key.to_s}\">#{opthash[key.to_i].to_s}</option>"
620
+ end
621
+ end
622
+ end
623
+
624
+ return html
625
+ end
626
+
627
+ def self.rendering_engine
628
+ begin
629
+ servervar = _server
630
+ rescue Exception
631
+ servervar = $_SERVER
632
+ end
633
+
634
+ if !servervar
635
+ raise "Could not figure out meta data."
636
+ end
637
+
638
+ agent = servervar["HTTP_USER_AGENT"].to_s.downcase
639
+
640
+ if agent.index("webkit") != nil
641
+ return "webkit"
642
+ elsif agent.index("gecko") != nil
643
+ return "gecko"
644
+ elsif agent.index("msie") != nil
645
+ return "msie"
646
+ elsif agent.index("w3c") != nil or agent.index("baiduspider") != nil or agent.index("googlebot") != nil
647
+ return "bot"
648
+ else
649
+ #print "Unknown agent: #{agent}"
650
+ return false
651
+ end
652
+ end
653
+
654
+ def self.os
655
+ begin
656
+ servervar = _server
657
+ rescue Exception
658
+ servervar = $_SERVER
659
+ end
660
+
661
+ if !servervar
662
+ raise "Could not figure out meta data."
663
+ end
664
+
665
+ agent = servervar["HTTP_USER_AGENT"].to_s.downcase
666
+
667
+ if agent.index("(windows;") != nil or agent.index("windows nt") != nil
668
+ return {
669
+ "os" => "win",
670
+ "title" => "Windows"
671
+ }
672
+ elsif agent.index("linux") != nil
673
+ return {
674
+ "os" => "linux",
675
+ "title" => "Linux"
676
+ }
677
+ end
678
+
679
+ raise "Unknown OS: #{agent}"
680
+ end
681
+
682
+ def self.browser(servervar = nil)
683
+ if !servervar
684
+ begin
685
+ servervar = _server
686
+ rescue Exception => e
687
+ servervar = $_SERVER
688
+ end
689
+ end
690
+
691
+ raise "Could not figure out meta data." if !servervar
692
+ agent = servervar["HTTP_USER_AGENT"].to_s.downcase
693
+
694
+ if match = agent.index("knj:true") != nil
695
+ browser = "bot"
696
+ title = "Bot"
697
+ version = "KnjHttp"
698
+ elsif match = agent.match(/chrome\/(\d+\.\d+)/)
699
+ browser = "chrome"
700
+ title = "Google Chrome"
701
+ version = match[1]
702
+ elsif match = agent.match(/firefox\/(\d+\.\d+)/)
703
+ browser = "firefox"
704
+ title = "Mozilla Firefox"
705
+ version = match[1]
706
+ elsif match = agent.match(/msie\s*(\d+\.\d+)/)
707
+ browser = "ie"
708
+ title = "Microsoft Internet Explorer"
709
+ version = match[1]
710
+ elsif match = agent.match(/opera\/([\d+\.]+)/)
711
+ browser = "opera"
712
+ title = "Opera"
713
+ version = match[1]
714
+ elsif match = agent.match(/wget\/([\d+\.]+)/)
715
+ browser = "bot"
716
+ title = "Bot"
717
+ version = "Wget #{match[1]}"
718
+ elsif agent.index("baiduspider") != nil
719
+ browser = "bot"
720
+ title = "Bot"
721
+ version = "Baiduspider"
722
+ elsif agent.index("googlebot") != nil
723
+ browser = "bot"
724
+ title = "Bot"
725
+ version = "Googlebot"
726
+ elsif agent.index("gidbot") != nil
727
+ browser = "bot"
728
+ title = "Bot"
729
+ version = "GIDBot"
730
+ elsif match = agent.match(/safari\/(\d+)/)
731
+ browser = "safari"
732
+ title = "Safari"
733
+ version = match[1]
734
+ elsif agent.index("iPad") != nil
735
+ browser = "safari"
736
+ title = "Safari (iPad)"
737
+ version = "ipad"
738
+ elsif agent.index("bingbot") != nil
739
+ browser = "bot"
740
+ title = "Bot"
741
+ version = "Bingbot"
742
+ elsif agent.index("yahoo! slurp") != nil
743
+ browser = "bot"
744
+ title = "Bot"
745
+ version = "Yahoo! Slurp"
746
+ elsif agent.index("hostharvest") != nil
747
+ browser = "bot"
748
+ title = "Bot"
749
+ version = "HostHarvest"
750
+ elsif agent.index("exabot") != nil
751
+ browser = "bot"
752
+ title = "Bot"
753
+ version = "Exabot"
754
+ elsif agent.index("dotbot") != nil
755
+ browser = "bot"
756
+ title = "Bot"
757
+ version = "DotBot"
758
+ elsif agent.index("msnbot") != nil
759
+ browser = "bot"
760
+ title = "Bot"
761
+ version = "MSN bot"
762
+ elsif agent.index("yandexbot") != nil
763
+ browser = "bot"
764
+ title = "Bot"
765
+ version = "Yandex Bot"
766
+ elsif agent.index("mj12bot") != nil
767
+ browser = "bot"
768
+ title = "Bot"
769
+ version = "Majestic12 Bot"
770
+ elsif agent.index("facebookexternalhit") != nil
771
+ browser = "bot"
772
+ title = "Bot"
773
+ version = "Facebook Externalhit"
774
+ elsif agent.index("sitebot") != nil
775
+ browser = "bot"
776
+ title = "Bot"
777
+ version = "SiteBot"
778
+ elsif match = agent.match(/java\/([\d\.]+)/)
779
+ browser = "bot"
780
+ title = "Java"
781
+ version = match[1]
782
+ elsif match = agent.match(/ezooms\/([\d\.]+)/)
783
+ browser = "bot"
784
+ title = "Ezooms"
785
+ version = match[1]
786
+ else
787
+ browser = "unknown"
788
+ title = "(unknown browser)"
789
+ version = "(unknown version)"
790
+ end
791
+
792
+ return {
793
+ "browser" => browser,
794
+ "title" => title,
795
+ "version" => version
796
+ }
797
+ end
798
+
799
+ def self.locale(args = {})
800
+ begin
801
+ servervar = _server
802
+ rescue Exception
803
+ servervar = $_SERVER
804
+ end
805
+
806
+ if !servervar
807
+ raise "Could not figure out meta data."
808
+ end
809
+
810
+ ret = {
811
+ :recommended => [],
812
+ :browser => []
813
+ }
814
+
815
+ alangs = servervar["HTTP_ACCEPT_LANGUAGE"].to_s
816
+ if alangs.length > 0
817
+ alangs.split(/\s*,\s*/).each do |alang|
818
+ if qmatch = alang.match(/;\s*q=([\d\.]+)/)
819
+ alang.gsub!(/;\s*q=([\d\.]+)/, "")
820
+ q = qmatch[1].to_f
821
+ else
822
+ q = 1.0
823
+ end
824
+
825
+ if match = alang.match(/^([A-z]+)-([A-z]+)$/)
826
+ locale = match[1]
827
+ sublocale = match[2]
828
+ else
829
+ locale = alang
830
+ sublocale = false
831
+ end
832
+
833
+ ret[:browser] << {
834
+ :locale => locale,
835
+ :sublocale => sublocale,
836
+ :q => q
837
+ }
838
+ end
839
+ end
840
+
841
+ if args[:supported] and ret[:browser]
842
+ ret[:browser].each do |locale|
843
+ args[:supported].each do |supported_locale|
844
+ if match = supported_locale.match(/^([A-z]+)_([A-z]+)$/)
845
+ if match[1] == locale[:locale]
846
+ if !locale[:sublocale]
847
+ ret[:recommended] << supported_locale if ret[:recommended].index(supported_locale) == nil
848
+ elsif locale[:sublocale] == match[1]
849
+ ret[:recommended] << supported_locale if ret[:recommended].index(supported_locale) == nil
850
+ end
851
+ end
852
+ end
853
+ end
854
+ end
855
+ end
856
+
857
+ if args[:default]
858
+ ret[:recommended] << args[:default] if ret[:recommended].index(args[:default]) == nil
859
+ end
860
+
861
+ return ret
862
+ end
863
+
864
+ def self.hiddens(hidden_arr)
865
+ html = ""
866
+
867
+ hidden_arr.each do |hidden_hash|
868
+ html += "<input type=\"hidden\" name=\"#{hidden_hash[:name].to_s.html}\" value=\"#{hidden_hash[:value].to_s.html}\" />"
869
+ end
870
+
871
+ return html
872
+ end
873
+
874
+ def self.ahref_parse(str)
875
+ return str.to_s.gsub("&", "&amp;")
876
+ end
877
+ end
878
+
879
+ def alert(string)
880
+ return Knj::Web.alert(string)
881
+ end
882
+
883
+ def redirect(string)
884
+ return Knj::Web.redirect(string)
885
+ end
886
+
887
+ def jsback(string)
888
+ return Knj::Web.back
889
+ end
890
+
891
+ class String
892
+ def html
893
+ return self.to_s.gsub(/&/, "&amp;").gsub(/\"/, "&quot;").gsub(/>/, "&gt;").gsub(/</, "&lt;")
894
+ end
895
+
896
+ def sql
897
+ begin
898
+ return _httpsession.db.escape(self)
899
+ rescue NameError
900
+ #ignore - not in KnjAppServer HTTP-session.
901
+ end
902
+
903
+ begin
904
+ return _db.escape(self)
905
+ rescue NameError
906
+ #ignore - not i KnjAppServer HTTP-session.
907
+ end
908
+
909
+ return $db.escape(self) if $db
910
+ raise "Could not figure out where to find db object."
911
+ end
912
+ end
913
+
914
+ class Symbol
915
+ def html
916
+ return self.to_s.html
917
+ end
918
+
919
+ def sql
920
+ return self.to_s.sql
921
+ end
922
+ end
923
+
924
+ class Fixnum
925
+ def sql
926
+ return self.to_s.sql
927
+ end
928
+
929
+ def html
930
+ return self.to_s.html
931
+ end
932
+ end