gestion 1.9.12
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.
- checksums.yaml +7 -0
- data/.gitignore +48 -0
- data/.project +14 -0
- data/Binaries/adduser_to_buzz +15 -0
- data/Binaries/backup +7 -0
- data/Binaries/check_gestion +8 -0
- data/Binaries/gestion.gnumail +22 -0
- data/Binaries/gestion.logrotate +34 -0
- data/Binaries/gestion.service +12 -0
- data/Binaries/gestion_update.rb +183 -0
- data/Binaries/gestion_update.service +10 -0
- data/Binaries/get_compta +11 -0
- data/Binaries/kill_gestion +16 -0
- data/Binaries/ldap/add_indexes +51 -0
- data/Binaries/ldap/backup +2 -0
- data/Binaries/ldap/install_ldap +92 -0
- data/Binaries/ldap/restore +7 -0
- data/Binaries/lib_backup +5 -0
- data/Binaries/log_scan_errors +8 -0
- data/Binaries/loop_gestion +64 -0
- data/Binaries/onetimers/sync_courses_from_compta.rb +74 -0
- data/Binaries/onetimers/transfer_cash_from_ldap_to_csv +26 -0
- data/Binaries/reboot +5 -0
- data/Binaries/restore +3 -0
- data/Binaries/restore_do +22 -0
- data/Binaries/sort_events +31 -0
- data/Binaries/start_gestion +18 -0
- data/Binaries/swipe_gestion +18 -0
- data/Binaries/update_africompta +21 -0
- data/Binaries/update_users +3 -0
- data/Diplomas.src/accredited.odg +0 -0
- data/Diplomas.src/diploma.odg +0 -0
- data/Diplomas.src/label.odg +0 -0
- data/Diplomas.src/presence_sheet.ods +0 -0
- data/Diplomas.src/presence_sheet_small.ods +0 -0
- data/Diplomas.src/student_card.odg +0 -0
- data/Doc/130514-it-ideas.odt +0 -0
- data/Doc/Compta-cash.mm +179 -0
- data/Doc/General.odt +0 -0
- data/Entities/AccessGroups.rb +117 -0
- data/Entities/Activity.rb +178 -0
- data/Entities/ChatMsg.rb +142 -0
- data/Entities/Classroom.rb +11 -0
- data/Entities/Client.rb +19 -0
- data/Entities/Computer.rb +21 -0
- data/Entities/ConfigBase.rb +280 -0
- data/Entities/Course.rb +1588 -0
- data/Entities/CourseType.rb +171 -0
- data/Entities/DFiles.rb +466 -0
- data/Entities/FilesManage.rb +226 -0
- data/Entities/Grade.rb +186 -0
- data/Entities/Internet.rb +300 -0
- data/Entities/Netdev.rb +10 -0
- data/Entities/Person.rb +1175 -0
- data/Entities/Plug.rb +98 -0
- data/Entities/Quiz.rb +33 -0
- data/Entities/Recharges.rb +37 -0
- data/Entities/Report.rb +136 -0
- data/Entities/Room.rb +12 -0
- data/Entities/SMS.rb +30 -0
- data/Entities/ScheduleType.rb +33 -0
- data/Entities/Share.rb +120 -0
- data/Entities/Task.rb +51 -0
- data/Entities/Ticket.rb +72 -0
- data/Entities/Usage.rb +143 -0
- data/Entities/Worker.rb +29 -0
- data/Files/apache-profeda.conf +36 -0
- data/Files/label.erb +121 -0
- data/Files/label_notfound.erb +64 -0
- data/Files/label_notpassed.erb +84 -0
- data/Files/mobileinfo.erb +115 -0
- data/Files/smb.conf +333 -0
- data/Files/timetable.html +36 -0
- data/Files/timetable.js +239 -0
- data/Gemfile +12 -0
- data/Gemfile.dev +12 -0
- data/Gemfile.dev.lock +127 -0
- data/Gemfile.lock +127 -0
- data/Gemfile.prod +8 -0
- data/Gestion +35 -0
- data/Gestion.rb +220 -0
- data/INSTALL +40 -0
- data/Images/connection.xcf +0 -0
- data/Images/connection_no.png +0 -0
- data/Images/connection_wait.png +0 -0
- data/Images/connection_yes.png +0 -0
- data/Paths/Exas.rb +13 -0
- data/Paths/Files.rb +19 -0
- data/Paths/GetDiplomas.rb +20 -0
- data/Paths/Info.rb +114 -0
- data/Paths/Label.rb +187 -0
- data/Paths/MobileInfo.rb +19 -0
- data/Paths/internetCash.rb +34 -0
- data/Paths/internetWifi.rb +54 -0
- data/README.md +60 -0
- data/Rakefile +13 -0
- data/TODO +1391 -0
- data/Test/.gitignore +3 -0
- data/Test/Diplomas/base_gestion.odt +0 -0
- data/Test/Diplomas/base_report.odt +0 -0
- data/Test/Diplomas/carte_etudiant.odg +0 -0
- data/Test/Diplomas/exam_language.odt +0 -0
- data/Test/Diplomas/label.odg +0 -0
- data/Test/Diplomas/presence_sheet.ods +0 -0
- data/Test/Diplomas/presence_sheet_small.ods +0 -0
- data/Test/Diplomas/student_card.odg +0 -0
- data/Test/Manual/testMerge +18 -0
- data/Test/config_test.yaml +26 -0
- data/Test/db.testGestion +0 -0
- data/Test/dfiles/descs/avg-rescue.desc +10 -0
- data/Test/dfiles/descs/avg.desc +8 -0
- data/Test/dfiles/descs/driver.desc +8 -0
- data/Test/dfiles/descs/linuxmint.desc +7 -0
- data/Test/dfiles/files/avg-160203.exe +1 -0
- data/Test/dfiles/files/avg.iso +1 -0
- data/Test/dfiles/files/driver.exe +1 -0
- data/Test/dfiles/index_post.html +3 -0
- data/Test/dfiles/index_pre.html +8 -0
- data/Test/dfiles/priorities +5 -0
- data/Test/ge_activity.rb +124 -0
- data/Test/ge_chat.rb +106 -0
- data/Test/ge_compta.rb +67 -0
- data/Test/ge_configbase.rb +54 -0
- data/Test/ge_course.rb +1114 -0
- data/Test/ge_dfiles.rb +121 -0
- data/Test/ge_filesmanage.rb +180 -0
- data/Test/ge_info.rb +27 -0
- data/Test/ge_internet.rb +246 -0
- data/Test/ge_login.rb +55 -0
- data/Test/ge_person.rb +373 -0
- data/Test/ge_qvinfo.rb +28 -0
- data/Test/ge_report.rb +97 -0
- data/Test/ge_share.rb +27 -0
- data/Test/ge_sms.rb +34 -0
- data/Test/ge_tasks.rb +19 -0
- data/Test/ge_usage.rb +168 -0
- data/Test/ge_view.rb +46 -0
- data/Test/multiconf-captive +29 -0
- data/Test/test.conf +7 -0
- data/Test/test.rb +49 -0
- data/Test/test_bytes.png +0 -0
- data/VERSION +140 -0
- data/Views/Admin/Backup.rb +91 -0
- data/Views/Admin/Configuration.rb +44 -0
- data/Views/Admin/Credit.rb +32 -0
- data/Views/Admin/FilesManage.rb +219 -0
- data/Views/Admin/Function.rb +39 -0
- data/Views/Admin/Power.rb +49 -0
- data/Views/Admin/Printer.rb +37 -0
- data/Views/Admin/Server.rb +252 -0
- data/Views/Admin/Tabs.rb +5 -0
- data/Views/Admin/Update.rb +73 -0
- data/Views/Admin/UpdateSystem.rb +26 -0
- data/Views/Cashbox/Activity.rb +191 -0
- data/Views/Cashbox/Course.rb +141 -0
- data/Views/Cashbox/Credit.rb +79 -0
- data/Views/Cashbox/Report.rb +115 -0
- data/Views/Cashbox/Service.rb +105 -0
- data/Views/Cashbox/Tabs.rb +10 -0
- data/Views/Compta/Accounts.rb +36 -0
- data/Views/Compta/Course.rb +96 -0
- data/Views/Compta/Show.rb +6 -0
- data/Views/Compta/Transfer.rb +66 -0
- data/Views/Course/Diploma.rb +203 -0
- data/Views/Course/Grade.rb +401 -0
- data/Views/Course/Modify.rb +447 -0
- data/Views/Course/Print.rb +94 -0
- data/Views/Course/Responsible.rb +44 -0
- data/Views/Course/Stats.rb +76 -0
- data/Views/Course/Students.rb +92 -0
- data/Views/Course/Tabs.rb +220 -0
- data/Views/Internet/Access.rb +134 -0
- data/Views/Internet/ClassEdit.rb +24 -0
- data/Views/Internet/ClassUsers.rb +81 -0
- data/Views/Internet/Config.rb +32 -0
- data/Views/Internet/Mobile.rb +213 -0
- data/Views/Internet/Recharges.rb +49 -0
- data/Views/Internet/Tabs.rb +6 -0
- data/Views/Inventory/Computer.rb +24 -0
- data/Views/Inventory/Room.rb +18 -0
- data/Views/Inventory/Tabs.rb +9 -0
- data/Views/Inventory/TicketClosed.rb +7 -0
- data/Views/Inventory/TicketOpen.rb +23 -0
- data/Views/Library/Person.rb +36 -0
- data/Views/Library/Tabs.rb +7 -0
- data/Views/Network/Block.rb +87 -0
- data/Views/Network/Netdevs.rb +21 -0
- data/Views/Network/Restriction.rb +37 -0
- data/Views/Network/Share.rb +167 -0
- data/Views/Network/Tables.rb +28 -0
- data/Views/Network/Tabs.rb +6 -0
- data/Views/Person/Admin.rb +99 -0
- data/Views/Person/Center.rb +48 -0
- data/Views/Person/Course.rb +72 -0
- data/Views/Person/Modify.rb +153 -0
- data/Views/Person/Tabs.rb +162 -0
- data/Views/Report/ComptaExecutive.rb +221 -0
- data/Views/Report/ComptaFlat.rb +79 -0
- data/Views/Report/ReportCourse.rb +47 -0
- data/Views/Report/Tabs.rb +8 -0
- data/Views/Report/Usage.rb +52 -0
- data/Views/Report/UsageCases.rb +59 -0
- data/Views/Self/Cash.rb +67 -0
- data/Views/Self/Chat.rb +55 -0
- data/Views/Self/Concours.rb +109 -0
- data/Views/Self/Email.rb +34 -0
- data/Views/Self/Internet.rb +255 -0
- data/Views/Self/Results.rb +17 -0
- data/Views/Self/Services.rb +85 -0
- data/Views/Self/Show.rb +47 -0
- data/Views/Self/Tabs.rb +5 -0
- data/Views/Special/DFileEdit.rb +13 -0
- data/Views/Special/PlugEdit.rb +56 -0
- data/Views/Special/Tabs.rb +6 -0
- data/Views/Special/Vnc.rb +39 -0
- data/Views/Task/Client.rb +21 -0
- data/Views/Task/Edit.rb +33 -0
- data/Views/Task/List.rb +55 -0
- data/Views/Task/Tabs.rb +9 -0
- data/Views/Task/Worker.rb +30 -0
- data/Views/Template/Activity.rb +33 -0
- data/Views/Template/CourseType.rb +63 -0
- data/Views/Template/ScheduleType.rb +29 -0
- data/Views/Template/Tabs.rb +5 -0
- data/Views/Welcome.rb +121 -0
- data/config.yaml.default +36 -0
- data/po/Gestion-ar.po +2356 -0
- data/po/Gestion-en.mo +0 -0
- data/po/Gestion-en.po +4363 -0
- data/po/Gestion-fr.mo +0 -0
- data/po/Gestion-fr.po +4345 -0
- data/po/traduction-ar.rtf +76 -0
- metadata +381 -0
data/Test/ge_usage.rb
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
require 'test/unit'
|
|
2
|
+
require 'benchmark'
|
|
3
|
+
|
|
4
|
+
class TC_Usage < Test::Unit::TestCase
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
Entities.delete_all_data()
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def teardown
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def new_usage(name, dir, glob, filter)
|
|
15
|
+
Usages.create(:name => name, :file_dir => dir,
|
|
16
|
+
:file_glob => glob, :file_filter => filter)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_none
|
|
20
|
+
dp "Usage is missing the 'reports/'-directory"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def tes_usage
|
|
24
|
+
grep = "g\\.html HTTP\n"
|
|
25
|
+
fname = "fname::.*?([0-9\\.]{7,15}).*\n"
|
|
26
|
+
name = '192.168.99.146'
|
|
27
|
+
fdate = "fdate::.*\\[(.*)\\].*::%d/%b/%Y:%H:%M:%S\n"
|
|
28
|
+
time = Time.strptime('2014-09-05 20:49:02 +0100',
|
|
29
|
+
'%Y-%m-%d %H:%M:%S')
|
|
30
|
+
felement = "felement::.*GET.*wiki.(.*) HTTP.*\n"
|
|
31
|
+
element = 'Portal%253AContents/Portals.html'
|
|
32
|
+
|
|
33
|
+
f_name_element = "fname,element::.*?([0-9\\.]{7,15}).*.*GET.*wiki.(.*) HTTP.*\n"
|
|
34
|
+
|
|
35
|
+
u1 = new_usage('wiki', 'reports', 'test.log', grep + fname)
|
|
36
|
+
assert_equal({name: name}, u1.filter_files.first)
|
|
37
|
+
|
|
38
|
+
u1.file_filter = grep + fdate
|
|
39
|
+
assert_equal({date: time}, u1.filter_files.first)
|
|
40
|
+
|
|
41
|
+
u1.file_filter = grep + felement
|
|
42
|
+
assert_equal({element: element}, u1.filter_files.first)
|
|
43
|
+
|
|
44
|
+
u1.file_filter = grep + fname + felement
|
|
45
|
+
assert_equal({name: name, element: element}, u1.filter_files.first)
|
|
46
|
+
|
|
47
|
+
u1.file_filter = grep + f_name_element
|
|
48
|
+
assert_equal({name: name, element: element}, u1.filter_files.first)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def tes_filter_line
|
|
52
|
+
logline = 'wiki.profeda.org is the URL'
|
|
53
|
+
logurl = 'wiki.profeda.org'
|
|
54
|
+
assert_equal logurl,
|
|
55
|
+
Usage.filter_line(logline, 's/ .*//')
|
|
56
|
+
|
|
57
|
+
assert_nil Usage.filter_line(logline, 'ghtml')
|
|
58
|
+
assert_not_nil Usage.filter_line(logline, 'gwiki')
|
|
59
|
+
|
|
60
|
+
assert_nil Usage.filter_line(logline, 'vwiki')
|
|
61
|
+
assert_not_nil Usage.filter_line(logline, 'vhtml')
|
|
62
|
+
|
|
63
|
+
assert_nil Usage.filter_line(logline, 'gis The')
|
|
64
|
+
assert_not_nil Usage.filter_line(logline, 'gis the')
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def tes_filter_field
|
|
68
|
+
name = 'foo'
|
|
69
|
+
assert_equal({},
|
|
70
|
+
Usage.filter_field("name is - #{name}",
|
|
71
|
+
'name', '.*:(.*)'))
|
|
72
|
+
|
|
73
|
+
name = 'foo'
|
|
74
|
+
assert_equal({name: name},
|
|
75
|
+
Usage.filter_field("name is - #{name}",
|
|
76
|
+
'name', '.*- (.*)'))
|
|
77
|
+
date = Date.today
|
|
78
|
+
assert_equal({date: date.to_time},
|
|
79
|
+
Usage.filter_field("Date is - #{date.strftime('%Y%M%D')}",
|
|
80
|
+
'date', '.*- (.*)', '%Y%M%D'))
|
|
81
|
+
|
|
82
|
+
element = 'one two three'
|
|
83
|
+
assert_equal({element: element},
|
|
84
|
+
Usage.filter_field("These are my elements - #{element}",
|
|
85
|
+
'element', '.*- (.*)'))
|
|
86
|
+
|
|
87
|
+
assert_equal({element: element, name: name},
|
|
88
|
+
Usage.filter_field("#{name}:#{element}",
|
|
89
|
+
'name,element', '(.*):(.*)'))
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def tes_speed
|
|
94
|
+
#dputs_func
|
|
95
|
+
|
|
96
|
+
results = ''
|
|
97
|
+
dputs(1) { 'Benchmarking different search strategies' }
|
|
98
|
+
dputs(1) { ' total description' }
|
|
99
|
+
dputs(1) { Benchmark.measure('finding with grep') {
|
|
100
|
+
results = System.run_str("grep 'GET /Files' reports/report_long")
|
|
101
|
+
assert_equal 31, results.split("\n").count
|
|
102
|
+
}.format('%t %n') }
|
|
103
|
+
|
|
104
|
+
dputs(1) { Benchmark.measure('finding with grep') {
|
|
105
|
+
results = System.run_str("grep 'GET /Files' reports/report_long")
|
|
106
|
+
assert_equal 31, results.split("\n").count
|
|
107
|
+
}.format('%t %n') }
|
|
108
|
+
|
|
109
|
+
results = []
|
|
110
|
+
dputs(1) { Benchmark.measure('Searching with =~') {
|
|
111
|
+
File.open('reports/report_long', 'r') { |f|
|
|
112
|
+
f.readlines.each { |l|
|
|
113
|
+
results.push l if l =~ /GET \/Files/
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
assert_equal 31, results.length
|
|
117
|
+
}.format('%t %n') }
|
|
118
|
+
|
|
119
|
+
results = []
|
|
120
|
+
dputs(1) { Benchmark.measure('Searching with =~ and variable') {
|
|
121
|
+
File.open('reports/report_long', 'r') { |f|
|
|
122
|
+
term = /GET \/Files/
|
|
123
|
+
f.readlines.each { |l|
|
|
124
|
+
results.push l if l =~ term
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
assert_equal 31, results.length
|
|
128
|
+
}.format('%t %n') }
|
|
129
|
+
|
|
130
|
+
results = []
|
|
131
|
+
grep = 'gGET /Files'
|
|
132
|
+
dputs(1) { Benchmark.measure('Searching with =~ in case') {
|
|
133
|
+
File.open('reports/report_long', 'r') { |f|
|
|
134
|
+
f.readlines.each { |l|
|
|
135
|
+
case grep
|
|
136
|
+
when /^g/
|
|
137
|
+
results.push l if l =~ /GET \/Files/
|
|
138
|
+
end
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
assert_equal 31, results.length
|
|
142
|
+
}.format('%t %n') }
|
|
143
|
+
|
|
144
|
+
results = []
|
|
145
|
+
dputs(1) { Benchmark.measure('Searching with index') {
|
|
146
|
+
File.open('reports/report_long', 'r') { |f|
|
|
147
|
+
f.readlines.each { |l|
|
|
148
|
+
results.push l if l.index('GET /Files')
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
assert_equal 31, results.length
|
|
152
|
+
}.format('%t %n') }
|
|
153
|
+
|
|
154
|
+
results = []
|
|
155
|
+
u = Usages.create( name: 'test', file_dir: 'reports', file_glob: 'report_long',
|
|
156
|
+
file_filter: "gGET /Files\nfname::(.*)")
|
|
157
|
+
dputs(1) { Benchmark.measure('Searching with Usages') {
|
|
158
|
+
results = u.filter_file( 'reports/report_long')
|
|
159
|
+
assert_equal 31, results.length
|
|
160
|
+
}.format('%t %n') }
|
|
161
|
+
|
|
162
|
+
results = []
|
|
163
|
+
dputs(1) { Benchmark.measure('Searching with Usages a gzip-file') {
|
|
164
|
+
results = u.filter_file( 'reports/report_long.gz')
|
|
165
|
+
assert_equal 31, results.length
|
|
166
|
+
}.format('%t %n') }
|
|
167
|
+
end
|
|
168
|
+
end
|
data/Test/ge_view.rb
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'test/unit'
|
|
2
|
+
|
|
3
|
+
class TC_View < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
Entities.delete_all_data()
|
|
7
|
+
@admin = Entities.Persons.create(:login_name => 'admin', :password => 'super123',
|
|
8
|
+
:permissions => ['default'])
|
|
9
|
+
@foo = Entities.Persons.create(:login_name => 'foo', :password => 'bar',
|
|
10
|
+
:permissions => %w(default internet admin))
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def teardown
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get_reply(service, method, session, arguments = [])
|
|
18
|
+
#dp RPCQooxdooService::services
|
|
19
|
+
s = RPCQooxdooService::services["View.#{service}"]
|
|
20
|
+
m = "rpc_#{method}"
|
|
21
|
+
parsed = s.parse_request(m, session, arguments)
|
|
22
|
+
s.parse_reply(m, session, parsed)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_speed_login
|
|
26
|
+
Struct.new('Webreq', :header, :peeraddr)
|
|
27
|
+
(1..200).each { |i|
|
|
28
|
+
Timing.measure("Measure #{i}", 3) {
|
|
29
|
+
session = Sessions.create
|
|
30
|
+
session.web_req = Struct::Webreq.new({host: 'nil'}, [0, 0, 0, '192.168.1.1'])
|
|
31
|
+
ret = get_reply(:Welcome, :button, session,
|
|
32
|
+
['simple_connect', {'username' => 'foo', 'password' => 'bar'}])
|
|
33
|
+
session = Sessions.match_by_sid(ret[0]._data)
|
|
34
|
+
get_reply(:SelfTabs, :show, session, [])
|
|
35
|
+
get_reply(:SelfTabs, :list_tabs, session, [])
|
|
36
|
+
get_reply(:SelfInternet, :show, session, [])
|
|
37
|
+
get_reply(:PersonTabs, :show, session)
|
|
38
|
+
get_reply(:PersonTabs, :list_tabs, session)
|
|
39
|
+
get_reply(:PersonModify, :show, session)
|
|
40
|
+
if i % 10 == 0
|
|
41
|
+
Entities.save_all
|
|
42
|
+
end
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Example of a captive-configuration
|
|
4
|
+
|
|
5
|
+
# The ISP - for the moment we have Prestabist, Tigo and Simul(ation)
|
|
6
|
+
ISP=simul
|
|
7
|
+
|
|
8
|
+
ISP_FILE=$( dirname $BASH_SOURCE )/multiconf-captive-$ISP
|
|
9
|
+
if [ -f $ISP_FILE ]; then
|
|
10
|
+
. $ISP_FILE
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# The table where to attache the captive - has to be linked with PREROUTING
|
|
14
|
+
#PREROUTING=PREROUTING
|
|
15
|
+
|
|
16
|
+
# Where the HTTP-proxy resides - this has to be a transparent proxy
|
|
17
|
+
#HTTP_PROXY=192.168.1.1:3128
|
|
18
|
+
|
|
19
|
+
# Destinations to allow always
|
|
20
|
+
#ALLOW_DST=""
|
|
21
|
+
|
|
22
|
+
# Override internal IP detection
|
|
23
|
+
#INTERNAL_IPS=""
|
|
24
|
+
|
|
25
|
+
# Set to space to disallow DHCP-requests - if empty, will allow anyway
|
|
26
|
+
#ALLOW_DHCP=" "
|
|
27
|
+
|
|
28
|
+
# Where to redirect the packets for non-authenticated users
|
|
29
|
+
#CAPTIVE_DNAT=""
|
data/Test/test.conf
ADDED
data/Test/test.rb
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
require 'bundler/setup'
|
|
3
|
+
require 'test/unit'
|
|
4
|
+
require 'fileutils'
|
|
5
|
+
FileUtils.rm_rf Dir.glob('data*')
|
|
6
|
+
|
|
7
|
+
$config_file='config_test.yaml'
|
|
8
|
+
DEBUG_LVL=0
|
|
9
|
+
|
|
10
|
+
require 'qooxview'
|
|
11
|
+
require 'network'
|
|
12
|
+
require 'africompta'
|
|
13
|
+
#ACQooxView.load_entities
|
|
14
|
+
|
|
15
|
+
def permissions_init
|
|
16
|
+
Permission.clear
|
|
17
|
+
Permission.add('default', 'View,Welcome')
|
|
18
|
+
Permission.add('admin', '.*', '.*')
|
|
19
|
+
Permission.add('internet', 'Internet,PersonShow', 'default')
|
|
20
|
+
Permission.add('student', '', 'internet')
|
|
21
|
+
Permission.add('teacher', 'FlagResponsible', 'student')
|
|
22
|
+
Permission.add('secretary', 'PersonModify,FlagAddInternet,CashboxCredit',
|
|
23
|
+
'teacher')
|
|
24
|
+
Permission.add('accountant', 'FlagAccounting')
|
|
25
|
+
Permission.add('center', 'FlagAddCenter', 'teacher')
|
|
26
|
+
Permission.add('director', 'FlagAddCenter', 'teacher')
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
permissions_init
|
|
30
|
+
|
|
31
|
+
dir = File.expand_path('..', __dir__)
|
|
32
|
+
QooxView.init("#{dir}/Entities", "#{dir}/Views")
|
|
33
|
+
|
|
34
|
+
tests = Dir.glob('ge_*.rb')
|
|
35
|
+
# tests = %w( activity )
|
|
36
|
+
#tests = %w( compta )
|
|
37
|
+
# tests = %w( internet )
|
|
38
|
+
# tests = %w( usage )
|
|
39
|
+
# tests = %w( configbase )
|
|
40
|
+
|
|
41
|
+
$LOAD_PATH.push '.'
|
|
42
|
+
tests.each { |t|
|
|
43
|
+
begin
|
|
44
|
+
require "ge_#{t}"
|
|
45
|
+
rescue LoadError => e
|
|
46
|
+
dputs(1){"Found error #{e}"}
|
|
47
|
+
require t
|
|
48
|
+
end
|
|
49
|
+
}
|
data/Test/test_bytes.png
ADDED
|
Binary file
|
data/VERSION
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
Important notices for versions:
|
|
2
|
+
|
|
3
|
+
- 150514: 1.9.9
|
|
4
|
+
- now using bundler to put everything into place
|
|
5
|
+
|
|
6
|
+
- 150331: 1.9.6
|
|
7
|
+
- made more granularity in internet-functions, check what you need!
|
|
8
|
+
|
|
9
|
+
- 150313: 1.9.5
|
|
10
|
+
- lots of bug-fixes
|
|
11
|
+
- added update and first version with pacman-support!
|
|
12
|
+
|
|
13
|
+
- 150203: 1.9.4
|
|
14
|
+
- better account-updates with much fewer traffic to AfriCompta
|
|
15
|
+
- use tables and naming in Course::Grades
|
|
16
|
+
|
|
17
|
+
- 150122: 1.9.3
|
|
18
|
+
- lots of work on Network-part with regard to USB-keys
|
|
19
|
+
|
|
20
|
+
- 150109: 1.9.2
|
|
21
|
+
- small improvements with regard to accounts and reports
|
|
22
|
+
|
|
23
|
+
- 141219: 1.9.1
|
|
24
|
+
- Added ComptaCheck and different fixes for account-setup for new installations
|
|
25
|
+
|
|
26
|
+
- 141210: 1.9.0
|
|
27
|
+
- changed accounts for Persons ! Might break !
|
|
28
|
+
|
|
29
|
+
- 141204: 1.8.4
|
|
30
|
+
- better handling of lots of the Airtel-implementation
|
|
31
|
+
|
|
32
|
+
- 141126: 1.8.3
|
|
33
|
+
- first more or less usable Airtel-implementation
|
|
34
|
+
- fixed QooxView::Storages::CSV - again
|
|
35
|
+
|
|
36
|
+
- 141113: 1.8.2
|
|
37
|
+
- much better integration of serialmodems
|
|
38
|
+
- correctly using network::captive
|
|
39
|
+
|
|
40
|
+
- 141031: 1.8.1
|
|
41
|
+
- Saving-error in QooxView::Storages::CSV - again. Looking forward to migrate to
|
|
42
|
+
ActiveRecord one day - cleaned up the data/-directory, should be more nice now.
|
|
43
|
+
|
|
44
|
+
- 141023: 1.8.0
|
|
45
|
+
- Good-bye LibNet. It's been nice, but complicated. Hello to Network! You still have
|
|
46
|
+
a lot to learn...
|
|
47
|
+
|
|
48
|
+
- 141014: 1.7.0
|
|
49
|
+
- added librarian
|
|
50
|
+
- added activities
|
|
51
|
+
- synchronisation of exams
|
|
52
|
+
- _id of 0 should not be used anymore! Unfortunately this is difficult to
|
|
53
|
+
update... Migrate with vi/sed
|
|
54
|
+
|
|
55
|
+
- 140830: 1.5.3
|
|
56
|
+
- reworked synchronisation of exams when only some changed
|
|
57
|
+
- BIG BAD SAVE BUG!
|
|
58
|
+
|
|
59
|
+
- 140428: 1.4.3
|
|
60
|
+
- Important update due to bad reworking of reply( :update, ... )
|
|
61
|
+
|
|
62
|
+
- 140402: 1.4.0
|
|
63
|
+
- Working Cashbox-theme
|
|
64
|
+
- Replaced Config::Acounting::Courses by entry in CourseType
|
|
65
|
+
|
|
66
|
+
- 140319: 1.3.7
|
|
67
|
+
- Started to move stuff out of config.yaml and into ConfigBase:
|
|
68
|
+
- libnet_uri
|
|
69
|
+
- debug_lvl
|
|
70
|
+
- internet_cash
|
|
71
|
+
- locale_force
|
|
72
|
+
- version_local
|
|
73
|
+
- welcome_text
|
|
74
|
+
|
|
75
|
+
- 140303: 1.3.6
|
|
76
|
+
- Changes in config.yaml - :log and :terminal_width moved under :DPuts
|
|
77
|
+
|
|
78
|
+
- 131028: 1.2.2-alpha
|
|
79
|
+
- Changes in QooxView: needs to run Config/install, for different docsplit-libs
|
|
80
|
+
|
|
81
|
+
- 130819: 1.1.15
|
|
82
|
+
- changes in LibNet: now you need to compile a small tool "msgtool", so that
|
|
83
|
+
the ruby-part and the bash-part can communicate
|
|
84
|
+
|
|
85
|
+
- 130627: 1.1.11
|
|
86
|
+
- changes of names in templates for diplomas:
|
|
87
|
+
- MENTION -> GRADE
|
|
88
|
+
- fiche_presence.ods is defined now in Config::Entities:Courses:presence_sheet and
|
|
89
|
+
presence_sheet_small
|
|
90
|
+
- carte_etudiant.odg is defined now in Config::Entities:Persons:student_card
|
|
91
|
+
- views are chosen according to AdminFunction
|
|
92
|
+
- Config::OpenPrint:search_remote defaults to "none"
|
|
93
|
+
- Config::Courses:* are moved to Config::Entities:Courses
|
|
94
|
+
- Renamed in Config::Courses
|
|
95
|
+
- diploma_dir -> dir_diplomas
|
|
96
|
+
- exas_dir -> dir_exas
|
|
97
|
+
- exas_share -> dir_exas_share
|
|
98
|
+
- All config-variables are
|
|
99
|
+
- CamelCased and start with a capital for the categories
|
|
100
|
+
- start with a lowercase and are seperated with "_" for the values
|
|
101
|
+
- PersonAdd and CourseAdd have been moved to a button, the views-admins have
|
|
102
|
+
been moved to FlagAdminPerson (add and delete), FlagAdminCourse (add and delete)
|
|
103
|
+
|
|
104
|
+
- 130425: 1.0.3
|
|
105
|
+
- config-vars
|
|
106
|
+
DiplomaDir -> Courses::DiplomaDir
|
|
107
|
+
-- -> Courses::ExaDir
|
|
108
|
+
|
|
109
|
+
- 130420: 1.0.2
|
|
110
|
+
- Different changes to LibNet/multiconf-*, verify that all is OK
|
|
111
|
+
|
|
112
|
+
- 130401: 1.0.0
|
|
113
|
+
- Made the jump to a 1.0.0-version
|
|
114
|
+
|
|
115
|
+
- 130323: 0.9.6
|
|
116
|
+
- Added Network-access-control and Samba-shares
|
|
117
|
+
- LibNet/Tools-directory with lots of useful files
|
|
118
|
+
|
|
119
|
+
- 130221: 0.9.4
|
|
120
|
+
- Renaming of some config-vars:
|
|
121
|
+
- compta_due::src,dst ->
|
|
122
|
+
Accounting::Lending - where the secretaries write how much they owe
|
|
123
|
+
Accounting::Service - where the center sees how much came in
|
|
124
|
+
Accounting::Cash - where the accountant stores its cash
|
|
125
|
+
|
|
126
|
+
- 121210: 0.9.2
|
|
127
|
+
- Renaming of some views:
|
|
128
|
+
AdminAccess / Admin/ControlAccess -> AdminRestriction / Admin/Restriction
|
|
129
|
+
AdminInternet / Admin/InternetSimple -> ../ Admin/Internet
|
|
130
|
+
AdminTigo / Admin/InternetTigo -> .. / Admin/Tigo
|
|
131
|
+
InventoryComputers / Inventory/Computers -> InventoryComputer / Inventory/Computer
|
|
132
|
+
InventoryRoom / Inventory/Rooms -> .. / Inventory/Room
|
|
133
|
+
|
|
134
|
+
- 121101: 0.9.1
|
|
135
|
+
- version at AlTatawwur
|
|
136
|
+
|
|
137
|
+
- 120928:
|
|
138
|
+
- base_gestion needs to have all items inbetween "-" instead of "_"
|
|
139
|
+
- base_gestion now takes -DESC1- and -DESC2-
|
|
140
|
+
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Presents a simple interface to allow for backup and restore
|
|
2
|
+
#
|
|
3
|
+
# The following functions are implemented:
|
|
4
|
+
# do_backup - call Binaries/backup to save files in data, Exas and Diplomas
|
|
5
|
+
# do_restore - re-starts Gestion which will restore the backupped data
|
|
6
|
+
# upload_backup - send a backup-file to the server
|
|
7
|
+
# download_backup - get a backup-file from the server
|
|
8
|
+
|
|
9
|
+
class AdminBackup < View
|
|
10
|
+
def layout
|
|
11
|
+
@order = 200
|
|
12
|
+
@update = true
|
|
13
|
+
|
|
14
|
+
gui_hbox :nogroup do
|
|
15
|
+
gui_vbox do
|
|
16
|
+
show_list_single :backups, 'View.AdminBackup.list_backups', :width => 400
|
|
17
|
+
show_upload :upload_backup, callback: true
|
|
18
|
+
show_button :do_backup, :do_restore, :do_download
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
gui_window :status do
|
|
22
|
+
show_html :txt
|
|
23
|
+
show_button :restore, :close
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def rpc_update(session)
|
|
29
|
+
reply(:update, upload_backup: 'Upload backup')
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def rpc_button_upload_backup(session, data)
|
|
33
|
+
file = data._filename
|
|
34
|
+
if file =~ /\.tgz$/
|
|
35
|
+
FileUtils.mv "/tmp/#{file}", "#{GESTION_DIR}/Backups"
|
|
36
|
+
reply(:empty_update, backups: list_backups) +
|
|
37
|
+
reply(:select, backups: [file]) +
|
|
38
|
+
reply(:window_show, :status) +
|
|
39
|
+
reply(:unhide, %w(close restore)) +
|
|
40
|
+
reply(:update, txt: "Do you want to restore #{file}?")
|
|
41
|
+
else
|
|
42
|
+
reply(:window_show, :status) +
|
|
43
|
+
reply_show_hide(:close, :restore) +
|
|
44
|
+
reply(:update, txt: "#{file} does not end in .tgz")
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def rpc_button_restore(session, data)
|
|
49
|
+
rpc_button_do_restore(session, data)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def rpc_button_do_download(session, data)
|
|
53
|
+
if file = data._backups[0]
|
|
54
|
+
FileUtils.cp "#{GESTION_DIR}/Backups/#{file}", "/tmp/#{file}"
|
|
55
|
+
reply(:eval, "window.open('/tmp/#{file}', '_blank');") +
|
|
56
|
+
reply(:window_show, :status) +
|
|
57
|
+
reply_show_hide(:close, :restore) +
|
|
58
|
+
reply(:update, txt: 'If the file is not downloaded, click the following link:' +
|
|
59
|
+
"<br><a href='/tmp/#{file}' target='_blank'>#{file}</a>")
|
|
60
|
+
else
|
|
61
|
+
reply(:window_show, :status) +
|
|
62
|
+
reply_show_hide(:close, :restore) +
|
|
63
|
+
reply(:update, txt: 'Please chose a backup first')
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def rpc_button_do_backup(session, data)
|
|
68
|
+
Entities.save_all
|
|
69
|
+
log_msg :backup, 'Creating new backup'
|
|
70
|
+
System.run_bool "#{GESTION_DIR}/Binaries/backup"
|
|
71
|
+
reply(:empty_update, backups: list_backups)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def rpc_button_do_restore(session, data)
|
|
75
|
+
file = data['backups'][0]
|
|
76
|
+
if File::exists? "Backups/#{file}"
|
|
77
|
+
dputs(1) { "Going to call restore for #{file}" }
|
|
78
|
+
File.open('dorestore', 'w') { |f| f.write file }
|
|
79
|
+
Thread.new {
|
|
80
|
+
Platform.restart('gestion')
|
|
81
|
+
}
|
|
82
|
+
reply(:window_show, :status) +
|
|
83
|
+
reply(:hide, %w(restore close)) +
|
|
84
|
+
reply(:update, :txt => '<h1>Recharger le navigateur avec ctrl+r ou F5</h1>')
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def list_backups
|
|
89
|
+
System.run_str('ls Backups').split("\n").sort { |a, b| b <=> a }
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
class AdminConfiguration < View
|
|
2
|
+
def layout
|
|
3
|
+
@order = 600
|
|
4
|
+
@update = true
|
|
5
|
+
set_data_class(:ConfigBases)
|
|
6
|
+
|
|
7
|
+
gui_vbox do
|
|
8
|
+
gui_hbox :nogroup do
|
|
9
|
+
gui_vbox :nogroup do
|
|
10
|
+
show_str :dputs_logfile
|
|
11
|
+
show_str :dputs_logall
|
|
12
|
+
show_block :vars_wide
|
|
13
|
+
show_field :template_dir
|
|
14
|
+
show_field :diploma_dir
|
|
15
|
+
show_field :exam_dir
|
|
16
|
+
show_list_drop :card_student, 'ConfigBase.templates'
|
|
17
|
+
show_list_drop :card_responsible, 'ConfigBase.templates'
|
|
18
|
+
show_list_drop :presence_sheet, 'ConfigBase.templates'
|
|
19
|
+
show_list_drop :presence_sheet_small, 'ConfigBase.templates'
|
|
20
|
+
show_arg :server_url, :width => 300
|
|
21
|
+
end
|
|
22
|
+
gui_vbox :nogroup do
|
|
23
|
+
show_block :narrow
|
|
24
|
+
end
|
|
25
|
+
gui_vbox :nogroup do
|
|
26
|
+
show_block :vars_narrow
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
show_button :save
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def rpc_update(session)
|
|
34
|
+
reply(:empty_nonlists) +
|
|
35
|
+
update_form_data(ConfigBases.singleton)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def rpc_button_save(session, data)
|
|
39
|
+
ConfigBase.store(data.to_sym)
|
|
40
|
+
dputs(3) { "Configuration is now #{ConfigBase.get_functions.inspect}" }
|
|
41
|
+
|
|
42
|
+
rpc_update(session)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Unused function to import credits from another LDAP-file
|
|
2
|
+
|
|
3
|
+
class AdminCredit < View
|
|
4
|
+
def layout
|
|
5
|
+
@order = 300
|
|
6
|
+
@visible = false
|
|
7
|
+
|
|
8
|
+
gui_vbox do
|
|
9
|
+
show_text :user_credit
|
|
10
|
+
show_button :update_credits
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def rpc_button_update_credits( session, data )
|
|
15
|
+
data['user_credit'].split(/\n/).each{|l|
|
|
16
|
+
u, c = l.split
|
|
17
|
+
if user = Persons.match_by_login_name(u)
|
|
18
|
+
log_msg :admincredit, "Setting credit of #{u}:#{user.full_name} to #{c}"
|
|
19
|
+
user.internet_credit = c.to_i
|
|
20
|
+
if not user.permissions
|
|
21
|
+
user.permissions = ['internet']
|
|
22
|
+
elsif not user.permissions.index('internet')
|
|
23
|
+
user.permissions.push 'internet'
|
|
24
|
+
end
|
|
25
|
+
else
|
|
26
|
+
dputs(0){"Error: Didn't find #{u}"}
|
|
27
|
+
end
|
|
28
|
+
}
|
|
29
|
+
Entities.save_all
|
|
30
|
+
reply( :empty_nonlists )
|
|
31
|
+
end
|
|
32
|
+
end
|