mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-25 16:44:28 +00:00
Compare commits
1035
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
759aad047b | ||
|
|
db7f46a874 | ||
|
|
fd0262f708 | ||
|
|
a06d7bbfec | ||
|
|
16689f4d6e | ||
|
|
d1adc160ca | ||
|
|
0bd75716f2 | ||
|
|
a70ef78ead | ||
|
|
9782fe5459 | ||
|
|
5e509f7f19 | ||
|
|
3f257af006 | ||
|
|
7fac6062e5 | ||
|
|
7ba74143df | ||
|
|
044e29f557 | ||
|
|
e110e8fa57 | ||
|
|
d018ab18f8 | ||
|
|
f5cdb0a2fb | ||
|
|
8cc0462712 | ||
|
|
4162305ac6 | ||
|
|
6508301526 | ||
|
|
76b9c6781d | ||
|
|
856706bc1c | ||
|
|
d680c3aa2b | ||
|
|
d98bdb9745 | ||
|
|
0411befe8d | ||
|
|
138c80c97a | ||
|
|
97a88d1d0d | ||
|
|
a23d079001 | ||
|
|
f13f6ff0cc | ||
|
|
8bf18b0d37 | ||
|
|
a595daa9b4 | ||
|
|
d54747c4df | ||
|
|
7e141f73d3 | ||
|
|
da3b329772 | ||
|
|
7f9dcc43ad | ||
|
|
274262262a | ||
|
|
79c0f31ddc | ||
|
|
49d61342c2 | ||
|
|
be0943f1ba | ||
|
|
41d40102f3 | ||
|
|
95e63f865c | ||
|
|
e3aa36cae0 | ||
|
|
0a232828c8 | ||
|
|
1496045c40 | ||
|
|
e2dadcd208 | ||
|
|
164c11e10a | ||
|
|
eb9c882fe9 | ||
|
|
c7bac03429 | ||
|
|
07d3b32279 | ||
|
|
245d0d3369 | ||
|
|
d3d04c5a77 | ||
|
|
0687ef72ce | ||
|
|
9180b9bd63 | ||
|
|
070ac1e878 | ||
|
|
168fb00023 | ||
|
|
f5d81e4a93 | ||
|
|
b0f3fa0c46 | ||
|
|
6d89e95afa | ||
|
|
07bb0ddffd | ||
|
|
df8c58f5df | ||
|
|
f45782aeef | ||
|
|
c2faff5a03 | ||
|
|
1cff18112b | ||
|
|
195b99e588 | ||
|
|
0410c95447 | ||
|
|
2f90112e4d | ||
|
|
774eb90bcc | ||
|
|
1def930147 | ||
|
|
30b8a406a5 | ||
|
|
093842274e | ||
|
|
63ff8dd4c4 | ||
|
|
6019489ef1 | ||
|
|
fc79f92796 | ||
|
|
fd2f4187fa | ||
|
|
8e569a9ccd | ||
|
|
d7b2964e4e | ||
|
|
b2bebb7fa3 | ||
|
|
e32cce57fe | ||
|
|
fa91e204f0 | ||
|
|
366edb7e90 | ||
|
|
ac6aa28680 | ||
|
|
f6f58642f5 | ||
|
|
9430135592 | ||
|
|
57eec98604 | ||
|
|
1561aa55b7 | ||
|
|
23506430b1 | ||
|
|
fa58635a22 | ||
|
|
35f4d23308 | ||
|
|
199b62d13f | ||
|
|
bb366e4117 | ||
|
|
7f630f24d5 | ||
|
|
b0fc5a3618 | ||
|
|
b0f90cafb6 | ||
|
|
c0c57ba378 | ||
|
|
6e599908cd | ||
|
|
c099eec7a7 | ||
|
|
0962e62e69 | ||
|
|
dcd6cfd74b | ||
|
|
b1be5a4ba4 | ||
|
|
5caab182b2 | ||
|
|
baaf941f25 | ||
|
|
2e5e7afb4d | ||
|
|
71f68da90b | ||
|
|
2c4626fd1a | ||
|
|
178638c006 | ||
|
|
981c97173e | ||
|
|
c11fd03362 | ||
|
|
49d5c46133 | ||
|
|
9fb00f6cbd | ||
|
|
ec1422a136 | ||
|
|
d56d1bc2bd | ||
|
|
45eca862ac | ||
|
|
89e98056e6 | ||
|
|
9f738f4871 | ||
|
|
3533a3fd4b | ||
|
|
5cf14aa886 | ||
|
|
7d3096c2e8 | ||
|
|
ef2f9630a9 | ||
|
|
4d3c73c78f | ||
|
|
9ee6a0a01a | ||
|
|
1e226f4515 | ||
|
|
ca8fe5bd19 | ||
|
|
6d26ec2ab7 | ||
|
|
672acfe8fe | ||
|
|
6a4db90897 | ||
|
|
d4e170037b | ||
|
|
449537ef77 | ||
|
|
82587a70be | ||
|
|
d16120f650 | ||
|
|
7aba7aefb9 | ||
|
|
0a18fcf732 | ||
|
|
d0ef9ca96c | ||
|
|
12d8c8447b | ||
|
|
905cd46942 | ||
|
|
e5ae400686 | ||
|
|
625ffe12ce | ||
|
|
cb7a0f7669 | ||
|
|
68d97a5e97 | ||
|
|
d27071528f | ||
|
|
17772c3738 | ||
|
|
a5d5d42ba3 | ||
|
|
e08b731cb5 | ||
|
|
15441a46f7 | ||
|
|
a9a56bb1e9 | ||
|
|
e840be84eb | ||
|
|
0b40455e3c | ||
|
|
1b822fc8f8 | ||
|
|
368eded1fd | ||
|
|
d9ea5a95af | ||
|
|
d1a4cfd5df | ||
|
|
23502d4fab | ||
|
|
dbcacdddd6 | ||
|
|
772f35c6ba | ||
|
|
8b2ef4e832 | ||
|
|
4b22f939b5 | ||
|
|
6fedb4b108 | ||
|
|
7b46a15752 | ||
|
|
905c69c384 | ||
|
|
bf3d6275d4 | ||
|
|
6fa0a7c102 | ||
|
|
7320dc448e | ||
|
|
ede9323224 | ||
|
|
3dcf72d679 | ||
|
|
dd2fd6421b | ||
|
|
3b99a14b47 | ||
|
|
1d3d067b44 | ||
|
|
37b70861d1 | ||
|
|
d3ceed32c6 | ||
|
|
780890fbdd | ||
|
|
72aed76857 | ||
|
|
150d54eeda | ||
|
|
3690babf62 | ||
|
|
229882e8d8 | ||
|
|
1e184d36fc | ||
|
|
68b26a1091 | ||
|
|
9ca7ff73f4 | ||
|
|
c56064d189 | ||
|
|
5c371a20d2 | ||
|
|
424495c636 | ||
|
|
9c7e98f1cb | ||
|
|
d42157c5f8 | ||
|
|
502851856b | ||
|
|
23edcf3aa7 | ||
|
|
90e933de00 | ||
|
|
8ce67a4726 | ||
|
|
bcfdf1e05c | ||
|
|
cb744799bd | ||
|
|
90ebee25fe | ||
|
|
14372a6fce | ||
|
|
bbb4f8a01c | ||
|
|
3e8ed231a6 | ||
|
|
4c67b9d267 | ||
|
|
c16cf342cb | ||
|
|
d843f05922 | ||
|
|
44e9b4dff1 | ||
|
|
80306dadf7 | ||
|
|
bda42ab347 | ||
|
|
b5b69878b8 | ||
|
|
6f17ddbbdf | ||
|
|
adba14f6e7 | ||
|
|
57e901be27 | ||
|
|
d38641e312 | ||
|
|
ef1347c7d5 | ||
|
|
bf5ab6b7dd | ||
|
|
fdbb93a5c5 | ||
|
|
b7e48633ab | ||
|
|
04dc1eb07b | ||
|
|
50b229090b | ||
|
|
ca19306b72 | ||
|
|
86dc002fa6 | ||
|
|
2d27a998c4 | ||
|
|
090e535466 | ||
|
|
c4d35181db | ||
|
|
66c0c14748 | ||
|
|
453fc209b8 | ||
|
|
0ac6ef4599 | ||
|
|
7f13c128f1 | ||
|
|
cffa493984 | ||
|
|
9030cdcc76 | ||
|
|
c3ef487a6f | ||
|
|
ac0eddf4c7 | ||
|
|
e373e797f4 | ||
|
|
382244035b | ||
|
|
b9c8c71274 | ||
|
|
cb60ddcc94 | ||
|
|
bd4ced9559 | ||
|
|
a04d2acb86 | ||
|
|
de2aabf00b | ||
|
|
685fc69e5d | ||
|
|
d1fa5f64c4 | ||
|
|
58a921b500 | ||
|
|
af8814468f | ||
|
|
c8a6e2f7cd | ||
|
|
2227c3ecf1 | ||
|
|
c7526bd0d9 | ||
|
|
791f69b509 | ||
|
|
21eb95bb23 | ||
|
|
5592b69dc0 | ||
|
|
fc1303affd | ||
|
|
863aaf62ec | ||
|
|
293352ac3c | ||
|
|
736e91224e | ||
|
|
9bc564dbf9 | ||
|
|
6d0ab0d4aa | ||
|
|
1fe742d9c7 | ||
|
|
7ae34e0640 | ||
|
|
e9b5438a24 | ||
|
|
51be318edc | ||
|
|
ca79b0c4d8 | ||
|
|
dfe05cbfa8 | ||
|
|
e856c8ad6b | ||
|
|
9109ead81c | ||
|
|
746f8bc736 | ||
|
|
9c03b89ab5 | ||
|
|
5798e960a2 | ||
|
|
98730ce612 | ||
|
|
552faefa51 | ||
|
|
5aded99999 | ||
|
|
f780553773 | ||
|
|
2723d6a741 | ||
|
|
e5e22931a9 | ||
|
|
804716edb2 | ||
|
|
332a47475e | ||
|
|
132edce701 | ||
|
|
6ce0cf6209 | ||
|
|
868599a7fe | ||
|
|
21ea277aaf | ||
|
|
53bce69c6f | ||
|
|
20c68d675c | ||
|
|
dfc8fdf44f | ||
|
|
2c0badf67c | ||
|
|
4a26d7a89a | ||
|
|
5e72161ab0 | ||
|
|
16f57a1bce | ||
|
|
1cf3c18841 | ||
|
|
1dd9ff0daf | ||
|
|
e86e7f0bd8 | ||
|
|
011e93720e | ||
|
|
331381c94d | ||
|
|
478b23825c | ||
|
|
ff876afbb3 | ||
|
|
dd13c73415 | ||
|
|
e89ab9b92f | ||
|
|
4e59173d6c | ||
|
|
df28d7331b | ||
|
|
2d0a2f3024 | ||
|
|
781e145721 | ||
|
|
e984425e36 | ||
|
|
2eb58e3346 | ||
|
|
ab4039dbbd | ||
|
|
2c1702a20b | ||
|
|
72a5f35b0e | ||
|
|
076ae15abd | ||
|
|
fbc5f95340 | ||
|
|
ff3a25a5ec | ||
|
|
2dd5a95232 | ||
|
|
2a21bbf062 | ||
|
|
d9a80e5ef7 | ||
|
|
2cadee1599 | ||
|
|
6c26fde210 | ||
|
|
bc908b7fe9 | ||
|
|
26d468aa6f | ||
|
|
954397f028 | ||
|
|
80faa61c91 | ||
|
|
961ede66a9 | ||
|
|
0f7188a347 | ||
|
|
3e832f9526 | ||
|
|
392cfbdc4e | ||
|
|
0751aa5a0f | ||
|
|
e57846566e | ||
|
|
6c818e5c30 | ||
|
|
20f043abc6 | ||
|
|
416451eb0b | ||
|
|
3ab7a61a47 | ||
|
|
5571353464 | ||
|
|
95d85c7f5b | ||
|
|
d7e509979a | ||
|
|
91a5b2d4fc | ||
|
|
6fec8382b5 | ||
|
|
c36f259571 | ||
|
|
4eb076d115 | ||
|
|
5171a7b7b3 | ||
|
|
7427aa87ea | ||
|
|
85043e57db | ||
|
|
501bae585a | ||
|
|
b41c8acddd | ||
|
|
06bc1ebcd4 | ||
|
|
999827b3ec | ||
|
|
2c72f704d0 | ||
|
|
194de7b4e7 | ||
|
|
5beddbccb4 | ||
|
|
c03609142b | ||
|
|
38ea481177 | ||
|
|
dbf945dfe5 | ||
|
|
21065a3c95 | ||
|
|
79b5defb63 | ||
|
|
e2ae9b88c8 | ||
|
|
ca3abf9154 | ||
|
|
956b201757 | ||
|
|
b90dabeb2c | ||
|
|
2f1edfeeab | ||
|
|
fac320bfce | ||
|
|
6c2820f900 | ||
|
|
9a113e2993 | ||
|
|
89e0326435 | ||
|
|
f863c6d728 | ||
|
|
1a37273a9e | ||
|
|
d14b9e2ab5 | ||
|
|
5374f71732 | ||
|
|
d926e4165b | ||
|
|
8c88ae401b | ||
|
|
92a2053b42 | ||
|
|
e5015f348b | ||
|
|
6792002c19 | ||
|
|
9890f6aade | ||
|
|
536e66eed9 | ||
|
|
c53d451000 | ||
|
|
6e103480cc | ||
|
|
6a53c9fae4 | ||
|
|
28d65ac114 | ||
|
|
239577e9cf | ||
|
|
a8fb45adc6 | ||
|
|
9316016d24 | ||
|
|
8d815d40b6 | ||
|
|
33b5c370b1 | ||
|
|
cdf63840b0 | ||
|
|
cf14501311 | ||
|
|
187b4a6e4b | ||
|
|
4ab9056700 | ||
|
|
9a281dfa71 | ||
|
|
0b3f7d1fe3 | ||
|
|
a9d82de25c | ||
|
|
414d8bd383 | ||
|
|
903f3b99b3 | ||
|
|
eb8b4986d7 | ||
|
|
70602be54e | ||
|
|
dac71f597a | ||
|
|
f6747713a1 | ||
|
|
3a646ffe77 | ||
|
|
59ddf175ed | ||
|
|
6cc09969dd | ||
|
|
ccd8d5f871 | ||
|
|
1a813e52ce | ||
|
|
bd47ad2b8c | ||
|
|
afa765c4ba | ||
|
|
26db4a5e7a | ||
|
|
e90019cdd8 | ||
|
|
16b238124a | ||
|
|
df9edc36e0 | ||
|
|
4def45907b | ||
|
|
202e6e88d2 | ||
|
|
3b2473039f | ||
|
|
59d1ca3409 | ||
|
|
1d26303333 | ||
|
|
8f73489073 | ||
|
|
98a10a2f55 | ||
|
|
e48b94b858 | ||
|
|
ff08ca140c | ||
|
|
61a9feb8fd | ||
|
|
21fdf31518 | ||
|
|
3af9397689 | ||
|
|
fef756f508 | ||
|
|
131edf1293 | ||
|
|
39f1716ae2 | ||
|
|
6787b9b553 | ||
|
|
1c2491385f | ||
|
|
97baaf6797 | ||
|
|
4e88765a83 | ||
|
|
aac26f6720 | ||
|
|
3b3e75003f | ||
|
|
ab699aafdc | ||
|
|
98bdb8c526 | ||
|
|
c7b25e6632 | ||
|
|
94f742187e | ||
|
|
70ebe34f1f | ||
|
|
992cb6b310 | ||
|
|
917a9ee707 | ||
|
|
d577ac6d54 | ||
|
|
5b5f6ac0b9 | ||
|
|
2aecc6e0f2 | ||
|
|
695f3455e6 | ||
|
|
13e8a1a9f6 | ||
|
|
0ff29ba6af | ||
|
|
be508c99ea | ||
|
|
4b064f566a | ||
|
|
ba543448ae | ||
|
|
2a86a70386 | ||
|
|
f121f9b5a2 | ||
|
|
8ab83eaf41 | ||
|
|
262b170244 | ||
|
|
e21f35b880 | ||
|
|
24c8a1c501 | ||
|
|
cfe6e3c805 | ||
|
|
88b22f5490 | ||
|
|
4b7ee9abe1 | ||
|
|
d3b62daea0 | ||
|
|
35355b28c0 | ||
|
|
88c82a41ba | ||
|
|
910e960e4f | ||
|
|
d499619cf3 | ||
|
|
f489153ff3 | ||
|
|
9b79a07fa2 | ||
|
|
354e1ccdf4 | ||
|
|
6ce14a25d7 | ||
|
|
c701d92779 | ||
|
|
73e03ba901 | ||
|
|
d1911f0f96 | ||
|
|
1339077b57 | ||
|
|
cdc279b5da | ||
|
|
d003bfa7f1 | ||
|
|
95a7797ae9 | ||
|
|
343a82b89c | ||
|
|
09a5515121 | ||
|
|
cc23fb0f39 | ||
|
|
7edddd0566 | ||
|
|
ebafc4576f | ||
|
|
328fe4256e | ||
|
|
c240eb4a4e | ||
|
|
38d9d91945 | ||
|
|
4669598dd9 | ||
|
|
3ce3eff022 | ||
|
|
7daaf79fcc | ||
|
|
d68fa8ce95 | ||
|
|
d61ee51d79 | ||
|
|
a6f81006be | ||
|
|
5fa374259e | ||
|
|
9fd033b30e | ||
|
|
21d80905a2 | ||
|
|
e98ed3c74f | ||
|
|
ebe76821e4 | ||
|
|
3858e38a02 | ||
|
|
510c35e077 | ||
|
|
a8f680810f | ||
|
|
f1c3c8296f | ||
|
|
3a91b12f31 | ||
|
|
6c90ccfbaa | ||
|
|
ea0a249612 | ||
|
|
843894405e | ||
|
|
3aebccbb9d | ||
|
|
653a320e6c | ||
|
|
8fddbc3a32 | ||
|
|
ee6f28c06d | ||
|
|
fdb037da96 | ||
|
|
71a77fc576 | ||
|
|
57e7ad6903 | ||
|
|
290564fd2f | ||
|
|
b9207b5efb | ||
|
|
c58715d95b | ||
|
|
5c6a8b9966 | ||
|
|
49cbbfc50c | ||
|
|
4f8e98f5d5 | ||
|
|
a028297da6 | ||
|
|
dd713a26db | ||
|
|
fad293fbbf | ||
|
|
5a1b94f45b | ||
|
|
e9e614aa52 | ||
|
|
344c68bf08 | ||
|
|
f06e59b362 | ||
|
|
8ca5849b14 | ||
|
|
ac44b36b59 | ||
|
|
01e6a1061c | ||
|
|
b2538075ee | ||
|
|
5c463c0866 | ||
|
|
423bbd95a6 | ||
|
|
7eb888d2e3 | ||
|
|
26f67b6798 | ||
|
|
e6eed4be4e | ||
|
|
386cc779bf | ||
|
|
4d9ff395e9 | ||
|
|
08c6d58a50 | ||
|
|
3f53c5feba | ||
|
|
114a50ad4e | ||
|
|
298dbbf400 | ||
|
|
2c057aad58 | ||
|
|
50af6694d0 | ||
|
|
218f434e01 | ||
|
|
8a53c438e3 | ||
|
|
3fe15a302c | ||
|
|
dec83bbd21 | ||
|
|
2354746d4f | ||
|
|
d421b1ccb8 | ||
|
|
5dbddb4beb | ||
|
|
b20613f5d7 | ||
|
|
00e019d6fe | ||
|
|
c2ce831bca | ||
|
|
21c1f13b28 | ||
|
|
e0079bb812 | ||
|
|
966d1d10f6 | ||
|
|
76936ad74f | ||
|
|
5b0c115b10 | ||
|
|
6fbb09eb6e | ||
|
|
d37fac0ff7 | ||
|
|
91d656ff60 | ||
|
|
cfe1307018 | ||
|
|
5139c3e44e | ||
|
|
627a52e3d1 | ||
|
|
1951cd6fa8 | ||
|
|
e3093bdf3f | ||
|
|
b11d8d056a | ||
|
|
3a4015eced | ||
|
|
aeb5d40840 | ||
|
|
49c712a5b6 | ||
|
|
46817b846a | ||
|
|
8c75608eaf | ||
|
|
2720ed9ffb | ||
|
|
8487694b37 | ||
|
|
2fc392c084 | ||
|
|
ca630e94ae | ||
|
|
9cff50fa3b | ||
|
|
3d7a6b1ad3 | ||
|
|
f15fd40636 | ||
|
|
054cf2f258 | ||
|
|
dc067a619b | ||
|
|
2a762fa4ab | ||
|
|
ccade6ae0e | ||
|
|
6971aed030 | ||
|
|
60e556b2a8 | ||
|
|
42fbbc5257 | ||
|
|
d01dedb79c | ||
|
|
1972b461e7 | ||
|
|
e957926a4d | ||
|
|
bac2c13da3 | ||
|
|
b90c26412a | ||
|
|
65c7ad2aac | ||
|
|
126a2d3b7b | ||
|
|
60734f708e | ||
|
|
0621564be7 | ||
|
|
9e6c15a10d | ||
|
|
f1714db09e | ||
|
|
aba4bc2909 | ||
|
|
14a8e2f001 | ||
|
|
7603f8f12b | ||
|
|
059b13938e | ||
|
|
a4f2502fe6 | ||
|
|
7c1762d467 | ||
|
|
70b025da30 | ||
|
|
87dd858358 | ||
|
|
9fd73ca34d | ||
|
|
51f3edcd72 | ||
|
|
e7f626bd72 | ||
|
|
17f94aabdf | ||
|
|
96745525f1 | ||
|
|
c49e32c4ac | ||
|
|
8d6e04ea77 | ||
|
|
d9e5acb52c | ||
|
|
6ec32b0ca3 | ||
|
|
4778bb82c3 | ||
|
|
36beb927f1 | ||
|
|
ee41b2b68d | ||
|
|
e20ff52f5b | ||
|
|
df05af98d2 | ||
|
|
df124db84a | ||
|
|
29a4b4aadc | ||
|
|
2682ea75ab | ||
|
|
b3a63a60e9 | ||
|
|
a54dfaf0c7 | ||
|
|
0764a597af | ||
|
|
595538d6bb | ||
|
|
8c36fe585a | ||
|
|
a5329e5bba | ||
|
|
37a79c4589 | ||
|
|
5ef1dccfc9 | ||
|
|
d4b81da437 | ||
|
|
b91efb6189 | ||
|
|
dd760f8210 | ||
|
|
6d28b8986d | ||
|
|
40757322e7 | ||
|
|
dd87e893ba | ||
|
|
b43f1ec920 | ||
|
|
6cd4aebe8d | ||
|
|
2b527bccd2 | ||
|
|
41271711ec | ||
|
|
6287b6aef8 | ||
|
|
3e9d960781 | ||
|
|
c3d20bb181 | ||
|
|
5ce0232890 | ||
|
|
cf4ec12c00 | ||
|
|
c0b685c77b | ||
|
|
d35eca919f | ||
|
|
61d133b2fd | ||
|
|
a4b1104abf | ||
|
|
7cd438d188 | ||
|
|
a733d9a861 | ||
|
|
33252de895 | ||
|
|
4b767d4a57 | ||
|
|
fb388346bf | ||
|
|
127ce312ea | ||
|
|
5d461a72f6 | ||
|
|
32a2e7708f | ||
|
|
2237e9f1b7 | ||
|
|
9b4fa132dc | ||
|
|
daf332a102 | ||
|
|
5a6d20f817 | ||
|
|
6b816def31 | ||
|
|
5fbcf588ed | ||
|
|
c40fdb2c4f | ||
|
|
942b4512fe | ||
|
|
47b5eecb9b | ||
|
|
3778b27574 | ||
|
|
15b340db56 | ||
|
|
b7fd7e4298 | ||
|
|
1af334989e | ||
|
|
4f541495ad | ||
|
|
35d83942c0 | ||
|
|
fc4e79c1f5 | ||
|
|
41b2a6d1d4 | ||
|
|
1810bd40bd | ||
|
|
5347cb1d63 | ||
|
|
ce5da22180 | ||
|
|
77731ed559 | ||
|
|
0283c6ca43 | ||
|
|
05b2c3c42b | ||
|
|
e054f1222b | ||
|
|
8abb38123a | ||
|
|
d1928d4151 | ||
|
|
bcd8f11f35 | ||
|
|
5949527ee2 | ||
|
|
56a6aa993e | ||
|
|
ea19ba099e | ||
|
|
db75cd2f62 | ||
|
|
c57eb1b8de | ||
|
|
28f4a38752 | ||
|
|
8495c74a7d | ||
|
|
2dd732b924 | ||
|
|
43a37021a5 | ||
|
|
abeb411742 | ||
|
|
aa2334afe7 | ||
|
|
667a00d64b | ||
|
|
4deed45f29 | ||
|
|
1ae072390e | ||
|
|
9eb2cb847d | ||
|
|
26fca87c75 | ||
|
|
f3986688f2 | ||
|
|
859cb39a9d | ||
|
|
4e2c3f7741 | ||
|
|
f1dbc6ab7d | ||
|
|
c127c0900e | ||
|
|
325c84e6fe | ||
|
|
379880aef8 | ||
|
|
16186bbee8 | ||
|
|
d1015956d1 | ||
|
|
726fce9fac | ||
|
|
ee0fa9f7d4 | ||
|
|
7680a5c773 | ||
|
|
1e827fffee | ||
|
|
0468b2b523 | ||
|
|
d6108d816e | ||
|
|
f274b74ab1 | ||
|
|
fc01fa045e | ||
|
|
029c51c2b2 | ||
|
|
356a5fb51b | ||
|
|
00fae2fa15 | ||
|
|
3578e01838 | ||
|
|
6c8eb9ac38 | ||
|
|
5558f6fc17 | ||
|
|
2681a85fa5 | ||
|
|
9a0716af44 | ||
|
|
4b1a9fe892 | ||
|
|
dc642cfbe7 | ||
|
|
b98e831300 | ||
|
|
118dcbd252 | ||
|
|
d279f955a0 | ||
|
|
1e8ec83965 | ||
|
|
0d73824727 | ||
|
|
f2d49e02a7 | ||
|
|
f068b56083 | ||
|
|
fa7a125727 | ||
|
|
4724008c2d | ||
|
|
34cd5d1a80 | ||
|
|
6f28696556 | ||
|
|
328affa35c | ||
|
|
4b875bf019 | ||
|
|
90c845899f | ||
|
|
a6daa7bf0c | ||
|
|
f0597e99e5 | ||
|
|
f860fd3dc7 | ||
|
|
ee7254a964 | ||
|
|
5ffd22c1f7 | ||
|
|
110f73e622 | ||
|
|
006393704c | ||
|
|
d82c186643 | ||
|
|
2f51f18447 | ||
|
|
5b34a226bd | ||
|
|
1c69f3f654 | ||
|
|
d9d3b1a245 | ||
|
|
ce27964df9 | ||
|
|
556683574c | ||
|
|
9d789d9a97 | ||
|
|
3d061df1d7 | ||
|
|
bb0d118284 | ||
|
|
a9b343646e | ||
|
|
fd35d20955 | ||
|
|
34b00f8dd6 | ||
|
|
aec0e5227f | ||
|
|
701ccadff3 | ||
|
|
34555504df | ||
|
|
1a0a5c652b | ||
|
|
d1f5220925 | ||
|
|
decd514b22 | ||
|
|
e13a7069dc | ||
|
|
1cd332115b | ||
|
|
6cf7093293 | ||
|
|
0bf9d8fa8a | ||
|
|
464f04b254 | ||
|
|
2a63b99816 | ||
|
|
2aca2cd6ab | ||
|
|
ee619004bd | ||
|
|
17f11fa871 | ||
|
|
fc0fdc7909 | ||
|
|
3053289146 | ||
|
|
96812868a4 | ||
|
|
40c79158f7 | ||
|
|
f4f645b103 | ||
|
|
f6b13c0bdf | ||
|
|
e0082db7c9 | ||
|
|
936858948b | ||
|
|
18c949eed4 | ||
|
|
82f0f3f5e3 | ||
|
|
8b9601502a | ||
|
|
888bb1c7c0 | ||
|
|
372c932c47 | ||
|
|
37395b70f6 | ||
|
|
a65cb3b03c | ||
|
|
69749da331 | ||
|
|
054663ee00 | ||
|
|
0442a3da0a | ||
|
|
2492a4fc06 | ||
|
|
9ae9feb9ea | ||
|
|
a535fd85cd | ||
|
|
269860252e | ||
|
|
d0faba03a2 | ||
|
|
88a06194d4 | ||
|
|
8c22a652fa | ||
|
|
779641e8e7 | ||
|
|
81eee814e9 | ||
|
|
a70e25d0e8 | ||
|
|
e689531224 | ||
|
|
3ab1a002f0 | ||
|
|
b9eaac18b0 | ||
|
|
b26df9ac21 | ||
|
|
0539281adf | ||
|
|
e01d814ae9 | ||
|
|
99ea6ad333 | ||
|
|
683626921b | ||
|
|
390a3c0d5a | ||
|
|
e3b630550a | ||
|
|
8903fa878c | ||
|
|
5dcf8bb854 | ||
|
|
695dd655c0 | ||
|
|
afc4544304 | ||
|
|
0a2afadb0a | ||
|
|
27a91de5f6 | ||
|
|
7ccc26c878 | ||
|
|
9ebc847e8e | ||
|
|
a5188ce24a | ||
|
|
511b04c1f8 | ||
|
|
ec90d35e02 | ||
|
|
05838cc477 | ||
|
|
c34ffedb42 | ||
|
|
96e02c9911 | ||
|
|
248fceb4b5 | ||
|
|
b5382b1bdf | ||
|
|
519cbc7601 | ||
|
|
c56d323cd3 | ||
|
|
92697d9468 | ||
|
|
d1ec9c92eb | ||
|
|
ac4cdb44de | ||
|
|
39a96885d2 | ||
|
|
4f104523ff | ||
|
|
96dbec3218 | ||
|
|
4b29e7bf8d | ||
|
|
1ce362b66b | ||
|
|
02153e469f | ||
|
|
957da460a6 | ||
|
|
47d4b2e2d4 | ||
|
|
8f9f447acf | ||
|
|
2cee36d7b5 | ||
|
|
f40f554c6b | ||
|
|
b4668aa6bc | ||
|
|
454cf5ea64 | ||
|
|
1176c8d6e4 | ||
|
|
43497b186d | ||
|
|
e78482e947 | ||
|
|
4563533e67 | ||
|
|
ed69bd74ed | ||
|
|
f0641ddd6d | ||
|
|
640e719eda | ||
|
|
aece2b1d90 | ||
|
|
6c2a2e4665 | ||
|
|
96be1789b5 | ||
|
|
43925e3088 | ||
|
|
5e929df966 | ||
|
|
1c236cce02 | ||
|
|
38e8f91fdf | ||
|
|
4956a517ca | ||
|
|
cb13655ecd | ||
|
|
9b3b6cec8f | ||
|
|
3ca1a1f1c7 | ||
|
|
a7210208d6 | ||
|
|
eaad23ff69 | ||
|
|
c7ddf0a2a9 | ||
|
|
455e0533fe | ||
|
|
a8c4fc7607 | ||
|
|
3730be991a | ||
|
|
b129ef873b | ||
|
|
d927426d70 | ||
|
|
d9c7df736c | ||
|
|
a26bdfe385 | ||
|
|
9ced137ded | ||
|
|
73244df019 | ||
|
|
91d24ebae8 | ||
|
|
0b6dc34220 | ||
|
|
6861e26ed6 | ||
|
|
a89da50e0a | ||
|
|
9256046b6c | ||
|
|
fd95dd8023 | ||
|
|
cda2b84939 | ||
|
|
34242e12ea | ||
|
|
d893fe63e7 | ||
|
|
5aedf85982 | ||
|
|
55ab79c004 | ||
|
|
7c7a72600d | ||
|
|
bd67e41aa6 | ||
|
|
df63b8c1b7 | ||
|
|
01357654c0 | ||
|
|
cd5900481b | ||
|
|
601c6c53e7 | ||
|
|
b7ba740a3a | ||
|
|
ddef97d49f | ||
|
|
707d00b280 | ||
|
|
9c79d728e8 | ||
|
|
9c8a1f564e | ||
|
|
47b0449f22 | ||
|
|
c78eef8af5 | ||
|
|
6a7de7417b | ||
|
|
c12678ca5a | ||
|
|
84bfea0be9 | ||
|
|
0193460678 | ||
|
|
7755dc12d0 | ||
|
|
15a9379c6e | ||
|
|
e02b3e78d2 | ||
|
|
40512edef0 | ||
|
|
e9c039dad2 | ||
|
|
c7f2b145bf | ||
|
|
601c4367dc | ||
|
|
70c230edce | ||
|
|
d294d17e37 | ||
|
|
d88cc77a5c | ||
|
|
61600e78b6 | ||
|
|
ea0b69d4c2 | ||
|
|
0309c04ae0 | ||
|
|
3c3e920573 | ||
|
|
d389cf87b8 | ||
|
|
09864c5154 | ||
|
|
204ae1a469 | ||
|
|
d2f21ba4e6 | ||
|
|
842dabc1e7 | ||
|
|
67281c84ed | ||
|
|
3a6c8dfd2d | ||
|
|
450789ed72 | ||
|
|
a6167583a3 | ||
|
|
984d81edb6 | ||
|
|
e79bb607d9 | ||
|
|
c91e0a6b74 | ||
|
|
c6852a9514 | ||
|
|
04b5240615 | ||
|
|
890b50c830 | ||
|
|
483547cd9c | ||
|
|
345413cd1f | ||
|
|
f57dc6785b | ||
|
|
046a60b89c | ||
|
|
3664428467 | ||
|
|
da725e3ab1 | ||
|
|
edd34941cc | ||
|
|
c65686ef42 | ||
|
|
c7729f85df | ||
|
|
845c75b775 | ||
|
|
5326f961c6 | ||
|
|
97126553f0 | ||
|
|
53b187c9b6 | ||
|
|
7bc18e41b1 | ||
|
|
8bc17eded5 | ||
|
|
9adeb1c63a | ||
|
|
091ed0dacd | ||
|
|
4014083238 | ||
|
|
da03e11071 | ||
|
|
9067f0e00a | ||
|
|
4099d91a1b | ||
|
|
1bb10ddeb1 | ||
|
|
49e89f44be | ||
|
|
e5cf417ac0 | ||
|
|
ba6224bc78 | ||
|
|
ea85cce957 | ||
|
|
f69016883c | ||
|
|
1e68eb0b90 | ||
|
|
332efd4106 | ||
|
|
703872adc9 | ||
|
|
cf0a47cab7 | ||
|
|
bb7b24346a | ||
|
|
f303191c54 | ||
|
|
a68e2e798b | ||
|
|
bd49f3c420 | ||
|
|
3c1d67267d | ||
|
|
d6c7f16ceb | ||
|
|
61e1933a5b | ||
|
|
f1912fe739 | ||
|
|
25c443098c | ||
|
|
cf59bcff12 | ||
|
|
c10baca137 | ||
|
|
2f7fe05d21 | ||
|
|
ee4b61f549 | ||
|
|
e2d6e5d9c8 | ||
|
|
352c6e1d68 | ||
|
|
0e2444d7ce | ||
|
|
c4390819a2 | ||
|
|
51104268d8 | ||
|
|
cb5d43ab21 | ||
|
|
08de5cd377 | ||
|
|
274fa63658 | ||
|
|
81b2ed6551 | ||
|
|
d9c6c3947b | ||
|
|
2d6dbbdb16 | ||
|
|
b60faa1cab | ||
|
|
fd19953864 | ||
|
|
927bafd93a | ||
|
|
60e403a28b | ||
|
|
d93b21f0af | ||
|
|
511a4256bc | ||
|
|
3c9db86df2 | ||
|
|
367204a1ee | ||
|
|
6a8f6fa05a | ||
|
|
7f997c9411 | ||
|
|
2e3f98deb0 | ||
|
|
a5feb656e0 | ||
|
|
9329955328 | ||
|
|
5b99dd2685 | ||
|
|
19288fc8f5 | ||
|
|
9f97de5952 | ||
|
|
c476f7339c | ||
|
|
3dc1cf520a | ||
|
|
616c335a3b | ||
|
|
bbe55a75ea | ||
|
|
e58bf3a8cf | ||
|
|
1f2f866c61 | ||
|
|
6ccbc95697 | ||
|
|
52d9e0a195 | ||
|
|
6a3982347b | ||
|
|
4a8868a709 | ||
|
|
fe7feeb74e | ||
|
|
10399db372 | ||
|
|
179b50c798 | ||
|
|
ec1960e839 | ||
|
|
a942423e84 | ||
|
|
3ca49c5574 | ||
|
|
d1e35b1851 | ||
|
|
46a10bd92e | ||
|
|
b4d5e1c90a | ||
|
|
411b97fa14 | ||
|
|
56e8a34d68 | ||
|
|
8c69bc1682 | ||
|
|
2eef05e593 | ||
|
|
a56a804692 | ||
|
|
a8f47fad45 | ||
|
|
6f60d7c99e | ||
|
|
7d2da9e7f6 | ||
|
|
b2419beca6 | ||
|
|
b752b475d9 | ||
|
|
8925692dd4 | ||
|
|
658fe79ad7 | ||
|
|
5bbf05ac8a | ||
|
|
d4feee8914 | ||
|
|
bb476bb257 | ||
|
|
7b74c36952 | ||
|
|
31af28a7c4 | ||
|
|
f3527dc8ff | ||
|
|
92a08cebad | ||
|
|
1dba4be23f | ||
|
|
660f9076ce | ||
|
|
24682fb559 | ||
|
|
295e2aa3e5 | ||
|
|
0d0071e8bf | ||
|
|
9c0baeacf2 | ||
|
|
ffc99379ae | ||
|
|
35d8f0524d | ||
|
|
07e6146e50 | ||
|
|
5751441424 | ||
|
|
023fafde2c | ||
|
|
2d0285e31d | ||
|
|
9fd9c4e94d | ||
|
|
40baa7e08c | ||
|
|
b1452698f8 | ||
|
|
738c819272 | ||
|
|
d542cf7720 | ||
|
|
ed39127f31 | ||
|
|
6e9ee7cf81 |
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
$filterCmptArray = array(
|
||||||
|
"app" => 'core',
|
||||||
|
'datasetName' => 'vertragsverwaltung',
|
||||||
|
'query' => '
|
||||||
|
SELECT
|
||||||
|
uid,
|
||||||
|
person_id,
|
||||||
|
vorname,
|
||||||
|
nachname,
|
||||||
|
gebdatum,
|
||||||
|
vertragsarten,
|
||||||
|
unternehmen,
|
||||||
|
ids,
|
||||||
|
aktiv
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
b.uid , p.person_id,
|
||||||
|
p.vorname, p.nachname,
|
||||||
|
gebdatum,
|
||||||
|
STRING_AGG(DISTINCT va.bezeichnung, \', \') AS Vertragsarten,
|
||||||
|
STRING_AGG(DISTINCT u.bezeichnung, \', \') AS Unternehmen,
|
||||||
|
STRING_AGG(d.dienstverhaeltnis_id::TEXT, \', \') AS ids,
|
||||||
|
b.aktiv
|
||||||
|
FROM
|
||||||
|
hr.tbl_dienstverhaeltnis d
|
||||||
|
JOIN public.tbl_benutzer b ON d.mitarbeiter_uid = b.uid
|
||||||
|
JOIN public.tbl_person p ON p.person_id = b.person_id
|
||||||
|
JOIN public.tbl_organisationseinheit u ON d.oe_kurzbz = u.oe_kurzbz
|
||||||
|
JOIN hr.tbl_vertragsart va ON d.vertragsart_kurzbz = va.vertragsart_kurzbz
|
||||||
|
GROUP BY b.uid, p.person_id, p.vorname, p.nachname, b.aktiv
|
||||||
|
) as vertragsdaten
|
||||||
|
',
|
||||||
|
'requiredPermissions' => 'vertrag/mitarbeiter'
|
||||||
|
);
|
||||||
@@ -23,6 +23,15 @@ Events::on('loadRenderers', function ($renderers) {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Events::on('loadRenderers', function ($renderers) {
|
||||||
|
$fhc_core_renderers =& $renderers();
|
||||||
|
$fhc_core_renderers["slot_room"] = array(
|
||||||
|
'modalTitle' => APP_ROOT.'public/js/components/Cis/Renderer/Slot/roomModalTitle.js',
|
||||||
|
'modalContent' => APP_ROOT.'public/js/components/Cis/Renderer/Slot/roomModalContent.js',
|
||||||
|
'calendarEventStyles' => APP_ROOT.'public/css/Cis4/CoreCalendarEvents.css'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
Events::on('loadRenderers', function ($renderers) {
|
Events::on('loadRenderers', function ($renderers) {
|
||||||
$fhc_core_renderers =& $renderers();
|
$fhc_core_renderers =& $renderers();
|
||||||
$fhc_core_renderers["ferien"] = array(
|
$fhc_core_renderers["ferien"] = array(
|
||||||
|
|||||||
@@ -41,3 +41,5 @@ $config['STG_MOODLE_LINK'] = 'https://moodle.technikum-wien.at/course/view.php?i
|
|||||||
|
|
||||||
$config['ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT'] = true;
|
$config['ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT'] = true;
|
||||||
$config['ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER'] = true;
|
$config['ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER'] = true;
|
||||||
|
|
||||||
|
$config['BETREUER_SAMMELMAIL_BUTTON_STUDENT'] = true;
|
||||||
|
|||||||
@@ -163,6 +163,20 @@ $config['navigation_header'] = array(
|
|||||||
'expand' => true,
|
'expand' => true,
|
||||||
'sort' => 50,
|
'sort' => 50,
|
||||||
'requiredPermissions' => 'lehre/gruppenmanager:r'
|
'requiredPermissions' => 'lehre/gruppenmanager:r'
|
||||||
|
),
|
||||||
|
'vertragsverwaltung' => array(
|
||||||
|
'link' => site_url('vertragsverwaltung'),
|
||||||
|
'description' => 'Vertragsverwaltung',
|
||||||
|
'expand' => true,
|
||||||
|
'sort' => 51,
|
||||||
|
'requiredPermissions' => 'vertrag/mitarbeiter:r'
|
||||||
|
),
|
||||||
|
'studierendenverwaltung' => array(
|
||||||
|
'link' => site_url('studentenverwaltung'),
|
||||||
|
'description' => 'Studierendenverwaltung',
|
||||||
|
'expand' => true,
|
||||||
|
'sort' => 52,
|
||||||
|
'requiredPermissions' => ['admin:r', 'assistenz:r']
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
@@ -201,7 +215,14 @@ $config['navigation_header'] = array(
|
|||||||
'expand' => true,
|
'expand' => true,
|
||||||
'sort' => 30,
|
'sort' => 30,
|
||||||
'requiredPermissions' => 'lehre/anrechnungszeitfenster:rw'
|
'requiredPermissions' => 'lehre/anrechnungszeitfenster:rw'
|
||||||
)
|
),
|
||||||
|
'dashboardadmin' => array(
|
||||||
|
'link' => site_url('dashboard/Admin'),
|
||||||
|
'description' => 'Dashboard Admin',
|
||||||
|
'expand' => true,
|
||||||
|
'sort' => 40,
|
||||||
|
'requiredPermissions' => 'dashboard/admin:r'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -335,6 +356,18 @@ $config['navigation_menu']['system/issues/Issues/*'] = array(
|
|||||||
'target' => '_blank',
|
'target' => '_blank',
|
||||||
'requiredPermissions' => array('admin:rw')
|
'requiredPermissions' => array('admin:rw')
|
||||||
),
|
),
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
$config['navigation_menu']['vertragsverwaltung/*'] = array(
|
||||||
|
'vertragsverwaltung' => array(
|
||||||
|
'link' => site_url('vertragsverwaltung'),
|
||||||
|
'description' => 'Vertragsverwaltung',
|
||||||
|
'icon' => 'home',
|
||||||
|
'sort' => 100,
|
||||||
|
'target' => '_blank',
|
||||||
|
'requiredPermissions' => array('vertrag/mitarbeiter:r')
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$config['navigation_menu']['apps'] = [
|
$config['navigation_menu']['apps'] = [
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
// 'entschuldigt' & 'noch nicht eingetragen' -> wirken sich nicht auf Antritte aus
|
||||||
|
$config['NOTEN_OHNE_ANTRITT'] = [9, 17]; // tbl_note pk
|
||||||
|
|
||||||
|
$config['NOTEN_OCCURANCE_LIMIT_MAP'] = [17 => 1]; // across the 4 fixed antritte only one can be entschuldigt
|
||||||
|
|
||||||
|
// tbl_note pk of the 'entschuldigt' note. An entschuldigt Termin is preserved as its own dated
|
||||||
|
// entry when a new pruefung of the same type is created (instead of being overwritten).
|
||||||
|
$config['NOTE_ENTSCHULDIGT'] = 17;
|
||||||
|
|
||||||
|
// availability of the two Benotungstool import flows. When both are true they are shown as
|
||||||
|
// separate buttons/dialogs.
|
||||||
|
$config['CIS_GESAMTNOTE_PRUEFUNGSIMPORT'] = true; // dated import that creates a pruefung per row
|
||||||
|
$config['CIS_GESAMTNOTE_NOTENIMPORT'] = false; // classic note-only import (uid + note, no date)
|
||||||
@@ -64,6 +64,10 @@ $route['api/v1/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1';
|
|||||||
$route['Cis/LvPlan/.*'] = 'Cis/LvPlan/index/$1';
|
$route['Cis/LvPlan/.*'] = 'Cis/LvPlan/index/$1';
|
||||||
$route['Cis/MyLvPlan/.*'] = 'Cis/MyLvPlan/index/$1';
|
$route['Cis/MyLvPlan/.*'] = 'Cis/MyLvPlan/index/$1';
|
||||||
$route['Cis/MyLv/.*'] = 'Cis/MyLv/index/$1';
|
$route['Cis/MyLv/.*'] = 'Cis/MyLv/index/$1';
|
||||||
|
$route['Cis/OtherLvPlan/.*'] = 'Cis/OtherLvPlan/index/$1';
|
||||||
|
//Route for LV Plan Stg/Semester/Verband/Gruppe
|
||||||
|
$route['Cis/StgOrgLvPlan/.*'] = 'Cis/StgOrgLvPlan/index/$1';
|
||||||
|
$route['Cis/Benotungstool/.*'] = 'Cis/Benotungstool/index/$1';
|
||||||
|
|
||||||
$route['Abgabetool/Assistenz'] = 'Cis/Abgabetool/Assistenz';
|
$route['Abgabetool/Assistenz'] = 'Cis/Abgabetool/Assistenz';
|
||||||
$route['Abgabetool/Assistenz/(:any)'] = 'Cis/Abgabetool/Assistenz/$1';
|
$route['Abgabetool/Assistenz/(:any)'] = 'Cis/Abgabetool/Assistenz/$1';
|
||||||
|
|||||||
@@ -22,8 +22,9 @@ unset($config['student']['searchfields']['email']);
|
|||||||
unset($config['student']['searchfields']['tel']);
|
unset($config['student']['searchfields']['tel']);
|
||||||
$config['student']['resultfields'] = [
|
$config['student']['resultfields'] = [
|
||||||
"s.student_uid AS uid",
|
"s.student_uid AS uid",
|
||||||
"s.matrikelnr",
|
"s.matrikelnr AS personenkennzeichen",
|
||||||
"p.person_id",
|
"p.person_id",
|
||||||
|
"p.matr_nr AS matrikelnummer",
|
||||||
"(p.vorname || ' ' || p.nachname) AS name",
|
"(p.vorname || ' ' || p.nachname) AS name",
|
||||||
"ARRAY[s.student_uid || '@' || '" . DOMAIN . "'] AS email",
|
"ARRAY[s.student_uid || '@' || '" . DOMAIN . "'] AS email",
|
||||||
"CASE
|
"CASE
|
||||||
|
|||||||
@@ -168,3 +168,32 @@ $config['stgkz_blacklist_wiederholung'] = [];
|
|||||||
* @var array An array of noten ids
|
* @var array An array of noten ids
|
||||||
*/
|
*/
|
||||||
$config['note_blacklist_wiederholung'] = [];
|
$config['note_blacklist_wiederholung'] = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable/disable the Abmeldung StG process
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
$config['abmeldung_stg_enabled'] = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable/disable the Abmeldung process
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
$config['abmeldung_enabled'] = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable/disable the Unterbrecher process
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
$config['unterbrechung_enabled'] = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable/disable the Wiederholer process
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
$config['wiederholung_enabled'] = true;
|
||||||
|
|
||||||
|
|||||||
@@ -130,3 +130,24 @@ $config['students_tab_order'] = [
|
|||||||
'combinePeople',
|
'combinePeople',
|
||||||
'archive',
|
'archive',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
$config['stv_prestudent_tags'] = [
|
||||||
|
'prioone' => ['readonly' => false],
|
||||||
|
'priotwo' => ['readonly' => false],
|
||||||
|
'hinweis' => ['readonly' => false],
|
||||||
|
'hinweis_assistenz' => ['readonly' => false],
|
||||||
|
'hinweis_kf' => ['readonly' => false],
|
||||||
|
'hinweis_lehrende' => ['readonly' => false],
|
||||||
|
'hinweis_stg_kf' => ['readonly' => false],
|
||||||
|
'finished_stg' => ['readonly' => false],
|
||||||
|
'finished_kf' => ['readonly' => false],
|
||||||
|
'inwork_kf' => ['readonly' => false],
|
||||||
|
'dd_auto' => ['readonly' => true],
|
||||||
|
'wh_auto' => ['readonly' => true],
|
||||||
|
'prewh_auto' => ['readonly' => true],
|
||||||
|
'out_auto' => ['readonly' => true],
|
||||||
|
'zgv_auto' => ['readonly' => true],
|
||||||
|
'unterbrecher_auto' => ['readonly' => true],
|
||||||
|
'stbtr_erh_auto' => ['readonly' => true],
|
||||||
|
'jgv_auto' => ['readonly' => true],
|
||||||
|
];
|
||||||
|
|||||||
@@ -31,12 +31,8 @@ class Abgabetool extends Auth_Controller
|
|||||||
{
|
{
|
||||||
// TODO: routing from index based on berechtigung?
|
// TODO: routing from index based on berechtigung?
|
||||||
|
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if(defined('CIS4') && CIS4) {
|
if(defined('CIS4') && CIS4) {
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Abgabetool']);
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'Abgabetool']);
|
||||||
} else {
|
} else {
|
||||||
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'Abgabetool']);
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'Abgabetool']);
|
||||||
}
|
}
|
||||||
@@ -44,12 +40,8 @@ class Abgabetool extends Auth_Controller
|
|||||||
|
|
||||||
public function Student($student_uid_prop = '')
|
public function Student($student_uid_prop = '')
|
||||||
{
|
{
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if(defined('CIS4') && CIS4) {
|
if(defined('CIS4') && CIS4) {
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolStudent']);
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'AbgabetoolStudent']);
|
||||||
} else {
|
} else {
|
||||||
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolStudent', 'student_uid_prop' => $student_uid_prop]);
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolStudent', 'student_uid_prop' => $student_uid_prop]);
|
||||||
}
|
}
|
||||||
@@ -57,12 +49,8 @@ class Abgabetool extends Auth_Controller
|
|||||||
|
|
||||||
public function Mitarbeiter()
|
public function Mitarbeiter()
|
||||||
{
|
{
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if(defined('CIS4') && CIS4) {
|
if(defined('CIS4') && CIS4) {
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolMitarbeiter']);
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'AbgabetoolMitarbeiter']);
|
||||||
} else {
|
} else {
|
||||||
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolMitarbeiter']);
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolMitarbeiter']);
|
||||||
}
|
}
|
||||||
@@ -70,13 +58,8 @@ class Abgabetool extends Auth_Controller
|
|||||||
|
|
||||||
public function Assistenz($stg_kz_prop = '')
|
public function Assistenz($stg_kz_prop = '')
|
||||||
{
|
{
|
||||||
|
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if(defined('CIS4') && CIS4) {
|
if(defined('CIS4') && CIS4) {
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolAssistenz']);
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'AbgabetoolAssistenz']);
|
||||||
} else {
|
} else {
|
||||||
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolAssistenz', 'stg_kz_prop' => $stg_kz_prop]);
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolAssistenz', 'stg_kz_prop' => $stg_kz_prop]);
|
||||||
}
|
}
|
||||||
@@ -84,12 +67,8 @@ class Abgabetool extends Auth_Controller
|
|||||||
|
|
||||||
public function Deadlines()
|
public function Deadlines()
|
||||||
{
|
{
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if(defined('CIS4') && CIS4) {
|
if(defined('CIS4') && CIS4) {
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'DeadlinesOverview']);
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'DeadlinesOverview']);
|
||||||
} else {
|
} else {
|
||||||
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'DeadlinesOverview']);
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'DeadlinesOverview']);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class Auth extends FHC_Controller
|
|||||||
|
|
||||||
if ($this->form_validation->run())
|
if ($this->form_validation->run())
|
||||||
{
|
{
|
||||||
redirect($this->authlib->getLandingPage('/CisVue/Dashboard'));
|
redirect($this->authlib->getLandingPage('/Cis4'));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
+9
-15
@@ -5,18 +5,18 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class Dashboard extends Auth_Controller
|
class Benotungstool extends Auth_Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct(
|
parent::__construct([
|
||||||
array(
|
'index' => self::PERM_LOGGED
|
||||||
'index' => 'dashboard/benutzer:r'
|
]);
|
||||||
)
|
|
||||||
);
|
$this->_ci =& get_instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
@@ -27,17 +27,11 @@ class Dashboard extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
|
||||||
$this->load->model('person/Person_model','PersonModel');
|
|
||||||
$personData = getData($this->PersonModel->getByUid(getAuthUID()))[0];
|
|
||||||
|
|
||||||
$viewData = array(
|
$viewData = array(
|
||||||
'uid' => getAuthUID(),
|
'uid'=>getAuthUID(),
|
||||||
'name' => $personData->vorname,
|
|
||||||
'person_id' => $personData->person_id
|
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData]);
|
|
||||||
|
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Benotungstool']);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Compat extends Auth_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'ci' => ['basis/cis:r'],
|
||||||
|
'legacy' => ['basis/cis:r'],
|
||||||
|
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function ci()
|
||||||
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php',['route' => 'Compat']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function legacy()
|
||||||
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php',['route' => 'Compat']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -28,12 +28,6 @@ class LvPlan extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'LvPlan']);
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
'timezone' => $this->config->item('timezone')
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'LvPlan']);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,16 +26,6 @@ class MyLv extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'MyLv']);
|
||||||
$viewData = array(
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'MyLv']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function Info($studien_semester,$lvid)
|
|
||||||
{
|
|
||||||
$this->load->view('Cis/LvInfo',['lvid'=> $lvid, 'studien_semester' => $studien_semester]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,13 +27,7 @@ class MyLvPlan extends Auth_Controller
|
|||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'MyLvPlan']);
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
'timezone' => $this->config->item('timezone')
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'MyLvPlan']);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class OtherLvPlan extends Auth_Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'index' => ['basis/other_lv_plan:r']
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Load Config
|
||||||
|
$this->load->config('calendar');
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'OtherLvPlan']);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -55,15 +55,7 @@ class Profil extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'profilIndex']);
|
||||||
$this->load->library('ProfilLib');
|
|
||||||
$profil_data = $this->profillib->getView(getAuthUID());
|
|
||||||
$profil_data = hasData($profil_data) ? getData($profil_data) : null;
|
|
||||||
$viewData = array(
|
|
||||||
'editable'=>true,
|
|
||||||
'profil_data' => $profil_data,
|
|
||||||
);
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php',['viewData' => $viewData, 'route' => 'profilIndex']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -73,23 +65,13 @@ class Profil extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function View($uid)
|
public function View($uid)
|
||||||
{
|
{
|
||||||
$this->load->library('ProfilLib');
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'profilViewUid']);
|
||||||
$profil_data = $this->profillib->getView($uid);
|
|
||||||
$profil_data = hasData($profil_data) ? getData($profil_data) : null;
|
|
||||||
$viewData = array (
|
|
||||||
'uid' => $uid,
|
|
||||||
'profil_data'=>$profil_data,
|
|
||||||
);
|
|
||||||
if($uid == getAuthUID()){
|
|
||||||
$viewData['editable'] = true;
|
|
||||||
}
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php',['viewData' => $viewData, 'route' => 'profilViewUid']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* checks whether a specific userID is a mitarbeiter or not (foreword declaration of the function isMitarbeiter in Mitarbeiter_model.php)
|
* checks whether a specific userID is a student or not (foreword declaration of the function isStudent in Student_model.php)
|
||||||
* @access public
|
* @access public
|
||||||
* @param $uid the userID used to check if it is a mitarbeiter
|
* @param $uid the userID used to check if it is a student
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public function isStudent($uid)
|
public function isStudent($uid)
|
||||||
@@ -119,7 +101,7 @@ class Profil extends Auth_Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gets the adressen that are marked as zustell from the currenlty logged in user
|
* gets the adressen that are marked as zustell from the currently logged in user
|
||||||
* @access public
|
* @access public
|
||||||
* @return array a list of adresse_id's
|
* @return array a list of adresse_id's
|
||||||
*/
|
*/
|
||||||
@@ -262,23 +244,23 @@ class Profil extends Auth_Controller
|
|||||||
$this->GemeindeModel->addDistinct();
|
$this->GemeindeModel->addDistinct();
|
||||||
$this->GemeindeModel->addSelect(["name"]);
|
$this->GemeindeModel->addSelect(["name"]);
|
||||||
if ($nation == "A") {
|
if ($nation == "A") {
|
||||||
if (isset($zip) && $zip > 999 && $zip < 32000) {
|
if (isset($zip) && $zip > 999 && $zip < 32000) {
|
||||||
|
|
||||||
$gemeinde_res = $this->GemeindeModel->loadWhere(['plz' => $zip]);
|
$gemeinde_res = $this->GemeindeModel->loadWhere(['plz' => $zip]);
|
||||||
if (isError($gemeinde_res)) {
|
if (isError($gemeinde_res)) {
|
||||||
show_error("error while trying to query bis.tbl_gemeinde");
|
show_error("error while trying to query bis.tbl_gemeinde");
|
||||||
}
|
|
||||||
$gemeinde_res = hasData($gemeinde_res) ? getData($gemeinde_res) : null;
|
|
||||||
$gemeinde_res = array_map(function ($obj) {
|
|
||||||
return $obj->name;
|
|
||||||
}, $gemeinde_res);
|
|
||||||
echo json_encode($gemeinde_res);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
echo json_encode(error("ortschaftskennziffer code was not valid"));
|
|
||||||
}
|
}
|
||||||
|
$gemeinde_res = hasData($gemeinde_res) ? getData($gemeinde_res) : null;
|
||||||
|
$gemeinde_res = array_map(function ($obj) {
|
||||||
|
return $obj->name;
|
||||||
|
}, $gemeinde_res);
|
||||||
|
echo json_encode($gemeinde_res);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
echo json_encode(error("ortschaftskennziffer code was not valid"));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
echo json_encode(error("Nation was not 'A' (Austria)"));
|
echo json_encode(error("Nation was not 'A' (Austria)"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -750,6 +732,4 @@ class Profil extends Auth_Controller
|
|||||||
$zutrittskarte_ausgegebenam = str_replace("-", ".", $zutrittskarte_ausgegebenam);
|
$zutrittskarte_ausgegebenam = str_replace("-", ".", $zutrittskarte_ausgegebenam);
|
||||||
return $zutrittskarte_ausgegebenam;
|
return $zutrittskarte_ausgegebenam;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class ProjektabgabeUebersicht extends Auth_Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'index' => ['basis/cis:r']
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'ProjektabgabeUebersicht']);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,11 +25,6 @@ class Raumsuche extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'Raumsuche']);
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Raumsuche']);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class StgOrgLvPlan extends Auth_Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'index' => ['basis/cis:r']
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Load Config
|
||||||
|
$this->load->config('calendar');
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'StgOrgLvPlan']);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -29,10 +29,7 @@ class Studium extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$viewData = array(
|
$this->load->view('CisRouterView/CisRouterView.php',['route' => 'studium']);
|
||||||
|
|
||||||
);
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php',['viewData' => $viewData, 'route' => 'studium']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Zeitsperren extends Auth_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'index' => ['basis/cis:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* index loads the view Zeitsperren
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$viewData = array(
|
||||||
|
'uid'=>getAuthUID(),
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'zeitsperren']);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -13,9 +14,9 @@ class Cis4 extends Auth_Controller
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct(
|
parent::__construct(
|
||||||
array(
|
array(
|
||||||
'index' => 'basis/cis:r'
|
'index' => 'basis/cis:r'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Load Config
|
// Load Config
|
||||||
@@ -30,16 +31,6 @@ class Cis4 extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$this->load->model('person/Person_model', 'PersonModel');
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'FhcDashboard']);
|
||||||
$personData = getData($this->PersonModel->getByUid(getAuthUID()))[0];
|
|
||||||
|
|
||||||
$viewData = array(
|
|
||||||
'uid' => getAuthUID(),
|
|
||||||
'name' => $personData->vorname,
|
|
||||||
'person_id' => $personData->person_id,
|
|
||||||
'timezone' => $this->config->item('timezone')
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'FhcDashboard']);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class Studentenverwaltung extends Auth_Controller
|
|||||||
'basis/prestudentstatus' => $this->permissionlib->isBerechtigt('basis/prestudentstatus'),
|
'basis/prestudentstatus' => $this->permissionlib->isBerechtigt('basis/prestudentstatus'),
|
||||||
'assistenz_stgs' => $this->permissionlib->getSTG_isEntitledFor('assistenz'),
|
'assistenz_stgs' => $this->permissionlib->getSTG_isEntitledFor('assistenz'),
|
||||||
'admin' => $this->permissionlib->isBerechtigt('admin'),
|
'admin' => $this->permissionlib->isBerechtigt('admin'),
|
||||||
'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz','suid'),
|
'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz', 'suid'),
|
||||||
'student/keine_studstatuspruefung' => $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'),
|
'student/keine_studstatuspruefung' => $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'),
|
||||||
'lehre/reihungstestAufsicht' => $this->permissionlib->isBerechtigt('lehre/reihungstestAufsicht'),
|
'lehre/reihungstestAufsicht' => $this->permissionlib->isBerechtigt('lehre/reihungstestAufsicht'),
|
||||||
'system/change_outputformat' => $this->permissionlib->getOE_isEntitledFor('system/change_outputformat'),
|
'system/change_outputformat' => $this->permissionlib->getOE_isEntitledFor('system/change_outputformat'),
|
||||||
@@ -43,3 +43,5 @@ class Studentenverwaltung extends Auth_Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Vertragsverwaltung extends Auth_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$permissions = [];
|
||||||
|
$router = load_class('Router');
|
||||||
|
$permissions[$router->method] = ['vertrag/mitarbeiter:r'];
|
||||||
|
#$permissions[$router->method] = ['admin:rw'];
|
||||||
|
parent::__construct($permissions);
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function _remap()
|
||||||
|
{
|
||||||
|
$this->load->view('Vertragsverwaltung', [
|
||||||
|
'permissions' => [
|
||||||
|
'vertragsverwaltung_schreibrechte' => $this->permissionlib->isBerechtigt('vertrag/mitarbeiter', 'suid')
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -89,13 +89,15 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
$abgabetypenBetreuer = $this->config->item('ALLOWED_ABGABETYPEN_BETREUER');
|
$abgabetypenBetreuer = $this->config->item('ALLOWED_ABGABETYPEN_BETREUER');
|
||||||
$ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT = $this->config->item('ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT');
|
$ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT = $this->config->item('ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT');
|
||||||
$ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER = $this->config->item('ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER');
|
$ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER = $this->config->item('ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER');
|
||||||
|
$BETREUER_SAMMELMAIL_BUTTON_STUDENT = $this->config->item('BETREUER_SAMMELMAIL_BUTTON_STUDENT');
|
||||||
|
|
||||||
$ret = array(
|
$ret = array(
|
||||||
'old_abgabe_beurteilung_link' => $old_abgabe_beurteilung_link,
|
'old_abgabe_beurteilung_link' => $old_abgabe_beurteilung_link,
|
||||||
'turnitin_link' => $turnitin_link,
|
'turnitin_link' => $turnitin_link,
|
||||||
'abgabetypenBetreuer' => $abgabetypenBetreuer,
|
'abgabetypenBetreuer' => $abgabetypenBetreuer,
|
||||||
'ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT' => $ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT,
|
'ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT' => $ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT,
|
||||||
'ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER' => $ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER
|
'ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER' => $ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER,
|
||||||
|
'BETREUER_SAMMELMAIL_BUTTON_STUDENT' => $BETREUER_SAMMELMAIL_BUTTON_STUDENT,
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->terminateWithSuccess($ret);
|
$this->terminateWithSuccess($ret);
|
||||||
@@ -373,6 +375,8 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->checkPaabgabeDeadline($paabgabe_id);
|
||||||
|
|
||||||
$this->checkProjektarbeitForFinishedStatus($projektarbeit_id);
|
$this->checkProjektarbeitForFinishedStatus($projektarbeit_id);
|
||||||
|
|
||||||
$zugeordnet = $this->checkZuordnung($projektarbeit_id, getAuthUID());
|
$zugeordnet = $this->checkZuordnung($projektarbeit_id, getAuthUID());
|
||||||
@@ -444,6 +448,36 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validate paabgabe deadline against servertime just in case a student spoofs their local clock and thus
|
||||||
|
// unlocks the upload ui
|
||||||
|
private function checkPaabgabeDeadline($paabgabe_id) {
|
||||||
|
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
||||||
|
|
||||||
|
$result = $this->PaabgabeModel->load($paabgabe_id);
|
||||||
|
$paabgabeArr = $this->getDataOrTerminateWithError($result, 'general');
|
||||||
|
|
||||||
|
if (count($paabgabeArr) > 0) {
|
||||||
|
$paabgabe = $paabgabeArr[0];
|
||||||
|
} else {
|
||||||
|
$this->terminateWithError($this->p->t('abgabetool', 'c4projektabgabeNichtGefunden'), 'general');
|
||||||
|
}
|
||||||
|
|
||||||
|
// in that case any submission date is fine
|
||||||
|
if($paabgabe->fixtermin === false) return;
|
||||||
|
|
||||||
|
$tz = new DateTimeZone('Europe/Berlin');
|
||||||
|
$now = new DateTimeImmutable('now', $tz);
|
||||||
|
$deadline = DateTimeImmutable::createFromFormat(
|
||||||
|
'Y-m-d H:i:s',
|
||||||
|
$paabgabe->datum . ' 23:59:59',
|
||||||
|
$tz
|
||||||
|
);
|
||||||
|
|
||||||
|
if($now >= $deadline) {
|
||||||
|
$this->terminateWithError($this->p->t('abgabetool', 'c4deadlineExceeded'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* tabulator tabledata fetch for abgabetool/mitarbeiter
|
* tabulator tabledata fetch for abgabetool/mitarbeiter
|
||||||
@@ -473,6 +507,16 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
$projektarbeiten = $this->ProjektarbeitModel->getMitarbeiterProjektarbeiten(getAuthUID(), $showAllBool);
|
$projektarbeiten = $this->ProjektarbeitModel->getMitarbeiterProjektarbeiten(getAuthUID(), $showAllBool);
|
||||||
|
|
||||||
|
|
||||||
|
$mapFunc = function($projektarbeit) {
|
||||||
|
return $projektarbeit->projektarbeit_id;
|
||||||
|
};
|
||||||
|
$projektarbeiten_ids = array_map($mapFunc, $projektarbeiten->retval);
|
||||||
|
|
||||||
|
if(count($projektarbeiten_ids) > 0) {
|
||||||
|
$ret = $this->ProjektarbeitModel->getProjektarbeitenAbgabetermine($projektarbeiten_ids);
|
||||||
|
$projektabgaben = $this->getDataOrTerminateWithError($ret, 'general');
|
||||||
|
}
|
||||||
|
|
||||||
forEach($projektarbeiten->retval as $pa) {
|
forEach($projektarbeiten->retval as $pa) {
|
||||||
|
|
||||||
$result = $this->ProjektarbeitModel->getProjektbetreuerAnrede($pa->betreuer_person_id);
|
$result = $this->ProjektarbeitModel->getProjektbetreuerAnrede($pa->betreuer_person_id);
|
||||||
@@ -489,6 +533,20 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
Events::trigger('projektbeurteilung_formular_link', $pa->betreuerart_kurzbz, APP_ROOT, $pa->projektarbeit_id, $pa->student_uid, $returnFunc);
|
Events::trigger('projektbeurteilung_formular_link', $pa->betreuerart_kurzbz, APP_ROOT, $pa->projektarbeit_id, $pa->student_uid, $returnFunc);
|
||||||
$pa->beurteilungLinkNew = $newLink;
|
$pa->beurteilungLinkNew = $newLink;
|
||||||
$pa->beurteilungLinkOld = $oldLink;
|
$pa->beurteilungLinkOld = $oldLink;
|
||||||
|
|
||||||
|
// has previously been retrieved via getStudentProjektabgaben but is fetched in advance to avoid having to reload abgaben
|
||||||
|
$projektarbeitIsCurrent = false;
|
||||||
|
$returnFunc = function ($result) use (&$projektarbeitIsCurrent) {
|
||||||
|
$projektarbeitIsCurrent = $result;
|
||||||
|
};
|
||||||
|
Events::trigger('projektarbeit_is_current', $pa->projektarbeit_id, $returnFunc);
|
||||||
|
$pa->isCurrent = $projektarbeitIsCurrent;
|
||||||
|
|
||||||
|
$filterFunc = function($projektabgabe) use ($pa) {
|
||||||
|
return $projektabgabe->projektarbeit_id == $pa->projektarbeit_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
$pa->abgabetermine = array_values(array_filter($projektabgaben, $filterFunc));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -544,7 +602,18 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
'insertamum' => date('Y-m-d H:i:s')
|
'insertamum' => date('Y-m-d H:i:s')
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$this->logLib->logInfoDB(array('paabgabe created',$result, getAuthUID(), getAuthPersonId()));
|
$this->logLib->logInfoDB(array('paabgabe created',array(
|
||||||
|
'projektarbeit_id' => $projektarbeit_id,
|
||||||
|
'paabgabetyp_kurzbz' => $paabgabetyp_kurzbz,
|
||||||
|
'fixtermin' => $fixtermin,
|
||||||
|
'datum' => $datum,
|
||||||
|
'kurzbz' => $kurzbz,
|
||||||
|
'note' => $note,
|
||||||
|
'beurteilungsnotiz' => $beurteilungsnotiz,
|
||||||
|
'upload_allowed' => $upload_allowed,
|
||||||
|
'insertvon' => getAuthUID(),
|
||||||
|
'insertamum' => date('Y-m-d H:i:s')
|
||||||
|
), getAuthUID(), getAuthPersonId()));
|
||||||
} else {
|
} else {
|
||||||
// load existing entry of paabgabe and check if note has changed to negativ, to avoid sending when
|
// load existing entry of paabgabe and check if note has changed to negativ, to avoid sending when
|
||||||
// only notiz has changed.
|
// only notiz has changed.
|
||||||
@@ -718,7 +787,16 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
$abgaben[]= getData($this->PaabgabeModel->load($dataAbgabe))[0];
|
$abgaben[]= getData($this->PaabgabeModel->load($dataAbgabe))[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->logLib->logInfoDB(array('serientermin angelegt',$res, getAuthUID(), getAuthPersonId()));
|
$this->logLib->logInfoDB(array('serientermin angelegt',array(
|
||||||
|
'projektarbeit_id' => $projektarbeit_id,
|
||||||
|
'paabgabetyp_kurzbz' => $paabgabetyp_kurzbz,
|
||||||
|
'fixtermin' => $fixtermin,
|
||||||
|
'datum' => $datum,
|
||||||
|
'kurzbz' => $kurzbz,
|
||||||
|
'upload_allowed' => $upload_allowed,
|
||||||
|
'insertvon' => getAuthUID(),
|
||||||
|
'insertamum' => date('Y-m-d H:i:s')
|
||||||
|
), getAuthUID(), getAuthPersonId()));
|
||||||
|
|
||||||
$this->terminateWithSuccess($abgaben);
|
$this->terminateWithSuccess($abgaben);
|
||||||
}
|
}
|
||||||
@@ -769,9 +847,10 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
private function getProjektbetreuerEmailByProjektarbeitID($projektarbeit_id) {
|
private function getProjektbetreuerEmailByProjektarbeitID($projektarbeit_id) {
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
||||||
$result = $this->ProjektarbeitModel->getProjektbetreuerEmail($projektarbeit_id);
|
$result = $this->ProjektarbeitModel->getProjektbetreuerEmail($projektarbeit_id);
|
||||||
$email = $this->getDataOrTerminateWithError($result, 'general');
|
if(count($result->retval) > 0) {
|
||||||
|
$email = getData($result);
|
||||||
return $email[0]->uid ? $email[0]->uid.'@'.DOMAIN : $email[0]->private_email;
|
return $email[0]->uid ? $email[0]->uid.'@'.DOMAIN : $email[0]->private_email;
|
||||||
|
} else return '';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1167,7 +1246,7 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
|
|
||||||
$email = $this->getProjektbetreuerEmailByProjektarbeitID($projektarbeit_id);
|
$email = $this->getProjektbetreuerEmailByProjektarbeitID($projektarbeit_id);
|
||||||
|
|
||||||
if(!$email) $this->terminateWithError($this->p->t('abgabetool', 'c4fehlerMailBegutachter'), 'general');
|
if(!$email) $this->terminateWithError($this->p->t('abgabetool', 'c4fehlerMailBegutachterv2'), 'general');
|
||||||
|
|
||||||
$mailres = sendSanchoMail(
|
$mailres = sendSanchoMail(
|
||||||
'ParbeitsbeurteilungEndupload',
|
'ParbeitsbeurteilungEndupload',
|
||||||
@@ -1180,7 +1259,7 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
|
|
||||||
if(!$mailres)
|
if(!$mailres)
|
||||||
{
|
{
|
||||||
$this->terminateWithError($this->p->t('abgabetool', 'c4fehlerMailBegutachter'), 'general');
|
$this->terminateWithError($this->p->t('abgabetool', 'c4fehlerMailBegutachterv2'), 'general');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Begutachter mail, wenn Endabgabe, mit Token wenn extern
|
// 2. Begutachter mail, wenn Endabgabe, mit Token wenn extern
|
||||||
@@ -1200,14 +1279,14 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
|
|
||||||
if (!$tokenGenRes)
|
if (!$tokenGenRes)
|
||||||
{
|
{
|
||||||
$this->terminateWithError($this->p->t('abgabetool', 'c4fehlerMailZweitBegutachter'), 'general');
|
$this->terminateWithError($this->p->t('abgabetool', 'c4fehlerMailZweitBegutachterv2'), 'general');
|
||||||
}
|
}
|
||||||
|
|
||||||
$begutachterMitTokenRetval = getData($this->ProjektbetreuerModel->getZweitbegutachterWithToken($bperson_id, $projektarbeit_id, $studentUser->uid, $begutachter->person_id));
|
$begutachterMitTokenRetval = getData($this->ProjektbetreuerModel->getZweitbegutachterWithToken($bperson_id, $projektarbeit_id, $studentUser->uid, $begutachter->person_id));
|
||||||
|
|
||||||
if (!$begutachterMitTokenRetval && count($begutachterMitTokenRetval) <= 0)
|
if (!$begutachterMitTokenRetval && count($begutachterMitTokenRetval) <= 0)
|
||||||
{
|
{
|
||||||
$this->terminateWithError($this->p->t('abgabetool', 'c4fehlerMailZweitBegutachter'), 'general');
|
$this->terminateWithError($this->p->t('abgabetool', 'c4fehlerMailZweitBegutachterv2'), 'general');
|
||||||
}
|
}
|
||||||
|
|
||||||
$begutachterMitToken = $begutachterMitTokenRetval[0];
|
$begutachterMitToken = $begutachterMitTokenRetval[0];
|
||||||
@@ -1241,7 +1320,7 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
|
|
||||||
if (!$mailres)
|
if (!$mailres)
|
||||||
{
|
{
|
||||||
$this->terminateWithError($this->p->t('abgabetool', 'c4fehlerMailBegutachter'), 'general');
|
$this->terminateWithError($this->p->t('abgabetool', 'c4fehlerMailBegutachterv2'), 'general');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
class Bookmark extends FHCAPI_Controller
|
class Bookmark extends FHCAPI_Controller
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -28,111 +30,162 @@ class Bookmark extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'getBookmarks' => self::PERM_LOGGED,
|
'getBookmarks' => self::PERM_LOGGED,
|
||||||
'delete' => self::PERM_LOGGED,
|
'delete' => self::PERM_LOGGED,
|
||||||
'insert' => self::PERM_LOGGED,
|
'insert' => self::PERM_LOGGED,
|
||||||
'update' => self::PERM_LOGGED,
|
'update' => self::PERM_LOGGED,
|
||||||
]);
|
'changeOrder' => self::PERM_LOGGED
|
||||||
|
]);
|
||||||
|
|
||||||
$this->load->model('dashboard/Bookmark_model', 'BookmarkModel');
|
$this->load->model('dashboard/Bookmark_model', 'BookmarkModel');
|
||||||
|
|
||||||
$this->uid = getAuthUID();
|
$this->uid = getAuthUID();
|
||||||
$this->pid = getAuthPersonID();
|
$this->pid = getAuthPersonID();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// Public methods
|
// Public methods
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gets the bookmarks associated to a user
|
* gets the bookmarks associated to a user
|
||||||
* @access public
|
* @access public
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function getBookmarks()
|
public function getBookmarks()
|
||||||
{
|
{
|
||||||
$this->BookmarkModel->addOrder("bookmark_id");
|
$this->BookmarkModel->addOrder("sort");
|
||||||
$bookmarks = $this->BookmarkModel->loadWhere(["uid"=>$this->uid]);
|
$bookmarks = $this->BookmarkModel->loadWhere(["uid"=>$this->uid]);
|
||||||
|
|
||||||
$bookmarks = $this->getDataOrTerminateWithError($bookmarks);
|
$bookmarks = $this->getDataOrTerminateWithError($bookmarks);
|
||||||
|
|
||||||
$this->terminateWithSuccess($bookmarks);
|
$this->terminateWithSuccess($bookmarks);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* deletes bookmark from associated user
|
|
||||||
* @access public
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function delete($bookmark_id)
|
|
||||||
{
|
|
||||||
$bookmark = $this->BookmarkModel->load($bookmark_id);
|
|
||||||
|
|
||||||
$bookmark = current($this->getDataOrTerminateWithError($bookmark));
|
|
||||||
|
|
||||||
// only delete bookmark if the user is the owner of the bookmark
|
|
||||||
if($bookmark->uid == $this->uid || $this->permissionlib->isBerechtigt('admin')){
|
|
||||||
|
|
||||||
$delete_result = $this->BookmarkModel->delete($bookmark_id);
|
|
||||||
|
|
||||||
$delete_result = $this->getDataOrTerminateWithError($delete_result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($delete_result);
|
|
||||||
}else{
|
|
||||||
$this->_outputAuthError(['delete' => ['admin:rw']]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* inserts new bookmark into the bookmark table
|
|
||||||
* @access public
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function insert()
|
|
||||||
{
|
|
||||||
// form validation
|
|
||||||
$this->load->library('form_validation');
|
|
||||||
$this->form_validation->set_rules('url', 'URL', 'required|valid_url|max_length[511]');
|
|
||||||
$this->form_validation->set_rules('title', 'Title', 'required|max_length[255]');
|
|
||||||
if($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array());
|
|
||||||
|
|
||||||
$url = $this->input->post('url',true);
|
|
||||||
$title = $this->input->post('title',true);
|
|
||||||
$tag = $this->input->post('tag', true);
|
|
||||||
|
|
||||||
$insert_into_result = $this->BookmarkModel->insert(['uid'=>$this->uid, 'url'=>$url, 'title'=>$title,'tag'=>$tag, 'insertvon'=>$this->uid, 'updateamum'=>NULL, 'updatevon'=>NULL]);
|
|
||||||
|
|
||||||
$insert_into_result = $this->getDataOrTerminateWithError($insert_into_result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($insert_into_result);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* updates bookmark in the bookmark table
|
* deletes bookmark from associated user
|
||||||
* @access public
|
* @access public
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function update($bookmark_id)
|
public function delete($bookmark_id)
|
||||||
{
|
{
|
||||||
// form validation
|
$bookmark = $this->BookmarkModel->load($bookmark_id);
|
||||||
$this->load->library('form_validation');
|
|
||||||
$this->form_validation->set_rules('url', 'URL', 'required|valid_url|max_length[511]');
|
|
||||||
$this->form_validation->set_rules('title', 'Title', 'required|max_length[255]');
|
|
||||||
if($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array());
|
|
||||||
|
|
||||||
$url = $this->input->post('url',true);
|
$bookmark = current($this->getDataOrTerminateWithError($bookmark));
|
||||||
$title = $this->input->post('title',true);
|
|
||||||
|
// only delete bookmark if the user is the owner of the bookmark
|
||||||
|
if ($bookmark->uid == $this->uid || $this->permissionlib->isBerechtigt('admin')) {
|
||||||
|
$delete_result = $this->BookmarkModel->delete($bookmark_id);
|
||||||
|
|
||||||
|
$delete_result = $this->getDataOrTerminateWithError($delete_result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($delete_result);
|
||||||
|
} else {
|
||||||
|
$this->_outputAuthError(['delete' => ['admin:rw']]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* inserts new bookmark into the bookmark table
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function insert()
|
||||||
|
{
|
||||||
|
// form validation
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
$this->form_validation->set_rules('url', 'URL', 'required|valid_url|max_length[511]');
|
||||||
|
$this->form_validation->set_rules('title', 'Title', 'required|max_length[255]');
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$url = $this->input->post('url', true);
|
||||||
|
$title = $this->input->post('title', true);
|
||||||
|
$tag = $this->input->post('tag', true);
|
||||||
|
if (is_array($tag)) {
|
||||||
|
$tag = json_encode($tag); // convert PHP array to JSON string
|
||||||
|
}
|
||||||
|
$sort = $this->input->post('sort', true);
|
||||||
|
|
||||||
|
$insert_into_result = $this->BookmarkModel->insert([
|
||||||
|
'uid' => $this->uid,
|
||||||
|
'url' => $url,
|
||||||
|
'title' => $title,
|
||||||
|
'tag' => $tag,
|
||||||
|
'insertvon' => $this->uid,
|
||||||
|
'updateamum' => null,
|
||||||
|
'updatevon' => null,
|
||||||
|
'sort' => $sort
|
||||||
|
]);
|
||||||
|
|
||||||
|
$insert_into_result = $this->getDataOrTerminateWithError($insert_into_result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($insert_into_result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* updates bookmark in the bookmark table
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function update($bookmark_id)
|
||||||
|
{
|
||||||
|
// form validation
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
$this->form_validation->set_rules('url', 'URL', 'required|valid_url|max_length[511]');
|
||||||
|
$this->form_validation->set_rules('title', 'Title', 'required|max_length[255]');
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$url = $this->input->post('url', true);
|
||||||
|
$title = $this->input->post('title', true);
|
||||||
|
$tag = $this->input->post('tag', true);
|
||||||
|
if (is_array($tag)) {
|
||||||
|
$tag = json_encode($tag);
|
||||||
|
}
|
||||||
|
|
||||||
$now = new DateTime();
|
$now = new DateTime();
|
||||||
$now = $now->format('Y-m-d H:i:s');
|
$now = $now->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
$update_result = $this->BookmarkModel->update($bookmark_id,['url'=>$url, 'title'=>$title,'updateamum'=>$now]);
|
$update_result = $this->BookmarkModel->update($bookmark_id, [
|
||||||
|
'url' => $url,
|
||||||
|
'title' => $title,
|
||||||
|
'tag' => $tag,
|
||||||
|
'updateamum' => $now
|
||||||
|
]);
|
||||||
|
|
||||||
$update_result = $this->getDataOrTerminateWithError($update_result);
|
$update_result = $this->getDataOrTerminateWithError($update_result);
|
||||||
|
|
||||||
$this->terminateWithSuccess($update_result);
|
$this->terminateWithSuccess($update_result);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
/**
|
||||||
|
* changes sort of two bookmarks in the bookmark table
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function changeOrder($bookmark_id1, $bookmark_id2)
|
||||||
|
{
|
||||||
|
$update_result = [];
|
||||||
|
|
||||||
|
$result1 = $this->BookmarkModel->load($bookmark_id1);
|
||||||
|
$data1 = $this->getDataOrTerminateWithError($result1);
|
||||||
|
$sort1 = current($data1)->sort;
|
||||||
|
|
||||||
|
$result2 = $this->BookmarkModel->load(["bookmark_id"=>$bookmark_id2]);
|
||||||
|
$data2 = $this->getDataOrTerminateWithError($result2);
|
||||||
|
$sort2 = current($data2)->sort;
|
||||||
|
|
||||||
|
$update_result1 = $this->BookmarkModel->update($bookmark_id1, [
|
||||||
|
'sort' => $sort2
|
||||||
|
]);
|
||||||
|
$update_result[] = $this->getDataOrTerminateWithError($update_result1);
|
||||||
|
|
||||||
|
$update_result2 = $this->BookmarkModel->update($bookmark_id2, [
|
||||||
|
'sort' => $sort1
|
||||||
|
]);
|
||||||
|
$update_result[] = $this->getDataOrTerminateWithError($update_result2);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($update_result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class Cis4FhcApi extends FHCAPI_Controller
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'getViewData' => self::PERM_LOGGED,
|
'dashboardViewData' => self::PERM_LOGGED,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -36,17 +36,22 @@ class Cis4FhcApi extends FHCAPI_Controller
|
|||||||
// Public methods
|
// Public methods
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fetches ViewData
|
* retrieves view data for dashboard view
|
||||||
*/
|
* @access public
|
||||||
public function getViewData()
|
* @param $uid the userID for which profile is being viewed, null or missing value implies one's own profile
|
||||||
|
*/
|
||||||
|
public function dashboardViewData()
|
||||||
{
|
{
|
||||||
$this->load->model('person/Person_model','PersonModel');
|
$this->load->model('person/Person_model','PersonModel');
|
||||||
$personData = getData($this->PersonModel->getByUid(getAuthUID()))[0];
|
$personData = getData($this->PersonModel->getByUid(getAuthUID()))[0];
|
||||||
|
|
||||||
|
$this->load->config('calendar');
|
||||||
|
|
||||||
$viewData = array(
|
$viewData = array(
|
||||||
'uid' => getAuthUID(),
|
'uid' => getAuthUID(),
|
||||||
'name' => $personData->vorname,
|
'name' => $personData->vorname,
|
||||||
'person_id' => $personData->person_id
|
'person_id' => $personData->person_id,
|
||||||
|
'timezone' => $this->config->item('timezone'),
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->terminateWithSuccess($viewData);
|
$this->terminateWithSuccess($viewData);
|
||||||
|
|||||||
@@ -16,12 +16,13 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
|
||||||
class CisMenu extends FHCAPI_Controller
|
class CisMenu extends FHCAPI_Controller
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object initialization
|
* Object initialization
|
||||||
*/
|
*/
|
||||||
@@ -31,28 +32,95 @@ class CisMenu extends FHCAPI_Controller
|
|||||||
'getMenu' => self::PERM_LOGGED,
|
'getMenu' => self::PERM_LOGGED,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// Public methods
|
// Public methods
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fetches the menu for CIS from the database based on the userLanguage
|
* fetches the menu for CIS from the database based on the userLanguage
|
||||||
*/
|
*/
|
||||||
public function getMenu()
|
public function getMenu()
|
||||||
{
|
{
|
||||||
$this->load->model('content/Content_model', 'ContentModel');
|
$this->load->model('content/Content_model', 'ContentModel');
|
||||||
$this->load->config('cis');
|
$this->load->config('cis');
|
||||||
$cis4_content_id =$this->config->item('cis_menu_root_content_id');
|
$cis4_content_id = $this->config->item('cis_menu_root_content_id');
|
||||||
$result = $this->ContentModel->getMenu($cis4_content_id, getAuthUID(),getUserLanguage());
|
$result = $this->ContentModel->getMenu($cis4_content_id, getAuthUID(), getUserLanguage());
|
||||||
$result = $this->getDataOrTerminateWithError($result);
|
$result = $this->getDataOrTerminateWithError($result);
|
||||||
$menu = $result->childs ?? [];
|
$menu = $result->childs ?? [];
|
||||||
$this->terminateWithSuccess($menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
$menu = $this->generateUrlsForMenuItems($menu);
|
||||||
|
$this->terminateWithSuccess($menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function generateUrlsForMenuItems($menuItems)
|
||||||
|
{
|
||||||
|
return array_map(
|
||||||
|
function ($menuItem) {
|
||||||
|
return $this->generateUrlForMenuItem($menuItem);
|
||||||
|
},
|
||||||
|
$menuItems
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function generateUrlForMenuItem($menuItem)
|
||||||
|
{
|
||||||
|
$menuItem->url = $this->menuItemUrlHelper($menuItem);
|
||||||
|
unset($menuItem->content);
|
||||||
|
|
||||||
|
if ($menuItem->childs && count($menuItem->childs)) {
|
||||||
|
$menuItem->childs = $this->generateUrlsForMenuItems($menuItem->childs);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $menuItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function menuItemUrlHelper($menuItem)
|
||||||
|
{
|
||||||
|
if ($menuItem->template_kurzbz !== 'redirect') {
|
||||||
|
return site_url("/CisVue/Cms/content/" . $menuItem->content_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$menuItem->content || !mb_strlen($menuItem->content)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$doc = new DOMDocument();
|
||||||
|
$doc->loadXML($menuItem->content);
|
||||||
|
$urlElem = $doc->getElementsByTagName('url')->item(0);
|
||||||
|
|
||||||
|
if (!$urlElem) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$url = $urlElem->textContent;
|
||||||
|
|
||||||
|
if (strpos($url, '../cms/news.php') !== false) {
|
||||||
|
$newsRegex = '/^\.\.\/cms\/news\.php/';
|
||||||
|
$url = preg_replace($newsRegex, site_url("/CisVue/Cms/news"), $url);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($url, '../cms/content.php?') !== false) {
|
||||||
|
$contentRegex = '/^\.\.\/cms\/content\.php\?content_id=([0-9]+)/';
|
||||||
|
$matches = [];
|
||||||
|
preg_match($contentRegex, $url, $matches);
|
||||||
|
$url = site_url('/CisVue/Cms/content/' . $matches[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($url, '../index.ci.php') !== false) {
|
||||||
|
$indexRegex = '/^\.\.\/index\.ci\.php/';
|
||||||
|
$url = preg_replace($indexRegex, site_url(), $url);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($url, '../') !== false) {
|
||||||
|
$relativeRegex = '/^\.\.\//';
|
||||||
|
$url = preg_replace($relativeRegex, base_url(), $url);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $url;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -208,7 +208,6 @@ class Documents extends FHCAPI_Controller
|
|||||||
$this->load->model('system/Vorlage_model', 'VorlageModel');
|
$this->load->model('system/Vorlage_model', 'VorlageModel');
|
||||||
|
|
||||||
$result = $this->VorlageModel->load($xsl);
|
$result = $this->VorlageModel->load($xsl);
|
||||||
$this->addMeta("ress", $result);
|
|
||||||
$vorlage = current($this->getDataOrTerminateWithError($result));
|
$vorlage = current($this->getDataOrTerminateWithError($result));
|
||||||
if (!$vorlage)
|
if (!$vorlage)
|
||||||
show_404();
|
show_404();
|
||||||
@@ -221,7 +220,7 @@ class Documents extends FHCAPI_Controller
|
|||||||
'gedruckt' => true,
|
'gedruckt' => true,
|
||||||
'insertamum' => date('c'),
|
'insertamum' => date('c'),
|
||||||
'insertvon' => getAuthUID(),
|
'insertvon' => getAuthUID(),
|
||||||
'uid' => $this->input->post_get('uid') ?: '',
|
'uid' => $this->input->post_get('uid') ?: null,
|
||||||
'archiv' => true,
|
'archiv' => true,
|
||||||
'signiert' => !!$sign_user,
|
'signiert' => !!$sign_user,
|
||||||
'stud_selfservice' => $vorlage->stud_selfservice
|
'stud_selfservice' => $vorlage->stud_selfservice
|
||||||
@@ -251,6 +250,9 @@ class Documents extends FHCAPI_Controller
|
|||||||
'studiensemester_kurzbz' => $ss,
|
'studiensemester_kurzbz' => $ss,
|
||||||
'student_uid' => $akteData['uid']
|
'student_uid' => $akteData['uid']
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
if (!hasData($result)) $this->terminateWithError($this->p->t("stv", "error_noLehrverbandAssigned"));
|
||||||
|
|
||||||
$res = current($this->getDataOrTerminateWithError($result));
|
$res = current($this->getDataOrTerminateWithError($result));
|
||||||
|
|
||||||
$studiengang_kz = $res->studiengang_kz;
|
$studiengang_kz = $res->studiengang_kz;
|
||||||
@@ -332,6 +334,7 @@ class Documents extends FHCAPI_Controller
|
|||||||
if ($prestudent_id) {
|
if ($prestudent_id) {
|
||||||
$this->load->model('crm/prestudent_model', 'PrestudentModel');
|
$this->load->model('crm/prestudent_model', 'PrestudentModel');
|
||||||
$this->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz', 'LEFT');
|
$this->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz', 'LEFT');
|
||||||
|
$this->PrestudentModel->addSelect('tbl_prestudent.*, UPPER(typ || kurzbz) AS kuerzel');
|
||||||
$result = $this->PrestudentModel->load($prestudent_id);
|
$result = $this->PrestudentModel->load($prestudent_id);
|
||||||
$prestudent = current($this->getDataOrTerminateWithError($result));
|
$prestudent = current($this->getDataOrTerminateWithError($result));
|
||||||
|
|
||||||
|
|||||||
@@ -18,18 +18,9 @@
|
|||||||
|
|
||||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
//require_once('../../../include/studiengang.class.php');
|
|
||||||
//require_once('../../../include/student.class.php');
|
|
||||||
//require_once('../../../include/datum.class.php');
|
|
||||||
//require_once('../../../include/mail.class.php');
|
|
||||||
//require_once('../../../include/benutzerberechtigung.class.php');
|
|
||||||
//require_once('../../../include/phrasen.class.php');
|
|
||||||
//require_once('../../../include/projektarbeit.class.php');
|
|
||||||
//require_once('../../../include/projektbetreuer.class.php');
|
|
||||||
|
|
||||||
class Lehre extends FHCAPI_Controller
|
class Lehre extends FHCAPI_Controller
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object initialization
|
* Object initialization
|
||||||
*/
|
*/
|
||||||
@@ -38,39 +29,58 @@ class Lehre extends FHCAPI_Controller
|
|||||||
parent::__construct([
|
parent::__construct([
|
||||||
'lvStudentenMail' => self::PERM_LOGGED,
|
'lvStudentenMail' => self::PERM_LOGGED,
|
||||||
'LV' => self::PERM_LOGGED,
|
'LV' => self::PERM_LOGGED,
|
||||||
'Pruefungen' => self::PERM_LOGGED
|
'Pruefungen' => self::PERM_LOGGED,
|
||||||
|
'semesterAverageGrade' => self::PERM_LOGGED,
|
||||||
|
'getZugewieseneLv' => self::PERM_LOGGED,
|
||||||
|
'getLeForLv' => self::PERM_LOGGED
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$this->load->library('PhrasesLib');
|
||||||
|
|
||||||
|
$this->loadPhrases(
|
||||||
|
array(
|
||||||
|
'global',
|
||||||
|
'ui',
|
||||||
|
'abgabetool'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->load->helper('hlp_sancho_helper');
|
||||||
|
|
||||||
|
require_once(FHCPATH . 'include/studiengang.class.php');
|
||||||
|
require_once(FHCPATH . 'include/student.class.php');
|
||||||
|
require_once(FHCPATH . 'include/projektarbeit.class.php');
|
||||||
|
require_once(FHCPATH . 'include/projektbetreuer.class.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// Public methods
|
// Public methods
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* constructs the emails of the groups from a lehrveranstaltung
|
* constructs the emails of the groups from a lehrveranstaltung
|
||||||
*/
|
*/
|
||||||
public function lvStudentenMail()
|
public function lvStudentenMail()
|
||||||
{
|
{
|
||||||
$lehreinheit_id = $this->input->get("lehreinheit_id",TRUE);
|
$lehreinheit_id = $this->input->get("lehreinheit_id",TRUE);
|
||||||
|
|
||||||
// return early if the required parameter is missing
|
|
||||||
if(!isset($lehreinheit_id))
|
|
||||||
{
|
|
||||||
$this->terminateWithError('Missing required parameter', self::ERROR_TYPE_GENERAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
// return early if the required parameter is missing
|
||||||
|
if(!isset($lehreinheit_id))
|
||||||
$studentenMails = $this->LehreinheitModel->getStudentenMail($lehreinheit_id);
|
{
|
||||||
|
$this->terminateWithError('Missing required parameter', self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
$studentenMails = $this->getDataOrTerminateWithError($studentenMails);
|
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||||
|
|
||||||
|
$studentenMails = $this->LehreinheitModel->getStudentenMail($lehreinheit_id);
|
||||||
|
|
||||||
|
$studentenMails = $this->getDataOrTerminateWithError($studentenMails);
|
||||||
|
|
||||||
//convert array of objects into array of strings
|
//convert array of objects into array of strings
|
||||||
$studentenMails = array_map(function($element){
|
$studentenMails = array_map(function($element){
|
||||||
return $element->mail;
|
return $element->mail;
|
||||||
}, $studentenMails);
|
}, $studentenMails);
|
||||||
|
|
||||||
$this->terminateWithSuccess($studentenMails);
|
$this->terminateWithSuccess($studentenMails);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function LV($studiensemester_kurzbz, $lehrveranstaltung_id)
|
public function LV($studiensemester_kurzbz, $lehrveranstaltung_id)
|
||||||
@@ -80,13 +90,13 @@ class Lehre extends FHCAPI_Controller
|
|||||||
$result = $this->LehrveranstaltungModel->getLvsByStudentWithGrades(getAuthUID(), $studiensemester_kurzbz, getUserLanguage(), $lehrveranstaltung_id);
|
$result = $this->LehrveranstaltungModel->getLvsByStudentWithGrades(getAuthUID(), $studiensemester_kurzbz, getUserLanguage(), $lehrveranstaltung_id);
|
||||||
|
|
||||||
$result = current($this->getDataOrTerminateWithError($result));
|
$result = current($this->getDataOrTerminateWithError($result));
|
||||||
|
|
||||||
$this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fetches all Pruefungen of a student for a specific lehrveranstaltung
|
* fetches all Pruefungen of a student for a specific lehrveranstaltung
|
||||||
* if the student passed the Pruefung on the first attempt, no information about the Pruefungen is stored in the database
|
* if the student passed the Pruefung on the first attempt, no information about the Pruefungen is stored in the database
|
||||||
* @param mixed $lehrveranstaltung_id
|
* @param mixed $lehrveranstaltung_id
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
@@ -100,5 +110,90 @@ class Lehre extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* calculates and returns the grade average and weighted average for a specific semester
|
||||||
|
* @param string $studiensemester_kurzbz
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function semesterAverageGrade($studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||||
|
$semesterLvs = $this->LehrveranstaltungModel->getLvsByStudentWithGrades(getAuthUID(), $studiensemester_kurzbz, getUserLanguage());
|
||||||
|
|
||||||
|
if (isError($semesterLvs))
|
||||||
|
return $this->outputJsonError(getError($semesterLvs));
|
||||||
|
|
||||||
|
$semesterLvsData = getData($semesterLvs);
|
||||||
|
|
||||||
|
$doGradesExist = false;
|
||||||
|
$sum = 0;
|
||||||
|
$count = 0;
|
||||||
|
$sumWeighted = 0;
|
||||||
|
$sumEcts = 0;
|
||||||
|
|
||||||
|
foreach ($semesterLvsData as $lv) {
|
||||||
|
if (!$lv->znote || $lv->znote < 1 || $lv->znote > 5)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$doGradesExist = true;
|
||||||
|
|
||||||
|
$sum += $lv->znote;
|
||||||
|
$count++;
|
||||||
|
$sumWeighted += $lv->znote * floatval($lv->ects);
|
||||||
|
$sumEcts += floatval($lv->ects);
|
||||||
|
}
|
||||||
|
|
||||||
|
$averageGrade = null;
|
||||||
|
$weightedAverageGrade = null;
|
||||||
|
if ($doGradesExist) {
|
||||||
|
$averageGrade = $sum/$count;
|
||||||
|
$weightedAverageGrade = $sumWeighted/$sumEcts;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(['average_grade' => $averageGrade, 'weighted_average_grade' => $weightedAverageGrade]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fetches all assigned lehrveranstaltungen of a mitarbeiter for a given semester
|
||||||
|
* @param mixed $uid
|
||||||
|
* @param mixed $sem_kurzbz
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function getZugewieseneLv() {
|
||||||
|
$uid = $this->input->get("uid",TRUE);
|
||||||
|
$sem_kurzbz = $this->input->get("sem_kurzbz",TRUE);
|
||||||
|
|
||||||
|
// TODO: error messages
|
||||||
|
|
||||||
|
if(!isset($sem_kurzbz) || isEmptyString($sem_kurzbz))
|
||||||
|
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
||||||
|
|
||||||
|
if (!isset($uid) || isEmptyString($uid))
|
||||||
|
$uid = getAuthUID();
|
||||||
|
|
||||||
|
// querying other ma_uids data requires admin permission
|
||||||
|
if($uid !== getAuthUID()) {
|
||||||
|
$this->load->library('PermissionLib');
|
||||||
|
$isAdmin = $this->permissionlib->isBerechtigt('admin');
|
||||||
|
if(!$isAdmin) $this->terminateWithError($this->p->t('ui', 'keineBerechtigung'), 'general');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||||
|
$result = $this->LehrveranstaltungModel->getLvForLektorInSemester($sem_kurzbz, $uid);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLeForLv() {
|
||||||
|
$lv_id = $this->input->get("lv_id",TRUE);
|
||||||
|
$sem_kurzbz = $this->input->get("sem_kurzbz",TRUE);
|
||||||
|
|
||||||
|
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||||
|
|
||||||
|
// $this->terminateWithSuccess($this->LehreinheitModel->getLesForLv($lv_id, $sem_kurzbz));
|
||||||
|
$this->terminateWithSuccess($this->LehreinheitModel->getAllLehreinheitenForLvaAndMaUid($lv_id, getAuthUID(), $sem_kurzbz));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'getLvMenu' => self::PERM_LOGGED
|
'getLvMenu' => self::PERM_LOGGED,
|
||||||
|
'getMultipleLvMenu' => self::PERM_LOGGED
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->load->model("ressource/Mitarbeiter_model");
|
$this->load->model("ressource/Mitarbeiter_model");
|
||||||
@@ -61,24 +62,23 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* alternative function to get multiple lvMenus with a single http request
|
* alternative function to get multiple lvMenus with a single http request
|
||||||
|
* not yet working as intended as the menu_lv.inc.php scripts called by the
|
||||||
|
* lvMenuBuild event have logic coupled to require_once import which results in
|
||||||
|
* a wrong logic after the first invocation -> faulty results for lvinfo, moodle
|
||||||
|
* and several others
|
||||||
*/
|
*/
|
||||||
public function getMultipleLvMenu($lvMenuOptionList){
|
public function getMultipleLvMenu(){
|
||||||
|
$lvMenuOptionList = $this->input->post('lvMenuOptionList', true);
|
||||||
$result =[];
|
$result =[];
|
||||||
foreach($lvMenuOptionList as $lvMenuOptions){
|
foreach($lvMenuOptionList as $lvMenuOptions){
|
||||||
$lvMenu = $this->getLvMenu($lvMenuOptions['lvid'],$lvMenuOptions['studiensemester_kurzbz']);
|
$lvMenu = $this->getLvMenuInternal($lvMenuOptions['lvid'],$lvMenuOptions['studiensemester_kurzbz']);
|
||||||
if(isError($lvMenu)){
|
|
||||||
// TODO: some lvMenu threw an error, handle error here
|
|
||||||
}
|
|
||||||
$result[$lvMenuOptions['lvid']]=$lvMenu;
|
$result[$lvMenuOptions['lvid']]=$lvMenu;
|
||||||
}
|
}
|
||||||
$this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private function getLvMenuInternal($lvid, $studiensemester_kurzbz) {
|
||||||
*
|
|
||||||
*/
|
|
||||||
public function getLvMenu($lvid, $studiensemester_kurzbz)
|
|
||||||
{
|
|
||||||
|
|
||||||
// return early if parameters are missing
|
// return early if parameters are missing
|
||||||
if(!isset($lvid) || !isset($studiensemester_kurzbz))
|
if(!isset($lvid) || !isset($studiensemester_kurzbz))
|
||||||
@@ -89,14 +89,14 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
|
|
||||||
// get the user
|
// get the user
|
||||||
if (!$user=getAuthUID())
|
if (!$user=getAuthUID())
|
||||||
$this->terminateWithError($this->p->t('global', 'nichtAngemeldet'));
|
$this->terminateWithError($this->p->t('global', 'nichtAngemeldet'));
|
||||||
|
|
||||||
// check if is_lector
|
// check if is_lector
|
||||||
$is_lector = false;
|
$is_lector = false;
|
||||||
$mares = $this->Mitarbeiter_model->isMitarbeiter($user);
|
$mares = $this->Mitarbeiter_model->isMitarbeiter($user);
|
||||||
if(hasData($mares))
|
if(hasData($mares))
|
||||||
{
|
{
|
||||||
$is_lector = getData($mares);
|
$is_lector = getData($mares);
|
||||||
}
|
}
|
||||||
|
|
||||||
// definition of user_is_allowed_to_upload
|
// definition of user_is_allowed_to_upload
|
||||||
@@ -105,7 +105,7 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
|
|
||||||
// load lehrveranstaltung
|
// load lehrveranstaltung
|
||||||
$lvres = $this->Lehrveranstaltung_model->load($lvid);
|
$lvres = $this->Lehrveranstaltung_model->load($lvid);
|
||||||
if(!hasData($lvres))
|
if(!hasData($lvres))
|
||||||
{
|
{
|
||||||
$this->terminateWithError('LV ' . $lvid . ' not found.');
|
$this->terminateWithError('LV ' . $lvid . ' not found.');
|
||||||
}
|
}
|
||||||
@@ -124,7 +124,7 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
$stgres = $this->Studiengang_model->load(strval($studiengang_kz));
|
$stgres = $this->Studiengang_model->load(strval($studiengang_kz));
|
||||||
if(!hasData($stgres))
|
if(!hasData($stgres))
|
||||||
{
|
{
|
||||||
$this->terminateWithError('Stg ' . $lv->studiengang_kz . ' not found.');
|
$this->terminateWithError('Stg ' . $lv->studiengang_kz . ' not found.');
|
||||||
}
|
}
|
||||||
$stg = (getData($stgres))[0];
|
$stg = (getData($stgres))[0];
|
||||||
$kurzbz = strtoupper($stg->typ . $stg->kurzbz);
|
$kurzbz = strtoupper($stg->typ . $stg->kurzbz);
|
||||||
@@ -139,7 +139,7 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
$angemeldet = false;
|
$angemeldet = false;
|
||||||
|
|
||||||
$lesres = $this->Lehreinheit_model->getLehreinheitenForStudentAndStudienSemester(
|
$lesres = $this->Lehreinheit_model->getLehreinheitenForStudentAndStudienSemester(
|
||||||
$lvid, $user, $angezeigtes_stsem
|
$lvid, $user, $angezeigtes_stsem
|
||||||
);
|
);
|
||||||
|
|
||||||
if(hasData($lesres) && count(getData($lesres)) > 0)
|
if(hasData($lesres) && count(getData($lesres)) > 0)
|
||||||
@@ -148,7 +148,7 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
|
|
||||||
// lehrfach
|
// lehrfach
|
||||||
$lehrfach_id='';
|
$lehrfach_id='';
|
||||||
|
|
||||||
if(defined('CIS_LEHRVERANSTALTUNG_LEHRFACH_ANZEIGEN') && CIS_LEHRVERANSTALTUNG_LEHRFACH_ANZEIGEN)
|
if(defined('CIS_LEHRVERANSTALTUNG_LEHRFACH_ANZEIGEN') && CIS_LEHRVERANSTALTUNG_LEHRFACH_ANZEIGEN)
|
||||||
{
|
{
|
||||||
// Wenn der eingeloggte User zu einer der Lehreinheiten zugeteilt ist
|
// Wenn der eingeloggte User zu einer der Lehreinheiten zugeteilt ist
|
||||||
@@ -211,8 +211,8 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
foreach($fbs as $row)
|
foreach($fbs as $row)
|
||||||
{
|
{
|
||||||
$lehrfach_oe_kurzbz_arr[] = $row->oe_kurzbz;
|
$lehrfach_oe_kurzbz_arr[] = $row->oe_kurzbz;
|
||||||
if($this->PermissionLib->isBerechtigt('lehre', null, $row->oe_kurzbz)
|
if($this->PermissionLib->isBerechtigt('lehre', null, $row->oe_kurzbz)
|
||||||
|| $this->PermissionLib->isBerechtigt('assistenz', null, $stg->oe_kurzbz))
|
|| $this->PermissionLib->isBerechtigt('assistenz', null, $stg->oe_kurzbz))
|
||||||
{
|
{
|
||||||
$user_is_allowed_to_upload=true;
|
$user_is_allowed_to_upload=true;
|
||||||
}
|
}
|
||||||
@@ -224,21 +224,21 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
$menu = array();
|
$menu = array();
|
||||||
|
|
||||||
$this->fhc_menu_lvinfo($menu, $lvid, $studiengang_kz, $lektor_der_lv, $is_lector, $lehrfach_oe_kurzbz_arr);
|
$this->fhc_menu_lvinfo($menu, $lvid, $studiengang_kz, $lektor_der_lv, $is_lector, $lehrfach_oe_kurzbz_arr);
|
||||||
|
|
||||||
$this->fhc_menu_feedback($menu, $angemeldet, $lvid);
|
$this->fhc_menu_feedback($menu, $angemeldet, $lvid);
|
||||||
|
|
||||||
$this->fhc_menu_gesamtnote($menu, $angemeldet, $lvid, $lv, $is_lector, $angezeigtes_stsem);
|
$this->fhc_menu_gesamtnote($menu, $angemeldet, $lvid, $lv, $is_lector, $angezeigtes_stsem);
|
||||||
|
|
||||||
$this->fhc_menu_emailStudierende($menu, $user, $angemeldet, $lvid, $angezeigtes_stsem);
|
$this->fhc_menu_emailStudierende($menu, $user, $angemeldet, $lvid, $angezeigtes_stsem);
|
||||||
|
|
||||||
$this->fhc_menu_abmeldung($menu, $user, $is_lector, $lvid, $angezeigtes_stsem);
|
$this->fhc_menu_abmeldung($menu, $user, $is_lector, $lvid, $angezeigtes_stsem);
|
||||||
|
|
||||||
$this->fhc_menu_lehretools($menu, $lvid, $angezeigtes_stsem, $sprache);
|
$this->fhc_menu_lehretools($menu, $lvid, $angezeigtes_stsem, $sprache);
|
||||||
|
|
||||||
$this->fhc_menu_anrechnungStudent($menu, $lvid, $angezeigtes_stsem);
|
$this->fhc_menu_anrechnungStudent($menu, $lvid, $angezeigtes_stsem);
|
||||||
|
|
||||||
$this->fhc_menu_anrechnungLector($menu, $angezeigtes_stsem);
|
$this->fhc_menu_anrechnungLector($menu, $angezeigtes_stsem);
|
||||||
|
|
||||||
|
|
||||||
// Addons Menu Logic
|
// Addons Menu Logic
|
||||||
// ##########################################################################################
|
// ##########################################################################################
|
||||||
@@ -272,18 +272,18 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
'permissionLib' => &$this->PermissionLib,
|
'permissionLib' => &$this->PermissionLib,
|
||||||
'phrasesLib' => &$this->PhrasesLib
|
'phrasesLib' => &$this->PhrasesLib
|
||||||
];
|
];
|
||||||
|
|
||||||
Events::trigger('lvMenuBuild',
|
Events::trigger('lvMenuBuild',
|
||||||
// passing $menu per reference
|
// passing $menu per reference
|
||||||
function & () use (&$menu) {
|
function & () use (&$menu) {
|
||||||
return $menu;
|
return $menu;
|
||||||
},
|
},
|
||||||
$params
|
$params
|
||||||
);
|
);
|
||||||
|
|
||||||
// Menu sortieren
|
// Menu sortieren
|
||||||
// ##########################################################################################
|
// ##########################################################################################
|
||||||
|
|
||||||
foreach ($menu as $key => $row){
|
foreach ($menu as $key => $row){
|
||||||
|
|
||||||
// removes menu points that are not needed in the c4 lvUebersicht
|
// removes menu points that are not needed in the c4 lvUebersicht
|
||||||
@@ -291,7 +291,7 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
unset($menu[$key]);
|
unset($menu[$key]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fills pos array to sort the menu
|
// fills pos array to sort the menu
|
||||||
$pos[$key] = $row['position'];
|
$pos[$key] = $row['position'];
|
||||||
|
|
||||||
@@ -299,11 +299,18 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
|
|
||||||
array_multisort($pos, SORT_ASC, SORT_NUMERIC, $menu);
|
array_multisort($pos, SORT_ASC, SORT_NUMERIC, $menu);
|
||||||
|
|
||||||
// HTTP response
|
|
||||||
// ##########################################################################################
|
return $menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function getLvMenu($lvid, $studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
$menu = $this->getLvMenuInternal($lvid, $studiensemester_kurzbz);
|
||||||
|
|
||||||
$this->terminateWithSuccess($menu);
|
$this->terminateWithSuccess($menu);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function fhc_menu_lvinfo(&$menu, $lvid, $studiengang_kz, $lektor_der_lv, $is_lector, $lehrfach_oe_kurzbz_arr){
|
private function fhc_menu_lvinfo(&$menu, $lvid, $studiengang_kz, $lektor_der_lv, $is_lector, $lehrfach_oe_kurzbz_arr){
|
||||||
@@ -372,7 +379,8 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
'name'=>$this->p->t('lehre', 'gesamtnote'),
|
'name'=>$this->p->t('lehre', 'gesamtnote'),
|
||||||
'phrase' => 'lehre/gesamtnote',
|
'phrase' => 'lehre/gesamtnote',
|
||||||
'c4_icon'=> base_url('skin/images/button_endnote.png'),
|
'c4_icon'=> base_url('skin/images/button_endnote.png'),
|
||||||
'c4_link'=> base_url('cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php?lvid='.urlencode($lvid).'&stsem='.urlencode($angezeigtes_stsem))
|
'c4_link'=> site_url('Cis/Benotungstool/'.urlencode($lvid).'/'.urlencode($angezeigtes_stsem))
|
||||||
|
//'c4_link'=> base_url('cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php?lvid='.urlencode($lvid).'&stsem='.urlencode($angezeigtes_stsem))
|
||||||
//'c4_link'=> base_url('benotungstool/lvgesamtnoteverwalten.php?lvid='.urlencode($lvid).'&stsem='.urlencode($angezeigtes_stsem))
|
//'c4_link'=> base_url('benotungstool/lvgesamtnoteverwalten.php?lvid='.urlencode($lvid).'&stsem='.urlencode($angezeigtes_stsem))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -541,4 +549,4 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,8 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
use CI3_Events as Events;
|
use CI3_Events as Events;
|
||||||
use \DateTime as DateTime;
|
use \DateTime as DateTime;
|
||||||
@@ -33,19 +34,25 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
|
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'getRoomplan' => self::PERM_LOGGED,
|
'getRoomplan' => self::PERM_LOGGED,
|
||||||
'Stunden' => self::PERM_LOGGED,
|
'Stunden' => self::PERM_LOGGED,
|
||||||
'getReservierungen' => self::PERM_LOGGED,
|
'getReservierungen' => self::PERM_LOGGED,
|
||||||
'LvPlanEvents' => self::PERM_LOGGED,
|
'LvPlanEvents' => self::PERM_LOGGED,
|
||||||
'eventsPersonal' => self::PERM_LOGGED,
|
'eventsPersonal' => self::PERM_LOGGED,
|
||||||
'eventsLv' => self::PERM_LOGGED,
|
'eventsLv' => self::PERM_LOGGED,
|
||||||
'getLehreinheitStudiensemester' => self::PERM_LOGGED,
|
'getLehreinheitStudiensemester' => self::PERM_LOGGED,
|
||||||
'studiensemesterDateInterval' => self::PERM_LOGGED,
|
'studiensemesterDateInterval' => self::PERM_LOGGED,
|
||||||
'getLvPlanForStudiensemester' => self::PERM_LOGGED,
|
'getLvPlanForStudiensemester' => self::PERM_LOGGED,
|
||||||
'getLv' => self::PERM_LOGGED
|
'getLv' => self::PERM_LOGGED,
|
||||||
|
'eventsStgOrg' => self::PERM_LOGGED,
|
||||||
|
'fetchFerienEvents' => self::PERM_LOGGED,
|
||||||
|
'getStudiengaenge' => self::PERM_LOGGED,
|
||||||
|
'getLehrverband' => self::PERM_LOGGED,
|
||||||
|
'permissionOtherLvPlan' => self::PERM_LOGGED,
|
||||||
|
'compactibleEventTypes' => self::PERM_LOGGED,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->load->library('LogLib');
|
$this->load->library('LogLib');
|
||||||
$this->loglib->setConfigs(array(
|
$this->loglib->setConfigs(array(
|
||||||
'classIndex' => 5,
|
'classIndex' => 5,
|
||||||
'functionIndex' => 5,
|
'functionIndex' => 5,
|
||||||
'lineIndex' => 4,
|
'lineIndex' => 4,
|
||||||
@@ -53,17 +60,17 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
'dbExecuteUser' => 'RESTful API'
|
'dbExecuteUser' => 'RESTful API'
|
||||||
));
|
));
|
||||||
|
|
||||||
$this->load->library('form_validation');
|
$this->load->library('form_validation');
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// Public methods
|
// Public methods
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fetches LvPlan and Moodle events together
|
* fetches LvPlan and Moodle events together
|
||||||
* @access public
|
* @access public
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function LvPlanEvents()
|
public function LvPlanEvents()
|
||||||
{
|
{
|
||||||
$hasLv = $this->input->post('lv_id');
|
$hasLv = $this->input->post('lv_id');
|
||||||
@@ -83,24 +90,30 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
// form validation
|
// form validation
|
||||||
$this->form_validation->set_rules('start_date', "start_date", "required");
|
$this->form_validation->set_rules('start_date', "start_date", "required");
|
||||||
$this->form_validation->set_rules('end_date', "end_date", "required");
|
$this->form_validation->set_rules('end_date', "end_date", "required");
|
||||||
|
|
||||||
if (!$this->form_validation->run())
|
if (!$this->form_validation->run())
|
||||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
// storing the post parameter in local variables
|
// storing the post parameter in local variables
|
||||||
$start_date = $this->input->post('start_date', true);
|
$start_date = $this->input->post('start_date', true);
|
||||||
$end_date = $this->input->post('end_date', true);
|
$end_date = $this->input->post('end_date', true);
|
||||||
|
$uid = $this->input->post('uid', true);
|
||||||
|
|
||||||
|
// disallow accessing other user's events if missing permission
|
||||||
|
if ($uid && $uid !== getAuthUID() && !$this->permissionlib->isBerechtigt('basis/other_lv_plan')) {
|
||||||
|
$this->terminateWithError("Missing permission to view other users' timetables!");
|
||||||
|
}
|
||||||
|
|
||||||
// fetching lvplan events
|
// fetching lvplan events
|
||||||
$result = $this->stundenplanlib->getEventsUser($start_date, $end_date);
|
$result = $this->stundenplanlib->getEventsUser($start_date, $end_date, $uid);
|
||||||
$lvplanEvents = $this->getDataOrTerminateWithError($result);
|
$lvplanEvents = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
// fetching moodle events
|
// fetching moodle events
|
||||||
$moodleEvents = $this->fetchMoodleEvents($start_date, $end_date);
|
$moodleEvents = $this->fetchMoodleEvents($start_date, $end_date, $uid);
|
||||||
|
|
||||||
// fetching ferien events
|
// fetching ferien events
|
||||||
$ferienEvents = $this->fetchFerienEvents($start_date, $end_date);
|
$ferienEvents = $this->fetchFerienEvents($start_date, $end_date, $uid);
|
||||||
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(array_merge(
|
$this->terminateWithSuccess(array_merge(
|
||||||
$lvplanEvents,
|
$lvplanEvents,
|
||||||
@@ -109,6 +122,45 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fetches LvPlan for studiengang / semester / verband / gruppe
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
public function eventsStgOrg()
|
||||||
|
{
|
||||||
|
$this->load->library('StundenplanLib');
|
||||||
|
|
||||||
|
// form validation
|
||||||
|
$this->form_validation->set_rules('start_date', "start_date", "required");
|
||||||
|
$this->form_validation->set_rules('end_date', "end_date", "required");
|
||||||
|
//$this->form_validation->set_rules('stg_kz', "stg_kz", "required"); //no validation show empty calendar
|
||||||
|
|
||||||
|
if (!$this->form_validation->run()) {
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
$stgOrgEvents = [];
|
||||||
|
$ferienEvents = [];
|
||||||
|
} else {
|
||||||
|
$start_date = $this->input->post('start_date', true);
|
||||||
|
$end_date = $this->input->post('end_date', true);
|
||||||
|
$stg_kz = $this->input->post('stg_kz', true);
|
||||||
|
$sem = $this->input->post('sem', true);
|
||||||
|
$verband = $this->input->post('verband', true);
|
||||||
|
$gruppe = $this->input->post('gruppe', true);
|
||||||
|
|
||||||
|
$result = $this->stundenplanlib->getEventsStgOrg($start_date, $end_date, $stg_kz, $sem, $verband, $gruppe);
|
||||||
|
$stgOrgEvents = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$result = $this->stundenplanlib->fetchFerienTageEvents($start_date, $end_date, $stg_kz);
|
||||||
|
$ferienEvents = $this->getDataOrTerminateWithError($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(array_merge(
|
||||||
|
$stgOrgEvents,
|
||||||
|
$ferienEvents
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fetches LvPlan and Ferien events together for the lv
|
* fetches LvPlan and Ferien events together for the lv
|
||||||
*
|
*
|
||||||
@@ -122,7 +174,7 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
$this->form_validation->set_rules('start_date', "start_date", "required");
|
$this->form_validation->set_rules('start_date', "start_date", "required");
|
||||||
$this->form_validation->set_rules('end_date', "end_date", "required");
|
$this->form_validation->set_rules('end_date', "end_date", "required");
|
||||||
$this->form_validation->set_rules('lv_id', "lv_id", "required|integer");
|
$this->form_validation->set_rules('lv_id', "lv_id", "required|integer");
|
||||||
|
|
||||||
if (!$this->form_validation->run())
|
if (!$this->form_validation->run())
|
||||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
@@ -137,7 +189,6 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
|
|
||||||
// fetching ferien events
|
// fetching ferien events
|
||||||
$ferienEvents = $this->fetchFerienEvents($start_date, $end_date);
|
$ferienEvents = $this->fetchFerienEvents($start_date, $end_date);
|
||||||
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(array_merge(
|
$this->terminateWithSuccess(array_merge(
|
||||||
$lvplanEvents,
|
$lvplanEvents,
|
||||||
@@ -146,40 +197,42 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TODO: delete this function if we don't use the old calendar export endpoints anymore
|
//TODO: delete this function if we don't use the old calendar export endpoints anymore
|
||||||
public function studiensemesterDateInterval($date){
|
public function studiensemesterDateInterval($date)
|
||||||
$this->load->model('organisation/Studiensemester_model','StudiensemesterModel');
|
{
|
||||||
$studiensemester =$this->StudiensemesterModel->getByDate(date_format(date_create($date),'Y-m-d'));
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
$studiensemester =current($this->getDataOrTerminateWithError($studiensemester));
|
$studiensemester = $this->StudiensemesterModel->getByDate(date_format(date_create($date), 'Y-m-d'));
|
||||||
|
$studiensemester = current($this->getDataOrTerminateWithError($studiensemester));
|
||||||
$this->terminateWithSuccess($studiensemester);
|
$this->terminateWithSuccess($studiensemester);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLvPlanForStudiensemester($studiensemester,$lvid){
|
public function getLvPlanForStudiensemester($studiensemester, $lvid)
|
||||||
|
{
|
||||||
$this->load->library('StundenplanLib');
|
$this->load->library('StundenplanLib');
|
||||||
$this->load->model('organisation/Studiensemester_model','StudiensemesterModel');
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
|
||||||
$studiensemester_result = $this->StudiensemesterModel->loadWhere(["studiensemester_kurzbz"=>$studiensemester]);
|
$studiensemester_result = $this->StudiensemesterModel->loadWhere(["studiensemester_kurzbz" => $studiensemester]);
|
||||||
$studiensemester_result = current($this->getDataOrTerminateWithError($studiensemester_result));
|
$studiensemester_result = current($this->getDataOrTerminateWithError($studiensemester_result));
|
||||||
$timespan_start = new DateTime($studiensemester_result->start);
|
$timespan_start = new DateTime($studiensemester_result->start);
|
||||||
$timespan_ende = new DateTime($studiensemester_result->ende);
|
$timespan_ende = new DateTime($studiensemester_result->ende);
|
||||||
$lvplan = $this->stundenplanlib->getStundenplan(date_format($timespan_start, 'Y-m-d'),date_format($timespan_ende, 'Y-m-d'), $lvid);
|
$lvplan = $this->stundenplanlib->getStundenplan(date_format($timespan_start, 'Y-m-d'), date_format($timespan_ende, 'Y-m-d'), $lvid);
|
||||||
$this->terminateWithSuccess($lvplan);
|
$this->terminateWithSuccess($lvplan);
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
}
|
||||||
* fetches Stunden layout from database
|
|
||||||
* @access public
|
|
||||||
*
|
/**
|
||||||
*/
|
* fetches Stunden layout from database
|
||||||
public function Stunden()
|
* @access public
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function Stunden()
|
||||||
{
|
{
|
||||||
$this->load->model('ressource/Stunde_model', 'StundeModel');
|
$this->load->model('ressource/Stunde_model', 'StundeModel');
|
||||||
|
|
||||||
$this->StundeModel->addOrder('stunde', 'ASC');
|
$this->StundeModel->addOrder('stunde', 'ASC');
|
||||||
$stunden = $this->StundeModel->load();
|
$stunden = $this->StundeModel->load();
|
||||||
|
|
||||||
$stunden = $this->getDataOrTerminateWithError($stunden);
|
$stunden = $this->getDataOrTerminateWithError($stunden);
|
||||||
|
|
||||||
$this->terminateWithSuccess($stunden);
|
$this->terminateWithSuccess($stunden);
|
||||||
}
|
}
|
||||||
@@ -210,10 +263,10 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
$roomplan_data = $this->stundenplanlib->getRoomplan($ort_kurzbz, $start_date, $end_date);
|
$roomplan_data = $this->stundenplanlib->getRoomplan($ort_kurzbz, $start_date, $end_date);
|
||||||
|
|
||||||
$roomplan_data = $this->getDataOrTerminateWithError($roomplan_data);
|
$roomplan_data = $this->getDataOrTerminateWithError($roomplan_data);
|
||||||
|
|
||||||
$this->terminateWithSuccess($roomplan_data);
|
$this->terminateWithSuccess($roomplan_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gets the reservierungen of a room if the ort_kurzbz parameter is
|
* gets the reservierungen of a room if the ort_kurzbz parameter is
|
||||||
* supplied otherwise gets the reservierungen of the lvplan of a student
|
* supplied otherwise gets the reservierungen of the lvplan of a student
|
||||||
@@ -226,25 +279,32 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
$this->form_validation->set_rules('start_date', "StartDate", "required");
|
$this->form_validation->set_rules('start_date', "StartDate", "required");
|
||||||
$this->form_validation->set_rules('end_date', "EndDate", "required");
|
$this->form_validation->set_rules('end_date', "EndDate", "required");
|
||||||
|
|
||||||
if (!$this->form_validation->run())
|
if (!$this->form_validation->run())
|
||||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
// storing the post parameter in local variables
|
// storing the post parameter in local variables
|
||||||
$start_date = $this->input->post('start_date', true);
|
$start_date = $this->input->post('start_date', true);
|
||||||
$end_date = $this->input->post('end_date', true);
|
$end_date = $this->input->post('end_date', true);
|
||||||
|
$uid = $this->input->post('uid', true);
|
||||||
|
|
||||||
|
// disallow accessing other user's reservierungen if missing permission
|
||||||
|
if ($uid && $uid !== getAuthUID() && !$this->permissionlib->isBerechtigt('basis/other_lv_plan')) {
|
||||||
|
$this->terminateWithError("Missing permission to view other users' timetables!");
|
||||||
|
}
|
||||||
|
|
||||||
// get data
|
// get data
|
||||||
$this->load->library('StundenplanLib');
|
$this->load->library('StundenplanLib');
|
||||||
|
|
||||||
$result = $this->stundenplanlib->getReservierungen($start_date, $end_date, $ort_kurzbz);
|
$result = $this->stundenplanlib->getReservierungen($start_date, $end_date, $ort_kurzbz, $uid);
|
||||||
|
|
||||||
$result = $this->getDataOrTerminateWithError($result);
|
$result = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
$this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLehreinheitStudiensemester($lehreinheit_id){
|
public function getLehreinheitStudiensemester($lehreinheit_id)
|
||||||
|
{
|
||||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||||
$this->LehreinheitModel->addSelect(["studiensemester_kurzbz"]);
|
$this->LehreinheitModel->addSelect(["studiensemester_kurzbz"]);
|
||||||
$result = $this->LehreinheitModel->load($lehreinheit_id);
|
$result = $this->LehreinheitModel->load($lehreinheit_id);
|
||||||
@@ -287,6 +347,68 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
return $this->terminateWithSuccess(current($result));
|
return $this->terminateWithSuccess(current($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getStudiengaenge()
|
||||||
|
{
|
||||||
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
|
|
||||||
|
$this->StudiengangModel->addOrder('typ');
|
||||||
|
$this->StudiengangModel->addOrder('kurzbz');
|
||||||
|
$result = $this->StudiengangModel->loadWhere([
|
||||||
|
'aktiv' => true
|
||||||
|
]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
return $this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLehrverband($studiengang_kz, $semester = null, $verband = null)
|
||||||
|
{
|
||||||
|
$this->load->model('organisation/Lehrverband_model', 'LehrverbandModel');
|
||||||
|
|
||||||
|
$where = [
|
||||||
|
'aktiv' => true,
|
||||||
|
'studiengang_kz' => $studiengang_kz,
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($semester !== null && $semester !== 'null' && $semester !== 'undefined') {
|
||||||
|
$where['semester'] = $semester;
|
||||||
|
}
|
||||||
|
if ($verband !== null && $verband !== 'null' && $verband !== 'undefined') {
|
||||||
|
$where['verband'] = $verband;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->LehrverbandModel->addOrder('studiengang_kz');
|
||||||
|
$this->LehrverbandModel->addOrder('semester');
|
||||||
|
$this->LehrverbandModel->addOrder('verband');
|
||||||
|
$this->LehrverbandModel->addOrder('gruppe');
|
||||||
|
$result = $this->LehrverbandModel->loadWhere($where);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
return $this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the current user has permission to view other users' timetables
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function permissionOtherLvPlan()
|
||||||
|
{
|
||||||
|
$this->terminateWithSuccess($this->permissionlib->isBerechtigt('basis/other_lv_plan'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get event types which can be compacted in lv plan display
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function compactibleEventTypes()
|
||||||
|
{
|
||||||
|
$this->terminateWithSuccess(["lehreinheit", "reservierung", "ferien", "moodle"]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fetch moodle events
|
* fetch moodle events
|
||||||
*
|
*
|
||||||
@@ -294,30 +416,30 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
* @param string $end_date
|
* @param string $end_date
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
private function fetchMoodleEvents($start_date, $end_date)
|
private function fetchMoodleEvents($start_date, $end_date, $uid = null)
|
||||||
{
|
{
|
||||||
$this->load->config('calendar');
|
$this->load->config('calendar');
|
||||||
|
|
||||||
$tz = new DateTimeZone($this->config->item('timezone'));
|
$tz = new DateTimeZone($this->config->item('timezone'));
|
||||||
|
|
||||||
$start = new DateTime($start_date);
|
$start = new DateTime($start_date);
|
||||||
$start->setTimezone($tz);
|
$start->setTimezone($tz);
|
||||||
|
|
||||||
$end = new DateTime($end_date);
|
$end = new DateTime($end_date);
|
||||||
$end->setTimezone($tz);
|
$end->setTimezone($tz);
|
||||||
$end->modify('+1 day -1 second');
|
$end->modify('+1 day -1 second');
|
||||||
|
|
||||||
$moodle_events = [];
|
$moodle_events = [];
|
||||||
|
|
||||||
Events::trigger(
|
Events::trigger(
|
||||||
'moodleCalendarEvents',
|
'moodleCalendarEvents',
|
||||||
function & () use (&$moodle_events) {
|
function &() use (&$moodle_events) {
|
||||||
return $moodle_events;
|
return $moodle_events;
|
||||||
},
|
},
|
||||||
[
|
[
|
||||||
'start_date' => $start->format('c'),
|
'start_date' => $start->format('c'),
|
||||||
'end_date' => $end->format('c'),
|
'end_date' => $end->format('c'),
|
||||||
'username' => getAuthUID()
|
'username' => $uid ?? getAuthUID()
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -331,23 +453,23 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
* @param string $end_date
|
* @param string $end_date
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
private function fetchFerienEvents($start_date, $end_date)
|
private function fetchFerienEvents($start_date, $end_date, $uid = null)
|
||||||
{
|
{
|
||||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
$this->load->model('education/Studentlehrverband_model', 'StudentLehrverbandModel');
|
$this->load->model('education/Studentlehrverband_model', 'StudentLehrverbandModel');
|
||||||
|
|
||||||
$currentStudiensemester = $this->StudiensemesterModel->getByDate($start_date);
|
$currentStudiensemester = $this->StudiensemesterModel->getByDate($start_date);
|
||||||
$currentStudiensemester = $this->getDataOrTerminateWithError($currentStudiensemester);
|
$currentStudiensemester = $this->getDataOrTerminateWithError($currentStudiensemester);
|
||||||
|
|
||||||
if ($currentStudiensemester) {
|
if ($currentStudiensemester) {
|
||||||
$studentsemester_kurzbz = current($currentStudiensemester)->studiensemester_kurzbz;
|
$studentsemester_kurzbz = current($currentStudiensemester)->studiensemester_kurzbz;
|
||||||
|
|
||||||
$studiengang = $this->StudentLehrverbandModel->loadWhere([
|
$studiengang = $this->StudentLehrverbandModel->loadWhere([
|
||||||
"student_uid" => getAuthUID(),
|
"student_uid" => $uid ?? getAuthUID(),
|
||||||
"studiensemester_kurzbz" => $studentsemester_kurzbz
|
"studiensemester_kurzbz" => $studentsemester_kurzbz
|
||||||
]);
|
]);
|
||||||
$studiengang = $this->getDataOrTerminateWithError($studiengang);
|
$studiengang = $this->getDataOrTerminateWithError($studiengang);
|
||||||
|
|
||||||
if ($studiengang)
|
if ($studiengang)
|
||||||
$studiengang_kz = current($studiengang)->studiengang_kz;
|
$studiengang_kz = current($studiengang)->studiengang_kz;
|
||||||
else
|
else
|
||||||
@@ -357,7 +479,7 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$ferienEvents = $this->stundenplanlib->fetchFerienTageEvents($start_date, $end_date, $studiengang_kz);
|
$ferienEvents = $this->stundenplanlib->fetchFerienTageEvents($start_date, $end_date, $studiengang_kz);
|
||||||
|
|
||||||
return $this->getDataOrTerminateWithError($ferienEvents);
|
return $this->getDataOrTerminateWithError($ferienEvents);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2024 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class OtherLvPlan extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object initialization
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'otherLvPlanViewData' => ['basis/other_lv_plan:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
|
||||||
|
$this->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* retrieves viewData for other lv plan view
|
||||||
|
* @access public
|
||||||
|
* @param $uid the userID for which the other lv plan is being viewed
|
||||||
|
*/
|
||||||
|
public function otherLvPlanViewData($uid)
|
||||||
|
{
|
||||||
|
$isMitarbeiterResult = $this->MitarbeiterModel->isMitarbeiter($uid);
|
||||||
|
$isMitarbeiter = getData($isMitarbeiterResult);
|
||||||
|
$isStudent = !$isMitarbeiter;
|
||||||
|
|
||||||
|
$this->BenutzerModel->addSelect(["foto", "vorname", "nachname"]);
|
||||||
|
$this->BenutzerModel->addJoin("tbl_person", "person_id");
|
||||||
|
$personResult = $this->BenutzerModel->load([$uid]);
|
||||||
|
$person = hasData($personResult) ? getData($personResult) : null;
|
||||||
|
|
||||||
|
$viewData = [
|
||||||
|
"user_data" => [
|
||||||
|
"username" => $uid,
|
||||||
|
"is_student" => $isStudent,
|
||||||
|
"is_mitarbeiter" => $isMitarbeiter,
|
||||||
|
"foto" => $person[0]->foto,
|
||||||
|
"vorname" => $person[0]->vorname,
|
||||||
|
"nachname" => $person[0]->nachname,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($viewData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
|
// Private methods
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -16,7 +16,8 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
class Profil extends FHCAPI_Controller
|
class Profil extends FHCAPI_Controller
|
||||||
{
|
{
|
||||||
@@ -27,13 +28,13 @@ class Profil extends FHCAPI_Controller
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'fotoSperre' => self::PERM_LOGGED,
|
'fotoSperre' => self::PERM_LOGGED,
|
||||||
'getGemeinden' => self::PERM_LOGGED,
|
'getGemeinden' => self::PERM_LOGGED,
|
||||||
'getAllNationen' => self::PERM_LOGGED,
|
'getAllNationen' => self::PERM_LOGGED,
|
||||||
'isMitarbeiter' => self::PERM_LOGGED,
|
'isMitarbeiter' => self::PERM_LOGGED,
|
||||||
'profilViewData' => self::PERM_LOGGED,
|
'profilViewData' => self::PERM_LOGGED,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->load->library('PermissionLib');
|
$this->load->library('PermissionLib');
|
||||||
|
|
||||||
$this->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
|
$this->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
|
||||||
@@ -48,28 +49,37 @@ class Profil extends FHCAPI_Controller
|
|||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// Public methods
|
// Public methods
|
||||||
public function profilViewData($uid=null){
|
|
||||||
|
/**
|
||||||
|
* retrieves view data for profile view
|
||||||
|
* @access public
|
||||||
|
* @param $uid the userID for which profile is being viewed, null or missing value implies one's own profile
|
||||||
|
*/
|
||||||
|
public function profilViewData($uid = null)
|
||||||
|
{
|
||||||
|
$authUid = getAuthUID();
|
||||||
|
$isProfilOfAuthUser = !$uid || $uid === $authUid;
|
||||||
|
|
||||||
$this->load->library('ProfilLib');
|
$this->load->library('ProfilLib');
|
||||||
$editable = false;
|
$profileData = $this->profillib->getView($uid ?? $authUid);
|
||||||
if(isset($uid) && $uid != null){
|
$profileData = hasData($profileData) ? getData($profileData) : null;
|
||||||
$profil_data = $this->profillib->getView($uid);
|
|
||||||
if($uid == getAuthUID()){
|
$viewData = [
|
||||||
$editable = true;
|
'editable' => $isProfilOfAuthUser,
|
||||||
}
|
'profil_data' => $profileData,
|
||||||
}else{
|
'permissions' => [
|
||||||
$editable = true;
|
'basis/other_lv_plan' => $this->permissionlib->isBerechtigt(('basis/other_lv_plan'))
|
||||||
$profil_data = $this->profillib->getView(getAuthUID());
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($isProfilOfAuthUser) {
|
||||||
|
$viewData['calendar_sync_urls'] = $this->getCalendarSyncUrlData();
|
||||||
}
|
}
|
||||||
|
|
||||||
$profil_data = hasData($profil_data) ? getData($profil_data) : null;
|
|
||||||
$viewData = array(
|
|
||||||
'editable'=>$editable,
|
|
||||||
'profil_data' => $profil_data,
|
|
||||||
);
|
|
||||||
$this->terminateWithSuccess($viewData);
|
$this->terminateWithSuccess($viewData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* update column foto_sperre in public.tbl_person
|
* update column foto_sperre in public.tbl_person
|
||||||
* @access public
|
* @access public
|
||||||
* @param boolean $value new value for the column
|
* @param boolean $value new value for the column
|
||||||
@@ -77,9 +87,9 @@ class Profil extends FHCAPI_Controller
|
|||||||
*/
|
*/
|
||||||
public function fotoSperre($value)
|
public function fotoSperre($value)
|
||||||
{
|
{
|
||||||
if(!isset($value)){
|
if (!isset($value)) {
|
||||||
$this->terminateWithError("Missing parameter", self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError("Missing parameter", self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
$res = $this->PersonModel->update($this->pid, ["foto_sperre" => $value]);
|
$res = $this->PersonModel->update($this->pid, ["foto_sperre" => $value]);
|
||||||
if (isError($res)) {
|
if (isError($res)) {
|
||||||
@@ -87,10 +97,10 @@ class Profil extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
$this->PersonModel->addSelect("foto_sperre");
|
$this->PersonModel->addSelect("foto_sperre");
|
||||||
$res = $this->PersonModel->load($this->pid);
|
$res = $this->PersonModel->load($this->pid);
|
||||||
|
|
||||||
$res = $this->getDataOrTerminateWithError($res);
|
$res = $this->getDataOrTerminateWithError($res);
|
||||||
|
|
||||||
$this->terminateWithSuccess(current($res));
|
$this->terminateWithSuccess(current($res));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -109,7 +119,7 @@ class Profil extends FHCAPI_Controller
|
|||||||
if (isError($nation_res)) {
|
if (isError($nation_res)) {
|
||||||
$this->terminateWithError("error while trying to query table codex.tbl_nation", self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError("error while trying to query table codex.tbl_nation", self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
$nation_res = $this->getDataOrTerminateWithError($nation_res);
|
$nation_res = $this->getDataOrTerminateWithError($nation_res);
|
||||||
|
|
||||||
$this->terminateWithSuccess($nation_res);
|
$this->terminateWithSuccess($nation_res);
|
||||||
@@ -117,30 +127,30 @@ class Profil extends FHCAPI_Controller
|
|||||||
|
|
||||||
public function getGemeinden($nation, $zip)
|
public function getGemeinden($nation, $zip)
|
||||||
{
|
{
|
||||||
if(!isset($nation) || !isset($zip)){
|
if (!isset($nation) || !isset($zip)) {
|
||||||
echo json_encode(error("Missing parameters"));
|
echo json_encode(error("Missing parameters"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('codex/Gemeinde_model', "GemeindeModel");
|
$this->load->model('codex/Gemeinde_model', "GemeindeModel");
|
||||||
|
|
||||||
|
|
||||||
$gemeinde_res = $this->GemeindeModel->getGemeindeByPlz($zip);
|
$gemeinde_res = $this->GemeindeModel->getGemeindeByPlz($zip);
|
||||||
|
|
||||||
if (isError($gemeinde_res)) {
|
if (isError($gemeinde_res)) {
|
||||||
$this->terminateWithError(getError($gemeinde_res),self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($gemeinde_res), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
$gemeinde_res = $this->getDataOrTerminateWithError($gemeinde_res);
|
$gemeinde_res = $this->getDataOrTerminateWithError($gemeinde_res);
|
||||||
|
|
||||||
/* $gemeinde_res = array_map(function ($obj) {
|
/* $gemeinde_res = array_map(function ($obj) {
|
||||||
return $obj->ortschaftsname;
|
return $obj->ortschaftsname;
|
||||||
}, $gemeinde_res); */
|
}, $gemeinde_res); */
|
||||||
|
|
||||||
$this->terminateWithSuccess($gemeinde_res);
|
$this->terminateWithSuccess($gemeinde_res);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* checks whether a specific userID is a mitarbeiter or not (foreword declaration of the function isMitarbeiter in Mitarbeiter_model.php)
|
* checks whether a specific userID is a mitarbeiter or not (foreword declaration of the function isMitarbeiter in Mitarbeiter_model.php)
|
||||||
* @access public
|
* @access public
|
||||||
@@ -150,23 +160,48 @@ class Profil extends FHCAPI_Controller
|
|||||||
public function isMitarbeiter($uid)
|
public function isMitarbeiter($uid)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(!$uid) $this->terminateWithError("No uid provided", self::ERROR_TYPE_GENERAL);
|
if (!$uid)
|
||||||
|
$this->terminateWithError("No uid provided", self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
|
||||||
$result = $this->MitarbeiterModel->isMitarbeiter($uid);
|
$result = $this->MitarbeiterModel->isMitarbeiter($uid);
|
||||||
|
|
||||||
if (isError($result)) {
|
if (isError($result)) {
|
||||||
$this->terminateWithError("error when calling Mitarbeiter_model function isMitarbeiter with uid " . $uid, self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError("error when calling Mitarbeiter_model function isMitarbeiter with uid " . $uid, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = $this->getDataOrTerminateWithError($result);
|
$result = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
$this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
// Private methods
|
// Private methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gets the identifier, phrase, and url for each calendar sync option
|
||||||
|
* @access private
|
||||||
|
* @return array array of arrays, where each child array is a sync option
|
||||||
|
*/
|
||||||
|
private function getCalendarSyncUrlData()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
"identifier" => "cal_dav",
|
||||||
|
"labelPhrase" => "profil/calendar_sync_cal_dav",
|
||||||
|
"url" => APP_ROOT . "webdav/lvplan.php/calendars/" . $this->uid . "/LVPlan-" . $this->uid,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"identifier" => "cal_dav_principal",
|
||||||
|
"labelPhrase" => "profil/calendar_sync_cal_dav_principal",
|
||||||
|
"url" => APP_ROOT . "webdav/lvplan.php/principals/" . $this->uid,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"identifier" => "i_cal",
|
||||||
|
"labelPhrase" => "profil/calendar_sync_i_cal",
|
||||||
|
"url" => APP_ROOT . "webdav/google.php?cal=" . encryptData($this->uid, LVPLAN_CYPHER_KEY) . "&" . microtime(true),
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2024 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class StgOrgLvPlan extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object initialization
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'stgOrgLvPlanViewData' => self::PERM_LOGGED,
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fetches view data for stg org lv plan
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
public function stgOrgLvPlanViewData()
|
||||||
|
{
|
||||||
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
|
$this->StudiengangModel->addOrder('typ');
|
||||||
|
$this->StudiengangModel->addOrder('kurzbz');
|
||||||
|
$result = $this->StudiengangModel->loadWhere([
|
||||||
|
'aktiv' => true
|
||||||
|
]);
|
||||||
|
$studiengaenge = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$viewData = array(
|
||||||
|
'studiengaenge' => $studiengaenge,
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($viewData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
|
// Private methods
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2024 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
class Studiensemester extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
private $_ci;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object initialization
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getStudiensemester'=> self::PERM_LOGGED,
|
||||||
|
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
|
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GET METHOD
|
||||||
|
* returns List of all studiensemester as well as current one
|
||||||
|
*/
|
||||||
|
public function getStudiensemester()
|
||||||
|
{
|
||||||
|
$this->_ci->StudiensemesterModel->addOrder("start", "DESC");
|
||||||
|
$result = $this->_ci->StudiensemesterModel->load();
|
||||||
|
|
||||||
|
$studiensemester = getData($result);
|
||||||
|
$result = $this->_ci->StudiensemesterModel->getAkt();
|
||||||
|
$aktuell = getData($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(array($studiensemester, $aktuell));
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Private methods
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -62,21 +62,36 @@ class Studium extends FHCAPI_Controller
|
|||||||
|
|
||||||
if($this->getDataOrTerminateWithError($this->StudentModel->isStudent(getAuthUID()))){
|
if($this->getDataOrTerminateWithError($this->StudentModel->isStudent(getAuthUID()))){
|
||||||
$studentLehrverband =$this->StudentlehrverbandModel->loadWhere(["student_uid" => getAuthUID(), "studiensemester_kurzbz" => $aktuelles_studiensemester->studiensemester_kurzbz]);
|
$studentLehrverband =$this->StudentlehrverbandModel->loadWhere(["student_uid" => getAuthUID(), "studiensemester_kurzbz" => $aktuelles_studiensemester->studiensemester_kurzbz]);
|
||||||
$studentLehrverband = current($this->getDataOrTerminateWithError($studentLehrverband));
|
|
||||||
|
//TODO(Manu) check if use Fallback or just comment out all paramschecks?
|
||||||
$student_studiensemester = $studentLehrverband->studiensemester_kurzbz;
|
//add Fallback: if no LehrverbandData of actual semester, get Data of previous one
|
||||||
$student_studiengang = $studentLehrverband->studiengang_kz;
|
if(!hasData($studentLehrverband))
|
||||||
$student_semester = $studentLehrverband->semester;
|
{
|
||||||
|
$result= $this->StudiensemesterModel->getPreviousFrom($aktuelles_studiensemester->studiensemester_kurzbz);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$vorheriges_studiensemester = current($data)->studiensemester_kurzbz;
|
||||||
|
$studentLehrverband =$this->StudentlehrverbandModel->loadWhere(["student_uid" => getAuthUID(), "studiensemester_kurzbz" => $vorheriges_studiensemester]);
|
||||||
|
}
|
||||||
|
$studentLehrverband = current(getData($studentLehrverband));
|
||||||
|
|
||||||
$student_studienplan = $this->getStudienPlanFromPrestudentStatus(getAuthPersonId())->studienplan_id;
|
$student_studienplan = $this->getStudienPlanFromPrestudentStatus(getAuthPersonId())->studienplan_id;
|
||||||
|
|
||||||
if(!isset($parameter_studiensemester))
|
if(!isset($parameter_studiensemester)) {
|
||||||
$parameter_studiensemester = $student_studiensemester;
|
$student_studiensemester = $studentLehrverband->studiensemester_kurzbz;
|
||||||
if(!isset($parameter_studiengang))
|
$parameter_studiensemester = $student_studiensemester;
|
||||||
$parameter_studiengang = $student_studiengang;
|
}
|
||||||
if(!isset($parameter_semester))
|
if(!isset($parameter_studiengang)) {
|
||||||
$parameter_semester = $student_semester;
|
$student_studiengang = $studentLehrverband->studiengang_kz;
|
||||||
|
$parameter_studiengang = $student_studiengang;
|
||||||
|
}
|
||||||
|
if(!isset($parameter_semester)) {
|
||||||
|
$student_semester = $studentLehrverband->semester;
|
||||||
|
$parameter_semester = $student_semester;
|
||||||
|
}
|
||||||
if(!isset($parameter_studienplan))
|
if(!isset($parameter_studienplan))
|
||||||
$parameter_studienplan = $student_studienplan;
|
$parameter_studienplan = $student_studienplan;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($parameter_studiensemester)){
|
if(isset($parameter_studiensemester)){
|
||||||
@@ -96,8 +111,7 @@ class Studium extends FHCAPI_Controller
|
|||||||
|
|
||||||
// fetch studiensemester
|
// fetch studiensemester
|
||||||
$allStudienSemester = $this->getDataOrTerminateWithError($this->StudiensemesterModel->load());
|
$allStudienSemester = $this->getDataOrTerminateWithError($this->StudiensemesterModel->load());
|
||||||
|
|
||||||
|
|
||||||
if(isset($parameter_studiensemester) && !empty(array_filter($allStudienSemester, function($studiensemester) use($parameter_studiensemester){
|
if(isset($parameter_studiensemester) && !empty(array_filter($allStudienSemester, function($studiensemester) use($parameter_studiensemester){
|
||||||
return $studiensemester->studiensemester_kurzbz == $parameter_studiensemester->studiensemester_kurzbz;
|
return $studiensemester->studiensemester_kurzbz == $parameter_studiensemester->studiensemester_kurzbz;
|
||||||
}))){
|
}))){
|
||||||
@@ -216,6 +230,8 @@ class Studium extends FHCAPI_Controller
|
|||||||
$studienplaene = array_map(function($studienplan){
|
$studienplaene = array_map(function($studienplan){
|
||||||
$orgform = current($this->getDataOrTerminateWithError($this->OrgformModel->loadWhere(["orgform_kurzbz" => $studienplan->orgform_kurzbz])));
|
$orgform = current($this->getDataOrTerminateWithError($this->OrgformModel->loadWhere(["orgform_kurzbz" => $studienplan->orgform_kurzbz])));
|
||||||
$studienplan->orgform_bezeichnung = $orgform->bezeichnung;
|
$studienplan->orgform_bezeichnung = $orgform->bezeichnung;
|
||||||
|
// bezeichnung_mehrsprachig
|
||||||
|
$studienplan->orgform_bezeichnung_english = $orgform->bezeichnung_mehrsprachig[1];
|
||||||
return $studienplan;
|
return $studienplan;
|
||||||
},$studienplaene);
|
},$studienplaene);
|
||||||
return $studienplaene;
|
return $studienplaene;
|
||||||
|
|||||||
@@ -0,0 +1,367 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Zeitsperren extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getZeitsperrenUser' => self::PERM_LOGGED,
|
||||||
|
'getTypenZeitsperren' => self::PERM_LOGGED,
|
||||||
|
'getTypenErreichbarkeit' => self::PERM_LOGGED,
|
||||||
|
'getStunden' => self::PERM_LOGGED,
|
||||||
|
'loadZeitsperre' => self::PERM_LOGGED,
|
||||||
|
'add' => self::PERM_LOGGED,
|
||||||
|
'update' => self::PERM_LOGGED,
|
||||||
|
'delete' => self::PERM_LOGGED,
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui',
|
||||||
|
'person',
|
||||||
|
'zeitsperren'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Load models
|
||||||
|
$this->load->model('ressource/Zeitsperre_model', 'ZeitsperreModel');
|
||||||
|
$this->load->model('ressource/Zeitsperretyp_model', 'ZeitsperretypModel');
|
||||||
|
$this->load->model('ressource/Erreichbarkeit_model', 'ErreichbarkeitModel');
|
||||||
|
$this->load->model('ressource/Stunde_model', 'StundeModel');
|
||||||
|
$this->load->model('ressource/Zeitaufzeichnung_model', 'ZeitaufzeichnungModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZeitsperrenUser($uid)
|
||||||
|
{
|
||||||
|
//check if $uid is passedUser
|
||||||
|
$loggedInUser = getAuthUID();
|
||||||
|
if($loggedInUser != $uid) {
|
||||||
|
$this->load->library('PermissionLib');
|
||||||
|
$isAdmin = $this->permissionlib->isBerechtigt('admin');
|
||||||
|
if(!$isAdmin) {
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'noAdmin'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->ZeitsperreModel->getZeitsperrenUser($uid);
|
||||||
|
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTypenZeitsperren()
|
||||||
|
{
|
||||||
|
$this->ZeitsperretypModel->addOrder('beschreibung', 'ASC');
|
||||||
|
$result = $this->ZeitsperretypModel->load();
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTypenErreichbarkeit()
|
||||||
|
{
|
||||||
|
$result = $this->ErreichbarkeitModel->load();
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getStunden()
|
||||||
|
{
|
||||||
|
$this->StundeModel->addOrder('stunde', 'ASC');
|
||||||
|
$result = $this->StundeModel->load();
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function loadZeitsperre($zeitsperre_id)
|
||||||
|
{
|
||||||
|
$this->ZeitsperreModel->addSelect(
|
||||||
|
'campus.tbl_zeitsperre.*, typ.*,
|
||||||
|
ma.person_id AS ma_person_id, ma.vorname AS ma_vorname, ma.nachname AS ma_nachname,
|
||||||
|
ma.titelpre AS ma_titelpre, ma.titelpost AS ma_titelpost'
|
||||||
|
);
|
||||||
|
$this->ZeitsperreModel->addJoin('campus.tbl_zeitsperretyp typ', 'ON (typ.zeitsperretyp_kurzbz = campus.tbl_zeitsperre.zeitsperretyp_kurzbz)');
|
||||||
|
$this->ZeitsperreModel->addJoin('public.tbl_benutzer ben', 'ON (ben.uid = campus.tbl_zeitsperre.vertretung_uid)', 'LEFT');
|
||||||
|
$this->ZeitsperreModel->addJoin('public.tbl_person ma', 'ON (ma.person_id = ben.person_id)', 'LEFT');
|
||||||
|
$result = $this->ZeitsperreModel->loadWhere(
|
||||||
|
array('zeitsperre_id' => $zeitsperre_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess((current(getData($result)) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function add($mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
$loggedInUser = getAuthUID();
|
||||||
|
|
||||||
|
if($mitarbeiter_uid != $loggedInUser)
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'noPermission'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('zeitsperretyp_kurzbz', 'Grund Zeitsperre', 'required', [
|
||||||
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Grund Zeitsperre'])
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('vondatum', 'VonDatum', 'required|is_valid_date', [
|
||||||
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'VonDatum']),
|
||||||
|
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'VonDatum'])
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('bisdatum', 'BisDatum', 'required|is_valid_date|callback_check_von_bis_datum|callback_check_diff_intval', [
|
||||||
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'BisDatum']),
|
||||||
|
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'BisDatum']),
|
||||||
|
'check_von_bis_datum' => $this->p->t('zeitsperre', 'error_VonDatumGroesserAlsBisDatum'),
|
||||||
|
'check_diff_intval' => $this->p->t('zeitsperre', 'error_zeitraumAuffallendHoch')
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($this->form_validation->run() == false)
|
||||||
|
{
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
}
|
||||||
|
|
||||||
|
$bezeichnung = $this->input->post('bezeichnung');
|
||||||
|
$vondatum = $this->input->post('vondatum');
|
||||||
|
$vonstunde = $this->input->post('vonstunde');
|
||||||
|
$bisdatum = $this->input->post('bisdatum');
|
||||||
|
$bisstunde = $this->input->post('bisstunde');
|
||||||
|
//$vonIso = $this->input->post('vonISO'); //Timestamp für Stunde
|
||||||
|
//$bisIso = $this->input->post('bisISO'); //Timestamp für Stunde
|
||||||
|
$erreichbarkeit_kurzbz = $this->input->post('erreichbarkeit_kurzbz');
|
||||||
|
$vertretung_uid = $this->input->post('vertretung_uid');
|
||||||
|
$zeitsperretyp_kurzbz = $this->input->post('zeitsperretyp_kurzbz');
|
||||||
|
|
||||||
|
//check if existing zeitsperre
|
||||||
|
$result = $this->ZeitsperreModel->getSperreByDate($mitarbeiter_uid, $vondatum, $vonstunde, true);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('zeitsperren', 'error_existingZeitsperre', ['typ'=> current($data)->zeitsperretyp_kurzbz]), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//check if existing zeitaufzeichnung
|
||||||
|
if(in_array($zeitsperretyp_kurzbz, Zeitsperre_model::BLOCKIERENDE_ZEITSPERREN))
|
||||||
|
{
|
||||||
|
$result = $this->ZeitsperreModel->existsZeitaufzeichnung($mitarbeiter_uid, $vondatum, $bisdatum);
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
$this->terminateWithError($this->p->t('zeitsperren', 'error_existingZeitaufzeichnung'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->ZeitsperreModel->insert(
|
||||||
|
[
|
||||||
|
'mitarbeiter_uid' => $mitarbeiter_uid,
|
||||||
|
'bezeichnung' => $bezeichnung,
|
||||||
|
'vondatum' => $vondatum,
|
||||||
|
'vonstunde' => $vonstunde,
|
||||||
|
'bisdatum' => $bisdatum,
|
||||||
|
'bisstunde' => $bisstunde,
|
||||||
|
'erreichbarkeit_kurzbz' => $erreichbarkeit_kurzbz,
|
||||||
|
'zeitsperretyp_kurzbz' => $zeitsperretyp_kurzbz,
|
||||||
|
'vertretung_uid' => $vertretung_uid,
|
||||||
|
'insertvon' => $loggedInUser,
|
||||||
|
'insertamum' => date('c'),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update($zeitsperre_id)
|
||||||
|
{
|
||||||
|
//check if loggedin User is owner of the zeitsperre
|
||||||
|
$loggedInUser = getAuthUID();
|
||||||
|
$result = $this->ZeitsperreModel->load($zeitsperre_id);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$uid = current($data)->mitarbeiter_uid;
|
||||||
|
|
||||||
|
if($uid != $loggedInUser)
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'noPermission'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
if(!$zeitsperre_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Zeitsperre_id']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
//get current params
|
||||||
|
$array_update = [
|
||||||
|
'bezeichnung',
|
||||||
|
'vondatum',
|
||||||
|
'vonstunde',
|
||||||
|
'bisdatum',
|
||||||
|
'bisstunde',
|
||||||
|
// 'vonISO', //Timestamp für Stunde
|
||||||
|
// 'bisISO', //Timestamp für Stunde
|
||||||
|
'erreichbarkeit_kurzbz',
|
||||||
|
'vertretung_uid',
|
||||||
|
'zeitsperretyp_kurzbz',
|
||||||
|
'mitarbeiter_uid',
|
||||||
|
];
|
||||||
|
$post = $this->input->post();
|
||||||
|
$update = [];
|
||||||
|
|
||||||
|
foreach ($array_update as $prop)
|
||||||
|
{
|
||||||
|
if (array_key_exists($prop, $post))
|
||||||
|
{
|
||||||
|
$update[$prop] = $post[$prop];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validation
|
||||||
|
$rulesDefined = false; //necessary, otherwise CI validation will always be triggered, even without rules
|
||||||
|
foreach ($update as $key => $val) {
|
||||||
|
switch ($key) {
|
||||||
|
case 'zeitsperretyp_kurzbz':
|
||||||
|
$this->form_validation->set_rules(
|
||||||
|
$key,
|
||||||
|
'Grund Zeitsperre',
|
||||||
|
'required',
|
||||||
|
['required' => $this->p->t('ui', 'error_fieldRequired', ['field'=>'Grund Zeitsperre'])]
|
||||||
|
);
|
||||||
|
$rulesDefined = true;
|
||||||
|
break;
|
||||||
|
case 'vondatum':
|
||||||
|
$this->form_validation->set_rules(
|
||||||
|
$key,
|
||||||
|
'VonDatum',
|
||||||
|
'required|is_valid_date',
|
||||||
|
[
|
||||||
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field'=>'VonDatum']),
|
||||||
|
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field'=>'VonDatum'])
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$rulesDefined = true;
|
||||||
|
break;
|
||||||
|
case 'bisdatum':
|
||||||
|
$rules = 'required|is_valid_date';
|
||||||
|
if (array_key_exists('vondatum', $update)) {
|
||||||
|
$rules .= '|callback_check_von_bis_datum|callback_check_diff_intval';
|
||||||
|
}
|
||||||
|
$this->form_validation->set_rules(
|
||||||
|
$key,
|
||||||
|
'BisDatum',
|
||||||
|
$rules,
|
||||||
|
[
|
||||||
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field'=>'BisDatum']),
|
||||||
|
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field'=>'BisDatum']),
|
||||||
|
'check_von_bis_datum' => $this->p->t('zeitsperre', 'error_VonDatumGroesserAlsBisDatum'),
|
||||||
|
'check_diff_intval' => $this->p->t('zeitsperre', 'error_zeitraumAuffallendHoch')
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$rulesDefined = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($rulesDefined && $this->form_validation->run() == false) {
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(array_key_exists('vondatum', $post) || array_key_exists('bisdatum', $post))
|
||||||
|
{
|
||||||
|
$result = $this->ZeitsperreModel->load($zeitsperre_id);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$data = current($data);
|
||||||
|
|
||||||
|
$mitarbeiter_uid = array_key_exists('mitarbeiter_uid', $post) ? $update['mitarbeiter_uid'] : $data->mitarbeiter_uid;
|
||||||
|
$vondatum = array_key_exists('vondatum', $post) ? $update['vondatum'] : $data->vondatum;
|
||||||
|
$bisdatum = array_key_exists('bisdatum', $post) ? $update['bisdatum'] : $data->bisdatum;
|
||||||
|
$vonstunde = array_key_exists('vonstunde', $post) ? $update['vonstunde'] : $data->vonstunde;
|
||||||
|
$zeitsperretyp_kurzbz = array_key_exists('zeitsperretyp_kurzbz', $post) ? $update['zeitsperretyp_kurzbz'] : $data->zeitsperretyp_kurzbz;
|
||||||
|
|
||||||
|
$result = $this->ZeitsperreModel->getSperreByDate($mitarbeiter_uid, $vondatum, $vonstunde, true);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('zeitsperren', 'error_existingZeitsperre', ['typ'=> current($data)->zeitsperretyp_kurzbz]), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//check if existing zeitaufzeichnung
|
||||||
|
if(in_array($zeitsperretyp_kurzbz, Zeitsperre_model::BLOCKIERENDE_ZEITSPERREN))
|
||||||
|
{
|
||||||
|
$result = $this->ZeitsperreModel->existsZeitaufzeichnung($mitarbeiter_uid, $vondatum, $bisdatum);
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
$this->terminateWithError($this->p->t('zeitsperren', 'error_existingZeitaufzeichnung'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($update)) {
|
||||||
|
$update['updatevon'] = $loggedInUser;
|
||||||
|
$update['updateamum'] = date('c');
|
||||||
|
$result = $this->ZeitsperreModel->update($zeitsperre_id, $update);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$this->terminateWithSuccess("no update");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete($zeitsperre_id)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!is_numeric($zeitsperre_id) || (int)$zeitsperre_id <= 0)
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Zeitsperre_id']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//check if loggedin User is owner of the zeitsperre
|
||||||
|
$loggedInUser = getAuthUID();
|
||||||
|
$result = $this->ZeitsperreModel->load($zeitsperre_id);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$uid = current($data)->mitarbeiter_uid;
|
||||||
|
|
||||||
|
if($uid != $loggedInUser)
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'noPermission'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$result = $this->ZeitsperreModel->delete(
|
||||||
|
array('zeitsperre_id' => $zeitsperre_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function check_von_bis_datum($bisdatum)
|
||||||
|
{
|
||||||
|
$vondatum = $this->input->post('vondatum');
|
||||||
|
|
||||||
|
return $vondatum <= $bisdatum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function check_diff_intval($bisdatum)
|
||||||
|
{
|
||||||
|
$vondatum = $this->input->post('vondatum');
|
||||||
|
|
||||||
|
// Intervall in days
|
||||||
|
$vonTs = strtotime($vondatum);
|
||||||
|
$bisTs = strtotime($bisdatum);
|
||||||
|
|
||||||
|
$tage = ($bisTs - $vonTs) / 86400;
|
||||||
|
|
||||||
|
// if intervall > 14
|
||||||
|
return $tage <= 14;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,232 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2024 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class RoomPlan extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object initialization
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'addRoomReservation' => self::PERM_LOGGED,
|
||||||
|
'deleteRoomReservation' => self::PERM_LOGGED,
|
||||||
|
'getRoomCreationInfo' => self::PERM_LOGGED,
|
||||||
|
'getGruppen' => self::PERM_LOGGED,
|
||||||
|
'getLektor' => self::PERM_LOGGED,
|
||||||
|
'getReservableMap' => self::PERM_LOGGED,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->load->library('LogLib');
|
||||||
|
$this->loglib->setConfigs(array(
|
||||||
|
'classIndex' => 5,
|
||||||
|
'functionIndex' => 5,
|
||||||
|
'lineIndex' => 4,
|
||||||
|
'dbLogType' => 'API',
|
||||||
|
'dbExecuteUser' => 'RESTful API'
|
||||||
|
));
|
||||||
|
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
$this->load->library('PermissionLib');
|
||||||
|
$this->load->library('StundenplanLib');
|
||||||
|
|
||||||
|
$this->loadPhrases(['ui']);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function addRoomReservation()
|
||||||
|
{
|
||||||
|
$this->form_validation->set_rules('selectedStart', "Start", "required");
|
||||||
|
$this->form_validation->set_rules('selectedEnd', "End", "required");
|
||||||
|
$this->form_validation->set_rules('title', "Title", "required|max_length[10]");
|
||||||
|
$this->form_validation->set_rules('beschreibung', "Beschreibung", "required|max_length[32]");
|
||||||
|
$this->form_validation->set_rules('ort_kurzbz', "Ort", "required|max_length[16]");
|
||||||
|
$this->form_validation->set_rules('studiengang', 'Studiengang', 'numeric');
|
||||||
|
$this->form_validation->set_rules('semester', 'Semester', 'integer|greater_than_equal_to[0]');
|
||||||
|
$this->form_validation->set_rules('verband', 'Verband', 'trim');
|
||||||
|
$this->form_validation->set_rules('gruppe', 'Gruppe', 'trim');
|
||||||
|
$this->form_validation->set_rules('spezialgruppe', 'Spezialgruppe', 'max_length[32]');
|
||||||
|
$this->form_validation->set_rules('lektoren', 'Lektoren');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$start = $this->input->post('selectedStart');
|
||||||
|
$end = $this->input->post('selectedEnd');
|
||||||
|
$title = $this->input->post('title');
|
||||||
|
$beschreibung = $this->input->post('beschreibung');
|
||||||
|
$ort_kurzbz = $this->input->post('ort_kurzbz');
|
||||||
|
|
||||||
|
$studiengang_kz = $this->input->post('studiengang');
|
||||||
|
$semester = $this->input->post('semester');
|
||||||
|
$verband = $this->input->post('verband');
|
||||||
|
$gruppe = $this->input->post('gruppe');
|
||||||
|
$spezialgruppe = $this->input->post('spezialgruppe');
|
||||||
|
$lektoren = $this->input->post('lektoren');
|
||||||
|
|
||||||
|
|
||||||
|
$result = $this->stundenplanlib->addReservation($start, $end, $title, $beschreibung, $ort_kurzbz, $lektoren, $studiengang_kz, $semester, $verband, $gruppe, $spezialgruppe);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteRoomReservation()
|
||||||
|
{
|
||||||
|
$reservierung_id = $this->input->post('reservierung_id');
|
||||||
|
|
||||||
|
$result = $this->stundenplanlib->deleteReservation($reservierung_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRoomCreationInfo()
|
||||||
|
{
|
||||||
|
$return_array = array('berechtigt' => false, 'studiengaenge' => []);
|
||||||
|
if (!$this->permissionlib->isBerechtigt('lehre/reservierung'))
|
||||||
|
$this->terminateWithSuccess($return_array);
|
||||||
|
|
||||||
|
$stg_berechtigungen = $this->permissionlib->getSTG_isEntitledFor('lehre/reservierung');
|
||||||
|
if (isEmptyArray($stg_berechtigungen))
|
||||||
|
$this->terminateWithSuccess($return_array);
|
||||||
|
|
||||||
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
|
$this->StudiengangModel->addSelect('studiengang_kz, UPPER(CONCAT(typ, kurzbz)) as kuerzel, kurzbzlang');
|
||||||
|
$this->StudiengangModel->addOrder('typ, kurzbz');
|
||||||
|
$this->StudiengangModel->db->where_in('studiengang_kz', $stg_berechtigungen);
|
||||||
|
$studiengaenge = $this->StudiengangModel->loadWhere(array('aktiv' => true));
|
||||||
|
|
||||||
|
if (isError($studiengaenge))
|
||||||
|
$this->terminateWithError($studiengaenge);
|
||||||
|
|
||||||
|
$return_array['studiengaenge'] = hasData($studiengaenge) ? getData($studiengaenge) : [];
|
||||||
|
$return_array['berechtigt'] = true;
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($return_array);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getGruppen()
|
||||||
|
{
|
||||||
|
$query = $this->input->get('query');
|
||||||
|
if (is_null($query))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$stg_berechtigungen = $this->permissionlib->getSTG_isEntitledFor('lehre/reservierung');
|
||||||
|
|
||||||
|
if (isEmptyArray($stg_berechtigungen))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
|
||||||
|
$this->load->model('organisation/gruppe_model', 'GruppeModel');
|
||||||
|
|
||||||
|
$query_words = explode(' ', urldecode($query));
|
||||||
|
|
||||||
|
$this->GruppeModel->addOrder('gruppe_kurzbz');
|
||||||
|
$this->GruppeModel->db->group_start();
|
||||||
|
foreach ($query_words as $word)
|
||||||
|
{
|
||||||
|
$this->GruppeModel->db->group_start();
|
||||||
|
$this->GruppeModel->db->where('gruppe_kurzbz ILIKE', "%" . $word . "%");
|
||||||
|
$this->GruppeModel->db->or_where('bezeichnung ILIKE', "%" . $word . "%");
|
||||||
|
$this->GruppeModel->db->or_where('beschreibung ILIKE', "%" . $word . "%");
|
||||||
|
$this->GruppeModel->db->or_where('orgform_kurzbz ILIKE', "%" . $word . "%");
|
||||||
|
|
||||||
|
if (is_numeric($word))
|
||||||
|
{
|
||||||
|
$this->GruppeModel->db->or_where('studiengang_kz', $word);
|
||||||
|
}
|
||||||
|
$this->GruppeModel->db->group_end();
|
||||||
|
}
|
||||||
|
$this->GruppeModel->db->group_end();
|
||||||
|
$this->GruppeModel->db->where_in('studiengang_kz', $stg_berechtigungen);
|
||||||
|
$gruppen = $this->GruppeModel->loadWhere(array('sichtbar' => true, 'lehre' => true));
|
||||||
|
if (isError($gruppen))
|
||||||
|
$this->terminateWithError($gruppen);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(hasData($gruppen) ? getData($gruppen) : []);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLektor()
|
||||||
|
{
|
||||||
|
|
||||||
|
$query = $this->input->get('query');
|
||||||
|
if (is_null($query))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$stg_berechtigungen = $this->permissionlib->getSTG_isEntitledFor('lehre/reservierung');
|
||||||
|
|
||||||
|
if (isEmptyArray($stg_berechtigungen))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||||
|
|
||||||
|
$query_words = explode(' ', urldecode($query));
|
||||||
|
|
||||||
|
$this->MitarbeiterModel->addSelect('uid, person_id, vorname, nachname');
|
||||||
|
$this->MitarbeiterModel->addJoin('public.tbl_benutzer', 'uid = mitarbeiter_uid');
|
||||||
|
$this->MitarbeiterModel->addJoin('public.tbl_person', 'person_id');
|
||||||
|
$this->MitarbeiterModel->db->where('public.tbl_benutzer.aktiv', true);
|
||||||
|
$this->MitarbeiterModel->db->group_start();
|
||||||
|
foreach ($query_words as $word)
|
||||||
|
{
|
||||||
|
$this->MitarbeiterModel->db->group_start();
|
||||||
|
$this->MitarbeiterModel->db->where('tbl_person.vorname ILIKE', "%" . $word . "%");
|
||||||
|
$this->MitarbeiterModel->db->or_where('tbl_person.nachname ILIKE', "%" . $word . "%");
|
||||||
|
$this->MitarbeiterModel->db->or_where('uid ILIKE', "%" . $word . "%");
|
||||||
|
$this->MitarbeiterModel->db->group_end();
|
||||||
|
}
|
||||||
|
$this->MitarbeiterModel->db->group_end();
|
||||||
|
|
||||||
|
$this->MitarbeiterModel->addOrder('nachname');
|
||||||
|
$this->MitarbeiterModel->addOrder('vorname');
|
||||||
|
$mitarbeiter = $this->MitarbeiterModel->load();
|
||||||
|
if (isError($mitarbeiter))
|
||||||
|
$this->terminateWithError($mitarbeiter);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(hasData($mitarbeiter) ? getData($mitarbeiter) : []);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getReservableMap($ort_kurzbz = null)
|
||||||
|
{
|
||||||
|
$this->form_validation->set_rules('start_date', "StartDate", "required");
|
||||||
|
$this->form_validation->set_rules('end_date', "EndDate", "required");
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
// storing the post parameter in local variables
|
||||||
|
$start_date = $this->input->post('start_date', true);
|
||||||
|
$end_date = $this->input->post('end_date', true);
|
||||||
|
|
||||||
|
$result = $this->stundenplanlib->getReservableMap($ort_kurzbz, $start_date, $end_date);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(array('reservierbarMap' => hasData($result) ? getData($result) : []));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2026 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||||
|
* Provides data to the ajax get calls about addresses
|
||||||
|
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||||
|
*/
|
||||||
|
class Board extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'list' => 'dashboard/admin:r',
|
||||||
|
'create' => 'dashboard/admin:rw',
|
||||||
|
'update' => 'dashboard/admin:rw',
|
||||||
|
'delete' => 'dashboard/admin:rw'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Models
|
||||||
|
$this->load->model('dashboard/Dashboard_model', 'DashboardModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function list()
|
||||||
|
{
|
||||||
|
$this->DashboardModel->addSelect('dashboard_id');
|
||||||
|
$this->DashboardModel->addSelect('dashboard_kurzbz');
|
||||||
|
$this->DashboardModel->addSelect('tbl_dashboard.beschreibung');
|
||||||
|
$this->DashboardModel->addSelect("(
|
||||||
|
SELECT json_agg(w.*)
|
||||||
|
FROM dashboard.tbl_widget w
|
||||||
|
JOIN dashboard.tbl_dashboard_widget dw
|
||||||
|
USING(widget_id)
|
||||||
|
WHERE dw.dashboard_id=tbl_dashboard.dashboard_id
|
||||||
|
) AS \"widgetSetup\"");
|
||||||
|
|
||||||
|
$result = $this->DashboardModel->load();
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$data = array_map(function ($dashboard) {
|
||||||
|
$tmpSetups = json_decode($dashboard->widgetSetup);
|
||||||
|
$tmpSetups = array_map(function ($widget) {
|
||||||
|
$widget->setup->file = absoluteJsImportUrl($widget->setup->file);
|
||||||
|
return $widget;
|
||||||
|
}, $tmpSetups);
|
||||||
|
$dashboard->widgetSetup = $tmpSetups;
|
||||||
|
return $dashboard;
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
$dashboard_kurzbz = $this->input->post('dashboard_kurzbz');
|
||||||
|
|
||||||
|
$result = $this->DashboardModel->insert([
|
||||||
|
'dashboard_kurzbz' => $dashboard_kurzbz
|
||||||
|
]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('dashboard_id', 'Dashboard ID', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$dashboard_id = $this->input->post('dashboard_id');
|
||||||
|
$dashboard_kurzbz = $this->input->post('dashboard_kurzbz');
|
||||||
|
$beschreibung = $this->input->post('beschreibung');
|
||||||
|
|
||||||
|
$result = $this->DashboardModel->update([
|
||||||
|
'dashboard_id' => $dashboard_id
|
||||||
|
], [
|
||||||
|
'dashboard_kurzbz' => $dashboard_kurzbz,
|
||||||
|
'beschreibung' => $beschreibung
|
||||||
|
]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('dashboard_id', 'Dashboard ID', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$dashboard_id = $this->input->post('dashboard_id');
|
||||||
|
|
||||||
|
//delete all presets
|
||||||
|
$this->load->model('dashboard/Dashboard_Preset_model', 'DashboardPresetModel');
|
||||||
|
|
||||||
|
$result = $this->DashboardPresetModel->delete([
|
||||||
|
'dashboard_id' => $dashboard_id
|
||||||
|
]);
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
//delete all widgets
|
||||||
|
$this->load->model('dashboard/Dashboard_Widget_model', 'DashboardWidgetModel');
|
||||||
|
|
||||||
|
$result = $this->DashboardWidgetModel->delete([
|
||||||
|
'dashboard_id' => $dashboard_id
|
||||||
|
]);
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$result = $this->DashboardModel->delete($dashboard_id);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2026 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||||
|
* Provides data to the ajax get calls about addresses
|
||||||
|
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||||
|
*/
|
||||||
|
class Preset extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'list' => 'dashboard/admin:r',
|
||||||
|
'getBatch' => 'dashboard/admin:r',
|
||||||
|
'addWidget' => 'dashboard/admin:rw',
|
||||||
|
'removeWidget' => 'dashboard/admin:rw'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Libraries
|
||||||
|
$this->load->library('dashboard/DashboardLib');
|
||||||
|
|
||||||
|
// Models
|
||||||
|
$this->load->model('ressource/Funktion_model', 'FunktionModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function list($dashboard_kurzbz)
|
||||||
|
{
|
||||||
|
$sql = "
|
||||||
|
WITH
|
||||||
|
dashboard_presets AS (
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM
|
||||||
|
dashboard.tbl_dashboard_preset dp
|
||||||
|
JOIN
|
||||||
|
dashboard.tbl_dashboard d ON d.dashboard_id = dp.dashboard_id
|
||||||
|
WHERE
|
||||||
|
d.dashboard_kurzbz = {$this->db->escape($dashboard_kurzbz)}
|
||||||
|
),
|
||||||
|
general AS (
|
||||||
|
SELECT
|
||||||
|
'general' AS funktion_kurzbz,
|
||||||
|
'Allgemein' AS beschreibung
|
||||||
|
)
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
f.funktion_kurzbz,
|
||||||
|
f.beschreibung,
|
||||||
|
COUNT(p.preset_id) AS has_preset
|
||||||
|
FROM
|
||||||
|
general f
|
||||||
|
LEFT JOIN
|
||||||
|
dashboard_presets p ON p.funktion_kurzbz IS NULL
|
||||||
|
GROUP BY
|
||||||
|
f.funktion_kurzbz, f.beschreibung
|
||||||
|
)
|
||||||
|
UNION ALL
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
f.funktion_kurzbz,
|
||||||
|
f.beschreibung,
|
||||||
|
COUNT(p.preset_id) AS has_preset
|
||||||
|
FROM
|
||||||
|
public.tbl_funktion f
|
||||||
|
LEFT JOIN
|
||||||
|
dashboard_presets p ON p.funktion_kurzbz = f.funktion_kurzbz
|
||||||
|
GROUP BY
|
||||||
|
f.funktion_kurzbz, f.beschreibung
|
||||||
|
ORDER BY
|
||||||
|
f.beschreibung ASC
|
||||||
|
)
|
||||||
|
";
|
||||||
|
|
||||||
|
$result = $this->FunktionModel->execReadOnlyQuery($sql);
|
||||||
|
|
||||||
|
$funktionen = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($funktionen);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBatch()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('db', 'Dashboard', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$db = $this->input->post('db');
|
||||||
|
$funktionen = $this->input->post('funktionen') ?: [];
|
||||||
|
|
||||||
|
$result = [];
|
||||||
|
|
||||||
|
foreach ($funktionen as $funktion) {
|
||||||
|
$conf = $this->dashboardlib->getPreset($db, $funktion);
|
||||||
|
if ($conf) {
|
||||||
|
$preset = json_decode($conf->preset, true);
|
||||||
|
$result[$funktion] = $preset;
|
||||||
|
} else {
|
||||||
|
$result[$funktion] = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addWidget()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('dashboard', 'Dashboard', 'required');
|
||||||
|
$this->form_validation->set_rules('funktion_kurzbz', 'Funktion', 'required');
|
||||||
|
$this->form_validation->set_rules('widget[widget]', 'Widget', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$dashboard_kurzbz = $this->input->post('dashboard');
|
||||||
|
$funktion_kurzbz = $this->input->post('funktion_kurzbz');
|
||||||
|
$widget = $this->input->post('widget');
|
||||||
|
|
||||||
|
if (!isset($widget['widgetid']))
|
||||||
|
$widget['widgetid'] = $this->dashboardlib->generateWidgetId($dashboard_kurzbz);
|
||||||
|
|
||||||
|
$preset = $this->dashboardlib->getPresetOrCreateEmptyPreset($dashboard_kurzbz, $funktion_kurzbz);
|
||||||
|
|
||||||
|
$preset_decoded = json_decode($preset->preset, true);
|
||||||
|
|
||||||
|
$preset_decoded[$widget['widgetid']] = $widget;
|
||||||
|
|
||||||
|
$preset->preset = json_encode($preset_decoded);
|
||||||
|
|
||||||
|
$result = $this->dashboardlib->insertOrUpdatePreset($preset);
|
||||||
|
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($widget['widgetid']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeWidget()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('db', 'Dashboard', 'required');
|
||||||
|
$this->form_validation->set_rules('funktion_kurzbz', 'Funktion', 'required');
|
||||||
|
$this->form_validation->set_rules('widgetid', 'Widget', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$dashboard_kurzbz = $this->input->post('db');
|
||||||
|
$funktion_kurzbz = $this->input->post('funktion_kurzbz');
|
||||||
|
$widgetid = $this->input->post('widgetid');
|
||||||
|
|
||||||
|
$preset = $this->dashboardlib->getPreset($dashboard_kurzbz, $funktion_kurzbz);
|
||||||
|
if (!$preset)
|
||||||
|
show_404();
|
||||||
|
|
||||||
|
$preset_decoded = json_decode($preset->preset, true);
|
||||||
|
|
||||||
|
if (!isset($preset_decoded[$widgetid]))
|
||||||
|
show_404();
|
||||||
|
|
||||||
|
unset($preset_decoded[$widgetid]);
|
||||||
|
|
||||||
|
$preset->preset = json_encode($preset_decoded);
|
||||||
|
|
||||||
|
$result = $this->dashboardlib->insertOrUpdatePreset($preset);
|
||||||
|
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(array('msg' => $this->p->t('dashboard', 'success_savePreset')));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2026 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||||
|
* Provides data to the ajax get calls about the users dashboard
|
||||||
|
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||||
|
*/
|
||||||
|
class User extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'get' => 'dashboard/benutzer:r',
|
||||||
|
'addWidget' => 'dashboard/benutzer:rw',
|
||||||
|
'removeWidget' => 'dashboard/benutzer:rw'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Libraries
|
||||||
|
$this->load->library('dashboard/DashboardLib');
|
||||||
|
|
||||||
|
// Models
|
||||||
|
$this->load->model('ressource/Funktion_model', 'FunktionModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function get($dashboard_kurzbz)
|
||||||
|
{
|
||||||
|
$dashboard = $this->dashboardlib->getDashboardByKurzbz($dashboard_kurzbz);
|
||||||
|
if (!$dashboard)
|
||||||
|
show_404();
|
||||||
|
|
||||||
|
$uid = $this->authlib->getAuthObj()->username;
|
||||||
|
|
||||||
|
$mergedconfig = $this->dashboardlib->getMergedUserConfig($dashboard->dashboard_id, $uid);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($mergedconfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addWidget()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('dashboard', 'Dashboard', 'required');
|
||||||
|
$this->form_validation->set_rules('widget[widget]', 'Widget', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$widget = $this->input->post('widget');
|
||||||
|
$dashboard_kurzbz = $this->input->post('dashboard');
|
||||||
|
$uid = $this->authlib->getAuthObj()->username;
|
||||||
|
|
||||||
|
if (!isset($widget['widgetid']))
|
||||||
|
$widget['widgetid'] = $this->dashboardlib->generateWidgetId($dashboard_kurzbz);
|
||||||
|
|
||||||
|
if (isset($widget['source']))
|
||||||
|
unset($widget['source']);
|
||||||
|
|
||||||
|
$override = $this->dashboardlib->getOverrideOrCreateEmptyOverride($dashboard_kurzbz, $uid);
|
||||||
|
|
||||||
|
$override_decoded = json_decode($override->override, true);
|
||||||
|
|
||||||
|
$override_decoded[$widget['widgetid']] = $widget;
|
||||||
|
|
||||||
|
$override->override = json_encode($override_decoded);
|
||||||
|
|
||||||
|
$result = $this->dashboardlib->insertOrUpdateOverride($override);
|
||||||
|
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($widget['widgetid']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeWidget()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('dashboard', 'Dashboard', 'required');
|
||||||
|
$this->form_validation->set_rules('widget', 'Widget', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$widget_id = $this->input->post('widget');
|
||||||
|
$dashboard_kurzbz = $this->input->post('dashboard');
|
||||||
|
$uid = $this->authlib->getAuthObj()->username;
|
||||||
|
|
||||||
|
$override = $this->dashboardlib->getOverride($dashboard_kurzbz, $uid);
|
||||||
|
if (!$override)
|
||||||
|
show_404();
|
||||||
|
|
||||||
|
$override_decoded = json_decode($override->override, true);
|
||||||
|
|
||||||
|
if (!isset($override_decoded[$widget_id]))
|
||||||
|
show_404();
|
||||||
|
|
||||||
|
unset($override_decoded[$widget_id]);
|
||||||
|
|
||||||
|
$override->override = json_encode($override_decoded);
|
||||||
|
|
||||||
|
$result = $this->dashboardlib->insertOrUpdateOverride($override);
|
||||||
|
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2026 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||||
|
* Provides data to the ajax get calls about the users dashboard
|
||||||
|
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||||
|
*/
|
||||||
|
class Widget extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'get' => ['dashboard/benutzer:r', 'dashboard/admin:r'],
|
||||||
|
'list' => 'dashboard/admin:r',
|
||||||
|
'listAllowed' => ['dashboard/benutzer:rw', 'dashboard/admin:r'],
|
||||||
|
'setAllowed' => 'dashboard/admin:rw'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Libraries
|
||||||
|
$this->load->library('dashboard/DashboardLib');
|
||||||
|
|
||||||
|
// Models
|
||||||
|
$this->load->model('dashboard/Widget_model', 'WidgetModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function get($id)
|
||||||
|
{
|
||||||
|
$result = $this->WidgetModel->load($id);
|
||||||
|
|
||||||
|
$widget = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
if (!$widget)
|
||||||
|
return $this->terminateWithSuccess([
|
||||||
|
"widget_id" => 0,
|
||||||
|
"widget_kurzbz" => "notfound",
|
||||||
|
"arguments" => [
|
||||||
|
"className" => 'alert-danger',
|
||||||
|
"title" => 'Widget Not Found',
|
||||||
|
"msg" => 'The widget with the id ' . $id . ' could not be found'
|
||||||
|
],
|
||||||
|
"setup" => [
|
||||||
|
"name" => 'Widget Not Found',
|
||||||
|
"file" => absoluteJsImportUrl('public/js/components/DashboardWidget/Default.js'),
|
||||||
|
"width" => 1,
|
||||||
|
"height" => 1
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$widget = current($widget);
|
||||||
|
$widget->arguments = json_decode($widget->arguments);
|
||||||
|
$tmpsetup = json_decode($widget->setup);
|
||||||
|
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||||
|
$widget->setup = $tmpsetup;
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function list($dashboard)
|
||||||
|
{
|
||||||
|
$result = $this->WidgetModel->getWithAllowedForDashboard($dashboard);
|
||||||
|
|
||||||
|
$widgets = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$widgets = array_map(function ($widget) {
|
||||||
|
$widget->arguments = json_decode($widget->arguments);
|
||||||
|
$tmpsetup = json_decode($widget->setup);
|
||||||
|
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||||
|
$widget->setup = $tmpsetup;
|
||||||
|
return $widget;
|
||||||
|
}, $widgets);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($widgets);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function listAllowed($dashboard)
|
||||||
|
{
|
||||||
|
$result = $this->WidgetModel->getForDashboard($dashboard);
|
||||||
|
|
||||||
|
$widgets = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$widgets = array_map(function ($widget) {
|
||||||
|
$widget->arguments = json_decode($widget->arguments);
|
||||||
|
$tmpsetup = json_decode($widget->setup);
|
||||||
|
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||||
|
$widget->setup = $tmpsetup;
|
||||||
|
return $widget;
|
||||||
|
}, $widgets);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($widgets);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAllowed()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('dashboard_id', 'Dashboard', 'required');
|
||||||
|
$this->form_validation->set_rules('widget_id', 'Widget', 'required');
|
||||||
|
$this->form_validation->set_rules('allowed', 'Allowed', 'is_bool');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'dashboard_id' => $this->input->post('dashboard_id'),
|
||||||
|
'widget_id' => $this->input->post('widget_id')
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->load->model('dashboard/Dashboard_Widget_model', 'DashboardWidgetModel');
|
||||||
|
|
||||||
|
if ($this->input->post('allowed'))
|
||||||
|
$result = $this->DashboardWidgetModel->insert($data);
|
||||||
|
else
|
||||||
|
$result = $this->DashboardWidgetModel->delete($data);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class Detailheader extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getHeader' => self::PERM_LOGGED,
|
||||||
|
'getPersonAbteilung' => self::PERM_LOGGED,
|
||||||
|
'getLeitungOrg' => self::PERM_LOGGED,
|
||||||
|
'getSemesterStati' => self::PERM_LOGGED,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHeader($person_id)
|
||||||
|
{
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
||||||
|
|
||||||
|
$result = $this->Mitarbeitermodel->getHeader($person_id);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(current($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPersonAbteilung($mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
||||||
|
|
||||||
|
$result = $this->Mitarbeitermodel->getPersonAbteilung($mitarbeiter_uid);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(current($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLeitungOrg($oekurzbz)
|
||||||
|
{
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
||||||
|
|
||||||
|
$result = $this->Mitarbeitermodel->getLeitungOrg($oekurzbz);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(current($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSemesterStati($prestudent_id)
|
||||||
|
{
|
||||||
|
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||||
|
|
||||||
|
$result = $this->PrestudentstatusModel->getAllPrestudentstatiWithStudiensemester($prestudent_id);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,218 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FH-Complete
|
||||||
|
*
|
||||||
|
* @package FHC-API
|
||||||
|
* @author FHC-Team
|
||||||
|
* @copyright Copyright (c) 2016, fhcomplete.org
|
||||||
|
* @license GPLv3
|
||||||
|
* @link http://fhcomplete.org
|
||||||
|
* @since Version 1.0
|
||||||
|
* @filesource
|
||||||
|
*/
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use CI3_Events as Events;
|
||||||
|
|
||||||
|
class PaabgabeUebersicht extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
const DOWNLOAD_PERMISSION = 'lehre/abgabetool:download';
|
||||||
|
const ABGABE_TYPES = ['Bachelor', 'Diplom'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PaabgabeUebersicht API constructor.
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'viewData' => self::PERM_LOGGED,
|
||||||
|
'getPaAbgaben' => array('lehre/abgabetool:r'),
|
||||||
|
'getStudiengaenge' => array('lehre/abgabetool:r'),
|
||||||
|
'getTermine' => array('lehre/abgabetool:r'),
|
||||||
|
'getPaAbgabetypen' => array('lehre/abgabetool:r'),
|
||||||
|
'downloadZip' => array('lehre/abgabetool:r'),
|
||||||
|
//'downloadProjektarbeit' => array('lehre/abgabetool:r')
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
||||||
|
|
||||||
|
$this->load->library('PermissionLib');
|
||||||
|
|
||||||
|
// Load Phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'abgabetool'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function viewData()
|
||||||
|
{
|
||||||
|
$viewData = [
|
||||||
|
"uid" => getAuthUID(),
|
||||||
|
// TODO create permission
|
||||||
|
"showEdit" => true,
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($viewData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Projektabgaben for search criteria.
|
||||||
|
*/
|
||||||
|
public function getPaAbgaben()
|
||||||
|
{
|
||||||
|
$studiengang_kz = $this->input->get('studiengang_kz');
|
||||||
|
$abgabetyp_kurzbz = $this->input->get('abgabetyp_kurzbz');
|
||||||
|
$abgabedatum = $this->input->get('abgabedatum');
|
||||||
|
$personSearchString = $this->input->get('personSearchString');
|
||||||
|
|
||||||
|
$result = $this->PaabgabeModel->getPaAbgaben(self::ABGABE_TYPES, $studiengang_kz, $abgabetyp_kurzbz, $abgabedatum, $personSearchString);
|
||||||
|
|
||||||
|
if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_DB);
|
||||||
|
|
||||||
|
// check wether Abgabe is in visual library
|
||||||
|
if (hasData($result))
|
||||||
|
{
|
||||||
|
Events::trigger('in_visual_library', getData($result));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(getData($result) ?: []);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all Studiengänge for which user is entitled for
|
||||||
|
*/
|
||||||
|
public function getStudiengaenge()
|
||||||
|
{
|
||||||
|
$studiengang_kz_arr = $this->permissionlib->getSTG_isEntitledFor(self::DOWNLOAD_PERMISSION);
|
||||||
|
|
||||||
|
if (!$studiengang_kz_arr) $this->terminateWithSuccess([]);
|
||||||
|
|
||||||
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
|
|
||||||
|
$this->StudiengangModel->addSelect('tbl_studiengang.*, UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz) AS kuerzel', $studiengang_kz_arr);
|
||||||
|
$this->StudiengangModel->db->where_in('studiengang_kz', $studiengang_kz_arr);
|
||||||
|
$this->StudiengangModel->addOrder('typ, kurzbz');
|
||||||
|
$result = $this->StudiengangModel->load();
|
||||||
|
|
||||||
|
if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_DB);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get projekt work due dates, depending on search criteria.
|
||||||
|
*/
|
||||||
|
public function getTermine()
|
||||||
|
{
|
||||||
|
$studiengang_kz = $this->input->get('studiengang_kz');
|
||||||
|
$abgabetyp_kurzbz = $this->input->get('abgabetyp_kurzbz');
|
||||||
|
|
||||||
|
$result = $this->PaabgabeModel->getTermine(self::ABGABE_TYPES, $studiengang_kz, $abgabetyp_kurzbz);
|
||||||
|
|
||||||
|
if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_DB);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all submission types.
|
||||||
|
*/
|
||||||
|
public function getPaAbgabetypen()
|
||||||
|
{
|
||||||
|
// Load model PaabgabetypModel
|
||||||
|
$this->load->model('education/Paabgabetyp_model', 'PaabgabetypModel');
|
||||||
|
|
||||||
|
$this->PaabgabetypModel->addOrder('bezeichnung');
|
||||||
|
$result = $this->PaabgabetypModel->load();
|
||||||
|
|
||||||
|
if (isError($result)) $this->terminateWithError(getError($result), self::ERROR_TYPE_DB);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Download zip files with project works matching submission search criteria.
|
||||||
|
*/
|
||||||
|
public function downloadZip()
|
||||||
|
{
|
||||||
|
$studiengang_kz = $this->input->get('studiengang_kz');
|
||||||
|
$abgabetyp_kurzbz = $this->input->get('abgabetyp_kurzbz');
|
||||||
|
$abgabedatum = $this->input->get('abgabedatum');
|
||||||
|
$personSearchString = $this->input->get('personSearchString');
|
||||||
|
|
||||||
|
if (!isset($studiengang_kz) && !isset($abgabetyp_kurzbz) && !isset($abgabedatum) && !isset($personSearchString))
|
||||||
|
$this->terminateWithFileOutput('text/plain', $this->p->t('abgabetool', 'nichtsAusgewaehlt'));
|
||||||
|
|
||||||
|
$this->load->library('zip');
|
||||||
|
|
||||||
|
$result = $this->PaabgabeModel->getPaAbgaben(self::ABGABE_TYPES, $studiengang_kz, $abgabetyp_kurzbz, $abgabedatum, $personSearchString);
|
||||||
|
|
||||||
|
if (isError($result)) $this->terminateWithFileOutput('text/plain', getError($result));
|
||||||
|
|
||||||
|
$fileExists = false;
|
||||||
|
$studiengang_kuerzel = null;
|
||||||
|
|
||||||
|
if (!hasData($result)) $this->terminateWithFileOutput('text/plain', $this->p->t('abgabetool', 'keineDateienVorhanden'));
|
||||||
|
|
||||||
|
$abgaben = getData($result);
|
||||||
|
|
||||||
|
foreach ($abgaben as $abgabe)
|
||||||
|
{
|
||||||
|
$path = PAABGABE_PATH.$abgabe->paabgabe_id.'_'.$abgabe->uid.'.pdf';
|
||||||
|
if (file_exists($path))
|
||||||
|
{
|
||||||
|
$fileExists = true;
|
||||||
|
$studiengang_kuerzel = $abgabe->studiengang_kuerzel;
|
||||||
|
$this->zip->read_file($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$fileExists) $this->terminateWithFileOutput('text/plain', $this->p->t('abgabetool', 'keineDateienVorhanden'));
|
||||||
|
|
||||||
|
$studiengang_kz = $this->input->get('studiengang_kz');
|
||||||
|
$zipFileName = 'Abgabe'.(isset($studiengang_kz) && isset($studiengang_kuerzel) ? '_'.$studiengang_kuerzel : '').'.zip';
|
||||||
|
$this->zip->download($zipFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Download Projektarbeit document.
|
||||||
|
*/
|
||||||
|
//~ public function downloadProjektarbeit()
|
||||||
|
//~ {
|
||||||
|
//~ $paabgabe_id = $this->input->get('paabgabe_id');
|
||||||
|
|
||||||
|
//~ if (!is_numeric($paabgabe_id))
|
||||||
|
//~ $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Abgabe ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
//~ //$abgabeRes = $this->PaabgabeModel->getEndabgabe($projektarbeit_id);
|
||||||
|
//~ $this->PaabgabeModel->addSelect("paabgabe_id, student_uid, tbl_paabgabe.datum, tbl_paabgabe.abgabedatum, projekttyp_kurzbz, titel, titel_english,
|
||||||
|
//~ paabgabe_id || '_' || student_uid || '.pdf' AS filename");
|
||||||
|
//~ $this->PaabgabeModel->addJoin('lehre.tbl_projektarbeit', 'projektarbeit_id');
|
||||||
|
//~ $abgabeRes = $this->PaabgabeModel->load($paabgabe_id);
|
||||||
|
|
||||||
|
//~ if (isError($abgabeRes))
|
||||||
|
//~ show_error(getError($abgabeRes));
|
||||||
|
|
||||||
|
//~ if (hasData($abgabeRes))
|
||||||
|
//~ {
|
||||||
|
//~ $endabgabe = getData($abgabeRes)[0];
|
||||||
|
//~ $filepath = PAABGABE_PATH.$endabgabe->filename;
|
||||||
|
|
||||||
|
//~ if (file_exists($filepath))
|
||||||
|
//~ {
|
||||||
|
//~ $this->output
|
||||||
|
//~ ->set_status_header(200)
|
||||||
|
//~ ->set_content_type('application/pdf', 'utf-8')
|
||||||
|
//~ ->set_header('Content-Disposition: attachment; filename="'.$endabgabe->filename.'"')
|
||||||
|
//~ ->set_output(file_get_contents($filepath))
|
||||||
|
//~ ->_display();
|
||||||
|
//~ }
|
||||||
|
//~ else
|
||||||
|
//~ {
|
||||||
|
//~ show_error("File does not exist.");
|
||||||
|
//~ }
|
||||||
|
//~ }
|
||||||
|
//~ }
|
||||||
|
}
|
||||||
@@ -0,0 +1,237 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class Foto extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'uploadFoto' => ['admin:r', 'assistenz:r'],
|
||||||
|
'deleteFoto' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models and Libraries
|
||||||
|
$this->load->model('person/Person_model', 'PersonModel');
|
||||||
|
$this->load->model("crm/Akte_model", "AkteModel");
|
||||||
|
$this->load->model('person/Fotostatusperson_model', 'FotostatusPersonModel');
|
||||||
|
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui',
|
||||||
|
'header'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function uploadFoto($person_id)
|
||||||
|
{
|
||||||
|
if(!$person_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person_id']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = json_decode(file_get_contents("php://input"), true);
|
||||||
|
|
||||||
|
if (!empty($data['image']))
|
||||||
|
{
|
||||||
|
$base64 = $data['image'];
|
||||||
|
$resizedImage1 = $this->_resize($base64, 827, 1063);
|
||||||
|
|
||||||
|
if (is_null($resizedImage1))
|
||||||
|
return $this->terminateWithError($this->p->t('header', 'error_fotoupload'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => 'Lichtbil'));
|
||||||
|
|
||||||
|
$akteUpdateData = array(
|
||||||
|
'dokument_kurzbz' => 'Lichtbil',
|
||||||
|
'person_id' => $person_id,
|
||||||
|
'inhalt' => $resizedImage1,
|
||||||
|
'mimetype' => 'image/jpg',
|
||||||
|
'erstelltam' => date('c'),
|
||||||
|
'gedruckt' => false,
|
||||||
|
'titel' => 'Lichtbild_' . $person_id . '.jpg',
|
||||||
|
'bezeichnung' => 'Lichtbild gross',
|
||||||
|
'insertamum' => date('c'),
|
||||||
|
'insertvon' => getAuthUID(),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (hasData($akte)) {
|
||||||
|
$akte_id = getData($akte)[0]->akte_id;
|
||||||
|
|
||||||
|
$akteUpdateData['updateamum'] = date('c');
|
||||||
|
$akteUpdateData['updatevon'] = getAuthUID();
|
||||||
|
$akteResult = $this->AkteModel->update(array('akte_id' => $akte_id), $akteUpdateData);
|
||||||
|
} else {
|
||||||
|
$akteResult = $this->AkteModel->insert($akteUpdateData);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isError($akteResult)) {
|
||||||
|
return $this->terminateWithError(getError($akteResult), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$resizedImage2 = $this->_resize($base64, 101, 130);
|
||||||
|
|
||||||
|
if (is_null($resizedImage2))
|
||||||
|
return $this->terminateWithError($this->p->t('header', 'error_fotoupload'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$result = $this->_updateFoto($person_id, $resizedImage2);
|
||||||
|
|
||||||
|
if (!isError($result)) {
|
||||||
|
$this->FotostatusPersonModel->insert(array(
|
||||||
|
'person_id' => $person_id,
|
||||||
|
'fotostatus_kurzbz' => 'hochgeladen',
|
||||||
|
'datum' => date('Y-m-d'),
|
||||||
|
'updateamum' => date('c'),
|
||||||
|
'updatevon' => getAuthUID(),
|
||||||
|
'insertamum' => date('c'),
|
||||||
|
'insertvon' => getAuthUID(),
|
||||||
|
));
|
||||||
|
|
||||||
|
return $this->terminateWithSuccess($base64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('header', 'error_noPhoto'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteFoto($person_id)
|
||||||
|
{
|
||||||
|
if(!$person_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person_id']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->_deleteFoto($person_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
{
|
||||||
|
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
return $this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _resize($imageData, $maxwidth, $maxheight, $quality = 90)
|
||||||
|
{
|
||||||
|
$meta = getimagesize($imageData);
|
||||||
|
if (!$meta)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$src_width = $meta[0];
|
||||||
|
$src_height = $meta[1];
|
||||||
|
$mime = $meta['mime'];
|
||||||
|
|
||||||
|
switch ($mime) {
|
||||||
|
case 'image/jpeg':
|
||||||
|
case 'image/jpg':
|
||||||
|
$imagecreated = imagecreatefromjpeg($imageData);
|
||||||
|
break;
|
||||||
|
case 'image/png':
|
||||||
|
$imagecreated = imagecreatefrompng($imageData);
|
||||||
|
break;
|
||||||
|
case 'image/gif':
|
||||||
|
$imagecreated = imagecreatefromgif($imageData);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!$imagecreated)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$src_aspect_ratio = $src_width / $src_height;
|
||||||
|
$thu_aspect_ratio = $maxwidth / $maxheight;
|
||||||
|
|
||||||
|
if ($src_width <= $maxwidth && $src_height <= $maxheight)
|
||||||
|
{
|
||||||
|
$thu_width = $src_width;
|
||||||
|
$thu_height = $src_height;
|
||||||
|
}
|
||||||
|
elseif ($thu_aspect_ratio > $src_aspect_ratio)
|
||||||
|
{
|
||||||
|
$thu_width = (int) ($maxheight * $src_aspect_ratio);
|
||||||
|
$thu_height = $maxheight;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$thu_width = $maxwidth;
|
||||||
|
$thu_height = (int) ($maxwidth / $src_aspect_ratio);
|
||||||
|
}
|
||||||
|
|
||||||
|
$imageScaled = imagecreatetruecolor($thu_width, $thu_height);
|
||||||
|
|
||||||
|
if ($mime === 'image/png')
|
||||||
|
{
|
||||||
|
$background = imagecolorallocate($imageScaled , 0, 0, 0);
|
||||||
|
imagecolortransparent($imageScaled, $background);
|
||||||
|
imagealphablending($imageScaled, false);
|
||||||
|
imagesavealpha($imageScaled, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
imagecopyresampled($imageScaled, $imagecreated, 0, 0, 0, 0, $thu_width, $thu_height, $src_width, $src_height);
|
||||||
|
|
||||||
|
if ($mime === "image/gif")
|
||||||
|
{
|
||||||
|
$background = imagecolorallocate($imageScaled, 0, 0, 0);
|
||||||
|
imagecolortransparent($imageScaled, $background);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($imageScaled))
|
||||||
|
{
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
if ($mime == 'image/png')
|
||||||
|
imagepng($imageScaled, NULL);
|
||||||
|
else if ($mime === 'image/gif')
|
||||||
|
imagegif($imageScaled, NULL);
|
||||||
|
else
|
||||||
|
imagejpeg($imageScaled, NULL, $quality);
|
||||||
|
|
||||||
|
$resizedImageData = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
@imagedestroy($imagecreated);
|
||||||
|
@imagedestroy($imageScaled);
|
||||||
|
|
||||||
|
|
||||||
|
if (!empty($resizedImageData))
|
||||||
|
{
|
||||||
|
return base64_encode($resizedImageData);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _updateFoto($person_id, $foto)
|
||||||
|
{
|
||||||
|
$personJson['foto'] = $foto;
|
||||||
|
$result = $this->PersonModel->update($person_id, $personJson);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
{
|
||||||
|
return error($result->msg, EXIT_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _deleteFoto($person_id)
|
||||||
|
{
|
||||||
|
$personJson['foto'] = null;
|
||||||
|
$result = $this->PersonModel->update($person_id, $personJson);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
{
|
||||||
|
return error($result->msg, EXIT_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -42,14 +42,22 @@ class Messages extends FHCAPI_Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMessages($id, $type_id, $size, $page)
|
public function getMessages($id, $type_id, $size=null, $page=null)
|
||||||
{
|
{
|
||||||
if($type_id != 'person_id'){
|
if($type_id != 'person_id'){
|
||||||
$id = $this->_getPersonId($id, $type_id);
|
$id = $this->_getPersonId($id, $type_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
$offset = $size * ($page - 1);
|
if(!(is_null($size) && is_null($page)))
|
||||||
$limit = $size;
|
{
|
||||||
|
$offset = $size * ($page - 1);
|
||||||
|
$limit = $size;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$offset = null;
|
||||||
|
$limit = null;
|
||||||
|
}
|
||||||
|
|
||||||
$result = $this->MessageModel->getMessagesForTable($id, $offset, $limit);
|
$result = $this->MessageModel->getMessagesForTable($id, $offset, $limit);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizAnrechnung extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "anrechnung_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizBestellung extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "bestellung_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,5 +17,106 @@ class NotizLehreinheit extends Notiz_Controller
|
|||||||
'getMitarbeiter' => ['admin:r', 'assistenz:r'],
|
'getMitarbeiter' => ['admin:r', 'assistenz:r'],
|
||||||
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
//Permission checks for allowed Oes
|
||||||
|
$allowedOes = $this->permissionlib->getOE_isEntitledFor('assistenz') ?: [];
|
||||||
|
|
||||||
|
if ($this->router->method == 'addNewNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$lehreinheit_id = $post_data['id'];
|
||||||
|
|
||||||
|
if(!$lehreinheit_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'updateNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$notiz_id = $post_data['notiz_id'];
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//get lehreinheit_id
|
||||||
|
$result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$lehreinheit_id = current($data)->lehreinheit_id;
|
||||||
|
|
||||||
|
if(!$lehreinheit_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'deleteNotiz')
|
||||||
|
{
|
||||||
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
$lehreinheit_id = $this->input->post('id');
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$lehreinheit_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private function _checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes)
|
||||||
|
{
|
||||||
|
//get oe from lehreinheit
|
||||||
|
$result = $this->LehreinheitModel->getOes($lehreinheit_id);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$oes = current($data);
|
||||||
|
|
||||||
|
if (!in_array($oes, $allowedOes))
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg') . " " . $oes, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "lehreinheit_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizMitarbeiter extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "mitarbeiter_uid")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,33 +20,100 @@ class NotizPerson extends Notiz_Controller
|
|||||||
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
'getCountNotes' => ['admin:r', 'assistenz:r'],
|
'getCountNotes' => ['admin:r', 'assistenz:r'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||||
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||||
|
|
||||||
|
//Permission checks for allowed Oes
|
||||||
|
if ($this->router->method == 'addNewNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$person_id = $post_data['id'];
|
||||||
|
|
||||||
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
|
||||||
|
|
||||||
|
if(!$person_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkIfBerechtigungForOnePrestudentExists($person_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $this->router->method == 'updateNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$notiz_id = $post_data['notiz_id'];
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//get person_id
|
||||||
|
$result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$person_id = current($data)->person_id;
|
||||||
|
|
||||||
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
|
||||||
|
$this->_checkIfBerechtigungForOnePrestudentExists($person_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'deleteNotiz' )
|
||||||
|
{
|
||||||
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
$person_id = $this->input->post('id');
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$person_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'person ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
|
||||||
|
$this->_checkIfBerechtigungForOnePrestudentExists($person_id, $allowedStgs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isBerechtigt($id, $typeId)
|
public function isBerechtigt($id, $typeId)
|
||||||
{
|
{
|
||||||
if($typeId != "person_id")
|
if($typeId != "person_id")
|
||||||
{
|
{
|
||||||
return $this->terminateWithError($this->p->t('ui', 'error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($this->p->t('ui', 'error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO define permission
|
|
||||||
if (!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
if (!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
{
|
{
|
||||||
$result = $this->p->t('lehre', 'error_keineSchreibrechte');
|
$result = $this->p->t('lehre', 'error_keineSchreibrechte');
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->outputJsonSuccess(true);
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadDokumente()
|
//stv: if person has permission of one studiengang of person -> permission to add/update/delete Note
|
||||||
|
private function _checkIfBerechtigungForOnePrestudentExists($person_id, $allowedStgs)
|
||||||
{
|
{
|
||||||
$notiz_id = $this->input->post('notiz_id');
|
$result = $this->PrestudentModel->loadWhere(['person_id' => $person_id]);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
// TODO(chris): make CI variant of endpoint
|
$checkarray = [];
|
||||||
$this->NotizModel->addSelect($this->NotizModel->escape(base_url('content/notizdokdownload.php?id=')) . ' || campus.tbl_dms_version.dms_id AS preview');
|
foreach ($data as $item)
|
||||||
|
{
|
||||||
return parent::loadDokumente();
|
if(in_array($item->studiengang_kz, $allowedStgs))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg'), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,117 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizPrestudent extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Load Models
|
||||||
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
|
||||||
|
//Permission checks for Studiengangsarray
|
||||||
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: [];
|
||||||
|
|
||||||
|
if ($this->router->method == 'addNewNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$prestudent_id = $post_data['id'];
|
||||||
|
|
||||||
|
if(!$prestudent_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'updateNotiz')
|
||||||
|
{
|
||||||
|
$json = $this->input->post('data');
|
||||||
|
$post_data = json_decode($json, true);
|
||||||
|
$notiz_id = $post_data['notiz_id'];
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//get prestudent_id
|
||||||
|
$result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$prestudent_id = current($data)->prestudent_id;
|
||||||
|
|
||||||
|
if(!$prestudent_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->router->method == 'deleteNotiz')
|
||||||
|
{
|
||||||
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
$prestudent_id = $this->input->post('id');
|
||||||
|
|
||||||
|
if(!$notiz_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$prestudent_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "prestudent_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs)
|
||||||
|
{
|
||||||
|
$student_uid = $this->StudentModel->getUID($prestudent_id);
|
||||||
|
|
||||||
|
$result = $this->StudentModel->loadWhere(['student_uid' => $student_uid]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$studiengang_kz = current($data)->studiengang_kz;
|
||||||
|
|
||||||
|
if (!in_array($studiengang_kz, $allowedStgs))
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizProjekt extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "projekt_kurzbz")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizProjektphase extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "projektphase_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class NotizProjekttask extends Notiz_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'isBerechtigt' => ['admin:r', 'assistenz:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isBerechtigt($id, $typeId)
|
||||||
|
{
|
||||||
|
if($typeId != "projekttask_id")
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO define permission
|
||||||
|
if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid'))
|
||||||
|
{
|
||||||
|
$result = $this->p->t('lehre','error_keineSchreibrechte');
|
||||||
|
|
||||||
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess("berechtigt in überschreibender Funktion");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -127,9 +127,9 @@ class Unterbrechung extends FHCAPI_Controller
|
|||||||
$this->form_validation->set_rules(
|
$this->form_validation->set_rules(
|
||||||
'datum_wiedereinstieg',
|
'datum_wiedereinstieg',
|
||||||
'Datum Wiedereinstieg',
|
'Datum Wiedereinstieg',
|
||||||
'required|callback_isValidDate|callback_isDateInFuture',
|
'required|is_valid_date|callback_isDateInFuture',
|
||||||
[
|
[
|
||||||
'isValidDate' => $this->p->t('ui', 'error_invalid_date'),
|
'is_valid_date' => $this->p->t('ui', 'error_invalid_date'),
|
||||||
'isDateInFuture' => $this->p->t('ui', 'error_invalid_date')
|
'isDateInFuture' => $this->p->t('ui', 'error_invalid_date')
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
@@ -209,18 +209,9 @@ class Unterbrechung extends FHCAPI_Controller
|
|||||||
$this->terminateWithSuccess(getData($result));
|
$this->terminateWithSuccess(getData($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isValidDate($date)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
new DateTime($date);
|
|
||||||
} catch (Exception $e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function isDateInFuture($date)
|
public function isDateInFuture($date)
|
||||||
{
|
{
|
||||||
return new DateTime() < new DateTime($date);
|
return new DateTime() < new DateTime($date);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -246,12 +246,12 @@ class Abschlusspruefung extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
$searchString = $this->input->get('searchString') ?? '';
|
$searchString = $this->input->get('searchString') ?? '';
|
||||||
|
|
||||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
$this->load->model('person/Person_model', 'PersonModel');
|
||||||
|
|
||||||
$result = $this->MitarbeiterModel->searchMitarbeiter($searchString, 'ohneMaUid');
|
$result = $this->PersonModel->searchPerson($searchString, 'mitMaUid');
|
||||||
|
|
||||||
if (isError($result)) {
|
if (isError($result)) {
|
||||||
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->terminateWithSuccess($result ?: []);
|
$this->terminateWithSuccess($result ?: []);
|
||||||
|
|||||||
@@ -36,15 +36,44 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
// Load models
|
// Load models
|
||||||
$this->load->model('crm/Reihungstest_model', 'ReihungstestModel');
|
$this->load->model('crm/Reihungstest_model', 'ReihungstestModel');
|
||||||
$this->load->model('crm/RtPerson_model', 'RtPersonModel');
|
$this->load->model('crm/RtPerson_model', 'RtPersonModel');
|
||||||
|
$this->load->model('organisation/Studienplan_model', 'StudienplanModel');
|
||||||
|
$this->load->model('organisation/Studienordnung_model', 'StudienordnungModel');
|
||||||
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAufnahmetermine($person_id)
|
public function getAufnahmetermine($person_id)
|
||||||
{
|
{
|
||||||
$result = $this->ReihungstestModel->getReihungstestPerson($person_id);
|
$result = $this->ReihungstestModel->getReihungstestPerson($person_id);
|
||||||
|
$arrayRt = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
foreach ($arrayRt as $item) {
|
||||||
|
//Studienplan
|
||||||
|
$result = $this->StudienplanModel->loadWhere([
|
||||||
|
'studienplan_id' => $item->studienplan_id
|
||||||
|
]);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$studienordnung_id_ber = current($data)->studienordnung_id;
|
||||||
|
|
||||||
$this->terminateWithSuccess($data);
|
//Studienordnung
|
||||||
|
$result = $this->StudienordnungModel->loadWhere([
|
||||||
|
'studienordnung_id' => $studienordnung_id_ber
|
||||||
|
]);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$studiengang_kz_ber = current($data)->studiengang_kz;
|
||||||
|
|
||||||
|
//Studiengang von studiengang_kz_ber
|
||||||
|
$result = $this->StudiengangModel->load($studiengang_kz_ber);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$studiengangkurzbzlang_ber = current($data)->kurzbzlang;
|
||||||
|
$typ_ber = current($data)->typ;
|
||||||
|
|
||||||
|
//add to Array
|
||||||
|
$item->studiengang_kz_ber = $studiengang_kz_ber;
|
||||||
|
$item->studiengangkurzbzlang_ber = $studiengangkurzbzlang_ber;
|
||||||
|
$item->studiengangtyp_ber = $typ_ber;
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess($arrayRt);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function insertAufnahmetermin()
|
public function insertAufnahmetermin()
|
||||||
@@ -60,7 +89,6 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$rt_id = (isset($formData['rt_id']) && !empty($formData['rt_id'])) ? $formData['rt_id'] : null;
|
$rt_id = (isset($formData['rt_id']) && !empty($formData['rt_id'])) ? $formData['rt_id'] : null;
|
||||||
$anmeldedatum = (isset($formData['anmeldedatum']) && !empty($formData['anmeldedatum'])) ? $formData['anmeldedatum'] : null;
|
$anmeldedatum = (isset($formData['anmeldedatum']) && !empty($formData['anmeldedatum'])) ? $formData['anmeldedatum'] : null;
|
||||||
$teilgenommen = (isset($formData['teilgenommen']) && !empty($formData['teilgenommen'])) ? $formData['teilgenommen'] : false;
|
$teilgenommen = (isset($formData['teilgenommen']) && !empty($formData['teilgenommen'])) ? $formData['teilgenommen'] : false;
|
||||||
@@ -224,7 +252,11 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
//check if existing placementtest
|
||||||
|
if(!hasData($result))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
else
|
||||||
|
$data = getData($result);
|
||||||
|
|
||||||
$studienplan_arr = [];
|
$studienplan_arr = [];
|
||||||
$include_ids = [];
|
$include_ids = [];
|
||||||
@@ -233,12 +265,18 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
if($item->studienplan_id != null)
|
if($item->studienplan_id != null)
|
||||||
$studienplan_arr[] = $item->studienplan_id;
|
$studienplan_arr[] = $item->studienplan_id;
|
||||||
}
|
}
|
||||||
|
if(!hasData($studienplan_arr))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
|
||||||
//get Placementtests Person
|
//get Placementtests Person
|
||||||
$person_id = $this->_getPersonId($prestudent_id);
|
$person_id = $this->_getPersonId($prestudent_id);
|
||||||
$resultRt = $this->ReihungstestModel->getReihungstestPerson($person_id);
|
$resultRt = $this->ReihungstestModel->getReihungstestPerson($person_id);
|
||||||
|
|
||||||
$dataRt = $this->getDataOrTerminateWithError($resultRt);
|
//check if existing placementtest
|
||||||
|
if(!hasData($result))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
else
|
||||||
|
$dataRt = getData($resultRt);
|
||||||
|
|
||||||
foreach ($dataRt as $item)
|
foreach ($dataRt as $item)
|
||||||
{
|
{
|
||||||
@@ -354,6 +392,7 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
$person_id = $this->input->get('person_id');
|
$person_id = $this->input->get('person_id');
|
||||||
$punkte = $this->input->get('punkte');
|
$punkte = $this->input->get('punkte');
|
||||||
$reihungstest_id = $this->input->get('reihungstest_id');
|
$reihungstest_id = $this->input->get('reihungstest_id');
|
||||||
|
$has_excluded_gebiete = $this->input->get('hasExcludedAreas');
|
||||||
|
|
||||||
if(!$reihungstest_id)
|
if(!$reihungstest_id)
|
||||||
{
|
{
|
||||||
@@ -364,22 +403,27 @@ class Aufnahmetermine extends FHCAPI_Controller
|
|||||||
$studiengang_kz = $this->input->get('studiengang_kz');
|
$studiengang_kz = $this->input->get('studiengang_kz');
|
||||||
|
|
||||||
$this->load->model('testtool/Ablauf_model', 'AblaufModel');
|
$this->load->model('testtool/Ablauf_model', 'AblaufModel');
|
||||||
$result = $this->AblaufModel->getAblaufGebieteAndGewichte($studiengang_kz);
|
$result = $this->AblaufModel->getAblaufGebieteAndGewichte($studiengang_kz, 1);
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
$weightedArray = [];
|
$weightedArray = [];
|
||||||
|
$basis_gebiet_id_arr = [];
|
||||||
|
$basis_gebiet_id_toString = '';
|
||||||
foreach ($data as $abl)
|
foreach ($data as $abl)
|
||||||
{
|
{
|
||||||
$weightedArray[$abl->gebiet_id] = $abl->gewicht;
|
$weightedArray[$abl->gebiet_id] = $abl->gewicht;
|
||||||
|
$basis_gebiet_id_arr[]= $abl->gebiet_id;
|
||||||
}
|
}
|
||||||
|
$basis_gebiet_id_toString = implode(', ', $basis_gebiet_id_arr);
|
||||||
|
|
||||||
$result = $this->ReihungstestModel->getReihungstestErgebnisPerson($person_id, $punkte, $reihungstest_id, $weightedArray);
|
$result = $this->ReihungstestModel->getReihungstestErgebnisPerson(
|
||||||
|
$person_id,
|
||||||
/* if (isError($result))
|
$punkte,
|
||||||
{
|
$reihungstest_id,
|
||||||
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$weightedArray,
|
||||||
}*/
|
$has_excluded_gebiete,
|
||||||
|
$basis_gebiet_id_toString
|
||||||
|
);
|
||||||
$this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -200,7 +200,8 @@ class Config extends FHCAPI_Controller
|
|||||||
'type' => 'select',
|
'type' => 'select',
|
||||||
'values' => $buchungstyp_kurzbz_plus_all,
|
'values' => $buchungstyp_kurzbz_plus_all,
|
||||||
'value_key' => 'buchungstyp_kurzbz',
|
'value_key' => 'buchungstyp_kurzbz',
|
||||||
'label_key' => 'beschreibung'
|
'label_key' => 'beschreibung',
|
||||||
|
'default' => 'all'
|
||||||
],
|
],
|
||||||
'samestg' => [
|
'samestg' => [
|
||||||
'type' => 'bool',
|
'type' => 'bool',
|
||||||
@@ -226,7 +227,8 @@ class Config extends FHCAPI_Controller
|
|||||||
'type' => 'select',
|
'type' => 'select',
|
||||||
'values' => $buchungstyp_kurzbz_plus_all,
|
'values' => $buchungstyp_kurzbz_plus_all,
|
||||||
'value_key' => 'buchungstyp_kurzbz',
|
'value_key' => 'buchungstyp_kurzbz',
|
||||||
'label_key' => 'beschreibung'
|
'label_key' => 'beschreibung',
|
||||||
|
'default' => 'all'
|
||||||
],
|
],
|
||||||
'samestg' => [
|
'samestg' => [
|
||||||
'type' => 'bool',
|
'type' => 'bool',
|
||||||
|
|||||||
@@ -78,52 +78,32 @@ class Dokumente extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
$resultPreDoc = $this->_getPrestudentDokumente($prestudent_id);
|
$resultPreDoc = $this->_getPrestudentDokumente($prestudent_id);
|
||||||
|
|
||||||
$arrayAccepted = [];
|
|
||||||
$person_id = $this->_getPersonId($prestudent_id);
|
$person_id = $this->_getPersonId($prestudent_id);
|
||||||
|
|
||||||
$docNames = array_map(function ($item) {
|
$mergedArray = [];
|
||||||
return $item->dokument_kurzbz;
|
|
||||||
}, $resultPreDoc);
|
|
||||||
|
|
||||||
foreach($docNames as $doc)
|
foreach ($resultPreDoc as $pre)
|
||||||
{
|
{
|
||||||
$result = $this->AkteModel->getAktenFAS($person_id, $doc, $studiengang_kz, $prestudent_id, true);
|
$result = $this->AkteModel->getAktenFAS($person_id, $pre->dokument_kurzbz, $studiengang_kz, $prestudent_id, true);
|
||||||
|
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
|
||||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
|
||||||
if (hasData($result))
|
if (hasData($result))
|
||||||
{
|
{
|
||||||
$data = getData($result);
|
foreach (getData($result) as $doc)
|
||||||
foreach ($data as $value)
|
|
||||||
{
|
{
|
||||||
array_push($arrayAccepted, $value);
|
$merged = clone $doc;
|
||||||
|
$merged->docdatum = $pre->docdatum;
|
||||||
|
$merged->insertvonma = $pre->insertvonma;
|
||||||
|
$merged->bezeichnung = $pre->bezeichnung;
|
||||||
|
$mergedArray[] = $merged;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
//Mapping with document_kurzbz
|
$mergedArray[] = $pre;
|
||||||
$preDocMap = [];
|
|
||||||
foreach ($resultPreDoc as $pre) {
|
|
||||||
$preDocMap[$pre->dokument_kurzbz] = $pre;
|
|
||||||
}
|
|
||||||
|
|
||||||
$mergedArray = [];
|
|
||||||
foreach ($arrayAccepted as $doc) {
|
|
||||||
$merged = clone $doc;
|
|
||||||
|
|
||||||
if (isset($preDocMap[$doc->dokument_kurzbz])) {
|
|
||||||
$merged->docdatum = $preDocMap[$doc->dokument_kurzbz]->docdatum;
|
|
||||||
$merged->insertvonma = $preDocMap[$doc->dokument_kurzbz]->insertvonma;
|
|
||||||
$merged->bezeichnung = $preDocMap[$doc->dokument_kurzbz]->bezeichnung;
|
|
||||||
} else {
|
|
||||||
$merged->akzeptiertdatum = null;
|
|
||||||
$merged->akzeptiertvon = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$mergedArray[] = $merged;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->terminateWithSuccess($mergedArray);
|
$this->terminateWithSuccess($mergedArray);
|
||||||
@@ -753,6 +733,10 @@ class Dokumente extends FHCAPI_Controller
|
|||||||
);
|
);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
if(!(is_array($data) && count($data) > 0))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
$student = current($data);
|
$student = current($data);
|
||||||
|
|
||||||
return $student->student_uid;
|
return $student->student_uid;
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ class Konto extends FHCAPI_Controller
|
|||||||
|
|
||||||
// Load language phrases
|
// Load language phrases
|
||||||
$this->loadPhrases([
|
$this->loadPhrases([
|
||||||
'konto'
|
'konto',
|
||||||
|
'lehre'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,7 +113,7 @@ class Konto extends FHCAPI_Controller
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function getBuchungstypen()
|
public function getBuchungstypen($studiensemester_kurzbz = null)
|
||||||
{
|
{
|
||||||
$this->load->model('crm/Buchungstyp_model', 'BuchungstypModel');
|
$this->load->model('crm/Buchungstyp_model', 'BuchungstypModel');
|
||||||
|
|
||||||
@@ -122,6 +123,7 @@ class Konto extends FHCAPI_Controller
|
|||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->_getOEHBeitrag($data, $studiensemester_kurzbz);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -494,4 +496,43 @@ class Konto extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->terminateWithSuccess();
|
$this->terminateWithSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function _getOEHBeitrag(&$data, $studiensemester_kurzbz = null)
|
||||||
|
{
|
||||||
|
if (is_null($studiensemester_kurzbz))
|
||||||
|
{
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
$studiensemester_akt = $this->variablelib->getVar('semester_aktuell');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
if ($this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
|
||||||
|
$studiensemester_akt = $studiensemester_kurzbz;
|
||||||
|
else
|
||||||
|
$this->terminateWithError($this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel');
|
||||||
|
$oehBeitrag = $this->OehbeitragModel->getByStudiensemester($studiensemester_akt);
|
||||||
|
|
||||||
|
$oehStandardbetrag = null;
|
||||||
|
if (hasData($oehBeitrag))
|
||||||
|
{
|
||||||
|
$oeh = getData($oehBeitrag)[0];
|
||||||
|
$summe = ($oeh->studierendenbeitrag + $oeh->versicherung) * -1;
|
||||||
|
$oehStandardbetrag = number_format((float)$summe, 2, '.', '');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($oehStandardbetrag !== null)
|
||||||
|
{
|
||||||
|
$data = array_map(function ($buchungstyp) use ($oehStandardbetrag) {
|
||||||
|
if (isset($buchungstyp->buchungstyp_kurzbz) && (strtolower($buchungstyp->buchungstyp_kurzbz) === 'oeh'))
|
||||||
|
{
|
||||||
|
$buchungstyp->standardbetrag = $oehStandardbetrag;
|
||||||
|
}
|
||||||
|
return $buchungstyp;
|
||||||
|
}, $data);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,6 +90,15 @@ class Projektarbeit extends FHCAPI_Controller
|
|||||||
|
|
||||||
if (!isset($projektarbeit_id) || !is_numeric($projektarbeit_id)) return $this->terminateWithError('Projektarbeit Id missing', self::ERROR_TYPE_GENERAL);
|
if (!isset($projektarbeit_id) || !is_numeric($projektarbeit_id)) return $this->terminateWithError('Projektarbeit Id missing', self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$result = $this->fetchProjektarbeitByID($projektarbeit_id);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(current($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function fetchProjektarbeitById($projektarbeit_id) {
|
||||||
|
$this->ProjektarbeitModel->resetQuery();
|
||||||
$this->ProjektarbeitModel->addSelect(
|
$this->ProjektarbeitModel->addSelect(
|
||||||
'lehre.tbl_projektarbeit.projektarbeit_id, titel, titel_english, themenbereich, projekttyp_kurzbz, lehrveranstaltung_id, lehreinheit_id,
|
'lehre.tbl_projektarbeit.projektarbeit_id, titel, titel_english, themenbereich, projekttyp_kurzbz, lehrveranstaltung_id, lehreinheit_id,
|
||||||
firma_id, beginn, ende, gesperrtbis, note, final, freigegeben, tbl_projektarbeit.anmerkung, fa.name AS firma_name'
|
firma_id, beginn, ende, gesperrtbis, note, final, freigegeben, tbl_projektarbeit.anmerkung, fa.name AS firma_name'
|
||||||
@@ -97,13 +106,10 @@ class Projektarbeit extends FHCAPI_Controller
|
|||||||
$this->ProjektarbeitModel->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
|
$this->ProjektarbeitModel->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
|
||||||
$this->ProjektarbeitModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
|
$this->ProjektarbeitModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
|
||||||
$this->ProjektarbeitModel->addJoin('public.tbl_firma fa', 'firma_id', 'LEFT');
|
$this->ProjektarbeitModel->addJoin('public.tbl_firma fa', 'firma_id', 'LEFT');
|
||||||
$result = $this->ProjektarbeitModel->loadWhere(
|
return $this->ProjektarbeitModel->loadWhere(
|
||||||
array('projektarbeit_id' => $projektarbeit_id)
|
array('projektarbeit_id' => $projektarbeit_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(current($data));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -132,7 +138,8 @@ class Projektarbeit extends FHCAPI_Controller
|
|||||||
);
|
);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$data = $this->getDataOrTerminateWithError($this->fetchProjektarbeitById($data));
|
||||||
|
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,6 +108,10 @@ class Student extends FHCAPI_Controller
|
|||||||
$this->PrestudentModel->addSelect('p.matr_nr');
|
$this->PrestudentModel->addSelect('p.matr_nr');
|
||||||
$this->PrestudentModel->addSelect('p.anrede');
|
$this->PrestudentModel->addSelect('p.anrede');
|
||||||
$this->PrestudentModel->addSelect('p.zugangscode');
|
$this->PrestudentModel->addSelect('p.zugangscode');
|
||||||
|
if($this->permissionlib->isBerechtigt('student/bpk'))
|
||||||
|
{
|
||||||
|
$this->PrestudentModel->addSelect('p.bpk');
|
||||||
|
}
|
||||||
|
|
||||||
if (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) {
|
if (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) {
|
||||||
$this->PrestudentModel->addSelect(
|
$this->PrestudentModel->addSelect(
|
||||||
@@ -140,6 +144,7 @@ class Student extends FHCAPI_Controller
|
|||||||
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
||||||
. ") AS statusofsemester"
|
. ") AS statusofsemester"
|
||||||
);
|
);
|
||||||
|
$this->PrestudentModel->addSelect($this->PrestudentModel->escape($studiensemester_kurzbz) . ' as query_studiensemester_kurzbz');
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT');
|
$this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT');
|
||||||
$this->PrestudentModel->addJoin('public.tbl_benutzer b', 'student_uid = uid', 'LEFT');
|
$this->PrestudentModel->addJoin('public.tbl_benutzer b', 'student_uid = uid', 'LEFT');
|
||||||
@@ -542,6 +547,7 @@ class Student extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->_validate();
|
$this->_validate();
|
||||||
|
|
||||||
|
// TODO(chris): This should be in a library
|
||||||
$this->load->model('crm/Student_model', 'StudentModel');
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||||
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||||
@@ -793,8 +799,8 @@ class Student extends FHCAPI_Controller
|
|||||||
$this->form_validation->set_rules('geschlecht', 'Geschlecht', 'callback_requiredIfNotPersonId', [
|
$this->form_validation->set_rules('geschlecht', 'Geschlecht', 'callback_requiredIfNotPersonId', [
|
||||||
'requiredIfNotPersonId' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('person', 'geschlecht')])
|
'requiredIfNotPersonId' => $this->p->t('ui', 'error_fieldRequired', ['field' => $this->p->t('person', 'geschlecht')])
|
||||||
]);
|
]);
|
||||||
$this->form_validation->set_rules('gebdatum', 'Geburtsdatum', ['isValidDate', function($value) { return isValidDate($value); }], [
|
$this->form_validation->set_rules('gebdatum', 'Geburtsdatum', 'is_valid_date', [
|
||||||
'isValidDate' => $this->p->t('ui', 'error_invalid_date')
|
'is_valid_date' => $this->p->t('ui', 'error_invalid_date')
|
||||||
]);
|
]);
|
||||||
//$this->form_validation->set_rules('address[checked]', 'Address', 'required');
|
//$this->form_validation->set_rules('address[checked]', 'Address', 'required');
|
||||||
$this->form_validation->set_rules('address[plz]', 'PLZ', 'callback_requiredIfAddressFunc', [
|
$this->form_validation->set_rules('address[plz]', 'PLZ', 'callback_requiredIfAddressFunc', [
|
||||||
|
|||||||
@@ -25,9 +25,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|||||||
*/
|
*/
|
||||||
class Students extends FHCAPI_Controller
|
class Students extends FHCAPI_Controller
|
||||||
{
|
{
|
||||||
private $allowedStgs = [];
|
|
||||||
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$permissions = [];
|
$permissions = [];
|
||||||
@@ -35,16 +32,17 @@ class Students extends FHCAPI_Controller
|
|||||||
$permissions[$router->method] = ['admin:r', 'assistenz:r'];
|
$permissions[$router->method] = ['admin:r', 'assistenz:r'];
|
||||||
parent::__construct($permissions);
|
parent::__construct($permissions);
|
||||||
|
|
||||||
$this->allowedStgs = $this->permissionlib->getSTG_isEntitledFor('admin') ?: [];
|
$allowedStgs = $this->permissionlib->getSTG_isEntitledFor('admin') ?: [];
|
||||||
$this->allowedStgs = array_merge($this->allowedStgs, $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []);
|
$allowedStgs = array_merge($allowedStgs, $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []);
|
||||||
|
|
||||||
if (!$this->allowedStgs) {
|
if (!$allowedStgs) {
|
||||||
$this->_outputAuthError([$router->method => ['admin:r', 'assistenz:r']]);
|
$this->_outputAuthError([$router->method => ['admin:r', 'assistenz:r']]);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load Libraries
|
// Load Libraries
|
||||||
$this->load->library('PhrasesLib');
|
$this->load->library('PhrasesLib');
|
||||||
|
$this->load->library('stv/StudentListLib', ['allowedStgs' => $allowedStgs]);
|
||||||
$this->loadPhrases(
|
$this->loadPhrases(
|
||||||
array(
|
array(
|
||||||
'lehre'
|
'lehre'
|
||||||
@@ -111,23 +109,19 @@ class Students extends FHCAPI_Controller
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
$this->studentlistlib->addJoin(
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin(
|
|
||||||
"(
|
"(
|
||||||
SELECT prestudent_id
|
SELECT prestudent_id
|
||||||
FROM public.tbl_prestudentstatus
|
FROM public.tbl_prestudentstatus
|
||||||
WHERE status_kurzbz = 'Incoming'
|
WHERE status_kurzbz = 'Incoming'
|
||||||
AND studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
AND studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||||
) test",
|
) test",
|
||||||
"prestudent_id"
|
"prestudent_id",
|
||||||
|
"",
|
||||||
|
"start"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$this->studentlistlib->addSelect("COALESCE(
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("COALESCE(
|
|
||||||
v.semester::text,
|
v.semester::text,
|
||||||
CASE
|
CASE
|
||||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
@@ -135,19 +129,16 @@ class Students extends FHCAPI_Controller
|
|||||||
ELSE ''::text
|
ELSE ''::text
|
||||||
END
|
END
|
||||||
) AS semester", false);
|
) AS semester", false);
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
$result = $this->PrestudentModel->load();
|
|
||||||
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->decodeTagsJsonInResult($data);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,10 +155,7 @@ class Students extends FHCAPI_Controller
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
$this->studentlistlib->addJoin(
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin(
|
|
||||||
"(
|
"(
|
||||||
SELECT prestudent_id
|
SELECT prestudent_id
|
||||||
FROM bis.tbl_bisio bis
|
FROM bis.tbl_bisio bis
|
||||||
@@ -187,14 +175,12 @@ class Students extends FHCAPI_Controller
|
|||||||
) AND stdsem.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
) AND stdsem.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||||
GROUP BY prestudent_id
|
GROUP BY prestudent_id
|
||||||
) test",
|
) test",
|
||||||
"prestudent_id"
|
"prestudent_id",
|
||||||
|
"",
|
||||||
|
"start"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$this->studentlistlib->addSelect("COALESCE(
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("COALESCE(
|
|
||||||
v.semester::text,
|
v.semester::text,
|
||||||
CASE
|
CASE
|
||||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
@@ -202,19 +188,16 @@ class Students extends FHCAPI_Controller
|
|||||||
ELSE ''::text
|
ELSE ''::text
|
||||||
END
|
END
|
||||||
) AS semester", false);
|
) AS semester", false);
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
$result = $this->PrestudentModel->load();
|
|
||||||
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->decodeTagsJsonInResult($data);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,23 +214,18 @@ class Students extends FHCAPI_Controller
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
$this->studentlistlib->addJoin(
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin(
|
|
||||||
"(
|
"(
|
||||||
SELECT prestudent_id
|
SELECT prestudent_id
|
||||||
FROM bis.tbl_mobilitaet
|
FROM bis.tbl_mobilitaet
|
||||||
WHERE studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
WHERE studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||||
) bis",
|
) bis",
|
||||||
"prestudent_id"
|
"prestudent_id",
|
||||||
|
"",
|
||||||
|
"start"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$this->studentlistlib->addSelect("COALESCE(
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("COALESCE(
|
|
||||||
v.semester::text,
|
v.semester::text,
|
||||||
CASE
|
CASE
|
||||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
@@ -255,19 +233,16 @@ class Students extends FHCAPI_Controller
|
|||||||
ELSE ''::text
|
ELSE ''::text
|
||||||
END
|
END
|
||||||
) AS semester", false);
|
) AS semester", false);
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
$result = $this->PrestudentModel->load();
|
|
||||||
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->decodeTagsJsonInResult($data);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,8 +288,6 @@ class Students extends FHCAPI_Controller
|
|||||||
*/
|
*/
|
||||||
protected function fetchPrestudents($studiengang_kz, $studiensemester_kurzbz = null, $filter = null, $orgform_kurzbz = null)
|
protected function fetchPrestudents($studiengang_kz, $studiensemester_kurzbz = null, $filter = null, $orgform_kurzbz = null)
|
||||||
{
|
{
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
|
||||||
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
||||||
|
|
||||||
$selectRT = "
|
$selectRT = "
|
||||||
@@ -331,38 +304,38 @@ class Students extends FHCAPI_Controller
|
|||||||
AND r.studiensemester_kurzbz=" . $stdsemEsc;
|
AND r.studiensemester_kurzbz=" . $stdsemEsc;
|
||||||
|
|
||||||
|
|
||||||
$where = ['tbl_prestudent.studiengang_kz' => $studiengang_kz];
|
$this->studentlistlib->addWhere('tbl_prestudent.studiengang_kz', $studiengang_kz);
|
||||||
|
|
||||||
if ($orgform_kurzbz) {
|
if ($orgform_kurzbz) {
|
||||||
$where['ps.orgform_kurzbz'] = $orgform_kurzbz;
|
$this->studentlistlib->addWhere('ps.orgform_kurzbz', $orgform_kurzbz);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($filter) {
|
switch ($filter) {
|
||||||
case "interessenten":
|
case "interessenten":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
break;
|
break;
|
||||||
case "bewerbungnichtabgeschickt":
|
case "bewerbungnichtabgeschickt":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$where['ps.bewerbung_abgeschicktamum'] = null;
|
$this->studentlistlib->addWhere('ps.bewerbung_abgeschicktamum IS NULL');
|
||||||
break;
|
break;
|
||||||
case "bewerbungabgeschickt":
|
case "bewerbungabgeschickt":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$where['ps.bewerbung_abgeschicktamum IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('ps.bewerbung_abgeschicktamum IS NOT NULL');
|
||||||
$where['ps.bestaetigtam'] = null;
|
$this->studentlistlib->addWhere('ps.bestaetigtam IS NULL');
|
||||||
break;
|
break;
|
||||||
case "statusbestaetigt":
|
case "statusbestaetigt":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$where['ps.bestaetigtam IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('ps.bestaetigtam IS NOT NULL');
|
||||||
break;
|
break;
|
||||||
case "statusbestaetigtrtnichtangemeldet":
|
case "statusbestaetigtrtnichtangemeldet":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$where['ps.bestaetigtam IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('ps.bestaetigtam IS NOT NULL');
|
||||||
$this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('NOT EXISTS(' . $selectRT . ')', null, false);
|
||||||
break;
|
break;
|
||||||
case "statusbestaetigtrtangemeldet":
|
case "statusbestaetigtrtangemeldet":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$where['ps.bestaetigtam IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('ps.bestaetigtam IS NOT NULL');
|
||||||
$this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
|
||||||
break;
|
break;
|
||||||
case "zgv":
|
case "zgv":
|
||||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
@@ -374,69 +347,69 @@ class Students extends FHCAPI_Controller
|
|||||||
$this->terminateWithSuccess([]);
|
$this->terminateWithSuccess([]);
|
||||||
$stg = current($stg);
|
$stg = current($stg);
|
||||||
|
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
|
|
||||||
if ($stg->typ == 'm') {
|
if ($stg->typ == 'm') {
|
||||||
$where['zgvmas_code IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('zgvmas_code IS NOT NULL');
|
||||||
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
|
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
|
||||||
$where['zgvmas_erfuellt'] = true;
|
$this->studentlistlib->addWhere('zgvmas_erfuellt', true);
|
||||||
} elseif ($stg->typ == 'p') {
|
} elseif ($stg->typ == 'p') {
|
||||||
$where['zgvdoktor_code IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('zgvdoktor_code IS NOT NULL');
|
||||||
if (defined('ZGV_DOKTOR_ANZEIGEN') && ZGV_DOKTOR_ANZEIGEN)
|
if (defined('ZGV_DOKTOR_ANZEIGEN') && ZGV_DOKTOR_ANZEIGEN)
|
||||||
$where['zgvdoktor_erfuellt'] = true;
|
$this->studentlistlib->addWhere('zgvdoktor_erfuellt', true);
|
||||||
} else {
|
} else {
|
||||||
$where['zgv_code IS NOT NULL'] = null;
|
$this->studentlistlib->addWhere('zgv_code IS NOT NULL');
|
||||||
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
|
if (defined('ZGV_ERFUELLT_ANZEIGEN') && ZGV_ERFUELLT_ANZEIGEN)
|
||||||
$where['zgv_erfuellt'] = true;
|
$this->studentlistlib->addWhere('zgv_erfuellt', true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "reihungstestangemeldet":
|
case "reihungstestangemeldet":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
|
||||||
break;
|
break;
|
||||||
case "reihungstestnichtangemeldet":
|
case "reihungstestnichtangemeldet":
|
||||||
$where['ps.status_kurzbz'] = 'Interessent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Interessent');
|
||||||
$this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('NOT EXISTS(' . $selectRT . ')', null, false);
|
||||||
break;
|
break;
|
||||||
case "bewerber":
|
case "bewerber":
|
||||||
$where['ps.status_kurzbz'] = 'Bewerber';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
|
||||||
break;
|
break;
|
||||||
case "bewerberrtnichtangemeldet":
|
case "bewerberrtnichtangemeldet":
|
||||||
$where['ps.status_kurzbz'] = 'Bewerber';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
|
||||||
$this->PrestudentModel->db->where('NOT EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('NOT EXISTS(' . $selectRT . ')', null, false);
|
||||||
break;
|
break;
|
||||||
case "bewerberrtangemeldet":
|
case "bewerberrtangemeldet":
|
||||||
$where['ps.status_kurzbz'] = 'Bewerber';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
|
||||||
$this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
|
||||||
break;
|
break;
|
||||||
case "bewerberrtangemeldetteilgenommen":
|
case "bewerberrtangemeldetteilgenommen":
|
||||||
$where['ps.status_kurzbz'] = 'Bewerber';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
|
||||||
$this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
|
||||||
$where['reihungstestangetreten'] = true;
|
$this->studentlistlib->addWhere('reihungstestangetreten', true);
|
||||||
break;
|
break;
|
||||||
case "bewerberrtangemeldetnichtteilgenommen":
|
case "bewerberrtangemeldetnichtteilgenommen":
|
||||||
$where['ps.status_kurzbz'] = 'Bewerber';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Bewerber');
|
||||||
$this->PrestudentModel->db->where('EXISTS(' . $selectRT . ')', null, false);
|
$this->studentlistlib->addWhere('EXISTS(' . $selectRT . ')', null, false);
|
||||||
$where['reihungstestangetreten'] = false;
|
$this->studentlistlib->addWhere('reihungstestangetreten', false);
|
||||||
break;
|
break;
|
||||||
case "aufgenommen":
|
case "aufgenommen":
|
||||||
$where['ps.status_kurzbz'] = 'Aufgenommener';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Aufgenommener');
|
||||||
break;
|
break;
|
||||||
case "warteliste":
|
case "warteliste":
|
||||||
$where['ps.status_kurzbz'] = 'Wartender';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Wartender');
|
||||||
break;
|
break;
|
||||||
case "absage":
|
case "absage":
|
||||||
$where['ps.status_kurzbz'] = 'Abgewiesener';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Abgewiesener');
|
||||||
break;
|
break;
|
||||||
case "incoming":
|
case "incoming":
|
||||||
// NOTE(chris): in FAS it was not filtered for studiengang_kz
|
// NOTE(chris): in FAS it was not filtered for studiengang_kz
|
||||||
$where['ps.status_kurzbz'] = 'Incoming';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Incoming');
|
||||||
break;
|
break;
|
||||||
case "absolvent":
|
case "absolvent":
|
||||||
$where['ps.status_kurzbz'] = 'Absolvent';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Absolvent');
|
||||||
break;
|
break;
|
||||||
case "diplomand":
|
case "diplomand":
|
||||||
$where['ps.status_kurzbz'] = 'Diplomand';
|
$this->studentlistlib->addWhere('ps.status_kurzbz', 'Diplomand');
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (!$studiensemester_kurzbz) {
|
if (!$studiensemester_kurzbz) {
|
||||||
@@ -444,9 +417,9 @@ class Students extends FHCAPI_Controller
|
|||||||
* show all prestudents in this stg who don't have a status
|
* show all prestudents in this stg who don't have a status
|
||||||
* $orgform_kurzbz does not change the results since orgform is stored in the status table
|
* $orgform_kurzbz does not change the results since orgform is stored in the status table
|
||||||
*/
|
*/
|
||||||
$where['ps.status_kurzbz'] = null;
|
$this->studentlistlib->addWhere('ps.status_kurzbz IS NULL');
|
||||||
} else {
|
} else {
|
||||||
$this->PrestudentModel->db->where_in('ps.status_kurzbz', [
|
$this->studentlistlib->addWhere('ps.status_kurzbz', [
|
||||||
'Interessent',
|
'Interessent',
|
||||||
'Bewerber',
|
'Bewerber',
|
||||||
'Aufgenommener',
|
'Aufgenommener',
|
||||||
@@ -457,24 +430,24 @@ class Students extends FHCAPI_Controller
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
$this->studentlistlib->addSelect("
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("
|
|
||||||
CASE
|
CASE
|
||||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
THEN ps.ausbildungssemester::text
|
THEN ps.ausbildungssemester::text
|
||||||
ELSE ''::text
|
ELSE ''::text
|
||||||
END AS semester", false);
|
END AS semester", false);
|
||||||
$this->PrestudentModel->addSelect("'' AS verband");
|
$this->studentlistlib->addSelect("'' AS verband");
|
||||||
$this->PrestudentModel->addSelect("'' AS gruppe");
|
$this->studentlistlib->addSelect("'' AS gruppe");
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
$query_studiensemester_kurzbz = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : '\'NULL\'';
|
||||||
|
$this->studentlistlib->addSelect($query_studiensemester_kurzbz . ' as query_studiensemester_kurzbz');
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere($where);
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->decodeTagsJsonInResult($data);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -574,7 +547,6 @@ class Students extends FHCAPI_Controller
|
|||||||
$gruppe_kurzbz = null,
|
$gruppe_kurzbz = null,
|
||||||
$orgform_kurzbz = null
|
$orgform_kurzbz = null
|
||||||
) {
|
) {
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
|
||||||
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
|
if (!$this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
|
||||||
@@ -582,36 +554,32 @@ class Students extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz, '');
|
// NOTE(chris): overwrite 'LEFT JOIN' with 'JOIN'
|
||||||
|
$this->studentlistlib->addJoin("public.tbl_student s", "prestudent_id");
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('v.semester');
|
$this->studentlistlib->addSelect("'' AS priorisierung_relativ");
|
||||||
$this->PrestudentModel->addSelect('v.verband');
|
$this->studentlistlib->addSelect($this->PrestudentModel->escape($studiensemester_kurzbz) . ' as query_studiensemester_kurzbz');
|
||||||
$this->PrestudentModel->addSelect('v.gruppe');
|
|
||||||
$this->PrestudentModel->addSelect("'' AS priorisierung_relativ");
|
|
||||||
|
|
||||||
|
|
||||||
$where = [];
|
|
||||||
|
|
||||||
if ($gruppe_kurzbz !== null) {
|
if ($gruppe_kurzbz !== null) {
|
||||||
$this->PrestudentModel->addJoin('public.tbl_benutzergruppe g', 'uid');
|
$this->studentlistlib->addJoin('public.tbl_benutzergruppe g', 'uid', '', 'after_b');
|
||||||
$where['g.gruppe_kurzbz'] = $gruppe_kurzbz;
|
$this->studentlistlib->addWhere('g.gruppe_kurzbz', $gruppe_kurzbz);
|
||||||
$where['g.studiensemester_kurzbz'] = $studiensemester_kurzbz;
|
$this->studentlistlib->addWhere('g.studiensemester_kurzbz', $studiensemester_kurzbz);
|
||||||
} else {
|
} else {
|
||||||
$where['v.studiengang_kz'] = $studiengang_kz;
|
$this->studentlistlib->addWhere('v.studiengang_kz', $studiengang_kz);
|
||||||
|
|
||||||
if ($semester !== null)
|
if ($semester !== null)
|
||||||
$where['v.semester'] = $semester;
|
$this->studentlistlib->addWhere('v.semester', $semester);
|
||||||
|
|
||||||
if ($verband !== null)
|
if ($verband !== null)
|
||||||
$where['v.verband'] = $verband;
|
$this->studentlistlib->addWhere('v.verband', $verband);
|
||||||
|
|
||||||
if ($gruppe !== null)
|
if ($gruppe !== null)
|
||||||
$where['v.gruppe'] = $gruppe;
|
$this->studentlistlib->addWhere('v.gruppe', $gruppe);
|
||||||
|
|
||||||
if (!$verband && !$gruppe && $orgform_kurzbz !== null) {
|
if (!$verband && !$gruppe && $orgform_kurzbz !== null) {
|
||||||
$this->PrestudentModel->db->where(
|
$this->studentlistlib->addWhere(
|
||||||
"(
|
"(
|
||||||
SELECT orgform_kurzbz
|
SELECT orgform_kurzbz
|
||||||
FROM public.tbl_prestudentstatus
|
FROM public.tbl_prestudentstatus
|
||||||
WHERE prestudent_id=tbl_prestudent.prestudent_id
|
WHERE prestudent_id=tbl_prestudent.prestudent_id
|
||||||
AND studiensemester_kurzbz=" . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
AND studiensemester_kurzbz=" . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||||
@@ -623,15 +591,28 @@ class Students extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere($where);
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->decodeTagsJsonInResult($data);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function decodeTagsJsonInResult(&$data)
|
||||||
|
{
|
||||||
|
if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED) {
|
||||||
|
array_walk($data, function($item, $key) {
|
||||||
|
if(isset($item->tags))
|
||||||
|
{
|
||||||
|
$item->tags = json_decode($item->tags);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $prestudent_id
|
* @param string $prestudent_id
|
||||||
*
|
*
|
||||||
@@ -652,11 +633,8 @@ class Students extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
$this->studentlistlib->addSelect("COALESCE(
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("COALESCE(
|
|
||||||
v.semester::text,
|
v.semester::text,
|
||||||
CASE
|
CASE
|
||||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
@@ -664,19 +642,18 @@ class Students extends FHCAPI_Controller
|
|||||||
ELSE ''::text
|
ELSE ''::text
|
||||||
END
|
END
|
||||||
) AS semester", false);
|
) AS semester", false);
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
|
||||||
|
|
||||||
|
$this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_id);
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere([
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
'tbl_prestudent.prestudent_id' => $prestudent_id
|
|
||||||
]);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->decodeTagsJsonInResult($data);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -700,26 +677,16 @@ class Students extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('v.semester');
|
|
||||||
$this->PrestudentModel->addSelect('v.verband');
|
|
||||||
$this->PrestudentModel->addSelect('v.gruppe');
|
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
|
|
||||||
|
$this->studentlistlib->addWhere('s.student_uid', $student_uid);
|
||||||
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere([
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
's.student_uid' => $student_uid
|
|
||||||
]);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->decodeTagsJsonInResult($data);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -744,24 +711,16 @@ class Students extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
$this->studentlistlib->addWhere('p.person_id', $person_id);
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('v.semester');
|
|
||||||
$this->PrestudentModel->addSelect('v.verband');
|
|
||||||
$this->PrestudentModel->addSelect('v.gruppe');
|
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere([
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
'p.person_id' => $person_id
|
|
||||||
]);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->decodeTagsJsonInResult($data);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -790,29 +749,8 @@ class Students extends FHCAPI_Controller
|
|||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.semester::text, CASE WHEN public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') THEN public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)::text ELSE ''::text END) AS semester", false);
|
|
||||||
$this->PrestudentModel->addSelect('v.verband');
|
|
||||||
$this->PrestudentModel->addSelect('v.gruppe');
|
|
||||||
|
|
||||||
//add status per semester
|
|
||||||
$this->PrestudentModel->addSelect(
|
|
||||||
"public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
|
|
||||||
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
|
||||||
. ") AS statusofsemester"
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$prestudent_ids = [];
|
$prestudent_ids = [];
|
||||||
$student_uids = [];
|
$student_uids = [];
|
||||||
$this->addMeta('data', $data);
|
|
||||||
foreach ($data as $row) {
|
foreach ($data as $row) {
|
||||||
$dataset = json_decode($row->data);
|
$dataset = json_decode($row->data);
|
||||||
if ($row->type == 'prestudent') {
|
if ($row->type == 'prestudent') {
|
||||||
@@ -822,148 +760,39 @@ class Students extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$this->studentlistlib->addSelect("COALESCE(
|
||||||
|
v.semester::text,
|
||||||
|
CASE
|
||||||
|
WHEN public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
|
THEN public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)::text
|
||||||
|
ELSE ''::text
|
||||||
|
END
|
||||||
|
) AS semester", false);
|
||||||
|
|
||||||
|
$this->studentlistlib->addSelect($this->PrestudentModel->escape($studiensemester_kurzbz) . ' as query_studiensemester_kurzbz');
|
||||||
|
|
||||||
if ($prestudent_ids && $student_uids) {
|
if ($prestudent_ids && $student_uids) {
|
||||||
$this->PrestudentModel->db->where_in('tbl_prestudent.prestudent_id', $prestudent_ids);
|
$this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_ids);
|
||||||
$this->PrestudentModel->db->or_where_in('s.student_uid', $student_uids);
|
$this->studentlistlib->addOrWhere('s.student_uid', $student_uids);
|
||||||
} elseif ($prestudent_ids) {
|
} elseif ($prestudent_ids) {
|
||||||
$this->PrestudentModel->db->where_in('tbl_prestudent.prestudent_id', $prestudent_ids);
|
$this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_ids);
|
||||||
} elseif ($student_uids) {
|
} elseif ($student_uids) {
|
||||||
$this->PrestudentModel->db->where_in('s.student_uid', $student_uids);
|
$this->studentlistlib->addWhere('s.student_uid', $student_uids);
|
||||||
} else {
|
} else {
|
||||||
$this->terminateWithSuccess([]);
|
$this->terminateWithSuccess([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = $this->PrestudentModel->load();
|
|
||||||
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->decodeTagsJsonInResult($data);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string|null $studiensemester_kurzbz
|
|
||||||
* @param string $type
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
protected function prepareQuery($studiensemester_kurzbz, $type = 'LEFT')
|
|
||||||
{
|
|
||||||
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id', $type);
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_prestudentstatus pls', '
|
|
||||||
pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL)
|
|
||||||
AND pls.prestudent_id=tbl_prestudent.prestudent_id
|
|
||||||
AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL)
|
|
||||||
AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT');
|
|
||||||
$this->PrestudentModel->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT');
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid', 'LEFT');
|
|
||||||
$this->PrestudentModel->addJoin(
|
|
||||||
'public.tbl_studentlehrverband v',
|
|
||||||
'v.student_uid=s.student_uid AND v.studiensemester_kurzbz' . ($studiensemester_kurzbz ? '=' . $stdsemEsc : ' IS NULL'),
|
|
||||||
$type
|
|
||||||
);
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_prestudentstatus ps', '
|
|
||||||
ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
|
||||||
AND ps.prestudent_id=tbl_prestudent.prestudent_id
|
|
||||||
AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
|
||||||
AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');
|
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("b.uid");
|
|
||||||
$this->PrestudentModel->addSelect('titelpre');
|
|
||||||
$this->PrestudentModel->addSelect('nachname');
|
|
||||||
$this->PrestudentModel->addSelect('vorname');
|
|
||||||
$this->PrestudentModel->addSelect('wahlname');
|
|
||||||
$this->PrestudentModel->addSelect('vornamen');
|
|
||||||
$this->PrestudentModel->addSelect('titelpost');
|
|
||||||
$this->PrestudentModel->addSelect('ersatzkennzeichen');
|
|
||||||
$this->PrestudentModel->addSelect('gebdatum');
|
|
||||||
$this->PrestudentModel->addSelect('geschlecht');
|
|
||||||
$this->PrestudentModel->addSelect('foto');
|
|
||||||
$this->PrestudentModel->addSelect('foto_sperre');
|
|
||||||
|
|
||||||
// semester
|
|
||||||
// verband
|
|
||||||
// gruppe
|
|
||||||
|
|
||||||
//add status per semester
|
|
||||||
$this->PrestudentModel->addSelect(
|
|
||||||
"public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
|
|
||||||
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
|
||||||
. ") AS statusofsemester"
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.studiengang_kz');
|
|
||||||
$this->PrestudentModel->addSelect('stg.bezeichnung AS stg_bezeichnung');
|
|
||||||
$this->PrestudentModel->addSelect("s.matrikelnr");
|
|
||||||
$this->PrestudentModel->addSelect('p.person_id');
|
|
||||||
$this->PrestudentModel->addSelect('pls.status_kurzbz AS status');
|
|
||||||
$this->PrestudentModel->addSelect('pls.datum AS status_datum');
|
|
||||||
$this->PrestudentModel->addSelect('pls.bestaetigtam AS status_bestaetigung');
|
|
||||||
$this->PrestudentModel->addSelect(
|
|
||||||
"(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS mail_privat",
|
|
||||||
false
|
|
||||||
);
|
|
||||||
$this->PrestudentModel->addSelect("
|
|
||||||
CASE WHEN b.uid IS NOT NULL AND b.uid<>''
|
|
||||||
THEN CONCAT(b.uid, '@', " . $this->PrestudentModel->escape(DOMAIN) . ")
|
|
||||||
ELSE '' END AS mail_intern", false);
|
|
||||||
$this->PrestudentModel->addSelect('p.anmerkung AS anmerkungen');
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.anmerkung');
|
|
||||||
$this->PrestudentModel->addSelect('pls.orgform_kurzbz');
|
|
||||||
$this->PrestudentModel->addSelect('aufmerksamdurch_kurzbz');
|
|
||||||
$this->PrestudentModel->addSelect(
|
|
||||||
"(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=ps.prestudent_id) AS punkte",
|
|
||||||
false
|
|
||||||
);
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.dual');
|
|
||||||
$this->PrestudentModel->addSelect('p.matr_nr');
|
|
||||||
$this->PrestudentModel->addSelect('sp.bezeichnung AS studienplan_bezeichnung');
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.prestudent_id');
|
|
||||||
|
|
||||||
// priorisierung_relativ
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('mentor');
|
|
||||||
$this->PrestudentModel->addSelect('b.aktiv AS bnaktiv');
|
|
||||||
|
|
||||||
$this->PrestudentModel->db->where_in('tbl_prestudent.studiengang_kz', $this->allowedStgs);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addOrder('nachname');
|
|
||||||
$this->PrestudentModel->addOrder('vorname');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
protected function addSelectPrioRel()
|
|
||||||
{
|
|
||||||
$this->PrestudentModel->addSelect("(
|
|
||||||
SELECT count(*)
|
|
||||||
FROM (
|
|
||||||
SELECT *, public.get_rolle_prestudent(pss.prestudent_id, NULL) AS laststatus
|
|
||||||
FROM public.tbl_prestudent pss
|
|
||||||
JOIN public.tbl_prestudentstatus USING (prestudent_id)
|
|
||||||
WHERE person_id = p.person_id
|
|
||||||
AND studiensemester_kurzbz = (
|
|
||||||
SELECT studiensemester_kurzbz
|
|
||||||
FROM public.tbl_prestudentstatus
|
|
||||||
WHERE prestudent_id = tbl_prestudent.prestudent_id
|
|
||||||
AND status_kurzbz = 'Interessent'
|
|
||||||
LIMIT 1
|
|
||||||
)
|
|
||||||
AND status_kurzbz = 'Interessent'
|
|
||||||
) prest
|
|
||||||
WHERE laststatus NOT IN ('Abbrecher', 'Abgewiesener', 'Absolvent')
|
|
||||||
AND priorisierung <= tbl_prestudent.priorisierung
|
|
||||||
) || ' (' || COALESCE(tbl_prestudent.priorisierung::text, ' '::text) || ')' AS priorisierung_relativ", false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds additional filters to the query
|
* Adds additional filters to the query
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Tags extends Tag_Controller
|
||||||
|
{
|
||||||
|
const BERECHTIGUNG_KURZBZ = ['admin:rw', 'assistenz:rw'];
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'getTags' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'addTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'updateTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'doneTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'deleteTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'getAllTags' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'rebuildTagsForTypeId' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->config->load('stv');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTag($readonly_tags = null)
|
||||||
|
{
|
||||||
|
parent::getTag($this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function getTags($tags = null)
|
||||||
|
{
|
||||||
|
parent::getTags($this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function addTag($withZuordnung = true, $updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::addTag(true, $this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function updateTag($updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::updateTag($this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function deleteTag($withZuordnung = true, $updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::deleteTag(true, $this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
public function doneTag($updatable_tags = null)
|
||||||
|
{
|
||||||
|
parent::doneTag($this->config->item('stv_prestudent_tags'));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2024 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use CI3_Events as Events;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||||
|
* Provides data to the ajax get calls about the VV Config
|
||||||
|
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||||
|
*/
|
||||||
|
class Config extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'printDocument' => ['vertrag/mitarbeiter:r'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function printDocument()
|
||||||
|
{
|
||||||
|
$params = [];
|
||||||
|
$menu = [];
|
||||||
|
|
||||||
|
Events::trigger(
|
||||||
|
'multiActionPrintHonorarvertrag',
|
||||||
|
// passing $menu per reference
|
||||||
|
function & () use (&$menu) {
|
||||||
|
return $menu;
|
||||||
|
},
|
||||||
|
$params
|
||||||
|
);
|
||||||
|
|
||||||
|
if (is_array($menu) && isset($menu[0]))
|
||||||
|
{
|
||||||
|
$this->terminateWithSuccess($menu[0]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// $this->terminateWithError('Error with Event 'multiActionPrintHonorarvertrag');
|
||||||
|
$this->terminateWithSuccess();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,9 +26,6 @@ class Vertraege extends FHCAPI_Controller
|
|||||||
'deleteLehrauftrag' =>['vertrag/mitarbeiter:w'],
|
'deleteLehrauftrag' =>['vertrag/mitarbeiter:w'],
|
||||||
'deleteBetreuung' =>['vertrag/mitarbeiter:w'],
|
'deleteBetreuung' =>['vertrag/mitarbeiter:w'],
|
||||||
'getMitarbeiter' => ['vertrag/mitarbeiter:r'],
|
'getMitarbeiter' => ['vertrag/mitarbeiter:r'],
|
||||||
'getHeader' => ['vertrag/mitarbeiter:r'],
|
|
||||||
'getPersonAbteilung' => ['vertrag/mitarbeiter:r'],
|
|
||||||
'getLeitungOrg' => ['vertrag/mitarbeiter:r'],
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
//Load Models and Libraries
|
//Load Models and Libraries
|
||||||
@@ -241,7 +238,7 @@ class Vertraege extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->db->trans_complete();
|
$this->db->trans_complete();
|
||||||
$this->terminateWithSuccess(true);
|
$this->terminateWithSuccess($vertrag_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateContract()
|
public function updateContract()
|
||||||
@@ -358,7 +355,7 @@ class Vertraege extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
$this->db->trans_complete();
|
$this->db->trans_complete();
|
||||||
|
|
||||||
$this->terminateWithSuccess(true);
|
$this->terminateWithSuccess($vertrag_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadContract($vertrag_id)
|
public function loadContract($vertrag_id)
|
||||||
@@ -684,37 +681,4 @@ class Vertraege extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
return $this->terminateWithSuccess(getData($result));
|
return $this->terminateWithSuccess(getData($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPersonAbteilung($mitarbeiter_uid)
|
|
||||||
{
|
|
||||||
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
|
||||||
|
|
||||||
$result = $this->Mitarbeitermodel->getPersonAbteilung($mitarbeiter_uid);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(current($data));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getLeitungOrg($oekurzbz)
|
|
||||||
{
|
|
||||||
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
|
||||||
|
|
||||||
$result = $this->Mitarbeitermodel->getLeitungOrg($oekurzbz);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(current($data));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getHeader($person_id)
|
|
||||||
{
|
|
||||||
$this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel');
|
|
||||||
|
|
||||||
$result = $this->Mitarbeitermodel->getHeader($person_id);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(current($data));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,12 +13,13 @@ class Mylv extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'Student' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions?
|
'Student' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'], // TODO(chris): permissions?
|
||||||
'Studiensemester' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions?
|
'Studiensemester' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'], // TODO(chris): permissions?
|
||||||
'Lvs' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions?
|
'Lvs' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'], // TODO(chris): permissions?
|
||||||
'Info' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions?
|
'Info' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'], // TODO(chris): permissions?
|
||||||
'Pruefungen' => ['student/anrechnung_beantragen:r','user:r'] // TODO(chris): permissions?
|
'Pruefungen' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'] // TODO(chris): permissions?
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,13 +45,27 @@ class Mylv extends Auth_Controller
|
|||||||
public function Studiensemester()
|
public function Studiensemester()
|
||||||
{
|
{
|
||||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||||
|
|
||||||
$result = $this->StudiensemesterModel->getWhereStudentHasLvs(getAuthUID());
|
$isMitarbeiter = getData($this->MitarbeiterModel->isMitarbeiter(getAuthUID())) ?? false;
|
||||||
|
if($isMitarbeiter) {
|
||||||
|
$result = $this->StudiensemesterModel->getWhereMitarbeiterHasLvs(getAuthUID());
|
||||||
|
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
return $this->outputJsonError(getError($result));
|
return $this->outputJsonError(getError($result));
|
||||||
|
|
||||||
$this->outputJsonSuccess(getData($result));
|
$this->outputJsonSuccess(getData($result));
|
||||||
|
} else if(getData($this->StudentModel->isStudent(getAuthUID())) ?? false) { // $isStudent
|
||||||
|
$result = $this->StudiensemesterModel->getWhereStudentHasLvs(getAuthUID());
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
return $this->outputJsonError(getError($result));
|
||||||
|
|
||||||
|
$this->outputJsonSuccess(getData($result));
|
||||||
|
} else {
|
||||||
|
$this->outputJsonError('neither student or mitarbeiter');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -58,13 +73,27 @@ class Mylv extends Auth_Controller
|
|||||||
public function Lvs($studiensemester_kurzbz)
|
public function Lvs($studiensemester_kurzbz)
|
||||||
{
|
{
|
||||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||||
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||||
|
|
||||||
$result = $this->LehrveranstaltungModel->getLvsByStudentWithGrades(getAuthUID(), $studiensemester_kurzbz, getUserLanguage());
|
$isMitarbeiter = getData($this->MitarbeiterModel->isMitarbeiter(getAuthUID())) ?? false;
|
||||||
|
if($isMitarbeiter) {
|
||||||
|
$result = $this->LehrveranstaltungModel->getLvsByMitarbeiterInSemester(getAuthUID(), $studiensemester_kurzbz);
|
||||||
|
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
return $this->outputJsonError(getError($result));
|
return $this->outputJsonError(getError($result));
|
||||||
|
|
||||||
$this->outputJsonSuccess(getData($result));
|
$this->outputJsonSuccess(getData($result));
|
||||||
|
} else if(getData($this->StudentModel->isStudent(getAuthUID())) ?? false) { // $isStudent
|
||||||
|
$result = $this->LehrveranstaltungModel->getLvsByStudentWithGrades(getAuthUID(), $studiensemester_kurzbz, getUserLanguage());
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
return $this->outputJsonError(getError($result));
|
||||||
|
|
||||||
|
$this->outputJsonSuccess(getData($result));
|
||||||
|
} else {
|
||||||
|
$this->outputJsonError('neither student or mitarbeiter');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2026 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
class Admin extends Auth_Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
// Set required permissions
|
||||||
|
parent::__construct(
|
||||||
|
array(
|
||||||
|
'index' => 'dashboard/admin:rw',
|
||||||
|
'preview' => 'dashboard/admin:r',
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$this->load->view('dashboard/admin.php', []);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function preview($dashboard_kurzbz = 'CIS')
|
||||||
|
{
|
||||||
|
$this->load->view('dashboard/preview.php', [
|
||||||
|
'dashboard_kurzbz' => $dashboard_kurzbz
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
<?php
|
|
||||||
defined('BASEPATH') || exit('No direct script access allowed');
|
|
||||||
|
|
||||||
class Api extends Auth_Controller
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct(
|
|
||||||
array(
|
|
||||||
'index' => 'dashboard/admin:rw',
|
|
||||||
'getNews' => 'dashboard/benutzer:r',
|
|
||||||
'getAmpeln' => 'dashboard/benutzer:r',
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->library('AuthLib', null, 'AuthLib');
|
|
||||||
|
|
||||||
$this->_setAuthUID();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
echo 'Dashboard API Controller';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get News.
|
|
||||||
*/
|
|
||||||
public function getNews()
|
|
||||||
{
|
|
||||||
$limit = $this->input->get('limit');
|
|
||||||
|
|
||||||
$this->load->model('content/News_model', 'NewsModel');
|
|
||||||
|
|
||||||
$result = $this->NewsModel->getAll($limit);
|
|
||||||
|
|
||||||
if (hasData($result))
|
|
||||||
{
|
|
||||||
$this->outputJson(getData($result), REST_Controller::HTTP_OK);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->terminateWithJsonError('fehler entdeckt');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Ampeln.
|
|
||||||
*/
|
|
||||||
public function getAmpeln()
|
|
||||||
{
|
|
||||||
|
|
||||||
$this->load->model('content/Ampel_model', 'AmpelModel');
|
|
||||||
$result = $this->AmpelModel->getByUser($this->_uid);
|
|
||||||
|
|
||||||
if (hasData($result))
|
|
||||||
{
|
|
||||||
$this->outputJson(getData($result), REST_Controller::HTTP_OK);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->terminateWithJsonError('fehler entdeckt');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve the UID of the logged user and checks if it is valid
|
|
||||||
*/
|
|
||||||
private function _setAuthUID()
|
|
||||||
{
|
|
||||||
$this->_uid = getAuthUID();
|
|
||||||
|
|
||||||
if (!$this->_uid) show_error('User authentification failed');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,216 +0,0 @@
|
|||||||
<?php
|
|
||||||
defined('BASEPATH') || exit('No direct script access allowed');
|
|
||||||
/**
|
|
||||||
* Description of Config
|
|
||||||
*
|
|
||||||
* @author bambi
|
|
||||||
*/
|
|
||||||
class Config extends Auth_Controller
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct(
|
|
||||||
array(
|
|
||||||
'index' => 'dashboard/benutzer:r',
|
|
||||||
'dummy' => 'dashboard/benutzer:r',
|
|
||||||
'genWidgetId' => 'dashboard/benutzer:rw',
|
|
||||||
'addWidgetsToPreset' => 'dashboard/admin:rw',
|
|
||||||
'removeWidgetFromPreset' => 'dashboard/admin:rw',
|
|
||||||
'addWidgetsToUserOverride' => 'dashboard/benutzer:rw',
|
|
||||||
'removeWidgetFromUserOverride' => 'dashboard/benutzer:rw',
|
|
||||||
'funktionen' => 'dashboard/admin:r',
|
|
||||||
'preset' => 'dashboard/admin:r',
|
|
||||||
'presetBatch' => 'dashboard/admin:r'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->library('dashboard/DashboardLib', null, 'DashboardLib');
|
|
||||||
$this->load->library('AuthLib', null, 'AuthLib');
|
|
||||||
$this->load->model('ressource/Funktion_model', 'FunktionModel');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
$dashboard_kurzbz = $this->input->get('db');
|
|
||||||
$uid = $this->AuthLib->getAuthObj()->username;
|
|
||||||
|
|
||||||
$dashboard = $this->DashboardLib->getDashboardByKurzbz($dashboard_kurzbz);
|
|
||||||
if(!$dashboard) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError(array(
|
|
||||||
'error' => 'Dashboard ' . $dashboard_kurzbz . ' not found.'
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
$mergedconfig = $this->DashboardLib->getMergedConfig($dashboard->dashboard_id, $uid);
|
|
||||||
$this->outputJsonSuccess($mergedconfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function genWidgetId()
|
|
||||||
{
|
|
||||||
$dashboard_kurzbz = $this->input->get('db');
|
|
||||||
$widgetid = $this->DashboardLib->generateWidgetId($dashboard_kurzbz);
|
|
||||||
$this->outputJsonSuccess(array(
|
|
||||||
'widgetid' => $widgetid
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addWidgetsToPreset()
|
|
||||||
{
|
|
||||||
$input = json_decode($this->input->raw_input_stream);
|
|
||||||
$dashboard_kurzbz = $input->db;
|
|
||||||
$funktion_kurzbz = $input->funktion_kurzbz;
|
|
||||||
|
|
||||||
$preset = $this->DashboardLib->getPresetOrCreateEmptyPreset($dashboard_kurzbz, $funktion_kurzbz);
|
|
||||||
|
|
||||||
$preset_decoded = json_decode($preset->preset, true);
|
|
||||||
|
|
||||||
$this->DashboardLib->addWidgetsToWidgets($preset_decoded, $dashboard_kurzbz, $funktion_kurzbz, $input->widgets);
|
|
||||||
|
|
||||||
$preset->preset = json_encode($preset_decoded);
|
|
||||||
|
|
||||||
$result = $this->DashboardLib->insertOrUpdatePreset($preset);
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(500);
|
|
||||||
$this->terminateWithJsonError('preset could not be saved');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->outputJsonSuccess(array('msg' => 'preset successfully stored.', 'data' => $preset_decoded));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function removeWidgetFromPreset()
|
|
||||||
{
|
|
||||||
$input = json_decode($this->input->raw_input_stream);
|
|
||||||
$dashboard_kurzbz = $input->db;
|
|
||||||
$funktion_kurzbz = $input->funktion_kurzbz;
|
|
||||||
$widgetid = $input->widgetid;
|
|
||||||
|
|
||||||
$preset = $this->DashboardLib->getPreset($dashboard_kurzbz, $funktion_kurzbz);
|
|
||||||
if ($preset === null) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError('preset for dashboard ' . $dashboard_kurzbz . ' and funktion ' . $funktion_kurzbz . ' not found.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$preset_decoded = json_decode($preset->preset, true);
|
|
||||||
if (!$this->DashboardLib->removeWidgetFromWidgets($preset_decoded, $funktion_kurzbz, $widgetid))
|
|
||||||
{
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError('widgetid ' . $widgetid . ' not found');
|
|
||||||
}
|
|
||||||
|
|
||||||
$preset->preset = json_encode($preset_decoded);
|
|
||||||
$result = $this->DashboardLib->insertOrUpdatePreset($preset);
|
|
||||||
if (isError($result))
|
|
||||||
{
|
|
||||||
http_response_code(500);
|
|
||||||
$this->terminateWithJsonError('failed to remove widget');
|
|
||||||
}
|
|
||||||
$this->outputJsonSuccess(array('msg' => 'preset successfully updated.'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addWidgetsToUserOverride()
|
|
||||||
{
|
|
||||||
$input = json_decode($this->input->raw_input_stream);
|
|
||||||
$dashboard_kurzbz = $input->db;
|
|
||||||
$funktion_kurzbz = $input->funktion_kurzbz;
|
|
||||||
$uid = $this->AuthLib->getAuthObj()->username;
|
|
||||||
|
|
||||||
$override = $this->DashboardLib->getOverrideOrCreateEmptyOverride($dashboard_kurzbz, $uid);
|
|
||||||
|
|
||||||
$override_decoded = json_decode($override->override, true);
|
|
||||||
|
|
||||||
$this->DashboardLib->addWidgetsToWidgets($override_decoded, $dashboard_kurzbz, $funktion_kurzbz, $input->widgets);
|
|
||||||
|
|
||||||
$override->override = json_encode($override_decoded);
|
|
||||||
|
|
||||||
$result = $this->DashboardLib->insertOrUpdateOverride($override);
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(500);
|
|
||||||
$this->terminateWithJsonError('override could not be saved');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->outputJsonSuccess(array('msg' => 'override successfully stored.', 'data' => $override_decoded));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function removeWidgetFromUserOverride()
|
|
||||||
{
|
|
||||||
$input = json_decode($this->input->raw_input_stream);
|
|
||||||
$dashboard_kurzbz = $input->db;
|
|
||||||
$funktion_kurzbz = $input->funktion_kurzbz;
|
|
||||||
$uid = $this->AuthLib->getAuthObj()->username;
|
|
||||||
$widgetid = $input->widgetid;
|
|
||||||
|
|
||||||
$override = $this->DashboardLib->getOverride($dashboard_kurzbz, $uid);
|
|
||||||
if (empty($override)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError('userconfig for dashboard ' . $dashboard_kurzbz . ' not found.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$override_decoded = json_decode($override->override, true);
|
|
||||||
|
|
||||||
if (!$this->DashboardLib->removeWidgetFromWidgets($override_decoded, $funktion_kurzbz, $widgetid))
|
|
||||||
{
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError('widgetid ' . $widgetid . ' not found');
|
|
||||||
}
|
|
||||||
|
|
||||||
$override->override = json_encode($override_decoded);
|
|
||||||
$result = $this->DashboardLib->insertOrUpdateOverride($override, $uid);
|
|
||||||
if (isError($result))
|
|
||||||
{
|
|
||||||
http_response_code(500);
|
|
||||||
$this->terminateWithJsonError('failed to remove widget');
|
|
||||||
}
|
|
||||||
$this->outputJsonSuccess(array('msg' => 'override successfully updated.'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function funktionen()
|
|
||||||
{
|
|
||||||
$funktionen = $this->FunktionModel->load();
|
|
||||||
|
|
||||||
if (isError($funktionen)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($funktionen)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(getData($funktionen) ?: []);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function preset()
|
|
||||||
{
|
|
||||||
$db = $this->input->get('db');
|
|
||||||
$funktion = $this->input->get('funktion');
|
|
||||||
|
|
||||||
$conf = $this->DashboardLib->getPreset($db, $funktion);
|
|
||||||
|
|
||||||
if (!$conf)
|
|
||||||
return $this->outputJsonSuccess(['widgets' => [$funktion => []]]);
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(json_decode($conf->preset, true));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function presetBatch()
|
|
||||||
{
|
|
||||||
$db = $this->input->get('db');
|
|
||||||
$funktionen = $this->input->get('funktionen');
|
|
||||||
$result = [];
|
|
||||||
|
|
||||||
foreach ($funktionen as $funktion) {
|
|
||||||
$conf = $this->DashboardLib->getPreset($db, $funktion);
|
|
||||||
if ($conf)
|
|
||||||
{
|
|
||||||
$preset = json_decode($conf->preset, true);
|
|
||||||
if (!isset($preset[$funktion]) || !isset($preset[$funktion]['widgets']))
|
|
||||||
$result[$funktion] = [];
|
|
||||||
else
|
|
||||||
$result[$funktion] = $preset[$funktion]['widgets'];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
$result[$funktion] = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess($result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
<?php
|
|
||||||
defined('BASEPATH') || exit('No direct script access allowed');
|
|
||||||
/**
|
|
||||||
* Description of Widget
|
|
||||||
*
|
|
||||||
* @author chris
|
|
||||||
*/
|
|
||||||
class Dashboard extends Auth_Controller
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct(
|
|
||||||
array(
|
|
||||||
'index' => 'dashboard/admin:r',
|
|
||||||
'create' => 'dashboard/admin:rw',
|
|
||||||
'update' => 'dashboard/admin:rw',
|
|
||||||
'delete' => 'dashboard/admin:rw'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->library('dashboard/DashboardLib', null, 'DashboardLib');
|
|
||||||
$this->load->model('dashboard/Dashboard_model', 'DashboardModel');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
$result = $this->DashboardModel->load();
|
|
||||||
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($result)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(getData($result) ?: []);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function create()
|
|
||||||
{
|
|
||||||
$input = $this->getPostJSON();
|
|
||||||
|
|
||||||
$result = $this->DashboardModel->insert($input);
|
|
||||||
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($result)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(getData($result) ?: []);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function update()
|
|
||||||
{
|
|
||||||
$input = $this->getPostJSON();
|
|
||||||
|
|
||||||
$result = $this->DashboardModel->update($input->dashboard_id, $input);
|
|
||||||
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($result)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(getData($result) ?: []);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function delete()
|
|
||||||
{
|
|
||||||
$input = $this->getPostJSON();
|
|
||||||
|
|
||||||
$result = $this->DashboardModel->delete($input->dashboard_id);
|
|
||||||
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($result)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(getData($result) ?: []);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
class DashboardDemo extends Auth_Controller
|
|
||||||
{
|
|
||||||
private $_uid; // uid of the logged user
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
// Set required permissions
|
|
||||||
parent::__construct(
|
|
||||||
array(
|
|
||||||
'index' => 'dashboard/benutzer:r',
|
|
||||||
'admin' => 'dashboard/admin:rw'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->library('AuthLib');
|
|
||||||
$this->load->library('WidgetLib');
|
|
||||||
|
|
||||||
$this->_setAuthUID(); // sets property uid
|
|
||||||
|
|
||||||
$this->setControllerId(); // sets the controller id
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------
|
|
||||||
// Public methods
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
$this->load->view('dashboard/dashboard_demo.php', []);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------
|
|
||||||
// Public methods
|
|
||||||
public function admin()
|
|
||||||
{
|
|
||||||
$this->load->view('dashboard/dashboard_demo_admin.php', []);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------
|
|
||||||
// Private methods
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve the UID of the logged user and checks if it is valid
|
|
||||||
*/
|
|
||||||
private function _setAuthUID()
|
|
||||||
{
|
|
||||||
$this->_uid = getAuthUID();
|
|
||||||
|
|
||||||
if (!$this->_uid) show_error('User authentification failed');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
<?php
|
|
||||||
defined('BASEPATH') || exit('No direct script access allowed');
|
|
||||||
/**
|
|
||||||
* Description of Widget
|
|
||||||
*
|
|
||||||
* @author chris
|
|
||||||
*/
|
|
||||||
class Widget extends Auth_Controller
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct(
|
|
||||||
array(
|
|
||||||
'index' => ['dashboard/benutzer:r', 'dashboard/admin:r'],
|
|
||||||
'getAll' => 'dashboard/admin:r',
|
|
||||||
'getWidgetsForDashboard' => ['dashboard/benutzer:rw', 'dashboard/admin:r'],
|
|
||||||
'setAllowed' => 'dashboard/admin:rw'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->library('dashboard/DashboardLib', null, 'DashboardLib');
|
|
||||||
$this->load->model('dashboard/Widget_model', 'WidgetModel');
|
|
||||||
$this->load->model('dashboard/Dashboard_Widget_model', 'DashboardWidgetModel');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
$widget_id = $this->input->get('id');
|
|
||||||
|
|
||||||
$widget = $this->WidgetModel->load($widget_id);
|
|
||||||
|
|
||||||
if (isError($widget) || !getData($widget))
|
|
||||||
return $this->outputJsonSuccess([
|
|
||||||
"widget_id" => 0,
|
|
||||||
"widget_kurzbz" => "notfound",
|
|
||||||
"arguments" => [
|
|
||||||
"className" => 'alert-danger',
|
|
||||||
"title" => 'Widget Not Found',
|
|
||||||
"msg" => 'The widget with the id ' . $widget_id . ' could not be found'
|
|
||||||
],
|
|
||||||
"setup" => [
|
|
||||||
"name" => 'Widget Not Found',
|
|
||||||
"file" => absoluteJsImportUrl('public/js/components/DashboardWidget/Default.js'),
|
|
||||||
"width" => 1,
|
|
||||||
"height" => 1
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
|
|
||||||
$widget = current(getData($widget));
|
|
||||||
$widget->arguments = json_decode($widget->arguments);
|
|
||||||
$tmpsetup = json_decode($widget->setup);
|
|
||||||
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
|
||||||
$widget->setup = $tmpsetup;
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess($widget);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getAll()
|
|
||||||
{
|
|
||||||
$dashboard_id = $this->input->get('dashboard_id');
|
|
||||||
$result = $this->WidgetModel->getWithAllowedForDashboard($dashboard_id);
|
|
||||||
|
|
||||||
if (isError($result))
|
|
||||||
return $this->outputJsonError(getError($result));
|
|
||||||
|
|
||||||
$tmpwidgets = getData($result) ?: [];
|
|
||||||
$widgets = array_map(function($widget) {
|
|
||||||
$widget->arguments = json_decode($widget->arguments);
|
|
||||||
$tmpsetup = json_decode($widget->setup);
|
|
||||||
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
|
||||||
$widget->setup = $tmpsetup;
|
|
||||||
return $widget;
|
|
||||||
}, $tmpwidgets);
|
|
||||||
|
|
||||||
$this->outputJsonSuccess($widgets);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getWidgetsForDashboard()
|
|
||||||
{
|
|
||||||
$db = $this->input->get('db');
|
|
||||||
$result = $this->WidgetModel->getForDashboard($db);
|
|
||||||
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($result)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$tmpwidgets = getData($result) ?: [];
|
|
||||||
$widgets = array_map(function($widget) {
|
|
||||||
$widget->arguments = json_decode($widget->arguments);
|
|
||||||
$tmpsetup = json_decode($widget->setup);
|
|
||||||
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
|
||||||
$widget->setup = $tmpsetup;
|
|
||||||
return $widget;
|
|
||||||
}, $tmpwidgets);
|
|
||||||
|
|
||||||
$this->outputJsonSuccess($widgets);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setAllowed()
|
|
||||||
{
|
|
||||||
$input = $this->getPostJSON();
|
|
||||||
|
|
||||||
$dashboard_id = $input->dashboard_id;
|
|
||||||
$widget_id = $input->widget_id;
|
|
||||||
$action = $input->action;
|
|
||||||
|
|
||||||
if ($action == 'add') {
|
|
||||||
$result = $this->DashboardWidgetModel->insert([
|
|
||||||
'dashboard_id' => $dashboard_id,
|
|
||||||
'widget_id' => $widget_id
|
|
||||||
]);
|
|
||||||
} elseif ($action == 'delete') {
|
|
||||||
$result = $this->DashboardWidgetModel->delete([
|
|
||||||
'dashboard_id' => $dashboard_id,
|
|
||||||
'widget_id' => $widget_id
|
|
||||||
]);
|
|
||||||
} else {
|
|
||||||
http_response_code(404); // TODO(chris): 400?
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => 'action value invalid'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($result)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
return $this->outputJsonSuccess(getData($result));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -22,11 +22,272 @@ class AbgabetoolJob extends JOB_Controller
|
|||||||
$this->_ci->load->model('crm/Student_model', 'StudentModel');
|
$this->_ci->load->model('crm/Student_model', 'StudentModel');
|
||||||
$this->_ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
$this->_ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
$this->_ci->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
$this->_ci->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||||
|
|
||||||
|
$this->_ci->load->library('SignatureLib');
|
||||||
|
|
||||||
$this->_ci->load->config('abgabe');
|
$this->_ci->load->config('abgabe');
|
||||||
$this->loadPhrases([
|
$this->loadPhrases([
|
||||||
'abgabetool'
|
'abgabetool'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// basically the notifyBetreuerMail function but email goes to assistenz
|
||||||
|
// and new abgaben are further evaluated for missing signature status
|
||||||
|
public function notifyAssistenzAboutMissingSignatureUploads() {
|
||||||
|
$this->_ci->logInfo('Start job FHC-Core->notifyAssistenzAboutMissingSignatureUploads');
|
||||||
|
|
||||||
|
$interval = $this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL');
|
||||||
|
$relevantTypes = $this->_ci->config->item('RELEVANT_PAABGABETYPEN_SAMMELMAIL_ASSISTENZ');
|
||||||
|
|
||||||
|
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSinceByAbgabedatum($interval, $relevantTypes);
|
||||||
|
$retval = getData($result);
|
||||||
|
|
||||||
|
// retval are paabgaben joined with projektarbeit and betreuer
|
||||||
|
if(count($retval) == 0) {
|
||||||
|
$this->logInfo("Keine Emails über neue Paabgaben an Assistenzen versandt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// group changed/new abgaben for projektarbeiten
|
||||||
|
$projektarbeiten = [];
|
||||||
|
foreach($retval as $abgabeWithNewUpload) {
|
||||||
|
// Check if the current item has a 'projektarbeit_id' field.
|
||||||
|
// Replace 'projektarbeit_id' with the actual key name if it's different.
|
||||||
|
if (isset($abgabeWithNewUpload->projektarbeit_id)) {
|
||||||
|
$projektarbeitId = $abgabeWithNewUpload->projektarbeit_id;
|
||||||
|
|
||||||
|
// If the 'projektarbeit_id' is not yet a key in $projektarbeiten,
|
||||||
|
// initialize it as an empty array.
|
||||||
|
if (!isset($projektarbeiten[$projektarbeitId])) {
|
||||||
|
$projektarbeiten[$projektarbeitId] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// check signature for that abgabe, main point of this job
|
||||||
|
$this->checkAbgabeSignatur($abgabeWithNewUpload, $abgabeWithNewUpload->student_uid);
|
||||||
|
|
||||||
|
// Add the current row to the array associated with its 'projektarbeit_id'.
|
||||||
|
$projektarbeiten[$projektarbeitId][] = $abgabeWithNewUpload;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// for each projektarbeit fetch their assistenz and same them in their own dictionary to avoid too many mails
|
||||||
|
$assistenzMap = [];
|
||||||
|
// for each projektarbeit fetch their betreuer and save them in their own dictionary to avoid too many mails
|
||||||
|
$projektarbeitBetreuerMap = [];
|
||||||
|
forEach($projektarbeiten as $projektarbeit_id => $abgaben) {
|
||||||
|
|
||||||
|
$assistenzResult = $this->_ci->OrganisationseinheitModel->getAssistenzForOE($abgaben[0]->stg_oe_kurzbz);
|
||||||
|
|
||||||
|
forEach($assistenzResult->retval as $assistenzRow) {
|
||||||
|
if (!isset($assistenzMap[$assistenzRow->person_id])) {
|
||||||
|
$assistenzMap[$assistenzRow->person_id] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the current $assistenzRow to the $assistenzMap as an array associated with its projektarbeit_id.
|
||||||
|
$assistenzMap[$assistenzRow->person_id][] = [$projektarbeit_id, $assistenzRow];
|
||||||
|
}
|
||||||
|
|
||||||
|
$betreuerResult = $this->_ci->ProjektbetreuerModel->getAllBetreuerOfProjektarbeit($projektarbeit_id);
|
||||||
|
|
||||||
|
forEach($betreuerResult->retval as $betreuerRow) {
|
||||||
|
if (!isset($projektarbeitBetreuerMap[$projektarbeit_id])) {
|
||||||
|
$projektarbeitBetreuerMap[$projektarbeit_id] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the current betreuerRow to the betreuerMap as an array associated with its projektarbeit_id.
|
||||||
|
$projektarbeitBetreuerMap[$projektarbeit_id][] = $betreuerRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
|
foreach($assistenzMap as $assistenz_person_id => $tupelArr) {
|
||||||
|
|
||||||
|
$abgabenString = '<div style="font-family: Arial, sans-serif; color: #333;">';
|
||||||
|
$hasIssues = false; // Track if this assistant actually needs an email
|
||||||
|
|
||||||
|
foreach($tupelArr as $tupel) {
|
||||||
|
$projektarbeit_id = $tupel[0];
|
||||||
|
$assistenzRow = $tupel[1];
|
||||||
|
|
||||||
|
$betreuerArray = $projektarbeitBetreuerMap[$projektarbeit_id] ?? [];
|
||||||
|
$allAbgaben = $projektarbeiten[$projektarbeit_id];
|
||||||
|
|
||||||
|
// only keep abgaben that are not correctly signed
|
||||||
|
$issueAbgaben = array_filter($allAbgaben, function($abgabe) {
|
||||||
|
// We only care about cases where it's explicitly NOT true (false, error, or null)
|
||||||
|
return $abgabe->signatur !== true;
|
||||||
|
});
|
||||||
|
|
||||||
|
// if this specific project has no signature issues, skip to the next project
|
||||||
|
if(empty($issueAbgaben)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we reached here, we have at least one issue to report
|
||||||
|
$hasIssues = true;
|
||||||
|
|
||||||
|
// Format the Student Name (using the first available abgabe object)
|
||||||
|
$s = reset($issueAbgaben);
|
||||||
|
$nameParts = array_filter([$s->titelpre, $s->vorname, $s->nachname, $s->titelpost]);
|
||||||
|
$studentFullName = implode(' ', $nameParts);
|
||||||
|
|
||||||
|
// Format the Supervisors string
|
||||||
|
$betreuerStrings = [];
|
||||||
|
foreach($betreuerArray as $b) {
|
||||||
|
$bNameParts = array_filter([$b->titelpre, $b->vorname, $b->nachname, $b->titelpost]);
|
||||||
|
$bFullName = implode(' ', $bNameParts);
|
||||||
|
$betreuerStrings[] = "{$bFullName} ({$b->betreuerart_kurzbz})";
|
||||||
|
}
|
||||||
|
$allBetreuerFormatted = implode(', ', $betreuerStrings);
|
||||||
|
|
||||||
|
$projektarbeit_titel = $s->titel ?? 'Kein Titel vergeben';
|
||||||
|
|
||||||
|
// Project Header Section
|
||||||
|
$abgabenString .= "
|
||||||
|
<div style='margin-top: 25px; padding: 12px; background-color: #fff5f5; border-left: 4px solid #dc3545; border-bottom: 1px solid #fee;'>
|
||||||
|
<strong style='font-size: 16px; color: #b02a37;'>Projekt: {$projektarbeit_titel}</strong><br/>
|
||||||
|
<div style='margin-top: 5px; font-size: 14px;'>
|
||||||
|
<strong>Studierende/r:</strong> {$studentFullName}
|
||||||
|
</div>
|
||||||
|
<div style='margin-top: 3px; font-size: 14px;'>
|
||||||
|
<strong>Betreuer:</strong> {$allBetreuerFormatted}
|
||||||
|
</div>
|
||||||
|
<span style='color: #666; font-size: 12px;'>
|
||||||
|
ID: {$projektarbeit_id} | Stg: {$s->stgtyp}{$s->stgkz} ({$s->studiensemester_kurzbz})
|
||||||
|
</span>
|
||||||
|
</div>";
|
||||||
|
|
||||||
|
// Start Table
|
||||||
|
$abgabenString .= '
|
||||||
|
<table style="width: 100%; border-collapse: collapse; margin-bottom: 25px;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background-color: #f8f9fa; text-align: left;">
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 20%;">Datum</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 45%;">Abgabe/Bezeichnung</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 35%;">Status</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>';
|
||||||
|
|
||||||
|
$printed = []; // lazy hack to avoid duplicate rows
|
||||||
|
foreach ($issueAbgaben as $abgabe) {
|
||||||
|
// if we had this paabgabe already (erstbetreuer/zweitbetreuer fetch achieves duplicates
|
||||||
|
if(in_array($abgabe->paabgabe_id, $printed)) {
|
||||||
|
continue; // skip this forEach iteration
|
||||||
|
}
|
||||||
|
|
||||||
|
$printed[] = $abgabe->paabgabe_id;
|
||||||
|
|
||||||
|
$abgabedatumFormatted = (new DateTime($abgabe->abgabedatum))->format('d.m.Y');
|
||||||
|
|
||||||
|
// label and color
|
||||||
|
if ($abgabe->signatur === false) {
|
||||||
|
$sigLabel = "FEHLENDE SIGNATUR";
|
||||||
|
$sigBg = "#dc3545";
|
||||||
|
} elseif ($abgabe->signatur === 'error') {
|
||||||
|
$sigLabel = "PRÜFUNG FEHLGESCHLAGEN";
|
||||||
|
$sigBg = "#fd7e14";
|
||||||
|
} else {
|
||||||
|
$sigLabel = "DATEI NICHT GEFUNDEN";
|
||||||
|
$sigBg = "#6c757d";
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= "
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>{$abgabedatumFormatted}</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px;'>
|
||||||
|
<strong>{$abgabe->bezeichnung}</strong>
|
||||||
|
</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; text-align: center;'>
|
||||||
|
<span style='color: #fff; background-color: {$sigBg}; padding: 3px 8px; border-radius: 3px; font-weight: bold; font-size: 11px;'>
|
||||||
|
{$sigLabel}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</tbody></table>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</div>';
|
||||||
|
|
||||||
|
// only send the email if at least one project had an issue
|
||||||
|
if ($hasIssues) {
|
||||||
|
$assistenzRow = $tupelArr[0][1];
|
||||||
|
$anrede = $assistenzRow->anrede;
|
||||||
|
$anredeFillString = $assistenzRow->anrede == "Herr" ? "r" : "";
|
||||||
|
$fullFormattedNameString = $assistenzRow->first;
|
||||||
|
|
||||||
|
$path = $this->_ci->config->item('URL_ASSISTENZ');
|
||||||
|
$url = CIS_ROOT . $path;
|
||||||
|
|
||||||
|
$body_fields = array(
|
||||||
|
'anrede' => $anrede,
|
||||||
|
'anredeFillString' => $anredeFillString,
|
||||||
|
'fullFormattedNameString' => $fullFormattedNameString,
|
||||||
|
'abgabenString' => $abgabenString,
|
||||||
|
'linkAbgabetool' => $url
|
||||||
|
);
|
||||||
|
|
||||||
|
$email = $assistenzRow->uid . "@" . DOMAIN;
|
||||||
|
|
||||||
|
sendSanchoMail(
|
||||||
|
'PAANoSigAssSM',
|
||||||
|
$body_fields,
|
||||||
|
$email,
|
||||||
|
$this->p->t('abgabetool', 'c4missingSignatureNotification')
|
||||||
|
);
|
||||||
|
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_ci->logInfo($count . " Emails bezüglich fehlender Signaturen erfolgreich versandt");
|
||||||
|
$this->_ci->logInfo('End job FHC-Core->notifyAssistenzAboutMissingSignatureUploads');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* helper function to check the signature status of uploaded files for zwischenabgabe & endupload
|
||||||
|
*/
|
||||||
|
private function checkAbgabeSignatur($abgabe, $student_uid) {
|
||||||
|
$paabgabetypenToCheck = $this->config->item('SIGNATUR_CHECK_PAABGABETYPEN');
|
||||||
|
|
||||||
|
if(!in_array($abgabe->paabgabetyp_kurzbz, $paabgabetypenToCheck)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined('SIGNATUR_URL')) {
|
||||||
|
$abgabe->signatur = 'error';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$path = PAABGABE_PATH.$abgabe->paabgabe_id.'_'.$student_uid.'.pdf';
|
||||||
|
|
||||||
|
$signaturVorhanden = null; // if frontend receives null -> indicates no file found at path
|
||||||
|
if(file_exists($path)) {
|
||||||
|
|
||||||
|
// Check if the document is signed
|
||||||
|
$signList = SignatureLib::list($path);
|
||||||
|
if (is_array($signList) && count($signList) > 0)
|
||||||
|
{
|
||||||
|
// The document is signed
|
||||||
|
$signaturVorhanden = true;
|
||||||
|
}
|
||||||
|
elseif ($signList === null)
|
||||||
|
{
|
||||||
|
// frontend knows to handle it this way for signatures
|
||||||
|
$signaturVorhanden = 'error';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$signaturVorhanden = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabe->signatur = $signaturVorhanden;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function notifyAssistenzAboutChangedAbgaben() {
|
public function notifyAssistenzAboutChangedAbgaben() {
|
||||||
@@ -234,8 +495,7 @@ class AbgabetoolJob extends JOB_Controller
|
|||||||
// get all new or changed termine in interval
|
// get all new or changed termine in interval
|
||||||
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSince($interval, $relevantTypes);
|
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSince($interval, $relevantTypes);
|
||||||
$retval = getData($result);
|
$retval = getData($result);
|
||||||
|
if(!$retval) {
|
||||||
if(count($retval) == 0) {
|
|
||||||
$this->_ci->logInfo("Keine Emails an Betreuer über neue oder veränderte Termine versandt");
|
$this->_ci->logInfo("Keine Emails an Betreuer über neue oder veränderte Termine versandt");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -248,17 +508,29 @@ class AbgabetoolJob extends JOB_Controller
|
|||||||
if (isset($newOrChangedAbgabe->projektarbeit_id)) {
|
if (isset($newOrChangedAbgabe->projektarbeit_id)) {
|
||||||
$projektarbeitId = $newOrChangedAbgabe->projektarbeit_id;
|
$projektarbeitId = $newOrChangedAbgabe->projektarbeit_id;
|
||||||
|
|
||||||
|
// check if the updatevon field is NOT the same as the student the projektarbeit is assigned to
|
||||||
|
// since uploading a file to a paabgabe is also putting updateamum & updatevon
|
||||||
|
// we have our own "student has uploaded a file" emailjob anyways
|
||||||
|
if($newOrChangedAbgabe->student_uid === $newOrChangedAbgabe->updatevon) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// If the 'projektarbeit_id' is not yet a key in $projektarbeiten,
|
// If the 'projektarbeit_id' is not yet a key in $projektarbeiten,
|
||||||
// initialize it as an empty array.
|
// initialize it as an empty array.
|
||||||
if (!isset($projektarbeiten[$projektarbeitId])) {
|
if (!isset($projektarbeiten[$projektarbeitId])) {
|
||||||
$projektarbeiten[$projektarbeitId] = [];
|
$projektarbeiten[$projektarbeitId] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the current row to the array associated with its 'projektarbeit_id'.
|
// Add the current row to the array associated with its 'projektarbeit_id'.
|
||||||
$projektarbeiten[$projektarbeitId][] = $newOrChangedAbgabe;
|
$projektarbeiten[$projektarbeitId][] = $newOrChangedAbgabe;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(count($projektarbeiten) == 0) {
|
||||||
|
$this->_ci->logInfo("Keine Emails an Betreuer über neue oder veränderte Termine versandt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// for each projektarbeit fetch their betreuer and save them in their own dictionary to avoid too many mails
|
// for each projektarbeit fetch their betreuer and save them in their own dictionary to avoid too many mails
|
||||||
$betreuerMap = [];
|
$betreuerMap = [];
|
||||||
forEach($projektarbeiten as $projektarbeit_id => $abgaben) {
|
forEach($projektarbeiten as $projektarbeit_id => $abgaben) {
|
||||||
@@ -289,6 +561,8 @@ class AbgabetoolJob extends JOB_Controller
|
|||||||
$anredeFillString = $data->anrede == "Herr" ? "r" : "";
|
$anredeFillString = $data->anrede == "Herr" ? "r" : "";
|
||||||
$fullFormattedNameString = $data->first;
|
$fullFormattedNameString = $data->first;
|
||||||
|
|
||||||
|
$relevantCounter = 0; // workaround to check if a betreuer needs to have any notification about relevant
|
||||||
|
// abgaben at all to avoid sending empty emails since we filter on certain conditions
|
||||||
forEach($tupelArr as $tupel) {
|
forEach($tupelArr as $tupel) {
|
||||||
$projektarbeit_id = $tupel[0];
|
$projektarbeit_id = $tupel[0];
|
||||||
$betreuerRow = $tupel[1];
|
$betreuerRow = $tupel[1];
|
||||||
@@ -307,6 +581,8 @@ class AbgabetoolJob extends JOB_Controller
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$relevantCounter++;
|
||||||
|
|
||||||
// format the Student Name
|
// format the Student Name
|
||||||
$s = $relevantAbgaben[0];
|
$s = $relevantAbgaben[0];
|
||||||
$nameParts = [];
|
$nameParts = [];
|
||||||
@@ -365,6 +641,11 @@ class AbgabetoolJob extends JOB_Controller
|
|||||||
// done with building the change list, now send it
|
// done with building the change list, now send it
|
||||||
$betreuerRow = $tupelArr[0][1];
|
$betreuerRow = $tupelArr[0][1];
|
||||||
|
|
||||||
|
if($relevantCounter == 0) {
|
||||||
|
$this->_ci->logInfo('No Relevant Abgaben to notify Betreuer PersonID: "'.$betreuerRow->person_id.'".');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$path = $this->_ci->config->item('URL_MITARBEITER');
|
$path = $this->_ci->config->item('URL_MITARBEITER');
|
||||||
$url = CIS_ROOT.$path;
|
$url = CIS_ROOT.$path;
|
||||||
|
|
||||||
@@ -377,6 +658,11 @@ class AbgabetoolJob extends JOB_Controller
|
|||||||
);
|
);
|
||||||
|
|
||||||
$email = $betreuerRow->uid ? $betreuerRow->uid."@".DOMAIN : $betreuerRow->private_email;
|
$email = $betreuerRow->uid ? $betreuerRow->uid."@".DOMAIN : $betreuerRow->private_email;
|
||||||
|
|
||||||
|
if(!$email) {
|
||||||
|
$this->_ci->logInfo('Could not send Email for Betreuer PersonID: "'.$data->person_id.'".');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// send email with bundled info
|
// send email with bundled info
|
||||||
sendSanchoMail(
|
sendSanchoMail(
|
||||||
@@ -500,6 +786,12 @@ class AbgabetoolJob extends JOB_Controller
|
|||||||
|
|
||||||
$email = $data->uid ? $data->uid."@".DOMAIN : $data->private_email;
|
$email = $data->uid ? $data->uid."@".DOMAIN : $data->private_email;
|
||||||
|
|
||||||
|
// in rare cases there are betreuer (often zweitbetreuer) without uid and without private email
|
||||||
|
if(!$email) {
|
||||||
|
$this->_ci->logInfo('Could not send Email for Betreuer PersonID: "'.$data->person_id.'".');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// send email with bundled info
|
// send email with bundled info
|
||||||
sendSanchoMail(
|
sendSanchoMail(
|
||||||
'PaabgabeUpdatesBetSM',
|
'PaabgabeUpdatesBetSM',
|
||||||
|
|||||||
@@ -40,6 +40,13 @@ class AntragJob extends JOB_Controller
|
|||||||
*/
|
*/
|
||||||
public function sendStglSammelmail()
|
public function sendStglSammelmail()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if ($this->config->item('abmeldung_enabled') !== true &&
|
||||||
|
$this->config->item('abmeldung_stg_enabled') !== true &&
|
||||||
|
$this->config->item('unterbrechung_enabled') !== true &&
|
||||||
|
$this->config->item('wiederholung_enabled') !== true)
|
||||||
|
return $this->logError('Konnte Job nicht starten: Keine der Configs "abmeldung_stg_enabled", "abmeldung_enabled", "unterbrechung_enabled", "wiederholung_enabled" auf true gesetzt');
|
||||||
|
|
||||||
$this->load->model('person/Person_model', 'PersonModel');
|
$this->load->model('person/Person_model', 'PersonModel');
|
||||||
|
|
||||||
$this->logInfo('Start Job sendStglSammelmail');
|
$this->logInfo('Start Job sendStglSammelmail');
|
||||||
@@ -47,25 +54,38 @@ class AntragJob extends JOB_Controller
|
|||||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
|
|
||||||
$this->StudierendenantragModel->addJoin('public.tbl_prestudent', 'prestudent_id');
|
$this->StudierendenantragModel->addJoin('public.tbl_prestudent', 'prestudent_id');
|
||||||
$this->db->group_start();
|
|
||||||
$this->db->where('typ', Studierendenantrag_model::TYP_ABMELDUNG);
|
|
||||||
$this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
|
|
||||||
$this->db->group_end();
|
|
||||||
|
|
||||||
$this->db->or_group_start();
|
if ($this->config->item('abmeldung_enabled') === true)
|
||||||
$this->db->where('typ', Studierendenantrag_model::TYP_ABMELDUNG_STGL);
|
{
|
||||||
$this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
|
$this->db->group_start();
|
||||||
$this->db->group_end();
|
$this->db->where('typ', Studierendenantrag_model::TYP_ABMELDUNG);
|
||||||
|
$this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
|
||||||
|
$this->db->group_end();
|
||||||
|
}
|
||||||
|
|
||||||
$this->db->or_group_start();
|
if ($this->config->item('abmeldung_stg_enabled') === true)
|
||||||
$this->db->where('typ', Studierendenantrag_model::TYP_UNTERBRECHUNG);
|
{
|
||||||
$this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
|
$this->db->or_group_start();
|
||||||
$this->db->group_end();
|
$this->db->where('typ', Studierendenantrag_model::TYP_ABMELDUNG_STGL);
|
||||||
|
$this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
|
||||||
|
$this->db->group_end();
|
||||||
|
}
|
||||||
|
|
||||||
$this->db->or_group_start();
|
if ($this->config->item('unterbrechung_enabled') === true)
|
||||||
$this->db->where('typ', Studierendenantrag_model::TYP_WIEDERHOLUNG);
|
{
|
||||||
$this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_LVSASSIGNED);
|
$this->db->or_group_start();
|
||||||
$this->db->group_end();
|
$this->db->where('typ', Studierendenantrag_model::TYP_UNTERBRECHUNG);
|
||||||
|
$this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_CREATED);
|
||||||
|
$this->db->group_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->config->item('wiederholung_enabled') === true)
|
||||||
|
{
|
||||||
|
$this->db->or_group_start();
|
||||||
|
$this->db->where('typ', Studierendenantrag_model::TYP_WIEDERHOLUNG);
|
||||||
|
$this->db->where('campus.get_status_studierendenantrag(studierendenantrag_id)', Studierendenantragstatus_model::STATUS_LVSASSIGNED);
|
||||||
|
$this->db->group_end();
|
||||||
|
}
|
||||||
|
|
||||||
$result = $this->StudierendenantragModel->load();
|
$result = $this->StudierendenantragModel->load();
|
||||||
if(isError($result))
|
if(isError($result))
|
||||||
@@ -206,6 +226,10 @@ class AntragJob extends JOB_Controller
|
|||||||
public function sendReminderWiedereinstieg()
|
public function sendReminderWiedereinstieg()
|
||||||
{
|
{
|
||||||
$now = new DateTime();
|
$now = new DateTime();
|
||||||
|
|
||||||
|
if ($this->config->item('unterbrechung_enabled') !== true)
|
||||||
|
return $this->logError('Konnte Job nicht starten: Config "unterbrechung_enabled" nicht auf true gesetzt');
|
||||||
|
|
||||||
$modifier = $this->config->item('unterbrechung_job_remind_wiedereinstieg_date_modifier');
|
$modifier = $this->config->item('unterbrechung_job_remind_wiedereinstieg_date_modifier');
|
||||||
|
|
||||||
if (!$modifier)
|
if (!$modifier)
|
||||||
@@ -363,6 +387,13 @@ class AntragJob extends JOB_Controller
|
|||||||
{
|
{
|
||||||
$this->logInfo('Start Job handleWiederholerDeadline');
|
$this->logInfo('Start Job handleWiederholerDeadline');
|
||||||
|
|
||||||
|
if ($this->config->item('wiederholung_enabled') !== true)
|
||||||
|
{
|
||||||
|
$this->logError('Config "wiederholung_enabled" nicht auf true gesetzt');
|
||||||
|
$this->logInfo('Ende Job handleWiederholerDeadline');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$this->load->library('PrestudentLib');
|
$this->load->library('PrestudentLib');
|
||||||
|
|
||||||
$insertvon = $this->config->item('antrag_job_systemuser');
|
$insertvon = $this->config->item('antrag_job_systemuser');
|
||||||
@@ -481,6 +512,13 @@ class AntragJob extends JOB_Controller
|
|||||||
{
|
{
|
||||||
$this->logInfo('Start Job handleAbmeldungenStglDeadline');
|
$this->logInfo('Start Job handleAbmeldungenStglDeadline');
|
||||||
|
|
||||||
|
if ($this->config->item('abmeldung_stg_enabled') !== true)
|
||||||
|
{
|
||||||
|
$this->logError('Config "abmeldung_stg_enabled" nicht auf true gesetzt');
|
||||||
|
$this->logInfo('Ende Job handleAbmeldungenStglDeadline');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$insertvon = $this->config->item('antrag_job_systemuser');
|
$insertvon = $this->config->item('antrag_job_systemuser');
|
||||||
if (!$insertvon) {
|
if (!$insertvon) {
|
||||||
$this->logError('Config "antrag_job_systemuser" nicht gesetzt');
|
$this->logError('Config "antrag_job_systemuser" nicht gesetzt');
|
||||||
@@ -614,6 +652,13 @@ class AntragJob extends JOB_Controller
|
|||||||
{
|
{
|
||||||
$this->logInfo('Start Job sendAufforderungWiederholer');
|
$this->logInfo('Start Job sendAufforderungWiederholer');
|
||||||
|
|
||||||
|
if ($this->config->item('wiederholung_enabled') !== true)
|
||||||
|
{
|
||||||
|
$this->logError('Config "wiederholung_enabled" nicht auf true gesetzt');
|
||||||
|
$this->logInfo('Ende Job sendAufforderungWiederholer');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$modifier_request_1 = $this->config->item('wiederholung_job_request_1_date_modifier');
|
$modifier_request_1 = $this->config->item('wiederholung_job_request_1_date_modifier');
|
||||||
$modifier_request_2 = $this->config->item('wiederholung_job_request_2_date_modifier');
|
$modifier_request_2 = $this->config->item('wiederholung_job_request_2_date_modifier');
|
||||||
$modifier_deadline = $this->config->item('wiederholung_job_deadline_date_modifier');
|
$modifier_deadline = $this->config->item('wiederholung_job_deadline_date_modifier');
|
||||||
|
|||||||
@@ -0,0 +1,117 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined("BASEPATH")) exit("No direct script access allowed");
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
|
||||||
|
class TagJob extends JOB_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
const BATCHUSER = 'sftest';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
// Configs
|
||||||
|
$this->load->config('stv');
|
||||||
|
|
||||||
|
// Library
|
||||||
|
$this->load->library('TagLib');
|
||||||
|
|
||||||
|
// Load Models
|
||||||
|
$this->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||||
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
$this->load->model('system/Notiztyp_model', 'NotiztypModel');
|
||||||
|
|
||||||
|
$this->loadPhrases([
|
||||||
|
'lehre'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rebuildAutomatedTags()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
$automatedTagsRes = $this->NotiztypModel->loadWhere(array('automatisiert' => true, 'taglib IS NOT NULL' => null));
|
||||||
|
$automatedTags = hasData($automatedTagsRes) ? getData($automatedTagsRes) : [];
|
||||||
|
|
||||||
|
|
||||||
|
$result = $this->StudiensemesterModel->getAktOrNextSemester();
|
||||||
|
if (isError($result))
|
||||||
|
{
|
||||||
|
$this->logInfo('Start Job rebuild Automated Tags');
|
||||||
|
$this->logError('Error occurred during retrieving studiensemester');
|
||||||
|
return $this->logInfo('End Job rebuild Automated Tags');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($result->retval) || !isset($result->retval[0])) {
|
||||||
|
$this->logInfo('Start Job rebuild Automated Tags');
|
||||||
|
$this->logError('No Studiensemester found');
|
||||||
|
return $this->logInfo('End Job rebuild Automated Tags');
|
||||||
|
}
|
||||||
|
$studiensemester_kurzbz = $result->retval[0]->studiensemester_kurzbz ?? null;
|
||||||
|
$params = array(
|
||||||
|
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->logInfo('Start Job rebuild Automated Tags ' . $studiensemester_kurzbz);
|
||||||
|
foreach($automatedTags as $autoTag)
|
||||||
|
{
|
||||||
|
// getPath: must not be lost
|
||||||
|
$filePath = APPPATH . 'libraries/' . $autoTag->taglib . '.php'; // APPPATH = application/
|
||||||
|
|
||||||
|
if(file_exists($filePath)) {
|
||||||
|
require_once($filePath);
|
||||||
|
} else {
|
||||||
|
$this->logInfo("File not found: " . $filePath);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$kurz_bz = $autoTag->typ_kurzbz;
|
||||||
|
// className without PATH (basename)
|
||||||
|
$className = basename($autoTag->taglib);
|
||||||
|
|
||||||
|
$obj = new $className();
|
||||||
|
|
||||||
|
$outputArray = $obj->getZuordnungIds($params);
|
||||||
|
$typeId = $outputArray->typeId;
|
||||||
|
|
||||||
|
$paramsTag = array(
|
||||||
|
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||||
|
'kurzbz' => $kurz_bz,
|
||||||
|
'data' => $outputArray->data,
|
||||||
|
'typeId' => $typeId
|
||||||
|
);
|
||||||
|
|
||||||
|
$result = $this->taglib->updateAutomatedTags($paramsTag);
|
||||||
|
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->logError('Error occurred during updateAutomatedTags ' . $kurz_bz);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = is_array($result) ? $result['retval'] : $result->retval;
|
||||||
|
|
||||||
|
//SUMMARY
|
||||||
|
$this->logInfo("Tag " . $result->retval['input']['tag'] . " | type_id " . $typeId . " --"
|
||||||
|
. " Count Recycled: " . $result->retval['summary']['recycled']
|
||||||
|
. " Count Added: ". $result->retval['summary']['added']
|
||||||
|
. " Count Deleted: ". $result->retval['summary']['deleted']);
|
||||||
|
|
||||||
|
//DETAILS
|
||||||
|
if($result->retval['results']['newTags'])
|
||||||
|
$this->logInfo("Tag " . $result->retval['input']['tag'] . "New tag(s): " . implode(', ', $result->retval['results']['newTags']));
|
||||||
|
if($result->retval['results']['deletedTagsIds'])
|
||||||
|
$this->logInfo("Tag " . $result->retval['input']['tag'] . "Deleted tags(s: " . implode(', ', $result->retval['results']['deletedTagsIds']));
|
||||||
|
if ($result->retval['results']['retaggedIds'])
|
||||||
|
$this->logInfo("Tag " . $result->retval['input']['tag'] . "Recycled tag(s): " . implode(', ', $result->retval['results']['retaggedIds']));
|
||||||
|
|
||||||
|
}
|
||||||
|
$this->logInfo( "End Job rebuild Automated Tags");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -215,8 +215,11 @@ class Pruefungsprotokoll extends Auth_Controller
|
|||||||
if (hasData($abschlusspruefung))
|
if (hasData($abschlusspruefung))
|
||||||
{
|
{
|
||||||
$abschlusspruefung_data = getData($abschlusspruefung);
|
$abschlusspruefung_data = getData($abschlusspruefung);
|
||||||
if ($this->permissionlib->isBerechtigt('admin') ||
|
if ($this->permissionlib->isBerechtigt('admin')
|
||||||
(isset($abschlusspruefung_data->studiengang_kz) && $this->permissionlib->isBerechtigt('assistenz', 'suid', $abschlusspruefung_data->studiengang_kz))
|
|| (
|
||||||
|
isset($abschlusspruefung_data->studiengang_kz)
|
||||||
|
&& $this->permissionlib->isBerechtigt('assistenz', 'suid', $abschlusspruefung_data->studiengang_kz)
|
||||||
|
)
|
||||||
|| $this->_uid === $abschlusspruefung_data->uid_vorsitz)
|
|| $this->_uid === $abschlusspruefung_data->uid_vorsitz)
|
||||||
$result = $abschlusspruefung;
|
$result = $abschlusspruefung;
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ class Studierendenantrag extends FHC_Controller
|
|||||||
'studierendenantrag'
|
'studierendenantrag'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (strtolower($this->router->method) === 'leitung')
|
$this->load->config('studierendenantrag');
|
||||||
|
|
||||||
|
if (strtolower($this->router->method) === 'leitung')
|
||||||
$this->_isAllowed([
|
$this->_isAllowed([
|
||||||
'leitung' => ['student/studierendenantrag:r', 'student/antragfreigabe:r']
|
'leitung' => ['student/studierendenantrag:r', 'student/antragfreigabe:r']
|
||||||
]);
|
]);
|
||||||
@@ -54,18 +56,27 @@ class Studierendenantrag extends FHC_Controller
|
|||||||
'bezeichnungStg' => $antrag->bezeichnung,
|
'bezeichnungStg' => $antrag->bezeichnung,
|
||||||
'bezeichnungOrgform' => $antrag->orgform
|
'bezeichnungOrgform' => $antrag->orgform
|
||||||
);
|
);
|
||||||
|
|
||||||
$result = $this->antraglib->getPrestudentWiederholungsBerechtigt($antrag->prestudent_id);
|
|
||||||
if (getData($result) == 1)
|
|
||||||
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Wiederholung';
|
|
||||||
|
|
||||||
$result = $this->antraglib->getPrestudentUnterbrechungsBerechtigt($antrag->prestudent_id);
|
if ($this->config->item('wiederholung_enabled') === true)
|
||||||
if (getData($result) == 1)
|
{
|
||||||
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Unterbrechung';
|
$result = $this->antraglib->getPrestudentWiederholungsBerechtigt($antrag->prestudent_id);
|
||||||
|
if (getData($result) == 1)
|
||||||
|
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Wiederholung';
|
||||||
|
}
|
||||||
|
|
||||||
$result = $this->antraglib->getPrestudentAbmeldeBerechtigt($antrag->prestudent_id);
|
if ($this->config->item('unterbrechung_enabled') === true)
|
||||||
if (getData($result) == 1)
|
{
|
||||||
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Abmeldung';
|
$result = $this->antraglib->getPrestudentUnterbrechungsBerechtigt($antrag->prestudent_id);
|
||||||
|
if (getData($result) == 1)
|
||||||
|
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Unterbrechung';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->config->item('abmeldung_enabled') === true)
|
||||||
|
{
|
||||||
|
$result = $this->antraglib->getPrestudentAbmeldeBerechtigt($antrag->prestudent_id);
|
||||||
|
if (getData($result) == 1)
|
||||||
|
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Abmeldung';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($antrag->studierendenantrag_id == null)
|
if ($antrag->studierendenantrag_id == null)
|
||||||
continue;
|
continue;
|
||||||
@@ -88,45 +99,59 @@ class Studierendenantrag extends FHC_Controller
|
|||||||
|
|
||||||
$this->load->view('lehre/Antrag/Leitung/List', [
|
$this->load->view('lehre/Antrag/Leitung/List', [
|
||||||
'stgA' => $stgA,
|
'stgA' => $stgA,
|
||||||
'stgL' => $stgL
|
'stgL' => $stgL,
|
||||||
|
'abmeldung_enabled' => $this->config->item('abmeldung_stg_enabled')
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function abmeldung($prestudent_id, $studierendenantrag_id = null)
|
public function abmeldung($prestudent_id, $studierendenantrag_id = null)
|
||||||
{
|
{
|
||||||
$this->load->view('lehre/Antrag/Create', [
|
if ($this->config->item('abmeldung_enabled') === true)
|
||||||
'prestudent_id' => $prestudent_id,
|
{
|
||||||
'studierendenantrag_id' => $studierendenantrag_id,
|
$this->load->view('lehre/Antrag/Create', [
|
||||||
'antrag_type' => 'Abmeldung'
|
'prestudent_id' => $prestudent_id,
|
||||||
]);
|
'studierendenantrag_id' => $studierendenantrag_id,
|
||||||
|
'antrag_type' => 'Abmeldung'
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function abmeldungstgl($prestudent_id, $studierendenantrag_id = null)
|
public function abmeldungstgl($prestudent_id, $studierendenantrag_id = null)
|
||||||
{
|
{
|
||||||
|
|
||||||
$this->load->view('lehre/Antrag/Create', [
|
if ($this->config->item('abmeldung_stg_enabled') === true)
|
||||||
'prestudent_id' => $prestudent_id,
|
{
|
||||||
'studierendenantrag_id' => $studierendenantrag_id,
|
$this->load->view('lehre/Antrag/Create', [
|
||||||
'antrag_type' => 'AbmeldungStgl'
|
'prestudent_id' => $prestudent_id,
|
||||||
]);
|
'studierendenantrag_id' => $studierendenantrag_id,
|
||||||
|
'antrag_type' => 'AbmeldungStgl'
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function unterbrechung($prestudent_id, $studierendenantrag_id = null)
|
public function unterbrechung($prestudent_id, $studierendenantrag_id = null)
|
||||||
{
|
{
|
||||||
$this->load->view('lehre/Antrag/Create', [
|
if ($this->config->item('unterbrechung_enabled') === true)
|
||||||
'prestudent_id' => $prestudent_id,
|
{
|
||||||
'studierendenantrag_id' => $studierendenantrag_id,
|
$this->load->view('lehre/Antrag/Create', [
|
||||||
'antrag_type' => 'Unterbrechung'
|
'prestudent_id' => $prestudent_id,
|
||||||
]);
|
'studierendenantrag_id' => $studierendenantrag_id,
|
||||||
|
'antrag_type' => 'Unterbrechung'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function wiederholung($prestudent_id, $studierendenantrag_id = null)
|
public function wiederholung($prestudent_id, $studierendenantrag_id = null)
|
||||||
{
|
{
|
||||||
$this->load->view('lehre/Antrag/Create', [
|
if ($this->config->item('wiederholung_enabled') === true)
|
||||||
'prestudent_id' => $prestudent_id,
|
{
|
||||||
'studierendenantrag_id' => $studierendenantrag_id,
|
$this->load->view('lehre/Antrag/Create', [
|
||||||
'antrag_type' => 'Wiederholung'
|
'prestudent_id' => $prestudent_id,
|
||||||
]);
|
'studierendenantrag_id' => $studierendenantrag_id,
|
||||||
|
'antrag_type' => 'Wiederholung'
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -198,7 +198,19 @@ class Gradelist extends Auth_Controller
|
|||||||
if (!isset($row_noten->found))
|
if (!isset($row_noten->found))
|
||||||
{
|
{
|
||||||
$result_lv = $this->LehrveranstaltungModel->load($row_noten->lehrveranstaltung_id);
|
$result_lv = $this->LehrveranstaltungModel->load($row_noten->lehrveranstaltung_id);
|
||||||
$result_stg = $this->StudiengangModel->load($result_lv->retval[0]->studiengang_kz);
|
|
||||||
|
$studiengang_kz = null;
|
||||||
|
|
||||||
|
if (!empty($result_lv->retval) && isset($result_lv->retval[0]) && isset($result_lv->retval[0]->studiengang_kz))
|
||||||
|
{
|
||||||
|
$result_stg = $this->StudiengangModel->load($result_lv->retval[0]->studiengang_kz);
|
||||||
|
|
||||||
|
if (!empty($result_stg->retval) && isset($result_stg->retval[0]) && is_object($result_stg->retval[0]) && isset($result_stg->retval[0]->kurzbzlang))
|
||||||
|
{
|
||||||
|
$studiengang_kz = $result_stg->retval[0]->kurzbzlang;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$courses['semester'][$row_noten->studiensemester_kurzbz]['lvs_nonstpl'][] = array(
|
$courses['semester'][$row_noten->studiensemester_kurzbz]['lvs_nonstpl'][] = array(
|
||||||
'lehrveranstaltung_id' => $row_noten->lehrveranstaltung_id,
|
'lehrveranstaltung_id' => $row_noten->lehrveranstaltung_id,
|
||||||
'lehrtyp_kurzbz' => $result_lv->retval[0]->lehrtyp_kurzbz,
|
'lehrtyp_kurzbz' => $result_lv->retval[0]->lehrtyp_kurzbz,
|
||||||
@@ -212,8 +224,8 @@ class Gradelist extends Auth_Controller
|
|||||||
'semester' => $result_lv->retval[0]->semester,
|
'semester' => $result_lv->retval[0]->semester,
|
||||||
'note' => $row_noten->note,
|
'note' => $row_noten->note,
|
||||||
'datum' => $row_noten->benotungsdatum,
|
'datum' => $row_noten->benotungsdatum,
|
||||||
'zugeordnet' => true,
|
'studiengang_kurzbz' => $studiengang_kz,
|
||||||
'studiengang_kurzbz' => $result_stg->retval[0]->kurzbzlang
|
'zugeordnet' => true
|
||||||
);
|
);
|
||||||
if(!isset($courses['semester'][$row_noten->studiensemester_kurzbz]['data']['ectssumme_nonstpl']))
|
if(!isset($courses['semester'][$row_noten->studiensemester_kurzbz]['data']['ectssumme_nonstpl']))
|
||||||
$courses['semester'][$row_noten->studiensemester_kurzbz]['data']['ectssumme_nonstpl'] = 0;
|
$courses['semester'][$row_noten->studiensemester_kurzbz]['data']['ectssumme_nonstpl'] = 0;
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class CI3_Events
|
|||||||
});
|
});
|
||||||
self::$eventsSorted[$event] = true;
|
self::$eventsSorted[$event] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (self::$events[$event] as $conf) {
|
foreach (self::$events[$event] as $conf) {
|
||||||
$conf[1](...$args);
|
$conf[1](...$args);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
const DEFAULT_PERMISSION_R = 'admin:r';
|
const DEFAULT_PERMISSION_R = 'admin:r';
|
||||||
const DEFAULT_PERMISSION_RW = 'admin:rw';
|
const DEFAULT_PERMISSION_RW = 'admin:rw';
|
||||||
//public function __construct($zuordnung = 'person/Notizzuordnung_model')
|
|
||||||
public function __construct($permissions)
|
public function __construct($permissions)
|
||||||
{
|
{
|
||||||
$default_permissions = [
|
$default_permissions = [
|
||||||
@@ -97,13 +97,13 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result)) {
|
if (isError($result)) {
|
||||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
return $this->terminateWithSuccess(getData($result) ?: []);
|
$this->terminateWithSuccess(getData($result) ?: []);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Override function
|
//Override function
|
||||||
protected function isBerechtigt($id, $typeId){
|
protected function isBerechtigt($id, $typeId){
|
||||||
return $this->terminateWithError("in abstract function: define right in extension", self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError("in abstract function: define right in extension", self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadNotiz()
|
public function loadNotiz()
|
||||||
@@ -112,7 +112,6 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
|
|
||||||
$notiz_id = $this->input->post('notiz_id');
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
|
||||||
//$this->load->model('person/Notiz_model', 'NotizModel');
|
|
||||||
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'notiz_id', 'LEFT');
|
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'notiz_id', 'LEFT');
|
||||||
$this->NotizModel->addSelect('*');
|
$this->NotizModel->addSelect('*');
|
||||||
$this->NotizModel->addSelect("TO_CHAR(CASE WHEN public.tbl_notiz.updateamum >= public.tbl_notiz.insertamum
|
$this->NotizModel->addSelect("TO_CHAR(CASE WHEN public.tbl_notiz.updateamum >= public.tbl_notiz.insertamum
|
||||||
@@ -143,14 +142,9 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
|
|
||||||
$uid = getAuthUID();
|
$uid = getAuthUID();
|
||||||
|
|
||||||
if (isset($_POST['data']))
|
$json = $this->input->post('data');
|
||||||
{
|
$post_data = json_decode($json, true);
|
||||||
$data = json_decode($_POST['data']);
|
$this->form_validation->set_data($post_data);
|
||||||
unset($_POST['data']);
|
|
||||||
foreach ($data as $k => $v) {
|
|
||||||
$_POST[$k] = $v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Form Validation
|
//Form Validation
|
||||||
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
||||||
@@ -166,26 +160,25 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
}
|
}
|
||||||
|
|
||||||
$titel = $this->input->post('titel');
|
$titel = $post_data['titel'];
|
||||||
$text = $this->input->post('text');
|
$text = $post_data['text'];
|
||||||
$erledigt = $this->input->post('erledigt');
|
$erledigt = $post_data['erledigt'];
|
||||||
$verfasser_uid = isset($_POST['verfasser']) ? $_POST['verfasser'] : $uid;
|
$bearbeiter_uid = isset($post_data['bearbeiter']) ? $post_data['bearbeiter'] : null;
|
||||||
$bearbeiter_uid = isset($_POST['bearbeiter']) ? $_POST['bearbeiter'] : null;
|
$type = $post_data['typeId'];
|
||||||
$type = $this->input->post('typeId');
|
$start = isset($post_data['start']) ? $post_data['start'] : null;
|
||||||
$start = $this->input->post('start');
|
$ende = isset($post_data['ende']) ? $post_data['ende'] : null;
|
||||||
$ende = $this->input->post('ende');
|
|
||||||
|
|
||||||
// Start DB transaction
|
// Start DB transaction
|
||||||
$this->db->trans_start();
|
$this->db->trans_start();
|
||||||
|
|
||||||
//Save note
|
//Save note
|
||||||
$result = $this->NotizModel->insert(array('titel' => $titel, 'text' => $text, 'erledigt' => $erledigt, 'verfasser_uid' => $verfasser_uid,
|
$result = $this->NotizModel->insert(array('titel' => $titel, 'text' => $text, 'erledigt' => $erledigt, 'verfasser_uid' => $uid,
|
||||||
"insertvon" => $verfasser_uid, 'start' => $start, 'ende' => $ende, 'bearbeiter_uid' => $bearbeiter_uid));
|
"insertvon" => $uid, 'start' => $start, 'ende' => $ende, 'bearbeiter_uid' => $bearbeiter_uid));
|
||||||
|
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
$notiz_id = $result->retval;
|
$notiz_id = $result->retval;
|
||||||
@@ -220,7 +213,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
$dms_id_arr[] = $result->retval['dms_id'];
|
$dms_id_arr[] = $result->retval['dms_id'];
|
||||||
}
|
}
|
||||||
@@ -235,34 +228,28 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->db->trans_commit();
|
$this->db->trans_commit();
|
||||||
return $this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateNotiz()
|
public function updateNotiz()
|
||||||
{
|
{
|
||||||
|
|
||||||
$this->load->library('form_validation');
|
$this->load->library('form_validation');
|
||||||
$this->load->library('DmsLib');
|
$this->load->library('DmsLib');
|
||||||
|
|
||||||
if (isset($_POST['data']))
|
$json = $this->input->post('data');
|
||||||
{
|
$post_data = json_decode($json, true);
|
||||||
$data = json_decode($_POST['data']);
|
|
||||||
unset($_POST['data']);
|
|
||||||
foreach ($data as $k => $v) {
|
|
||||||
$_POST[$k] = $v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$notiz_id = $this->input->post('notiz_id');
|
$this->form_validation->set_data($post_data);
|
||||||
|
|
||||||
if(!$notiz_id)
|
$this->form_validation->set_rules('notiz_id', 'Notiz ID', 'required', [
|
||||||
{
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'notiz_id'])
|
||||||
$this->terminateWithError($this->p->t('ui','error_missingId',['id'=>'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
]);
|
||||||
}
|
|
||||||
|
|
||||||
//Form Validation
|
//Form Validation
|
||||||
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
$this->form_validation->set_rules('titel', 'Titel', 'required', [
|
||||||
@@ -280,25 +267,23 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
|
|
||||||
//update Notiz
|
//update Notiz
|
||||||
$uid = getAuthUID();
|
$uid = getAuthUID();
|
||||||
$titel = $this->input->post('titel');
|
$titel = $post_data['titel'];
|
||||||
$text = $this->input->post('text');
|
$text = $post_data['text'];
|
||||||
$verfasser_uid = isset($_POST['verfasser']) ? $_POST['verfasser'] : $uid;
|
$bearbeiter_uid = isset($post_data['bearbeiter']) ? $post_data['bearbeiter'] : $post_data['bearbeiter_uid'];
|
||||||
$bearbeiter_uid = isset($_POST['bearbeiter']) ? $_POST['bearbeiter'] : $uid;
|
$erledigt = $post_data['erledigt'];
|
||||||
$erledigt = $this->input->post('erledigt');
|
$start = $post_data['start'];
|
||||||
$start = $this->input->post('start');
|
$ende = $post_data['ende'];
|
||||||
$ende = $this->input->post('ende');
|
|
||||||
|
|
||||||
$result = $this->NotizModel->update(
|
$result = $this->NotizModel->update(
|
||||||
[
|
[
|
||||||
'notiz_id' => $notiz_id
|
'notiz_id' => $post_data['notiz_id'],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'titel' => $titel,
|
'titel' => $titel,
|
||||||
'updatevon' => $uid,
|
'updatevon' => $uid,
|
||||||
'updateamum' => date('c'),
|
'updateamum' => date('c'),
|
||||||
'text' => $text,
|
'text' => $text,
|
||||||
'verfasser_uid' => $verfasser_uid,
|
'bearbeiter_uid' => isEmptyString($bearbeiter_uid) ? null : $bearbeiter_uid,
|
||||||
'bearbeiter_uid' => $bearbeiter_uid,
|
|
||||||
'start' => $start,
|
'start' => $start,
|
||||||
'ende' => $ende,
|
'ende' => $ende,
|
||||||
'erledigt' => $erledigt
|
'erledigt' => $erledigt
|
||||||
@@ -306,7 +291,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
);
|
);
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//update(1) loading all dms-entries with this notiz_id
|
//update(1) loading all dms-entries with this notiz_id
|
||||||
@@ -314,7 +299,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$this->load->model('person/Notizdokument_model', 'NotizdokumentModel');
|
$this->load->model('person/Notizdokument_model', 'NotizdokumentModel');
|
||||||
$this->NotizdokumentModel->addJoin('campus.tbl_dms_version', 'dms_id');
|
$this->NotizdokumentModel->addJoin('campus.tbl_dms_version', 'dms_id');
|
||||||
|
|
||||||
$result = $this->NotizdokumentModel->loadWhere(array('notiz_id' => $notiz_id));
|
$result = $this->NotizdokumentModel->loadWhere(array('notiz_id' => $post_data['notiz_id']));
|
||||||
$result = $this->getDataOrTerminateWithError($result);
|
$result = $this->getDataOrTerminateWithError($result);
|
||||||
foreach ($result as $doc) {
|
foreach ($result as $doc) {
|
||||||
$dms_id_arr[$doc->dms_id] = array(
|
$dms_id_arr[$doc->dms_id] = array(
|
||||||
@@ -351,7 +336,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$result = $this->getDataOrTerminateWithError($result);
|
$result = $this->getDataOrTerminateWithError($result);
|
||||||
$dms_id = $result['dms_id'];
|
$dms_id = $result['dms_id'];
|
||||||
|
|
||||||
$result = $this->NotizdokumentModel->insert(array('notiz_id' => $notiz_id, 'dms_id' => $dms_id));
|
$result = $this->NotizdokumentModel->insert(array('notiz_id' => $post_data['notiz_id'], 'dms_id' => $dms_id));
|
||||||
|
|
||||||
$this->getDataOrTerminateWithError($result);
|
$this->getDataOrTerminateWithError($result);
|
||||||
}
|
}
|
||||||
@@ -365,7 +350,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$this->getDataOrTerminateWithError($result);
|
$this->getDataOrTerminateWithError($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function deleteNotiz()
|
public function deleteNotiz()
|
||||||
@@ -416,15 +401,15 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result))
|
if (isError($result))
|
||||||
{
|
{
|
||||||
$this->db->trans_rollback();
|
$this->db->trans_rollback();
|
||||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
if(!hasData($result))
|
if(!hasData($result))
|
||||||
{
|
{
|
||||||
return $this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->trans_complete();
|
$this->db->trans_complete();
|
||||||
return $this->terminateWithSuccess(getData($result));
|
$this->terminateWithSuccess(getData($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loadDokumente()
|
public function loadDokumente()
|
||||||
@@ -432,6 +417,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
$notiz_id = $this->input->post('notiz_id');
|
$notiz_id = $this->input->post('notiz_id');
|
||||||
|
|
||||||
$this->NotizModel->addSelect('campus.tbl_dms_version.*');
|
$this->NotizModel->addSelect('campus.tbl_dms_version.*');
|
||||||
|
$this->NotizModel->addSelect($this->NotizModel->escape(base_url('content/notizdokdownload.php?id=')) . ' || public.tbl_notiz_dokument.dms_id AS preview');
|
||||||
|
|
||||||
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'ON (public.tbl_notiz_dokument.notiz_id = public.tbl_notiz.notiz_id)');
|
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'ON (public.tbl_notiz_dokument.notiz_id = public.tbl_notiz.notiz_id)');
|
||||||
$this->NotizModel->addJoin('campus.tbl_dms_version', 'ON (public.tbl_notiz_dokument.dms_id = campus.tbl_dms_version.dms_id)');
|
$this->NotizModel->addJoin('campus.tbl_dms_version', 'ON (public.tbl_notiz_dokument.dms_id = campus.tbl_dms_version.dms_id)');
|
||||||
@@ -440,14 +426,14 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
array('public.tbl_notiz.notiz_id' => $notiz_id)
|
array('public.tbl_notiz.notiz_id' => $notiz_id)
|
||||||
);
|
);
|
||||||
if (isError($result)) {
|
if (isError($result)) {
|
||||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!hasData($result))
|
if(!hasData($result))
|
||||||
{
|
{
|
||||||
return $this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
return $this->terminateWithSuccess(getData($result));
|
$this->terminateWithSuccess(getData($result));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMitarbeiter($searchString)
|
public function getMitarbeiter($searchString)
|
||||||
@@ -457,7 +443,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
if (isError($result)) {
|
if (isError($result)) {
|
||||||
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
return $this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getCountNotes($person_id)
|
public function getCountNotes($person_id)
|
||||||
@@ -476,4 +462,4 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
|||||||
return $this->terminateWithSuccess($anzahl->anzahl ?: 0);
|
return $this->terminateWithSuccess($anzahl->anzahl ?: 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,10 +15,11 @@ class Tag_Controller extends FHCAPI_Controller
|
|||||||
'getTag' => self::BERECHTIGUNG_KURZBZ,
|
'getTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
'getTags' => self::BERECHTIGUNG_KURZBZ,
|
'getTags' => self::BERECHTIGUNG_KURZBZ,
|
||||||
'addTag' => self::BERECHTIGUNG_KURZBZ,
|
'addTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
|
||||||
'updateTag' => self::BERECHTIGUNG_KURZBZ,
|
'updateTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
'doneTag' => self::BERECHTIGUNG_KURZBZ,
|
'doneTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
'deleteTag' => self::BERECHTIGUNG_KURZBZ,
|
'deleteTag' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'getAllTags' => self::BERECHTIGUNG_KURZBZ,
|
||||||
|
'rebuildTagsForTypeId' => self::BERECHTIGUNG_KURZBZ,
|
||||||
];
|
];
|
||||||
|
|
||||||
$merged_permissions = array_merge($default_permissions, $permissions);
|
$merged_permissions = array_merge($default_permissions, $permissions);
|
||||||
@@ -26,6 +27,10 @@ class Tag_Controller extends FHCAPI_Controller
|
|||||||
parent::__construct($merged_permissions);
|
parent::__construct($merged_permissions);
|
||||||
|
|
||||||
$this->_setAuthUID();
|
$this->_setAuthUID();
|
||||||
|
|
||||||
|
// Library
|
||||||
|
$this->load->library('TagLib');
|
||||||
|
|
||||||
$this->load->model('person/Notiz_model', 'NotizModel');
|
$this->load->model('person/Notiz_model', 'NotizModel');
|
||||||
$this->load->model('system/Notiztyp_model', 'NotiztypModel');
|
$this->load->model('system/Notiztyp_model', 'NotiztypModel');
|
||||||
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
$this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
@@ -37,7 +42,6 @@ class Tag_Controller extends FHCAPI_Controller
|
|||||||
|
|
||||||
public function getTag($readonly_tags = null)
|
public function getTag($readonly_tags = null)
|
||||||
{
|
{
|
||||||
$language = $this->_getLanguageIndex();
|
|
||||||
$id = $this->input->get('id');
|
$id = $this->input->get('id');
|
||||||
|
|
||||||
if (is_array($readonly_tags) && !isEmptyArray($readonly_tags))
|
if (is_array($readonly_tags) && !isEmptyArray($readonly_tags))
|
||||||
@@ -62,14 +66,17 @@ class Tag_Controller extends FHCAPI_Controller
|
|||||||
$this->NotizModel->addSelect(
|
$this->NotizModel->addSelect(
|
||||||
"tbl_notiz.titel,
|
"tbl_notiz.titel,
|
||||||
tbl_notiz.text,
|
tbl_notiz.text,
|
||||||
array_to_json(bezeichnung_mehrsprachig::varchar[])->>". $language. " as bezeichnung,
|
array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung,
|
||||||
tbl_notiz.notiz_id,
|
tbl_notiz.notiz_id,
|
||||||
tbl_notiz_typ.style,
|
tbl_notiz_typ.style,
|
||||||
|
tbl_notiz_typ.automatisiert,
|
||||||
tbl_notiz.erledigt as done,
|
tbl_notiz.erledigt as done,
|
||||||
tbl_notiz.insertamum,
|
tbl_notiz.insertamum,
|
||||||
tbl_notiz.updateamum,
|
tbl_notiz.updateamum,
|
||||||
(verfasserperson.vorname || ' ' || verfasserperson.nachname || ' ' || '(' || verfasserbenutzer.uid || ')') as verfasser,
|
(verfasserperson.vorname || ' ' || verfasserperson.nachname || ' ' || '(' || verfasserbenutzer.uid || ')') as verfasser,
|
||||||
(bearbeiterperson.vorname || ' ' || bearbeiterperson.nachname || ' ' || '(' || bearbeiterbenutzer.uid || ')') as bearbeiter
|
(bearbeiterperson.vorname || ' ' || bearbeiterperson.nachname || ' ' || '(' || bearbeiterbenutzer.uid || ')') as bearbeiter,
|
||||||
|
tbl_notiz.start,
|
||||||
|
tbl_notiz.ende
|
||||||
"
|
"
|
||||||
);
|
);
|
||||||
$this->NotizModel->addJoin('public.tbl_notiz_typ', 'public.tbl_notiz.typ = public.tbl_notiz_typ.typ_kurzbz');
|
$this->NotizModel->addJoin('public.tbl_notiz_typ', 'public.tbl_notiz.typ = public.tbl_notiz_typ.typ_kurzbz');
|
||||||
@@ -82,18 +89,22 @@ class Tag_Controller extends FHCAPI_Controller
|
|||||||
|
|
||||||
$notiz = $this->NotizModel->loadWhere(array('notiz_id' => $id));
|
$notiz = $this->NotizModel->loadWhere(array('notiz_id' => $id));
|
||||||
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(hasData($notiz) ? getData($notiz)[0] : array());
|
$this->terminateWithSuccess(hasData($notiz) ? getData($notiz)[0] : array());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTags($tags = null)
|
public function getTags($tags = null)
|
||||||
{
|
{
|
||||||
|
$language = $this->_getLanguageIndex();
|
||||||
|
|
||||||
$this->NotiztypModel->addSelect(
|
$this->NotiztypModel->addSelect(
|
||||||
'typ_kurzbz as tag_typ_kurzbz,
|
"typ_kurzbz as tag_typ_kurzbz,
|
||||||
array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung,
|
array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung,
|
||||||
style,
|
style,
|
||||||
beschreibung,
|
beschreibung,
|
||||||
tag
|
tag,
|
||||||
'
|
automatisiert
|
||||||
|
"
|
||||||
);
|
);
|
||||||
$this->NotiztypModel->addOrder('prioritaet');
|
$this->NotiztypModel->addOrder('prioritaet');
|
||||||
|
|
||||||
@@ -271,6 +282,74 @@ class Tag_Controller extends FHCAPI_Controller
|
|||||||
$this->terminateWithSuccess($deleteNotiz);
|
$this->terminateWithSuccess($deleteNotiz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAllTags($readonly_tags = false){
|
||||||
|
$prestudent_id = $this->input->get('prestudent_id');
|
||||||
|
|
||||||
|
//TODO check for readonly: necessary?
|
||||||
|
if (is_array($readonly_tags) && !isEmptyArray($readonly_tags))
|
||||||
|
{
|
||||||
|
$readonly_tags = $this->_filterTag($readonly_tags, true);
|
||||||
|
|
||||||
|
foreach ($readonly_tags as $key => $tag)
|
||||||
|
{
|
||||||
|
$readonly_tags[$key] = $this->NotizModel->db->escape($tag);
|
||||||
|
}
|
||||||
|
$tags = '(' . implode(',', $readonly_tags) . ')';
|
||||||
|
|
||||||
|
$this->NotizModel->addSelect("
|
||||||
|
CASE
|
||||||
|
WHEN tbl_notiz_typ.typ_kurzbz IN $tags
|
||||||
|
THEN TRUE
|
||||||
|
ELSE FALSE
|
||||||
|
END as readonly
|
||||||
|
");
|
||||||
|
}
|
||||||
|
$this->NotizModel->addSelect(
|
||||||
|
"tbl_notiz.titel,
|
||||||
|
tbl_notiz.text,
|
||||||
|
array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung,
|
||||||
|
tbl_notiz.notiz_id,
|
||||||
|
tbl_notiz_typ.style,
|
||||||
|
tbl_notiz_typ.automatisiert,
|
||||||
|
tbl_notiz.erledigt as done,
|
||||||
|
tbl_notiz.insertamum,
|
||||||
|
tbl_notiz.updateamum,
|
||||||
|
(verfasserperson.vorname || ' ' || verfasserperson.nachname || ' ' || '(' || verfasserbenutzer.uid || ')') as verfasser,
|
||||||
|
(bearbeiterperson.vorname || ' ' || bearbeiterperson.nachname || ' ' || '(' || bearbeiterbenutzer.uid || ')') as bearbeiter,
|
||||||
|
tbl_notiz.start,
|
||||||
|
tbl_notiz.ende
|
||||||
|
"
|
||||||
|
);
|
||||||
|
$this->NotizModel->addJoin('public.tbl_notiz_typ', 'public.tbl_notiz.typ = public.tbl_notiz_typ.typ_kurzbz');
|
||||||
|
|
||||||
|
$this->NotizModel->addJoin('public.tbl_benutzer verfasserbenutzer', 'tbl_notiz.verfasser_uid = verfasserbenutzer.uid', 'LEFT');
|
||||||
|
$this->NotizModel->addJoin('public.tbl_person verfasserperson', 'verfasserbenutzer.person_id = verfasserperson.person_id', 'LEFT');
|
||||||
|
|
||||||
|
$this->NotizModel->addJoin('public.tbl_benutzer bearbeiterbenutzer', 'tbl_notiz.bearbeiter_uid = bearbeiterbenutzer.uid', 'LEFT');
|
||||||
|
$this->NotizModel->addJoin('public.tbl_person bearbeiterperson', 'bearbeiterbenutzer.person_id = bearbeiterperson.person_id', 'LEFT');
|
||||||
|
|
||||||
|
$this->NotizModel->addJoin('public.tbl_notizzuordnung notizzuordnung', 'tbl_notiz.notiz_id = notizzuordnung.notiz_id');
|
||||||
|
|
||||||
|
$notiz = $this->NotizModel->loadWhere(array('prestudent_id' => $prestudent_id));
|
||||||
|
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(hasData($notiz) ? getData($notiz) : array());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rebuildTagsForTypeId()
|
||||||
|
{
|
||||||
|
$id = $this->input->post('id');
|
||||||
|
$typeId = $this->input->post('typeId');
|
||||||
|
$semester = $this->input->post('sem');
|
||||||
|
|
||||||
|
$result = $this->taglib->rebuildTagsForTypeId($typeId, $id, $semester);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
return error ('Error occurred during updateAutomatedTags');
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
private function _setAuthUID()
|
private function _setAuthUID()
|
||||||
{
|
{
|
||||||
$this->_uid = getAuthUID();
|
$this->_uid = getAuthUID();
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ function var_dump_to_error_log($parameter)
|
|||||||
var_dump($parameter); // KEEP IT!!!
|
var_dump($parameter); // KEEP IT!!!
|
||||||
$ob_get_contents = ob_get_contents();
|
$ob_get_contents = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
error_log(str_replace("\n", '', $ob_get_contents)); // KEEP IT!!!
|
error_log(str_replace("\n", '', $ob_get_contents) . ', referer: ' . "http".(!empty($_SERVER['HTTPS'])?"s":"")."://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']); // KEEP IT!!!
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -408,22 +408,6 @@ function findResource($path, $resource, $subdir = false, $extraDir = null)
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* check if String can be converted to a date
|
|
||||||
*/
|
|
||||||
function isValidDate($dateString)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return (new DateTime($dateString)) !== false;
|
|
||||||
}
|
|
||||||
catch(Exception $e)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// PHP functions that don't exist in older versions
|
// PHP functions that don't exist in older versions
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
@@ -446,7 +430,8 @@ if (!function_exists('array_is_list')) {
|
|||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check if string can be converted to a date
|
* Check if the provided parameter is a string containing a valid date
|
||||||
|
* NOTE: the name is in the "snake case" format because othewise the CI form validation _cannot_ use it
|
||||||
*/
|
*/
|
||||||
function is_valid_date($dateString)
|
function is_valid_date($dateString)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -269,3 +269,221 @@ function absoluteJsImportUrl($relurl)
|
|||||||
}
|
}
|
||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generate Css File Include if Extension contains file
|
||||||
|
*
|
||||||
|
* @param $relativeFilePath path relative to Extension public/css dir
|
||||||
|
*/
|
||||||
|
function generateCSSsIncludeIfExtensionCssExists($relativeFilePath)
|
||||||
|
{
|
||||||
|
$fsiterator = new FilesystemIterator(FHCPATH . 'application/extensions');
|
||||||
|
foreach ($fsiterator as $fsitem)
|
||||||
|
{
|
||||||
|
if(preg_match('/^FHC-Core-/', $fsitem->getBasename()))
|
||||||
|
{
|
||||||
|
$extensionfile = 'public/extensions/' . $fsitem->getBasename()
|
||||||
|
. '/css/' . $relativeFilePath;
|
||||||
|
if(is_readable(FHCPATH . $extensionfile))
|
||||||
|
{
|
||||||
|
generateCSSsInclude($extensionfile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Manipulate CI views includes Array to load
|
||||||
|
* - public/js/FhcApps.js via customJSs and
|
||||||
|
* - app customisation js and/or css from extensions via customJSModules
|
||||||
|
* if customJSModules contains at least one vuejs app and customisation files
|
||||||
|
* exist in extensions
|
||||||
|
*/
|
||||||
|
class ExtendableAppsHelper
|
||||||
|
{
|
||||||
|
private static $instance = null;
|
||||||
|
|
||||||
|
protected $extensions;
|
||||||
|
|
||||||
|
protected $customCSSs;
|
||||||
|
protected $customJSs;
|
||||||
|
protected $customJSModules;
|
||||||
|
|
||||||
|
protected $initialised;
|
||||||
|
protected $appscount;
|
||||||
|
|
||||||
|
protected $extCustomCSSs;
|
||||||
|
protected $extCustomJSs;
|
||||||
|
protected $extCustomJSModules;
|
||||||
|
|
||||||
|
private function __construct()
|
||||||
|
{
|
||||||
|
$this->extensions = array();
|
||||||
|
$this->customCSSs = null;
|
||||||
|
$this->customJSs = null;
|
||||||
|
$this->customJSModules = null;
|
||||||
|
|
||||||
|
$this->initialised = false;
|
||||||
|
$this->appscount = 0;
|
||||||
|
|
||||||
|
$this->extCustomCSSs = null;
|
||||||
|
$this->extCustomJSs = null;
|
||||||
|
$this->extCustomJSModules = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getInstance()
|
||||||
|
{
|
||||||
|
if(self::$instance === null)
|
||||||
|
{
|
||||||
|
self::$instance = new ExtendableAppsHelper();
|
||||||
|
}
|
||||||
|
return self::$instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function init($customCSSs, $customJSs, $customJSModules)
|
||||||
|
{
|
||||||
|
if($this->initialised)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->customCSSs = $customCSSs;
|
||||||
|
$this->customJSs = $customJSs;
|
||||||
|
$this->customJSModules = $customJSModules;
|
||||||
|
$this->initialised = true;
|
||||||
|
|
||||||
|
if(!isset($this->customJSModules))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!is_array($this->customJSModules))
|
||||||
|
{
|
||||||
|
$this->customJSModules = array($this->customJSModules);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(count($this->customJSModules) < 1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->buildExtensionsList();
|
||||||
|
$this->prepareExtendedArrays();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCustomCSSs()
|
||||||
|
{
|
||||||
|
if(is_null($this->extCustomCSSs))
|
||||||
|
{
|
||||||
|
return $this->customCSSs;
|
||||||
|
}
|
||||||
|
return $this->extCustomCSSs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCustomJSs()
|
||||||
|
{
|
||||||
|
if(is_null($this->extCustomJSs))
|
||||||
|
{
|
||||||
|
return $this->customJSs;
|
||||||
|
}
|
||||||
|
return $this->extCustomJSs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCustomJSModules()
|
||||||
|
{
|
||||||
|
if(is_null($this->extCustomJSModules))
|
||||||
|
{
|
||||||
|
return $this->customJSModules;
|
||||||
|
}
|
||||||
|
return $this->extCustomJSModules;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function buildExtensionsList()
|
||||||
|
{
|
||||||
|
$this->extensions = array();
|
||||||
|
$fsiterator = new FilesystemIterator(FHCPATH . 'application/extensions');
|
||||||
|
foreach ($fsiterator as $fsitem)
|
||||||
|
{
|
||||||
|
if(preg_match('/^FHC-Core-/', $fsitem->getBasename()))
|
||||||
|
{
|
||||||
|
$this->extensions[] = $fsitem->getBasename();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function prepareExtendedArrays()
|
||||||
|
{
|
||||||
|
$this->appscount = 0;
|
||||||
|
$this->initExtCustomCSSs();
|
||||||
|
$this->extCustomJSModules = array();
|
||||||
|
foreach($this->customJSModules as $item)
|
||||||
|
{
|
||||||
|
$matches = array();
|
||||||
|
if(preg_match('#^public/(extensions/FHC-Core-.+)?js/apps/(.*)\.js$#', $item, $matches))
|
||||||
|
{
|
||||||
|
$this->appscount++;
|
||||||
|
|
||||||
|
$fhcextension = $matches[1];
|
||||||
|
$app = $matches[2];
|
||||||
|
|
||||||
|
$extend_js_suffix = 'js/extend_app/' . $fhcextension . $app . '.js';
|
||||||
|
$extend_css_suffix = 'css/extend_app/' . $fhcextension . $app . '.css';
|
||||||
|
|
||||||
|
foreach($this->extensions as $extension)
|
||||||
|
{
|
||||||
|
$extend_js = 'public/extensions/' . $extension . '/' . $extend_js_suffix;
|
||||||
|
$extend_css = 'public/extensions/' . $extension . '/' . $extend_css_suffix;
|
||||||
|
|
||||||
|
if(is_readable(FHCPATH . $extend_js))
|
||||||
|
{
|
||||||
|
array_push($this->extCustomJSModules, $extend_js);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_readable(FHCPATH . $extend_css))
|
||||||
|
{
|
||||||
|
array_push($this->extCustomCSSs, $extend_css);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
array_push($this->extCustomJSModules, $item);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->appscount > 0)
|
||||||
|
{
|
||||||
|
$this->addFhcAppsJs();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function initExtCustomCSSs()
|
||||||
|
{
|
||||||
|
if(!isset($this->customCSSs))
|
||||||
|
{
|
||||||
|
$this->extCustomCSSs = array();
|
||||||
|
}
|
||||||
|
elseif(!is_array($this->customCSSs))
|
||||||
|
{
|
||||||
|
$this->extCustomCSSs = array($this->customCSSs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->extCustomCSSs = $this->customCSSs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function addFhcAppsJs()
|
||||||
|
{
|
||||||
|
if(!isset($this->customJSs))
|
||||||
|
{
|
||||||
|
$this->extCustomJSs = array();
|
||||||
|
}
|
||||||
|
elseif(!is_array($this->customJSs))
|
||||||
|
{
|
||||||
|
$this->extCustomJSs = array($this->customJSs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->extCustomJSs = $this->customJSs;
|
||||||
|
}
|
||||||
|
array_push($this->extCustomJSs, 'public/js/FhcApps.js');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ class AntragLib
|
|||||||
return $this->_ci->StudierendenantragstatusModel->resumeAntraegeForAbmeldungStgl($antrag_id);
|
return $this->_ci->StudierendenantragstatusModel->resumeAntraegeForAbmeldungStgl($antrag_id);
|
||||||
}
|
}
|
||||||
// NOTE(chris): get last status that is not pause
|
// NOTE(chris): get last status that is not pause
|
||||||
$this->_ci->StudierendenantragstatusModel->addOrder('insertamum');
|
$this->_ci->StudierendenantragstatusModel->addOrder('insertamum', 'DESC');
|
||||||
$this->_ci->StudierendenantragstatusModel->addLimit(1);
|
$this->_ci->StudierendenantragstatusModel->addLimit(1);
|
||||||
$result = $this->_ci->StudierendenantragstatusModel->loadWhere([
|
$result = $this->_ci->StudierendenantragstatusModel->loadWhere([
|
||||||
'studierendenantrag_id' => $antrag_id,
|
'studierendenantrag_id' => $antrag_id,
|
||||||
@@ -1657,7 +1657,7 @@ class AntragLib
|
|||||||
|
|
||||||
$result = $this->_ci->StudierendenantragModel->loadWithStatusWhere($where);
|
$result = $this->_ci->StudierendenantragModel->loadWithStatusWhere($where);
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
return $result;
|
return $result;
|
||||||
|
|
||||||
if (!hasData($result))
|
if (!hasData($result))
|
||||||
return error($this->_ci->p->t('studierendenantrag', "error_no_antrag_found", ['id' => $studierendenantrag_id]));
|
return error($this->_ci->p->t('studierendenantrag', "error_no_antrag_found", ['id' => $studierendenantrag_id]));
|
||||||
@@ -1709,6 +1709,7 @@ class AntragLib
|
|||||||
$result->statustyp = $antrag->statustyp;
|
$result->statustyp = $antrag->statustyp;
|
||||||
$result->status_insertvon = $antrag->status_insertvon;
|
$result->status_insertvon = $antrag->status_insertvon;
|
||||||
$result->grund = $antrag->grund;
|
$result->grund = $antrag->grund;
|
||||||
|
$result->status_grund = $antrag->status_grund;
|
||||||
$result->studierendenantrag_id = $antrag->studierendenantrag_id;
|
$result->studierendenantrag_id = $antrag->studierendenantrag_id;
|
||||||
$result->typ = $antrag->typ;
|
$result->typ = $antrag->typ;
|
||||||
$result->datum = $antrag->datum;
|
$result->datum = $antrag->datum;
|
||||||
|
|||||||
@@ -180,7 +180,8 @@ class DocsboxLib
|
|||||||
}
|
}
|
||||||
// Just started or still working on it
|
// Just started or still working on it
|
||||||
elseif ($getStatusResponse->body->status == self::STATUS_WORKING
|
elseif ($getStatusResponse->body->status == self::STATUS_WORKING
|
||||||
|| $getStatusResponse->body->status == self::STATUS_STARTED)
|
|| $getStatusResponse->body->status == self::STATUS_STARTED
|
||||||
|
|| $getStatusResponse->body->status == self::STATUS_QUEUED)
|
||||||
{
|
{
|
||||||
// go on!
|
// go on!
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ class PermissionLib
|
|||||||
const LOGINAS_PERSONIDS_BLACKLIST = 'permission_loginas_personids_blacklist';
|
const LOGINAS_PERSONIDS_BLACKLIST = 'permission_loginas_personids_blacklist';
|
||||||
|
|
||||||
private $_ci; // CI instance
|
private $_ci; // CI instance
|
||||||
|
private $access_rights; // current users access rights
|
||||||
private static $bb; // benutzerberechtigung
|
private static $bb; // benutzerberechtigung
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -61,6 +62,8 @@ class PermissionLib
|
|||||||
// Loads CI instance
|
// Loads CI instance
|
||||||
$this->_ci =& get_instance();
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
|
$this->access_rights = null;
|
||||||
|
|
||||||
$this->_ci->config->load('permission'); // Loads permission configuration
|
$this->_ci->config->load('permission'); // Loads permission configuration
|
||||||
|
|
||||||
// If it's NOT called from command line
|
// If it's NOT called from command line
|
||||||
@@ -69,8 +72,10 @@ class PermissionLib
|
|||||||
// API Caller rights initialization
|
// API Caller rights initialization
|
||||||
$authObj = $this->_ci->authlib->getAuthObj();
|
$authObj = $this->_ci->authlib->getAuthObj();
|
||||||
self::$bb = new benutzerberechtigung();
|
self::$bb = new benutzerberechtigung();
|
||||||
if ($authObj)
|
if ($authObj) {
|
||||||
self::$bb->getBerechtigungen($authObj->{AuthLib::AO_USERNAME});
|
self::$bb->getBerechtigungen($authObj->{AuthLib::AO_USERNAME});
|
||||||
|
$this->access_rights = self::$bb->berechtigungen;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -340,6 +345,16 @@ class PermissionLib
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the access rights for the current user
|
||||||
|
*
|
||||||
|
* @return array|null
|
||||||
|
*/
|
||||||
|
public function getAccessRights()
|
||||||
|
{
|
||||||
|
return $this->access_rights;
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// Private methods
|
// Private methods
|
||||||
|
|
||||||
|
|||||||
@@ -40,13 +40,16 @@ class StundenplanLib
|
|||||||
* @return stdClass
|
* @return stdClass
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
public function getEventsUser($start, $end)
|
public function getEventsUser($start, $end, $uid = null)
|
||||||
{
|
{
|
||||||
$this->_ci =& get_instance();
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
$this->_ci->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
$this->_ci->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||||
|
|
||||||
$uid = getAuthUID();
|
if (!$uid) {
|
||||||
|
$uid = getAuthUID();
|
||||||
|
}
|
||||||
|
|
||||||
if (is_null($uid))
|
if (is_null($uid))
|
||||||
return error("No UID");
|
return error("No UID");
|
||||||
|
|
||||||
@@ -111,6 +114,7 @@ class StundenplanLib
|
|||||||
return $stundenplan_data;
|
return $stundenplan_data;
|
||||||
$stundenplan_data = getData($stundenplan_data) ?? [];
|
$stundenplan_data = getData($stundenplan_data) ?? [];
|
||||||
|
|
||||||
|
$this->_ci->addMeta("stundenplanData", $stundenplan_data);
|
||||||
$function_error = $this->expandObjectInformation($stundenplan_data);
|
$function_error = $this->expandObjectInformation($stundenplan_data);
|
||||||
if ($function_error)
|
if ($function_error)
|
||||||
return $function_error;
|
return $function_error;
|
||||||
@@ -217,7 +221,7 @@ class StundenplanLib
|
|||||||
* @param string $ort_kurzbz
|
* @param string $ort_kurzbz
|
||||||
* @return stdClass
|
* @return stdClass
|
||||||
*/
|
*/
|
||||||
public function getReservierungen($start_date, $end_date, $ort_kurzbz = '')
|
public function getReservierungen($start_date, $end_date, $ort_kurzbz = '', $uid = null)
|
||||||
{
|
{
|
||||||
$this->_ci =& get_instance();
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
@@ -228,14 +232,14 @@ class StundenplanLib
|
|||||||
$this->_ci->load->model('ressource/Reservierung_model', 'ReservierungModel');
|
$this->_ci->load->model('ressource/Reservierung_model', 'ReservierungModel');
|
||||||
$this->_ci->load->model('ressource/Stundenplan_model', 'StundenplanModel');
|
$this->_ci->load->model('ressource/Stundenplan_model', 'StundenplanModel');
|
||||||
|
|
||||||
$is_mitarbeiter = getData($this->_ci->MitarbeiterModel->isMitarbeiter(getAuthUID()));
|
$is_mitarbeiter = getData($this->_ci->MitarbeiterModel->isMitarbeiter($uid ?? getAuthUID()));
|
||||||
|
|
||||||
if ($is_mitarbeiter && empty($ort_kurzbz)) {
|
if ($is_mitarbeiter && empty($ort_kurzbz)) {
|
||||||
// request for personal lvplan show only reservations of logged in user
|
// request for personal lvplan show only reservations of logged in user
|
||||||
$reservierungen = $this->_ci->ReservierungModel->getReservierungenMitarbeiter($start_date, $end_date);
|
$reservierungen = $this->_ci->ReservierungModel->getReservierungenMitarbeiter($start_date, $end_date, $uid);
|
||||||
} else {
|
} else {
|
||||||
// querying the reservierungen
|
// querying the reservierungen
|
||||||
$reservierungen = $this->_ci->ReservierungModel->getReservierungen($start_date, $end_date, $ort_kurzbz);
|
$reservierungen = $this->_ci->ReservierungModel->getReservierungen($start_date, $end_date, $ort_kurzbz, $uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isError($reservierungen))
|
if (isError($reservierungen))
|
||||||
@@ -357,7 +361,10 @@ class StundenplanLib
|
|||||||
if (isError($ort_content_object)) {
|
if (isError($ort_content_object)) {
|
||||||
return error(getData($ort_content_object));
|
return error(getData($ort_content_object));
|
||||||
}
|
}
|
||||||
$ort_content_object = getData($ort_content_object)[0];
|
$ort_content_object_data = getData($ort_content_object);
|
||||||
|
$ort_content_object = (is_array($ort_content_object_data) && count($ort_content_object_data) > 0)
|
||||||
|
? $ort_content_object_data[0]
|
||||||
|
: null;
|
||||||
if($ort_content_object) {
|
if($ort_content_object) {
|
||||||
$item->ort_content_id = $ort_content_object->content_id;
|
$item->ort_content_id = $ort_content_object->content_id;
|
||||||
}
|
}
|
||||||
@@ -368,6 +375,39 @@ class StundenplanLib
|
|||||||
$item->gruppe = $gruppe_obj_array;
|
$item->gruppe = $gruppe_obj_array;
|
||||||
$item->lektor = $lektor_obj_array;
|
$item->lektor = $lektor_obj_array;
|
||||||
|
|
||||||
|
$this->_ci->load->library('PermissionLib');
|
||||||
|
$berechtigt_begrenzt = $this->_ci->permissionlib->isBerechtigt('lehre/reservierung:begrenzt', 'sui');
|
||||||
|
|
||||||
|
$now = time();
|
||||||
|
$res_lektor_start = $this->jump_day($now, RES_TAGE_LEKTOR_MIN - 1);
|
||||||
|
$res_lektor_ende = mktime(0, 0, 0, date('m', $now), date('d', $now) + RES_TAGE_LEKTOR_BIS, date('Y', $now));
|
||||||
|
|
||||||
|
$start_date = is_numeric($item->beginn) ? $item->beginn : strtotime($item->beginn);
|
||||||
|
if (!date('w', $start_date)) {
|
||||||
|
$start_date = $this->jump_day($start_date, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$start_date_str = date('Y-m-d', $start_date);
|
||||||
|
$res_lektor_start_str = date('Y-m-d', $res_lektor_start);
|
||||||
|
$res_lektor_ende_str = date('Y-m-d', $res_lektor_ende);
|
||||||
|
|
||||||
|
$show_delete = (
|
||||||
|
(
|
||||||
|
$berechtigt_begrenzt &&
|
||||||
|
(
|
||||||
|
(isset($item->insertvon) && $item->insertvon == getAuthUID()) ||
|
||||||
|
(isset($item->uids) && in_array(getAuthUID(), $item->uids))
|
||||||
|
)
|
||||||
|
) &&
|
||||||
|
$start_date_str >= $res_lektor_start_str &&
|
||||||
|
$start_date_str <= $res_lektor_ende_str
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($show_delete)
|
||||||
|
$item->deletable = true;
|
||||||
|
else
|
||||||
|
$item->deletable = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -445,6 +485,230 @@ class StundenplanLib
|
|||||||
return success($ferienEventsFlattened);
|
return success($ferienEventsFlattened);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getEventsStgOrg( $start, $end, $stg_kz, $sem, $verband, $gruppe)
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
|
$this->_ci->load->model('ressource/Stundenplan_model', 'StundenplanModel');
|
||||||
|
|
||||||
|
$stundenplan_data = $this->_ci->StundenplanModel->getStundenplanStudiengang($start, $end, $stg_kz, $sem, $verband, $gruppe);
|
||||||
|
if (isError($stundenplan_data))
|
||||||
|
return $stundenplan_data;
|
||||||
|
$stundenplan_data = getData($stundenplan_data) ?? [];
|
||||||
|
|
||||||
|
$function_error = $this->expandObjectInformation($stundenplan_data);
|
||||||
|
if ($function_error)
|
||||||
|
return $function_error;
|
||||||
|
|
||||||
|
return success($stundenplan_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addReservation($start, $end, $title, $beschreibung, $ort_kurzbz, $lektoren = null, $studiengang = null, $semester = null, $verband = null, $gruppe = null, $spezialgruppe = null)
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
$this->_ci->load->model('ressource/Stunde_model', 'StundeModel');
|
||||||
|
$this->_ci->load->model('ressource/Reservierung_model', 'ReservierungModel');
|
||||||
|
$this->_ci->load->model('ressource/stundenplandev_model', 'StundenplandevModel');
|
||||||
|
$this->_ci->load->model('ressource/stundenplan_model', 'StundenplanModel');
|
||||||
|
$this->_ci->load->library('PermissionLib');
|
||||||
|
|
||||||
|
$startTime = new DateTime($start);
|
||||||
|
$endTime = new DateTime($end);
|
||||||
|
|
||||||
|
$stunden = $this->_ci->StundeModel->loadWhere(array(
|
||||||
|
'beginn <' => $endTime->format('H:i:s'),
|
||||||
|
'ende >' => $startTime->format('H:i:s')
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!hasData($stunden))
|
||||||
|
{
|
||||||
|
return error("Keine Stunden vorhanden");
|
||||||
|
}
|
||||||
|
|
||||||
|
$stunden = array_column(getData($stunden), 'stunde');
|
||||||
|
|
||||||
|
$this->_ci->StundenplandevModel->db->select('1');
|
||||||
|
$this->_ci->StundenplandevModel->db->where('datum', $startTime->format('Y-m-d'));
|
||||||
|
$this->_ci->StundenplandevModel->db->where('ort_kurzbz', $ort_kurzbz);
|
||||||
|
$this->_ci->StundenplandevModel->db->where_in('stunde', $stunden);
|
||||||
|
$stundenplandev_belegung = $this->_ci->StundenplandevModel->load();
|
||||||
|
|
||||||
|
$this->_ci->StundenplanModel->db->select('1');
|
||||||
|
$this->_ci->StundenplanModel->db->where('ort_kurzbz', $ort_kurzbz);
|
||||||
|
$this->_ci->StundenplanModel->db->where('datum', $startTime->format('Y-m-d'));
|
||||||
|
$this->_ci->StundenplanModel->db->where_in('stunde', $stunden);
|
||||||
|
$stundenplan_belegung = $this->_ci->StundenplanModel->load();
|
||||||
|
|
||||||
|
if ((hasData($stundenplandev_belegung) || hasData($stundenplan_belegung))
|
||||||
|
&& !$this->_ci->permissionlib->isBerechtigt('lehre/reservierungAdvanced'))
|
||||||
|
return error ('lvplan/bereitsReserviert');
|
||||||
|
|
||||||
|
$this->_ci->ReservierungModel->addSelect('stunde');
|
||||||
|
$reservation_hours = $this->_ci->ReservierungModel->loadWhere(array('datum' => $startTime->format('Y-m-d'), 'ort_kurzbz' => $ort_kurzbz));
|
||||||
|
|
||||||
|
|
||||||
|
if (isError($reservation_hours))
|
||||||
|
return $reservation_hours;
|
||||||
|
|
||||||
|
$reservation_hours = hasData($reservation_hours) ? array_column(getData($reservation_hours), 'stunde') : array();
|
||||||
|
|
||||||
|
if (!empty(array_intersect($stunden, $reservation_hours))
|
||||||
|
&& !$this->_ci->permissionlib->isBerechtigt('lehre/reservierungAdvanced'))
|
||||||
|
return error("lvplan/bereitsReserviert");
|
||||||
|
|
||||||
|
|
||||||
|
if (!empty($lektoren))
|
||||||
|
{
|
||||||
|
foreach ($lektoren as $lektor)
|
||||||
|
{
|
||||||
|
$insert = array('ort_kurzbz' => $ort_kurzbz,
|
||||||
|
'datum' => $startTime->format('Y-m-d'),
|
||||||
|
'titel' => $title,
|
||||||
|
'studiengang_kz' => is_null($studiengang) ? 0 : $studiengang,
|
||||||
|
'beschreibung' => $beschreibung,
|
||||||
|
'insertvon' => getAuthUID(),
|
||||||
|
'uid' => $lektor,
|
||||||
|
'semester' => is_null($semester) ? null : $semester,
|
||||||
|
'verband' => is_null($verband) ? null : $verband,
|
||||||
|
'gruppe' => is_null($gruppe) ? null : $gruppe,
|
||||||
|
'gruppe_kurzbz' => is_null($spezialgruppe) ? null : $spezialgruppe,
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($stunden as $stunde)
|
||||||
|
{
|
||||||
|
$insert['stunde'] = $stunde;
|
||||||
|
$check_insert = $this->_ci->ReservierungModel->insert($insert);
|
||||||
|
if (isError($check_insert))
|
||||||
|
return $check_insert;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach ($stunden as $stunde)
|
||||||
|
{
|
||||||
|
$check_insert = $this->_ci->ReservierungModel->insert(array(
|
||||||
|
'ort_kurzbz' => $ort_kurzbz,
|
||||||
|
'uid' => getAuthUID(),
|
||||||
|
'stunde' => $stunde,
|
||||||
|
'datum' => $startTime->format('Y-m-d'),
|
||||||
|
'titel' => $title,
|
||||||
|
'studiengang_kz' => is_null($studiengang) ? 0 : $studiengang,
|
||||||
|
'beschreibung' => $beschreibung,
|
||||||
|
'insertvon' => getAuthUID()
|
||||||
|
));
|
||||||
|
if (isError($check_insert))
|
||||||
|
return $check_insert;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return success("Erfolgreich");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteReservation($reservierung_id)
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
$this->_ci->load->model('ressource/Reservierung_model', 'ReservierungModel');
|
||||||
|
$this->_ci->load->model('ressource/Stunde_model', 'StundeModel');
|
||||||
|
$this->_ci->load->library('PermissionLib');
|
||||||
|
|
||||||
|
|
||||||
|
$this->_ci->ReservierungModel->db->where_in('reservierung_id', $reservierung_id);
|
||||||
|
$reservation = $this->_ci->ReservierungModel->load();
|
||||||
|
if (isError($reservation))
|
||||||
|
return $reservation;
|
||||||
|
|
||||||
|
if (!hasData($reservation))
|
||||||
|
return error("Reservierungen nicht gefunden");
|
||||||
|
|
||||||
|
$reservations = getData($reservation);
|
||||||
|
|
||||||
|
$today = new DateTime();
|
||||||
|
foreach ($reservations as $reservierung)
|
||||||
|
{
|
||||||
|
if ($today->format('Y-m-d') > $reservierung->datum)
|
||||||
|
return error("Vergangene Reservierungen können nicht gelöscht werden");
|
||||||
|
|
||||||
|
if (($this->_ci->permissionlib->isBerechtigt('lehre/reservierung:begrenzt')) && ($reservierung->insertvon == getAuthUID() || $reservierung->uid === getAuthUID()))
|
||||||
|
{
|
||||||
|
$delete_result = $this->_ci->ReservierungModel->delete($reservierung->reservierung_id);
|
||||||
|
|
||||||
|
if (isError($delete_result))
|
||||||
|
return $delete_result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return success("Erfolgreich");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getReservableMap($ort_kurzbz, $start_date, $end_date)
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
$this->_ci->load->model('ressource/Ort_model', 'OrtModel');
|
||||||
|
$this->_ci->load->library('PermissionLib');
|
||||||
|
|
||||||
|
$berechtigt_begrenzt = $this->_ci->permissionlib->isBerechtigt('lehre/reservierung:begrenzt', 'suid');
|
||||||
|
$berechtigt_erweitert = $this->_ci->permissionlib->isBerechtigt('lehre/reservierung', 'suid');
|
||||||
|
|
||||||
|
$ort_data = $this->_ci->OrtModel->load($ort_kurzbz);
|
||||||
|
if (isError($ort_data) || !hasData($ort_data))
|
||||||
|
return [];
|
||||||
|
|
||||||
|
$ort_data = getData($ort_data)[0];
|
||||||
|
|
||||||
|
if (!$ort_data->reservieren)
|
||||||
|
return [];
|
||||||
|
|
||||||
|
if (!$berechtigt_begrenzt && !$berechtigt_erweitert)
|
||||||
|
return [];
|
||||||
|
|
||||||
|
$start_ts = is_numeric($start_date) ? (int)$start_date : strtotime($start_date);
|
||||||
|
$end_ts = is_numeric($end_date) ? (int)$end_date : strtotime($end_date);
|
||||||
|
|
||||||
|
if (!$start_ts || !$end_ts)
|
||||||
|
return [];
|
||||||
|
|
||||||
|
if ($end_ts < $start_ts)
|
||||||
|
{
|
||||||
|
$tmp = $start_ts;
|
||||||
|
$start_ts = $end_ts;
|
||||||
|
$end_ts = $tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
$now = time();
|
||||||
|
$tage_min = defined('RES_TAGE_LEKTOR_MIN') ? (int)RES_TAGE_LEKTOR_MIN : 0;
|
||||||
|
$tage_bis = defined('RES_TAGE_LEKTOR_BIS') ? (int)RES_TAGE_LEKTOR_BIS : 0;
|
||||||
|
|
||||||
|
$datum_res_lektor_start = $this->jump_day($now, $tage_min - 1);
|
||||||
|
$datum_res_lektor_ende = $this->jump_day($now, $tage_bis);
|
||||||
|
|
||||||
|
$start_ymd_allowed = date('Y-m-d', $datum_res_lektor_start);
|
||||||
|
$end_ymd_allowed = date('Y-m-d', $datum_res_lektor_ende);
|
||||||
|
|
||||||
|
$result = [];
|
||||||
|
|
||||||
|
$current = strtotime(date('Y-m-d', $start_ts) . ' 00:00:00');
|
||||||
|
$end_day = strtotime(date('Y-m-d', $end_ts) . ' 00:00:00');
|
||||||
|
|
||||||
|
while ($current <= $end_day)
|
||||||
|
{
|
||||||
|
$ymd = date('Y-m-d', $current);
|
||||||
|
|
||||||
|
$result[$ymd] = ($ymd >= $start_ymd_allowed && $ymd <= $end_ymd_allowed) ? true : false;
|
||||||
|
|
||||||
|
$current = $this->jump_day($current, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return success($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function jump_day($timestamp, $days)
|
||||||
|
{
|
||||||
|
$days = (int)$days;
|
||||||
|
$prefix = ($days >= 0 ? '+' : '');
|
||||||
|
return strtotime($prefix . $days . ' days', $timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
// start of the private functions ########################################################################################################
|
// start of the private functions ########################################################################################################
|
||||||
|
|
||||||
// function used to sort an array of studiensemester strings
|
// function used to sort an array of studiensemester strings
|
||||||
|
|||||||
@@ -0,0 +1,392 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FH-Complete
|
||||||
|
*
|
||||||
|
* @package FHC-Helper
|
||||||
|
* @author FHC-Team
|
||||||
|
* @copyright Copyright (c) 2026 fhcomplete.net
|
||||||
|
* @license GPLv3
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
use \stdClass as stdClass;
|
||||||
|
|
||||||
|
class TagLib
|
||||||
|
{
|
||||||
|
const BATCHUSER = 'sftest';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object initialization
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
|
// Configs
|
||||||
|
$this->_ci->load->config('stv');
|
||||||
|
|
||||||
|
// Models
|
||||||
|
$this->_ci->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->_ci->load->model('system/Notiztyp_model', 'NotiztypModel');
|
||||||
|
$this->_ci->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
$this->_ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||||
|
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
|
||||||
|
// Libraries
|
||||||
|
$this->_ci->load->library('PermissionLib');
|
||||||
|
$this->_ci->load->library('PrestudentLib');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateAutomatedTags($paramsTag)
|
||||||
|
{
|
||||||
|
// ---------------------------------
|
||||||
|
// check params
|
||||||
|
// ---------------------------------
|
||||||
|
$required = ['kurzbz', 'data', 'typeId'];
|
||||||
|
|
||||||
|
foreach ($required as $key) {
|
||||||
|
if (!isset($paramsTag[$key])) {
|
||||||
|
return error('Missing Parameter: ' . $key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$studiensemester_kurzbz = (isset ($paramsTag['studiensemester_kurzbz']) ? $paramsTag['studiensemester_kurzbz'] : null);
|
||||||
|
$tag = $paramsTag['kurzbz'];
|
||||||
|
$inputData = $paramsTag['data'];
|
||||||
|
$typeId = $paramsTag['typeId'];
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// prepare input
|
||||||
|
// ---------------------------------
|
||||||
|
$zeitraum = [];
|
||||||
|
$arrayIds = [];
|
||||||
|
|
||||||
|
foreach ($inputData as $item) {
|
||||||
|
$id = $item['id'];
|
||||||
|
$arrayIds[] = $id;
|
||||||
|
|
||||||
|
$zeitraum[$id] = [
|
||||||
|
'von' => $item['von'] ?? null,
|
||||||
|
'bis' => $item['bis'] ?? null
|
||||||
|
];
|
||||||
|
}
|
||||||
|
$arrayIds = array_unique($arrayIds);
|
||||||
|
|
||||||
|
$result = $this->_ci->StudiensemesterModel->load($studiensemester_kurzbz);
|
||||||
|
if (isError($result)) {
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
$data = $result->retval[0] ?? null;
|
||||||
|
|
||||||
|
$von = $data->start ?? null;
|
||||||
|
$bis = $data->ende ?? null;
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// load existing tags
|
||||||
|
// ---------------------------------
|
||||||
|
$allTags = [];
|
||||||
|
$resultAllTags = $this->_ci->NotizModel->getAllTags($tag, $von, $bis);
|
||||||
|
if (isError($resultAllTags)) {
|
||||||
|
return $resultAllTags;
|
||||||
|
}
|
||||||
|
$allTagsData = getData($resultAllTags);
|
||||||
|
|
||||||
|
if (!empty($allTagsData)) {
|
||||||
|
foreach ($allTagsData as $item) {
|
||||||
|
$allTags[$item->$typeId] = $item->notiz_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// map the data
|
||||||
|
// ---------------------------------
|
||||||
|
$toRecycle = [];
|
||||||
|
$toAdd = [];
|
||||||
|
$toDelete = [];
|
||||||
|
|
||||||
|
foreach ($arrayIds as $id) {
|
||||||
|
if (isset($allTags[$id])) {
|
||||||
|
$toRecycle[$id] = $allTags[$id];
|
||||||
|
} else {
|
||||||
|
$toAdd[] = $id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($allTags as $id => $notizId) {
|
||||||
|
if (!in_array($id, $arrayIds)) {
|
||||||
|
$toDelete[$id] = $notizId;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// recycle (update existing)
|
||||||
|
// ---------------------------------
|
||||||
|
$countRecycled = 0;
|
||||||
|
$retagged = [];
|
||||||
|
|
||||||
|
foreach ($toRecycle as $id => $notizId)
|
||||||
|
{
|
||||||
|
$this->_updateTag($notizId, $zeitraum[$id]['von'], $zeitraum[$id]['bis']);
|
||||||
|
|
||||||
|
$countRecycled++;
|
||||||
|
$retagged[] = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// ADD
|
||||||
|
// ---------------------------------
|
||||||
|
$countAdded = 0;
|
||||||
|
$tagged = [];
|
||||||
|
|
||||||
|
foreach ($toAdd as $id)
|
||||||
|
{
|
||||||
|
$this->_insertTag($typeId, $id, $tag, $zeitraum[$id]['von'], $zeitraum[$id]['bis']);
|
||||||
|
$countAdded++;
|
||||||
|
|
||||||
|
$tagged[] = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// delete
|
||||||
|
// ---------------------------------
|
||||||
|
$countDeleted = 0;
|
||||||
|
$deleted = [];
|
||||||
|
|
||||||
|
foreach ($toDelete as $id => $notizId)
|
||||||
|
{
|
||||||
|
$result = $this->_deleteTag($notizId);
|
||||||
|
|
||||||
|
if (isError($result)) {
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
$countDeleted++;
|
||||||
|
$deleted[] = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// return
|
||||||
|
// ---------------------------------
|
||||||
|
return success([
|
||||||
|
'input' => [
|
||||||
|
'tag' => $tag,
|
||||||
|
'arrayIds' => $arrayIds
|
||||||
|
],
|
||||||
|
'summary' => [
|
||||||
|
'recycled' => $countRecycled,
|
||||||
|
'added' => $countAdded,
|
||||||
|
'deleted' => $countDeleted
|
||||||
|
],
|
||||||
|
'details' => [
|
||||||
|
'existingTags' => $allTags,
|
||||||
|
'toAdd' => $toAdd,
|
||||||
|
'toRecycle' => $toRecycle,
|
||||||
|
'toDelete' => $toDelete
|
||||||
|
],
|
||||||
|
'results' => [
|
||||||
|
'retaggedIds' => $retagged,
|
||||||
|
'newTags' => $tagged,
|
||||||
|
'deletedTagsIds' => $deleted
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateAutomatedTagsForTypeId(array $params)
|
||||||
|
{
|
||||||
|
$return = null;
|
||||||
|
$notiz_id = null;
|
||||||
|
|
||||||
|
$von = $params['von'];
|
||||||
|
$bis = $params['bis'];
|
||||||
|
$tag = $params['kurzbz'];
|
||||||
|
$id = $params['id'];
|
||||||
|
$typeId = $params['typeId'];
|
||||||
|
|
||||||
|
$this->_ci->NotizModel->addSelect('nz.notiz_id');
|
||||||
|
$this->_ci->NotizModel->addSelect($typeId);
|
||||||
|
$this->_ci->NotizModel->addJoin('public.tbl_notizzuordnung nz', 'notiz_id');
|
||||||
|
$resultAllTags = $this->_ci->NotizModel->loadWhere([
|
||||||
|
'typ' => $tag,
|
||||||
|
$typeId => $id
|
||||||
|
]);
|
||||||
|
if(hasData($resultAllTags))
|
||||||
|
{
|
||||||
|
$notiz_id = $resultAllTags->retval[0]->notiz_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
//RECYCLE
|
||||||
|
if ($notiz_id !== null)
|
||||||
|
{
|
||||||
|
$resultUpdateNotiz = $this->_updateTag($notiz_id, $von, $bis);
|
||||||
|
$return = ['recycled' => $resultUpdateNotiz];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
//ADD
|
||||||
|
{
|
||||||
|
$resultInsertNotiz = $this->_insertTag($typeId, $id, $tag, $von, $bis);
|
||||||
|
$return = ['added' => $resultInsertNotiz];
|
||||||
|
}
|
||||||
|
return success($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* main function for rebuild Tags for typeId
|
||||||
|
* */
|
||||||
|
public function rebuildTagsForTypeId($typeId, $id, $studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
$automatedTagsRes = $this->_ci->NotiztypModel->loadWhere(array('automatisiert' => true, 'taglib IS NOT NULL' => null));
|
||||||
|
$automatedTags = hasData($automatedTagsRes) ? getData($automatedTagsRes) : [];
|
||||||
|
|
||||||
|
$result = $this->_ci->StudiensemesterModel->load($studiensemester_kurzbz);
|
||||||
|
if (isError($result))
|
||||||
|
return error('Error occurred during retrieving studiensemester');
|
||||||
|
if (empty($result->retval) || !isset($result->retval[0])) {
|
||||||
|
return error('No studiensemester found');
|
||||||
|
}
|
||||||
|
|
||||||
|
$startSem = $result->retval[0]->start ?? null;
|
||||||
|
$endeSem = $result->retval[0]->ende ?? null;
|
||||||
|
$return = [];
|
||||||
|
|
||||||
|
foreach ($automatedTags as $autoTag)
|
||||||
|
{
|
||||||
|
// getPath: must not be lost
|
||||||
|
$filePath = APPPATH . 'libraries/' . $autoTag->taglib . '.php'; // APPPATH = application/
|
||||||
|
|
||||||
|
if (file_exists($filePath)) {
|
||||||
|
require_once($filePath);
|
||||||
|
} else {
|
||||||
|
echo "File not found: " . $filePath;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$className = basename($autoTag->taglib);
|
||||||
|
$kurz_bz = $autoTag->typ_kurzbz;
|
||||||
|
|
||||||
|
$obj = new $className();
|
||||||
|
|
||||||
|
$criteriaIsSet = $obj->isCriteriaSetFor([
|
||||||
|
'typeId' => $typeId,
|
||||||
|
'id' => $id,
|
||||||
|
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (hasData($criteriaIsSet))
|
||||||
|
{
|
||||||
|
$von = isset($criteriaIsSet->retval[0]->von) ? $criteriaIsSet->retval[0]->von : '';
|
||||||
|
$bis = isset($criteriaIsSet->retval[0]->bis) ? $criteriaIsSet->retval[0]->bis : '';
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
'von' => $von,
|
||||||
|
'bis' => $bis,
|
||||||
|
'kurzbz' => $autoTag->typ_kurzbz,
|
||||||
|
'typeId' => $typeId,
|
||||||
|
'id' => $id,
|
||||||
|
];
|
||||||
|
|
||||||
|
$result = $this->updateAutomatedTagsForTypeId($params);
|
||||||
|
if (isError($result))
|
||||||
|
return error('Error occurred during updateAutomatedTags' . $kurz_bz);
|
||||||
|
|
||||||
|
$return[$kurz_bz] = $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//CHECK FOR DELETE
|
||||||
|
$params = [
|
||||||
|
'von' => $startSem,
|
||||||
|
'bis' => $endeSem,
|
||||||
|
'kurzbz' => $autoTag->typ_kurzbz,
|
||||||
|
'typeId' => $typeId,
|
||||||
|
'id' => $id,
|
||||||
|
];
|
||||||
|
$result = $this->_ci->NotizModel->checkIfExistingTag($kurz_bz, $typeId, $id, $startSem, $endeSem);
|
||||||
|
if (hasData($result))
|
||||||
|
{
|
||||||
|
$notizId = $result->retval[0]->notiz_id;
|
||||||
|
$this->_deleteTag($notizId);
|
||||||
|
$return[$kurz_bz] = ['deleted' => $notizId];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return success($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _insertTag($typeId, $id, $tag, $von, $bis)
|
||||||
|
{
|
||||||
|
$resultInsert = $this->_ci->NotizModel->insert([
|
||||||
|
'titel' => 'TAG',
|
||||||
|
'text' => 'AUTOMATED TAG',
|
||||||
|
'verfasser_uid' => self::BATCHUSER,
|
||||||
|
'erledigt' => false,
|
||||||
|
'insertamum' => date('Y-m-d H:i:s'),
|
||||||
|
'insertvon' => 'BatchJobTagAdd',
|
||||||
|
'typ' => $tag,
|
||||||
|
'start' => $von,
|
||||||
|
'ende' => $bis
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (isError($resultInsert)) {
|
||||||
|
return error('Error inserting tag for ' . $typeId . ': ' . $id);
|
||||||
|
}
|
||||||
|
|
||||||
|
$notizId = $resultInsert->retval;
|
||||||
|
|
||||||
|
$resultZuordnung = $this->_ci->NotizzuordnungModel->insert([
|
||||||
|
'notiz_id' => $notizId,
|
||||||
|
$typeId => $id
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (isError($resultZuordnung)) {
|
||||||
|
return error('Error inserting relation for ' . $typeId . ': ' . $id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $notizId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _updateTag($notiz_id, $von, $bis)
|
||||||
|
{
|
||||||
|
$resultUpdateNotiz = $this->_ci->NotizModel->update(
|
||||||
|
[
|
||||||
|
'notiz_id' => $notiz_id
|
||||||
|
],
|
||||||
|
array(
|
||||||
|
'updateamum' => date('Y-m-d H:i:s'),
|
||||||
|
'updatevon' => 'BatchJobTagUpdate',
|
||||||
|
'start' => $von,
|
||||||
|
'ende' => $bis
|
||||||
|
));
|
||||||
|
|
||||||
|
|
||||||
|
if (isError($resultUpdateNotiz))
|
||||||
|
return error ('Error occurred during Update ' . $notiz_id);
|
||||||
|
|
||||||
|
return $notiz_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _deleteTag($notiz_id)
|
||||||
|
{
|
||||||
|
$result = $this->_ci->NotizzuordnungModel->delete([
|
||||||
|
'notiz_id' => $notiz_id
|
||||||
|
]);
|
||||||
|
if (isError($result)) {
|
||||||
|
return error('Error occurred during delete Notizzuordnung ' . $notiz_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->_ci->NotizModel->delete([
|
||||||
|
'notiz_id' => $notiz_id
|
||||||
|
]);
|
||||||
|
if (isError($result)) {
|
||||||
|
return error('Error occurred during delete Notiz ' . $notiz_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return success([
|
||||||
|
'deleted' => $notiz_id
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -37,7 +37,9 @@ class DashboardLib
|
|||||||
|
|
||||||
public function getDashboardByKurzbz($dashboard_kurzbz)
|
public function getDashboardByKurzbz($dashboard_kurzbz)
|
||||||
{
|
{
|
||||||
$result = $this->_ci->DashboardModel->getDashboardByKurzbz($dashboard_kurzbz);
|
$result = $this->_ci->DashboardModel->loadWhere([
|
||||||
|
'dashboard_kurzbz' => $dashboard_kurzbz
|
||||||
|
]);
|
||||||
|
|
||||||
if (hasData($result))
|
if (hasData($result))
|
||||||
{
|
{
|
||||||
@@ -47,30 +49,55 @@ class DashboardLib
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMergedConfig($dashboard_id, $uid)
|
public function getMergedUserConfig($dashboard_id, $uid)
|
||||||
{
|
{
|
||||||
$defaultconfig = $this->getDefaultConfig($dashboard_id, $uid);
|
$defaultconfig = $this->getUserBaseConfig($dashboard_id);
|
||||||
$userconfig = $this->getUserConfig($dashboard_id, $uid);
|
$userconfig = $this->getUserOverrideConfig($dashboard_id, $uid);
|
||||||
|
|
||||||
$mergedconfig = array_replace_recursive($defaultconfig, $userconfig);
|
$sourceconfig = array_map(function ($value) {
|
||||||
|
return ['source' => $value['source']];
|
||||||
|
}, $defaultconfig);
|
||||||
|
|
||||||
|
$mergedconfig = array_replace_recursive($defaultconfig, $userconfig, $sourceconfig);
|
||||||
|
|
||||||
return $mergedconfig;
|
return $mergedconfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDefaultConfig($dashboard_id, $uid)
|
protected function getUserBaseConfig($dashboard_id)
|
||||||
{
|
{
|
||||||
$res_presets = $this->_ci->DashboardPresetModel->getPresets($dashboard_id, $uid);
|
$funktion_kurzbzs = [];
|
||||||
|
$rights = $this->_ci->permissionlib->getAccessRights();
|
||||||
|
if ($rights)
|
||||||
|
$funktion_kurzbzs = array_unique(array_map(function ($right) {
|
||||||
|
return $right->funktion_kurzbz;
|
||||||
|
}, $rights));
|
||||||
|
|
||||||
|
$this->_ci->DashboardPresetModel->db
|
||||||
|
->group_start()
|
||||||
|
->where_in('funktion_kurzbz', $funktion_kurzbzs)
|
||||||
|
->or_where('funktion_kurzbz IS NULL')
|
||||||
|
->group_end();
|
||||||
|
|
||||||
|
$this->_ci->DashboardPresetModel->addOrder('funktion_kurzbz', 'DESC');
|
||||||
|
|
||||||
|
$result = $this->_ci->DashboardPresetModel->loadWhere([
|
||||||
|
'dashboard_id' => $dashboard_id
|
||||||
|
]);
|
||||||
$defaultconfig = array();
|
$defaultconfig = array();
|
||||||
|
|
||||||
if (hasData($res_presets))
|
if (hasData($result))
|
||||||
{
|
{
|
||||||
$presets = getData($res_presets);
|
$presets = getData($result);
|
||||||
foreach ($presets as $presetobj)
|
foreach ($presets as $presetobj)
|
||||||
{
|
{
|
||||||
$preset = json_decode($presetobj->preset, true);
|
$preset = json_decode($presetobj->preset, true);
|
||||||
if (null !== $preset)
|
if (null !== $preset)
|
||||||
{
|
{
|
||||||
$defaultconfig = array_replace_recursive($defaultconfig, $preset);
|
$preset = array_map(function ($value) use ($presetobj) {
|
||||||
|
$value['source'] = $presetobj->funktion_kurzbz ?: self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL;
|
||||||
|
return $value;
|
||||||
|
}, $preset);
|
||||||
|
$defaultconfig = array_merge_recursive($defaultconfig, $preset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -78,7 +105,7 @@ class DashboardLib
|
|||||||
return $defaultconfig;
|
return $defaultconfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUserConfig($dashboard_id, $uid)
|
protected function getUserOverrideConfig($dashboard_id, $uid)
|
||||||
{
|
{
|
||||||
$res_userconfig = $this->_ci->DashboardOverrideModel->getOverride($dashboard_id, $uid);
|
$res_userconfig = $this->_ci->DashboardOverrideModel->getOverride($dashboard_id, $uid);
|
||||||
|
|
||||||
@@ -107,7 +134,7 @@ class DashboardLib
|
|||||||
$emptyoverride = new stdClass();
|
$emptyoverride = new stdClass();
|
||||||
$emptyoverride->dashboard_id = $dashboard->dashboard_id;
|
$emptyoverride->dashboard_id = $dashboard->dashboard_id;
|
||||||
$emptyoverride->uid = $uid;
|
$emptyoverride->uid = $uid;
|
||||||
$emptyoverride->override = '{"' . self::USEROVERRIDE_SECTION . '": {"widgets":{}}, "custom": { "widgets" : {}}}';
|
$emptyoverride->override = '[]';
|
||||||
|
|
||||||
return $emptyoverride;
|
return $emptyoverride;
|
||||||
}
|
}
|
||||||
@@ -126,8 +153,7 @@ class DashboardLib
|
|||||||
$emptypreset = new stdClass();
|
$emptypreset = new stdClass();
|
||||||
$emptypreset->dashboard_id = $dashboard->dashboard_id;
|
$emptypreset->dashboard_id = $dashboard->dashboard_id;
|
||||||
$emptypreset->funktion_kurzbz = $funktion_kurzbz;
|
$emptypreset->funktion_kurzbz = $funktion_kurzbz;
|
||||||
$section = ($funktion_kurzbz !== null) ? $funktion_kurzbz : self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL;
|
$emptypreset->preset = '[]';
|
||||||
$emptypreset->preset = '{"' . $section . '": { "widgets" : {}},"custom": { "widgets" : {}}}';
|
|
||||||
|
|
||||||
return $emptypreset;
|
return $emptypreset;
|
||||||
}
|
}
|
||||||
@@ -137,8 +163,10 @@ class DashboardLib
|
|||||||
$dashboard = $this->getDashboardByKurzbz($dashboard_kurzbz);
|
$dashboard = $this->getDashboardByKurzbz($dashboard_kurzbz);
|
||||||
|
|
||||||
$funktion_kurzbz = ($section === self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL) ? null : $section;
|
$funktion_kurzbz = ($section === self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL) ? null : $section;
|
||||||
$result = $this->_ci->DashboardPresetModel
|
$result = $this->_ci->DashboardPresetModel->loadWhere([
|
||||||
->getPresetByDashboardAndFunktion($dashboard->dashboard_id, $funktion_kurzbz);
|
'dashboard_id' => $dashboard->dashboard_id,
|
||||||
|
'funktion_kurzbz' => $funktion_kurzbz
|
||||||
|
]);
|
||||||
|
|
||||||
if (hasData($result))
|
if (hasData($result))
|
||||||
{
|
{
|
||||||
@@ -190,44 +218,4 @@ class DashboardLib
|
|||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addWidgetsToWidgets(&$widgets, $dashboard_kurzbz, $section, $addwigets)
|
|
||||||
{
|
|
||||||
foreach ($addwigets as $widget)
|
|
||||||
{
|
|
||||||
if(!isset($widget->widgetid))
|
|
||||||
{
|
|
||||||
$widget->widgetid = $this->generateWidgetId($dashboard_kurzbz);
|
|
||||||
}
|
|
||||||
$this->addWidgetToWidgets($widgets, $section, $widget, $widget->widgetid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addWidgetToWidgets(&$widgets, $section, $widget, $widgetid)
|
|
||||||
{
|
|
||||||
$section = ($section !== null) ? $section : self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL;
|
|
||||||
if (!isset($widgets[$section]) || !isset($widgets[$section]["widgets"]) || !is_array($widgets[$section]))
|
|
||||||
{
|
|
||||||
$widgets[$section] = array();
|
|
||||||
$widgets[$section]["widgets"] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$widgets[$section]["widgets"][$widgetid] = $widget;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function removeWidgetFromWidgets(&$widgets, $section, $widgetid)
|
|
||||||
{
|
|
||||||
$section = ($section !== null) ? $section : self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL;
|
|
||||||
if (isset($widgets[$section]) && isset($widgets[$section]["widgets"][$widgetid]))
|
|
||||||
{
|
|
||||||
unset($widgets[$section]["widgets"][$widgetid]);
|
|
||||||
if(empty($widgets[$section]["widgets"]) && $section !== self::USEROVERRIDE_SECTION) {
|
|
||||||
unset($widgets[$section]);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,400 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2025 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This generates a list of students and or prestudents used for Studierendenverwaltung
|
||||||
|
*/
|
||||||
|
class StudentListLib
|
||||||
|
{
|
||||||
|
private $_ci; // Code igniter instance
|
||||||
|
|
||||||
|
private $_allowedStgs = [];
|
||||||
|
private $_selects = [];
|
||||||
|
private $_joins = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the CI instance, loads model and prepares default values
|
||||||
|
*
|
||||||
|
* @param array $params
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct($params = null)
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance(); // get code igniter instance
|
||||||
|
|
||||||
|
$this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||||
|
|
||||||
|
if (isset($params['allowedStgs']))
|
||||||
|
$this->_allowedStgs = $params['allowedStgs'];
|
||||||
|
|
||||||
|
// Add default SELECTs
|
||||||
|
$this->addSelect("b.uid");
|
||||||
|
$this->addSelect('titelpre');
|
||||||
|
$this->addSelect('nachname');
|
||||||
|
$this->addSelect('vorname');
|
||||||
|
$this->addSelect('wahlname');
|
||||||
|
$this->addSelect('vornamen');
|
||||||
|
$this->addSelect('titelpost');
|
||||||
|
$this->addSelect('ersatzkennzeichen');
|
||||||
|
$this->addSelect('gebdatum');
|
||||||
|
$this->addSelect('geschlecht');
|
||||||
|
$this->addSelect('foto');
|
||||||
|
$this->addSelect('foto_sperre');
|
||||||
|
$this->addSelect('v.semester');
|
||||||
|
$this->addSelect('v.verband');
|
||||||
|
$this->addSelect('v.gruppe');
|
||||||
|
$this->addSelect("statusofsemester"); // Will be replaced later
|
||||||
|
$this->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
|
||||||
|
$this->addSelect('tbl_prestudent.studiengang_kz');
|
||||||
|
$this->addSelect('stg.bezeichnung AS stg_bezeichnung');
|
||||||
|
$this->addSelect("s.matrikelnr");
|
||||||
|
$this->addSelect('p.person_id');
|
||||||
|
$this->addSelect('pls.status_kurzbz AS status');
|
||||||
|
$this->addSelect('pls.datum AS status_datum');
|
||||||
|
$this->addSelect('pls.bestaetigtam AS status_bestaetigung');
|
||||||
|
$this->addSelect("
|
||||||
|
CASE
|
||||||
|
WHEN pls.status_kurzbz = 'Interessent'
|
||||||
|
THEN pls.ausbildungssemester
|
||||||
|
ELSE s.semester
|
||||||
|
END AS semester_berechnet
|
||||||
|
");
|
||||||
|
$this->addSelect(
|
||||||
|
"(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS mail_privat",
|
||||||
|
false
|
||||||
|
);
|
||||||
|
$this->addSelect("
|
||||||
|
CASE WHEN b.uid IS NOT NULL AND b.uid<>''
|
||||||
|
THEN CONCAT(b.uid, '@', " . $this->_ci->PrestudentModel->escape(DOMAIN) . ")
|
||||||
|
ELSE '' END AS mail_intern", false);
|
||||||
|
$this->addSelect('p.anmerkung AS anmerkungen');
|
||||||
|
$this->addSelect('tbl_prestudent.anmerkung');
|
||||||
|
$this->addSelect('pls.orgform_kurzbz');
|
||||||
|
$this->addSelect('aufmerksamdurch_kurzbz');
|
||||||
|
$this->addSelect(
|
||||||
|
"(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=ps.prestudent_id) AS punkte",
|
||||||
|
false
|
||||||
|
);
|
||||||
|
$this->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
|
||||||
|
$this->addSelect('tbl_prestudent.dual');
|
||||||
|
$this->addSelect('p.matr_nr');
|
||||||
|
$this->addSelect('sp.bezeichnung AS studienplan_bezeichnung');
|
||||||
|
$this->addSelect('tbl_prestudent.prestudent_id');
|
||||||
|
$this->addSelect("(
|
||||||
|
SELECT count(*)
|
||||||
|
FROM (
|
||||||
|
SELECT *, public.get_rolle_prestudent(pss.prestudent_id, NULL) AS laststatus
|
||||||
|
FROM public.tbl_prestudent pss
|
||||||
|
JOIN public.tbl_prestudentstatus USING (prestudent_id)
|
||||||
|
WHERE person_id = p.person_id
|
||||||
|
AND studiensemester_kurzbz = (
|
||||||
|
SELECT studiensemester_kurzbz
|
||||||
|
FROM public.tbl_prestudentstatus
|
||||||
|
WHERE prestudent_id = tbl_prestudent.prestudent_id
|
||||||
|
AND status_kurzbz = 'Interessent'
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
AND status_kurzbz = 'Interessent'
|
||||||
|
) prest
|
||||||
|
WHERE laststatus NOT IN ('Abbrecher', 'Abgewiesener', 'Absolvent')
|
||||||
|
AND priorisierung <= tbl_prestudent.priorisierung
|
||||||
|
) || ' (' || COALESCE(tbl_prestudent.priorisierung::text, ' '::text) || ')' AS priorisierung_relativ", false); // TODO(chris): overwrite in fetchStudents
|
||||||
|
$this->addSelect('mentor');
|
||||||
|
$this->addSelect('b.aktiv AS bnaktiv');
|
||||||
|
$this->addSelect('unruly');
|
||||||
|
|
||||||
|
// Add default JOINs
|
||||||
|
$this->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
|
||||||
|
$this->addJoin('public.tbl_person p', 'person_id');
|
||||||
|
$this->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT'); // TODO(chris): overwrite in fetchStudents
|
||||||
|
$this->addJoin('public.tbl_prestudentstatus pls', '
|
||||||
|
pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL)
|
||||||
|
AND pls.prestudent_id=tbl_prestudent.prestudent_id
|
||||||
|
AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL)
|
||||||
|
AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT');
|
||||||
|
$this->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT');
|
||||||
|
$this->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid', 'LEFT');
|
||||||
|
$this->addJoin("v", "", ""); // Will be replaced later
|
||||||
|
$this->addJoin("ps", "", ""); // Will be replaced later
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a SELECT statement to the query.
|
||||||
|
*
|
||||||
|
* @param string|array $select
|
||||||
|
* @param boolean $escape (optional)
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addSelect($select, $escape = true)
|
||||||
|
{
|
||||||
|
if (is_array($select)) {
|
||||||
|
foreach ($select as $s)
|
||||||
|
$this->addSelect($s, $escape);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$alias = $this->getAliasFromSelect($select);
|
||||||
|
$this->_selects[$alias] = [$select, $escape];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Joins a table to the query.
|
||||||
|
*
|
||||||
|
* @param string $table
|
||||||
|
* @param string $cond
|
||||||
|
* @param string $type (optional)
|
||||||
|
* @param string $position (optional)
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addJoin($table, $cond, $type = '', $position = 'end')
|
||||||
|
{
|
||||||
|
$alias = $this->getAliasFromTable($table);
|
||||||
|
|
||||||
|
if ($position == 'end') {
|
||||||
|
return $this->_joins[$alias] = [$table, $cond, $type];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($position == 'start') {
|
||||||
|
return $this->_joins = [$alias => [$table, $cond, $type]] + $this->_joins;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($position, 0, 7) == 'before_') {
|
||||||
|
$ref = substr($position, 7);
|
||||||
|
$index = 0;
|
||||||
|
} elseif (substr($position, 0, 6) == 'after_') {
|
||||||
|
$ref = substr($position, 6);
|
||||||
|
$index = 1;
|
||||||
|
} else {
|
||||||
|
return $this->addJoin($table, $cond, $type);
|
||||||
|
}
|
||||||
|
if (!isset($this->_joins[$ref]))
|
||||||
|
return $this->addJoin($table, $cond, $type);
|
||||||
|
|
||||||
|
$key_indeces = array_flip(array_keys($this->_joins));
|
||||||
|
$index += $key_indeces[$ref];
|
||||||
|
|
||||||
|
if (!$index)
|
||||||
|
return $this->addJoin($table, $cond, $type, 'start');
|
||||||
|
|
||||||
|
$front_part = array_slice($this->_joins, 0, $index, true);
|
||||||
|
$back_part = array_slice($this->_joins, $index, null, true);
|
||||||
|
|
||||||
|
if (isset($front_part[$alias])) {
|
||||||
|
unset($front_part[$alias]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_joins = $front_part + [$alias => [$table, $cond, $type]] + $back_part;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a WHERE clause to the query.
|
||||||
|
*
|
||||||
|
* @param string|array $key
|
||||||
|
* @param string|array $value
|
||||||
|
* @param boolean $escape
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addWhere($key, $value = null, $escape = true)
|
||||||
|
{
|
||||||
|
if (!is_array($key) && is_array($value)) {
|
||||||
|
$this->_ci->PrestudentModel->db->where_in($key, $value, $escape);
|
||||||
|
} else {
|
||||||
|
$this->_ci->PrestudentModel->db->where($key, $value, $escape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a OR WHERE clause to the query.
|
||||||
|
*
|
||||||
|
* @param string|array $key
|
||||||
|
* @param string|array $value
|
||||||
|
* @param boolean $escape
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addOrWhere($key, $value = null, $escape = true)
|
||||||
|
{
|
||||||
|
if (!is_array($key) && is_array($value)) {
|
||||||
|
$this->_ci->PrestudentModel->db->or_where_in($key, $value, $escape);
|
||||||
|
} else {
|
||||||
|
$this->_ci->PrestudentModel->db->or_where($key, $value, $escape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates the query and executes it.
|
||||||
|
*
|
||||||
|
* @param string|null $studiensemester_kurzbz
|
||||||
|
*
|
||||||
|
* @return stdClass result of the query
|
||||||
|
*/
|
||||||
|
public function execute($studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
$this->addSelectAndJoinForTagsIfConfigured($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
$stdsemEsc = $studiensemester_kurzbz ? $this->_ci->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
||||||
|
|
||||||
|
$this->addSelect(
|
||||||
|
"public.get_rolle_prestudent(
|
||||||
|
public.tbl_prestudent.prestudent_id,
|
||||||
|
" . $this->_ci->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||||
|
) AS statusofsemester"
|
||||||
|
);
|
||||||
|
$this->addJoin(
|
||||||
|
'public.tbl_studentlehrverband v',
|
||||||
|
'v.student_uid=s.student_uid AND v.studiensemester_kurzbz' . ($studiensemester_kurzbz ? '=' . $stdsemEsc : ' IS NULL'),
|
||||||
|
'LEFT'
|
||||||
|
);
|
||||||
|
$this->addJoin(
|
||||||
|
'public.tbl_prestudentstatus ps',
|
||||||
|
'ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
||||||
|
AND ps.prestudent_id=tbl_prestudent.prestudent_id
|
||||||
|
AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
||||||
|
AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
||||||
|
',
|
||||||
|
'LEFT'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->addWhere('tbl_prestudent.studiengang_kz', $this->_allowedStgs);
|
||||||
|
|
||||||
|
foreach ($this->_joins as $join)
|
||||||
|
$this->_ci->PrestudentModel->addJoin($join[0], $join[1], $join[2]);
|
||||||
|
|
||||||
|
foreach ($this->_selects as $select)
|
||||||
|
$this->_ci->PrestudentModel->addSelect($select[0], $select[1]);
|
||||||
|
|
||||||
|
$this->_ci->PrestudentModel->addOrder('nachname');
|
||||||
|
$this->_ci->PrestudentModel->addOrder('vorname');
|
||||||
|
|
||||||
|
return $this->_ci->PrestudentModel->load();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Protected methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add Select and Join for Tags if configured
|
||||||
|
*
|
||||||
|
* @param string studiensemester_kurzbz
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function addSelectAndJoinForTagsIfConfigured($studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
if (defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED) {
|
||||||
|
$this->_ci->load->config('stv');
|
||||||
|
$tags = $this->_ci->config->item('stv_prestudent_tags');
|
||||||
|
|
||||||
|
$whereTags = '';
|
||||||
|
if (is_array($tags) && !isEmptyArray($tags)) {
|
||||||
|
$tags = array_keys($tags);
|
||||||
|
|
||||||
|
foreach ($tags as $key => $tag) {
|
||||||
|
$tags[$key] = $this->_ci->PrestudentModel->escape($tag);
|
||||||
|
}
|
||||||
|
$whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
|
||||||
|
}
|
||||||
|
$studiensemester_kurzbz_escaped = $this->_ci->PrestudentModel->escape($studiensemester_kurzbz);
|
||||||
|
$subQueryTag = "(
|
||||||
|
SELECT
|
||||||
|
tag.prestudent_id,
|
||||||
|
COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
|
||||||
|
FROM (
|
||||||
|
SELECT DISTINCT ON (n.notiz_id)
|
||||||
|
n.notiz_id AS id,
|
||||||
|
nt.typ_kurzbz,
|
||||||
|
array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
|
||||||
|
n.text AS notiz,
|
||||||
|
nt.style,
|
||||||
|
n.erledigt AS done,
|
||||||
|
nz.prestudent_id,
|
||||||
|
n.start,
|
||||||
|
n.ende
|
||||||
|
FROM public.tbl_notizzuordnung AS nz
|
||||||
|
JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id AND nz.prestudent_id IS NOT NULL
|
||||||
|
JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz " . $whereTags . "
|
||||||
|
WHERE
|
||||||
|
COALESCE(n.start, '1970-01-01') <= (
|
||||||
|
SELECT
|
||||||
|
ende
|
||||||
|
FROM
|
||||||
|
public.tbl_studiensemester
|
||||||
|
WHERE
|
||||||
|
studiensemester_kurzbz = " . $studiensemester_kurzbz_escaped . "
|
||||||
|
)
|
||||||
|
AND COALESCE(n.ende, '2170-12-31') >= (
|
||||||
|
SELECT
|
||||||
|
start
|
||||||
|
FROM
|
||||||
|
public.tbl_studiensemester
|
||||||
|
WHERE
|
||||||
|
studiensemester_kurzbz = " . $studiensemester_kurzbz_escaped . "
|
||||||
|
)
|
||||||
|
) AS tag
|
||||||
|
GROUP BY tag.prestudent_id
|
||||||
|
) AS tag_data_agg";
|
||||||
|
|
||||||
|
$this->addSelect('tag_data_agg.tags');
|
||||||
|
$this->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get alias of a table or select statement
|
||||||
|
*
|
||||||
|
* @param string $select
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
final protected function getAliasFromSelect($select)
|
||||||
|
{
|
||||||
|
if (strpos($select, ' ') !== false) {
|
||||||
|
return trim(strrchr($select, ' '));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($select, '.') !== false) {
|
||||||
|
return substr(strrchr($select, '.'), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $select;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get alias of a table or select statement
|
||||||
|
*
|
||||||
|
* @param string|array $table
|
||||||
|
*
|
||||||
|
* @return string|array
|
||||||
|
*/
|
||||||
|
final protected function getAliasFromTable($table)
|
||||||
|
{
|
||||||
|
if (strpos($table, ' ') !== false) {
|
||||||
|
return trim(strrchr($table, ' '));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $table;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description of dd_auto
|
||||||
|
*
|
||||||
|
* @author ma0068
|
||||||
|
*/
|
||||||
|
class CoreDoubleDegreeTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('codex/Mobilitaet_model', 'MobilitaetModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'idArray' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
|
||||||
|
$this->ci->MobilitaetModel->addJoin('bis.tbl_gsprogramm', 'gsprogramm_id');
|
||||||
|
$this->ci->MobilitaetModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz');
|
||||||
|
|
||||||
|
$result = $this->ci->MobilitaetModel-> loadWhere(array(
|
||||||
|
'gsprogrammtyp_kurzbz' => 'Double',
|
||||||
|
'studiensemester_kurzbz' => $semester
|
||||||
|
));
|
||||||
|
$data = $result->retval;
|
||||||
|
|
||||||
|
$doubledegree_data = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->prestudent_id,
|
||||||
|
'von' => $item->start,
|
||||||
|
'bis' => $item->ende
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'data' => $doubledegree_data,
|
||||||
|
'typeId' => 'prestudent_id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$prestudent_id = $params['id'];
|
||||||
|
|
||||||
|
$this->ci->MobilitaetModel->addSelect('prestudent_id');
|
||||||
|
$this->ci->MobilitaetModel->addSelect('start as von');
|
||||||
|
$this->ci->MobilitaetModel->addSelect('ende as bis');
|
||||||
|
|
||||||
|
$this->ci->MobilitaetModel->addJoin('bis.tbl_gsprogramm', 'gsprogramm_id');
|
||||||
|
$this->ci->MobilitaetModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz');
|
||||||
|
|
||||||
|
$result = $this->ci->MobilitaetModel->loadWhere(array(
|
||||||
|
'gsprogrammtyp_kurzbz' => 'Double',
|
||||||
|
'studiensemester_kurzbz' => $semester,
|
||||||
|
'prestudent_id' => $prestudent_id
|
||||||
|
));
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
//array mit prestudent_id, von und bis
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description unruly
|
||||||
|
* Test for different typeId
|
||||||
|
*
|
||||||
|
* @author ma0068
|
||||||
|
*/
|
||||||
|
class CoreFiftyFiveTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('person/Person_model', 'PersonModel');
|
||||||
|
$this->ci-> load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'person_id' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
|
||||||
|
$result = $this->ci->StudiensemesterModel->loadWhere(array(
|
||||||
|
'studiensemester_kurzbz' => $semester
|
||||||
|
));
|
||||||
|
$data = $result->retval[0];
|
||||||
|
|
||||||
|
$semVon = $data->start;
|
||||||
|
$semBis = $data->ende;
|
||||||
|
$result = $this->ci->PersonModel->getFiftyFivers($semVon, $semBis);
|
||||||
|
|
||||||
|
$data = $result->retval;
|
||||||
|
$fiftyFiveData = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->person_id
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'data' => $fiftyFiveData,
|
||||||
|
'typeId' => 'person_id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'person_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$person_id = $params['id'];
|
||||||
|
$typeId = $params['typeId'];
|
||||||
|
|
||||||
|
|
||||||
|
$result = $this->ci->StudiensemesterModel->loadWhere(array(
|
||||||
|
'studiensemester_kurzbz' => $semester
|
||||||
|
));
|
||||||
|
$data = $result->retval[0];
|
||||||
|
|
||||||
|
$semVon = $data->start;
|
||||||
|
$semBis = $data->ende;
|
||||||
|
$result = $this->ci->PersonModel->isFiftyFive($semVon, $semBis, $person_id);
|
||||||
|
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description of jgv_auto (Jahrgangsvertretung)
|
||||||
|
*
|
||||||
|
* @author ma0068
|
||||||
|
*/
|
||||||
|
class CoreJgvTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'idArray' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
|
||||||
|
$result = $this->ci->BenutzerfunktionModel->getPrestudentsOfJgv($semester);
|
||||||
|
|
||||||
|
$data = $result->retval;
|
||||||
|
|
||||||
|
$jgv_data = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->prestudent_id,
|
||||||
|
'von' => $item->datum_von,
|
||||||
|
'bis' => $item->datum_bis
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'data' => $jgv_data,
|
||||||
|
'typeId' => 'prestudent_id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$prestudent_id = $params['id'];
|
||||||
|
|
||||||
|
$result = $this->ci->BenutzerfunktionModel->isJgv($semester, $prestudent_id);
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description of zgv_auto
|
||||||
|
*
|
||||||
|
* @author ma0068
|
||||||
|
*/
|
||||||
|
class CoreMissingZgvTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'idArray' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
|
||||||
|
$this->ci->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id');
|
||||||
|
$this->ci->PrestudentModel->addJoin('public.tbl_benutzer bn', 'person_id');
|
||||||
|
$this->ci->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||||
|
$result = $this->ci->PrestudentModel-> loadWhere(array(
|
||||||
|
'bn.aktiv' => true, //check if necessary
|
||||||
|
'zgvdatum' => null,
|
||||||
|
'typ' => 'b',
|
||||||
|
'studiensemester_kurzbz' => $semester
|
||||||
|
));
|
||||||
|
|
||||||
|
$data = $result->retval;
|
||||||
|
|
||||||
|
$zgvmissing_data = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->prestudent_id,
|
||||||
|
'von' => null,
|
||||||
|
'bis' => null
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'typeId' => 'prestudent_id',
|
||||||
|
'data' => $zgvmissing_data
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$prestudent_id = $params['id'];
|
||||||
|
|
||||||
|
$this->ci->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id');
|
||||||
|
$this->ci->PrestudentModel->addJoin('public.tbl_benutzer bn', 'person_id');
|
||||||
|
$this->ci->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||||
|
$result = $this->ci->PrestudentModel->loadWhere(array(
|
||||||
|
'bn.aktiv' => true, //check if necessary
|
||||||
|
'zgvdatum' => null,
|
||||||
|
'typ' => 'b',
|
||||||
|
'studiensemester_kurzbz' => $semester,
|
||||||
|
'prestudent_id' => $prestudent_id
|
||||||
|
));
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user