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.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +32 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/lib/knj/.gitignore +1 -0
- data/lib/knj/arrayext.rb +157 -0
- data/lib/knj/autoload/activesupport.rb +2 -0
- data/lib/knj/autoload/backups/facets_dictionary.rb +430 -0
- data/lib/knj/autoload/backups/parsedate.rb +53 -0
- data/lib/knj/autoload/backups/ping.rb +64 -0
- data/lib/knj/autoload/cinch.rb +2 -0
- data/lib/knj/autoload/erubis.rb +6 -0
- data/lib/knj/autoload/facebooker.rb +3 -0
- data/lib/knj/autoload/facets_dictionary.rb +7 -0
- data/lib/knj/autoload/gd2.rb +2 -0
- data/lib/knj/autoload/gettext.rb +9 -0
- data/lib/knj/autoload/gtk2.rb +5 -0
- data/lib/knj/autoload/json_autoload.rb +7 -0
- data/lib/knj/autoload/magick.rb +6 -0
- data/lib/knj/autoload/mysql.rb +6 -0
- data/lib/knj/autoload/parsedate.rb +1 -0
- data/lib/knj/autoload/ping.rb +64 -0
- data/lib/knj/autoload/rexml.rb +12 -0
- data/lib/knj/autoload/soap.rb +3 -0
- data/lib/knj/autoload/sqlite3.rb +6 -0
- data/lib/knj/autoload/tmail.rb +6 -0
- data/lib/knj/autoload/twitter.rb +2 -0
- data/lib/knj/autoload/xmlsimple.rb +6 -0
- data/lib/knj/autoload/zip.rb +6 -0
- data/lib/knj/autoload.rb +136 -0
- data/lib/knj/compiler.rb +53 -0
- data/lib/knj/cpufreq.rb +40 -0
- data/lib/knj/datarow.rb +256 -0
- data/lib/knj/datestamp.rb +91 -0
- data/lib/knj/datet.rb +448 -0
- data/lib/knj/degulesider.rb +46 -0
- data/lib/knj/erb/apache_knjerb.conf +8 -0
- data/lib/knj/erb/cache/README +1 -0
- data/lib/knj/erb/erb.rb +21 -0
- data/lib/knj/erb/erb_1.9.rb +13 -0
- data/lib/knj/erb/erb_cache_clean.rb +20 -0
- data/lib/knj/erb/erb_fcgi.rb +44 -0
- data/lib/knj/erb/erb_fcgi_1.9.rb +44 -0
- data/lib/knj/erb/erb_fcgi_jruby.rb +7 -0
- data/lib/knj/erb/erb_jruby.rb +22 -0
- data/lib/knj/erb/include.rb +248 -0
- data/lib/knj/errors.rb +19 -0
- data/lib/knj/eruby.rb +224 -0
- data/lib/knj/event_filemod.rb +53 -0
- data/lib/knj/event_handler.rb +69 -0
- data/lib/knj/exchangerates.rb +39 -0
- data/lib/knj/ext/webrick.rb +31 -0
- data/lib/knj/filesystem.rb +8 -0
- data/lib/knj/fs/drivers/filesystem.rb +14 -0
- data/lib/knj/fs/drivers/ftp.rb +33 -0
- data/lib/knj/fs/drivers/ssh.rb +28 -0
- data/lib/knj/fs/fs.rb +36 -0
- data/lib/knj/gettext_fallback.rb +17 -0
- data/lib/knj/gettext_threadded.rb +77 -0
- data/lib/knj/google_sitemap.rb +59 -0
- data/lib/knj/gtk2.rb +277 -0
- data/lib/knj/gtk2_cb.rb +85 -0
- data/lib/knj/gtk2_menu.rb +57 -0
- data/lib/knj/gtk2_statuswindow.rb +64 -0
- data/lib/knj/gtk2_tv.rb +63 -0
- data/lib/knj/hash_methods.rb +37 -0
- data/lib/knj/http.rb +190 -0
- data/lib/knj/includes/appserver_cli.rb +39 -0
- data/lib/knj/ip2location.rb +22 -0
- data/lib/knj/ironruby-gtk2/button.rb +19 -0
- data/lib/knj/ironruby-gtk2/dialog.rb +44 -0
- data/lib/knj/ironruby-gtk2/entry.rb +9 -0
- data/lib/knj/ironruby-gtk2/gdk_event.rb +3 -0
- data/lib/knj/ironruby-gtk2/gdk_eventbutton.rb +13 -0
- data/lib/knj/ironruby-gtk2/gdk_pixbuf.rb +11 -0
- data/lib/knj/ironruby-gtk2/gladexml.rb +104 -0
- data/lib/knj/ironruby-gtk2/glib.rb +15 -0
- data/lib/knj/ironruby-gtk2/gtk2.rb +148 -0
- data/lib/knj/ironruby-gtk2/gtk_builder.rb +31 -0
- data/lib/knj/ironruby-gtk2/gtk_cellrenderertext.rb +5 -0
- data/lib/knj/ironruby-gtk2/gtk_combobox.rb +19 -0
- data/lib/knj/ironruby-gtk2/gtk_filechooserbutton.rb +5 -0
- data/lib/knj/ironruby-gtk2/gtk_liststore.rb +18 -0
- data/lib/knj/ironruby-gtk2/gtk_menu.rb +5 -0
- data/lib/knj/ironruby-gtk2/gtk_menuitem.rb +7 -0
- data/lib/knj/ironruby-gtk2/gtk_statusicon.rb +8 -0
- data/lib/knj/ironruby-gtk2/gtk_treeiter.rb +24 -0
- data/lib/knj/ironruby-gtk2/gtk_treeselection.rb +16 -0
- data/lib/knj/ironruby-gtk2/gtk_treeview.rb +19 -0
- data/lib/knj/ironruby-gtk2/gtk_treeviewcolumn.rb +32 -0
- data/lib/knj/ironruby-gtk2/iconsize.rb +3 -0
- data/lib/knj/ironruby-gtk2/image.rb +15 -0
- data/lib/knj/ironruby-gtk2/label.rb +19 -0
- data/lib/knj/ironruby-gtk2/stock.rb +4 -0
- data/lib/knj/ironruby-gtk2/tests/test.glade +15 -0
- data/lib/knj/ironruby-gtk2/tests/test_2.rb +22 -0
- data/lib/knj/ironruby-gtk2/tests/test_ironruby_window.rb +47 -0
- data/lib/knj/ironruby-gtk2/vbox.rb +5 -0
- data/lib/knj/ironruby-gtk2/window.rb +23 -0
- data/lib/knj/jruby-gtk2/builder/test_builder.glade +43 -0
- data/lib/knj/jruby-gtk2/builder/test_builder.rb +19 -0
- data/lib/knj/jruby-gtk2/builder/test_builder.ui +43 -0
- data/lib/knj/jruby-gtk2/builder.rb +27 -0
- data/lib/knj/jruby-gtk2/cellrenderertext.rb +12 -0
- data/lib/knj/jruby-gtk2/checkbutton.rb +3 -0
- data/lib/knj/jruby-gtk2/combobox.rb +29 -0
- data/lib/knj/jruby-gtk2/dialog.rb +44 -0
- data/lib/knj/jruby-gtk2/eventbutton.rb +21 -0
- data/lib/knj/jruby-gtk2/gladexml.rb +99 -0
- data/lib/knj/jruby-gtk2/gtk-4.0.jar +0 -0
- data/lib/knj/jruby-gtk2/gtk2.rb +246 -0
- data/lib/knj/jruby-gtk2/hbox.rb +10 -0
- data/lib/knj/jruby-gtk2/iconsize.rb +5 -0
- data/lib/knj/jruby-gtk2/image.rb +10 -0
- data/lib/knj/jruby-gtk2/liststore.rb +56 -0
- data/lib/knj/jruby-gtk2/menu.rb +40 -0
- data/lib/knj/jruby-gtk2/progressbar.rb +12 -0
- data/lib/knj/jruby-gtk2/statusicon.rb +8 -0
- data/lib/knj/jruby-gtk2/stock.rb +8 -0
- data/lib/knj/jruby-gtk2/tests/test_glade_window.glade +163 -0
- data/lib/knj/jruby-gtk2/tests/test_glade_window.rb +47 -0
- data/lib/knj/jruby-gtk2/tests/test_normal_window.rb +17 -0
- data/lib/knj/jruby-gtk2/tests/test_trayicon.png +0 -0
- data/lib/knj/jruby-gtk2/tests/test_trayicon.rb +18 -0
- data/lib/knj/jruby-gtk2/treeview.rb +105 -0
- data/lib/knj/jruby-gtk2/vbox.rb +12 -0
- data/lib/knj/jruby-gtk2/window.rb +11 -0
- data/lib/knj/jruby_compiler.rb +14 -0
- data/lib/knj/knj.rb +19 -0
- data/lib/knj/knj_controller.rb +13 -0
- data/lib/knj/knjdb/dbtime.rb +30 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +327 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +130 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb +30 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +255 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +93 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +151 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb +29 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +300 -0
- data/lib/knj/knjdb/libknjdb.rb +438 -0
- data/lib/knj/knjdb/libknjdb_java_sqlite3.rb +83 -0
- data/lib/knj/knjdb/libknjdb_row.rb +149 -0
- data/lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb +69 -0
- data/lib/knj/knjdb/mysql-connector-java-5.1.13-bin.jar +0 -0
- data/lib/knj/knjdb/sqlitejdbc-v056.jar +0 -0
- data/lib/knj/libqt.rb +75 -0
- data/lib/knj/libqt_window.rb +10 -0
- data/lib/knj/locale_strings.rb +3 -0
- data/lib/knj/locales.rb +54 -0
- data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +56 -0
- data/lib/knj/mail.rb +75 -0
- data/lib/knj/mailobj.rb +82 -0
- data/lib/knj/mount.rb +115 -0
- data/lib/knj/notify.rb +13 -0
- data/lib/knj/nvidia_settings.rb +45 -0
- data/lib/knj/objects.rb +731 -0
- data/lib/knj/opts.rb +38 -0
- data/lib/knj/os.rb +158 -0
- data/lib/knj/php.rb +717 -0
- data/lib/knj/php_parser/arguments.rb +5 -0
- data/lib/knj/php_parser/functions.rb +97 -0
- data/lib/knj/php_parser/php_parser.rb +99 -0
- data/lib/knj/php_parser/tests/test.rb +12 -0
- data/lib/knj/php_parser/tests/test_function.php +8 -0
- data/lib/knj/php_parser/tests/test_function_run.rb +19 -0
- data/lib/knj/power_manager.rb +31 -0
- data/lib/knj/rand.rb +10 -0
- data/lib/knj/retry.rb +71 -0
- data/lib/knj/rhodes/mutex.rb +11 -0
- data/lib/knj/rhodes/rhodes.js +3 -0
- data/lib/knj/rhodes/rhodes.rb +11 -0
- data/lib/knj/rsvgbin.rb +20 -0
- data/lib/knj/scripts/degulesider.rb +12 -0
- data/lib/knj/scripts/filesearch.rb +51 -0
- data/lib/knj/scripts/ip2location.rb +12 -0
- data/lib/knj/scripts/keepalive.rb +6 -0
- data/lib/knj/scripts/svn_merge.rb +29 -0
- data/lib/knj/scripts/upgrade_knjrbfw_checker.rb +41 -0
- data/lib/knj/sms.rb +54 -0
- data/lib/knj/sshrobot/sshrobot.rb +93 -0
- data/lib/knj/strings.rb +65 -0
- data/lib/knj/sysuser.rb +27 -0
- data/lib/knj/tests/compiler/compiler_test.rb +13 -0
- data/lib/knj/tests/compiler/compiler_test_file.rb +62 -0
- data/lib/knj/tests/test_degulesider.rb +11 -0
- data/lib/knj/tests/test_mount.rb +30 -0
- data/lib/knj/tests/test_retry.rb +30 -0
- data/lib/knj/thread.rb +32 -0
- data/lib/knj/thread2.rb +47 -0
- data/lib/knj/threadhandler.rb +130 -0
- data/lib/knj/threadpool.rb +177 -0
- data/lib/knj/translations.rb +139 -0
- data/lib/knj/unix_proc.rb +82 -0
- data/lib/knj/web.rb +932 -0
- data/lib/knj/webscripts/image.rhtml +82 -0
- data/lib/knj/win.rb +4 -0
- data/lib/knj/win_registry.rb +60 -0
- data/lib/knj/win_tightvnc.rb +127 -0
- data/lib/knj/x11vnc.rb +48 -0
- data/lib/knj/youtube.rb +38 -0
- data/lib/knjrbfw.rb +4 -0
- data/spec/knjrbfw_spec.rb +269 -0
- data/spec/spec_helper.rb +12 -0
- 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("ø", "ø").gsub("æ", "æ").gsub("å", "å").gsub("€", "€").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(" ", " ")
|
|
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
|