Skip to content
This repository was archived by the owner on Jan 15, 2019. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models


class Migration(SchemaMigration):

def forwards(self, orm):
# Adding field 'Question.topic'
db.add_column(u'knowledge_question', 'topic',
self.gf('django.db.models.fields.BooleanField')(default=False),
keep_default=False)


# Changing field 'Question.user'
db.alter_column(u'knowledge_question', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True))

# Changing field 'Response.user'
db.alter_column(u'knowledge_response', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True))

def backwards(self, orm):
# Deleting field 'Question.topic'
db.delete_column(u'knowledge_question', 'topic')


# Changing field 'Question.user'
db.alter_column(u'knowledge_question', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm[user_model_label], null=True))

# Changing field 'Response.user'
db.alter_column(u'knowledge_response', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm[user_model_label], null=True))

models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'knowledge.category': {
'Meta': {'ordering': "['title']", 'object_name': 'Category'},
'added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'lastchanged': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'})
},
u'knowledge.question': {
'Meta': {'ordering': "['-added']", 'object_name': 'Question'},
'added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'alert': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'body': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['knowledge.Category']", 'symmetrical': 'False', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'lastchanged': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
'status': ('django.db.models.fields.CharField', [], {'default': "'private'", 'max_length': '32', 'db_index': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'topic': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
},
u'knowledge.response': {
'Meta': {'ordering': "['added']", 'object_name': 'Response'},
'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'added': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
'alert': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'body': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'lastchanged': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'responses'", 'to': u"orm['knowledge.Question']"}),
'status': ('django.db.models.fields.CharField', [], {'default': "'inherit'", 'max_length': '32', 'db_index': 'True'}),
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
}
}

complete_apps = ['knowledge']
10 changes: 9 additions & 1 deletion knowledge/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@ class Question(KnowledgeBase):
default='private', db_index=True)

locked = models.BooleanField(default=False)

topic = models.BooleanField(default=False)

categories = models.ManyToManyField('knowledge.Category', blank=True)

Expand Down Expand Up @@ -193,6 +195,12 @@ def lock(self, save=True):
if save:
self.save()
lock.alters_data = True

def set_topic(self, save=True):
self.topic = not self.topic
if save:
self.save()
set_topic.alters_data = True

###################
#### RESPONSES ####
Expand Down Expand Up @@ -241,7 +249,7 @@ def states(self):
"""
Handy for checking for mod bar button state.
"""
return [self.status, 'lock' if self.locked else None]
return [self.status, 'lock' if self.locked else None, 'set_topic' if self.topic else None]

@property
def url(self):
Expand Down
9 changes: 9 additions & 0 deletions knowledge/templates/django_knowledge/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@

{% block knowledge_widgets %}

{% if not topics|length_is:0 %}
<div class="dk-widget">
<h3>{% trans "Help Topics" %}</h3>
<hr />

{% include 'django_knowledge/topic_list.html' %}
</div>
{% endif %}

<div class="dk-widget">
<h3>{% blocktrans with count=questions|length %}Top {{ count }} Questions{% endblocktrans %}</h3>
<hr />
Expand Down
8 changes: 8 additions & 0 deletions knowledge/templates/django_knowledge/topic_list.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{% load i18n %}
{% load url from future %}

<ol class="question-list">
{% for question in topics %}
<li><a href="{{ question.get_absolute_url }}">{{ question.title }}</a>&nbsp; {% if not question.get_responses and not question.topic %}<span class="dk-label dk-label-important">{% trans "no responses" %}</span>{% else %}<span class="dk-label">{{ question.get_responses|length }}&nbsp;responses</span>{% endif %}&nbsp; {% if question.accepted %}<span class="dk-label dk-label-warning">{% trans "accepted" %}</span>&nbsp;{% endif %} {% if question.user.is_staff %}<span class="dk-label dk-label-success">{% trans "staff" %}</span>&nbsp;{% endif %} <small class="quiet">by {{ question.get_name }}</small></li>
{% endfor %}
</ol>
8 changes: 7 additions & 1 deletion knowledge/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
'question': [
'private', 'public',
'delete', 'lock',
'set_topic',
'clear_accepted'
],
'response': [
Expand Down Expand Up @@ -43,13 +44,18 @@ def knowledge_index(request,
return HttpResponseRedirect(settings.LOGIN_URL+"?next=%s" % request.path)

questions = Question.objects.can_view(request.user)\
.prefetch_related('responses__question')[0:20]
.prefetch_related('responses__question').filter(topic=False)[0:20]
# this is for get_responses()
[setattr(q, '_requesting_user', request.user) for q in questions]

topics = Question.objects.can_view(request.user)\
.prefetch_related('responses__question').filter(topic=True)\
.order_by('title')[0:20]

return render(request, template, {
'request': request,
'questions': questions,
'topics' : topics,
'my_questions': get_my_questions(request),
'categories': Category.objects.all()
})
Expand Down