mvcStudentXD 1.1.3 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +24 -22
  3. data/Gemfile.lock +101 -0
  4. data/Lab1/arr1_3.txt +1 -0
  5. data/Lab1/lb1_1.rb +19 -0
  6. data/Lab1/lb1_2.rb +28 -0
  7. data/Lab1/lb1_3.rb +46 -0
  8. data/Lab1/lb1_4.rb +82 -0
  9. data/Lab2/1Class.jpg +0 -0
  10. data/Lab2/Web/main.rb +89 -0
  11. data/Lab2/Web/views/add.html +168 -0
  12. data/Lab2/Web/views/main.html +233 -0
  13. data/Lab2/data_storage/students1.txt +1 -0
  14. data/Lab2/data_storage/studentsRead.json +36 -0
  15. data/Lab2/data_storage/studentsRead.txt +3 -0
  16. data/Lab2/data_storage/studentsRead.yaml +26 -0
  17. data/Lab2/data_storage/studentsWrite.json +42 -0
  18. data/Lab2/data_storage/studentsWrite.txt +4 -0
  19. data/Lab2/data_storage/studentsWrite.yaml +31 -0
  20. data/Lab2/examples/Strategy.rb +38 -0
  21. data/Lab2/examples/adapter.rb +30 -0
  22. data/Lab2/examples/database.rb +15 -0
  23. data/Lab2/examples/observer_example.rb +51 -0
  24. data/Lab2/examples/pattern_pattern.rb +44 -0
  25. data/Lab2/examples/site_example.rb +21 -0
  26. data/Lab2/examples/views/about.erb +11 -0
  27. data/Lab2/examples/views/contact.erb +15 -0
  28. data/Lab2/examples/views/index.erb +11 -0
  29. data/Lab2/main.rb +6 -0
  30. data/Lab2/main_window.rb +31 -0
  31. data/Lab2/student_input_form.rb +71 -0
  32. data/Lab2/tab_students.rb +157 -0
  33. data/Lab2/test/student_test.rb +91 -0
  34. data/README.md +3 -35
  35. data/mvcStudentXD/Gemfile +22 -0
  36. data/mvcStudentXD/Gemfile.lock +97 -0
  37. data/mvcStudentXD/README.md +35 -0
  38. data/mvcStudentXD/bin/console +11 -0
  39. data/mvcStudentXD/bin/setup +8 -0
  40. data/{lib/source → mvcStudentXD/lib}/mvcStudentXD/version.rb +1 -1
  41. data/{lib → mvcStudentXD/lib}/mvcStudentXD.rb +1 -1
  42. data/mvcStudentXD/mvcStudentXD-1.2.0.gem +0 -0
  43. data/mvcStudentXD/mvcStudentXD.gemspec +15 -0
  44. data/mvcStudentXD/pkg/mvcStudentXD-0.1.0.gem +0 -0
  45. data/mvcStudentXD/pkg/mvcStudentXD-1.0.1.gem +0 -0
  46. data/mvcStudentXD/pkg/mvcStudentXD-1.1.1.gem +0 -0
  47. data/mvcStudentXD/test/student_test.rb +91 -0
  48. data/mvcStudentXD/test/test_helper.rb +6 -0
  49. data/mvcStudentXD/test/test_mvcStudentXD.rb +13 -0
  50. metadata +92 -41
  51. data/.rubocop.yml +0 -13
  52. data/mvcStudentXD-1.1.1.gem +0 -0
  53. data/mvcStudentXD.gemspec +0 -38
  54. /data/{CHANGELOG.md → mvcStudentXD/CHANGELOG.md} +0 -0
  55. /data/{CODE_OF_CONDUCT.md → mvcStudentXD/CODE_OF_CONDUCT.md} +0 -0
  56. /data/{Rakefile → mvcStudentXD/Rakefile} +0 -0
  57. /data/{lib → mvcStudentXD/lib}/source/adapters/student_list_adapter.rb +0 -0
  58. /data/{lib → mvcStudentXD/lib}/source/containers/Data_list.rb +0 -0
  59. /data/{lib → mvcStudentXD/lib}/source/containers/Data_list_student_short.rb +0 -0
  60. /data/{lib → mvcStudentXD/lib}/source/containers/Data_table.rb +0 -0
  61. /data/{lib → mvcStudentXD/lib}/source/controllers/student_edit_form_controller.rb +0 -0
  62. /data/{lib → mvcStudentXD/lib}/source/controllers/student_input_form_controller.rb +0 -0
  63. /data/{lib → mvcStudentXD/lib}/source/controllers/student_list_controller.rb +0 -0
  64. /data/{lib → mvcStudentXD/lib}/source/converters/Converter.rb +0 -0
  65. /data/{lib → mvcStudentXD/lib}/source/converters/Converter_json.rb +0 -0
  66. /data/{lib → mvcStudentXD/lib}/source/converters/Converter_txt.rb +0 -0
  67. /data/{lib → mvcStudentXD/lib}/source/converters/Converter_yaml.rb +0 -0
  68. /data/{lib → mvcStudentXD/lib}/source/database/scripts/create_table.sql +0 -0
  69. /data/{lib → mvcStudentXD/lib}/source/database/scripts/insert_data.sql +0 -0
  70. /data/{lib → mvcStudentXD/lib}/source/database/student_list_db.rb +0 -0
  71. /data/{lib → mvcStudentXD/lib}/source/database/students_db.rb +0 -0
  72. /data/{lib → mvcStudentXD/lib}/source/model/Student.rb +0 -0
  73. /data/{lib → mvcStudentXD/lib}/source/model/StudentBase.rb +0 -0
  74. /data/{lib → mvcStudentXD/lib}/source/model/Student_short.rb +0 -0
  75. /data/{lib → mvcStudentXD/lib}/source/repositories/Student_list.rb +0 -0
  76. /data/{lib → mvcStudentXD/lib}/source/repositories/student_list_adv.rb +0 -0
  77. /data/{lib → mvcStudentXD/lib}/source/util/LoggerHolder.rb +0 -0
  78. /data/{sig → mvcStudentXD/sig}/mvcStudentXD.rbs +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b8ee4de624d2ae1dc09ecd233294181ff8070703c289b544e177c1e569f374f
4
- data.tar.gz: 32717b23dadc5a9722a1187418973715cd7e42660e0ae1006df90e33c141854a
3
+ metadata.gz: a6f194590788eed899d92b2baa0ad0eac53c95c6115c1eb51b89a6d20422d6b5
4
+ data.tar.gz: 4bc8cd3591a37fc1392e9fd19ab3d6da6fb6ce43a59cdaa5e69b0cc947481328
5
5
  SHA512:
6
- metadata.gz: c6e5f27a6781ab2e666d9c4f53033f63a8dff96b0f39bc60118f3221a1995b941ecba0f3cc6a9edc7b69245841070dfc1a37fa4846ba4fdfdf7ea75fb5240ee9
7
- data.tar.gz: 4db0f8e59ab637c164077bc09931b528353329cec4ad006ba37934b9a81772e0ae7f5dfc8de7cb6893bd4b0622ffb43eee5af0f0f2426c63182faf440dc7ee73
6
+ metadata.gz: 4d9acbfe05cc317b8a9e1eeb8d282384fdcefb615ba301b5647226ec5eaaa5d5a3d665e0cf95e1ee2bc280969a5a977081063c60804dc10e386b1d6ce4d4788c
7
+ data.tar.gz: 360a16892b3157842701c12e4216f519e2869baab5f3ebd5f029e138e63f2e0f7cebff839fbd894a9e598d89ae74485da95a7296b9337743e205a20e1a1849f5
data/Gemfile CHANGED
@@ -1,22 +1,24 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- # Specify your gem's dependencies in mvcStudentXD.gemspec
6
- gemspec
7
-
8
- gem "rake", "~> 13.0"
9
-
10
- gem "minitest", "~> 5.0"
11
-
12
- gem "rubocop", "~> 1.21"
13
-
14
- gem "mysql2"
15
-
16
- gem "glimmer-dsl-libui", '~> 0.7.4'
17
-
18
- gem 'win32api'
19
-
20
- gem 'sinatra', '~> 3.0', '>= 3.0.6'
21
-
22
- gem 'thin', '~> 1.8', '>= 1.8.2'
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake", "~> 13.0"
6
+
7
+ gem "minitest", "~> 5.0"
8
+
9
+ gem "rubocop", "~> 1.21"
10
+
11
+ gem "mysql2"
12
+
13
+ gem "glimmer-dsl-libui", '~> 0.7.4'
14
+
15
+ gem 'win32api'
16
+
17
+ gem 'sinatra', '~> 3.0', '>= 3.0.6'
18
+
19
+ gem 'thin', '~> 1.8', '>= 1.8.2'
20
+
21
+ gem "sinatra-contrib"
22
+
23
+ gem 'mvcStudentXD', '~> 1.2.0'
24
+ # gem "rails"
data/Gemfile.lock ADDED
@@ -0,0 +1,101 @@
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
+ multi_json (1.15.0)
31
+ mustermann (3.0.0)
32
+ ruby2_keywords (~> 0.0.1)
33
+ mvcStudentXD (1.2.0)
34
+ mysql2 (0.5.5)
35
+ os (1.1.4)
36
+ parallel (1.23.0)
37
+ parser (3.2.2.1)
38
+ ast (~> 2.4.1)
39
+ perfect-shape (1.0.7)
40
+ equalizer (>= 0.0.11, < 1.1.0)
41
+ matrix (>= 0.4.2, < 1.1.0)
42
+ rack (2.2.7)
43
+ rack-protection (3.0.6)
44
+ rack
45
+ rainbow (3.1.1)
46
+ rake (13.0.6)
47
+ regexp_parser (2.8.0)
48
+ rexml (3.2.5)
49
+ rouge (3.30.0)
50
+ rubocop (1.50.2)
51
+ json (~> 2.3)
52
+ parallel (~> 1.10)
53
+ parser (>= 3.2.0.0)
54
+ rainbow (>= 2.2.2, < 4.0)
55
+ regexp_parser (>= 1.8, < 3.0)
56
+ rexml (>= 3.2.5, < 4.0)
57
+ rubocop-ast (>= 1.28.0, < 2.0)
58
+ ruby-progressbar (~> 1.7)
59
+ unicode-display_width (>= 2.4.0, < 3.0)
60
+ rubocop-ast (1.28.1)
61
+ parser (>= 3.2.1.0)
62
+ ruby-progressbar (1.13.0)
63
+ ruby2_keywords (0.0.5)
64
+ sinatra (3.0.6)
65
+ mustermann (~> 3.0)
66
+ rack (~> 2.2, >= 2.2.4)
67
+ rack-protection (= 3.0.6)
68
+ tilt (~> 2.0)
69
+ sinatra-contrib (3.0.6)
70
+ multi_json
71
+ mustermann (~> 3.0)
72
+ rack-protection (= 3.0.6)
73
+ sinatra (= 3.0.6)
74
+ tilt (~> 2.0)
75
+ super_module (1.4.1)
76
+ method_source (>= 0.8.2, < 1.1.0)
77
+ thin (1.8.2)
78
+ daemons (~> 1.0, >= 1.0.9)
79
+ eventmachine (~> 1.0, >= 1.0.4)
80
+ rack (>= 1, < 3)
81
+ tilt (2.1.0)
82
+ unicode-display_width (2.4.2)
83
+ win32api (0.1.0)
84
+
85
+ PLATFORMS
86
+ x64-mingw-ucrt
87
+
88
+ DEPENDENCIES
89
+ glimmer-dsl-libui (~> 0.7.4)
90
+ minitest (~> 5.0)
91
+ mvcStudentXD (~> 1.2.0)
92
+ mysql2
93
+ rake (~> 13.0)
94
+ rubocop (~> 1.21)
95
+ sinatra (~> 3.0, >= 3.0.6)
96
+ sinatra-contrib
97
+ thin (~> 1.8, >= 1.8.2)
98
+ win32api
99
+
100
+ BUNDLED WITH
101
+ 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 'mvcStudentXD'
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>