feat: profile page
This commit is contained in:
@@ -107,7 +107,7 @@
|
||||
"has_web_view": 1,
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2021-04-12 17:32:36.211603",
|
||||
"modified": "2021-04-14 09:36:27.813085",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Community",
|
||||
"name": "Community Member",
|
||||
@@ -139,7 +139,9 @@
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"search_fields": "full_name",
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"title_field": "full_name",
|
||||
"track_changes": 1
|
||||
}
|
||||
@@ -156,7 +156,7 @@ 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=5):username>", "to_route": "profiles/profile"},
|
||||
{"from_route": "/<string(minlength=4):username>", "to_route": "profiles/profile"},
|
||||
]
|
||||
|
||||
website_route_rules = primary_rules + whitelist_rules + profile_rules
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade py-4 show active" role="tabpanel" id="home">
|
||||
<div class='container'>
|
||||
<div>{{ frappe.utils.md_to_html(course.description) }}</div>
|
||||
<div>{{ frappe.utils.md_to_html(course.description) }}</div>
|
||||
<div class="list-group">
|
||||
{% for topic in course.topics %}
|
||||
<div class="list-group-item">
|
||||
@@ -80,7 +80,7 @@
|
||||
<div class="discussions">
|
||||
{% for message in discussions %}
|
||||
<div class="list-group-item">
|
||||
<h6>{{ message.author }}</h6>
|
||||
<h6>{{ message.author_name }}</h6>
|
||||
{{ message.message }}
|
||||
<div class="small text-muted text-right">{{ message.creation }}</div>
|
||||
</div>
|
||||
|
||||
@@ -35,9 +35,9 @@ frappe.ready(() => {
|
||||
}
|
||||
})
|
||||
var add_message = (message, session_user = false) => {
|
||||
var author = session_user ? "You" : message.author
|
||||
var author_name = session_user ? "You" : message.author_name
|
||||
return `<div class="list-group-item">
|
||||
<h6> ${author} </h6>
|
||||
<h6> ${author_name} </h6>
|
||||
${message.message}
|
||||
<div class="small text-muted text-right"> ${message.creation} </div>
|
||||
</div>`;
|
||||
|
||||
@@ -57,9 +57,9 @@ def get_messages(batch):
|
||||
for message in messages:
|
||||
message.message = frappe.utils.md_to_html(message.message)
|
||||
message.creation = frappe.utils.format_datetime(message.creation, "medium")
|
||||
member_email = frappe.db.get_value("Community Member", message.author, "email")
|
||||
message.author_name, member_email = frappe.db.get_value("Community Member", message.author, ["full_name","email"])
|
||||
if member_email == frappe.session.user:
|
||||
message.author = "You"
|
||||
message.author_name = "You"
|
||||
return messages
|
||||
|
||||
@frappe.whitelist()
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade py-4" role="tabpanel" id="sketches">
|
||||
<div class='container'>
|
||||
<div class="container">
|
||||
<a href="/sketches/new">Create a New Sketch</a>
|
||||
<div class="row row-cols-1 row-cols-xl-5 row-cols-lg-4 row-cols-md-3 row-cols-sm-2">
|
||||
{% if sketches %}
|
||||
@@ -181,7 +181,9 @@
|
||||
{% for course in courses %}
|
||||
<div class="dashboard__course">
|
||||
<div class="dashboard__courseHeader">
|
||||
<h5 class="w-75">{{ course.name }}</h5>
|
||||
<a class="text-decoration-none" target="_blank" href="/courses/{{course.slug}}">
|
||||
<h5 class="w-75">{{ course.name }}</h5>
|
||||
</a>
|
||||
{% if course.member_type %}
|
||||
<div class="dashboard__badge">
|
||||
{{ course.member_type }}
|
||||
|
||||
@@ -9,7 +9,7 @@ def get_context(context):
|
||||
context.courses = get_courses(context.memberships)
|
||||
context.activity = get_activity(context.memberships)
|
||||
context.sketches = list(filter(lambda x: x.owner == frappe.session.user, get_recent_sketches()))
|
||||
print(context)
|
||||
|
||||
def get_memberships(member):
|
||||
return frappe.get_all("LMS Batch Membership", {"member": member}, ["batch", "member_type", "creation"])
|
||||
|
||||
|
||||
@@ -1,9 +1,143 @@
|
||||
{% extends "templates/web.html" %}
|
||||
{% from "www/macros/profile.html" import profile %}
|
||||
{% block head_include %}
|
||||
<meta name="description" content="{{ 'Community' }}" />
|
||||
<meta name="keywords" content="An app that supports Communities." />
|
||||
<style>
|
||||
section {
|
||||
padding: 2rem;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
svg {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.dashboard__profile {
|
||||
width: 150px;
|
||||
height: 155px;
|
||||
border-radius: 50%;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.dashboard__profileSmall {
|
||||
width: 59px;
|
||||
height: 57px;
|
||||
border-radius: 50%;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.dashboard__abbr {
|
||||
font-size: 50px;
|
||||
width: 155px;
|
||||
height: 155px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.dashboard__abbrSmall {
|
||||
font-size: 20px;
|
||||
width: 59px;
|
||||
height: 57px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.dashboard__parent {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.dashboard__name {
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-size: 36px;
|
||||
line-height: 42px;
|
||||
}
|
||||
|
||||
.dashboard__details {
|
||||
padding-top: 2rem;
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.dashboard__course {
|
||||
border: 1px solid black;
|
||||
padding: 1rem;
|
||||
margin: 0.5rem;
|
||||
width: 48%;
|
||||
}
|
||||
|
||||
.dashboard__courseHeader {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
height: 50px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.dashboard__badge {
|
||||
background: #D6D6FF;
|
||||
border-radius: 20px;
|
||||
color: #1712FE;
|
||||
padding: 0.5rem;
|
||||
height: fit-content;
|
||||
}
|
||||
|
||||
.dashboard__description {
|
||||
height: 100px;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
{% block page_content %}
|
||||
<section>
|
||||
<div>
|
||||
{{ profile(member.photo, member.full_name, abbr, "large")}}
|
||||
<div class="dashboard__parent">
|
||||
<div>
|
||||
{{ profile(member.photo, member.full_name, abbr, "large")}}
|
||||
</div>
|
||||
<div class="dashboard__details">
|
||||
<div class="dashboard__name">
|
||||
{{member.full_name}}
|
||||
</div>
|
||||
<div>
|
||||
<ul class="nav nav-tabs mt-4" id="myTab" role="tablist">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab"
|
||||
aria-controls="home" aria-selected="true">Sketches</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade py-4 show active" role="tabpanel" id="home">
|
||||
<div class='container'>
|
||||
<a href="/sketches/new">Create a New Sketch</a>
|
||||
<div class="row row-cols-1 row-cols-xl-5 row-cols-lg-4 row-cols-md-3 row-cols-sm-2">
|
||||
{% if sketches %}
|
||||
{% for sketch in sketches %}
|
||||
<div class="col m-4">
|
||||
<div class="card sketch-card" style="width: 200px;">
|
||||
<div class="card-img-top">
|
||||
<a href="/sketches/{{sketch.sketch_id}}">
|
||||
{{ sketch.to_svg() }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<div class="sketch-title">
|
||||
<a href="sketches/{{sketch.sketch_id}}">{{sketch.title}}</a>
|
||||
</div>
|
||||
<div class="sketch-author">
|
||||
by {{sketch.get_owner_name()}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<p class="text-center">You have not created any sketches.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,18 +1,9 @@
|
||||
import frappe
|
||||
from ...lms.doctype.lms_sketch.lms_sketch import get_recent_sketches
|
||||
|
||||
def get_context(context):
|
||||
context.no_cache = 1
|
||||
|
||||
username = frappe.form_dict.get('username')
|
||||
user = username and get_user(username)
|
||||
if not user:
|
||||
context.template = "www/404.html"
|
||||
|
||||
user.abbr = "".join([s[0] for s in user.full_name.split()])
|
||||
context.user = user
|
||||
|
||||
def get_user(username):
|
||||
try:
|
||||
return frappe.get_doc("Community Member", username)
|
||||
except frappe.DoesNotExistError:
|
||||
return
|
||||
context.username = frappe.form_dict['username']
|
||||
context.member = frappe.get_doc("Community Member", {"username":context.username})
|
||||
context.abbr = "".join([s[0] for s in context.member.full_name.split()])
|
||||
context.sketches = list(filter(lambda x: x.owner == context.member.email, get_recent_sketches()))
|
||||
|
||||
Reference in New Issue
Block a user