Skip to content

Commit

Permalink
feat: make analytics dashboard public (#1850)
Browse files Browse the repository at this point in the history
  • Loading branch information
jo-elimu authored Aug 24, 2024
2 parents 11625b2 + 025628b commit 1c645a7
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 100 deletions.
170 changes: 72 additions & 98 deletions src/main/webapp/WEB-INF/jsp/analytics/layout.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -45,32 +45,21 @@
</div>

<nav class="deep-purple lighten-1">
<div class="row nav-wrapper">
<div class="col s1">
<div class="nav-wrapper container">
<a id="logo-container" href="<spring:url value='/' />" class="brand-logo">
<img src="<spring:url value='/static/img/logo-text-256x77.png' />" alt="elimu.ai" />
</a>
<sec:authorize access="!hasAnyRole('ROLE_ADMIN','ROLE_CONTRIBUTOR')">
<ul class="right hide-on-med-and-down">
<li><a href="<spring:url value='/sign-on' />"><fmt:message key="sign.on" /></a></li>
</ul>
<ul id="nav-mobile" class="side-nav">
<li>
<a href="<spring:url value='/analytics' />">
<img style="max-width: 100%; vertical-align: middle; max-height: 60%;" src="<spring:url value='/static/img/logo-text-256x78.png' />" alt="elimu.ai" />
</a>
</li>

<li class="divider"></li>
<li class="grey-text"><b><fmt:message key="learning.events" /></b></li>
<li><a href="<spring:url value='/analytics/letter-learning-event/list' />"><i class="material-icons left">text_format</i><fmt:message key="letters" /></a></li>
<li><a href="<spring:url value='/analytics/word-learning-event/list' />"><i class="material-icons left">sms</i><fmt:message key="words" /></a></li>
<li><a href="<spring:url value='/analytics/storybook-learning-event/list' />"><i class="material-icons left">book</i><fmt:message key="storybooks" /></a></li>
<li><a href="<spring:url value='/sign-on' />"><fmt:message key="sign.on" /></a></li>
</ul>
<a id="navButton" href="<spring:url value='/analytics' />" data-activates="nav-mobile" class="waves-effect waves-light"><i class="material-icons">dehaze</i></a>
</div>
<div class="col s5">
<a href="<spring:url value='/analytics' />" class="breadcrumb"><fmt:message key="analytics" /></a>
<c:if test="${!fn:contains(pageContext.request.requestURI, '/jsp/analytics/main.jsp')}">
<a class="breadcrumb"><content:gettitle /></a>
</c:if>
</div>
<div class="col s6">
</sec:authorize>
<sec:authorize access="hasAnyRole('ROLE_ADMIN','ROLE_CONTRIBUTOR')">
<ul class="right">
<a class="dropdown-button" data-activates="contributorDropdown" data-beloworigin="true" >
<a href="<spring:url value='/content' />">
<div class="chip">
<c:choose>
<c:when test="${not empty contributor.imageUrl}">
Expand All @@ -93,89 +82,74 @@
</c:choose>
</div>
</a>
<ul id='contributorDropdown' class='dropdown-content'>
<li><a href="<spring:url value='/content/contributor/${contributor.id}' />"><i class="material-icons left">art_track</i><fmt:message key="my.contributions" /></a></li>
<li class="divider"></li>
<li><a href="<spring:url value='/content/contributor/edit-name' />"><i class="material-icons left">mode_edit</i><fmt:message key="edit.name" /></a></li>
<%--<li class="divider"></li>
<li><a href="<spring:url value='/content/contributor/edit-email' />"><i class="material-icons left">mail</i><fmt:message key="edit.email" /></a></li>--%>
<sec:authorize access="hasRole('ROLE_ADMIN')">
<li class="divider"></li>
<li><a href="<spring:url value='/admin' />"><i class="material-icons left">build</i><fmt:message key="administration" /></a></li>
</sec:authorize>
<sec:authorize access="hasRole('ROLE_ANALYST')">
<li class="divider"></li>
<li><a href="<spring:url value='/analytics' />"><i class="material-icons left">timeline</i><fmt:message key="analytics" /></a></li>
</sec:authorize>
<li class="divider"></li>
<li><a id="logout" href="<spring:url value='/logout' />"><i class="material-icons left">power_settings_new</i><fmt:message key="sign.out" /></a></li>
</ul>
</ul>

<ul class="right">
<script>
/**
* Fetch token balance
*/
async function getBalance(contributorAddress) {
console.info('getBalance');
</sec:authorize>

<ul class="right">
<script>
/**
* Fetch token balance
*/
async function getBalance(contributorAddress) {
console.info('getBalance');
// Connect to the web3 provider.
const provider = await connect()
window.web3 = new Web3(provider);
console.info('window.web3: ' + window.web3);
// Connect to the web3 provider.
const provider = await connect()
window.web3 = new Web3(provider);
console.info('window.web3: ' + window.web3);
var contractAbi = [{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}];
var contractAddress = '0xe29797910d413281d2821d5d9a989262c8121cc2';
var contract = new window.web3.eth.Contract(contractAbi, contractAddress);
var balance = await contract.methods.balanceOf(contributorAddress).call();
var contractAbi = [{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}];
var contractAddress = '0xe29797910d413281d2821d5d9a989262c8121cc2';
var contract = new window.web3.eth.Contract(contractAbi, contractAddress);
var balance = await contract.methods.balanceOf(contributorAddress).call();
return balance;
}
</script>
<c:choose>
<c:when test="${empty contributor.providerIdWeb3}">
<a class="btn tokenButton" href="<spring:url value='/sign-on/web3' />">
<svg style="width: 24px; height: 24px; top: 6px; position: relative; right: 5px;" viewBox="0 0 784.37 1277.39" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xodm="http://www.corel.com/coreldraw/odm/2003">
<g>
<polygon fill="#343434" fill-rule="nonzero" points="392.07,0 383.5,29.11 383.5,873.74 392.07,882.29 784.13,650.54 "/>
<polygon fill="#8C8C8C" fill-rule="nonzero" points="392.07,0 -0,650.54 392.07,882.29 392.07,472.33 "/>
<polygon fill="#3C3C3B" fill-rule="nonzero" points="392.07,956.52 387.24,962.41 387.24,1263.28 392.07,1277.38 784.37,724.89 "/>
<polygon fill="#8C8C8C" fill-rule="nonzero" points="392.07,1277.38 392.07,956.52 -0,724.89 "/>
<polygon fill="#141414" fill-rule="nonzero" points="392.07,882.29 784.13,650.54 392.07,472.33 "/>
<polygon fill="#393939" fill-rule="nonzero" points="0,650.54 392.07,882.29 392.07,472.33 "/>
</g>
</svg>&nbsp;Connect wallet
</a>
</c:when>
<c:otherwise>
<c:set var="etherscanUrl" value="https://etherscan.io" />
<c:if test="${applicationScope.configProperties['env'] != 'PROD'}">
<c:set var="etherscanUrl" value="https://rinkeby.etherscan.io" />
</c:if>
<a class="btn tokenButton" href="${etherscanUrl}/token/0xe29797910d413281d2821d5d9a989262c8121cc2?a=${contributor.providerIdWeb3}" target="_blank">
<code><span id="tokenBalance">0</span> $ELIMU</code>
</a>
<script>
$(function() {
var contributorAddress = '${contributor.providerIdWeb3}';
getBalance(contributorAddress).then(function(result) {
console.info('result: ' + result);
return balance;
}
</script>
<c:choose>
<c:when test="${empty contributor.providerIdWeb3}">
<a class="btn tokenButton" href="<spring:url value='/sign-on/web3' />">
<svg style="width: 24px; height: 24px; top: 6px; position: relative; right: 5px;" viewBox="0 0 784.37 1277.39" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xodm="http://www.corel.com/coreldraw/odm/2003">
<g>
<polygon fill="#343434" fill-rule="nonzero" points="392.07,0 383.5,29.11 383.5,873.74 392.07,882.29 784.13,650.54 "/>
<polygon fill="#8C8C8C" fill-rule="nonzero" points="392.07,0 -0,650.54 392.07,882.29 392.07,472.33 "/>
<polygon fill="#3C3C3B" fill-rule="nonzero" points="392.07,956.52 387.24,962.41 387.24,1263.28 392.07,1277.38 784.37,724.89 "/>
<polygon fill="#8C8C8C" fill-rule="nonzero" points="392.07,1277.38 392.07,956.52 -0,724.89 "/>
<polygon fill="#141414" fill-rule="nonzero" points="392.07,882.29 784.13,650.54 392.07,472.33 "/>
<polygon fill="#393939" fill-rule="nonzero" points="0,650.54 392.07,882.29 392.07,472.33 "/>
</g>
</svg>&nbsp;Connect wallet
</a>
</c:when>
<c:otherwise>
<c:set var="etherscanUrl" value="https://etherscan.io" />
<c:if test="${applicationScope.configProperties['env'] != 'PROD'}">
<c:set var="etherscanUrl" value="https://rinkeby.etherscan.io" />
</c:if>
<a class="btn tokenButton" href="${etherscanUrl}/token/0xe29797910d413281d2821d5d9a989262c8121cc2?a=${contributor.providerIdWeb3}" target="_blank">
<code><span id="tokenBalance">0</span> $ELIMU</code>
</a>
<script>
$(function() {
var contributorAddress = '${contributor.providerIdWeb3}';
getBalance(contributorAddress).then(function(result) {
console.info('result: ' + result);
var tokenBalance = result / 1000000000000000000;
console.info('tokenBalance: ' + tokenBalance);
var tokenBalance = result / 1000000000000000000;
console.info('tokenBalance: ' + tokenBalance);
var tokenBalanceFormatted = Intl.NumberFormat().format(Math.round(tokenBalance));
console.info('tokenBalanceFormatted ' + tokenBalanceFormatted);
var tokenBalanceFormatted = Intl.NumberFormat().format(Math.round(tokenBalance));
console.info('tokenBalanceFormatted ' + tokenBalanceFormatted);
$('#tokenBalance').html(tokenBalanceFormatted);
});
$('#tokenBalance').html(tokenBalanceFormatted);
});
</script>
</c:otherwise>
</c:choose>
</ul>
</div>
});
</script>
</c:otherwise>
</c:choose>
</ul>

<a href="#" data-activates="nav-mobile" class="button-collapse"><i class="material-icons">menu</i></a>
</div>
</nav>

Expand Down
2 changes: 1 addition & 1 deletion src/main/webapp/WEB-INF/jsp/welcome.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@

<div class="col s12 m4">
<div class="icon-block">
<h2 class="center amber-text darken-2"><i class="material-icons medium">auto_graph</i></h2>
<h2 class="center amber-text text-darken-2"><i class="material-icons medium">auto_graph</i></h2>
<h4 class="center"><fmt:message key="solution" /></h4>

<p class="light center">Build innovative learning software that empowers out-of-school children to teach themselves basic reading📖, writing✍🏽 and math🔢 <b>within 6 months</b>.</p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
<form-login login-page="/sign-on" authentication-failure-url="/sign-on?error" />

<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/analytics/**" access="hasRole('ROLE_ANALYST')" />
<intercept-url pattern="/content/**" access="hasRole('ROLE_CONTRIBUTOR')" />

<logout />
Expand Down

0 comments on commit 1c645a7

Please sign in to comment.