You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2013/02/25 22:56:17 UTC
[48/50] [abbrv] git commit: [5453] Allowing to hide stats
[5453] Allowing to hide stats
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/a5d9e952
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/a5d9e952
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/a5d9e952
Branch: refs/heads/si/5453
Commit: a5d9e9528a2a9d54c175ae93db24653422ece5f6
Parents: 7a3516a
Author: Stefano Invernizzi <st...@apache.org>
Authored: Sat Feb 16 13:01:52 2013 +0100
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Mon Feb 25 20:20:57 2013 +0000
----------------------------------------------------------------------
Allura/allura/controllers/auth.py | 10 +++++++++
Allura/allura/ext/user_profile/user_main.py | 2 +-
Allura/allura/lib/plugin.py | 8 +++++++
Allura/allura/lib/widgets/forms.py | 16 +++++++++++++++
Allura/allura/model/contrib_stats.py | 1 +
Allura/allura/templates/user_preferences.html | 8 +++++++
.../forgeuserstats/controllers/userstats.py | 11 ++++++++++
.../forgeuserstats/templates/artifacts.html | 15 +++++++++++++-
.../forgeuserstats/templates/commits.html | 15 +++++++++++++-
ForgeUserStats/forgeuserstats/templates/index.html | 15 ++++++++++++-
.../forgeuserstats/templates/tickets.html | 15 +++++++++++++-
11 files changed, 110 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a5d9e952/Allura/allura/controllers/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/auth.py b/Allura/allura/controllers/auth.py
index 8b0be12..e7031d0 100644
--- a/Allura/allura/controllers/auth.py
+++ b/Allura/allura/controllers/auth.py
@@ -58,6 +58,7 @@ class F(object):
remove_inactive_period_form = forms.RemoveInactivePeriodForm()
save_skill_form = forms.AddUserSkillForm()
remove_skill_form = forms.RemoveSkillForm()
+ set_statistics = forms.StatsPreferencesForm()
class AuthController(BaseController):
@@ -657,6 +658,15 @@ class PreferencesController(BaseController):
@expose()
@require_post()
+ @validate(F.set_statistics, error_handler=index)
+ def set_statistics(self, **kw):
+ require_authenticated()
+ c.user.stats.visible = kw.get('visible', True)
+ flash('Your preferences about statistics were successfully updated!')
+ redirect('.#Statistics')
+
+ @expose()
+ @require_post()
def upload_sshkey(self, key=None):
ap = plugin.AuthenticationProvider.get(request)
try:
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a5d9e952/Allura/allura/ext/user_profile/user_main.py
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/user_profile/user_main.py b/Allura/allura/ext/user_profile/user_main.py
index 759f3f3..f3c3331 100644
--- a/Allura/allura/ext/user_profile/user_main.py
+++ b/Allura/allura/ext/user_profile/user_main.py
@@ -64,7 +64,7 @@ class UserProfileController(BaseController):
user = c.project.user_project_of
if not user:
raise exc.HTTPNotFound()
- if g.show_userstats:
+ if g.show_userstats and user.stats.visible:
from forgeuserstats.main import ForgeUserStatsApp
link, description = ForgeUserStatsApp.createlink(user)
else:
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a5d9e952/Allura/allura/lib/plugin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index dcbc36e..4ec29de 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -725,6 +725,14 @@ class ThemeProvider(object):
return RemoveInactivePeriodForm()
@LazyProperty
+ def statistics_form(self):
+ '''
+ :return: None, or an easywidgets Form to render on the user preferences page
+ '''
+ from allura.lib.widgets.forms import StatsPreferencesForm
+ return StatsPreferencesForm(action='/auth/prefs/set_statistics')
+
+ @LazyProperty
def add_trove_category(self):
'''
:return: None, or an easywidgets Form to render on the page to create a
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a5d9e952/Allura/allura/lib/widgets/forms.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/widgets/forms.py b/Allura/allura/lib/widgets/forms.py
index f76eff3..c1a1d75 100644
--- a/Allura/allura/lib/widgets/forms.py
+++ b/Allura/allura/lib/widgets/forms.py
@@ -451,6 +451,22 @@ class RemoveTimeSlotForm(ForgeForm):
d['endtime'] = V.convertTime(kw.get('endtime',''))
return d
+
+class StatsPreferencesForm(ForgeForm):
+ defaults=dict(ForgeForm.defaults)
+
+ class fields(ew_core.NameList):
+ visible = ew.Checkbox(
+ label='Make my personal statistics visible to other users.')
+
+ def display(self, **kw):
+ if kw.get('user').stats.visible:
+ self.fields['visible'].attrs = {'checked':'true'}
+ else:
+ self.fields['visible'].attrs = {}
+ return super(ForgeForm, self).display(**kw)
+
+
class RemoveTroveCategoryForm(ForgeForm):
defaults=dict(ForgeForm.defaults, submit_text=None, show_errors=False)
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a5d9e952/Allura/allura/model/contrib_stats.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/contrib_stats.py b/Allura/allura/model/contrib_stats.py
index 8a71d86..d9cada2 100644
--- a/Allura/allura/model/contrib_stats.py
+++ b/Allura/allura/model/contrib_stats.py
@@ -21,6 +21,7 @@ class Stats(MappedClass):
_id=FieldProperty(S.ObjectId)
+ visible = FieldProperty(bool, if_missing = True)
registration_date = FieldProperty(datetime)
general = FieldProperty([dict(
category = S.ObjectId,
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a5d9e952/Allura/allura/templates/user_preferences.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/user_preferences.html b/Allura/allura/templates/user_preferences.html
index be4dfe6..9947eff 100644
--- a/Allura/allura/templates/user_preferences.html
+++ b/Allura/allura/templates/user_preferences.html
@@ -129,6 +129,14 @@
<ul><li><a href="/auth/prefs/user_skills">Click here to check and change your skills list</a></li></ul>
</div>
+ {% if g.show_userstats %}
+ <a name="Statistics"></a>
+ <div class="grid-20">
+ <h2>Contribution statistics</h2>
+ {{g.theme.statistics_form.display(user=c.user)}}
+ </div>
+ {% endif %}
+
{% if g.theme.password_change_form %}
<div class="grid-20">
<h2>Change Password</h2>
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a5d9e952/ForgeUserStats/forgeuserstats/controllers/userstats.py
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/controllers/userstats.py b/ForgeUserStats/forgeuserstats/controllers/userstats.py
index b84eb0f..3944557 100644
--- a/ForgeUserStats/forgeuserstats/controllers/userstats.py
+++ b/ForgeUserStats/forgeuserstats/controllers/userstats.py
@@ -5,6 +5,7 @@ from allura.controllers import BaseController
import allura.model as M
from allura.lib.graphics.graphic_methods import create_histogram, create_progress_bar
from forgeuserstats.model.stats import UserStats
+from pylons import c
class ForgeUserStatsController(BaseController):
@@ -33,6 +34,8 @@ class ForgeUserStatsController(BaseController):
if not self.user:
return dict(user=None)
stats = self.user.stats
+ if (not stats.visible) and (c.user != self.user):
+ return dict(user=self.user)
ret_dict = _getDataForCategory(None, stats)
ret_dict['user'] = self.user
@@ -133,6 +136,8 @@ class ForgeUserStatsCatController(BaseController):
if not self.user:
return dict(user=None)
stats = self.user.stats
+ if (not stats.visible) and (c.user != self.user):
+ return dict(user=self.user)
cat_id = None
if self.category:
@@ -156,6 +161,8 @@ class ForgeUserStatsMetricController(BaseController):
if not self.user:
return dict(user=None)
stats = self.user.stats
+ if (not stats.visible) and (c.user != self.user):
+ return dict(user=self.user)
commits = stats.getCommitsByCategory()
return dict(user = self.user,
@@ -166,6 +173,8 @@ class ForgeUserStatsMetricController(BaseController):
def artifacts(self, **kw):
if not self.user:
return dict(user=None)
+ if (not stats.visible) and (c.user != self.user):
+ return dict(user=self.user)
stats = self.user.stats
artifacts = stats.getArtifactsByCategory(detailed=True)
@@ -176,6 +185,8 @@ class ForgeUserStatsMetricController(BaseController):
def tickets(self, **kw):
if not self.user:
return dict(user=None)
+ if (not stats.visible) and (c.user != self.user):
+ return dict(user=self.user)
artifacts = self.user.stats.getTicketsByCategory()
return dict(user = self.user, data = artifacts)
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a5d9e952/ForgeUserStats/forgeuserstats/templates/artifacts.html
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/templates/artifacts.html b/ForgeUserStats/forgeuserstats/templates/artifacts.html
index 9492628..d6a01d6 100644
--- a/ForgeUserStats/forgeuserstats/templates/artifacts.html
+++ b/ForgeUserStats/forgeuserstats/templates/artifacts.html
@@ -9,7 +9,7 @@
{% block content %}
- {% if user %}
+ {% if user and (user.stats.visible or (c.user == user)) %}
<div class="grid-20">
<ul><li><a href="/userstats/{{user.username}}">Go back to general statistics</a></li></ul>
</div>
@@ -47,6 +47,19 @@
</table>
</div>
{% endif %}
+ {% else %}
+ {% if not user.stats.visible %}
+ <h2>Statistics not available</h2>
+ <div class="grid-20">
+ This user has set his or her preferences so that personal statistics are not visible
+ to other users of the forge.
+ </div>
+ {% else %}
+ <h2>Invalid user</h2>
+ <div class="grid-20">
+ You are looking for personal statistics of a user which doesn't exist on this forge. Check your url.
+ </div>
+ {% endif %}
{% endif %}
{% endblock %}
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a5d9e952/ForgeUserStats/forgeuserstats/templates/commits.html
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/templates/commits.html b/ForgeUserStats/forgeuserstats/templates/commits.html
index 12f9712..cec0ab7 100644
--- a/ForgeUserStats/forgeuserstats/templates/commits.html
+++ b/ForgeUserStats/forgeuserstats/templates/commits.html
@@ -9,7 +9,7 @@
{% block content %}
- {% if user %}
+ {% if user and (user.stats.visible or (c.user == user)) %}
<div class="grid-20">
<ul><li><a href="/userstats/{{user.username}}">Go back to general statistics</a></li></ul>
</div>
@@ -37,5 +37,18 @@
</table>
</div>
{% endif %}
+ {% else %}
+ {% if not user.stats.visible %}
+ <h2>Statistics not available</h2>
+ <div class="grid-20">
+ This user has set his or her preferences so that personal statistics are not visible
+ to other users of the forge.
+ </div>
+ {% else %}
+ <h2>Invalid user</h2>
+ <div class="grid-20">
+ You are looking for personal statistics of a user which doesn't exist on this forge. Check your url.
+ </div>
+ {% endif %}
{% endif %}
{% endblock %}
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a5d9e952/ForgeUserStats/forgeuserstats/templates/index.html
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/templates/index.html b/ForgeUserStats/forgeuserstats/templates/index.html
index 37cd5da..4a8f504 100644
--- a/ForgeUserStats/forgeuserstats/templates/index.html
+++ b/ForgeUserStats/forgeuserstats/templates/index.html
@@ -11,7 +11,7 @@
{% endblock %}
{% block content %}
- {% if user %}
+ {% if user and (user.stats.visible or (c.user == user)) %}
{% if category %}
<ul>
@@ -418,7 +418,18 @@
</p>
{% endif %}
{% else %}
- Invalid user!
+ {% if not user.stats.visible %}
+ <h2>Statistics not available</h2>
+ <div class="grid-20">
+ This user has set his or her preferences so that personal statistics are not visible
+ to other users of the forge.
+ </div>
+ {% else %}
+ <h2>Invalid user</h2>
+ <div class="grid-20">
+ You are looking for personal statistics of a user which doesn't exist on this forge. Check your url.
+ </div>
+ {% endif %}
{% endif %}
{% endblock %}
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a5d9e952/ForgeUserStats/forgeuserstats/templates/tickets.html
----------------------------------------------------------------------
diff --git a/ForgeUserStats/forgeuserstats/templates/tickets.html b/ForgeUserStats/forgeuserstats/templates/tickets.html
index 4604c16..6ee66d4 100644
--- a/ForgeUserStats/forgeuserstats/templates/tickets.html
+++ b/ForgeUserStats/forgeuserstats/templates/tickets.html
@@ -9,7 +9,7 @@
{% block content %}
- {% if user %}
+ {% if user and (user.stats.visible or (c.user == user)) %}
<div class="grid-20">
<ul><li><a href="/userstats/{{user.username}}">Go back to general statistics</a></li></ul>
</div>
@@ -47,5 +47,18 @@
</table>
</div>
{% endif %}
+ {% else %}
+ {% if not user.stats.visible %}
+ <h2>Statistics not available</h2>
+ <div class="grid-20">
+ This user has set his or her preferences so that personal statistics are not visible
+ to other users of the forge.
+ </div>
+ {% else %}
+ <h2>Invalid user</h2>
+ <div class="grid-20">
+ You are looking for personal statistics of a user which doesn't exist on this forge. Check your url.
+ </div>
+ {% endif %}
{% endif %}
{% endblock %}