Skip to content

Commit

Permalink
Proof-of-Achievement page added; twitter/fb enriched sharing; tweet btn
Browse files Browse the repository at this point in the history
note: get_user and find_user have not been tested yet.
  • Loading branch information
kdmukai committed Jul 26, 2019
1 parent 243689b commit 0d3e09b
Show file tree
Hide file tree
Showing 3 changed files with 459 additions and 9 deletions.
111 changes: 109 additions & 2 deletions explorer/explorer/explorer.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import json
import os

from datetime import datetime
from eospy.cleos import Cleos
from flask import Flask, render_template, url_for, redirect
from flask_cdn import CDN
Expand Down Expand Up @@ -83,12 +84,118 @@ def get_achievement(ecosys_key, cat_key, key):
)

ecosystem = ecosystems.get('rows', [])[0]
ach = ecosystem.get('categories')[int(cat_key)].get('achievements')[int(key)]
achievement = ecosystem.get('categories')[int(cat_key)].get('achievements')[int(key)]
achievement['key'] = int(key)
users = []
for usergrant in achievement.get('usergrants'):
user = ecosystem.get('users')[usergrant.get('user_id')]
if not user.get('avatarurl').startswith('http'):
user['avatarurl'] = ecosystem.get('baseasseturl') + "/" + user.get('avatarurl')

user['user_id'] = usergrant.get('user_id')
print(user)
users.append({
"user": user,
"timestamp": datetime.utcfromtimestamp(usergrant.get('timestamp')),
})

return render_template(
'ach.html',
ecosystem=ecosystem,
ach=ach
category_id=cat_key,
achievement=achievement,
usergrants=users
)




@app.route('/poa/<ecosys_key>/<cat_key>/<ach_key>/<user_key>', methods=['GET'])
def get_proofofachievement(ecosys_key, cat_key, ach_key, user_key):
cleos = Cleos(url='https://chain.wax.io')
ecosystems = cleos.get_table(
code=CONTRACT_ACCOUNT,
scope=CONTRACT_SCOPE,
table=ECOSYSTEMS_TABLE,
lower_bound=ecosys_key,
upper_bound=ecosys_key,
limit=1,
timeout=30
)

ecosystem = ecosystems.get('rows', [])[0]
achievement = ecosystem.get('categories')[int(cat_key)].get('achievements')[int(ach_key)]
achievement['key'] = int(ach_key)
user = ecosystem.get('users')[int(user_key)]
user['key'] = int(user_key)
if not user.get('avatarurl').startswith('http'):
user['avatarurl'] = ecosystem.get('baseasseturl') + "/" + user.get('avatarurl')

for userachievement in user.get('userachievements'):
if userachievement.get('category_id') == int(cat_key) and userachievement.get('achievement_id') == int(ach_key):
timestamp = datetime.utcfromtimestamp(userachievement.get('timestamp'))
break

return render_template(
'poa.html',
ecosystem=ecosystem,
category_id=cat_key,
achievement=achievement,
user=user,
timestamp=timestamp
)


@app.route('/user/<ecosys_key>/<key>', methods=['GET'])
def get_user(ecosys_key, key):
cleos = Cleos(url='https://chain.wax.io')
ecosystems = cleos.get_table(
code=CONTRACT_ACCOUNT,
scope=CONTRACT_SCOPE,
table=ECOSYSTEMS_TABLE,
lower_bound=ecosys_key,
upper_bound=ecosys_key,
limit=1,
timeout=30
)

ecosystem = ecosystems.get('rows', [])[0]
user = ecosystem.get('users')[int(key)]

# Get all of this User's granted Achievements
achievements = []
grants_categories = user.bycategory
for (category_id, achievements_list) in grants_categories.iteritems():
userachievements = achievements_list.userachievements
for userachievement in userachievements:
achievements.append((ecosystem.get('categories')[category_id].get('achievements')[userachievement.get('achievement_id')], userachievement.get('timestamp')))

return render_template(
'user.html',
ecosystem=ecosystem,
achievements=achievements
)



@app.route('/find/user/<ecosys_key>/<userid>', methods=['GET'])
def find_user(ecosys_key, userid):
cleos = Cleos(url='https://chain.wax.io')
ecosystems = cleos.get_table(
code=CONTRACT_ACCOUNT,
scope=CONTRACT_SCOPE,
table=ECOSYSTEMS_TABLE,
lower_bound=ecosys_key,
upper_bound=ecosys_key,
limit=1,
timeout=30
)

ecosystem = ecosystems.get('rows', [])[0]
for (key, user) in enumerate(ecosystem.users):
if user.userid == userid:
return key

return None


113 changes: 106 additions & 7 deletions explorer/explorer/templates/ach.html
Original file line number Diff line number Diff line change
@@ -1,11 +1,25 @@
{% extends "_base.html" %}


{% block meta_title %}{{ ach.name }} | {{ ecosystem.name }} | WAXBadges Achievements Explorer{% endblock %}
{% block meta_title %}&quot;{{ achievement.name }}&quot; | {{ ecosystem.name }}{% endblock %}

{% block meta_description %}{{ ach.description }}{% endblock %}

{% block header_title %}{{ ach.name }} | {{ ecosystem.name }} | WAXBadges Achievements Explorer{% endblock %}
{% block meta_description %}{{ achievement.description }} | {{ ecosystem.name }}{% endblock %}


{% block meta_image %}https://{{ ecosystem.assetbaseurl }}/{{ achievement.assetname }}{% endblock %}


{% block twitter_card %}
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@WAXBadges">
<meta name="twitter:title" content="&quot;{{ achievement.name }}&quot; | {{ ecosystem.name }}">
<meta name="twitter:description" content="{{ achievement.description }} | WAXBadges Achievements Explorer">
<meta name="twitter:image" content="https://{{ ecosystem.assetbaseurl }}/{{ achievement.assetname }}">
{% endblock %}


{% block header_title %}&quot;{{ achievement.name }}&quot; | {{ ecosystem.name }} | WAXBadges Achievements Explorer{% endblock %}



Expand Down Expand Up @@ -44,23 +58,108 @@
height: 3.2em;
overflow: hidden;
}

.usergrants {
margin-top: 2em;
padding: 1em;
border-radius: 1em;
background-color: #222;
border: 1px solid black;
text-align: center;
margin-bottom: 3em;
}
.usergrant {
text-align: center;
width: 200px;
padding: 0.125em;
padding-top: 0.5em;
margin: 0.25em;
background-color: #333;
border: 1px solid #444;
display: inline-block;
clear: left;
vertical-align: top;
position: relative;
}
.usergrant:hover {
cursor: pointer;
background-color: #444;
}
.usergrant img {
float: left;
margin-left: 0.5em;
margin-right: 0.25em;
width: 40px;
height: 40px;
border-radius: 0.5em;
}
.username {
font-size: 0.8em;
}
.timestamp {
font-size: 0.7em;
color: #555;
}
</style>
{% endblock %}




{% block social_media_shares %}
<div class="tweet_button">
<a class="twitter-share-button"
href="https://twitter.com/intent/tweet"
data-size="large"
data-text="The &quot;{{ achievement.name }}&quot; achievement from {{ ecosystem.name }}"
data-url="https://explorer.waxbadges.com/ach/{{ ecosystem.key }}/{{ category_id }}/{{ achievement.key }}"
data-related="WAXBadges">
Tweet
</a>
</div>
{% endblock %}



{% block main_content %}
<div id="ecosystem_name" class="page_title">{{ ecosystem.name }}</div>
<div id="ecosystem_website"><a href="{{ ecosystem.website }}" target="_new">{{ ecosystem.website }}</a></div>
<div id="ecosystem_description">{{ ecosystem.description }}</div>

<div class="achievement">
<img class="ach_asset" src="//{{ ecosystem.assetbaseurl }}/{{ ach.assetname }}"/>
<div class="ach_name">{{ ach.name }}</div>
<div class="ach_quantity">max: {{ ach.maxquantity }}</div>
<div class="ach_description">{{ ach.description }}</div>
<img class="ach_asset" src="//{{ ecosystem.assetbaseurl }}/{{ achievement.assetname }}"/>
<div class="ach_name">{{ achievement.name }}</div>
<div class="ach_quantity">max: {{ achievement.maxquantity }}</div>
<div class="ach_description">{{ achievement.description }}</div>
</div>

<div class="usergrants">
<div class="section_title">User Grants</div>
{% for usergrant in usergrants %}
<div class="usergrant" id="usergrant_{{ usergrant.user.user_id }}">
<img src="{{ usergrant.user.avatarurl }}"/>
<span class="username">{{ usergrant.user.name }}</span>
<div class="timestamp">{{ usergrant.timestamp.strftime('%Y-%m-%d %H:%M:%S') }}</div>
</div>
{% endfor %}
</div>
{% endblock %}



{% block js_content %}
<script>

$(document).ready(function() {
// Wire up onclicks for granted users
{% for usergrant in usergrants %}
$("#usergrant_{{ usergrant.user.user_id }}").click(function() {
location.href = "/poa/{{ ecosystem.key }}/{{ category_id }}/{{ achievement.key }}/{{ usergrant.user.user_id }}";
});
{% endfor %}
});

</script>
{% endblock %}


Expand Down
Loading

0 comments on commit 0d3e09b

Please sign in to comment.