mc_gem 0.0.1
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/Gemfile +12 -0
- data/Gemfile.lock +91 -0
- data/Lab1/arr1_3.txt +1 -0
- data/Lab1/lb1_1.rb +19 -0
- data/Lab1/lb1_2.rb +28 -0
- data/Lab1/lb1_3.rb +46 -0
- data/Lab1/lb1_4.rb +82 -0
- data/Lab2/1Class.jpg +0 -0
- data/Lab2/Web/main.rb +89 -0
- data/Lab2/Web/views/add.html +168 -0
- data/Lab2/Web/views/main.html +233 -0
- data/Lab2/data_storage/students1.txt +1 -0
- data/Lab2/data_storage/studentsRead.json +36 -0
- data/Lab2/data_storage/studentsRead.txt +3 -0
- data/Lab2/data_storage/studentsRead.yaml +26 -0
- data/Lab2/data_storage/studentsWrite.json +42 -0
- data/Lab2/data_storage/studentsWrite.txt +4 -0
- data/Lab2/data_storage/studentsWrite.yaml +31 -0
- data/Lab2/examples/Strategy.rb +38 -0
- data/Lab2/examples/adapter.rb +30 -0
- data/Lab2/examples/database.rb +15 -0
- data/Lab2/examples/observer_example.rb +51 -0
- data/Lab2/examples/pattern_pattern.rb +44 -0
- data/Lab2/examples/site_example.rb +21 -0
- data/Lab2/examples/views/about.erb +11 -0
- data/Lab2/examples/views/contact.erb +15 -0
- data/Lab2/examples/views/index.erb +11 -0
- data/Lab2/main.rb +6 -0
- data/Lab2/main_window.rb +31 -0
- data/Lab2/student_input_form.rb +71 -0
- data/Lab2/tab_students.rb +157 -0
- data/Lab2/test/student_test.rb +91 -0
- data/README.md +3 -0
- data/mc_gem/CHANGELOG.md +5 -0
- data/mc_gem/CODE_OF_CONDUCT.md +84 -0
- data/mc_gem/Documentation.md +33 -0
- data/mc_gem/Gemfile +13 -0
- data/mc_gem/LICENSE.txt +21 -0
- data/mc_gem/README.md +1 -0
- data/mc_gem/lib/mc_gem/version.rb +5 -0
- data/mc_gem/lib/mc_gem.rb +10 -0
- data/mc_gem/lib/source/adapters/student_list_adapter.rb +95 -0
- data/mc_gem/lib/source/containers/Data_list.rb +66 -0
- data/mc_gem/lib/source/containers/Data_list_student_short.rb +17 -0
- data/mc_gem/lib/source/containers/Data_table.rb +25 -0
- data/mc_gem/lib/source/controllers/student_edit_form_controller.rb +63 -0
- data/mc_gem/lib/source/controllers/student_input_form_controller.rb +56 -0
- data/mc_gem/lib/source/controllers/student_list_controller.rb +83 -0
- data/mc_gem/lib/source/converters/Converter.rb +11 -0
- data/mc_gem/lib/source/converters/Converter_json.rb +14 -0
- data/mc_gem/lib/source/converters/Converter_txt.rb +26 -0
- data/mc_gem/lib/source/converters/Converter_yaml.rb +14 -0
- data/mc_gem/lib/source/database/scripts/create_table.sql +10 -0
- data/mc_gem/lib/source/database/scripts/insert_data.sql +4 -0
- data/mc_gem/lib/source/database/student_list_db.rb +41 -0
- data/mc_gem/lib/source/database/students_db.rb +79 -0
- data/mc_gem/lib/source/model/Student.rb +106 -0
- data/mc_gem/lib/source/model/StudentBase.rb +50 -0
- data/mc_gem/lib/source/model/Student_short.rb +39 -0
- data/mc_gem/lib/source/repositories/Student_list.rb +65 -0
- data/mc_gem/lib/source/repositories/student_list_adv.rb +35 -0
- data/mc_gem/lib/source/util/LoggerHolder.rb +22 -0
- data/mc_gem/mc_gem.gemspec +17 -0
- data/mc_gem/sig/mvcStudentXD.rbs +4 -0
- metadata +121 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9c930197b35074f90b98bd270b433374fff9950ea41846755e7e5d1894a4771f
|
4
|
+
data.tar.gz: 81e052150cebb449322895a9d8b2771db898811bbcd5ff39b24ad004adc348c6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b4a08dfb07e35c43e9894a1a5c5e04cbfba22138451bb36ccbd21a3b7dc0740ac76171e24f49ef9e21a96e14a6f862b9a455f42cb3201df98a3e3d34c299ad74
|
7
|
+
data.tar.gz: 6557c8d4fa361fbe149127cd140779226c2eb7c6677d021a9a87a3bd091f49aad18db588fe9a6bd82cf143b0f87deb6f6d6d14ccecc85e423b96d16f106889ce
|
data/Gemfile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "mysql2"
|
6
|
+
gem "glimmer-dsl-libui",'~> 0.7.4'
|
7
|
+
gem 'win32api'
|
8
|
+
gem "minitest"
|
9
|
+
gem 'rubocop', group: 'development'
|
10
|
+
gem 'mvcStudentXD', '~> 1.2', '>= 1.2.2'
|
11
|
+
gem 'sinatra', '~> 3.0', '>= 3.0.6'
|
12
|
+
gem 'thin', '~> 1.8', '>= 1.8.2'
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
array_include_methods (1.4.0)
|
5
|
+
ast (2.4.2)
|
6
|
+
chunky_png (1.4.0)
|
7
|
+
color (1.8)
|
8
|
+
daemons (1.4.1)
|
9
|
+
equalizer (0.0.11)
|
10
|
+
eventmachine (1.2.7)
|
11
|
+
facets (3.1.0)
|
12
|
+
glimmer (2.7.3)
|
13
|
+
array_include_methods (~> 1.4.0)
|
14
|
+
facets (>= 3.1.0, < 4.0.0)
|
15
|
+
glimmer-dsl-libui (0.7.5)
|
16
|
+
chunky_png (~> 1.4.0)
|
17
|
+
color (~> 1.8)
|
18
|
+
equalizer (= 0.0.11)
|
19
|
+
glimmer (~> 2.7.3)
|
20
|
+
libui (~> 0.1.2.pre)
|
21
|
+
os (>= 1.0.0, < 2.0.0)
|
22
|
+
perfect-shape (~> 1.0.7)
|
23
|
+
rouge (>= 3.26.0, < 4.0.0)
|
24
|
+
super_module (~> 1.4.1)
|
25
|
+
json (2.6.3)
|
26
|
+
libui (0.1.2.pre-x64-mingw)
|
27
|
+
matrix (0.4.2)
|
28
|
+
method_source (1.0.0)
|
29
|
+
minitest (5.18.0)
|
30
|
+
mustermann (3.0.0)
|
31
|
+
ruby2_keywords (~> 0.0.1)
|
32
|
+
mvcStudentXD (1.2.2)
|
33
|
+
mysql2 (0.5.5)
|
34
|
+
os (1.1.4)
|
35
|
+
parallel (1.23.0)
|
36
|
+
parser (3.2.2.1)
|
37
|
+
ast (~> 2.4.1)
|
38
|
+
perfect-shape (1.0.7)
|
39
|
+
equalizer (>= 0.0.11, < 1.1.0)
|
40
|
+
matrix (>= 0.4.2, < 1.1.0)
|
41
|
+
rack (2.2.7)
|
42
|
+
rack-protection (3.0.6)
|
43
|
+
rack
|
44
|
+
rainbow (3.1.1)
|
45
|
+
regexp_parser (2.8.0)
|
46
|
+
rexml (3.2.5)
|
47
|
+
rouge (3.30.0)
|
48
|
+
rubocop (1.50.2)
|
49
|
+
json (~> 2.3)
|
50
|
+
parallel (~> 1.10)
|
51
|
+
parser (>= 3.2.0.0)
|
52
|
+
rainbow (>= 2.2.2, < 4.0)
|
53
|
+
regexp_parser (>= 1.8, < 3.0)
|
54
|
+
rexml (>= 3.2.5, < 4.0)
|
55
|
+
rubocop-ast (>= 1.28.0, < 2.0)
|
56
|
+
ruby-progressbar (~> 1.7)
|
57
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
58
|
+
rubocop-ast (1.28.1)
|
59
|
+
parser (>= 3.2.1.0)
|
60
|
+
ruby-progressbar (1.13.0)
|
61
|
+
ruby2_keywords (0.0.5)
|
62
|
+
sinatra (3.0.6)
|
63
|
+
mustermann (~> 3.0)
|
64
|
+
rack (~> 2.2, >= 2.2.4)
|
65
|
+
rack-protection (= 3.0.6)
|
66
|
+
tilt (~> 2.0)
|
67
|
+
super_module (1.4.1)
|
68
|
+
method_source (>= 0.8.2, < 1.1.0)
|
69
|
+
thin (1.8.2)
|
70
|
+
daemons (~> 1.0, >= 1.0.9)
|
71
|
+
eventmachine (~> 1.0, >= 1.0.4)
|
72
|
+
rack (>= 1, < 3)
|
73
|
+
tilt (2.1.0)
|
74
|
+
unicode-display_width (2.4.2)
|
75
|
+
win32api (0.1.0)
|
76
|
+
|
77
|
+
PLATFORMS
|
78
|
+
x64-mingw-ucrt
|
79
|
+
|
80
|
+
DEPENDENCIES
|
81
|
+
glimmer-dsl-libui (~> 0.7.4)
|
82
|
+
minitest
|
83
|
+
mvcStudentXD (~> 1.2, >= 1.2.2)
|
84
|
+
mysql2
|
85
|
+
rubocop
|
86
|
+
sinatra (~> 3.0, >= 3.0.6)
|
87
|
+
thin (~> 1.8, >= 1.8.2)
|
88
|
+
win32api
|
89
|
+
|
90
|
+
BUNDLED WITH
|
91
|
+
2.4.12
|
data/Lab1/arr1_3.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1 3 -4 6 8 -3 -5 10
|
data/Lab1/lb1_1.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
puts 'Hello World'
|
2
|
+
puts "Hello, #{ARGV[0]}."
|
3
|
+
puts "Какой твой любимый язык?"
|
4
|
+
|
5
|
+
r = STDIN.gets.chomp
|
6
|
+
case r
|
7
|
+
when 'ruby'
|
8
|
+
puts 'Подлиза'
|
9
|
+
else
|
10
|
+
puts 'Почему не руби?!'
|
11
|
+
end
|
12
|
+
|
13
|
+
puts 'Enter ruby command: '
|
14
|
+
comRuby = STDIN.gets.chomp
|
15
|
+
system "ruby -e \'#{comRuby}\'"
|
16
|
+
|
17
|
+
puts 'Enter OS command: '
|
18
|
+
comSys = STDIN.gets.chomp
|
19
|
+
puts `#{comSys}`
|
data/Lab1/lb1_2.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#var2
|
2
|
+
def vzaimProst(num1, num2)
|
3
|
+
if(num1.gcd(num2)==1) then true
|
4
|
+
else false
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
def formArrDel(num)
|
9
|
+
return 1.upto(num).select{|e| num%e==0}
|
10
|
+
end
|
11
|
+
|
12
|
+
def meth1(num1)
|
13
|
+
return 2.upto(num1-1).count{|e| num1.gcd(e)==1}
|
14
|
+
end
|
15
|
+
|
16
|
+
def meth2(num)
|
17
|
+
return num.digits.select{|e| e%3==0}.sum
|
18
|
+
end
|
19
|
+
|
20
|
+
def meth3(num)
|
21
|
+
#formirovat massiv iz kol-va vzaimno-prostih s dannim
|
22
|
+
arr = formArrDel(num).map{|e| num.digits.count{|e1| e.gcd(e1)==1}}
|
23
|
+
return formArrDel(num)[arr.rindex(arr.max)]
|
24
|
+
end
|
25
|
+
|
26
|
+
puts meth1(16)
|
27
|
+
puts meth2(161718192023)
|
28
|
+
puts meth3(17)
|
data/Lab1/lb1_3.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
def minArr(arr)
|
2
|
+
minim=arr[0]
|
3
|
+
for i in 0..arr.length
|
4
|
+
if arr[i].to_i<minim
|
5
|
+
then minim=arr[i].to_i
|
6
|
+
end
|
7
|
+
end
|
8
|
+
return minim
|
9
|
+
end
|
10
|
+
|
11
|
+
def firstPos(arr)
|
12
|
+
for i in 0..arr.length
|
13
|
+
return i if arr[i].to_i>0
|
14
|
+
end
|
15
|
+
return -1
|
16
|
+
end
|
17
|
+
|
18
|
+
if ARGV.count<2
|
19
|
+
puts 'Введите 2 аргумента(метод, путь)!!!'
|
20
|
+
return
|
21
|
+
end
|
22
|
+
|
23
|
+
meth = ARGV[0]
|
24
|
+
path = ARGV[1]
|
25
|
+
|
26
|
+
file = File.open(path)
|
27
|
+
array = file.readline.split(' ').map(&:to_i)
|
28
|
+
file.close()
|
29
|
+
|
30
|
+
puts "Array: #{array}\n"
|
31
|
+
|
32
|
+
case meth
|
33
|
+
when 'minArr'
|
34
|
+
puts "Min in arr: #{minArr(array)}"
|
35
|
+
when 'fP'
|
36
|
+
puts "First positive in arr: #{firstPos(array)}"
|
37
|
+
else
|
38
|
+
puts "Unknown method"
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
#a=[1,3,-4,6,8,-3,-5, 10]
|
45
|
+
#puts minArr(a)
|
46
|
+
#puts firstPos(a)
|
data/Lab1/lb1_4.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
def idxMin(arr)
|
2
|
+
return arr.index(arr.min)
|
3
|
+
end
|
4
|
+
|
5
|
+
|
6
|
+
def countInterval(arr, a, b)
|
7
|
+
return arr.slice(a+1...b).length
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
def idxLastMin(arr)
|
12
|
+
return arr.rindex(arr.min)
|
13
|
+
end
|
14
|
+
|
15
|
+
def betweenMins(arr)
|
16
|
+
return countInterval(arr,idxMin(arr),idxLastMin(arr))
|
17
|
+
end
|
18
|
+
|
19
|
+
def countInNums(arr, a, b)
|
20
|
+
return arr.select{|e| e.between?(a,b)}.length
|
21
|
+
end
|
22
|
+
|
23
|
+
def differ2Arrs(arr1, arr2)
|
24
|
+
return arr1.find_all{|x| arr1.count(x)==1}.difference(arr2).union(arr2.find_all{|x| arr2.count(x)==1}.difference(arr1))
|
25
|
+
end
|
26
|
+
|
27
|
+
#a=[1,3,-4,-5,6,8,-3,-5,10,3]
|
28
|
+
#b=[2,8,-4,-7,6,12,-15,-3,1,1]
|
29
|
+
|
30
|
+
puts "Вечер добрый! Какую программу запустим?
|
31
|
+
|
32
|
+
2 - idxMin
|
33
|
+
14 - count in countInterval
|
34
|
+
26 - betweenMins
|
35
|
+
38 - countInNums
|
36
|
+
50 - differenceBetween2Arrs"
|
37
|
+
|
38
|
+
meth = gets.chomp.to_i
|
39
|
+
|
40
|
+
case meth
|
41
|
+
when meth = 2
|
42
|
+
puts "Введите массив для обработки"
|
43
|
+
arr = gets.chomp.split(' ').map(&:to_i)
|
44
|
+
puts "Введённый массив: #{arr.inspect}"
|
45
|
+
puts idxMin(arr)
|
46
|
+
when meth = 14
|
47
|
+
puts "Введите массив для обработки"
|
48
|
+
arr = gets.chomp.split(' ').map(&:to_i)
|
49
|
+
puts "Введите a"
|
50
|
+
a = gets.chomp.to_i
|
51
|
+
puts "Введите b"
|
52
|
+
b = gets.chomp.to_i
|
53
|
+
puts countInterval(arr,a,b)
|
54
|
+
when meth = 26
|
55
|
+
puts "Введите массив для обработки"
|
56
|
+
arr = gets.chomp.split(' ').map(&:to_i)
|
57
|
+
puts betweenMins(arr)
|
58
|
+
when meth = 38
|
59
|
+
puts "Введите массив для обработки"
|
60
|
+
arr = gets.chomp.split(' ').map(&:to_i)
|
61
|
+
puts "Введите a"
|
62
|
+
a = gets.chomp.to_i
|
63
|
+
puts "Введите b"
|
64
|
+
b = gets.chomp.to_i
|
65
|
+
puts countInNums(arr,a,b)
|
66
|
+
when meth = 50
|
67
|
+
puts "Введите 1 массив для обработки"
|
68
|
+
arr1 = gets.chomp.split(' ').map(&:to_i)
|
69
|
+
puts "Введите 2 массив для обработки"
|
70
|
+
arr2 = gets.chomp.split(' ').map(&:to_i)
|
71
|
+
puts differ2Arrs(arr1, arr2)
|
72
|
+
else
|
73
|
+
puts "Error"
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
#puts "Array: #{a}\n"
|
78
|
+
#puts idxMin(a)
|
79
|
+
#puts countInterval(a, 5, -1)
|
80
|
+
#puts betweenMins(a)
|
81
|
+
#puts countInNums(a, -1, 10)
|
82
|
+
#puts differ2Arrs(a, b)
|
data/Lab2/1Class.jpg
ADDED
Binary file
|
data/Lab2/Web/main.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sinatra'
|
4
|
+
require 'mс_gem'
|
5
|
+
|
6
|
+
set :port, 8000
|
7
|
+
|
8
|
+
puts MvcStudentXD.constants
|
9
|
+
|
10
|
+
students_model = MvcStudentXD::StudentListAdv.new(
|
11
|
+
MvcStudentXD::StudentsListDBAdapter.new(
|
12
|
+
MvcStudentXD::StudentListDB.instance))
|
13
|
+
|
14
|
+
main_controller = StudentListController.new(students_model)
|
15
|
+
main_controller.on_view_created = lambda { }
|
16
|
+
main_controller.on_add_student_clicked = lambda { }
|
17
|
+
main_controller.on_edit_student_clicked = lambda { |id| }
|
18
|
+
|
19
|
+
main_controller.selected_page = 0
|
20
|
+
|
21
|
+
editing_id = nil
|
22
|
+
|
23
|
+
get "/" do
|
24
|
+
send_file 'web/main.html'
|
25
|
+
end
|
26
|
+
|
27
|
+
post "/students" do
|
28
|
+
main_controller.refresh_data()
|
29
|
+
result = main_controller.data_list.map { |student|
|
30
|
+
student.as_json
|
31
|
+
}
|
32
|
+
|
33
|
+
result.to_json
|
34
|
+
end
|
35
|
+
|
36
|
+
post "/next_page" do
|
37
|
+
main_controller.next_page()
|
38
|
+
main_controller.refresh_data()
|
39
|
+
end
|
40
|
+
|
41
|
+
post "/last_page" do
|
42
|
+
main_controller.last_page()
|
43
|
+
main_controller.update_table()
|
44
|
+
end
|
45
|
+
|
46
|
+
get "/get_page" do
|
47
|
+
(main_controller.selected_page + 1).to_s
|
48
|
+
end
|
49
|
+
|
50
|
+
get "/get_pages_count" do
|
51
|
+
main_controller.pages_count.to_s
|
52
|
+
end
|
53
|
+
|
54
|
+
post "/set_editing_id:id" do
|
55
|
+
puts params[:id]
|
56
|
+
editing_id = params[:id]
|
57
|
+
end
|
58
|
+
|
59
|
+
get "/get_editing_id" do
|
60
|
+
editing_id.to_s
|
61
|
+
end
|
62
|
+
|
63
|
+
post "/delete:id" do
|
64
|
+
main_controller.remove_student(params[:id])
|
65
|
+
end
|
66
|
+
|
67
|
+
post "/editing:id" do
|
68
|
+
student = main_controller.get_student(params[:id])
|
69
|
+
[student.as_json].to_json
|
70
|
+
end
|
71
|
+
|
72
|
+
get "/add" do
|
73
|
+
if editing_id == 'null'
|
74
|
+
main_controller.show_modal_add
|
75
|
+
else
|
76
|
+
main_controller.show_modal_edit(editing_id)
|
77
|
+
end
|
78
|
+
send_file 'web/add.html'
|
79
|
+
end
|
80
|
+
|
81
|
+
get "/edit:student" do
|
82
|
+
student = Student.from_json(JSON.parse(params[:student]))
|
83
|
+
main_controller.replace_student(student.id, student)
|
84
|
+
end
|
85
|
+
|
86
|
+
get "/insert:student" do
|
87
|
+
student = Student.from_json(JSON.parse(params[:student]))
|
88
|
+
main_controller.add_student(student)
|
89
|
+
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
<html>
|
2
|
+
<style>
|
3
|
+
.text {
|
4
|
+
font-size: 20px;
|
5
|
+
font-weight: bold;
|
6
|
+
color: #000000;
|
7
|
+
}
|
8
|
+
|
9
|
+
.txbox {
|
10
|
+
font-size: 16px;
|
11
|
+
padding: 7px;
|
12
|
+
border: 1px solid #050505;
|
13
|
+
}
|
14
|
+
|
15
|
+
.bt {
|
16
|
+
font-size: 15px;
|
17
|
+
padding: 5px 10px;
|
18
|
+
background-color: #5117d6;
|
19
|
+
color: #fff;
|
20
|
+
border: none;
|
21
|
+
border-radius: 5px;
|
22
|
+
cursor: pointer;
|
23
|
+
margin: 16px;
|
24
|
+
}
|
25
|
+
|
26
|
+
.bt:hover {
|
27
|
+
background-color: #22b91d;
|
28
|
+
}
|
29
|
+
</style>
|
30
|
+
|
31
|
+
<body style="display: flex; flex-direction: column; width: 256px;">
|
32
|
+
<label class="text" for="user_name">Фамилия</label>
|
33
|
+
<input class ="txbox" type="text" id="lastname">
|
34
|
+
|
35
|
+
<label class="text" for="user_name">Имя</label>
|
36
|
+
<input class ="txbox" type="text" id="firstname">
|
37
|
+
|
38
|
+
<label class="text" for="user_name">Отчество</label>
|
39
|
+
<input class ="txbox" type="text" id="parental_name">
|
40
|
+
|
41
|
+
<label class="text" for="user_name">GitHub</label>
|
42
|
+
<input class ="txbox" type="text" id="git">
|
43
|
+
|
44
|
+
<label class="text" for="user_name">Телефон</label>
|
45
|
+
<input class ="txbox" type="text" id="phone">
|
46
|
+
|
47
|
+
<label class="text" for="user_name">Почта</label>
|
48
|
+
<input class ="txbox" type="text" id="email">
|
49
|
+
|
50
|
+
<label class="text" for="user_name">Телеграм</label>
|
51
|
+
<input class ="txbox" type="text" id="telegram">
|
52
|
+
|
53
|
+
<button class ="bt" onclick="check_button()">Готово</button>
|
54
|
+
</body>
|
55
|
+
|
56
|
+
<script>
|
57
|
+
let is_edit_mode = false
|
58
|
+
let id = null
|
59
|
+
|
60
|
+
function check_button() {
|
61
|
+
if (document.getElementById('firstname').value === "") {
|
62
|
+
alert("Имя не введено")
|
63
|
+
return
|
64
|
+
}
|
65
|
+
|
66
|
+
if (document.getElementById('lastname').value === "") {
|
67
|
+
alert("Фамилия не введена")
|
68
|
+
return
|
69
|
+
}
|
70
|
+
|
71
|
+
if (document.getElementById('parental_name').value === "") {
|
72
|
+
alert("Отчество не введено")
|
73
|
+
return
|
74
|
+
}
|
75
|
+
|
76
|
+
if (document.getElementById('git').value !== "" && document.getElementById('git').value.match(/@\w*/) == null) {
|
77
|
+
alert("Неверно введен GitHub")
|
78
|
+
return
|
79
|
+
}
|
80
|
+
|
81
|
+
if (document.getElementById('email').value !== "" && document.getElementById('email').value.match(/\w*@\w*.\w{2,3}/) == null) {
|
82
|
+
alert("Неверно введена почта")
|
83
|
+
return
|
84
|
+
}
|
85
|
+
|
86
|
+
if (document.getElementById('phone').value !== "" && document.getElementById('phone').value.match(/\d-\d{3}-\d{3}-\d{2}-\d{2}/) == null) {
|
87
|
+
alert("Неверно введен номер телефона")
|
88
|
+
return
|
89
|
+
}
|
90
|
+
|
91
|
+
if (document.getElementById('telegram').value !== "" && document.getElementById('telegram').value.match(/@\w*/) == null) {
|
92
|
+
alert("Неверно введена телеграм")
|
93
|
+
return
|
94
|
+
}
|
95
|
+
|
96
|
+
if (document.getElementById('git').value === "" && document.getElementById('phone').value == "" && document.getElementById('email').value == "" && document.getElementById('telegram').value == "") {
|
97
|
+
alert("Отсутствует контакт")
|
98
|
+
return
|
99
|
+
}
|
100
|
+
|
101
|
+
add_student()
|
102
|
+
}
|
103
|
+
|
104
|
+
function get_editing_student() {
|
105
|
+
var http = new XMLHttpRequest();
|
106
|
+
http.open('GET', 'get_editing_id', false);
|
107
|
+
http.send()
|
108
|
+
|
109
|
+
id = http.responseText
|
110
|
+
|
111
|
+
|
112
|
+
if (id !== "null") {
|
113
|
+
is_edit_mode = true
|
114
|
+
|
115
|
+
http.open('POST', 'editing' + id, false);
|
116
|
+
http.send()
|
117
|
+
|
118
|
+
let student = JSON.parse(http.responseText)
|
119
|
+
|
120
|
+
document.getElementById('firstname').value = student[0]["firstname"]
|
121
|
+
document.getElementById('lastname').value = student[0]["lastname"]
|
122
|
+
document.getElementById('parental_name').value = student[0]["parental_name"]
|
123
|
+
document.getElementById('git').value = student[0]["git"]
|
124
|
+
document.getElementById('email').value = student[0]["email"]
|
125
|
+
document.getElementById('phone').value = student[0]["phone"]
|
126
|
+
document.getElementById('telegram').value = student[0]["telegram"]
|
127
|
+
}
|
128
|
+
}
|
129
|
+
|
130
|
+
function add_student() {
|
131
|
+
let json = {
|
132
|
+
"firstname": document.getElementById('firstname').value,
|
133
|
+
"lastname": document.getElementById('lastname').value,
|
134
|
+
"parental_name": document.getElementById('parental_name').value
|
135
|
+
}
|
136
|
+
|
137
|
+
if (id != null) {
|
138
|
+
json['id'] = id
|
139
|
+
}
|
140
|
+
if (document.getElementById('git').value !== "") {
|
141
|
+
json['git'] = document.getElementById('git').value
|
142
|
+
}
|
143
|
+
if (document.getElementById('email').value !== "") {
|
144
|
+
json['email'] = document.getElementById('email').value
|
145
|
+
}
|
146
|
+
if (document.getElementById('phone').value !== "") {
|
147
|
+
json['phone'] = document.getElementById('phone').value
|
148
|
+
}
|
149
|
+
if (document.getElementById('telegram').value !== "") {
|
150
|
+
json['telegram'] = document.getElementById('telegram').value
|
151
|
+
}
|
152
|
+
|
153
|
+
var http = new XMLHttpRequest();
|
154
|
+
|
155
|
+
if (is_edit_mode) {
|
156
|
+
http.open('GET', "edit" + JSON.stringify(json), false);
|
157
|
+
http.send()
|
158
|
+
} else {
|
159
|
+
http.open('GET', "insert" + JSON.stringify(json), false);
|
160
|
+
http.send()
|
161
|
+
}
|
162
|
+
|
163
|
+
window.location.replace("/");
|
164
|
+
}
|
165
|
+
|
166
|
+
get_editing_student()
|
167
|
+
</script>
|
168
|
+
</html>
|