Updated hr management to actually be useful

This commit is contained in:
Raynaldo Rivera 2014-11-20 03:21:07 -07:00
parent 9e432674fa
commit d52a0d5331
10 changed files with 424 additions and 52 deletions

View File

@ -215,6 +215,14 @@ ALLIANCE_EXEC_CORP_ID = ''
ALLIANCE_EXEC_CORP_VCODE = '' ALLIANCE_EXEC_CORP_VCODE = ''
ALLIANCE_BLUE_STANDING = 5.0 ALLIANCE_BLUE_STANDING = 5.0
#####################
# HR Configuration
#####################
# JACK_KNIFE_URL - Url for the audit page of API Jack knife
# Should seriously replace with your own.
#####################
JACK_KNIFE_URL = 'http://ridetheclown.com/eveapi/audit.php'
##################### #####################
# Forum Configuration # Forum Configuration
##################### #####################

View File

@ -70,10 +70,17 @@ urlpatterns = patterns('',
name="auth_hrapplication_remove"), name="auth_hrapplication_remove"),
url(r'hr_application_view/(\w+)', 'hrapplications.views.hr_application_view', url(r'hr_application_view/(\w+)', 'hrapplications.views.hr_application_view',
name="auth_hrapplication_view"), name="auth_hrapplication_view"),
url(r'hr_application_personal_view/', 'hrapplications.views.hr_application_personal_view', url(r'hr_application_personal_view/(\w+)', 'hrapplications.views.hr_application_personal_view',
name="auth_hrapplication_personal_view"), name="auth_hrapplication_personal_view"),
url(r'hr_application_personal_removal/', 'hrapplications.views.hr_application_personal_removal', url(r'hr_application_personal_removal/(\w+)',
'hrapplications.views.hr_application_personal_removal',
name="auth_hrapplication_personal_removal"), name="auth_hrapplication_personal_removal"),
url(r'hr_application_approve/(\w+)', 'hrapplications.views.hr_application_approve',
name="auth_hrapplication_approve"),
url(r'hr_application_reject/(\w+)', 'hrapplications.views.hr_application_reject',
name="auth_hrapplication_reject"),
url(r'hr_application_search/', 'hrapplications.views.hr_application_search',
name="auth_hrapplication_search"),
# Service Urls # Service Urls
url(r'^services/', 'services.views.services_view', name='auth_services'), url(r'^services/', 'services.views.services_view', name='auth_services'),
@ -100,9 +107,12 @@ urlpatterns = patterns('',
name='auth_reset_mumble_password'), name='auth_reset_mumble_password'),
# Ipboard service control # Ipboard service control
url(r'^activate_ipboard/$', 'services.views.activate_ipboard_forum', name='auth_activate_ipboard'), url(r'^activate_ipboard/$', 'services.views.activate_ipboard_forum',
url(r'^deactivate_ipboard/$', 'services.views.deactivate_ipboard_forum', name='auth_deactivate_ipboard'), name='auth_activate_ipboard'),
url(r'^reset_ipboard_password/$', 'services.views.reset_ipboard_password', name='auth_reset_ipboard_password'), url(r'^deactivate_ipboard/$', 'services.views.deactivate_ipboard_forum',
name='auth_deactivate_ipboard'),
url(r'^reset_ipboard_password/$', 'services.views.reset_ipboard_password',
name='auth_reset_ipboard_password'),
# Tools # Tools
url(r'^tool/fleet_formatter_tool/$', 'services.views.fleet_formatter_view', url(r'^tool/fleet_formatter_tool/$', 'services.views.fleet_formatter_view',

1
hrapplications/admin.py Normal file → Executable file
View File

@ -3,6 +3,5 @@ from django.contrib import admin
from models import HRApplication from models import HRApplication
from models import HRApplicationComment from models import HRApplicationComment
admin.site.register(HRApplication) admin.site.register(HRApplication)
admin.site.register(HRApplicationComment) admin.site.register(HRApplicationComment)

11
hrapplications/forms.py Normal file → Executable file
View File

@ -17,4 +17,13 @@ class HRApplicationForm(forms.Form):
corp = forms.ChoiceField(choices=allchoices, required=True, label="Corp") corp = forms.ChoiceField(choices=allchoices, required=True, label="Corp")
is_a_spi = forms.ChoiceField(choices=[('Yes', 'Yes'), ('No', 'No')], required=True, label='Are you a spy?') is_a_spi = forms.ChoiceField(choices=[('Yes', 'Yes'), ('No', 'No')], required=True, label='Are you a spy?')
about = forms.CharField(widget=forms.Textarea, required=False, label="About You") about = forms.CharField(widget=forms.Textarea, required=False, label="About You")
extra = forms.CharField(widget=forms.Textarea, required=False, label="Extra Application Info") extra = forms.CharField(widget=forms.Textarea, required=False, label="Extra Application Info")
class HRApplicationCommentForm(forms.Form):
app_id = forms.CharField(widget=forms.TextInput(attrs={'readonly': 'True'}))
comment = forms.CharField(widget=forms.Textarea, required=False, label="Comment", max_length=254)
class HRApplicationSearchForm(forms.Form):
search_string = forms.CharField(max_length=254, required=True, label="Search String")

14
hrapplications/models.py Normal file → Executable file
View File

@ -2,6 +2,7 @@ from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User
from eveonline.models import EveCorporationInfo from eveonline.models import EveCorporationInfo
from eveonline.models import EveCharacter
class HRApplication(models.Model): class HRApplication(models.Model):
@ -15,12 +16,19 @@ class HRApplication(models.Model):
corp = models.ForeignKey(EveCorporationInfo) corp = models.ForeignKey(EveCorporationInfo)
user = models.ForeignKey(User) user = models.ForeignKey(User)
approved_denied = models.NullBooleanField(blank=True, null=True)
reviewer_user = models.ForeignKey(User, blank=True, null=True, related_name="review_user")
reviewer_character = models.ForeignKey(EveCharacter, blank=True, null=True)
def __str__(self): def __str__(self):
return self.character_name + " - Application" return self.character_name + " - Application"
class HRApplicationComment(models.Model): class HRApplicationComment(models.Model):
date = models.DateTimeField(auto_now=True) comment = models.CharField(max_length=254, default="")
comment = models.TextField(default="") application = models.ForeignKey(HRApplication)
commenter_user = models.ForeignKey(User)
commenter_character = models.ForeignKey(EveCharacter)
user = models.ForeignKey(User) def __str__(self):
return str(self.application.character_name) + " - Comment"

107
hrapplications/views.py Normal file → Executable file
View File

@ -5,7 +5,10 @@ from django.contrib.auth.decorators import login_required
from django.shortcuts import HttpResponseRedirect from django.shortcuts import HttpResponseRedirect
from models import HRApplication from models import HRApplication
from models import HRApplicationComment
from forms import HRApplicationForm from forms import HRApplicationForm
from forms import HRApplicationCommentForm
from forms import HRApplicationSearchForm
from eveonline.models import EveCorporationInfo from eveonline.models import EveCorporationInfo
from eveonline.models import EveCharacter from eveonline.models import EveCharacter
from authentication.models import AuthServicesInfo from authentication.models import AuthServicesInfo
@ -24,13 +27,11 @@ def hr_application_management_view(request):
if auth_info.main_char_id != "": if auth_info.main_char_id != "":
main_char = EveCharacter.objects.get(character_id=auth_info.main_char_id) main_char = EveCharacter.objects.get(character_id=auth_info.main_char_id)
corp = EveCorporationInfo.objects.get(corporation_id=main_char.corporation_id) corp = EveCorporationInfo.objects.get(corporation_id=main_char.corporation_id)
corp_applications = HRApplication.objects.filter(corp=corp) corp_applications = HRApplication.objects.filter(corp=corp).filter(approved_denied=None)
if HRApplication.objects.filter(user=request.user).exists(): context = {'personal_apps': HRApplication.objects.all().filter(user=request.user),
personal_app = HRApplication.objects.get(user=request.user) 'applications': corp_applications,
'search_form': HRApplicationSearchForm()}
context = {'personal_app': personal_app,
'applications': corp_applications}
return render_to_response('registered/hrapplicationmanagement.html', return render_to_response('registered/hrapplicationmanagement.html',
context, context_instance=RequestContext(request)) context, context_instance=RequestContext(request))
@ -63,10 +64,13 @@ def hr_application_create_view(request):
@login_required @login_required
def hr_application_personal_view(request): def hr_application_personal_view(request, app_id):
if HRApplication.objects.filter(user=request.user).exists(): if HRApplication.objects.filter(id=app_id).exists():
application = HRApplication.objects.get(user=request.user) application = HRApplication.objects.get(id=app_id)
if application.user != request.user:
application = HRApplication()
else:
application = HRApplication()
context = {'application': application} context = {'application': application}
return render_to_response('registered/hrapplicationview.html', return render_to_response('registered/hrapplicationview.html',
@ -74,10 +78,11 @@ def hr_application_personal_view(request):
@login_required @login_required
def hr_application_personal_removal(request): def hr_application_personal_removal(request, app_id):
if HRApplication.objects.filter(user=request.user).exists(): if HRApplication.objects.filter(id=app_id).exists():
application = HRApplication.objects.get(user=request.user) application = HRApplication.objects.get(id=app_id)
application.delete() if application.user == request.user:
application.delete()
return HttpResponseRedirect("/hr_application_management/") return HttpResponseRedirect("/hr_application_management/")
@ -85,10 +90,29 @@ def hr_application_personal_removal(request):
@login_required @login_required
@permission_required('auth.human_resources') @permission_required('auth.human_resources')
def hr_application_view(request, app_id): def hr_application_view(request, app_id):
if request.method == 'POST':
form = HRApplicationCommentForm(request.POST)
if form.is_valid():
auth_info = AuthServicesInfo.objects.get(user=request.user)
comment = HRApplicationComment()
comment.application = HRApplication.objects.get(id=int(form.cleaned_data['app_id']))
comment.commenter_user = request.user
comment.commenter_character = EveCharacter.objects.get(character_id=auth_info.main_char_id)
comment.comment = form.cleaned_data['comment']
comment.save()
else:
form = HRApplicationCommentForm()
if HRApplication.objects.filter(id=app_id).exists(): if HRApplication.objects.filter(id=app_id).exists():
application = HRApplication.objects.get(id=app_id) application = HRApplication.objects.get(id=app_id)
comments = HRApplicationComment.objects.all().filter(application=application)
else:
application = HRApplication()
comments = []
context = {'application': application} context = {'application': application, 'comments': comments, 'comment_form': form}
return render_to_response('registered/hrapplicationview.html', return render_to_response('registered/hrapplicationview.html',
context, context_instance=RequestContext(request)) context, context_instance=RequestContext(request))
@ -102,4 +126,55 @@ def hr_application_remove(request, app_id):
if application: if application:
application.delete() application.delete()
return HttpResponseRedirect("/hr_application_management/") return HttpResponseRedirect("/hr_application_management/")
@login_required
@permission_required('auth.human_resources')
def hr_application_approve(request, app_id):
if HRApplication.objects.filter(id=app_id).exists():
auth_info = AuthServicesInfo.objects.get(user=request.user)
application = HRApplication.objects.get(id=app_id)
application.approved_denied = True
application.reviewer_user = request.user
application.reviewer_character = EveCharacter.objects.get(character_id=auth_info.main_char_id)
application.save()
return HttpResponseRedirect("/hr_application_management/")
@login_required
@permission_required('auth.human_resources')
def hr_application_reject(request, app_id):
if HRApplication.objects.filter(id=app_id).exists():
auth_info = AuthServicesInfo.objects.get(user=request.user)
application = HRApplication.objects.get(id=app_id)
application.approved_denied = False
application.reviewer_user = request.user
application.reviewer_character = EveCharacter.objects.get(character_id=auth_info.main_char_id)
application.save()
return HttpResponseRedirect("/hr_application_management/")
@login_required
@permission_required('auth.human_resources')
def hr_application_search(request):
if request.method == 'POST':
form = HRApplicationSearchForm(request.POST)
if form.is_valid():
# Really dumb search and only checks character name
# This can be improved but it does the job for now
searchstring = form.cleaned_data['search_string']
applications = []
for application in HRApplication.objects.all():
if searchstring in application.character_name:
applications.append(application)
context = {'applications': applications, 'search_form': HRApplicationSearchForm()}
return render_to_response('registered/hrapplicationsearchview.html',
context, context_instance=RequestContext(request))
else:
return HttpResponseRedirect("/hr_application_management/")

98
templates/registered/hrapplicationmanagement.html Normal file → Executable file
View File

@ -11,46 +11,66 @@
<div class="col-lg-12"> <div class="col-lg-12">
{% if not perms.auth.alliance_member %} {% if not perms.auth.alliance_member %}
<h1 class="page-header text-center">Personal Applications <h1 class="page-header text-center">Personal Applications
<div class="text-right"> <div class="text-right">
<a href="{% url 'auth_hrapplication_create_view' %}"> <a href="{% url 'auth_hrapplication_create_view' %}">
{% if personal_app %} {% if personal_app %}
<button type="button" class="btn btn-success" disabled>Create Application</button> <button type="button" class="btn btn-success" disabled>Create Application</button>
{% else %} {% else %}
<button type="button" class="btn btn-success">Create Application</button> <button type="button" class="btn btn-success">Create Application</button>
{% endif %} {% endif %}
</a> </a>
</div> </div>
</h1> </h1>
<table class="table table-bordered"> <table class="table table-bordered">
<tr> <tr>
<th class="text-center">Application ID</th> <th class="text-center">Application ID</th>
<th class="text-center">Username</th> <th class="text-center">Username</th>
<th class="text-center">Main Character</th> <th class="text-center">Main Character</th>
<th class="text-center">Corporation</th> <th class="text-center">Corporation
<th class="text-center">Status</th>
<th class="text-center">Actions</th> <th class="text-center">Actions</th>
</tr> </tr>
{% if personal_app %} {% for personal_app in personal_apps %}
<tr> <tr>
<td class="text-center">{{ personal_app.id }}</td> <td class="text-center">{{ personal_app.id }}</td>
<td class="text-center">{{ personal_app.user.username }}</td> <td class="text-center">{{ personal_app.user.username }}</td>
<td class="text-center">{{ personal_app.character_name }}</td> <td class="text-center">{{ personal_app.character_name }}</td>
<td class="text-center">{{ personal_app.corp.corporation_name }}</td> <td class="text-center">{{ personal_app.corp.corporation_name }}</td>
<td class="text-center"> <td class="text-center">
<a href="/hr_application_personal_view/"> {% if personal_app.approved_denied == None %}
<div class="panel panel-warning" role="alert">Pending</div>
{% elif personal_app.approved_denied == True %}
<div class="panel panel-success" role="alert">Approved</div>
{% else %}
<div class="panel panel-danger" role="alert">Rejected</div>
{% endif %}
</td>
<td class="text-center">
<a href="/hr_application_personal_view/{{ personal_app.id }}">
<button type="button" class="btn btn-primary"><span <button type="button" class="btn btn-primary"><span
class="glyphicon glyphicon-eye-open"></span></button> class="glyphicon glyphicon-eye-open"></span></button>
</a> </a>
<a href="/hr_application_personal_removal/">
<button type="button" class="btn btn-danger"><span {% if personal_app.approved_denied == None %}
class="glyphicon glyphicon-remove"></span></button> <a href="/hr_application_personal_removal/{{ personal_app.id }}">
</a> <button type="button" class="btn btn-danger"><span
class="glyphicon glyphicon-remove"></span></button>
</a>
{% endif %}
</td> </td>
</tr> </tr>
{% endif %} {% endfor %}
</table> </table>
{% endif %} {% endif %}
{% if perms.auth.human_resources %} {% if perms.auth.human_resources %}
<h1 class="page-header text-center">Application Management</h1> <h1 class="page-header text-center">Application Management
<div class="text-right">
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal">
Search Applications
</button>
</div>
</h1>
<div class="container-fluid"> <div class="container-fluid">
<table class="table table-bordered"> <table class="table table-bordered">
<tr> <tr>
@ -58,6 +78,7 @@
<th class="text-center">Username</th> <th class="text-center">Username</th>
<th class="text-center">Main Character</th> <th class="text-center">Main Character</th>
<th class="text-center">Corporation</th> <th class="text-center">Corporation</th>
<th class="text-center">Status</th>
<th class="text-center">Actions</th> <th class="text-center">Actions</th>
</tr> </tr>
{% for app in applications %} {% for app in applications %}
@ -66,15 +87,20 @@
<td class="text-center">{{ app.user.username }}</td> <td class="text-center">{{ app.user.username }}</td>
<td class="text-center">{{ app.character_name }}</td> <td class="text-center">{{ app.character_name }}</td>
<td class="text-center">{{ app.corp.corporation_name }}</td> <td class="text-center">{{ app.corp.corporation_name }}</td>
<td class="text-center">
{% if app.approved_denied == None %}
<div class="panel panel-warning" role="alert">Pending</div>
{% elif app.approved_denied == True %}
<div class="panel panel-success" role="alert">Approved</div>
{% else %}
<div class="panel panel-danger" role="alert">Rejected</div>
{% endif %}
</td>
<td class="text-center"> <td class="text-center">
<a href="/hr_application_view/{{ app.id }}"> <a href="/hr_application_view/{{ app.id }}">
<button type="button" class="btn btn-primary"><span <button type="button" class="btn btn-primary"><span
class="glyphicon glyphicon-eye-open"></span></button> class="glyphicon glyphicon-eye-open"></span></button>
</a> </a>
<a href="/hr_application_remove/{{ app.id }}">
<button type="button" class="btn btn-danger"><span
class="glyphicon glyphicon-remove"></span></button>
</a>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
@ -83,4 +109,30 @@
{% endif %} {% endif %}
</div> </div>
{% if perms.auth.human_resources %}
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span
class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">Application Search</h4>
</div>
<div class="modal-body">
<form class="form-signin" role="form"
action={% url 'auth_hrapplication_search' %} method="POST">
{% csrf_token %}
{{ search_form|bootstrap }}
<br/>
<button class="btn btn-lg btn-primary btn-block" type="submit">Search</button>
</form>
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
{% endif %}
{% endblock content %} {% endblock content %}

View File

@ -0,0 +1,85 @@
{% extends "public/base.html" %}
{% load bootstrap %}
{% load staticfiles %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}HR Application Management{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
{% if perms.auth.human_resources %}
<h1 class="page-header text-center">Application Search Results
<div class="text-right">
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal">
Search Applications
</button>
</div>
</h1>
<div class="container-fluid">
<table class="table table-bordered">
<tr>
<th class="text-center">Application ID</th>
<th class="text-center">Username</th>
<th class="text-center">Main Character</th>
<th class="text-center">Corporation</th>
<th class="text-center">Status</th>
<th class="text-center">Actions</th>
</tr>
{% for app in applications %}
<tr>
<td class="text-center">{{ app.id }}</td>
<td class="text-center">{{ app.user.username }}</td>
<td class="text-center">{{ app.character_name }}</td>
<td class="text-center">{{ app.corp.corporation_name }}</td>
<td class="text-center">
{% if app.approved_denied == None %}
<div class="panel panel-warning" role="alert">Pending</div>
{% elif app.approved_denied == True %}
<div class="panel panel-success" role="alert">Approved</div>
{% else %}
<div class="panel panel-danger" role="alert">Rejected</div>
{% endif %}
</td>
<td class="text-center">
<a href="/hr_application_view/{{ app.id }}">
<button type="button" class="btn btn-primary"><span
class="glyphicon glyphicon-eye-open"></span></button>
</a>
</td>
</tr>
{% endfor %}
</table>
</div>
{% endif %}
</div>
{% if perms.auth.human_resources %}
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span
class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">Application Search</h4>
</div>
<div class="modal-body">
<form class="form-signin" role="form"
action={% url 'auth_hrapplication_search' %} method="POST">
{% csrf_token %}
{{ search_form|bootstrap }}
<br/>
<button class="btn btn-lg btn-primary btn-block" type="submit">Search</button>
</form>
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
{% endif %}
{% endblock content %}

131
templates/registered/hrapplicationview.html Normal file → Executable file
View File

@ -9,14 +9,40 @@
{% block content %} {% block content %}
<div class="col-lg-12"> <div class="col-lg-12">
<h1 class="page-header text-center">Create Application</h1> <h1 class="page-header text-center">View Application</h1>
<div class="container-fluid"> <div class="container-fluid">
<div class="col-md-4 col-md-offset-4"> <div class="col-md-4 col-md-offset-4">
<div class="row"> <div class="row">
<form class="form-signin"> <form class="form-signin">
<div class="form-group"> <div class="form-group">
<label class="control-label" for="id_character_name">User Account</label> <label class="control-label " for="id_extra">Status</label>
<div class=" ">
{% if application.approved_denied == None %}
<div class="alert alert-warning" role="alert">Pending</div>
{% elif application.approved_denied %}
<div class="alert alert-success" role="alert">Approved</div>
{% else %}
<div class="alert alert-danger" role="alert">Rejected</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="control-label " for="id_extra">Reviewer</label>
<div class=" ">
{% if application.reviewer_character == None %}
<div class="alert alert-info" role="alert">pending</div>
{% else %}
<div class="alert alert-info"
role="alert">{{ application.reviewer_character.character_name }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="control-label" for="id_character_name">User Account</label>
<div class=" "> <div class=" ">
<input class=" form-control" value="{{ application.user.username }}" disabled> <input class=" form-control" value="{{ application.user.username }}" disabled>
@ -78,11 +104,110 @@
disabled>{{ application.extra }}</textarea> disabled>{{ application.extra }}</textarea>
</div> </div>
</div> </div>
<br>
{% if perms.auth.human_resources %}
<div class="form-group text-center">
<label class="control-label text-center" for="id_extra">Actions</label>
<div class="container-fluid well">
<div class="row text-center">
<a href="/hr_application_approve/{{ application.id }}">
<button type="button" class="btn btn-lg btn-success">Approve</button>
</a>
<a href="/hr_application_reject/{{ application.id }}">
<button type="button" class="btn btn-lg btn-info">Reject</button>
</a>
<a href="/hr_application_remove/{{ application.id }}">
<button type="button" class="btn btn-lg btn-danger">Delete</button>
</a>
</div>
<br/>
<div class="row text-center">
<a href="{{ JACK_KNIFE_URL }}?usid={{ application.full_api_id }}&apik={{ application.full_api_key }}"
target="_blank">
<button type="button" class="btn btn-lg btn-primary">API Jack Knife</button>
</a>
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal"
data-target="#myModal">
Comment
</button>
</div>
</div>
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="headingThree">
<h4 class="panel-title">
<a class="collapsed" data-toggle="collapse" data-parent="#accordion"
href="#collapseThree" aria-expanded="false"
aria-controls="collapseThree">
Comments - {{ comments|length }}
</a>
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse" role="tabpanel"
aria-labelledby="headingThree">
<div class="panel-body">
{% for comment in comments %}
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="">
<div class="panel-title">{{ comment.commenter_character.character_name }}
- {{ comment.commenter_character.corporation_name }}</div>
</div>
<div class="panel-body">{{ comment.comment }}</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
{% endif %}
</form> </form>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
{% if perms.auth.human_resources %}
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span
aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">Add Comment</h4>
</div>
<div class="modal-body">
<form class="form-signin" role="form" action="" method="POST">
{% csrf_token %}
{{ comment_form.app_id|bootstrap }}
{{ comment_form.comment|bootstrap }}
<br/>
<button class="btn btn-lg btn-primary btn-block" type="submit">Add Comment</button>
</form>
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
{% endif %}
{% endblock content %} {% endblock content %}
{% block extra_script %}
$(document).ready(function(){
var appid = {{ application.id }};
$('#id_app_id').val(appid);
$('#id_commenter_id').val(commenterid);
});
{% endblock %}

View File

@ -25,4 +25,5 @@ def domain_url(request):
'ENABLE_BLUE_FORUM': settings.ENABLE_BLUE_FORUM, 'ENABLE_BLUE_FORUM': settings.ENABLE_BLUE_FORUM,
'ENABLE_BLUE_MUMBLE': settings.ENABLE_BLUE_MUMBLE, 'ENABLE_BLUE_MUMBLE': settings.ENABLE_BLUE_MUMBLE,
'ENABLE_BLUE_IPBOARD': settings.ENABLE_BLUE_IPBOARD, 'ENABLE_BLUE_IPBOARD': settings.ENABLE_BLUE_IPBOARD,
'JACK_KNIFE_URL': settings.JACK_KNIFE_URL,
'CURRENT_UTC_TIME': timezone.now()} 'CURRENT_UTC_TIME': timezone.now()}