PerBonomi
10 years agoBoss
Badge for consecutive, daily logins
I thought it was about time to upgrade from the "ugly" javascript and use only Freemarker.
The old code is here.
Here's the new code; please feed back :)
<#if !user.anonymous> <#assign date_check = http.session.attributes.name.get("badge_daily_check_date", "")/> <#-- Read browser session variable to see if we already checked today --> <#assign date_format = restadmin("/users/id/${user.id}/settings/name/layout.format_pattern_date").value/> <#-- Check user's date format settings --> <#assign date_now = datesupport.getDateAsString()/> <#-- Get today's date --> <#assign date_now = date_now?datetime("${date_format}")?string["yyyy-MM-dd"]/> <#-- convert today's date to our preferred date format --> <#if date_check != date_now> <#-- Only run the script if we did not already check today --> ${http.session.setAttribute("badge_daily_check_date", "${date_now}")} <#-- Set the browser session variable to today's date, so we don't keep running this script on the same day --> <#assign userData = restadmin("/users/id/${user.id}/profiles/name/days_consecutive").value /> <#assign userData_date = date_now/> <#-- Set the date variable to today, so we can compare again the next time the user visits us. This will be used if it's the user's first login --> <#assign userData_cur = "0"/> <#-- The current tally of consecutive logins. This will be used if it's the user's first login --> <#assign userData_max = "0"/> <#-- The max tally of consecutive logins ever. This will be used if it's the user's first login --> <#if userData == ""> <#-- If we don't have any consecutive login data for the user start fresh --> <#assign userData_all = date_now + ',' + userData_cur + ',' + userData_max/> <#-- construct the data for the api call for a new user --> <#assign result = restadmin("/users/id/${user.id}/profiles/name/days_consecutive/set?value=${userData_all}") /> <#-- write the new user's consecutive data --> <#else> <#-- If we do already have consecutive login data for the user then continue --> <#assign userData_date = userData?substring(0,10)/> <#-- Grab the last date the user logged in from the stored variable in the db --> <#if userData_date != date_now> <#-- check again if we didn't already check the user today --> <#assign userData_max = userData?substring( userData?index_of(",",12)+1,userData?length)/> <#-- get the user's max daily logins tally --> <#assign diffCheck = ((date_now?datetime("yyyy-MM-dd")?long - userData_date?datetime("yyyy-MM-dd")?long)/(1000 * 60 * 60 * 24))?int/> <#-- compare the last date the user logged in to the date today --> <#if (diffCheck == 1)> <#-- if the user logged in yesterday, and today --> <#assign userData_cur = userData?substring( 11 , userData?last_index_of(","))?number + 1/> <#-- set the current tally of the user's consecutive days --> <#if (userData_cur?number > userData_max?number)> <#-- if the user's current tally exceeds the user's max --> <#assign userData_max = userData_max?number + 1/> <#-- then increment the user's current tally AND the user's max tally --> </#if> </#if> <#assign userData_all = date_now + ',' + userData_cur + ',' + userData_max/> <#-- construct the data for the api call for a new user --> <#assign result = restadmin("/users/id/${user.id}/profiles/name/days_consecutive/set?value=${userData_all}") /> <#-- write the new user's consecutive data --> <#-- the rest is simply checking if the user has x days consecutive, assigning the needed role if they do --> <#assign hasConsecutiveDays_1000 = false/> <#assign hasConsecutiveDays_500 = false/> <#assign hasConsecutiveDays_200 = false/> <#assign hasConsecutiveDays_100 = false/> <#assign hasConsecutiveDays_50 = false/> <#assign hasConsecutiveDays_25 = false/> <#assign hasConsecutiveDays_15 = false/> <#assign hasConsecutiveDays_10 = false/> <#assign hasConsecutiveDays_9 = false/> <#assign hasConsecutiveDays_8 = false/> <#assign hasConsecutiveDays_7 = false/> <#assign hasConsecutiveDays_6 = false/> <#assign hasConsecutiveDays_5 = false/> <#assign hasConsecutiveDays_4 = false/> <#assign hasConsecutiveDays_3 = false/> <#assign hasConsecutiveDays_2 = false/> <#assign hasConsecutiveDays_1 = false/> <#assign selfRoles = restadmin("/users/self/roles").roles.role /> <#list selfRoles as selfRole> <#if selfRole.name == "consecutiveDays_1000"><#assign hasConsecutiveDays_1000 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_500"><#assign hasConsecutiveDays_500 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_200"><#assign hasConsecutiveDays_200 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_100"><#assign hasConsecutiveDays_100 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_50"><#assign hasConsecutiveDays_50 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_25"><#assign hasConsecutiveDays_25 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_15"><#assign hasConsecutiveDays_15 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_10"><#assign hasConsecutiveDays_10 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_9"><#assign hasConsecutiveDays_9 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_8"><#assign hasConsecutiveDays_8 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_7"><#assign hasConsecutiveDays_7 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_6"><#assign hasConsecutiveDays_6 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_5"><#assign hasConsecutiveDays_5 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_4"><#assign hasConsecutiveDays_4 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_3"><#assign hasConsecutiveDays_3 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_2"><#assign hasConsecutiveDays_2 = true/><#break></#if> <#if selfRole.name == "consecutiveDays_1"><#assign hasConsecutiveDays_1 = true/><#break></#if> </#list> <#assign consecutiveDays = userData_max?number/> <#if hasConsecutiveDays_1000 == false> <#if (consecutiveDays >= 1000)> <#if hasConsecutiveDays_1000 == false><#assign result = restadmin("/roles/name/consecutiveDays_1000/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_500/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 500)> <#if hasConsecutiveDays_500 == false><#assign result = restadmin("/roles/name/consecutiveDays_500/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_200/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 200)> <#if hasConsecutiveDays_200 == false><#assign result = restadmin("/roles/name/consecutiveDays_200/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_100/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 100)> <#if hasConsecutiveDays_100 == false><#assign result = restadmin("/roles/name/consecutiveDays_100/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_50/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 50)> <#if hasConsecutiveDays_50 == false><#assign result = restadmin("/roles/name/consecutiveDays_50/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_25/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 25)> <#if hasConsecutiveDays_25 == false><#assign result = restadmin("/roles/name/consecutiveDays_25/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_15/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 15)> <#if hasConsecutiveDays_15 == false><#assign result = restadmin("/roles/name/consecutiveDays_15/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_10/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 10)> <#if hasConsecutiveDays_10 == false><#assign result = restadmin("/roles/name/consecutiveDays_10/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_9/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 9)> <#if hasConsecutiveDays_9 == false><#assign result = restadmin("/roles/name/consecutiveDays_9/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_8/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 8)> <#if hasConsecutiveDays_8 == false><#assign result = restadmin("/roles/name/consecutiveDays_8/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_7/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 7)> <#if hasConsecutiveDays_7 == false><#assign result = restadmin("/roles/name/consecutiveDays_7/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_6/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 6)> <#if hasConsecutiveDays_6 == false><#assign result = restadmin("/roles/name/consecutiveDays_6/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_5/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 5)> <#if hasConsecutiveDays_5 == false><#assign result = restadmin("/roles/name/consecutiveDays_5/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_4/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 4)> <#if hasConsecutiveDays_4 == false><#assign result = restadmin("/roles/name/consecutiveDays_4/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_3/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 3)> <#if hasConsecutiveDays_3 == false><#assign result = restadmin("/roles/name/consecutiveDays_3/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_2/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 2)> <#if hasConsecutiveDays_2 == false><#assign result = restadmin("/roles/name/consecutiveDays_2/users/add?role.user=id/${user.id}")/><#assign result = restadmin("/roles/name/consecutiveDays_1/users/remove?role.user=id/${user.id}")/></#if> <#elseif (consecutiveDays >= 1)> <#if hasConsecutiveDays_1 == false><#assign result = restadmin("/roles/name/consecutiveDays_1/users/add?role.user=id/${user.id}")/></#if> </#if> </#if> </#if> </#if> </#if> </#if>