mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-25 08:34:29 +00:00
Compare commits
1212
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 | ||
|
|
9b114c5fb1 | ||
|
|
00fae2fa15 | ||
|
|
3578e01838 | ||
|
|
6c8eb9ac38 | ||
|
|
2228b4d683 | ||
|
|
5558f6fc17 | ||
|
|
32fc029bd3 | ||
|
|
f4e0516d89 | ||
|
|
2681a85fa5 | ||
|
|
9a0716af44 | ||
|
|
d98b7fd67a | ||
|
|
4b1a9fe892 | ||
|
|
dc642cfbe7 | ||
|
|
b98e831300 | ||
|
|
118dcbd252 | ||
|
|
d279f955a0 | ||
|
|
1e8ec83965 | ||
|
|
0d73824727 | ||
|
|
f2d49e02a7 | ||
|
|
7169cb68a2 | ||
|
|
f8da0b0915 | ||
|
|
f068b56083 | ||
|
|
fa7a125727 | ||
|
|
4724008c2d | ||
|
|
34cd5d1a80 | ||
|
|
6f28696556 | ||
|
|
6ec4737b22 | ||
|
|
328affa35c | ||
|
|
4b875bf019 | ||
|
|
90c845899f | ||
|
|
bb273d10bd | ||
|
|
a6daa7bf0c | ||
|
|
f0597e99e5 | ||
|
|
1d8c4b7159 | ||
|
|
f860fd3dc7 | ||
|
|
ee7254a964 | ||
|
|
5ffd22c1f7 | ||
|
|
c58674d133 | ||
|
|
110f73e622 | ||
|
|
006393704c | ||
|
|
4825c75b5d | ||
|
|
d82c186643 | ||
|
|
2f51f18447 | ||
|
|
5b34a226bd | ||
|
|
1c69f3f654 | ||
|
|
f6fd5ab678 | ||
|
|
3d1aef617f | ||
|
|
e12b7e1ed5 | ||
|
|
d9d3b1a245 | ||
|
|
ce27964df9 | ||
|
|
0496eb7cc9 | ||
|
|
556683574c | ||
|
|
962cbf4e78 | ||
|
|
5415180b2c | ||
|
|
9d789d9a97 | ||
|
|
3d061df1d7 | ||
|
|
827b6148a7 | ||
|
|
3831f3c1d7 | ||
|
|
60294dd8f2 | ||
|
|
9d5adc1ed2 | ||
|
|
632866c8c4 | ||
|
|
bb0d118284 | ||
|
|
7f029ec8b5 | ||
|
|
d9d15c1ed3 | ||
|
|
a9b343646e | ||
|
|
fd35d20955 | ||
|
|
34b00f8dd6 | ||
|
|
043b1bcf11 | ||
|
|
5c1e967d5e | ||
|
|
664b0a81bb | ||
|
|
aec0e5227f | ||
|
|
fa807f37ae | ||
|
|
701ccadff3 | ||
|
|
8f62d0d351 | ||
|
|
e016deb042 | ||
|
|
ed170645df | ||
|
|
3a441228b8 | ||
|
|
0a97e5781e | ||
|
|
3465e299f7 | ||
|
|
136d6f9f28 | ||
|
|
67838eb630 | ||
|
|
34555504df | ||
|
|
1a0a5c652b | ||
|
|
609e226057 | ||
|
|
d1f5220925 | ||
|
|
ffaff361b7 | ||
|
|
d17206fe40 | ||
|
|
34e8b2e36d | ||
|
|
fbea5a9306 | ||
|
|
6da19585ff | ||
|
|
decd514b22 | ||
|
|
e13a7069dc | ||
|
|
f4ae8dd8e1 | ||
|
|
1cd332115b | ||
|
|
6cf7093293 | ||
|
|
0bf9d8fa8a | ||
|
|
464f04b254 | ||
|
|
2a63b99816 | ||
|
|
2aca2cd6ab | ||
|
|
ee619004bd | ||
|
|
1eda652fba | ||
|
|
cc302ed5a1 | ||
|
|
17f11fa871 | ||
|
|
f2308a32c8 | ||
|
|
c8cb484299 | ||
|
|
fc0fdc7909 | ||
|
|
3053289146 | ||
|
|
7c67e65c9b | ||
|
|
a4dcf9e935 | ||
|
|
6f99f493ea | ||
|
|
96812868a4 | ||
|
|
023c2a10be | ||
|
|
40c79158f7 | ||
|
|
f4f645b103 | ||
|
|
f6b13c0bdf | ||
|
|
a7cd6c35f1 | ||
|
|
e0082db7c9 | ||
|
|
87ff7acef0 | ||
|
|
936858948b | ||
|
|
18c949eed4 | ||
|
|
d192489c6f | ||
|
|
7028fe0ac8 | ||
|
|
a3a03f6362 | ||
|
|
82f0f3f5e3 | ||
|
|
8b9601502a | ||
|
|
888bb1c7c0 | ||
|
|
372c932c47 | ||
|
|
6391bf5a45 | ||
|
|
d774335bcf | ||
|
|
37395b70f6 | ||
|
|
a65cb3b03c | ||
|
|
69749da331 | ||
|
|
054663ee00 | ||
|
|
b4f28d5426 | ||
|
|
0442a3da0a | ||
|
|
2492a4fc06 | ||
|
|
9ae9feb9ea | ||
|
|
a535fd85cd | ||
|
|
269860252e | ||
|
|
d0faba03a2 | ||
|
|
88a06194d4 | ||
|
|
3e1b9865b1 | ||
|
|
3534118261 | ||
|
|
5d73f051ba | ||
|
|
85a10e27cc | ||
|
|
8c22a652fa | ||
|
|
779641e8e7 | ||
|
|
81eee814e9 | ||
|
|
a70e25d0e8 | ||
|
|
e689531224 | ||
|
|
3ab1a002f0 | ||
|
|
b9eaac18b0 | ||
|
|
b26df9ac21 | ||
|
|
0539281adf | ||
|
|
1b35569797 | ||
|
|
e01d814ae9 | ||
|
|
77abcb6129 | ||
|
|
63f198098d | ||
|
|
f7478ff05c | ||
|
|
99ea6ad333 | ||
|
|
366cb16b61 | ||
|
|
683626921b | ||
|
|
326d4b3923 | ||
|
|
f2107a377f | ||
|
|
fbe10cc2a1 | ||
|
|
390a3c0d5a | ||
|
|
783c4fc5f8 | ||
|
|
f1aa5382cf | ||
|
|
e3b630550a | ||
|
|
8903fa878c | ||
|
|
7fe36d59e3 | ||
|
|
c724c6a20f | ||
|
|
b9bfa5c3c5 | ||
|
|
101613ecdd | ||
|
|
edd0c46186 | ||
|
|
07dd9e3a77 | ||
|
|
06139b14d6 | ||
|
|
3e46e94736 | ||
|
|
fc468ca34a | ||
|
|
84db668566 | ||
|
|
3c82cd1282 | ||
|
|
709f64e292 | ||
|
|
5dcf8bb854 | ||
|
|
709aba5783 | ||
|
|
695dd655c0 | ||
|
|
afc4544304 | ||
|
|
0a2afadb0a | ||
|
|
27a91de5f6 | ||
|
|
7ccc26c878 | ||
|
|
9ebc847e8e | ||
|
|
a5188ce24a | ||
|
|
511b04c1f8 | ||
|
|
ec90d35e02 | ||
|
|
f867e60702 | ||
|
|
05838cc477 | ||
|
|
668f0a6618 | ||
|
|
48cd37058e | ||
|
|
4d97127539 | ||
|
|
c34ffedb42 | ||
|
|
c9bcf9b9b0 | ||
|
|
96e02c9911 | ||
|
|
248fceb4b5 | ||
|
|
2471d37dd3 | ||
|
|
ad7808eb21 | ||
|
|
9a07e7c804 | ||
|
|
6c82741341 | ||
|
|
c3f7f7223a | ||
|
|
fbd0a4685e | ||
|
|
b5382b1bdf | ||
|
|
eb15d6b841 | ||
|
|
519cbc7601 | ||
|
|
bbb90f6dc4 | ||
|
|
e89fcbab31 | ||
|
|
7c1f239dcb | ||
|
|
c56d323cd3 | ||
|
|
cc0f38b276 | ||
|
|
a56335f4f9 | ||
|
|
954c55ba3e | ||
|
|
92697d9468 | ||
|
|
d1ec9c92eb | ||
|
|
c7250959d0 | ||
|
|
6c8318ead2 | ||
|
|
ac4cdb44de | ||
|
|
3095f7ea8b | ||
|
|
8f98d0c5a1 | ||
|
|
13232015c3 | ||
|
|
db861e81b2 | ||
|
|
39a96885d2 | ||
|
|
7eb147085f | ||
|
|
4f104523ff | ||
|
|
80175f46cb | ||
|
|
3d82d69bfc | ||
|
|
96dbec3218 | ||
|
|
4b29e7bf8d | ||
|
|
f845809e6b | ||
|
|
1ce362b66b | ||
|
|
02153e469f | ||
|
|
957da460a6 | ||
|
|
47d4b2e2d4 | ||
|
|
67b03dd29f | ||
|
|
47e3c83909 | ||
|
|
8f9f447acf | ||
|
|
2cee36d7b5 | ||
|
|
2a84999e56 | ||
|
|
756a51defa | ||
|
|
735a6654b9 | ||
|
|
635da9f8d9 | ||
|
|
f40f554c6b | ||
|
|
b4668aa6bc | ||
|
|
eade9b7beb | ||
|
|
454cf5ea64 | ||
|
|
1176c8d6e4 | ||
|
|
bb689a6d48 | ||
|
|
43497b186d | ||
|
|
e1959b9e40 | ||
|
|
e78482e947 | ||
|
|
ca152dc1ea | ||
|
|
ec7ebc8286 | ||
|
|
035e844fab | ||
|
|
e7a737b7aa | ||
|
|
e3c1287664 | ||
|
|
4563533e67 | ||
|
|
0c5af137db | ||
|
|
541d6d78cc | ||
|
|
ed69bd74ed | ||
|
|
f0641ddd6d | ||
|
|
7747857583 | ||
|
|
6359dc0fc9 | ||
|
|
640e719eda | ||
|
|
aee6ace42e | ||
|
|
aece2b1d90 | ||
|
|
6c2a2e4665 | ||
|
|
095d5acbc5 | ||
|
|
96be1789b5 | ||
|
|
43925e3088 | ||
|
|
5e929df966 | ||
|
|
1c236cce02 | ||
|
|
38e8f91fdf | ||
|
|
4956a517ca | ||
|
|
cb13655ecd | ||
|
|
9b3b6cec8f | ||
|
|
8888b6991f | ||
|
|
9ac7ff2a4c | ||
|
|
f4ca34f247 | ||
|
|
3ca1a1f1c7 | ||
|
|
a7210208d6 | ||
|
|
3b7ed523b4 | ||
|
|
eaad23ff69 | ||
|
|
c7ddf0a2a9 | ||
|
|
455e0533fe | ||
|
|
a8c4fc7607 | ||
|
|
c447fb9632 | ||
|
|
352638ed90 | ||
|
|
3730be991a | ||
|
|
b129ef873b | ||
|
|
a4fee77301 | ||
|
|
96fdc357de | ||
|
|
6cd0e3a574 | ||
|
|
1120b823d2 | ||
|
|
f89a53b156 | ||
|
|
d927426d70 | ||
|
|
d9c7df736c | ||
|
|
cff71ec829 | ||
|
|
a26bdfe385 | ||
|
|
8b851221b0 | ||
|
|
2920c68f05 | ||
|
|
74937db204 | ||
|
|
410f0c4b6a | ||
|
|
9ced137ded | ||
|
|
73244df019 | ||
|
|
91d24ebae8 | ||
|
|
0b6dc34220 | ||
|
|
6861e26ed6 | ||
|
|
a89da50e0a | ||
|
|
9256046b6c | ||
|
|
fd95dd8023 | ||
|
|
cda2b84939 | ||
|
|
cef0046acd | ||
|
|
a61d5b1d62 | ||
|
|
34242e12ea | ||
|
|
b1a1cdf235 | ||
|
|
d893fe63e7 | ||
|
|
5aedf85982 | ||
|
|
55ab79c004 | ||
|
|
7c7a72600d | ||
|
|
3878fce625 | ||
|
|
bd67e41aa6 | ||
|
|
df63b8c1b7 | ||
|
|
01357654c0 | ||
|
|
cd5900481b | ||
|
|
601c6c53e7 | ||
|
|
b7ba740a3a | ||
|
|
ddef97d49f | ||
|
|
707d00b280 | ||
|
|
3d51753419 | ||
|
|
9c79d728e8 | ||
|
|
9c8a1f564e | ||
|
|
47b0449f22 | ||
|
|
c78eef8af5 | ||
|
|
ac1e0a8aa3 | ||
|
|
259c2aec14 | ||
|
|
6a7de7417b | ||
|
|
c12678ca5a | ||
|
|
84bfea0be9 | ||
|
|
0193460678 | ||
|
|
7755dc12d0 | ||
|
|
0d2e41cf2f | ||
|
|
15a9379c6e | ||
|
|
e02b3e78d2 | ||
|
|
40512edef0 | ||
|
|
e9c039dad2 | ||
|
|
c7f2b145bf | ||
|
|
14aad56d5e | ||
|
|
601c4367dc | ||
|
|
70c230edce | ||
|
|
d294d17e37 | ||
|
|
d88cc77a5c | ||
|
|
61600e78b6 | ||
|
|
ea0b69d4c2 | ||
|
|
0309c04ae0 | ||
|
|
3c3e920573 | ||
|
|
d389cf87b8 | ||
|
|
09864c5154 | ||
|
|
f03411c668 | ||
|
|
204ae1a469 | ||
|
|
d2f21ba4e6 | ||
|
|
842dabc1e7 | ||
|
|
67281c84ed | ||
|
|
3a6c8dfd2d | ||
|
|
450789ed72 | ||
|
|
3549fc1b1b | ||
|
|
06788bafc8 | ||
|
|
a6167583a3 | ||
|
|
984d81edb6 | ||
|
|
1e23b6de61 | ||
|
|
e79bb607d9 | ||
|
|
dab34eff35 | ||
|
|
c91e0a6b74 | ||
|
|
c6852a9514 | ||
|
|
04b5240615 | ||
|
|
890b50c830 | ||
|
|
c796536417 | ||
|
|
483547cd9c | ||
|
|
345413cd1f | ||
|
|
f57dc6785b | ||
|
|
046a60b89c | ||
|
|
3664428467 | ||
|
|
da725e3ab1 | ||
|
|
edd34941cc | ||
|
|
c65686ef42 | ||
|
|
c7729f85df | ||
|
|
845c75b775 | ||
|
|
5326f961c6 | ||
|
|
97126553f0 | ||
|
|
14f5a651a4 | ||
|
|
53b187c9b6 | ||
|
|
7bc18e41b1 | ||
|
|
8bc17eded5 | ||
|
|
ce9f0536d6 | ||
|
|
9adeb1c63a | ||
|
|
091ed0dacd | ||
|
|
4014083238 | ||
|
|
da03e11071 | ||
|
|
48f7a04d81 | ||
|
|
4e598a321d | ||
|
|
9067f0e00a | ||
|
|
4099d91a1b | ||
|
|
49ca538381 | ||
|
|
5f1c7537fb | ||
|
|
1bb10ddeb1 | ||
|
|
49e89f44be | ||
|
|
e5cf417ac0 | ||
|
|
a560c335b8 | ||
|
|
ba6224bc78 | ||
|
|
ea85cce957 | ||
|
|
1f0fe08b69 | ||
|
|
63390b192c | ||
|
|
f69016883c | ||
|
|
e97c26022f | ||
|
|
483662726d | ||
|
|
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'
|
||||||
|
);
|
||||||
@@ -6,19 +6,28 @@ use CI3_Events as Events;
|
|||||||
Events::on('loadRenderers', function ($renderers) {
|
Events::on('loadRenderers', function ($renderers) {
|
||||||
$fhc_core_renderers =& $renderers();
|
$fhc_core_renderers =& $renderers();
|
||||||
$fhc_core_renderers["lehreinheit"] = array(
|
$fhc_core_renderers["lehreinheit"] = array(
|
||||||
'calendarEvent' => APP_ROOT.'public/js/components/Cis/Renderer/Lehreinheit/calendarEvent.js',
|
'calendarEvent' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Lehreinheit/calendarEvent.js'),
|
||||||
'modalTitle' => APP_ROOT.'public/js/components/Cis/Renderer/Lehreinheit/modalTitle.js',
|
'modalTitle' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Lehreinheit/modalTitle.js'),
|
||||||
'modalContent' => APP_ROOT.'public/js/components/Cis/Renderer/Lehreinheit/modalContent.js',
|
'modalContent' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Lehreinheit/modalContent.js'),
|
||||||
'calendarEventStyles' => APP_ROOT.'public/css/Cis4/CoreCalendarEvents.css'
|
'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["reservierung"] = array(
|
$fhc_core_renderers["reservierung"] = array(
|
||||||
'calendarEvent' => APP_ROOT.'public/js/components/Cis/Renderer/Reservierungen/calendarEvent.js',
|
'calendarEvent' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Reservierungen/calendarEvent.js'),
|
||||||
'modalTitle' => APP_ROOT.'public/js/components/Cis/Renderer/Reservierungen/modalTitle.js',
|
'modalTitle' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Reservierungen/modalTitle.js'),
|
||||||
'modalContent' => APP_ROOT.'public/js/components/Cis/Renderer/Reservierungen/modalContent.js',
|
'modalContent' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Reservierungen/modalContent.js'),
|
||||||
|
'calendarEventStyles' => APP_ROOT . 'public/css/Cis4/CoreCalendarEvents.css'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
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'
|
'calendarEventStyles' => APP_ROOT.'public/css/Cis4/CoreCalendarEvents.css'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -26,10 +35,10 @@ Events::on('loadRenderers', function ($renderers) {
|
|||||||
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(
|
||||||
'calendarEvent' => APP_ROOT.'public/js/components/Cis/Renderer/Feiertage/calendarEvent.js',
|
'calendarEvent' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Feiertage/calendarEvent.js'),
|
||||||
'modalTitle' => APP_ROOT.'public/js/components/Cis/Renderer/Feiertage/modalTitle.js',
|
'modalTitle' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Feiertage/modalTitle.js'),
|
||||||
'modalContent' => APP_ROOT.'public/js/components/Cis/Renderer/Feiertage/modalContent.js',
|
'modalContent' => absoluteJsImportUrl('public/js/components/Cis/Renderer/Feiertage/modalContent.js'),
|
||||||
'calendarEventStyles' => APP_ROOT.'public/css/Cis4/CoreCalendarEvents.css'
|
'calendarEventStyles' => APP_ROOT . 'public/css/Cis4/CoreCalendarEvents.css'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
$config['turnitin_link'] = 'https://technikum-wien.turnitin.com/sso/sp/redwood/saml/5IyfmBr2OcSIaWQTKlFCGj/start';
|
||||||
|
|
||||||
|
$config['old_abgabe_beurteilung_link'] = 'https://moodle.technikum-wien.at/mod/page/view.php?id=1005052';
|
||||||
|
|
||||||
|
$config['PAABGABE_EMAIL_JOB_INTERVAL'] = '1 day';
|
||||||
|
// used as APP_ROOT.URL_STUDENTS -> cis4
|
||||||
|
$config['URL_STUDENTS'] = 'cis.php/Cis/Abgabetool/Student';
|
||||||
|
// used as APP_ROOT.URL_MITARBEITER -> old cis
|
||||||
|
$config['URL_MITARBEITER'] = 'index.ci.php/Cis/Abgabetool/Mitarbeiter';
|
||||||
|
// used as APP_ROOT.URL_MITARBEITER -> old cis
|
||||||
|
$config['URL_ASSISTENZ'] = 'index.ci.php/Cis/Abgabetool/Assistenz';
|
||||||
|
|
||||||
|
// lehre.tbl_paabgabetyp bezeichnung
|
||||||
|
//$config['ALLOWED_ABGABETYPEN_BETREUER'] = ['Zwischenabgabe', 'Quality Gate 1', 'Quality Gate 2'];
|
||||||
|
$config['ALLOWED_ABGABETYPEN_BETREUER'] = ['abstract','zwischen', 'qualgate1', 'qualgate2']; // tbl_paabgabetyp pk
|
||||||
|
// paabgabetypen for which betreuer is benachrichtigt via sammelmail
|
||||||
|
$config['RELEVANT_PAABGABETYPEN_SAMMELMAIL_BETREUER'] = ['qualgate1', 'qualgate2', 'end'];
|
||||||
|
// paabgabetypen for which assistenz is benachrichtigt via sammelmail
|
||||||
|
$config['RELEVANT_PAABGABETYPEN_SAMMELMAIL_ASSISTENZ'] = ['end'];
|
||||||
|
// paabgabetypen for which student is benachrichtigt via sammelmail -> basically all of them but still defined for consistency
|
||||||
|
$config['RELEVANT_PAABGABETYPEN_SAMMELMAIL_STUDENT'] = ['qualgate1', 'qualgate2', 'zwischen', 'note', 'abstract', 'end', 'enda'];
|
||||||
|
//$config['ALLOWED_NOTEN_ABGABETOOL'] = ['Bestanden', 'Nicht bestanden'];
|
||||||
|
$config['ALLOWED_NOTEN_ABGABETOOL'] = [10, 14]; // tbl_note pk
|
||||||
|
// benotete projektarbeiten sperren weitere terminanlage & bearbeitung, diese noten sind ausnahmen dieser Regel
|
||||||
|
// wie zB "Nicht beurteilt" & "Noch nicht eingetragen"
|
||||||
|
$config['NONFINAL_NOTEN_ABGABETOOL'] = [9];
|
||||||
|
$config['beurteilung_link_fallback'] = 'addons/fhtw/content/projektbeurteilung/projektbeurteilungDocumentExport.php?projektarbeit_id=?&betreuerart_kurzbz=?&person_id=?';
|
||||||
|
|
||||||
|
$config['PROJEKTARBEITSBEURTEILUNG_MAIL_BASELINK_ERSTBEGUTACHTER'] = 'index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungErstbegutachter';
|
||||||
|
$config['PROJEKTARBEITSBEURTEILUNG_MAIL_BASELINK_ZWEITBEGUTACHTER'] = 'index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungErstbegutachter';
|
||||||
|
|
||||||
|
$config['SIGNATUR_CHECK_PAABGABETYPEN'] = ['end'];
|
||||||
|
|
||||||
|
// to be used as "https://moodle.technikum-wien.at/course/view.php?idnumber=dl{$stg_kz}" for stg specific moodle routing
|
||||||
|
$config['STG_MOODLE_LINK'] = 'https://moodle.technikum-wien.at/course/view.php?idnumber=dl';
|
||||||
|
|
||||||
|
$config['ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT'] = true;
|
||||||
|
$config['ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER'] = true;
|
||||||
|
|
||||||
|
$config['BETREUER_SAMMELMAIL_BUTTON_STUDENT'] = true;
|
||||||
@@ -4,7 +4,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|||||||
|
|
||||||
|
|
||||||
// CMS Content Id for CIS4 Menu Root
|
// CMS Content Id for CIS4 Menu Root
|
||||||
$config['cis_menu_root_content_id'] = 11087;
|
$config['cis_menu_root_content_id'] = 11091;
|
||||||
// send Mails for ProfilUpdate
|
// send Mails for ProfilUpdate
|
||||||
$config['cis_send_profil_update_mails'] = true;
|
$config['cis_send_profil_update_mails'] = true;
|
||||||
// Vilesci CI BaseUrl
|
// Vilesci CI BaseUrl
|
||||||
|
|||||||
@@ -7,3 +7,6 @@ $config['use_vuejs_dev_version'] = false;
|
|||||||
$config['use_bundled_javascript'] = false;
|
$config['use_bundled_javascript'] = false;
|
||||||
// systemerror_mailto use in FHC-Alert Plugin - if empty Link will not be rendered
|
// systemerror_mailto use in FHC-Alert Plugin - if empty Link will not be rendered
|
||||||
$config['systemerror_mailto'] = '';
|
$config['systemerror_mailto'] = '';
|
||||||
|
// use fhcomplete_build_version as path element after public (requires apache mod_rewrite)
|
||||||
|
// see <fhc_base_dir>/public/.htaccess_sample for details
|
||||||
|
$config['use_fhcomplete_build_version_in_path'] = false;
|
||||||
|
|||||||
@@ -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,17 @@ $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/(:any)'] = 'Cis/Abgabetool/Assistenz/$1';
|
||||||
|
$route['Abgabetool/Mitarbeiter'] = 'Cis/Abgabetool/Mitarbeiter';
|
||||||
|
$route['Abgabetool/Student'] = 'Cis/Abgabetool/Student';
|
||||||
|
$route['Abgabetool/Student/(:any)'] = 'Cis/Abgabetool/Student/$1';
|
||||||
|
$route['Abgabetool/Deadlines'] = 'Cis/Abgabetool/Deadlines';
|
||||||
|
|
||||||
// Studierendenverwaltung List Routes
|
// Studierendenverwaltung List Routes
|
||||||
$route['api/frontend/v1/stv/[sS]tudents/inout'] = 'api/frontend/v1/stv/Students/index';
|
$route['api/frontend/v1/stv/[sS]tudents/inout'] = 'api/frontend/v1/stv/Students/index';
|
||||||
|
|||||||
@@ -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],
|
||||||
|
];
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ class Abgabetool extends Auth_Controller
|
|||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'index' => self::PERM_LOGGED,
|
'index' => self::PERM_LOGGED,
|
||||||
'getStudentProjektarbeitAbgabeFile' => self::PERM_LOGGED,
|
'Mitarbeiter' => array('basis/abgabe_lektor:rw', 'basis/abgabe_assistenz:rw'),
|
||||||
'Mitarbeiter' => self::PERM_LOGGED,
|
'Assistenz' => array('basis/abgabe_assistenz:rw'),
|
||||||
'Student' => self::PERM_LOGGED,
|
'Student' => array('basis/abgabe_student:rw', 'basis/abgabe_lektor:rw', 'basis/abgabe_assistenz:rw'),
|
||||||
'Deadlines' => self::PERM_LOGGED
|
'Deadlines' => array('basis/abgabe_lektor:rw', 'basis/abgabe_assistenz:rw')
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,80 +29,48 @@ class Abgabetool extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
// TODO: routing from index based on berechtigung?
|
||||||
|
|
||||||
$viewData = array(
|
if(defined('CIS4') && CIS4) {
|
||||||
'uid'=>getAuthUID(),
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'Abgabetool']);
|
||||||
);
|
} else {
|
||||||
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'Abgabetool']);
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Abgabetool']);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Student()
|
public function Student($student_uid_prop = '')
|
||||||
{
|
{
|
||||||
|
if(defined('CIS4') && CIS4) {
|
||||||
$viewData = array(
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'AbgabetoolStudent']);
|
||||||
'uid'=>getAuthUID(),
|
} else {
|
||||||
);
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolStudent', 'student_uid_prop' => $student_uid_prop]);
|
||||||
|
}
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolStudent']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function Mitarbeiter()
|
public function Mitarbeiter()
|
||||||
{
|
{
|
||||||
|
if(defined('CIS4') && CIS4) {
|
||||||
$viewData = array(
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'AbgabetoolMitarbeiter']);
|
||||||
'uid'=>getAuthUID(),
|
} else {
|
||||||
);
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolMitarbeiter']);
|
||||||
|
}
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolMitarbeiter']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function Assistenz($stg_kz_prop = '')
|
||||||
|
{
|
||||||
|
if(defined('CIS4') && CIS4) {
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'AbgabetoolAssistenz']);
|
||||||
|
} else {
|
||||||
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolAssistenz', 'stg_kz_prop' => $stg_kz_prop]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function Deadlines()
|
public function Deadlines()
|
||||||
{
|
{
|
||||||
|
if(defined('CIS4') && CIS4) {
|
||||||
$viewData = array(
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'DeadlinesOverview']);
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'DeadlinesOverview']);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function getStudentProjektarbeitAbgabeFile()
|
|
||||||
{
|
|
||||||
$this->_ci =& get_instance();
|
|
||||||
$this->_ci->load->helper('download');
|
|
||||||
|
|
||||||
$paabgabe_id = $this->_ci->input->get('paabgabe_id');
|
|
||||||
$student_uid = $this->_ci->input->get('student_uid');
|
|
||||||
|
|
||||||
if (!isset($paabgabe_id) || isEmptyString($paabgabe_id) || !isset($student_uid) || isEmptyString($student_uid))
|
|
||||||
$this->terminateWithJsonError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
$this->_ci->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
|
|
||||||
$isZugeteilterBetreuer = count($this->_ci->ProjektarbeitModel->checkZuordnung($student_uid, getAuthUID())->retval) > 0;
|
|
||||||
|
|
||||||
if(getAuthUID() == $student_uid || $isZugeteilterBetreuer) {
|
|
||||||
$file_path = PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf';
|
|
||||||
if(file_exists($file_path)) {
|
|
||||||
|
|
||||||
header('Content-Description: File Transfer');
|
|
||||||
header('Content-Type: application/octet-stream');
|
|
||||||
header('Expires: 0');
|
|
||||||
header('Cache-Control: must-revalidate');
|
|
||||||
header('Pragma: public');
|
|
||||||
header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
|
|
||||||
header('Content-Length: ' . filesize($file_path));
|
|
||||||
|
|
||||||
flush(); // send headers first just in case
|
|
||||||
readfile($file_path); // read file content to output buffer
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$this->terminateWithJsonError('File not found');
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
$this->terminateWithJsonError('Keine Zuordnung!');
|
$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,13 +28,13 @@ 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'),
|
||||||
'student/editBakkZgv' => $this->permissionlib->isBerechtigt('student/editBakkZgv'),
|
'student/editBakkZgv' => $this->permissionlib->getSTG_isEntitledFor('student/editBakkZgv') ?: array(),
|
||||||
'student/editMakkZgv' => $this->permissionlib->isBerechtigt('student/editMakkZgv'),
|
'student/editMakkZgv' => $this->permissionlib->getSTG_isEntitledFor('student/editMakkZgv') ?: array(),
|
||||||
'student/editDokZgv' => $this->permissionlib->isBerechtigt('student/editDokZgv'),
|
'student/editDokZgv' => $this->permissionlib->getSTG_isEntitledFor('student/editDokZgv') ?: array(),
|
||||||
'student/editBismelden' => $this->permissionlib->isBerechtigt('student/editBismelden')
|
'student/editBismelden' => $this->permissionlib->isBerechtigt('student/editBismelden')
|
||||||
],
|
],
|
||||||
'variables' => [
|
'variables' => [
|
||||||
@@ -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')
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||||
*/
|
*/
|
||||||
@@ -39,15 +30,9 @@ class Lehre extends FHCAPI_Controller
|
|||||||
'lvStudentenMail' => self::PERM_LOGGED,
|
'lvStudentenMail' => self::PERM_LOGGED,
|
||||||
'LV' => self::PERM_LOGGED,
|
'LV' => self::PERM_LOGGED,
|
||||||
'Pruefungen' => self::PERM_LOGGED,
|
'Pruefungen' => self::PERM_LOGGED,
|
||||||
'getStudentProjektarbeiten' => self::PERM_LOGGED, // TODO: abgabetool berechtigung?
|
'semesterAverageGrade' => self::PERM_LOGGED,
|
||||||
'getStudentProjektabgaben' => self::PERM_LOGGED,
|
'getZugewieseneLv' => self::PERM_LOGGED,
|
||||||
'postStudentProjektarbeitZwischenabgabe' => self::PERM_LOGGED,
|
'getLeForLv' => self::PERM_LOGGED
|
||||||
'postStudentProjektarbeitEndupload' => self::PERM_LOGGED,
|
|
||||||
'getMitarbeiterProjektarbeiten' => self::PERM_LOGGED,
|
|
||||||
'postProjektarbeitAbgabe' => self::PERM_LOGGED,
|
|
||||||
'deleteProjektarbeitAbgabe' => self::PERM_LOGGED,
|
|
||||||
'postSerientermin' => self::PERM_LOGGED,
|
|
||||||
'fetchDeadlines' => self::PERM_LOGGED // TODO: mitarbeiter recht prüfen
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->load->library('PhrasesLib');
|
$this->load->library('PhrasesLib');
|
||||||
@@ -61,7 +46,7 @@ class Lehre extends FHCAPI_Controller
|
|||||||
);
|
);
|
||||||
|
|
||||||
$this->load->helper('hlp_sancho_helper');
|
$this->load->helper('hlp_sancho_helper');
|
||||||
|
|
||||||
require_once(FHCPATH . 'include/studiengang.class.php');
|
require_once(FHCPATH . 'include/studiengang.class.php');
|
||||||
require_once(FHCPATH . 'include/student.class.php');
|
require_once(FHCPATH . 'include/student.class.php');
|
||||||
require_once(FHCPATH . 'include/projektarbeit.class.php');
|
require_once(FHCPATH . 'include/projektarbeit.class.php');
|
||||||
@@ -71,31 +56,31 @@ class Lehre extends FHCAPI_Controller
|
|||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// 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)
|
||||||
@@ -105,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
|
||||||
*/
|
*/
|
||||||
@@ -127,555 +112,88 @@ class Lehre extends FHCAPI_Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fetches all projektabgabetermine for a given projektarbeit_id used in cis4 student abgabetool
|
* calculates and returns the grade average and weighted average for a specific semester
|
||||||
|
* @param string $studiensemester_kurzbz
|
||||||
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function getStudentProjektabgaben() {
|
|
||||||
$projektarbeit_id = $this->input->get("projektarbeit_id",TRUE);
|
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
|
// TODO: error messages
|
||||||
|
|
||||||
if (!isset($projektarbeit_id) || isEmptyString($projektarbeit_id))
|
if(!isset($sem_kurzbz) || isEmptyString($sem_kurzbz))
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
||||||
|
|
||||||
$projektarbeit_obj = new projektarbeit();
|
|
||||||
if($projektarbeit_id==-1)
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
if(!$projektarbeit_obj->load($projektarbeit_id))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
$paIsCurrent = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id);
|
|
||||||
|
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
$ret = $this->ProjektarbeitModel->getProjektarbeitAbgabetermine($projektarbeit_id);
|
|
||||||
|
|
||||||
// TODO: fetch zweitbetreuer
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(array($ret, $paIsCurrent));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* fetches all projektarbeiten and betreuer for a given student_uid used in cis4 student abgabetool
|
|
||||||
*/
|
|
||||||
public function getStudentProjektarbeiten($uid)
|
|
||||||
{
|
|
||||||
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
|
|
||||||
if (!isset($uid) || isEmptyString($uid))
|
if (!isset($uid) || isEmptyString($uid))
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
$uid = getAuthUID();
|
||||||
|
|
||||||
$isZugeteilterBetreuer = count($this->ProjektarbeitModel->checkZuordnung($uid, getAuthUID())->retval) > 0;
|
|
||||||
$this->addMeta('isZugeteilterBetreuer', $isZugeteilterBetreuer);
|
|
||||||
$isMitarbeiter = $this->MitarbeiterModel->isMitarbeiter(getAuthUID());
|
|
||||||
|
|
||||||
if ($isMitarbeiter && $isZugeteilterBetreuer){
|
|
||||||
$projektarbeiten = $this->ProjektarbeitModel->getStudentProjektarbeitenWithBetreuer($uid);
|
|
||||||
} else {
|
|
||||||
$projektarbeiten = $this->ProjektarbeitModel->getStudentProjektarbeitenWithBetreuer(getAuthUID());
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(array($projektarbeiten, DOMAIN, $uid));
|
// querying other ma_uids data requires admin permission
|
||||||
}
|
if($uid !== getAuthUID()) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* projektarbeit - upload for zwischenabgaben in cis4 student abgabetool
|
|
||||||
*/
|
|
||||||
public function postStudentProjektarbeitZwischenabgabe()
|
|
||||||
{
|
|
||||||
|
|
||||||
$projektarbeit_id = $_POST['projektarbeit_id'];
|
|
||||||
$paabgabe_id = $_POST['paabgabe_id'];
|
|
||||||
$student_uid = $_POST['student_uid'];
|
|
||||||
$bperson_id = $_POST['bperson_id'];
|
|
||||||
$paabgabetyp_kurzbz = $_POST['paabgabetyp_kurzbz'];
|
|
||||||
|
|
||||||
if (!isset($projektarbeit_id) || isEmptyString($projektarbeit_id)
|
|
||||||
|| !isset($paabgabe_id) || isEmptyString($paabgabe_id)
|
|
||||||
|| !isset($student_uid) || isEmptyString($student_uid)
|
|
||||||
|| !isset($paabgabetyp_kurzbz) || isEmptyString($paabgabetyp_kurzbz))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
if ((isset($_FILES) and isset($_FILES['file']) and ! $_FILES['file']['error'])) {
|
|
||||||
move_uploaded_file($_FILES['file']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf');
|
|
||||||
|
|
||||||
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf')) {
|
|
||||||
|
|
||||||
exec('chmod 640 "'.PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf'.'"');
|
|
||||||
|
|
||||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
|
||||||
$res = $this->PaabgabeModel->update($paabgabe_id, array(
|
|
||||||
'abgabedatum' => date('Y-m-d'),
|
|
||||||
'updatevon' => getAuthUID(),
|
|
||||||
'updateamum' => date('Y-m-d H:i:s')
|
|
||||||
));
|
|
||||||
|
|
||||||
$this->sendUploadEmail($bperson_id, $projektarbeit_id, $paabgabetyp_kurzbz, $student_uid);
|
|
||||||
$this->terminateWithSuccess($res);
|
|
||||||
} else {
|
|
||||||
$this->terminateWithError('Error moving File');
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$this->terminateWithError('File missing');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* upload für finale abgaben aka Endupload in cis4 student abgabetool
|
|
||||||
*/
|
|
||||||
public function postStudentProjektarbeitEndupload()
|
|
||||||
{
|
|
||||||
|
|
||||||
$projektarbeit_id = $_POST['projektarbeit_id'];
|
|
||||||
$paabgabe_id = $_POST['paabgabe_id'];
|
|
||||||
$student_uid = $_POST['student_uid'];
|
|
||||||
$sprache = $_POST['sprache'];
|
|
||||||
$abstract = $_POST['abstract'];
|
|
||||||
$abstract_en = $_POST['abstract_en'];
|
|
||||||
$schlagwoerter = $_POST['schlagwoerter'];
|
|
||||||
$schlagwoerter_en = $_POST['schlagwoerter_en'];
|
|
||||||
$seitenanzahl = $_POST['seitenanzahl'];
|
|
||||||
$bperson_id = $_POST['bperson_id'];
|
|
||||||
$paabgabetyp_kurzbz = $_POST['paabgabetyp_kurzbz'];
|
|
||||||
|
|
||||||
if (!isset($projektarbeit_id) || isEmptyString($projektarbeit_id)
|
|
||||||
|| !isset($paabgabe_id) || isEmptyString($paabgabe_id)
|
|
||||||
|| !isset($student_uid) || isEmptyString($student_uid)
|
|
||||||
|| !isset($paabgabetyp_kurzbz) || isEmptyString($paabgabetyp_kurzbz))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
// TODO: maybe check for other params aswell?
|
|
||||||
|
|
||||||
if ((isset($_FILES) and isset($_FILES['file']) and ! $_FILES['file']['error'])) {
|
|
||||||
move_uploaded_file($_FILES['file']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf');
|
|
||||||
|
|
||||||
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf')) {
|
|
||||||
|
|
||||||
// Loads Libraries
|
|
||||||
$this->load->library('SignatureLib');
|
|
||||||
|
|
||||||
// Check if the document is signed
|
|
||||||
$signaturVorhanden = true;
|
|
||||||
$signList = SignatureLib::list(PAABGABE_PATH.$paabgabe_id.'_'.$student_uid.'.pdf');
|
|
||||||
if (is_array($signList) && count($signList) > 0)
|
|
||||||
{
|
|
||||||
// The document is signed
|
|
||||||
$uploadedDocumentSigned = 'The document is signed';
|
|
||||||
}
|
|
||||||
elseif ($signList === null)
|
|
||||||
{
|
|
||||||
$uploadedDocumentSigned = 'WARNING: signature server error';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$signaturVorhanden = false;
|
|
||||||
$uploadedDocumentSigned = 'No document signature found';
|
|
||||||
}
|
|
||||||
$this->addMeta('signaturInfo', $uploadedDocumentSigned);
|
|
||||||
|
|
||||||
if ($signaturVorhanden === false)
|
|
||||||
{
|
|
||||||
$this->signaturFehltEmail($student_uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO error handle get data has data the updates
|
|
||||||
// update projektarbeit cols
|
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
$this->ProjektarbeitModel->updateProjektarbeit($projektarbeit_id,$sprache,$abstract,$abstract_en
|
|
||||||
,$schlagwoerter, $schlagwoerter_en, $seitenanzahl);
|
|
||||||
|
|
||||||
|
|
||||||
// update paabgabe datum
|
|
||||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
|
||||||
$res = $this->PaabgabeModel->update($paabgabe_id, array(
|
|
||||||
'abgabedatum' => date('Y-m-d'),
|
|
||||||
'updatevon' => getAuthUID(),
|
|
||||||
'updateamum' => date('Y-m-d H:i:s')
|
|
||||||
));
|
|
||||||
|
|
||||||
$this->sendUploadEmail($bperson_id, $projektarbeit_id, $paabgabetyp_kurzbz, $student_uid);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($res);
|
|
||||||
} else {
|
|
||||||
$this->terminateWithError('Error moving File');
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$this->terminateWithError('File missing');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private function signaturFehltEmail($student_uid) {
|
|
||||||
|
|
||||||
|
|
||||||
// Mail an Studiengang wenn keine Signatur gefunden wurde
|
|
||||||
$student = new student();
|
|
||||||
if(!$student->load($student_uid))
|
|
||||||
$this->terminateWithError($this->p->t('global','userNichtGefunden'), 'general');
|
|
||||||
|
|
||||||
$stg_obj = new studiengang();
|
|
||||||
if(!$stg_obj->load($student->studiengang_kz))
|
|
||||||
$this->terminateWithError($this->p->t('global','fehlerBeimLesenAusDatenbank'), 'general');
|
|
||||||
|
|
||||||
$subject = 'Abgabe ohne Signatur';
|
|
||||||
$tomail = $stg_obj->email;
|
|
||||||
$data = array(
|
|
||||||
'vorname' => $student->vorname,
|
|
||||||
'nachname' => $student->nachname,
|
|
||||||
'studiengang' => $stg_obj->bezeichnung
|
|
||||||
);
|
|
||||||
|
|
||||||
$mailres = sendSanchoMail(
|
|
||||||
'ParbeitsbeurteilungSiganturFehlt',
|
|
||||||
$data,
|
|
||||||
$tomail,
|
|
||||||
$subject,
|
|
||||||
'sancho_header_min_bw.jpg',
|
|
||||||
'sancho_footer_min_bw.jpg'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function sendUploadEmail($bperson_id, $projektarbeit_id, $paabgabetyp_kurzbz, $student_uid) {
|
|
||||||
|
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
|
|
||||||
$resBetr = $this->ProjektarbeitModel->getProjektbetreuerAnrede($bperson_id);
|
|
||||||
|
|
||||||
$projektarbeit_obj = new projektarbeit();
|
|
||||||
|
|
||||||
if(!$projektarbeit_obj->load($projektarbeit_id))
|
|
||||||
$this->terminateWithError('Ungueltiger Eintrag');
|
|
||||||
|
|
||||||
$num_rows_sem = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id);
|
|
||||||
|
|
||||||
if( null === $num_rows_sem || false === $num_rows_sem )
|
|
||||||
{
|
|
||||||
$this->terminateWithError($this->p->t('abgabetool','fehlerAktualitaetProjektarbeit'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($resBetr->retval as $betreuerRow) {
|
|
||||||
|
|
||||||
// query student benutzer view for every betreuer row
|
|
||||||
$studentUser = $this->ProjektarbeitModel->getProjektarbeitBenutzer($student_uid)->retval[0];
|
|
||||||
|
|
||||||
// TODO: hasdata, getData etc
|
|
||||||
|
|
||||||
// 1. Begutachter mail ohne Token
|
|
||||||
$mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/ProjektarbeitsbeurteilungErstbegutachter";
|
|
||||||
$mail_fulllink = "$mail_baselink?projektarbeit_id=".$projektarbeit_id."&uid=".$studentUser->uid;
|
|
||||||
$projekttyp_kurzbz = $projektarbeit_obj->projekttyp_kurzbz;
|
|
||||||
$subject = $projektarbeit_obj->projekttyp_kurzbz == 'Diplom' ? 'Masterarbeitsbetreuung' : 'Bachelorarbeitsbetreuung';
|
|
||||||
$abgabetyp = $paabgabetyp_kurzbz == 'end' ? 'Endabgabe' : 'Zwischenabgabe';
|
|
||||||
|
|
||||||
$maildata = array();
|
|
||||||
$maildata['geehrt'] = "geehrte".($betreuerRow->anrede=="Herr"?"r":"");
|
|
||||||
$maildata['anrede'] = $betreuerRow->anrede;
|
|
||||||
$maildata['betreuer_voller_name'] = $betreuerRow->first;
|
|
||||||
$maildata['student_anrede'] = $studentUser->anrede;
|
|
||||||
$maildata['student_voller_name'] = trim($studentUser->titelpre." ".$studentUser->vorname." ".$studentUser->nachname." ".$studentUser->titelpost);
|
|
||||||
$maildata['abgabetyp'] = $abgabetyp;
|
|
||||||
$maildata['parbeituebersichtlink'] = "<p><a href='".APP_ROOT."cis/private/lehre/abgabe_lektor_frameset.html'>Zur Projektarbeitsübersicht</a></p>";
|
|
||||||
$maildata['bewertunglink'] = $num_rows_sem >= 1 && $paabgabetyp_kurzbz == 'end' ? "<p><a href='$mail_fulllink'>Zur Beurteilung der Arbeit</a></p>" : "";
|
|
||||||
$maildata['token'] = "";
|
|
||||||
|
|
||||||
$mailres = sendSanchoMail(
|
|
||||||
'ParbeitsbeurteilungEndupload',
|
|
||||||
$maildata,
|
|
||||||
$betreuerRow->mitarbeiter_uid."@".DOMAIN,
|
|
||||||
$subject,
|
|
||||||
'sancho_header_min_bw.jpg',
|
|
||||||
'sancho_footer_min_bw.jpg',
|
|
||||||
get_uid()."@".DOMAIN);
|
|
||||||
|
|
||||||
if(!$mailres)
|
|
||||||
{
|
|
||||||
$this->terminateWithError($this->p->t('abgabetool', 'fehlerMailBegutachter'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
// 2. Begutachter mail, wenn Endabgabe, mit Token wenn extern
|
|
||||||
if ($paabgabetyp_kurzbz == 'end')
|
|
||||||
{
|
|
||||||
// Zweitbegutachter holen
|
|
||||||
$zweitbegutachter = new projektbetreuer();
|
|
||||||
$zweitbegutachterRes = $zweitbegutachter->getZweitbegutachterWithToken($bperson_id, $projektarbeit_id, $studentUser->uid);
|
|
||||||
|
|
||||||
if ($zweitbegutachterRes)
|
|
||||||
{
|
|
||||||
$zweitbegutachterResults = $zweitbegutachter->result;
|
|
||||||
|
|
||||||
foreach ($zweitbegutachterResults as $begutachter)
|
|
||||||
{
|
|
||||||
// token generieren, wenn noch nicht vorhanden und notwendig (wird in methode überprüft)
|
|
||||||
$tokenGenRes = $zweitbegutachter->generateZweitbegutachterToken($begutachter->person_id, $projektarbeit_id);
|
|
||||||
|
|
||||||
if (!$tokenGenRes)
|
|
||||||
{
|
|
||||||
$this->terminateWithError($this->p->t('abgabetool', 'fehlerMailZweitBegutachter'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zweitbegutachter (evtl. mit Token) holen
|
|
||||||
$zweitbegutachterMitToken = new projektbetreuer();
|
|
||||||
$begutachterMitTokenRes = $zweitbegutachterMitToken->getZweitbegutachterWithToken($bperson_id, $projektarbeit_id, $studentUser->uid, $begutachter->person_id);
|
|
||||||
|
|
||||||
if (!$begutachterMitTokenRes)
|
|
||||||
{
|
|
||||||
$this->terminateWithError($this->p->t('abgabetool', 'fehlerMailZweitBegutachter'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Email an Zweitbegutachter senden
|
|
||||||
if (isset($zweitbegutachterMitToken->result[0]))
|
|
||||||
{
|
|
||||||
$begutachterMitToken = $zweitbegutachterMitToken->result[0];
|
|
||||||
|
|
||||||
$path = $begutachterMitToken->betreuerart_kurzbz == 'Zweitbegutachter' ? 'ProjektarbeitsbeurteilungZweitbegutachter' : 'ProjektarbeitsbeurteilungErstbegutachter';
|
|
||||||
$mail_baselink = APP_ROOT."index.ci.php/extensions/FHC-Core-Projektarbeitsbeurteilung/$path";
|
|
||||||
$mail_fulllink = "$mail_baselink?projektarbeit_id=".$projektarbeit_id."&uid=".$studentUser->uid;
|
|
||||||
$intern = isset($begutachterMitToken->uid);
|
|
||||||
$mail_link = $intern ? $mail_fulllink : $mail_baselink;
|
|
||||||
|
|
||||||
$zweitbetmaildata = array();
|
|
||||||
$zweitbetmaildata['geehrt'] = "geehrte" . ($begutachterMitToken->anrede == "Herr" ? "r" : "");
|
|
||||||
$zweitbetmaildata['anrede'] = $begutachterMitToken->anrede;
|
|
||||||
$zweitbetmaildata['betreuer_voller_name'] = $begutachterMitToken->voller_name;
|
|
||||||
$zweitbetmaildata['student_anrede'] = $maildata['student_anrede'];
|
|
||||||
$zweitbetmaildata['student_voller_name'] = $maildata['student_voller_name'];
|
|
||||||
$zweitbetmaildata['abgabetyp'] = $abgabetyp;
|
|
||||||
$zweitbetmaildata['parbeituebersichtlink'] = $intern ? $maildata['parbeituebersichtlink'] : "";
|
|
||||||
$zweitbetmaildata['bewertunglink'] = $num_rows_sem >= 1 ? "<p><a href='$mail_link'>Zur Beurteilung der Arbeit</a></p>" : "";
|
|
||||||
$zweitbetmaildata['token'] = $num_rows_sem >= 1 && isset($begutachterMitToken->zugangstoken) && !$intern ? "<p>Zugangstoken: " . $begutachterMitToken->zugangstoken . "</p>" : "";
|
|
||||||
|
|
||||||
$mailres = sendSanchoMail(
|
|
||||||
'ParbeitsbeurteilungEndupload',
|
|
||||||
$zweitbetmaildata,
|
|
||||||
$begutachterMitToken->email,
|
|
||||||
$subject,
|
|
||||||
'sancho_header_min_bw.jpg',
|
|
||||||
'sancho_footer_min_bw.jpg',
|
|
||||||
get_uid()."@".DOMAIN
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!$mailres)
|
|
||||||
{
|
|
||||||
$this->terminateWithError($this->p->t('abgabetool', 'fehlerMailBegutachter'), 'general');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getMitarbeiterProjektarbeiten() {
|
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
|
|
||||||
$boolParamStr = $this->input->get('showall');
|
|
||||||
$trueStrings = ['true', '1'];
|
|
||||||
$falseStrings = ['false', '0'];
|
|
||||||
|
|
||||||
// Handle missing or invalid parameter
|
|
||||||
if ($boolParamStr === null) {
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
}
|
|
||||||
$boolParamStrLower = strtolower($boolParamStr);
|
|
||||||
|
|
||||||
if (in_array($boolParamStrLower, $trueStrings, true)) {
|
|
||||||
$showAllBool = true;
|
|
||||||
} elseif (in_array($boolParamStrLower, $falseStrings, true)) {
|
|
||||||
$showAllBool = false;
|
|
||||||
} else {
|
|
||||||
// $this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
$projektarbeiten = $this->ProjektarbeitModel->getMitarbeiterProjektarbeiten(getAuthUID(), $showAllBool);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(array($projektarbeiten, DOMAIN));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function postProjektarbeitAbgabe() {
|
|
||||||
$projektarbeit_id = $_POST['projektarbeit_id'];
|
|
||||||
$paabgabe_id = $_POST['paabgabe_id'];
|
|
||||||
$paabgabetyp_kurzbz = $_POST['paabgabetyp_kurzbz'];
|
|
||||||
$datum = $_POST['datum'];
|
|
||||||
$fixtermin = $_POST['fixtermin'];
|
|
||||||
$kurzbz = $_POST['kurzbz'];
|
|
||||||
|
|
||||||
if (!isset($projektarbeit_id) || isEmptyString($projektarbeit_id)
|
|
||||||
|| !isset($paabgabe_id) || isEmptyString($paabgabe_id)
|
|
||||||
|| !isset($datum) || isEmptyString($datum)
|
|
||||||
|| !isset($datum) || isEmptyString($datum)
|
|
||||||
|| !isset($paabgabetyp_kurzbz) || isEmptyString($paabgabetyp_kurzbz))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
|
||||||
|
|
||||||
if($paabgabe_id == -1) {
|
|
||||||
$result = $this->PaabgabeModel->insert(
|
|
||||||
array(
|
|
||||||
'projektarbeit_id' => $projektarbeit_id,
|
|
||||||
'paabgabetyp_kurzbz' => $paabgabetyp_kurzbz,
|
|
||||||
'fixtermin' => $fixtermin,
|
|
||||||
'datum' => $datum,
|
|
||||||
'kurzbz' => $kurzbz,
|
|
||||||
'insertvon' => getAuthUID(),
|
|
||||||
'insertamum' => date('Y-m-d H:i:s')
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($result);
|
|
||||||
} else {
|
|
||||||
$result = $this->PaabgabeModel->update(
|
|
||||||
$paabgabe_id,
|
|
||||||
array(
|
|
||||||
'paabgabetyp_kurzbz' => $paabgabetyp_kurzbz,
|
|
||||||
'datum' => $datum,
|
|
||||||
'kurzbz' => $kurzbz,
|
|
||||||
'updatevon' => getAuthUID(),
|
|
||||||
'updateamum' => date('Y-m-d H:i:s')
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function deleteProjektarbeitAbgabe() {
|
|
||||||
$paabgabe_id = $_POST['paabgabe_id'];
|
|
||||||
|
|
||||||
if (!isset($paabgabe_id) || isEmptyString($paabgabe_id))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
|
||||||
|
|
||||||
$result = $this->PaabgabeModel->load($paabgabe_id);
|
|
||||||
$result = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
if(count($result) == 0)
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
// TODO: berechtigung?
|
|
||||||
if($result[0]->insertvon === getAuthUID()) {
|
|
||||||
$result = $this->PaabgabeModel->delete($paabgabe_id);
|
|
||||||
$result = $this->getDataOrTerminateWithError($result);
|
|
||||||
$this->terminateWithSuccess($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* endpoint for adding the same paabgabe for multiple projektarbeiten
|
|
||||||
* can be slow for large n since it queries twice per projektarbeit_id
|
|
||||||
*/
|
|
||||||
public function postSerientermin() {
|
|
||||||
$projektarbeit_ids = $_POST['projektarbeit_ids'];
|
|
||||||
$datum = $_POST['datum'];
|
|
||||||
$paabgabetyp_kurzbz = $_POST['paabgabetyp_kurzbz'];
|
|
||||||
$bezeichnung = $_POST['bezeichnung'];
|
|
||||||
$kurzbz = $_POST['kurzbz'];
|
|
||||||
|
|
||||||
if (!isset($projektarbeit_ids) || !is_array($projektarbeit_ids) || empty($projektarbeit_ids)
|
|
||||||
|| !isset($datum) || isEmptyString($datum)
|
|
||||||
|| !isset($kurzbz) || isEmptyString($kurzbz)
|
|
||||||
|| !isset($bezeichnung) || isEmptyString($bezeichnung)
|
|
||||||
|| !isset($paabgabetyp_kurzbz) || isEmptyString($paabgabetyp_kurzbz))
|
|
||||||
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
|
||||||
|
|
||||||
// old script checks if there already are tbl_paabgabe entries with exact date, type & kurzbz
|
|
||||||
// for each termin - good to check that in principle but should not matter in this place. if necessary
|
|
||||||
// duplicate abgabetermine can be easily deleted manually, also via cronjob@night.
|
|
||||||
|
|
||||||
// since this entry includes the kurzbz string match, it should have only ever mattered when there were
|
|
||||||
// multiple users entering the exact same set of (date, type, kurzbz) - which is a much more narrow case than the
|
|
||||||
// general "saveMultiple" function should handle
|
|
||||||
|
|
||||||
// old script afterwards again queries if user is not the zweitbetreuer of any id - this is blocked in the ui
|
|
||||||
// and should never unintentionally happen
|
|
||||||
|
|
||||||
// TODO: check berechtigung &/|| zuordnung?
|
|
||||||
|
|
||||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
|
||||||
|
|
||||||
$res = [];
|
|
||||||
foreach ($projektarbeit_ids as $projektarbeit_id) {
|
|
||||||
|
|
||||||
$result = $this->PaabgabeModel->insert(
|
|
||||||
array(
|
|
||||||
'projektarbeit_id' => $projektarbeit_id,
|
|
||||||
'paabgabetyp_kurzbz' => $paabgabetyp_kurzbz,
|
|
||||||
'fixtermin' => false,
|
|
||||||
'datum' => $datum,
|
|
||||||
'kurzbz' => $kurzbz,
|
|
||||||
'insertvon' => getAuthUID(),
|
|
||||||
'insertamum' => date('Y-m-d H:i:s')
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
// $res[] = $data;
|
|
||||||
|
|
||||||
// send mail to student
|
|
||||||
$result = $this->ProjektarbeitModel->getStudentInfoForProjektarbeitId($projektarbeit_id);
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
// $this->addMeta('emaildata'.$projektarbeit_id, $data);
|
|
||||||
|
|
||||||
$datetime = new DateTime($datum);
|
|
||||||
$dateEmailFormatted = $datetime->format('d.m.Y');
|
|
||||||
|
|
||||||
$anredeFillString = $data[0]->anrede=="Herr"?"r":"";
|
|
||||||
|
|
||||||
$fullFormattedNameString = trim($data[0]->titelpre." ".$data[0]->vorname." ".$data[0]->nachname." ".$data[0]->titelpost);
|
|
||||||
$res[] = $fullFormattedNameString;
|
|
||||||
|
|
||||||
// Prepare mail content
|
|
||||||
$body_fields = array(
|
|
||||||
'anrede' => $data[0]->anrede,
|
|
||||||
'anredeFillString' => $anredeFillString,
|
|
||||||
'datum' => $dateEmailFormatted,
|
|
||||||
'bezeichnung' => $bezeichnung,
|
|
||||||
'fullFormattedNameString' => $fullFormattedNameString,
|
|
||||||
'kurzbz' => $kurzbz
|
|
||||||
);
|
|
||||||
|
|
||||||
$email = $data[0]->uid."@".DOMAIN;
|
|
||||||
|
|
||||||
sendSanchoMail(
|
|
||||||
'neuerAbgabetermin',
|
|
||||||
$body_fields,
|
|
||||||
$email,
|
|
||||||
$this->p->t('abgabetool', 'neuerTerminBachelorMasterbetreuung')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->terminateWithSuccess($res);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public function fetchDeadlines() {
|
|
||||||
$person_id = $_POST['person_id'];
|
|
||||||
|
|
||||||
if (!isset($person_id) || isEmptyString($person_id))
|
|
||||||
$person_id = getAuthPersonId();
|
|
||||||
|
|
||||||
|
|
||||||
if($person_id !== getAuthPersonId()) {
|
|
||||||
$this->load->library('PermissionLib');
|
$this->load->library('PermissionLib');
|
||||||
$isAdmin = $this->permissionlib->isBerechtigt('admin');
|
$isAdmin = $this->permissionlib->isBerechtigt('admin');
|
||||||
if(!$isAdmin) $this->terminateWithError($this->p->t('ui', 'keineBerechtigung'), 'general');
|
if(!$isAdmin) $this->terminateWithError($this->p->t('ui', 'keineBerechtigung'), 'general');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||||
$result = $this->PaabgabeModel->getDeadlines($person_id);
|
$result = $this->LehrveranstaltungModel->getLvForLektorInSemester($sem_kurzbz, $uid);
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
$this->terminateWithSuccess($data);
|
$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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ class Studium extends FHCAPI_Controller
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'getAllStudienSemester'=> self::PERM_LOGGED,
|
'getStudienAllSemester'=> self::PERM_LOGGED,
|
||||||
'getStudiengaengeForStudienSemester'=> self::PERM_LOGGED,
|
'getStudiengaengeForStudienSemester'=> self::PERM_LOGGED,
|
||||||
'getStudienplaeneBySemester'=> self::PERM_LOGGED,
|
'getStudienplaeneBySemester'=> self::PERM_LOGGED,
|
||||||
'getLvEvaluierungInfo'=> self::PERM_LOGGED,
|
'getLvEvaluierungInfo'=> self::PERM_LOGGED,
|
||||||
@@ -51,7 +51,7 @@ class Studium extends FHCAPI_Controller
|
|||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// Public methods
|
// Public methods
|
||||||
|
|
||||||
public function getAllStudienSemester(){
|
public function getStudienAllSemester(){
|
||||||
|
|
||||||
$parameter_studiensemester = $this->input->get('studiensemester',true);
|
$parameter_studiensemester = $this->input->get('studiensemester',true);
|
||||||
$parameter_studiengang = $this->input->get('studiengang',true);
|
$parameter_studiengang = $this->input->get('studiengang',true);
|
||||||
@@ -59,26 +59,39 @@ class Studium extends FHCAPI_Controller
|
|||||||
$parameter_studienplan = $this->input->get('studienplan',true);
|
$parameter_studienplan = $this->input->get('studienplan',true);
|
||||||
|
|
||||||
$aktuelles_studiensemester = current($this->getDataOrTerminateWithError($this->StudiensemesterModel->getAktOrNextSemester()));
|
$aktuelles_studiensemester = current($this->getDataOrTerminateWithError($this->StudiensemesterModel->getAktOrNextSemester()));
|
||||||
|
|
||||||
if($this->getDataOrTerminateWithError($this->StudentModel->isStudent(getAuthUID()))){
|
|
||||||
$lv_result =$this->StudentlehrverbandModel->loadWhere([
|
|
||||||
"student_uid" => getAuthUID(),
|
|
||||||
"studiensemester_kurzbz" => $aktuelles_studiensemester->studiensemester_kurzbz
|
|
||||||
]);
|
|
||||||
$lv_data = $this->getDataOrTerminateWithError($lv_result);
|
|
||||||
|
|
||||||
if ($studentLehrverband = current($lv_data)) {
|
|
||||||
$student_studiensemester = $studentLehrverband->studiensemester_kurzbz;
|
|
||||||
$student_studiengang = $studentLehrverband->studiengang_kz;
|
|
||||||
$student_semester = $studentLehrverband->semester;
|
|
||||||
}
|
|
||||||
|
|
||||||
$student_studienplan = $this->getStudienPlanFromPrestudentStatus(getAuthPersonId())->studienplan_id;
|
|
||||||
|
|
||||||
$parameter_studiensemester = $parameter_studiensemester ?? $student_studiensemester;
|
if($this->getDataOrTerminateWithError($this->StudentModel->isStudent(getAuthUID()))){
|
||||||
$parameter_studiengang = $parameter_studiengang ?? $student_studiengang;
|
$studentLehrverband =$this->StudentlehrverbandModel->loadWhere(["student_uid" => getAuthUID(), "studiensemester_kurzbz" => $aktuelles_studiensemester->studiensemester_kurzbz]);
|
||||||
$parameter_semester = $parameter_semester ?? $student_semester;
|
|
||||||
$parameter_studienplan = $parameter_studienplan ?? $student_studienplan;
|
//TODO(Manu) check if use Fallback or just comment out all paramschecks?
|
||||||
|
//add Fallback: if no LehrverbandData of actual semester, get Data of previous one
|
||||||
|
if(!hasData($studentLehrverband))
|
||||||
|
{
|
||||||
|
$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;
|
||||||
|
|
||||||
|
if(!isset($parameter_studiensemester)) {
|
||||||
|
$student_studiensemester = $studentLehrverband->studiensemester_kurzbz;
|
||||||
|
$parameter_studiensemester = $student_studiensemester;
|
||||||
|
}
|
||||||
|
if(!isset($parameter_studiengang)) {
|
||||||
|
$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))
|
||||||
|
$parameter_studienplan = $student_studienplan;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($parameter_studiensemester)){
|
if(isset($parameter_studiensemester)){
|
||||||
@@ -98,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;
|
||||||
}))){
|
}))){
|
||||||
@@ -218,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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -47,22 +47,22 @@ class Setup extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
$tabs['details'] = array (
|
$tabs['details'] = array (
|
||||||
'title' => 'Details',
|
'title' => 'Details',
|
||||||
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Details.js',
|
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Details.js'),
|
||||||
'config' => []
|
'config' => []
|
||||||
);
|
);
|
||||||
$tabs['gruppen'] = array (
|
$tabs['gruppen'] = array (
|
||||||
'title' => 'Gruppen',
|
'title' => 'Gruppen',
|
||||||
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Gruppen.js',
|
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Gruppen.js'),
|
||||||
'config' => []
|
'config' => []
|
||||||
);
|
);
|
||||||
$tabs['lektor'] = array (
|
$tabs['lektor'] = array (
|
||||||
'title' => 'LektorInnenzuteilung',
|
'title' => 'LektorInnenzuteilung',
|
||||||
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Lektor.js',
|
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Lektor.js'),
|
||||||
'config' => []
|
'config' => []
|
||||||
);
|
);
|
||||||
$tabs['notiz'] = array (
|
$tabs['notiz'] = array (
|
||||||
'title' => 'Notizen',
|
'title' => 'Notizen',
|
||||||
'component' => APP_ROOT . 'public/js/components/LVVerwaltung/Tabs/Notiz.js',
|
'component' => absoluteJsImportUrl('public/js/components/LVVerwaltung/Tabs/Notiz.js'),
|
||||||
'config' => []
|
'config' => []
|
||||||
);
|
);
|
||||||
$this->terminateWithSuccess($tabs);
|
$this->terminateWithSuccess($tabs);
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,7 +25,8 @@ class Studiensemester extends FHCAPI_Controller
|
|||||||
array(
|
array(
|
||||||
'getAll' => self::PERM_LOGGED,
|
'getAll' => self::PERM_LOGGED,
|
||||||
'getAktNext' => self::PERM_LOGGED,
|
'getAktNext' => self::PERM_LOGGED,
|
||||||
'getStudienjahrByStudiensemester' => self::PERM_LOGGED
|
'getStudienjahrByStudiensemester' => self::PERM_LOGGED,
|
||||||
|
'getAllStudiensemesterAndAktOrNext' => self::PERM_LOGGED
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
// Load model StudiensemesterModel
|
// Load model StudiensemesterModel
|
||||||
@@ -152,4 +153,17 @@ class Studiensemester extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->terminateWithSuccess((getData(success($studienjahrObj))));
|
$this->terminateWithSuccess((getData(success($studienjahrObj))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAllStudiensemesterAndAktOrNext() {
|
||||||
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
|
||||||
|
$this->StudiensemesterModel->addOrder("start", "DESC");
|
||||||
|
$result = $this->StudiensemesterModel->getAktOrNextSemester();
|
||||||
|
$aktuell = getData($result)[0];
|
||||||
|
$this->StudiensemesterModel->addSelect('*');
|
||||||
|
$result = $this->StudiensemesterModel->load();
|
||||||
|
$studiensemester = getData($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(array($studiensemester, $aktuell));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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',
|
||||||
@@ -504,7 +506,7 @@ class Config extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
$result['combinePeople'] = [
|
$result['combinePeople'] = [
|
||||||
'title' => $this->p->t('stv', 'tab_combine_people'),
|
'title' => $this->p->t('stv', 'tab_combine_people'),
|
||||||
'component' => './Stv/Studentenverwaltung/Details/CombinePeople.js',
|
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/CombinePeople.js'),
|
||||||
'config' => $config['combinePeople']
|
'config' => $config['combinePeople']
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,7 +241,7 @@ class Konto extends FHCAPI_Controller
|
|||||||
$data[$field] = $this->input->post($field);
|
$data[$field] = $this->input->post($field);
|
||||||
|
|
||||||
if (defined('FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE') && isset(unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$data['buchungstyp_kurzbz']])) {
|
if (defined('FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE') && isset(unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$data['buchungstyp_kurzbz']])) {
|
||||||
$data['kostenstelle'] = unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$data['buchungstyp_kurzbz']];
|
$data['studiengang_kz'] = unserialize(FAS_BUCHUNGSTYP_FIXE_KOSTENSTELLE)[$data['buchungstyp_kurzbz']];
|
||||||
}
|
}
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class Prestudent extends FHCAPI_Controller
|
|||||||
|
|
||||||
// Load language phrases
|
// Load language phrases
|
||||||
$this->loadPhrases([
|
$this->loadPhrases([
|
||||||
'ui', 'studierendenantrag', 'lehre'
|
'ui', 'studierendenantrag', 'lehre', 'global'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,11 +98,9 @@ class Prestudent extends FHCAPI_Controller
|
|||||||
'person_id',
|
'person_id',
|
||||||
'berufstaetigkeit_code',
|
'berufstaetigkeit_code',
|
||||||
'ausbildungcode',
|
'ausbildungcode',
|
||||||
'zgv_code',
|
|
||||||
'zgvort',
|
'zgvort',
|
||||||
'zgvdatum',
|
'zgvdatum',
|
||||||
'zgvnation',
|
'zgvnation',
|
||||||
'zgvmas_code',
|
|
||||||
'zgvmaort',
|
'zgvmaort',
|
||||||
'zgvmadatum',
|
'zgvmadatum',
|
||||||
'zgvmanation',
|
'zgvmanation',
|
||||||
@@ -110,7 +108,6 @@ class Prestudent extends FHCAPI_Controller
|
|||||||
'bismelden',
|
'bismelden',
|
||||||
'anmerkung',
|
'anmerkung',
|
||||||
'dual',
|
'dual',
|
||||||
'zgvdoktor_code',
|
|
||||||
'zgvdoktorort',
|
'zgvdoktorort',
|
||||||
'zgvdoktordatum',
|
'zgvdoktordatum',
|
||||||
'zgvdoktornation',
|
'zgvdoktornation',
|
||||||
@@ -125,6 +122,57 @@ class Prestudent extends FHCAPI_Controller
|
|||||||
'standort_code'
|
'standort_code'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// add zgv code fields only if user has permission
|
||||||
|
$this->load->library('PermissionLib');
|
||||||
|
$prestudentres = $this->PrestudentModel->load($prestudent_id);
|
||||||
|
if(!hasData($prestudentres))
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'error_fieldNotFound', ['field' => 'Prestudent ' . $prestudent_id]));
|
||||||
|
}
|
||||||
|
$prestudent = (getData($prestudentres))[0];
|
||||||
|
$bakkZgvStg = $this->permissionlib->getSTG_isEntitledFor('student/editBakkZgv') ?: array();
|
||||||
|
$makkZgvStg = $this->permissionlib->getSTG_isEntitledFor('student/editMakkZgv') ?: array();
|
||||||
|
$dokZgvStg = $this->permissionlib->getSTG_isEntitledFor('student/editDokZgv') ?: array();
|
||||||
|
|
||||||
|
if(in_array($prestudent->studiengang_kz, $bakkZgvStg))
|
||||||
|
{
|
||||||
|
$array_allowed_props_prestudent[] = 'zgv_code';
|
||||||
|
}
|
||||||
|
else if(!is_null($this->input->post('zgv_code')))
|
||||||
|
{
|
||||||
|
$this->terminateWithError(
|
||||||
|
$this->p->t('global', 'zgv')
|
||||||
|
. ' - ' .
|
||||||
|
$this->p->t('ui', 'error_keineBerechtigungStg')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(in_array($prestudent->studiengang_kz, $makkZgvStg))
|
||||||
|
{
|
||||||
|
$array_allowed_props_prestudent[] = 'zgvmas_code';
|
||||||
|
}
|
||||||
|
else if(!is_null($this->input->post('zgvmas_code')))
|
||||||
|
{
|
||||||
|
$this->terminateWithError(
|
||||||
|
$this->p->t('lehre', 'zgvMaster')
|
||||||
|
. ' - ' .
|
||||||
|
$this->p->t('ui', 'error_keineBerechtigungStg')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(in_array($prestudent->studiengang_kz, $dokZgvStg))
|
||||||
|
{
|
||||||
|
$array_allowed_props_prestudent[] = 'zgvdoktor_code';
|
||||||
|
}
|
||||||
|
else if(!is_null($this->input->post('zgvdoktor_code')))
|
||||||
|
{
|
||||||
|
$this->terminateWithError(
|
||||||
|
$this->p->t('lehre', 'zgvDoktor')
|
||||||
|
. ' - ' .
|
||||||
|
$this->p->t('ui', 'error_keineBerechtigungStg')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// add UDFs
|
// add UDFs
|
||||||
$result = $this->udflib->getDefinitionForModel($this->PrestudentModel);
|
$result = $this->udflib->getDefinitionForModel($this->PrestudentModel);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -636,7 +636,7 @@ class Status extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->load->library('PrestudentLib');
|
$this->load->library('PrestudentLib');
|
||||||
|
|
||||||
$this->prestudentlib->setFirstStudent(
|
$resFirstStudent = $this->prestudentlib->setFirstStudent(
|
||||||
$prestudent_id,
|
$prestudent_id,
|
||||||
$lastAufgenommener->studiensemester_kurzbz,
|
$lastAufgenommener->studiensemester_kurzbz,
|
||||||
$lastAufgenommener->ausbildungssemester,
|
$lastAufgenommener->ausbildungssemester,
|
||||||
@@ -645,9 +645,8 @@ class Status extends FHCAPI_Controller
|
|||||||
$this->input->post('statusgrund_id')
|
$this->input->post('statusgrund_id')
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->getDataOrTerminateWithError($result);
|
$this->db->trans_complete();
|
||||||
|
$this->getDataOrTerminateWithError($resFirstStudent);
|
||||||
$this->db->trans_commit();
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(true);
|
return $this->outputJsonSuccess(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(
|
||||||
@@ -136,15 +140,11 @@ class Student extends FHCAPI_Controller
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
$this->PrestudentModel->addSelect(
|
$this->PrestudentModel->addSelect(
|
||||||
"(
|
"public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
|
||||||
SELECT status_kurzbz
|
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
||||||
FROM public.tbl_prestudentstatus pss
|
. ") AS statusofsemester"
|
||||||
WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id
|
|
||||||
AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
|
||||||
ORDER BY GREATEST(pss.datum, '0001-01-01') DESC
|
|
||||||
LIMIT 1
|
|
||||||
) 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');
|
||||||
@@ -547,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');
|
||||||
@@ -798,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,34 +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(
|
|
||||||
"(
|
|
||||||
SELECT status_kurzbz
|
|
||||||
FROM public.tbl_prestudentstatus pss
|
|
||||||
WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id
|
|
||||||
AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
|
||||||
ORDER BY GREATEST(pss.datum, '0001-01-01') DESC
|
|
||||||
LIMIT 1
|
|
||||||
) 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') {
|
||||||
@@ -827,153 +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(
|
|
||||||
"(
|
|
||||||
SELECT status_kurzbz
|
|
||||||
FROM public.tbl_prestudentstatus pss
|
|
||||||
WHERE pss.prestudent_id = public.tbl_prestudent.prestudent_id
|
|
||||||
AND pss.studiensemester_kurzbz = " . $this->PrestudentModel->escape($studiensemester_kurzbz) . "
|
|
||||||
ORDER BY GREATEST(pss.datum, '0001-01-01') DESC
|
|
||||||
LIMIT 1
|
|
||||||
) 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'));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -76,9 +76,7 @@ class Vertrag extends FHCAPI_Controller
|
|||||||
|
|
||||||
if (isError($allOe)) $this->terminateWithError(getError($allOe), self::ERROR_TYPE_GENERAL);
|
if (isError($allOe)) $this->terminateWithError(getError($allOe), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
$allOe = hasData($allOe) ? getData($allOe) : [];
|
$allOe = hasData($allOe) ? array_column(getData($allOe), 'oe_kurzbz') : [];
|
||||||
|
|
||||||
$this->addMeta('oe', $allOe);
|
|
||||||
|
|
||||||
// * then check if the user has permissions to cancel the corresponding lv-organisational units
|
// * then check if the user has permissions to cancel the corresponding lv-organisational units
|
||||||
if (!$this->permissionlib->isBerechtigtMultipleOe('admin', $allOe, 'suid') &&
|
if (!$this->permissionlib->isBerechtigtMultipleOe('admin', $allOe, 'suid') &&
|
||||||
|
|||||||
@@ -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,109 +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" => json_encode([
|
|
||||||
"className" => 'alert-danger',
|
|
||||||
"title" => 'Widget Not Found',
|
|
||||||
"msg" => 'The widget with the id ' . $widget_id . ' could not be found'
|
|
||||||
]),
|
|
||||||
"setup" => json_encode([
|
|
||||||
"name" => 'Widget Not Found',
|
|
||||||
"file" => 'DashboardWidget/Default.js',
|
|
||||||
"width" => 1,
|
|
||||||
"height" => 1
|
|
||||||
])
|
|
||||||
]);
|
|
||||||
return $this->outputJsonSuccess(current(getData($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));
|
|
||||||
|
|
||||||
$this->outputJsonSuccess(getData($result) ?: []);
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->outputJsonSuccess(getData($result) ?: []);
|
|
||||||
}
|
|
||||||
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,913 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class AbgabetoolJob extends JOB_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
|
$this->_ci->load->helper('hlp_sancho_helper');
|
||||||
|
|
||||||
|
$this->_ci->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
||||||
|
$this->_ci->load->model('education/Projektbetreuer_model', 'ProjektbetreuerModel');
|
||||||
|
$this->_ci->load->model('education/Paabgabe_model', 'PaabgabeModel');
|
||||||
|
$this->_ci->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
$this->_ci->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
|
$this->_ci->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||||
|
|
||||||
|
$this->_ci->load->library('SignatureLib');
|
||||||
|
|
||||||
|
$this->_ci->load->config('abgabe');
|
||||||
|
$this->loadPhrases([
|
||||||
|
'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() {
|
||||||
|
|
||||||
|
$this->_ci->logInfo('Start job FHC-Core->notifyAssistenzAboutChangedAbgaben');
|
||||||
|
|
||||||
|
$interval = $this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL');
|
||||||
|
$relevantTypes = $this->_ci->config->item('RELEVANT_PAABGABETYPEN_SAMMELMAIL_ASSISTENZ');
|
||||||
|
// get all new or changed termine in interval
|
||||||
|
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSince($interval, $relevantTypes);
|
||||||
|
|
||||||
|
$retval = getData($result);
|
||||||
|
|
||||||
|
if(count($retval) == 0) {
|
||||||
|
$this->_ci->logInfo("Keine Emails an Assistenzen über neue oder veränderte Termine versandt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// group changed/new abgaben for projektarbeiten
|
||||||
|
$projektarbeiten = [];
|
||||||
|
foreach($retval as $newOrChangedAbgabe) {
|
||||||
|
// Check if the current item has a 'projektarbeit_id' field.
|
||||||
|
// Replace 'projektarbeit_id' with the actual key name if it's different.
|
||||||
|
if (isset($newOrChangedAbgabe->projektarbeit_id)) {
|
||||||
|
$projektarbeitId = $newOrChangedAbgabe->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] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the current row to the array associated with its 'projektarbeit_id'.
|
||||||
|
$projektarbeiten[$projektarbeitId][] = $newOrChangedAbgabe;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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;">';
|
||||||
|
|
||||||
|
foreach($tupelArr as $tupel) {
|
||||||
|
$projektarbeit_id = $tupel[0];
|
||||||
|
$assistenzRow = $tupel[1];
|
||||||
|
|
||||||
|
$betreuerArray = $projektarbeitBetreuerMap[$projektarbeit_id] ?? [];
|
||||||
|
$changedAbgaben = $projektarbeiten[$projektarbeit_id];
|
||||||
|
|
||||||
|
$relevantAbgaben = array_values(array_filter($changedAbgaben, function($abgabetermin) use ($assistenzRow) {
|
||||||
|
if($abgabetermin->updatevon == null && $abgabetermin->insertvon != $assistenzRow->uid) {
|
||||||
|
return $abgabetermin;
|
||||||
|
} else if($abgabetermin->updatevon != null && $abgabetermin->updatevon != $assistenzRow->uid) {
|
||||||
|
return $abgabetermin;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
if(count($relevantAbgaben) == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Format the Student Name
|
||||||
|
$s = $relevantAbgaben[0];
|
||||||
|
$nameParts = [];
|
||||||
|
if (!empty($s->titelpre)) $nameParts[] = $s->titelpre;
|
||||||
|
$nameParts[] = $s->vorname;
|
||||||
|
$nameParts[] = $s->nachname;
|
||||||
|
if (!empty($s->titelpost)) $nameParts[] = $s->titelpost;
|
||||||
|
$studentFullName = implode(' ', $nameParts);
|
||||||
|
|
||||||
|
// Format the Supervisors string
|
||||||
|
$betreuerStrings = [];
|
||||||
|
foreach($betreuerArray as $b) {
|
||||||
|
$bNameParts = [];
|
||||||
|
if (!empty($b->titelpre)) $bNameParts[] = $b->titelpre;
|
||||||
|
$bNameParts[] = $b->vorname;
|
||||||
|
$bNameParts[] = $b->nachname;
|
||||||
|
if (!empty($b->titelpost)) $bNameParts[] = $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: #f8f9fa; border-left: 4px solid #007bff; border-bottom: 1px solid #eee;'>
|
||||||
|
<strong style='font-size: 16px; color: #0056b3;'>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: #eee; text-align: left;">
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 20%;">Zieldatum</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px;">Bezeichnung</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>';
|
||||||
|
|
||||||
|
foreach ($relevantAbgaben as $abgabe) {
|
||||||
|
$dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y');
|
||||||
|
$abgabedatumFormatted = (new DateTime($abgabe->abgabedatum))->format('d.m.Y');
|
||||||
|
$kurzbzLine = !empty($abgabe->kurzbz) ? "<br/><small style='color: #777; font-style: italic;'>{$abgabe->kurzbz}</small>" : "";
|
||||||
|
|
||||||
|
$abgabenString .= "
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>{$dateEmailFormatted}</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px;'>
|
||||||
|
<strong>{$abgabe->bezeichnung}</strong>{$kurzbzLine}
|
||||||
|
</td>
|
||||||
|
</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</tbody></table>';
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</div>';
|
||||||
|
|
||||||
|
// done with building the change list, now send it
|
||||||
|
$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;
|
||||||
|
|
||||||
|
// send email with bundled info
|
||||||
|
sendSanchoMail(
|
||||||
|
'PAAChangesAssSM',
|
||||||
|
$body_fields,
|
||||||
|
$email,
|
||||||
|
$this->p->t('abgabetool', 'changedAbgabeterminev2')
|
||||||
|
);
|
||||||
|
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_ci->logInfo($count . " Emails erfolgreich versandt");
|
||||||
|
$this->_ci->logInfo('End job FHC-Core->notifyAssistenzAboutChangedAbgaben');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function notifyBetreuerAboutChangedAbgaben() {
|
||||||
|
|
||||||
|
$this->_ci->logInfo('Start job FHC-Core->notifyBetreuerAboutChangedAbgaben');
|
||||||
|
|
||||||
|
$interval = $this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL');
|
||||||
|
|
||||||
|
$relevantTypes = $this->_ci->config->item('RELEVANT_PAABGABETYPEN_SAMMELMAIL_BETREUER');
|
||||||
|
|
||||||
|
// get all new or changed termine in interval
|
||||||
|
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSince($interval, $relevantTypes);
|
||||||
|
$retval = getData($result);
|
||||||
|
if(!$retval) {
|
||||||
|
$this->_ci->logInfo("Keine Emails an Betreuer über neue oder veränderte Termine versandt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// group changed/new abgaben for projektarbeiten
|
||||||
|
$projektarbeiten = [];
|
||||||
|
foreach($retval as $newOrChangedAbgabe) {
|
||||||
|
// Check if the current item has a 'projektarbeit_id' field.
|
||||||
|
// Replace 'projektarbeit_id' with the actual key name if it's different.
|
||||||
|
if (isset($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,
|
||||||
|
// initialize it as an empty array.
|
||||||
|
if (!isset($projektarbeiten[$projektarbeitId])) {
|
||||||
|
$projektarbeiten[$projektarbeitId] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the current row to the array associated with its 'projektarbeit_id'.
|
||||||
|
$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
|
||||||
|
$betreuerMap = [];
|
||||||
|
forEach($projektarbeiten as $projektarbeit_id => $abgaben) {
|
||||||
|
$betreuerResult = $this->_ci->ProjektbetreuerModel->getAllBetreuerOfProjektarbeit($projektarbeit_id);
|
||||||
|
|
||||||
|
forEach($betreuerResult->retval as $betreuerRow) {
|
||||||
|
if (!isset($betreuerMap[$betreuerRow->person_id])) {
|
||||||
|
$betreuerMap[$betreuerRow->person_id] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the current betreuerRow to the betreuerMap as an array associated with its projektarbeit_id.
|
||||||
|
$betreuerMap[$betreuerRow->person_id][] = [$projektarbeit_id, $betreuerRow];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
|
// now iterate over the betreuerMap and build 1 email about all projektarbeiten and their new/changed termine
|
||||||
|
// $tupel = [$projektarbeit_id, $betreuerRow], each betreuer has 0..n [projektarbeit_id, changedAbgaben] tupel
|
||||||
|
forEach($betreuerMap as $betreuer_person_id => $tupelArr) {
|
||||||
|
|
||||||
|
// start the container
|
||||||
|
$abgabenString = '<div style="font-family: Arial, sans-serif; color: #333;">';
|
||||||
|
|
||||||
|
$result = $this->_ci->ProjektarbeitModel->getProjektbetreuerAnrede($betreuer_person_id);
|
||||||
|
$data = getData($result)[0];
|
||||||
|
|
||||||
|
$anrede = $data->anrede;
|
||||||
|
$anredeFillString = $data->anrede == "Herr" ? "r" : "";
|
||||||
|
$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) {
|
||||||
|
$projektarbeit_id = $tupel[0];
|
||||||
|
$betreuerRow = $tupel[1];
|
||||||
|
|
||||||
|
$changedAbgaben = $projektarbeiten[$projektarbeit_id];
|
||||||
|
|
||||||
|
$relevantAbgaben = array_values(array_filter($changedAbgaben, function($abgabetermin) use ($betreuerRow) {
|
||||||
|
if($abgabetermin->updatevon == null && $abgabetermin->insertvon != $betreuerRow->uid) {
|
||||||
|
return $abgabetermin;
|
||||||
|
} else if($abgabetermin->updatevon != null && $abgabetermin->updatevon != $betreuerRow->uid) {
|
||||||
|
return $abgabetermin;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
if(count($relevantAbgaben) == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$relevantCounter++;
|
||||||
|
|
||||||
|
// format the Student Name
|
||||||
|
$s = $relevantAbgaben[0];
|
||||||
|
$nameParts = [];
|
||||||
|
if (!empty($s->titelpre)) $nameParts[] = $s->titelpre;
|
||||||
|
$nameParts[] = $s->vorname;
|
||||||
|
$nameParts[] = $s->nachname;
|
||||||
|
if (!empty($s->titelpost)) $nameParts[] = $s->titelpost;
|
||||||
|
$studentFullName = implode(' ', $nameParts);
|
||||||
|
|
||||||
|
$projektarbeit_titel = $s->titel ?? 'Kein Titel vergeben';
|
||||||
|
|
||||||
|
// project header section
|
||||||
|
$abgabenString .= "
|
||||||
|
<div style='margin-top: 25px; padding: 12px; background-color: #f8f9fa; border-left: 4px solid #007bff; border-bottom: 1px solid #eee;'>
|
||||||
|
<strong style='font-size: 16px; color: #0056b3;'>Projekt: {$projektarbeit_titel}</strong><br/>
|
||||||
|
<div style='margin-top: 5px; font-size: 14px;'>
|
||||||
|
<strong>Studierende/r:</strong> {$studentFullName}
|
||||||
|
</div>
|
||||||
|
<span style='color: #666; font-size: 12px;'>
|
||||||
|
ID: {$projektarbeit_id} | Rolle: {$betreuerRow->betreuerart_kurzbz} |
|
||||||
|
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: #eee; text-align: left;">
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 20%;">Zieldatum</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px;">Bezeichnung</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>';
|
||||||
|
|
||||||
|
foreach ($relevantAbgaben as $abgabe) {
|
||||||
|
$dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y');
|
||||||
|
$abgabedatumFormatted = (new DateTime($abgabe->abgabedatum))->format('d.m.Y');
|
||||||
|
$kurzbzLine = !empty($abgabe->kurzbz) ? "<br/><small style='color: #777; font-style: italic;'>{$abgabe->kurzbz}</small>" : "";
|
||||||
|
|
||||||
|
$abgabenString .= "
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>{$dateEmailFormatted}</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px;'>
|
||||||
|
<strong>{$abgabe->bezeichnung}</strong>{$kurzbzLine}
|
||||||
|
</td>
|
||||||
|
</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</tbody></table>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// close container
|
||||||
|
$abgabenString .= '</div>';
|
||||||
|
|
||||||
|
// done with building the change list, now send it
|
||||||
|
$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');
|
||||||
|
$url = CIS_ROOT.$path;
|
||||||
|
|
||||||
|
$body_fields = array(
|
||||||
|
'anrede' => $anrede,
|
||||||
|
'anredeFillString' => $anredeFillString,
|
||||||
|
'fullFormattedNameString' => $fullFormattedNameString,
|
||||||
|
'abgabenString' => $abgabenString,
|
||||||
|
'linkAbgabetool' => $url
|
||||||
|
);
|
||||||
|
|
||||||
|
$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
|
||||||
|
sendSanchoMail(
|
||||||
|
'PAAChangesBetSM',
|
||||||
|
$body_fields,
|
||||||
|
$email,
|
||||||
|
$this->p->t('abgabetool', 'changedAbgabeterminev2')
|
||||||
|
);
|
||||||
|
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_ci->logInfo($count . " Emails erfolgreich versandt");
|
||||||
|
$this->_ci->logInfo('End job FHC-Core->notifyBetreuerAboutChangedAbgaben');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function notifyBetreuerMail() {
|
||||||
|
// send all new projektarbeit abgabe UPLOADS since the last job run to the related betreuer
|
||||||
|
// this job gathers all new or changed file uploads via field 'abgabedatum', enduploads still
|
||||||
|
// send an email directly after happening since they are kind of important
|
||||||
|
|
||||||
|
$this->_ci->logInfo('Start job FHC-Core->notifyBetreuerMail');
|
||||||
|
|
||||||
|
// dont filter for relevant types since this mail should gather all UPLOAD info
|
||||||
|
|
||||||
|
$interval = $this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL');
|
||||||
|
|
||||||
|
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSinceByAbgabedatum($interval);
|
||||||
|
$retval = getData($result);
|
||||||
|
|
||||||
|
// retval are paabgaben joined with projektarbeit and betreuer
|
||||||
|
if(count($retval) == 0) {
|
||||||
|
$this->logInfo("Keine Emails über neue Paabgaben an Betreuer versandt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// group contents per betreuer person_id
|
||||||
|
$betreuer_uids = [];
|
||||||
|
forEach($retval as $paabgabe) {
|
||||||
|
if(!isset($betreuer_uids[$paabgabe->person_id])) {
|
||||||
|
$betreuer_uids[$paabgabe->person_id] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$betreuer_uids[$paabgabe->person_id][] = $paabgabe;
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
|
forEach ($betreuer_uids as $person_id => $abgaben) {
|
||||||
|
// $person_id is from betreuer
|
||||||
|
|
||||||
|
$result = $this->_ci->ProjektarbeitModel->getProjektbetreuerAnrede($person_id);
|
||||||
|
$data = getData($result)[0];
|
||||||
|
|
||||||
|
$anrede = $data->anrede;
|
||||||
|
$anredeFillString = $data->anrede == "Herr" ? "r" : "";
|
||||||
|
$fullFormattedNameString = $data->first;
|
||||||
|
|
||||||
|
// sorting $abgaben array by datum
|
||||||
|
usort($abgaben, function ($a, $b) {
|
||||||
|
return strtotime($a->datum) <=> strtotime($b->datum);
|
||||||
|
});
|
||||||
|
|
||||||
|
$projektarbeit_titel = $abgaben[0]->titel;
|
||||||
|
|
||||||
|
// initialize the table and headers
|
||||||
|
$abgabenString = '
|
||||||
|
<table style="width: 100%; border-collapse: collapse; font-family: Arial, sans-serif; color: #333; margin-top: 15px; margin-bottom: 15px;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background-color: #f2f2f2; text-align: left;">
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 15%;">Zieldatum</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 25%;">Studierende/r</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px;">Bezeichnung</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 15%;">Abgabedatum</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>';
|
||||||
|
|
||||||
|
foreach ($abgaben as $abgabe) {
|
||||||
|
// format the student name
|
||||||
|
$nameParts = [];
|
||||||
|
if (!empty($abgabe->titelpre)) $nameParts[] = $abgabe->titelpre;
|
||||||
|
$nameParts[] = $abgabe->vorname;
|
||||||
|
$nameParts[] = $abgabe->nachname;
|
||||||
|
if (!empty($abgabe->titelpost)) $nameParts[] = $abgabe->titelpost;
|
||||||
|
$studentFullName = implode(' ', $nameParts);
|
||||||
|
|
||||||
|
// format dates inline
|
||||||
|
$dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y');
|
||||||
|
$abgabedatumFormatted = (new DateTime($abgabe->abgabedatum))->format('d.m.Y');
|
||||||
|
|
||||||
|
// handle the optional Kurzbezeichnung
|
||||||
|
$kurzbzLine = !empty($abgabe->kurzbz) ? "<br/><small style='color: #666; font-style: italic;'>{$abgabe->kurzbz}</small>" : "";
|
||||||
|
|
||||||
|
$abgabenString .= "
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>{$dateEmailFormatted}</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>{$studentFullName}</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px;'>
|
||||||
|
<strong>{$abgabe->bezeichnung}</strong>{$kurzbzLine}
|
||||||
|
</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>{$abgabedatumFormatted}</td>
|
||||||
|
</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</tbody></table>';
|
||||||
|
|
||||||
|
$path = $this->_ci->config->item('URL_MITARBEITER');
|
||||||
|
$url = CIS_ROOT.$path;
|
||||||
|
|
||||||
|
$body_fields = array(
|
||||||
|
'anrede' => $anrede,
|
||||||
|
'anredeFillString' => $anredeFillString,
|
||||||
|
'fullFormattedNameString' => $fullFormattedNameString,
|
||||||
|
'paTitel' => $projektarbeit_titel,
|
||||||
|
'abgabenString' => $abgabenString,
|
||||||
|
'linkAbgabetool' => $url
|
||||||
|
);
|
||||||
|
|
||||||
|
$result = $this->_ci->ProjektbetreuerModel->getBetreuerOfProjektarbeit($abgaben[0]->projektarbeit_id, $abgaben[0]->betreuerart_kurzbz);
|
||||||
|
$data = getData($result)[0];
|
||||||
|
|
||||||
|
$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
|
||||||
|
sendSanchoMail(
|
||||||
|
'PaabgabeUpdatesBetSM',
|
||||||
|
$body_fields,
|
||||||
|
$email,
|
||||||
|
$this->p->t('abgabetool', 'changedAbgabeterminev2')
|
||||||
|
);
|
||||||
|
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_ci->logInfo($count . " Emails erfolgreich versandt");
|
||||||
|
$this->_ci->logInfo('End job FHC-Core->notifyBetreuerMail');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function notifyStudentMail()
|
||||||
|
{
|
||||||
|
// send all new projektarbeit abgabe since the last job run to the related student
|
||||||
|
|
||||||
|
$this->_ci->logInfo('Start job FHC-Core->notifyStudentMail');
|
||||||
|
|
||||||
|
$interval = $this->_ci->config->item('PAABGABE_EMAIL_JOB_INTERVAL');
|
||||||
|
|
||||||
|
$relevantTypes = $this->_ci->config->item('RELEVANT_PAABGABETYPEN_SAMMELMAIL_STUDENT');
|
||||||
|
|
||||||
|
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSince($interval, $relevantTypes);
|
||||||
|
$retval = getData($result);
|
||||||
|
|
||||||
|
if(count($retval) == 0) {
|
||||||
|
$this->_ci->logInfo("Keine Emails an Studenten versandt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// group results per projektarbeit/student_uid
|
||||||
|
$student_uids = [];
|
||||||
|
forEach($retval as $paabgabe) {
|
||||||
|
if(!isset($student_uids[$paabgabe->student_uid])) {
|
||||||
|
$student_uids[$paabgabe->student_uid] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$student_uids[$paabgabe->student_uid][] = $paabgabe;
|
||||||
|
}
|
||||||
|
|
||||||
|
$count = 0;
|
||||||
|
foreach ($student_uids as $uid => $abgaben) {
|
||||||
|
// $uid is the student's UID
|
||||||
|
$result = $this->_ci->StudentModel->getEmailAnredeForStudentUID($uid);
|
||||||
|
$data = getData($result)[0];
|
||||||
|
|
||||||
|
// $abgabe is the array of paabgabe objects
|
||||||
|
$anredeFillString = $data->anrede=="Herr"?"r":"";
|
||||||
|
$fullFormattedNameString = trim($data->titelpre." ".$data->vorname." ".$data->vornamen." ".$data->nachname." ".$data->titelpost);
|
||||||
|
|
||||||
|
// https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.spaceship-op
|
||||||
|
// php has spaceships 🚀🚀🚀🚀🚀
|
||||||
|
usort($abgaben, function($a, $b) {
|
||||||
|
return strtotime($a->datum) <=> strtotime($b->datum);
|
||||||
|
});
|
||||||
|
|
||||||
|
$projektarbeit_titel = $abgaben[0]->titel;
|
||||||
|
|
||||||
|
// initialize the table and headers
|
||||||
|
$abgabenString = '
|
||||||
|
<table style="width: 100%; border-collapse: collapse; font-family: Arial, sans-serif; color: #333; margin-top: 15px; margin-bottom: 15px;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background-color: #f2f2f2; text-align: left;">
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px; width: 25%;">Zieldatum</th>
|
||||||
|
<th style="padding: 10px; border: 1px solid #ddd; font-size: 13px;">Bezeichnung / Hinweis</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>';
|
||||||
|
|
||||||
|
foreach ($abgaben as $abgabe) {
|
||||||
|
$dateEmailFormatted = (new DateTime($abgabe->datum))->format('d.m.Y');
|
||||||
|
|
||||||
|
// handle the optional Kurzbezeichnung
|
||||||
|
$kurzbzLine = !empty($abgabe->kurzbz) ? "<br/><small style='color: #666; font-style: italic;'>{$abgabe->kurzbz}</small>" : "";
|
||||||
|
|
||||||
|
$abgabenString .= "
|
||||||
|
<tr>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px; vertical-align: top;'>
|
||||||
|
{$dateEmailFormatted}
|
||||||
|
</td>
|
||||||
|
<td style='padding: 10px; border: 1px solid #ddd; font-size: 13px;'>
|
||||||
|
<strong>{$abgabe->bezeichnung}</strong>{$kurzbzLine}
|
||||||
|
</td>
|
||||||
|
</tr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$abgabenString .= '</tbody></table>';
|
||||||
|
|
||||||
|
$route = $this->_ci->config->item('URL_STUDENTS');
|
||||||
|
$url = CIS_ROOT.$route;
|
||||||
|
|
||||||
|
$body_fields = array(
|
||||||
|
'anrede' => $data->anrede,
|
||||||
|
'anredeFillString' => $anredeFillString,
|
||||||
|
'fullFormattedNameString' => $fullFormattedNameString,
|
||||||
|
'paTitel' => $projektarbeit_titel,
|
||||||
|
'abgabenString' => $abgabenString,
|
||||||
|
'linkAbgabetool' => $url
|
||||||
|
);
|
||||||
|
|
||||||
|
// send email with bundled info
|
||||||
|
sendSanchoMail(
|
||||||
|
'PaabgabeUpdatesSammelmail',
|
||||||
|
$body_fields,
|
||||||
|
$uid.'@'.DOMAIN,
|
||||||
|
$this->p->t('abgabetool', 'changedAbgabeterminev2')
|
||||||
|
);
|
||||||
|
|
||||||
|
$count++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_ci->logInfo($count . " Emails erfolgreich versandt");
|
||||||
|
$this->_ci->logInfo('End job FHC-Core->notifyStudentMail');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ class FHCAPI_Controller extends Auth_Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
// Security
|
// Security Begin
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -287,4 +287,31 @@ class FHCAPI_Controller extends Auth_Controller
|
|||||||
'required_permissions' => $this->_rpsToString($requiredPermissions, $this->router->method)
|
'required_permissions' => $this->_rpsToString($requiredPermissions, $this->router->method)
|
||||||
], self::ERROR_TYPE_AUTH);
|
], self::ERROR_TYPE_AUTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------
|
||||||
|
// Security End
|
||||||
|
// ---------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks the client's total request size (Content-Length) against the minimum
|
||||||
|
* effective PHP limit (min of upload_max_filesize, post_max_size, memory_limit).
|
||||||
|
* This preempts failures that result in vague "missing parameters" errors on large files.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function checkUploadSize() {
|
||||||
|
// this number represents bytes
|
||||||
|
$content_length_bytes = (int)$this->input->server('CONTENT_LENGTH');
|
||||||
|
$content_length = $content_length_bytes / 1000000;
|
||||||
|
|
||||||
|
//get max serverside size upload -> this comes in megabytes
|
||||||
|
$max_upload = (int)(ini_get('upload_max_filesize'));
|
||||||
|
$max_post = (int)(ini_get('post_max_size'));
|
||||||
|
$memory_limit = (int)(ini_get('memory_limit'));
|
||||||
|
$max_upload_mb = min($max_upload, $max_post, $memory_limit); // smallest of 3 config values
|
||||||
|
|
||||||
|
if($content_length >= $max_upload_mb) {
|
||||||
|
$this->terminateWithError($this->p->t('global', 'filesizeExceeded'), 'general');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -185,7 +185,15 @@ function generateJSModulesInclude($JSModules)
|
|||||||
|
|
||||||
for ($tmpJSsCounter = 0; $tmpJSsCounter < count($tmpJSs); $tmpJSsCounter++)
|
for ($tmpJSsCounter = 0; $tmpJSsCounter < count($tmpJSs); $tmpJSsCounter++)
|
||||||
{
|
{
|
||||||
$toPrint = sprintf($jsInclude, base_url($tmpJSs[$tmpJSsCounter].$cachetoken)).PHP_EOL;
|
if($ci->config->item('use_fhcomplete_build_version_in_path'))
|
||||||
|
{
|
||||||
|
$relurl = preg_replace('#public/#', 'public/' . $ci->config->item('fhcomplete_build_version') . '/', $tmpJSs[$tmpJSsCounter]);
|
||||||
|
$toPrint = sprintf($jsInclude, base_url($relurl)).PHP_EOL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$toPrint = sprintf($jsInclude, base_url($tmpJSs[$tmpJSsCounter].$cachetoken)).PHP_EOL;
|
||||||
|
}
|
||||||
|
|
||||||
if ($tmpJSsCounter > 0) $toPrint = "\t\t".$toPrint;
|
if ($tmpJSsCounter > 0) $toPrint = "\t\t".$toPrint;
|
||||||
|
|
||||||
@@ -250,6 +258,232 @@ function generateSkipLink($skipID)
|
|||||||
function absoluteJsImportUrl($relurl)
|
function absoluteJsImportUrl($relurl)
|
||||||
{
|
{
|
||||||
$ci =& get_instance();
|
$ci =& get_instance();
|
||||||
$url = base_url($relurl) . '?'. $ci->config->item('fhcomplete_build_version');
|
$ci->load->config('javascript');
|
||||||
|
if($ci->config->item('use_fhcomplete_build_version_in_path'))
|
||||||
|
{
|
||||||
|
$url = base_url(preg_replace('#^public/#', 'public/' . $ci->config->item('fhcomplete_build_version') . '/', $relurl));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$url = base_url($relurl) . '?'. $ci->config->item('fhcomplete_build_version');
|
||||||
|
}
|
||||||
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
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user