mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-25 08:34:29 +00:00
Compare commits
812
Commits
demo
...
demo-cis40
| 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 | ||
|
|
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 | ||
|
|
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 | ||
|
|
ee41b2b68d | ||
|
|
df124db84a | ||
|
|
29a4b4aadc | ||
|
|
2682ea75ab | ||
|
|
b3a63a60e9 | ||
|
|
a54dfaf0c7 | ||
|
|
595538d6bb | ||
|
|
a5329e5bba | ||
|
|
37a79c4589 | ||
|
|
5ef1dccfc9 | ||
|
|
dd760f8210 | ||
|
|
6d28b8986d | ||
|
|
dd87e893ba | ||
|
|
b43f1ec920 | ||
|
|
c3d20bb181 | ||
|
|
c0b685c77b | ||
|
|
a4b1104abf | ||
|
|
4b767d4a57 | ||
|
|
127ce312ea | ||
|
|
5d461a72f6 | ||
|
|
2237e9f1b7 | ||
|
|
9b4fa132dc | ||
|
|
daf332a102 | ||
|
|
5a6d20f817 | ||
|
|
6b816def31 | ||
|
|
5fbcf588ed | ||
|
|
942b4512fe | ||
|
|
3778b27574 | ||
|
|
15b340db56 | ||
|
|
fc4e79c1f5 | ||
|
|
41b2a6d1d4 | ||
|
|
ce5da22180 | ||
|
|
05b2c3c42b | ||
|
|
e054f1222b | ||
|
|
56a6aa993e | ||
|
|
db75cd2f62 | ||
|
|
c57eb1b8de | ||
|
|
2dd732b924 | ||
|
|
f1dbc6ab7d | ||
|
|
c127c0900e | ||
|
|
d1015956d1 | ||
|
|
726fce9fac | ||
|
|
fc01fa045e | ||
|
|
3578e01838 | ||
|
|
2681a85fa5 | ||
|
|
9a0716af44 | ||
|
|
dc642cfbe7 | ||
|
|
b98e831300 | ||
|
|
0d73824727 | ||
|
|
f068b56083 | ||
|
|
fa7a125727 | ||
|
|
110f73e622 | ||
|
|
bb0d118284 | ||
|
|
701ccadff3 | ||
|
|
34555504df | ||
|
|
1a0a5c652b | ||
|
|
d1f5220925 | ||
|
|
decd514b22 | ||
|
|
6cf7093293 | ||
|
|
17f11fa871 | ||
|
|
96812868a4 | ||
|
|
40c79158f7 | ||
|
|
f4f645b103 | ||
|
|
37395b70f6 | ||
|
|
a65cb3b03c | ||
|
|
054663ee00 | ||
|
|
779641e8e7 | ||
|
|
81eee814e9 | ||
|
|
390a3c0d5a | ||
|
|
695dd655c0 | ||
|
|
27a91de5f6 | ||
|
|
7ccc26c878 | ||
|
|
9ebc847e8e | ||
|
|
a5188ce24a | ||
|
|
511b04c1f8 | ||
|
|
ec90d35e02 | ||
|
|
05838cc477 | ||
|
|
c34ffedb42 | ||
|
|
96e02c9911 | ||
|
|
248fceb4b5 | ||
|
|
b5382b1bdf | ||
|
|
519cbc7601 | ||
|
|
c56d323cd3 | ||
|
|
92697d9468 | ||
|
|
d1ec9c92eb | ||
|
|
ac4cdb44de | ||
|
|
39a96885d2 | ||
|
|
4f104523ff | ||
|
|
96dbec3218 | ||
|
|
4b29e7bf8d | ||
|
|
02153e469f | ||
|
|
957da460a6 | ||
|
|
8f9f447acf | ||
|
|
2cee36d7b5 | ||
|
|
454cf5ea64 | ||
|
|
4563533e67 | ||
|
|
ed69bd74ed | ||
|
|
f0641ddd6d | ||
|
|
640e719eda | ||
|
|
aece2b1d90 | ||
|
|
6c2a2e4665 | ||
|
|
43925e3088 | ||
|
|
5e929df966 | ||
|
|
1c236cce02 | ||
|
|
38e8f91fdf | ||
|
|
4956a517ca | ||
|
|
cb13655ecd | ||
|
|
9b3b6cec8f | ||
|
|
3ca1a1f1c7 | ||
|
|
a7210208d6 | ||
|
|
eaad23ff69 | ||
|
|
c7ddf0a2a9 | ||
|
|
455e0533fe | ||
|
|
a8c4fc7607 | ||
|
|
b129ef873b | ||
|
|
d927426d70 | ||
|
|
d9c7df736c | ||
|
|
a26bdfe385 | ||
|
|
9ced137ded | ||
|
|
73244df019 | ||
|
|
91d24ebae8 | ||
|
|
6861e26ed6 | ||
|
|
a89da50e0a | ||
|
|
9256046b6c | ||
|
|
fd95dd8023 | ||
|
|
cda2b84939 | ||
|
|
34242e12ea | ||
|
|
d893fe63e7 | ||
|
|
5aedf85982 | ||
|
|
55ab79c004 | ||
|
|
7c7a72600d | ||
|
|
bd67e41aa6 | ||
|
|
df63b8c1b7 | ||
|
|
01357654c0 | ||
|
|
cd5900481b | ||
|
|
601c6c53e7 | ||
|
|
b7ba740a3a | ||
|
|
ddef97d49f | ||
|
|
707d00b280 | ||
|
|
9c79d728e8 | ||
|
|
9c8a1f564e | ||
|
|
47b0449f22 | ||
|
|
0193460678 | ||
|
|
e02b3e78d2 | ||
|
|
a6167583a3 | ||
|
|
c91e0a6b74 | ||
|
|
c6852a9514 | ||
|
|
04b5240615 | ||
|
|
483547cd9c | ||
|
|
345413cd1f | ||
|
|
f57dc6785b | ||
|
|
046a60b89c | ||
|
|
da725e3ab1 | ||
|
|
edd34941cc | ||
|
|
c65686ef42 | ||
|
|
c7729f85df | ||
|
|
97126553f0 | ||
|
|
53b187c9b6 | ||
|
|
7bc18e41b1 | ||
|
|
8bc17eded5 | ||
|
|
9adeb1c63a | ||
|
|
091ed0dacd | ||
|
|
4014083238 | ||
|
|
da03e11071 | ||
|
|
ba6224bc78 | ||
|
|
f69016883c | ||
|
|
1e68eb0b90 | ||
|
|
332efd4106 | ||
|
|
cf0a47cab7 | ||
|
|
bb7b24346a | ||
|
|
f303191c54 | ||
|
|
a68e2e798b | ||
|
|
bd49f3c420 | ||
|
|
3c1d67267d | ||
|
|
d6c7f16ceb | ||
|
|
61e1933a5b | ||
|
|
f1912fe739 | ||
|
|
25c443098c | ||
|
|
cf59bcff12 | ||
|
|
c10baca137 | ||
|
|
2f7fe05d21 | ||
|
|
ee4b61f549 | ||
|
|
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 | ||
|
|
fe7feeb74e | ||
|
|
b2419beca6 | ||
|
|
b752b475d9 | ||
|
|
658fe79ad7 | ||
|
|
5bbf05ac8a | ||
|
|
92a08cebad | ||
|
|
1dba4be23f | ||
|
|
738c819272 | ||
|
|
d542cf7720 | ||
|
|
ed39127f31 |
@@ -23,6 +23,15 @@ Events::on('loadRenderers', function ($renderers) {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Events::on('loadRenderers', function ($renderers) {
|
||||||
|
$fhc_core_renderers =& $renderers();
|
||||||
|
$fhc_core_renderers["slot_room"] = array(
|
||||||
|
'modalTitle' => APP_ROOT.'public/js/components/Cis/Renderer/Slot/roomModalTitle.js',
|
||||||
|
'modalContent' => APP_ROOT.'public/js/components/Cis/Renderer/Slot/roomModalContent.js',
|
||||||
|
'calendarEventStyles' => APP_ROOT.'public/css/Cis4/CoreCalendarEvents.css'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
Events::on('loadRenderers', function ($renderers) {
|
Events::on('loadRenderers', function ($renderers) {
|
||||||
$fhc_core_renderers =& $renderers();
|
$fhc_core_renderers =& $renderers();
|
||||||
$fhc_core_renderers["ferien"] = array(
|
$fhc_core_renderers["ferien"] = array(
|
||||||
|
|||||||
@@ -170,6 +170,13 @@ $config['navigation_header'] = array(
|
|||||||
'expand' => true,
|
'expand' => true,
|
||||||
'sort' => 51,
|
'sort' => 51,
|
||||||
'requiredPermissions' => 'vertrag/mitarbeiter:r'
|
'requiredPermissions' => 'vertrag/mitarbeiter:r'
|
||||||
|
),
|
||||||
|
'studierendenverwaltung' => array(
|
||||||
|
'link' => site_url('studentenverwaltung'),
|
||||||
|
'description' => 'Studierendenverwaltung',
|
||||||
|
'expand' => true,
|
||||||
|
'sort' => 52,
|
||||||
|
'requiredPermissions' => ['admin:r', 'assistenz:r']
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
@@ -208,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'
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
// 'entschuldigt' & 'noch nicht eingetragen' -> wirken sich nicht auf Antritte aus
|
||||||
|
$config['NOTEN_OHNE_ANTRITT'] = [9, 17]; // tbl_note pk
|
||||||
|
|
||||||
|
$config['NOTEN_OCCURANCE_LIMIT_MAP'] = [17 => 1]; // across the 4 fixed antritte only one can be entschuldigt
|
||||||
|
|
||||||
|
// tbl_note pk of the 'entschuldigt' note. An entschuldigt Termin is preserved as its own dated
|
||||||
|
// entry when a new pruefung of the same type is created (instead of being overwritten).
|
||||||
|
$config['NOTE_ENTSCHULDIGT'] = 17;
|
||||||
|
|
||||||
|
// availability of the two Benotungstool import flows. When both are true they are shown as
|
||||||
|
// separate buttons/dialogs.
|
||||||
|
$config['CIS_GESAMTNOTE_PRUEFUNGSIMPORT'] = true; // dated import that creates a pruefung per row
|
||||||
|
$config['CIS_GESAMTNOTE_NOTENIMPORT'] = false; // classic note-only import (uid + note, no date)
|
||||||
@@ -64,6 +64,10 @@ $route['api/v1/system/[S|s]prache/(:any)'] = 'api/v1/system/sprache2/$1';
|
|||||||
$route['Cis/LvPlan/.*'] = 'Cis/LvPlan/index/$1';
|
$route['Cis/LvPlan/.*'] = 'Cis/LvPlan/index/$1';
|
||||||
$route['Cis/MyLvPlan/.*'] = 'Cis/MyLvPlan/index/$1';
|
$route['Cis/MyLvPlan/.*'] = 'Cis/MyLvPlan/index/$1';
|
||||||
$route['Cis/MyLv/.*'] = 'Cis/MyLv/index/$1';
|
$route['Cis/MyLv/.*'] = 'Cis/MyLv/index/$1';
|
||||||
|
$route['Cis/OtherLvPlan/.*'] = 'Cis/OtherLvPlan/index/$1';
|
||||||
|
//Route for LV Plan Stg/Semester/Verband/Gruppe
|
||||||
|
$route['Cis/StgOrgLvPlan/.*'] = 'Cis/StgOrgLvPlan/index/$1';
|
||||||
|
$route['Cis/Benotungstool/.*'] = 'Cis/Benotungstool/index/$1';
|
||||||
|
|
||||||
$route['Abgabetool/Assistenz'] = 'Cis/Abgabetool/Assistenz';
|
$route['Abgabetool/Assistenz'] = 'Cis/Abgabetool/Assistenz';
|
||||||
$route['Abgabetool/Assistenz/(:any)'] = 'Cis/Abgabetool/Assistenz/$1';
|
$route['Abgabetool/Assistenz/(:any)'] = 'Cis/Abgabetool/Assistenz/$1';
|
||||||
|
|||||||
@@ -22,8 +22,9 @@ unset($config['student']['searchfields']['email']);
|
|||||||
unset($config['student']['searchfields']['tel']);
|
unset($config['student']['searchfields']['tel']);
|
||||||
$config['student']['resultfields'] = [
|
$config['student']['resultfields'] = [
|
||||||
"s.student_uid AS uid",
|
"s.student_uid AS uid",
|
||||||
"s.matrikelnr",
|
"s.matrikelnr AS personenkennzeichen",
|
||||||
"p.person_id",
|
"p.person_id",
|
||||||
|
"p.matr_nr AS matrikelnummer",
|
||||||
"(p.vorname || ' ' || p.nachname) AS name",
|
"(p.vorname || ' ' || p.nachname) AS name",
|
||||||
"ARRAY[s.student_uid || '@' || '" . DOMAIN . "'] AS email",
|
"ARRAY[s.student_uid || '@' || '" . DOMAIN . "'] AS email",
|
||||||
"CASE
|
"CASE
|
||||||
|
|||||||
@@ -168,3 +168,32 @@ $config['stgkz_blacklist_wiederholung'] = [];
|
|||||||
* @var array An array of noten ids
|
* @var array An array of noten ids
|
||||||
*/
|
*/
|
||||||
$config['note_blacklist_wiederholung'] = [];
|
$config['note_blacklist_wiederholung'] = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable/disable the Abmeldung StG process
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
$config['abmeldung_stg_enabled'] = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable/disable the Abmeldung process
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
$config['abmeldung_enabled'] = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable/disable the Unterbrecher process
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
$config['unterbrechung_enabled'] = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable/disable the Wiederholer process
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
$config['wiederholung_enabled'] = true;
|
||||||
|
|
||||||
|
|||||||
@@ -133,13 +133,21 @@ $config['students_tab_order'] = [
|
|||||||
|
|
||||||
$config['stv_prestudent_tags'] = [
|
$config['stv_prestudent_tags'] = [
|
||||||
'prioone' => ['readonly' => false],
|
'prioone' => ['readonly' => false],
|
||||||
'priotwo' => ['readonly' => true],
|
'priotwo' => ['readonly' => false],
|
||||||
'hinweis' => ['readonly' => false],
|
'hinweis' => ['readonly' => false],
|
||||||
'hinweis_assistenz' => ['readonly' => true],
|
'hinweis_assistenz' => ['readonly' => false],
|
||||||
'hinweis_kf' => ['readonly' => true],
|
'hinweis_kf' => ['readonly' => false],
|
||||||
'hinweis_lehrende' => ['readonly' => false],
|
'hinweis_lehrende' => ['readonly' => false],
|
||||||
'hinweis_stg_kf' => ['readonly' => true],
|
'hinweis_stg_kf' => ['readonly' => false],
|
||||||
'finished_stg' => ['readonly' => true],
|
'finished_stg' => ['readonly' => false],
|
||||||
'finished_kf' => ['readonly' => true],
|
'finished_kf' => ['readonly' => false],
|
||||||
'inwork_kf' => ['readonly' => true],
|
'inwork_kf' => ['readonly' => false],
|
||||||
|
'dd_auto' => ['readonly' => true],
|
||||||
|
'wh_auto' => ['readonly' => true],
|
||||||
|
'prewh_auto' => ['readonly' => true],
|
||||||
|
'out_auto' => ['readonly' => true],
|
||||||
|
'zgv_auto' => ['readonly' => true],
|
||||||
|
'unterbrecher_auto' => ['readonly' => true],
|
||||||
|
'stbtr_erh_auto' => ['readonly' => true],
|
||||||
|
'jgv_auto' => ['readonly' => true],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -31,12 +31,8 @@ class Abgabetool extends Auth_Controller
|
|||||||
{
|
{
|
||||||
// TODO: routing from index based on berechtigung?
|
// TODO: routing from index based on berechtigung?
|
||||||
|
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if(defined('CIS4') && CIS4) {
|
if(defined('CIS4') && CIS4) {
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Abgabetool']);
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'Abgabetool']);
|
||||||
} else {
|
} else {
|
||||||
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'Abgabetool']);
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'Abgabetool']);
|
||||||
}
|
}
|
||||||
@@ -44,12 +40,8 @@ class Abgabetool extends Auth_Controller
|
|||||||
|
|
||||||
public function Student($student_uid_prop = '')
|
public function Student($student_uid_prop = '')
|
||||||
{
|
{
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if(defined('CIS4') && CIS4) {
|
if(defined('CIS4') && CIS4) {
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolStudent']);
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'AbgabetoolStudent']);
|
||||||
} else {
|
} else {
|
||||||
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolStudent', 'student_uid_prop' => $student_uid_prop]);
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolStudent', 'student_uid_prop' => $student_uid_prop]);
|
||||||
}
|
}
|
||||||
@@ -57,12 +49,8 @@ class Abgabetool extends Auth_Controller
|
|||||||
|
|
||||||
public function Mitarbeiter()
|
public function Mitarbeiter()
|
||||||
{
|
{
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if(defined('CIS4') && CIS4) {
|
if(defined('CIS4') && CIS4) {
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolMitarbeiter']);
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'AbgabetoolMitarbeiter']);
|
||||||
} else {
|
} else {
|
||||||
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolMitarbeiter']);
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolMitarbeiter']);
|
||||||
}
|
}
|
||||||
@@ -70,13 +58,8 @@ class Abgabetool extends Auth_Controller
|
|||||||
|
|
||||||
public function Assistenz($stg_kz_prop = '')
|
public function Assistenz($stg_kz_prop = '')
|
||||||
{
|
{
|
||||||
|
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if(defined('CIS4') && CIS4) {
|
if(defined('CIS4') && CIS4) {
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'AbgabetoolAssistenz']);
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'AbgabetoolAssistenz']);
|
||||||
} else {
|
} else {
|
||||||
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolAssistenz', 'stg_kz_prop' => $stg_kz_prop]);
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'AbgabetoolAssistenz', 'stg_kz_prop' => $stg_kz_prop]);
|
||||||
}
|
}
|
||||||
@@ -84,12 +67,8 @@ class Abgabetool extends Auth_Controller
|
|||||||
|
|
||||||
public function Deadlines()
|
public function Deadlines()
|
||||||
{
|
{
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if(defined('CIS4') && CIS4) {
|
if(defined('CIS4') && CIS4) {
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'DeadlinesOverview']);
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'DeadlinesOverview']);
|
||||||
} else {
|
} else {
|
||||||
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'DeadlinesOverview']);
|
$this->load->view('Cis/Abgabetool.php', ['uid' => getAuthUID(), 'route' => 'DeadlinesOverview']);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class Auth extends FHC_Controller
|
|||||||
|
|
||||||
if ($this->form_validation->run())
|
if ($this->form_validation->run())
|
||||||
{
|
{
|
||||||
redirect($this->authlib->getLandingPage('/CisVue/Dashboard'));
|
redirect($this->authlib->getLandingPage('/Cis4'));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
+9
-15
@@ -5,18 +5,18 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class Dashboard extends Auth_Controller
|
class Benotungstool extends Auth_Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct(
|
parent::__construct([
|
||||||
array(
|
'index' => self::PERM_LOGGED
|
||||||
'index' => 'dashboard/benutzer:r'
|
]);
|
||||||
)
|
|
||||||
);
|
$this->_ci =& get_instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
@@ -27,17 +27,11 @@ class Dashboard extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
|
||||||
$this->load->model('person/Person_model','PersonModel');
|
|
||||||
$personData = getData($this->PersonModel->getByUid(getAuthUID()))[0];
|
|
||||||
|
|
||||||
$viewData = array(
|
$viewData = array(
|
||||||
'uid' => getAuthUID(),
|
'uid'=>getAuthUID(),
|
||||||
'name' => $personData->vorname,
|
|
||||||
'person_id' => $personData->person_id
|
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData]);
|
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Benotungstool']);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Compat extends Auth_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'ci' => ['basis/cis:r'],
|
||||||
|
'legacy' => ['basis/cis:r'],
|
||||||
|
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function ci()
|
||||||
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php',['route' => 'Compat']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @access public
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function legacy()
|
||||||
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php',['route' => 'Compat']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -28,12 +28,6 @@ class LvPlan extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
|
$this->load->view('CisRouterView/CisRouterView.php', ['route' => 'LvPlan']);
|
||||||
$viewData = array(
|
|
||||||
'uid'=>getAuthUID(),
|
|
||||||
'timezone' => $this->config->item('timezone')
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'LvPlan']);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,11 +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']);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,12 +28,6 @@ class MyLvPlan extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
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']);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -512,9 +512,10 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
};
|
};
|
||||||
$projektarbeiten_ids = array_map($mapFunc, $projektarbeiten->retval);
|
$projektarbeiten_ids = array_map($mapFunc, $projektarbeiten->retval);
|
||||||
|
|
||||||
$ret = $this->ProjektarbeitModel->getProjektarbeitenAbgabetermine($projektarbeiten_ids);
|
if(count($projektarbeiten_ids) > 0) {
|
||||||
$projektabgaben = $this->getDataOrTerminateWithError($ret, 'general');
|
$ret = $this->ProjektarbeitModel->getProjektarbeitenAbgabetermine($projektarbeiten_ids);
|
||||||
|
$projektabgaben = $this->getDataOrTerminateWithError($ret, 'general');
|
||||||
|
}
|
||||||
|
|
||||||
forEach($projektarbeiten->retval as $pa) {
|
forEach($projektarbeiten->retval as $pa) {
|
||||||
|
|
||||||
@@ -846,9 +847,10 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
private function getProjektbetreuerEmailByProjektarbeitID($projektarbeit_id) {
|
private function getProjektbetreuerEmailByProjektarbeitID($projektarbeit_id) {
|
||||||
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
|
||||||
$result = $this->ProjektarbeitModel->getProjektbetreuerEmail($projektarbeit_id);
|
$result = $this->ProjektarbeitModel->getProjektbetreuerEmail($projektarbeit_id);
|
||||||
$email = $this->getDataOrTerminateWithError($result, 'general');
|
if(count($result->retval) > 0) {
|
||||||
|
$email = getData($result);
|
||||||
return $email[0]->uid ? $email[0]->uid.'@'.DOMAIN : $email[0]->private_email;
|
return $email[0]->uid ? $email[0]->uid.'@'.DOMAIN : $email[0]->private_email;
|
||||||
|
} else return '';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
* deletes bookmark from associated user
|
||||||
* @access public
|
* @access public
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function delete($bookmark_id)
|
public function delete($bookmark_id)
|
||||||
{
|
{
|
||||||
$bookmark = $this->BookmarkModel->load($bookmark_id);
|
$bookmark = $this->BookmarkModel->load($bookmark_id);
|
||||||
|
|
||||||
$bookmark = current($this->getDataOrTerminateWithError($bookmark));
|
$bookmark = current($this->getDataOrTerminateWithError($bookmark));
|
||||||
|
|
||||||
// only delete bookmark if the user is the owner of the bookmark
|
// only delete bookmark if the user is the owner of the bookmark
|
||||||
if($bookmark->uid == $this->uid || $this->permissionlib->isBerechtigt('admin')){
|
if ($bookmark->uid == $this->uid || $this->permissionlib->isBerechtigt('admin')) {
|
||||||
|
$delete_result = $this->BookmarkModel->delete($bookmark_id);
|
||||||
|
|
||||||
$delete_result = $this->BookmarkModel->delete($bookmark_id);
|
$delete_result = $this->getDataOrTerminateWithError($delete_result);
|
||||||
|
|
||||||
$delete_result = $this->getDataOrTerminateWithError($delete_result);
|
$this->terminateWithSuccess($delete_result);
|
||||||
|
} else {
|
||||||
|
$this->_outputAuthError(['delete' => ['admin:rw']]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->terminateWithSuccess($delete_result);
|
/**
|
||||||
}else{
|
|
||||||
$this->_outputAuthError(['delete' => ['admin:rw']]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* inserts new bookmark into the bookmark table
|
* inserts new bookmark into the bookmark table
|
||||||
* @access public
|
* @access public
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function insert()
|
public function insert()
|
||||||
{
|
{
|
||||||
// form validation
|
// form validation
|
||||||
$this->load->library('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('url', 'URL', 'required|valid_url|max_length[511]');
|
||||||
$this->form_validation->set_rules('title', 'Title', 'required|max_length[255]');
|
$this->form_validation->set_rules('title', 'Title', 'required|max_length[255]');
|
||||||
if($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array());
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
$url = $this->input->post('url',true);
|
$url = $this->input->post('url', true);
|
||||||
$title = $this->input->post('title',true);
|
$title = $this->input->post('title', true);
|
||||||
$tag = $this->input->post('tag', 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]);
|
$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);
|
$insert_into_result = $this->getDataOrTerminateWithError($insert_into_result);
|
||||||
|
|
||||||
$this->terminateWithSuccess($insert_into_result);
|
$this->terminateWithSuccess($insert_into_result);
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* updates bookmark in the bookmark table
|
* updates bookmark in the bookmark table
|
||||||
* @access public
|
* @access public
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function update($bookmark_id)
|
public function update($bookmark_id)
|
||||||
{
|
{
|
||||||
// form validation
|
// form validation
|
||||||
$this->load->library('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('url', 'URL', 'required|valid_url|max_length[511]');
|
||||||
$this->form_validation->set_rules('title', 'Title', 'required|max_length[255]');
|
$this->form_validation->set_rules('title', 'Title', 'required|max_length[255]');
|
||||||
if($this->form_validation->run() == FALSE) $this->terminateWithValidationErrors($this->form_validation->error_array());
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
$url = $this->input->post('url',true);
|
$url = $this->input->post('url', true);
|
||||||
$title = $this->input->post('title',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,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 CisMenu extends FHCAPI_Controller
|
class CisMenu extends FHCAPI_Controller
|
||||||
@@ -38,21 +39,88 @@ class CisMenu extends FHCAPI_Controller
|
|||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// 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 ?? [];
|
||||||
|
|
||||||
|
$menu = $this->generateUrlsForMenuItems($menu);
|
||||||
$this->terminateWithSuccess($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,15 +18,6 @@
|
|||||||
|
|
||||||
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
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -38,39 +29,58 @@ class Lehre extends FHCAPI_Controller
|
|||||||
parent::__construct([
|
parent::__construct([
|
||||||
'lvStudentenMail' => self::PERM_LOGGED,
|
'lvStudentenMail' => self::PERM_LOGGED,
|
||||||
'LV' => self::PERM_LOGGED,
|
'LV' => self::PERM_LOGGED,
|
||||||
'Pruefungen' => self::PERM_LOGGED
|
'Pruefungen' => self::PERM_LOGGED,
|
||||||
|
'semesterAverageGrade' => self::PERM_LOGGED,
|
||||||
|
'getZugewieseneLv' => self::PERM_LOGGED,
|
||||||
|
'getLeForLv' => self::PERM_LOGGED
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$this->load->library('PhrasesLib');
|
||||||
|
|
||||||
|
$this->loadPhrases(
|
||||||
|
array(
|
||||||
|
'global',
|
||||||
|
'ui',
|
||||||
|
'abgabetool'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->load->helper('hlp_sancho_helper');
|
||||||
|
|
||||||
|
require_once(FHCPATH . 'include/studiengang.class.php');
|
||||||
|
require_once(FHCPATH . 'include/student.class.php');
|
||||||
|
require_once(FHCPATH . 'include/projektarbeit.class.php');
|
||||||
|
require_once(FHCPATH . 'include/projektbetreuer.class.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// Public methods
|
// Public methods
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* constructs the emails of the groups from a lehrveranstaltung
|
* constructs the emails of the groups from a lehrveranstaltung
|
||||||
*/
|
*/
|
||||||
public function lvStudentenMail()
|
public function lvStudentenMail()
|
||||||
{
|
{
|
||||||
$lehreinheit_id = $this->input->get("lehreinheit_id",TRUE);
|
$lehreinheit_id = $this->input->get("lehreinheit_id",TRUE);
|
||||||
|
|
||||||
// return early if the required parameter is missing
|
// return early if the required parameter is missing
|
||||||
if(!isset($lehreinheit_id))
|
if(!isset($lehreinheit_id))
|
||||||
{
|
{
|
||||||
$this->terminateWithError('Missing required parameter', self::ERROR_TYPE_GENERAL);
|
$this->terminateWithError('Missing required parameter', self::ERROR_TYPE_GENERAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||||
|
|
||||||
$studentenMails = $this->LehreinheitModel->getStudentenMail($lehreinheit_id);
|
$studentenMails = $this->LehreinheitModel->getStudentenMail($lehreinheit_id);
|
||||||
|
|
||||||
$studentenMails = $this->getDataOrTerminateWithError($studentenMails);
|
$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)
|
||||||
@@ -100,5 +110,90 @@ class Lehre extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* calculates and returns the grade average and weighted average for a specific semester
|
||||||
|
* @param string $studiensemester_kurzbz
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function semesterAverageGrade($studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||||
|
$semesterLvs = $this->LehrveranstaltungModel->getLvsByStudentWithGrades(getAuthUID(), $studiensemester_kurzbz, getUserLanguage());
|
||||||
|
|
||||||
|
if (isError($semesterLvs))
|
||||||
|
return $this->outputJsonError(getError($semesterLvs));
|
||||||
|
|
||||||
|
$semesterLvsData = getData($semesterLvs);
|
||||||
|
|
||||||
|
$doGradesExist = false;
|
||||||
|
$sum = 0;
|
||||||
|
$count = 0;
|
||||||
|
$sumWeighted = 0;
|
||||||
|
$sumEcts = 0;
|
||||||
|
|
||||||
|
foreach ($semesterLvsData as $lv) {
|
||||||
|
if (!$lv->znote || $lv->znote < 1 || $lv->znote > 5)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$doGradesExist = true;
|
||||||
|
|
||||||
|
$sum += $lv->znote;
|
||||||
|
$count++;
|
||||||
|
$sumWeighted += $lv->znote * floatval($lv->ects);
|
||||||
|
$sumEcts += floatval($lv->ects);
|
||||||
|
}
|
||||||
|
|
||||||
|
$averageGrade = null;
|
||||||
|
$weightedAverageGrade = null;
|
||||||
|
if ($doGradesExist) {
|
||||||
|
$averageGrade = $sum/$count;
|
||||||
|
$weightedAverageGrade = $sumWeighted/$sumEcts;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(['average_grade' => $averageGrade, 'weighted_average_grade' => $weightedAverageGrade]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fetches all assigned lehrveranstaltungen of a mitarbeiter for a given semester
|
||||||
|
* @param mixed $uid
|
||||||
|
* @param mixed $sem_kurzbz
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function getZugewieseneLv() {
|
||||||
|
$uid = $this->input->get("uid",TRUE);
|
||||||
|
$sem_kurzbz = $this->input->get("sem_kurzbz",TRUE);
|
||||||
|
|
||||||
|
// TODO: error messages
|
||||||
|
|
||||||
|
if(!isset($sem_kurzbz) || isEmptyString($sem_kurzbz))
|
||||||
|
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
|
||||||
|
|
||||||
|
if (!isset($uid) || isEmptyString($uid))
|
||||||
|
$uid = getAuthUID();
|
||||||
|
|
||||||
|
// querying other ma_uids data requires admin permission
|
||||||
|
if($uid !== getAuthUID()) {
|
||||||
|
$this->load->library('PermissionLib');
|
||||||
|
$isAdmin = $this->permissionlib->isBerechtigt('admin');
|
||||||
|
if(!$isAdmin) $this->terminateWithError($this->p->t('ui', 'keineBerechtigung'), 'general');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||||
|
$result = $this->LehrveranstaltungModel->getLvForLektorInSemester($sem_kurzbz, $uid);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLeForLv() {
|
||||||
|
$lv_id = $this->input->get("lv_id",TRUE);
|
||||||
|
$sem_kurzbz = $this->input->get("sem_kurzbz",TRUE);
|
||||||
|
|
||||||
|
$this->load->model('education/Lehreinheit_model', 'LehreinheitModel');
|
||||||
|
|
||||||
|
// $this->terminateWithSuccess($this->LehreinheitModel->getLesForLv($lv_id, $sem_kurzbz));
|
||||||
|
$this->terminateWithSuccess($this->LehreinheitModel->getAllLehreinheitenForLvaAndMaUid($lv_id, getAuthUID(), $sem_kurzbz));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'getLvMenu' => self::PERM_LOGGED
|
'getLvMenu' => self::PERM_LOGGED,
|
||||||
|
'getMultipleLvMenu' => self::PERM_LOGGED
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->load->model("ressource/Mitarbeiter_model");
|
$this->load->model("ressource/Mitarbeiter_model");
|
||||||
@@ -61,24 +62,23 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* alternative function to get multiple lvMenus with a single http request
|
* alternative function to get multiple lvMenus with a single http request
|
||||||
|
* not yet working as intended as the menu_lv.inc.php scripts called by the
|
||||||
|
* lvMenuBuild event have logic coupled to require_once import which results in
|
||||||
|
* a wrong logic after the first invocation -> faulty results for lvinfo, moodle
|
||||||
|
* and several others
|
||||||
*/
|
*/
|
||||||
public function getMultipleLvMenu($lvMenuOptionList){
|
public function getMultipleLvMenu(){
|
||||||
|
$lvMenuOptionList = $this->input->post('lvMenuOptionList', true);
|
||||||
$result =[];
|
$result =[];
|
||||||
foreach($lvMenuOptionList as $lvMenuOptions){
|
foreach($lvMenuOptionList as $lvMenuOptions){
|
||||||
$lvMenu = $this->getLvMenu($lvMenuOptions['lvid'],$lvMenuOptions['studiensemester_kurzbz']);
|
$lvMenu = $this->getLvMenuInternal($lvMenuOptions['lvid'],$lvMenuOptions['studiensemester_kurzbz']);
|
||||||
if(isError($lvMenu)){
|
|
||||||
// TODO: some lvMenu threw an error, handle error here
|
|
||||||
}
|
|
||||||
$result[$lvMenuOptions['lvid']]=$lvMenu;
|
$result[$lvMenuOptions['lvid']]=$lvMenu;
|
||||||
}
|
}
|
||||||
$this->terminateWithSuccess($result);
|
$this->terminateWithSuccess($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private function getLvMenuInternal($lvid, $studiensemester_kurzbz) {
|
||||||
*
|
|
||||||
*/
|
|
||||||
public function getLvMenu($lvid, $studiensemester_kurzbz)
|
|
||||||
{
|
|
||||||
|
|
||||||
// return early if parameters are missing
|
// return early if parameters are missing
|
||||||
if(!isset($lvid) || !isset($studiensemester_kurzbz))
|
if(!isset($lvid) || !isset($studiensemester_kurzbz))
|
||||||
@@ -89,14 +89,14 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
|
|
||||||
// get the user
|
// get the user
|
||||||
if (!$user=getAuthUID())
|
if (!$user=getAuthUID())
|
||||||
$this->terminateWithError($this->p->t('global', 'nichtAngemeldet'));
|
$this->terminateWithError($this->p->t('global', 'nichtAngemeldet'));
|
||||||
|
|
||||||
// check if is_lector
|
// check if is_lector
|
||||||
$is_lector = false;
|
$is_lector = false;
|
||||||
$mares = $this->Mitarbeiter_model->isMitarbeiter($user);
|
$mares = $this->Mitarbeiter_model->isMitarbeiter($user);
|
||||||
if(hasData($mares))
|
if(hasData($mares))
|
||||||
{
|
{
|
||||||
$is_lector = getData($mares);
|
$is_lector = getData($mares);
|
||||||
}
|
}
|
||||||
|
|
||||||
// definition of user_is_allowed_to_upload
|
// definition of user_is_allowed_to_upload
|
||||||
@@ -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)
|
||||||
@@ -212,7 +212,7 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
{
|
{
|
||||||
$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;
|
||||||
}
|
}
|
||||||
@@ -274,11 +274,11 @@ class LvMenu extends FHCAPI_Controller
|
|||||||
];
|
];
|
||||||
|
|
||||||
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
|
||||||
@@ -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))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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');
|
||||||
@@ -90,16 +97,22 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
// 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(
|
||||||
@@ -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
|
||||||
*
|
*
|
||||||
@@ -138,7 +190,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,
|
||||||
$ferienEvents
|
$ferienEvents
|
||||||
@@ -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
|
* fetches Stunden layout from database
|
||||||
* @access public
|
* @access public
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function Stunden()
|
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);
|
||||||
}
|
}
|
||||||
@@ -233,18 +286,25 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
// 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,7 +416,7 @@ 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');
|
||||||
|
|
||||||
@@ -311,13 +433,13 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
|
|
||||||
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,7 +453,7 @@ 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');
|
||||||
@@ -343,7 +465,7 @@ class LvPlan extends FHCAPI_Controller
|
|||||||
$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);
|
||||||
|
|||||||
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,7 +28,7 @@ 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,
|
||||||
@@ -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)) {
|
||||||
@@ -88,9 +98,9 @@ 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));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -117,7 +127,7 @@ 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;
|
||||||
}
|
}
|
||||||
@@ -128,7 +138,7 @@ class Profil extends FHCAPI_Controller
|
|||||||
$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);
|
||||||
|
|
||||||
@@ -150,7 +160,8 @@ 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);
|
||||||
@@ -167,6 +178,30 @@ class Profil extends FHCAPI_Controller
|
|||||||
// -----------------------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
// Private methods
|
// Private methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gets the identifier, phrase, and url for each calendar sync option
|
||||||
|
* @access private
|
||||||
|
* @return array array of arrays, where each child array is a sync option
|
||||||
|
*/
|
||||||
|
private function getCalendarSyncUrlData()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
"identifier" => "cal_dav",
|
||||||
|
"labelPhrase" => "profil/calendar_sync_cal_dav",
|
||||||
|
"url" => APP_ROOT . "webdav/lvplan.php/calendars/" . $this->uid . "/LVPlan-" . $this->uid,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"identifier" => "cal_dav_principal",
|
||||||
|
"labelPhrase" => "profil/calendar_sync_cal_dav_principal",
|
||||||
|
"url" => APP_ROOT . "webdav/lvplan.php/principals/" . $this->uid,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"identifier" => "i_cal",
|
||||||
|
"labelPhrase" => "profil/calendar_sync_i_cal",
|
||||||
|
"url" => APP_ROOT . "webdav/google.php?cal=" . encryptData($this->uid, LVPLAN_CYPHER_KEY) . "&" . microtime(true),
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2024 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!defined('BASEPATH'))
|
||||||
|
exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class StgOrgLvPlan extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object initialization
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'stgOrgLvPlanViewData' => self::PERM_LOGGED,
|
||||||
|
]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fetches view data for stg org lv plan
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
public function stgOrgLvPlanViewData()
|
||||||
|
{
|
||||||
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
|
$this->StudiengangModel->addOrder('typ');
|
||||||
|
$this->StudiengangModel->addOrder('kurzbz');
|
||||||
|
$result = $this->StudiengangModel->loadWhere([
|
||||||
|
'aktiv' => true
|
||||||
|
]);
|
||||||
|
$studiengaenge = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$viewData = array(
|
||||||
|
'studiengaenge' => $studiengaenge,
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($viewData);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
|
// Private methods
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2024 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
class Studiensemester extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
private $_ci;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object initialization
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getStudiensemester'=> self::PERM_LOGGED,
|
||||||
|
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
|
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GET METHOD
|
||||||
|
* returns List of all studiensemester as well as current one
|
||||||
|
*/
|
||||||
|
public function getStudiensemester()
|
||||||
|
{
|
||||||
|
$this->_ci->StudiensemesterModel->addOrder("start", "DESC");
|
||||||
|
$result = $this->_ci->StudiensemesterModel->load();
|
||||||
|
|
||||||
|
$studiensemester = getData($result);
|
||||||
|
$result = $this->_ci->StudiensemesterModel->getAkt();
|
||||||
|
$aktuell = getData($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(array($studiensemester, $aktuell));
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Private methods
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -62,21 +62,36 @@ class Studium extends FHCAPI_Controller
|
|||||||
|
|
||||||
if($this->getDataOrTerminateWithError($this->StudentModel->isStudent(getAuthUID()))){
|
if($this->getDataOrTerminateWithError($this->StudentModel->isStudent(getAuthUID()))){
|
||||||
$studentLehrverband =$this->StudentlehrverbandModel->loadWhere(["student_uid" => getAuthUID(), "studiensemester_kurzbz" => $aktuelles_studiensemester->studiensemester_kurzbz]);
|
$studentLehrverband =$this->StudentlehrverbandModel->loadWhere(["student_uid" => getAuthUID(), "studiensemester_kurzbz" => $aktuelles_studiensemester->studiensemester_kurzbz]);
|
||||||
$studentLehrverband = current($this->getDataOrTerminateWithError($studentLehrverband));
|
|
||||||
|
|
||||||
$student_studiensemester = $studentLehrverband->studiensemester_kurzbz;
|
//TODO(Manu) check if use Fallback or just comment out all paramschecks?
|
||||||
$student_studiengang = $studentLehrverband->studiengang_kz;
|
//add Fallback: if no LehrverbandData of actual semester, get Data of previous one
|
||||||
$student_semester = $studentLehrverband->semester;
|
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;
|
$student_studienplan = $this->getStudienPlanFromPrestudentStatus(getAuthPersonId())->studienplan_id;
|
||||||
|
|
||||||
if(!isset($parameter_studiensemester))
|
if(!isset($parameter_studiensemester)) {
|
||||||
$parameter_studiensemester = $student_studiensemester;
|
$student_studiensemester = $studentLehrverband->studiensemester_kurzbz;
|
||||||
if(!isset($parameter_studiengang))
|
$parameter_studiensemester = $student_studiensemester;
|
||||||
$parameter_studiengang = $student_studiengang;
|
}
|
||||||
if(!isset($parameter_semester))
|
if(!isset($parameter_studiengang)) {
|
||||||
$parameter_semester = $student_semester;
|
$student_studiengang = $studentLehrverband->studiengang_kz;
|
||||||
|
$parameter_studiengang = $student_studiengang;
|
||||||
|
}
|
||||||
|
if(!isset($parameter_semester)) {
|
||||||
|
$student_semester = $studentLehrverband->semester;
|
||||||
|
$parameter_semester = $student_semester;
|
||||||
|
}
|
||||||
if(!isset($parameter_studienplan))
|
if(!isset($parameter_studienplan))
|
||||||
$parameter_studienplan = $student_studienplan;
|
$parameter_studienplan = $student_studienplan;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($parameter_studiensemester)){
|
if(isset($parameter_studiensemester)){
|
||||||
@@ -97,7 +112,6 @@ class Studium extends FHCAPI_Controller
|
|||||||
// fetch studiensemester
|
// fetch studiensemester
|
||||||
$allStudienSemester = $this->getDataOrTerminateWithError($this->StudiensemesterModel->load());
|
$allStudienSemester = $this->getDataOrTerminateWithError($this->StudiensemesterModel->load());
|
||||||
|
|
||||||
|
|
||||||
if(isset($parameter_studiensemester) && !empty(array_filter($allStudienSemester, function($studiensemester) use($parameter_studiensemester){
|
if(isset($parameter_studiensemester) && !empty(array_filter($allStudienSemester, function($studiensemester) use($parameter_studiensemester){
|
||||||
return $studiensemester->studiensemester_kurzbz == $parameter_studiensemester->studiensemester_kurzbz;
|
return $studiensemester->studiensemester_kurzbz == $parameter_studiensemester->studiensemester_kurzbz;
|
||||||
}))){
|
}))){
|
||||||
@@ -216,6 +230,8 @@ class Studium extends FHCAPI_Controller
|
|||||||
$studienplaene = array_map(function($studienplan){
|
$studienplaene = array_map(function($studienplan){
|
||||||
$orgform = current($this->getDataOrTerminateWithError($this->OrgformModel->loadWhere(["orgform_kurzbz" => $studienplan->orgform_kurzbz])));
|
$orgform = current($this->getDataOrTerminateWithError($this->OrgformModel->loadWhere(["orgform_kurzbz" => $studienplan->orgform_kurzbz])));
|
||||||
$studienplan->orgform_bezeichnung = $orgform->bezeichnung;
|
$studienplan->orgform_bezeichnung = $orgform->bezeichnung;
|
||||||
|
// bezeichnung_mehrsprachig
|
||||||
|
$studienplan->orgform_bezeichnung_english = $orgform->bezeichnung_mehrsprachig[1];
|
||||||
return $studienplan;
|
return $studienplan;
|
||||||
},$studienplaene);
|
},$studienplaene);
|
||||||
return $studienplaene;
|
return $studienplaene;
|
||||||
|
|||||||
@@ -0,0 +1,367 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Zeitsperren extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'getZeitsperrenUser' => self::PERM_LOGGED,
|
||||||
|
'getTypenZeitsperren' => self::PERM_LOGGED,
|
||||||
|
'getTypenErreichbarkeit' => self::PERM_LOGGED,
|
||||||
|
'getStunden' => self::PERM_LOGGED,
|
||||||
|
'loadZeitsperre' => self::PERM_LOGGED,
|
||||||
|
'add' => self::PERM_LOGGED,
|
||||||
|
'update' => self::PERM_LOGGED,
|
||||||
|
'delete' => self::PERM_LOGGED,
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Load Libraries
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui',
|
||||||
|
'person',
|
||||||
|
'zeitsperren'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Load models
|
||||||
|
$this->load->model('ressource/Zeitsperre_model', 'ZeitsperreModel');
|
||||||
|
$this->load->model('ressource/Zeitsperretyp_model', 'ZeitsperretypModel');
|
||||||
|
$this->load->model('ressource/Erreichbarkeit_model', 'ErreichbarkeitModel');
|
||||||
|
$this->load->model('ressource/Stunde_model', 'StundeModel');
|
||||||
|
$this->load->model('ressource/Zeitaufzeichnung_model', 'ZeitaufzeichnungModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZeitsperrenUser($uid)
|
||||||
|
{
|
||||||
|
//check if $uid is passedUser
|
||||||
|
$loggedInUser = getAuthUID();
|
||||||
|
if($loggedInUser != $uid) {
|
||||||
|
$this->load->library('PermissionLib');
|
||||||
|
$isAdmin = $this->permissionlib->isBerechtigt('admin');
|
||||||
|
if(!$isAdmin) {
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'noAdmin'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->ZeitsperreModel->getZeitsperrenUser($uid);
|
||||||
|
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTypenZeitsperren()
|
||||||
|
{
|
||||||
|
$this->ZeitsperretypModel->addOrder('beschreibung', 'ASC');
|
||||||
|
$result = $this->ZeitsperretypModel->load();
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTypenErreichbarkeit()
|
||||||
|
{
|
||||||
|
$result = $this->ErreichbarkeitModel->load();
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getStunden()
|
||||||
|
{
|
||||||
|
$this->StundeModel->addOrder('stunde', 'ASC');
|
||||||
|
$result = $this->StundeModel->load();
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function loadZeitsperre($zeitsperre_id)
|
||||||
|
{
|
||||||
|
$this->ZeitsperreModel->addSelect(
|
||||||
|
'campus.tbl_zeitsperre.*, typ.*,
|
||||||
|
ma.person_id AS ma_person_id, ma.vorname AS ma_vorname, ma.nachname AS ma_nachname,
|
||||||
|
ma.titelpre AS ma_titelpre, ma.titelpost AS ma_titelpost'
|
||||||
|
);
|
||||||
|
$this->ZeitsperreModel->addJoin('campus.tbl_zeitsperretyp typ', 'ON (typ.zeitsperretyp_kurzbz = campus.tbl_zeitsperre.zeitsperretyp_kurzbz)');
|
||||||
|
$this->ZeitsperreModel->addJoin('public.tbl_benutzer ben', 'ON (ben.uid = campus.tbl_zeitsperre.vertretung_uid)', 'LEFT');
|
||||||
|
$this->ZeitsperreModel->addJoin('public.tbl_person ma', 'ON (ma.person_id = ben.person_id)', 'LEFT');
|
||||||
|
$result = $this->ZeitsperreModel->loadWhere(
|
||||||
|
array('zeitsperre_id' => $zeitsperre_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess((current(getData($result)) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function add($mitarbeiter_uid)
|
||||||
|
{
|
||||||
|
$loggedInUser = getAuthUID();
|
||||||
|
|
||||||
|
if($mitarbeiter_uid != $loggedInUser)
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'noPermission'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('zeitsperretyp_kurzbz', 'Grund Zeitsperre', 'required', [
|
||||||
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Grund Zeitsperre'])
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('vondatum', 'VonDatum', 'required|is_valid_date', [
|
||||||
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'VonDatum']),
|
||||||
|
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'VonDatum'])
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('bisdatum', 'BisDatum', 'required|is_valid_date|callback_check_von_bis_datum|callback_check_diff_intval', [
|
||||||
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'BisDatum']),
|
||||||
|
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field' => 'BisDatum']),
|
||||||
|
'check_von_bis_datum' => $this->p->t('zeitsperre', 'error_VonDatumGroesserAlsBisDatum'),
|
||||||
|
'check_diff_intval' => $this->p->t('zeitsperre', 'error_zeitraumAuffallendHoch')
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($this->form_validation->run() == false)
|
||||||
|
{
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
}
|
||||||
|
|
||||||
|
$bezeichnung = $this->input->post('bezeichnung');
|
||||||
|
$vondatum = $this->input->post('vondatum');
|
||||||
|
$vonstunde = $this->input->post('vonstunde');
|
||||||
|
$bisdatum = $this->input->post('bisdatum');
|
||||||
|
$bisstunde = $this->input->post('bisstunde');
|
||||||
|
//$vonIso = $this->input->post('vonISO'); //Timestamp für Stunde
|
||||||
|
//$bisIso = $this->input->post('bisISO'); //Timestamp für Stunde
|
||||||
|
$erreichbarkeit_kurzbz = $this->input->post('erreichbarkeit_kurzbz');
|
||||||
|
$vertretung_uid = $this->input->post('vertretung_uid');
|
||||||
|
$zeitsperretyp_kurzbz = $this->input->post('zeitsperretyp_kurzbz');
|
||||||
|
|
||||||
|
//check if existing zeitsperre
|
||||||
|
$result = $this->ZeitsperreModel->getSperreByDate($mitarbeiter_uid, $vondatum, $vonstunde, true);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('zeitsperren', 'error_existingZeitsperre', ['typ'=> current($data)->zeitsperretyp_kurzbz]), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//check if existing zeitaufzeichnung
|
||||||
|
if(in_array($zeitsperretyp_kurzbz, Zeitsperre_model::BLOCKIERENDE_ZEITSPERREN))
|
||||||
|
{
|
||||||
|
$result = $this->ZeitsperreModel->existsZeitaufzeichnung($mitarbeiter_uid, $vondatum, $bisdatum);
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
$this->terminateWithError($this->p->t('zeitsperren', 'error_existingZeitaufzeichnung'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->ZeitsperreModel->insert(
|
||||||
|
[
|
||||||
|
'mitarbeiter_uid' => $mitarbeiter_uid,
|
||||||
|
'bezeichnung' => $bezeichnung,
|
||||||
|
'vondatum' => $vondatum,
|
||||||
|
'vonstunde' => $vonstunde,
|
||||||
|
'bisdatum' => $bisdatum,
|
||||||
|
'bisstunde' => $bisstunde,
|
||||||
|
'erreichbarkeit_kurzbz' => $erreichbarkeit_kurzbz,
|
||||||
|
'zeitsperretyp_kurzbz' => $zeitsperretyp_kurzbz,
|
||||||
|
'vertretung_uid' => $vertretung_uid,
|
||||||
|
'insertvon' => $loggedInUser,
|
||||||
|
'insertamum' => date('c'),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update($zeitsperre_id)
|
||||||
|
{
|
||||||
|
//check if loggedin User is owner of the zeitsperre
|
||||||
|
$loggedInUser = getAuthUID();
|
||||||
|
$result = $this->ZeitsperreModel->load($zeitsperre_id);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$uid = current($data)->mitarbeiter_uid;
|
||||||
|
|
||||||
|
if($uid != $loggedInUser)
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'noPermission'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
if(!$zeitsperre_id)
|
||||||
|
{
|
||||||
|
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Zeitsperre_id']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
//get current params
|
||||||
|
$array_update = [
|
||||||
|
'bezeichnung',
|
||||||
|
'vondatum',
|
||||||
|
'vonstunde',
|
||||||
|
'bisdatum',
|
||||||
|
'bisstunde',
|
||||||
|
// 'vonISO', //Timestamp für Stunde
|
||||||
|
// 'bisISO', //Timestamp für Stunde
|
||||||
|
'erreichbarkeit_kurzbz',
|
||||||
|
'vertretung_uid',
|
||||||
|
'zeitsperretyp_kurzbz',
|
||||||
|
'mitarbeiter_uid',
|
||||||
|
];
|
||||||
|
$post = $this->input->post();
|
||||||
|
$update = [];
|
||||||
|
|
||||||
|
foreach ($array_update as $prop)
|
||||||
|
{
|
||||||
|
if (array_key_exists($prop, $post))
|
||||||
|
{
|
||||||
|
$update[$prop] = $post[$prop];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validation
|
||||||
|
$rulesDefined = false; //necessary, otherwise CI validation will always be triggered, even without rules
|
||||||
|
foreach ($update as $key => $val) {
|
||||||
|
switch ($key) {
|
||||||
|
case 'zeitsperretyp_kurzbz':
|
||||||
|
$this->form_validation->set_rules(
|
||||||
|
$key,
|
||||||
|
'Grund Zeitsperre',
|
||||||
|
'required',
|
||||||
|
['required' => $this->p->t('ui', 'error_fieldRequired', ['field'=>'Grund Zeitsperre'])]
|
||||||
|
);
|
||||||
|
$rulesDefined = true;
|
||||||
|
break;
|
||||||
|
case 'vondatum':
|
||||||
|
$this->form_validation->set_rules(
|
||||||
|
$key,
|
||||||
|
'VonDatum',
|
||||||
|
'required|is_valid_date',
|
||||||
|
[
|
||||||
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field'=>'VonDatum']),
|
||||||
|
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field'=>'VonDatum'])
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$rulesDefined = true;
|
||||||
|
break;
|
||||||
|
case 'bisdatum':
|
||||||
|
$rules = 'required|is_valid_date';
|
||||||
|
if (array_key_exists('vondatum', $update)) {
|
||||||
|
$rules .= '|callback_check_von_bis_datum|callback_check_diff_intval';
|
||||||
|
}
|
||||||
|
$this->form_validation->set_rules(
|
||||||
|
$key,
|
||||||
|
'BisDatum',
|
||||||
|
$rules,
|
||||||
|
[
|
||||||
|
'required' => $this->p->t('ui', 'error_fieldRequired', ['field'=>'BisDatum']),
|
||||||
|
'is_valid_date' => $this->p->t('ui', 'error_notValidDate', ['field'=>'BisDatum']),
|
||||||
|
'check_von_bis_datum' => $this->p->t('zeitsperre', 'error_VonDatumGroesserAlsBisDatum'),
|
||||||
|
'check_diff_intval' => $this->p->t('zeitsperre', 'error_zeitraumAuffallendHoch')
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$rulesDefined = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($rulesDefined && $this->form_validation->run() == false) {
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(array_key_exists('vondatum', $post) || array_key_exists('bisdatum', $post))
|
||||||
|
{
|
||||||
|
$result = $this->ZeitsperreModel->load($zeitsperre_id);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$data = current($data);
|
||||||
|
|
||||||
|
$mitarbeiter_uid = array_key_exists('mitarbeiter_uid', $post) ? $update['mitarbeiter_uid'] : $data->mitarbeiter_uid;
|
||||||
|
$vondatum = array_key_exists('vondatum', $post) ? $update['vondatum'] : $data->vondatum;
|
||||||
|
$bisdatum = array_key_exists('bisdatum', $post) ? $update['bisdatum'] : $data->bisdatum;
|
||||||
|
$vonstunde = array_key_exists('vonstunde', $post) ? $update['vonstunde'] : $data->vonstunde;
|
||||||
|
$zeitsperretyp_kurzbz = array_key_exists('zeitsperretyp_kurzbz', $post) ? $update['zeitsperretyp_kurzbz'] : $data->zeitsperretyp_kurzbz;
|
||||||
|
|
||||||
|
$result = $this->ZeitsperreModel->getSperreByDate($mitarbeiter_uid, $vondatum, $vonstunde, true);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('zeitsperren', 'error_existingZeitsperre', ['typ'=> current($data)->zeitsperretyp_kurzbz]), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//check if existing zeitaufzeichnung
|
||||||
|
if(in_array($zeitsperretyp_kurzbz, Zeitsperre_model::BLOCKIERENDE_ZEITSPERREN))
|
||||||
|
{
|
||||||
|
$result = $this->ZeitsperreModel->existsZeitaufzeichnung($mitarbeiter_uid, $vondatum, $bisdatum);
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
$this->terminateWithError($this->p->t('zeitsperren', 'error_existingZeitaufzeichnung'), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($update)) {
|
||||||
|
$update['updatevon'] = $loggedInUser;
|
||||||
|
$update['updateamum'] = date('c');
|
||||||
|
$result = $this->ZeitsperreModel->update($zeitsperre_id, $update);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$this->terminateWithSuccess("no update");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete($zeitsperre_id)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!is_numeric($zeitsperre_id) || (int)$zeitsperre_id <= 0)
|
||||||
|
{
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Zeitsperre_id']), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
//check if loggedin User is owner of the zeitsperre
|
||||||
|
$loggedInUser = getAuthUID();
|
||||||
|
$result = $this->ZeitsperreModel->load($zeitsperre_id);
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$uid = current($data)->mitarbeiter_uid;
|
||||||
|
|
||||||
|
if($uid != $loggedInUser)
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'noPermission'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$result = $this->ZeitsperreModel->delete(
|
||||||
|
array('zeitsperre_id' => $zeitsperre_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isError($result)) {
|
||||||
|
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||||
|
}
|
||||||
|
$this->terminateWithSuccess((getData($result) ?: []));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function check_von_bis_datum($bisdatum)
|
||||||
|
{
|
||||||
|
$vondatum = $this->input->post('vondatum');
|
||||||
|
|
||||||
|
return $vondatum <= $bisdatum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function check_diff_intval($bisdatum)
|
||||||
|
{
|
||||||
|
$vondatum = $this->input->post('vondatum');
|
||||||
|
|
||||||
|
// Intervall in days
|
||||||
|
$vonTs = strtotime($vondatum);
|
||||||
|
$bisTs = strtotime($bisdatum);
|
||||||
|
|
||||||
|
$tage = ($bisTs - $vonTs) / 86400;
|
||||||
|
|
||||||
|
// if intervall > 14
|
||||||
|
return $tage <= 14;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,232 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2024 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class RoomPlan extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object initialization
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'addRoomReservation' => self::PERM_LOGGED,
|
||||||
|
'deleteRoomReservation' => self::PERM_LOGGED,
|
||||||
|
'getRoomCreationInfo' => self::PERM_LOGGED,
|
||||||
|
'getGruppen' => self::PERM_LOGGED,
|
||||||
|
'getLektor' => self::PERM_LOGGED,
|
||||||
|
'getReservableMap' => self::PERM_LOGGED,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->load->library('LogLib');
|
||||||
|
$this->loglib->setConfigs(array(
|
||||||
|
'classIndex' => 5,
|
||||||
|
'functionIndex' => 5,
|
||||||
|
'lineIndex' => 4,
|
||||||
|
'dbLogType' => 'API',
|
||||||
|
'dbExecuteUser' => 'RESTful API'
|
||||||
|
));
|
||||||
|
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
$this->load->library('PermissionLib');
|
||||||
|
$this->load->library('StundenplanLib');
|
||||||
|
|
||||||
|
$this->loadPhrases(['ui']);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function addRoomReservation()
|
||||||
|
{
|
||||||
|
$this->form_validation->set_rules('selectedStart', "Start", "required");
|
||||||
|
$this->form_validation->set_rules('selectedEnd', "End", "required");
|
||||||
|
$this->form_validation->set_rules('title', "Title", "required|max_length[10]");
|
||||||
|
$this->form_validation->set_rules('beschreibung', "Beschreibung", "required|max_length[32]");
|
||||||
|
$this->form_validation->set_rules('ort_kurzbz', "Ort", "required|max_length[16]");
|
||||||
|
$this->form_validation->set_rules('studiengang', 'Studiengang', 'numeric');
|
||||||
|
$this->form_validation->set_rules('semester', 'Semester', 'integer|greater_than_equal_to[0]');
|
||||||
|
$this->form_validation->set_rules('verband', 'Verband', 'trim');
|
||||||
|
$this->form_validation->set_rules('gruppe', 'Gruppe', 'trim');
|
||||||
|
$this->form_validation->set_rules('spezialgruppe', 'Spezialgruppe', 'max_length[32]');
|
||||||
|
$this->form_validation->set_rules('lektoren', 'Lektoren');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$start = $this->input->post('selectedStart');
|
||||||
|
$end = $this->input->post('selectedEnd');
|
||||||
|
$title = $this->input->post('title');
|
||||||
|
$beschreibung = $this->input->post('beschreibung');
|
||||||
|
$ort_kurzbz = $this->input->post('ort_kurzbz');
|
||||||
|
|
||||||
|
$studiengang_kz = $this->input->post('studiengang');
|
||||||
|
$semester = $this->input->post('semester');
|
||||||
|
$verband = $this->input->post('verband');
|
||||||
|
$gruppe = $this->input->post('gruppe');
|
||||||
|
$spezialgruppe = $this->input->post('spezialgruppe');
|
||||||
|
$lektoren = $this->input->post('lektoren');
|
||||||
|
|
||||||
|
|
||||||
|
$result = $this->stundenplanlib->addReservation($start, $end, $title, $beschreibung, $ort_kurzbz, $lektoren, $studiengang_kz, $semester, $verband, $gruppe, $spezialgruppe);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteRoomReservation()
|
||||||
|
{
|
||||||
|
$reservierung_id = $this->input->post('reservierung_id');
|
||||||
|
|
||||||
|
$result = $this->stundenplanlib->deleteReservation($reservierung_id);
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
$this->terminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getRoomCreationInfo()
|
||||||
|
{
|
||||||
|
$return_array = array('berechtigt' => false, 'studiengaenge' => []);
|
||||||
|
if (!$this->permissionlib->isBerechtigt('lehre/reservierung'))
|
||||||
|
$this->terminateWithSuccess($return_array);
|
||||||
|
|
||||||
|
$stg_berechtigungen = $this->permissionlib->getSTG_isEntitledFor('lehre/reservierung');
|
||||||
|
if (isEmptyArray($stg_berechtigungen))
|
||||||
|
$this->terminateWithSuccess($return_array);
|
||||||
|
|
||||||
|
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||||
|
$this->StudiengangModel->addSelect('studiengang_kz, UPPER(CONCAT(typ, kurzbz)) as kuerzel, kurzbzlang');
|
||||||
|
$this->StudiengangModel->addOrder('typ, kurzbz');
|
||||||
|
$this->StudiengangModel->db->where_in('studiengang_kz', $stg_berechtigungen);
|
||||||
|
$studiengaenge = $this->StudiengangModel->loadWhere(array('aktiv' => true));
|
||||||
|
|
||||||
|
if (isError($studiengaenge))
|
||||||
|
$this->terminateWithError($studiengaenge);
|
||||||
|
|
||||||
|
$return_array['studiengaenge'] = hasData($studiengaenge) ? getData($studiengaenge) : [];
|
||||||
|
$return_array['berechtigt'] = true;
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($return_array);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getGruppen()
|
||||||
|
{
|
||||||
|
$query = $this->input->get('query');
|
||||||
|
if (is_null($query))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$stg_berechtigungen = $this->permissionlib->getSTG_isEntitledFor('lehre/reservierung');
|
||||||
|
|
||||||
|
if (isEmptyArray($stg_berechtigungen))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
|
||||||
|
$this->load->model('organisation/gruppe_model', 'GruppeModel');
|
||||||
|
|
||||||
|
$query_words = explode(' ', urldecode($query));
|
||||||
|
|
||||||
|
$this->GruppeModel->addOrder('gruppe_kurzbz');
|
||||||
|
$this->GruppeModel->db->group_start();
|
||||||
|
foreach ($query_words as $word)
|
||||||
|
{
|
||||||
|
$this->GruppeModel->db->group_start();
|
||||||
|
$this->GruppeModel->db->where('gruppe_kurzbz ILIKE', "%" . $word . "%");
|
||||||
|
$this->GruppeModel->db->or_where('bezeichnung ILIKE', "%" . $word . "%");
|
||||||
|
$this->GruppeModel->db->or_where('beschreibung ILIKE', "%" . $word . "%");
|
||||||
|
$this->GruppeModel->db->or_where('orgform_kurzbz ILIKE', "%" . $word . "%");
|
||||||
|
|
||||||
|
if (is_numeric($word))
|
||||||
|
{
|
||||||
|
$this->GruppeModel->db->or_where('studiengang_kz', $word);
|
||||||
|
}
|
||||||
|
$this->GruppeModel->db->group_end();
|
||||||
|
}
|
||||||
|
$this->GruppeModel->db->group_end();
|
||||||
|
$this->GruppeModel->db->where_in('studiengang_kz', $stg_berechtigungen);
|
||||||
|
$gruppen = $this->GruppeModel->loadWhere(array('sichtbar' => true, 'lehre' => true));
|
||||||
|
if (isError($gruppen))
|
||||||
|
$this->terminateWithError($gruppen);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(hasData($gruppen) ? getData($gruppen) : []);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLektor()
|
||||||
|
{
|
||||||
|
|
||||||
|
$query = $this->input->get('query');
|
||||||
|
if (is_null($query))
|
||||||
|
$this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$stg_berechtigungen = $this->permissionlib->getSTG_isEntitledFor('lehre/reservierung');
|
||||||
|
|
||||||
|
if (isEmptyArray($stg_berechtigungen))
|
||||||
|
$this->terminateWithSuccess([]);
|
||||||
|
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||||
|
|
||||||
|
$query_words = explode(' ', urldecode($query));
|
||||||
|
|
||||||
|
$this->MitarbeiterModel->addSelect('uid, person_id, vorname, nachname');
|
||||||
|
$this->MitarbeiterModel->addJoin('public.tbl_benutzer', 'uid = mitarbeiter_uid');
|
||||||
|
$this->MitarbeiterModel->addJoin('public.tbl_person', 'person_id');
|
||||||
|
$this->MitarbeiterModel->db->where('public.tbl_benutzer.aktiv', true);
|
||||||
|
$this->MitarbeiterModel->db->group_start();
|
||||||
|
foreach ($query_words as $word)
|
||||||
|
{
|
||||||
|
$this->MitarbeiterModel->db->group_start();
|
||||||
|
$this->MitarbeiterModel->db->where('tbl_person.vorname ILIKE', "%" . $word . "%");
|
||||||
|
$this->MitarbeiterModel->db->or_where('tbl_person.nachname ILIKE', "%" . $word . "%");
|
||||||
|
$this->MitarbeiterModel->db->or_where('uid ILIKE', "%" . $word . "%");
|
||||||
|
$this->MitarbeiterModel->db->group_end();
|
||||||
|
}
|
||||||
|
$this->MitarbeiterModel->db->group_end();
|
||||||
|
|
||||||
|
$this->MitarbeiterModel->addOrder('nachname');
|
||||||
|
$this->MitarbeiterModel->addOrder('vorname');
|
||||||
|
$mitarbeiter = $this->MitarbeiterModel->load();
|
||||||
|
if (isError($mitarbeiter))
|
||||||
|
$this->terminateWithError($mitarbeiter);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(hasData($mitarbeiter) ? getData($mitarbeiter) : []);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getReservableMap($ort_kurzbz = null)
|
||||||
|
{
|
||||||
|
$this->form_validation->set_rules('start_date', "StartDate", "required");
|
||||||
|
$this->form_validation->set_rules('end_date', "EndDate", "required");
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
// storing the post parameter in local variables
|
||||||
|
$start_date = $this->input->post('start_date', true);
|
||||||
|
$end_date = $this->input->post('end_date', true);
|
||||||
|
|
||||||
|
$result = $this->stundenplanlib->getReservableMap($ort_kurzbz, $start_date, $end_date);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(array('reservierbarMap' => hasData($result) ? getData($result) : []));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2026 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||||
|
* Provides data to the ajax get calls about addresses
|
||||||
|
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||||
|
*/
|
||||||
|
class Board extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'list' => 'dashboard/admin:r',
|
||||||
|
'create' => 'dashboard/admin:rw',
|
||||||
|
'update' => 'dashboard/admin:rw',
|
||||||
|
'delete' => 'dashboard/admin:rw'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Models
|
||||||
|
$this->load->model('dashboard/Dashboard_model', 'DashboardModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function list()
|
||||||
|
{
|
||||||
|
$this->DashboardModel->addSelect('dashboard_id');
|
||||||
|
$this->DashboardModel->addSelect('dashboard_kurzbz');
|
||||||
|
$this->DashboardModel->addSelect('tbl_dashboard.beschreibung');
|
||||||
|
$this->DashboardModel->addSelect("(
|
||||||
|
SELECT json_agg(w.*)
|
||||||
|
FROM dashboard.tbl_widget w
|
||||||
|
JOIN dashboard.tbl_dashboard_widget dw
|
||||||
|
USING(widget_id)
|
||||||
|
WHERE dw.dashboard_id=tbl_dashboard.dashboard_id
|
||||||
|
) AS \"widgetSetup\"");
|
||||||
|
|
||||||
|
$result = $this->DashboardModel->load();
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$data = array_map(function ($dashboard) {
|
||||||
|
$tmpSetups = json_decode($dashboard->widgetSetup);
|
||||||
|
$tmpSetups = array_map(function ($widget) {
|
||||||
|
$widget->setup->file = absoluteJsImportUrl($widget->setup->file);
|
||||||
|
return $widget;
|
||||||
|
}, $tmpSetups);
|
||||||
|
$dashboard->widgetSetup = $tmpSetups;
|
||||||
|
return $dashboard;
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
$dashboard_kurzbz = $this->input->post('dashboard_kurzbz');
|
||||||
|
|
||||||
|
$result = $this->DashboardModel->insert([
|
||||||
|
'dashboard_kurzbz' => $dashboard_kurzbz
|
||||||
|
]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('dashboard_id', 'Dashboard ID', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$dashboard_id = $this->input->post('dashboard_id');
|
||||||
|
$dashboard_kurzbz = $this->input->post('dashboard_kurzbz');
|
||||||
|
$beschreibung = $this->input->post('beschreibung');
|
||||||
|
|
||||||
|
$result = $this->DashboardModel->update([
|
||||||
|
'dashboard_id' => $dashboard_id
|
||||||
|
], [
|
||||||
|
'dashboard_kurzbz' => $dashboard_kurzbz,
|
||||||
|
'beschreibung' => $beschreibung
|
||||||
|
]);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('dashboard_id', 'Dashboard ID', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$dashboard_id = $this->input->post('dashboard_id');
|
||||||
|
|
||||||
|
//delete all presets
|
||||||
|
$this->load->model('dashboard/Dashboard_Preset_model', 'DashboardPresetModel');
|
||||||
|
|
||||||
|
$result = $this->DashboardPresetModel->delete([
|
||||||
|
'dashboard_id' => $dashboard_id
|
||||||
|
]);
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
//delete all widgets
|
||||||
|
$this->load->model('dashboard/Dashboard_Widget_model', 'DashboardWidgetModel');
|
||||||
|
|
||||||
|
$result = $this->DashboardWidgetModel->delete([
|
||||||
|
'dashboard_id' => $dashboard_id
|
||||||
|
]);
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$result = $this->DashboardModel->delete($dashboard_id);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2026 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||||
|
* Provides data to the ajax get calls about addresses
|
||||||
|
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||||
|
*/
|
||||||
|
class Preset extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'list' => 'dashboard/admin:r',
|
||||||
|
'getBatch' => 'dashboard/admin:r',
|
||||||
|
'addWidget' => 'dashboard/admin:rw',
|
||||||
|
'removeWidget' => 'dashboard/admin:rw'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Load language phrases
|
||||||
|
$this->loadPhrases([
|
||||||
|
'ui'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Libraries
|
||||||
|
$this->load->library('dashboard/DashboardLib');
|
||||||
|
|
||||||
|
// Models
|
||||||
|
$this->load->model('ressource/Funktion_model', 'FunktionModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function list($dashboard_kurzbz)
|
||||||
|
{
|
||||||
|
$sql = "
|
||||||
|
WITH
|
||||||
|
dashboard_presets AS (
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM
|
||||||
|
dashboard.tbl_dashboard_preset dp
|
||||||
|
JOIN
|
||||||
|
dashboard.tbl_dashboard d ON d.dashboard_id = dp.dashboard_id
|
||||||
|
WHERE
|
||||||
|
d.dashboard_kurzbz = {$this->db->escape($dashboard_kurzbz)}
|
||||||
|
),
|
||||||
|
general AS (
|
||||||
|
SELECT
|
||||||
|
'general' AS funktion_kurzbz,
|
||||||
|
'Allgemein' AS beschreibung
|
||||||
|
)
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
f.funktion_kurzbz,
|
||||||
|
f.beschreibung,
|
||||||
|
COUNT(p.preset_id) AS has_preset
|
||||||
|
FROM
|
||||||
|
general f
|
||||||
|
LEFT JOIN
|
||||||
|
dashboard_presets p ON p.funktion_kurzbz IS NULL
|
||||||
|
GROUP BY
|
||||||
|
f.funktion_kurzbz, f.beschreibung
|
||||||
|
)
|
||||||
|
UNION ALL
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
f.funktion_kurzbz,
|
||||||
|
f.beschreibung,
|
||||||
|
COUNT(p.preset_id) AS has_preset
|
||||||
|
FROM
|
||||||
|
public.tbl_funktion f
|
||||||
|
LEFT JOIN
|
||||||
|
dashboard_presets p ON p.funktion_kurzbz = f.funktion_kurzbz
|
||||||
|
GROUP BY
|
||||||
|
f.funktion_kurzbz, f.beschreibung
|
||||||
|
ORDER BY
|
||||||
|
f.beschreibung ASC
|
||||||
|
)
|
||||||
|
";
|
||||||
|
|
||||||
|
$result = $this->FunktionModel->execReadOnlyQuery($sql);
|
||||||
|
|
||||||
|
$funktionen = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($funktionen);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBatch()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('db', 'Dashboard', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$db = $this->input->post('db');
|
||||||
|
$funktionen = $this->input->post('funktionen') ?: [];
|
||||||
|
|
||||||
|
$result = [];
|
||||||
|
|
||||||
|
foreach ($funktionen as $funktion) {
|
||||||
|
$conf = $this->dashboardlib->getPreset($db, $funktion);
|
||||||
|
if ($conf) {
|
||||||
|
$preset = json_decode($conf->preset, true);
|
||||||
|
$result[$funktion] = $preset;
|
||||||
|
} else {
|
||||||
|
$result[$funktion] = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->terminateWithSuccess($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addWidget()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('dashboard', 'Dashboard', 'required');
|
||||||
|
$this->form_validation->set_rules('funktion_kurzbz', 'Funktion', 'required');
|
||||||
|
$this->form_validation->set_rules('widget[widget]', 'Widget', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$dashboard_kurzbz = $this->input->post('dashboard');
|
||||||
|
$funktion_kurzbz = $this->input->post('funktion_kurzbz');
|
||||||
|
$widget = $this->input->post('widget');
|
||||||
|
|
||||||
|
if (!isset($widget['widgetid']))
|
||||||
|
$widget['widgetid'] = $this->dashboardlib->generateWidgetId($dashboard_kurzbz);
|
||||||
|
|
||||||
|
$preset = $this->dashboardlib->getPresetOrCreateEmptyPreset($dashboard_kurzbz, $funktion_kurzbz);
|
||||||
|
|
||||||
|
$preset_decoded = json_decode($preset->preset, true);
|
||||||
|
|
||||||
|
$preset_decoded[$widget['widgetid']] = $widget;
|
||||||
|
|
||||||
|
$preset->preset = json_encode($preset_decoded);
|
||||||
|
|
||||||
|
$result = $this->dashboardlib->insertOrUpdatePreset($preset);
|
||||||
|
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($widget['widgetid']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeWidget()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('db', 'Dashboard', 'required');
|
||||||
|
$this->form_validation->set_rules('funktion_kurzbz', 'Funktion', 'required');
|
||||||
|
$this->form_validation->set_rules('widgetid', 'Widget', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$dashboard_kurzbz = $this->input->post('db');
|
||||||
|
$funktion_kurzbz = $this->input->post('funktion_kurzbz');
|
||||||
|
$widgetid = $this->input->post('widgetid');
|
||||||
|
|
||||||
|
$preset = $this->dashboardlib->getPreset($dashboard_kurzbz, $funktion_kurzbz);
|
||||||
|
if (!$preset)
|
||||||
|
show_404();
|
||||||
|
|
||||||
|
$preset_decoded = json_decode($preset->preset, true);
|
||||||
|
|
||||||
|
if (!isset($preset_decoded[$widgetid]))
|
||||||
|
show_404();
|
||||||
|
|
||||||
|
unset($preset_decoded[$widgetid]);
|
||||||
|
|
||||||
|
$preset->preset = json_encode($preset_decoded);
|
||||||
|
|
||||||
|
$result = $this->dashboardlib->insertOrUpdatePreset($preset);
|
||||||
|
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(array('msg' => $this->p->t('dashboard', 'success_savePreset')));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2026 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||||
|
* Provides data to the ajax get calls about the users dashboard
|
||||||
|
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||||
|
*/
|
||||||
|
class User extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'get' => 'dashboard/benutzer:r',
|
||||||
|
'addWidget' => 'dashboard/benutzer:rw',
|
||||||
|
'removeWidget' => 'dashboard/benutzer:rw'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Libraries
|
||||||
|
$this->load->library('dashboard/DashboardLib');
|
||||||
|
|
||||||
|
// Models
|
||||||
|
$this->load->model('ressource/Funktion_model', 'FunktionModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function get($dashboard_kurzbz)
|
||||||
|
{
|
||||||
|
$dashboard = $this->dashboardlib->getDashboardByKurzbz($dashboard_kurzbz);
|
||||||
|
if (!$dashboard)
|
||||||
|
show_404();
|
||||||
|
|
||||||
|
$uid = $this->authlib->getAuthObj()->username;
|
||||||
|
|
||||||
|
$mergedconfig = $this->dashboardlib->getMergedUserConfig($dashboard->dashboard_id, $uid);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($mergedconfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addWidget()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('dashboard', 'Dashboard', 'required');
|
||||||
|
$this->form_validation->set_rules('widget[widget]', 'Widget', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$widget = $this->input->post('widget');
|
||||||
|
$dashboard_kurzbz = $this->input->post('dashboard');
|
||||||
|
$uid = $this->authlib->getAuthObj()->username;
|
||||||
|
|
||||||
|
if (!isset($widget['widgetid']))
|
||||||
|
$widget['widgetid'] = $this->dashboardlib->generateWidgetId($dashboard_kurzbz);
|
||||||
|
|
||||||
|
if (isset($widget['source']))
|
||||||
|
unset($widget['source']);
|
||||||
|
|
||||||
|
$override = $this->dashboardlib->getOverrideOrCreateEmptyOverride($dashboard_kurzbz, $uid);
|
||||||
|
|
||||||
|
$override_decoded = json_decode($override->override, true);
|
||||||
|
|
||||||
|
$override_decoded[$widget['widgetid']] = $widget;
|
||||||
|
|
||||||
|
$override->override = json_encode($override_decoded);
|
||||||
|
|
||||||
|
$result = $this->dashboardlib->insertOrUpdateOverride($override);
|
||||||
|
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($widget['widgetid']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeWidget()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('dashboard', 'Dashboard', 'required');
|
||||||
|
$this->form_validation->set_rules('widget', 'Widget', 'required');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$widget_id = $this->input->post('widget');
|
||||||
|
$dashboard_kurzbz = $this->input->post('dashboard');
|
||||||
|
$uid = $this->authlib->getAuthObj()->username;
|
||||||
|
|
||||||
|
$override = $this->dashboardlib->getOverride($dashboard_kurzbz, $uid);
|
||||||
|
if (!$override)
|
||||||
|
show_404();
|
||||||
|
|
||||||
|
$override_decoded = json_decode($override->override, true);
|
||||||
|
|
||||||
|
if (!isset($override_decoded[$widget_id]))
|
||||||
|
show_404();
|
||||||
|
|
||||||
|
unset($override_decoded[$widget_id]);
|
||||||
|
|
||||||
|
$override->override = json_encode($override_decoded);
|
||||||
|
|
||||||
|
$result = $this->dashboardlib->insertOrUpdateOverride($override);
|
||||||
|
|
||||||
|
$this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2026 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||||
|
* Provides data to the ajax get calls about the users dashboard
|
||||||
|
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||||
|
*/
|
||||||
|
class Widget extends FHCAPI_Controller
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct([
|
||||||
|
'get' => ['dashboard/benutzer:r', 'dashboard/admin:r'],
|
||||||
|
'list' => 'dashboard/admin:r',
|
||||||
|
'listAllowed' => ['dashboard/benutzer:rw', 'dashboard/admin:r'],
|
||||||
|
'setAllowed' => 'dashboard/admin:rw'
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Libraries
|
||||||
|
$this->load->library('dashboard/DashboardLib');
|
||||||
|
|
||||||
|
// Models
|
||||||
|
$this->load->model('dashboard/Widget_model', 'WidgetModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function get($id)
|
||||||
|
{
|
||||||
|
$result = $this->WidgetModel->load($id);
|
||||||
|
|
||||||
|
$widget = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
if (!$widget)
|
||||||
|
return $this->terminateWithSuccess([
|
||||||
|
"widget_id" => 0,
|
||||||
|
"widget_kurzbz" => "notfound",
|
||||||
|
"arguments" => [
|
||||||
|
"className" => 'alert-danger',
|
||||||
|
"title" => 'Widget Not Found',
|
||||||
|
"msg" => 'The widget with the id ' . $id . ' could not be found'
|
||||||
|
],
|
||||||
|
"setup" => [
|
||||||
|
"name" => 'Widget Not Found',
|
||||||
|
"file" => absoluteJsImportUrl('public/js/components/DashboardWidget/Default.js'),
|
||||||
|
"width" => 1,
|
||||||
|
"height" => 1
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$widget = current($widget);
|
||||||
|
$widget->arguments = json_decode($widget->arguments);
|
||||||
|
$tmpsetup = json_decode($widget->setup);
|
||||||
|
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||||
|
$widget->setup = $tmpsetup;
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function list($dashboard)
|
||||||
|
{
|
||||||
|
$result = $this->WidgetModel->getWithAllowedForDashboard($dashboard);
|
||||||
|
|
||||||
|
$widgets = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$widgets = array_map(function ($widget) {
|
||||||
|
$widget->arguments = json_decode($widget->arguments);
|
||||||
|
$tmpsetup = json_decode($widget->setup);
|
||||||
|
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||||
|
$widget->setup = $tmpsetup;
|
||||||
|
return $widget;
|
||||||
|
}, $widgets);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($widgets);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function listAllowed($dashboard)
|
||||||
|
{
|
||||||
|
$result = $this->WidgetModel->getForDashboard($dashboard);
|
||||||
|
|
||||||
|
$widgets = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$widgets = array_map(function ($widget) {
|
||||||
|
$widget->arguments = json_decode($widget->arguments);
|
||||||
|
$tmpsetup = json_decode($widget->setup);
|
||||||
|
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||||
|
$widget->setup = $tmpsetup;
|
||||||
|
return $widget;
|
||||||
|
}, $widgets);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($widgets);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAllowed()
|
||||||
|
{
|
||||||
|
$this->load->library('form_validation');
|
||||||
|
|
||||||
|
$this->form_validation->set_rules('dashboard_id', 'Dashboard', 'required');
|
||||||
|
$this->form_validation->set_rules('widget_id', 'Widget', 'required');
|
||||||
|
$this->form_validation->set_rules('allowed', 'Allowed', 'is_bool');
|
||||||
|
|
||||||
|
if (!$this->form_validation->run())
|
||||||
|
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'dashboard_id' => $this->input->post('dashboard_id'),
|
||||||
|
'widget_id' => $this->input->post('widget_id')
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->load->model('dashboard/Dashboard_Widget_model', 'DashboardWidgetModel');
|
||||||
|
|
||||||
|
if ($this->input->post('allowed'))
|
||||||
|
$result = $this->DashboardWidgetModel->insert($data);
|
||||||
|
else
|
||||||
|
$result = $this->DashboardWidgetModel->delete($data);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,9 +9,10 @@ class Detailheader extends FHCAPI_Controller
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'getHeader' => ['vertrag/mitarbeiter:r'],
|
'getHeader' => self::PERM_LOGGED,
|
||||||
'getPersonAbteilung' => ['vertrag/mitarbeiter:r'],
|
'getPersonAbteilung' => self::PERM_LOGGED,
|
||||||
'getLeitungOrg' => ['vertrag/mitarbeiter:r'],
|
'getLeitungOrg' => self::PERM_LOGGED,
|
||||||
|
'getSemesterStati' => self::PERM_LOGGED,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,6 +49,17 @@ class Detailheader extends FHCAPI_Controller
|
|||||||
$this->terminateWithSuccess(current($data));
|
$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.");
|
||||||
|
//~ }
|
||||||
|
//~ }
|
||||||
|
//~ }
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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 ?: []);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ class Konto extends FHCAPI_Controller
|
|||||||
|
|
||||||
// Load language phrases
|
// Load language phrases
|
||||||
$this->loadPhrases([
|
$this->loadPhrases([
|
||||||
'konto'
|
'konto',
|
||||||
|
'lehre'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,7 +113,7 @@ class Konto extends FHCAPI_Controller
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function getBuchungstypen()
|
public function getBuchungstypen($studiensemester_kurzbz = null)
|
||||||
{
|
{
|
||||||
$this->load->model('crm/Buchungstyp_model', 'BuchungstypModel');
|
$this->load->model('crm/Buchungstyp_model', 'BuchungstypModel');
|
||||||
|
|
||||||
@@ -122,6 +123,7 @@ class Konto extends FHCAPI_Controller
|
|||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->_getOEHBeitrag($data, $studiensemester_kurzbz);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -494,4 +496,43 @@ class Konto extends FHCAPI_Controller
|
|||||||
|
|
||||||
$this->terminateWithSuccess();
|
$this->terminateWithSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function _getOEHBeitrag(&$data, $studiensemester_kurzbz = null)
|
||||||
|
{
|
||||||
|
if (is_null($studiensemester_kurzbz))
|
||||||
|
{
|
||||||
|
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||||
|
$studiensemester_akt = $this->variablelib->getVar('semester_aktuell');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
if ($this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
|
||||||
|
$studiensemester_akt = $studiensemester_kurzbz;
|
||||||
|
else
|
||||||
|
$this->terminateWithError($this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel');
|
||||||
|
$oehBeitrag = $this->OehbeitragModel->getByStudiensemester($studiensemester_akt);
|
||||||
|
|
||||||
|
$oehStandardbetrag = null;
|
||||||
|
if (hasData($oehBeitrag))
|
||||||
|
{
|
||||||
|
$oeh = getData($oehBeitrag)[0];
|
||||||
|
$summe = ($oeh->studierendenbeitrag + $oeh->versicherung) * -1;
|
||||||
|
$oehStandardbetrag = number_format((float)$summe, 2, '.', '');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($oehStandardbetrag !== null)
|
||||||
|
{
|
||||||
|
$data = array_map(function ($buchungstyp) use ($oehStandardbetrag) {
|
||||||
|
if (isset($buchungstyp->buchungstyp_kurzbz) && (strtolower($buchungstyp->buchungstyp_kurzbz) === 'oeh'))
|
||||||
|
{
|
||||||
|
$buchungstyp->standardbetrag = $oehStandardbetrag;
|
||||||
|
}
|
||||||
|
return $buchungstyp;
|
||||||
|
}, $data);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,6 +90,15 @@ class Projektarbeit extends FHCAPI_Controller
|
|||||||
|
|
||||||
if (!isset($projektarbeit_id) || !is_numeric($projektarbeit_id)) return $this->terminateWithError('Projektarbeit Id missing', self::ERROR_TYPE_GENERAL);
|
if (!isset($projektarbeit_id) || !is_numeric($projektarbeit_id)) return $this->terminateWithError('Projektarbeit Id missing', self::ERROR_TYPE_GENERAL);
|
||||||
|
|
||||||
|
$result = $this->fetchProjektarbeitByID($projektarbeit_id);
|
||||||
|
|
||||||
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
$this->terminateWithSuccess(current($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function fetchProjektarbeitById($projektarbeit_id) {
|
||||||
|
$this->ProjektarbeitModel->resetQuery();
|
||||||
$this->ProjektarbeitModel->addSelect(
|
$this->ProjektarbeitModel->addSelect(
|
||||||
'lehre.tbl_projektarbeit.projektarbeit_id, titel, titel_english, themenbereich, projekttyp_kurzbz, lehrveranstaltung_id, lehreinheit_id,
|
'lehre.tbl_projektarbeit.projektarbeit_id, titel, titel_english, themenbereich, projekttyp_kurzbz, lehrveranstaltung_id, lehreinheit_id,
|
||||||
firma_id, beginn, ende, gesperrtbis, note, final, freigegeben, tbl_projektarbeit.anmerkung, fa.name AS firma_name'
|
firma_id, beginn, ende, gesperrtbis, note, final, freigegeben, tbl_projektarbeit.anmerkung, fa.name AS firma_name'
|
||||||
@@ -97,13 +106,10 @@ class Projektarbeit extends FHCAPI_Controller
|
|||||||
$this->ProjektarbeitModel->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
|
$this->ProjektarbeitModel->addJoin('lehre.tbl_lehreinheit le', 'lehreinheit_id');
|
||||||
$this->ProjektarbeitModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
|
$this->ProjektarbeitModel->addJoin('lehre.tbl_lehrveranstaltung lv', 'lehrveranstaltung_id');
|
||||||
$this->ProjektarbeitModel->addJoin('public.tbl_firma fa', 'firma_id', 'LEFT');
|
$this->ProjektarbeitModel->addJoin('public.tbl_firma fa', 'firma_id', 'LEFT');
|
||||||
$result = $this->ProjektarbeitModel->loadWhere(
|
return $this->ProjektarbeitModel->loadWhere(
|
||||||
array('projektarbeit_id' => $projektarbeit_id)
|
array('projektarbeit_id' => $projektarbeit_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
|
||||||
|
|
||||||
$this->terminateWithSuccess(current($data));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -132,6 +138,7 @@ 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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -144,6 +144,7 @@ class Student extends FHCAPI_Controller
|
|||||||
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
||||||
. ") AS statusofsemester"
|
. ") AS statusofsemester"
|
||||||
);
|
);
|
||||||
|
$this->PrestudentModel->addSelect($this->PrestudentModel->escape($studiensemester_kurzbz) . ' as query_studiensemester_kurzbz');
|
||||||
|
|
||||||
$this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT');
|
$this->PrestudentModel->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT');
|
||||||
$this->PrestudentModel->addJoin('public.tbl_benutzer b', 'student_uid = uid', 'LEFT');
|
$this->PrestudentModel->addJoin('public.tbl_benutzer b', 'student_uid = uid', 'LEFT');
|
||||||
|
|||||||
@@ -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,34 +554,30 @@ 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
|
||||||
@@ -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->prepareQuery($studiensemester_kurzbz);
|
$this->studentlistlib->addSelect("COALESCE(
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("COALESCE(
|
|
||||||
v.semester::text,
|
v.semester::text,
|
||||||
CASE
|
CASE
|
||||||
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
WHEN pls.status_kurzbz IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent')
|
||||||
@@ -664,19 +642,18 @@ class Students extends FHCAPI_Controller
|
|||||||
ELSE ''::text
|
ELSE ''::text
|
||||||
END
|
END
|
||||||
) AS semester", false);
|
) AS semester", false);
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.verband::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.verband::text, ''::text) AS verband");
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.gruppe::text, ''::text)");
|
$this->studentlistlib->addSelect("COALESCE(v.gruppe::text, ''::text) AS gruppe");
|
||||||
|
|
||||||
|
$this->studentlistlib->addWhere('tbl_prestudent.prestudent_id', $prestudent_id);
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere([
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
'tbl_prestudent.prestudent_id' => $prestudent_id
|
|
||||||
]);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->decodeTagsJsonInResult($data);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -700,26 +677,16 @@ class Students extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('v.semester');
|
|
||||||
$this->PrestudentModel->addSelect('v.verband');
|
|
||||||
$this->PrestudentModel->addSelect('v.gruppe');
|
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
|
$this->studentlistlib->addWhere('s.student_uid', $student_uid);
|
||||||
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere([
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
's.student_uid' => $student_uid
|
|
||||||
]);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->decodeTagsJsonInResult($data);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -744,24 +711,16 @@ class Students extends FHCAPI_Controller
|
|||||||
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
$this->terminateWithError($studiensemester_kurzbz . ' - ' . $this->p->t('lehre', 'error_noStudiensemester'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
$this->studentlistlib->addWhere('p.person_id', $person_id);
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('v.semester');
|
|
||||||
$this->PrestudentModel->addSelect('v.verband');
|
|
||||||
$this->PrestudentModel->addSelect('v.gruppe');
|
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
$this->addFilter($studiensemester_kurzbz);
|
||||||
|
|
||||||
$result = $this->PrestudentModel->loadWhere([
|
$result = $this->studentlistlib->execute($studiensemester_kurzbz);
|
||||||
'p.person_id' => $person_id
|
|
||||||
]);
|
|
||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
$this->decodeTagsJsonInResult($data);
|
||||||
$this->terminateWithSuccess($data);
|
$this->terminateWithSuccess($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -790,29 +749,8 @@ class Students extends FHCAPI_Controller
|
|||||||
|
|
||||||
$data = $this->getDataOrTerminateWithError($result);
|
$data = $this->getDataOrTerminateWithError($result);
|
||||||
|
|
||||||
|
|
||||||
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
|
|
||||||
|
|
||||||
$this->prepareQuery($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("COALESCE(v.semester::text, CASE WHEN public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) IN ('Aufgenommener', 'Bewerber', 'Wartender', 'interessent') THEN public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)::text ELSE ''::text END) AS semester", false);
|
|
||||||
$this->PrestudentModel->addSelect('v.verband');
|
|
||||||
$this->PrestudentModel->addSelect('v.gruppe');
|
|
||||||
|
|
||||||
//add status per semester
|
|
||||||
$this->PrestudentModel->addSelect(
|
|
||||||
"public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
|
|
||||||
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
|
||||||
. ") AS statusofsemester"
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->addSelectPrioRel();
|
|
||||||
|
|
||||||
$this->addFilter($studiensemester_kurzbz);
|
|
||||||
|
|
||||||
$prestudent_ids = [];
|
$prestudent_ids = [];
|
||||||
$student_uids = [];
|
$student_uids = [];
|
||||||
$this->addMeta('data', $data);
|
|
||||||
foreach ($data as $row) {
|
foreach ($data as $row) {
|
||||||
$dataset = json_decode($row->data);
|
$dataset = json_decode($row->data);
|
||||||
if ($row->type == 'prestudent') {
|
if ($row->type == 'prestudent') {
|
||||||
@@ -822,187 +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->load->config('stv');
|
|
||||||
$tags = $this->config->item('stv_prestudent_tags');
|
|
||||||
|
|
||||||
$whereTags = '';
|
|
||||||
if (is_array($tags) && !isEmptyArray($tags)) {
|
|
||||||
$tags = array_keys($tags);
|
|
||||||
|
|
||||||
foreach ($tags as $key => $tag) {
|
|
||||||
$tags[$key] = $this->db->escape($tag);
|
|
||||||
}
|
|
||||||
$whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
|
|
||||||
}
|
|
||||||
$subQueryTag = "
|
|
||||||
(
|
|
||||||
SELECT
|
|
||||||
tag.prestudent_id,
|
|
||||||
COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
|
|
||||||
FROM (
|
|
||||||
SELECT DISTINCT ON (n.notiz_id)
|
|
||||||
n.notiz_id AS id,
|
|
||||||
nt.typ_kurzbz,
|
|
||||||
array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
|
|
||||||
n.text AS notiz,
|
|
||||||
nt.style,
|
|
||||||
n.erledigt AS done,
|
|
||||||
nz.prestudent_id
|
|
||||||
FROM public.tbl_notizzuordnung AS nz
|
|
||||||
JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id
|
|
||||||
JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz "
|
|
||||||
. $whereTags .
|
|
||||||
"
|
|
||||||
) AS tag
|
|
||||||
GROUP BY tag.prestudent_id
|
|
||||||
) AS tag_data_agg
|
|
||||||
";
|
|
||||||
|
|
||||||
$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->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
|
|
||||||
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect("b.uid");
|
|
||||||
$this->PrestudentModel->addSelect('tag_data_agg.tags');
|
|
||||||
$this->PrestudentModel->addSelect('titelpre');
|
|
||||||
$this->PrestudentModel->addSelect('nachname');
|
|
||||||
$this->PrestudentModel->addSelect('vorname');
|
|
||||||
$this->PrestudentModel->addSelect('wahlname');
|
|
||||||
$this->PrestudentModel->addSelect('vornamen');
|
|
||||||
$this->PrestudentModel->addSelect('titelpost');
|
|
||||||
$this->PrestudentModel->addSelect('ersatzkennzeichen');
|
|
||||||
$this->PrestudentModel->addSelect('gebdatum');
|
|
||||||
$this->PrestudentModel->addSelect('geschlecht');
|
|
||||||
$this->PrestudentModel->addSelect('foto');
|
|
||||||
$this->PrestudentModel->addSelect('foto_sperre');
|
|
||||||
|
|
||||||
// semester
|
|
||||||
// verband
|
|
||||||
// gruppe
|
|
||||||
|
|
||||||
//add status per semester
|
|
||||||
$this->PrestudentModel->addSelect(
|
|
||||||
"public.get_rolle_prestudent(public.tbl_prestudent.prestudent_id, "
|
|
||||||
. $this->PrestudentModel->escape($studiensemester_kurzbz)
|
|
||||||
. ") AS statusofsemester"
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.studiengang_kz');
|
|
||||||
$this->PrestudentModel->addSelect('stg.bezeichnung AS stg_bezeichnung');
|
|
||||||
$this->PrestudentModel->addSelect("s.matrikelnr");
|
|
||||||
$this->PrestudentModel->addSelect('p.person_id');
|
|
||||||
$this->PrestudentModel->addSelect('pls.status_kurzbz AS status');
|
|
||||||
$this->PrestudentModel->addSelect('pls.datum AS status_datum');
|
|
||||||
$this->PrestudentModel->addSelect('pls.bestaetigtam AS status_bestaetigung');
|
|
||||||
$this->PrestudentModel->addSelect(
|
|
||||||
"(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS mail_privat",
|
|
||||||
false
|
|
||||||
);
|
|
||||||
$this->PrestudentModel->addSelect("
|
|
||||||
CASE WHEN b.uid IS NOT NULL AND b.uid<>''
|
|
||||||
THEN CONCAT(b.uid, '@', " . $this->PrestudentModel->escape(DOMAIN) . ")
|
|
||||||
ELSE '' END AS mail_intern", false);
|
|
||||||
$this->PrestudentModel->addSelect('p.anmerkung AS anmerkungen');
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.anmerkung');
|
|
||||||
$this->PrestudentModel->addSelect('pls.orgform_kurzbz');
|
|
||||||
$this->PrestudentModel->addSelect('aufmerksamdurch_kurzbz');
|
|
||||||
$this->PrestudentModel->addSelect(
|
|
||||||
"(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=ps.prestudent_id) AS punkte",
|
|
||||||
false
|
|
||||||
);
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.dual');
|
|
||||||
$this->PrestudentModel->addSelect('p.matr_nr');
|
|
||||||
$this->PrestudentModel->addSelect('sp.bezeichnung AS studienplan_bezeichnung');
|
|
||||||
$this->PrestudentModel->addSelect('tbl_prestudent.prestudent_id');
|
|
||||||
|
|
||||||
// priorisierung_relativ
|
|
||||||
|
|
||||||
$this->PrestudentModel->addSelect('mentor');
|
|
||||||
$this->PrestudentModel->addSelect('b.aktiv AS bnaktiv');
|
|
||||||
$this->PrestudentModel->addSelect('unruly');
|
|
||||||
|
|
||||||
$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
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -15,7 +15,9 @@ class Tags extends Tag_Controller
|
|||||||
'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,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->config->load('stv');
|
$this->config->load('stv');
|
||||||
@@ -45,4 +47,5 @@ class Tags extends Tag_Controller
|
|||||||
{
|
{
|
||||||
parent::doneTag($this->config->item('stv_prestudent_tags'));
|
parent::doneTag($this->config->item('stv_prestudent_tags'));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,12 +13,13 @@ class Mylv extends Auth_Controller
|
|||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
|
||||||
parent::__construct([
|
parent::__construct([
|
||||||
'Student' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions?
|
'Student' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'], // TODO(chris): permissions?
|
||||||
'Studiensemester' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions?
|
'Studiensemester' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'], // TODO(chris): permissions?
|
||||||
'Lvs' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions?
|
'Lvs' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'], // TODO(chris): permissions?
|
||||||
'Info' => ['student/anrechnung_beantragen:r','user:r'], // TODO(chris): permissions?
|
'Info' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'], // TODO(chris): permissions?
|
||||||
'Pruefungen' => ['student/anrechnung_beantragen:r','user:r'] // TODO(chris): permissions?
|
'Pruefungen' => ['student/anrechnung_beantragen:r','user:r', 'basis/cis:r'] // TODO(chris): permissions?
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,13 +45,27 @@ class Mylv extends Auth_Controller
|
|||||||
public function Studiensemester()
|
public function Studiensemester()
|
||||||
{
|
{
|
||||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||||
|
|
||||||
$result = $this->StudiensemesterModel->getWhereStudentHasLvs(getAuthUID());
|
$isMitarbeiter = getData($this->MitarbeiterModel->isMitarbeiter(getAuthUID())) ?? false;
|
||||||
|
if($isMitarbeiter) {
|
||||||
|
$result = $this->StudiensemesterModel->getWhereMitarbeiterHasLvs(getAuthUID());
|
||||||
|
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
return $this->outputJsonError(getError($result));
|
return $this->outputJsonError(getError($result));
|
||||||
|
|
||||||
$this->outputJsonSuccess(getData($result));
|
$this->outputJsonSuccess(getData($result));
|
||||||
|
} else if(getData($this->StudentModel->isStudent(getAuthUID())) ?? false) { // $isStudent
|
||||||
|
$result = $this->StudiensemesterModel->getWhereStudentHasLvs(getAuthUID());
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
return $this->outputJsonError(getError($result));
|
||||||
|
|
||||||
|
$this->outputJsonSuccess(getData($result));
|
||||||
|
} else {
|
||||||
|
$this->outputJsonError('neither student or mitarbeiter');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -58,13 +73,27 @@ class Mylv extends Auth_Controller
|
|||||||
public function Lvs($studiensemester_kurzbz)
|
public function Lvs($studiensemester_kurzbz)
|
||||||
{
|
{
|
||||||
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
|
||||||
|
$this->load->model('crm/Student_model', 'StudentModel');
|
||||||
|
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||||
|
|
||||||
$result = $this->LehrveranstaltungModel->getLvsByStudentWithGrades(getAuthUID(), $studiensemester_kurzbz, getUserLanguage());
|
$isMitarbeiter = getData($this->MitarbeiterModel->isMitarbeiter(getAuthUID())) ?? false;
|
||||||
|
if($isMitarbeiter) {
|
||||||
|
$result = $this->LehrveranstaltungModel->getLvsByMitarbeiterInSemester(getAuthUID(), $studiensemester_kurzbz);
|
||||||
|
|
||||||
if (isError($result))
|
if (isError($result))
|
||||||
return $this->outputJsonError(getError($result));
|
return $this->outputJsonError(getError($result));
|
||||||
|
|
||||||
$this->outputJsonSuccess(getData($result));
|
$this->outputJsonSuccess(getData($result));
|
||||||
|
} else if(getData($this->StudentModel->isStudent(getAuthUID())) ?? false) { // $isStudent
|
||||||
|
$result = $this->LehrveranstaltungModel->getLvsByStudentWithGrades(getAuthUID(), $studiensemester_kurzbz, getUserLanguage());
|
||||||
|
|
||||||
|
if (isError($result))
|
||||||
|
return $this->outputJsonError(getError($result));
|
||||||
|
|
||||||
|
$this->outputJsonSuccess(getData($result));
|
||||||
|
} else {
|
||||||
|
$this->outputJsonError('neither student or mitarbeiter');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2026 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
class Admin extends Auth_Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
// Set required permissions
|
||||||
|
parent::__construct(
|
||||||
|
array(
|
||||||
|
'index' => 'dashboard/admin:rw',
|
||||||
|
'preview' => 'dashboard/admin:r',
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$this->load->view('dashboard/admin.php', []);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function preview($dashboard_kurzbz = 'CIS')
|
||||||
|
{
|
||||||
|
$this->load->view('dashboard/preview.php', [
|
||||||
|
'dashboard_kurzbz' => $dashboard_kurzbz
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
<?php
|
|
||||||
defined('BASEPATH') || exit('No direct script access allowed');
|
|
||||||
|
|
||||||
class Api extends Auth_Controller
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct(
|
|
||||||
array(
|
|
||||||
'index' => 'dashboard/admin:rw',
|
|
||||||
'getNews' => 'dashboard/benutzer:r',
|
|
||||||
'getAmpeln' => 'dashboard/benutzer:r',
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->library('AuthLib', null, 'AuthLib');
|
|
||||||
|
|
||||||
$this->_setAuthUID();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
echo 'Dashboard API Controller';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get News.
|
|
||||||
*/
|
|
||||||
public function getNews()
|
|
||||||
{
|
|
||||||
$limit = $this->input->get('limit');
|
|
||||||
|
|
||||||
$this->load->model('content/News_model', 'NewsModel');
|
|
||||||
|
|
||||||
$result = $this->NewsModel->getAll($limit);
|
|
||||||
|
|
||||||
if (hasData($result))
|
|
||||||
{
|
|
||||||
$this->outputJson(getData($result), REST_Controller::HTTP_OK);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->terminateWithJsonError('fehler entdeckt');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Ampeln.
|
|
||||||
*/
|
|
||||||
public function getAmpeln()
|
|
||||||
{
|
|
||||||
|
|
||||||
$this->load->model('content/Ampel_model', 'AmpelModel');
|
|
||||||
$result = $this->AmpelModel->getByUser($this->_uid);
|
|
||||||
|
|
||||||
if (hasData($result))
|
|
||||||
{
|
|
||||||
$this->outputJson(getData($result), REST_Controller::HTTP_OK);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->terminateWithJsonError('fehler entdeckt');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve the UID of the logged user and checks if it is valid
|
|
||||||
*/
|
|
||||||
private function _setAuthUID()
|
|
||||||
{
|
|
||||||
$this->_uid = getAuthUID();
|
|
||||||
|
|
||||||
if (!$this->_uid) show_error('User authentification failed');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,216 +0,0 @@
|
|||||||
<?php
|
|
||||||
defined('BASEPATH') || exit('No direct script access allowed');
|
|
||||||
/**
|
|
||||||
* Description of Config
|
|
||||||
*
|
|
||||||
* @author bambi
|
|
||||||
*/
|
|
||||||
class Config extends Auth_Controller
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct(
|
|
||||||
array(
|
|
||||||
'index' => 'dashboard/benutzer:r',
|
|
||||||
'dummy' => 'dashboard/benutzer:r',
|
|
||||||
'genWidgetId' => 'dashboard/benutzer:rw',
|
|
||||||
'addWidgetsToPreset' => 'dashboard/admin:rw',
|
|
||||||
'removeWidgetFromPreset' => 'dashboard/admin:rw',
|
|
||||||
'addWidgetsToUserOverride' => 'dashboard/benutzer:rw',
|
|
||||||
'removeWidgetFromUserOverride' => 'dashboard/benutzer:rw',
|
|
||||||
'funktionen' => 'dashboard/admin:r',
|
|
||||||
'preset' => 'dashboard/admin:r',
|
|
||||||
'presetBatch' => 'dashboard/admin:r'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->library('dashboard/DashboardLib', null, 'DashboardLib');
|
|
||||||
$this->load->library('AuthLib', null, 'AuthLib');
|
|
||||||
$this->load->model('ressource/Funktion_model', 'FunktionModel');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
$dashboard_kurzbz = $this->input->get('db');
|
|
||||||
$uid = $this->AuthLib->getAuthObj()->username;
|
|
||||||
|
|
||||||
$dashboard = $this->DashboardLib->getDashboardByKurzbz($dashboard_kurzbz);
|
|
||||||
if(!$dashboard) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError(array(
|
|
||||||
'error' => 'Dashboard ' . $dashboard_kurzbz . ' not found.'
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
$mergedconfig = $this->DashboardLib->getMergedConfig($dashboard->dashboard_id, $uid);
|
|
||||||
$this->outputJsonSuccess($mergedconfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function genWidgetId()
|
|
||||||
{
|
|
||||||
$dashboard_kurzbz = $this->input->get('db');
|
|
||||||
$widgetid = $this->DashboardLib->generateWidgetId($dashboard_kurzbz);
|
|
||||||
$this->outputJsonSuccess(array(
|
|
||||||
'widgetid' => $widgetid
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addWidgetsToPreset()
|
|
||||||
{
|
|
||||||
$input = json_decode($this->input->raw_input_stream);
|
|
||||||
$dashboard_kurzbz = $input->db;
|
|
||||||
$funktion_kurzbz = $input->funktion_kurzbz;
|
|
||||||
|
|
||||||
$preset = $this->DashboardLib->getPresetOrCreateEmptyPreset($dashboard_kurzbz, $funktion_kurzbz);
|
|
||||||
|
|
||||||
$preset_decoded = json_decode($preset->preset, true);
|
|
||||||
|
|
||||||
$this->DashboardLib->addWidgetsToWidgets($preset_decoded, $dashboard_kurzbz, $funktion_kurzbz, $input->widgets);
|
|
||||||
|
|
||||||
$preset->preset = json_encode($preset_decoded);
|
|
||||||
|
|
||||||
$result = $this->DashboardLib->insertOrUpdatePreset($preset);
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(500);
|
|
||||||
$this->terminateWithJsonError('preset could not be saved');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->outputJsonSuccess(array('msg' => 'preset successfully stored.', 'data' => $preset_decoded));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function removeWidgetFromPreset()
|
|
||||||
{
|
|
||||||
$input = json_decode($this->input->raw_input_stream);
|
|
||||||
$dashboard_kurzbz = $input->db;
|
|
||||||
$funktion_kurzbz = $input->funktion_kurzbz;
|
|
||||||
$widgetid = $input->widgetid;
|
|
||||||
|
|
||||||
$preset = $this->DashboardLib->getPreset($dashboard_kurzbz, $funktion_kurzbz);
|
|
||||||
if ($preset === null) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError('preset for dashboard ' . $dashboard_kurzbz . ' and funktion ' . $funktion_kurzbz . ' not found.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$preset_decoded = json_decode($preset->preset, true);
|
|
||||||
if (!$this->DashboardLib->removeWidgetFromWidgets($preset_decoded, $funktion_kurzbz, $widgetid))
|
|
||||||
{
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError('widgetid ' . $widgetid . ' not found');
|
|
||||||
}
|
|
||||||
|
|
||||||
$preset->preset = json_encode($preset_decoded);
|
|
||||||
$result = $this->DashboardLib->insertOrUpdatePreset($preset);
|
|
||||||
if (isError($result))
|
|
||||||
{
|
|
||||||
http_response_code(500);
|
|
||||||
$this->terminateWithJsonError('failed to remove widget');
|
|
||||||
}
|
|
||||||
$this->outputJsonSuccess(array('msg' => 'preset successfully updated.'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addWidgetsToUserOverride()
|
|
||||||
{
|
|
||||||
$input = json_decode($this->input->raw_input_stream);
|
|
||||||
$dashboard_kurzbz = $input->db;
|
|
||||||
$funktion_kurzbz = $input->funktion_kurzbz;
|
|
||||||
$uid = $this->AuthLib->getAuthObj()->username;
|
|
||||||
|
|
||||||
$override = $this->DashboardLib->getOverrideOrCreateEmptyOverride($dashboard_kurzbz, $uid);
|
|
||||||
|
|
||||||
$override_decoded = json_decode($override->override, true);
|
|
||||||
|
|
||||||
$this->DashboardLib->addWidgetsToWidgets($override_decoded, $dashboard_kurzbz, $funktion_kurzbz, $input->widgets);
|
|
||||||
|
|
||||||
$override->override = json_encode($override_decoded);
|
|
||||||
|
|
||||||
$result = $this->DashboardLib->insertOrUpdateOverride($override);
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(500);
|
|
||||||
$this->terminateWithJsonError('override could not be saved');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->outputJsonSuccess(array('msg' => 'override successfully stored.', 'data' => $override_decoded));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function removeWidgetFromUserOverride()
|
|
||||||
{
|
|
||||||
$input = json_decode($this->input->raw_input_stream);
|
|
||||||
$dashboard_kurzbz = $input->db;
|
|
||||||
$funktion_kurzbz = $input->funktion_kurzbz;
|
|
||||||
$uid = $this->AuthLib->getAuthObj()->username;
|
|
||||||
$widgetid = $input->widgetid;
|
|
||||||
|
|
||||||
$override = $this->DashboardLib->getOverride($dashboard_kurzbz, $uid);
|
|
||||||
if (empty($override)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError('userconfig for dashboard ' . $dashboard_kurzbz . ' not found.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$override_decoded = json_decode($override->override, true);
|
|
||||||
|
|
||||||
if (!$this->DashboardLib->removeWidgetFromWidgets($override_decoded, $funktion_kurzbz, $widgetid))
|
|
||||||
{
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError('widgetid ' . $widgetid . ' not found');
|
|
||||||
}
|
|
||||||
|
|
||||||
$override->override = json_encode($override_decoded);
|
|
||||||
$result = $this->DashboardLib->insertOrUpdateOverride($override, $uid);
|
|
||||||
if (isError($result))
|
|
||||||
{
|
|
||||||
http_response_code(500);
|
|
||||||
$this->terminateWithJsonError('failed to remove widget');
|
|
||||||
}
|
|
||||||
$this->outputJsonSuccess(array('msg' => 'override successfully updated.'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function funktionen()
|
|
||||||
{
|
|
||||||
$funktionen = $this->FunktionModel->load();
|
|
||||||
|
|
||||||
if (isError($funktionen)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($funktionen)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(getData($funktionen) ?: []);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function preset()
|
|
||||||
{
|
|
||||||
$db = $this->input->get('db');
|
|
||||||
$funktion = $this->input->get('funktion');
|
|
||||||
|
|
||||||
$conf = $this->DashboardLib->getPreset($db, $funktion);
|
|
||||||
|
|
||||||
if (!$conf)
|
|
||||||
return $this->outputJsonSuccess(['widgets' => [$funktion => []]]);
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(json_decode($conf->preset, true));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function presetBatch()
|
|
||||||
{
|
|
||||||
$db = $this->input->get('db');
|
|
||||||
$funktionen = $this->input->get('funktionen');
|
|
||||||
$result = [];
|
|
||||||
|
|
||||||
foreach ($funktionen as $funktion) {
|
|
||||||
$conf = $this->DashboardLib->getPreset($db, $funktion);
|
|
||||||
if ($conf)
|
|
||||||
{
|
|
||||||
$preset = json_decode($conf->preset, true);
|
|
||||||
if (!isset($preset[$funktion]) || !isset($preset[$funktion]['widgets']))
|
|
||||||
$result[$funktion] = [];
|
|
||||||
else
|
|
||||||
$result[$funktion] = $preset[$funktion]['widgets'];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
$result[$funktion] = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess($result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
<?php
|
|
||||||
defined('BASEPATH') || exit('No direct script access allowed');
|
|
||||||
/**
|
|
||||||
* Description of Widget
|
|
||||||
*
|
|
||||||
* @author chris
|
|
||||||
*/
|
|
||||||
class Dashboard extends Auth_Controller
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct(
|
|
||||||
array(
|
|
||||||
'index' => 'dashboard/admin:r',
|
|
||||||
'create' => 'dashboard/admin:rw',
|
|
||||||
'update' => 'dashboard/admin:rw',
|
|
||||||
'delete' => 'dashboard/admin:rw'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->library('dashboard/DashboardLib', null, 'DashboardLib');
|
|
||||||
$this->load->model('dashboard/Dashboard_model', 'DashboardModel');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
$result = $this->DashboardModel->load();
|
|
||||||
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($result)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(getData($result) ?: []);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function create()
|
|
||||||
{
|
|
||||||
$input = $this->getPostJSON();
|
|
||||||
|
|
||||||
$result = $this->DashboardModel->insert($input);
|
|
||||||
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($result)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(getData($result) ?: []);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function update()
|
|
||||||
{
|
|
||||||
$input = $this->getPostJSON();
|
|
||||||
|
|
||||||
$result = $this->DashboardModel->update($input->dashboard_id, $input);
|
|
||||||
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($result)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(getData($result) ?: []);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function delete()
|
|
||||||
{
|
|
||||||
$input = $this->getPostJSON();
|
|
||||||
|
|
||||||
$result = $this->DashboardModel->delete($input->dashboard_id);
|
|
||||||
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($result)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess(getData($result) ?: []);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
|
||||||
|
|
||||||
/**
|
|
||||||
*/
|
|
||||||
class DashboardDemo extends Auth_Controller
|
|
||||||
{
|
|
||||||
private $_uid; // uid of the logged user
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
// Set required permissions
|
|
||||||
parent::__construct(
|
|
||||||
array(
|
|
||||||
'index' => 'dashboard/benutzer:r',
|
|
||||||
'admin' => 'dashboard/admin:rw'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->library('AuthLib');
|
|
||||||
$this->load->library('WidgetLib');
|
|
||||||
|
|
||||||
$this->_setAuthUID(); // sets property uid
|
|
||||||
|
|
||||||
$this->setControllerId(); // sets the controller id
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------
|
|
||||||
// Public methods
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
$this->load->view('dashboard/dashboard_demo.php', []);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------
|
|
||||||
// Public methods
|
|
||||||
public function admin()
|
|
||||||
{
|
|
||||||
$this->load->view('dashboard/dashboard_demo_admin.php', []);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------------------------------------
|
|
||||||
// Private methods
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve the UID of the logged user and checks if it is valid
|
|
||||||
*/
|
|
||||||
private function _setAuthUID()
|
|
||||||
{
|
|
||||||
$this->_uid = getAuthUID();
|
|
||||||
|
|
||||||
if (!$this->_uid) show_error('User authentification failed');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
<?php
|
|
||||||
defined('BASEPATH') || exit('No direct script access allowed');
|
|
||||||
/**
|
|
||||||
* Description of Widget
|
|
||||||
*
|
|
||||||
* @author chris
|
|
||||||
*/
|
|
||||||
class Widget extends Auth_Controller
|
|
||||||
{
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct(
|
|
||||||
array(
|
|
||||||
'index' => ['dashboard/benutzer:r', 'dashboard/admin:r'],
|
|
||||||
'getAll' => 'dashboard/admin:r',
|
|
||||||
'getWidgetsForDashboard' => ['dashboard/benutzer:rw', 'dashboard/admin:r'],
|
|
||||||
'setAllowed' => 'dashboard/admin:rw'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->load->library('dashboard/DashboardLib', null, 'DashboardLib');
|
|
||||||
$this->load->model('dashboard/Widget_model', 'WidgetModel');
|
|
||||||
$this->load->model('dashboard/Dashboard_Widget_model', 'DashboardWidgetModel');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
$widget_id = $this->input->get('id');
|
|
||||||
|
|
||||||
$widget = $this->WidgetModel->load($widget_id);
|
|
||||||
|
|
||||||
if (isError($widget) || !getData($widget))
|
|
||||||
return $this->outputJsonSuccess([
|
|
||||||
"widget_id" => 0,
|
|
||||||
"widget_kurzbz" => "notfound",
|
|
||||||
"arguments" => [
|
|
||||||
"className" => 'alert-danger',
|
|
||||||
"title" => 'Widget Not Found',
|
|
||||||
"msg" => 'The widget with the id ' . $widget_id . ' could not be found'
|
|
||||||
],
|
|
||||||
"setup" => [
|
|
||||||
"name" => 'Widget Not Found',
|
|
||||||
"file" => absoluteJsImportUrl('public/js/components/DashboardWidget/Default.js'),
|
|
||||||
"width" => 1,
|
|
||||||
"height" => 1
|
|
||||||
]
|
|
||||||
]);
|
|
||||||
|
|
||||||
$widget = current(getData($widget));
|
|
||||||
$widget->arguments = json_decode($widget->arguments);
|
|
||||||
$tmpsetup = json_decode($widget->setup);
|
|
||||||
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
|
||||||
$widget->setup = $tmpsetup;
|
|
||||||
|
|
||||||
return $this->outputJsonSuccess($widget);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getAll()
|
|
||||||
{
|
|
||||||
$dashboard_id = $this->input->get('dashboard_id');
|
|
||||||
$result = $this->WidgetModel->getWithAllowedForDashboard($dashboard_id);
|
|
||||||
|
|
||||||
if (isError($result))
|
|
||||||
return $this->outputJsonError(getError($result));
|
|
||||||
|
|
||||||
$tmpwidgets = getData($result) ?: [];
|
|
||||||
$widgets = array_map(function($widget) {
|
|
||||||
$widget->arguments = json_decode($widget->arguments);
|
|
||||||
$tmpsetup = json_decode($widget->setup);
|
|
||||||
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
|
||||||
$widget->setup = $tmpsetup;
|
|
||||||
return $widget;
|
|
||||||
}, $tmpwidgets);
|
|
||||||
|
|
||||||
$this->outputJsonSuccess($widgets);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getWidgetsForDashboard()
|
|
||||||
{
|
|
||||||
$db = $this->input->get('db');
|
|
||||||
$result = $this->WidgetModel->getForDashboard($db);
|
|
||||||
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($result)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$tmpwidgets = getData($result) ?: [];
|
|
||||||
$widgets = array_map(function($widget) {
|
|
||||||
$widget->arguments = json_decode($widget->arguments);
|
|
||||||
$tmpsetup = json_decode($widget->setup);
|
|
||||||
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
|
||||||
$widget->setup = $tmpsetup;
|
|
||||||
return $widget;
|
|
||||||
}, $tmpwidgets);
|
|
||||||
|
|
||||||
$this->outputJsonSuccess($widgets);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setAllowed()
|
|
||||||
{
|
|
||||||
$input = $this->getPostJSON();
|
|
||||||
|
|
||||||
$dashboard_id = $input->dashboard_id;
|
|
||||||
$widget_id = $input->widget_id;
|
|
||||||
$action = $input->action;
|
|
||||||
|
|
||||||
if ($action == 'add') {
|
|
||||||
$result = $this->DashboardWidgetModel->insert([
|
|
||||||
'dashboard_id' => $dashboard_id,
|
|
||||||
'widget_id' => $widget_id
|
|
||||||
]);
|
|
||||||
} elseif ($action == 'delete') {
|
|
||||||
$result = $this->DashboardWidgetModel->delete([
|
|
||||||
'dashboard_id' => $dashboard_id,
|
|
||||||
'widget_id' => $widget_id
|
|
||||||
]);
|
|
||||||
} else {
|
|
||||||
http_response_code(404); // TODO(chris): 400?
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => 'action value invalid'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
if (isError($result)) {
|
|
||||||
http_response_code(404);
|
|
||||||
$this->terminateWithJsonError([
|
|
||||||
'error' => getError($result)
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
return $this->outputJsonSuccess(getData($result));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -495,6 +495,10 @@ class AbgabetoolJob extends JOB_Controller
|
|||||||
// get all new or changed termine in interval
|
// get all new or changed termine in interval
|
||||||
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSince($interval, $relevantTypes);
|
$result = $this->_ci->PaabgabeModel->findAbgabenNewOrUpdatedSince($interval, $relevantTypes);
|
||||||
$retval = getData($result);
|
$retval = getData($result);
|
||||||
|
if(!$retval) {
|
||||||
|
$this->_ci->logInfo("Keine Emails an Betreuer über neue oder veränderte Termine versandt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// group changed/new abgaben for projektarbeiten
|
// group changed/new abgaben for projektarbeiten
|
||||||
$projektarbeiten = [];
|
$projektarbeiten = [];
|
||||||
@@ -557,6 +561,8 @@ class AbgabetoolJob extends JOB_Controller
|
|||||||
$anredeFillString = $data->anrede == "Herr" ? "r" : "";
|
$anredeFillString = $data->anrede == "Herr" ? "r" : "";
|
||||||
$fullFormattedNameString = $data->first;
|
$fullFormattedNameString = $data->first;
|
||||||
|
|
||||||
|
$relevantCounter = 0; // workaround to check if a betreuer needs to have any notification about relevant
|
||||||
|
// abgaben at all to avoid sending empty emails since we filter on certain conditions
|
||||||
forEach($tupelArr as $tupel) {
|
forEach($tupelArr as $tupel) {
|
||||||
$projektarbeit_id = $tupel[0];
|
$projektarbeit_id = $tupel[0];
|
||||||
$betreuerRow = $tupel[1];
|
$betreuerRow = $tupel[1];
|
||||||
@@ -575,6 +581,8 @@ class AbgabetoolJob extends JOB_Controller
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$relevantCounter++;
|
||||||
|
|
||||||
// format the Student Name
|
// format the Student Name
|
||||||
$s = $relevantAbgaben[0];
|
$s = $relevantAbgaben[0];
|
||||||
$nameParts = [];
|
$nameParts = [];
|
||||||
@@ -633,6 +641,11 @@ class AbgabetoolJob extends JOB_Controller
|
|||||||
// done with building the change list, now send it
|
// done with building the change list, now send it
|
||||||
$betreuerRow = $tupelArr[0][1];
|
$betreuerRow = $tupelArr[0][1];
|
||||||
|
|
||||||
|
if($relevantCounter == 0) {
|
||||||
|
$this->_ci->logInfo('No Relevant Abgaben to notify Betreuer PersonID: "'.$betreuerRow->person_id.'".');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$path = $this->_ci->config->item('URL_MITARBEITER');
|
$path = $this->_ci->config->item('URL_MITARBEITER');
|
||||||
$url = CIS_ROOT.$path;
|
$url = CIS_ROOT.$path;
|
||||||
|
|
||||||
|
|||||||
@@ -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']
|
||||||
]);
|
]);
|
||||||
@@ -55,17 +57,26 @@ class Studierendenantrag extends FHC_Controller
|
|||||||
'bezeichnungOrgform' => $antrag->orgform
|
'bezeichnungOrgform' => $antrag->orgform
|
||||||
);
|
);
|
||||||
|
|
||||||
$result = $this->antraglib->getPrestudentWiederholungsBerechtigt($antrag->prestudent_id);
|
if ($this->config->item('wiederholung_enabled') === true)
|
||||||
if (getData($result) == 1)
|
{
|
||||||
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Wiederholung';
|
$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('unterbrechung_enabled') === true)
|
||||||
if (getData($result) == 1)
|
{
|
||||||
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Unterbrechung';
|
$result = $this->antraglib->getPrestudentUnterbrechungsBerechtigt($antrag->prestudent_id);
|
||||||
|
if (getData($result) == 1)
|
||||||
|
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Unterbrechung';
|
||||||
|
}
|
||||||
|
|
||||||
$result = $this->antraglib->getPrestudentAbmeldeBerechtigt($antrag->prestudent_id);
|
if ($this->config->item('abmeldung_enabled') === true)
|
||||||
if (getData($result) == 1)
|
{
|
||||||
$prestudentenArr[$antrag->prestudent_id]['allowedNewTypes'][] = 'Abmeldung';
|
$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;
|
||||||
|
|||||||
@@ -417,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)');
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -270,6 +270,28 @@ function absoluteJsImportUrl($relurl)
|
|||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generate Css File Include if Extension contains file
|
||||||
|
*
|
||||||
|
* @param $relativeFilePath path relative to Extension public/css dir
|
||||||
|
*/
|
||||||
|
function generateCSSsIncludeIfExtensionCssExists($relativeFilePath)
|
||||||
|
{
|
||||||
|
$fsiterator = new FilesystemIterator(FHCPATH . 'application/extensions');
|
||||||
|
foreach ($fsiterator as $fsitem)
|
||||||
|
{
|
||||||
|
if(preg_match('/^FHC-Core-/', $fsitem->getBasename()))
|
||||||
|
{
|
||||||
|
$extensionfile = 'public/extensions/' . $fsitem->getBasename()
|
||||||
|
. '/css/' . $relativeFilePath;
|
||||||
|
if(is_readable(FHCPATH . $extensionfile))
|
||||||
|
{
|
||||||
|
generateCSSsInclude($extensionfile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Manipulate CI views includes Array to load
|
* Manipulate CI views includes Array to load
|
||||||
* - public/js/FhcApps.js via customJSs and
|
* - public/js/FhcApps.js via customJSs and
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ class PermissionLib
|
|||||||
const LOGINAS_PERSONIDS_BLACKLIST = 'permission_loginas_personids_blacklist';
|
const LOGINAS_PERSONIDS_BLACKLIST = 'permission_loginas_personids_blacklist';
|
||||||
|
|
||||||
private $_ci; // CI instance
|
private $_ci; // CI instance
|
||||||
|
private $access_rights; // current users access rights
|
||||||
private static $bb; // benutzerberechtigung
|
private static $bb; // benutzerberechtigung
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -61,6 +62,8 @@ class PermissionLib
|
|||||||
// Loads CI instance
|
// Loads CI instance
|
||||||
$this->_ci =& get_instance();
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
|
$this->access_rights = null;
|
||||||
|
|
||||||
$this->_ci->config->load('permission'); // Loads permission configuration
|
$this->_ci->config->load('permission'); // Loads permission configuration
|
||||||
|
|
||||||
// If it's NOT called from command line
|
// If it's NOT called from command line
|
||||||
@@ -69,8 +72,10 @@ class PermissionLib
|
|||||||
// API Caller rights initialization
|
// API Caller rights initialization
|
||||||
$authObj = $this->_ci->authlib->getAuthObj();
|
$authObj = $this->_ci->authlib->getAuthObj();
|
||||||
self::$bb = new benutzerberechtigung();
|
self::$bb = new benutzerberechtigung();
|
||||||
if ($authObj)
|
if ($authObj) {
|
||||||
self::$bb->getBerechtigungen($authObj->{AuthLib::AO_USERNAME});
|
self::$bb->getBerechtigungen($authObj->{AuthLib::AO_USERNAME});
|
||||||
|
$this->access_rights = self::$bb->berechtigungen;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -340,6 +345,16 @@ class PermissionLib
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the access rights for the current user
|
||||||
|
*
|
||||||
|
* @return array|null
|
||||||
|
*/
|
||||||
|
public function getAccessRights()
|
||||||
|
{
|
||||||
|
return $this->access_rights;
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
// Private methods
|
// Private methods
|
||||||
|
|
||||||
|
|||||||
@@ -40,13 +40,16 @@ class StundenplanLib
|
|||||||
* @return stdClass
|
* @return stdClass
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
public function getEventsUser($start, $end)
|
public function getEventsUser($start, $end, $uid = null)
|
||||||
{
|
{
|
||||||
$this->_ci =& get_instance();
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
$this->_ci->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
$this->_ci->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
|
||||||
|
|
||||||
$uid = getAuthUID();
|
if (!$uid) {
|
||||||
|
$uid = getAuthUID();
|
||||||
|
}
|
||||||
|
|
||||||
if (is_null($uid))
|
if (is_null($uid))
|
||||||
return error("No UID");
|
return error("No UID");
|
||||||
|
|
||||||
@@ -111,6 +114,7 @@ class StundenplanLib
|
|||||||
return $stundenplan_data;
|
return $stundenplan_data;
|
||||||
$stundenplan_data = getData($stundenplan_data) ?? [];
|
$stundenplan_data = getData($stundenplan_data) ?? [];
|
||||||
|
|
||||||
|
$this->_ci->addMeta("stundenplanData", $stundenplan_data);
|
||||||
$function_error = $this->expandObjectInformation($stundenplan_data);
|
$function_error = $this->expandObjectInformation($stundenplan_data);
|
||||||
if ($function_error)
|
if ($function_error)
|
||||||
return $function_error;
|
return $function_error;
|
||||||
@@ -217,7 +221,7 @@ class StundenplanLib
|
|||||||
* @param string $ort_kurzbz
|
* @param string $ort_kurzbz
|
||||||
* @return stdClass
|
* @return stdClass
|
||||||
*/
|
*/
|
||||||
public function getReservierungen($start_date, $end_date, $ort_kurzbz = '')
|
public function getReservierungen($start_date, $end_date, $ort_kurzbz = '', $uid = null)
|
||||||
{
|
{
|
||||||
$this->_ci =& get_instance();
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
@@ -228,14 +232,14 @@ class StundenplanLib
|
|||||||
$this->_ci->load->model('ressource/Reservierung_model', 'ReservierungModel');
|
$this->_ci->load->model('ressource/Reservierung_model', 'ReservierungModel');
|
||||||
$this->_ci->load->model('ressource/Stundenplan_model', 'StundenplanModel');
|
$this->_ci->load->model('ressource/Stundenplan_model', 'StundenplanModel');
|
||||||
|
|
||||||
$is_mitarbeiter = getData($this->_ci->MitarbeiterModel->isMitarbeiter(getAuthUID()));
|
$is_mitarbeiter = getData($this->_ci->MitarbeiterModel->isMitarbeiter($uid ?? getAuthUID()));
|
||||||
|
|
||||||
if ($is_mitarbeiter && empty($ort_kurzbz)) {
|
if ($is_mitarbeiter && empty($ort_kurzbz)) {
|
||||||
// request for personal lvplan show only reservations of logged in user
|
// request for personal lvplan show only reservations of logged in user
|
||||||
$reservierungen = $this->_ci->ReservierungModel->getReservierungenMitarbeiter($start_date, $end_date);
|
$reservierungen = $this->_ci->ReservierungModel->getReservierungenMitarbeiter($start_date, $end_date, $uid);
|
||||||
} else {
|
} else {
|
||||||
// querying the reservierungen
|
// querying the reservierungen
|
||||||
$reservierungen = $this->_ci->ReservierungModel->getReservierungen($start_date, $end_date, $ort_kurzbz);
|
$reservierungen = $this->_ci->ReservierungModel->getReservierungen($start_date, $end_date, $ort_kurzbz, $uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isError($reservierungen))
|
if (isError($reservierungen))
|
||||||
@@ -357,7 +361,10 @@ class StundenplanLib
|
|||||||
if (isError($ort_content_object)) {
|
if (isError($ort_content_object)) {
|
||||||
return error(getData($ort_content_object));
|
return error(getData($ort_content_object));
|
||||||
}
|
}
|
||||||
$ort_content_object = getData($ort_content_object)[0];
|
$ort_content_object_data = getData($ort_content_object);
|
||||||
|
$ort_content_object = (is_array($ort_content_object_data) && count($ort_content_object_data) > 0)
|
||||||
|
? $ort_content_object_data[0]
|
||||||
|
: null;
|
||||||
if($ort_content_object) {
|
if($ort_content_object) {
|
||||||
$item->ort_content_id = $ort_content_object->content_id;
|
$item->ort_content_id = $ort_content_object->content_id;
|
||||||
}
|
}
|
||||||
@@ -368,6 +375,39 @@ class StundenplanLib
|
|||||||
$item->gruppe = $gruppe_obj_array;
|
$item->gruppe = $gruppe_obj_array;
|
||||||
$item->lektor = $lektor_obj_array;
|
$item->lektor = $lektor_obj_array;
|
||||||
|
|
||||||
|
$this->_ci->load->library('PermissionLib');
|
||||||
|
$berechtigt_begrenzt = $this->_ci->permissionlib->isBerechtigt('lehre/reservierung:begrenzt', 'sui');
|
||||||
|
|
||||||
|
$now = time();
|
||||||
|
$res_lektor_start = $this->jump_day($now, RES_TAGE_LEKTOR_MIN - 1);
|
||||||
|
$res_lektor_ende = mktime(0, 0, 0, date('m', $now), date('d', $now) + RES_TAGE_LEKTOR_BIS, date('Y', $now));
|
||||||
|
|
||||||
|
$start_date = is_numeric($item->beginn) ? $item->beginn : strtotime($item->beginn);
|
||||||
|
if (!date('w', $start_date)) {
|
||||||
|
$start_date = $this->jump_day($start_date, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$start_date_str = date('Y-m-d', $start_date);
|
||||||
|
$res_lektor_start_str = date('Y-m-d', $res_lektor_start);
|
||||||
|
$res_lektor_ende_str = date('Y-m-d', $res_lektor_ende);
|
||||||
|
|
||||||
|
$show_delete = (
|
||||||
|
(
|
||||||
|
$berechtigt_begrenzt &&
|
||||||
|
(
|
||||||
|
(isset($item->insertvon) && $item->insertvon == getAuthUID()) ||
|
||||||
|
(isset($item->uids) && in_array(getAuthUID(), $item->uids))
|
||||||
|
)
|
||||||
|
) &&
|
||||||
|
$start_date_str >= $res_lektor_start_str &&
|
||||||
|
$start_date_str <= $res_lektor_ende_str
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($show_delete)
|
||||||
|
$item->deletable = true;
|
||||||
|
else
|
||||||
|
$item->deletable = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -445,6 +485,230 @@ class StundenplanLib
|
|||||||
return success($ferienEventsFlattened);
|
return success($ferienEventsFlattened);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getEventsStgOrg( $start, $end, $stg_kz, $sem, $verband, $gruppe)
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
|
$this->_ci->load->model('ressource/Stundenplan_model', 'StundenplanModel');
|
||||||
|
|
||||||
|
$stundenplan_data = $this->_ci->StundenplanModel->getStundenplanStudiengang($start, $end, $stg_kz, $sem, $verband, $gruppe);
|
||||||
|
if (isError($stundenplan_data))
|
||||||
|
return $stundenplan_data;
|
||||||
|
$stundenplan_data = getData($stundenplan_data) ?? [];
|
||||||
|
|
||||||
|
$function_error = $this->expandObjectInformation($stundenplan_data);
|
||||||
|
if ($function_error)
|
||||||
|
return $function_error;
|
||||||
|
|
||||||
|
return success($stundenplan_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addReservation($start, $end, $title, $beschreibung, $ort_kurzbz, $lektoren = null, $studiengang = null, $semester = null, $verband = null, $gruppe = null, $spezialgruppe = null)
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
$this->_ci->load->model('ressource/Stunde_model', 'StundeModel');
|
||||||
|
$this->_ci->load->model('ressource/Reservierung_model', 'ReservierungModel');
|
||||||
|
$this->_ci->load->model('ressource/stundenplandev_model', 'StundenplandevModel');
|
||||||
|
$this->_ci->load->model('ressource/stundenplan_model', 'StundenplanModel');
|
||||||
|
$this->_ci->load->library('PermissionLib');
|
||||||
|
|
||||||
|
$startTime = new DateTime($start);
|
||||||
|
$endTime = new DateTime($end);
|
||||||
|
|
||||||
|
$stunden = $this->_ci->StundeModel->loadWhere(array(
|
||||||
|
'beginn <' => $endTime->format('H:i:s'),
|
||||||
|
'ende >' => $startTime->format('H:i:s')
|
||||||
|
));
|
||||||
|
|
||||||
|
if (!hasData($stunden))
|
||||||
|
{
|
||||||
|
return error("Keine Stunden vorhanden");
|
||||||
|
}
|
||||||
|
|
||||||
|
$stunden = array_column(getData($stunden), 'stunde');
|
||||||
|
|
||||||
|
$this->_ci->StundenplandevModel->db->select('1');
|
||||||
|
$this->_ci->StundenplandevModel->db->where('datum', $startTime->format('Y-m-d'));
|
||||||
|
$this->_ci->StundenplandevModel->db->where('ort_kurzbz', $ort_kurzbz);
|
||||||
|
$this->_ci->StundenplandevModel->db->where_in('stunde', $stunden);
|
||||||
|
$stundenplandev_belegung = $this->_ci->StundenplandevModel->load();
|
||||||
|
|
||||||
|
$this->_ci->StundenplanModel->db->select('1');
|
||||||
|
$this->_ci->StundenplanModel->db->where('ort_kurzbz', $ort_kurzbz);
|
||||||
|
$this->_ci->StundenplanModel->db->where('datum', $startTime->format('Y-m-d'));
|
||||||
|
$this->_ci->StundenplanModel->db->where_in('stunde', $stunden);
|
||||||
|
$stundenplan_belegung = $this->_ci->StundenplanModel->load();
|
||||||
|
|
||||||
|
if ((hasData($stundenplandev_belegung) || hasData($stundenplan_belegung))
|
||||||
|
&& !$this->_ci->permissionlib->isBerechtigt('lehre/reservierungAdvanced'))
|
||||||
|
return error ('lvplan/bereitsReserviert');
|
||||||
|
|
||||||
|
$this->_ci->ReservierungModel->addSelect('stunde');
|
||||||
|
$reservation_hours = $this->_ci->ReservierungModel->loadWhere(array('datum' => $startTime->format('Y-m-d'), 'ort_kurzbz' => $ort_kurzbz));
|
||||||
|
|
||||||
|
|
||||||
|
if (isError($reservation_hours))
|
||||||
|
return $reservation_hours;
|
||||||
|
|
||||||
|
$reservation_hours = hasData($reservation_hours) ? array_column(getData($reservation_hours), 'stunde') : array();
|
||||||
|
|
||||||
|
if (!empty(array_intersect($stunden, $reservation_hours))
|
||||||
|
&& !$this->_ci->permissionlib->isBerechtigt('lehre/reservierungAdvanced'))
|
||||||
|
return error("lvplan/bereitsReserviert");
|
||||||
|
|
||||||
|
|
||||||
|
if (!empty($lektoren))
|
||||||
|
{
|
||||||
|
foreach ($lektoren as $lektor)
|
||||||
|
{
|
||||||
|
$insert = array('ort_kurzbz' => $ort_kurzbz,
|
||||||
|
'datum' => $startTime->format('Y-m-d'),
|
||||||
|
'titel' => $title,
|
||||||
|
'studiengang_kz' => is_null($studiengang) ? 0 : $studiengang,
|
||||||
|
'beschreibung' => $beschreibung,
|
||||||
|
'insertvon' => getAuthUID(),
|
||||||
|
'uid' => $lektor,
|
||||||
|
'semester' => is_null($semester) ? null : $semester,
|
||||||
|
'verband' => is_null($verband) ? null : $verband,
|
||||||
|
'gruppe' => is_null($gruppe) ? null : $gruppe,
|
||||||
|
'gruppe_kurzbz' => is_null($spezialgruppe) ? null : $spezialgruppe,
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($stunden as $stunde)
|
||||||
|
{
|
||||||
|
$insert['stunde'] = $stunde;
|
||||||
|
$check_insert = $this->_ci->ReservierungModel->insert($insert);
|
||||||
|
if (isError($check_insert))
|
||||||
|
return $check_insert;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach ($stunden as $stunde)
|
||||||
|
{
|
||||||
|
$check_insert = $this->_ci->ReservierungModel->insert(array(
|
||||||
|
'ort_kurzbz' => $ort_kurzbz,
|
||||||
|
'uid' => getAuthUID(),
|
||||||
|
'stunde' => $stunde,
|
||||||
|
'datum' => $startTime->format('Y-m-d'),
|
||||||
|
'titel' => $title,
|
||||||
|
'studiengang_kz' => is_null($studiengang) ? 0 : $studiengang,
|
||||||
|
'beschreibung' => $beschreibung,
|
||||||
|
'insertvon' => getAuthUID()
|
||||||
|
));
|
||||||
|
if (isError($check_insert))
|
||||||
|
return $check_insert;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return success("Erfolgreich");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteReservation($reservierung_id)
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
$this->_ci->load->model('ressource/Reservierung_model', 'ReservierungModel');
|
||||||
|
$this->_ci->load->model('ressource/Stunde_model', 'StundeModel');
|
||||||
|
$this->_ci->load->library('PermissionLib');
|
||||||
|
|
||||||
|
|
||||||
|
$this->_ci->ReservierungModel->db->where_in('reservierung_id', $reservierung_id);
|
||||||
|
$reservation = $this->_ci->ReservierungModel->load();
|
||||||
|
if (isError($reservation))
|
||||||
|
return $reservation;
|
||||||
|
|
||||||
|
if (!hasData($reservation))
|
||||||
|
return error("Reservierungen nicht gefunden");
|
||||||
|
|
||||||
|
$reservations = getData($reservation);
|
||||||
|
|
||||||
|
$today = new DateTime();
|
||||||
|
foreach ($reservations as $reservierung)
|
||||||
|
{
|
||||||
|
if ($today->format('Y-m-d') > $reservierung->datum)
|
||||||
|
return error("Vergangene Reservierungen können nicht gelöscht werden");
|
||||||
|
|
||||||
|
if (($this->_ci->permissionlib->isBerechtigt('lehre/reservierung:begrenzt')) && ($reservierung->insertvon == getAuthUID() || $reservierung->uid === getAuthUID()))
|
||||||
|
{
|
||||||
|
$delete_result = $this->_ci->ReservierungModel->delete($reservierung->reservierung_id);
|
||||||
|
|
||||||
|
if (isError($delete_result))
|
||||||
|
return $delete_result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return success("Erfolgreich");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getReservableMap($ort_kurzbz, $start_date, $end_date)
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
$this->_ci->load->model('ressource/Ort_model', 'OrtModel');
|
||||||
|
$this->_ci->load->library('PermissionLib');
|
||||||
|
|
||||||
|
$berechtigt_begrenzt = $this->_ci->permissionlib->isBerechtigt('lehre/reservierung:begrenzt', 'suid');
|
||||||
|
$berechtigt_erweitert = $this->_ci->permissionlib->isBerechtigt('lehre/reservierung', 'suid');
|
||||||
|
|
||||||
|
$ort_data = $this->_ci->OrtModel->load($ort_kurzbz);
|
||||||
|
if (isError($ort_data) || !hasData($ort_data))
|
||||||
|
return [];
|
||||||
|
|
||||||
|
$ort_data = getData($ort_data)[0];
|
||||||
|
|
||||||
|
if (!$ort_data->reservieren)
|
||||||
|
return [];
|
||||||
|
|
||||||
|
if (!$berechtigt_begrenzt && !$berechtigt_erweitert)
|
||||||
|
return [];
|
||||||
|
|
||||||
|
$start_ts = is_numeric($start_date) ? (int)$start_date : strtotime($start_date);
|
||||||
|
$end_ts = is_numeric($end_date) ? (int)$end_date : strtotime($end_date);
|
||||||
|
|
||||||
|
if (!$start_ts || !$end_ts)
|
||||||
|
return [];
|
||||||
|
|
||||||
|
if ($end_ts < $start_ts)
|
||||||
|
{
|
||||||
|
$tmp = $start_ts;
|
||||||
|
$start_ts = $end_ts;
|
||||||
|
$end_ts = $tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
$now = time();
|
||||||
|
$tage_min = defined('RES_TAGE_LEKTOR_MIN') ? (int)RES_TAGE_LEKTOR_MIN : 0;
|
||||||
|
$tage_bis = defined('RES_TAGE_LEKTOR_BIS') ? (int)RES_TAGE_LEKTOR_BIS : 0;
|
||||||
|
|
||||||
|
$datum_res_lektor_start = $this->jump_day($now, $tage_min - 1);
|
||||||
|
$datum_res_lektor_ende = $this->jump_day($now, $tage_bis);
|
||||||
|
|
||||||
|
$start_ymd_allowed = date('Y-m-d', $datum_res_lektor_start);
|
||||||
|
$end_ymd_allowed = date('Y-m-d', $datum_res_lektor_ende);
|
||||||
|
|
||||||
|
$result = [];
|
||||||
|
|
||||||
|
$current = strtotime(date('Y-m-d', $start_ts) . ' 00:00:00');
|
||||||
|
$end_day = strtotime(date('Y-m-d', $end_ts) . ' 00:00:00');
|
||||||
|
|
||||||
|
while ($current <= $end_day)
|
||||||
|
{
|
||||||
|
$ymd = date('Y-m-d', $current);
|
||||||
|
|
||||||
|
$result[$ymd] = ($ymd >= $start_ymd_allowed && $ymd <= $end_ymd_allowed) ? true : false;
|
||||||
|
|
||||||
|
$current = $this->jump_day($current, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return success($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function jump_day($timestamp, $days)
|
||||||
|
{
|
||||||
|
$days = (int)$days;
|
||||||
|
$prefix = ($days >= 0 ? '+' : '');
|
||||||
|
return strtotime($prefix . $days . ' days', $timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
// start of the private functions ########################################################################################################
|
// start of the private functions ########################################################################################################
|
||||||
|
|
||||||
// function used to sort an array of studiensemester strings
|
// function used to sort an array of studiensemester strings
|
||||||
|
|||||||
@@ -0,0 +1,392 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FH-Complete
|
||||||
|
*
|
||||||
|
* @package FHC-Helper
|
||||||
|
* @author FHC-Team
|
||||||
|
* @copyright Copyright (c) 2026 fhcomplete.net
|
||||||
|
* @license GPLv3
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
use \DateTime as DateTime;
|
||||||
|
use \stdClass as stdClass;
|
||||||
|
|
||||||
|
class TagLib
|
||||||
|
{
|
||||||
|
const BATCHUSER = 'sftest';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object initialization
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance();
|
||||||
|
|
||||||
|
// Configs
|
||||||
|
$this->_ci->load->config('stv');
|
||||||
|
|
||||||
|
// Models
|
||||||
|
$this->_ci->load->model('person/Notiz_model', 'NotizModel');
|
||||||
|
$this->_ci->load->model('system/Notiztyp_model', 'NotiztypModel');
|
||||||
|
$this->_ci->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel');
|
||||||
|
$this->_ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||||
|
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
|
||||||
|
// Libraries
|
||||||
|
$this->_ci->load->library('PermissionLib');
|
||||||
|
$this->_ci->load->library('PrestudentLib');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateAutomatedTags($paramsTag)
|
||||||
|
{
|
||||||
|
// ---------------------------------
|
||||||
|
// check params
|
||||||
|
// ---------------------------------
|
||||||
|
$required = ['kurzbz', 'data', 'typeId'];
|
||||||
|
|
||||||
|
foreach ($required as $key) {
|
||||||
|
if (!isset($paramsTag[$key])) {
|
||||||
|
return error('Missing Parameter: ' . $key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$studiensemester_kurzbz = (isset ($paramsTag['studiensemester_kurzbz']) ? $paramsTag['studiensemester_kurzbz'] : null);
|
||||||
|
$tag = $paramsTag['kurzbz'];
|
||||||
|
$inputData = $paramsTag['data'];
|
||||||
|
$typeId = $paramsTag['typeId'];
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// prepare input
|
||||||
|
// ---------------------------------
|
||||||
|
$zeitraum = [];
|
||||||
|
$arrayIds = [];
|
||||||
|
|
||||||
|
foreach ($inputData as $item) {
|
||||||
|
$id = $item['id'];
|
||||||
|
$arrayIds[] = $id;
|
||||||
|
|
||||||
|
$zeitraum[$id] = [
|
||||||
|
'von' => $item['von'] ?? null,
|
||||||
|
'bis' => $item['bis'] ?? null
|
||||||
|
];
|
||||||
|
}
|
||||||
|
$arrayIds = array_unique($arrayIds);
|
||||||
|
|
||||||
|
$result = $this->_ci->StudiensemesterModel->load($studiensemester_kurzbz);
|
||||||
|
if (isError($result)) {
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
$data = $result->retval[0] ?? null;
|
||||||
|
|
||||||
|
$von = $data->start ?? null;
|
||||||
|
$bis = $data->ende ?? null;
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// load existing tags
|
||||||
|
// ---------------------------------
|
||||||
|
$allTags = [];
|
||||||
|
$resultAllTags = $this->_ci->NotizModel->getAllTags($tag, $von, $bis);
|
||||||
|
if (isError($resultAllTags)) {
|
||||||
|
return $resultAllTags;
|
||||||
|
}
|
||||||
|
$allTagsData = getData($resultAllTags);
|
||||||
|
|
||||||
|
if (!empty($allTagsData)) {
|
||||||
|
foreach ($allTagsData as $item) {
|
||||||
|
$allTags[$item->$typeId] = $item->notiz_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// map the data
|
||||||
|
// ---------------------------------
|
||||||
|
$toRecycle = [];
|
||||||
|
$toAdd = [];
|
||||||
|
$toDelete = [];
|
||||||
|
|
||||||
|
foreach ($arrayIds as $id) {
|
||||||
|
if (isset($allTags[$id])) {
|
||||||
|
$toRecycle[$id] = $allTags[$id];
|
||||||
|
} else {
|
||||||
|
$toAdd[] = $id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($allTags as $id => $notizId) {
|
||||||
|
if (!in_array($id, $arrayIds)) {
|
||||||
|
$toDelete[$id] = $notizId;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// recycle (update existing)
|
||||||
|
// ---------------------------------
|
||||||
|
$countRecycled = 0;
|
||||||
|
$retagged = [];
|
||||||
|
|
||||||
|
foreach ($toRecycle as $id => $notizId)
|
||||||
|
{
|
||||||
|
$this->_updateTag($notizId, $zeitraum[$id]['von'], $zeitraum[$id]['bis']);
|
||||||
|
|
||||||
|
$countRecycled++;
|
||||||
|
$retagged[] = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// ADD
|
||||||
|
// ---------------------------------
|
||||||
|
$countAdded = 0;
|
||||||
|
$tagged = [];
|
||||||
|
|
||||||
|
foreach ($toAdd as $id)
|
||||||
|
{
|
||||||
|
$this->_insertTag($typeId, $id, $tag, $zeitraum[$id]['von'], $zeitraum[$id]['bis']);
|
||||||
|
$countAdded++;
|
||||||
|
|
||||||
|
$tagged[] = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// delete
|
||||||
|
// ---------------------------------
|
||||||
|
$countDeleted = 0;
|
||||||
|
$deleted = [];
|
||||||
|
|
||||||
|
foreach ($toDelete as $id => $notizId)
|
||||||
|
{
|
||||||
|
$result = $this->_deleteTag($notizId);
|
||||||
|
|
||||||
|
if (isError($result)) {
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
$countDeleted++;
|
||||||
|
$deleted[] = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------
|
||||||
|
// return
|
||||||
|
// ---------------------------------
|
||||||
|
return success([
|
||||||
|
'input' => [
|
||||||
|
'tag' => $tag,
|
||||||
|
'arrayIds' => $arrayIds
|
||||||
|
],
|
||||||
|
'summary' => [
|
||||||
|
'recycled' => $countRecycled,
|
||||||
|
'added' => $countAdded,
|
||||||
|
'deleted' => $countDeleted
|
||||||
|
],
|
||||||
|
'details' => [
|
||||||
|
'existingTags' => $allTags,
|
||||||
|
'toAdd' => $toAdd,
|
||||||
|
'toRecycle' => $toRecycle,
|
||||||
|
'toDelete' => $toDelete
|
||||||
|
],
|
||||||
|
'results' => [
|
||||||
|
'retaggedIds' => $retagged,
|
||||||
|
'newTags' => $tagged,
|
||||||
|
'deletedTagsIds' => $deleted
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateAutomatedTagsForTypeId(array $params)
|
||||||
|
{
|
||||||
|
$return = null;
|
||||||
|
$notiz_id = null;
|
||||||
|
|
||||||
|
$von = $params['von'];
|
||||||
|
$bis = $params['bis'];
|
||||||
|
$tag = $params['kurzbz'];
|
||||||
|
$id = $params['id'];
|
||||||
|
$typeId = $params['typeId'];
|
||||||
|
|
||||||
|
$this->_ci->NotizModel->addSelect('nz.notiz_id');
|
||||||
|
$this->_ci->NotizModel->addSelect($typeId);
|
||||||
|
$this->_ci->NotizModel->addJoin('public.tbl_notizzuordnung nz', 'notiz_id');
|
||||||
|
$resultAllTags = $this->_ci->NotizModel->loadWhere([
|
||||||
|
'typ' => $tag,
|
||||||
|
$typeId => $id
|
||||||
|
]);
|
||||||
|
if(hasData($resultAllTags))
|
||||||
|
{
|
||||||
|
$notiz_id = $resultAllTags->retval[0]->notiz_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
//RECYCLE
|
||||||
|
if ($notiz_id !== null)
|
||||||
|
{
|
||||||
|
$resultUpdateNotiz = $this->_updateTag($notiz_id, $von, $bis);
|
||||||
|
$return = ['recycled' => $resultUpdateNotiz];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
//ADD
|
||||||
|
{
|
||||||
|
$resultInsertNotiz = $this->_insertTag($typeId, $id, $tag, $von, $bis);
|
||||||
|
$return = ['added' => $resultInsertNotiz];
|
||||||
|
}
|
||||||
|
return success($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* main function for rebuild Tags for typeId
|
||||||
|
* */
|
||||||
|
public function rebuildTagsForTypeId($typeId, $id, $studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
$automatedTagsRes = $this->_ci->NotiztypModel->loadWhere(array('automatisiert' => true, 'taglib IS NOT NULL' => null));
|
||||||
|
$automatedTags = hasData($automatedTagsRes) ? getData($automatedTagsRes) : [];
|
||||||
|
|
||||||
|
$result = $this->_ci->StudiensemesterModel->load($studiensemester_kurzbz);
|
||||||
|
if (isError($result))
|
||||||
|
return error('Error occurred during retrieving studiensemester');
|
||||||
|
if (empty($result->retval) || !isset($result->retval[0])) {
|
||||||
|
return error('No studiensemester found');
|
||||||
|
}
|
||||||
|
|
||||||
|
$startSem = $result->retval[0]->start ?? null;
|
||||||
|
$endeSem = $result->retval[0]->ende ?? null;
|
||||||
|
$return = [];
|
||||||
|
|
||||||
|
foreach ($automatedTags as $autoTag)
|
||||||
|
{
|
||||||
|
// getPath: must not be lost
|
||||||
|
$filePath = APPPATH . 'libraries/' . $autoTag->taglib . '.php'; // APPPATH = application/
|
||||||
|
|
||||||
|
if (file_exists($filePath)) {
|
||||||
|
require_once($filePath);
|
||||||
|
} else {
|
||||||
|
echo "File not found: " . $filePath;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$className = basename($autoTag->taglib);
|
||||||
|
$kurz_bz = $autoTag->typ_kurzbz;
|
||||||
|
|
||||||
|
$obj = new $className();
|
||||||
|
|
||||||
|
$criteriaIsSet = $obj->isCriteriaSetFor([
|
||||||
|
'typeId' => $typeId,
|
||||||
|
'id' => $id,
|
||||||
|
'studiensemester_kurzbz' => $studiensemester_kurzbz
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (hasData($criteriaIsSet))
|
||||||
|
{
|
||||||
|
$von = isset($criteriaIsSet->retval[0]->von) ? $criteriaIsSet->retval[0]->von : '';
|
||||||
|
$bis = isset($criteriaIsSet->retval[0]->bis) ? $criteriaIsSet->retval[0]->bis : '';
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
'von' => $von,
|
||||||
|
'bis' => $bis,
|
||||||
|
'kurzbz' => $autoTag->typ_kurzbz,
|
||||||
|
'typeId' => $typeId,
|
||||||
|
'id' => $id,
|
||||||
|
];
|
||||||
|
|
||||||
|
$result = $this->updateAutomatedTagsForTypeId($params);
|
||||||
|
if (isError($result))
|
||||||
|
return error('Error occurred during updateAutomatedTags' . $kurz_bz);
|
||||||
|
|
||||||
|
$return[$kurz_bz] = $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//CHECK FOR DELETE
|
||||||
|
$params = [
|
||||||
|
'von' => $startSem,
|
||||||
|
'bis' => $endeSem,
|
||||||
|
'kurzbz' => $autoTag->typ_kurzbz,
|
||||||
|
'typeId' => $typeId,
|
||||||
|
'id' => $id,
|
||||||
|
];
|
||||||
|
$result = $this->_ci->NotizModel->checkIfExistingTag($kurz_bz, $typeId, $id, $startSem, $endeSem);
|
||||||
|
if (hasData($result))
|
||||||
|
{
|
||||||
|
$notizId = $result->retval[0]->notiz_id;
|
||||||
|
$this->_deleteTag($notizId);
|
||||||
|
$return[$kurz_bz] = ['deleted' => $notizId];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return success($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _insertTag($typeId, $id, $tag, $von, $bis)
|
||||||
|
{
|
||||||
|
$resultInsert = $this->_ci->NotizModel->insert([
|
||||||
|
'titel' => 'TAG',
|
||||||
|
'text' => 'AUTOMATED TAG',
|
||||||
|
'verfasser_uid' => self::BATCHUSER,
|
||||||
|
'erledigt' => false,
|
||||||
|
'insertamum' => date('Y-m-d H:i:s'),
|
||||||
|
'insertvon' => 'BatchJobTagAdd',
|
||||||
|
'typ' => $tag,
|
||||||
|
'start' => $von,
|
||||||
|
'ende' => $bis
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (isError($resultInsert)) {
|
||||||
|
return error('Error inserting tag for ' . $typeId . ': ' . $id);
|
||||||
|
}
|
||||||
|
|
||||||
|
$notizId = $resultInsert->retval;
|
||||||
|
|
||||||
|
$resultZuordnung = $this->_ci->NotizzuordnungModel->insert([
|
||||||
|
'notiz_id' => $notizId,
|
||||||
|
$typeId => $id
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (isError($resultZuordnung)) {
|
||||||
|
return error('Error inserting relation for ' . $typeId . ': ' . $id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $notizId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _updateTag($notiz_id, $von, $bis)
|
||||||
|
{
|
||||||
|
$resultUpdateNotiz = $this->_ci->NotizModel->update(
|
||||||
|
[
|
||||||
|
'notiz_id' => $notiz_id
|
||||||
|
],
|
||||||
|
array(
|
||||||
|
'updateamum' => date('Y-m-d H:i:s'),
|
||||||
|
'updatevon' => 'BatchJobTagUpdate',
|
||||||
|
'start' => $von,
|
||||||
|
'ende' => $bis
|
||||||
|
));
|
||||||
|
|
||||||
|
|
||||||
|
if (isError($resultUpdateNotiz))
|
||||||
|
return error ('Error occurred during Update ' . $notiz_id);
|
||||||
|
|
||||||
|
return $notiz_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _deleteTag($notiz_id)
|
||||||
|
{
|
||||||
|
$result = $this->_ci->NotizzuordnungModel->delete([
|
||||||
|
'notiz_id' => $notiz_id
|
||||||
|
]);
|
||||||
|
if (isError($result)) {
|
||||||
|
return error('Error occurred during delete Notizzuordnung ' . $notiz_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->_ci->NotizModel->delete([
|
||||||
|
'notiz_id' => $notiz_id
|
||||||
|
]);
|
||||||
|
if (isError($result)) {
|
||||||
|
return error('Error occurred during delete Notiz ' . $notiz_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return success([
|
||||||
|
'deleted' => $notiz_id
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -37,7 +37,9 @@ class DashboardLib
|
|||||||
|
|
||||||
public function getDashboardByKurzbz($dashboard_kurzbz)
|
public function getDashboardByKurzbz($dashboard_kurzbz)
|
||||||
{
|
{
|
||||||
$result = $this->_ci->DashboardModel->getDashboardByKurzbz($dashboard_kurzbz);
|
$result = $this->_ci->DashboardModel->loadWhere([
|
||||||
|
'dashboard_kurzbz' => $dashboard_kurzbz
|
||||||
|
]);
|
||||||
|
|
||||||
if (hasData($result))
|
if (hasData($result))
|
||||||
{
|
{
|
||||||
@@ -47,30 +49,55 @@ class DashboardLib
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMergedConfig($dashboard_id, $uid)
|
public function getMergedUserConfig($dashboard_id, $uid)
|
||||||
{
|
{
|
||||||
$defaultconfig = $this->getDefaultConfig($dashboard_id, $uid);
|
$defaultconfig = $this->getUserBaseConfig($dashboard_id);
|
||||||
$userconfig = $this->getUserConfig($dashboard_id, $uid);
|
$userconfig = $this->getUserOverrideConfig($dashboard_id, $uid);
|
||||||
|
|
||||||
$mergedconfig = array_replace_recursive($defaultconfig, $userconfig);
|
$sourceconfig = array_map(function ($value) {
|
||||||
|
return ['source' => $value['source']];
|
||||||
|
}, $defaultconfig);
|
||||||
|
|
||||||
|
$mergedconfig = array_replace_recursive($defaultconfig, $userconfig, $sourceconfig);
|
||||||
|
|
||||||
return $mergedconfig;
|
return $mergedconfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDefaultConfig($dashboard_id, $uid)
|
protected function getUserBaseConfig($dashboard_id)
|
||||||
{
|
{
|
||||||
$res_presets = $this->_ci->DashboardPresetModel->getPresets($dashboard_id, $uid);
|
$funktion_kurzbzs = [];
|
||||||
|
$rights = $this->_ci->permissionlib->getAccessRights();
|
||||||
|
if ($rights)
|
||||||
|
$funktion_kurzbzs = array_unique(array_map(function ($right) {
|
||||||
|
return $right->funktion_kurzbz;
|
||||||
|
}, $rights));
|
||||||
|
|
||||||
|
$this->_ci->DashboardPresetModel->db
|
||||||
|
->group_start()
|
||||||
|
->where_in('funktion_kurzbz', $funktion_kurzbzs)
|
||||||
|
->or_where('funktion_kurzbz IS NULL')
|
||||||
|
->group_end();
|
||||||
|
|
||||||
|
$this->_ci->DashboardPresetModel->addOrder('funktion_kurzbz', 'DESC');
|
||||||
|
|
||||||
|
$result = $this->_ci->DashboardPresetModel->loadWhere([
|
||||||
|
'dashboard_id' => $dashboard_id
|
||||||
|
]);
|
||||||
$defaultconfig = array();
|
$defaultconfig = array();
|
||||||
|
|
||||||
if (hasData($res_presets))
|
if (hasData($result))
|
||||||
{
|
{
|
||||||
$presets = getData($res_presets);
|
$presets = getData($result);
|
||||||
foreach ($presets as $presetobj)
|
foreach ($presets as $presetobj)
|
||||||
{
|
{
|
||||||
$preset = json_decode($presetobj->preset, true);
|
$preset = json_decode($presetobj->preset, true);
|
||||||
if (null !== $preset)
|
if (null !== $preset)
|
||||||
{
|
{
|
||||||
$defaultconfig = array_replace_recursive($defaultconfig, $preset);
|
$preset = array_map(function ($value) use ($presetobj) {
|
||||||
|
$value['source'] = $presetobj->funktion_kurzbz ?: self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL;
|
||||||
|
return $value;
|
||||||
|
}, $preset);
|
||||||
|
$defaultconfig = array_merge_recursive($defaultconfig, $preset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -78,7 +105,7 @@ class DashboardLib
|
|||||||
return $defaultconfig;
|
return $defaultconfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getUserConfig($dashboard_id, $uid)
|
protected function getUserOverrideConfig($dashboard_id, $uid)
|
||||||
{
|
{
|
||||||
$res_userconfig = $this->_ci->DashboardOverrideModel->getOverride($dashboard_id, $uid);
|
$res_userconfig = $this->_ci->DashboardOverrideModel->getOverride($dashboard_id, $uid);
|
||||||
|
|
||||||
@@ -107,7 +134,7 @@ class DashboardLib
|
|||||||
$emptyoverride = new stdClass();
|
$emptyoverride = new stdClass();
|
||||||
$emptyoverride->dashboard_id = $dashboard->dashboard_id;
|
$emptyoverride->dashboard_id = $dashboard->dashboard_id;
|
||||||
$emptyoverride->uid = $uid;
|
$emptyoverride->uid = $uid;
|
||||||
$emptyoverride->override = '{"' . self::USEROVERRIDE_SECTION . '": {"widgets":{}}, "custom": { "widgets" : {}}}';
|
$emptyoverride->override = '[]';
|
||||||
|
|
||||||
return $emptyoverride;
|
return $emptyoverride;
|
||||||
}
|
}
|
||||||
@@ -126,8 +153,7 @@ class DashboardLib
|
|||||||
$emptypreset = new stdClass();
|
$emptypreset = new stdClass();
|
||||||
$emptypreset->dashboard_id = $dashboard->dashboard_id;
|
$emptypreset->dashboard_id = $dashboard->dashboard_id;
|
||||||
$emptypreset->funktion_kurzbz = $funktion_kurzbz;
|
$emptypreset->funktion_kurzbz = $funktion_kurzbz;
|
||||||
$section = ($funktion_kurzbz !== null) ? $funktion_kurzbz : self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL;
|
$emptypreset->preset = '[]';
|
||||||
$emptypreset->preset = '{"' . $section . '": { "widgets" : {}},"custom": { "widgets" : {}}}';
|
|
||||||
|
|
||||||
return $emptypreset;
|
return $emptypreset;
|
||||||
}
|
}
|
||||||
@@ -137,8 +163,10 @@ class DashboardLib
|
|||||||
$dashboard = $this->getDashboardByKurzbz($dashboard_kurzbz);
|
$dashboard = $this->getDashboardByKurzbz($dashboard_kurzbz);
|
||||||
|
|
||||||
$funktion_kurzbz = ($section === self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL) ? null : $section;
|
$funktion_kurzbz = ($section === self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL) ? null : $section;
|
||||||
$result = $this->_ci->DashboardPresetModel
|
$result = $this->_ci->DashboardPresetModel->loadWhere([
|
||||||
->getPresetByDashboardAndFunktion($dashboard->dashboard_id, $funktion_kurzbz);
|
'dashboard_id' => $dashboard->dashboard_id,
|
||||||
|
'funktion_kurzbz' => $funktion_kurzbz
|
||||||
|
]);
|
||||||
|
|
||||||
if (hasData($result))
|
if (hasData($result))
|
||||||
{
|
{
|
||||||
@@ -190,44 +218,4 @@ class DashboardLib
|
|||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addWidgetsToWidgets(&$widgets, $dashboard_kurzbz, $section, $addwigets)
|
|
||||||
{
|
|
||||||
foreach ($addwigets as $widget)
|
|
||||||
{
|
|
||||||
if(!isset($widget->widgetid))
|
|
||||||
{
|
|
||||||
$widget->widgetid = $this->generateWidgetId($dashboard_kurzbz);
|
|
||||||
}
|
|
||||||
$this->addWidgetToWidgets($widgets, $section, $widget, $widget->widgetid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addWidgetToWidgets(&$widgets, $section, $widget, $widgetid)
|
|
||||||
{
|
|
||||||
$section = ($section !== null) ? $section : self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL;
|
|
||||||
if (!isset($widgets[$section]) || !isset($widgets[$section]["widgets"]) || !is_array($widgets[$section]))
|
|
||||||
{
|
|
||||||
$widgets[$section] = array();
|
|
||||||
$widgets[$section]["widgets"] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
$widgets[$section]["widgets"][$widgetid] = $widget;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function removeWidgetFromWidgets(&$widgets, $section, $widgetid)
|
|
||||||
{
|
|
||||||
$section = ($section !== null) ? $section : self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL;
|
|
||||||
if (isset($widgets[$section]) && isset($widgets[$section]["widgets"][$widgetid]))
|
|
||||||
{
|
|
||||||
unset($widgets[$section]["widgets"][$widgetid]);
|
|
||||||
if(empty($widgets[$section]["widgets"]) && $section !== self::USEROVERRIDE_SECTION) {
|
|
||||||
unset($widgets[$section]);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,400 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2025 fhcomplete.org
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This generates a list of students and or prestudents used for Studierendenverwaltung
|
||||||
|
*/
|
||||||
|
class StudentListLib
|
||||||
|
{
|
||||||
|
private $_ci; // Code igniter instance
|
||||||
|
|
||||||
|
private $_allowedStgs = [];
|
||||||
|
private $_selects = [];
|
||||||
|
private $_joins = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the CI instance, loads model and prepares default values
|
||||||
|
*
|
||||||
|
* @param array $params
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct($params = null)
|
||||||
|
{
|
||||||
|
$this->_ci =& get_instance(); // get code igniter instance
|
||||||
|
|
||||||
|
$this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||||
|
|
||||||
|
if (isset($params['allowedStgs']))
|
||||||
|
$this->_allowedStgs = $params['allowedStgs'];
|
||||||
|
|
||||||
|
// Add default SELECTs
|
||||||
|
$this->addSelect("b.uid");
|
||||||
|
$this->addSelect('titelpre');
|
||||||
|
$this->addSelect('nachname');
|
||||||
|
$this->addSelect('vorname');
|
||||||
|
$this->addSelect('wahlname');
|
||||||
|
$this->addSelect('vornamen');
|
||||||
|
$this->addSelect('titelpost');
|
||||||
|
$this->addSelect('ersatzkennzeichen');
|
||||||
|
$this->addSelect('gebdatum');
|
||||||
|
$this->addSelect('geschlecht');
|
||||||
|
$this->addSelect('foto');
|
||||||
|
$this->addSelect('foto_sperre');
|
||||||
|
$this->addSelect('v.semester');
|
||||||
|
$this->addSelect('v.verband');
|
||||||
|
$this->addSelect('v.gruppe');
|
||||||
|
$this->addSelect("statusofsemester"); // Will be replaced later
|
||||||
|
$this->addSelect('UPPER(stg.typ || stg.kurzbz) AS studiengang');
|
||||||
|
$this->addSelect('tbl_prestudent.studiengang_kz');
|
||||||
|
$this->addSelect('stg.bezeichnung AS stg_bezeichnung');
|
||||||
|
$this->addSelect("s.matrikelnr");
|
||||||
|
$this->addSelect('p.person_id');
|
||||||
|
$this->addSelect('pls.status_kurzbz AS status');
|
||||||
|
$this->addSelect('pls.datum AS status_datum');
|
||||||
|
$this->addSelect('pls.bestaetigtam AS status_bestaetigung');
|
||||||
|
$this->addSelect("
|
||||||
|
CASE
|
||||||
|
WHEN pls.status_kurzbz = 'Interessent'
|
||||||
|
THEN pls.ausbildungssemester
|
||||||
|
ELSE s.semester
|
||||||
|
END AS semester_berechnet
|
||||||
|
");
|
||||||
|
$this->addSelect(
|
||||||
|
"(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS mail_privat",
|
||||||
|
false
|
||||||
|
);
|
||||||
|
$this->addSelect("
|
||||||
|
CASE WHEN b.uid IS NOT NULL AND b.uid<>''
|
||||||
|
THEN CONCAT(b.uid, '@', " . $this->_ci->PrestudentModel->escape(DOMAIN) . ")
|
||||||
|
ELSE '' END AS mail_intern", false);
|
||||||
|
$this->addSelect('p.anmerkung AS anmerkungen');
|
||||||
|
$this->addSelect('tbl_prestudent.anmerkung');
|
||||||
|
$this->addSelect('pls.orgform_kurzbz');
|
||||||
|
$this->addSelect('aufmerksamdurch_kurzbz');
|
||||||
|
$this->addSelect(
|
||||||
|
"(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=ps.prestudent_id) AS punkte",
|
||||||
|
false
|
||||||
|
);
|
||||||
|
$this->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
|
||||||
|
$this->addSelect('tbl_prestudent.dual');
|
||||||
|
$this->addSelect('p.matr_nr');
|
||||||
|
$this->addSelect('sp.bezeichnung AS studienplan_bezeichnung');
|
||||||
|
$this->addSelect('tbl_prestudent.prestudent_id');
|
||||||
|
$this->addSelect("(
|
||||||
|
SELECT count(*)
|
||||||
|
FROM (
|
||||||
|
SELECT *, public.get_rolle_prestudent(pss.prestudent_id, NULL) AS laststatus
|
||||||
|
FROM public.tbl_prestudent pss
|
||||||
|
JOIN public.tbl_prestudentstatus USING (prestudent_id)
|
||||||
|
WHERE person_id = p.person_id
|
||||||
|
AND studiensemester_kurzbz = (
|
||||||
|
SELECT studiensemester_kurzbz
|
||||||
|
FROM public.tbl_prestudentstatus
|
||||||
|
WHERE prestudent_id = tbl_prestudent.prestudent_id
|
||||||
|
AND status_kurzbz = 'Interessent'
|
||||||
|
LIMIT 1
|
||||||
|
)
|
||||||
|
AND status_kurzbz = 'Interessent'
|
||||||
|
) prest
|
||||||
|
WHERE laststatus NOT IN ('Abbrecher', 'Abgewiesener', 'Absolvent')
|
||||||
|
AND priorisierung <= tbl_prestudent.priorisierung
|
||||||
|
) || ' (' || COALESCE(tbl_prestudent.priorisierung::text, ' '::text) || ')' AS priorisierung_relativ", false); // TODO(chris): overwrite in fetchStudents
|
||||||
|
$this->addSelect('mentor');
|
||||||
|
$this->addSelect('b.aktiv AS bnaktiv');
|
||||||
|
$this->addSelect('unruly');
|
||||||
|
|
||||||
|
// Add default JOINs
|
||||||
|
$this->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
|
||||||
|
$this->addJoin('public.tbl_person p', 'person_id');
|
||||||
|
$this->addJoin('public.tbl_student s', 'prestudent_id', 'LEFT'); // TODO(chris): overwrite in fetchStudents
|
||||||
|
$this->addJoin('public.tbl_prestudentstatus pls', '
|
||||||
|
pls.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL)
|
||||||
|
AND pls.prestudent_id=tbl_prestudent.prestudent_id
|
||||||
|
AND pls.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, NULL)
|
||||||
|
AND pls.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, NULL)', 'LEFT');
|
||||||
|
$this->addJoin('lehre.tbl_studienplan sp', 'studienplan_id', 'LEFT');
|
||||||
|
$this->addJoin('public.tbl_benutzer b', 's.student_uid=b.uid', 'LEFT');
|
||||||
|
$this->addJoin("v", "", ""); // Will be replaced later
|
||||||
|
$this->addJoin("ps", "", ""); // Will be replaced later
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Public methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a SELECT statement to the query.
|
||||||
|
*
|
||||||
|
* @param string|array $select
|
||||||
|
* @param boolean $escape (optional)
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addSelect($select, $escape = true)
|
||||||
|
{
|
||||||
|
if (is_array($select)) {
|
||||||
|
foreach ($select as $s)
|
||||||
|
$this->addSelect($s, $escape);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$alias = $this->getAliasFromSelect($select);
|
||||||
|
$this->_selects[$alias] = [$select, $escape];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Joins a table to the query.
|
||||||
|
*
|
||||||
|
* @param string $table
|
||||||
|
* @param string $cond
|
||||||
|
* @param string $type (optional)
|
||||||
|
* @param string $position (optional)
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addJoin($table, $cond, $type = '', $position = 'end')
|
||||||
|
{
|
||||||
|
$alias = $this->getAliasFromTable($table);
|
||||||
|
|
||||||
|
if ($position == 'end') {
|
||||||
|
return $this->_joins[$alias] = [$table, $cond, $type];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($position == 'start') {
|
||||||
|
return $this->_joins = [$alias => [$table, $cond, $type]] + $this->_joins;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($position, 0, 7) == 'before_') {
|
||||||
|
$ref = substr($position, 7);
|
||||||
|
$index = 0;
|
||||||
|
} elseif (substr($position, 0, 6) == 'after_') {
|
||||||
|
$ref = substr($position, 6);
|
||||||
|
$index = 1;
|
||||||
|
} else {
|
||||||
|
return $this->addJoin($table, $cond, $type);
|
||||||
|
}
|
||||||
|
if (!isset($this->_joins[$ref]))
|
||||||
|
return $this->addJoin($table, $cond, $type);
|
||||||
|
|
||||||
|
$key_indeces = array_flip(array_keys($this->_joins));
|
||||||
|
$index += $key_indeces[$ref];
|
||||||
|
|
||||||
|
if (!$index)
|
||||||
|
return $this->addJoin($table, $cond, $type, 'start');
|
||||||
|
|
||||||
|
$front_part = array_slice($this->_joins, 0, $index, true);
|
||||||
|
$back_part = array_slice($this->_joins, $index, null, true);
|
||||||
|
|
||||||
|
if (isset($front_part[$alias])) {
|
||||||
|
unset($front_part[$alias]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_joins = $front_part + [$alias => [$table, $cond, $type]] + $back_part;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a WHERE clause to the query.
|
||||||
|
*
|
||||||
|
* @param string|array $key
|
||||||
|
* @param string|array $value
|
||||||
|
* @param boolean $escape
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addWhere($key, $value = null, $escape = true)
|
||||||
|
{
|
||||||
|
if (!is_array($key) && is_array($value)) {
|
||||||
|
$this->_ci->PrestudentModel->db->where_in($key, $value, $escape);
|
||||||
|
} else {
|
||||||
|
$this->_ci->PrestudentModel->db->where($key, $value, $escape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a OR WHERE clause to the query.
|
||||||
|
*
|
||||||
|
* @param string|array $key
|
||||||
|
* @param string|array $value
|
||||||
|
* @param boolean $escape
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addOrWhere($key, $value = null, $escape = true)
|
||||||
|
{
|
||||||
|
if (!is_array($key) && is_array($value)) {
|
||||||
|
$this->_ci->PrestudentModel->db->or_where_in($key, $value, $escape);
|
||||||
|
} else {
|
||||||
|
$this->_ci->PrestudentModel->db->or_where($key, $value, $escape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates the query and executes it.
|
||||||
|
*
|
||||||
|
* @param string|null $studiensemester_kurzbz
|
||||||
|
*
|
||||||
|
* @return stdClass result of the query
|
||||||
|
*/
|
||||||
|
public function execute($studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
$this->addSelectAndJoinForTagsIfConfigured($studiensemester_kurzbz);
|
||||||
|
|
||||||
|
$stdsemEsc = $studiensemester_kurzbz ? $this->_ci->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
||||||
|
|
||||||
|
$this->addSelect(
|
||||||
|
"public.get_rolle_prestudent(
|
||||||
|
public.tbl_prestudent.prestudent_id,
|
||||||
|
" . $this->_ci->PrestudentModel->escape($studiensemester_kurzbz) . "
|
||||||
|
) AS statusofsemester"
|
||||||
|
);
|
||||||
|
$this->addJoin(
|
||||||
|
'public.tbl_studentlehrverband v',
|
||||||
|
'v.student_uid=s.student_uid AND v.studiensemester_kurzbz' . ($studiensemester_kurzbz ? '=' . $stdsemEsc : ' IS NULL'),
|
||||||
|
'LEFT'
|
||||||
|
);
|
||||||
|
$this->addJoin(
|
||||||
|
'public.tbl_prestudentstatus ps',
|
||||||
|
'ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
||||||
|
AND ps.prestudent_id=tbl_prestudent.prestudent_id
|
||||||
|
AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
||||||
|
AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
||||||
|
',
|
||||||
|
'LEFT'
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->addWhere('tbl_prestudent.studiengang_kz', $this->_allowedStgs);
|
||||||
|
|
||||||
|
foreach ($this->_joins as $join)
|
||||||
|
$this->_ci->PrestudentModel->addJoin($join[0], $join[1], $join[2]);
|
||||||
|
|
||||||
|
foreach ($this->_selects as $select)
|
||||||
|
$this->_ci->PrestudentModel->addSelect($select[0], $select[1]);
|
||||||
|
|
||||||
|
$this->_ci->PrestudentModel->addOrder('nachname');
|
||||||
|
$this->_ci->PrestudentModel->addOrder('vorname');
|
||||||
|
|
||||||
|
return $this->_ci->PrestudentModel->load();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------------------------
|
||||||
|
// Protected methods
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add Select and Join for Tags if configured
|
||||||
|
*
|
||||||
|
* @param string studiensemester_kurzbz
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected function addSelectAndJoinForTagsIfConfigured($studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
if (defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED) {
|
||||||
|
$this->_ci->load->config('stv');
|
||||||
|
$tags = $this->_ci->config->item('stv_prestudent_tags');
|
||||||
|
|
||||||
|
$whereTags = '';
|
||||||
|
if (is_array($tags) && !isEmptyArray($tags)) {
|
||||||
|
$tags = array_keys($tags);
|
||||||
|
|
||||||
|
foreach ($tags as $key => $tag) {
|
||||||
|
$tags[$key] = $this->_ci->PrestudentModel->escape($tag);
|
||||||
|
}
|
||||||
|
$whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
|
||||||
|
}
|
||||||
|
$studiensemester_kurzbz_escaped = $this->_ci->PrestudentModel->escape($studiensemester_kurzbz);
|
||||||
|
$subQueryTag = "(
|
||||||
|
SELECT
|
||||||
|
tag.prestudent_id,
|
||||||
|
COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
|
||||||
|
FROM (
|
||||||
|
SELECT DISTINCT ON (n.notiz_id)
|
||||||
|
n.notiz_id AS id,
|
||||||
|
nt.typ_kurzbz,
|
||||||
|
array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
|
||||||
|
n.text AS notiz,
|
||||||
|
nt.style,
|
||||||
|
n.erledigt AS done,
|
||||||
|
nz.prestudent_id,
|
||||||
|
n.start,
|
||||||
|
n.ende
|
||||||
|
FROM public.tbl_notizzuordnung AS nz
|
||||||
|
JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id AND nz.prestudent_id IS NOT NULL
|
||||||
|
JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz " . $whereTags . "
|
||||||
|
WHERE
|
||||||
|
COALESCE(n.start, '1970-01-01') <= (
|
||||||
|
SELECT
|
||||||
|
ende
|
||||||
|
FROM
|
||||||
|
public.tbl_studiensemester
|
||||||
|
WHERE
|
||||||
|
studiensemester_kurzbz = " . $studiensemester_kurzbz_escaped . "
|
||||||
|
)
|
||||||
|
AND COALESCE(n.ende, '2170-12-31') >= (
|
||||||
|
SELECT
|
||||||
|
start
|
||||||
|
FROM
|
||||||
|
public.tbl_studiensemester
|
||||||
|
WHERE
|
||||||
|
studiensemester_kurzbz = " . $studiensemester_kurzbz_escaped . "
|
||||||
|
)
|
||||||
|
) AS tag
|
||||||
|
GROUP BY tag.prestudent_id
|
||||||
|
) AS tag_data_agg";
|
||||||
|
|
||||||
|
$this->addSelect('tag_data_agg.tags');
|
||||||
|
$this->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get alias of a table or select statement
|
||||||
|
*
|
||||||
|
* @param string $select
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
final protected function getAliasFromSelect($select)
|
||||||
|
{
|
||||||
|
if (strpos($select, ' ') !== false) {
|
||||||
|
return trim(strrchr($select, ' '));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($select, '.') !== false) {
|
||||||
|
return substr(strrchr($select, '.'), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $select;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get alias of a table or select statement
|
||||||
|
*
|
||||||
|
* @param string|array $table
|
||||||
|
*
|
||||||
|
* @return string|array
|
||||||
|
*/
|
||||||
|
final protected function getAliasFromTable($table)
|
||||||
|
{
|
||||||
|
if (strpos($table, ' ') !== false) {
|
||||||
|
return trim(strrchr($table, ' '));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $table;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description of dd_auto
|
||||||
|
*
|
||||||
|
* @author ma0068
|
||||||
|
*/
|
||||||
|
class CoreDoubleDegreeTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('codex/Mobilitaet_model', 'MobilitaetModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'idArray' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
|
||||||
|
$this->ci->MobilitaetModel->addJoin('bis.tbl_gsprogramm', 'gsprogramm_id');
|
||||||
|
$this->ci->MobilitaetModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz');
|
||||||
|
|
||||||
|
$result = $this->ci->MobilitaetModel-> loadWhere(array(
|
||||||
|
'gsprogrammtyp_kurzbz' => 'Double',
|
||||||
|
'studiensemester_kurzbz' => $semester
|
||||||
|
));
|
||||||
|
$data = $result->retval;
|
||||||
|
|
||||||
|
$doubledegree_data = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->prestudent_id,
|
||||||
|
'von' => $item->start,
|
||||||
|
'bis' => $item->ende
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'data' => $doubledegree_data,
|
||||||
|
'typeId' => 'prestudent_id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$prestudent_id = $params['id'];
|
||||||
|
|
||||||
|
$this->ci->MobilitaetModel->addSelect('prestudent_id');
|
||||||
|
$this->ci->MobilitaetModel->addSelect('start as von');
|
||||||
|
$this->ci->MobilitaetModel->addSelect('ende as bis');
|
||||||
|
|
||||||
|
$this->ci->MobilitaetModel->addJoin('bis.tbl_gsprogramm', 'gsprogramm_id');
|
||||||
|
$this->ci->MobilitaetModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz');
|
||||||
|
|
||||||
|
$result = $this->ci->MobilitaetModel->loadWhere(array(
|
||||||
|
'gsprogrammtyp_kurzbz' => 'Double',
|
||||||
|
'studiensemester_kurzbz' => $semester,
|
||||||
|
'prestudent_id' => $prestudent_id
|
||||||
|
));
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
//array mit prestudent_id, von und bis
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description unruly
|
||||||
|
* Test for different typeId
|
||||||
|
*
|
||||||
|
* @author ma0068
|
||||||
|
*/
|
||||||
|
class CoreFiftyFiveTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('person/Person_model', 'PersonModel');
|
||||||
|
$this->ci-> load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'person_id' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
|
||||||
|
$result = $this->ci->StudiensemesterModel->loadWhere(array(
|
||||||
|
'studiensemester_kurzbz' => $semester
|
||||||
|
));
|
||||||
|
$data = $result->retval[0];
|
||||||
|
|
||||||
|
$semVon = $data->start;
|
||||||
|
$semBis = $data->ende;
|
||||||
|
$result = $this->ci->PersonModel->getFiftyFivers($semVon, $semBis);
|
||||||
|
|
||||||
|
$data = $result->retval;
|
||||||
|
$fiftyFiveData = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->person_id
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'data' => $fiftyFiveData,
|
||||||
|
'typeId' => 'person_id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'person_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$person_id = $params['id'];
|
||||||
|
$typeId = $params['typeId'];
|
||||||
|
|
||||||
|
|
||||||
|
$result = $this->ci->StudiensemesterModel->loadWhere(array(
|
||||||
|
'studiensemester_kurzbz' => $semester
|
||||||
|
));
|
||||||
|
$data = $result->retval[0];
|
||||||
|
|
||||||
|
$semVon = $data->start;
|
||||||
|
$semBis = $data->ende;
|
||||||
|
$result = $this->ci->PersonModel->isFiftyFive($semVon, $semBis, $person_id);
|
||||||
|
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description of jgv_auto (Jahrgangsvertretung)
|
||||||
|
*
|
||||||
|
* @author ma0068
|
||||||
|
*/
|
||||||
|
class CoreJgvTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'idArray' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
|
||||||
|
$result = $this->ci->BenutzerfunktionModel->getPrestudentsOfJgv($semester);
|
||||||
|
|
||||||
|
$data = $result->retval;
|
||||||
|
|
||||||
|
$jgv_data = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->prestudent_id,
|
||||||
|
'von' => $item->datum_von,
|
||||||
|
'bis' => $item->datum_bis
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'data' => $jgv_data,
|
||||||
|
'typeId' => 'prestudent_id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$prestudent_id = $params['id'];
|
||||||
|
|
||||||
|
$result = $this->ci->BenutzerfunktionModel->isJgv($semester, $prestudent_id);
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description of zgv_auto
|
||||||
|
*
|
||||||
|
* @author ma0068
|
||||||
|
*/
|
||||||
|
class CoreMissingZgvTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('crm/Prestudent_model', 'PrestudentModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'idArray' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
|
||||||
|
$this->ci->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id');
|
||||||
|
$this->ci->PrestudentModel->addJoin('public.tbl_benutzer bn', 'person_id');
|
||||||
|
$this->ci->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||||
|
$result = $this->ci->PrestudentModel-> loadWhere(array(
|
||||||
|
'bn.aktiv' => true, //check if necessary
|
||||||
|
'zgvdatum' => null,
|
||||||
|
'typ' => 'b',
|
||||||
|
'studiensemester_kurzbz' => $semester
|
||||||
|
));
|
||||||
|
|
||||||
|
$data = $result->retval;
|
||||||
|
|
||||||
|
$zgvmissing_data = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->prestudent_id,
|
||||||
|
'von' => null,
|
||||||
|
'bis' => null
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'typeId' => 'prestudent_id',
|
||||||
|
'data' => $zgvmissing_data
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$prestudent_id = $params['id'];
|
||||||
|
|
||||||
|
$this->ci->PrestudentModel->addJoin('public.tbl_prestudentstatus', 'prestudent_id');
|
||||||
|
$this->ci->PrestudentModel->addJoin('public.tbl_benutzer bn', 'person_id');
|
||||||
|
$this->ci->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz');
|
||||||
|
$result = $this->ci->PrestudentModel->loadWhere(array(
|
||||||
|
'bn.aktiv' => true, //check if necessary
|
||||||
|
'zgvdatum' => null,
|
||||||
|
'typ' => 'b',
|
||||||
|
'studiensemester_kurzbz' => $semester,
|
||||||
|
'prestudent_id' => $prestudent_id
|
||||||
|
));
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description of out_auto
|
||||||
|
*
|
||||||
|
* @author ma0068
|
||||||
|
*/
|
||||||
|
class CoreOutgoingTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('codex/Bisio_model', 'BisioModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'idArray' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
|
||||||
|
$result = $this->ci->BisioModel->getOutgoingsOfSemester($semester);
|
||||||
|
|
||||||
|
$data = $result->retval;
|
||||||
|
|
||||||
|
$outgoing_data = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->prestudent_id,
|
||||||
|
'von' => $item->von,
|
||||||
|
'bis' => $item->bis
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'data' => $outgoing_data,
|
||||||
|
'typeId' => 'prestudent_id',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$prestudent_id = $params['id'];
|
||||||
|
|
||||||
|
$result = $this->ci->BisioModel->isPrestudentOutgoing($semester, $prestudent_id);
|
||||||
|
|
||||||
|
if (hasData($result)) {
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description of prewh_auto
|
||||||
|
*
|
||||||
|
* @author bambi
|
||||||
|
*/
|
||||||
|
class CorePrewiederholerTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'idArray' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
|
||||||
|
$this->ci->PrestudentstatusModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz');
|
||||||
|
$result = $this->ci->PrestudentstatusModel-> loadWhere(array(
|
||||||
|
'statusgrund_id' => 15,
|
||||||
|
'studiensemester_kurzbz' => $semester
|
||||||
|
));
|
||||||
|
$data = $result->retval;
|
||||||
|
|
||||||
|
$prewiederholer_data = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->prestudent_id,
|
||||||
|
'von' => $item->start,
|
||||||
|
'bis' => $item->ende
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'data' => $prewiederholer_data,
|
||||||
|
'typeId' => 'prestudent_id',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$prestudent_id = $params['id'];
|
||||||
|
|
||||||
|
$this->ci->PrestudentstatusModel->addSelect('prestudent_id');
|
||||||
|
$this->ci->PrestudentstatusModel->addSelect('start as von');
|
||||||
|
$this->ci->PrestudentstatusModel->addSelect('ende as bis');
|
||||||
|
|
||||||
|
$this->ci->PrestudentstatusModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz');
|
||||||
|
|
||||||
|
$result = $this->ci->PrestudentstatusModel->loadWhere(array(
|
||||||
|
'statusgrund_id' => 15,
|
||||||
|
'studiensemester_kurzbz' => $semester,
|
||||||
|
'prestudent_id' => $prestudent_id
|
||||||
|
));
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description of dd_auto
|
||||||
|
*
|
||||||
|
* @author ma0068
|
||||||
|
*/
|
||||||
|
class CoreStbErhoehtTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('crm/Konto_model', 'KontoModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'idArray' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
|
||||||
|
$this->ci->KontoModel->addJoin('public.tbl_prestudent', 'person_id');
|
||||||
|
$this->ci->KontoModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz');
|
||||||
|
|
||||||
|
$result = $this->ci->KontoModel-> loadWhere(array(
|
||||||
|
'buchungstyp_kurzbz' => 'StudiengebuehrErhoeht',
|
||||||
|
'studiensemester_kurzbz' => $semester
|
||||||
|
));
|
||||||
|
$data = $result->retval;
|
||||||
|
|
||||||
|
$konto_data = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->prestudent_id,
|
||||||
|
'von' => $item->start,
|
||||||
|
'bis' => $item->ende
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'data' => $konto_data,
|
||||||
|
'typeId' => 'prestudent_id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$prestudent_id = $params['id'];
|
||||||
|
|
||||||
|
$this->ci->KontoModel->addSelect('prestudent_id');
|
||||||
|
$this->ci->KontoModel->addSelect('start as von');
|
||||||
|
$this->ci->KontoModel->addSelect('ende as bis');
|
||||||
|
$this->ci->KontoModel->addJoin('public.tbl_prestudent', 'person_id');
|
||||||
|
$this->ci->KontoModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz');
|
||||||
|
|
||||||
|
$result = $this->ci->KontoModel-> loadWhere(array(
|
||||||
|
'buchungstyp_kurzbz' => 'StudiengebuehrErhoeht',
|
||||||
|
'studiensemester_kurzbz' => $semester,
|
||||||
|
'prestudent_id' => $prestudent_id
|
||||||
|
));
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description of wiedereinstieg_auto
|
||||||
|
*
|
||||||
|
* @author ma0068
|
||||||
|
*/
|
||||||
|
class CoreUnterbrecherTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'idArray' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$this->ci->PrestudentstatusModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz');
|
||||||
|
|
||||||
|
$result = $this->ci->PrestudentstatusModel-> loadWhere(array(
|
||||||
|
'status_kurzbz' => 'Unterbrecher',
|
||||||
|
'studiensemester_kurzbz' => $semester
|
||||||
|
));
|
||||||
|
$data = $result->retval;
|
||||||
|
|
||||||
|
$unterbrecher_data = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->prestudent_id,
|
||||||
|
'von' => $item->start,
|
||||||
|
'bis' => $item->ende
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'data' => $unterbrecher_data,
|
||||||
|
'typeId' => 'prestudent_id'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$prestudent_id = $params['id'];
|
||||||
|
|
||||||
|
$this->ci->PrestudentstatusModel->addSelect('prestudent_id');
|
||||||
|
$this->ci->PrestudentstatusModel->addSelect('start as von');
|
||||||
|
$this->ci->PrestudentstatusModel->addSelect('ende as bis');
|
||||||
|
|
||||||
|
$this->ci->PrestudentstatusModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz');
|
||||||
|
$result = $this->ci->PrestudentstatusModel-> loadWhere(array(
|
||||||
|
'status_kurzbz' => 'Unterbrecher',
|
||||||
|
'studiensemester_kurzbz' => $semester,
|
||||||
|
'prestudent_id' => $prestudent_id
|
||||||
|
));
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Description of wh_auto
|
||||||
|
*
|
||||||
|
* @author bambi
|
||||||
|
*/
|
||||||
|
class CoreWiederholerTagLib
|
||||||
|
{
|
||||||
|
protected $ci;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ci = get_instance();
|
||||||
|
$this->ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getZuordnungIds(array $params)
|
||||||
|
{
|
||||||
|
if(!isset($params['studiensemester_kurzbz']))
|
||||||
|
{
|
||||||
|
return (object) array(
|
||||||
|
'idArray' => []
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
|
||||||
|
$this->ci->PrestudentstatusModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz');
|
||||||
|
$result = $this->ci->PrestudentstatusModel-> loadWhere(array(
|
||||||
|
'statusgrund_id' => 16,
|
||||||
|
'studiensemester_kurzbz' => $semester
|
||||||
|
));
|
||||||
|
$data = $result->retval;
|
||||||
|
|
||||||
|
$wiederholer_data = array_map(function($item) {
|
||||||
|
return [
|
||||||
|
'id' => $item->prestudent_id,
|
||||||
|
'von' => $item->start,
|
||||||
|
'bis' => $item->ende
|
||||||
|
];
|
||||||
|
}, $data);
|
||||||
|
|
||||||
|
return (object) array(
|
||||||
|
'typeId' => 'prestudent_id',
|
||||||
|
'data' => $wiederholer_data
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isCriteriaSetFor(array $params)
|
||||||
|
{
|
||||||
|
if ( !isset($params['id'], $params['studiensemester_kurzbz'], $params['typeId']) || $params['typeId'] !== 'prestudent_id')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$semester = $params['studiensemester_kurzbz'];
|
||||||
|
$prestudent_id = $params['id'];
|
||||||
|
|
||||||
|
$this->ci->PrestudentstatusModel->addSelect('prestudent_id');
|
||||||
|
$this->ci->PrestudentstatusModel->addSelect('start as von');
|
||||||
|
$this->ci->PrestudentstatusModel->addSelect('ende as bis');
|
||||||
|
|
||||||
|
$this->ci->PrestudentstatusModel->addJoin('public.tbl_studiensemester', 'studiensemester_kurzbz');
|
||||||
|
|
||||||
|
$result = $this->ci->PrestudentstatusModel->loadWhere(array(
|
||||||
|
'statusgrund_id' => 16,
|
||||||
|
'studiensemester_kurzbz' => $semester,
|
||||||
|
'prestudent_id' => $prestudent_id,
|
||||||
|
));
|
||||||
|
|
||||||
|
if(hasData($result))
|
||||||
|
{
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,6 +40,8 @@ abstract class AbstractBestandteil implements IValidation
|
|||||||
|
|
||||||
if( is_bool($new_value) && ($old_value !== $new_value) ) {
|
if( is_bool($new_value) && ($old_value !== $new_value) ) {
|
||||||
$this->modifiedcolumns[$columnname] = $columnname;
|
$this->modifiedcolumns[$columnname] = $columnname;
|
||||||
|
} else if(is_null($old_value) xor is_null($new_value)) {
|
||||||
|
$this->modifiedcolumns[$columnname] = $columnname;
|
||||||
} else if($old_value != $new_value) {
|
} else if($old_value != $new_value) {
|
||||||
$this->modifiedcolumns[$columnname] = $columnname;
|
$this->modifiedcolumns[$columnname] = $columnname;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ namespace vertragsbestandteil;
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use vertragsbestandteil\VertragsbestandteilStunden;
|
use vertragsbestandteil\VertragsbestandteilStunden;
|
||||||
|
use vertragsbestandteil\VertragsbestandteilLohnguide;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description of VertragsbestandteilFactory
|
* Description of VertragsbestandteilFactory
|
||||||
@@ -22,6 +23,7 @@ class VertragsbestandteilFactory
|
|||||||
const VERTRAGSBESTANDTEIL_URLAUBSANSPRUCH = 'urlaubsanspruch';
|
const VERTRAGSBESTANDTEIL_URLAUBSANSPRUCH = 'urlaubsanspruch';
|
||||||
const VERTRAGSBESTANDTEIL_ZEITAUFZEICHNUNG = 'zeitaufzeichnung';
|
const VERTRAGSBESTANDTEIL_ZEITAUFZEICHNUNG = 'zeitaufzeichnung';
|
||||||
const VERTRAGSBESTANDTEIL_LEHRE = 'lehre';
|
const VERTRAGSBESTANDTEIL_LEHRE = 'lehre';
|
||||||
|
const VERTRAGSBESTANDTEIL_LOHNGUIDE = 'lohnguide';
|
||||||
|
|
||||||
public static function getVertragsbestandteil($data, $fromdb=false)
|
public static function getVertragsbestandteil($data, $fromdb=false)
|
||||||
{
|
{
|
||||||
@@ -70,6 +72,11 @@ class VertragsbestandteilFactory
|
|||||||
$vertragsbestandteil->hydrateByStdClass($data, $fromdb);
|
$vertragsbestandteil->hydrateByStdClass($data, $fromdb);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case self::VERTRAGSBESTANDTEIL_LOHNGUIDE:
|
||||||
|
$vertragsbestandteil = new VertragsbestandteilLohnguide();
|
||||||
|
$vertragsbestandteil->hydrateByStdClass($data, $fromdb);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new Exception('Unknown vertragsbestandteiltyp_kurzbz '
|
throw new Exception('Unknown vertragsbestandteiltyp_kurzbz '
|
||||||
. $vertragsbestandteiltyp_kurzbz);
|
. $vertragsbestandteiltyp_kurzbz);
|
||||||
@@ -127,6 +134,12 @@ class VertragsbestandteilFactory
|
|||||||
$vertragsbestandteildbmodel = $CI->VertragsbestandteilZeitaufzeichnung_model;
|
$vertragsbestandteildbmodel = $CI->VertragsbestandteilZeitaufzeichnung_model;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case self::VERTRAGSBESTANDTEIL_LOHNGUIDE:
|
||||||
|
$CI->load->model('vertragsbestandteil/VertragsbestandteilLohnguide_model',
|
||||||
|
'VertragsbestandteilLohnguide_model');
|
||||||
|
$vertragsbestandteildbmodel = $CI->VertragsbestandteilLohnguide_model;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new Exception('Unknown vertragsbestandteil_kurzbz '
|
throw new Exception('Unknown vertragsbestandteil_kurzbz '
|
||||||
. $vertragsbestandteil_kurzbz);
|
. $vertragsbestandteil_kurzbz);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ require_once __DIR__ . '/VertragsbestandteilKuendigungsfrist.php';
|
|||||||
require_once __DIR__ . '/VertragsbestandteilUrlaubsanspruch.php';
|
require_once __DIR__ . '/VertragsbestandteilUrlaubsanspruch.php';
|
||||||
require_once __DIR__ . '/VertragsbestandteilFreitext.php';
|
require_once __DIR__ . '/VertragsbestandteilFreitext.php';
|
||||||
require_once __DIR__ . '/VertragsbestandteilKarenz.php';
|
require_once __DIR__ . '/VertragsbestandteilKarenz.php';
|
||||||
|
require_once __DIR__ . '/VertragsbestandteilLohnguide.php';
|
||||||
require_once __DIR__ . '/VertragsbestandteilFactory.php';
|
require_once __DIR__ . '/VertragsbestandteilFactory.php';
|
||||||
require_once __DIR__ . '/OverlapChecker.php';
|
require_once __DIR__ . '/OverlapChecker.php';
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,161 @@
|
|||||||
|
<?php
|
||||||
|
namespace vertragsbestandteil;
|
||||||
|
|
||||||
|
use vertragsbestandteil\Vertragsbestandteil;
|
||||||
|
use vertragsbestandteil\VertragsbestandteilFactory;
|
||||||
|
|
||||||
|
class VertragsbestandteilLohnguide extends Vertragsbestandteil
|
||||||
|
{
|
||||||
|
protected $stellenbezeichnung;
|
||||||
|
protected $vordienstzeit;
|
||||||
|
protected $fachrichtung_kurzbz;
|
||||||
|
protected $modellstelle_kurzbz;
|
||||||
|
protected $kommentar_person;
|
||||||
|
protected $kommentar_modellstelle;
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$this->setVertragsbestandteiltyp_kurzbz(
|
||||||
|
VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_LOHNGUIDE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getStellenbezeichnung()
|
||||||
|
{
|
||||||
|
return $this->stellenbezeichnung;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setStellenbezeichnung($stellenbezeichnung): self
|
||||||
|
{
|
||||||
|
$this->markDirty('stellenbezeichnung', $this->stellenbezeichnung, $stellenbezeichnung);
|
||||||
|
$this->stellenbezeichnung = $stellenbezeichnung;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getVordienstzeit()
|
||||||
|
{
|
||||||
|
return $this->vordienstzeit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setVordienstzeit($vordienstzeit): self
|
||||||
|
{
|
||||||
|
$this->markDirty('vordienstzeit', $this->vordienstzeit, $vordienstzeit);
|
||||||
|
$this->vordienstzeit = $vordienstzeit;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFachrichtung_kurzbz()
|
||||||
|
{
|
||||||
|
return $this->fachrichtung_kurzbz;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setFachrichtung_kurzbz($fachrichtung_kurzbz): self
|
||||||
|
{
|
||||||
|
$this->markDirty('fachrichtung_kurzbz', $this->fachrichtung_kurzbz, $fachrichtung_kurzbz);
|
||||||
|
$this->fachrichtung_kurzbz = $fachrichtung_kurzbz;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getModellstelle_kurzbz()
|
||||||
|
{
|
||||||
|
return $this->modellstelle_kurzbz;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setModellstelle_kurzbz($modellstelle_kurzbz): self
|
||||||
|
{
|
||||||
|
$this->markDirty('modellstelle_kurzbz', $this->modellstelle_kurzbz, $modellstelle_kurzbz);
|
||||||
|
$this->modellstelle_kurzbz = $modellstelle_kurzbz;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getKommentar_person()
|
||||||
|
{
|
||||||
|
return $this->kommentar_person;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setKommentar_person($kommentar_person): self
|
||||||
|
{
|
||||||
|
$this->markDirty('kommentar_person', $this->kommentar_person, $kommentar_person);
|
||||||
|
$this->kommentar_person = $kommentar_person;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getKommentar_modellstelle()
|
||||||
|
{
|
||||||
|
return $this->kommentar_modellstelle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setKommentar_modellstelle($kommentar_modellstelle): self
|
||||||
|
{
|
||||||
|
$this->markDirty('kommentar_modellstelle', $this->kommentar_modellstelle, $kommentar_modellstelle);
|
||||||
|
$this->kommentar_modellstelle = $kommentar_modellstelle;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function hydrateByStdClass($data, $fromdb=false)
|
||||||
|
{
|
||||||
|
parent::hydrateByStdClass($data, $fromdb);
|
||||||
|
$this->fromdb = $fromdb;
|
||||||
|
isset($data->fachrichtung_kurzbz) && $this->setFachrichtung_kurzbz($data->fachrichtung_kurzbz);
|
||||||
|
isset($data->stellenbezeichnung) && $this->setStellenbezeichnung($data->stellenbezeichnung);
|
||||||
|
isset($data->vordienstzeit) && $this->setVordienstzeit($data->vordienstzeit);
|
||||||
|
isset($data->modellstelle_kurzbz) && $this->setModellstelle_kurzbz($data->modellstelle_kurzbz);
|
||||||
|
isset($data->kommentar_person) && $this->setKommentar_person($data->kommentar_person);
|
||||||
|
isset($data->kommentar_modellstelle) && $this->setKommentar_modellstelle($data->kommentar_modellstelle);
|
||||||
|
$this->fromdb = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function toStdClass(): \stdClass
|
||||||
|
{
|
||||||
|
$tmp = array(
|
||||||
|
'vertragsbestandteil_id' => $this->getVertragsbestandteil_id(),
|
||||||
|
'stellenbezeichnung' => $this->getStellenbezeichnung(),
|
||||||
|
'vordienstzeit' => $this->getVordienstzeit(),
|
||||||
|
'fachrichtung_kurzbz' => $this->getFachrichtung_kurzbz(),
|
||||||
|
'modellstelle_kurzbz' => $this->getModellstelle_kurzbz(),
|
||||||
|
'kommentar_person' => $this->getKommentar_person(),
|
||||||
|
'kommentar_modellstelle' => $this->getKommentar_modellstelle(),
|
||||||
|
);
|
||||||
|
|
||||||
|
$tmp = array_filter($tmp, function($k) {
|
||||||
|
return in_array($k, $this->modifiedcolumns);
|
||||||
|
}, ARRAY_FILTER_USE_KEY);
|
||||||
|
|
||||||
|
return (object) $tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
$txt = <<<EOTXT
|
||||||
|
modellstelle_kurzbz: {$this->getModellstelle_kurzbz()}
|
||||||
|
|
||||||
|
EOTXT;
|
||||||
|
return parent::__toString() . $txt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function validate()
|
||||||
|
{
|
||||||
|
$value = $this->vordienstzeit;
|
||||||
|
|
||||||
|
if ($value === null || $value === '') {
|
||||||
|
$result = null; // allow null value
|
||||||
|
} else {
|
||||||
|
$result = filter_var($value, FILTER_VALIDATE_INT, [
|
||||||
|
'options' => [
|
||||||
|
'min_range' => 0,
|
||||||
|
'max_range' => 100
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($result === false) {
|
||||||
|
$this->validationerrors[] = 'Vordienstjahre muss eine ganze Zahl (0 bis 100) enthalten oder leer sein.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::validate();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -44,4 +44,56 @@ class Bisio_model extends DB_Model
|
|||||||
else
|
else
|
||||||
return success("Bisio not found");
|
return success("Bisio not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets outgoing students of certain Semester
|
||||||
|
* @param String studiensemester_kurzbz
|
||||||
|
* @return array of prestudent_ids
|
||||||
|
*/
|
||||||
|
public function getOutgoingsOfSemester($studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
$query = "
|
||||||
|
SELECT DISTINCT ps.prestudent_id, tbl_bisio.von, tbl_bisio.bis
|
||||||
|
FROM bis.tbl_bisio
|
||||||
|
JOIN public.tbl_student USING (student_uid)
|
||||||
|
JOIN public.tbl_prestudent ps USING (prestudent_id)
|
||||||
|
JOIN public.tbl_prestudentstatus pss ON (ps.prestudent_id = pss.prestudent_id)
|
||||||
|
JOIN public.tbl_studiensemester ss ON (pss.studiensemester_kurzbz = ss.studiensemester_kurzbz)
|
||||||
|
WHERE ss.studiensemester_kurzbz = ?
|
||||||
|
AND (
|
||||||
|
tbl_bisio.von <= ss.ende
|
||||||
|
AND (
|
||||||
|
tbl_bisio.bis >= ss.start
|
||||||
|
OR tbl_bisio.bis IS NULL
|
||||||
|
)
|
||||||
|
)
|
||||||
|
";
|
||||||
|
|
||||||
|
return $this->execQuery($query, array($studiensemester_kurzbz));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isPrestudentOutgoing($studiensemester_kurzbz, $prestudent_id)
|
||||||
|
{
|
||||||
|
$query = "
|
||||||
|
SELECT
|
||||||
|
ps.prestudent_id, tbl_bisio.von, tbl_bisio.bis
|
||||||
|
FROM bis.tbl_bisio
|
||||||
|
JOIN public.tbl_student USING (student_uid)
|
||||||
|
JOIN public.tbl_prestudent ps USING (prestudent_id)
|
||||||
|
JOIN public.tbl_prestudentstatus pss ON (ps.prestudent_id = pss.prestudent_id)
|
||||||
|
JOIN public.tbl_studiensemester ss ON (pss.studiensemester_kurzbz = ss.studiensemester_kurzbz)
|
||||||
|
WHERE ss.studiensemester_kurzbz = ?
|
||||||
|
--AND pss.status_kurzbz = 'Student'
|
||||||
|
AND (
|
||||||
|
tbl_bisio.von <= ss.ende
|
||||||
|
AND (
|
||||||
|
tbl_bisio.bis >= ss.start
|
||||||
|
OR tbl_bisio.bis IS NULL
|
||||||
|
)
|
||||||
|
)
|
||||||
|
AND ps.prestudent_id = ?
|
||||||
|
";
|
||||||
|
|
||||||
|
return $this->execQuery($query, array($studiensemester_kurzbz, $prestudent_id));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,4 +11,73 @@ class Mobilitaet_model extends DB_Model
|
|||||||
$this->dbTable = 'bis.tbl_mobilitaet';
|
$this->dbTable = 'bis.tbl_mobilitaet';
|
||||||
$this->pk = 'mobilitaet_id';
|
$this->pk = 'mobilitaet_id';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getMobilityZusatzForUids($uids) {
|
||||||
|
$qry = "SELECT distinct on(nachname, vorname, public.tbl_benutzer.person_id) uid,
|
||||||
|
tbl_mitarbeiter.mitarbeiter_uid,
|
||||||
|
tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung,
|
||||||
|
tbl_mobilitaet.mobilitaetstyp_kurzbz,
|
||||||
|
(CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN 1 ELSE 0 END) as doubledegree,
|
||||||
|
public.tbl_prestudent.gsstudientyp_kurzbz as ddtype,
|
||||||
|
(SELECT status_kurzbz FROM public.tbl_prestudentstatus
|
||||||
|
WHERE prestudent_id=tbl_student.prestudent_id
|
||||||
|
ORDER BY datum DESC, insertamum DESC, ext_id DESC LIMIT 1) as studienstatus
|
||||||
|
FROM
|
||||||
|
campus.vw_student_lehrveranstaltung
|
||||||
|
JOIN public.tbl_benutzer USING(uid)
|
||||||
|
JOIN public.tbl_person USING(person_id)
|
||||||
|
LEFT JOIN public.tbl_student ON(uid=student_uid)
|
||||||
|
LEFT JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid)
|
||||||
|
LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz)
|
||||||
|
LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id
|
||||||
|
AND tbl_zeugnisnote.student_uid=tbl_student.student_uid
|
||||||
|
AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz)
|
||||||
|
LEFT JOIN lehre.tbl_note USING (note)
|
||||||
|
LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid)
|
||||||
|
LEFT JOIN public.tbl_studiengang ON(tbl_student.studiengang_kz=tbl_studiengang.studiengang_kz)
|
||||||
|
LEFT JOIN bis.tbl_mobilitaet USING(prestudent_id)
|
||||||
|
LEFT JOIN public.tbl_prestudent USING(prestudent_id)
|
||||||
|
WHERE uid IN ?";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, [$uids]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function formatZusatz($entry, $erhalter_kz) {
|
||||||
|
$zusatz = '';
|
||||||
|
|
||||||
|
if (isset($entry->studienstatus) && $entry->studienstatus === 'Incoming') {
|
||||||
|
$zusatz = '(i)';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($entry->lkt_ueberschreibbar) && $entry->lkt_ueberschreibbar === false) {
|
||||||
|
$zusatz .= ' (' . ($entry->anmerkung ?? '') . ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($entry->mitarbeiter_uid) && $entry->mitarbeiter_uid !== null) {
|
||||||
|
$zusatz .= ' (ma)';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($entry->stg_kz_student) && $entry->stg_kz_student == $erhalter_kz) {
|
||||||
|
$zusatz .= ' (a.o.)';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
isset($entry->mobilitaetstyp_kurzbz) && $entry->mobilitaetstyp_kurzbz &&
|
||||||
|
isset($entry->doubledegree) && $entry->doubledegree === 1
|
||||||
|
) {
|
||||||
|
$zusatz .= ' (d.d.';
|
||||||
|
|
||||||
|
$ddtype = $entry->ddtype ?? null;
|
||||||
|
|
||||||
|
if ($ddtype == 'Intern') {
|
||||||
|
$zusatz .= 'i.)';
|
||||||
|
} elseif ($ddtype == 'Extern') {
|
||||||
|
$zusatz .= 'o.)';
|
||||||
|
} else {
|
||||||
|
$zusatz .= ')';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $zusatz;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -234,9 +234,9 @@ class Content_model extends DB_Model
|
|||||||
FROM
|
FROM
|
||||||
campus.tbl_content c1
|
campus.tbl_content c1
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
campus.tbl_contentsprache s1 ON c1.content_id=s1.content_id AND s1.sprache=?
|
campus.tbl_contentsprache s1 ON c1.content_id=s1.content_id AND s1.sprache=? AND sichtbar=true
|
||||||
WHERE
|
WHERE
|
||||||
sichtbar=true
|
c1.aktiv = true
|
||||||
) s2
|
) s2
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
campus.tbl_contentsprache s3 USING(content_id, sprache)
|
campus.tbl_contentsprache s3 USING(content_id, sprache)
|
||||||
@@ -277,7 +277,7 @@ class Content_model extends DB_Model
|
|||||||
JOIN
|
JOIN
|
||||||
campus.tbl_contentsprache s USING(contentsprache_id)
|
campus.tbl_contentsprache s USING(contentsprache_id)
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
campus.tbl_contentchild k ON(m.content_id=k.content_id)
|
campus.tbl_contentchild k ON(m.content_id=k.content_id) and c.aktiv = true
|
||||||
WHERE EXISTS (
|
WHERE EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
FROM campus.tbl_contentgruppe
|
FROM campus.tbl_contentgruppe
|
||||||
|
|||||||
@@ -11,8 +11,4 @@ class Bookmark_model extends DB_Model
|
|||||||
$this->dbTable = 'dashboard.tbl_bookmark';
|
$this->dbTable = 'dashboard.tbl_bookmark';
|
||||||
$this->pk = 'bookmark_id';
|
$this->pk = 'bookmark_id';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,57 +11,4 @@ class Dashboard_Preset_model extends DB_Model
|
|||||||
$this->dbTable = 'dashboard.tbl_dashboard_preset';
|
$this->dbTable = 'dashboard.tbl_dashboard_preset';
|
||||||
$this->pk = 'preset_id';
|
$this->pk = 'preset_id';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Presets of given uid.
|
|
||||||
* @param integer dashboard_id
|
|
||||||
* @param string $uid
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getPresets($dashboard_id, $uid)
|
|
||||||
{
|
|
||||||
// TODO: get Funktionen for uid and load all preset for all funktionen for uid
|
|
||||||
//return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'funktion_kurzbz'=> null));
|
|
||||||
$sql = <<<EOSQL
|
|
||||||
SELECT
|
|
||||||
*
|
|
||||||
FROM
|
|
||||||
dashboard.tbl_dashboard_preset
|
|
||||||
WHERE
|
|
||||||
dashboard_id = ?
|
|
||||||
AND (
|
|
||||||
funktion_kurzbz IN (
|
|
||||||
SELECT
|
|
||||||
DISTINCT funktion_kurzbz
|
|
||||||
FROM
|
|
||||||
public.tbl_benutzerfunktion
|
|
||||||
WHERE
|
|
||||||
uid = ?
|
|
||||||
AND
|
|
||||||
NOW()::date
|
|
||||||
BETWEEN
|
|
||||||
COALESCE(datum_von, '1970-01-01')
|
|
||||||
AND
|
|
||||||
COALESCE(datum_bis, '2170-12-31')
|
|
||||||
)
|
|
||||||
OR
|
|
||||||
funktion_kurzbz IS NULL
|
|
||||||
)
|
|
||||||
ORDER BY
|
|
||||||
funktion_kurzbz DESC
|
|
||||||
EOSQL;
|
|
||||||
|
|
||||||
return $this->execQuery($sql, array($dashboard_id, $uid));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Preset by Dashboard and Funktion
|
|
||||||
* @param integer dashboard_id
|
|
||||||
* @param string funktion_kurzbz
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getPresetByDashboardAndFunktion($dashboard_id, $funktion_kurzbz)
|
|
||||||
{
|
|
||||||
return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'funktion_kurzbz' => $funktion_kurzbz));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,15 +11,4 @@ class Dashboard_model extends DB_Model
|
|||||||
$this->dbTable = 'dashboard.tbl_dashboard';
|
$this->dbTable = 'dashboard.tbl_dashboard';
|
||||||
$this->pk = 'dashboard_id';
|
$this->pk = 'dashboard_id';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Dashboard by kurzbz.
|
|
||||||
* @param string dashboard_kurzbz
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function getDashboardByKurzbz($dashboard_kurzbz)
|
|
||||||
{
|
|
||||||
return $this->loadWhere(array('dashboard_kurzbz' => $dashboard_kurzbz));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,12 +100,14 @@ class Abschlusspruefung_model extends DB_Model
|
|||||||
|
|
||||||
if (isError($abschlussarbeit))
|
if (isError($abschlussarbeit))
|
||||||
return $abschlussarbeit;
|
return $abschlussarbeit;
|
||||||
|
|
||||||
if (hasData($abschlussarbeit))
|
if (hasData($abschlussarbeit))
|
||||||
{
|
{
|
||||||
$abschlussarbeit = getData($abschlussarbeit)[0];
|
$abschlussarbeit = getData($abschlussarbeit)[0];
|
||||||
$abschlusspruefungdata->projektarbeit_studiengangstyp_name = $abschlussarbeit->projekttyp_kurzbz;
|
$abschlusspruefungdata->projektarbeit_studiengangstyp_name = $abschlussarbeit->projekttyp_kurzbz;
|
||||||
$abschlusspruefungdata->abschlussarbeit_titel = $abschlussarbeit->titel;
|
$abschlusspruefungdata->abschlussarbeit_titel = $abschlussarbeit->titel;
|
||||||
$abschlusspruefungdata->abschlussarbeit_note = $abschlussarbeit->note;
|
$abschlusspruefungdata->abschlussarbeit_note = $abschlussarbeit->note;
|
||||||
|
$abschlusspruefungdata->abschlussarbeit_sprache = $abschlussarbeit->sprache_bezeichnung;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,4 +52,53 @@ class LePruefung_model extends DB_Model
|
|||||||
'student_uid' => $student_uid
|
'student_uid' => $student_uid
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getPruefungenByLvStudiensemester($lv_id, $sem_kurzbz) {
|
||||||
|
$qry = "SELECT lehre.tbl_pruefung.*, tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung, tbl_lehrveranstaltung.lehrveranstaltung_id,
|
||||||
|
tbl_note.bezeichnung as note_bezeichnung, tbl_pruefungstyp.beschreibung as typ_beschreibung, tbl_lehreinheit.studiensemester_kurzbz as studiensemester_kurzbz
|
||||||
|
FROM lehre.tbl_pruefung, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, lehre.tbl_note, lehre.tbl_pruefungstyp
|
||||||
|
WHERE lehre.tbl_pruefung.lehreinheit_id=tbl_lehreinheit.lehreinheit_id
|
||||||
|
AND tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id
|
||||||
|
AND lehre.tbl_pruefung.note = tbl_note.note
|
||||||
|
AND lehre.tbl_pruefung.pruefungstyp_kurzbz=tbl_pruefungstyp.pruefungstyp_kurzbz
|
||||||
|
AND tbl_lehrveranstaltung.lehrveranstaltung_id = ?
|
||||||
|
AND tbl_lehreinheit.studiensemester_kurzbz = ?
|
||||||
|
ORDER BY datum DESC;";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, array($lv_id, $sem_kurzbz));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPruefungenByUidTypLvStudiensemester($uid, $typ = null, $lv_id = null, $sem_kurzbz = null) {
|
||||||
|
$params = [$uid];
|
||||||
|
$qry = "SELECT tbl_pruefung.*, tbl_lehrveranstaltung.bezeichnung as lehrveranstaltung_bezeichnung, tbl_lehrveranstaltung.lehrveranstaltung_id,
|
||||||
|
tbl_note.bezeichnung as note_bezeichnung, tbl_pruefungstyp.beschreibung as typ_beschreibung, tbl_lehreinheit.studiensemester_kurzbz as studiensemester_kurzbz
|
||||||
|
FROM lehre.tbl_pruefung, lehre.tbl_lehreinheit, lehre.tbl_lehrveranstaltung, lehre.tbl_note, lehre.tbl_pruefungstyp
|
||||||
|
WHERE student_uid= ?
|
||||||
|
AND tbl_pruefung.lehreinheit_id=tbl_lehreinheit.lehreinheit_id
|
||||||
|
AND tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id
|
||||||
|
AND tbl_pruefung.note = tbl_note.note
|
||||||
|
AND tbl_pruefung.pruefungstyp_kurzbz=tbl_pruefungstyp.pruefungstyp_kurzbz";
|
||||||
|
if ($typ != null)
|
||||||
|
{
|
||||||
|
$qry .= " AND tbl_pruefungstyp.pruefungstyp_kurzbz = ?";
|
||||||
|
$params[] = $typ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($lv_id != null)
|
||||||
|
{
|
||||||
|
$qry .= " AND tbl_lehrveranstaltung.lehrveranstaltung_id = ?";
|
||||||
|
$params[] = $lv_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($sem_kurzbz != null)
|
||||||
|
{
|
||||||
|
$qry .= " AND tbl_lehreinheit.studiensemester_kurzbz = ?";
|
||||||
|
$params[] = $sem_kurzbz;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$qry .= " ORDER BY datum DESC";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, $params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -739,4 +739,26 @@ EOSQL;
|
|||||||
)";
|
)";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function getAllLehreinheitenForLvaAndMaUid($lva_id, $ma_uid, $sem_kurzbz)
|
||||||
|
{
|
||||||
|
$query = "SELECT DISTINCT tbl_lehreinheitmitarbeiter.lehreinheit_id, tbl_lehreinheit.lehrveranstaltung_id, tbl_lehreinheit.lehrform_kurzbz,
|
||||||
|
tbl_lehreinheitmitarbeiter.mitarbeiter_uid,
|
||||||
|
tbl_lehreinheitgruppe.semester,
|
||||||
|
tbl_lehreinheitgruppe.verband,
|
||||||
|
tbl_lehreinheitgruppe.gruppe,
|
||||||
|
tbl_lehreinheitgruppe.gruppe_kurzbz,
|
||||||
|
tbl_lehrveranstaltung.kurzbz,
|
||||||
|
tbl_studiengang.kurzbzlang,
|
||||||
|
(SELECT COUNT(DISTINCT datum) FROM campus.vw_stundenplan WHERE lehreinheit_id = lehre.tbl_lehreinheit.lehreinheit_id) as termincount,
|
||||||
|
(SELECT COUNT(*) FROM campus.vw_student_lehrveranstaltung WHERE lehreinheit_id = lehre.tbl_lehreinheit.lehreinheit_id) as studentcount
|
||||||
|
FROM lehre.tbl_lehreinheit JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id)
|
||||||
|
JOIN lehre.tbl_lehreinheitgruppe USING(lehreinheit_id)
|
||||||
|
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||||
|
JOIN public.tbl_studiengang ON (tbl_lehreinheitgruppe.studiengang_kz = tbl_studiengang.studiengang_kz)
|
||||||
|
WHERE lehrveranstaltung_id = ? AND studiensemester_kurzbz = ? AND mitarbeiter_uid = ?
|
||||||
|
ORDER BY tbl_lehreinheitgruppe.gruppe_kurzbz";
|
||||||
|
|
||||||
|
return $this->execQuery($query, [$lva_id, $sem_kurzbz, $ma_uid]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ class Lehrveranstaltung_model extends DB_Model
|
|||||||
tbl_bisio.bisio_id, tbl_bisio.von, tbl_bisio.bis, tbl_student.studiengang_kz AS stg_kz_student,
|
tbl_bisio.bisio_id, tbl_bisio.von, tbl_bisio.bis, tbl_student.studiengang_kz AS stg_kz_student,
|
||||||
tbl_zeugnisnote.note, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_benutzer.uid,
|
tbl_zeugnisnote.note, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_benutzer.uid,
|
||||||
UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, tbl_studiengang.orgform_kurzbz, vw_student_lehrveranstaltung.semester, vw_student_lehrveranstaltung.studiensemester_kurzbz, vw_student_lehrveranstaltung.bezeichnung,
|
UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, tbl_studiengang.orgform_kurzbz, vw_student_lehrveranstaltung.semester, vw_student_lehrveranstaltung.studiensemester_kurzbz, vw_student_lehrveranstaltung.bezeichnung,
|
||||||
tbl_student.prestudent_id
|
tbl_student.prestudent_id, campus.vw_student_lehrveranstaltung.lehreinheit_id
|
||||||
FROM
|
FROM
|
||||||
campus.vw_student_lehrveranstaltung
|
campus.vw_student_lehrveranstaltung
|
||||||
JOIN public.tbl_benutzer USING(uid)
|
JOIN public.tbl_benutzer USING(uid)
|
||||||
@@ -402,14 +402,17 @@ class Lehrveranstaltung_model extends DB_Model
|
|||||||
SELECT
|
SELECT
|
||||||
vorname, nachname, mitarbeiter_uid, lehrfunktion_kurzbz
|
vorname, nachname, mitarbeiter_uid, lehrfunktion_kurzbz
|
||||||
FROM
|
FROM
|
||||||
lehre.tbl_lehreinheit
|
lehre.tbl_lehreinheit le
|
||||||
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
|
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
|
||||||
JOIN public.tbl_benutzer b ON b.uid = lema.mitarbeiter_uid
|
JOIN public.tbl_benutzer b ON b.uid = lema.mitarbeiter_uid
|
||||||
JOIN public.tbl_person p using (person_id)
|
JOIN public.tbl_person p using (person_id)
|
||||||
WHERE
|
WHERE
|
||||||
tbl_lehreinheit.lehrveranstaltung_id= ?
|
le.lehrveranstaltung_id= ?
|
||||||
AND tbl_lehreinheit.studiensemester_kurzbz = ?
|
AND le.studiensemester_kurzbz = ?
|
||||||
AND lehrfunktion_kurzbz = 'LV-Leitung'
|
AND lehrfunktion_kurzbz = 'LV-Leitung'
|
||||||
|
AND lema.mitarbeiter_uid NOT like '_Dummy%'
|
||||||
|
AND b.aktiv = TRUE
|
||||||
|
AND p.aktiv = TRUE
|
||||||
ORDER BY
|
ORDER BY
|
||||||
lema.insertamum DESC
|
lema.insertamum DESC
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
@@ -1343,4 +1346,68 @@ class Lehrveranstaltung_model extends DB_Model
|
|||||||
|
|
||||||
return $this->execQuery($qry, $params);
|
return $this->execQuery($qry, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getLvForLektorInSemester($sem_kurzbz, $uid) {
|
||||||
|
$qry = "SELECT DISTINCT (tbl_lehrveranstaltung.lehrveranstaltung_id),
|
||||||
|
UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as stg_kurzbz,
|
||||||
|
tbl_studiengang.studiengang_kz,
|
||||||
|
tbl_lehrveranstaltung.semester as lv_semester,
|
||||||
|
tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung,
|
||||||
|
(SELECT kurzbz FROM public.tbl_mitarbeiter
|
||||||
|
WHERE mitarbeiter_uid=tbl_lehreinheitmitarbeiter.mitarbeiter_uid) as lektor,
|
||||||
|
lehre.tbl_lehrveranstaltung.orgform_kurzbz as orgform
|
||||||
|
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehreinheit JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id)
|
||||||
|
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||||
|
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||||
|
JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id)
|
||||||
|
WHERE
|
||||||
|
tbl_lehreinheit.studiensemester_kurzbz = ?
|
||||||
|
AND mitarbeiter_uid = ?
|
||||||
|
ORDER BY stg_kurzbz,lv_semester,lv_bezeichnung";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, array($sem_kurzbz, $uid));
|
||||||
|
}
|
||||||
|
|
||||||
|
// used for cis4 mylv mitarbeiter
|
||||||
|
public function getLvsByMitarbeiterInSemester($mitarbeiter_uid, $sem_kurzbz) {
|
||||||
|
$qry = "SELECT * FROM (
|
||||||
|
SELECT DISTINCT ON (lehre.tbl_lehrveranstaltung.lehrveranstaltung_id)
|
||||||
|
public.tbl_studiengang.studiengang_kz,
|
||||||
|
lehre.tbl_lehrveranstaltung.semester,
|
||||||
|
public.tbl_studiengang.bezeichnung as sg_bezeichnung,
|
||||||
|
public.tbl_studiengang.english as sg_bezeichnung_eng,
|
||||||
|
UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as studiengang_kuerzel,
|
||||||
|
lehre.tbl_lehrveranstaltung.lehrveranstaltung_id,
|
||||||
|
lehre.tbl_lehrveranstaltung.bezeichnung,
|
||||||
|
lehre.tbl_lehrveranstaltung.bezeichnung_english as bezeichnung_eng,
|
||||||
|
lehre.tbl_lehrveranstaltung.farbe,
|
||||||
|
lehre.tbl_lehrveranstaltung.lvinfo,
|
||||||
|
lehre.tbl_lehrveranstaltung.benotung,
|
||||||
|
lehre.tbl_lehrveranstaltung.orgform_kurzbz,
|
||||||
|
lehre.tbl_lehrveranstaltung.sprache,
|
||||||
|
lehre.tbl_lehrveranstaltung.ects,
|
||||||
|
lehre.tbl_lehrveranstaltung.incoming
|
||||||
|
FROM
|
||||||
|
lehre.tbl_lehreinheit JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id)
|
||||||
|
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||||
|
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||||
|
JOIN lehre.tbl_lehrveranstaltung as lehrfach ON(tbl_lehreinheit.lehrfach_id=lehrfach.lehrveranstaltung_id)
|
||||||
|
WHERE
|
||||||
|
tbl_lehreinheit.studiensemester_kurzbz = ?
|
||||||
|
AND mitarbeiter_uid = ?) as distincted_by_lva_id
|
||||||
|
JOIN (
|
||||||
|
SELECT lehrveranstaltung_id, TRUNC(SUM(lehre.tbl_lehreinheitmitarbeiter.semesterstunden)) as semesterstunden
|
||||||
|
FROM lehre.tbl_lehreinheit
|
||||||
|
JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id)
|
||||||
|
JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||||
|
WHERE tbl_lehreinheit.studiensemester_kurzbz = ?
|
||||||
|
AND mitarbeiter_uid = ?
|
||||||
|
GROUP BY lehrveranstaltung_id
|
||||||
|
) semesterstundenAggregatedSubquery USING(lehrveranstaltung_id)
|
||||||
|
ORDER BY studiengang_kuerzel, semester, bezeichnung";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, [$sem_kurzbz, $mitarbeiter_uid, $sem_kurzbz, $mitarbeiter_uid]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class Lvgesamtnote_model extends DB_Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Laedt die Noten
|
* Laedt die Noten - lvgesamtnote (Vorschlag) JOIN tbl.note (zeugnisnote)
|
||||||
*
|
*
|
||||||
* @param integer $lehrveranstaltung_id
|
* @param integer $lehrveranstaltung_id
|
||||||
* @param string $student_uid
|
* @param string $student_uid
|
||||||
@@ -46,4 +46,19 @@ class Lvgesamtnote_model extends DB_Model
|
|||||||
|
|
||||||
return $this->loadWhere($where);
|
return $this->loadWhere($where);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getLvGesamtNoteVorschlag($lehrveranstaltung_id, $student_uid, $studiensemester_kurzbz)
|
||||||
|
{
|
||||||
|
$qry = "SELECT * FROM campus.tbl_lvgesamtnote
|
||||||
|
WHERE campus.tbl_lvgesamtnote.student_uid = ?
|
||||||
|
AND campus.tbl_lvgesamtnote.studiensemester_kurzbz = ?";
|
||||||
|
$params = [$student_uid, $studiensemester_kurzbz];
|
||||||
|
|
||||||
|
if ($lehrveranstaltung_id) {
|
||||||
|
$qry .= "AND campus.tbl_lvgesamtnote.lehrveranstaltung_id = ?";
|
||||||
|
$params[] = $lehrveranstaltung_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry, $params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,4 +19,25 @@ class Note_model extends DB_Model
|
|||||||
|
|
||||||
return $this->execReadOnlyQuery($qry);
|
return $this->execReadOnlyQuery($qry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// used to determine the primary key of note "entschuldigt" to avoid hardcoded magic numbers
|
||||||
|
// that might differ in a different installation of fhcomplete
|
||||||
|
public function getEntschuldigtNote() {
|
||||||
|
$qry ="SELECT *
|
||||||
|
FROM lehre.tbl_note
|
||||||
|
WHERE bezeichnung = 'entschuldigt'";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry);
|
||||||
|
}
|
||||||
|
|
||||||
|
// used to determine the primary key of note "noch nicht eingetragen" to avoid hardcoded magic numbers
|
||||||
|
// that might differ in a different installation of fhcomplete
|
||||||
|
public function getNochNichtEingetragenNote() {
|
||||||
|
$qry ="SELECT *
|
||||||
|
FROM lehre.tbl_note
|
||||||
|
WHERE bezeichnung = 'Noch nicht eingetragen'";
|
||||||
|
|
||||||
|
return $this->execReadOnlyQuery($qry);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -26,6 +26,9 @@ class Notenschluesselaufteilung_model extends DB_Model
|
|||||||
$this->load->model('education/Notenschluesselzuordnung_model', 'NotenschluesselzuordnungModel');
|
$this->load->model('education/Notenschluesselzuordnung_model', 'NotenschluesselzuordnungModel');
|
||||||
$notenschluessel_kurzbz = $this->NotenschluesselzuordnungModel->getKurzbzForLv($lehrveranstaltung_id, $studiensemester_kurzbz);
|
$notenschluessel_kurzbz = $this->NotenschluesselzuordnungModel->getKurzbzForLv($lehrveranstaltung_id, $studiensemester_kurzbz);
|
||||||
|
|
||||||
|
if($notenschluessel_kurzbz == null)
|
||||||
|
return success(null);
|
||||||
|
|
||||||
$this->addSelect("note");
|
$this->addSelect("note");
|
||||||
$this->addOrder("punkte", "DESC");
|
$this->addOrder("punkte", "DESC");
|
||||||
$this->addLimit(1);
|
$this->addLimit(1);
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user