Permalink
Browse files

New optional admin interface, and closing OSQA 253.

git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@254 0cfe37f9-358a-4d5e-be75-b63607b5c754
  • Loading branch information...
1 parent 19af2f1 commit 1876ec0c8caf982704410cee305d0cde218421d4 hernani committed May 13, 2010
View
@@ -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):
View
@@ -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:
@@ -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
View
@@ -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.")))
@@ -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))
View
@@ -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)
View
@@ -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.",
@@ -45,4 +45,10 @@
.string_list_widget_button.add {
position: relative;
left: 554px;
+}
+
+table caption {
+ font-size: 120%;
+ padding: 3px 0;
+ text-align: left;
}
@@ -0,0 +1,7 @@
+textarea {
+ width: 100%;
+}
+
+input.longstring {
+ width: 100%;
+}
@@ -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 %}">
@@ -1,36 +0,0 @@
-{% extends "base_content.html" %}
-<!--signup.html-->
-{% load i18n %}
-{% block title %}{% spaceless %}{% trans "Signup" %}{% endspaceless %}{% endblock %}
-
-{% block content %}
-<div class="headNormal">
- {% trans "Create login name and password" %}
-</div>
-<p class="message">{% trans "Traditional signup info" %}</p>
-<form action="" method="post" accept-charset="utf-8">
- <ul class="form-horizontal-rows">
- <li><label for="usename_id">{{form.username.label}}</label>{{form.username}}{{form.username.errors}}</li>
- <li><label for="email_id">{{form.email.label}}</label>{{form.email}}{{form.email.errors}}</li>
- <li><label for="password1_id">{{form.password1.label}}</label>{{form.password1}}{{form.password1.errors}}</li>
- <li><label for="password2_id">{{form.password2.label}}</label>{{form.password2}}{{form.password2.errors}}</li>
- </ul>
- <p class="margin-top">{% trans "receive updates motivational blurb" %}</p>
- <div class='simple-subscribe-options'>
- {{ email_feeds_form.subscribe }}
- {% if email_feeds_form.errors %}
- <p class="error">{% trans "please select one of the options above" %}</p>
- {% endif %}
- </div>
- <div>
- {% for field in form.anti_spam_fields %}
- <div>{{ field }}</div>
- <p class="error">{{ field.errors }}</p>
- {% endfor %}
- </div>
- <div class="submit-row"><input type="submit" class="submit" value="{% trans "Create Account" %}" />
- <strong>{% trans "or" %}
- <a href="{% url auth_signin %}">{% trans "return to login page" %}</a></strong></div>
-</form>
-{% endblock %}
-<!--end signup.html-->
@@ -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 %}
@@ -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 %}
@@ -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>
@@ -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>
@@ -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>
Oops, something went wrong.

0 comments on commit 1876ec0

Please sign in to comment.