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.
Files changed (233) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +48 -0
  3. data/.project +14 -0
  4. data/Binaries/adduser_to_buzz +15 -0
  5. data/Binaries/backup +7 -0
  6. data/Binaries/check_gestion +8 -0
  7. data/Binaries/gestion.gnumail +22 -0
  8. data/Binaries/gestion.logrotate +34 -0
  9. data/Binaries/gestion.service +12 -0
  10. data/Binaries/gestion_update.rb +183 -0
  11. data/Binaries/gestion_update.service +10 -0
  12. data/Binaries/get_compta +11 -0
  13. data/Binaries/kill_gestion +16 -0
  14. data/Binaries/ldap/add_indexes +51 -0
  15. data/Binaries/ldap/backup +2 -0
  16. data/Binaries/ldap/install_ldap +92 -0
  17. data/Binaries/ldap/restore +7 -0
  18. data/Binaries/lib_backup +5 -0
  19. data/Binaries/log_scan_errors +8 -0
  20. data/Binaries/loop_gestion +64 -0
  21. data/Binaries/onetimers/sync_courses_from_compta.rb +74 -0
  22. data/Binaries/onetimers/transfer_cash_from_ldap_to_csv +26 -0
  23. data/Binaries/reboot +5 -0
  24. data/Binaries/restore +3 -0
  25. data/Binaries/restore_do +22 -0
  26. data/Binaries/sort_events +31 -0
  27. data/Binaries/start_gestion +18 -0
  28. data/Binaries/swipe_gestion +18 -0
  29. data/Binaries/update_africompta +21 -0
  30. data/Binaries/update_users +3 -0
  31. data/Diplomas.src/accredited.odg +0 -0
  32. data/Diplomas.src/diploma.odg +0 -0
  33. data/Diplomas.src/label.odg +0 -0
  34. data/Diplomas.src/presence_sheet.ods +0 -0
  35. data/Diplomas.src/presence_sheet_small.ods +0 -0
  36. data/Diplomas.src/student_card.odg +0 -0
  37. data/Doc/130514-it-ideas.odt +0 -0
  38. data/Doc/Compta-cash.mm +179 -0
  39. data/Doc/General.odt +0 -0
  40. data/Entities/AccessGroups.rb +117 -0
  41. data/Entities/Activity.rb +178 -0
  42. data/Entities/ChatMsg.rb +142 -0
  43. data/Entities/Classroom.rb +11 -0
  44. data/Entities/Client.rb +19 -0
  45. data/Entities/Computer.rb +21 -0
  46. data/Entities/ConfigBase.rb +280 -0
  47. data/Entities/Course.rb +1588 -0
  48. data/Entities/CourseType.rb +171 -0
  49. data/Entities/DFiles.rb +466 -0
  50. data/Entities/FilesManage.rb +226 -0
  51. data/Entities/Grade.rb +186 -0
  52. data/Entities/Internet.rb +300 -0
  53. data/Entities/Netdev.rb +10 -0
  54. data/Entities/Person.rb +1175 -0
  55. data/Entities/Plug.rb +98 -0
  56. data/Entities/Quiz.rb +33 -0
  57. data/Entities/Recharges.rb +37 -0
  58. data/Entities/Report.rb +136 -0
  59. data/Entities/Room.rb +12 -0
  60. data/Entities/SMS.rb +30 -0
  61. data/Entities/ScheduleType.rb +33 -0
  62. data/Entities/Share.rb +120 -0
  63. data/Entities/Task.rb +51 -0
  64. data/Entities/Ticket.rb +72 -0
  65. data/Entities/Usage.rb +143 -0
  66. data/Entities/Worker.rb +29 -0
  67. data/Files/apache-profeda.conf +36 -0
  68. data/Files/label.erb +121 -0
  69. data/Files/label_notfound.erb +64 -0
  70. data/Files/label_notpassed.erb +84 -0
  71. data/Files/mobileinfo.erb +115 -0
  72. data/Files/smb.conf +333 -0
  73. data/Files/timetable.html +36 -0
  74. data/Files/timetable.js +239 -0
  75. data/Gemfile +12 -0
  76. data/Gemfile.dev +12 -0
  77. data/Gemfile.dev.lock +127 -0
  78. data/Gemfile.lock +127 -0
  79. data/Gemfile.prod +8 -0
  80. data/Gestion +35 -0
  81. data/Gestion.rb +220 -0
  82. data/INSTALL +40 -0
  83. data/Images/connection.xcf +0 -0
  84. data/Images/connection_no.png +0 -0
  85. data/Images/connection_wait.png +0 -0
  86. data/Images/connection_yes.png +0 -0
  87. data/Paths/Exas.rb +13 -0
  88. data/Paths/Files.rb +19 -0
  89. data/Paths/GetDiplomas.rb +20 -0
  90. data/Paths/Info.rb +114 -0
  91. data/Paths/Label.rb +187 -0
  92. data/Paths/MobileInfo.rb +19 -0
  93. data/Paths/internetCash.rb +34 -0
  94. data/Paths/internetWifi.rb +54 -0
  95. data/README.md +60 -0
  96. data/Rakefile +13 -0
  97. data/TODO +1391 -0
  98. data/Test/.gitignore +3 -0
  99. data/Test/Diplomas/base_gestion.odt +0 -0
  100. data/Test/Diplomas/base_report.odt +0 -0
  101. data/Test/Diplomas/carte_etudiant.odg +0 -0
  102. data/Test/Diplomas/exam_language.odt +0 -0
  103. data/Test/Diplomas/label.odg +0 -0
  104. data/Test/Diplomas/presence_sheet.ods +0 -0
  105. data/Test/Diplomas/presence_sheet_small.ods +0 -0
  106. data/Test/Diplomas/student_card.odg +0 -0
  107. data/Test/Manual/testMerge +18 -0
  108. data/Test/config_test.yaml +26 -0
  109. data/Test/db.testGestion +0 -0
  110. data/Test/dfiles/descs/avg-rescue.desc +10 -0
  111. data/Test/dfiles/descs/avg.desc +8 -0
  112. data/Test/dfiles/descs/driver.desc +8 -0
  113. data/Test/dfiles/descs/linuxmint.desc +7 -0
  114. data/Test/dfiles/files/avg-160203.exe +1 -0
  115. data/Test/dfiles/files/avg.iso +1 -0
  116. data/Test/dfiles/files/driver.exe +1 -0
  117. data/Test/dfiles/index_post.html +3 -0
  118. data/Test/dfiles/index_pre.html +8 -0
  119. data/Test/dfiles/priorities +5 -0
  120. data/Test/ge_activity.rb +124 -0
  121. data/Test/ge_chat.rb +106 -0
  122. data/Test/ge_compta.rb +67 -0
  123. data/Test/ge_configbase.rb +54 -0
  124. data/Test/ge_course.rb +1114 -0
  125. data/Test/ge_dfiles.rb +121 -0
  126. data/Test/ge_filesmanage.rb +180 -0
  127. data/Test/ge_info.rb +27 -0
  128. data/Test/ge_internet.rb +246 -0
  129. data/Test/ge_login.rb +55 -0
  130. data/Test/ge_person.rb +373 -0
  131. data/Test/ge_qvinfo.rb +28 -0
  132. data/Test/ge_report.rb +97 -0
  133. data/Test/ge_share.rb +27 -0
  134. data/Test/ge_sms.rb +34 -0
  135. data/Test/ge_tasks.rb +19 -0
  136. data/Test/ge_usage.rb +168 -0
  137. data/Test/ge_view.rb +46 -0
  138. data/Test/multiconf-captive +29 -0
  139. data/Test/test.conf +7 -0
  140. data/Test/test.rb +49 -0
  141. data/Test/test_bytes.png +0 -0
  142. data/VERSION +140 -0
  143. data/Views/Admin/Backup.rb +91 -0
  144. data/Views/Admin/Configuration.rb +44 -0
  145. data/Views/Admin/Credit.rb +32 -0
  146. data/Views/Admin/FilesManage.rb +219 -0
  147. data/Views/Admin/Function.rb +39 -0
  148. data/Views/Admin/Power.rb +49 -0
  149. data/Views/Admin/Printer.rb +37 -0
  150. data/Views/Admin/Server.rb +252 -0
  151. data/Views/Admin/Tabs.rb +5 -0
  152. data/Views/Admin/Update.rb +73 -0
  153. data/Views/Admin/UpdateSystem.rb +26 -0
  154. data/Views/Cashbox/Activity.rb +191 -0
  155. data/Views/Cashbox/Course.rb +141 -0
  156. data/Views/Cashbox/Credit.rb +79 -0
  157. data/Views/Cashbox/Report.rb +115 -0
  158. data/Views/Cashbox/Service.rb +105 -0
  159. data/Views/Cashbox/Tabs.rb +10 -0
  160. data/Views/Compta/Accounts.rb +36 -0
  161. data/Views/Compta/Course.rb +96 -0
  162. data/Views/Compta/Show.rb +6 -0
  163. data/Views/Compta/Transfer.rb +66 -0
  164. data/Views/Course/Diploma.rb +203 -0
  165. data/Views/Course/Grade.rb +401 -0
  166. data/Views/Course/Modify.rb +447 -0
  167. data/Views/Course/Print.rb +94 -0
  168. data/Views/Course/Responsible.rb +44 -0
  169. data/Views/Course/Stats.rb +76 -0
  170. data/Views/Course/Students.rb +92 -0
  171. data/Views/Course/Tabs.rb +220 -0
  172. data/Views/Internet/Access.rb +134 -0
  173. data/Views/Internet/ClassEdit.rb +24 -0
  174. data/Views/Internet/ClassUsers.rb +81 -0
  175. data/Views/Internet/Config.rb +32 -0
  176. data/Views/Internet/Mobile.rb +213 -0
  177. data/Views/Internet/Recharges.rb +49 -0
  178. data/Views/Internet/Tabs.rb +6 -0
  179. data/Views/Inventory/Computer.rb +24 -0
  180. data/Views/Inventory/Room.rb +18 -0
  181. data/Views/Inventory/Tabs.rb +9 -0
  182. data/Views/Inventory/TicketClosed.rb +7 -0
  183. data/Views/Inventory/TicketOpen.rb +23 -0
  184. data/Views/Library/Person.rb +36 -0
  185. data/Views/Library/Tabs.rb +7 -0
  186. data/Views/Network/Block.rb +87 -0
  187. data/Views/Network/Netdevs.rb +21 -0
  188. data/Views/Network/Restriction.rb +37 -0
  189. data/Views/Network/Share.rb +167 -0
  190. data/Views/Network/Tables.rb +28 -0
  191. data/Views/Network/Tabs.rb +6 -0
  192. data/Views/Person/Admin.rb +99 -0
  193. data/Views/Person/Center.rb +48 -0
  194. data/Views/Person/Course.rb +72 -0
  195. data/Views/Person/Modify.rb +153 -0
  196. data/Views/Person/Tabs.rb +162 -0
  197. data/Views/Report/ComptaExecutive.rb +221 -0
  198. data/Views/Report/ComptaFlat.rb +79 -0
  199. data/Views/Report/ReportCourse.rb +47 -0
  200. data/Views/Report/Tabs.rb +8 -0
  201. data/Views/Report/Usage.rb +52 -0
  202. data/Views/Report/UsageCases.rb +59 -0
  203. data/Views/Self/Cash.rb +67 -0
  204. data/Views/Self/Chat.rb +55 -0
  205. data/Views/Self/Concours.rb +109 -0
  206. data/Views/Self/Email.rb +34 -0
  207. data/Views/Self/Internet.rb +255 -0
  208. data/Views/Self/Results.rb +17 -0
  209. data/Views/Self/Services.rb +85 -0
  210. data/Views/Self/Show.rb +47 -0
  211. data/Views/Self/Tabs.rb +5 -0
  212. data/Views/Special/DFileEdit.rb +13 -0
  213. data/Views/Special/PlugEdit.rb +56 -0
  214. data/Views/Special/Tabs.rb +6 -0
  215. data/Views/Special/Vnc.rb +39 -0
  216. data/Views/Task/Client.rb +21 -0
  217. data/Views/Task/Edit.rb +33 -0
  218. data/Views/Task/List.rb +55 -0
  219. data/Views/Task/Tabs.rb +9 -0
  220. data/Views/Task/Worker.rb +30 -0
  221. data/Views/Template/Activity.rb +33 -0
  222. data/Views/Template/CourseType.rb +63 -0
  223. data/Views/Template/ScheduleType.rb +29 -0
  224. data/Views/Template/Tabs.rb +5 -0
  225. data/Views/Welcome.rb +121 -0
  226. data/config.yaml.default +36 -0
  227. data/po/Gestion-ar.po +2356 -0
  228. data/po/Gestion-en.mo +0 -0
  229. data/po/Gestion-en.po +4363 -0
  230. data/po/Gestion-fr.mo +0 -0
  231. data/po/Gestion-fr.po +4345 -0
  232. data/po/traduction-ar.rtf +76 -0
  233. metadata +381 -0
@@ -0,0 +1,213 @@
1
+ require 'network'
2
+ require 'helper_classes'
3
+
4
+ class InternetMobile < View
5
+ include Network
6
+
7
+ def layout
8
+ @functions_need = [:internet_mobile]
9
+ @order = 100
10
+ @update = true
11
+ @auto_update_async = 10
12
+ @auto_update_send_values = false
13
+ @umts_netctl = '/etc/netctl/umts'
14
+ if !File.exists?(@umts_netctl)
15
+ # For testing purposes
16
+ @umts_netctl = '/tmp/umts'
17
+ end
18
+ i=0
19
+ @umts_modes = %w(None 3Gpref 3Gonly GPRSpref GPRSonly).map { |m| [i+=1, m] }
20
+
21
+ gui_hboxg do
22
+ gui_vbox :nogroup do
23
+ gui_vbox :nogroup do
24
+ show_str_ro :operator
25
+ show_int_ro :credit
26
+ show_int_ro :promotion
27
+ show_int_ro :promotion_left
28
+ show_str_ro :state_now
29
+ show_str_ro :state_goal
30
+ show_str_ro :emails
31
+ show_str_ro :vpn
32
+ show_list_drop :umts_connection, 'View.InternetMobile.umts_connection',
33
+ :callback => true
34
+ show_button :connect, :disconnect, :reload
35
+ show_split_button :recharge, []
36
+ end
37
+ gui_vbox :nogroup do
38
+ show_str :sms_number
39
+ show_str :sms_text
40
+ show_button :send_sms
41
+ end
42
+ gui_vbox :nogroup do
43
+ show_str :ussd
44
+ show_button :send_ussd, :add_credit
45
+ end
46
+ end
47
+ gui_vboxg :nogroup do
48
+ show_text :sms_received, :flexheight => 1
49
+ show_text :ussd_received, :flexheight => 1
50
+ end
51
+ end
52
+ end
53
+
54
+ def umts_connection
55
+ ret = @umts_modes
56
+ if File.exists?(@umts_netctl)
57
+ mode = IO.readlines(@umts_netctl).
58
+ select { |l| l =~ /^\#{0,1}Mode/ }.first.
59
+ match(/.*=(.*)/)[1]
60
+ index = @umts_modes.select { |i, m| m == mode }.first[0]
61
+ index ? ret + [index] : ret
62
+ else
63
+ ret
64
+ end
65
+ end
66
+
67
+ def rpc_list_choice_umts_connection(session, data)
68
+ if File.exists?(@umts_netctl)
69
+ file = IO.readlines(@umts_netctl).map { |l|
70
+ if l =~ /^(\#{0,1}Mode)/
71
+ "#{$1}=#{@umts_modes[data._umts_connection.first-1][1]}"
72
+ else
73
+ l.chomp
74
+ end
75
+ }
76
+ IO.write(@umts_netctl, file.join("\n"))
77
+ end
78
+ end
79
+
80
+ def s_unknown(i)
81
+ i == -1 ? 'Unknown' : i
82
+ end
83
+
84
+ def s_status(i)
85
+ case i
86
+ when Device::CONNECTED
87
+ 'Connected'
88
+ when Device::CONNECTING
89
+ 'Connecting'
90
+ when Device::DISCONNECTING
91
+ 'Disconnecting'
92
+ when Device::DISCONNECTED
93
+ 'Disconnected'
94
+ when Device::ERROR_CONNECTION
95
+ 'Error'
96
+ when -1
97
+ 'Unknown'
98
+ end
99
+ end
100
+
101
+ def recharges_list
102
+ return 'No recharge possible' if $MobileControl.operator_missing?
103
+ list = $MobileControl.operator.internet_cost_available.reverse.
104
+ collect { |c, v|
105
+ "#{c} CFAs for #{(v.to_i/1_000_000).separator} MB" }
106
+ list.size == 0 ? 'No recharge possible' : list
107
+ end
108
+
109
+ def rpc_update(session)
110
+ return unless $MobileControl
111
+ cl, il, recharge = if $MobileControl.operator_missing?
112
+ [-1, -1, 'No recharge possible']
113
+ else
114
+ [$MobileControl.operator.credit_left,
115
+ $MobileControl.operator.internet_left,
116
+ recharges_list]
117
+ end
118
+ #cl, il = s_unknown(cl), s_unknown(il)
119
+ emails = System.exists?('postqueue') ?
120
+ System.run_str('postqueue -p | tail -n 1') : 'n/a'
121
+ vpns = System.exists?('systemctl') ?
122
+ System.run_str('systemctl list-units --no-legend openvpn@* | '+
123
+ 'sed -e "s/OpenVPN.*//"') :
124
+ System.run_str('pgrep openvpn')
125
+ vpns = vpns.scan(/.{20}/).join("\n")
126
+ ussds = $MobileControl.device ? $MobileControl.device.ussd_list : 'Down'
127
+ services = $MobileControl.operator_missing? ? [] : $MobileControl.operator.services
128
+ {connection: %i(connect disconnect),
129
+ sms: %i(sms_number sms_text send_sms sms_received),
130
+ ussd: %i(ussd send_ussd add_credit recharge ussd_received),
131
+ credit: %i(credit),
132
+ promotion: %i(promotion promotion_left recharge),
133
+ umts: %i(umts_connection)}.collect { |service, fields|
134
+ reply_visible(services.index(service), fields)
135
+ }.flatten +
136
+ reply(:update,
137
+ :state_now => s_status($MobileControl.state_now),
138
+ :state_goal => s_status($MobileControl.state_goal),
139
+ :credit => cl,
140
+ :promotion => il.separator,
141
+ :promotion_left => Recharge.left_today(il).separator,
142
+ :emails => emails, :vpn => vpns,
143
+ :sms_received => SMSs.last(5).reverse.collect { |sms|
144
+ "#{sms.date}::#{sms.phone}:: ::#{sms.text}"
145
+ }.join("\n"),
146
+ :ussd_received => ussds,
147
+ :recharge => recharge,
148
+ :operator => $MobileControl.operator_name) +
149
+ reply_visible(Recharges.enabled?, :promotion_left)
150
+ end
151
+
152
+ def rpc_update_async(session)
153
+ rpc_update(session)
154
+ end
155
+
156
+
157
+ def rpc_button_send_sms(session, data)
158
+ if data._sms_number.to_s.length == 0
159
+ $MobileControl.device.sms_inject(data._sms_text)
160
+ else
161
+ $MobileControl.device.sms_send(data._sms_number, data._sms_text)
162
+ end
163
+ end
164
+
165
+ def rpc_button_connect(session, data)
166
+ $MobileControl.connect(true)
167
+ rpc_update(session)
168
+ end
169
+
170
+ def rpc_button_disconnect(session, data)
171
+ $MobileControl.disconnect
172
+ rpc_update(session)
173
+ end
174
+
175
+ def rpc_button_send_ussd(session, data)
176
+ if data._ussd.to_s.delete(' ').length == 13
177
+ rpc_button_add_credit(session, data)
178
+ else
179
+ $MobileControl.device.ussd_send(data._ussd)
180
+ rpc_update(session)
181
+ end
182
+ end
183
+
184
+ def rpc_button_add_credit(session, data)
185
+ $MobileControl.recharge_hold = true
186
+ $MobileControl.operator.credit_add(data._ussd)
187
+ rpc_update(session)
188
+ end
189
+
190
+ def rpc_button_recharge(session, data)
191
+ if data._menu.to_s.length == 0
192
+ if $MobileControl.operator_missing?
193
+ credit = 0
194
+ else
195
+ credit = $MobileControl.operator.internet_cost_available.reverse.first[0].to_i
196
+ end
197
+ else
198
+ credit = data._menu.match(/^[0-9]*/)[0].to_i
199
+ end
200
+ if credit > 0
201
+ log_msg :NetworkMobile, "Asking for recharge of #{credit}"
202
+ $MobileControl.recharge_hold = false
203
+ $MobileControl.recharge_all(credit)
204
+ end
205
+ rpc_update(session)
206
+ end
207
+
208
+ def rpc_button_reload(session, data)
209
+ $MobileControl.update_left
210
+ rpc_update(session)
211
+ end
212
+
213
+ end
@@ -0,0 +1,49 @@
1
+ class InternetRecharges < View
2
+ def layout
3
+ @order = 600
4
+ @update = true
5
+ @functions_need = [:internet_mobile, :network_pro]
6
+ set_data_class :Recharges
7
+
8
+ gui_hbox do
9
+ gui_vbox :nogroup do
10
+ show_entity_recharge_all :recharges, :single, :time,
11
+ width: 200, callback: true
12
+ show_button :new, :delete
13
+ end
14
+ gui_vbox :nogroup do
15
+ show_block :default, width: 200
16
+ show_button :save
17
+ end
18
+ end
19
+ end
20
+
21
+ def rpc_update(_session, select = nil)
22
+ recharges = Recharges.search_all_.collect { |r| [r.recharge_id, r.time] }.reverse
23
+ select and recharges.push(select)
24
+ reply(:empty_all) +
25
+ reply(:update, recharges: recharges)
26
+ end
27
+
28
+ def rpc_button_new(session, data)
29
+ rpc_update(session)
30
+ end
31
+
32
+ def rpc_button_save(session, data)
33
+ recharges = data._recharges
34
+ recharges.class == Array and recharges = Recharges.create(time: data._time)
35
+ recharges.data_set_hash(data)
36
+ rpc_update(session, recharges.recharge_id)
37
+ end
38
+
39
+ def rpc_button_delete(session, data)
40
+ return unless data._recharges.class == Recharge
41
+ data._recharges.delete
42
+ rpc_update(session)
43
+ end
44
+
45
+ def rpc_list_choice_recharges(session, data)
46
+ reply(:empty_nonlists) +
47
+ reply(:update, data._recharges.to_hash)
48
+ end
49
+ end
@@ -0,0 +1,6 @@
1
+ class InternetTabs < View
2
+ def layout
3
+ @order = 57
4
+ @functions_need = [:network, :internet]
5
+ end
6
+ end
@@ -0,0 +1,24 @@
1
+ class InventoryComputer < View
2
+ include VTListPane
3
+ def layout
4
+ set_data_class :Computers
5
+
6
+ gui_hbox do
7
+ gui_vbox :nogroup do
8
+ vtlp_list :computer_list, 'name_service', :width => 100
9
+ show_button :new, :delete
10
+ end
11
+
12
+ gui_hbox :nogroup do
13
+ gui_vbox :nogroup do
14
+ show_block :identity, :width => 150
15
+ show_block :performance
16
+ show_button :save
17
+ end
18
+ gui_vbox :nogroup do
19
+ show_block :ticket
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ class InventoryRoom < View
2
+ include VTListPane
3
+ def layout
4
+ set_data_class :Rooms
5
+
6
+ gui_hbox do
7
+ gui_vbox :nogroup do
8
+ vtlp_list :rooms, 'name'
9
+ show_button :new, :delete
10
+ end
11
+
12
+ gui_vbox :nogroup do
13
+ show_block :all, :width => 200
14
+ show_button :save
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ class InventoryTabs < View
2
+ def layout
3
+ @order = 40
4
+ @functions_need = [:inventory]
5
+
6
+ gui_vboxg :nogroup do
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ class InventoryTicketClosed < View
2
+ include VTListPane
3
+ include TicketLayout
4
+ def layout
5
+ t_layout( :closed )
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ class InventoryTicketOpen < View
2
+ include VTListPane
3
+ include TicketLayout
4
+ def layout
5
+ t_layout( :opened )
6
+ end
7
+
8
+ def rpc_button_save_ticket( session, data )
9
+ if not data['created_by']
10
+ data['created_by'] = session.owner.full_name
11
+ end
12
+ rpc_button_save( session, data )
13
+ end
14
+
15
+ def rpc_update( session )
16
+ reply( :update, :created_by => session.owner.full_name )
17
+ end
18
+
19
+ def rpc_button_new_ticket( session, data )
20
+ rpc_button_new( session, data ) +
21
+ rpc_update( session )
22
+ end
23
+ end
@@ -0,0 +1,36 @@
1
+ class LibraryPerson < View
2
+ def layout
3
+ @order = 100
4
+ @update = true
5
+
6
+ gui_hboxg do
7
+ gui_vboxg :nogroup do
8
+ show_entity_person :users, :single, :to_list_id,
9
+ :callback => true, :flexheight => 1
10
+ end
11
+ gui_vboxg :nogroup do
12
+ show_block :address, :flexwidth => 1
13
+ show_button :save
14
+ end
15
+ end
16
+ end
17
+
18
+ def library_users(owner)
19
+ Activities.tagged_users('library').to_frontend(owner)
20
+ end
21
+
22
+ def rpc_update(session)
23
+ reply(:empty, :users) +
24
+ reply(:update, users: library_users(session.owner) )
25
+ end
26
+
27
+ def rpc_list_choice_users(session, data)
28
+ reply(:empty_nonlists) +
29
+ reply(:update, data._users.to_hash)
30
+ end
31
+
32
+ def rpc_button_save(session, data)
33
+ return unless data._users
34
+ data._users.data_set_hash(data)
35
+ end
36
+ end
@@ -0,0 +1,7 @@
1
+ class LibraryTabs < View
2
+ def layout
3
+ @order = 100
4
+ @functions_need = [:library]
5
+ end
6
+
7
+ end
@@ -0,0 +1,87 @@
1
+ class NetworkBlock < View
2
+ def layout
3
+ @functions_need = [:network]
4
+ @order = 100
5
+ @blocking = Entities.Statics.get(:NetworkBlock)
6
+ @blocking.data_str.class != Array and @blocking.data_str = []
7
+ update_block(@blocking.data_str)
8
+
9
+ @hosts = Entities.Statics.get(:NetworkBlockHosts)
10
+ @hosts.data_str.class != String and @hosts.data_str = ''
11
+
12
+ gui_hbox do
13
+ gui_vboxg :nogroup do
14
+ show_text :hosts, flexheight: 1
15
+ show_button :update
16
+ show_list :blocked, 'View.NetworkBlock.list_dhcp', :width => 400
17
+ show_button :block
18
+ end
19
+ end
20
+ end
21
+
22
+ def update_block(ips)
23
+ Network::Captive.block ips.collect { |ip| ip.sub(/ .*/, '') }
24
+ end
25
+
26
+ def write_block(file, l)
27
+ #dputs_func
28
+ list = l.to_s.split("\n").collect { |s| s.gsub(/ /, '') }
29
+ dputs(3) { "Writing block #{list.inspect}" }
30
+ file.write(list.compact.collect { |h|
31
+ address = "address=/#{h}/127.0.0.1\n"
32
+ dputs(3) { "Outputting #{address}" }
33
+ address
34
+ }.join)
35
+ end
36
+
37
+ def update_dnsmasq_file(list, file)
38
+ block_wrote = false
39
+ tmpfile = "/tmp/#{File.basename(file)}.tmp"
40
+ FileUtils.cp file, tmpfile
41
+ File.open(file, 'w') { |f|
42
+ IO.readlines(tmpfile).each { |li|
43
+ l = li.chomp
44
+ dputs(3) { "Doing line #{l}" }
45
+ case l
46
+ when /^(#*)address.*(\/[^\/]*)$/
47
+ dputs(3) { "#{$1} - #{$2} - #{l}" }
48
+ f.write(l + "\n") if ($1 == '#' || $2 != '/127.0.0.1')
49
+ write_block(f, list) unless block_wrote
50
+ block_wrote = true
51
+ else
52
+ f.write(l + "\n")
53
+ end
54
+ }
55
+ # Add to end of file if not written yet
56
+ write_block(f, list) unless block_wrote
57
+ }
58
+ end
59
+
60
+ def update_dnsmasq(list)
61
+ #dputs_func
62
+ %w( /etc/dnsmasq.conf.orig /etc/dnsmasq.conf /tmp/dns.test).each do |f|
63
+ if File.exists? f
64
+ dputs(3) { "Found dnsmasq at #{f}" }
65
+ update_dnsmasq_file(list, f)
66
+ end
67
+ end
68
+ end
69
+
70
+ def list_dhcp
71
+ System.run_str('cut -d " " -f 3,4 /var/lib/misc/dnsmasq.leases').split("\n")
72
+ end
73
+
74
+ def rpc_update_view(session)
75
+ super(session) +
76
+ reply(:update, :blocked => @blocking.data_str, :hosts => @hosts.data_str)
77
+ end
78
+
79
+ def rpc_button_block(session, data)
80
+ update_block(@blocking.data_str = data._blocked)
81
+ end
82
+
83
+ def rpc_button_update(session, data)
84
+ update_dnsmasq(@hosts.data_str = data._hosts)
85
+ Platform.restart :dnsmasq
86
+ end
87
+ end
@@ -0,0 +1,21 @@
1
+ class NetworkNetdevs < View
2
+ include VTListPane
3
+
4
+ def layout
5
+ @order = 200
6
+ @functions_need = [:network_pro]
7
+
8
+ set_data_class :Netdevs
9
+
10
+ gui_hbox do
11
+ gui_vbox :nogroup do
12
+ vtlp_list :netdevs, :name
13
+ show_button :delete, :new
14
+ end
15
+ gui_vbox :nogroup do
16
+ show_block :default
17
+ show_button :save
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,37 @@
1
+ class NetworkRestriction < View
2
+ include Network
3
+
4
+ def layout
5
+ @update = true
6
+ @functions_need = [:internet]
7
+ @visible = Persons.center && Persons.center.login_name == 'man'
8
+
9
+ gui_vbox do
10
+ show_html :state
11
+ show_button :remove_restriction, :restrict_info1, :restrict_info2
12
+ end
13
+ end
14
+
15
+ def rpc_update( session )
16
+ if restricted = Captive.restricted
17
+ reply( :update, :state => "Restricted internet, only allowed for:<br><pre>#{ restricted }</pre>" )
18
+ else
19
+ reply( :update, :state => 'No restriction in place')
20
+ end
21
+ end
22
+
23
+ def rpc_button_remove_restriction( session, args )
24
+ Captive.restriction_set( nil )
25
+ rpc_update( session )
26
+ end
27
+
28
+ def rpc_button_restrict_info1( session, args )
29
+ Captive.restriction_set 'info1'
30
+ rpc_update( session )
31
+ end
32
+
33
+ def rpc_button_restrict_info2( session, args )
34
+ Captive.restriction_set 'info2'
35
+ rpc_update( session )
36
+ end
37
+ end