knjrbfw 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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/php.rb ADDED
@@ -0,0 +1,717 @@
1
+ # coding: utf-8
2
+
3
+ module Knj::Php
4
+ def is_numeric(n) Float n rescue false end
5
+
6
+ def call_user_func(*paras)
7
+ if paras[0].is_a?(String)
8
+ send_paras = [paras[0].to_sym]
9
+ send_paras << paras[1] if paras[1]
10
+ send(*send_paras)
11
+ elsif paras[0].is_a?(Array)
12
+ send_paras = [paras[0][1].to_sym]
13
+ send_paras << paras[1] if paras[1]
14
+ paras[0][0].send(*send_paras)
15
+ else
16
+ raise "Unknown user-func."
17
+ end
18
+ end
19
+
20
+ def print_r(argument, ret = false, count = 1)
21
+ retstr = ""
22
+ cstr = argument.class.to_s
23
+ supercl = argument.class.superclass
24
+
25
+ if supercl
26
+ superstr = supercl.to_s
27
+ end
28
+
29
+ if argument.is_a?(Hash) or supercl.is_a?(Hash) or cstr == "Knjappserver::Session_accessor" or cstr == "SQLite3::ResultSet::HashWithTypes" or cstr == "CGI" or cstr == "Knj::Db_row" or cstr == "Knj::Datarow" or cstr == "Apache::Table" or superstr == "Knj::Db_row" or superstr == "Knj::Datarow" or argument.respond_to?(:to_hash)
30
+ if argument.respond_to?(:to_hash)
31
+ argument_use = argument.to_hash
32
+ else
33
+ argument_use = argument
34
+ end
35
+
36
+ retstr += argument.class.to_s + "{\n"
37
+ argument_use.each do |pair|
38
+ i = 0
39
+ while(i < count)
40
+ retstr += " "
41
+ i += 1
42
+ end
43
+
44
+ if pair[0].is_a?(Symbol)
45
+ keystr = ":#{pair[0].to_s}"
46
+ else
47
+ keystr = pair[0].to_s
48
+ end
49
+
50
+ retstr += "[#{keystr}] => "
51
+ retstr += print_r(pair[1], true, count + 1).to_s
52
+ end
53
+
54
+ i = 0
55
+ while(i < count - 1)
56
+ retstr += " "
57
+ i += 1
58
+ end
59
+
60
+ retstr += "}\n"
61
+ elsif cstr == "Dictionary"
62
+ retstr += argument.class.to_s + "{\n"
63
+ argument.each do |key, val|
64
+ i = 0
65
+ while(i < count)
66
+ retstr += " "
67
+ i += 1
68
+ end
69
+
70
+ if key.is_a?(Symbol)
71
+ keystr = ":#{key.to_s}"
72
+ else
73
+ keystr = key.to_s
74
+ end
75
+
76
+ retstr += "[#{keystr}] => "
77
+ retstr += Knj::Php.print_r(val, true, count + 1).to_s
78
+ end
79
+
80
+ i = 0
81
+ while(i < count - 1)
82
+ retstr += " "
83
+ i += 1
84
+ end
85
+
86
+ retstr += "}\n"
87
+ elsif argument.is_a?(MatchData) or argument.is_a?(Array) or cstr == "Array" or supercl.is_a?(Array)
88
+ retstr += argument.class.to_s + "{\n"
89
+
90
+ arr_count = 0
91
+ argument.to_a.each do |i|
92
+ i_spaces = 0
93
+ while(i_spaces < count)
94
+ retstr += " "
95
+ i_spaces += 1
96
+ end
97
+
98
+ retstr += "[" + arr_count.to_s + "] => "
99
+ retstr += print_r(i, true, count + 1).to_s
100
+ arr_count += 1
101
+ end
102
+
103
+ i_spaces = 0
104
+ while(i_spaces < count - 1)
105
+ retstr += " "
106
+ i_spaces += 1
107
+ end
108
+
109
+ retstr += "}\n"
110
+ elsif cstr == "WEBrick::HTTPUtils::FormData"
111
+ retstr += "{#{argument.class.to_s}}"
112
+ elsif argument.is_a?(String) or argument.is_a?(Integer) or argument.is_a?(Fixnum) or argument.is_a?(Float)
113
+ retstr += argument.to_s + "\n"
114
+ elsif argument.is_a?(Symbol)
115
+ retstr += ":#{argument.to_s}\n"
116
+ elsif argument.is_a?(Exception)
117
+ retstr += "#\{#{argument.class.to_s}: #{argument.message}}\n"
118
+ elsif cstr == "Knj::Unix_proc"
119
+ retstr += "#{argument.class.to_s}::data - "
120
+ retstr += print_r(argument.data, true, count).to_s
121
+ else
122
+ #print argument.to_s, "\n"
123
+ retstr += "Unknown class: " + cstr + "\n"
124
+ end
125
+
126
+ if ret.is_a?(TrueClass)
127
+ return retstr
128
+ else
129
+ print retstr
130
+ end
131
+ end
132
+
133
+ def gtext(string)
134
+ return GetText._(string)
135
+ end
136
+
137
+ def gettext(string)
138
+ return GetText._(string)
139
+ end
140
+
141
+ def number_format(number, precision = 2, seperator = ".", delimiter = ",")
142
+ if !number.is_a?(Float)
143
+ number = number.to_f
144
+ end
145
+
146
+ if number < 1
147
+ return sprintf("%.#{precision.to_s}f", number).gsub(".", seperator)
148
+ end
149
+
150
+ number = sprintf("%.#{precision.to_s}f", number)
151
+
152
+ #thanks for jmoses wrote some of tsep-code: http://snippets.dzone.com/posts/show/693
153
+ st = number.reverse
154
+ r = ""
155
+ max = if st[-1].chr == '-'
156
+ st.size - 1
157
+ else
158
+ st.size
159
+ end
160
+
161
+ if st.to_i == st.to_f
162
+ 1.upto(st.size) do |i|
163
+ r << st[i-1].chr if st[i-1].chr != "."
164
+ r << ',' if i%3 == 0 and i < max
165
+ end
166
+ else
167
+ start = nil
168
+ 1.upto(st.size) do |i|
169
+ r << st[i-1].chr
170
+ start = 0 if r[-1].chr == '.' and not start
171
+ if start
172
+ r << ',' if start % 3 == 0 and start != 0 and i < max
173
+ start += 1
174
+ end
175
+ end
176
+ end
177
+
178
+ numberstr = r.to_s.reverse
179
+ numberstr = numberstr.gsub(",", "comma").gsub(".", "dot")
180
+ numberstr = numberstr.gsub("comma", delimiter).gsub("dot", seperator)
181
+
182
+ return numberstr
183
+ end
184
+
185
+ def ucwords(string)
186
+ return string.to_s.split(" ").select {|w| w.capitalize! || w }.join(" ")
187
+ end
188
+
189
+ def strtoupper(str)
190
+ return str.to_s.upcase
191
+ end
192
+
193
+ def strtolower(str)
194
+ return str.to_s.downcase
195
+ end
196
+
197
+ def htmlspecialchars(string)
198
+ require "cgi"
199
+ return CGI.escapeHTML(string)
200
+ end
201
+
202
+ def isset(var)
203
+ return false if var == nil or var == false
204
+ return true
205
+ end
206
+
207
+ def strpos(haystack, needle)
208
+ return false if !haystack
209
+ return false if !haystack.to_s.include?(needle)
210
+ return haystack.index(needle)
211
+ end
212
+
213
+ def substr(string, from, to = -1)
214
+ string = string.to_s.slice(from.to_i, to.to_i)
215
+
216
+ if Knj::Php.class_exists("Iconv")
217
+ ic = Iconv.new("UTF-8//IGNORE", "UTF-8")
218
+ string = ic.iconv(string + " ")[0..-2]
219
+ end
220
+
221
+ return string
222
+ end
223
+
224
+ def md5(string)
225
+ return Digest::MD5.hexdigest(string.to_s)
226
+ end
227
+
228
+ def header(headerstr)
229
+ match = headerstr.to_s.match(/(.*): (.*)/)
230
+ if match
231
+ key = match[1]
232
+ value = match[2]
233
+ else
234
+ #HTTP/1.1 404 Not Found
235
+
236
+ match_status = headerstr.to_s.match(/^HTTP\/[0-9\.]+ ([0-9]+) (.+)$/)
237
+ if match_status
238
+ key = "Status"
239
+ value = match_status[1] + " " + match_status[2]
240
+ else
241
+ raise "Couldnt parse header."
242
+ end
243
+ end
244
+
245
+ sent = false
246
+
247
+ if Knj::Php.class_exists("Apache")
248
+ Apache.request.headers_out[key] = value
249
+ sent = true
250
+ end
251
+
252
+ begin
253
+ _httpsession.eruby.header(key, value) #This is for knjAppServer - knj.
254
+ sent = true
255
+ rescue NameError => e
256
+ if $knj_eruby
257
+ $knj_eruby.header(key, value)
258
+ sent = true
259
+ elsif $cgi.is_a?(CGI)
260
+ sent = true
261
+ $cgi.header(key => value)
262
+ elsif $_CGI.is_a?(CGI)
263
+ sent = true
264
+ $_CGI.header(key => value)
265
+ end
266
+ end
267
+
268
+ return sent
269
+ end
270
+
271
+ def nl2br(string)
272
+ return string.to_s.gsub("\n", "<br />\n")
273
+ end
274
+
275
+ def urldecode(string)
276
+ #require "cgi"
277
+ #return CGI.unescape(string)
278
+
279
+ #Thanks to CGI framework
280
+ str = string.to_s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/) do
281
+ [$1.delete('%')].pack('H*')
282
+ end
283
+ end
284
+
285
+ def urlencode(string)
286
+ #require "cgi"
287
+ #return CGI.escape(string.to_s)
288
+
289
+ #Thanks to CGI framework
290
+ string.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/) do
291
+ '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
292
+ end.tr(' ', '+')
293
+ end
294
+
295
+ def file_put_contents(filepath, content)
296
+ File.open(filepath.untaint, "w") do |file|
297
+ file.write(content)
298
+ end
299
+ end
300
+
301
+ def file_get_contents(filepath)
302
+ filepath = filepath.to_s
303
+
304
+ if http_match = filepath.match(/^http(s|):\/\/([A-z_\d\.]+)(|:(\d+))(\/(.+))$/)
305
+ if http_match[4].to_s.length > 0
306
+ port = http_match[4].to_i
307
+ end
308
+
309
+ args = {
310
+ "host" => http_match[2]
311
+ }
312
+
313
+ if http_match[1] == "s"
314
+ args["ssl"] = true
315
+ args["validate"] = false
316
+
317
+ if !port
318
+ port = 443
319
+ end
320
+ end
321
+
322
+ args["port"] = port if port
323
+
324
+ http = Knj::Http.new(args)
325
+ data = http.get(http_match[5])
326
+ return data["data"]
327
+ end
328
+
329
+ return File.read(filepath.untaint)
330
+ end
331
+
332
+ def is_file(filepath)
333
+ begin
334
+ if File.file?(filepath)
335
+ return true
336
+ end
337
+ rescue Exception
338
+ return false
339
+ end
340
+
341
+ return false
342
+ end
343
+
344
+ def is_dir(filepath)
345
+ begin
346
+ if File.directory?(filepath)
347
+ return true
348
+ end
349
+ rescue Exception
350
+ return false
351
+ end
352
+
353
+ return false
354
+ end
355
+
356
+ def unlink(filepath)
357
+ FileUtils.rm(filepath)
358
+ end
359
+
360
+ def file_exists(filepath)
361
+ return true if File.exists?(filepath.to_s.untaint)
362
+ return false
363
+ end
364
+
365
+ def strtotime(date_string, cur = nil)
366
+ if !cur
367
+ cur = Time.new
368
+ else
369
+ cur = Time.at(cur)
370
+ end
371
+
372
+ date_string = date_string.to_s.downcase
373
+
374
+ if date_string.match(/[0-9]+-[0-9]+-[0-9]+/i)
375
+ begin
376
+ return Time.local(*ParseDate.parsedate(date_string)).to_i
377
+ rescue
378
+ return 0
379
+ end
380
+ end
381
+
382
+ date_string.scan(/((\+|-)([0-9]+) (\S+))/) do |match|
383
+ timestr = match[3]
384
+ number = match[2].to_i
385
+ mathval = match[1]
386
+ add = nil
387
+
388
+ if timestr == "years" or timestr == "year"
389
+ add = ((number.to_i * 3600) * 24) * 365
390
+ elsif timestr == "months" or timestr == "month"
391
+ add = ((number.to_i * 3600) * 24) * 30
392
+ elsif timestr == "weeks" or timestr == "week"
393
+ add = (number.to_i * 3600) * 24 * 7
394
+ elsif timestr == "days" or timestr == "day"
395
+ add = (number.to_i * 3600) * 24
396
+ elsif timestr == "hours" or timestr == "hour"
397
+ add = number.to_i * 3600
398
+ elsif timestr == "minutes" or timestr == "minute" or timestr == "min" or timestr == "mints"
399
+ add = number.to_i * 60
400
+ elsif timestr == "seconds" or timestr == "second" or timestr == "sec" or timestr == "secs"
401
+ add = number.to_i
402
+ end
403
+
404
+ if mathval == "+"
405
+ cur += add
406
+ elsif mathval == "-"
407
+ cur -= add
408
+ end
409
+ end
410
+
411
+ return cur.to_i
412
+ end
413
+
414
+ def class_exists(classname)
415
+ begin
416
+ Kernel.const_get(classname)
417
+ return true
418
+ rescue Exception
419
+ return false
420
+ end
421
+ end
422
+
423
+ def html_entity_decode(string)
424
+ require "cgi"
425
+ string = CGI.unescapeHTML(string.to_s)
426
+ string = string.gsub("&oslash;", "ø").gsub("&aelig;", "æ").gsub("&aring;", "å").gsub("&euro;", "€").gsub("#39;", "'")
427
+ return string
428
+ end
429
+
430
+ def strip_tags(htmlstr)
431
+ htmlstr.scan(/(<([\/A-z]+).*?>)/) do |match|
432
+ htmlstr = htmlstr.gsub(match[0], "")
433
+ end
434
+
435
+ return htmlstr.gsub("&nbsp;", " ")
436
+ end
437
+
438
+ def die(msg)
439
+ print msg
440
+ exit
441
+ end
442
+
443
+ def fopen(filename, mode)
444
+ begin
445
+ return File.open(filename, mode)
446
+ rescue Exception
447
+ return false
448
+ end
449
+ end
450
+
451
+ def fwrite(fp, str)
452
+ begin
453
+ fp.print str
454
+ rescue Exception
455
+ return false
456
+ end
457
+
458
+ return true
459
+ end
460
+
461
+ def fputs(fp, str)
462
+ begin
463
+ fp.print str
464
+ rescue Exception
465
+ return false
466
+ end
467
+
468
+ return true
469
+ end
470
+
471
+ def fread(fp, length = 4096)
472
+ return fp.read(length)
473
+ end
474
+
475
+ def fgets(fp, length = 4096)
476
+ return fp.read(length)
477
+ end
478
+
479
+ def fclose(fp)
480
+ fp.close
481
+ end
482
+
483
+ def move_uploaded_file(tmp_path, new_path)
484
+ FileUtils.mv(tmp_path.untaint, new_path.untaint)
485
+ end
486
+
487
+ def utf8_encode(str)
488
+ str = str.to_s if str.respond_to?(:to_s)
489
+ require "iconv" if RUBY_PLATFORM == "java" #This fixes a bug in JRuby where Iconv otherwise would not be detected.
490
+
491
+ if str.respond_to?(:encode)
492
+ return str.encode("iso-8859-1", "utf-8")
493
+ elsif Knj::Php.class_exists("Iconv")
494
+ begin
495
+ return Iconv.conv("iso-8859-1", "utf-8", str)
496
+ rescue
497
+ return Iconv.conv("iso-8859-1//ignore", "utf-8", str + " ").slice(0..-2)
498
+ end
499
+ else
500
+ raise "Could not figure out how to utf8-encode string."
501
+ end
502
+ end
503
+
504
+ def utf8_decode(str)
505
+ str = str.to_s if str.respond_to?(:to_s)
506
+ require "iconv" if RUBY_PLATFORM == "java" #This fixes a bug in JRuby where Iconv otherwise would not be detected.
507
+
508
+ if str.respond_to?(:encode)
509
+ return str.encode("utf-8", "iso-8859-1")
510
+ elsif Knj::Php.class_exists("Iconv")
511
+ begin
512
+ return Iconv.conv("utf-8", "iso-8859-1", str.to_s)
513
+ rescue
514
+ return Iconv.conv("utf-8//ignore", "iso-8859-1", str.to_s)
515
+ end
516
+ else
517
+ raise "Could not figure out how to utf8-decode string."
518
+ end
519
+ end
520
+
521
+ def setcookie(cname, cvalue, expire = nil, domain = nil)
522
+ args = {
523
+ "name" => cname,
524
+ "value" => cvalue,
525
+ "path" => "/"
526
+ }
527
+ args["expires"] = Time.at(expire) if expire
528
+ args["domain"] = domain if domain
529
+
530
+ cookie = CGI::Cookie.new(args)
531
+ status = Knj::Php.header("Set-Cookie: #{cookie.to_s}")
532
+ $_COOKIE[cname] = cvalue if $_COOKIE
533
+ return status
534
+ end
535
+
536
+ def explode(expl, strexp)
537
+ return strexp.to_s.split(expl)
538
+ end
539
+
540
+ def dirname(filename)
541
+ File.dirname(filename)
542
+ end
543
+
544
+ def chdir(dirname)
545
+ Dir.chdir(dirname)
546
+ end
547
+
548
+ def include_once(filename)
549
+ require filename
550
+ end
551
+
552
+ def require_once(filename)
553
+ require filename
554
+ end
555
+
556
+ def echo(string)
557
+ print string
558
+ end
559
+
560
+ def msgbox(title, msg, type)
561
+ Knj::Gtk2.msgbox(msg, type, title)
562
+ end
563
+
564
+ def count(array)
565
+ return array.length
566
+ end
567
+
568
+ def json_encode(obj)
569
+ if Knj::Php.class_exists("Rho")
570
+ return Rho::JSON.generate(obj)
571
+ elsif Knj::Php.class_exists("JSON")
572
+ return JSON.generate(obj)
573
+ else
574
+ raise "Could not figure out which JSON lib to use."
575
+ end
576
+ end
577
+
578
+ def json_decode(data)
579
+ raise "String was not given to 'Knj::Php.json_decode'." if !data.is_a?(String)
580
+
581
+ if Knj::Php.class_exists("Rho")
582
+ return Rho::JSON.parse(data)
583
+ elsif Knj::Php.class_exists("JSON")
584
+ return JSON.parse(data)
585
+ else
586
+ raise "Could not figure out which JSON lib to use."
587
+ end
588
+ end
589
+
590
+ def time
591
+ return Time.new.to_i
592
+ end
593
+
594
+ def microtime(get_as_float = false)
595
+ microtime = Time.now.to_f
596
+
597
+ return microtime if get_as_float
598
+
599
+ splitted = microtime.to_s.split(",")
600
+ return "#{splitted[0]} #{splitted[1]}"
601
+ end
602
+
603
+ def mktime(hour = nil, min = nil, sec = nil, date = nil, month = nil, year = nil, is_dst = -1)
604
+ cur_time = Time.new
605
+
606
+ hour = cur_time.hour if hour == nil
607
+ min = cur_time.min if min == nil
608
+ sec = cur_time.sec if sec == nil
609
+ date = cur_time.date if date == nil
610
+ month = cur_time.month if month == nil
611
+ year = cur_time.year if year == nil
612
+
613
+ new_time = Datestamp.from_dbstr("#{year.to_s}-#{month.to_s}-#{date.to_s} #{hour.to_s}:#{min.to_s}:#{sec.to_s}")
614
+ return new_time.to_i
615
+ end
616
+
617
+ def date(date_format, date_unixt = nil)
618
+ date_unixt = Time.now.to_i if date_unixt == nil
619
+
620
+ date_object = Time.at(date_unixt.to_i)
621
+
622
+ date_format = date_format.gsub("d", "%02d" % date_object.mday)
623
+ date_format = date_format.gsub("m", "%02d" % date_object.mon)
624
+ date_format = date_format.gsub("y", "%02d" % date_object.year.to_s[2,2].to_i)
625
+ date_format = date_format.gsub("Y", "%04d" % date_object.year)
626
+ date_format = date_format.gsub("H", "%02d" % date_object.hour)
627
+ date_format = date_format.gsub("i", "%02d" % date_object.min)
628
+ date_format = date_format.gsub("s", "%02d" % date_object.sec)
629
+
630
+ return date_format
631
+ end
632
+
633
+ def basename(filepath)
634
+ splitted = filepath.to_s.split("/").last
635
+ return false if !splitted
636
+
637
+ ret = splitted.split(".")
638
+ ret.delete(ret.last)
639
+ return ret.join(".")
640
+ end
641
+
642
+ def base64_encode(str)
643
+ return Base64.encode64(str.to_s)
644
+ end
645
+
646
+ def base64_decode(str)
647
+ return Base64.decode64(str.to_s)
648
+ end
649
+
650
+ def pathinfo(filepath)
651
+ filepath = filepath.to_s
652
+
653
+ dirname = File.dirname(filepath)
654
+ dirname = "" if dirname == "."
655
+
656
+ return {
657
+ "dirname" => dirname,
658
+ "basename" => self.basename(filepath),
659
+ "extension" => filepath.split(".").last,
660
+ "filename" => filepath.split("/").last
661
+ }
662
+ end
663
+
664
+ def realpath(pname)
665
+ begin
666
+ return Pathname.new(pname.to_s).realpath.to_s
667
+ rescue => e
668
+ return false
669
+ end
670
+ end
671
+
672
+ # Returns the scripts current memory usage.
673
+ def memory_get_usage
674
+ # FIXME: This only works on Linux at the moment, since we are doing this by command line - knj.
675
+ memory_usage = `ps -o rss= -p #{Process.pid}`.to_i * 1024
676
+ return memory_usage
677
+ end
678
+
679
+ # Should return the peak usage of the running script, but I have found no way to detect this... Instead returns the currently memory usage.
680
+ def memory_get_peak_usage
681
+ return self.memory_get_usage
682
+ end
683
+
684
+ def ip2long(ip)
685
+ return IPAddr.new(ip).to_i
686
+ end
687
+
688
+ # Thanks to this link for the following functions: http://snippets.dzone.com/posts/show/4509
689
+ def long2ip(long)
690
+ ip = []
691
+ 4.times do |i|
692
+ ip.push(long.to_i & 255)
693
+ long = long.to_i >> 8
694
+ end
695
+
696
+ ip.reverse.join(".")
697
+ end
698
+
699
+ def gzcompress(str, level = 3)
700
+ zstream = Zlib::Deflate.new
701
+ gzip_str = zstream.deflate(str.to_s, Zlib::FINISH)
702
+ zstream.close
703
+
704
+ return gzip_str
705
+ end
706
+
707
+ def gzuncompress(str, length = 0)
708
+ zstream = Zlib::Inflate.new
709
+ plain_str = zstream.inflate(str.to_s)
710
+ zstream.finish
711
+ zstream.close
712
+
713
+ return plain_str.to_s
714
+ end
715
+
716
+ module_function(*instance_methods)
717
+ end
@@ -0,0 +1,5 @@
1
+ class Knj::Php_parser
2
+ def args
3
+
4
+ end
5
+ end