def become_customer(): '''Deprecated: customers are registered in admin blueprint''' if not g.user.is_customer(): do_or_abort(actions.users.become_customer, g.user.id) flash(u'Поздравляем, теперь вы рекламодатель!', 'success') else: flash(u'Вы уже являетесь рекламодателем', 'error') return redirect(url_for('.orders'))
def apps_info_actions(id): ap = do_or_abort(a.apps.get_app, id, full=True) page = convert.to_int(request.args.get('page'), 1) count = a.actions.get_actions_count(appId=ap.id) per_page = app.config.get('ADMIN_ACTIONS_PER_PAGE', 20) offset, limit, pages = paginate(page, count, per_page) acts = do_or_abort(a.actions.get_actions, offset=offset, limit=limit, full=True, appId=ap.id) return render_template('admin/apps-info-actions.html', app=ap, actions=acts, pages=pages)
def become_developer(): '''Deprecated: developers register with invites''' if not g.user.is_developer(): do_or_abort(actions.users.become_developer, g.user.id) flash(u'Поздравляем, теперь вы разработчик!', 'success') else: flash(u'Вы уже являетесь разработчиком', 'error') return redirect(url_for('.apps'))
def performers_info_actions(id): performer = do_or_abort(a.performers.get_performer, id, full=True) page = convert.to_int(request.args.get('page'), 1) count = a.actions.get_actions_count(performerId=performer.id) per_page = app.config.get('ADMIN_ACTIONS_PER_PAGE', 20) offset, limit, pages = paginate(page, count, per_page) acts = do_or_abort(a.actions.get_actions, offset=offset, limit=limit, full=True, performerId=performer.id) return render_template('admin/performers-info-actions.html', performer=performer, actions=acts, pages=pages)
def users_info_apps(id): user = do_or_abort(a.users.get_user_by_id, id) if not user.is_developer(): abort(404) page = convert.to_int(request.args.get('page'), 1) count = a.apps.get_apps_count(user_id=user.id) per_page = app.config.get('ADMIN_APPS_PER_PAGE', 20) offset, limit, pages = paginate(page, count, per_page) with_deleted = session.get(SESSION_APPS_SHOW_DELETED, False) aps = do_or_abort(a.apps.get_apps, with_deleted=with_deleted, user_id=user.id, offset=offset, limit=limit, full=True) return render_template('admin/users-info-apps.html', user=user, apps=aps, pages=pages)
def apps_new(): form = forms.AppForm(request.form) if request.method == 'POST' and form.validate(): do_or_abort(actions.apps.add_app, title=form.apptitle.data, user_id=g.user.id, callback=form.appurl.data, url=form.appurl.data, platform=form.appplatform.data) flash(u'Приложение успешно добавлено', 'success') return redirect(url_for('.apps')) return render_template('cabinet/apps-new.html', form=form)
def orders_info_apps(id): order = do_or_abort(a.orders.get_order, id, full=True) aps = do_or_abort(a.apps.get_apps, offset=0, limit=10000, full=True) form = forms.OrderAppsForm(request.form, filter=order.app_filter_type) if request.method == 'POST' and form.validate(): a.orders.update_order(order.id, app_filter_type=form.filter.data, app=[int(x) for x in form.apps.data.split(',')] if form.apps.data else [] ) flash(u'Таргетинг успешно обновлен', 'success') return redirect(url_for('.orders_info_apps', id=order.id)) return render_template('admin/orders-info-apps.html', order=order, apps=aps, form=form)
def users_info_balance(id): user = do_or_abort(a.users.get_user_by_id, id) delete_form = forms.WithdrawalDeleteForm() withdrawals = None if user.is_customer(): account = user.customer_account form = forms.BalanceForm(request.form) if request.method == 'POST' and form.validate(): a.users.increase_customer_balance(user.id, round(form.amount.data, 2)) flash(u'Баланс успешно пополнен', 'success') return redirect(url_for('.users_info_balance', id=user.id)) elif user.is_developer(): account = user.developer_account form = forms.BalanceForm(request.form, amount=account.balance) if request.method == 'POST' and form.validate(): a.users.make_user_withdrawal(user.id, round(form.amount.data, 2)) flash(u'Выплата разработчику успешно создана', 'success') return redirect(url_for('.users_info_balance', id=user.id)) withdrawals = a.users.get_user_withdrawals(user.id) else: flash(u'Пользователь не имеет счета', 'error') return redirect(url_for('.users_info', id=user.id)) page = convert.to_int(request.args.get('page'), 1) count = a.accounts.get_account_transactions_count(account.id) per_page = app.config.get('ADMIN_TRANSACTIONS_PER_PAGE', 20) offset, limit, pages = paginate(page, count, per_page) transactions = a.accounts.get_account_transactions(account_id=account.id, offset=offset, limit=limit) return render_template('admin/users-info-balance.html', transactions=transactions, withdrawals=withdrawals, pages=pages, user=user, form=form, delete_form=delete_form)
def users_info_lists_add(id): user = do_or_abort(a.users.get_user_by_id, id) if mmail.lists_add_user(user, mail_if_failed=False): flash(u'Пользователь добавлен в списки рассылки', 'success') else: flash(u'Ошибка при добавлении пользователя в списки рассылки', 'error') return redirect(url_for('.users_info', id=user.id))
def performers(): page = convert.to_int(request.args.get('page'), 1) count = a.performers.get_performers_count() per_page = app.config.get('ADMIN_PERFORMERS_PER_PAGE', 20) offset, limit, pages = paginate(page, count, per_page) perfs = do_or_abort(a.performers.get_performers, offset=offset, limit=limit, full=True) return render_template('admin/performers.html', performers=perfs, pages=pages)
def actions(): page = convert.to_int(request.args.get('page'), 1) count = a.actions.get_actions_count() per_page = app.config.get('ADMIN_ACTIONS_PER_PAGE', 20) offset, limit, pages = paginate(page, count, per_page) acts = do_or_abort(a.actions.get_actions, offset=offset, limit=limit, full=True) return render_template('admin/actions.html', actions=acts, pages=pages)
def orders_new(): sizes = actions.bannersizes.get_banner_sizes() choices = [(s.id, '{0} x {1}'.format(s.width, s.height)) for s in sizes] cities = [dict(id=city.id, name=city.name) for city in actions.cities.get_cities()] settings = actions.settings.get_settings() form = forms.BannerOrderForm(request.form, c_min=settings.c_min_safe(), c_rec=settings.c_rec()) form.orderbannersize.choices = choices if request.method == 'POST' and form.validate(): id = do_or_abort(actions.orders.add_banner_order, user_id=g.user.id, title=form.ordername.data, url=form.orderurl.data, balance=round(form.orderbalance.data, 2), cpa=round(form.ordercpa.data, 2), allow_negative_balance=False, auto_approve=True, reentrant=True, male=form.ordermale.data, min_age=form.orderminage.data, max_age=form.ordermaxage.data, min_hour=form.orderminhour.data, max_hour=form.ordermaxhour.data, city_filter_type=form.ordercitiesfilter.data if form.ordercities.data else u'', city=[int(x) for x in form.ordercities.data.split(',')] if form.ordercities.data else [], banner_size=form.orderbannersize.data, banner_mime_type=form.orderimage.mime_type, image=base64.encodestring(request.files['orderimage'].stream.read())) order = actions.orders.get_order(id) mail.admin_order_created(g.user, order) flash(u'Заказ успешно создан. Он станет активным после проверки администрацией.', 'success') return redirect(url_for('.orders_info', id=id)) return render_template('cabinet/orders-new.html', form=form, cities=cities)
def orders_info(id): order = do_or_abort(a.orders.get_order, id, full=True) form = forms.OrderBlockForm(request.form) if request.method == 'POST' and form.validate(): if not order.disabled: a.orders.disable_order(order.id) order_info = OrderInfo.query.get_or_create(order_id=order.id) order_info.block_reason = form.reason.data order_info.block_date = datetime.now() order_info.save() if form.mail.data: tmail.user_order_blocked(order, form.reason.data) tmail.admin_order_blocked(order, g.user, form.reason.data) flash(u'Заказ заблокиорван', 'success') return redirect(url_for('.orders_info', id=order.id)) else: actn = request.form.get('action', 'unblock') if actn == 'unblock': a.orders.enable_order(order.id) if form.mail.data: tmail.user_order_unblocked(order) tmail.admin_order_unblocked(order, g.user) flash(u'Заказ разблокиорван', 'success') elif actn == 'notify': order_info = OrderInfo.query.get_or_create(order_id=order.id) order_info.block_reason = form.reason.data order_info.block_date = datetime.now() order_info.save() if form.mail.data: tmail.user_order_moderation_failed(order, form.reason.data) tmail.admin_order_moderation_failed(order, g.user, form.reason.data) flash(u'Пользователь уведомлен', 'success') return redirect(url_for('.orders_info', id=order.id)) return render_template('admin/orders-info.html', order=order, form=form)
def users_info_password_change(id): user = do_or_abort(a.users.get_user_by_id, id) form = forms.AdminPasswordChangeForm(request.form) if request.method == 'POST' and form.validate(): a.users.update_user(user.id, password_hash=gen.generate_password_hash(form.password.data)) flash(u'Пароль пользователя успешно изменен', 'success') return redirect(url_for('.users_info', id=user.id)) return render_template('admin/users-info-password-change.html', user=user, form=form)
def users_developers(): role = 'DEVELOPER' page = convert.to_int(request.args.get('page'), 1) count = a.users.get_users_count(role=role) per_page = app.config.get('ADMIN_USERS_PER_PAGE', 20) offset, limit, pages = paginate(page, count, per_page) usrs = do_or_abort(a.users.get_users, role=role, offset=offset, limit=limit, full=True) return render_template('admin/users-developers.html', developers=usrs, pages=pages)
def confirm(id, code): user = do_or_abort(users.get_user_by_id, id) success = False if user.check_confirm_code(code): users.confirm_user(user.id) mmail.lists_add_user(user) success = True return render_template('site/confirm.html', success=success)
def apps(): page = convert.to_int(request.args.get('page'), 1) count = actions.apps.get_apps_count(user_id=g.user.id) per_page = app.config.get('ADMIN_APPS_PER_PAGE', 20) offset, limit, pages = paginate(page, count, per_page) aps = do_or_abort(actions.apps.get_apps, user_id=g.user.id, offset=offset, limit=limit, full=True) return render_template('cabinet/apps.html', apps=aps, pages=pages)
def orders_info_banners_delete(id, bid): order = do_or_abort(actions.orders.get_order, id, full=True) if order.user.id != g.user.id or not order.is_banner(): abort(404) if bid not in [banner.id for banner in order.banners]: abort(404) if len(order.banners) <= 1: abort(403) actions.orders.delete_order_banner(id, bid) flash(u'Баннер удален', 'success') return redirect(url_for('.orders_info_banners', id=order.id))
def users_info_delete_withdrawal(id, wid): user = do_or_abort(a.users.get_user_by_id, id) form = forms.WithdrawalDeleteForm(request.form) if form.validate(): a.users.delete_user_withdrawal(user.id, wid, form.reason.data) flash(u'Выплата разработчику отменена', 'success') else: flash(u'При выплате разработчику произошла ошибка', 'error') return redirect(url_for('.users_info_balance', id=user.id))
def users_info_orders(id): user = do_or_abort(a.users.get_user_by_id, id) if not user.is_customer(): abort(404) page = convert.to_int(request.args.get('page'), 1) count = a.orders.get_orders_count(user_id=user.id) per_page = app.config.get('ADMIN_ORDERS_PER_PAGE', 20) offset, limit, pages = paginate(page, count, per_page) ods = a.orders.get_orders(user_id=user.id, offset=offset, limit=limit, full=True) return render_template('admin/users-info-orders.html', user=user, orders=ods, pages=pages)
def apps(): page = convert.to_int(request.args.get('page'), 1) form = forms.AppsShowDeletedForm(request.form, show=session.get(SESSION_APPS_SHOW_DELETED, False)) if request.method == 'POST' and form.validate(): session[SESSION_APPS_SHOW_DELETED] = form.show.data page = 1 count = a.apps.get_apps_count(form.show.data) per_page = app.config.get('ADMIN_APPS_PER_PAGE', 20) offset, limit, pages = paginate(page, count, per_page) aps = do_or_abort(a.apps.get_apps, with_deleted=form.show.data, offset=offset, limit=limit, full=True) return render_template('admin/apps.html', apps=aps, pages=pages, form=form)
def users_register_customer(): form = forms.CustomerRegisterForm(request.form) if request.method == 'POST' and form.validate(): do_or_abort(a.users.add_user, email=form.email.data, password_hash=gen.generate_password_hash(form.password.data), first_name=form.first_name.data, last_name=form.last_name.data, organization=form.organization.data, phone=form.phone.data, messenger_type=form.messenger_type.data, messenger_uid=form.messenger_uid.data) user = do_or_abort(a.users.get_user_by_email, form.email.data, full=True) if user: a.users.confirm_user(user.id) a.users.add_user_role(user.id, roles.CUSTOMER) user.roles.append(roles.CUSTOMER) flash(u'Рекламодатель успешно зарегистрирован', 'success') mmail.lists_add_user(user) return redirect(url_for('.users_info', id=user.id)) flash(u'Произошла ошибка при регистрации. Обратитесь к администрации.', 'error') return render_template('admin/users-register-customer.html', form=form)
def orders_info_banners(id): order = do_or_abort(actions.orders.get_order, id, full=True) if order.user.id != g.user.id or not order.is_banner(): abort(404) order_sizes = [banner.size.id for banner in order.banners] all_sizes = actions.bannersizes.get_banner_sizes() size_choices = [(s.id, '{0} x {1}'.format(s.width, s.height)) for s in all_sizes if s.id not in order_sizes] if size_choices: form = forms.BannerForm(request.form) form.size.choices = size_choices if request.method == 'POST' and form.validate(): actions.orders.add_order_banner(order.id, form.size.data, form.image.mime_type, base64.encodestring(request.files['image'].stream.read())) flash(u'Баннер успешно загружен', 'success') return redirect(url_for('.orders_info_banners', id=order.id)) else: form = None return render_template('cabinet/orders-info-banners.html', order=order, form=form)
def apps_info_edit(id): app = do_or_abort(a.apps.get_app, id, full=True) form = forms.AdminAppEditForm(request.form, apptitle=app.title, appurl=app.url, appplatform=app.platform, appdeleted=app.deleted, appd=app.d, appt=app.t) if request.method == 'POST' and form.validate(): kwargs = dict() if form.apptitle.data != app.title: kwargs.update(title=form.apptitle.data) if form.appurl.data != app.url: kwargs.update(url=form.appurl.data, callback=form.appurl.data) if form.appplatform.data != app.platform: kwargs.update(platform=form.appplatform.data) if float(form.appd.data) != app.d: kwargs.update(d=form.appd.data) if float(form.appt.data) != app.t: kwargs.update(t=form.appt.data) if form.appdeleted.data != app.deleted: kwargs.update(deleted=form.appdeleted.data) if kwargs.keys(): a.apps.update_app(app.id, **kwargs) flash(u'Приложение успешно обновлено', u'success') else: flash(u'Вы не изменили ни одного поля', u'warning') return redirect(url_for('.apps_info', id=app.id)) return render_template('admin/apps-info-edit.html', app=app, form=form)
def users_info(id): user = do_or_abort(a.users.get_user_by_id, id) form = forms.UserBlockForm(request.form) if request.method == 'POST': if not user.blocked and form.validate(): a.users.block_user(user.id) user_info = UserInfo.query.get_or_create(user_id=user.id) user_info.block_reason = form.reason.data user_info.block_date = datetime.now() user_info.save() if form.mail.data: tmail.user_blocked(user, form.reason.data) tmail.admin_user_blocked(user, g.user, form.reason.data) flash(u'Учетная запись заблокирована', 'success') return redirect(url_for('.users_info', id=user.id)) elif user.blocked: a.users.unblock_user(user.id) flash(u'Учетная запись разблокирована', 'success') return redirect(url_for('.users_info', id=user.id)) return render_template('admin/users-info.html', user=user, form=form)
def orders_info_balance(id): order = do_or_abort(actions.orders.get_order, id, full=True) if order.user.id != g.user.id: abort(404) other_orders = [ord for ord in actions.orders.get_orders(user_id=g.user.id) if ord.id != order.id] order_choices = [(ord.account.id, ord.title) for ord in other_orders] form_in = forms.BalanceForm() form_out = forms.BalanceForm() form_transfer = forms.OrderBalanceTransferForm() form_transfer.order.choices = order_choices if request.method == 'POST': type = request.form.get('type', 'in') if type == 'in': form_in = forms.BalanceForm(request.form) if form_in.validate(): actions.accounts.transfer(g.user.customer_account.id, order.account.id, form_in.amount.data) flash(u'Счет заказа успешно пополнен', 'success') return redirect(url_for('.orders_info', id=order.id)) elif type == 'out': form_out = forms.BalanceForm(request.form) if form_out.validate(): actions.accounts.transfer(order.account.id, g.user.customer_account.id, form_out.amount.data) flash(u'Средства успешно выведены со счета заказа', 'success') return redirect(url_for('.orders_info', id=order.id)) elif type == 'transfer': form_transfer = forms.OrderBalanceTransferForm(request.form) form_transfer.order.choices = order_choices if form_transfer.validate(): actions.accounts.transfer(order.account.id, form_transfer.order.data, form_transfer.amount.data) flash(u'Средства успешно переведены', 'success') return redirect(url_for('.orders_info', id=order.id)) else: flash(u'Ошибка операции со счетом', 'error') return redirect(url_for('.orders_info', id=order.id)) return render_template('cabinet/orders-info-balance.html', order=order, form_in=form_in, form_out=form_out, form_transfer=form_transfer)
def users_info_edit(id): user = do_or_abort(a.users.get_user_by_id, id) form_args = dict( first_name = user.first_name, last_name = user.last_name, phone = user.phone, organization = user.organization, messenger_type = user.messenger_type, messenger_uid = user.messenger_uid, email = user.email, confirmed = user.confirmed ) if user.is_customer(): form = forms.AdminCustomerEditForm(request.form, **form_args) else: form = forms.AdminDeveloperEditForm(request.form, **form_args) form.user = user if request.method == 'POST' and form.validate(): upd_args = dict() if form.first_name.data != user.first_name: upd_args.update(first_name=form.first_name.data) if form.last_name.data != user.last_name: upd_args.update(last_name=form.last_name.data) if form.organization.data != user.organization: upd_args.update(organization=form.organization.data) if form.phone.data != user.phone: upd_args.update(phone=form.phone.data) if form.messenger_type.data != user.messenger_type or form.messenger_uid.data != user.messenger_uid: upd_args.update(messenger_type=form.messenger_type.data, messenger_uid=form.messenger_uid.data) if form.email.data != user.email: upd_args.update(email=form.email.data) if form.confirmed.data != user.confirmed: upd_args.update(confirmed=form.confirmed.data) if upd_args.keys(): a.users.update_user(user.id, **upd_args) flash(u'Профиль успешно изменен', 'success') else: flash(u'Вы не изменили ни одного поля', 'warning') return redirect(url_for('.users_info', id=user.id)) return render_template('admin/users-info-edit.html', user=user, form=form)
def orders_info(id): order = do_or_abort(actions.orders.get_order, id, full=True) if order.user.id != g.user.id: abort(404) return render_template('cabinet/orders-info.html', order=order)
def ajax_orders_info_pause(id): order = do_or_abort(actions.orders.get_order, id, full=True) if order.user.id != g.user.id: abort(404) do_or_abort(actions.orders.pause_order, order.id) return 'OK'
def ajax_apps_info_stats_ctr(id): app = do_or_abort(actions.apps.get_app, id, full=True) if app.user.id != g.user.id: abort(404) return json_get_ctr(app_id=app.id)