Ejemplo n.º 1
0
def _page(request, char_id, is_new_char):
    char = get_char_or_raise(request, char_id)

    stats = _get_stats(char)
    stats['distrib'] = char.allow_points_distribution

    lower_soft_caps = {}
    for stat, lis in SOFT_CAPS[char.char_class].iteritems():
        new_list = []
        for entry in lis:
            if entry is not None:
                new_list.append(entry + 1)
            else:
                new_list.append(None)
        lower_soft_caps[stat] = new_list

    return set_response(
        request, 'chardata/chardata.html', {
            'char_id': char_id,
            'is_new_char': json.dumps(is_new_char),
            'stats_json': json.dumps(stats),
            'advanced': True,
            'soft_caps': SOFT_CAPS[char.char_class],
            'lower_soft_caps': lower_soft_caps,
            'theme': get_theme(request)
        }, char)
Ejemplo n.º 2
0
def _solution(request, char_id, is_guest, encoded_char_id=None):
    char = get_object_or_404(Char, pk=char_id)
    
    inclusions = get_all_inclusions_en_names(char)
    exclusions = get_all_exclusions_en_names(char)
    
    solution = get_solution(char)
    solution_result = SolutionResult(solution,
                                     inclusions,
                                     exclusions)
    params = {'char_id': char_id,
              'lock_item': static('chardata/lock-icon.png'),
              'switch_item': static('chardata/1412645636_Left-right.png'),
              'delete_item': static('chardata/delete-icon.png'),
              'add_item': static('chardata/add-icon.png'),
              'ajax_loader': json.dumps(get_ajax_loader_URL(request)),
              'link_external_image': json.dumps(get_external_image_URL(request)),
              'is_guest': is_guest,
              'is_guest_json': json.dumps(is_guest),
              'encoded_char_id': encoded_char_id,
              'link_shared': char.link_shared,
              'owner_alias': get_alias(char.owner),
              'is_dueler': chardata.smart_build.char_has_aspect(char, 'duel')}
              
    if char.link_shared:
        params['initial_link'] = generate_link(char)

    params.update(solution_result.get_params())

    response = set_response(request, 
                            'chardata/solution.html',
                            params, 
                            char)
    return response
Ejemplo n.º 3
0
def _recover_password_page(request, email, from_register):
    non_social_users = _get_non_social_users_for_email(email)

    if not non_social_users:
        raise SuspiciousOperation

    username = non_social_users[0].username
    password = non_social_users[0].password

    link = request.build_absolute_uri(
        reverse('chardata.login_view.recover_password',
                args=(username,
                      _generate_token_for_password_reset(username, password))))
    try:
        send_mail(
            _('Password change requested for The Dofus Fashionista'),
            _('A password reset has been requested for The Dofus Fashionista!\n'
              'Please click the link below to generate a new one for your account.\n'
              '{link}\n\n'
              'If you don\'t want to reset your password, just ignore this email.'
              ).format(link=link), '*****@*****.**', [email])
    except (BadHeaderError, SMTPRecipientsRefused) as e:
        raise e
    return set_response(request, 'chardata/recover_password.html', {
        'request': request,
        'email': email,
        'from_register': from_register
    })
Ejemplo n.º 4
0
def _spells(request, char, is_guest, char_id, encoded_char_id=None):
    char_class = char.char_class
    
    solution = get_solution(char)
    if solution is None:
        return fashion(request, char_id, True)    

    digests = []
    weapons = solution.items['Weapon']
    if len(weapons) > 0:
        weapon = weapons[0]
        if weapon.item_added:
            web_digest = _create_weapon_web_digest(weapon)
            digests.append(web_digest)
    for spell in DAMAGE_SPELLS[char_class] + DAMAGE_SPELLS['default']:
        web_digest = _create_spell_web_digest(spell)
        digests.append(web_digest)
    digests_json = jsonpickle.encode(digests, unpicklable=False)
    stats_json = jsonpickle.encode(solution.get_stats_total(), unpicklable=False)
    return set_response(request, 
                        'chardata/spells.html', 
                        {'request': request,
                         'is_guest': is_guest,
                         'encoded_char_id': encoded_char_id,
                         'user': request.user,
                         'digests_json': digests_json,
                         'char_id': char_id,
                         'char_level': char.level,
                         'char_stats_json': stats_json},
                        char)
Ejemplo n.º 5
0
def exclusions(request, char_id):
    char = get_char_or_raise(request, char_id)
    s = get_structure()
    language = get_supported_language()

    sets_names = s.get_set_names(language)
    sets_names_dicts = {set_name: None for set_name in sets_names}

    all_items = s.get_all_unique_items_ids_with_type()
    all_items_names = s.get_all_unique_items_names_with_ids(language)

    all_names = sets_names_dicts.copy()
    all_names.update(all_items_names)

    complete_sets = s.get_complete_sets_list(language)
    exclusions = get_all_exclusions_with_names(char, language)

    return set_response(
        request, 'chardata/exclusions.html', {
            'char_id': char_id,
            'advanced': True,
            'type_columns': TYPE_COLUMNS,
            'all_items_json': json.dumps(all_items),
            'all_items_names_json': json.dumps(all_names),
            'sets_with_items_json': json.dumps(complete_sets),
            'exclusions': json.dumps(exclusions)
        }, char)
Ejemplo n.º 6
0
def about(request, char_id=0):
    return set_response(
        request, 'chardata/about.html', {
            'request': request,
            'user': request.user,
            'char_id': char_id,
            'site_version': settings.SITE_VERSION
        })
Ejemplo n.º 7
0
def edit_set(request):
    structure = get_structure()

    return set_response(
        request, 'chardata/edit_set.html', {
            'stats_order': json.dumps(structure.get_stats_list_names_sorted()),
            'languages': NON_EN_LANGUAGES
        })
Ejemplo n.º 8
0
def stats(request, char_id):
    char = get_char_or_raise(request, char_id)

    return set_response(
        request, 'chardata/stats.html', {
            'char_id': char_id,
            'advanced': True,
            'default_weights_json': json.dumps(get_stats_weights(char))
        }, char)
Ejemplo n.º 9
0
def choose_compare_sets(request):
    params = {}

    for i in range(4):
        char_id = request.POST.get('char%d' % i, None)
        if char_id:
            params['char%d' % i] = char_id

    return set_response(request, 'chardata/choose_compare_sets.html', params)
Ejemplo n.º 10
0
def options(request, char_id):
    char = get_char_or_raise(request, char_id)

    options = get_options(char)

    return set_response(request, 'chardata/options.html', {
        'advanced': True,
        'options': json.dumps(options),
        'char_id': char_id
    }, char)
Ejemplo n.º 11
0
def _login_page_generic(request, from_confirmation, prefilled_user, char_id,
                        already_confirmed):
    return set_response(
        request, 'chardata/login.html', {
            'request': request,
            'user': request.user,
            'char_id': char_id,
            'from_confirmation': from_confirmation,
            'prefilled_user': prefilled_user,
            'already_confirmed': already_confirmed == 'yes'
        })
Ejemplo n.º 12
0
def edit_item(request, item_id=None):
    structure = get_structure()
    types_list = structure.get_types_list()

    return set_response(
        request, 'chardata/edit_item.html', {
            'types': sorted(types_list),
            'stats_order': json.dumps(structure.get_stats_list_names_sorted()),
            'item_id': json.dumps(item_id),
            'non_en_languages': NON_EN_LANGUAGES,
            'languages': LANGUAGES
        })
Ejemplo n.º 13
0
def compare_sets(request, sets_params):
    char_strs = _process_parameters(sets_params)

    chars = [
        get_char_possibly_encoded_or_raise(request, char_str)
        for char_str in char_strs
    ]
    solutions = {}
    is_guest = {}
    links = {}
    all_chars_are_shared = True
    for char in chars:
        solution = get_solution(char)
        sol_result = SolutionResult(solution)
        solutions[char.pk] = sol_result.get_params()
        is_guest[char.pk] = not char_belongs_to_user(request, char)
        if not char_belongs_to_user(request, char):
            links[char.pk] = generate_link(char)
        else:
            links[char.pk] = request.build_absolute_uri(
                reverse('chardata.solution_view.solution', args=(char.pk, )))
        all_chars_are_shared = all_chars_are_shared and char.link_shared

    char_ids = [char.pk for char in chars]
    if len(char_ids) > 2:
        char_ids_cols = char_ids
    else:
        char_ids_cols = char_ids + ['diff']

    compare_link_shared = None
    if all_chars_are_shared:
        compare_link_shared = _generate_share_compare_link(char_ids)

    get_compare_link_url = reverse(
        'chardata.compare_sets_view.get_sharing_link', args=(sets_params, ))

    params = {
        'chars': chars,
        'char_ids': char_ids,
        'char_ids_cols': char_ids_cols,
        'solutions': solutions,
        'items_sorted': _sort_items(solutions),
        'char_is_guest': is_guest,
        'links': links,
        'compare_link_shared': compare_link_shared,
        'get_compare_link_url': get_compare_link_url
    }

    response = set_response(request, 'chardata/compare_sets.html', params)
    return response
Ejemplo n.º 14
0
def inclusions(request, char_id):
    char = get_char_or_raise(request, char_id)

    structure = get_structure()
    types_list = structure.get_types_list()
    items_by_type = {}
    items_by_type_and_name = {}
    for item_type in types_list:
        items_by_type[item_type] = {}
        items_by_type_and_name[item_type] = {}
    for item_type in items_by_type:
        for item in structure.get_unique_items_by_type_and_level(
                item_type, char.level):
            item_name = structure.get_item_name_in_language(
                item, get_supported_language())
            items_by_type[item_type][item.id] = item_name
            items_by_type_and_name[item_type][item_name] = item.id

    images_urls = {}
    for item_slot in SLOT_NAME_TO_TYPE:
        images_urls[item_slot] = static('chardata/%s.png' %
                                        SLOT_NAME_TO_TYPE[item_slot])

    inclusions = get_inclusions_dict(char)

    for slot in SLOTS:
        inclusions.setdefault(slot, '')

    return set_response(
        request, 'chardata/inclusions.html', {
            'char_id':
            char_id,
            'advanced':
            True,
            'types':
            items_by_type,
            'types_json':
            jsonpickle.encode(items_by_type, unpicklable=False),
            'names_and_types_json':
            jsonpickle.encode(items_by_type_and_name, unpicklable=False),
            'inclusions_json':
            json.dumps(inclusions),
            'images_json':
            json.dumps(images_urls),
            'slot_to_type_json':
            json.dumps(SLOT_NAME_TO_TYPE),
            'ajax_loader':
            json.dumps(get_ajax_loader_URL(request))
        }, char)
Ejemplo n.º 15
0
def min_stats(request, char_id):
    char = get_char_or_raise(request, char_id)

    initial_data = _get_initial_data(char)
    structure = get_structure()

    stats = []
    for stat in structure.get_stats_list():
        stat_to_add = {}
        stat_to_add['key'] = stat.key
        stat_to_add['name'] = _(stat.name)
        stats.append(stat_to_add)

    stats = [
        stat
        for stat in sorted(stats, key=lambda stat: STAT_ORDER[stat['key']])
    ]

    fixed_fields = []
    ap = {}
    ap['key'] = 'ap'
    ap['name'] = _('AP')
    fixed_fields.append(ap)
    mp = {}
    mp['key'] = 'mp'
    mp['name'] = _('MP')
    fixed_fields.append(mp)
    rangestat = {}
    rangestat['key'] = 'range'
    rangestat['name'] = _('Range')
    fixed_fields.append(rangestat)

    adv_min_fields = structure.get_adv_mins()

    return set_response(
        request, 'chardata/min_stats.html', {
            'advanced': True,
            'char_id': char_id,
            'stats_order': json.dumps(stats),
            'stats_fixed': json.dumps(fixed_fields),
            'stats_adv': json.dumps(adv_min_fields),
            'initial_data': json.dumps(initial_data),
            'crit_targets': CRIT_TARGETS,
            'agility_targets': AGI_TARGETS
        }, char)
Ejemplo n.º 16
0
def setup(request, char_id=0):
    too_many_projects_problem = False
    is_new_char = (char_id == 0)
    if is_new_char:
        char = Char()
        char.name = ''
        char.level = 200
        char.char_name = ''
        char.char_class = ''
        char.char_build = ''
    else:
        char = get_char_or_raise(request, char_id)
    if is_anon_cant_create(request) and is_new_char:
        can_create = False
        login_problem = True
    else:
        can_create = True
        login_problem = False
    if (is_new_char and request.user is not None
            and not request.user.is_anonymous() and can_create):
        chars = Char.objects.filter(owner=request.user)
        chars = chars.exclude(deleted=True)
        if len(
                chars
        ) >= MAXIMUM_NUMBER_OF_PROJECTS and request.user.email not in TESTER_USERS:
            can_create = False
            too_many_projects_problem = True

    classes = list(_get_class_to_name().keys())

    return set_response(
        request, 'chardata/projdetails.html', {
            'classes': sorted(classes),
            'class_to_name': _get_class_to_name(),
            'can_create': can_create,
            'login_problem': login_problem,
            'too_many_projects_problem': too_many_projects_problem,
            'state': json.dumps(_get_state_from_char(char)),
            'char_id': char_id,
            'aspect_to_name': _get_json_aspect_to_name(),
            'is_new_char_json': json.dumps(is_new_char),
            'questionmark': json.dumps(get_questionmark_URL(request)),
            'is_new_char': is_new_char
        }, char)
Ejemplo n.º 17
0
def infeasible(request, char_id=0):
    char = get_object_or_404(Char, pk=char_id)
    return set_response(
        request, 'chardata/infeasible.html', {
            'request':
            request,
            'user':
            request.user,
            'char_id':
            char_id,
            'mins_link':
            reverse('chardata.min_stats_view.min_stats', args=(char_id, )),
            'weights_link':
            reverse('chardata.stats_weights_view.stats', args=(char_id, )),
            'lock_link':
            reverse('chardata.inclusions_view.inclusions', args=(char_id, )),
            'exo_link':
            reverse('chardata.options_view.options', args=(char_id, ))
        }, char)
Ejemplo n.º 18
0
def wizard(request, char_id):
    char = get_char_or_raise(request, char_id)

    wizard_data = Data(char)
    constant_data = ConstantData(char)
    wizard_pic = 'chardata/designs/wizard/%s/myWizard%s%d.png' % (
        char.char_class, char.char_class, 1 + (int(char_id) % 6))

    return set_response(
        request, 'chardata/wizard.html', {
            'char_id':
            char_id,
            'wizard_pic':
            wizard_pic,
            'constant_data':
            jsonpickle.encode(constant_data, unpicklable=False),
            'wizard_data':
            jsonpickle.encode(wizard_data, unpicklable=False),
            'triangle_url':
            jsonpickle.encode(get_triangle_URL(request), unpicklable=False)
        }, char)
Ejemplo n.º 19
0
def load_projects_error(request, error):
    chars = []
    if request.user is not None and not request.user.is_anonymous():
        chars = Char.objects.filter(owner=request.user)
        chars = chars.exclude(deleted=True)
    has_projects = False
    if len(chars) > 0:
        has_projects = True
    if request.user.is_anonymous() and 'char_id' in request.session:
        char = get_object_or_404(Char, pk=request.session['char_id'])
        chars.append(char)
        has_projects = True

    return set_response(
        request, 'chardata/load_projects.html', {
            'chars': [WrappedChar(char) for char in chars],
            'char_id': 0,
            'has_projects': has_projects,
            'needle': json.dumps(get_needle_URL(request)),
            'error_msg': error
        })
Ejemplo n.º 20
0
def recover_password(request, username, recover_token):
    users = User.objects.filter(username=username)

    if not users or len(users) != 1:
        raise PermissionDenied

    user = users[0]
    current_password = user.password
    correct_token = _generate_token_for_password_reset(username,
                                                       current_password)
    if correct_token != recover_token:
        raise PermissionDenied

    username = user.username
    new_password = User.objects.make_random_password()
    user.set_password(
        hashlib.sha256('dofusfashionista' + new_password).hexdigest())
    user.save()

    try:
        send_mail(
            _('Password for The Dofus Fashionista has been reset'),
            _('Hello, {username}!\n'
              'The following password has been generated for you:\n\n'
              '{new_password}\n\n'
              'Change it to a new one or just keep this email ;-)').format(
                  username=username, new_password=new_password),
            '*****@*****.**', [user.email])
    except (BadHeaderError, SMTPRecipientsRefused) as e:
        raise e

    return set_response(request, 'chardata/password_was_reset.html', {
        'request': request,
        'username': username,
        'new_password': new_password
    })
Ejemplo n.º 21
0
def nomessage(request):
    return set_response(request, 'chardata/nomessage.html', {})
Ejemplo n.º 22
0
def faq(request, char_id=0):
    return set_response(request, 'chardata/faq.html', {
        'request': request,
        'user': request.user,
        'char_id': char_id
    })
Ejemplo n.º 23
0
def check_your_email(request):
    return set_response(request, 'chardata/check_your_email.html',
                        {'request': request})
Ejemplo n.º 24
0
def contact(request):
    return set_response(request, 'chardata/contacts.html',
                        {'form': ContactForm()})
Ejemplo n.º 25
0
def thankyou(request):
    return set_response(request, 'chardata/thankyou.html', {})
Ejemplo n.º 26
0
def recover_password_email_page(request):
    return set_response(request, 'chardata/pw_recovery_email.html',
                        {'request': request})
Ejemplo n.º 27
0
def error(request, error, error_link, char_id, char):
    return set_response(request, 'chardata/error.html', {
        'char_id': char_id,
        'error': error,
        'error_link': error_link
    }, char)
Ejemplo n.º 28
0
def license_page(request, char_id=0):
    return set_response(request, 'chardata/license.html', {
        'request': request,
        'user': request.user,
        'char_id': char_id
    })
Ejemplo n.º 29
0
def manage_account(request):
    return set_response(request,
                        'chardata/manage_account.html',
                        {'user_social_name': json.dumps(request.user.get_full_name())})
Ejemplo n.º 30
0
def contact(request, char_id=0):
    return set_response(request, 'chardata/contact.html', {
        'request': request,
        'user': request.user,
        'char_id': char_id
    })