Reformatted code for easy reading.

This commit is contained in:
Raynaldo Rivera 2014-10-26 16:47:21 -07:00
parent 6e99823252
commit 19e19d89e4
97 changed files with 22820 additions and 10377 deletions

30
.idea/dataSources.xml generated Normal file
View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" hash="1026499400">
<data-source source="LOCAL" name="Django default" uuid="3eb61453-647a-4832-8320-f3561f039abc">
<driver-ref>mysql</driver-ref>
<jdbc-driver>com.mysql.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://127.0.0.1:3306/alliance_auth</jdbc-url>
<user-name>allianceauth</user-name>
<user-password>dfcbdfc6dfc6dfc3dfcbdfc4dfc9dfcfdfcbdfdfdfdedfc2</user-password>
<libraries />
</data-source>
<data-source source="LOCAL" name="Django phpbb3" uuid="2de247c2-1951-4e74-8276-6a1c89c396fa">
<driver-ref>mysql</driver-ref>
<jdbc-driver>com.mysql.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://127.0.0.1:3306/alliance_forum</jdbc-url>
<user-name>allianceauth</user-name>
<user-password>dfcbdfc6dfc6dfc3dfcbdfc4dfc9dfcfdfcbdfdfdfdedfc2</user-password>
<libraries />
</data-source>
<data-source source="LOCAL" name="Django mumble" uuid="9963e5ca-7f2f-4dd3-9175-bc7102dfd48c">
<driver-ref>mysql</driver-ref>
<jdbc-driver>com.mysql.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://127.0.0.1:3306/alliance_mumble</jdbc-url>
<user-name>allianceauth</user-name>
<user-password>dfcbdfc6dfc6dfc3dfcbdfc4dfc9dfcfdfcbdfdfdfdedfc2</user-password>
<libraries />
</data-source>
</component>
</project>

View File

@ -1,7 +0,0 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="PROJECT_PROFILE" value="Project Default" />
<option name="USE_PROJECT_PROFILE" value="true" />
<version value="1.0" />
</settings>
</component>

View File

@ -10,7 +10,10 @@ https://docs.djangoproject.com/en/1.6/ref/settings/
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os import os
import djcelery import djcelery
djcelery.setup_loader() djcelery.setup_loader()
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) BASE_DIR = os.path.dirname(os.path.dirname(__file__))
@ -154,7 +157,7 @@ STATIC_URL = '/static/'
DEFAULT_ALLIANCE_GROUP = 'AllianceMember' DEFAULT_ALLIANCE_GROUP = 'AllianceMember'
# ALLIANCE INFO # ALLIANCE INFO
ALLIANCE_ID = '0' ALLIANCE_ID = '99001336'
ALLIANCE_NAME = 'Somealliance' ALLIANCE_NAME = 'Somealliance'
# Forum URL # Forum URL

View File

@ -1,6 +1,7 @@
from django.conf.urls import patterns, include, url from django.conf.urls import patterns, include, url
from django.contrib import admin from django.contrib import admin
admin.autodiscover() admin.autodiscover()
urlpatterns = patterns('', urlpatterns = patterns('',
@ -17,11 +18,16 @@ urlpatterns = patterns('',
url(r'^register_user/', 'registration.views.register_user_view', name='auth_register_user'), url(r'^register_user/', 'registration.views.register_user_view', name='auth_register_user'),
url(r'^user/password/$', 'django.contrib.auth.views.password_change', name='password_change'), url(r'^user/password/$', 'django.contrib.auth.views.password_change', name='password_change'),
url(r'^user/password/done/$', 'django.contrib.auth.views.password_change_done', name='password_change_done'), url(r'^user/password/done/$', 'django.contrib.auth.views.password_change_done',
url(r'^user/password/reset/$', 'django.contrib.auth.views.password_reset', name='password_reset'), name='password_change_done'),
url(r'^user/password/password/reset/done/$', 'django.contrib.auth.views.password_reset_done', name='password_reset_done'), url(r'^user/password/reset/$', 'django.contrib.auth.views.password_reset',
url(r'^user/password/reset/complete/$', 'django.contrib.auth.views.password_reset_complete', name='password_reset_complete'), name='password_reset'),
url(r'^user/password/reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm', name='password_reset_confirm'), url(r'^user/password/password/reset/done/$', 'django.contrib.auth.views.password_reset_done',
name='password_reset_done'),
url(r'^user/password/reset/complete/$', 'django.contrib.auth.views.password_reset_complete',
name='password_reset_complete'),
url(r'^user/password/reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$',
'django.contrib.auth.views.password_reset_confirm', name='password_reset_confirm'),
# Portal Urls # Portal Urls
url(r'^dashboard/$', 'portal.views.dashboard_view', name='auth_dashboard'), url(r'^dashboard/$', 'portal.views.dashboard_view', name='auth_dashboard'),
@ -29,44 +35,62 @@ urlpatterns = patterns('',
# Eveonline Urls # Eveonline Urls
url(r'^add_api_key/', 'eveonline.views.add_api_key', name='auth_add_api_key'), url(r'^add_api_key/', 'eveonline.views.add_api_key', name='auth_add_api_key'),
url(r'^api_key_management/', 'eveonline.views.api_key_management_view', name='auth_api_key_management'), url(r'^api_key_management/', 'eveonline.views.api_key_management_view',
name='auth_api_key_management'),
url(r'^delete_api_pair/(\w+)/$', 'eveonline.views.api_key_removal', name='auth_api_key_removal'), url(r'^delete_api_pair/(\w+)/$', 'eveonline.views.api_key_removal', name='auth_api_key_removal'),
url(r'^characters/', 'eveonline.views.characters_view', name='auth_characters'), url(r'^characters/', 'eveonline.views.characters_view', name='auth_characters'),
url(r'^main_character_change/(\w+)/$', 'eveonline.views.main_character_change', name='auth_main_character_change'), url(r'^main_character_change/(\w+)/$', 'eveonline.views.main_character_change',
name='auth_main_character_change'),
# Group management # Group management
url(r'^groups/', 'groupmanagement.views.groups_view', name='auth_groups'), url(r'^groups/', 'groupmanagement.views.groups_view', name='auth_groups'),
url(r'^group/management/', 'groupmanagement.views.group_management', name='auth_group_management'), url(r'^group/management/', 'groupmanagement.views.group_management',
url(r'^group/request_add/(\w+)', 'groupmanagement.views.group_request_add', name='auth_group_request_add'), name='auth_group_management'),
url(r'^group/request/accept/(\w+)', 'groupmanagement.views.group_accept_request', name='auth_group_accept_request'), url(r'^group/request_add/(\w+)', 'groupmanagement.views.group_request_add',
url(r'^group/request/reject/(\w+)', 'groupmanagement.views.group_reject_request', name='auth_group_reject_request'), name='auth_group_request_add'),
url(r'^group/request/accept/(\w+)', 'groupmanagement.views.group_accept_request',
name='auth_group_accept_request'),
url(r'^group/request/reject/(\w+)', 'groupmanagement.views.group_reject_request',
name='auth_group_reject_request'),
url(r'^group/request_leave/(\w+)', 'groupmanagement.views.group_request_leave', name='auth_group_request_leave'), url(r'^group/request_leave/(\w+)', 'groupmanagement.views.group_request_leave',
name='auth_group_request_leave'),
url(r'group/leave_request/accept/(\w+)', 'groupmanagement.views.group_leave_accept_request', url(r'group/leave_request/accept/(\w+)', 'groupmanagement.views.group_leave_accept_request',
name='auth_group_leave_accept_request'), name='auth_group_leave_accept_request'),
url(r'^group/leave_request/reject/(\w+)', 'groupmanagement.views.group_leave_reject_request', url(r'^group/leave_request/reject/(\w+)', 'groupmanagement.views.group_leave_reject_request',
name='auth_group_leave_reject_request'), name='auth_group_leave_reject_request'),
# HR Application Management
url(r'^hr_application_management/', 'hrapplications.views.hr_application_management_view',
name="auth_hrapplications_view"),
url(r'^hr_application_create/', 'hrapplications.views.hr_application_create_view',
name="auth_hrapplication_create_view"),
# Service Urls # Service Urls
url(r'^services/', 'services.views.services_view', name='auth_services'), url(r'^services/', 'services.views.services_view', name='auth_services'),
url(r'^serivces/jabber_broadcast/$', 'services.views.jabber_broadcast_view', name='auth_jabber_broadcast_view'), url(r'^serivces/jabber_broadcast/$', 'services.views.jabber_broadcast_view',
name='auth_jabber_broadcast_view'),
# Forum Service Control # Forum Service Control
url(r'^activate_forum/$', 'services.views.activate_forum', name='auth_activate_forum'), url(r'^activate_forum/$', 'services.views.activate_forum', name='auth_activate_forum'),
url(r'^deactivate_forum/$', 'services.views.deactivate_forum', name='auth_deactivate_forum'), url(r'^deactivate_forum/$', 'services.views.deactivate_forum', name='auth_deactivate_forum'),
url(r'^reset_forum_password/$', 'services.views.reset_forum_password', name='auth_reset_forum_password'), url(r'^reset_forum_password/$', 'services.views.reset_forum_password',
name='auth_reset_forum_password'),
# Jabber Service Control # Jabber Service Control
url(r'^activate_jabber/$', 'services.views.activate_jabber', name='auth_activate_jabber'), url(r'^activate_jabber/$', 'services.views.activate_jabber', name='auth_activate_jabber'),
url(r'^deactivate_jabber/$', 'services.views.deactivate_jabber', name='auth_deactivate_jabber'), url(r'^deactivate_jabber/$', 'services.views.deactivate_jabber', name='auth_deactivate_jabber'),
url(r'^reset_jabber_password/$', 'services.views.reset_jabber_password', name='auth_reset_jabber_password'), url(r'^reset_jabber_password/$', 'services.views.reset_jabber_password',
name='auth_reset_jabber_password'),
# Mumble service contraol # Mumble service contraol
url(r'^activate_mumble/$', 'services.views.activate_mumble', name='auth_activate_mumble'), url(r'^activate_mumble/$', 'services.views.activate_mumble', name='auth_activate_mumble'),
url(r'^deactivate_mumble/$', 'services.views.deactivate_mumble', name='auth_deactivate_mumble'), url(r'^deactivate_mumble/$', 'services.views.deactivate_mumble', name='auth_deactivate_mumble'),
url(r'^reset_mumble_password/$', 'services.views.reset_mumble_password', name='auth_reset_mumble_password'), url(r'^reset_mumble_password/$', 'services.views.reset_mumble_password',
name='auth_reset_mumble_password'),
# Tools # Tools
url(r'^tool/fleet_formatter_tool/$', 'services.views.fleet_formatter_view', name='auth_fleet_format_tool_view'), url(r'^tool/fleet_formatter_tool/$', 'services.views.fleet_formatter_view',
name='auth_fleet_format_tool_view'),
) )

View File

@ -8,7 +8,9 @@ https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/
""" """
import os import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "alliance_auth.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "alliance_auth.settings")
from django.core.wsgi import get_wsgi_application from django.core.wsgi import get_wsgi_application
application = get_wsgi_application() application = get_wsgi_application()

View File

@ -1,5 +1,7 @@
from django.contrib import admin from django.contrib import admin
from models import AuthServicesInfo from models import AuthServicesInfo
# Register your models here. # Register your models here.
admin.site.register(AuthServicesInfo) admin.site.register(AuthServicesInfo)

View File

@ -4,7 +4,6 @@ from models import AuthServicesInfo
class AuthServicesInfoManager: class AuthServicesInfoManager:
def __init__(self): def __init__(self):
pass pass

View File

@ -1,3 +1 @@
from django.test import TestCase
# Create your tests here. # Create your tests here.

View File

@ -4,6 +4,7 @@ from django.contrib.auth import authenticate
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.template import RequestContext from django.template import RequestContext
from forms import LoginForm from forms import LoginForm

View File

@ -1,5 +1,7 @@
from django.contrib import admin from django.contrib import admin
from models import SyncGroupCache from models import SyncGroupCache
# Register your models here. # Register your models here.
admin.site.register(SyncGroupCache) admin.site.register(SyncGroupCache)

View File

@ -1,5 +1,4 @@
from django.db import models from django.db import models
from django.contrib import admin
from django.contrib.auth.models import User from django.contrib.auth.models import User

View File

@ -1,8 +1,9 @@
from models import SyncGroupCache
from django.conf import settings from django.conf import settings
from celery.task import periodic_task from celery.task import periodic_task
from celery.task.schedules import crontab
from django.contrib.auth.models import User from django.contrib.auth.models import User
from models import SyncGroupCache
from celery.task.schedules import crontab
from services.managers.jabber_manager import JabberManager from services.managers.jabber_manager import JabberManager
from services.managers.mumble_manager import MumbleManager from services.managers.mumble_manager import MumbleManager
from services.managers.forum_manager import ForumManager from services.managers.forum_manager import ForumManager
@ -52,7 +53,6 @@ def update_forum_groups(user):
def add_to_databases(user, groups, syncgroups): def add_to_databases(user, groups, syncgroups):
authserviceinfo = None authserviceinfo = None
try: try:
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
@ -141,7 +141,8 @@ def run_api_refresh():
print 'Running on ' + api_key_pair.api_id + ':' + api_key_pair.api_key print 'Running on ' + api_key_pair.api_id + ':' + api_key_pair.api_key
if EveApiManager.api_key_is_valid(api_key_pair.api_id, api_key_pair.api_key): if EveApiManager.api_key_is_valid(api_key_pair.api_id, api_key_pair.api_key):
# Update characters # Update characters
characters = EveApiManager.get_characters_from_api(api_key_pair.api_id, api_key_pair.api_key) characters = EveApiManager.get_characters_from_api(api_key_pair.api_id,
api_key_pair.api_key)
EveManager.update_characters_from_list(characters) EveManager.update_characters_from_list(characters)
valid_key = True valid_key = True
else: else:
@ -160,3 +161,10 @@ def run_api_refresh():
deactivate_services(user) deactivate_services(user)
else: else:
print 'No main_char_id set' print 'No main_char_id set'
# Run Every 2 hours
@periodic_task(run_every=crontab(minute=0, hour="*/2"))
def run_alliance_corp_update():
alliance_info = EveApiManager.get_alliance_information(settings.ALLIANCE_ID)

View File

@ -1,3 +1 @@
from django.test import TestCase
# Create your tests here. # Create your tests here.

View File

@ -1,3 +1 @@
from django.shortcuts import render
# Create your views here. # Create your views here.

View File

@ -1,6 +1,8 @@
from django.contrib import admin from django.contrib import admin
from models import EveCharacter from models import EveCharacter
from models import EveApiKeyPair from models import EveApiKeyPair
admin.site.register(EveCharacter) admin.site.register(EveCharacter)
admin.site.register(EveApiKeyPair) admin.site.register(EveApiKeyPair)

View File

@ -1,4 +1,5 @@
from django import forms from django import forms
from services.managers.eve_api_manager import EveApiManager from services.managers.eve_api_manager import EveApiManager
from eveonline.managers import EveManager from eveonline.managers import EveManager

View File

@ -1,10 +1,12 @@
from models import EveCharacter from models import EveCharacter
from models import EveApiKeyPair from models import EveApiKeyPair
from models import EveAllianceInfo
from models import EveCorporationInfo
from services.managers.eve_api_manager import EveApiManager from services.managers.eve_api_manager import EveApiManager
class EveManager: class EveManager:
def __init__(self): def __init__(self):
pass pass
@ -35,7 +37,8 @@ class EveManager:
chars.result[char]['name'], chars.result[char]['name'],
chars.result[char]['corp']['id'], chars.result[char]['corp']['id'],
chars.result[char]['corp']['name'], chars.result[char]['corp']['name'],
EveApiManager.get_corporation_ticker_from_id(chars.result[char]['corp']['id']), EveApiManager.get_corporation_ticker_from_id(
chars.result[char]['corp']['id']),
chars.result[char]['alliance']['id'], chars.result[char]['alliance']['id'],
chars.result[char]['alliance']['name'], chars.result[char]['alliance']['name'],
user, api_id) user, api_id)
@ -47,7 +50,8 @@ class EveManager:
eve_char = EveManager.get_character_by_character_name(chars.result[char]['name']) eve_char = EveManager.get_character_by_character_name(chars.result[char]['name'])
eve_char.corporation_id = chars.result[char]['corp']['id'] eve_char.corporation_id = chars.result[char]['corp']['id']
eve_char.corporation_name = chars.result[char]['corp']['name'] eve_char.corporation_name = chars.result[char]['corp']['name']
eve_char.corporation_ticker = EveApiManager.get_corporation_ticker_from_id(chars.result[char]['corp']['id']) eve_char.corporation_ticker = EveApiManager.get_corporation_ticker_from_id(
chars.result[char]['corp']['id'])
eve_char.alliance_id = chars.result[char]['alliance']['id'] eve_char.alliance_id = chars.result[char]['alliance']['id']
eve_char.alliance_name = chars.result[char]['alliance']['name'] eve_char.alliance_name = chars.result[char]['alliance']['name']
eve_char.save() eve_char.save()
@ -62,6 +66,38 @@ class EveManager:
api_pair.user = user_id api_pair.user = user_id
api_pair.save() api_pair.save()
@staticmethod
def create_alliance_info(alliance_id, alliance_name, alliance_ticker, alliance_executor_corp_id,
alliance_member_count):
if EveManager.check_if_alliance_exists_by_id(alliance_id):
alliance_info = EveAllianceInfo()
alliance_info.alliance_id = alliance_id
alliance_info.alliance_name = alliance_name
alliance_info.alliance_ticker = alliance_ticker
alliance_info.executor_corp_id = alliance_executor_corp_id
alliance_info.member_count = alliance_member_count
alliance_info.save()
@staticmethod
def update_alliance_info(alliance_id, alliance_executor_corp_id, alliance_member_count):
if EveManager.check_if_alliance_exists_by_id(alliance_id):
alliance_info = EveAllianceInfo.objects.get(alliance_id=alliance_id)
alliance_info.executor_corp_id = alliance_executor_corp_id
alliance_info.member_count = alliance_member_count
alliance_info.save()
@staticmethod
def create_corporation_info(corp_id, corp_name, corp_ticker, corp_member_count, alliance):
if EveManager.check_if_corporation_exists_by_id(corp_id):
corp_info = EveCorporationInfo()
corp_info.corporation_id = corp_id
corp_info.corporation_name = corp_name
corp_info.corporation_ticker = corp_ticker
corp_info.member_count = corp_member_count
corp_info.alliance = alliance
corp_info.save()
@staticmethod @staticmethod
def get_api_key_pairs(user): def get_api_key_pairs(user):
if EveApiKeyPair.objects.filter(user=user).exists(): if EveApiKeyPair.objects.filter(user=user).exists():
@ -128,3 +164,11 @@ class EveManager:
return True return True
return False return False
@staticmethod
def check_if_alliance_exists_by_id(alliance_id):
return EveAllianceInfo.objects.filter(alliance_id=alliance_id).exists()
@staticmethod
def check_if_corporation_exists_by_id(corp_id):
return EveCorporationInfo.objects.filter(corporation_id=corp_id).exists()

View File

@ -24,3 +24,26 @@ class EveApiKeyPair(models.Model):
def __str__(self): def __str__(self):
return self.user.username + " - ApiKeyPair" return self.user.username + " - ApiKeyPair"
class EveAllianceInfo(models.Model):
alliance_id = models.CharField(max_length=254)
alliance_name = models.CharField(max_length=254)
alliance_ticker = models.CharField(max_length=254)
executor_corp_id = models.CharField(max_length=254)
member_count = models.IntegerField()
def __str__(self):
return self.alliance_name
class EveCorporationInfo(models.Model):
corporation_id = models.CharField(max_length=254)
corporation_name = models.CharField(max_length=254)
corporation_ticker = models.CharField(max_length=254)
member_count = models.IntegerField()
alliance = models.ForeignKey(EveAllianceInfo)
def __str__(self):
return self.corporation_name

View File

@ -1,3 +1 @@
from django.test import TestCase
# Create your tests here. # Create your tests here.

View File

@ -1,15 +1,14 @@
from util import add_member_permission
from util import remove_member_permission
from util import check_if_user_has_permission
from django.conf import settings from django.conf import settings
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.template import RequestContext from django.template import RequestContext
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from util import add_member_permission
from util import remove_member_permission
from util import check_if_user_has_permission
from forms import UpdateKeyForm from forms import UpdateKeyForm
from managers import EveManager from managers import EveManager
from authentication.managers import AuthServicesInfoManager from authentication.managers import AuthServicesInfoManager
from services.managers.eve_api_manager import EveApiManager from services.managers.eve_api_manager import EveApiManager
from util.common_task import add_user_to_group from util.common_task import add_user_to_group
@ -29,7 +28,8 @@ def add_api_key(request):
request.user) request.user)
# Grab characters associated with the key pair # Grab characters associated with the key pair
characters = EveApiManager.get_characters_from_api(form.cleaned_data['api_id'], form.cleaned_data['api_key']) characters = EveApiManager.get_characters_from_api(form.cleaned_data['api_id'],
form.cleaned_data['api_key'])
EveManager.create_characters_from_list(characters, request.user, form.cleaned_data['api_id']) EveManager.create_characters_from_list(characters, request.user, form.cleaned_data['api_id'])
return HttpResponseRedirect("/api_key_management/") return HttpResponseRedirect("/api_key_management/")
else: else:
@ -67,7 +67,6 @@ def api_key_removal(request, api_id):
@login_required @login_required
def characters_view(request): def characters_view(request):
render_items = {'characters': EveManager.get_characters_by_owner_id(request.user.id), render_items = {'characters': EveManager.get_characters_by_owner_id(request.user.id),
'authinfo': AuthServicesInfoManager.get_auth_service_info(request.user)} 'authinfo': AuthServicesInfoManager.get_auth_service_info(request.user)}
return render_to_response('registered/characters.html', render_items, context_instance=RequestContext(request)) return render_to_response('registered/characters.html', render_items, context_instance=RequestContext(request))
@ -75,7 +74,6 @@ def characters_view(request):
@login_required @login_required
def main_character_change(request, char_id): def main_character_change(request, char_id):
if EveManager.check_if_character_owned_by_user(char_id, request.user): if EveManager.check_if_character_owned_by_user(char_id, request.user):
previousmainid = AuthServicesInfoManager.get_auth_service_info(request.user).main_char_id previousmainid = AuthServicesInfoManager.get_auth_service_info(request.user).main_char_id
AuthServicesInfoManager.update_main_char_Id(char_id, request.user) AuthServicesInfoManager.update_main_char_Id(char_id, request.user)
@ -91,7 +89,8 @@ def main_character_change(request, char_id):
remove_member_permission(request.user, 'alliance_member') remove_member_permission(request.user, 'alliance_member')
remove_user_from_group(request.user, settings.DEFAULT_ALLIANCE_GROUP) remove_user_from_group(request.user, settings.DEFAULT_ALLIANCE_GROUP)
remove_user_from_group(request.user, remove_user_from_group(request.user,
generate_corp_group_name(EveManager.get_character_by_id(previousmainid).corporation_name)) generate_corp_group_name(
EveManager.get_character_by_id(previousmainid).corporation_name))
deactivate_services(request.user) deactivate_services(request.user)
return HttpResponseRedirect("/characters") return HttpResponseRedirect("/characters")

View File

@ -1,6 +1,8 @@
from django.contrib import admin from django.contrib import admin
from models import GroupDescription from models import GroupDescription
from models import GroupRequest from models import GroupRequest
admin.site.register(GroupDescription) admin.site.register(GroupDescription)
admin.site.register(GroupRequest) admin.site.register(GroupRequest)

View File

@ -1,6 +1,7 @@
from django.db import models from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from eveonline.models import EveCharacter from eveonline.models import EveCharacter

View File

@ -1,3 +1 @@
from django.test import TestCase
# Create your tests here. # Create your tests here.

View File

@ -4,11 +4,9 @@ from django.shortcuts import render_to_response
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import permission_required
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.contrib.auth.models import User
from models import GroupDescription from models import GroupDescription
from models import GroupRequest from models import GroupRequest
from authentication.managers import AuthServicesInfoManager from authentication.managers import AuthServicesInfoManager
from eveonline.managers import EveManager from eveonline.managers import EveManager
@ -88,9 +86,9 @@ def group_leave_reject_request(request, group_request_id):
return HttpResponseRedirect("/group/management/") return HttpResponseRedirect("/group/management/")
@login_required @login_required
def groups_view(request): def groups_view(request):
paired_list = [] paired_list = []
for group in Group.objects.all(): for group in Group.objects.all():
@ -119,6 +117,7 @@ def groups_view(request):
return render_to_response('registered/groups.html', return render_to_response('registered/groups.html',
render_items, context_instance=RequestContext(request)) render_items, context_instance=RequestContext(request))
@login_required @login_required
def group_request_add(request, group_id): def group_request_add(request, group_id):
auth_info = AuthServicesInfoManager.get_auth_service_info(request.user) auth_info = AuthServicesInfoManager.get_auth_service_info(request.user)

View File

@ -1,6 +1,8 @@
from django.contrib import admin from django.contrib import admin
from models import HRApplications from models import HRApplications
from models import HRApplicationComment from models import HRApplicationComment
admin.site.register(HRApplications) admin.site.register(HRApplications)
admin.site.register(HRApplicationComment) admin.site.register(HRApplicationComment)

View File

@ -1 +1,11 @@
__author__ = 'r4stl1n' from django import forms
class HRApplicationForm(forms.Form):
character_name = forms.CharField(max_length=254, required=True, label="Main Character Name")
full_api_id = forms.CharField(max_length=254, required=True, label="API ID")
full_api_key = forms.CharField(max_length=254, required=True, label="API Verification Code")
preferred_corp = forms.CharField(max_length=254, required=True, label="Preferred Corp")
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")
extra = forms.CharField(widget=forms.Textarea, required=False, label="Extra Application Info")

View File

@ -6,8 +6,8 @@ class HRApplications(models.Model):
character_name = models.CharField(max_length=254, default="") character_name = models.CharField(max_length=254, default="")
full_api_id = models.CharField(max_length=254, default="") full_api_id = models.CharField(max_length=254, default="")
full_api_key = models.CharField(max_length=254, default="") full_api_key = models.CharField(max_length=254, default="")
prefered_corp = models.CharField(max_length=254, default="") preferred_corp = models.CharField(max_length=254, default="")
is_a_spi = models.BooleanField(default=False) is_a_spi = models.CharField(max_length=254, default="")
about = models.TextField(default="") about = models.TextField(default="")
extra = models.TextField(default="") extra = models.TextField(default="")

View File

@ -1,3 +1 @@
from django.test import TestCase
# Create your tests here. # Create your tests here.

View File

@ -1,3 +1,27 @@
from django.shortcuts import render from django.template import RequestContext
from django.shortcuts import render_to_response
from django.contrib.auth.decorators import login_required
# Create your views here. from forms import HRApplicationForm
@login_required
def hr_application_management_view(request):
context = {}
return render_to_response('registered/hrapplicationmanagement.html',
context, context_instance=RequestContext(request))
@login_required
def hr_application_create_view(request):
if request.method == 'POST':
form = HRApplicationForm(request.POST)
if form.is_valid():
pass
else:
form = HRApplicationForm
context = {'form': form}
return render_to_response('registered/hrcreateapplication.html',
context, context_instance=RequestContext(request))

View File

@ -1,3 +1 @@
from django.contrib import admin
# Register your models here. # Register your models here.

View File

@ -1,3 +1 @@
from django.db import models
# Create your models here. # Create your models here.

View File

@ -1,3 +1 @@
from django.test import TestCase
# Create your tests here. # Create your tests here.

View File

@ -1,13 +1,11 @@
from django.conf import settings
from django.template import RequestContext from django.template import RequestContext
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import permission_required
from eveonline.managers import EveManager from eveonline.managers import EveManager
from authentication.managers import AuthServicesInfoManager from authentication.managers import AuthServicesInfoManager
# Create your views here. # Create your views here.
def index_view(request): def index_view(request):
return render_to_response('public/index.html', None, context_instance=RequestContext(request)) return render_to_response('public/index.html', None, context_instance=RequestContext(request))

View File

@ -1,3 +1 @@
from django.contrib import admin
# Register your models here. # Register your models here.

View File

@ -1,3 +1 @@
from django.db import models
# Create your models here. # Create your models here.

View File

@ -1,3 +1 @@
from django.test import TestCase
# Create your tests here. # Create your tests here.

View File

@ -2,11 +2,11 @@ from django.contrib.auth.models import User
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.template import RequestContext from django.template import RequestContext
from forms import RegistrationForm from forms import RegistrationForm
def register_user_view(request): def register_user_view(request):
if request.method == 'POST': if request.method == 'POST':
form = RegistrationForm(request.POST) form = RegistrationForm(request.POST)

View File

@ -1,3 +1 @@
from django.contrib import admin
# Register your models here. # Register your models here.

View File

@ -4,7 +4,6 @@ import evelink.eve
class EveApiManager(): class EveApiManager():
def __init__(self): def __init__(self):
pass pass
@ -34,6 +33,32 @@ class EveApiManager():
return ticker return ticker
@staticmethod
def get_alliance_information(alliance_id):
results = {}
try:
api = evelink.api.API()
eve = evelink.eve.EVE(api=api)
alliance = eve.alliances()
results = alliance[0][int(alliance_id)]
except evelink.api.APIError as error:
print error
return results
@staticmethod
def get_corporation_information(corp_id):
results = {}
try:
api = evelink.api.API()
corp = evelink.corp.Corp(api=api)
corpinfo = corp.corporation_sheet(corp_id=int(corp_id))
results = corpinfo[0]
except evelink.api.APIError as error:
print error
return results
@staticmethod @staticmethod
def check_api_is_type_account(api_id, api_key): def check_api_is_type_account(api_id, api_key):
try: try:

View File

@ -1,12 +1,12 @@
import os import os
import calendar import calendar
from datetime import datetime from datetime import datetime
from passlib.apps import phpbb3_context from passlib.apps import phpbb3_context
from django.db import connections from django.db import connections
class ForumManager: class ForumManager:
SQL_ADD_USER = r"INSERT INTO phpbb_users (username, username_clean, " \ SQL_ADD_USER = r"INSERT INTO phpbb_users (username, username_clean, " \
r"user_password, user_email, group_id, user_regdate, user_permissions, " \ r"user_password, user_email, group_id, user_regdate, user_permissions, " \
r"user_sig, user_occ, user_interests) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" r"user_sig, user_occ, user_interests) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"

View File

@ -1,18 +1,17 @@
import os import os
import time from urlparse import urlparse
import xmpp import xmpp
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.conf import settings from django.conf import settings
from openfire import exception from openfire import exception
from openfire import UserService from openfire import UserService
from urlparse import urlparse
from authentication.managers import AuthServicesInfoManager from authentication.managers import AuthServicesInfoManager
from eveonline.managers import EveManager
class JabberManager: class JabberManager:
def __init__(self): def __init__(self):
pass pass
@ -114,5 +113,4 @@ class JabberManager:
client.send(message) client.send(message)
client.Process(1) client.Process(1)
client.disconnect() client.disconnect()

View File

@ -1,11 +1,11 @@
import os import os
import hashlib import hashlib
from django.db import connections from django.db import connections
from django.conf import settings from django.conf import settings
class MumbleManager: class MumbleManager:
SQL_SELECT_USER_MAX_ID = r"SELECT max(user_id)+1 as next_id from murmur_users" SQL_SELECT_USER_MAX_ID = r"SELECT max(user_id)+1 as next_id from murmur_users"
SQL_SELECT_GROUP_MAX_ID = r"SELECT MAX(group_id)+1 FROM murmur_groups" SQL_SELECT_GROUP_MAX_ID = r"SELECT MAX(group_id)+1 FROM murmur_groups"

View File

@ -1,3 +1 @@
from django.db import models
# Create your models here. # Create your models here.

View File

@ -1,3 +1 @@
from django.test import TestCase
# Create your tests here. # Create your tests here.

View File

@ -1,21 +1,17 @@
from django.template import RequestContext from django.template import RequestContext
from django.shortcuts import HttpResponseRedirect from django.shortcuts import HttpResponseRedirect
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import permission_required
from managers.jabber_manager import JabberManager from managers.jabber_manager import JabberManager
from managers.forum_manager import ForumManager from managers.forum_manager import ForumManager
from managers.mumble_manager import MumbleManager from managers.mumble_manager import MumbleManager
from authentication.managers import AuthServicesInfoManager from authentication.managers import AuthServicesInfoManager
from eveonline.managers import EveManager from eveonline.managers import EveManager
from celerytask.tasks import update_jabber_groups from celerytask.tasks import update_jabber_groups
from celerytask.tasks import update_mumble_groups from celerytask.tasks import update_mumble_groups
from celerytask.tasks import update_forum_groups from celerytask.tasks import update_forum_groups
from forms import JabberBroadcastForm from forms import JabberBroadcastForm
from forms import FleetFormatterForm from forms import FleetFormatterForm
@ -28,8 +24,10 @@ def fleet_formatter_view(request):
generated = "Fleet Name: " + form.cleaned_data['fleet_name'] + "\n" generated = "Fleet Name: " + form.cleaned_data['fleet_name'] + "\n"
generated = generated + "FC: " + form.cleaned_data['fleet_commander'] + "\n" generated = generated + "FC: " + form.cleaned_data['fleet_commander'] + "\n"
generated = generated + "Comms: " + form.cleaned_data['fleet_comms'] + "\n" generated = generated + "Comms: " + form.cleaned_data['fleet_comms'] + "\n"
generated = generated + "Fleet Type: "+form.cleaned_data['fleet_type'] + " || " + form.cleaned_data['ship_priorities']+"\n" generated = generated + "Fleet Type: " + form.cleaned_data['fleet_type'] + " || " + form.cleaned_data[
generated = generated + "Form Up: "+form.cleaned_data['formup_location']+" @ "+form.cleaned_data['formup_time']+"\n" 'ship_priorities'] + "\n"
generated = generated + "Form Up: " + form.cleaned_data['formup_location'] + " @ " + form.cleaned_data[
'formup_time'] + "\n"
generated = generated + "Duration: " + form.cleaned_data['expected_duration'] + "\n" generated = generated + "Duration: " + form.cleaned_data['expected_duration'] + "\n"
generated = generated + "Reimbursable: " + form.cleaned_data['reimbursable'] + "\n" generated = generated + "Reimbursable: " + form.cleaned_data['reimbursable'] + "\n"
generated = generated + "Important: " + form.cleaned_data['important'] + "\n" generated = generated + "Important: " + form.cleaned_data['important'] + "\n"
@ -64,7 +62,8 @@ def jabber_broadcast_view(request):
def services_view(request): def services_view(request):
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
return render_to_response('registered/services.html', {'authinfo': authinfo}, context_instance=RequestContext(request)) return render_to_response('registered/services.html', {'authinfo': authinfo},
context_instance=RequestContext(request))
@login_required @login_required

View File

@ -469,7 +469,6 @@ textarea, select, .vTextField {
opacity: 0.4; opacity: 0.4;
} }
/* MODULES */ /* MODULES */
.module { .module {

View File

@ -9,7 +9,9 @@
width: 100%; width: 100%;
} }
.change-list .hiddenfields { display:none; } .change-list .hiddenfields {
display: none;
}
.change-list .filtered table { .change-list .filtered table {
border-right: 1px solid #ddd; border-right: 1px solid #ddd;

View File

@ -83,13 +83,29 @@ window.SelectFilter = {
from_box.setAttribute('name', from_box.getAttribute('name') + '_old'); from_box.setAttribute('name', from_box.getAttribute('name') + '_old');
// Set up the JavaScript event handlers for the select box filter interface // Set up the JavaScript event handlers for the select box filter interface
addEvent(filter_input, 'keyup', function(e) { SelectFilter.filter_key_up(e, field_id); }); addEvent(filter_input, 'keyup', function (e) {
addEvent(filter_input, 'keydown', function(e) { SelectFilter.filter_key_down(e, field_id); }); SelectFilter.filter_key_up(e, field_id);
addEvent(from_box, 'change', function(e) { SelectFilter.refresh_icons(field_id) }); });
addEvent(to_box, 'change', function(e) { SelectFilter.refresh_icons(field_id) }); addEvent(filter_input, 'keydown', function (e) {
addEvent(from_box, 'dblclick', function() { SelectBox.move(field_id + '_from', field_id + '_to'); SelectFilter.refresh_icons(field_id); }); SelectFilter.filter_key_down(e, field_id);
addEvent(to_box, 'dblclick', function() { SelectBox.move(field_id + '_to', field_id + '_from'); SelectFilter.refresh_icons(field_id); }); });
addEvent(findForm(from_box), 'submit', function() { SelectBox.select_all(field_id + '_to'); }); addEvent(from_box, 'change', function (e) {
SelectFilter.refresh_icons(field_id)
});
addEvent(to_box, 'change', function (e) {
SelectFilter.refresh_icons(field_id)
});
addEvent(from_box, 'dblclick', function () {
SelectBox.move(field_id + '_from', field_id + '_to');
SelectFilter.refresh_icons(field_id);
});
addEvent(to_box, 'dblclick', function () {
SelectBox.move(field_id + '_to', field_id + '_from');
SelectFilter.refresh_icons(field_id);
});
addEvent(findForm(from_box), 'submit', function () {
SelectBox.select_all(field_id + '_to');
});
SelectBox.init(field_id + '_from'); SelectBox.init(field_id + '_from');
SelectBox.init(field_id + '_to'); SelectBox.init(field_id + '_to');
// Move selected from_box options to to_box // Move selected from_box options to to_box
@ -99,7 +115,9 @@ window.SelectFilter = {
// In horizontal mode, give the same height to the two boxes. // In horizontal mode, give the same height to the two boxes.
var j_from_box = $(from_box); var j_from_box = $(from_box);
var j_to_box = $(to_box); var j_to_box = $(to_box);
var resize_filters = function() { j_to_box.height($(filter_p).outerHeight() + j_from_box.outerHeight()); } var resize_filters = function () {
j_to_box.height($(filter_p).outerHeight() + j_from_box.outerHeight());
}
if (j_from_box.outerHeight() > 0) { if (j_from_box.outerHeight() > 0) {
resize_filters(); // This fieldset is already open. Resize now. resize_filters(); // This fieldset is already open. Resize now.
} else { } else {

View File

@ -81,7 +81,9 @@
}); });
lastChecked = null; lastChecked = null;
$(actionCheckboxes).click(function (event) { $(actionCheckboxes).click(function (event) {
if (!event) { event = window.event; } if (!event) {
event = window.event;
}
var target = event.target ? event.target : event.srcElement; var target = event.target ? event.target : event.srcElement;
if (lastChecked && $.data(lastChecked) != $.data(target) && event.shiftKey === true) { if (lastChecked && $.data(lastChecked) != $.data(target) && event.shiftKey === true) {
var inrange = false; var inrange = false;

View File

@ -1,6 +1,96 @@
(function(a){a.fn.actions=function(n){var b=a.extend({},a.fn.actions.defaults,n),e=a(this),g=false,k=function(c){c?i():j();a(e).prop("checked",c).parent().parent().toggleClass(b.selectedClass,c)},f=function(){var c=a(e).filter(":checked").length;a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:_actions_icnt},true));a(b.allToggle).prop("checked",function(){if(c==e.length){value=true;i()}else{value=false;l()}return value})},i= (function (a) {
function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()},m=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()},j=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()},l=function(){j();a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)};a(b.counterContainer).show(); a.fn.actions = function (n) {
a(this).filter(":checked").each(function(){a(this).parent().parent().toggleClass(b.selectedClass);f();a(b.acrossInput).val()==1&&m()});a(b.allToggle).show().click(function(){k(a(this).prop("checked"));f()});a("div.actions span.question a").click(function(c){c.preventDefault();a(b.acrossInput).val(1);m()});a("div.actions span.clear a").click(function(c){c.preventDefault();a(b.allToggle).prop("checked",false);l();k(0);f()});lastChecked=null;a(e).click(function(c){if(!c)c=window.event;var d=c.target? var b = a.extend({}, a.fn.actions.defaults, n), e = a(this), g = false, k = function (c) {
c.target:c.srcElement;if(lastChecked&&a.data(lastChecked)!=a.data(d)&&c.shiftKey===true){var h=false;a(lastChecked).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(e).each(function(){if(a.data(this)==a.data(lastChecked)||a.data(this)==a.data(d))h=h?false:true;h&&a(this).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,d.checked);lastChecked=d;f()});a("form#changelist-form table#result_list tr").find("td:gt(0) :input").change(function(){g= c ? i() : j();
true});a('form#changelist-form button[name="index"]').click(function(){if(g)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))});a('form#changelist-form input[name="_save"]').click(function(){var c=false;a("div.actions select option:selected").each(function(){if(a(this).val())c=true});if(c)return g?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")): a(e).prop("checked", c).parent().parent().toggleClass(b.selectedClass, c)
confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})};a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"}})(django.jQuery); }, f = function () {
var c = a(e).filter(":checked").length;
a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected", "%(sel)s of %(cnt)s selected", c), {sel: c, cnt: _actions_icnt}, true));
a(b.allToggle).prop("checked", function () {
if (c == e.length) {
value = true;
i()
} else {
value = false;
l()
}
return value
})
}, i =
function () {
a(b.acrossClears).hide();
a(b.acrossQuestions).show();
a(b.allContainer).hide()
}, m = function () {
a(b.acrossClears).show();
a(b.acrossQuestions).hide();
a(b.actionContainer).toggleClass(b.selectedClass);
a(b.allContainer).show();
a(b.counterContainer).hide()
}, j = function () {
a(b.acrossClears).hide();
a(b.acrossQuestions).hide();
a(b.allContainer).hide();
a(b.counterContainer).show()
}, l = function () {
j();
a(b.acrossInput).val(0);
a(b.actionContainer).removeClass(b.selectedClass)
};
a(b.counterContainer).show();
a(this).filter(":checked").each(function () {
a(this).parent().parent().toggleClass(b.selectedClass);
f();
a(b.acrossInput).val() == 1 && m()
});
a(b.allToggle).show().click(function () {
k(a(this).prop("checked"));
f()
});
a("div.actions span.question a").click(function (c) {
c.preventDefault();
a(b.acrossInput).val(1);
m()
});
a("div.actions span.clear a").click(function (c) {
c.preventDefault();
a(b.allToggle).prop("checked", false);
l();
k(0);
f()
});
lastChecked = null;
a(e).click(function (c) {
if (!c)c = window.event;
var d = c.target ?
c.target : c.srcElement;
if (lastChecked && a.data(lastChecked) != a.data(d) && c.shiftKey === true) {
var h = false;
a(lastChecked).prop("checked", d.checked).parent().parent().toggleClass(b.selectedClass, d.checked);
a(e).each(function () {
if (a.data(this) == a.data(lastChecked) || a.data(this) == a.data(d))h = h ? false : true;
h && a(this).prop("checked", d.checked).parent().parent().toggleClass(b.selectedClass, d.checked)
})
}
a(d).parent().parent().toggleClass(b.selectedClass, d.checked);
lastChecked = d;
f()
});
a("form#changelist-form table#result_list tr").find("td:gt(0) :input").change(function () {
g =
true
});
a('form#changelist-form button[name="index"]').click(function () {
if (g)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))
});
a('form#changelist-form input[name="_save"]').click(function () {
var c = false;
a("div.actions select option:selected").each(function () {
if (a(this).val())c = true
});
if (c)return g ? confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")) :
confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))
})
};
a.fn.actions.defaults = {actionContainer: "div.actions", counterContainer: "span.action-counter", allContainer: "div.actions span.all", acrossInput: "div.actions input.select-across", acrossQuestions: "div.actions span.question", acrossClears: "div.actions span.clear", allToggle: "#action-toggle", selectedClass: "selected"}
})(django.jQuery);

View File

@ -41,7 +41,10 @@ var DateTimeShortcuts = {
addClock: function (inp) { addClock: function (inp) {
var num = DateTimeShortcuts.clockInputs.length; var num = DateTimeShortcuts.clockInputs.length;
DateTimeShortcuts.clockInputs[num] = inp; DateTimeShortcuts.clockInputs[num] = inp;
DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; }; DateTimeShortcuts.dismissClockFunc[num] = function () {
DateTimeShortcuts.dismissClock(num);
return true;
};
// Shortcut links (clock icon and "Now" link) // Shortcut links (clock icon and "Now" link)
var shortcuts_span = document.createElement('span'); var shortcuts_span = document.createElement('span');
@ -137,7 +140,10 @@ var DateTimeShortcuts = {
var num = DateTimeShortcuts.calendars.length; var num = DateTimeShortcuts.calendars.length;
DateTimeShortcuts.calendarInputs[num] = inp; DateTimeShortcuts.calendarInputs[num] = inp;
DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; }; DateTimeShortcuts.dismissCalendarFunc[num] = function () {
DateTimeShortcuts.dismissCalendar(num);
return true;
};
// Shortcut links (calendar icon and "Today" link) // Shortcut links (calendar icon and "Today" link)
var shortcuts_span = document.createElement('span'); var shortcuts_span = document.createElement('span');

View File

@ -1,2 +1,12 @@
(function(a){a(document).ready(function(){a("fieldset.collapse").each(function(c,b){0==a(b).find("div.errors").length&&a(b).addClass("collapsed").find("h2").first().append(' (<a id="fieldsetcollapser'+c+'" class="collapse-toggle" href="#">'+gettext("Show")+"</a>)")});a("fieldset.collapse a.collapse-toggle").click(function(){a(this).closest("fieldset").hasClass("collapsed")?a(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset",[a(this).attr("id")]):a(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", (function (a) {
[a(this).attr("id")]);return!1})})})(django.jQuery); a(document).ready(function () {
a("fieldset.collapse").each(function (c, b) {
0 == a(b).find("div.errors").length && a(b).addClass("collapsed").find("h2").first().append(' (<a id="fieldsetcollapser' + c + '" class="collapse-toggle" href="#">' + gettext("Show") + "</a>)")
});
a("fieldset.collapse a.collapse-toggle").click(function () {
a(this).closest("fieldset").hasClass("collapsed") ? a(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset", [a(this).attr("id")]) : a(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset",
[a(this).attr("id")]);
return!1
})
})
})(django.jQuery);

View File

@ -107,8 +107,7 @@
} }
// Also, update names and ids for all remaining form controls // Also, update names and ids for all remaining form controls
// so they remain in sequence: // so they remain in sequence:
for (var i=0, formCount=forms.length; i<formCount; i++) for (var i = 0, formCount = forms.length; i < formCount; i++) {
{
updateElementIndex($(forms).get(i), options.prefix, i); updateElementIndex($(forms).get(i), options.prefix, i);
$(forms.get(i)).find("*").each(function () { $(forms.get(i)).find("*").each(function () {
updateElementIndex(this, options.prefix, i); updateElementIndex(this, options.prefix, i);

View File

@ -1,9 +1,107 @@
(function(b){b.fn.formset=function(d){var a=b.extend({},b.fn.formset.defaults,d),c=b(this),d=c.parent(),i=function(a,e,g){var d=RegExp("("+e+"-(\\d+|__prefix__))"),e=e+"-"+g;b(a).prop("for")&&b(a).prop("for",b(a).prop("for").replace(d,e));a.id&&(a.id=a.id.replace(d,e));a.name&&(a.name=a.name.replace(d,e))},f=b("#id_"+a.prefix+"-TOTAL_FORMS").prop("autocomplete","off"),g=parseInt(f.val(),10),e=b("#id_"+a.prefix+"-MAX_NUM_FORMS").prop("autocomplete","off"),f=""===e.val()||0<e.val()-f.val();c.each(function(){b(this).not("."+ (function (b) {
a.emptyCssClass).addClass(a.formCssClass)});if(c.length&&f){var h;"TR"==c.prop("tagName")?(c=this.eq(-1).children().length,d.append('<tr class="'+a.addCssClass+'"><td colspan="'+c+'"><a href="javascript:void(0)">'+a.addText+"</a></tr>"),h=d.find("tr:last a")):(c.filter(":last").after('<div class="'+a.addCssClass+'"><a href="javascript:void(0)">'+a.addText+"</a></div>"),h=c.filter(":last").next().find("a"));h.click(function(d){d.preventDefault();var f=b("#id_"+a.prefix+"-TOTAL_FORMS"),d=b("#"+a.prefix+ b.fn.formset = function (d) {
"-empty"),c=d.clone(true);c.removeClass(a.emptyCssClass).addClass(a.formCssClass).attr("id",a.prefix+"-"+g);c.is("tr")?c.children(":last").append('<div><a class="'+a.deleteCssClass+'" href="javascript:void(0)">'+a.deleteText+"</a></div>"):c.is("ul")||c.is("ol")?c.append('<li><a class="'+a.deleteCssClass+'" href="javascript:void(0)">'+a.deleteText+"</a></li>"):c.children(":first").append('<span><a class="'+a.deleteCssClass+'" href="javascript:void(0)">'+a.deleteText+"</a></span>");c.find("*").each(function(){i(this, var a = b.extend({}, b.fn.formset.defaults, d), c = b(this), d = c.parent(), i = function (a, e, g) {
a.prefix,f.val())});c.insertBefore(b(d));b(f).val(parseInt(f.val(),10)+1);g=g+1;e.val()!==""&&e.val()-f.val()<=0&&h.parent().hide();c.find("a."+a.deleteCssClass).click(function(d){d.preventDefault();d=b(this).parents("."+a.formCssClass);d.remove();g=g-1;a.removed&&a.removed(d);d=b("."+a.formCssClass);b("#id_"+a.prefix+"-TOTAL_FORMS").val(d.length);(e.val()===""||e.val()-d.length>0)&&h.parent().show();for(var c=0,f=d.length;c<f;c++){i(b(d).get(c),a.prefix,c);b(d.get(c)).find("*").each(function(){i(this, var d = RegExp("(" + e + "-(\\d+|__prefix__))"), e = e + "-" + g;
a.prefix,c)})}});a.added&&a.added(c)})}return this};b.fn.formset.defaults={prefix:"form",addText:"add another",deleteText:"remove",addCssClass:"add-row",deleteCssClass:"delete-row",emptyCssClass:"empty-row",formCssClass:"dynamic-form",added:null,removed:null};b.fn.tabularFormset=function(d){var a=b(this),c=function(){b(a.selector).not(".add-row").removeClass("row1 row2").filter(":even").addClass("row1").end().filter(":odd").addClass("row2")};a.formset({prefix:d.prefix,addText:d.addText,formCssClass:"dynamic-"+ b(a).prop("for") && b(a).prop("for", b(a).prop("for").replace(d, e));
d.prefix,deleteCssClass:"inline-deletelink",deleteText:d.deleteText,emptyCssClass:"empty-form",removed:c,added:function(a){a.find(".prepopulated_field").each(function(){var d=b(this).find("input, select, textarea"),c=d.data("dependency_list")||[],e=[];b.each(c,function(d,b){e.push("#"+a.find(".field-"+b).find("input, select, textarea").attr("id"))});e.length&&d.prepopulate(e,d.attr("maxlength"))});"undefined"!=typeof DateTimeShortcuts&&(b(".datetimeshortcuts").remove(),DateTimeShortcuts.init());"undefined"!= a.id && (a.id = a.id.replace(d, e));
typeof SelectFilter&&(b(".selectfilter").each(function(a,b){var c=b.name.split("-");SelectFilter.init(b.id,c[c.length-1],false,d.adminStaticPrefix)}),b(".selectfilterstacked").each(function(a,b){var c=b.name.split("-");SelectFilter.init(b.id,c[c.length-1],true,d.adminStaticPrefix)}));c(a)}});return a};b.fn.stackedFormset=function(d){var a=b(this),c=function(){b(a.selector).find(".inline_label").each(function(a){a+=1;b(this).html(b(this).html().replace(/(#\d+)/g,"#"+a))})};a.formset({prefix:d.prefix, a.name && (a.name = a.name.replace(d, e))
addText:d.addText,formCssClass:"dynamic-"+d.prefix,deleteCssClass:"inline-deletelink",deleteText:d.deleteText,emptyCssClass:"empty-form",removed:c,added:function(a){a.find(".prepopulated_field").each(function(){var d=b(this).find("input, select, textarea"),c=d.data("dependency_list")||[],e=[];b.each(c,function(d,b){e.push("#"+a.find(".form-row .field-"+b).find("input, select, textarea").attr("id"))});e.length&&d.prepopulate(e,d.attr("maxlength"))});"undefined"!=typeof DateTimeShortcuts&&(b(".datetimeshortcuts").remove(), }, f = b("#id_" + a.prefix + "-TOTAL_FORMS").prop("autocomplete", "off"), g = parseInt(f.val(), 10), e = b("#id_" + a.prefix + "-MAX_NUM_FORMS").prop("autocomplete", "off"), f = "" === e.val() || 0 < e.val() - f.val();
DateTimeShortcuts.init());"undefined"!=typeof SelectFilter&&(b(".selectfilter").each(function(a,b){var c=b.name.split("-");SelectFilter.init(b.id,c[c.length-1],false,d.adminStaticPrefix)}),b(".selectfilterstacked").each(function(a,b){var c=b.name.split("-");SelectFilter.init(b.id,c[c.length-1],true,d.adminStaticPrefix)}));c(a)}});return a}})(django.jQuery); c.each(function () {
b(this).not("." +
a.emptyCssClass).addClass(a.formCssClass)
});
if (c.length && f) {
var h;
"TR" == c.prop("tagName") ? (c = this.eq(-1).children().length, d.append('<tr class="' + a.addCssClass + '"><td colspan="' + c + '"><a href="javascript:void(0)">' + a.addText + "</a></tr>"), h = d.find("tr:last a")) : (c.filter(":last").after('<div class="' + a.addCssClass + '"><a href="javascript:void(0)">' + a.addText + "</a></div>"), h = c.filter(":last").next().find("a"));
h.click(function (d) {
d.preventDefault();
var f = b("#id_" + a.prefix + "-TOTAL_FORMS"), d = b("#" + a.prefix +
"-empty"), c = d.clone(true);
c.removeClass(a.emptyCssClass).addClass(a.formCssClass).attr("id", a.prefix + "-" + g);
c.is("tr") ? c.children(":last").append('<div><a class="' + a.deleteCssClass + '" href="javascript:void(0)">' + a.deleteText + "</a></div>") : c.is("ul") || c.is("ol") ? c.append('<li><a class="' + a.deleteCssClass + '" href="javascript:void(0)">' + a.deleteText + "</a></li>") : c.children(":first").append('<span><a class="' + a.deleteCssClass + '" href="javascript:void(0)">' + a.deleteText + "</a></span>");
c.find("*").each(function () {
i(this,
a.prefix, f.val())
});
c.insertBefore(b(d));
b(f).val(parseInt(f.val(), 10) + 1);
g = g + 1;
e.val() !== "" && e.val() - f.val() <= 0 && h.parent().hide();
c.find("a." + a.deleteCssClass).click(function (d) {
d.preventDefault();
d = b(this).parents("." + a.formCssClass);
d.remove();
g = g - 1;
a.removed && a.removed(d);
d = b("." + a.formCssClass);
b("#id_" + a.prefix + "-TOTAL_FORMS").val(d.length);
(e.val() === "" || e.val() - d.length > 0) && h.parent().show();
for (var c = 0, f = d.length; c < f; c++) {
i(b(d).get(c), a.prefix, c);
b(d.get(c)).find("*").each(function () {
i(this,
a.prefix, c)
})
}
});
a.added && a.added(c)
})
}
return this
};
b.fn.formset.defaults = {prefix: "form", addText: "add another", deleteText: "remove", addCssClass: "add-row", deleteCssClass: "delete-row", emptyCssClass: "empty-row", formCssClass: "dynamic-form", added: null, removed: null};
b.fn.tabularFormset = function (d) {
var a = b(this), c = function () {
b(a.selector).not(".add-row").removeClass("row1 row2").filter(":even").addClass("row1").end().filter(":odd").addClass("row2")
};
a.formset({prefix: d.prefix, addText: d.addText, formCssClass: "dynamic-" +
d.prefix, deleteCssClass: "inline-deletelink", deleteText: d.deleteText, emptyCssClass: "empty-form", removed: c, added: function (a) {
a.find(".prepopulated_field").each(function () {
var d = b(this).find("input, select, textarea"), c = d.data("dependency_list") || [], e = [];
b.each(c, function (d, b) {
e.push("#" + a.find(".field-" + b).find("input, select, textarea").attr("id"))
});
e.length && d.prepopulate(e, d.attr("maxlength"))
});
"undefined" != typeof DateTimeShortcuts && (b(".datetimeshortcuts").remove(), DateTimeShortcuts.init());
"undefined" != typeof SelectFilter && (b(".selectfilter").each(function (a, b) {
var c = b.name.split("-");
SelectFilter.init(b.id, c[c.length - 1], false, d.adminStaticPrefix)
}), b(".selectfilterstacked").each(function (a, b) {
var c = b.name.split("-");
SelectFilter.init(b.id, c[c.length - 1], true, d.adminStaticPrefix)
}));
c(a)
}});
return a
};
b.fn.stackedFormset = function (d) {
var a = b(this), c = function () {
b(a.selector).find(".inline_label").each(function (a) {
a += 1;
b(this).html(b(this).html().replace(/(#\d+)/g, "#" + a))
})
};
a.formset({prefix: d.prefix,
addText: d.addText, formCssClass: "dynamic-" + d.prefix, deleteCssClass: "inline-deletelink", deleteText: d.deleteText, emptyCssClass: "empty-form", removed: c, added: function (a) {
a.find(".prepopulated_field").each(function () {
var d = b(this).find("input, select, textarea"), c = d.data("dependency_list") || [], e = [];
b.each(c, function (d, b) {
e.push("#" + a.find(".form-row .field-" + b).find("input, select, textarea").attr("id"))
});
e.length && d.prepopulate(e, d.attr("maxlength"))
});
"undefined" != typeof DateTimeShortcuts && (b(".datetimeshortcuts").remove(),
DateTimeShortcuts.init());
"undefined" != typeof SelectFilter && (b(".selectfilter").each(function (a, b) {
var c = b.name.split("-");
SelectFilter.init(b.id, c[c.length - 1], false, d.adminStaticPrefix)
}), b(".selectfilterstacked").each(function (a, b) {
var c = b.name.split("-");
SelectFilter.init(b.id, c[c.length - 1], true, d.adminStaticPrefix)
}));
c(a)
}});
return a
}
})(django.jQuery);

View File

@ -476,9 +476,7 @@ jQuery.extend({
try { try {
// Not own constructor property must be Object // Not own constructor property must be Object
if ( obj.constructor && if (obj.constructor && !core_hasOwn.call(obj, "constructor") && !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
!core_hasOwn.call(obj, "constructor") &&
!core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
return false; return false;
} }
} catch (e) { } catch (e) {
@ -490,7 +488,8 @@ jQuery.extend({
// if last one is own, then all properties are own. // if last one is own, then all properties are own.
var key; var key;
for ( key in obj ) {} for (key in obj) {
}
return key === undefined || core_hasOwn.call(obj, key); return key === undefined || core_hasOwn.call(obj, key);
}, },
@ -589,7 +588,8 @@ jQuery.extend({
return xml; return xml;
}, },
noop: function() {}, noop: function () {
},
// Evaluates a script in a global context // Evaluates a script in a global context
// Workarounds based on findings by Jim Driscoll // Workarounds based on findings by Jim Driscoll
@ -916,7 +916,8 @@ jQuery.ready.promise = function( obj ) {
try { try {
top = window.frameElement == null && document.documentElement; top = window.frameElement == null && document.documentElement;
} catch(e) {} } catch (e) {
}
if (top && top.doScroll) { if (top && top.doScroll) {
(function doScrollCheck() { (function doScrollCheck() {
@ -1505,8 +1506,7 @@ jQuery.support = (function() {
marginDiv.style.marginRight = marginDiv.style.width = "0"; marginDiv.style.marginRight = marginDiv.style.width = "0";
div.style.width = "1px"; div.style.width = "1px";
support.reliableMarginRight = support.reliableMarginRight = !parseFloat(( window.getComputedStyle(marginDiv, null) || {} ).marginRight);
!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
} }
if (typeof div.style.zoom !== core_strundefined) { if (typeof div.style.zoom !== core_strundefined) {
@ -1856,7 +1856,8 @@ function dataAttr( elem, key, data ) {
+data + "" === data ? +data : +data + "" === data ? +data :
rbrace.test(data) ? jQuery.parseJSON(data) : rbrace.test(data) ? jQuery.parseJSON(data) :
data; data;
} catch( e ) {} } catch (e) {
}
// Make sure we set the data so it isn't changed later // Make sure we set the data so it isn't changed later
jQuery.data(elem, key, data); jQuery.data(elem, key, data);
@ -1885,6 +1886,7 @@ function isEmptyDataObject( obj ) {
return true; return true;
} }
jQuery.extend({ jQuery.extend({
queue: function (elem, type, data) { queue: function (elem, type, data) {
var queue; var queue;
@ -2064,7 +2066,8 @@ jQuery.fn.extend({
try { try {
this[ name ] = undefined; this[ name ] = undefined;
delete this[ name ]; delete this[ name ];
} catch( e ) {} } catch (e) {
}
}); });
}, },
@ -2997,8 +3000,7 @@ jQuery.event = {
// If nobody prevented the default action, do it now // If nobody prevented the default action, do it now
if (!onlyHandlers && !event.isDefaultPrevented()) { if (!onlyHandlers && !event.isDefaultPrevented()) {
if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && if ((!special._default || special._default.apply(elem.ownerDocument, data) === false) && !(type === "click" && jQuery.nodeName(elem, "a")) && jQuery.acceptData(elem)) {
!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
// Call a native DOM method on the target with the same name name as the event. // Call a native DOM method on the target with the same name name as the event.
// Can't use an .isFunction() check here because IE6/7 fails that test. // Can't use an .isFunction() check here because IE6/7 fails that test.
@ -4381,7 +4383,8 @@ Sizzle.matchesSelector = function( elem, expr ) {
elem.document && elem.document.nodeType !== 11) { elem.document && elem.document.nodeType !== 11) {
return ret; return ret;
} }
} catch(e) {} } catch (e) {
}
} }
return Sizzle(expr, document, null, [elem]).length > 0; return Sizzle(expr, document, null, [elem]).length > 0;
@ -4634,7 +4637,9 @@ Expr = Sizzle.selectors = {
"TAG": function (nodeName) { "TAG": function (nodeName) {
if (nodeName === "*") { if (nodeName === "*") {
return function() { return true; }; return function () {
return true;
};
} }
nodeName = nodeName.replace(runescape, funescape).toLowerCase(); nodeName = nodeName.replace(runescape, funescape).toLowerCase();
@ -5524,7 +5529,9 @@ function select( selector, context, results, seed ) {
Expr.pseudos["nth"] = Expr.pseudos["eq"]; Expr.pseudos["nth"] = Expr.pseudos["eq"];
// Easy API for creating new setFilters // Easy API for creating new setFilters
function setFilters() {} function setFilters() {
}
Expr.filters = setFilters.prototype = Expr.pseudos; Expr.filters = setFilters.prototype = Expr.pseudos;
Expr.setFilters = new setFilters(); Expr.setFilters = new setFilters();
@ -5818,6 +5825,7 @@ function winnow( elements, qualifier, keep ) {
return ( jQuery.inArray(elem, qualifier) >= 0 ) === keep; return ( jQuery.inArray(elem, qualifier) >= 0 ) === keep;
}); });
} }
function createSafeFragment(document) { function createSafeFragment(document) {
var list = nodeNames.split("|"), var list = nodeNames.split("|"),
safeFrag = document.createDocumentFragment(); safeFrag = document.createDocumentFragment();
@ -6049,8 +6057,7 @@ jQuery.fn.extend({
// See if we can take a shortcut and just use innerHTML // See if we can take a shortcut and just use innerHTML
if (typeof value === "string" && !rnoInnerhtml.test(value) && if (typeof value === "string" && !rnoInnerhtml.test(value) &&
( jQuery.support.htmlSerialize || !rnoshimcache.test(value) ) && ( jQuery.support.htmlSerialize || !rnoshimcache.test(value) ) &&
( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test(value) ) && !wrapMap[ ( rtagName.exec(value) || ["", ""] )[1].toLowerCase() ]) {
!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
value = value.replace(rxhtmlTag, "<$1></$2>"); value = value.replace(rxhtmlTag, "<$1></$2>");
@ -6067,7 +6074,8 @@ jQuery.fn.extend({
elem = 0; elem = 0;
// If using innerHTML throws an exception, use the fallback method // If using innerHTML throws an exception, use the fallback method
} catch(e) {} } catch (e) {
}
} }
if (elem) { if (elem) {
@ -6170,8 +6178,7 @@ jQuery.fn.extend({
// Evaluate executable scripts on first document insertion // Evaluate executable scripts on first document insertion
for (i = 0; i < hasScripts; i++) { for (i = 0; i < hasScripts; i++) {
node = scripts[ i ]; node = scripts[ i ];
if ( rscriptType.test( node.type || "" ) && if (rscriptType.test(node.type || "") && !jQuery._data(node, "globalEval") && jQuery.contains(doc, node)) {
!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
if (node.src) { if (node.src) {
// Hope ajax is available... // Hope ajax is available...
@ -6209,6 +6216,7 @@ function disableScript( elem ) {
elem.type = ( attr && attr.specified ) + "/" + elem.type; elem.type = ( attr && attr.specified ) + "/" + elem.type;
return elem; return elem;
} }
function restoreScript(elem) { function restoreScript(elem) {
var match = rscriptTypeMasked.exec(elem.type); var match = rscriptTypeMasked.exec(elem.type);
if (match) { if (match) {
@ -6849,7 +6857,8 @@ jQuery.extend({
// Fixes bug #5509 // Fixes bug #5509
try { try {
style[ name ] = value; style[ name ] = value;
} catch(e) {} } catch (e) {
}
} }
} else { } else {
@ -7392,6 +7401,7 @@ function buildParams( prefix, obj, traditional, add ) {
add(prefix, obj); add(prefix, obj);
} }
} }
jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick " + jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup error contextmenu").split(" "), function (i, name) { "change select submit keydown keypress keyup error contextmenu").split(" "), function (i, name) {
@ -8258,6 +8268,7 @@ function ajaxConvert( s, response ) {
return { state: "success", data: response }; return { state: "success", data: response };
} }
// Install script dataType // Install script dataType
jQuery.ajaxSetup({ jQuery.ajaxSetup({
accepts: { accepts: {
@ -8439,13 +8450,15 @@ var xhrCallbacks, xhrSupported,
function createStandardXHR() { function createStandardXHR() {
try { try {
return new window.XMLHttpRequest(); return new window.XMLHttpRequest();
} catch( e ) {} } catch (e) {
}
} }
function createActiveXHR() { function createActiveXHR() {
try { try {
return new window.ActiveXObject("Microsoft.XMLHTTP"); return new window.ActiveXObject("Microsoft.XMLHTTP");
} catch( e ) {} } catch (e) {
}
} }
// Create the request object // Create the request object
@ -8518,7 +8531,8 @@ if ( xhrSupported ) {
for (i in headers) { for (i in headers) {
xhr.setRequestHeader(i, headers[ i ]); xhr.setRequestHeader(i, headers[ i ]);
} }
} catch( err ) {} } catch (err) {
}
// Do send the request // Do send the request
// This may raise an exception which is actually // This may raise an exception which is actually
@ -9004,6 +9018,7 @@ function defaultPrefilter( elem, props, opts ) {
function Tween(elem, options, prop, end, easing) { function Tween(elem, options, prop, end, easing) {
return new Tween.prototype.init(elem, options, prop, end, easing); return new Tween.prototype.init(elem, options, prop, end, easing);
} }
jQuery.Tween = Tween; jQuery.Tween = Tween;
Tween.prototype = { Tween.prototype = {
@ -9530,6 +9545,7 @@ function getWindow( elem ) {
elem.defaultView || elem.parentWindow : elem.defaultView || elem.parentWindow :
false; false;
} }
// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
jQuery.each({ Height: "height", Width: "width" }, function (name, type) { jQuery.each({ Height: "height", Width: "width" }, function (name, type) {
jQuery.each({ padding: "inner" + name, content: type, "": "outer" + name }, function (defaultExtra, funcName) { jQuery.each({ padding: "inner" + name, content: type, "": "outer" + name }, function (defaultExtra, funcName) {
@ -9591,7 +9607,9 @@ window.jQuery = window.$ = jQuery;
// Do this after creating the global so that if an AMD module wants to call // Do this after creating the global so that if an AMD module wants to call
// noConflict to hide this version of jQuery, it will work. // noConflict to hide this version of jQuery, it will work.
if (typeof define === "function" && define.amd && define.amd.jQuery) { if (typeof define === "function" && define.amd && define.amd.jQuery) {
define( "jquery", [], function () { return jQuery; } ); define("jquery", [], function () {
return jQuery;
});
} }
})(window); })(window);

File diff suppressed because one or more lines are too long

View File

@ -1 +1,21 @@
(function(a){a.fn.prepopulate=function(d,g){return this.each(function(){var b=a(this);b.data("_changed",false);b.change(function(){b.data("_changed",true)});var c=function(){if(b.data("_changed")!=true){var e=[];a.each(d,function(h,f){a(f).val().length>0&&e.push(a(f).val())});b.val(URLify(e.join(" "),g))}};a(d.join(",")).keyup(c).change(c).focus(c)})}})(django.jQuery); (function (a) {
a.fn.prepopulate = function (d, g) {
return this.each(function () {
var b = a(this);
b.data("_changed", false);
b.change(function () {
b.data("_changed", true)
});
var c = function () {
if (b.data("_changed") != true) {
var e = [];
a.each(d, function (h, f) {
a(f).val().length > 0 && e.push(a(f).val())
});
b.val(URLify(e.join(" "), g))
}
};
a(d.join(",")).keyup(c).change(c).focus(c)
})
}
})(django.jQuery);

View File

@ -1,12 +1,8 @@
var LATIN_MAP = { var LATIN_MAP = {
'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', 'Ç': 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', 'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', 'Î': 'I',
'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', 'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 'Õ': 'O', 'Ö': 'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', 'Ü': 'U', 'Ű': 'U',
'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 'Õ': 'O', 'Ö': 'Ý': 'Y', 'Þ': 'TH', 'ß': 'ss', 'à': 'a', 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e',
'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', 'Ü': 'U', 'Ű': 'U', 'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u',
'Ý': 'Y', 'Þ': 'TH', 'ß': 'ss', 'à':'a', 'á':'a', 'â': 'a', 'ã': 'a', 'ä':
'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e',
'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó':
'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u',
'û': 'u', 'ü': 'u', 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y' 'û': 'u', 'ü': 'u', 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y'
} }
var LATIN_SYMBOLS_MAP = { var LATIN_SYMBOLS_MAP = {
@ -73,17 +69,14 @@ ALL_DOWNCODE_MAPS[7]=POLISH_MAP
ALL_DOWNCODE_MAPS[8] = LATVIAN_MAP ALL_DOWNCODE_MAPS[8] = LATVIAN_MAP
var Downcoder = new Object(); var Downcoder = new Object();
Downcoder.Initialize = function() Downcoder.Initialize = function () {
{
if (Downcoder.map) // already made if (Downcoder.map) // already made
return; return;
Downcoder.map = {} Downcoder.map = {}
Downcoder.chars = ''; Downcoder.chars = '';
for(var i in ALL_DOWNCODE_MAPS) for (var i in ALL_DOWNCODE_MAPS) {
{
var lookup = ALL_DOWNCODE_MAPS[i] var lookup = ALL_DOWNCODE_MAPS[i]
for (var c in lookup) for (var c in lookup) {
{
Downcoder.map[c] = lookup[c]; Downcoder.map[c] = lookup[c];
Downcoder.chars += c; Downcoder.chars += c;
} }
@ -91,20 +84,15 @@ Downcoder.Initialize = function()
Downcoder.regex = new RegExp('[' + Downcoder.chars + ']|[^' + Downcoder.chars + ']+', 'g'); Downcoder.regex = new RegExp('[' + Downcoder.chars + ']|[^' + Downcoder.chars + ']+', 'g');
} }
downcode= function( slug ) downcode = function (slug) {
{
Downcoder.Initialize(); Downcoder.Initialize();
var downcoded = "" var downcoded = ""
var pieces = slug.match(Downcoder.regex); var pieces = slug.match(Downcoder.regex);
if(pieces) if (pieces) {
{ for (var i = 0; i < pieces.length; i++) {
for (var i = 0 ; i < pieces.length ; i++) if (pieces[i].length == 1) {
{
if (pieces[i].length == 1)
{
var mapped = Downcoder.map[pieces[i]]; var mapped = Downcoder.map[pieces[i]];
if (mapped != null) if (mapped != null) {
{
downcoded += mapped; downcoded += mapped;
continue; continue;
} }
@ -112,8 +100,7 @@ downcode= function( slug )
downcoded += pieces[i]; downcoded += pieces[i];
} }
} }
else else {
{
downcoded = slug; downcoded = slug;
} }
return downcoded; return downcoded;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -25,10 +25,12 @@ body {
margin: 0 0 0 250px; margin: 0 0 0 250px;
padding: 0 30px; padding: 0 30px;
border-left: 1px solid #e7e7e7; border-left: 1px solid #e7e7e7;
overflow: hidden;} overflow: hidden;
} }
} }
}
.navbar-top-links li { .navbar-top-links li {
display: inline-block; display: inline-block;
} }

File diff suppressed because one or more lines are too long

View File

@ -19,6 +19,11 @@
<link href="{% static 'css/font-awesome.min.css' %}" rel="stylesheet" type="text/css"> <link href="{% static 'css/font-awesome.min.css' %}" rel="stylesheet" type="text/css">
<link href="{% static 'css/sb-admin-2.css' %}" rel="stylesheet"> <link href="{% static 'css/sb-admin-2.css' %}" rel="stylesheet">
{% block extra_css %}{% endblock extra_css %} {% block extra_css %}{% endblock extra_css %}
<style>
.grayiconecolor {
color: #505050;
}
</style>
</head> </head>
<body> <body>
@ -57,43 +62,68 @@
</li> </li>
<li> <li>
<a {% ifequal request.path "/dashboard/" %} class="active" {% endifequal %} href="{% url 'auth_dashboard' %}"><i class="fa fa-dashboard fa-fw"></i> Dashboard</a> <a {% ifequal request.path "/dashboard/" %} class="active" {% endifequal %}
href="{% url 'auth_dashboard' %}"><i
class="fa fa-dashboard fa-fw grayiconecolor"></i> Dashboard</a>
</li> </li>
<li> <li>
<a {% ifequal request.path "/characters/" %} class="active" {% endifequal %} href="{% url 'auth_characters' %}"><i class="fa fa-users fa-fw"></i> Characters</a> <a {% ifequal request.path "/characters/" %} class="active" {% endifequal %}
href="{% url 'auth_characters' %}"><i
class="fa fa-users fa-fw grayiconecolor"></i> Characters</a>
</li> </li>
<li> <li>
<a {% ifequal request.path "/api_key_management/" %} class="active" {% endifequal %} href="{% url 'auth_api_key_management' %}"><i class="fa fa-key fa-fw"></i> Api Keys</a> <a {% ifequal request.path "/api_key_management/" %} class="active" {% endifequal %}
href="{% url 'auth_api_key_management' %}"><i
class="fa fa-key fa-fw grayiconecolor"></i> Api Keys</a>
</li> </li>
<li> <li>
<a {% ifequal request.path "/groups/" %} class="active" {% endifequal %} href="{% url 'auth_groups' %}"><i class="fa fa-cogs fa-sitemap"></i> Groups</a> <a {% ifequal request.path "/groups/" %} class="active" {% endifequal %}
href="{% url 'auth_groups' %}"><i
class="fa fa-cogs fa-sitemap grayiconecolor"></i> Groups</a>
</li> </li>
<li> <li>
<a {% ifequal request.path "/services/" %} class="active" {% endifequal %} href="{% url 'auth_services' %}"><i class="fa fa-cogs fa-fw"></i> Services</a> <a {% ifequal request.path "/services/" %} class="active" {% endifequal %}
href="{% url 'auth_services' %}"><i
class="fa fa-cogs fa-fw grayiconecolor"></i> Services</a>
</li> </li>
<li> <li>
<a {% ifequal request.path "/help/" %} class="active" {% endifequal %} href="{% url 'auth_help' %}"><i class="fa fa-question fa-fw"></i> Help</a> <a {% ifequal request.path "/help/" %} class="active" {% endifequal %}
href="{% url 'auth_help' %}"><i
class="fa fa-question fa-fw grayiconecolor"></i> Help</a>
</li>
<li>
<a {% ifequal request.path "/hr_application_management/" %} class="active" {% endifequal %}
href="{% url 'auth_hrapplications_view' %}"><i
class="fa fa-file-o fa-fw grayiconecolor"></i> Applications</a>
</li> </li>
<li class="text-center divider-horizontal"> <li class="text-center divider-horizontal">
<h5>Util</h5> <h5>Util</h5>
</li> </li>
<li> <li>
<a {% ifequal request.path "/user/password/" %} class="active" {% endifequal %} href="{% url 'password_change' %}"><i class="fa fa-lock fa-fw"></i>Change Password</a> <a {% ifequal request.path "/user/password/" %} class="active" {% endifequal %}
href="{% url 'password_change' %}"><i
class="fa fa-lock fa-fw grayiconecolor"></i>Change Password</a>
</li> </li>
{% if perms.auth.group_management %} {% if perms.auth.group_management %}
<li> <li>
<a {% ifequal request.path "/user/group_management/" %} class="active" {% endifequal %} href="{% url 'auth_group_management' %}"><i class="fa fa-lock fa-sitemap"></i> Group Management</a> <a {% ifequal request.path "/user/group_management/" %} class="active" {% endifequal %}
href="{% url 'auth_group_management' %}"><i
class="fa fa-lock fa-sitemap grayiconecolor"></i> Group Management</a>
</li> </li>
{% endif %} {% endif %}
{% if perms.auth.jabber_broadcast %} {% if perms.auth.jabber_broadcast %}
<li> <li>
<a {% ifequal request.path "/serivces/jabber_broadcast/" %} class="active" {% endifequal %} href="{% url 'auth_jabber_broadcast_view' %}"><i class="fa fa-lock fa-bullhorn"></i> Jabber Broadcast</a> <a {% ifequal request.path "/serivces/jabber_broadcast/" %}
class="active" {% endifequal %} href="{% url 'auth_jabber_broadcast_view' %}"><i
class="fa fa-lock fa-bullhorn grayiconecolor"></i> Jabber Broadcast</a>
</li> </li>
{% endif %} {% endif %}
<li> <li>
<a {% ifequal request.path "/tool/fleet_formatter_tool/" %} class="active" {% endifequal %} href="{% url 'auth_fleet_format_tool_view' %}"><i class="fa fa-space-shuttle fa-fw"></i> Fleet Broadcast Formatter</a> <a {% ifequal request.path "/tool/fleet_formatter_tool/" %} class="active" {% endifequal %}
href="{% url 'auth_fleet_format_tool_view' %}"><i
class="fa fa-space-shuttle fa-fw grayiconecolor"></i> Fleet Broadcast Formatter</a>
</li> </li>
</ul> </ul>
</div> </div>

View File

@ -32,6 +32,7 @@ div {
<img src="{% static 'img/index_images/auth.png' %}" border="0"> <img src="{% static 'img/index_images/auth.png' %}" border="0">
</a> </a>
</p> </p>
<p style="text-align:center"> <p style="text-align:center">
<a href="/forums/"> <a href="/forums/">
<img src="{% static 'img/index_images/forums.png' %}" border="0"> <img src="{% static 'img/index_images/forums.png' %}" border="0">

View File

@ -45,6 +45,7 @@
<a href="{% url 'auth_register_user' %}"> <a href="{% url 'auth_register_user' %}">
<button class="btn btn- btn-success btn-block">Register</button> <button class="btn btn- btn-success btn-block">Register</button>
</a> </a>
<form class="form-signin" role="form" action="{% url 'auth_login_user' %}" method="POST"> <form class="form-signin" role="form" action="{% url 'auth_login_user' %}" method="POST">
{% csrf_token %} {% csrf_token %}
<h2 class="form-signin-heading text-center">Please sign in</h2> <h2 class="form-signin-heading text-center">Please sign in</h2>

View File

@ -27,6 +27,7 @@
background: rgba(48, 48, 48, 0.7); background: rgba(48, 48, 48, 0.7);
color: #ffffff; color: #ffffff;
} }
.panel-body { .panel-body {
} }

View File

@ -10,13 +10,16 @@
{% block content %} {% block content %}
<div class="col-lg-12"> <div class="col-lg-12">
<h1 class="page-header text-center">Add Api Key</h1> <h1 class="page-header text-center">Add Api Key</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">
<p class="text-center"> <p class="text-center">
Full API Key is required for auth services Full API Key is required for auth services
</p> </p>
<a target="_blank" href="https://community.eveonline.com/support/api-key/CreatePredefined?accessMask=268435455">Create a full API key</a> <a target="_blank"
href="https://community.eveonline.com/support/api-key/CreatePredefined?accessMask=268435455">Create
a full API key</a>
</p> </p>
<form class="form-signin" role="form" action="{% url 'auth_add_api_key' %}" method="POST"> <form class="form-signin" role="form" action="{% url 'auth_add_api_key' %}" method="POST">
{% csrf_token %} {% csrf_token %}

View File

@ -33,7 +33,8 @@
<td class="text-center">{{ pair.api_key }}</td> <td class="text-center">{{ pair.api_key }}</td>
<td class="text-center"> <td class="text-center">
<a href="/delete_api_pair/{{ pair.api_id }}"> <a href="/delete_api_pair/{{ pair.api_id }}">
<button type="button" class="btn btn-danger"><span class="glyphicon glyphicon-remove"></span></button> <button type="button" class="btn btn-danger"><span
class="glyphicon glyphicon-remove"></span></button>
</a> </a>
</td> </td>
</tr> </tr>

View File

@ -9,6 +9,7 @@
{% block content %} {% block content %}
<div class="col-lg-12 container"> <div class="col-lg-12 container">
<h1 class="page-header text-center">Characters</h1> <h1 class="page-header text-center">Characters</h1>
<div class="col-lg-12 container" id="example"> <div class="col-lg-12 container" id="example">
{% if authinfo.main_char_id %} {% if authinfo.main_char_id %}
@ -30,9 +31,13 @@
<div class="text-right col-md-4"> <div class="text-right col-md-4">
<a href="/main_character_change/{{ character.character_id }}"> <a href="/main_character_change/{{ character.character_id }}">
{% ifequal character.character_id authinfo.main_char_id %} {% ifequal character.character_id authinfo.main_char_id %}
<button type="button" class="btn btn-default btn-xs" disabled>Make Primary</button> <button type="button" class="btn btn-default btn-xs" disabled>
Make Primary
</button>
{% else %} {% else %}
<button type="button" class="btn btn-primary btn-xs">Make Primary</button> <button type="button" class="btn btn-primary btn-xs">Make
Primary
</button>
{% endifequal %} {% endifequal %}
</a> </a>
</div> </div>
@ -44,11 +49,14 @@
<div class="panel-body"> <div class="panel-body">
<div class="col-lg-5 col-sm-2"><img class= <div class="col-lg-5 col-sm-2"><img class=
"ra-avatar img-responsive" src= "ra-avatar img-responsive" src=
"https://image.eveonline.com/Character/{{character.character_id}}_128.jpg"></div> "https://image.eveonline.com/Character/{{ character.character_id }}_128.jpg">
</div>
<div class="col-lg-7 col-sm-2"> <div class="col-lg-7 col-sm-2">
<p><strong>Alliance: </strong> {{ character.alliance_name }} </p> <p><strong>Alliance: </strong> {{ character.alliance_name }} </p>
<p><strong>Corporation: </strong>{{ character.corporation_name }}</p> <p><strong>Corporation: </strong>{{ character.corporation_name }}</p>
<p><strong>Corporation Ticker: </strong> {{ character.corporation_ticker }} </p> <p><strong>Corporation Ticker: </strong> {{ character.corporation_ticker }} </p>
</div> </div>
</div> </div>

View File

@ -20,11 +20,14 @@
<div class="panel-body"> <div class="panel-body">
<div class="col-lg-5 col-sm-2"><img class= <div class="col-lg-5 col-sm-2"><img class=
"ra-avatar img-responsive" src= "ra-avatar img-responsive" src=
"https://image.eveonline.com/Character/{{character.character_id}}_128.jpg"></div> "https://image.eveonline.com/Character/{{ character.character_id }}_128.jpg">
</div>
<div class="col-lg-7 col-sm-2"> <div class="col-lg-7 col-sm-2">
<h4 class="">{{ character.character_name }}</h4> <h4 class="">{{ character.character_name }}</h4>
<p>{{ character.corporation_name }}</p> <p>{{ character.corporation_name }}</p>
<p>{{ character.alliance_name }}</p> <p>{{ character.alliance_name }}</p>
</div> </div>
</div> </div>

View File

@ -8,6 +8,7 @@
<div class="col-lg-12"> <div class="col-lg-12">
<h1 class="page-header text-center">Help</h1> <h1 class="page-header text-center">Help</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">

View File

@ -0,0 +1,23 @@
{% 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">
<h1 class="page-header text-center">HR Applications
<div class="text-right">
<a href="{% url 'auth_hrapplication_create_view' %}">
<button type="button" class="btn btn-success">Create Application</button>
</a>
</div>
</h1>
<div class="container-fluid">
</div>
</div>
{% endblock content %}

View File

@ -0,0 +1,28 @@
{% extends "public/base.html" %}
{% load bootstrap %}
{% load staticfiles %}
{% block title %}Alliance Auth - Create Application{% endblock %}
{% block page_title %}Create Application{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
<h1 class="page-header text-center">Create Application</h1>
<div class="container-fluid">
<div class="col-md-4 col-md-offset-4">
<div class="row">
<form class="form-signin" role="form" action="" method="POST">
{% csrf_token %}
{{ form|bootstrap }}
<br/>
<button class="btn btn-lg btn-primary btn-block" type="submit">Submit Application</button>
</form>
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@ -10,6 +10,7 @@
{% block content %} {% block content %}
<div class="col-lg-12"> <div class="col-lg-12">
<h1 class="page-header text-center">Jabber Broadcast</h1> <h1 class="page-header text-center">Jabber Broadcast</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">

View File

@ -26,14 +26,17 @@
<td class="text-center"> <td class="text-center">
{% ifequal authinfo.forum_username "" %} {% ifequal authinfo.forum_username "" %}
<a href="{% url 'auth_activate_forum' %}"> <a href="{% url 'auth_activate_forum' %}">
<button type="button" class="btn btn-success"><span class="glyphicon glyphicon-ok"></span></button> <button type="button" class="btn btn-success"><span
class="glyphicon glyphicon-ok"></span></button>
</a> </a>
{% else %} {% else %}
<a href="{% url 'auth_reset_forum_password' %}"> <a href="{% url 'auth_reset_forum_password' %}">
<button type="button" class="btn btn-primary"><span class="glyphicon glyphicon-refresh"></span></button> <button type="button" class="btn btn-primary"><span
class="glyphicon glyphicon-refresh"></span></button>
</a> </a>
<a href="{% url 'auth_deactivate_forum' %}"> <a href="{% url 'auth_deactivate_forum' %}">
<button type="button" class="btn btn-danger"><span class="glyphicon glyphicon-remove"></span></button> <button type="button" class="btn btn-danger"><span
class="glyphicon glyphicon-remove"></span></button>
</a> </a>
{% endifequal %} {% endifequal %}
</td> </td>
@ -46,14 +49,17 @@
<td class="text-center"> <td class="text-center">
{% ifequal authinfo.jabber_username "" %} {% ifequal authinfo.jabber_username "" %}
<a href="{% url 'auth_activate_jabber' %}"> <a href="{% url 'auth_activate_jabber' %}">
<button type="button" class="btn btn-success"><span class="glyphicon glyphicon-ok"></span></button> <button type="button" class="btn btn-success"><span
class="glyphicon glyphicon-ok"></span></button>
</a> </a>
{% else %} {% else %}
<a href="{% url 'auth_reset_jabber_password' %}"> <a href="{% url 'auth_reset_jabber_password' %}">
<button type="button" class="btn btn-primary"><span class="glyphicon glyphicon-refresh"></span></button> <button type="button" class="btn btn-primary"><span
class="glyphicon glyphicon-refresh"></span></button>
</a> </a>
<a href="{% url 'auth_deactivate_jabber' %}"> <a href="{% url 'auth_deactivate_jabber' %}">
<button type="button" class="btn btn-danger"><span class="glyphicon glyphicon-remove"></span></button> <button type="button" class="btn btn-danger"><span
class="glyphicon glyphicon-remove"></span></button>
</a> </a>
{% endifequal %} {% endifequal %}
</td> </td>
@ -66,14 +72,17 @@
<td class="text-center"> <td class="text-center">
{% ifequal authinfo.mumble_username "" %} {% ifequal authinfo.mumble_username "" %}
<a href="{% url 'auth_activate_mumble' %}"> <a href="{% url 'auth_activate_mumble' %}">
<button type="button" class="btn btn-success"><span class="glyphicon glyphicon-ok"></span></button> <button type="button" class="btn btn-success"><span
class="glyphicon glyphicon-ok"></span></button>
</a> </a>
{% else %} {% else %}
<a href="{% url 'auth_reset_mumble_password' %}"> <a href="{% url 'auth_reset_mumble_password' %}">
<button type="button" class="btn btn-primary"><span class="glyphicon glyphicon-refresh"></span></button> <button type="button" class="btn btn-primary"><span
class="glyphicon glyphicon-refresh"></span></button>
</a> </a>
<a href="{% url 'auth_deactivate_mumble' %}"> <a href="{% url 'auth_deactivate_mumble' %}">
<button type="button" class="btn btn-danger"><span class="glyphicon glyphicon-remove"></span></button> <button type="button" class="btn btn-danger"><span
class="glyphicon glyphicon-remove"></span></button>
</a> </a>
{% endifequal %} {% endifequal %}
</td> </td>

View File

@ -8,6 +8,7 @@
{% block content %} {% block content %}
<div class="col-lg-12"> <div class="col-lg-12">
<h1 class="page-header text-center">Change Password</h1> <h1 class="page-header text-center">Change Password</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">

View File

@ -8,6 +8,7 @@
{% block content %} {% block content %}
<div class="col-lg-12"> <div class="col-lg-12">
<h1 class="page-header text-center">Change Password</h1> <h1 class="page-header text-center">Change Password</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">

View File

@ -42,6 +42,7 @@
<form class="form-signin" role="form" action="" method="POST"> <form class="form-signin" role="form" action="" method="POST">
{% csrf_token %} {% csrf_token %}
<h1 class="text-center">{% trans "Password Reset" %}</h1> <h1 class="text-center">{% trans "Password Reset" %}</h1>
<p class="text-center">{% trans "Forgotten your password? Enter your email below." %}</p> <p class="text-center">{% trans "Forgotten your password? Enter your email below." %}</p>
{{ form|bootstrap }} {{ form|bootstrap }}
<div class=""> <div class="">

View File

@ -1,7 +1,7 @@
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.contrib.auth.models import User from django.contrib.auth.models import User
from authentication.managers import AuthServicesInfoManager
from authentication.managers import AuthServicesInfoManager
from services.managers.jabber_manager import JabberManager from services.managers.jabber_manager import JabberManager
from services.managers.forum_manager import ForumManager from services.managers.forum_manager import ForumManager
from services.managers.mumble_manager import MumbleManager from services.managers.mumble_manager import MumbleManager