Skip to content

Commit

Permalink
New optional admin interface, and closing OSQA 253.
Browse files Browse the repository at this point in the history
git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@254 0cfe37f9-358a-4d5e-be75-b63607b5c754
  • Loading branch information
hernani committed May 13, 2010
1 parent 19af2f1 commit 1876ec0
Show file tree
Hide file tree
Showing 20 changed files with 356 additions and 68 deletions.
14 changes: 13 additions & 1 deletion forum/actions/user.py
Expand Up @@ -3,13 +3,25 @@
from forum.models.action import ActionProxy
from forum.models import Award
from forum import settings
from forum.settings import APP_SHORT_NAME

class UserJoinsAction(ActionProxy):
def repute_users(self):
self.repute(self.user, int(settings.INITIAL_REP))

def describe(self, viewer=None):
return _("%(user)s as joined the %(app_name)s Q&A community") % {
'user': self.hyperlink(self.user.get_profile_url(), self.friendly_username(viewer, self.user)),
'app_name': APP_SHORT_NAME,
}

class EditProfileAction(ActionProxy):
pass
def describe(self, viewer=None):
return _("%(user)s edited %(hes_or_your)s %(profile_link)s") % {
'user': self.hyperlink(self.user.get_profile_url(), self.friendly_username(viewer, self.user)),
'hes_or_your': self.viewer_or_user_verb(viewer, self.user, _('your'), _('hes')),
'profile_link': self.hyperlink(self.user.get_profile_url(), _('profile')),
}

class AwardAction(ActionProxy):
def process_data(self, badge, trigger):
Expand Down
2 changes: 1 addition & 1 deletion forum/models/action.py
Expand Up @@ -70,7 +70,7 @@ def verb(self):
return ""

def describe(self, viewer=None):
return ""
return self.__class__.__name__

def get_absolute_url(self):
if self.node:
Expand Down
5 changes: 4 additions & 1 deletion forum/settings/__init__.py
Expand Up @@ -8,8 +8,11 @@
from django.utils.version import get_svn_revision

OSQA_VERSION = "Development Build"
SVN_REVISION = get_svn_revision(djsettings.SITE_SRC_ROOT)
SVN_REVISION = get_svn_revision(djsettings.SITE_SRC_ROOT)

SETTINGS_PACK = Setting('SETTINGS_PACK', "default")
DJSTYLE_ADMIN_INTERFACE = Setting('DJSTYLE_ADMIN_INTERFACE', True)

APP_URL = djsettings.APP_URL
FORUM_SCRIPT_ALIAS = djsettings.FORUM_SCRIPT_ALIAS

Expand Down
9 changes: 0 additions & 9 deletions forum/settings/basic.py
Expand Up @@ -35,11 +35,6 @@
help_text = _("The description of your application"),
widget=Textarea))

APP_INTRO = Setting('APP_INTRO', u'<p>Ask and answer questions, make the world better!</p>', BASIC_SET, dict(
label = _("Application intro"),
help_text = _("The introductory page that is visible in the sidebar for anonymous users."),
widget=Textarea))

APP_COPYRIGHT = Setting('APP_COPYRIGHT', u'Copyright OSQA, 2010. Some rights reserved under creative commons license.', BASIC_SET, dict(
label = _("Copyright notice"),
help_text = _("The copyright notice visible at the footer of your page.")))
Expand All @@ -49,7 +44,3 @@
help_text = _("If you have a specific place to get feedback from your users, use this field and the fedback link on the footer will point there."),
required=False))

SHOW_WELCOME_BOX = Setting('SHOW_WELCOME_BOX', True, BASIC_SET, dict(
label = _("Show the Welcome box"),
help_text = _("Do you want to show the welcome box when a user first visits your site."),
required=False))
2 changes: 2 additions & 0 deletions forum/settings/forms.py
Expand Up @@ -22,6 +22,8 @@ def __init__(self, set, data=None, *args, **kwargs):

for setting in set:
if isinstance(setting, (Setting.emulators.get(str, DummySetting), Setting.emulators.get(unicode, DummySetting))):
if not setting.field_context.get('widget', None):
setting.field_context['widget'] = forms.TextInput(attrs={'class': 'longstring'})
field = forms.CharField(**setting.field_context)
elif isinstance(setting, Setting.emulators.get(float, DummySetting)):
field = forms.FloatField(**setting.field_context)
Expand Down
12 changes: 12 additions & 0 deletions forum/settings/sidebar.py
@@ -1,8 +1,20 @@
from base import Setting, SettingSet
from django.forms.widgets import Textarea
from django.utils.translation import ugettext_lazy as _

SIDEBAR_SET = SettingSet('sidebar', 'Sidebar content', "Enter contents to display in the sidebar. You can use markdown and some basic html tags.", 10, True)

SHOW_WELCOME_BOX = Setting('SHOW_WELCOME_BOX', True, SIDEBAR_SET, dict(
label = _("Show the Welcome box"),
help_text = _("Do you want to show the welcome box when a user first visits your site."),
required=False))

APP_INTRO = Setting('APP_INTRO', u'<p>Ask and answer questions, make the world better!</p>', SIDEBAR_SET, dict(
label = _("Application intro"),
help_text = _("The introductory page that is visible in the sidebar for anonymous users."),
widget=Textarea))


SIDEBAR_UPPER_SHOW = Setting('SIDEBAR_UPPER_SHOW', True, SIDEBAR_SET, dict(
label = "Show Upper Block",
help_text = "Check if your pages should display the upper sidebar block.",
Expand Down
6 changes: 6 additions & 0 deletions forum/skins/default/media/style/admin.css
Expand Up @@ -45,4 +45,10 @@
.string_list_widget_button.add {
position: relative;
left: 554px;
}

table caption {
font-size: 120%;
padding: 3px 0;
text-align: left;
}
7 changes: 7 additions & 0 deletions forum/skins/default/media/style/djstyle_admin.css
@@ -0,0 +1,7 @@
textarea {
width: 100%;
}

input.longstring {
width: 100%;
}
2 changes: 1 addition & 1 deletion forum/skins/default/templates/auth/signin.html
Expand Up @@ -24,7 +24,7 @@
{% trans "User login" %}
</div>
{% if msg %}
<p class="warning">{{ msg }}</p>
<p class="error">{{ msg }}</p>
{% endif %}
{% for provider in top_stackitem_providers %}
<form class="signin_form" method="POST" action="{% url auth_provider_signin provider=provider.id %}">
Expand Down
36 changes: 0 additions & 36 deletions forum/skins/default/templates/auth/signup.html

This file was deleted.

1 change: 1 addition & 0 deletions forum/skins/default/templates/osqaadmin/base.html
Expand Up @@ -24,6 +24,7 @@

{% block sidebar %}
<div class="boxC">
<a href="{% url admin_switch_interface %}?to=djstyle">{% trans "Switch to django style interface" %}</a>
<h3 class="subtitle">{% trans "Administration menu" %}</h3>
<ul>
{% for set in sets %}
Expand Down
78 changes: 78 additions & 0 deletions forum/skins/default/templates/osqaadmin/dashboard.html
@@ -0,0 +1,78 @@
{% extends basetemplate %}

{% load i18n %}
{% load user_tags %}

{% block subtitle %}
{% trans "Dashboard" %}
{% endblock %}
{% block description %}
{% trans "Welcome to the OSQA administration area." %}
{% endblock %}

{% block admincontent %}
<div class="module" style="width:49%; display: inline-block; vertical-align: top;">
<table style="width: 100%; height: 100%;">
<caption>{% trans "Quick statistics" %}</caption>
<tr>
<td>
{{ statistics.total_questions }} {% trans "question" %}{{ statistics.total_questions|pluralize }} ({{ statistics.questions_last_24 }} {% trans "in the last 24 hours" %})
</td>
</tr>
<tr>
<td>
{{ statistics.total_answers }} {% trans "answer" %}{{ statistics.total_answers|pluralize }} ({{ statistics.answers_last_24 }} {% trans "in the last 24 hours" %})
</td>
</tr>
<tr>
<td>
{{ statistics.total_users }} {% trans "user" %}{{ statistics.total_users|pluralize }} ({{ statistics.users_last_24 }} {% trans "joined in the last 24 hours" %})
</td>
</tr>
</table>
</div>
<div class="module" style="width:49%; display: inline-block;">
<table>
<caption>{%trans "Site status" %}</caption>
<tr>
<td>
{% ifequal settings_pack "bootstrap" %}
{% trans "Your site is running in bootstrap mode, click the button below to revert to defaults." %}<br />
{% else %}
{% ifequal settings_pack "default" %}
{% trans "Your site is running in standard mode, click the button below to run in bootstrap mode." %}<br />
{% else %}
{% trans "Your site is running with some customized settings, click the buttons below to run with defaults or in bootstrap mode" %}
{% endifequal %}
{% endifequal %}
{% ifnotequal settings_pack "default" %}
<button onclick="if (window.confirm('{% trans "Are you sure you want to revert to the defaults?" %}')) window.location='{% url admin_go_defaults %}';">{% trans "revert to defaults" %}</button>
{% endifnotequal %}
{% ifnotequal settings_pack "bootstrap" %}
<button onclick="if (window.confirm('{% trans "Are you sure you want to run bootstrap mode?" %}')) window.location='{% url admin_go_bootstrap %}';">{% trans "go bootstrap" %}</button>
{% endifnotequal %}
</td>
</tr>
<tr>
<td>
<em>"Bootstrap mode" relaxes the minimum required reputation to perform actions like voting and commenting.
This is useful to help new communities get started.</em>
</td>
</tr>
</table>
</div>
<div class="module" style="width:98%; display: inline-block;">
<table width="100%">
<caption>{% trans "Recent activity" %}</caption>
<tr>
<td colspan="2">
<table width="100%">
{% for activity in recent_activity %}
<tr><td>{% activity_item activity request.user %}</td></tr>
{% endfor %}
</table>
</td>
</tr>
</table>
</div>
{% endblock %}
103 changes: 103 additions & 0 deletions forum/skins/default/templates/osqaadmin/djstyle_base.html
@@ -0,0 +1,103 @@
{% load extra_tags %}
{% load i18n %}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="{{ settings.ADMIN_MEDIA_PREFIX }}css/base.css" type="text/css"/>
<link rel="stylesheet" href="{{ settings.ADMIN_MEDIA_PREFIX }}css/forms.css" type="text/css"/>
<link rel="stylesheet" href="{{ settings.ADMIN_MEDIA_PREFIX }}css/changelists.css" type="text/css"/>
<link rel="stylesheet" type="text/css" media="screen" href="{% media "/media/style/djstyle_admin.css" %}"/>
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
//<!--
google.load("jquery", "1.3");
//-->
</script>
<script type="text/javascript" src="{% media "/media/js/osqa.admin.js" %}"></script>
{% block adminjs %}{% endblock %}
<title>{% trans "OSQA administration area" %} - {% block subtitle %}{% endblock %}</title>
</head>
<body>
<div id="container">
<div id="header">
{% block header %}
<div id="branding">
<h1 id="site-name"><a href="{% url index %}">{{ settings.APP_SHORT_NAME }} - {% trans "Administration Area" %}</a> </h1>
</div>
{% endblock %}
<div id="user-tools">
{% trans "Welcome," %}
<strong>{{ request.user.username }}</strong>.
<a href="{% url admin_switch_interface %}?to=default">{% trans "To standard interface" %}</a> / <a href="{% url logout %}">{% trans "Log out" %}</a>
</div>
</div>
<div class="breadcrumbs">
<a href="{% url index %}">{% trans "Home" %}</a> &gt
<a href="{% url admin_index %}">{% trans "Dashboard" %}</a> &gt;
{% block pagename %}{% endblock %} -
{% block description %}{% endblock %}
</div>
<div id="content" class="colMS">
<div id="content-main">
{% block admincontent %}{% endblock %}
</div>
<div id="content-related">
<div id="basic-sets-menu" class="module">
<h2>{% trans "Basic settings" %}</h2>
<ul>
<li><a href="{% url admin_set allsets.basic.name %}">{{ allsets.basic.title }}</a></li>
<li><a href="{% url admin_set allsets.users.name %}">{{ allsets.users.title }}</a></li>
<li><a href="{% url admin_set allsets.email.name %}">{{ allsets.email.title }}</a></li>
<li><a href="{% url admin_set allsets.paths.name %}">{{ allsets.paths.title }}</a></li>
<li><a href="{% url admin_set allsets.extkeys.name %}">{{ allsets.extkeys.title }}</a></li>
</ul>
</div>
<div id="workflow-sets-menu" class="module">
<h2>{% trans "Workflow settings" %}</h2>
<ul>
<li><a href="{% url admin_set allsets.repgain.name %}">{{ allsets.repgain.title }}</a></li>
<li><a href="{% url admin_set allsets.minrep.name %}">{{ allsets.minrep.title }}</a></li>
<li><a href="{% url admin_set allsets.voting.name %}">{{ allsets.voting.title }}</a></li>
<li><a href="{% url admin_set allsets.badges.name %}">{{ allsets.badges.title }}</a></li>
</ul>
</div>
<div id="forum-sets-menu" class="module">
<h2>{% trans "Forum settings" %}</h2>
<ul>
<li><a href="{% url admin_set allsets.form.name %}">{{ allsets.form.title }}</a></li>
<li><a href="{% url admin_set allsets.moderation.name %}">{{ allsets.moderation.title }}</a></li>
</ul>
</div>
<div id="pages-sets-menu" class="module">
<h2>{% trans "Static content" %}</h2>
<ul>
<li><a href="{% url admin_set allsets.about.name %}">{{ allsets.about.title }}</a></li>
<li><a href="{% url admin_set allsets.faq.name %}">{{ allsets.faq.title }}</a></li>
<li><a href="{% url admin_set allsets.sidebar.name %}">{{ allsets.sidebar.title }}</a></li>
</ul>
</div>
<div id="other-sets-menu" class="module">
<h2>{% trans "Other settings" %}</h2>
<ul>
{% for set in othersets %}
<li><a href="{% url admin_set set.name %}">{{ set.title }}</a></li>
{% endfor %}
</ul>
</div>
{% comment %}<div id="tools-menu" class="module">
<h2>{% trans "Tools" %}</h2>
<ul>
<li><a href="{% url admin_statistics %}">{% trans "Statistics" %}</a></li>
</ul>
</div>{% endcomment %}
</div>
</div>
<div id="footer" class="breadcumbs">
<a href="http://www.osqa.net">OSQA</a> <span class="version">{{ settings.OSQA_VERSION }}</span>
</div>
</div>
</body>
10 changes: 10 additions & 0 deletions forum/skins/default/templates/osqaadmin/graph.html
@@ -0,0 +1,10 @@
<div class="module" style="width:385px; height:300px; display: inline-block;">
<table style="width: 100%; height: 100%">
<caption>{{ graph.caption }}</caption>
<tr>
<td>
<div style="width: 100%; height: 100%" id="{{ graph.id }}"></div>
</td>
</tr>
</table>
</div>
6 changes: 3 additions & 3 deletions forum/skins/default/templates/osqaadmin/set.html
@@ -1,15 +1,15 @@
{% extends "osqaadmin/base.html" %}
{% extends basetemplate %}

{% load i18n %}
{% load extra_tags %}

{% block title %}{{ form.set.title }}{% endblock %}
{% block subtitle %}{{ form.set.title }}{% endblock %}
{% block pagename %}{{ form.set.title }}{% endblock %}
{% block description %}{{ form.set.description }}{% endblock %}

{% block admincontent %}
<form action="" method="POST" enctype="multipart/form-data" accept-charset="utf-8">
<table id="admin_form">
<table id="admin_form" style="width: 100%">
{{ form.as_table }}
<tr>
<th></th>
Expand Down

0 comments on commit 1876ec0

Please sign in to comment.