Compare commits
1014 Commits
fix-global
...
v1.0.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
daeeb693d6 | ||
|
|
a0b06be422 | ||
|
|
4b2ba96435 | ||
|
|
10510e204f | ||
|
|
032749dd01 | ||
|
|
dc65bff772 | ||
|
|
56266a3774 | ||
|
|
93f0f8ab44 | ||
|
|
611cc4d5a1 | ||
|
|
552b0c9616 | ||
|
|
1327b033e6 | ||
|
|
ae42828771 | ||
|
|
1df6319164 | ||
|
|
95012072fc | ||
|
|
c01c248202 | ||
|
|
0093025e5d | ||
|
|
20398cb934 | ||
|
|
2792eb53b7 | ||
|
|
b2f8f796b9 | ||
|
|
39bb3149c9 | ||
|
|
1e610f7fbb | ||
|
|
c760fd5776 | ||
|
|
2162963926 | ||
|
|
c3f3a110c0 | ||
|
|
0e444ab7d3 | ||
|
|
752fe5b4ba | ||
|
|
dce369638a | ||
|
|
911cfe9d2f | ||
|
|
f4e882ba3e | ||
|
|
211c69bb41 | ||
|
|
b592172b82 | ||
|
|
40445cbb94 | ||
|
|
20c93b3a6b | ||
|
|
e2bf324fb4 | ||
|
|
b47ff80e9d | ||
|
|
e10feb3c36 | ||
|
|
b8471dd753 | ||
|
|
125c06952a | ||
|
|
4336839932 | ||
|
|
bbdfaa32e9 | ||
|
|
4f52a73029 | ||
|
|
1a2f693fea | ||
|
|
ab8b76cada | ||
|
|
b5240f0eec | ||
|
|
7777bd02e3 | ||
|
|
fcdd70dcc7 | ||
|
|
4eb5390ad8 | ||
|
|
3b5c47222d | ||
|
|
f97ae4e4e2 | ||
|
|
33db16a1a2 | ||
|
|
6232f8703e | ||
|
|
e6621ad866 | ||
|
|
6a1533191a | ||
|
|
a0782c7bf7 | ||
|
|
2b6436915d | ||
|
|
4c220a67f2 | ||
|
|
110aab00d6 | ||
|
|
8e8111d272 | ||
|
|
53d2e288d4 | ||
|
|
262c1ea371 | ||
|
|
7be9eb09e8 | ||
|
|
5fb7e88318 | ||
|
|
d9c50714f4 | ||
|
|
0a91e5aa05 | ||
|
|
9b70b4212f | ||
|
|
9f525d69b6 | ||
|
|
b09c4753da | ||
|
|
e4b4556210 | ||
|
|
fafd132768 | ||
|
|
67dc6d1f29 | ||
|
|
969cb37cfe | ||
|
|
94c2be9919 | ||
|
|
5089285913 | ||
|
|
e80920ad6c | ||
|
|
d6606ab898 | ||
|
|
41599348c4 | ||
|
|
92a8ce6ef4 | ||
|
|
690a86bb69 | ||
|
|
cde4b61cea | ||
|
|
f361c42a30 | ||
|
|
065646ed5d | ||
|
|
de399166f1 | ||
|
|
a3a4d7fbd0 | ||
|
|
a7c1595978 | ||
|
|
1a8d113ad8 | ||
|
|
72cbbf147f | ||
|
|
a0e6462c13 | ||
|
|
b37f259804 | ||
|
|
2fbe5dacb2 | ||
|
|
3150cf2510 | ||
|
|
3b1b375d5b | ||
|
|
3c0a29d4c7 | ||
|
|
817bc4441f | ||
|
|
07e1aaaa66 | ||
|
|
35b77a8908 | ||
|
|
d5b4af95ff | ||
|
|
fc6a50b13f | ||
|
|
8415abec6e | ||
|
|
ea9ca67d1e | ||
|
|
8201506c5f | ||
|
|
5fc879b0ef | ||
|
|
bfde847045 | ||
|
|
d96e3f4f9f | ||
|
|
0593a9fb30 | ||
|
|
c03cca21e8 | ||
|
|
170b1b0dcc | ||
|
|
cb9c7966d9 | ||
|
|
b9c2222951 | ||
|
|
dfef5ca26c | ||
|
|
bce60a8657 | ||
|
|
2b244bb4f4 | ||
|
|
31b08eb545 | ||
|
|
9b7817a57f | ||
|
|
bb0f3d5962 | ||
|
|
23c78d5801 | ||
|
|
cd3236976f | ||
|
|
e6096bf9ed | ||
|
|
a502603915 | ||
|
|
7566565f55 | ||
|
|
f56f0b5366 | ||
|
|
34870b4625 | ||
|
|
3ee592a989 | ||
|
|
d6d7e05b51 | ||
|
|
07eaec2ded | ||
|
|
296a7e6023 | ||
|
|
54827edd7e | ||
|
|
d87fb81cf3 | ||
|
|
99a7c47798 | ||
|
|
080a02589c | ||
|
|
d1e7549da9 | ||
|
|
8e1ef1dc77 | ||
|
|
619a2f9d80 | ||
|
|
926444767b | ||
|
|
6bf4020ad1 | ||
|
|
cb63ad8ed2 | ||
|
|
458ed9ad95 | ||
|
|
a11df1a237 | ||
|
|
352d4b9ab9 | ||
|
|
275ded0658 | ||
|
|
c8f3350761 | ||
|
|
e3112d8dcf | ||
|
|
5009900c0e | ||
|
|
0f60f1a58b | ||
|
|
8f88518187 | ||
|
|
05bcead7d1 | ||
|
|
6268989306 | ||
|
|
43ba835b52 | ||
|
|
9240bc9130 | ||
|
|
fb70aee055 | ||
|
|
7bf69eb77d | ||
|
|
7ded9a23be | ||
|
|
281af15d65 | ||
|
|
ec31c96120 | ||
|
|
b970eb1541 | ||
|
|
7f6b90d5f4 | ||
|
|
d28096ede6 | ||
|
|
12b2b0d0eb | ||
|
|
a0e281fb30 | ||
|
|
37e8c3ab84 | ||
|
|
16cb564a6a | ||
|
|
cd88657bc9 | ||
|
|
d82a32b06a | ||
|
|
094bd943ee | ||
|
|
1564de346d | ||
|
|
a5268af269 | ||
|
|
565d9e093c | ||
|
|
cb75606b05 | ||
|
|
7c36294359 | ||
|
|
ad084389cc | ||
|
|
aa8c65a00a | ||
|
|
95ec31e238 | ||
|
|
b5f3a0fa98 | ||
|
|
36bf0d7fb9 | ||
|
|
1719887ac4 | ||
|
|
7f149bf3b1 | ||
|
|
f592e6655f | ||
|
|
46399c7b13 | ||
|
|
0ec66f0f2d | ||
|
|
96c8b64e26 | ||
|
|
bd0b7a8286 | ||
|
|
263b3ec476 | ||
|
|
46075130ab | ||
|
|
0f314bc4e3 | ||
|
|
2b45e7d77c | ||
|
|
987c3e5fe2 | ||
|
|
1e1580d58a | ||
|
|
da9667e1f7 | ||
|
|
9e42fdd786 | ||
|
|
de19abbc5e | ||
|
|
5448a99177 | ||
|
|
f93d7b0193 | ||
|
|
d3bda1b5d0 | ||
|
|
1c49e78b13 | ||
|
|
9d373d4091 | ||
|
|
26edfc7bb9 | ||
|
|
b527c9b160 | ||
|
|
0356b8e2d2 | ||
|
|
1bf093d1b9 | ||
|
|
a78d127702 | ||
|
|
028c0725c3 | ||
|
|
424d35bf42 | ||
|
|
1effdd8482 | ||
|
|
a780b7520f | ||
|
|
233bf36ef6 | ||
|
|
616a45ebc5 | ||
|
|
136f16c9cc | ||
|
|
609628b9cf | ||
|
|
1e0d2e0f2a | ||
|
|
da7e52f85f | ||
|
|
4640ce82f6 | ||
|
|
03ff9e0521 | ||
|
|
f566211d82 | ||
|
|
66ddea2031 | ||
|
|
8b5a9e1639 | ||
|
|
9a183d2ef1 | ||
|
|
807f77755e | ||
|
|
c0a851e045 | ||
|
|
96849afcba | ||
|
|
91e71091ef | ||
|
|
f691ebd146 | ||
|
|
f620c431a1 | ||
|
|
019743b245 | ||
|
|
1d8e3de136 | ||
|
|
0f46f6a1c1 | ||
|
|
b5078c1f1f | ||
|
|
88f9114dd6 | ||
|
|
cfcc1b3162 | ||
|
|
ed2fababff | ||
|
|
74210245cf | ||
|
|
a4ec058a81 | ||
|
|
ae2c15fe8c | ||
|
|
d9e44e0f91 | ||
|
|
3e1f29af48 | ||
|
|
7ac3f6d8ef | ||
|
|
e0f2b9c1ab | ||
|
|
3785e7066e | ||
|
|
157f6b45e9 | ||
|
|
c8dbc18179 | ||
|
|
1d5d86ef6c | ||
|
|
f1746978b2 | ||
|
|
e1f4dae832 | ||
|
|
94e7f6a1f4 | ||
|
|
d3ea923da7 | ||
|
|
dc27dd5d7e | ||
|
|
26f76acdd2 | ||
|
|
719a32e4a5 | ||
|
|
cdf004cdec | ||
|
|
9d5f495842 | ||
|
|
8204fa8ee7 | ||
|
|
9f9dd25f91 | ||
|
|
bd929bfa3f | ||
|
|
5916695d30 | ||
|
|
cca42dca49 | ||
|
|
33065c0ed3 | ||
|
|
603eddf878 | ||
|
|
cda26ab248 | ||
|
|
e73d59d538 | ||
|
|
893fac348d | ||
|
|
642b28bad9 | ||
|
|
b9db14ad44 | ||
|
|
0c23ead398 | ||
|
|
e9009dcb9c | ||
|
|
0d0e64f930 | ||
|
|
b1bdf6516e | ||
|
|
eca4f89d8b | ||
|
|
199cbcf33f | ||
|
|
1f4c7fcb0f | ||
|
|
59b8c781e3 | ||
|
|
9133a3f50b | ||
|
|
b9f4ba6527 | ||
|
|
7b5fe82de9 | ||
|
|
d74db85b82 | ||
|
|
915bbdf247 | ||
|
|
b3412b42b7 | ||
|
|
c6b917fa83 | ||
|
|
c286afa45f | ||
|
|
c74faa3340 | ||
|
|
fa4e8a1ea6 | ||
|
|
42c664a379 | ||
|
|
b84a955ee1 | ||
|
|
211ca3111f | ||
|
|
935e2a976e | ||
|
|
5d38b4dfa0 | ||
|
|
cbf852828c | ||
|
|
7d8b366a73 | ||
|
|
4ad457d568 | ||
|
|
2ab0cb2787 | ||
|
|
4feab27c59 | ||
|
|
3c1449c898 | ||
|
|
7d029c5305 | ||
|
|
13274c01d7 | ||
|
|
f37229c202 | ||
|
|
61f9ff6892 | ||
|
|
3df08b99b3 | ||
|
|
f9748cb723 | ||
|
|
437f637be9 | ||
|
|
7d2b86c548 | ||
|
|
c10ff68ee7 | ||
|
|
b2a8dd13f6 | ||
|
|
fb8ab132e9 | ||
|
|
7ce2e45719 | ||
|
|
c6d15d2605 | ||
|
|
8d57ea4216 | ||
|
|
fdf1bbd1e2 | ||
|
|
662813b378 | ||
|
|
8709ae7113 | ||
|
|
ac22b71171 | ||
|
|
328d1d6546 | ||
|
|
11277d2ef3 | ||
|
|
54dc6102a6 | ||
|
|
c0c9b50a5f | ||
|
|
e780a6fc7c | ||
|
|
fd89b288e5 | ||
|
|
a05c3a5e94 | ||
|
|
43e91c9275 | ||
|
|
26dd2935d7 | ||
|
|
f653871e3a | ||
|
|
89b91a081c | ||
|
|
246b26079b | ||
|
|
41a9e422d5 | ||
|
|
0704d7f4a4 | ||
|
|
1e66742d02 | ||
|
|
d55f827d93 | ||
|
|
40c68d4d63 | ||
|
|
5c58ddc800 | ||
|
|
94171cbc0e | ||
|
|
cf8549bb28 | ||
|
|
a291d73828 | ||
|
|
a6156ec863 | ||
|
|
be583cc86d | ||
|
|
00c55f5e82 | ||
|
|
c9fd1f5252 | ||
|
|
992d1065ac | ||
|
|
247017d19a | ||
|
|
b9fe05c27f | ||
|
|
b01a2cfd79 | ||
|
|
37f2e7eeda | ||
|
|
4ba6ea9190 | ||
|
|
7c1c061681 | ||
|
|
47e4175c9a | ||
|
|
023fd73b86 | ||
|
|
f7ba72217b | ||
|
|
47b9b1dcd6 | ||
|
|
f3adbfef55 | ||
|
|
bc9225f8ed | ||
|
|
62ac0089c9 | ||
|
|
af059141f0 | ||
|
|
efe73a21d9 | ||
|
|
adad299724 | ||
|
|
15b832eefb | ||
|
|
434b6fdc8f | ||
|
|
99c886a9cb | ||
|
|
7d18215bc9 | ||
|
|
7d7f674d9e | ||
|
|
46861486c9 | ||
|
|
d959cacd15 | ||
|
|
d8d0ce5b45 | ||
|
|
b94a4ef9d6 | ||
|
|
212ed8e428 | ||
|
|
6d14bc2f54 | ||
|
|
9dc10c3756 | ||
|
|
316e7be51e | ||
|
|
14842a6d56 | ||
|
|
ce7f3ffca9 | ||
|
|
4c969420f3 | ||
|
|
36aca1e664 | ||
|
|
3a08f57fb1 | ||
|
|
8f86a8aba6 | ||
|
|
e84e02ff07 | ||
|
|
7ef625c598 | ||
|
|
2819e55a61 | ||
|
|
25d9b08dd5 | ||
|
|
6a760c3019 | ||
|
|
8088a464ad | ||
|
|
e41c83a68c | ||
|
|
2d5b8430bd | ||
|
|
eabbe3e3ed | ||
|
|
c37cdbdc5f | ||
|
|
8a0df559c3 | ||
|
|
dfc1c9c228 | ||
|
|
ad20c1cbf1 | ||
|
|
6f4677b36b | ||
|
|
b3a9274cd3 | ||
|
|
7a7bc3e0db | ||
|
|
425bb54057 | ||
|
|
d82df84cf6 | ||
|
|
7d697f068f | ||
|
|
4499b34b51 | ||
|
|
9c6cc8ecd4 | ||
|
|
668130d443 | ||
|
|
5aba690318 | ||
|
|
7397bf389e | ||
|
|
e1b16e9ae3 | ||
|
|
eb50f6fd8f | ||
|
|
5d6dc16a19 | ||
|
|
64dc76d616 | ||
|
|
301664ce93 | ||
|
|
a4534d8f3e | ||
|
|
f161173cb6 | ||
|
|
c58f5efcdd | ||
|
|
65edd2ce22 | ||
|
|
0723f3091c | ||
|
|
a95204f02e | ||
|
|
6dd12e111d | ||
|
|
6e741bd800 | ||
|
|
d37e53bd8e | ||
|
|
fd3585697b | ||
|
|
e92e6ec1c6 | ||
|
|
f0c89cbbba | ||
|
|
d20f932316 | ||
|
|
e011ef469f | ||
|
|
384850b452 | ||
|
|
e467aba32f | ||
|
|
56c51b73b0 | ||
|
|
1aa82dd03e | ||
|
|
a3b7c67ef9 | ||
|
|
de0200f352 | ||
|
|
999c267dfe | ||
|
|
c9a6c2948e | ||
|
|
041157a85f | ||
|
|
cd009936e2 | ||
|
|
f43dfd47d0 | ||
|
|
7082467352 | ||
|
|
f05d3581c1 | ||
|
|
02e560cb18 | ||
|
|
b2d38ad9d6 | ||
|
|
2743f1adc9 | ||
|
|
5e875b6d71 | ||
|
|
6ccb5e8dbf | ||
|
|
ad42a3d41c | ||
|
|
b40e0068ab | ||
|
|
f8dbbc1d11 | ||
|
|
951070757c | ||
|
|
c2a93c6c02 | ||
|
|
9dc82963c4 | ||
|
|
148fce42ba | ||
|
|
92f1263314 | ||
|
|
5fad44369c | ||
|
|
eb3d7c9615 | ||
|
|
5437a98539 | ||
|
|
d9b26f31f8 | ||
|
|
9916ec132b | ||
|
|
1f3806a7bd | ||
|
|
55a770f129 | ||
|
|
d742d595b2 | ||
|
|
9f575902b0 | ||
|
|
6e49cf14fa | ||
|
|
4d96abb786 | ||
|
|
b6d9470a4e | ||
|
|
6ef86dce8c | ||
|
|
5a33f4c707 | ||
|
|
119c1cbb35 | ||
|
|
2be2646d95 | ||
|
|
0609174a14 | ||
|
|
227ca0ed41 | ||
|
|
cc90ccece2 | ||
|
|
9ab92165c8 | ||
|
|
e1fc0d08b7 | ||
|
|
21dad2d72e | ||
|
|
87fe3e72a2 | ||
|
|
c92220f1e5 | ||
|
|
eabeb612b4 | ||
|
|
900e61291a | ||
|
|
51d9f1943b | ||
|
|
282b07dffc | ||
|
|
6521415ae0 | ||
|
|
2819be4508 | ||
|
|
a60805a971 | ||
|
|
af21d33165 | ||
|
|
e465ad58ca | ||
|
|
cd56fc6179 | ||
|
|
1ef70dd4e4 | ||
|
|
a460ea5194 | ||
|
|
5ebf7b7992 | ||
|
|
c9b50e7db6 | ||
|
|
b9993796a0 | ||
|
|
4fb2241621 | ||
|
|
fa49dc08a3 | ||
|
|
3d939f18df | ||
|
|
0d38b9aab1 | ||
|
|
28207f45cd | ||
|
|
72a5e9eb05 | ||
|
|
91dc99d8ef | ||
|
|
305a34b26d | ||
|
|
67349bbce6 | ||
|
|
242ba89b95 | ||
|
|
295280f8cf | ||
|
|
eb0f4728c4 | ||
|
|
8017715bc7 | ||
|
|
503c74c488 | ||
|
|
32cdaa8baa | ||
|
|
83176a0293 | ||
|
|
5db3d14b17 | ||
|
|
bc6ae25aa6 | ||
|
|
8e3900fab7 | ||
|
|
51b3d59094 | ||
|
|
3585645580 | ||
|
|
1e3c20d118 | ||
|
|
f83f13af59 | ||
|
|
54d0bc56a4 | ||
|
|
c722673dbd | ||
|
|
88d34a9daf | ||
|
|
e91237ec05 | ||
|
|
430a2bc08d | ||
|
|
3bbe5d33d3 | ||
|
|
674c6a1684 | ||
|
|
f34519e3ff | ||
|
|
f047be816a | ||
|
|
593c20d62b | ||
|
|
a4bfad6138 | ||
|
|
89de3c5f7a | ||
|
|
81fb664ad9 | ||
|
|
b65597b884 | ||
|
|
d5423947f3 | ||
|
|
f80db23642 | ||
|
|
935906e328 | ||
|
|
3ed7f68054 | ||
|
|
c894b75f4b | ||
|
|
ef43d6905f | ||
|
|
ab7ebedcd5 | ||
|
|
8ca19afd87 | ||
|
|
70e1e550e3 | ||
|
|
cb0087c433 | ||
|
|
d867f86c08 | ||
|
|
1891029eed | ||
|
|
157090a122 | ||
|
|
0ddf2aad79 | ||
|
|
4f47a5032c | ||
|
|
ae957ab642 | ||
|
|
b69a7022b5 | ||
|
|
c19bd88a8e | ||
|
|
4967b70e7c | ||
|
|
cdfad8cc67 | ||
|
|
dcaccaca35 | ||
|
|
d954262184 | ||
|
|
208720545e | ||
|
|
2cbadc6946 | ||
|
|
ebfa49ed8e | ||
|
|
e70c3ef939 | ||
|
|
0523f701c2 | ||
|
|
c6b46295bc | ||
|
|
16ddfb2a20 | ||
|
|
ca5ea6032c | ||
|
|
b4eda0e7cd | ||
|
|
9d2a9bbd9c | ||
|
|
ef13c8fe8d | ||
|
|
aa6932f547 | ||
|
|
5d3c132e83 | ||
|
|
56f4f6c977 | ||
|
|
77df068fea | ||
|
|
b9a1bf9f24 | ||
|
|
2b348916f4 | ||
|
|
70bc5ea2ec | ||
|
|
eff9e553a1 | ||
|
|
e1bfca1883 | ||
|
|
190dbab3d0 | ||
|
|
a1895b1f78 | ||
|
|
1091774003 | ||
|
|
ae29eb35fd | ||
|
|
5ca0a89789 | ||
|
|
6c6e836f0d | ||
|
|
c971d34d67 | ||
|
|
1b04615bff | ||
|
|
40eb8dec68 | ||
|
|
2556e98c26 | ||
|
|
2204da25ed | ||
|
|
ab1eb6de6b | ||
|
|
16278a72e9 | ||
|
|
573a1f22dc | ||
|
|
da370a7dd2 | ||
|
|
6567660639 | ||
|
|
984054f00f | ||
|
|
9351edebe0 | ||
|
|
36465f0859 | ||
|
|
ef5cf4bd96 | ||
|
|
27e1aec001 | ||
|
|
aa9ef65375 | ||
|
|
c8af6d3672 | ||
|
|
ffe5370264 | ||
|
|
ef0156c068 | ||
|
|
00883170f3 | ||
|
|
fb72704a33 | ||
|
|
8f9cd72975 | ||
|
|
913e87c4f5 | ||
|
|
3bdf6df70d | ||
|
|
5e973b21ae | ||
|
|
23e2611725 | ||
|
|
f8784afd72 | ||
|
|
46a73c8ef1 | ||
|
|
bcd80b616d | ||
|
|
b5d870d885 | ||
|
|
f9ac77606e | ||
|
|
ce554ed53f | ||
|
|
27d48f85a9 | ||
|
|
059ff14e6d | ||
|
|
8cfb3569fe | ||
|
|
1ac3e9b364 | ||
|
|
22c6a3da4f | ||
|
|
737405d449 | ||
|
|
e805ae7757 | ||
|
|
d5cf0fee64 | ||
|
|
48e2ae6e52 | ||
|
|
351e784733 | ||
|
|
6c64181bf4 | ||
|
|
d64e6a12a7 | ||
|
|
ccddc9a404 | ||
|
|
aee35aa66d | ||
|
|
0cf953b3eb | ||
|
|
eb073ebe87 | ||
|
|
c3fac64280 | ||
|
|
28ef8e7db7 | ||
|
|
e3eda95b35 | ||
|
|
894a68823f | ||
|
|
dc3843087e | ||
|
|
aaae9fe8bc | ||
|
|
3dc9fc52a7 | ||
|
|
2d373ba509 | ||
|
|
f200e79dc8 | ||
|
|
ae9518a006 | ||
|
|
96c24e8e5f | ||
|
|
cc0c1cc320 | ||
|
|
9834c83126 | ||
|
|
4b8cb5a4e4 | ||
|
|
7e2f473e22 | ||
|
|
ee9f858933 | ||
|
|
69f322d34c | ||
|
|
91099188f2 | ||
|
|
1e7209bafa | ||
|
|
a23a356bf6 | ||
|
|
5218e134a9 | ||
|
|
55a87999e4 | ||
|
|
6cd7861b2c | ||
|
|
6dfaeddc0a | ||
|
|
4846549a90 | ||
|
|
942837b4d9 | ||
|
|
259b4aabcc | ||
|
|
6200b6a4b0 | ||
|
|
6ee1413996 | ||
|
|
08fff1700f | ||
|
|
fd5b7976e7 | ||
|
|
e17637d27b | ||
|
|
57c69a7d6c | ||
|
|
bf3a496ea3 | ||
|
|
3e46db9c11 | ||
|
|
50c624e305 | ||
|
|
6d4e64059a | ||
|
|
ec879b12b3 | ||
|
|
5ace8f5570 | ||
|
|
2fe5a6b248 | ||
|
|
19f5251736 | ||
|
|
a87e3d66a6 | ||
|
|
62acdde68f | ||
|
|
e214573cd1 | ||
|
|
8fff1cd817 | ||
|
|
20eb0c4d64 | ||
|
|
ff05292bdb | ||
|
|
326bc88f19 | ||
|
|
f0a7612369 | ||
|
|
515be5de33 | ||
|
|
e1e7354d85 | ||
|
|
2ec6a06204 | ||
|
|
9150def93e | ||
|
|
730f1a6c47 | ||
|
|
7c12d094c5 | ||
|
|
8aceaf0595 | ||
|
|
5a1bdc156d | ||
|
|
aa81426189 | ||
|
|
7a5d39cc94 | ||
|
|
b1b8f202c9 | ||
|
|
fcfda68d88 | ||
|
|
e966e4c7ed | ||
|
|
42455c72f9 | ||
|
|
ef5f49016e | ||
|
|
6417dfb4a1 | ||
|
|
40985da9ca | ||
|
|
e07c26c17d | ||
|
|
9f2cba49ee | ||
|
|
6e3de21f6e | ||
|
|
a6bdbd7cf1 | ||
|
|
b822428d52 | ||
|
|
03a7df1c98 | ||
|
|
08b7290070 | ||
|
|
6188c698e3 | ||
|
|
7d9b60c16a | ||
|
|
df3c5060e9 | ||
|
|
ff702c9d14 | ||
|
|
ea06fe8cf8 | ||
|
|
f8b0d9b180 | ||
|
|
d3a3e7066d | ||
|
|
45e3964285 | ||
|
|
4edf4936c1 | ||
|
|
067be4973d | ||
|
|
6a3442d058 | ||
|
|
0b83307f7d | ||
|
|
f36042f537 | ||
|
|
668a5d6334 | ||
|
|
eb59713b65 | ||
|
|
fbc6187062 | ||
|
|
274ecaa222 | ||
|
|
051196179d | ||
|
|
cddfc4550d | ||
|
|
465bc3b24a | ||
|
|
38087f0b02 | ||
|
|
3237a539f7 | ||
|
|
828d5764d0 | ||
|
|
15fc3742d2 | ||
|
|
8489b1d943 | ||
|
|
682188540c | ||
|
|
8f740d70e0 | ||
|
|
bc80c2200d | ||
|
|
fd524f627e | ||
|
|
59b3b68bde | ||
|
|
943c8eabbf | ||
|
|
b83918c2aa | ||
|
|
5b4db8fd54 | ||
|
|
c8d7ac48ea | ||
|
|
3cd4e64957 | ||
|
|
2f994628c3 | ||
|
|
f68fc02e57 | ||
|
|
0637b9c8f8 | ||
|
|
7001ddc96f | ||
|
|
fe31a64175 | ||
|
|
cd0cc2b501 | ||
|
|
ebcb3c5466 | ||
|
|
a1d0f3948a | ||
|
|
22f5508bea | ||
|
|
63c4f708c3 | ||
|
|
52fd891370 | ||
|
|
fb447a30e4 | ||
|
|
e0c73e26ee | ||
|
|
d5da5bd8aa | ||
|
|
d84302682e | ||
|
|
c963e93b52 | ||
|
|
c96e3ee2f9 | ||
|
|
a78019ccbc | ||
|
|
e014c94446 | ||
|
|
6c747ff8b4 | ||
|
|
ffd9e9d48e | ||
|
|
3328359ba4 | ||
|
|
66f6c1fd46 | ||
|
|
aaa845a0f8 | ||
|
|
f1157895db | ||
|
|
1277cfed64 | ||
|
|
102fa9c0a8 | ||
|
|
7cd57cadb2 | ||
|
|
2a56b7ade2 | ||
|
|
cf8be3ca21 | ||
|
|
715a1b5df5 | ||
|
|
0a374a0e78 | ||
|
|
36996a54a5 | ||
|
|
3f687e4c4a | ||
|
|
315d373d2d | ||
|
|
6ae346df44 | ||
|
|
9582a27dc6 | ||
|
|
6195d72c3c | ||
|
|
3f0309c36a | ||
|
|
08ea7401cc | ||
|
|
f3d7f09476 | ||
|
|
36150d5b09 | ||
|
|
e5deb2ddd7 | ||
|
|
d60aa54903 | ||
|
|
2627cee938 | ||
|
|
e7f47a4485 | ||
|
|
5bfe56c091 | ||
|
|
f08586ee12 | ||
|
|
af17270c52 | ||
|
|
06b4062003 | ||
|
|
6cba6972bc | ||
|
|
f7a23e629c | ||
|
|
e67b37be28 | ||
|
|
1fa7dfe41f | ||
|
|
e781071ebf | ||
|
|
1697c5d5b5 | ||
|
|
091fefb601 | ||
|
|
7939e6c619 | ||
|
|
f8788dc32c | ||
|
|
4db51bff79 | ||
|
|
6f96da74c7 | ||
|
|
f1692763d3 | ||
|
|
43311dfb73 | ||
|
|
125b8d61d9 | ||
|
|
27b92607c4 | ||
|
|
c238c6cc05 | ||
|
|
fc8a702f2f | ||
|
|
a01c80794c | ||
|
|
1f6bdfbaa0 | ||
|
|
a650a31990 | ||
|
|
12c00ae6c6 | ||
|
|
857f170034 | ||
|
|
41f7be4ebc | ||
|
|
f95b9b4f00 | ||
|
|
6aa30cc8ba | ||
|
|
1d4037fcc5 | ||
|
|
59e853a012 | ||
|
|
79bca49fb8 | ||
|
|
05b0ca49fa | ||
|
|
8483b7b86b | ||
|
|
050cfa494c | ||
|
|
866829af97 | ||
|
|
0cd52b7220 | ||
|
|
b922af1411 | ||
|
|
ce01e83382 | ||
|
|
60393e048e | ||
|
|
1f7e2cd0cc | ||
|
|
747828b363 | ||
|
|
b722eedb05 | ||
|
|
2f664faea9 | ||
|
|
e9b545c488 | ||
|
|
bb62f626fd | ||
|
|
58fe403bd0 | ||
|
|
5ae5bab76b | ||
|
|
049c374ece | ||
|
|
66e8ac9cae | ||
|
|
f5af07086b | ||
|
|
4d534db63f | ||
|
|
aec69e96cb | ||
|
|
6172b09aa3 | ||
|
|
98c386729c | ||
|
|
91ebcd8253 | ||
|
|
3a51299e8d | ||
|
|
eaa8876f4e | ||
|
|
7d80178b48 | ||
|
|
8090f2f397 | ||
|
|
bf986e26bc | ||
|
|
c95d957d2c | ||
|
|
b1aaddae59 | ||
|
|
8fe9bad2bb | ||
|
|
23dab6312d | ||
|
|
c91b1a7a23 | ||
|
|
d07dbcc50a | ||
|
|
49771a627d | ||
|
|
25ec4ae7c6 | ||
|
|
13022e0bcc | ||
|
|
cdc4b6992d | ||
|
|
f178f3806d | ||
|
|
d84f621813 | ||
|
|
7ba2ac1efd | ||
|
|
658a9e6172 | ||
|
|
0b44e78cc2 | ||
|
|
1c5766d022 | ||
|
|
3bff000cc9 | ||
|
|
30a8750f16 | ||
|
|
f3ad3f6d18 | ||
|
|
65a7dde47b | ||
|
|
38ebab59c7 | ||
|
|
b7f79b4832 | ||
|
|
876a2f562f | ||
|
|
5f4fc2fb59 | ||
|
|
44e8efd39b | ||
|
|
51c625da4d | ||
|
|
a795cd23a8 | ||
|
|
ebc3cf1cbf | ||
|
|
c717b3ba9d | ||
|
|
0ed3c87f79 | ||
|
|
9499700988 | ||
|
|
8366721643 | ||
|
|
66afd0fcdd | ||
|
|
a105a1d3b4 | ||
|
|
5488947922 | ||
|
|
aa466f9fb7 | ||
|
|
b3840e056f | ||
|
|
ddffc8372b | ||
|
|
dc877a9c09 | ||
|
|
04d2384283 | ||
|
|
50938afe77 | ||
|
|
ea6bd1f598 | ||
|
|
fb0f9885c1 | ||
|
|
4248a3af07 | ||
|
|
a3dc2402f7 | ||
|
|
153b439510 | ||
|
|
06b925435d | ||
|
|
93c2c3cc45 | ||
|
|
04a3d58028 | ||
|
|
8551cfa32e | ||
|
|
b19c7f2fac | ||
|
|
d135338088 | ||
|
|
b8fae5cd28 | ||
|
|
29fe75d807 | ||
|
|
1dbbf7c769 | ||
|
|
3be20b5658 | ||
|
|
73b6ddf365 | ||
|
|
64048a8a18 | ||
|
|
e245af57a8 | ||
|
|
0ab708396a | ||
|
|
29855a0cbc | ||
|
|
ff6457171f | ||
|
|
9fd59b5d38 | ||
|
|
c750c62993 | ||
|
|
a0d90ab16b | ||
|
|
af15d978c6 | ||
|
|
f4271e7c0e | ||
|
|
0440e1062d | ||
|
|
2bc30d696a | ||
|
|
6dcd210031 | ||
|
|
c78c4c92b7 | ||
|
|
6a2c749a86 | ||
|
|
56d738474a | ||
|
|
7721f31342 | ||
|
|
90e268ff2f | ||
|
|
69bdb75625 | ||
|
|
a0b77f5d08 | ||
|
|
77c4b53b71 | ||
|
|
035a674cff | ||
|
|
b9736cc6d6 | ||
|
|
f52e5067b6 | ||
|
|
d657525359 | ||
|
|
3a2ebd42a7 | ||
|
|
916e64d607 | ||
|
|
e0b25c1e6e | ||
|
|
13b968e18c | ||
|
|
9e1daf5062 | ||
|
|
941a34784c | ||
|
|
cd4ffa2eff | ||
|
|
17a7af74f2 | ||
|
|
ff22eaa606 | ||
|
|
417436d7b6 | ||
|
|
f228489173 | ||
|
|
a49563e23f | ||
|
|
b3403b78ee | ||
|
|
7a9039090d | ||
|
|
289195e6c9 | ||
|
|
e6502784ea | ||
|
|
54f301e8eb | ||
|
|
ed91801769 | ||
|
|
6965148e4e | ||
|
|
b5481e1dd5 | ||
|
|
4ec9b56366 | ||
|
|
530fcf9a39 | ||
|
|
ff1363b437 | ||
|
|
952e3a9906 | ||
|
|
9d530e35fb | ||
|
|
2c2ad78eb7 | ||
|
|
f61c5a2fa1 | ||
|
|
3e24ff9678 | ||
|
|
b0280c3be4 | ||
|
|
b10eb5c979 | ||
|
|
e2072c72da | ||
|
|
84a43912db | ||
|
|
841819436a | ||
|
|
14a984c75f | ||
|
|
445de61ce4 | ||
|
|
f83007788d | ||
|
|
aefee791ca | ||
|
|
00154d80df | ||
|
|
a1e12d29ac | ||
|
|
5069832165 | ||
|
|
e2cb003935 | ||
|
|
b83a10c282 | ||
|
|
c6fc0a22d2 | ||
|
|
c6d3994383 | ||
|
|
07f9721aeb | ||
|
|
dba956e473 | ||
|
|
2894a5e479 | ||
|
|
ad0913500c | ||
|
|
79a765b725 | ||
|
|
eaec991f47 | ||
|
|
e31b189045 | ||
|
|
eb58b1c149 | ||
|
|
af9760f944 | ||
|
|
21b2412362 | ||
|
|
7e5e167eec | ||
|
|
7bf254319b | ||
|
|
d7e1745c09 | ||
|
|
ef238c1b25 | ||
|
|
cb60d97bb7 | ||
|
|
7c3189e273 | ||
|
|
ace74febc7 | ||
|
|
8dbdabd52c | ||
|
|
f0ee8d7b88 | ||
|
|
7e5203f058 | ||
|
|
a3672e9d91 | ||
|
|
7017382451 | ||
|
|
6c9d49bf8c | ||
|
|
2de058246b | ||
|
|
798ea30382 | ||
|
|
3e2c6b3343 | ||
|
|
5ea744de5c | ||
|
|
aedb3d3d45 | ||
|
|
83a2f42df9 | ||
|
|
66aace247c | ||
|
|
bc3db06960 | ||
|
|
ddaa063587 | ||
|
|
f9b4fe468e | ||
|
|
6cbca8d1bb | ||
|
|
d5067a4bcd | ||
|
|
04d44510de | ||
|
|
844fcc9bca | ||
|
|
145b5efab0 | ||
|
|
4079ed97b9 | ||
|
|
63d70fc037 | ||
|
|
ce86b5deda | ||
|
|
037e946bbe | ||
|
|
a51c8de1eb | ||
|
|
53dc517180 | ||
|
|
44ca940c6b | ||
|
|
c0b688c720 | ||
|
|
861d5f231d | ||
|
|
d14b4f55a6 | ||
|
|
db9a6c3eda | ||
|
|
a667643681 | ||
|
|
f278e4b6a5 | ||
|
|
33a12c2dec | ||
|
|
508f90f459 | ||
|
|
709f0c2274 | ||
|
|
be47700e7c | ||
|
|
40842830a4 | ||
|
|
11d070fa0d | ||
|
|
dd2f830a33 | ||
|
|
5431fcb450 | ||
|
|
324033e9ee | ||
|
|
86596d0cfe | ||
|
|
9323cfd748 | ||
|
|
d125b02cec | ||
|
|
282c4c5351 |
@@ -9,7 +9,7 @@ root = true
|
|||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
indent_style = space
|
indent_style = tab
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
@@ -26,4 +26,4 @@ indent_style = tab
|
|||||||
|
|
||||||
# HTML, CSS, javascript, JSON and YAML
|
# HTML, CSS, javascript, JSON and YAML
|
||||||
[*.{html,css,js,json,yml,yaml}]
|
[*.{html,css,js,json,yml,yaml}]
|
||||||
indent_size = 2
|
indent_size = 4
|
||||||
|
|||||||
37
.flake8
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
[flake8]
|
||||||
|
ignore =
|
||||||
|
E121,
|
||||||
|
E126,
|
||||||
|
E127,
|
||||||
|
E128,
|
||||||
|
E203,
|
||||||
|
E225,
|
||||||
|
E226,
|
||||||
|
E231,
|
||||||
|
E241,
|
||||||
|
E251,
|
||||||
|
E261,
|
||||||
|
E265,
|
||||||
|
E302,
|
||||||
|
E303,
|
||||||
|
E305,
|
||||||
|
E402,
|
||||||
|
E501,
|
||||||
|
E741,
|
||||||
|
W291,
|
||||||
|
W292,
|
||||||
|
W293,
|
||||||
|
W391,
|
||||||
|
W503,
|
||||||
|
W504,
|
||||||
|
F403,
|
||||||
|
B007,
|
||||||
|
B950,
|
||||||
|
W191,
|
||||||
|
E124, # closing bracket, irritating while writing QB code
|
||||||
|
E131, # continuation line unaligned for hanging indent
|
||||||
|
E123, # closing bracket does not match indentation of opening bracket's line
|
||||||
|
E101, # ensured by use of black
|
||||||
|
|
||||||
|
max-line-length = 200
|
||||||
|
exclude=.github/helper/semgrep_rules
|
||||||
74
.github/helper/flake8.conf
vendored
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
[flake8]
|
||||||
|
ignore =
|
||||||
|
B001,
|
||||||
|
B007,
|
||||||
|
B009,
|
||||||
|
B010,
|
||||||
|
B950,
|
||||||
|
E101,
|
||||||
|
E111,
|
||||||
|
E114,
|
||||||
|
E116,
|
||||||
|
E117,
|
||||||
|
E121,
|
||||||
|
E122,
|
||||||
|
E123,
|
||||||
|
E124,
|
||||||
|
E125,
|
||||||
|
E126,
|
||||||
|
E127,
|
||||||
|
E128,
|
||||||
|
E131,
|
||||||
|
E201,
|
||||||
|
E202,
|
||||||
|
E203,
|
||||||
|
E211,
|
||||||
|
E221,
|
||||||
|
E222,
|
||||||
|
E223,
|
||||||
|
E224,
|
||||||
|
E225,
|
||||||
|
E226,
|
||||||
|
E228,
|
||||||
|
E231,
|
||||||
|
E241,
|
||||||
|
E242,
|
||||||
|
E251,
|
||||||
|
E261,
|
||||||
|
E262,
|
||||||
|
E265,
|
||||||
|
E266,
|
||||||
|
E271,
|
||||||
|
E272,
|
||||||
|
E273,
|
||||||
|
E274,
|
||||||
|
E301,
|
||||||
|
E302,
|
||||||
|
E303,
|
||||||
|
E305,
|
||||||
|
E306,
|
||||||
|
E402,
|
||||||
|
E501,
|
||||||
|
E502,
|
||||||
|
E701,
|
||||||
|
E702,
|
||||||
|
E703,
|
||||||
|
E741,
|
||||||
|
F401,
|
||||||
|
F403,
|
||||||
|
F405,
|
||||||
|
W191,
|
||||||
|
W291,
|
||||||
|
W292,
|
||||||
|
W293,
|
||||||
|
W391,
|
||||||
|
W503,
|
||||||
|
W504,
|
||||||
|
E711,
|
||||||
|
E129,
|
||||||
|
F841,
|
||||||
|
E713,
|
||||||
|
E712,
|
||||||
|
|
||||||
|
|
||||||
|
max-line-length = 200
|
||||||
46
.github/helper/install.sh
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
cd ~ || exit
|
||||||
|
|
||||||
|
echo "Setting Up Bench..."
|
||||||
|
|
||||||
|
pip install frappe-bench
|
||||||
|
bench -v init frappe-bench --skip-assets --python "$(which python)"
|
||||||
|
cd ./frappe-bench || exit
|
||||||
|
|
||||||
|
bench -v setup requirements
|
||||||
|
|
||||||
|
echo "Setting Up LMS App..."
|
||||||
|
bench get-app lms "${GITHUB_WORKSPACE}"
|
||||||
|
|
||||||
|
echo "Setting Up Sites & Database..."
|
||||||
|
|
||||||
|
mkdir ~/frappe-bench/sites/lms.test
|
||||||
|
cp "${GITHUB_WORKSPACE}/.github/helper/site_config.json" ~/frappe-bench/sites/lms.test/site_config.json
|
||||||
|
|
||||||
|
|
||||||
|
mariadb --host 127.0.0.1 --port 3306 -u root -p123 -e "SET GLOBAL character_set_server = 'utf8mb4'";
|
||||||
|
mariadb --host 127.0.0.1 --port 3306 -u root -p123 -e "SET GLOBAL collation_server = 'utf8mb4_unicode_ci'";
|
||||||
|
|
||||||
|
mariadb --host 127.0.0.1 --port 3306 -u root -p123 -e "CREATE DATABASE test_lms";
|
||||||
|
mariadb --host 127.0.0.1 --port 3306 -u root -p123 -e "CREATE USER 'test_lms'@'localhost' IDENTIFIED BY 'test_lms'";
|
||||||
|
mariadb --host 127.0.0.1 --port 3306 -u root -p123 -e "GRANT ALL PRIVILEGES ON \`test_lms\`.* TO 'test_lms'@'localhost'";
|
||||||
|
|
||||||
|
mariadb --host 127.0.0.1 --port 3306 -u root -p123 -e "FLUSH PRIVILEGES";
|
||||||
|
|
||||||
|
echo "Setting Up Procfile..."
|
||||||
|
|
||||||
|
sed -i 's/^watch:/# watch:/g' Procfile
|
||||||
|
sed -i 's/^schedule:/# schedule:/g' Procfile
|
||||||
|
|
||||||
|
echo "Starting Bench..."
|
||||||
|
|
||||||
|
bench start &> bench_start.log &
|
||||||
|
|
||||||
|
CI=Yes bench build &
|
||||||
|
build_pid=$!
|
||||||
|
|
||||||
|
bench --site lms.test reinstall --yes
|
||||||
|
bench --site lms.test install-app lms
|
||||||
|
|
||||||
|
wait $build_pid
|
||||||
13
.github/helper/install_dependencies.sh
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "Setting Up System Dependencies..."
|
||||||
|
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install libcups2-dev redis-server mariadb-client-10.6
|
||||||
|
|
||||||
|
install_wkhtmltopdf() {
|
||||||
|
wget -q https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb
|
||||||
|
sudo apt install ./wkhtmltox_0.12.6-1.focal_amd64.deb
|
||||||
|
}
|
||||||
|
install_wkhtmltopdf &
|
||||||
20
.github/helper/site_config.json
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"db_host": "127.0.0.1",
|
||||||
|
"db_port": 3306,
|
||||||
|
"db_name": "test_lms",
|
||||||
|
"db_password": "test_lms",
|
||||||
|
"allow_tests": true,
|
||||||
|
"enable_ui_tests": true,
|
||||||
|
"db_type": "mariadb",
|
||||||
|
"auto_email_id": "test@example.com",
|
||||||
|
"mail_server": "smtp.example.com",
|
||||||
|
"mail_login": "test@example.com",
|
||||||
|
"mail_password": "test",
|
||||||
|
"admin_password": "admin",
|
||||||
|
"root_login": "root",
|
||||||
|
"root_password": "123",
|
||||||
|
"host_name": "http://lms.test:8000",
|
||||||
|
"monitor": 1,
|
||||||
|
"server_script_enabled": true,
|
||||||
|
"mute_emails": true
|
||||||
|
}
|
||||||
21
.github/workflows/ci.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: Run tests
|
name: Server Tests
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
@@ -6,7 +6,7 @@ on:
|
|||||||
pull_request: {}
|
pull_request: {}
|
||||||
jobs:
|
jobs:
|
||||||
tests:
|
tests:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-latest
|
||||||
services:
|
services:
|
||||||
redis-cache:
|
redis-cache:
|
||||||
image: redis:alpine
|
image: redis:alpine
|
||||||
@@ -32,7 +32,7 @@ jobs:
|
|||||||
- name: setup python
|
- name: setup python
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v2
|
||||||
with:
|
with:
|
||||||
python-version: 3.9
|
python-version: '3.10'
|
||||||
- name: setup node
|
- name: setup node
|
||||||
uses: actions/setup-node@v2
|
uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
@@ -53,19 +53,22 @@ jobs:
|
|||||||
then
|
then
|
||||||
(cd && tar xzf ~/bench-cache/bench.tgz)
|
(cd && tar xzf ~/bench-cache/bench.tgz)
|
||||||
else
|
else
|
||||||
bench init ~/frappe-bench --skip-redis-config-generation
|
bench init ~/frappe-bench --skip-redis-config-generation --skip-assets --python "$(which python)"
|
||||||
mkdir -p ~/bench-cache
|
mkdir -p ~/bench-cache
|
||||||
(cd && tar czf ~/bench-cache/bench.tgz frappe-bench)
|
(cd && tar czf ~/bench-cache/bench.tgz frappe-bench)
|
||||||
fi
|
fi
|
||||||
- name: add community app to bench
|
- name: add lms app to bench
|
||||||
working-directory: /home/runner/frappe-bench
|
working-directory: /home/runner/frappe-bench
|
||||||
run: bench get-app community $GITHUB_WORKSPACE
|
run: bench get-app lms $GITHUB_WORKSPACE
|
||||||
- name: create bench site
|
- name: create bench site
|
||||||
working-directory: /home/runner/frappe-bench
|
working-directory: /home/runner/frappe-bench
|
||||||
run: bench new-site --mariadb-root-password root --admin-password admin frappe.local
|
run: bench new-site --mariadb-root-password root --admin-password admin frappe.local
|
||||||
- name: install community app
|
- name: install lms app
|
||||||
working-directory: /home/runner/frappe-bench
|
working-directory: /home/runner/frappe-bench
|
||||||
run: bench --verbose --site frappe.local install-app community
|
run: bench --site frappe.local install-app lms
|
||||||
|
- name: setup requirements
|
||||||
|
working-directory: /home/runner/frappe-bench
|
||||||
|
run: bench setup requirements --dev
|
||||||
- name: allow tests
|
- name: allow tests
|
||||||
working-directory: /home/runner/frappe-bench
|
working-directory: /home/runner/frappe-bench
|
||||||
run: bench --site frappe.local set-config allow_tests true
|
run: bench --site frappe.local set-config allow_tests true
|
||||||
@@ -74,5 +77,5 @@ jobs:
|
|||||||
run: bench --site frappe.local build
|
run: bench --site frappe.local build
|
||||||
- name: run tests
|
- name: run tests
|
||||||
working-directory: /home/runner/frappe-bench
|
working-directory: /home/runner/frappe-bench
|
||||||
run: bench --site frappe.local run-tests --app community
|
run: bench --site frappe.local run-tests --app lms
|
||||||
|
|
||||||
|
|||||||
33
.github/workflows/linters.yml
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
name: Linters
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linters:
|
||||||
|
name: Semantic Commits
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.event_name == 'pull_request'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.10'
|
||||||
|
|
||||||
|
- name: Install and Run Pre-commit
|
||||||
|
uses: pre-commit/action@v2.0.3
|
||||||
|
|
||||||
|
- name: Download Semgrep rules
|
||||||
|
run: git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-rules
|
||||||
|
|
||||||
|
- name: Download semgrep
|
||||||
|
run: pip install semgrep
|
||||||
|
|
||||||
|
- name: Run Semgrep rules
|
||||||
|
run: semgrep ci --config ./frappe-semgrep-rules/rules
|
||||||
19
.github/workflows/semantic.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
name: Semantic Pull Request
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
pull_request: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# This workflow contains a single job called "build"
|
||||||
|
semantic:
|
||||||
|
name: Validate PR title
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
|
steps:
|
||||||
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- uses: zeke/semantic-pull-requests@main
|
||||||
116
.github/workflows/ui-tests.yml
vendored
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
name: UI
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
# Do not change this as GITHUB_TOKEN is being used by roulette
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: ${{ github.repository_owner == 'frappe' }}
|
||||||
|
timeout-minutes: 60
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
|
||||||
|
name: UI Tests (Cypress)
|
||||||
|
|
||||||
|
services:
|
||||||
|
mariadb:
|
||||||
|
image: mariadb:10.6
|
||||||
|
env:
|
||||||
|
MARIADB_ROOT_PASSWORD: 123
|
||||||
|
ports:
|
||||||
|
- 3306:3306
|
||||||
|
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.11'
|
||||||
|
|
||||||
|
- name: Check for valid Python & Merge Conflicts
|
||||||
|
run: |
|
||||||
|
python -m compileall -q -f "${GITHUB_WORKSPACE}"
|
||||||
|
if grep -lr --exclude-dir=node_modules "^<<<<<<< " "${GITHUB_WORKSPACE}"
|
||||||
|
then echo "Found merge conflicts"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16
|
||||||
|
check-latest: true
|
||||||
|
|
||||||
|
- name: Add to Hosts
|
||||||
|
run: |
|
||||||
|
echo "127.0.0.1 lms.test" | sudo tee -a /etc/hosts
|
||||||
|
|
||||||
|
- name: Cache pip
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: ~/.cache/pip
|
||||||
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml', '**/setup.py') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pip-
|
||||||
|
${{ runner.os }}-
|
||||||
|
|
||||||
|
- name: Get yarn cache directory path
|
||||||
|
id: yarn-cache-dir-path
|
||||||
|
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- uses: actions/cache@v3
|
||||||
|
id: yarn-cache
|
||||||
|
with:
|
||||||
|
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||||
|
key: ${{ runner.os }}-yarn-ui-${{ hashFiles('**/yarn.lock') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-yarn-ui-
|
||||||
|
|
||||||
|
- name: Cache cypress binary
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: ~/.cache/Cypress
|
||||||
|
key: ${{ runner.os }}-cypress
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: |
|
||||||
|
bash ${GITHUB_WORKSPACE}/.github/helper/install_dependencies.sh
|
||||||
|
bash ${GITHUB_WORKSPACE}/.github/helper/install.sh
|
||||||
|
env:
|
||||||
|
BEFORE: ${{ env.GITHUB_EVENT_PATH.before }}
|
||||||
|
AFTER: ${{ env.GITHUB_EVENT_PATH.after }}
|
||||||
|
TYPE: ui
|
||||||
|
DB: mariadb
|
||||||
|
|
||||||
|
- name: Site Setup
|
||||||
|
run: |
|
||||||
|
cd ~/frappe-bench/
|
||||||
|
bench --site lms.test execute frappe.utils.install.complete_setup_wizard
|
||||||
|
bench --site lms.test execute frappe.tests.ui_test_helpers.create_test_user
|
||||||
|
|
||||||
|
- name: UI Tests
|
||||||
|
run: cd ~/frappe-bench/ && bench --site lms.test run-ui-tests lms --headless
|
||||||
|
env:
|
||||||
|
CYPRESS_BASE_URL: http://lms.test:8000
|
||||||
|
CYPRESS_RECORD_KEY: 095366ec-7b9f-41bd-aeec-03bb76d627fe
|
||||||
|
|
||||||
|
- name: Stop server and wait for coverage file
|
||||||
|
run: |
|
||||||
|
ps -ef | grep "[f]rappe serve" | awk '{print $2}' | xargs kill -s SIGINT
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
- name: Show bench output
|
||||||
|
if: ${{ always() }}
|
||||||
|
run: cat ~/frappe-bench/bench_start.log || true
|
||||||
6
.gitignore
vendored
@@ -3,8 +3,10 @@
|
|||||||
*.egg-info
|
*.egg-info
|
||||||
*.swp
|
*.swp
|
||||||
tags
|
tags
|
||||||
community/docs/current
|
lms/docs/current
|
||||||
community/public/dist
|
lms/public/dist
|
||||||
__pycache__/
|
__pycache__/
|
||||||
*.py[cod]
|
*.py[cod]
|
||||||
*$py.class
|
*$py.class
|
||||||
|
node_modules
|
||||||
|
package-lock.json
|
||||||
57
.pre-commit-config.yaml
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
exclude: 'node_modules|.git'
|
||||||
|
default_stages: [commit]
|
||||||
|
fail_fast: false
|
||||||
|
|
||||||
|
repos:
|
||||||
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
|
rev: v4.3.0
|
||||||
|
hooks:
|
||||||
|
- id: trailing-whitespace
|
||||||
|
files: "lms.*"
|
||||||
|
exclude: ".*json$|.*txt$|.*csv|.*md|.*svg"
|
||||||
|
- id: check-yaml
|
||||||
|
- id: check-merge-conflict
|
||||||
|
- id: check-ast
|
||||||
|
- id: check-json
|
||||||
|
- id: check-toml
|
||||||
|
- id: debug-statements
|
||||||
|
|
||||||
|
- repo: https://github.com/asottile/pyupgrade
|
||||||
|
rev: v2.34.0
|
||||||
|
hooks:
|
||||||
|
- id: pyupgrade
|
||||||
|
args: ['--py310-plus']
|
||||||
|
|
||||||
|
- repo: https://github.com/adityahase/black
|
||||||
|
rev: 9cb0a69f4d0030cdf687eddf314468b39ed54119
|
||||||
|
hooks:
|
||||||
|
- id: black
|
||||||
|
additional_dependencies: ['click==8.0.4']
|
||||||
|
|
||||||
|
- repo: https://github.com/pre-commit/mirrors-prettier
|
||||||
|
rev: v2.7.1
|
||||||
|
hooks:
|
||||||
|
- id: prettier
|
||||||
|
types_or: [javascript]
|
||||||
|
# Ignore any files that might contain jinja / bundles
|
||||||
|
exclude: |
|
||||||
|
(?x)^(
|
||||||
|
lms/public/dist/.*|
|
||||||
|
.*node_modules.*|
|
||||||
|
.*boilerplate.*|
|
||||||
|
lms/www/website_script.js|
|
||||||
|
lms/templates/includes/.*|
|
||||||
|
lms/public/js/lib/.*
|
||||||
|
)$
|
||||||
|
|
||||||
|
- repo: https://github.com/PyCQA/flake8
|
||||||
|
rev: 5.0.4
|
||||||
|
hooks:
|
||||||
|
- id: flake8
|
||||||
|
additional_dependencies: ['flake8-bugbear',]
|
||||||
|
args: ['--config', '.github/helper/flake8.conf']
|
||||||
|
|
||||||
|
ci:
|
||||||
|
autoupdate_schedule: weekly
|
||||||
|
skip: []
|
||||||
|
submodules: false
|
||||||
7
Contribution.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
1. Go to the apps/lms directory of your installation and execute git pull --unshallow to ensure that you have the full git repository. Also fork the frappe/lms repository on GitHub.
|
||||||
|
1. Check out a working branch in git (e.g. git checkout -b my-new-branch).
|
||||||
|
1. Make your proposed changes to the source
|
||||||
|
1. Run your local version (e.g. bench start in your bench installation). Make sure that your changes work the way you want them to.
|
||||||
|
1. Commit your changes to your branch. Make sure to use a semantic commit message.
|
||||||
|
1. Push your branch to your fork on Github, and issue a pull request.
|
||||||
24
MANIFEST.in
@@ -4,15 +4,15 @@ include *.json
|
|||||||
include *.md
|
include *.md
|
||||||
include *.py
|
include *.py
|
||||||
include *.txt
|
include *.txt
|
||||||
recursive-include community *.css
|
recursive-include lms *.css
|
||||||
recursive-include community *.csv
|
recursive-include lms *.csv
|
||||||
recursive-include community *.html
|
recursive-include lms *.html
|
||||||
recursive-include community *.ico
|
recursive-include lms *.ico
|
||||||
recursive-include community *.js
|
recursive-include lms *.js
|
||||||
recursive-include community *.json
|
recursive-include lms *.json
|
||||||
recursive-include community *.md
|
recursive-include lms *.md
|
||||||
recursive-include community *.png
|
recursive-include lms *.png
|
||||||
recursive-include community *.py
|
recursive-include lms *.py
|
||||||
recursive-include community *.svg
|
recursive-include lms *.svg
|
||||||
recursive-include community *.txt
|
recursive-include lms *.txt
|
||||||
recursive-exclude community *.pyc
|
recursive-exclude lms *.pyc
|
||||||
|
|||||||
129
README.md
@@ -1,79 +1,90 @@
|
|||||||
## Community
|
<p align="center">
|
||||||
|
<a href="https://www.frappelms.com/">
|
||||||
|
<img src="https://www.frappelms.com/files/flms.svg" alt="Frappe LMS" width="100" height="100">
|
||||||
|
</a>
|
||||||
|
<p align="center">Easy to use, open source, learning management system.</p>
|
||||||
|
</p>
|
||||||
|
|
||||||
This app helps people organize and manage their own communities.
|
<p align="center">
|
||||||
|
<a href="https://github.com/frappe/lms/blob/main/LICENSE">
|
||||||
|
<img alt="license" src="https://img.shields.io/badge/license-AGPLv3-blue">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
The App has following components:
|
<img width="1402" alt="Lesson" src="https://frappelms.com/files/fs-banner71f330.png">
|
||||||
|
|
||||||
1. Hackathons
|
<details>
|
||||||
1. LMS
|
<summary>Show more screenshots</summary>
|
||||||
|
<img width="1520" alt="ss1" src="https://user-images.githubusercontent.com/31363128/210056046-584bc8aa-d28c-4514-b031-73817012837d.png">
|
||||||
|
<img width="830" alt="ss2" src="https://user-images.githubusercontent.com/31363128/210056097-36849182-6db0-43a2-8c62-5333cd2aedf4.png">
|
||||||
|
<img width="941" alt="ss3" src="https://user-images.githubusercontent.com/31363128/210056134-01a7c429-1ef4-434e-9d43-128dda35d7e5.png">
|
||||||
|
</details>
|
||||||
|
|
||||||
Community is built on the [Frappe Framework](https://github.com/frappe/frappe), a full-stack web app framework built with Python & JavaScript.
|
Frappe LMS is an easy-to-use, open-source learning management system. You can use it to create and share online courses. The app has a clear UI that helps students focus only on what's important and assists in distraction-free learning.
|
||||||
|
|
||||||
## Development Setup
|
You can create courses and lessons through simple forms. Lessons can be in the form of text, videos, quizzes or a combination of all these. You can keep your students engaged with quizzes to help revise and test the concepts learned. Course Instructors and Students can reach out to each other through the discussions section available for each lesson and get queries resolved.
|
||||||
|
|
||||||
**Step 1:** Clone the repo
|
## Features
|
||||||
|
- Create online courses. 📚
|
||||||
|
- Add detailed descriptions and preview videos to the course. 🎬
|
||||||
|
- Add videos, quizzes, and assignments to your lessons and make them interesting and interactive 📝
|
||||||
|
- Discussions section below each lesson where instructors and students can interact with each other. 💬
|
||||||
|
- Create classes to group your students based on courses and track their progress 🏛
|
||||||
|
- Statistics dashboard that provides all important numbers at a glimpse. 📈
|
||||||
|
- Job Board where users can post and look for jobs. 💼
|
||||||
|
- People directory with each person's profile page 👨👩👧👦
|
||||||
|
- Set cover image, profile photo, short bio, and other professional information. 🦹🏼♀️
|
||||||
|
- Simple layout that optimizes readability 🤓
|
||||||
|
- Delightful user experience in overall usage ✨
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
Frappe LMS is built on [Frappe Framework](https://frappeframework.com) which is a batteries-included python web framework.
|
||||||
|
These are some of the tools it's built on:
|
||||||
|
- [Python](https://www.python.org)
|
||||||
|
- [Redis](https://redis.io/)
|
||||||
|
- [MariaDB](https://mariadb.org/)
|
||||||
|
- [Socket.io](https://socket.io/)
|
||||||
|
|
||||||
|
## Local Setup
|
||||||
|
|
||||||
|
### Docker
|
||||||
|
You need Docker, docker-compose, and git setup on your machine. Refer to [Docker documentation](https://docs.docker.com/). After that, run the following commands:
|
||||||
```
|
```
|
||||||
$ git clone https://github.com/fossunited/community.git
|
git clone https://github.com/frappe/lms
|
||||||
|
cd apps/lms/docker
|
||||||
$ cd community
|
docker-compose up
|
||||||
```
|
```
|
||||||
|
|
||||||
**Step 2:** Run docker-compose
|
Wait for some time until the setup script creates a site. After that, you can access `http://localhost:8000` in your browser and the app's login screen should show up.
|
||||||
|
|
||||||
```
|
### Frappe Bench
|
||||||
$ docker-compose up
|
|
||||||
```
|
|
||||||
|
|
||||||
**Step 3:** Visit the website at http://localhost:8000/
|
Currently, this app depends on the `develop` branch of [frappe](https://github.com/frappe/frappe).
|
||||||
|
|
||||||
You'll have to go through the setup wizard to setup the website for the first time you access it. Login using the following credentiasl to complete the setup wizard.
|
1. Setup frappe-bench by following [this guide](https://frappeframework.com/docs/v14/user/en/installation)
|
||||||
|
1. In the frappe-bench directory, run `bench start` and keep it running. Open a new terminal session and cd into the `frappe-bench` directory.
|
||||||
|
1. Run the following commands:
|
||||||
|
```sh
|
||||||
|
bench new-site lms.test
|
||||||
|
bench get-app lms
|
||||||
|
bench --site lms.test install-app lms
|
||||||
|
bench --site lms.test add-to-hosts
|
||||||
|
|
||||||
```
|
1. Now, you can access the site at `http://lms.test:8000`
|
||||||
Username: Administrator
|
|
||||||
password: admin
|
|
||||||
```
|
|
||||||
|
|
||||||
TODO: Explain how to load sample data
|
|
||||||
|
|
||||||
## Stopping the server
|
## Deployment
|
||||||
|
Frappe LMS is an app built on top of the Frappe Framework. So, you can follow any deployment guide for hosting a Frappe Framework-based site.
|
||||||
|
|
||||||
Press `ctrl+c` in the terminal to stop the server. You can also run `docker-compose down` in another terminal to stop it.
|
### Managed Hosting
|
||||||
|
Frappe LMS can be deployed in a few clicks on [Frappe Cloud](https://frappecloud.com/marketplace/apps/lms).
|
||||||
|
|
||||||
To completely reset the instance, do the following:
|
### Self-hosting
|
||||||
|
If you want to self-host, you can follow official [Frappe Bench Installation](https://github.com/frappe/bench#installation) instructions.
|
||||||
|
|
||||||
```
|
## Bugs and Feature Requests
|
||||||
$ docker-compose down --volumes
|
If you find any bugs or have a feature idea for the app, feel free to report them here on [GitHub Issues](https://github.com/frappe/lms/issues). Make sure you share enough information (app screenshots, browser console screenshots, stack traces, etc) for project maintainers.
|
||||||
$ docker-compose up
|
|
||||||
```
|
|
||||||
|
|
||||||
## Making Code Changes
|
## License
|
||||||
|
Distributed under [GNU AFFERO GENERAL PUBLIC LICENSE](license.txt)
|
||||||
The dev setup is configured to reload whenever any code is changed. Just edit the code and reload the webpage.
|
|
||||||
|
|
||||||
Commit the changes in a branch and send a pull request.
|
|
||||||
|
|
||||||
## Local Setup - The Hard Way
|
|
||||||
|
|
||||||
To setup the repository locally follow the steps mentioned below:
|
|
||||||
|
|
||||||
1. Install bench and setup a frappe-bench directory by following the [Installation Steps](https://frappeframework.com/docs/user/en/installation).
|
|
||||||
1. Start the server by running bench start.
|
|
||||||
1. In a separate terminal window, create a new site by running bench new-site community.test.
|
|
||||||
1. Run bench get-app https://github.com/fossunited/community.
|
|
||||||
1. Run bench --site community.test install-app community.
|
|
||||||
1. Map your site to localhost with the command ```bench --site community.test add-to-hosts```
|
|
||||||
1. Now open the URL http://community.test:8000/docs in your browser, you should see the app running.
|
|
||||||
|
|
||||||
### Contribution Guidelines (for The Hard Way)
|
|
||||||
|
|
||||||
1. Go to the apps/community directory of your installation and execute git pull --unshallow to ensure that you have the full git repository. Also fork the fossunited/community repository on GitHub.
|
|
||||||
1. Check out a working branch in git (e.g. git checkout -b my-new-branch).
|
|
||||||
1. Make your proposed changes to the source
|
|
||||||
1. Run your local version (e.g. bench start in your bench installation). Make sure that your changes work the way you want them to.
|
|
||||||
1. Commit your changes to your branch. Make sure to use a semantic commit message.
|
|
||||||
1. Push your branch to your fork on Github, and issue a pull request.
|
|
||||||
|
|
||||||
#### License
|
|
||||||
|
|
||||||
AGPL
|
|
||||||
|
|||||||
10
bench-installation.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
To setup the repository locally follow the steps mentioned below:
|
||||||
|
|
||||||
|
1. Install bench and setup a frappe-bench directory by following the [Installation Steps](https://frappeframework.com/docs/user/en/installation).
|
||||||
|
1. Start the server by running bench start.
|
||||||
|
1. In a separate terminal window, create a new site by running bench new-site lms.test.
|
||||||
|
1. Fork the LMS app
|
||||||
|
1. Run bench get-app <url-of-your-form>.
|
||||||
|
1. Run bench --site lms.test install-app lms.
|
||||||
|
1. Map your site to localhost with the command ```bench --site lms.test add-to-hosts```
|
||||||
|
1. Now open the URL http://lms.test:8000/ in your browser, you should see the app running.
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
__version__ = '0.0.1'
|
|
||||||
|
|
||||||
# load the methods from the lms api
|
|
||||||
from .lms import api # noqa
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"autoname": "Prompt",
|
|
||||||
"creation": "2021-02-12 17:54:52.300451",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"year",
|
|
||||||
"is_hackathon",
|
|
||||||
"volunteers"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "year",
|
|
||||||
"fieldtype": "Select",
|
|
||||||
"label": "Year",
|
|
||||||
"options": "\n2021\n2022\n2023\n2024\n2025"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "volunteers",
|
|
||||||
"fieldtype": "Table",
|
|
||||||
"label": "Volunteers",
|
|
||||||
"options": "Community Event Volunteer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": "0",
|
|
||||||
"fieldname": "is_hackathon",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"label": "Is Hackathon"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-02-15 18:29:26.828720",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Community",
|
|
||||||
"name": "Community Event",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"quick_entry": 1,
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, Frappe and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunityEvent(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, Frappe and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
# import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
|
|
||||||
class CommunityParticipant(Document):
|
|
||||||
pass
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, Frappe and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunityParticipant(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"creation": "2021-02-15 10:56:59.876454",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"full_name",
|
|
||||||
"enabled",
|
|
||||||
"avatar",
|
|
||||||
"column_break_3",
|
|
||||||
"short_bio",
|
|
||||||
"bio"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "full_name",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Full Name"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "avatar",
|
|
||||||
"fieldtype": "Attach Image",
|
|
||||||
"label": "Avatar"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "short_bio",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Short Bio"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "bio",
|
|
||||||
"fieldtype": "Small Text",
|
|
||||||
"label": "Bio"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": "0",
|
|
||||||
"fieldname": "enabled",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"label": "Enabled"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "column_break_3",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-02-15 11:01:02.010360",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Community",
|
|
||||||
"name": "Community Speaker",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, Frappe and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunitySpeaker(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"autoname": "field:sponsor",
|
|
||||||
"creation": "2021-02-15 10:46:16.271104",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"sponsor",
|
|
||||||
"website",
|
|
||||||
"image",
|
|
||||||
"speaker",
|
|
||||||
"timeslot",
|
|
||||||
"short_intro",
|
|
||||||
"pitch"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "sponsor",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Sponsor",
|
|
||||||
"reqd": 1,
|
|
||||||
"unique": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "website",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Website"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "image",
|
|
||||||
"fieldtype": "Attach Image",
|
|
||||||
"label": "Image"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "speaker",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Speaker"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "timeslot",
|
|
||||||
"fieldtype": "Datetime",
|
|
||||||
"label": "Timeslot"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "short_intro",
|
|
||||||
"fieldtype": "Small Text",
|
|
||||||
"label": "Short Intro"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "pitch",
|
|
||||||
"fieldtype": "Markdown Editor",
|
|
||||||
"label": "Pitch"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-02-15 10:46:16.271104",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Community",
|
|
||||||
"name": "Community Sponsor",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"quick_entry": 1,
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, Frappe and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
# import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
|
|
||||||
class CommunitySponsor(Document):
|
|
||||||
pass
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, Frappe and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunitySponsor(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"autoname": "field:topic",
|
|
||||||
"creation": "2021-02-18 16:06:59.882799",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"speaker",
|
|
||||||
"topic",
|
|
||||||
"video_link",
|
|
||||||
"date_and_time",
|
|
||||||
"event_type",
|
|
||||||
"event"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "speaker",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Speaker",
|
|
||||||
"reqd": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "topic",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Topic",
|
|
||||||
"reqd": 1,
|
|
||||||
"unique": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "video_link",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Video Link"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "date_and_time",
|
|
||||||
"fieldtype": "Datetime",
|
|
||||||
"label": "Date and Time"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "event_type",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "Event Type",
|
|
||||||
"options": "DocType"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "event",
|
|
||||||
"fieldtype": "Dynamic Link",
|
|
||||||
"label": "Event",
|
|
||||||
"options": "event_type"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-02-18 16:56:41.526184",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Community",
|
|
||||||
"name": "Community Talk",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"quick_entry": 1,
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, Frappe and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunityTalk(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, Frappe and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestTShirtSizes(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
import frappe
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
frappe.ready(function() {
|
|
||||||
// bind events here
|
|
||||||
})
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
{
|
|
||||||
"accept_payment": 0,
|
|
||||||
"allow_comments": 0,
|
|
||||||
"allow_delete": 0,
|
|
||||||
"allow_edit": 0,
|
|
||||||
"allow_incomplete": 0,
|
|
||||||
"allow_multiple": 0,
|
|
||||||
"allow_print": 0,
|
|
||||||
"amount": 0.0,
|
|
||||||
"amount_based_on_field": 0,
|
|
||||||
"apply_document_permissions": 0,
|
|
||||||
"button_label": "Send Request",
|
|
||||||
"client_script": "$('.page-header h2').html(`Request to Join \"${frappe.utils.get_url_arg('project_name')}\"`);",
|
|
||||||
"creation": "2021-02-17 13:20:08.548735",
|
|
||||||
"doc_type": "Community Project Member",
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Web Form",
|
|
||||||
"idx": 0,
|
|
||||||
"is_standard": 1,
|
|
||||||
"login_required": 0,
|
|
||||||
"max_attachment_size": 0,
|
|
||||||
"modified": "2021-02-17 13:50:35.153793",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Community",
|
|
||||||
"name": "join-request",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"payment_button_label": "Buy Now",
|
|
||||||
"published": 1,
|
|
||||||
"route": "join-request",
|
|
||||||
"route_to_success_link": 0,
|
|
||||||
"show_attachments": 0,
|
|
||||||
"show_in_grid": 0,
|
|
||||||
"show_sidebar": 0,
|
|
||||||
"sidebar_items": [],
|
|
||||||
"success_url": "/join-request",
|
|
||||||
"title": "Join Request",
|
|
||||||
"web_form_fields": [
|
|
||||||
{
|
|
||||||
"allow_read_on_all_link_options": 0,
|
|
||||||
"fieldname": "project",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"hidden": 0,
|
|
||||||
"label": "Project",
|
|
||||||
"max_length": 0,
|
|
||||||
"max_value": 0,
|
|
||||||
"options": "Community Project",
|
|
||||||
"read_only": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"show_in_filter": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_read_on_all_link_options": 0,
|
|
||||||
"fieldname": "intro",
|
|
||||||
"fieldtype": "Small Text",
|
|
||||||
"hidden": 0,
|
|
||||||
"label": "Intro",
|
|
||||||
"max_length": 0,
|
|
||||||
"max_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"show_in_filter": 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
|
|
||||||
def get_context(context):
|
|
||||||
# do your magic here
|
|
||||||
pass
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
frappe.ready(function () {
|
|
||||||
// bind events here
|
|
||||||
frappe.web_form.success_url = `hackathons/project?project=${frappe.utils.get_url_arg('project')}&hackathon=${frappe.utils.get_url_arg('hackathon')}`;
|
|
||||||
|
|
||||||
$('.breadcrumb-container')
|
|
||||||
.html(`<a href="${frappe.web_form.success_url}">Back to my project</a>`)
|
|
||||||
.addClass('py-4');
|
|
||||||
})
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
{
|
|
||||||
"accept_payment": 0,
|
|
||||||
"allow_comments": 0,
|
|
||||||
"allow_delete": 0,
|
|
||||||
"allow_edit": 0,
|
|
||||||
"allow_incomplete": 0,
|
|
||||||
"allow_multiple": 0,
|
|
||||||
"allow_print": 0,
|
|
||||||
"amount": 0.0,
|
|
||||||
"amount_based_on_field": 0,
|
|
||||||
"apply_document_permissions": 0,
|
|
||||||
"button_label": "Submit",
|
|
||||||
"creation": "2021-02-18 13:15:09.464515",
|
|
||||||
"doc_type": "Community Project Update",
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Web Form",
|
|
||||||
"idx": 0,
|
|
||||||
"is_standard": 1,
|
|
||||||
"login_required": 1,
|
|
||||||
"max_attachment_size": 0,
|
|
||||||
"modified": "2021-02-18 13:23:41.023545",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Community",
|
|
||||||
"name": "project-update",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"payment_button_label": "Buy Now",
|
|
||||||
"published": 1,
|
|
||||||
"route": "project-update",
|
|
||||||
"route_to_success_link": 0,
|
|
||||||
"show_attachments": 0,
|
|
||||||
"show_in_grid": 0,
|
|
||||||
"show_sidebar": 0,
|
|
||||||
"sidebar_items": [],
|
|
||||||
"success_url": "/project-update",
|
|
||||||
"title": "Project Update",
|
|
||||||
"web_form_fields": [
|
|
||||||
{
|
|
||||||
"allow_read_on_all_link_options": 0,
|
|
||||||
"fieldname": "project",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"hidden": 0,
|
|
||||||
"label": "Project",
|
|
||||||
"max_length": 0,
|
|
||||||
"max_value": 0,
|
|
||||||
"options": "Community Project",
|
|
||||||
"read_only": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"show_in_filter": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_read_on_all_link_options": 0,
|
|
||||||
"fieldname": "update",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"hidden": 0,
|
|
||||||
"label": "Update",
|
|
||||||
"max_length": 0,
|
|
||||||
"max_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"show_in_filter": 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{% set color = member.get_palette() %}
|
|
||||||
<a href="/{{member.username}}">
|
|
||||||
<span class="avatar {{ avatar_class }}" title="{{ member.full_name }}">
|
|
||||||
{% if member.user_image %}
|
|
||||||
<img class="avatar-frame standard-image" style="object-fit: cover;" src="{{ member.user_image }}" title="{{ member.full_name }}">
|
|
||||||
</img>
|
|
||||||
{% else %}
|
|
||||||
<span class="avatar-frame standard-image" title="{{ member.full_name }}"
|
|
||||||
style="background-color: var({{color[0]}}); color: var({{color[1]}});">
|
|
||||||
{{ frappe.utils.get_abbr(member.full_name) }}
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// Copyright (c) 2021, FOSS United and contributors
|
|
||||||
// For license information, please see license.txt
|
|
||||||
|
|
||||||
frappe.ui.form.on('Community Conference', {
|
|
||||||
// refresh: function(frm) {
|
|
||||||
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"autoname": "field:conference_name",
|
|
||||||
"creation": "2021-02-25 17:12:51.981534",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"conference_name",
|
|
||||||
"live_stream_url",
|
|
||||||
"conference_details"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "conference_name",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Conference Name",
|
|
||||||
"unique": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "live_stream_url",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Live Stream URL"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "conference_details",
|
|
||||||
"fieldtype": "Markdown Editor",
|
|
||||||
"label": "Conference Details"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-04-06 18:30:18.228083",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Conference",
|
|
||||||
"name": "Community Conference",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"quick_entry": 1,
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunityConference(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// Copyright (c) 2021, FOSS United and contributors
|
|
||||||
// For license information, please see license.txt
|
|
||||||
|
|
||||||
frappe.ui.form.on('Community Conference Participant', {
|
|
||||||
// refresh: function(frm) {
|
|
||||||
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"autoname": "CON-.YYYY.-.###",
|
|
||||||
"creation": "2021-02-25 17:51:23.959033",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"participant_details",
|
|
||||||
"participant_name",
|
|
||||||
"participant_designation",
|
|
||||||
"column_break_4",
|
|
||||||
"email",
|
|
||||||
"conference_details",
|
|
||||||
"year",
|
|
||||||
"full_conference_tickets",
|
|
||||||
"user_conference_tickets",
|
|
||||||
"paid",
|
|
||||||
"column_break_11",
|
|
||||||
"tshirt_table",
|
|
||||||
"tshirt_size",
|
|
||||||
"currency",
|
|
||||||
"amount",
|
|
||||||
"thank_you_email_sent"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "participant_details",
|
|
||||||
"fieldtype": "Section Break",
|
|
||||||
"label": "Participant Details"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "participant_name",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Participant Name",
|
|
||||||
"reqd": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "participant_designation",
|
|
||||||
"fieldtype": "Select",
|
|
||||||
"label": "Participant Designation",
|
|
||||||
"options": "\nCxO\nAnalyst\nConsultant\nDeveloper\nSystem Administrator\nOther"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "column_break_4",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "email",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Email",
|
|
||||||
"options": "Email",
|
|
||||||
"reqd": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "conference_details",
|
|
||||||
"fieldtype": "Section Break",
|
|
||||||
"label": "Conference Details"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "year",
|
|
||||||
"fieldtype": "Select",
|
|
||||||
"label": "Year",
|
|
||||||
"options": "\n2017\n2018\n2019\n2020\n2021\n2022\n2023\n2024\n2025"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "full_conference_tickets",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Full Conference Tickets",
|
|
||||||
"reqd": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "user_conference_tickets",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"label": "User Conference Tickets"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": "0",
|
|
||||||
"fieldname": "paid",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"label": "Paid"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "column_break_11",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "tshirt_table",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "T-Shirt Sizes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "tshirt_size",
|
|
||||||
"fieldtype": "Select",
|
|
||||||
"label": "T-Shirt Size",
|
|
||||||
"options": "S\nM\nL\nXL\nXXL\nXXXL"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "currency",
|
|
||||||
"fieldtype": "Select",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Currency",
|
|
||||||
"options": "USD\nINR",
|
|
||||||
"reqd": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "amount",
|
|
||||||
"fieldtype": "Currency",
|
|
||||||
"label": "Amount",
|
|
||||||
"reqd": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": "0",
|
|
||||||
"fieldname": "thank_you_email_sent",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"label": "Thank You Email Sent"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-03-04 20:13:42.151103",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Conference",
|
|
||||||
"name": "Community Conference Participant",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"quick_entry": 1,
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
# import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
|
|
||||||
class CommunityConferenceParticipant(Document):
|
|
||||||
pass
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunityConferenceParticipant(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// Copyright (c) 2021, FOSS United and contributors
|
|
||||||
// For license information, please see license.txt
|
|
||||||
|
|
||||||
frappe.ui.form.on('Community Conference Request', {
|
|
||||||
// refresh: function(frm) {
|
|
||||||
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"creation": "2021-02-25 17:19:10.378290",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"contact_name",
|
|
||||||
"contact_number",
|
|
||||||
"email",
|
|
||||||
"organization_name",
|
|
||||||
"request_type",
|
|
||||||
"message"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "contact_name",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Contact Name"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "contact_number",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Contact Number"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "email",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Email"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "organization_name",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Organization Name"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "request_type",
|
|
||||||
"fieldtype": "Select",
|
|
||||||
"label": "Request Type",
|
|
||||||
"options": "Sponsorship\nExhibit Program"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "message",
|
|
||||||
"fieldtype": "Text Editor",
|
|
||||||
"label": "Message"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-03-04 20:13:26.130017",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Conference",
|
|
||||||
"name": "Community Conference Request",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"quick_entry": 1,
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
# import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
|
|
||||||
class CommunityConferenceRequest(Document):
|
|
||||||
pass
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunityConferenceRequest(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,373 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"collapsible_depends_on": null,
|
|
||||||
"columns": 0,
|
|
||||||
"default": null,
|
|
||||||
"depends_on": null,
|
|
||||||
"description": null,
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Custom Field",
|
|
||||||
"dt": "User",
|
|
||||||
"fetch_from": null,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "linkedin",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"hidden": 0,
|
|
||||||
"hide_border": 0,
|
|
||||||
"hide_days": 0,
|
|
||||||
"hide_seconds": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_preview": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"insert_after": "mobile_no",
|
|
||||||
"label": "LinkedIn ID",
|
|
||||||
"length": 0,
|
|
||||||
"mandatory_depends_on": null,
|
|
||||||
"modified": "2021-06-30 14:46:55.834145",
|
|
||||||
"name": "User-linkedin",
|
|
||||||
"no_copy": 0,
|
|
||||||
"non_negative": 0,
|
|
||||||
"options": null,
|
|
||||||
"parent": null,
|
|
||||||
"parentfield": null,
|
|
||||||
"parenttype": null,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"print_width": null,
|
|
||||||
"read_only": 0,
|
|
||||||
"read_only_depends_on": null,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"translatable": 1,
|
|
||||||
"unique": 0,
|
|
||||||
"width": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"collapsible_depends_on": null,
|
|
||||||
"columns": 0,
|
|
||||||
"default": null,
|
|
||||||
"depends_on": null,
|
|
||||||
"description": null,
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Custom Field",
|
|
||||||
"dt": "User",
|
|
||||||
"fetch_from": null,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "github",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"hidden": 0,
|
|
||||||
"hide_border": 0,
|
|
||||||
"hide_days": 0,
|
|
||||||
"hide_seconds": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_preview": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"insert_after": "linkedin",
|
|
||||||
"label": "Github ID",
|
|
||||||
"length": 0,
|
|
||||||
"mandatory_depends_on": null,
|
|
||||||
"modified": "2021-06-30 14:46:55.834145",
|
|
||||||
"name": "User-github",
|
|
||||||
"no_copy": 0,
|
|
||||||
"non_negative": 0,
|
|
||||||
"options": null,
|
|
||||||
"parent": null,
|
|
||||||
"parentfield": null,
|
|
||||||
"parenttype": null,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"print_width": null,
|
|
||||||
"read_only": 0,
|
|
||||||
"read_only_depends_on": null,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"translatable": 1,
|
|
||||||
"unique": 0,
|
|
||||||
"width": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"collapsible_depends_on": null,
|
|
||||||
"columns": 0,
|
|
||||||
"default": null,
|
|
||||||
"depends_on": null,
|
|
||||||
"description": null,
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Custom Field",
|
|
||||||
"dt": "User",
|
|
||||||
"fetch_from": null,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "medium",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"hidden": 0,
|
|
||||||
"hide_border": 0,
|
|
||||||
"hide_days": 0,
|
|
||||||
"hide_seconds": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_preview": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"insert_after": "github",
|
|
||||||
"label": "Medium ID",
|
|
||||||
"length": 0,
|
|
||||||
"mandatory_depends_on": null,
|
|
||||||
"modified": "2021-06-30 14:46:55.834145",
|
|
||||||
"name": "User-medium",
|
|
||||||
"no_copy": 0,
|
|
||||||
"non_negative": 0,
|
|
||||||
"options": null,
|
|
||||||
"parent": null,
|
|
||||||
"parentfield": null,
|
|
||||||
"parenttype": null,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"print_width": null,
|
|
||||||
"read_only": 0,
|
|
||||||
"read_only_depends_on": null,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"translatable": 1,
|
|
||||||
"unique": 0,
|
|
||||||
"width": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"collapsible_depends_on": null,
|
|
||||||
"columns": 0,
|
|
||||||
"default": null,
|
|
||||||
"depends_on": null,
|
|
||||||
"description": null,
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Custom Field",
|
|
||||||
"dt": "User",
|
|
||||||
"fetch_from": null,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "city",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"hidden": 0,
|
|
||||||
"hide_border": 0,
|
|
||||||
"hide_days": 0,
|
|
||||||
"hide_seconds": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_preview": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"insert_after": "mute_sounds",
|
|
||||||
"label": "City",
|
|
||||||
"length": 0,
|
|
||||||
"mandatory_depends_on": null,
|
|
||||||
"modified": "2021-06-30 14:46:55.834145",
|
|
||||||
"name": "User-city",
|
|
||||||
"no_copy": 0,
|
|
||||||
"non_negative": 0,
|
|
||||||
"options": null,
|
|
||||||
"parent": null,
|
|
||||||
"parentfield": null,
|
|
||||||
"parenttype": null,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"print_width": null,
|
|
||||||
"read_only": 0,
|
|
||||||
"read_only_depends_on": null,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"translatable": 1,
|
|
||||||
"unique": 0,
|
|
||||||
"width": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"collapsible_depends_on": null,
|
|
||||||
"columns": 0,
|
|
||||||
"default": null,
|
|
||||||
"depends_on": null,
|
|
||||||
"description": null,
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Custom Field",
|
|
||||||
"dt": "User",
|
|
||||||
"fetch_from": null,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "college",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"hidden": 0,
|
|
||||||
"hide_border": 0,
|
|
||||||
"hide_days": 0,
|
|
||||||
"hide_seconds": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_preview": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"insert_after": "city",
|
|
||||||
"label": "College Name",
|
|
||||||
"length": 0,
|
|
||||||
"mandatory_depends_on": null,
|
|
||||||
"modified": "2021-06-30 14:46:55.834145",
|
|
||||||
"name": "User-college",
|
|
||||||
"no_copy": 0,
|
|
||||||
"non_negative": 0,
|
|
||||||
"options": null,
|
|
||||||
"parent": null,
|
|
||||||
"parentfield": null,
|
|
||||||
"parenttype": null,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"print_width": null,
|
|
||||||
"read_only": 0,
|
|
||||||
"read_only_depends_on": null,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"translatable": 1,
|
|
||||||
"unique": 0,
|
|
||||||
"width": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"collapsible_depends_on": null,
|
|
||||||
"columns": 0,
|
|
||||||
"default": null,
|
|
||||||
"depends_on": null,
|
|
||||||
"description": null,
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Custom Field",
|
|
||||||
"dt": "User",
|
|
||||||
"fetch_from": null,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "branch",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"hidden": 0,
|
|
||||||
"hide_border": 0,
|
|
||||||
"hide_days": 0,
|
|
||||||
"hide_seconds": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_preview": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"insert_after": "college",
|
|
||||||
"label": "Branch",
|
|
||||||
"length": 0,
|
|
||||||
"mandatory_depends_on": null,
|
|
||||||
"modified": "2021-06-30 14:46:55.834145",
|
|
||||||
"name": "User-branch",
|
|
||||||
"no_copy": 0,
|
|
||||||
"non_negative": 0,
|
|
||||||
"options": null,
|
|
||||||
"parent": null,
|
|
||||||
"parentfield": null,
|
|
||||||
"parenttype": null,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"print_width": null,
|
|
||||||
"read_only": 0,
|
|
||||||
"read_only_depends_on": null,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"translatable": 1,
|
|
||||||
"unique": 0,
|
|
||||||
"width": null
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_in_quick_entry": 0,
|
|
||||||
"allow_on_submit": 0,
|
|
||||||
"bold": 0,
|
|
||||||
"collapsible": 0,
|
|
||||||
"collapsible_depends_on": null,
|
|
||||||
"columns": 0,
|
|
||||||
"default": null,
|
|
||||||
"depends_on": null,
|
|
||||||
"description": null,
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Custom Field",
|
|
||||||
"dt": "User",
|
|
||||||
"fetch_from": null,
|
|
||||||
"fetch_if_empty": 0,
|
|
||||||
"fieldname": "profession",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"hidden": 0,
|
|
||||||
"hide_border": 0,
|
|
||||||
"hide_days": 0,
|
|
||||||
"hide_seconds": 0,
|
|
||||||
"ignore_user_permissions": 0,
|
|
||||||
"ignore_xss_filter": 0,
|
|
||||||
"in_global_search": 0,
|
|
||||||
"in_list_view": 0,
|
|
||||||
"in_preview": 0,
|
|
||||||
"in_standard_filter": 0,
|
|
||||||
"insert_after": "medium",
|
|
||||||
"label": "Profession",
|
|
||||||
"length": 0,
|
|
||||||
"mandatory_depends_on": null,
|
|
||||||
"modified": "2021-06-30 14:46:55.834145",
|
|
||||||
"name": "User-profession",
|
|
||||||
"no_copy": 0,
|
|
||||||
"non_negative": 0,
|
|
||||||
"options": null,
|
|
||||||
"parent": null,
|
|
||||||
"parentfield": null,
|
|
||||||
"parenttype": null,
|
|
||||||
"permlevel": 0,
|
|
||||||
"precision": "",
|
|
||||||
"print_hide": 0,
|
|
||||||
"print_hide_if_no_value": 0,
|
|
||||||
"print_width": null,
|
|
||||||
"read_only": 0,
|
|
||||||
"read_only_depends_on": null,
|
|
||||||
"report_hide": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"translatable": 1,
|
|
||||||
"unique": 0,
|
|
||||||
"width": null
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
The Hackathon module allows Community Members to organize and manage hackathons. Community Members can view these hackathons on the portal.
|
|
||||||
|
|
||||||
<img class="screenshot" src="/community/hackathon/images/hackathons-portal.png">
|
|
||||||
|
|
||||||
### Key Features:
|
|
||||||
|
|
||||||
##### Organize Hackathons
|
|
||||||
|
|
||||||
1. Hackathons can be created using the **Community Hackathon** doctype.
|
|
||||||
1. Enter the hackathon name, the organizer, the year and Save.
|
|
||||||
|
|
||||||
<img class="screenshot" src="/community/hackathon/images/community-hackathon.png">
|
|
||||||
|
|
||||||
##### Projects
|
|
||||||
|
|
||||||
1. A Hackathon will have multiple Projects.
|
|
||||||
1. Projects can be created using the **Community Project** doctype from the desk.
|
|
||||||
1. Projects can also be created from the Portal using the Projects webform.
|
|
||||||
1. Enter details like Project Name, Project Short Intro, Project Description.
|
|
||||||
1. Attach important links like Repository Link, Demo Link, Telegram Id.
|
|
||||||
1. The checkbox Accepting Members can be used if you are still aceepting members for your project.
|
|
||||||
|
|
||||||
<img class="screenshot" src="/community/hackathon/images/project-1.png">
|
|
||||||
<img class="screenshot" src="/community/hackathon/images/project-2.png">
|
|
||||||
|
|
||||||
1. Projects are visible on the portal as well.
|
|
||||||
<img class="screenshot" src="/community/hackathon/images/project-portal.png">
|
|
||||||
<img class="screenshot" src="/community/hackathon/images/project-details.png">
|
|
||||||
|
|
||||||
##### Project Members
|
|
||||||
|
|
||||||
1. Community Members can explore the projects of hackathons and decide if they want to join any project.
|
|
||||||
1. If the project is accepting members they can apply for the project from the web form available on the portal.
|
|
||||||
<img class="screenshot" src="/community/hackathon/images/project-join-request.png">
|
|
||||||
1. Project owners can review the requests and accept/reject the members.
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// Copyright (c) 2021, FOSS United and contributors
|
|
||||||
// For license information, please see license.txt
|
|
||||||
|
|
||||||
frappe.ui.form.on('Community Hackathon', {
|
|
||||||
// refresh: function(frm) {
|
|
||||||
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"autoname": "field:hackathon_name",
|
|
||||||
"creation": "2021-02-17 12:40:25.604012",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"hackathon_name",
|
|
||||||
"organizer",
|
|
||||||
"year"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "hackathon_name",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Hackathon Name",
|
|
||||||
"reqd": 1,
|
|
||||||
"unique": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "organizer",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "Organizer",
|
|
||||||
"options": "User"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "year",
|
|
||||||
"fieldtype": "Select",
|
|
||||||
"label": "Year",
|
|
||||||
"options": "\n2021\n2022\n2023\n2024\n2025"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-05-21 12:22:26.619776",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Hackathon",
|
|
||||||
"name": "Community Hackathon",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"quick_entry": 1,
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunityHackathon(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"allow_import": 1,
|
|
||||||
"autoname": "field:project_name",
|
|
||||||
"creation": "2021-02-12 18:28:33.440328",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"disabled",
|
|
||||||
"column_break_2",
|
|
||||||
"accepting_members",
|
|
||||||
"section_break_4",
|
|
||||||
"project_name",
|
|
||||||
"project_short_intro",
|
|
||||||
"project_description",
|
|
||||||
"section_break_8",
|
|
||||||
"repository_link",
|
|
||||||
"video_link",
|
|
||||||
"column_break_11",
|
|
||||||
"hackathon",
|
|
||||||
"telegram_id",
|
|
||||||
"likes",
|
|
||||||
"project_search"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"default": "0",
|
|
||||||
"fieldname": "disabled",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"label": "Disabled"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "project_name",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Project Name",
|
|
||||||
"reqd": 1,
|
|
||||||
"unique": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "project_short_intro",
|
|
||||||
"fieldtype": "Small Text",
|
|
||||||
"label": "Project Short Intro"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "repository_link",
|
|
||||||
"fieldtype": "Small Text",
|
|
||||||
"label": "Repository Link"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "video_link",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Video Link"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "telegram_id",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Telegram Id"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "project_description",
|
|
||||||
"fieldtype": "Markdown Editor",
|
|
||||||
"label": "Project Description"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "hackathon",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "Hackathon",
|
|
||||||
"options": "Community Hackathon"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": "0",
|
|
||||||
"fieldname": "accepting_members",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"label": "Accepting Members"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "likes",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"label": "Likes",
|
|
||||||
"read_only": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "project_search",
|
|
||||||
"fieldtype": "Small Text",
|
|
||||||
"hidden": 1,
|
|
||||||
"label": "Project Search"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "column_break_2",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "section_break_4",
|
|
||||||
"fieldtype": "Section Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "section_break_8",
|
|
||||||
"fieldtype": "Section Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "column_break_11",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-04-20 13:22:17.248521",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Hackathon",
|
|
||||||
"name": "Community Project",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "Participant",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"quick_entry": 1,
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunityProject(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// Copyright (c) 2021, FOSS United and contributors
|
|
||||||
// For license information, please see license.txt
|
|
||||||
|
|
||||||
frappe.ui.form.on('Community Project Evaluation', {
|
|
||||||
// refresh: function(frm) {
|
|
||||||
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
@@ -1,169 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"autoname": "format:EVAL-{#####}",
|
|
||||||
"creation": "2021-02-12 19:44:57.467599",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"project",
|
|
||||||
"status",
|
|
||||||
"evaluated_by",
|
|
||||||
"telegram_id",
|
|
||||||
"column_break_5",
|
|
||||||
"update",
|
|
||||||
"section_break_7",
|
|
||||||
"evaluation_comment",
|
|
||||||
"overall_rating",
|
|
||||||
"section_break_10",
|
|
||||||
"impact_of_project",
|
|
||||||
"completion",
|
|
||||||
"quality_of_code",
|
|
||||||
"quality_of_",
|
|
||||||
"column_break_15",
|
|
||||||
"difficulty",
|
|
||||||
"future_viability",
|
|
||||||
"total_score"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "project",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Project",
|
|
||||||
"options": "Community Project",
|
|
||||||
"reqd": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "status",
|
|
||||||
"fieldtype": "Select",
|
|
||||||
"label": "Status",
|
|
||||||
"options": "\nPending\nPreliminary\nComplete"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "evaluated_by",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "Evaluated By",
|
|
||||||
"options": "User"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "telegram_id",
|
|
||||||
"fieldtype": "Small Text",
|
|
||||||
"label": "Telegram Id"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "column_break_5",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "update",
|
|
||||||
"fieldtype": "Small Text",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Update",
|
|
||||||
"reqd": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "section_break_7",
|
|
||||||
"fieldtype": "Section Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "evaluation_comment",
|
|
||||||
"fieldtype": "Small Text",
|
|
||||||
"label": "Evaluation Comment"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "overall_rating",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"label": "Overall Rating"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "section_break_10",
|
|
||||||
"fieldtype": "Section Break",
|
|
||||||
"label": "Score"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "impact_of_project",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"label": "Impact of Project"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "completion",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"label": "Completion"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "quality_of_code",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"label": "Quality of Code"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "quality_of_",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"label": "Quality of Presentation"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "column_break_15",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "difficulty",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"label": "Difficulty"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "future_viability",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"label": "Future Viability"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "total_score",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"label": "Total Score"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-03-04 19:56:53.757808",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Hackathon",
|
|
||||||
"name": "Community Project Evaluation",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "Participant",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "Evaluator",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
# import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
|
|
||||||
class CommunityProjectEvaluation(Document):
|
|
||||||
pass
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunityProjectEvaluation(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// Copyright (c) 2021, FOSS United and contributors
|
|
||||||
// For license information, please see license.txt
|
|
||||||
|
|
||||||
frappe.ui.form.on('Community Project Like', {
|
|
||||||
// refresh: function(frm) {
|
|
||||||
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"creation": "2021-02-12 18:43:24.206708",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"project"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "project",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"label": "Project",
|
|
||||||
"options": "Community Project"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-03-04 18:55:51.877522",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Hackathon",
|
|
||||||
"name": "Community Project Like",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"quick_entry": 1,
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
# import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
|
|
||||||
class CommunityProjectLike(Document):
|
|
||||||
pass
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunityProjectLike(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// Copyright (c) 2021, FOSS United and contributors
|
|
||||||
// For license information, please see license.txt
|
|
||||||
|
|
||||||
frappe.ui.form.on('Community Project Member', {
|
|
||||||
// refresh: function(frm) {
|
|
||||||
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
from frappe import _
|
|
||||||
|
|
||||||
class CommunityProjectMember(Document):
|
|
||||||
def validate(self):
|
|
||||||
self.validate_if_already_member()
|
|
||||||
|
|
||||||
def validate_if_already_member(self):
|
|
||||||
if frappe.get_all("Community Project Member", {"owner": self.owner}):
|
|
||||||
frappe.throw(_("You have already applied for the membership of this project."))
|
|
||||||
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunityProjectMember(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// Copyright (c) 2021, FOSS United and contributors
|
|
||||||
// For license information, please see license.txt
|
|
||||||
|
|
||||||
frappe.ui.form.on('Community Project Update', {
|
|
||||||
// refresh: function(frm) {
|
|
||||||
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"creation": "2021-02-12 18:45:56.750969",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"project",
|
|
||||||
"update"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "project",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Project",
|
|
||||||
"options": "Community Project",
|
|
||||||
"reqd": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "update",
|
|
||||||
"fieldtype": "Markdown Editor",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Update",
|
|
||||||
"reqd": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-03-04 19:43:10.886773",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Hackathon",
|
|
||||||
"name": "Community Project Update",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"quick_entry": 1,
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
# import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
|
|
||||||
class CommunityProjectUpdate(Document):
|
|
||||||
pass
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
# import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestCommunityProjectUpdate(unittest.TestCase):
|
|
||||||
pass
|
|
||||||
|
Before Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 139 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 111 KiB |
@@ -1,3 +0,0 @@
|
|||||||
frappe.ready(function() {
|
|
||||||
// bind events here
|
|
||||||
})
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
{
|
|
||||||
"accept_payment": 0,
|
|
||||||
"allow_comments": 0,
|
|
||||||
"allow_delete": 0,
|
|
||||||
"allow_edit": 0,
|
|
||||||
"allow_incomplete": 0,
|
|
||||||
"allow_multiple": 0,
|
|
||||||
"allow_print": 0,
|
|
||||||
"amount": 0.0,
|
|
||||||
"amount_based_on_field": 0,
|
|
||||||
"apply_document_permissions": 0,
|
|
||||||
"button_label": "Send Request",
|
|
||||||
"client_script": "$('.page-header h2').html(`Request to Join \"${frappe.utils.get_url_arg('project_name')}\"`);",
|
|
||||||
"creation": "2021-02-17 13:20:08.548735",
|
|
||||||
"doc_type": "Community Project Member",
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Web Form",
|
|
||||||
"idx": 0,
|
|
||||||
"is_standard": 1,
|
|
||||||
"login_required": 1,
|
|
||||||
"max_attachment_size": 0,
|
|
||||||
"modified": "2021-04-14 13:52:46.135536",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Hackathon",
|
|
||||||
"name": "join-request",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"payment_button_label": "Buy Now",
|
|
||||||
"published": 1,
|
|
||||||
"route": "join-request",
|
|
||||||
"route_to_success_link": 0,
|
|
||||||
"show_attachments": 0,
|
|
||||||
"show_in_grid": 0,
|
|
||||||
"show_sidebar": 0,
|
|
||||||
"sidebar_items": [],
|
|
||||||
"success_url": "/join-request",
|
|
||||||
"title": "Join Request",
|
|
||||||
"web_form_fields": [
|
|
||||||
{
|
|
||||||
"allow_read_on_all_link_options": 0,
|
|
||||||
"fieldname": "project",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"hidden": 0,
|
|
||||||
"label": "Project",
|
|
||||||
"max_length": 0,
|
|
||||||
"max_value": 0,
|
|
||||||
"options": "Community Project",
|
|
||||||
"read_only": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"show_in_filter": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_read_on_all_link_options": 0,
|
|
||||||
"fieldname": "intro",
|
|
||||||
"fieldtype": "Small Text",
|
|
||||||
"hidden": 0,
|
|
||||||
"label": "Intro",
|
|
||||||
"max_length": 0,
|
|
||||||
"max_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"show_in_filter": 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
frappe.ready(function() {
|
|
||||||
// bind events here
|
|
||||||
})
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
{
|
|
||||||
"accept_payment": 0,
|
|
||||||
"allow_comments": 0,
|
|
||||||
"allow_delete": 0,
|
|
||||||
"allow_edit": 1,
|
|
||||||
"allow_incomplete": 0,
|
|
||||||
"allow_multiple": 0,
|
|
||||||
"allow_print": 0,
|
|
||||||
"amount": 0.0,
|
|
||||||
"amount_based_on_field": 0,
|
|
||||||
"apply_document_permissions": 0,
|
|
||||||
"button_label": "Save",
|
|
||||||
"creation": "2021-04-14 13:11:50.606310",
|
|
||||||
"doc_type": "Community Project",
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Web Form",
|
|
||||||
"idx": 0,
|
|
||||||
"introduction_text": "<div class=\"ql-editor read-mode\"><p>Add details about your project.</p><p><br></p><p><strong>Note:</strong> If you save this project, you won't be able to join another one. If your teammates have already created the project, join it instead.</p></div>",
|
|
||||||
"is_standard": 1,
|
|
||||||
"login_required": 1,
|
|
||||||
"max_attachment_size": 0,
|
|
||||||
"modified": "2021-04-14 13:11:50.606310",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Hackathon",
|
|
||||||
"name": "project",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"payment_button_label": "Buy Now",
|
|
||||||
"published": 1,
|
|
||||||
"route": "edit-project",
|
|
||||||
"route_to_success_link": 0,
|
|
||||||
"show_attachments": 0,
|
|
||||||
"show_in_grid": 0,
|
|
||||||
"show_sidebar": 0,
|
|
||||||
"sidebar_items": [],
|
|
||||||
"success_url": "/project",
|
|
||||||
"title": "Project",
|
|
||||||
"web_form_fields": [
|
|
||||||
{
|
|
||||||
"allow_read_on_all_link_options": 0,
|
|
||||||
"fieldtype": "Attach",
|
|
||||||
"hidden": 0,
|
|
||||||
"max_length": 0,
|
|
||||||
"max_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"reqd": 0,
|
|
||||||
"show_in_filter": 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
frappe.ready(function() {
|
|
||||||
// bind events here
|
|
||||||
})
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
{
|
|
||||||
"accept_payment": 0,
|
|
||||||
"allow_comments": 0,
|
|
||||||
"allow_delete": 0,
|
|
||||||
"allow_edit": 0,
|
|
||||||
"allow_incomplete": 0,
|
|
||||||
"allow_multiple": 0,
|
|
||||||
"allow_print": 0,
|
|
||||||
"amount": 0.0,
|
|
||||||
"amount_based_on_field": 0,
|
|
||||||
"apply_document_permissions": 0,
|
|
||||||
"button_label": "Submit",
|
|
||||||
"creation": "2021-02-18 13:15:09.464515",
|
|
||||||
"doc_type": "Community Project Update",
|
|
||||||
"docstatus": 0,
|
|
||||||
"doctype": "Web Form",
|
|
||||||
"idx": 0,
|
|
||||||
"is_standard": 1,
|
|
||||||
"login_required": 1,
|
|
||||||
"max_attachment_size": 0,
|
|
||||||
"modified": "2021-03-04 19:43:28.957577",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "Hackathon",
|
|
||||||
"name": "project-update",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"payment_button_label": "Buy Now",
|
|
||||||
"published": 1,
|
|
||||||
"route": "project-update",
|
|
||||||
"route_to_success_link": 0,
|
|
||||||
"show_attachments": 0,
|
|
||||||
"show_in_grid": 0,
|
|
||||||
"show_sidebar": 0,
|
|
||||||
"sidebar_items": [],
|
|
||||||
"success_url": "/project-update",
|
|
||||||
"title": "Project Update",
|
|
||||||
"web_form_fields": [
|
|
||||||
{
|
|
||||||
"allow_read_on_all_link_options": 0,
|
|
||||||
"fieldname": "project",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"hidden": 0,
|
|
||||||
"label": "Project",
|
|
||||||
"max_length": 0,
|
|
||||||
"max_value": 0,
|
|
||||||
"options": "Community Project",
|
|
||||||
"read_only": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"show_in_filter": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"allow_read_on_all_link_options": 0,
|
|
||||||
"fieldname": "update",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"hidden": 0,
|
|
||||||
"label": "Update",
|
|
||||||
"max_length": 0,
|
|
||||||
"max_value": 0,
|
|
||||||
"read_only": 0,
|
|
||||||
"reqd": 1,
|
|
||||||
"show_in_filter": 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
|
|
||||||
def get_context(context):
|
|
||||||
# do your magic here
|
|
||||||
pass
|
|
||||||
@@ -1,206 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
from . import __version__ as app_version
|
|
||||||
|
|
||||||
app_name = "community"
|
|
||||||
app_title = "Community"
|
|
||||||
app_publisher = "FOSS United"
|
|
||||||
app_description = "Community App"
|
|
||||||
app_icon = "octicon octicon-file-directory"
|
|
||||||
app_color = "grey"
|
|
||||||
app_email = "jannat@erpnext.com"
|
|
||||||
app_license = "AGPL"
|
|
||||||
|
|
||||||
# Includes in <head>
|
|
||||||
# ------------------
|
|
||||||
|
|
||||||
# include js, css files in header of desk.html
|
|
||||||
# app_include_css = "/assets/community/css/community.css"
|
|
||||||
# app_include_js = "/assets/community/js/community.js"
|
|
||||||
|
|
||||||
# include js, css files in header of web template
|
|
||||||
web_include_css = "community.bundle.css"
|
|
||||||
# web_include_css = "/assets/community/css/community.css"
|
|
||||||
# web_include_js = "/assets/community/js/community.js"
|
|
||||||
|
|
||||||
# include custom scss in every website theme (without file extension ".scss")
|
|
||||||
# website_theme_scss = "community/public/scss/website"
|
|
||||||
|
|
||||||
# include js, css files in header of web form
|
|
||||||
# webform_include_js = {"doctype": "public/js/doctype.js"}
|
|
||||||
# webform_include_css = {"doctype": "public/css/doctype.css"}
|
|
||||||
|
|
||||||
# include js in page
|
|
||||||
# page_js = {"page" : "public/js/file.js"}
|
|
||||||
|
|
||||||
# include js in doctype views
|
|
||||||
# doctype_js = {"doctype" : "public/js/doctype.js"}
|
|
||||||
# doctype_list_js = {"doctype" : "public/js/doctype_list.js"}
|
|
||||||
# doctype_tree_js = {"doctype" : "public/js/doctype_tree.js"}
|
|
||||||
# doctype_calendar_js = {"doctype" : "public/js/doctype_calendar.js"}
|
|
||||||
|
|
||||||
# Home Pages
|
|
||||||
# ----------
|
|
||||||
|
|
||||||
# application home page (will override Website Settings)
|
|
||||||
# home_page = "login"
|
|
||||||
|
|
||||||
# website user home page (by Role)
|
|
||||||
# role_home_page = {
|
|
||||||
# "Role": "home_page"
|
|
||||||
# }
|
|
||||||
|
|
||||||
# Generators
|
|
||||||
# ----------
|
|
||||||
|
|
||||||
# automatically create page for each record of this doctype
|
|
||||||
# website_generators = ["Web Page"]
|
|
||||||
|
|
||||||
# Installation
|
|
||||||
# ------------
|
|
||||||
|
|
||||||
# before_install = "community.install.before_install"
|
|
||||||
# after_install = "community.install.after_install"
|
|
||||||
|
|
||||||
# Desk Notifications
|
|
||||||
# ------------------
|
|
||||||
# See frappe.core.notifications.get_notification_config
|
|
||||||
|
|
||||||
# notification_config = "community.notifications.get_notification_config"
|
|
||||||
|
|
||||||
# Permissions
|
|
||||||
# -----------
|
|
||||||
# Permissions evaluated in scripted ways
|
|
||||||
|
|
||||||
# permission_query_conditions = {
|
|
||||||
# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions",
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# has_permission = {
|
|
||||||
# "Event": "frappe.desk.doctype.event.event.has_permission",
|
|
||||||
# }
|
|
||||||
|
|
||||||
# DocType Class
|
|
||||||
# ---------------
|
|
||||||
# Override standard doctype classes
|
|
||||||
|
|
||||||
override_doctype_class = {
|
|
||||||
"User": "community.overrides.user.CustomUser"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Document Events
|
|
||||||
# ---------------
|
|
||||||
# Hook on document methods and events
|
|
||||||
|
|
||||||
doc_events = {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# Scheduled Tasks
|
|
||||||
# ---------------
|
|
||||||
#scheduler_events = {
|
|
||||||
# "daily": [
|
|
||||||
# "erpnext.stock.reorder_item.reorder_item"
|
|
||||||
# ]
|
|
||||||
#}
|
|
||||||
|
|
||||||
fixtures = ["Custom Field"]
|
|
||||||
|
|
||||||
# Testing
|
|
||||||
# -------
|
|
||||||
|
|
||||||
# before_tests = "community.install.before_tests"
|
|
||||||
|
|
||||||
# Overriding Methods
|
|
||||||
# ------------------------------
|
|
||||||
#
|
|
||||||
# override_whitelisted_methods = {
|
|
||||||
# "frappe.desk.doctype.event.event.get_events": "community.event.get_events"
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# each overriding function accepts a `data` argument;
|
|
||||||
# generated from the base implementation of the doctype dashboard,
|
|
||||||
# along with any modifications made in other Frappe apps
|
|
||||||
# override_doctype_dashboards = {
|
|
||||||
# "Task": "community.task.get_dashboard_data"
|
|
||||||
# }
|
|
||||||
|
|
||||||
# exempt linked doctypes from being automatically cancelled
|
|
||||||
#
|
|
||||||
# auto_cancel_exempted_doctypes = ["Auto Repeat"]
|
|
||||||
|
|
||||||
# Add all simple route rules here
|
|
||||||
primary_rules = [
|
|
||||||
{"from_route": "/sketches/<sketch>", "to_route": "sketches/sketch"},
|
|
||||||
{"from_route": "/courses/<course>", "to_route": "courses/course"},
|
|
||||||
{"from_route": "/courses/<course>/<topic>", "to_route": "courses/topic"},
|
|
||||||
{"from_route": "/hackathons/<hackathon>", "to_route": "hackathons/hackathon"},
|
|
||||||
{"from_route": "/hackathons/<hackathon>/<project>", "to_route": "hackathons/project"},
|
|
||||||
{"from_route": "/dashboard", "to_route": ""},
|
|
||||||
{"from_route": "/add-a-new-batch", "to_route": "add-a-new-batch"},
|
|
||||||
{"from_route": "/courses/<course>/home", "to_route": "batch/home"},
|
|
||||||
{"from_route": "/courses/<course>/learn", "to_route": "batch/learn"},
|
|
||||||
{"from_route": "/courses/<course>/learn/<int:chapter>.<int:lesson>", "to_route": "batch/learn"},
|
|
||||||
{"from_route": "/courses/<course>/schedule", "to_route": "batch/schedule"},
|
|
||||||
{"from_route": "/courses/<course>/members", "to_route": "batch/members"},
|
|
||||||
{"from_route": "/courses/<course>/discuss", "to_route": "batch/discuss"},
|
|
||||||
{"from_route": "/courses/<course>/about", "to_route": "batch/about"},
|
|
||||||
{"from_route": "/courses/<course>/progress", "to_route": "batch/progress"},
|
|
||||||
{"from_route": "/courses/<course>/join", "to_route": "batch/join"}
|
|
||||||
]
|
|
||||||
|
|
||||||
# Any frappe default URL is blocked by profile-rules, add it here to unblock it
|
|
||||||
whitelist = [
|
|
||||||
"/home",
|
|
||||||
"/login",
|
|
||||||
"/update-password",
|
|
||||||
"/update-profile",
|
|
||||||
"/third-party-apps",
|
|
||||||
"/website_script.js",
|
|
||||||
"/courses",
|
|
||||||
"/sketches",
|
|
||||||
"/admin",
|
|
||||||
"/socket.io",
|
|
||||||
"/hackathons",
|
|
||||||
"/dashboard",
|
|
||||||
"/join-request",
|
|
||||||
"/add-a-new-batch",
|
|
||||||
"/new-sign-up",
|
|
||||||
"/message",
|
|
||||||
"/about",
|
|
||||||
"/edit-profile"
|
|
||||||
]
|
|
||||||
whitelist_rules = [{"from_route": p, "to_route": p[1:]} for p in whitelist]
|
|
||||||
|
|
||||||
# regex rule to match all profiles
|
|
||||||
profile_rules = [
|
|
||||||
{"from_route": "/<string(minlength=4):username>", "to_route": "profiles/profile"},
|
|
||||||
]
|
|
||||||
|
|
||||||
website_route_rules = primary_rules + whitelist_rules + profile_rules
|
|
||||||
|
|
||||||
website_redirects = [
|
|
||||||
{"source": "/update-profile", "target": "/edit-profile"},
|
|
||||||
]
|
|
||||||
|
|
||||||
update_website_context = 'community.widgets.update_website_context'
|
|
||||||
|
|
||||||
## Specify the additional tabs to be included in the user profile page.
|
|
||||||
## Each entry must be a subclass of community.community.plugins.ProfileTab
|
|
||||||
# profile_tabs = []
|
|
||||||
|
|
||||||
## Specify the extension to be used to control what scripts and stylesheets
|
|
||||||
## to be included in lesson pages. The specified value must be be a
|
|
||||||
## subclass of community.community.plugins.PageExtension
|
|
||||||
# community_lesson_page_extension = None
|
|
||||||
|
|
||||||
community_lesson_page_extensions = [
|
|
||||||
"community.plugins.LiveCodeExtension"
|
|
||||||
]
|
|
||||||
|
|
||||||
## Markdown Macros for Lessons
|
|
||||||
community_markdown_macro_renderers = {
|
|
||||||
"Exercise": "community.plugins.exercise_renderer",
|
|
||||||
"Quiz": "community.plugins.quiz_renderer",
|
|
||||||
"YouTubeVideo": "community.plugins.youtube_video_renderer",
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
"""API methods for the LMS.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def autosave_section(section, code):
|
|
||||||
"""Saves the code edited in one of the sections.
|
|
||||||
"""
|
|
||||||
doc = frappe.get_doc(
|
|
||||||
doctype="Code Revision",
|
|
||||||
section=section,
|
|
||||||
code=code,
|
|
||||||
author=frappe.session.user)
|
|
||||||
doc.insert()
|
|
||||||
return {"name": doc.name}
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def submit_solution(exercise, code):
|
|
||||||
"""Submits a solution.
|
|
||||||
|
|
||||||
@exerecise: name of the exercise to submit
|
|
||||||
@code: solution to the exercise
|
|
||||||
"""
|
|
||||||
ex = frappe.get_doc("Exercise", exercise)
|
|
||||||
if not ex:
|
|
||||||
return
|
|
||||||
doc = ex.submit(code)
|
|
||||||
return {"name": doc.name, "creation": doc.creation}
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def save_current_lesson(course_name, lesson_name):
|
|
||||||
"""Saves the current lesson for a student/mentor.
|
|
||||||
"""
|
|
||||||
name = frappe.get_value(
|
|
||||||
doctype="LMS Batch Membership",
|
|
||||||
filters={
|
|
||||||
"course": course_name,
|
|
||||||
"member": frappe.session.user
|
|
||||||
},
|
|
||||||
fieldname="name")
|
|
||||||
if not name:
|
|
||||||
return
|
|
||||||
doc = frappe.get_doc("LMS Batch Membership", name)
|
|
||||||
doc.current_lesson = lesson_name
|
|
||||||
doc.save(ignore_permissions=True)
|
|
||||||
return {"current_lesson": doc.current_lesson}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
from ...utils import slugify
|
|
||||||
|
|
||||||
class Chapter(Document):
|
|
||||||
def get_lessons(self):
|
|
||||||
rows = frappe.db.get_all("Lesson",
|
|
||||||
filters={"chapter": self.name},
|
|
||||||
fields='name',
|
|
||||||
order_by="index_")
|
|
||||||
return [frappe.get_doc('Lesson', row['name']) for row in rows]
|
|
||||||
|
|
||||||
def get_slugified_chapter_title(self):
|
|
||||||
return slugify(self.title)
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
|
|
||||||
class Exercise(Document):
|
|
||||||
def get_user_submission(self):
|
|
||||||
"""Returns the latest submission for this user.
|
|
||||||
"""
|
|
||||||
user = frappe.session.user
|
|
||||||
if not user or user == "Guest":
|
|
||||||
return
|
|
||||||
|
|
||||||
result = frappe.get_all('Exercise Submission',
|
|
||||||
fields="*",
|
|
||||||
filters={
|
|
||||||
"owner": user,
|
|
||||||
"exercise": self.name
|
|
||||||
},
|
|
||||||
order_by="creation desc",
|
|
||||||
page_length=1)
|
|
||||||
|
|
||||||
if result:
|
|
||||||
return result[0]
|
|
||||||
|
|
||||||
def submit(self, code):
|
|
||||||
"""Submits the given code as solution to exercise.
|
|
||||||
"""
|
|
||||||
user = frappe.session.user
|
|
||||||
if not user or user == "Guest":
|
|
||||||
return
|
|
||||||
|
|
||||||
old_submission = self.get_user_submission()
|
|
||||||
if old_submission and old_submission.solution == code:
|
|
||||||
return old_submission
|
|
||||||
|
|
||||||
course = frappe.get_doc("LMS Course", self.course)
|
|
||||||
batch = course.get_student_batch(user)
|
|
||||||
|
|
||||||
doc = frappe.get_doc(
|
|
||||||
doctype="Exercise Submission",
|
|
||||||
exercise=self.name,
|
|
||||||
exercise_title=self.title,
|
|
||||||
course=self.course,
|
|
||||||
lesson=self.lesson,
|
|
||||||
batch=batch and batch.name,
|
|
||||||
solution=code)
|
|
||||||
doc.insert(ignore_permissions=True)
|
|
||||||
|
|
||||||
return doc
|
|
||||||
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
# Copyright (c) 2021, FOSS United and Contributors
|
|
||||||
# See license.txt
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestExercise(unittest.TestCase):
|
|
||||||
def setUp(self):
|
|
||||||
frappe.db.sql('delete from `tabExercise Submission`')
|
|
||||||
frappe.db.sql('delete from `tabExercise`')
|
|
||||||
frappe.db.sql('delete from `tabLMS Course`')
|
|
||||||
|
|
||||||
def new_exercise(self):
|
|
||||||
course = frappe.get_doc({
|
|
||||||
"doctype": "LMS Course",
|
|
||||||
"name": "test-course",
|
|
||||||
"title": "Test Course",
|
|
||||||
"short_introduction": "Test Course",
|
|
||||||
"description": "Test Course"
|
|
||||||
})
|
|
||||||
course.insert()
|
|
||||||
e = frappe.get_doc({
|
|
||||||
"doctype": "Exercise",
|
|
||||||
"name": "test-problem",
|
|
||||||
"course": course.name,
|
|
||||||
"title": "Test Problem",
|
|
||||||
"description": "draw a circle",
|
|
||||||
"code": "# draw a single cicle",
|
|
||||||
"answer": (
|
|
||||||
"# draw a single circle\n" +
|
|
||||||
"circle(100, 100, 50)")
|
|
||||||
})
|
|
||||||
e.insert()
|
|
||||||
return e
|
|
||||||
|
|
||||||
def test_exercise(self):
|
|
||||||
e = self.new_exercise()
|
|
||||||
assert e.get_user_submission() is None
|
|
||||||
|
|
||||||
def test_exercise_submission(self):
|
|
||||||
e = self.new_exercise()
|
|
||||||
submission = e.submit("circle(100, 100, 50)")
|
|
||||||
assert submission is not None
|
|
||||||
assert submission.exercise == e.name
|
|
||||||
assert submission.course == e.course
|
|
||||||
|
|
||||||
user_submission = e.get_user_submission()
|
|
||||||
assert user_submission is not None
|
|
||||||
assert user_submission.name == submission.name
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
from ..lesson.lesson import update_progress
|
|
||||||
|
|
||||||
class ExerciseSubmission(Document):
|
|
||||||
|
|
||||||
def after_insert(self):
|
|
||||||
course_details = frappe.get_doc("LMS Course", self.course)
|
|
||||||
if not (course_details.is_mentor(frappe.session.user) or frappe.flags.in_test):
|
|
||||||
update_progress(self.lesson)
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
// Copyright (c) 2021, FOSS United and contributors
|
|
||||||
// For license information, please see license.txt
|
|
||||||
|
|
||||||
frappe.ui.form.on('Invite Request', {
|
|
||||||
// refresh: function(frm) {
|
|
||||||
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
import frappe
|
|
||||||
from frappe import _
|
|
||||||
from frappe.model.document import Document
|
|
||||||
import json
|
|
||||||
from frappe.utils.password import get_decrypted_password
|
|
||||||
|
|
||||||
class InviteRequest(Document):
|
|
||||||
def on_update(self):
|
|
||||||
if self.has_value_changed("status") and self.status == "Approved":
|
|
||||||
self.send_email()
|
|
||||||
|
|
||||||
def create_user(self, password):
|
|
||||||
full_name_split = self.full_name.split(" ")
|
|
||||||
user = frappe.get_doc({
|
|
||||||
"doctype": "User",
|
|
||||||
"email": self.signup_email,
|
|
||||||
"first_name": full_name_split[0],
|
|
||||||
"last_name": full_name_split[1] if len(full_name_split) > 1 else "",
|
|
||||||
"username": self.username,
|
|
||||||
"send_welcome_email": 0,
|
|
||||||
"user_type": "Website User",
|
|
||||||
"new_password": password
|
|
||||||
})
|
|
||||||
user.save(ignore_permissions=True)
|
|
||||||
return user
|
|
||||||
|
|
||||||
def send_email(self):
|
|
||||||
site_name = "Mon.School"
|
|
||||||
subject = _("Welcome to {0}!").format(site_name)
|
|
||||||
|
|
||||||
args = {
|
|
||||||
"full_name": self.full_name,
|
|
||||||
"signup_form_link": "/new-sign-up?invite_code={0}".format(self.name),
|
|
||||||
"site_name": site_name,
|
|
||||||
"site_url": frappe.utils.get_url()
|
|
||||||
}
|
|
||||||
frappe.sendmail(
|
|
||||||
recipients=self.invite_email,
|
|
||||||
sender=frappe.db.get_single_value("LMS Settings", "email_sender"),
|
|
||||||
subject=subject,
|
|
||||||
header=[subject, "green"],
|
|
||||||
template = "lms_invite_request_approved",
|
|
||||||
args=args,
|
|
||||||
now=True)
|
|
||||||
|
|
||||||
@frappe.whitelist(allow_guest=True)
|
|
||||||
def create_invite_request(invite_email):
|
|
||||||
|
|
||||||
if not frappe.utils.validate_email_address(invite_email):
|
|
||||||
return "invalid email"
|
|
||||||
|
|
||||||
if frappe.db.exists("User", invite_email):
|
|
||||||
return "user"
|
|
||||||
|
|
||||||
if frappe.db.exists("Invite Request", {"invite_email": invite_email}):
|
|
||||||
return "invite"
|
|
||||||
|
|
||||||
frappe.get_doc({
|
|
||||||
"doctype": "Invite Request",
|
|
||||||
"invite_email": invite_email,
|
|
||||||
"status": "Approved"
|
|
||||||
}).save(ignore_permissions=True)
|
|
||||||
return "OK"
|
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist(allow_guest=True)
|
|
||||||
def update_invite(data):
|
|
||||||
data = frappe._dict(json.loads(data)) if type(data) == str else frappe._dict(data)
|
|
||||||
|
|
||||||
try:
|
|
||||||
doc = frappe.get_doc("Invite Request", data.invite_code)
|
|
||||||
except frappe.DoesNotExistError:
|
|
||||||
frappe.throw(_("Invalid Invite Code."))
|
|
||||||
|
|
||||||
doc.signup_email = data.signup_email
|
|
||||||
doc.username = data.username
|
|
||||||
doc.full_name = data.full_name
|
|
||||||
doc.invite_code = data.invite_code
|
|
||||||
doc.save(ignore_permissions=True)
|
|
||||||
|
|
||||||
user = doc.create_user(data.password)
|
|
||||||
if user:
|
|
||||||
doc.status = "Registered"
|
|
||||||
doc.save(ignore_permissions=True)
|
|
||||||
|
|
||||||
return "OK"
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
from community.lms.doctype.invite_request.invite_request import create_invite_request, update_invite
|
|
||||||
import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestInviteRequest(unittest.TestCase):
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def setUpClass(self):
|
|
||||||
create_invite_request("test_invite@example.com")
|
|
||||||
|
|
||||||
def test_create_invite_request(self):
|
|
||||||
if frappe.db.exists("Invite Request", {"invite_email": "test_invite@example.com"}):
|
|
||||||
invite = frappe.db.get_value("Invite Request",
|
|
||||||
filters={"invite_email": "test_invite@example.com"},
|
|
||||||
fieldname=["invite_email", "status", "signup_email"],
|
|
||||||
as_dict=True)
|
|
||||||
self.assertEqual(invite.status, "Approved")
|
|
||||||
self.assertEqual(invite.signup_email, None)
|
|
||||||
|
|
||||||
def test_create_invite_request_update(self):
|
|
||||||
if frappe.db.exists("Invite Request", {"invite_email": "test_invite@example.com"}):
|
|
||||||
|
|
||||||
data = {
|
|
||||||
"signup_email": "test_invite@example.com",
|
|
||||||
"username": "test_invite",
|
|
||||||
"full_name": "Test Invite",
|
|
||||||
"password": "Test@invite",
|
|
||||||
"invite_code": frappe.db.get_value("Invite Request", {"invite_email": "test_invite@example.com"}, "name")
|
|
||||||
}
|
|
||||||
|
|
||||||
update_invite(data)
|
|
||||||
invite = frappe.db.get_value("Invite Request",
|
|
||||||
filters={"invite_email": "test_invite@example.com"},
|
|
||||||
fieldname=["invite_email", "status", "signup_email", "full_name", "username", "invite_code", "name"],
|
|
||||||
as_dict=True)
|
|
||||||
self.assertEqual(invite.signup_email, "test_invite@example.com")
|
|
||||||
self.assertEqual(invite.full_name, "Test Invite")
|
|
||||||
self.assertEqual(invite.username, "test_invite")
|
|
||||||
self.assertEqual(invite.invite_code, invite.name)
|
|
||||||
self.assertEqual(invite.status, "Registered")
|
|
||||||
|
|
||||||
user = frappe.db.get_value("User", "test_invite@example.com",
|
|
||||||
fieldname=["first_name", "username", "send_welcome_email", "user_type"],
|
|
||||||
as_dict=True)
|
|
||||||
self.assertTrue(user)
|
|
||||||
self.assertEqual(user.first_name, invite.full_name.split(" ")[0])
|
|
||||||
self.assertEqual(user.username, invite.username)
|
|
||||||
self.assertEqual(user.send_welcome_email, 0)
|
|
||||||
self.assertEqual(user.user_type, "Website User")
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def tearDownClass(self):
|
|
||||||
if frappe.db.exists("User", "test_invite@example.com"):
|
|
||||||
frappe.delete_doc("User", "test_invite@example.com")
|
|
||||||
|
|
||||||
invite_request = frappe.db.exists("Invite Request", {"invite_email": "test_invite@example.com"})
|
|
||||||
if invite_request:
|
|
||||||
frappe.delete_doc("Invite Request", invite_request)
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
// Copyright (c) 2021, FOSS United and contributors
|
|
||||||
// For license information, please see license.txt
|
|
||||||
|
|
||||||
frappe.ui.form.on('Lesson', {
|
|
||||||
setup: function (frm) {
|
|
||||||
frm.trigger('setup_help');
|
|
||||||
},
|
|
||||||
setup_help(frm) {
|
|
||||||
frm.get_field('help').html(`
|
|
||||||
<p>You can add some more additional content to the lesson using a special syntax. The table below mentions all types of dynamic content that you can add to the lessons and the syntax for the same.</p>
|
|
||||||
<div class="row font-weight-bold mb-3">
|
|
||||||
<div class="col-sm-4">
|
|
||||||
Content Type
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
Syntax
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row mb-3">
|
|
||||||
<div class="col-sm-4">
|
|
||||||
YouTube Video
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
{{ YouTubeVideo("unique_embed_id") }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row mb-3">
|
|
||||||
<div class="col-sm-4">
|
|
||||||
Exercise
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
{{ Exercise("exercise_name") }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row mb-3">
|
|
||||||
<div class="col-sm-4">
|
|
||||||
Quiz
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
{{ Quiz("lms_quiz_name") }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [],
|
|
||||||
"autoname": "format:{####} {title}",
|
|
||||||
"creation": "2021-05-03 06:21:12.995987",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"chapter",
|
|
||||||
"include_in_preview",
|
|
||||||
"column_break_4",
|
|
||||||
"title",
|
|
||||||
"index_",
|
|
||||||
"index_label",
|
|
||||||
"section_break_6",
|
|
||||||
"body",
|
|
||||||
"help_section",
|
|
||||||
"help"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "chapter",
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Chapter",
|
|
||||||
"options": "Chapter"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "title",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Title"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": "1",
|
|
||||||
"fieldname": "index_",
|
|
||||||
"fieldtype": "Int",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Index"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "body",
|
|
||||||
"fieldtype": "Markdown Editor",
|
|
||||||
"label": "Body"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "index_label",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Index Label",
|
|
||||||
"read_only": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": "0",
|
|
||||||
"fieldname": "include_in_preview",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"label": "Include In Preview"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "section_break_6",
|
|
||||||
"fieldtype": "Section Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "column_break_4",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "help_section",
|
|
||||||
"fieldtype": "Section Break",
|
|
||||||
"label": "Help"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "help",
|
|
||||||
"fieldtype": "HTML"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"links": [],
|
|
||||||
"modified": "2021-06-29 13:34:49.077363",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "LMS",
|
|
||||||
"name": "Lesson",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"sort_field": "modified",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"track_changes": 1
|
|
||||||
}
|
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
from ...md import markdown_to_html, find_macros
|
|
||||||
|
|
||||||
class Lesson(Document):
|
|
||||||
def before_save(self):
|
|
||||||
dynamic_documents = ["Exercise", "Quiz"]
|
|
||||||
for section in dynamic_documents:
|
|
||||||
self.update_lesson_name_in_document(section)
|
|
||||||
|
|
||||||
def update_lesson_name_in_document(self, section):
|
|
||||||
doctype_map= {
|
|
||||||
"Exercise": "Exercise",
|
|
||||||
"Quiz": "LMS Quiz"
|
|
||||||
}
|
|
||||||
macros = find_macros(self.body)
|
|
||||||
documents = [value for name, value in macros if name == section]
|
|
||||||
index = 1
|
|
||||||
for name in documents:
|
|
||||||
e = frappe.get_doc(doctype_map[section], name)
|
|
||||||
e.lesson = self.name
|
|
||||||
e.index_ = index
|
|
||||||
e.save()
|
|
||||||
index += 1
|
|
||||||
self.update_orphan_documents(doctype_map[section], documents)
|
|
||||||
|
|
||||||
def update_orphan_documents(self, doctype, documents):
|
|
||||||
"""Updates the documents that were previously part of this lesson,
|
|
||||||
but not any more.
|
|
||||||
"""
|
|
||||||
linked_documents = {row['name'] for row in frappe.get_all(doctype, {"lesson": self.name})}
|
|
||||||
active_documents = set(documents)
|
|
||||||
orphan_documents = linked_documents - active_documents
|
|
||||||
for name in orphan_documents:
|
|
||||||
ex = frappe.get_doc(doctype, name)
|
|
||||||
ex.lesson = None
|
|
||||||
ex.index_ = 0
|
|
||||||
ex.index_label = ""
|
|
||||||
ex.save()
|
|
||||||
|
|
||||||
def render_html(self):
|
|
||||||
return markdown_to_html(self.body)
|
|
||||||
|
|
||||||
def get_exercises(self):
|
|
||||||
if not self.body:
|
|
||||||
return []
|
|
||||||
|
|
||||||
macros = find_macros(self.body)
|
|
||||||
exercises = [value for name, value in macros if name == "Exercise"]
|
|
||||||
return [frappe.get_doc("Exercise", name) for name in exercises]
|
|
||||||
|
|
||||||
def get_progress(self):
|
|
||||||
return frappe.db.get_value("LMS Course Progress", {"lesson": self.name, "owner": frappe.session.user}, "status")
|
|
||||||
|
|
||||||
def get_slugified_class(self):
|
|
||||||
if self.get_progress():
|
|
||||||
return ("").join([ s for s in self.get_progress().lower().split() ])
|
|
||||||
return
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def save_progress(lesson, course, status):
|
|
||||||
if not frappe.db.exists("LMS Batch Membership",
|
|
||||||
{
|
|
||||||
"member": frappe.session.user,
|
|
||||||
"course": course
|
|
||||||
}):
|
|
||||||
return
|
|
||||||
|
|
||||||
if frappe.db.exists("LMS Course Progress",
|
|
||||||
{
|
|
||||||
"lesson": lesson,
|
|
||||||
"owner": frappe.session.user,
|
|
||||||
"course": course
|
|
||||||
}):
|
|
||||||
doc = frappe.get_doc("LMS Course Progress",
|
|
||||||
{
|
|
||||||
"lesson": lesson,
|
|
||||||
"owner": frappe.session.user,
|
|
||||||
"course": course
|
|
||||||
})
|
|
||||||
doc.status = status
|
|
||||||
doc.save(ignore_permissions=True)
|
|
||||||
else:
|
|
||||||
frappe.get_doc({
|
|
||||||
"doctype": "LMS Course Progress",
|
|
||||||
"lesson": lesson,
|
|
||||||
"status": status,
|
|
||||||
}).save(ignore_permissions=True)
|
|
||||||
return "OK"
|
|
||||||
|
|
||||||
def update_progress(lesson):
|
|
||||||
user = frappe.session.user
|
|
||||||
if not all_dynamic_content_submitted(lesson, user):
|
|
||||||
return
|
|
||||||
if frappe.db.exists("LMS Course Progress", {"lesson": lesson, "owner": user}):
|
|
||||||
course_progress = frappe.get_doc("LMS Course Progress", {"lesson": lesson, "owner": user})
|
|
||||||
course_progress.status = "Complete"
|
|
||||||
course_progress.save(ignore_permissions=True)
|
|
||||||
|
|
||||||
def all_dynamic_content_submitted(lesson, user):
|
|
||||||
all_exercises_submitted = check_all_exercise_submission(lesson, user)
|
|
||||||
all_quiz_submitted = check_all_quiz_submitted(lesson, user)
|
|
||||||
return all_exercises_submitted and all_quiz_submitted
|
|
||||||
|
|
||||||
def check_all_exercise_submission(lesson, user):
|
|
||||||
exercise_names = frappe.get_list("Exercise", {"lesson": lesson}, pluck="name", ignore_permissions=True)
|
|
||||||
if not len(exercise_names):
|
|
||||||
return True
|
|
||||||
query = {
|
|
||||||
"exercise": ["in", exercise_names],
|
|
||||||
"owner": user
|
|
||||||
}
|
|
||||||
if frappe.db.count("Exercise Submission", query) == len(exercise_names):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def check_all_quiz_submitted(lesson, user):
|
|
||||||
quizzes = frappe.get_list("LMS Quiz", {"lesson": lesson}, pluck="name", ignore_permissions=True)
|
|
||||||
if not len(quizzes):
|
|
||||||
return True
|
|
||||||
query = {
|
|
||||||
"quiz": ["in", quizzes],
|
|
||||||
"owner": user
|
|
||||||
}
|
|
||||||
if frappe.db.count("LMS Quiz Submission", query) == len(quizzes):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
from frappe import _
|
|
||||||
from community.lms.doctype.lms_batch_membership.lms_batch_membership import create_membership
|
|
||||||
from community.query import find, find_all
|
|
||||||
|
|
||||||
class LMSBatch(Document):
|
|
||||||
def validate(self):
|
|
||||||
self.validate_if_mentor()
|
|
||||||
|
|
||||||
def validate_if_mentor(self):
|
|
||||||
course = frappe.get_doc("LMS Course", self.course)
|
|
||||||
if not course.is_mentor(frappe.session.user):
|
|
||||||
frappe.throw(_("You are not a mentor of the course {0}").format(course.title))
|
|
||||||
|
|
||||||
def after_insert(self):
|
|
||||||
create_membership(batch=self.name, course=self.course, member_type="Mentor")
|
|
||||||
|
|
||||||
def is_member(self, email, member_type=None):
|
|
||||||
"""Checks if a person is part of a batch.
|
|
||||||
|
|
||||||
If member_type is specified, checks if the person is a Student/Mentor.
|
|
||||||
"""
|
|
||||||
|
|
||||||
filters = {
|
|
||||||
"batch": self.name,
|
|
||||||
"member": email
|
|
||||||
}
|
|
||||||
if member_type:
|
|
||||||
filters['member_type'] = member_type
|
|
||||||
return frappe.db.exists("LMS Batch Membership", filters)
|
|
||||||
|
|
||||||
def get_messages(self):
|
|
||||||
messages = frappe.get_all("LMS Message", {"batch": self.name}, ["*"], order_by="creation")
|
|
||||||
for message in messages:
|
|
||||||
message.message = frappe.utils.md_to_html(message.message)
|
|
||||||
if message.author == frappe.session.user:
|
|
||||||
message.author_name = "You"
|
|
||||||
message.is_author = True
|
|
||||||
return messages
|
|
||||||
|
|
||||||
def get_membership(self, email):
|
|
||||||
"""Returns the membership document of given user.
|
|
||||||
"""
|
|
||||||
name = frappe.get_value(
|
|
||||||
doctype="LMS Batch Membership",
|
|
||||||
filters={
|
|
||||||
"batch": self.name,
|
|
||||||
"member": email
|
|
||||||
},
|
|
||||||
fieldname="name")
|
|
||||||
return frappe.get_doc("LMS Batch Membership", name)
|
|
||||||
|
|
||||||
def get_current_lesson(self, user):
|
|
||||||
"""Returns the name of the current lesson for the given user.
|
|
||||||
"""
|
|
||||||
membership = self.get_membership(user)
|
|
||||||
return membership and membership.current_lesson
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def save_message(message, batch):
|
|
||||||
doc = frappe.get_doc({
|
|
||||||
"doctype": "LMS Message",
|
|
||||||
"batch": batch,
|
|
||||||
"author": frappe.session.user,
|
|
||||||
"message": message
|
|
||||||
})
|
|
||||||
doc.save(ignore_permissions=True)
|
|
||||||
|
|
||||||
def switch_batch(course_name, email, batch_name):
|
|
||||||
"""Switches the user from the current batch of the course to a new batch.
|
|
||||||
"""
|
|
||||||
membership = frappe.get_last_doc(
|
|
||||||
"LMS Batch Membership",
|
|
||||||
filters={"course": course_name, "member": email})
|
|
||||||
|
|
||||||
batch = frappe.get_doc("LMS Batch", batch_name)
|
|
||||||
if not batch:
|
|
||||||
raise ValueError(f"Invalid Batch: {batch_name}")
|
|
||||||
|
|
||||||
if batch.course != course_name:
|
|
||||||
raise ValueError("Can not switch batches across courses")
|
|
||||||
|
|
||||||
if batch.is_member(email):
|
|
||||||
print(f"{email} is already a member of {batch.title}")
|
|
||||||
return
|
|
||||||
|
|
||||||
old_batch = frappe.get_doc("LMS Batch", membership.batch)
|
|
||||||
|
|
||||||
print("updating membership", membership.name)
|
|
||||||
membership.batch = batch_name
|
|
||||||
membership.save()
|
|
||||||
|
|
||||||
# update exercise submissions
|
|
||||||
filters = {
|
|
||||||
"owner": email,
|
|
||||||
"batch": old_batch.name
|
|
||||||
}
|
|
||||||
for name in frappe.db.get_all("Exercise Submission", filters=filters, pluck='name'):
|
|
||||||
doc = frappe.get_doc("Exercise Submission", name)
|
|
||||||
print("updating exercise submission", name)
|
|
||||||
doc.batch = batch_name
|
|
||||||
doc.save()
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
// Copyright (c) 2021, FOSS United and contributors
|
|
||||||
// For license information, please see license.txt
|
|
||||||
|
|
||||||
frappe.ui.form.on('LMS Batch Membership', {
|
|
||||||
onload: function(frm) {
|
|
||||||
frm.set_query('member', function(doc) {
|
|
||||||
return {
|
|
||||||
filters: {
|
|
||||||
"ignore_user_type": 1,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and contributors
|
|
||||||
# For license information, please see license.txt
|
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
import frappe
|
|
||||||
from frappe.model.document import Document
|
|
||||||
from frappe import _
|
|
||||||
|
|
||||||
class LMSBatchMembership(Document):
|
|
||||||
|
|
||||||
def validate(self):
|
|
||||||
self.validate_membership_in_same_batch()
|
|
||||||
self.validate_membership_in_different_batch_same_course()
|
|
||||||
|
|
||||||
def validate_membership_in_same_batch(self):
|
|
||||||
filters={
|
|
||||||
"member": self.member,
|
|
||||||
"course": self.course,
|
|
||||||
"name": ["!=", self.name]
|
|
||||||
}
|
|
||||||
if self.batch:
|
|
||||||
filters["batch"] = self.batch
|
|
||||||
previous_membership = frappe.db.get_value("LMS Batch Membership",
|
|
||||||
filters,
|
|
||||||
fieldname=["member_type","member"],
|
|
||||||
as_dict=1)
|
|
||||||
|
|
||||||
if previous_membership:
|
|
||||||
member_name = frappe.db.get_value("User", self.member, "full_name")
|
|
||||||
course_title = frappe.db.get_value("LMS Course", self.course, "title")
|
|
||||||
frappe.throw(_("{0} is already a {1} of the course {2}").format(member_name, previous_membership.member_type, course_title))
|
|
||||||
|
|
||||||
def validate_membership_in_different_batch_same_course(self):
|
|
||||||
"""Ensures that a studnet is only part of one batch.
|
|
||||||
"""
|
|
||||||
# nothing to worry if the member is not a student
|
|
||||||
if self.member_type != "Student":
|
|
||||||
return
|
|
||||||
|
|
||||||
course = frappe.db.get_value("LMS Batch", self.batch, "course")
|
|
||||||
memberships = frappe.get_all(
|
|
||||||
"LMS Batch Membership",
|
|
||||||
filters={
|
|
||||||
"member": self.member,
|
|
||||||
"name": ["!=", self.name],
|
|
||||||
"member_type": "Student",
|
|
||||||
"course": self.course
|
|
||||||
},
|
|
||||||
fields=["batch", "member_type", "name"]
|
|
||||||
)
|
|
||||||
|
|
||||||
if memberships:
|
|
||||||
membership = memberships[0]
|
|
||||||
member_name = frappe.db.get_value("User", self.member, "full_name")
|
|
||||||
frappe.throw(_("{0} is already a Student of {1} course through {2} batch").format(member_name, course, membership.batch))
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def create_membership(course, batch=None, member=None, member_type="Student", role="Member"):
|
|
||||||
frappe.get_doc({
|
|
||||||
"doctype": "LMS Batch Membership",
|
|
||||||
"batch": batch,
|
|
||||||
"course": course,
|
|
||||||
"role": role,
|
|
||||||
"member_type": member_type,
|
|
||||||
"member": member or frappe.session.user
|
|
||||||
}).save(ignore_permissions=True)
|
|
||||||
return "OK"
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def update_current_membership(batch, course, member):
|
|
||||||
all_memberships = frappe.get_all("LMS Batch Membership", {"member": member, "course": course})
|
|
||||||
for membership in all_memberships:
|
|
||||||
frappe.db.set_value("LMS Batch Membership", membership.name, "is_current", 0)
|
|
||||||
|
|
||||||
current_membership = frappe.get_all("LMS Batch Membership", {"batch": batch, "member": member})
|
|
||||||
if len(current_membership):
|
|
||||||
frappe.db.set_value("LMS Batch Membership", current_membership[0].name, "is_current", 1)
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright (c) 2021, FOSS United and Contributors
|
|
||||||
# See license.txt
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import frappe
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
class TestLMSBatchMembership(unittest.TestCase):
|
|
||||||
def setUp(self):
|
|
||||||
frappe.db.sql("DELETE FROM `tabLMS Batch Membership`")
|
|
||||||
frappe.db.sql("DELETE FROM `tabLMS Batch`")
|
|
||||||
frappe.db.sql('delete from `tabLMS Course Mentor Mapping`')
|
|
||||||
frappe.db.sql("DELETE FROM `tabLMS Course`")
|
|
||||||
frappe.db.sql("DELETE FROM `tabUser` where email like '%@test.com'")
|
|
||||||
|
|
||||||
def new_course_batch(self):
|
|
||||||
course = frappe.get_doc({
|
|
||||||
"doctype": "LMS Course",
|
|
||||||
"name": "test-course",
|
|
||||||
"title": "Test Course",
|
|
||||||
"short_code": "XX",
|
|
||||||
"short_introduction": "Test Course",
|
|
||||||
"description": "Test Course"
|
|
||||||
})
|
|
||||||
course.insert()
|
|
||||||
|
|
||||||
self.new_user("mentor@test.com", "Test Mentor")
|
|
||||||
# without this, the creating batch will fail
|
|
||||||
course.add_mentor("mentor@test.com")
|
|
||||||
|
|
||||||
frappe.session.user = "mentor@test.com"
|
|
||||||
|
|
||||||
batch = frappe.get_doc({
|
|
||||||
"doctype": "LMS Batch",
|
|
||||||
"name": "test-batch",
|
|
||||||
"title": "Test Batch",
|
|
||||||
"course": course.name
|
|
||||||
})
|
|
||||||
batch.insert(ignore_permissions=True)
|
|
||||||
|
|
||||||
frappe.session.user = "Administrator"
|
|
||||||
return course, batch
|
|
||||||
|
|
||||||
def new_user(self, email="test@test.com", full_name="Test User"):
|
|
||||||
user = frappe.get_doc({
|
|
||||||
"doctype": "User",
|
|
||||||
"name": email,
|
|
||||||
"email": email,
|
|
||||||
"first_name": full_name,
|
|
||||||
})
|
|
||||||
user.insert()
|
|
||||||
return user
|
|
||||||
|
|
||||||
def add_membership(self, batch_name, member_name, member_type="Student"):
|
|
||||||
doc = frappe.get_doc({
|
|
||||||
"doctype": "LMS Batch Membership",
|
|
||||||
"batch": batch_name,
|
|
||||||
"member": member_name,
|
|
||||||
"member_type": member_type
|
|
||||||
})
|
|
||||||
doc.insert()
|
|
||||||
return doc
|
|
||||||
|
|
||||||
def test_membership(self):
|
|
||||||
course, batch = self.new_course_batch()
|
|
||||||
member = self.new_user("test01@test.com")
|
|
||||||
membership = self.add_membership(batch.name, member.name)
|
|
||||||
|
|
||||||
assert membership.course == course.name
|
|
||||||
assert membership.member_name == member.full_name
|
|
||||||
|
|
||||||
def test_membership_change_role(self):
|
|
||||||
course, batch = self.new_course_batch()
|
|
||||||
member = self.new_user("test01@test.com")
|
|
||||||
membership = self.add_membership(batch.name, member.name)
|
|
||||||
|
|
||||||
# it should be possible to change role
|
|
||||||
membership.role = "Admin"
|
|
||||||
membership.save()
|
|
||||||
@@ -1,146 +0,0 @@
|
|||||||
{
|
|
||||||
"actions": [
|
|
||||||
{
|
|
||||||
"action": "community.lms.doctype.lms_course.lms_course.reindex_lessons",
|
|
||||||
"action_type": "Server Action",
|
|
||||||
"group": "Reindex",
|
|
||||||
"label": "Reindex Lessons"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"action": "community.lms.doctype.lms_course.lms_course.reindex_exercises",
|
|
||||||
"action_type": "Server Action",
|
|
||||||
"group": "Reindex",
|
|
||||||
"label": "Reindex Exercises"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"allow_guest_to_view": 1,
|
|
||||||
"allow_rename": 1,
|
|
||||||
"creation": "2021-03-01 16:49:33.622422",
|
|
||||||
"doctype": "DocType",
|
|
||||||
"editable_grid": 1,
|
|
||||||
"engine": "InnoDB",
|
|
||||||
"field_order": [
|
|
||||||
"title",
|
|
||||||
"short_code",
|
|
||||||
"video_link",
|
|
||||||
"column_break_3",
|
|
||||||
"is_published",
|
|
||||||
"disable_self_learning",
|
|
||||||
"image",
|
|
||||||
"section_break_5",
|
|
||||||
"tags",
|
|
||||||
"short_introduction",
|
|
||||||
"description"
|
|
||||||
],
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldname": "title",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"in_list_view": 1,
|
|
||||||
"label": "Title",
|
|
||||||
"reqd": 1,
|
|
||||||
"unique": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "description",
|
|
||||||
"fieldtype": "Markdown Editor",
|
|
||||||
"label": "Description",
|
|
||||||
"reqd": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": "0",
|
|
||||||
"fieldname": "is_published",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"label": "Published"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "short_code",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Short Code"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "column_break_3",
|
|
||||||
"fieldtype": "Column Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "video_link",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Video Embed Link"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "section_break_5",
|
|
||||||
"fieldtype": "Section Break"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "short_introduction",
|
|
||||||
"fieldtype": "Small Text",
|
|
||||||
"label": "Short Introduction",
|
|
||||||
"reqd": 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"default": "0",
|
|
||||||
"fieldname": "disable_self_learning",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"label": "Disable Self Learning"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "image",
|
|
||||||
"fieldtype": "Attach Image",
|
|
||||||
"label": "Preview Image"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldname": "tags",
|
|
||||||
"fieldtype": "Data",
|
|
||||||
"label": "Tags"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"index_web_pages_for_search": 1,
|
|
||||||
"is_published_field": "is_published",
|
|
||||||
"links": [
|
|
||||||
{
|
|
||||||
"group": "Chapters",
|
|
||||||
"link_doctype": "Chapter",
|
|
||||||
"link_fieldname": "course"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"group": "Batches",
|
|
||||||
"link_doctype": "LMS Batch",
|
|
||||||
"link_fieldname": "course"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"group": "Mentors",
|
|
||||||
"link_doctype": "LMS Course Mentor Mapping",
|
|
||||||
"link_fieldname": "course"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"group": "Mentors",
|
|
||||||
"link_doctype": "LMS Mentor Request",
|
|
||||||
"link_fieldname": "course"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"modified": "2021-07-09 15:05:05.372430",
|
|
||||||
"modified_by": "Administrator",
|
|
||||||
"module": "LMS",
|
|
||||||
"name": "LMS Course",
|
|
||||||
"owner": "Administrator",
|
|
||||||
"permissions": [
|
|
||||||
{
|
|
||||||
"create": 1,
|
|
||||||
"delete": 1,
|
|
||||||
"email": 1,
|
|
||||||
"export": 1,
|
|
||||||
"print": 1,
|
|
||||||
"read": 1,
|
|
||||||
"report": 1,
|
|
||||||
"role": "System Manager",
|
|
||||||
"share": 1,
|
|
||||||
"write": 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"search_fields": "title",
|
|
||||||
"sort_field": "creation",
|
|
||||||
"sort_order": "DESC",
|
|
||||||
"title_field": "title",
|
|
||||||
"track_changes": 1,
|
|
||||||
"track_views": 1
|
|
||||||
}
|
|
||||||