Compare commits

...

176 Commits

Author SHA1 Message Date
Jannat Patel
f5af07086b Merge branch 'main' of https://github.com/frappe/school into rename-app-to-school 2021-10-19 19:20:31 +05:30
Jannat Patel
4d534db63f Merge pull request #241 from pateljannat/fix-styles 2021-10-19 19:18:46 +05:30
Jannat Patel
aec69e96cb fix: style for certificate button and card responsive 2021-10-19 19:09:42 +05:30
Jannat Patel
6172b09aa3 fix: conflicts 2021-10-19 12:37:16 +05:30
Jannat Patel
98c386729c Merge pull request #240 from pateljannat/fix-translation-issue 2021-10-18 13:29:58 +05:30
Jannat Patel
91ebcd8253 fix: translation issue 2021-10-18 13:28:48 +05:30
Jannat Patel
3a51299e8d Merge pull request #239 from pateljannat/fix-rating-issue 2021-10-18 13:18:26 +05:30
Jannat Patel
eaa8876f4e fix: made quotes same throughout file 2021-10-18 13:13:19 +05:30
Jannat Patel
7d80178b48 fix: allow import on course chapter lesson quiz 2021-10-18 13:02:11 +05:30
Jannat Patel
8090f2f397 fix: made strings translatable 2021-10-18 12:43:34 +05:30
Jannat Patel
bf986e26bc fix: rating issue 2021-10-18 12:24:37 +05:30
Jannat Patel
c95d957d2c refactor: build file and patch 2021-10-13 13:51:41 +05:30
Jannat Patel
b1aaddae59 Merge pull request #235 from anandology/fix-reindex-exercises
fix: error on reindex-exercises
2021-10-12 17:23:13 +05:30
Anand Chitipothu
8fe9bad2bb fix: error on reindex-exercises
Issue fossunited/mon_school#69
2021-10-12 12:38:26 +05:30
Jannat Patel
23dab6312d Merge pull request #233 from pateljannat/quiz-question-length-issue
fix: quiz question length issue
2021-10-12 10:48:32 +05:30
Jannat Patel
c91b1a7a23 fix: quiz question length issue 2021-10-12 10:34:15 +05:30
Jannat Patel
d07dbcc50a refactor: renamed app to school 2021-10-11 20:31:27 +05:30
Jannat Patel
49771a627d Merge pull request #232 from anandology/ignore-xss-for-lesson
fix: fixed the issue of lesson body getting mangled on save
2021-10-11 17:13:50 +05:30
Anand Chitipothu
25ec4ae7c6 fix: fixed the issue of lesson body getting mangled on save
enabled `ignore_xss_filter` for lesson body to disable sanitizing the
input.

Issue #231
2021-10-11 15:34:16 +05:30
Jannat Patel
13022e0bcc Merge pull request #229 from pateljannat/ix-profile-cards 2021-10-08 20:34:58 +05:30
pateljannat
cdc4b6992d fix: clickable course cards from profile page 2021-10-08 20:28:06 +05:30
Jannat Patel
f178f3806d Merge pull request #224 from pateljannat/change-patch-sequence 2021-10-06 21:52:34 +05:30
pateljannat
d84f621813 fix: patch sequence 2021-10-06 21:33:13 +05:30
Jannat Patel
7ba2ac1efd Merge pull request #222 from pateljannat/ci-fix 2021-10-04 13:39:51 +05:30
Jannat Patel
658a9e6172 fix: path to frappe-bench 2021-10-04 13:26:06 +05:30
Jannat Patel
0b44e78cc2 fix: removed frappe-path 2021-10-04 13:20:08 +05:30
Jannat Patel
1c5766d022 Merge pull request #205 from pateljannat/discussions-shift 2021-10-04 13:10:56 +05:30
pateljannat
3bff000cc9 fix: bench init command 2021-10-04 12:21:02 +05:30
pateljannat
30a8750f16 fix: ci 2021-10-04 10:34:47 +05:30
pateljannat
f3ad3f6d18 Merge branch 'main' of https://github.com/fossunited/community into discussions-shift 2021-10-03 12:12:31 +05:30
Jannat Patel
65a7dde47b Merge pull request #221 from pateljannat/fix-progress-api 2021-10-02 19:50:02 +05:30
pateljannat
38ebab59c7 fix: api call for progress save 2021-10-02 19:39:27 +05:30
Jannat Patel
b7f79b4832 Merge pull request #217 from pateljannat/remove-unused-doctypes 2021-10-02 19:00:21 +05:30
pateljannat
876a2f562f fix: conflicts 2021-10-02 18:54:05 +05:30
Jannat Patel
5f4fc2fb59 Merge pull request #219 from pateljannat/reload-doctypes-in-patch
fix: relaod doctypes in patch
2021-10-02 13:25:41 +05:30
pateljannat
44e8efd39b fix: relaod doctypes in patch 2021-10-02 13:12:04 +05:30
Jannat Patel
51c625da4d Merge pull request #218 from pateljannat/courses-page-headings 2021-10-01 19:40:50 +05:30
pateljannat
a795cd23a8 fix: conflicts 2021-10-01 11:52:20 +05:30
pateljannat
ebc3cf1cbf feat: live and upcoming course headers 2021-09-30 18:31:41 +05:30
pateljannat
c717b3ba9d fix: removed unused folders 2021-09-30 17:54:59 +05:30
pateljannat
0ed3c87f79 fix: conflicts 2021-09-30 17:36:15 +05:30
Jannat Patel
9499700988 Merge pull request #216 from pateljannat/rename-chapters-and-lessons
fix: renamed chapter and lesson doctype
2021-09-30 17:17:42 +05:30
pateljannat
8366721643 fix: indentation 2021-09-30 17:09:35 +05:30
pateljannat
66afd0fcdd fix: remove unused doctype 2021-09-30 16:20:44 +05:30
pateljannat
a105a1d3b4 fix: removed chapter and lesson links 2021-09-30 15:04:19 +05:30
pateljannat
5488947922 fix: rename parenttype for lesson reference 2021-09-30 11:27:27 +05:30
Jannat Patel
aa466f9fb7 Merge pull request #215 from fossunited/duplicate-course-interest 2021-09-30 11:24:59 +05:30
pateljannat
b3840e056f fix: naming series 2021-09-29 19:37:37 +05:30
pateljannat
ddffc8372b fix: condition to check course and chapter 2021-09-29 17:55:08 +05:30
pateljannat
dc877a9c09 fix: renamed chapter and lesson doctype 2021-09-29 16:42:07 +05:30
Anand Chitipothu
04d2384283 fix: avoid creating duplicate entries of LMS Course Interest 2021-09-29 13:34:38 +05:30
Jannat Patel
50938afe77 Merge pull request #214 from pateljannat/course-progress-report
feat: course progress summary
2021-09-28 20:10:00 +05:30
pateljannat
ea6bd1f598 fix: columns 2021-09-28 19:58:07 +05:30
pateljannat
fb0f9885c1 feat: course progress summary 2021-09-28 18:03:12 +05:30
pateljannat
4248a3af07 Merge branch 'main' of https://github.com/fossunited/community into discussions-shift 2021-09-28 11:16:46 +05:30
pateljannat
a3dc2402f7 fix: semicolon 2021-09-28 11:16:42 +05:30
Jannat Patel
153b439510 Merge pull request #211 from pateljannat/preview-message
fix: preview message
2021-09-27 13:00:46 +05:30
pateljannat
06b925435d fix: preview message 2021-09-27 12:46:11 +05:30
pateljannat
93c2c3cc45 fix: conflicts 2021-09-21 12:38:43 +05:30
Jannat Patel
04a3d58028 Merge pull request #210 from pateljannat/patch-for-chapters-and-lessons
fix: Patch for chapters and lessons
2021-09-21 10:21:31 +05:30
Jannat Patel
8551cfa32e fix: check if present before adding 2021-09-20 21:40:49 +05:30
Jannat Patel
b19c7f2fac fix: move data between doctypes 2021-09-20 18:11:19 +05:30
Jannat Patel
d135338088 fix: patch 2021-09-20 17:49:13 +05:30
Jannat Patel
b8fae5cd28 Merge pull request #209 from pateljannat/username-validation
fix: Username validation
2021-09-20 15:23:18 +05:30
Jannat Patel
29fe75d807 fix: regex in page renderer 2021-09-20 15:12:23 +05:30
Jannat Patel
1dbbf7c769 Merge branch 'main' of https://github.com/fossunited/community into username-validation 2021-09-20 13:44:51 +05:30
Jannat Patel
3be20b5658 Merge pull request #208 from pateljannat/misc
fix: minor issues
2021-09-20 12:26:59 +05:30
Jannat Patel
73b6ddf365 fix: deleted unnecessary file 2021-09-20 12:21:40 +05:30
Jannat Patel
64048a8a18 fix: minor issues 2021-09-20 12:10:35 +05:30
Jannat Patel
e245af57a8 fix: regex change for username 2021-09-19 19:15:45 +05:30
Jannat Patel
0ab708396a Merge pull request #207 from pateljannat/fixes
fix: issues
2021-09-16 18:21:58 +05:30
Jannat Patel
29855a0cbc fix: issues 2021-09-16 18:04:03 +05:30
Jannat Patel
ff6457171f Merge pull request #206 from kennethsequeira/patch-1
fix: spell check in Validation Message
2021-09-16 16:35:13 +05:30
Kenneth Sequeira
9fd59b5d38 fix: spell check in Validation Message
Change unedrscore to underscore
2021-09-16 15:59:32 +05:30
Jannat Patel
c750c62993 fix: style and message 2021-09-16 13:26:11 +05:30
Jannat Patel
a0d90ab16b fix: conflicts 2021-09-14 18:36:21 +05:30
Jannat Patel
af15d978c6 Merge pull request #204 from pateljannat/discussions-markdown-support
fix: discussions markdown support
2021-09-14 16:38:02 +05:30
Jannat Patel
f4271e7c0e fix: discussions markdown support 2021-09-14 16:22:56 +05:30
Jannat Patel
0440e1062d fix: shifting discussions from community app 2021-09-14 15:58:12 +05:30
Jannat Patel
2bc30d696a Merge pull request #203 from pateljannat/certification-redesign
fix: certificate-redesign
2021-09-11 11:21:07 +05:30
Jannat Patel
6dcd210031 certificate-redesign 2021-09-11 11:09:28 +05:30
Jannat Patel
c78c4c92b7 Merge pull request #200 from pateljannat/progress-indicators-and-dashboard
fix: profile and progress on dashboard
2021-09-10 19:52:16 +05:30
Jannat Patel
6a2c749a86 fix: formatting 2021-09-10 19:46:48 +05:30
Jan Doe
56d738474a fix: course card buttons 2021-09-10 18:54:27 +05:30
Jan Doe
7721f31342 fix: profile urls 2021-09-09 15:34:39 +05:30
Jan Doe
90e268ff2f fix: conflicts 2021-09-09 11:01:59 +05:30
Jannat Patel
69bdb75625 Merge pull request #202 from fossunited/profile-urls
Added support for making profile urls to be top-level
2021-09-09 10:26:23 +05:30
Anand Chitipothu
a0b77f5d08 feat: added get_profile_url function to get the profile url in templates
This takes care of generating the correct profile URL depending on the
`profile_url_prefix` setting.

Issue #192
2021-09-07 17:58:09 +05:30
Anand Chitipothu
77c4b53b71 feat: added redirect rule to redirect /profile_/foo to the profile url
Hack to allow redirecting to profile url from JS as it doesn't know
the `profile_url_prefix`.

Issue #192
2021-09-07 17:58:09 +05:30
Anand Chitipothu
035a674cff feat: added support for making profile urls to be top-level
Made the profile_url_prefix customizable by adding it in the hooks.

Issue #192
2021-09-07 17:58:04 +05:30
pateljannat
b9736cc6d6 fix: conflicts 2021-09-06 19:35:32 +05:30
Jannat Patel
f52e5067b6 Merge pull request #201 from pateljannat/discussion-second-cut
fix: Discussions Redesign
2021-09-06 19:29:40 +05:30
pateljannat
d657525359 fix: discussions redesign 2021-09-06 18:59:59 +05:30
pateljannat
3a2ebd42a7 fix: progress pill and certificate secondary cta 2021-09-02 13:26:45 +05:30
pateljannat
916e64d607 feat: discussions sidebar 2021-09-02 10:47:35 +05:30
pateljannat
e0b25c1e6e fix: certificate link 2021-09-01 16:50:27 +05:30
pateljannat
13b968e18c fix: profile and progress on dashboard 2021-09-01 16:21:55 +05:30
pateljannat
9e1daf5062 fix: reply card ui 2021-08-31 19:17:00 +05:30
pateljannat
941a34784c Merge branch 'main' of https://github.com/fossunited/community into discussion-second-cut 2021-08-31 17:38:13 +05:30
Jannat Patel
cd4ffa2eff Merge pull request #199 from pateljannat/certificate-ui
fix: certificate ui
2021-08-31 16:31:14 +05:30
pateljannat
17a7af74f2 fix: certificate ui 2021-08-31 16:19:41 +05:30
Jannat Patel
ff22eaa606 Merge pull request #198 from pateljannat/issue-fixes
fix: ui and removed mockup
2021-08-31 12:51:32 +05:30
pateljannat
417436d7b6 fix: course filter in review 2021-08-31 12:43:51 +05:30
pateljannat
f228489173 fix: ui and removed mockup 2021-08-31 12:30:52 +05:30
pateljannat
a49563e23f fix: discussions template 2021-08-30 18:39:00 +05:30
pateljannat
b3403b78ee fix: removed global discussions page 2021-08-30 12:47:15 +05:30
pateljannat
7a9039090d fix: discussions structure 2021-08-30 12:46:08 +05:30
Jannat Patel
289195e6c9 fix: readme url 2021-08-30 11:14:25 +05:30
Jannat Patel
e6502784ea Merge pull request #197 from pateljannat/ui-issues
fix: ui issues
2021-08-27 09:58:22 +05:30
pateljannat
54f301e8eb fix: edit-profile-link 2021-08-27 09:53:30 +05:30
pateljannat
ed91801769 fix: ui issues 2021-08-26 18:32:14 +05:30
Jannat Patel
6965148e4e Merge pull request #196 from pateljannat/course-cards-web-template
feat: course cards web template
2021-08-26 10:59:28 +05:30
pateljannat
b5481e1dd5 fix: margin 2021-08-26 10:54:38 +05:30
pateljannat
4ec9b56366 feat: course cards web template 2021-08-26 10:44:17 +05:30
Jannat Patel
530fcf9a39 Merge pull request #194 from fossunited/certification-fixes
fix: certificate, profile, quiz, and video markdown
2021-08-25 21:11:28 +05:30
pateljannat
ff1363b437 fix: certificate, profile, quiz, and video markdown 2021-08-25 21:01:13 +05:30
Jannat Patel
952e3a9906 Merge pull request #190 from fossunited/web-form-changes
fix: web form issues
2021-08-24 21:23:23 +05:30
pateljannat
9d530e35fb fix: web form issues 2021-08-24 20:58:12 +05:30
Jannat Patel
2c2ad78eb7 Merge pull request #189 from sumaiya2908/event-registration
fix: attendee-route
2021-08-24 18:09:27 +05:30
Summayya
f61c5a2fa1 fix: implicit user in speaker and exhibitor 2021-08-24 17:47:58 +05:30
Summayya
3e24ff9678 fix: implicit user 2021-08-24 17:27:16 +05:30
Summayya
b0280c3be4 fix: attendee-route 2021-08-24 16:40:46 +05:30
Jannat Patel
b10eb5c979 Merge pull request #188 from fossunited/talks-thumbnail
fix: talk card schedule
2021-08-24 12:27:13 +05:30
pateljannat
e2072c72da fix: talk card schedule 2021-08-24 12:12:55 +05:30
Jannat Patel
84a43912db Merge pull request #186 from fossunited/fixes
fix: minor issues
2021-08-23 18:52:14 +05:30
pateljannat
841819436a fix: minor issues 2021-08-23 18:22:36 +05:30
pateljannat
14a984c75f Merge branch 'main' of https://github.com/frappe/community into fixes 2021-08-23 11:14:35 +05:30
Jannat Patel
445de61ce4 Merge pull request #185 from fossunited/web-form-url-fixes
fix: web form redirects
2021-08-23 10:32:40 +05:30
pateljannat
f83007788d fix: web form redirects 2021-08-23 10:22:40 +05:30
Jannat Patel
aefee791ca Merge pull request #184 from sumaiya2908/event-management
fix: redirections
2021-08-23 10:21:24 +05:30
Summayya
00154d80df fix: redirections 2021-08-23 10:08:43 +05:30
Summayya
a1e12d29ac fix: redirections 2021-08-23 10:02:06 +05:30
Jannat Patel
5069832165 Merge pull request #183 from fossunited/event-doctype-fixes
fix: event doctypes and templates
2021-08-20 17:41:56 +05:30
pateljannat
e2cb003935 fix: doctypes and templates 2021-08-20 17:35:13 +05:30
Jannat Patel
b83a10c282 Merge pull request #180 from sumaiya2908/event-management
Create web templates for event management
2021-08-20 15:34:48 +05:30
Summayya
c6fc0a22d2 fix: add user to exhibitor doctype 2021-08-20 15:26:47 +05:30
pateljannat
c6d3994383 fix: course page 2021-08-20 14:23:18 +05:30
Summayya
07f9721aeb fix: remove speaker-registration 2021-08-20 13:45:40 +05:30
Summayya
dba956e473 fix: remove speaker-registration 2021-08-20 13:41:11 +05:30
Summayya
2894a5e479 fix: change date format 2021-08-19 17:22:01 +05:30
Summayya
ad0913500c fix: link user to speaker/attendee 2021-08-19 16:08:54 +05:30
Jannat Patel
79a765b725 Merge pull request #182 from fossunited/profile-urls
fix: profile urls
2021-08-19 12:05:59 +05:30
pateljannat
eaec991f47 fix: chapter teaser drawer 2021-08-19 10:06:39 +05:30
pateljannat
e31b189045 fix: profile urls 2021-08-19 09:35:02 +05:30
Summayya
eb58b1c149 fix: remove hover 2021-08-18 23:53:02 +05:30
Summayya
af9760f944 fix: remove div in schedule template 2021-08-18 19:49:12 +05:30
Summayya
21b2412362 fix: remove dummy data 2021-08-18 19:41:37 +05:30
Summayya
7e5e167eec fix: remove dummy data 2021-08-18 19:40:35 +05:30
Jannat Patel
7bf254319b Merge pull request #181 from fossunited/certification
feat: certification
2021-08-18 18:39:12 +05:30
pateljannat
d7e1745c09 fix: added back update progress code 2021-08-18 18:17:40 +05:30
pateljannat
ef238c1b25 fix: export label 2021-08-18 18:08:33 +05:30
pateljannat
cb60d97bb7 feat: certification 2021-08-18 18:04:47 +05:30
Summayya
7c3189e273 fix:conflict 2021-08-18 11:41:09 +05:30
Summayya
ace74febc7 Template for Previous content 2021-08-18 11:37:04 +05:30
Summayya
8dbdabd52c Create web templates for event management 2021-08-17 22:31:15 +05:30
Jannat Patel
f0ee8d7b88 Merge pull request #173 from fossunited/sketch-redesign
fix: sketch cards
2021-08-16 13:47:05 +05:30
Jannat Patel
7e5203f058 Merge pull request #179 from fossunited/discussions
feat: Discussions
2021-08-16 13:45:00 +05:30
pateljannat
a3672e9d91 feat: discussions 2021-08-16 13:33:08 +05:30
pateljannat
7017382451 fix: removed sketch card 2021-08-11 11:40:57 +05:30
pateljannat
6c9d49bf8c discussion doctypes 2021-08-11 11:14:40 +05:30
pateljannat
2de058246b Merge branch 'main' of https://github.com/frappe/community into main 2021-08-11 10:46:11 +05:30
pateljannat
798ea30382 fix: chapter teaser jerk issue 2021-08-11 10:46:01 +05:30
pateljannat
3e2c6b3343 fix: sketch image call 2021-08-10 17:08:32 +05:30
pateljannat
5ea744de5c fix: removed unused file 2021-08-10 16:46:48 +05:30
pateljannat
aedb3d3d45 fix: sketch cards 2021-08-10 16:39:17 +05:30
Jannat Patel
83a2f42df9 Merge pull request #171 from fossunited/username-fixes
fix: username issues
2021-08-10 13:19:29 +05:30
pateljannat
66aace247c fix: conditions and tests 2021-08-10 10:28:59 +05:30
pateljannat
bc3db06960 fix: username issues 2021-08-09 16:54:02 +05:30
Jannat Patel
ddaa063587 Merge pull request #170 from fossunited/upcoming-course-notify
feat: notify me
2021-08-09 15:39:04 +05:30
pateljannat
f9b4fe468e fix: removed unused import 2021-08-09 13:27:09 +05:30
pateljannat
6cbca8d1bb feat: notify me 2021-08-09 13:13:48 +05:30
Jannat Patel
d5067a4bcd Merge pull request #169 from fossunited/username-validations
fix: Username validations
2021-08-06 15:05:36 +05:30
pateljannat
04d44510de fix: redirect after edit profile save 2021-08-06 14:41:37 +05:30
pateljannat
844fcc9bca fix: username validations 2021-08-06 14:41:11 +05:30
Jannat Patel
145b5efab0 Merge pull request #168 from fossunited/minor-issues
fix: quiz, course outline, and lesson indexing
2021-08-05 18:41:15 +05:30
pateljannat
63d70fc037 fix: username space and empty validations 2021-08-05 15:51:21 +05:30
489 changed files with 13977 additions and 1834 deletions

View File

@@ -53,19 +53,19 @@ jobs:
then
(cd && tar xzf ~/bench-cache/bench.tgz)
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
(cd && tar czf ~/bench-cache/bench.tgz frappe-bench)
fi
- name: add community app to bench
- name: add school app to bench
working-directory: /home/runner/frappe-bench
run: bench get-app community $GITHUB_WORKSPACE
run: bench get-app school $GITHUB_WORKSPACE
- name: create bench site
working-directory: /home/runner/frappe-bench
run: bench new-site --mariadb-root-password root --admin-password admin frappe.local
- name: install community app
- name: install school app
working-directory: /home/runner/frappe-bench
run: bench --verbose --site frappe.local install-app community
run: bench --verbose --site frappe.local install-app school
- name: allow tests
working-directory: /home/runner/frappe-bench
run: bench --site frappe.local set-config allow_tests true
@@ -74,5 +74,5 @@ jobs:
run: bench --site frappe.local build
- name: run tests
working-directory: /home/runner/frappe-bench
run: bench --site frappe.local run-tests --app community
run: bench --site frappe.local run-tests --app school

4
.gitignore vendored
View File

@@ -3,8 +3,8 @@
*.egg-info
*.swp
tags
community/docs/current
community/public/dist
school/docs/current
school/public/dist
__pycache__/
*.py[cod]
*$py.class

View File

@@ -4,15 +4,15 @@ include *.json
include *.md
include *.py
include *.txt
recursive-include community *.css
recursive-include community *.csv
recursive-include community *.html
recursive-include community *.ico
recursive-include community *.js
recursive-include community *.json
recursive-include community *.md
recursive-include community *.png
recursive-include community *.py
recursive-include community *.svg
recursive-include community *.txt
recursive-exclude community *.pyc
recursive-include school *.css
recursive-include school *.csv
recursive-include school *.html
recursive-include school *.ico
recursive-include school *.js
recursive-include school *.json
recursive-include school *.md
recursive-include school *.png
recursive-include school *.py
recursive-include school *.svg
recursive-include school *.txt
recursive-exclude school *.pyc

View File

@@ -1,4 +1,4 @@
## Community
## School
This app helps people organize and manage their own communities.
@@ -7,16 +7,16 @@ The App has following components:
1. Hackathons
1. LMS
Community is built on the [Frappe Framework](https://github.com/frappe/frappe), a full-stack web app framework built with Python & JavaScript.
School is built on the [Frappe Framework](https://github.com/frappe/frappe), a full-stack web app framework built with Python & JavaScript.
## Development Setup
**Step 1:** Clone the repo
```
$ git clone https://github.com/fossunited/community.git
$ git clone https://github.com/frappe/school.git
$ cd community
$ cd school
```
**Step 2:** Run docker-compose
@@ -59,15 +59,15 @@ 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.
1. In a separate terminal window, create a new site by running bench new-site school.test.
1. Run bench get-app https://github.com/frappe/school.
1. Run bench --site school.test install-app school.
1. Map your site to localhost with the command ```bench --site school.test add-to-hosts```
1. Now open the URL http://school.test:8000/ 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. Go to the apps/school directory of your installation and execute git pull --unshallow to ensure that you have the full git repository. Also fork the frappe/school 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.

View File

@@ -1,205 +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": "/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",
}

View File

@@ -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)

View File

@@ -1,110 +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 frappe.utils import add_days, nowdate
class LMSMessage(Document):
def after_insert(self):
self.publish_message()
#Todo: Adding email preference field for users
#self.send_email()
def publish_message(self):
template = self.get_message_template()
message = frappe._dict({
"author_name": self.author_name,
"message_time": frappe.utils.format_datetime(self.creation, "dd-mm-yyyy HH:mm"),
"message": frappe.utils.md_to_html(self.message)
})
js = """
$(".msger-input").val("");
var template = `{0}`;
var message = {1};
var session_user = ("{2}" == frappe.session.user) ? true : false;
message.author_name = session_user ? "You" : message.author_name
message.is_author = session_user;
template = frappe.render_template(template, {{
"message": message
}})
$(".messages").append(template);
var message_element = document.getElementsByClassName("messages")[0]
message_element.scrollTo(0, message_element.scrollHeight);
""".format(template, message, self.owner)
frappe.publish_realtime(event="eval_js", message=js, after_commit=True)
def get_message_template(self):
return """
<li class="{% if message.is_author %} ours {% endif %}">
<div class="d-flex justify-content-between">
<div class="font-weight-bold">
{{ message.author_name }}
</div>
<small class="">
{{ message.message_time }}
</small>
</div>
<div class="message-para">
{{ message.message }}
</div>
</li>
"""
def send_email(self):
membership = frappe.get_all("LMS Batch Membership", {"batch": self.batch}, ["member"])
for entry in membership:
member = frappe.get_doc("User", entry.member)
if member.name != self.author:
#Todo: wrap sendmail in frappe.enqueue, else messages takes long to display.
frappe.sendmail(
recipients = member.email,
subject = _("New Message on ") + self.batch,
header = _("New Message on ") + self.batch,
template = "lms_message",
args = {
"author": self.author,
"message": frappe.utils.md_to_html(self.message),
"creation": frappe.utils.format_datetime(self.creation, "medium"),
"course": frappe.db.get_value("LMS Batch", self.batch, ["course"])
}
)
def send_daily_digest():
#Todo: Optimize this
emails = frappe._dict()
messages = frappe.get_all("LMS Message", {"creation": [">=", add_days(nowdate(), -1)]}, ["message", "batch", "author", "creation"])
for message in messages:
membership = frappe.get_all("LMS Batch Membership", {"batch": message.batch}, ["member"])
for entry in membership:
member = frappe.db.get_value("User", entry.member, ["name", "email"], as_dict=1)
if member.name != message.author:
if member.name in emails.keys():
emails[member.name]["messages"].append(message)
else:
emails[member.name] = frappe._dict({
"email": member.email,
"messages": [message]
})
for email in emails:
group_by_batch = frappe._dict()
for message in emails[email]["messages"]:
if message.batch in group_by_batch.keys():
group_by_batch[message.batch].append(message)
else:
group_by_batch[message.batch] = [message]
frappe.sendmail(
recipients = frappe.db.get_value("User", email, "email"),
subject = _("Message Digest"),
header = _("Message Digest"),
template = "lms_daily_digest",
args = {
"batches": group_by_batch
},
delayed = False
)

View File

@@ -1,4 +0,0 @@
<div class="p-5 batch-header">
<h3>{{batch_name}}</h3>
<div class="text-muted">{{member_count}} members</div>
</div>

View File

@@ -1,90 +0,0 @@
<div class="common-card-style course-card">
<div class="course-image {% if not course.image %}default-image{% endif %}"
{% if course.image %} style="background-image: url( {{ course.image }} );" {% endif %}>
<div class="course-tags">
{% for tag in course.get_tags() %}
<div class="course-card-pills">{{ tag }}</div>
{% endfor %}
</div>
{% if not course.image %}
<div class="default-image-text">{{ course.title[0] }}</div>
{% endif %}
</div>
<div class="course-card-content">
<div class="course-card-meta muted-text">
{% if course.get_chapters() | length %}
<span>
{{ course.get_chapters() | length }} Chapters
</span>
{% endif %}
{% if course.get_chapters() | length and course.get_upcoming_batches() | length %}
<span class="font-weight-bold ml-3 mr-3"> . </span>
{% endif %}
{% if course.get_upcoming_batches() | length %}
<span class="">
{{ course.get_upcoming_batches() | length }} Open Batches
</span>
{% endif %}
</div>
<div class="course-card-title">{{ course.title }}</div>
<div class="card-divider"></div>
<div class="course-card-meta-2">
{{ widgets.Avatar(member=course.get_instructor(), avatar_class="avatar-small") }}
<span class="course-instructor">
{{ course.get_instructor().full_name }}
</span>
<span class="course-student-count">
{% if course.get_students() | length %}
<span class="mr-4">
<img class="icon-background" src="/assets/community/icons/user.svg" />
{{ course.get_students() | length }}
</span>
{% endif %}
{% set avg_rating = course.get_average_rating() %}
{% if avg_rating %}
<span>
<img class="icon-background" src="/assets/community/icons/rating.svg" />
{{ avg_rating }}
</span>
{% endif %}
</span>
</div>
{% set membership = course.get_membership(frappe.session.user) %}
{% set lesson_index = course.get_lesson_index(membership.current_lesson) if membership and
membership.current_lesson
else '1.1' %}
{% set query_parameter = "?batch=" + membership.batch if membership and membership.batch else "" %}
{% if course.upcoming %}
<div class="view-course-link is-default">
Upcoming Course <img class="ml-3" src="/assets/community/icons/black-arrow.svg" />
</div>
<a class="stretched-link" href="/courses/{{ course.name }}"></a>
{% elif membership %}
<div class="view-course-link is-primary">
Continue Course <img class="ml-3" src="/assets/community/icons/white-arrow.svg" />
</div>
<a class="stretched-link" href="{{ course.get_learn_url(lesson_index) }}{{ query_parameter }}"></a>
{% else %}
<div class="view-course-link">
View Course <img class="ml-3" src="/assets/community/icons/black-arrow.svg" />
</div>
<a class="stretched-link" href="/courses/{{ course.name }}"></a>
{% endif %}
</div>
</div>
<script>
frappe.ready(() => {
$(".course-card-title").each((i, element) => {
var title = $(element).text();
var length = $(window).width() <= 375 ? 60 : 65;
var suffix = title.length > length ? "..." : "";
$(element).text(title.substring(0, length) + suffix);
})
})
</script>

View File

@@ -1,6 +0,0 @@
<div class="instructor">
{{ widgets.Avatar(member=instructor, avatar_class="avatar-medium") }}
<a class="ml-1 instructor-title" href="/{{instructor.username}}">{{ instructor.full_name }}</a>
<div class="instructor-subtitle">Course Creator</div>
<!-- <div class="instructor-subtitle">Created {{instructor.get_course_count()}} courses</div> -->
</div>

View File

@@ -1,16 +0,0 @@
<div class="sketch-teaser">
<div class="sketch-image">
<a href="/sketches/{{sketch.sketch_id}}">
{{ sketch.to_svg() }}
</a>
</div>
<div class="sketch-footer">
<div class="sketch-title">
<a href="sketches/{{sketch.sketch_id}}">{{sketch.title}}</a>
</div>
<div class="sketch-author">
{% set owner = sketch.get_owner() %}
by <a href="/{{owner.username}}">{{owner.full_name}}</a>
</div>
</div>
</div>

View File

@@ -1,4 +0,0 @@
Community
Hackathon
LMS
Conference

View File

@@ -1,9 +0,0 @@
community.patches.set_email_preferences
community.patches.change_name_for_community_members
community.patches.save_abbr_for_community_members
community.patches.create_mentor_request_email_templates
community.patches.replace_member_with_user_in_batch_membership
community.patches.replace_member_with_user_in_course_mentor_mapping
community.patches.replace_member_with_user_in_lms_message
community.patches.replace_member_with_user_in_mentor_request
community.patches.v0_0.chapter_lesson_index_table

View File

@@ -1,13 +0,0 @@
<div class="discussion {% if message.is_author %} is-author {% endif %}">
<div class="d-flex justify-content-between">
<div class="font-weight-bold">
{{ message.author_name }}
</div>
<div class="text-muted">
{{ message.message_time }}
</div>
</div>
<div class="mt-5">
{{ message.message }}
</div>
</div>

View File

@@ -1,47 +0,0 @@
{% extends "templates/base.html" %}
{% block title %}Discuss{% endblock %}
{% block head_include %}
<meta name="description" content="Courses" />
<meta name="keywords" content="" />
<link rel="stylesheet" href="/assets/frappe/css/font-awesome.css">
{% endblock %}
{% block content %}
<div class="container">
<div class="messages-container mt-5">
{{ widgets.BatchHeader(batch_name=batch.title, member_count=member_count)}}
<ol class="messages">
{{ Messages(messages) }}
</ol>
{{ TextArea() }}
</div>
</div>
{% endblock %}
{% macro Messages(messages) %}
{% for message in messages %}
<li class="{% if message.is_author %} ours {% endif %}">
<div class="d-flex justify-content-between">
<div class="font-weight-bold">
{{ message.author_name }}
</div>
<small class="">
{{ frappe.utils.format_datetime(message.creation, "dd-mm-yyyy HH:mm") }}
</small>
</div>
<div class="message-para">
{{ message.message }}
</div>
</li>
{% endfor %}
{% endmacro %}
{% macro TextArea() %}
<form class="msger-inputarea mb-1">
<input type="text" class="msger-input" placeholder="Write your message...">
<button type="submit" class="btn btn-primary msger-send-btn" data-batch="{{batch.name | urlencode }}">Send</button>
</form>
{% endmacro %}

View File

@@ -1,35 +0,0 @@
frappe.ready(() => {
const assets = [
"/assets/frappe/js/lib/socket.io.min.js",
"/assets/frappe/js/frappe/socketio_client.js",
]
frappe.require(assets, () => {
if (window.dev_server) {
frappe.boot.socketio_port = "9000" //use socketio port shown when bench starts
}
frappe.socketio.init(9000);
})
setTimeout(() => {
var message_element = document.getElementsByClassName("messages")[0]
message_element.scrollTo(0, message_element.scrollHeight);
document.getElementsByClassName("messages-container")[0].scrollIntoView({block: "center"})
}, 300);
$(".msger-send-btn").click((e) => {
e.preventDefault();
var message = $(".msger-input").val().trim();
if (message) {
frappe.call({
"method": "community.lms.doctype.lms_batch.lms_batch.save_message",
"args": {
"batch": decodeURIComponent($(e.target).attr("data-batch")),
"message": message
}
})
}
else {
$(".msger-input").val("");
}
})
})

View File

@@ -1,8 +0,0 @@
import frappe
from . import utils
def get_context(context):
utils.get_common_context(context)
context.messages = context.batch.get_messages()
if not context.membership:
utils.redirect_to_lesson(context.course)

View File

@@ -1,22 +0,0 @@
{% extends "templates/base.html" %}
{% from "www/hackathons/macros/card.html" import null_card %}
{% block title %}{{ 'Courses' }}{% endblock %}
{% block head_include %}
<style>
</style>
{% endblock %}
{% block content %}
<div class="common-page-style">
<div class="container">
<div class="courses-header">
{{ 'All Courses' }}
</div>
<div class="cards-parent">
{% for course in courses %}
{{ widgets.CourseCard(course=course) }}
{% endfor %}
</div>
</div>
</div>
{% endblock %}

View File

@@ -1,18 +0,0 @@
import frappe
def get_context(context):
context.no_cache = 1
context.courses = get_courses()
context.metatags = {
"title": "All Courses",
"image": frappe.db.get_single_value("Website Settings", "banner_image"),
"description": "This page lists all the courses published on our website",
"keywords": "All Courses, Courses, Learn"
}
def get_courses():
course_names = frappe.get_all("LMS Course", filters={"is_published": True}, pluck="name")
courses = []
for course in course_names:
courses.append(frappe.get_doc("LMS Course", course))
return courses

View File

@@ -17,9 +17,9 @@ services:
bench:
image: anandology/frappe-bench
volumes:
- .:/home/bench/frappe-bench/apps/community
- .:/home/bench/frappe-bench/apps/school
environment:
- FRAPPE_APPS=community
- FRAPPE_APPS=school
- FRAPPE_ALLOW_TESTS=true
- FRAPPE_SITE_NAME=frappe.localhost
depends_on:

View File

@@ -1,39 +0,0 @@
# Mockups
HTML Mockups using [Mockdown][].
[Mockdown]: https://github.com/anandology/mockdown
## How to use
**Step 1:** Get into `mockups` directory
```
$ cd mockups
```
**Step 2:** Instal `mockdown`
```
$ pip install mockdown
```
**Step 3:** Start mockdown server
```
$ mockdown
...
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
...
```
**Step 4:** See the mockups at <http://localhost:5000/>.
## How does it work?
Mockdown uses [Jinja][] templates for writing HTML.
[Jinja]: https://jinja.palletsprojects.com/
To make is easy to provide test data, Mockdown looks for YAML file with the same name as the template. For example, `home.html` template uses the data from `home.yml`.

View File

@@ -1,42 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
<link href="/static/style.css" rel="stylesheet">
<title>{% block title %}FOSS United{% endblock %}</title>
</head>
<body>
<nav class="navbar navbar-light navbar-expand-lg">
<div class="container">
<a class="navbar-brand" href="/"><span>Home</span></a>
<button aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation" class="navbar-toggler" data-target="#navbarSupportedContent" data-toggle="collapse" type="button">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="mr-auto navbar-nav">
<li class="nav-item">
<a class="nav-link" href="/sketches.html">
Sketches
</a>
</li>
</ul>
<ul class="ml-auto navbar-nav">
<!-- post login tools -->
<li class="nav-item">
<a class="nav-link btn-login-area" href="/login.html">Login</a>
</li>
</ul>
</div>
</div>
</nav>
{% block content %}
<h1>Lorem ipsum...</h1>
{% endblock %}
</body>
</html>

View File

@@ -1,114 +0,0 @@
{% extends "base.html" %}
{% block content %}
<div class="container">
<div class="course-header">
<div class="course-type">course</div>
<h1>{{title}}</h1>
</div>
<div class="row">
<div class="col-lg-9 col-md-12">
<div class="course-details">
<h2>Course Description</h2>
<div class="course-description">
{{ description }}
</div>
<div class="preview-video">
<iframe
width="560"
height="315"
src="{{youtube_embed_url}}"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen></iframe>
</div>
<h2>Upcoming Batches</h2>
<div class="row">
{% for batch in batches %}
<div class="col-lg-4 col-md-6">
<div class="batch">
<div class="batch-details">
<div>Session every {{batch.weekdays}}</div>
<div>{{batch.timeslot}}</div>
<div>Starting from {{batch.start_date}}</div>
<div class="course-type" style="color: #888; padding: 10px 0px;">mentors</div>
{% for m in batch.mentors %}
<div>
<img class="profile-photo" src="{{m.photo_url}}">
<span class="instructor-title">{{m.name}}</span>
</div>
{% endfor %}
</div>
<div class="cta">
<div class="">
<button type="button">Join this Batch</button>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
<h2>Course Outline</h2>
{% for chapter in chapters %}
<div class="chapter-plan">
<h3><span class="chapter-number">{{loop.index}}</span> {{chapter.title}}</h3>
<div class="chapter-description">
{{chapter.description}}
</div>
<div class="lessons">
{% for lesson in chapter.lessons %}
<div class="lesson">
<span class="lesson-type"><i class="{{lesson.icon}}"></i></span>
<span class="lesson-title">{{lesson.title}}</span>
</div>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
</div>
<div class="col-lg-3 col-md-12">
<div class="sidebar">
<h3>Instructor</h3>
<div class="instructor">
<div class="instructor-title">{{instructor.name}}</div>
<div class="instructor-subtitle">Created {{instructor.num_courses}} courses</div>
</div>
</div>
<div class="sidebar">
<h3>Mentors</h3>
{% for m in mentors %}
<div class="instructor">
<div class="instructor-title">{{m.name}}</div>
<div class="instructor-subtitle">Mentored {{m.num_courses}} batches</div>
</div>
{% endfor %}
<div class="notice">
Interested to become a mentor?
<div><a href="#">Apply Now!</a></div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -1,89 +0,0 @@
title: The Joy of Programming
description: |
Learn the joy of programming by turning the computer into a canvas.
youtube_embed_url: "https://www.youtube.com/embed/IFWAYnUeHR8?start=149"
stats:
chapters: 4
lessons: 25
videos: 6
completed: 287
instructor:
name: Anand Chitipothu
num_courses: 4
mentors:
- name: Anand Chitipothu
num_courses: 4
- name: Rushabh Mehta
num_courses: 3
- name: Jannat Patel
num_courses: 3
batches:
- id: jp01
status: scheduled
mentors:
- name: Anand Chitipothu
photo_url: https://pbs.twimg.com/profile_images/2599066714/igu5hx4wlg3mxucodinl.jpeg
num_batches: 4
start_date: May 3, 2021
weekdays: Mon, Thu
timeslot: 5:00-6:00 PM
- id: jp02
status: scheduled
mentors:
- name: Anand Chitipothu
photo_url: https://pbs.twimg.com/profile_images/2599066714/igu5hx4wlg3mxucodinl.jpeg
num_batches: 4
start_date: May 4, 2021
weekdays: Tue, Fri
timeslot: 5:00-6:00 PM
- id: jp03
status: scheduled
mentors:
- name: Rusbhabh Mehta
photo_url: https://pbs.twimg.com/profile_images/2599066714/igu5hx4wlg3mxucodinl.jpeg
num_batches: 4
start_date: May 15, 2021
weekdays: Sat
timeslot: 5:00-6:00 PM
chapters:
- title: Getting Started
description: |
Getting started with programming by turning the computer into a canvas.
lessons:
- index: 1
type: video
icon: bi bi-play-circle
title: Introduction to Programming
- index: 2
type: practice
icon: bi bi-code-square
title: Drawing Shapes
- title: Repeating Things
description: |
Isn't it very boring to do the same thing again and again?
Well, that is for humans. Computers love to do the same thing again and again.
Learn how to tell the computer to repeat multiple times the same task, or
with slight change every time.
lessons:
- index: 1
type: video
icon: bi bi-play-circle
title: Rinse and Repeat
- index: 2
type: practice
title: many circles
icon: bi bi-check2-circle
- index: 3
type: practice
icon: bi bi-code-square
title: print, print, print!

View File

@@ -1,33 +0,0 @@
{% extends "base.html" %}
{% block content %}
<div class="container">
<div class="course-header">
<h1>Sketches</h1>
</div>
<div class="row sketches-gallery">
{% for s in sketches %}
<div class="col-md-3">
<div class="sketch-card">
<div class="sketch-image">
<a href="#">
<svg width="300" height="300" viewBox="0 0 300 300" fill="none" stroke="black" xmlns="http://www.w3.org/2000/svg">
<circle cx="150" cy="150" r="150.0"></circle>
</svg>
</a>
</div>
<div class="sketch-footer">
<div class="sketch-title">
<a href="#">{{s.title}}</a>
</div>
<div class="sketch-author">
by {{s.author}}
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}

View File

@@ -1,38 +0,0 @@
sketches:
- id: 20
title: Big Circle
author: Anand Chitipothu
- id: 19
title: Small Circle
author: Anand Chitipothu
- id: 18
title: Circles in Queue
author: Chaitanya
- id: 17
title: Random Bottom Circles
author: Anand Chitipothu
- id: 16
title: Pipes
author: Vishal
- id: 15
title: New Sketch
author: Malleshwari
- id: 20
title: Big Circle
author: Anand Chitipothu
- id: 19
title: Small Circle
author: Anand Chitipothu
- id: 18
title: Circles in Queue
author: Chaitanya
- id: 17
title: Random Bottom Circles
author: Anand Chitipothu
- id: 16
title: Pipes
author: Vishal
- id: 15
title: New Sketch
author: Malleshwari

View File

@@ -1,221 +0,0 @@
@import url("https://cdn.jsdelivr.net/npm/bootstrap-icons@1.4.1/font/bootstrap-icons.css");
:root {
--c1: #fefae0;
--c2: #264653;
--c3: #e9c46a;
--c4: #2a9d8f;
--c5: #f4a261;
--c6: #e76f51;
--c7: #ccd5ae;
--bg: var(--c1);
--header-bg: var(--c2);
--header-color: var(--c3);
--tag-color: var(--c7);
--sidebar-bg: var(--c7);
--h-color: var(--c2);
--text-color: #333;
--text-color-light: #ccc;
--cta-color: var(--c4);
}
body {
padding: 0px;
margin: 0px;
background: var(--bg);
}
.navbar-light {
border-bottom: 1px solid #E2E6E9;
}
.page-header {
margin-top: 20px;
padding: 20px;
border-radius: 10px;
}
.page-header .page-header{
margin-top: 20px;
padding: 20px;
border-radius: 10px;
}
.course-header {
margin-top: 20px;
padding: 20px;
background: var(--header-bg);
color: var(--header-color);
border-radius: 10px;
}
.course-header h1 {
color: inherit;
}
.course-type {
text-transform: uppercase;
font-size: 1.0em;
color: var(--tag-color);
}
.sidebar {
background: var(--sidebar-bg);
margin: 20px 0px;
border-radius: 10px;
padding: 1px 20px 20px 20px;
color: var(--text-color);
}
.sidebar h3 {
margin-top: 20px;
color: var(--c2);
}
.instructor {
padding: 10px;
}
.instructor-title {
font-weight: bold;
}
.instructor-subtitle {
font-size: 0.8em;
color: var(--text-color);
}
.sidebar .notice {
padding: 10px;
border-radius: 10px;
border: 1px dashed var(--text-color);
}
.sidebar .notice a {
color: inherit;
text-decoration: underline;
}
.course-details {
margin: 20px 0px;
}
.course-details h2 {
color: var(--h-color);
font-size: 1.4em;
font-weight: bold;
margin: 20px 0px 10px 0px;
}
.chapter-plan {
border-radius: 10px;
margin: 20px 0px;
padding: 20px;
border: 1px solid #ddc;
background: white;
}
.chapter-plan h3 {
font-size: 1.1em;
font-weight: bold;
}
.chapter-number {
background: var(--text-color);
color: white;
border-radius: 50%;
height: 24px;
min-width: 24px;
align-items: center;
padding: 2px 8px 2px 8px;
margin-right: 5px;
}
.chapter-description {
margin: 20px 0px;
}
.lessons {
padding-left: 20px;
}
.lesson {
margin: 5px 0px;
font-weight: bold;
}
.batch {
border-radius: 10px;
margin: 10px 0px;
background: white;
border: 1px solid #ddc;
}
.batch-details {
padding: 20px;
}
.batch .cta {
margin-top: 10px;
padding: 10px;
min-height: 28px;
text-align: right;
border-top: 1px solid #ddc;
}
.batch .cta button {
background: var(--cta-color);
color: white;
border: none;
border-radius: 5px;
padding: 5px 10px;
}
.batch .right {
float: right;
}
img.profile-photo {
width: 24px;
height: 24px;
border-radius: 50%;
}
.lesson-type {
padding-right: 5px;
}
.preview-video {
text-align: center;
margin: 20px 0px;
}
.preview-video iframe {
max-width: 100%
}
.sketches-gallery svg {
width: 200px;
height: 200px;
}
.sketch-card {
background: white;
border-radius: 10px;
border: 1px solid #ddd;
margin: 10px;
}
.sketch-card .sketch-image {
padding: 10px;
}
.sketch-footer {
padding: 10px;
background: #eee;
}

View File

@@ -1,5 +1,5 @@
{% set color = member.get_palette() %}
<a class="button-links" href="/{{member.username}}">
<a class="button-links" href="{{ get_profile_url(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 }}">

View File

@@ -0,0 +1,14 @@
// Copyright (c) 2021, FOSS United and contributors
// For license information, please see license.txt
frappe.ui.form.on('Attendee', {
onload: function (frm) {
frm.set_query('user', function (doc) {
return {
filters: {
"ignore_user_type": 1,
}
};
});
}
});

View File

@@ -1,51 +1,47 @@
{
"actions": [],
"creation": "2021-03-19 12:19:32.355307",
"creation": "2021-08-11 10:07:53.262504",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"author",
"batch",
"user",
"full_name",
"column_break_3",
"author_name",
"pin",
"company",
"is_paid",
"section_break_6",
"message"
"what_are_you_hoping_to_learn"
],
"fields": [
{
"fieldname": "batch",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Batch",
"options": "LMS Batch"
"fieldname": "company",
"fieldtype": "Data",
"label": "Company"
},
{
"fieldname": "author",
"fieldname": "what_are_you_hoping_to_learn",
"fieldtype": "Text",
"label": "What are you hoping to learn?"
},
{
"fieldname": "user",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Author",
"label": "User",
"options": "User"
},
{
"fieldname": "message",
"fieldtype": "Markdown Editor",
"in_list_view": 1,
"label": "Message"
"fetch_from": "user.full_name",
"fieldname": "full_name",
"fieldtype": "Data",
"label": "Full Name",
"read_only": 1
},
{
"default": "0",
"fieldname": "pin",
"fieldname": "is_paid",
"fieldtype": "Check",
"label": "Pin"
},
{
"fetch_from": "author.full_name",
"fieldname": "author_name",
"fieldtype": "Data",
"label": "Author Name",
"read_only": 1
"label": "Is Paid"
},
{
"fieldname": "column_break_3",
@@ -58,10 +54,10 @@
],
"index_web_pages_for_search": 1,
"links": [],
"modified": "2021-05-21 11:49:34.911479",
"modified": "2021-08-20 17:03:09.741997",
"modified_by": "Administrator",
"module": "LMS",
"name": "LMS Message",
"module": "Event Management",
"name": "Attendee",
"owner": "Administrator",
"permissions": [
{
@@ -77,9 +73,8 @@
"write": 1
}
],
"quick_entry": 1,
"sort_field": "modified",
"sort_order": "DESC",
"title_field": "author",
"title_field": "user",
"track_changes": 1
}
}

Some files were not shown because too many files have changed in this diff Show More