rebrending
This commit is contained in:
parent
a16c55a609
commit
ddde3b08a7
67 changed files with 1144 additions and 1108 deletions
|
@ -3,6 +3,7 @@
|
||||||
# import ConfigParser
|
# import ConfigParser
|
||||||
from flask import g
|
from flask import g
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
|
from flask import session
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask import render_template
|
from flask import render_template
|
||||||
from flask_babel import Babel
|
from flask_babel import Babel
|
||||||
|
@ -10,6 +11,7 @@ from flaskext.markdown import Markdown
|
||||||
|
|
||||||
from app.cloud.views import viewHomepage
|
from app.cloud.views import viewHomepage
|
||||||
from app.cloud.views.documents import viewDocuments
|
from app.cloud.views.documents import viewDocuments
|
||||||
|
from app.cloud.views.settings import viewSettings
|
||||||
from app.cloud.views.kb import viewKB
|
from app.cloud.views.kb import viewKB
|
||||||
from app.cloud.views.support import viewSupport
|
from app.cloud.views.support import viewSupport
|
||||||
from app.cloud.views.account import viewAccount
|
from app.cloud.views.account import viewAccount
|
||||||
|
@ -47,29 +49,30 @@ app.register_blueprint(viewAccount)
|
||||||
app.register_blueprint(viewPayments)
|
app.register_blueprint(viewPayments)
|
||||||
# /api
|
# /api
|
||||||
app.register_blueprint(viewServerAPI)
|
app.register_blueprint(viewServerAPI)
|
||||||
|
app.register_blueprint(viewSettings)
|
||||||
# /administrator
|
# /administrator
|
||||||
app.register_blueprint(viewAdministrator)
|
app.register_blueprint(viewAdministrator)
|
||||||
|
|
||||||
|
|
||||||
@app.errorhandler(404)
|
@app.errorhandler(404)
|
||||||
def page_not_found(e):
|
def page_not_found(e):
|
||||||
return render_template('errors/404.html'), 404
|
return render_template('default/errors/404.html'), 404
|
||||||
|
|
||||||
|
|
||||||
@app.errorhandler(403)
|
@app.errorhandler(403)
|
||||||
def page_not_found(e):
|
def page_not_found(e):
|
||||||
return render_template('errors/403.html'), 403
|
return render_template('default/errors/403.html'), 403
|
||||||
|
|
||||||
|
|
||||||
@app.errorhandler(410)
|
@app.errorhandler(410)
|
||||||
def page_not_found(e):
|
def page_not_found(e):
|
||||||
return render_template('errors/410.html'), 410
|
return render_template('default/errors/410.html'), 410
|
||||||
|
|
||||||
|
|
||||||
@app.errorhandler(500)
|
@app.errorhandler(500)
|
||||||
def page_not_found(e):
|
def page_not_found(e):
|
||||||
print e
|
print e
|
||||||
return render_template('errors/500.html'), 500
|
return render_template('default/errors/500.en.html'), 500
|
||||||
|
|
||||||
|
|
||||||
@app.before_request
|
@app.before_request
|
||||||
|
@ -85,7 +88,7 @@ def before_request():
|
||||||
print e
|
print e
|
||||||
print request.path
|
print request.path
|
||||||
# g.endpoint = request.endpoint.replace('.', '/')
|
# g.endpoint = request.endpoint.replace('.', '/')
|
||||||
return render_template('errors/500.html'), 500
|
return render_template('default/errors/500.en.html'), 500
|
||||||
|
|
||||||
# извлекаем настройки и определяем их в глобальную переменную
|
# извлекаем настройки и определяем их в глобальную переменную
|
||||||
for setting in models.Settings.select(models.Settings.key, models.Settings.val).execute():
|
for setting in models.Settings.select(models.Settings.key, models.Settings.val).execute():
|
||||||
|
|
1
app/cdn/__init__.py
Normal file
1
app/cdn/__init__.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
__author__ = 'vanzhiganov'
|
|
@ -4,6 +4,7 @@ from sshpubkeys import SSHKey
|
||||||
from flask import render_template, session, redirect, url_for, request
|
from flask import render_template, session, redirect, url_for, request
|
||||||
from flask import g
|
from flask import g
|
||||||
from flask import Blueprint
|
from flask import Blueprint
|
||||||
|
# from flask.ext.babel import gettext
|
||||||
from app import models
|
from app import models
|
||||||
from app.cloud.controllers.common import special_match
|
from app.cloud.controllers.common import special_match
|
||||||
from app.cloud.controllers.common import ControllerMessagesEmail
|
from app.cloud.controllers.common import ControllerMessagesEmail
|
||||||
|
@ -17,116 +18,6 @@ from app.cloud.controllers.billing import ControllerBilling
|
||||||
viewAccount = Blueprint('account', __name__, url_prefix='/account')
|
viewAccount = Blueprint('account', __name__, url_prefix='/account')
|
||||||
|
|
||||||
|
|
||||||
@viewAccount.route('/', methods=['GET', 'POST'])
|
|
||||||
def index():
|
|
||||||
# check session
|
|
||||||
if not ControllerUsers().check_session():
|
|
||||||
return redirect(url_for("account.logout"))
|
|
||||||
# auth user
|
|
||||||
if not ControllerUsers().auth(session['email'], session['password']):
|
|
||||||
return redirect(url_for("account.logout"))
|
|
||||||
|
|
||||||
cud = ControllerUsersDetails(session['user_id'])
|
|
||||||
user = cud.details_get()
|
|
||||||
|
|
||||||
# проверяем, есть ли запись в таблице usersdetails, чтобы небыло ошибок
|
|
||||||
if not cud.details_exists():
|
|
||||||
# если нет, то делаем запись в таблицу, чтобы небыло ошибок
|
|
||||||
cud.details_create()
|
|
||||||
|
|
||||||
# извлекаем из базы детали пользователя
|
|
||||||
user_details = cud.details_get()
|
|
||||||
|
|
||||||
return render_template(
|
|
||||||
'default/id/index.html',
|
|
||||||
user=user,
|
|
||||||
user_details=user_details
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@viewAccount.route('/edit', methods=['GET', 'POST'])
|
|
||||||
def edit():
|
|
||||||
# check session
|
|
||||||
if not ControllerUsers().check_session():
|
|
||||||
return redirect(url_for("account.logout"))
|
|
||||||
# auth user
|
|
||||||
if not ControllerUsers().auth(session['email'], session['password']):
|
|
||||||
return redirect(url_for("account.logout"))
|
|
||||||
|
|
||||||
cud = ControllerUsersDetails(session['user_id'])
|
|
||||||
user = cud.details_get()
|
|
||||||
|
|
||||||
if not cud.details_exists():
|
|
||||||
cud.details_create()
|
|
||||||
|
|
||||||
if request.method == "POST":
|
|
||||||
if not request.form['zipcode'].isdigit():
|
|
||||||
g.errors['items'].append(u'Индекс должен содержать только цифры')
|
|
||||||
g.errors['total'] += 1
|
|
||||||
|
|
||||||
if g.errors['total'] == 0:
|
|
||||||
cud.details_update(
|
|
||||||
fname=request.form['fname'],
|
|
||||||
lname=request.form['lname'],
|
|
||||||
address=request.form['address'],
|
|
||||||
city=request.form['city'],
|
|
||||||
country=request.form['country'],
|
|
||||||
state=request.form['state'],
|
|
||||||
zipcode=request.form['zipcode']
|
|
||||||
)
|
|
||||||
return redirect(url_for('account.edit'))
|
|
||||||
# get user details
|
|
||||||
user_details = cud.details_get()
|
|
||||||
|
|
||||||
return render_template('default/id/edit.html', user=user, user_details=user_details)
|
|
||||||
|
|
||||||
|
|
||||||
@viewAccount.route('/settings', methods=['GET', 'POST'])
|
|
||||||
def settings():
|
|
||||||
# check session
|
|
||||||
if not ControllerUsers().check_session():
|
|
||||||
return redirect(url_for("account.logout"))
|
|
||||||
# auth user
|
|
||||||
if not ControllerUsers().auth(session['email'], session['password']):
|
|
||||||
return redirect(url_for("account.logout"))
|
|
||||||
# get user data
|
|
||||||
user = ControllerUsers(session['user_id']).get()
|
|
||||||
|
|
||||||
return render_template('default/id/index.html', user_details=user)
|
|
||||||
|
|
||||||
|
|
||||||
@viewAccount.route('/billing', methods=['GET', 'POST'])
|
|
||||||
def billing():
|
|
||||||
# check session
|
|
||||||
if not ControllerUsers().check_session():
|
|
||||||
return redirect(url_for("account.logout"))
|
|
||||||
# auth user
|
|
||||||
if not ControllerUsers().auth(session['email'], session['password']):
|
|
||||||
return redirect(url_for("account.logout"))
|
|
||||||
|
|
||||||
user_id = session['user_id']
|
|
||||||
|
|
||||||
if models.UsersBalance.select().where(models.UsersBalance.user == user_id).count() == 0:
|
|
||||||
models.UsersBalance.create(user=user_id, balance=10)
|
|
||||||
user_balance = models.UsersBalance.select().where(models.UsersBalance.user == user_id).limit(1)[0].balance
|
|
||||||
|
|
||||||
user_details = models.Users.select().where(models.Users.id == session['user_id']).limit(1)[0]
|
|
||||||
|
|
||||||
# выгрузка истории платежей
|
|
||||||
history = dict()
|
|
||||||
history['total'] = models.UsersBalanceTransactions.select().\
|
|
||||||
where(models.UsersBalanceTransactions.user == user_id).count()
|
|
||||||
history['items'] = models.UsersBalanceTransactions.select().\
|
|
||||||
where(models.UsersBalanceTransactions.user == user_id)
|
|
||||||
|
|
||||||
return render_template(
|
|
||||||
'default/id/balance.html',
|
|
||||||
user_details=user_details,
|
|
||||||
user_balance=user_balance,
|
|
||||||
history=history
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@viewAccount.route('/registration', methods=['GET', 'POST'])
|
@viewAccount.route('/registration', methods=['GET', 'POST'])
|
||||||
def registration():
|
def registration():
|
||||||
# check session
|
# check session
|
||||||
|
@ -158,21 +49,15 @@ def registration():
|
||||||
# ControllerU
|
# ControllerU
|
||||||
# send mail message with recovery code
|
# send mail message with recovery code
|
||||||
message = u"""
|
message = u"""
|
||||||
Е-почта: %s
|
Email: %s
|
||||||
Пароль: %s
|
Password: %s
|
||||||
""" % (request.form['email'], request.form['password'])
|
""" % (request.form['email'], request.form['password'])
|
||||||
subject = u'GoCloud.ru: Успешная регистрация'
|
subject = u'Puluttar.ru: Successful registration'
|
||||||
lead = u"""
|
lead = u'Congratulations upon successful registration.'
|
||||||
Поздравляем с успешной зарегистрацией.
|
callout = u'Use the <a href="http://puluttar.com/account/login">login page</a> to enter your account.'
|
||||||
"""
|
|
||||||
callout = u"""
|
|
||||||
Для входа в личный кабинет воспользуйтесь
|
|
||||||
<a href="https://gocloud.ru/account/login">страницей авторизации</a>.
|
|
||||||
"""
|
|
||||||
|
|
||||||
email = ControllerMessagesEmail()
|
email = ControllerMessagesEmail()
|
||||||
email.send(title=subject, to=request.form['email'], lead=lead, message=message, callout=callout)
|
email.send(title=subject, to=request.form['email'], lead=lead, message=message, callout=callout)
|
||||||
|
|
||||||
# redirect to login page
|
# redirect to login page
|
||||||
return redirect(url_for('account.login'))
|
return redirect(url_for('account.login'))
|
||||||
else:
|
else:
|
||||||
|
@ -232,13 +117,13 @@ def password_reset():
|
||||||
ControllerUsersRecoveryCodes().create(user_id, recovery_code)
|
ControllerUsersRecoveryCodes().create(user_id, recovery_code)
|
||||||
|
|
||||||
# send mail message with recovery code
|
# send mail message with recovery code
|
||||||
subject = u'GoCloud.ru: Код восстановления доступа'
|
subject = u'Puluttar.com: Access recovery code'
|
||||||
message = u'Код восстановления: %s' % recovery_code
|
message = u'Recovery code: %s' % recovery_code
|
||||||
lead = u"""
|
lead = u"""
|
||||||
Данный код необходимо ввести на странице подтверждения
|
This verification code is required to confirm the
|
||||||
<a href="https://gocloud.ru/account/password_reset_step2">сброса пароля</a>.
|
<a href="http://puluttar.com/account/password_reset_step2">password reset</a>.
|
||||||
"""
|
"""
|
||||||
callout = u'Если вы не хотите сбрасывать пароль, то просто проигнорируйте (или удалите) данное письмо.'
|
callout = u'If you do not want to reset your password, just ignore (or remove) the letter.'
|
||||||
# controllers.Mail().send(request.form['email'], subject, message)
|
# controllers.Mail().send(request.form['email'], subject, message)
|
||||||
|
|
||||||
email = ControllerMessagesEmail()
|
email = ControllerMessagesEmail()
|
||||||
|
@ -247,7 +132,7 @@ def password_reset():
|
||||||
# redirect to step 2
|
# redirect to step 2
|
||||||
return redirect(url_for('account.password_reset_step2'))
|
return redirect(url_for('account.password_reset_step2'))
|
||||||
else:
|
else:
|
||||||
g.errors['items'].append(u'Произошла ошибка. Введите корректный адрес е.почты.')
|
g.errors['items'].append(u'An error has occurred. Please enter a valid email address.')
|
||||||
g.errors['total'] += 1
|
g.errors['total'] += 1
|
||||||
return render_template('default/id/password_reset_step1.html')
|
return render_template('default/id/password_reset_step1.html')
|
||||||
|
|
||||||
|
@ -273,25 +158,25 @@ def password_reset_step2():
|
||||||
ControllerUsers().update(user_id, password=new_password)
|
ControllerUsers().update(user_id, password=new_password)
|
||||||
|
|
||||||
# send mail message with new password
|
# send mail message with new password
|
||||||
message = u"""Новый пароль: %s""" % new_password
|
message = u"""New password: %s""" % new_password
|
||||||
subject = u"""GoCloud.ru: Новый пароль"""
|
subject = u"""Puluttar.com: New password"""
|
||||||
lead = u"""
|
lead = u"""
|
||||||
Пароль для доступа в a< href="https://gocloud.ru/account/login">личный кабинет</a> был сброшен.
|
Old password for your < href="http://puluttar.com/account/login">account</a> was reset.
|
||||||
"""
|
"""
|
||||||
callout = u"""Запомните новый пароль и удалите данное сообщение."""
|
callout = u"""Remember the new password and delete this message."""
|
||||||
# controllers.Mail().send(request.form['email'], subject, message)
|
# controllers.Mail().send(request.form['email'], subject, message)
|
||||||
|
|
||||||
email = ControllerMessagesEmail()
|
email = ControllerMessagesEmail()
|
||||||
email.send(title=subject, to=session['email'], lead=lead, message=message, callout=callout)
|
email.send(title=subject, to=request.form['email'], lead=lead, message=message, callout=callout)
|
||||||
|
|
||||||
# redirect to login page
|
# redirect to login page
|
||||||
return redirect(url_for('account.login'))
|
return redirect(url_for('account.login'))
|
||||||
# redirect to step 2
|
# redirect to step 2
|
||||||
g.errors['items'].append(u'Ошибочный код')
|
g.errors['items'].append(u'Wrong recovery code.')
|
||||||
g.errors['total'] += 1
|
g.errors['total'] += 1
|
||||||
return redirect(url_for('account.password_reset_step2'))
|
return redirect(url_for('account.password_reset_step2'))
|
||||||
else:
|
else:
|
||||||
g.errors['items'].append(u'Произошла ошибка. Введите корректный адрес е.почты.')
|
g.errors['items'].append(u'An error has occurred. Please enter a valid email address.')
|
||||||
g.errors['total'] += 1
|
g.errors['total'] += 1
|
||||||
return render_template('default/id/password_reset_step2.html')
|
return render_template('default/id/password_reset_step2.html')
|
||||||
|
|
||||||
|
@ -319,12 +204,11 @@ def password_update():
|
||||||
|
|
||||||
# send mail message with recovery code
|
# send mail message with recovery code
|
||||||
lead = u"""
|
lead = u"""
|
||||||
Пароль для достуна в личный кабинет был успешно изменён.
|
Password to access your account has been successfully changed.
|
||||||
"""
|
"""
|
||||||
message = u"""Пароль: %s""" % request.form['new_password']
|
message = u"""Пароль: %s""" % request.form['new_password']
|
||||||
callout = u"""
|
callout = u''
|
||||||
"""
|
subject = u'Puluttar.com: Change Password'
|
||||||
subject = u'GoCloud.ru: Смена пароля'
|
|
||||||
|
|
||||||
email = ControllerMessagesEmail()
|
email = ControllerMessagesEmail()
|
||||||
email.send(
|
email.send(
|
||||||
|
@ -354,7 +238,7 @@ def sshkey():
|
||||||
try:
|
try:
|
||||||
ssh = SSHKey(request.form['sshkey'])
|
ssh = SSHKey(request.form['sshkey'])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
g.errors['items'].append(u"Не корректный ssh-ключ.")
|
g.errors['items'].append(u"Incorrect ssh-key.")
|
||||||
g.errors['total'] += 1
|
g.errors['total'] += 1
|
||||||
else:
|
else:
|
||||||
print(ssh.bits)
|
print(ssh.bits)
|
||||||
|
|
|
@ -15,10 +15,11 @@ from flask import Blueprint
|
||||||
from app import models
|
from app import models
|
||||||
from app.settings import settings
|
from app.settings import settings
|
||||||
from app.cloud.controllers.users import ControllerUsers
|
from app.cloud.controllers.users import ControllerUsers
|
||||||
|
from app.cloud.controllers.users import ControllerSSHKey
|
||||||
|
from app.cloud.controllers.billing import ControllerBilling
|
||||||
from app.cloud.controllers.users import ControllerAPI
|
from app.cloud.controllers.users import ControllerAPI
|
||||||
from app.cloud.controllers.datacenters import ControllerDataCenters
|
from app.cloud.controllers.datacenters import ControllerDataCenters
|
||||||
from app.cloud.controllers.containers import ControllerContainers
|
from app.cloud.controllers.containers import ControllerContainers
|
||||||
from cloudnsru import CloudnsClient
|
|
||||||
|
|
||||||
viewAPI = Blueprint('api', __name__, url_prefix='/api')
|
viewAPI = Blueprint('api', __name__, url_prefix='/api')
|
||||||
|
|
||||||
|
|
|
@ -61,14 +61,11 @@ def create():
|
||||||
|
|
||||||
if g.errors['total'] == 0:
|
if g.errors['total'] == 0:
|
||||||
# select server from selected region with available ip-addresses
|
# select server from selected region with available ip-addresses
|
||||||
|
# TODO: make function... this part use in API method
|
||||||
# select IP
|
# select IP
|
||||||
select_ip = models.Ips.select().where(
|
select_ip = models.Ips.select().where(
|
||||||
models.Ips.datacenter == request.form['datacenter'] and models.Ips.status == 0
|
models.Ips.datacenter == request.form['datacenter'] and models.Ips.status == 0
|
||||||
)[0]
|
)[0]
|
||||||
|
|
||||||
print 'select ip: %s' % select_ip.id
|
|
||||||
|
|
||||||
# mark ip as busy (taken)
|
# mark ip as busy (taken)
|
||||||
up = models.Ips.update(status=1).where(models.Ips.id == select_ip.id)
|
up = models.Ips.update(status=1).where(models.Ips.id == select_ip.id)
|
||||||
up.execute()
|
up.execute()
|
||||||
|
@ -139,12 +136,9 @@ def create():
|
||||||
message_parts.append(u"SSH ключ: добавлен")
|
message_parts.append(u"SSH ключ: добавлен")
|
||||||
|
|
||||||
message = '<br/>\n'.join(message_parts)
|
message = '<br/>\n'.join(message_parts)
|
||||||
subject = u'GoCloud.ru: Новый контейнер'
|
subject = u'Puluttar.com: New continer'
|
||||||
lead = u"""Поздравляем с новым контейнером."""
|
lead = u"""Congratulations on the new container."""
|
||||||
callout = u"""
|
callout = u"""<a href="http://puluttar.com/account/login">Account</a>."""
|
||||||
Для входа в личный кабинет воспользуйтесь
|
|
||||||
<a href="https://gocloud.ru/account/login">страницей авторизации</a>.
|
|
||||||
"""
|
|
||||||
|
|
||||||
user_data = ControllerUsers(session['user_id']).get()
|
user_data = ControllerUsers(session['user_id']).get()
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ from flask import Blueprint
|
||||||
from app import models
|
from app import models
|
||||||
from app.cloud.controllers.users import ControllerUsers
|
from app.cloud.controllers.users import ControllerUsers
|
||||||
from app.cloud.controllers.payments import ControllerPaymentsRobokassa
|
from app.cloud.controllers.payments import ControllerPaymentsRobokassa
|
||||||
|
from app.cloud.controllers.payments import twocheckout
|
||||||
|
|
||||||
viewPayments = Blueprint('payments', __name__, url_prefix='/payments')
|
viewPayments = Blueprint('payments', __name__, url_prefix='/payments')
|
||||||
|
|
||||||
|
@ -113,3 +114,38 @@ def robokassa(action):
|
||||||
|
|
||||||
return redirect(url_for('payments.robokassa', action='fail'))
|
return redirect(url_for('payments.robokassa', action='fail'))
|
||||||
return render_template('default/payment/robokassa/fail.html')
|
return render_template('default/payment/robokassa/fail.html')
|
||||||
|
|
||||||
|
|
||||||
|
@viewPayments.route('/twocheckout/order', methods=['POST'])
|
||||||
|
def twocheckout_order():
|
||||||
|
# Setup credentials and environment
|
||||||
|
twocheckout.Api.auth_credentials({
|
||||||
|
'private_key': 'sandbox-private-key',
|
||||||
|
'seller_id': 'sandbox-seller_id',
|
||||||
|
'mode': 'sandbox'
|
||||||
|
})
|
||||||
|
|
||||||
|
# Setup arguments for authorization request
|
||||||
|
args = {
|
||||||
|
'merchantOrderId': '123',
|
||||||
|
'token': request.form["token"],
|
||||||
|
'currency': 'USD',
|
||||||
|
'total': '1.00',
|
||||||
|
'billingAddr': {
|
||||||
|
'name': 'Testing Tester',
|
||||||
|
'addrLine1': '123 Test St',
|
||||||
|
'city': 'Columbus',
|
||||||
|
'state': 'OH',
|
||||||
|
'zipCode': '43123',
|
||||||
|
'country': 'USA',
|
||||||
|
'email': 'example@2co.com',
|
||||||
|
'phoneNumber': '555-555-5555'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make authorization request
|
||||||
|
try:
|
||||||
|
result = twocheckout.Charge.authorize(args)
|
||||||
|
return result.responseMsg
|
||||||
|
except twocheckout.TwocheckoutError as error:
|
||||||
|
return error.msg
|
136
app/cloud/views/settings/__init__.py
Normal file
136
app/cloud/views/settings/__init__.py
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
from sshpubkeys import SSHKey
|
||||||
|
from flask import render_template, session, redirect, url_for, request
|
||||||
|
from flask import g
|
||||||
|
from flask import Blueprint
|
||||||
|
from app import models
|
||||||
|
from app.cloud.controllers.common import special_match
|
||||||
|
from app.cloud.controllers.common import ControllerMessagesEmail
|
||||||
|
from app.cloud.controllers.users import ControllerUsers
|
||||||
|
from app.cloud.controllers.users import ControllerAPI
|
||||||
|
from app.cloud.controllers.users import ControllerSSHKey
|
||||||
|
from app.cloud.controllers.users import ControllerUsersDetails
|
||||||
|
from app.cloud.controllers.users import ControllerUsersRecoveryCodes
|
||||||
|
from app.cloud.controllers.billing import ControllerBilling
|
||||||
|
|
||||||
|
viewSettings = Blueprint('settings', __name__, url_prefix='/settings')
|
||||||
|
|
||||||
|
|
||||||
|
@viewSettings.route('/', methods=['GET', 'POST'])
|
||||||
|
def index():
|
||||||
|
return redirect(url_for('settings.billing'))
|
||||||
|
|
||||||
|
|
||||||
|
@viewSettings.route('/billing')
|
||||||
|
def billing():
|
||||||
|
# check session
|
||||||
|
if not ControllerUsers().check_session():
|
||||||
|
return redirect(url_for("account.logout"))
|
||||||
|
# auth user
|
||||||
|
if not ControllerUsers().auth(session['email'], session['password']):
|
||||||
|
return redirect(url_for("account.logout"))
|
||||||
|
|
||||||
|
user_id = session['user_id']
|
||||||
|
|
||||||
|
if models.UsersBalance.select().where(models.UsersBalance.user == user_id).count() == 0:
|
||||||
|
models.UsersBalance.create(user=user_id, balance=10)
|
||||||
|
user_balance = models.UsersBalance.select().where(models.UsersBalance.user == user_id).limit(1)[0].balance
|
||||||
|
|
||||||
|
user_details = models.Users.select().where(models.Users.id == session['user_id']).limit(1)[0]
|
||||||
|
|
||||||
|
# выгрузка истории платежей
|
||||||
|
history = dict()
|
||||||
|
history['total'] = models.UsersBalanceTransactions.select().\
|
||||||
|
where(models.UsersBalanceTransactions.user == user_id).count()
|
||||||
|
history['items'] = models.UsersBalanceTransactions.select().\
|
||||||
|
where(models.UsersBalanceTransactions.user == user_id).order_by(models.UsersBalanceTransactions.id.desc())
|
||||||
|
|
||||||
|
return render_template(
|
||||||
|
'default/settings/billing/index.html',
|
||||||
|
user_details=user_details,
|
||||||
|
user_balance=user_balance,
|
||||||
|
history=history
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@viewSettings.route('/profile')
|
||||||
|
def profile():
|
||||||
|
# check session
|
||||||
|
if not ControllerUsers().check_session():
|
||||||
|
return redirect(url_for("account.logout"))
|
||||||
|
# auth user
|
||||||
|
if not ControllerUsers().auth(session['email'], session['password']):
|
||||||
|
return redirect(url_for("account.logout"))
|
||||||
|
|
||||||
|
cud = ControllerUsersDetails(session['user_id'])
|
||||||
|
user = cud.details_get()
|
||||||
|
|
||||||
|
# проверяем, есть ли запись в таблице usersdetails, чтобы небыло ошибок
|
||||||
|
if not cud.details_exists():
|
||||||
|
# если нет, то делаем запись в таблицу, чтобы небыло ошибок
|
||||||
|
cud.details_create()
|
||||||
|
|
||||||
|
# извлекаем из базы детали пользователя
|
||||||
|
user_details = cud.details_get()
|
||||||
|
|
||||||
|
return render_template(
|
||||||
|
'default/settings/profile/index.html',
|
||||||
|
user=user,
|
||||||
|
user_details=user_details
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@viewSettings.route('/profile_edit')
|
||||||
|
def profile_edit():
|
||||||
|
# check session
|
||||||
|
if not ControllerUsers().check_session():
|
||||||
|
return redirect(url_for("account.logout"))
|
||||||
|
# auth user
|
||||||
|
if not ControllerUsers().auth(session['email'], session['password']):
|
||||||
|
return redirect(url_for("account.logout"))
|
||||||
|
|
||||||
|
cud = ControllerUsersDetails(session['user_id'])
|
||||||
|
user = cud.details_get()
|
||||||
|
|
||||||
|
if not cud.details_exists():
|
||||||
|
cud.details_create()
|
||||||
|
|
||||||
|
if request.method == "POST":
|
||||||
|
if not request.form['zipcode'].isdigit():
|
||||||
|
g.errors['items'].append(u'ZIP code must contain only digits.')
|
||||||
|
g.errors['total'] += 1
|
||||||
|
|
||||||
|
if g.errors['total'] == 0:
|
||||||
|
cud.details_update(
|
||||||
|
fname=request.form['fname'],
|
||||||
|
lname=request.form['lname'],
|
||||||
|
address=request.form['address'],
|
||||||
|
city=request.form['city'],
|
||||||
|
country=request.form['country'],
|
||||||
|
state=request.form['state'],
|
||||||
|
zipcode=request.form['zipcode']
|
||||||
|
)
|
||||||
|
return redirect(url_for('account.edit'))
|
||||||
|
# get user details
|
||||||
|
user_details = cud.details_get()
|
||||||
|
return render_template(
|
||||||
|
'default/settings/profile/edit.html',
|
||||||
|
user=user,
|
||||||
|
user_details=user_details
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@viewSettings.route('/security')
|
||||||
|
def security():
|
||||||
|
return render_template('default/settings/security/index.html')
|
||||||
|
|
||||||
|
|
||||||
|
@viewSettings.route('/notifications')
|
||||||
|
def notifications():
|
||||||
|
return render_template('default/settings/security/index.html')
|
||||||
|
|
||||||
|
|
||||||
|
@viewSettings.route('/team')
|
||||||
|
def team():
|
||||||
|
return render_template('default/settings/team/index.html')
|
|
@ -40,7 +40,7 @@ def index():
|
||||||
# send mail message with recovery code
|
# send mail message with recovery code
|
||||||
subject = ticket_title
|
subject = ticket_title
|
||||||
message = ticket_message
|
message = ticket_message
|
||||||
lead = u'Отправитель: %s' % ticket_email
|
lead = u'Sender: %s' % ticket_email
|
||||||
callout = u''
|
callout = u''
|
||||||
|
|
||||||
email = ControllerMessagesEmail()
|
email = ControllerMessagesEmail()
|
||||||
|
|
1
app/dns/__init__.py
Normal file
1
app/dns/__init__.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
__author__ = 'vanzhiganov'
|
|
@ -12,7 +12,8 @@ header {
|
||||||
padding: 4em 0em 5em;
|
padding: 4em 0em 5em;
|
||||||
background: #202020 none repeat scroll 0% 0% / cover;
|
background: #202020 none repeat scroll 0% 0% / cover;
|
||||||
background-position:
|
background-position:
|
||||||
color: rgba(255, 255, 255, 0.8)
|
color: rgba(255, 255, 255, 0.8);
|
||||||
|
background: transparent url(/static/images/promo/bg2.png) repeat-x scroll 0% 0%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#banner p {
|
#banner p {
|
||||||
|
@ -68,3 +69,12 @@ ul#paymentlist li img {
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ul#features-list {
|
||||||
|
/* list-style: none; */
|
||||||
|
font-size: 1.5em;
|
||||||
|
}
|
||||||
|
ul#features-list li {
|
||||||
|
font-family: 'Clear sans';
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
|
@ -1,29 +0,0 @@
|
||||||
#logo {
|
|
||||||
margin-top: 15px;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer {
|
|
||||||
margin-top: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-bar {
|
|
||||||
background: none repeat scroll 0% 0% #371A5B;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-bar-section ul li {
|
|
||||||
/*background: none repeat scroll 0% 0% #371A5B;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-bar-section li:not(.has-form) a:not(.button) {
|
|
||||||
background: none repeat scroll 0% 0% #371A5B;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-bar-section li:hover(.has-form) a:hover(.button) {
|
|
||||||
/*background: none repeat scroll 0% 0% #371A5B;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.top-bar-section ul li {
|
|
||||||
background: none repeat scroll 0% 0% #371A5B;
|
|
||||||
}
|
|
427
app/static/css/normalize.css
vendored
427
app/static/css/normalize.css
vendored
|
@ -1,427 +0,0 @@
|
||||||
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Set default font family to sans-serif.
|
|
||||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
|
||||||
* user zoom.
|
|
||||||
*/
|
|
||||||
|
|
||||||
html {
|
|
||||||
font-family: sans-serif; /* 1 */
|
|
||||||
-ms-text-size-adjust: 100%; /* 2 */
|
|
||||||
-webkit-text-size-adjust: 100%; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove default margin.
|
|
||||||
*/
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* HTML5 display definitions
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
|
||||||
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
|
||||||
* and Firefox.
|
|
||||||
* Correct `block` display not defined for `main` in IE 11.
|
|
||||||
*/
|
|
||||||
|
|
||||||
article,
|
|
||||||
aside,
|
|
||||||
details,
|
|
||||||
figcaption,
|
|
||||||
figure,
|
|
||||||
footer,
|
|
||||||
header,
|
|
||||||
hgroup,
|
|
||||||
main,
|
|
||||||
menu,
|
|
||||||
nav,
|
|
||||||
section,
|
|
||||||
summary {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Correct `inline-block` display not defined in IE 8/9.
|
|
||||||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
|
||||||
*/
|
|
||||||
|
|
||||||
audio,
|
|
||||||
canvas,
|
|
||||||
progress,
|
|
||||||
video {
|
|
||||||
display: inline-block; /* 1 */
|
|
||||||
vertical-align: baseline; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prevent modern browsers from displaying `audio` without controls.
|
|
||||||
* Remove excess height in iOS 5 devices.
|
|
||||||
*/
|
|
||||||
|
|
||||||
audio:not([controls]) {
|
|
||||||
display: none;
|
|
||||||
height: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address `[hidden]` styling not present in IE 8/9/10.
|
|
||||||
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
|
||||||
*/
|
|
||||||
|
|
||||||
[hidden],
|
|
||||||
template {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Links
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the gray background color from active links in IE 10.
|
|
||||||
*/
|
|
||||||
|
|
||||||
a {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Improve readability when focused and also mouse hovered in all browsers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
a:active,
|
|
||||||
a:hover {
|
|
||||||
outline: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Text-level semantics
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
|
||||||
*/
|
|
||||||
|
|
||||||
abbr[title] {
|
|
||||||
border-bottom: 1px dotted;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
|
||||||
*/
|
|
||||||
|
|
||||||
b,
|
|
||||||
strong {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address styling not present in Safari and Chrome.
|
|
||||||
*/
|
|
||||||
|
|
||||||
dfn {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address variable `h1` font-size and margin within `section` and `article`
|
|
||||||
* contexts in Firefox 4+, Safari, and Chrome.
|
|
||||||
*/
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 2em;
|
|
||||||
margin: 0.67em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address styling not present in IE 8/9.
|
|
||||||
*/
|
|
||||||
|
|
||||||
mark {
|
|
||||||
background: #ff0;
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address inconsistent and variable font size in all browsers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
small {
|
|
||||||
font-size: 80%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
sub,
|
|
||||||
sup {
|
|
||||||
font-size: 75%;
|
|
||||||
line-height: 0;
|
|
||||||
position: relative;
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
|
|
||||||
sup {
|
|
||||||
top: -0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub {
|
|
||||||
bottom: -0.25em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Embedded content
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove border when inside `a` element in IE 8/9/10.
|
|
||||||
*/
|
|
||||||
|
|
||||||
img {
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Correct overflow not hidden in IE 9/10/11.
|
|
||||||
*/
|
|
||||||
|
|
||||||
svg:not(:root) {
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Grouping content
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address margin not present in IE 8/9 and Safari.
|
|
||||||
*/
|
|
||||||
|
|
||||||
figure {
|
|
||||||
margin: 1em 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address differences between Firefox and other browsers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
hr {
|
|
||||||
-moz-box-sizing: content-box;
|
|
||||||
box-sizing: content-box;
|
|
||||||
height: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contain overflow in all browsers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
pre {
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address odd `em`-unit font size rendering in all browsers.
|
|
||||||
*/
|
|
||||||
|
|
||||||
code,
|
|
||||||
kbd,
|
|
||||||
pre,
|
|
||||||
samp {
|
|
||||||
font-family: monospace, monospace;
|
|
||||||
font-size: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Forms
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
|
||||||
* styling of `select`, unless a `border` property is set.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Correct color not being inherited.
|
|
||||||
* Known issue: affects color of disabled elements.
|
|
||||||
* 2. Correct font properties not being inherited.
|
|
||||||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
|
||||||
*/
|
|
||||||
|
|
||||||
button,
|
|
||||||
input,
|
|
||||||
optgroup,
|
|
||||||
select,
|
|
||||||
textarea {
|
|
||||||
color: inherit; /* 1 */
|
|
||||||
font: inherit; /* 2 */
|
|
||||||
margin: 0; /* 3 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
|
||||||
*/
|
|
||||||
|
|
||||||
button {
|
|
||||||
overflow: visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
|
||||||
* All other form control elements do not inherit `text-transform` values.
|
|
||||||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
|
||||||
* Correct `select` style inheritance in Firefox.
|
|
||||||
*/
|
|
||||||
|
|
||||||
button,
|
|
||||||
select {
|
|
||||||
text-transform: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
|
||||||
* and `video` controls.
|
|
||||||
* 2. Correct inability to style clickable `input` types in iOS.
|
|
||||||
* 3. Improve usability and consistency of cursor style between image-type
|
|
||||||
* `input` and others.
|
|
||||||
*/
|
|
||||||
|
|
||||||
button,
|
|
||||||
html input[type="button"], /* 1 */
|
|
||||||
input[type="reset"],
|
|
||||||
input[type="submit"] {
|
|
||||||
-webkit-appearance: button; /* 2 */
|
|
||||||
cursor: pointer; /* 3 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Re-set default cursor for disabled elements.
|
|
||||||
*/
|
|
||||||
|
|
||||||
button[disabled],
|
|
||||||
html input[disabled] {
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove inner padding and border in Firefox 4+.
|
|
||||||
*/
|
|
||||||
|
|
||||||
button::-moz-focus-inner,
|
|
||||||
input::-moz-focus-inner {
|
|
||||||
border: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
|
||||||
* the UA stylesheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
input {
|
|
||||||
line-height: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* It's recommended that you don't attempt to style these elements.
|
|
||||||
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
|
||||||
*
|
|
||||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
|
||||||
* 2. Remove excess padding in IE 8/9/10.
|
|
||||||
*/
|
|
||||||
|
|
||||||
input[type="checkbox"],
|
|
||||||
input[type="radio"] {
|
|
||||||
box-sizing: border-box; /* 1 */
|
|
||||||
padding: 0; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
|
||||||
* `font-size` values of the `input`, it causes the cursor style of the
|
|
||||||
* decrement button to change from `default` to `text`.
|
|
||||||
*/
|
|
||||||
|
|
||||||
input[type="number"]::-webkit-inner-spin-button,
|
|
||||||
input[type="number"]::-webkit-outer-spin-button {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
|
||||||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
|
||||||
* (include `-moz` to future-proof).
|
|
||||||
*/
|
|
||||||
|
|
||||||
input[type="search"] {
|
|
||||||
-webkit-appearance: textfield; /* 1 */
|
|
||||||
-moz-box-sizing: content-box;
|
|
||||||
-webkit-box-sizing: content-box; /* 2 */
|
|
||||||
box-sizing: content-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
|
||||||
* Safari (but not Chrome) clips the cancel button when the search input has
|
|
||||||
* padding (and `textfield` appearance).
|
|
||||||
*/
|
|
||||||
|
|
||||||
input[type="search"]::-webkit-search-cancel-button,
|
|
||||||
input[type="search"]::-webkit-search-decoration {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define consistent border, margin, and padding.
|
|
||||||
*/
|
|
||||||
|
|
||||||
fieldset {
|
|
||||||
border: 1px solid #c0c0c0;
|
|
||||||
margin: 0 2px;
|
|
||||||
padding: 0.35em 0.625em 0.75em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
|
||||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
|
||||||
*/
|
|
||||||
|
|
||||||
legend {
|
|
||||||
border: 0; /* 1 */
|
|
||||||
padding: 0; /* 2 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove default vertical scrollbar in IE 8/9/10/11.
|
|
||||||
*/
|
|
||||||
|
|
||||||
textarea {
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Don't inherit the `font-weight` (applied by a rule above).
|
|
||||||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
|
||||||
*/
|
|
||||||
|
|
||||||
optgroup {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Tables
|
|
||||||
========================================================================== */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove most spacing between table cells.
|
|
||||||
*/
|
|
||||||
|
|
||||||
table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
border-spacing: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
td,
|
|
||||||
th {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
#logo {
|
|
||||||
margin-top: 15px;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer {
|
|
||||||
margin-top: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-bar {
|
|
||||||
background: none repeat scroll 0% 0% #371A5B;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-bar-section ul li {
|
|
||||||
/*background: none repeat scroll 0% 0% #371A5B;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-bar-section li:not(.has-form) a:not(.button) {
|
|
||||||
background: none repeat scroll 0% 0% #371A5B;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-bar-section li:hover(.has-form) a:hover(.button) {
|
|
||||||
/*background: none repeat scroll 0% 0% #371A5B;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.top-bar-section ul li {
|
|
||||||
background: none repeat scroll 0% 0% #371A5B;
|
|
||||||
}
|
|
|
@ -2,21 +2,15 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-4 columns">
|
<div class="large-4 columns">
|
||||||
<p>
|
<p>
|
||||||
GoCloud © Все права защищены.
|
{{ _("Puluttar © All rights reserved.") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="large-4 columns">
|
<div class="large-8 columns">
|
||||||
<p><b>Документы</b></p>
|
<ul class="inline-list">
|
||||||
<ul>
|
<li><a href="{{ url_for('documents.view', document_name='politica_konfidencialnosti') }}">{{ _("Privacy policy") }}</a></li>
|
||||||
<li><a href="{{ url_for('documents.view', document_name='politica_konfidencialnosti') }}">Политика конфиденциальности</a></li>
|
<li><a href="{{ url_for('documents.view', document_name='pravila_ispolzovaniya') }}">{{ _("Terms of Use") }}</a></li>
|
||||||
<li><a href="{{ url_for('documents.view', document_name='pravila_ispolzovaniya') }}">Условия использования</a></li>
|
<li><a href="{{ url_for('support.index') }}">{{ _("Support") }}</a></li>
|
||||||
</ul>
|
<li><a href="{{ url_for('kb.index') }}">{{ _("Knowledge base") }}</a></li>
|
||||||
</div>
|
|
||||||
<div class="large-4 columns">
|
|
||||||
<p><b>Поддержка</b></p>
|
|
||||||
<ul>
|
|
||||||
<li><a href="{{ url_for('support.index') }}">Поддержка</a></li>
|
|
||||||
<li><a href="{{ url_for('kb.index') }}">База знаний</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,28 +5,26 @@
|
||||||
<nav class="top-bar" data-topbar role="navigation" data-options="sticky_on: large">
|
<nav class="top-bar" data-topbar role="navigation" data-options="sticky_on: large">
|
||||||
<ul class="title-area">
|
<ul class="title-area">
|
||||||
<li class="name">
|
<li class="name">
|
||||||
<!--<h1><a href="{{ url_for('homepage.index') }}"><img src="{{ url_for('static', filename='images/logo/procdn-logo-24.png') }}" border="0" /></a></h1>-->
|
<h1><a href="{{ url_for('homepage.index') }}">Puluttar</a></h1>
|
||||||
<h1><a href="{{ url_for('homepage.index') }}">GoCloud</a></h1>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<section class="top-bar-section">
|
<section class="top-bar-section">
|
||||||
{% if session['user_id'] %}
|
{% if session['user_id'] %}
|
||||||
<ul class="right">
|
<ul class="right">
|
||||||
<li><a href="{{ url_for('account.index') }}">Учётная запись</a></li>
|
<li><a href="{{ url_for('settings.index') }}">{{ _("Settings") }}</a></li>
|
||||||
<li><a href="{{ url_for('account.billing') }}">Биллинг</a></li>
|
<li><a href="{{ url_for('account.logout') }}">{{ _("Logout") }}</a></li>
|
||||||
<li><a href="{{ url_for('account.logout') }}">Выход</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="left">
|
<ul class="left">
|
||||||
<li><a href="{{ url_for('containers.index') }}">Контейнеры</a></li>
|
<li><a href="{{ url_for('containers.index') }}">{{ _("Containers") }}</a></li>
|
||||||
<li><a href="{{ url_for('containers.create') }}">Добавить</a></li>
|
<li><a href="{{ url_for('containers.create') }}">{{ _("Create new") }}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% else %}
|
{% else %}
|
||||||
<ul class="right">
|
<ul class="right">
|
||||||
<li class="active"><a href="{{ url_for('account.login') }}">Вход</a></li>
|
<li class="active"><a href="{{ url_for('account.login') }}">{{ _("Login") }}</a></li>
|
||||||
<li><a href="{{ url_for('account.registration') }}">Регистрация</a></li>
|
<li><a href="{{ url_for('account.registration') }}">{{ _("Registration") }}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="left">
|
<ul class="left">
|
||||||
<li><a href="{{ url_for('homepage.index') }}">Главная</a></li>
|
<li><a href="{{ url_for('homepage.index') }}">{{ _("Home") }}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<script src="{{ url_for('static', filename='js/vendor/modernizr.js') }}"></script>
|
<script src="{{ url_for('static', filename='js/vendor/modernizr.js') }}"></script>
|
||||||
<script src="{{ url_for('static', filename='js/foundation/foundation.min.js') }}"></script>
|
<script src="{{ url_for('static', filename='js/foundation/foundation.min.js') }}"></script>
|
||||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/foundation.min.css') }}" />
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/foundation.min.css') }}" />
|
||||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/gocloud.css') }}" />
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/app.css') }}" />
|
||||||
<meta name='shareinstock' content='' />
|
<meta name='shareinstock' content='' />
|
||||||
{% block head %}{% endblock %}
|
{% block head %}{% endblock %}
|
||||||
</head>
|
</head>
|
||||||
|
|
49
app/templates/default/containers/create.en.html
Normal file
49
app/templates/default/containers/create.en.html
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
|
{% block title %}New container{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h3>New container</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
{% if g.errors['total'] > 0 %}
|
||||||
|
<div class="alert-box alert">
|
||||||
|
<ul>
|
||||||
|
{% for error in g.errors['items'] %}
|
||||||
|
<li>{{ error }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if datacenters['total'] == 0 %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="small-12 columns">
|
||||||
|
Нет возможности создать контейнер. Обратитесь в <a href="mailto:support@gocloud.ru">поддержку</a>.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="row">
|
||||||
|
<form action="{{ url_for('containers.create') }}" method="post" id="containercreateform">
|
||||||
|
<div class="small-12 columns">
|
||||||
|
<label for="backend">
|
||||||
|
Datacenter
|
||||||
|
<select name="datacenter" class="form">
|
||||||
|
{% for datacenter in datacenters['items'] %}
|
||||||
|
<option value="{{ datacenter.id }}">{{ datacenter.name }}: {{ datacenter.country }}, {{ datacenter.city }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="small-12 columns">
|
||||||
|
<input type="submit" value="Create" class="button success" id="submitform" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Новый{% endblock %}
|
{% block title %}{{ _('New container') }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h3>Новый контейнер</h3>
|
<h3>{{ _('New container') }}</h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -29,9 +29,9 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<form action="{{ url_for('containers.create') }}" method="post" id="containercreateform">
|
<form action="{{ url_for('containers.create') }}" method="post" id="containercreateform">
|
||||||
<div class="small-12 columns">
|
<div class="small-12 columns">
|
||||||
<label for="backend">
|
<label for="datacenter">
|
||||||
Датацентр
|
{{ _('Data center') }}
|
||||||
<select name="datacenter" class="form">
|
<select name="datacenter" class="form" id="datacenter">
|
||||||
{% for datacenter in datacenters['items'] %}
|
{% for datacenter in datacenters['items'] %}
|
||||||
<option value="{{ datacenter.id }}">{{ datacenter.name }}: {{ datacenter.country }}, {{ datacenter.city }}</option>
|
<option value="{{ datacenter.id }}">{{ datacenter.name }}: {{ datacenter.country }}, {{ datacenter.city }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="small-12 columns">
|
<div class="small-12 columns">
|
||||||
<input type="submit" value="Создать контейнер" class="button success" id="submitform" />
|
<input type="submit" value="{{ _('Create container') }}" class="button success" id="submitform" />
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
31
app/templates/default/containers/delete.en.html
Normal file
31
app/templates/default/containers/delete.en.html
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
|
{% block title %}Removing container{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h3>Removing container</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
{% if g.errors['total'] > 0 %}
|
||||||
|
<div class="alert-box alert">
|
||||||
|
<ul>
|
||||||
|
{% for error in g.errors['items'] %}<li>{{ error }}</li>{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<form action="{{ url_for('containers.delete', container_id=container.id) }}" method="post">
|
||||||
|
<input type="hidden" name="id" value="{{ container.id }}" />
|
||||||
|
<p>
|
||||||
|
Do you really want to remove container?<br/>
|
||||||
|
</p>
|
||||||
|
<input type="submit" value="Yes, I want!" class="button alert" />
|
||||||
|
<a href="{{ url_for('containers.index') }}" class="">Cancel</a>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Удаление контейнера{% endblock %}
|
{% block title %}{{ _('Delete container') }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h3>Удаление контейнера</h3>
|
<h3>{{ _('Delete container') }}</h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -20,10 +20,10 @@
|
||||||
<form action="{{ url_for('containers.delete', container_id=container.id) }}" method="post">
|
<form action="{{ url_for('containers.delete', container_id=container.id) }}" method="post">
|
||||||
<input type="hidden" name="id" value="{{ container.id }}" />
|
<input type="hidden" name="id" value="{{ container.id }}" />
|
||||||
<p>
|
<p>
|
||||||
Вы действительно хотите удалить контейнер?<br/>
|
{{ _('Do you really want to delete container?') }}<br/>
|
||||||
</p>
|
</p>
|
||||||
<input type="submit" value="Удалить" class="button alert" />
|
<input type="submit" value="{{ _('Yes, I want!') }}" class="button alert" />
|
||||||
<a href="{{ url_for('containers.index') }}" class="">Отмена</a>
|
<a href="{{ url_for('containers.index') }}" class="">{{ _('Cancel') }}</a>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
71
app/templates/default/containers/index.en.html
Normal file
71
app/templates/default/containers/index.en.html
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
|
{% block title %}Containers{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h3>Containers <a href="{{ url_for('containers.create') }}">+</a></h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<table id="zones" width="100%">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th width="45%">ID</th>
|
||||||
|
<th>IP</th>
|
||||||
|
<th>Storage</th>
|
||||||
|
<th>Status</th>
|
||||||
|
<th width="10%"> </th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% if containers.total == 0 %}
|
||||||
|
<tr>
|
||||||
|
<td>No containers. <a href="{{ url_for('containers.create') }}">Create one</a>.</td>
|
||||||
|
</tr>
|
||||||
|
{% else %}
|
||||||
|
{% for container in containers['items'] %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
{{ container['id'] }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if container['ipv4'] %}
|
||||||
|
IPv4: {{ container['ipv4'] }}
|
||||||
|
{% endif %}
|
||||||
|
{% if container['ipv6'] %}
|
||||||
|
IPv6: {{ container['ipv6'] }}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% set size_gb = (container.size / 1024 / 1024) %}
|
||||||
|
{{ '%0.2f' | format(size_gb|float) }}GB
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if container['status'] == 0 %}
|
||||||
|
Inactive
|
||||||
|
{% elif container['status'] == 1 %}
|
||||||
|
Active
|
||||||
|
{% elif container['status'] == 2 %}
|
||||||
|
Activating
|
||||||
|
{% elif container['status'] == 3 %}
|
||||||
|
Deactivating
|
||||||
|
{% elif container['status'] == 4 %}
|
||||||
|
Creating...
|
||||||
|
{% elif container['status'] == 5 %}
|
||||||
|
Removing...
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="{{ url_for('containers.settings', container_id=container.id) }}">Settings</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -1,29 +1,31 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Правила{% endblock %}
|
{% block title %}{{ _('Containers') }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h3>Список <a href="{{ url_for('containers.create') }}">+</a></h3>
|
<h3>{{ _('List') }} <a href="{{ url_for('containers.create') }}">+</a></h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<table id="zones" width="100%">
|
<table id="containers" width="100%">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th width="45%">ID</th>
|
<th width="45%">{{ _('ID') }}</th>
|
||||||
<th>IP</th>
|
<th>{{ _('IP address') }}</th>
|
||||||
<th>Диск</th>
|
<th>{{ _('Storage') }}</th>
|
||||||
<th>Статус</th>
|
<th>{{ _('Status') }}</th>
|
||||||
<th width="10%"> </th>
|
<th width="10%"> </th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% if containers.total == 0 %}
|
{% if containers.total == 0 %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>Нет ни одного контейнера. <a href="{{ url_for('containers.create') }}">Добавить</a>.</td>
|
<td>
|
||||||
|
{{ _('No one container created yet. <a href="%s">Create one</a>.' % url_for('containers.create')) }}
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% else %}
|
{% else %}
|
||||||
{% for container in containers['items'] %}
|
{% for container in containers['items'] %}
|
||||||
|
@ -45,21 +47,21 @@
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{% if container['status'] == 0 %}
|
{% if container['status'] == 0 %}
|
||||||
Неактивно
|
{{ _('Inactive') }}
|
||||||
{% elif container['status'] == 1 %}
|
{% elif container['status'] == 1 %}
|
||||||
Активно
|
{{ _('Active') }}
|
||||||
{% elif container['status'] == 2 %}
|
{% elif container['status'] == 2 %}
|
||||||
Процесс активации
|
{{ _('Activation') }}
|
||||||
{% elif container['status'] == 3 %}
|
{% elif container['status'] == 3 %}
|
||||||
Процесс деактивации
|
{{ _('Deactivation') }}
|
||||||
{% elif container['status'] == 4 %}
|
{% elif container['status'] == 4 %}
|
||||||
Создание...
|
{{ _('Creation...') }}
|
||||||
{% elif container['status'] == 5 %}
|
{% elif container['status'] == 5 %}
|
||||||
Удаление...
|
{{ _('Deletion...') }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ url_for('containers.settings', container_id=container.id) }}">Настройки</a>
|
<a href="{{ url_for('containers.settings', container_id=container.id) }}">{{ _('Settings') }}</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
45
app/templates/default/containers/settings.en.html
Normal file
45
app/templates/default/containers/settings.en.html
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
|
{% block title %}Settings{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h3>Settings</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
{% if g.errors['total'] > 0 %}
|
||||||
|
<div class="large-12 columns">
|
||||||
|
{% for error in g.errors['items'] %}
|
||||||
|
<div class="alert-box alert">
|
||||||
|
{{ error }}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h4>Status</h4>
|
||||||
|
{% if container.status == 0 %}
|
||||||
|
<p style="color: red">Inactive</p>
|
||||||
|
{% else %}
|
||||||
|
<p style="color: green">Active</p>
|
||||||
|
{% endif %}
|
||||||
|
<form action="{{ url_for('containers.settings', container_id=container.id) }}" method="post">
|
||||||
|
<input type="hidden" name="action" value="set_status">
|
||||||
|
<div class="input-group">
|
||||||
|
<select name="status">
|
||||||
|
<option value="active">Active</option>
|
||||||
|
<option value="inactive">Inactive</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<input type="submit" value="Change status" class="button success small">
|
||||||
|
</form>
|
||||||
|
<h4>Remove</h4>
|
||||||
|
<a href="{{ url_for('containers.delete', container_id=container.id) }}">
|
||||||
|
<button class="button alert">Remove</button>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Статистика{% endblock %}
|
{% block title %}{{ _('Settings') }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h3>Настройки</h3>
|
<h3>{{ _('Settings') }}</h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -19,25 +19,25 @@
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h4>Статус</h4>
|
<h4>{{ _('Status') }}</h4>
|
||||||
{% if container.status == 0 %}
|
{% if container.status == 0 %}
|
||||||
<p style="color: red">Неактивен</p>
|
<p style="color: red">{{ _('Inactive') }}</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p style="color: green">Активен</p>
|
<p style="color: green">{{ _('Active') }}</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form action="{{ url_for('containers.settings', container_id=container.id) }}" method="post">
|
<form action="{{ url_for('containers.settings', container_id=container.id) }}" method="post">
|
||||||
<input type="hidden" name="action" value="set_status">
|
<input type="hidden" name="action" value="set_status">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<select name="status">
|
<select name="status">
|
||||||
<option value="active">Активировать</option>
|
<option value="active">{{ _('Activate') }}</option>
|
||||||
<option value="inactive">Деактивировать</option>
|
<option value="inactive">{{ _('Deactivate') }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<input type="submit" value="Изменить статус" class="button success small">
|
<input type="submit" value="{{ _('Change status') }}" class="button success small">
|
||||||
</form>
|
</form>
|
||||||
<h4>Удалить</h4>
|
<h4>{{ _('Delete container') }}</h4>
|
||||||
<a href="{{ url_for('containers.delete', container_id=container.id) }}">
|
<a href="{{ url_for('containers.delete', container_id=container.id) }}">
|
||||||
<button class="button alert">Удалить</button>
|
<button class="button alert">{{ _('Delete') }}</button>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
11
app/templates/default/documents/index.en.html
Normal file
11
app/templates/default/documents/index.en.html
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
|
{% block title %}Documents{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
{% filter markdown %}{{ doc_markdown }}{% endfilter %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -1,6 +1,6 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Документы{% endblock %}
|
{% block title %}{{ _('Documents') }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
11
app/templates/default/errors/403.en.html
Normal file
11
app/templates/default/errors/403.en.html
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
{% block title %}Access denied{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h1>Access denied</h1>
|
||||||
|
<p>View page is forbidden.</p>
|
||||||
|
<p><a href="{{ url_for('homepage.index') }}">Go to Home page</a>.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
11
app/templates/default/errors/403.html
Normal file
11
app/templates/default/errors/403.html
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
{% block title %}{{ _('Forbidden') }}{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h1>{{ _('Forbidden') }}</h1>
|
||||||
|
<p>Указанная страница закрыта для общего доступа.</p>
|
||||||
|
<p><a href="{{ url_for('homepage.index') }}">Перейти на главную</a>.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -1,46 +0,0 @@
|
||||||
{% extends "default/_layout.html" %}
|
|
||||||
|
|
||||||
{% block title %}GoCloud{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div id="banner">
|
|
||||||
<div class="row">
|
|
||||||
<div class="large-12 columns">
|
|
||||||
<p id="slogan">Cloud hosting for developers</p>
|
|
||||||
<p id="sub">Linux containers from $1 per month</p>
|
|
||||||
<p>
|
|
||||||
<a href="{{ url_for('account.registration') }}" class="button alert">Create container</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="large-4 columns">
|
|
||||||
<h2>Features</h2>
|
|
||||||
<ul>
|
|
||||||
<li>Containers with Ubuntu Linux</li>
|
|
||||||
<li>Pay only for the resources used</li>
|
|
||||||
<li>Автоматическое доабвление SSH-ключа при создании контейнера</li>
|
|
||||||
<li>Public IP address</li>
|
|
||||||
<li>Unlimited network traffic</li>
|
|
||||||
<li>Firewall</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="large-4 columns">
|
|
||||||
<h2>Тарификация</h2>
|
|
||||||
<ul>
|
|
||||||
<li>Включено 2 Гб дискового пространства</li>
|
|
||||||
<li>Дисковое пространство - 100 рублей в месяц за каждые 10Гб</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="large-4 columns">
|
|
||||||
<h2>Способы оплаты</h2>
|
|
||||||
<ul>
|
|
||||||
<li>Visa и MasterCard</li>
|
|
||||||
<li>WebMoney</li>
|
|
||||||
<li>Яндекс.Деньги</li>
|
|
||||||
<li>Robokassa</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
|
@ -1,48 +1,67 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}GoCloud{% endblock %}
|
{% block title %}Puluttar{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div id="banner">
|
<div id="banner">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<p id="slogan">Облачный хостинг для разработчиков</p>
|
<div>
|
||||||
<p id="sub">Linux контейнер от 100 рублей в месяц</p>
|
<p id="slogan">{{ _("Cloud hosting for developers") }}</p>
|
||||||
|
<p id="sub">{{ _("Linux containers from $3.50 per month") }}</p>
|
||||||
<p>
|
<p>
|
||||||
<a href="{{ url_for('account.registration') }}" class="button alert">Создать контейнер</a>
|
<a href="{{ url_for('account.registration') }}" class="button alert">{{ _("Create container") }}</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-4 columns">
|
<div class="large-8 columns">
|
||||||
<h2>Особенности</h2>
|
<div class="row">
|
||||||
<ul>
|
<div class="large-12 columns">
|
||||||
<li>Контейнеры с операционной системой Ubuntu</li>
|
<h2>Features</h2>
|
||||||
<li>Оплата только за использованные ресурсы</li>
|
</div>
|
||||||
<li>Автоматическое добавление SSH-ключа при создании контейнера</li>
|
<div class="large-12 columns">
|
||||||
<li>Реальный IP</li>
|
<ul id="features-list">
|
||||||
<li>Неограниченный трафик</li>
|
<li>Auto scaling LXC containers with Ubuntu Linux</li>
|
||||||
<li>Защита Firewall</li>
|
<li>Pay only for the resources used</li>
|
||||||
|
<li>Ready to deploy with one minute</li>
|
||||||
|
<li>Public IP address</li>
|
||||||
|
<li>Unlimited network traffic with firewall</li>
|
||||||
|
<li>Several data centers around the world</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="large-4 columns">
|
</div>
|
||||||
<h2>Тарификация </h2>
|
|
||||||
<ul>
|
|
||||||
<li>Включено 2 Гб дискового пространства</li>
|
|
||||||
<li>Дисковое пространство - 100 рублей в месяц за каждые 10Гб</li>
|
|
||||||
</ul>
|
|
||||||
<h2>Способы оплаты</h2>
|
|
||||||
<ul>
|
|
||||||
<li>Visa и MasterCard</li>
|
|
||||||
<li>WebMoney</li>
|
|
||||||
<li>Яндекс.Деньги</li>
|
|
||||||
<li>Robokassa</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="large-4 columns">
|
<div class="large-4 columns">
|
||||||
|
<ul class="pricing-table">
|
||||||
|
<li class="title">Standard</li>
|
||||||
|
<li class="price">from $3.50/mo</li>
|
||||||
|
<li class="description">Auto scaling LXC container</li>
|
||||||
|
<li class="bullet-item">5GB Storage</li>
|
||||||
|
<li class="bullet-item">512MB Memory</li>
|
||||||
|
<li class="bullet-item">Unlimited bandwidth</li>
|
||||||
|
<li class="cta-button"><a class="button" href="#">Get started</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<!-- div class="large-4 columns">
|
||||||
<a class="twitter-timeline" href="https://twitter.com/gocloud_ru" data-widget-id="678726736645922816">Tweets by @gocloud_ru</a>
|
<a class="twitter-timeline" href="https://twitter.com/gocloud_ru" data-widget-id="678726736645922816">Tweets by @gocloud_ru</a>
|
||||||
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
|
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
|
||||||
|
</div- -->
|
||||||
</div>
|
</div>
|
||||||
|
<!-- div class="row" data-equalizer>
|
||||||
|
<div class="large-3 columns panel" data-equalizer-watch style="background-color: #cc0000; color: #ffffff">
|
||||||
|
Advertious.com
|
||||||
</div>
|
</div>
|
||||||
|
<div class="large-3 columns panel" data-equalizer-watch style="background-color: #563D7D; color: #ffffff">
|
||||||
|
NotePlex.net
|
||||||
|
</div>
|
||||||
|
<div class="large-3 columns panel" data-equalizer-watch>
|
||||||
|
wefewf
|
||||||
|
</div>
|
||||||
|
<div class="large-3 columns panel" data-equalizer-watch>
|
||||||
|
gergr
|
||||||
|
</div>
|
||||||
|
</div -->
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -1,123 +0,0 @@
|
||||||
<form action="{{ url_for('account.edit') }}" method="post">
|
|
||||||
<input type="hidden" name="update_information" value="1">
|
|
||||||
<!-- BILLING BLOCK -->
|
|
||||||
<label for="fname">Имя</label>
|
|
||||||
<input name="fname" id="fname" type="text" class="long-field" value="{{ user_details['fname'] }}" />
|
|
||||||
|
|
||||||
<label for="lname">Фамилия</label>
|
|
||||||
<input name="lname" id="lname" type="text" class="long-field" value="{{ user_details['lname'] }}" />
|
|
||||||
|
|
||||||
<label for="address">Адрес</label>
|
|
||||||
<input name="address" id="address" type="text" class="long-field" value="{{ user_details['address'] }}" />
|
|
||||||
|
|
||||||
<label for="city">Город</label>
|
|
||||||
<input name="city" id="city" type="text" class="long-field" value="{{ user_details['city'] }}" />
|
|
||||||
|
|
||||||
<label for="country">Страна</label>
|
|
||||||
<input name="country" id="country" type="text" class="long-field" value="{{ user_details['country'] }}" />
|
|
||||||
{# <select name="country" id="country" class="long-field">#}
|
|
||||||
{# <option value="">Выберите страну</option>#}
|
|
||||||
{# {% for country in countries_list %}#}
|
|
||||||
{# {% if country['iso'] == user_details['country'] %}#}
|
|
||||||
{# <option value="{{ country['iso'] }}" selected>{{ country['name'] }}</option>#}
|
|
||||||
{# {% else %}#}
|
|
||||||
{# <option value="{{ country['iso'] }}">{{ country['name'] }}</option>#}
|
|
||||||
{# {% endif %}#}
|
|
||||||
{# {% endfor %}#}
|
|
||||||
{# </select>#}
|
|
||||||
<label for="state">Регион</label>
|
|
||||||
<input name="state" id="state" type="text" class="long-field" value="{{ user_details['state'] }}" />
|
|
||||||
{# <select name="state" id="state" class="long-field">#}
|
|
||||||
{# <option value="">{{ text['please_select'] }}</option>#}
|
|
||||||
{# <optgroup label="Australian Provinces">#}
|
|
||||||
{# <option value="-AU-NSW" {% if user_details['state'] == "-AU-NSW" %}selected{% endif %}>New South Wales</option>#}
|
|
||||||
{# <option value="-AU-QLD" {% if user_details['state'] == "-AU-QLD" %}selected{% endif %}>Queensland</option>#}
|
|
||||||
{# <option value="-AU-SA" {% if user_details['state'] == "-AU-SA" %}selected{% endif %}>South Australia</option>#}
|
|
||||||
{# <option value="-AU-TAS" {% if user_details['state'] == "-AU-TAS" %}selected{% endif %}>Tasmania</option>#}
|
|
||||||
{# <option value="-AU-VIC" {% if user_details['state'] == "-AU-VIC" %}selected{% endif %}>Victoria</option>#}
|
|
||||||
{# <option value="-AU-WA" {% if user_details['state'] == "-AU-WA" %}selected{% endif %}>Western Australia</option>#}
|
|
||||||
{# <option value="-AU-ACT" {% if user_details['state'] == "-AU-ACT" %}selected{% endif %}>Australian Capital Territory</option>#}
|
|
||||||
{# <option value="-AU-NT" {% if user_details['state'] == "-AU-NT" %}selected{% endif %}>Northern Territory</option>#}
|
|
||||||
{# </optgroup>#}
|
|
||||||
{# <optgroup label="Canadian Provinces">#}
|
|
||||||
{# <option value="AB" {% if user_details['state'] == "AB" %}selected{% endif %}>Alberta</option>#}
|
|
||||||
{# <option value="BC" {% if user_details['state'] == "BC" %}selected{% endif %}>British Columbia</option>#}
|
|
||||||
{# <option value="MB" {% if user_details['state'] == "MB" %}selected{% endif %}>Manitoba</option>#}
|
|
||||||
{# <option value="NB" {% if user_details['state'] == "NB" %}selected{% endif %}>New Brunswick</option>#}
|
|
||||||
{# <option value="NF" {% if user_details['state'] == "NF" %}selected{% endif %}>Newfoundland</option>#}
|
|
||||||
{# <option value="NT" {% if user_details['state'] == "NT" %}selected{% endif %}>Northwest Territories</option>#}
|
|
||||||
{# <option value="NS" {% if user_details['state'] == "NS" %}selected{% endif %}>Nova Scotia</option>#}
|
|
||||||
{# <option value="NVT" {% if user_details['state'] == "NVT" %}selected{% endif %}>Nunavut</option>#}
|
|
||||||
{# <option value="ON" {% if user_details['state'] == "ON" %}selected{% endif %}>Ontario</option>#}
|
|
||||||
{# <option value="PE" {% if user_details['state'] == "PE" %}selected{% endif %}>Prince Edward Island</option>#}
|
|
||||||
{# <option value="QC" {% if user_details['state'] == "QC" %}selected{% endif %}>Quebec</option>#}
|
|
||||||
{# <option value="SK" {% if user_details['state'] == "SK" %}selected{% endif %}>Saskatchewan</option>#}
|
|
||||||
{# <option value="YK" {% if user_details['state'] == "YK" %}selected{% endif %}>Yukon</option>#}
|
|
||||||
{# </optgroup>#}
|
|
||||||
{# <optgroup label="US States">#}
|
|
||||||
{# <option value="AL" {% if user_details['state'] == "AL" %}selected{% endif %}>Alabama</option>#}
|
|
||||||
{# <option value="AK" {% if user_details['state'] == "AK" %}selected{% endif %}>Alaska</option>#}
|
|
||||||
{# <option value="AZ" {% if user_details['state'] == "AZ" %}selected{% endif %}>Arizona</option>#}
|
|
||||||
{# <option value="AR" {% if user_details['state'] == "AR" %}selected{% endif %}>Arkansas</option>#}
|
|
||||||
{# <option value="BVI" {% if user_details['state'] == "BVI" %}selected{% endif %}>British Virgin Islands</option>#}
|
|
||||||
{# <option value="CA" {% if user_details['state'] == "CA" %}selected{% endif %}>California</option>#}
|
|
||||||
{# <option value="CO" {% if user_details['state'] == "CO" %}selected{% endif %}>Colorado</option>#}
|
|
||||||
{# <option value="CT" {% if user_details['state'] == "CT" %}selected{% endif %}>Connecticut</option>#}
|
|
||||||
{# <option value="DE" {% if user_details['state'] == "DE" %}selected{% endif %}>Delaware</option>#}
|
|
||||||
{# <option value="FL" {% if user_details['state'] == "FL" %}selected{% endif %}>Florida</option>#}
|
|
||||||
{# <option value="GA" {% if user_details['state'] == "GA" %}selected{% endif %}>Georgia</option>#}
|
|
||||||
{# <option value="GU" {% if user_details['state'] == "GU" %}selected{% endif %}>Guam</option>#}
|
|
||||||
{# <option value="HI" {% if user_details['state'] == "HI" %}selected{% endif %}>Hawaii</option>#}
|
|
||||||
{# <option value="ID" {% if user_details['state'] == "ID" %}selected{% endif %}>Idaho</option>#}
|
|
||||||
{# <option value="IL" {% if user_details['state'] == "IL" %}selected{% endif %}>Illinois</option>#}
|
|
||||||
{# <option value="IN" {% if user_details['state'] == "IN" %}selected{% endif %}>Indiana</option>#}
|
|
||||||
{# <option value="IA" {% if user_details['state'] == "IA" %}selected{% endif %}>Iowa</option>#}
|
|
||||||
{# <option value="KS" {% if user_details['state'] == "KS" %}selected{% endif %}>Kansas</option>#}
|
|
||||||
{# <option value="KY" {% if user_details['state'] == "KY" %}selected{% endif %}>Kentucky</option>#}
|
|
||||||
{# <option value="LA" {% if user_details['state'] == "LA" %}selected{% endif %}>Louisiana</option>#}
|
|
||||||
{# <option value="ME" {% if user_details['state'] == "ME" %}selected{% endif %}>Maine</option>#}
|
|
||||||
{# <option value="MP" {% if user_details['state'] == "MP" %}selected{% endif %}>Mariana Islands</option>#}
|
|
||||||
{# <option value="MPI" {% if user_details['state'] == "MPI" %}selected{% endif %}>Mariana Islands (Pacific)</option>#}
|
|
||||||
{# <option value="MD" {% if user_details['state'] == "MD" %}selected{% endif %}>Maryland</option>#}
|
|
||||||
{# <option value="MA" {% if user_details['state'] == "MA" %}selected{% endif %}>Massachusetts</option>#}
|
|
||||||
{# <option value="MI" {% if user_details['state'] == "MI" %}selected{% endif %}>Michigan</option>#}
|
|
||||||
{# <option value="MN" {% if user_details['state'] == "MN" %}selected{% endif %}>Minnesota</option>#}
|
|
||||||
{# <option value="MS" {% if user_details['state'] == "MS" %}selected{% endif %}>Mississippi</option>#}
|
|
||||||
{# <option value="MO" {% if user_details['state'] == "MO" %}selected{% endif %}>Missouri</option>#}
|
|
||||||
{# <option value="MT" {% if user_details['state'] == "MT" %}selected{% endif %}>Montana</option>#}
|
|
||||||
{# <option value="NE" {% if user_details['state'] == "NE" %}selected{% endif %}>Nebraska</option>#}
|
|
||||||
{# <option value="NV" {% if user_details['state'] == "NV" %}selected{% endif %}>Nevada</option>#}
|
|
||||||
{# <option value="NH" {% if user_details['state'] == "NH" %}selected{% endif %}>New Hampshire</option>#}
|
|
||||||
{# <option value="NJ" {% if user_details['state'] == "NJ" %}selected{% endif %}>New Jersey</option>#}
|
|
||||||
{# <option value="NM" {% if user_details['state'] == "NM" %}selected{% endif %}>New Mexico</option>#}
|
|
||||||
{# <option value="NY" {% if user_details['state'] == "NY" %}selected{% endif %}>New York</option>#}
|
|
||||||
{# <option value="NC" {% if user_details['state'] == "NC" %}selected{% endif %}>North Carolina</option>#}
|
|
||||||
{# <option value="ND" {% if user_details['state'] == "ND" %}selected{% endif %}>North Dakota</option>#}
|
|
||||||
{# <option value="OH" {% if user_details['state'] == "OH" %}selected{% endif %}>Ohio</option>#}
|
|
||||||
{# <option value="OK" {% if user_details['state'] == "OK" %}selected{% endif %}>Oklahoma</option>#}
|
|
||||||
{# <option value="OR" {% if user_details['state'] == "OR" %}selected{% endif %}>Oregon</option>#}
|
|
||||||
{# <option value="PA" {% if user_details['state'] == "PA" %}selected{% endif %}>Pennsylvania</option>#}
|
|
||||||
{# <option value="PR" {% if user_details['state'] == "PR" %}selected{% endif %}>Puerto Rico</option>#}
|
|
||||||
{# <option value="RI" {% if user_details['state'] == "RI" %}selected{% endif %}>Rhode Island</option>#}
|
|
||||||
{# <option value="SC" {% if user_details['state'] == "SC" %}selected{% endif %}>South Carolina</option>#}
|
|
||||||
{# <option value="SD" {% if user_details['state'] == "SD" %}selected{% endif %}>South Dakota</option>#}
|
|
||||||
{# <option value="TN" {% if user_details['state'] == "TN" %}selected{% endif %}>Tennessee</option>#}
|
|
||||||
{# <option value="TX" {% if user_details['state'] == "TX" %}selected{% endif %}>Texas</option>#}
|
|
||||||
{# <option value="UT" {% if user_details['state'] == "UT" %}selected{% endif %}>Utah</option>#}
|
|
||||||
{# <option value="VT" {% if user_details['state'] == "VT" %}selected{% endif %}>Vermont</option>#}
|
|
||||||
{# <option value="USVI" {% if user_details['state'] == "USVI" %}selected{% endif %}>VI U.S. Virgin Islands</option>#}
|
|
||||||
{# <option value="VA" {% if user_details['state'] == "VA" %}selected{% endif %}>Virginia</option>#}
|
|
||||||
{# <option value="WA" {% if user_details['state'] == "WA" %}selected{% endif %}>Washington</option>#}
|
|
||||||
{# <option value="DC" {% if user_details['state'] == "DC" %}selected{% endif %}>Washington, D.C.</option>#}
|
|
||||||
{# <option value="WV" {% if user_details['state'] == "WV" %}selected{% endif %}>West Virginia</option>#}
|
|
||||||
{# <option value="WI" {% if user_details['state'] == "WI" %}selected{% endif %}>Wisconsin</option>#}
|
|
||||||
{# <option value="WY" {% if user_details['state'] == "WY" %}selected{% endif %}>Wyoming</option>#}
|
|
||||||
{# </optgroup>#}
|
|
||||||
{# <option value="N/A" {% if user_details['state'] == "N/A" %}selected{% endif %}>Other</option>#}
|
|
||||||
{# </select>#}
|
|
||||||
|
|
||||||
<label for="zipcode">Индекс</label>
|
|
||||||
<input name="zipcode" id="zipcode" type="text" class="small-field" value="{{ user_details['zipcode'] }}" />
|
|
||||||
|
|
||||||
<input type="submit" value="Сохранить изменения" class="button success" />
|
|
||||||
</form>
|
|
|
@ -1,8 +1,5 @@
|
||||||
<ul class="inline-list">
|
<ul class="inline-list">
|
||||||
<li><a href="{{ url_for('account.index') }}">Учётная запись</a></li>
|
<li><a href="{{ url_for('account.password_update') }}">{{ _("Password update") }}</a></li>
|
||||||
<li><a href="{{ url_for('account.billing') }}">Биллинг</a></li>
|
<li><a href="{{ url_for('account.sshkey') }}">{{ _("SSH-key") }}</a></li>
|
||||||
{# <li><a href="{{ url_for('account.settings') }}">Настройки</a></li>#}
|
<li><a href="{{ url_for('account.api') }}">{{ _("API") }}</a></li>
|
||||||
<li><a href="{{ url_for('account.password_update') }}">Смена пароля</a></li>
|
|
||||||
<li><a href="{{ url_for('account.sshkey') }}">SSH ключ</a></li>
|
|
||||||
<li><a href="{{ url_for('account.api') }}">API</a></li>
|
|
||||||
</ul>
|
</ul>
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Баланс{% endblock %}
|
{% block title %}{{ _("API") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h2>Учётная запись</h2>
|
<h2>{{ _("Account") }}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
{% include "default/id/_menu.html" %}
|
{% include "default/id/_menu.html" %}
|
||||||
|
@ -13,10 +13,9 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h3>API</h3>
|
<h3>{{ _("API") }}</h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
{% if g.errors['total'] > 0 %}
|
{% if g.errors['total'] > 0 %}
|
||||||
|
@ -28,26 +27,19 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<form action="{{ url_for('account.api_update') }}" method="post">
|
<form action="{{ url_for('account.api_update') }}" method="post">
|
||||||
<input type="hidden" name="method" value="secret_update" />
|
<input type="hidden" name="method" value="secret_update" />
|
||||||
<label>
|
<label for="email">{{ _("Email") }}</label>
|
||||||
Email
|
<input type="text" name="email" value="{{ session['email'] }}" id="email" disabled />
|
||||||
<input type="text" name="email" value="{{ session['email'] }}" disabled />
|
<label for="secret">{{ _("API-key") }}</label>
|
||||||
</label>
|
|
||||||
<label>
|
|
||||||
Ключ API
|
|
||||||
<input type="text" name="secret" value="{{ user_secret.secret }}" id="secret" />
|
<input type="text" name="secret" value="{{ user_secret.secret }}" id="secret" />
|
||||||
</label>
|
<label for="acl">IP</label>
|
||||||
<label for="acl">
|
|
||||||
IP
|
|
||||||
<input type="text" name="acl" value="{{ user_secret.acl }}" id="acl" />
|
<input type="text" name="acl" value="{{ user_secret.acl }}" id="acl" />
|
||||||
</label>
|
<input type="button" value="{{ _('Update API-key') }}" class="button small default" id="generate_secret" />
|
||||||
<input type="button" value="Обновить ключ API" class="button small default" id="generate_secret" />
|
<input type="submit" value="{{ _('Save changes') }}" class="button small success" />
|
||||||
<input type="submit" value="Сохранить изменения" class="button small success" />
|
|
||||||
|
<input type="radio" name="status" value="0" {% if user_secret.status == 0 or not user_secret.status %}checked="checked"{% endif %} /> {{ _("Inactive") }}
|
||||||
<input type="radio" name="status" value="0" {% if user_secret.status == 0 or not user_secret.status %}checked="checked"{% endif %} /> Неактивно
|
<input type="radio" name="status" value="1" {% if user_secret.status == 1 %}checked="checked"{% endif %} /> {{ _("Active") }}
|
||||||
<input type="radio" name="status" value="1" {% if user_secret.status == 1 %}checked="checked"{% endif %} /> Активно
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Баланс{% endblock %}
|
{% block title %}{{ _("Balance") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h2>Учётная запись</h2>
|
<h2>{{ _("Account") }}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
{% include "default/id/_menu.html" %}
|
{% include "default/id/_menu.html" %}
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h3>Баланс</h3>
|
<h3>{{ _("Balance") }}</h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -23,6 +23,32 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<form id="myCCForm" action="/order" method="post">
|
||||||
|
<input id="token" name="token" type="hidden" value="">
|
||||||
|
<div>
|
||||||
|
<label>
|
||||||
|
<span>Card Number</span>
|
||||||
|
</label>
|
||||||
|
<input id="ccNo" type="text" size="20" value="" autocomplete="off" required />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label>
|
||||||
|
<span>Expiration Date (MM/YYYY)</span>
|
||||||
|
</label>
|
||||||
|
<input type="text" size="2" id="expMonth" required />
|
||||||
|
<span> / </span>
|
||||||
|
<input type="text" size="2" id="expYear" required />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label>
|
||||||
|
<span>CVC</span>
|
||||||
|
</label>
|
||||||
|
<input id="cvv" size="4" type="text" value="" autocomplete="off" required />
|
||||||
|
</div>
|
||||||
|
<input type="submit" value="Submit Payment">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h4>Пополнить</h4>
|
<h4>Пополнить</h4>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
{% extends "default/_layout.html" %}
|
|
||||||
{% block title %}Биллинг{% endblock %}
|
|
||||||
{% block content %}
|
|
||||||
<div class="row">
|
|
||||||
<div class="large-12 columns">
|
|
||||||
<h1>Биллинг</h1>
|
|
||||||
</div>
|
|
||||||
<div class="large-12 columns">
|
|
||||||
{% include "default/id/_menu.html" %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="large-12 columns">
|
|
||||||
{% if action == "edit" %}
|
|
||||||
{% include "_billing_information_form.twig" %}
|
|
||||||
{% else %}
|
|
||||||
{% include "_billing_information.twig" %}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
|
@ -1,27 +0,0 @@
|
||||||
{% extends "default/_layout.html" %}
|
|
||||||
{% block title %}Биллинг{% endblock %}
|
|
||||||
{% block content %}
|
|
||||||
<div class="row">
|
|
||||||
<div class="large-12 columns">
|
|
||||||
<h2>Учётная запись</h2>
|
|
||||||
</div>
|
|
||||||
<div class="large-12 columns">
|
|
||||||
{% include "default/id/_menu.html" %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="large-12 columns">
|
|
||||||
<h3>Учётная запись</h3>
|
|
||||||
</div>
|
|
||||||
<div class="large-12 columns">
|
|
||||||
{% if g.errors['total'] > 0 %}
|
|
||||||
<div class="alert-box alert">
|
|
||||||
<ul>
|
|
||||||
{% for error in g.errors['items'] %}<li>{{ error }}</li>{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% include "default/id/_account_information_edit.html" %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Учётная запись{% endblock %}
|
{% block title %}{{ _('Account') }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h2>Учётная запись</h2>
|
<h2>{{ _('Account') }}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
{% include "default/id/_menu.html" %}
|
{% include "default/id/_menu.html" %}
|
||||||
|
|
|
@ -1,34 +1,28 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Вход{% endblock %}
|
{% block title %}{{ _("Login") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h3>Вход</h3>
|
<h2>{{ _("Login") }}</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
{% if g.errors['total'] > 0 %}
|
{% if g.errors['total'] > 0 %}
|
||||||
<div data-alert class="alert-box alert">
|
<div data-alert class="alert-box alert">
|
||||||
{% for error in g.errors['items'] %}
|
{% for error in g.errors['items'] %}{{ error }}{% endfor %}
|
||||||
{{ error }}
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form action="{{ url_for('account.login') }}" method="post">
|
<form action="{{ url_for('account.login') }}" method="post">
|
||||||
<input type="hidden" name="method" value="login" />
|
<input type="hidden" name="method" value="login" />
|
||||||
<label>
|
<label for="email">{{ _("Email") }}</label>
|
||||||
Адрес ел. почты
|
<input type="text" name="email" value="" placeholder="my@email.com" class="" id="email" />
|
||||||
<input type="text" name="email" value="" placeholder="my@email.com" class="" />
|
<label for="password">{{ _("Password") }}</label>
|
||||||
</label>
|
<input type="password" name="password" value="" placeholder="" class="" id="password" />
|
||||||
<label>
|
<input type="submit" value="{{ _('Login') }}" class="button success" />
|
||||||
Пароль
|
<a href="{{ url_for('account.password_reset') }}">{{ _("Reset password") }}</a>
|
||||||
<input type="password" name="password" value="" placeholder="" class="" />
|
|
||||||
</label>
|
|
||||||
<input type="submit" value="Войти" class="button success" />
|
|
||||||
<a href="{{ url_for('account.password_reset') }}">Сбросить пароль</a>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Сброс пароля{% endblock %}
|
{% block title %}{{ _("Password reset") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h2>Восстановление пароля</h2>
|
<h2>{{ _("Password reset") }}</h2>
|
||||||
{% if g.errors['total'] > 0 %}
|
{% if g.errors['total'] > 0 %}
|
||||||
<div data-alert class="alert-box alert">
|
<div data-alert class="alert-box alert">
|
||||||
{% for error in g.errors['items'] %}
|
{% for error in g.errors['items'] %}
|
||||||
|
@ -14,13 +14,11 @@
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form action="{{ url_for('account.password_reset') }}" method="post">
|
<form action="{{ url_for('account.password_reset') }}" method="post">
|
||||||
<label for="email">
|
<label for="email">{{ _("Email") }}</label>
|
||||||
Адрес е.почты
|
|
||||||
<input type="text" name="email" value="" id='email' />
|
<input type="text" name="email" value="" id='email' />
|
||||||
</label>
|
<input type="submit" value="{{ _('Send verify code') }}" class="button success" />
|
||||||
<input type="submit" value="Отправить проверочный код" class="button success" />
|
|
||||||
|
|
||||||
<a href="{{ url_for('account.password_reset_step2') }}">Есть проверочный код</a>
|
<a href="{{ url_for('account.password_reset_step2') }}">{{ _("I have a verification code") }}</a>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Сброс пароля{% endblock %}
|
{% block title %}{{ _("Password reset") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h2>Сброс пароля. Шаг №2</h2>
|
<h2>{{ _("Password reset") }}</h2>
|
||||||
{% if g.errors['total'] > 0 %}
|
{% if g.errors['total'] > 0 %}
|
||||||
<div data-alert class="alert-box alert">
|
<div data-alert class="alert-box alert">
|
||||||
{% for error in g.errors['items'] %}
|
{% for error in g.errors['items'] %}
|
||||||
|
@ -15,16 +15,13 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form action="{{ url_for('account.password_reset_step2') }}" method="post">
|
<form action="{{ url_for('account.password_reset_step2') }}" method="post">
|
||||||
<input type="hidden" name="recovery" value="1" />
|
<input type="hidden" name="recovery" value="1" />
|
||||||
<label for='email'>
|
<label for='email'>{{ _("Email") }}</label>
|
||||||
Адрес е.почты
|
|
||||||
<input type="text" name="email" value="" id='email' />
|
<input type="text" name="email" value="" id='email' />
|
||||||
</label>
|
<label for='code'>{{ _("Verification code") }}</label>
|
||||||
<label for='code'>
|
|
||||||
Введите проверочный код
|
|
||||||
<input type="text" name="recovery_code" value="" id='code' />
|
<input type="text" name="recovery_code" value="" id='code' />
|
||||||
</label>
|
<input type="submit" value="{{ _('Reset password') }}" class="button success" />
|
||||||
<input type="submit" value="Сбросить пароль" class="button success" />
|
|
||||||
<a href="{{ url_for('account.password_reset') }}">Получить код</a>
|
<a href="{{ url_for('account.password_reset') }}">{{ _("I have no verification code") }}</a>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Смена пароля{% endblock %}
|
{% block title %}{{ _("Update password") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h2>Учётная запись</h2>
|
<h2>{{ _("Account") }}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
{% include "default/id/_menu.html" %}
|
{% include "default/id/_menu.html" %}
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h3>Смена пароля</h3>
|
<h3>{{ _("Update password") }}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
{% if g.errors['total'] > 0 %}
|
{% if g.errors['total'] > 0 %}
|
||||||
|
@ -24,20 +24,14 @@
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form action="{{ url_for('account.password_update') }}" method="post">
|
<form action="{{ url_for('account.password_update') }}" method="post">
|
||||||
<label>
|
<label for="old_password">{{ _("Old password") }}</label>
|
||||||
Старый пароль
|
<input type="password" name="old_password" value="" id="old_password" />
|
||||||
<input type="password" name="old_password" value="" />
|
<label for="new_password">{{ _("New password") }}</label>
|
||||||
</label>
|
<input type="password" name="new_password" value="" id="new_password" />
|
||||||
<label>
|
<label for="new_password2">{{ _("New password (again)") }}</label>
|
||||||
Новый пароль
|
<input type="password" name="new_password_confirm" value="" id="new_password2" />
|
||||||
<input type="password" name="new_password" value="" />
|
<input type="submit" value="{{ _('Update password') }}" class="button success" />
|
||||||
</label>
|
<a href="{{ url_for('account.index') }}" class="button secondary">{{ _("Cancel") }}</a>
|
||||||
<label>
|
|
||||||
Новый пароль (повторно)
|
|
||||||
<input type="password" name="new_password_confirm" value="" />
|
|
||||||
</label>
|
|
||||||
<input type="submit" value="Сменить пароль" class="button success" />
|
|
||||||
<a href="{{ url_for('account.index') }}" class="button secondary">Отмена</a>
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
41
app/templates/default/id/registration.en.html
Normal file
41
app/templates/default/id/registration.en.html
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
{% extends "default/_layout.en.html" %}
|
||||||
|
|
||||||
|
{% block title %}Registration{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-6 columns">
|
||||||
|
<h2>Registration</h2>
|
||||||
|
{% if g.errors['total'] > 0 %}
|
||||||
|
<div id='errors'>
|
||||||
|
<ul>
|
||||||
|
{% for error in g.errors['items'] %}
|
||||||
|
<li>{{ error }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<form action="{{ url_for('account.registration') }}" method="post">
|
||||||
|
<input type="hidden" name="method" value="member_add" />
|
||||||
|
<label for="email">
|
||||||
|
E-mail address
|
||||||
|
<input type="text" name="email" value="" class="email" id="email" />
|
||||||
|
</label>
|
||||||
|
<label for="password">
|
||||||
|
Password
|
||||||
|
<input type="password" name="password" value="" id="password" />
|
||||||
|
</label>
|
||||||
|
<label for="password2">
|
||||||
|
Password (retry)
|
||||||
|
<input type="password" name="password2" value="" id="password2" />
|
||||||
|
</label>
|
||||||
|
{# <input type="checkbox" name="agree1" value="1" /> I agree <a href="">″Terms of Service″</a><br/>#}
|
||||||
|
{# <input type="checkbox" name="agree2" value="1" /> I agree <a href="">″Privacy Policy″</a><br/>#}
|
||||||
|
<input type="submit" value="Register" class="button success" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="large-6">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -1,37 +1,27 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.en.html" %}
|
||||||
|
|
||||||
{% block title %}Регистрация{% endblock %}
|
{% block title %}{{ _('Registration') }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-6 columns">
|
<div class="large-6 columns">
|
||||||
<h2>Регистрация</h2>
|
<h2>{{ _('Registration') }}</h2>
|
||||||
{% if g.errors['total'] > 0 %}
|
{% if g.errors['total'] > 0 %}
|
||||||
<div id='errors'>
|
<div id='errors'>
|
||||||
<ul>
|
<ul>
|
||||||
{% for error in g.errors['items'] %}
|
{% for error in g.errors['items'] %}<li>{{ error }}</li>{% endfor %}
|
||||||
<li>{{ error }}</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form action="{{ url_for('account.registration') }}" method="post">
|
<form action="{{ url_for('account.registration') }}" method="post">
|
||||||
<input type="hidden" name="method" value="member_add" />
|
<input type="hidden" name="method" value="member_add" />
|
||||||
<label for="email">
|
<label for="email">{{ _('Email') }}</label>
|
||||||
Адрес ел. почты
|
|
||||||
<input type="text" name="email" value="" class="email" id="email" />
|
<input type="text" name="email" value="" class="email" id="email" />
|
||||||
</label>
|
<label for="password">{{ _('Password') }}</label>
|
||||||
<label for="password">
|
|
||||||
Пароль
|
|
||||||
<input type="password" name="password" value="" id="password" />
|
<input type="password" name="password" value="" id="password" />
|
||||||
</label>
|
<label for="password2">{{ _('Password (again)') }}</label>
|
||||||
<label for="password2">
|
|
||||||
Пароль (повторно)
|
|
||||||
<input type="password" name="password2" value="" id="password2" />
|
<input type="password" name="password2" value="" id="password2" />
|
||||||
</label>
|
<input type="submit" value="{{ _('Sign up') }}" class="button success" />
|
||||||
{# <input type="checkbox" name="agree1" value="1" /> I agree <a href="">″Terms of Service″</a><br/>#}
|
|
||||||
{# <input type="checkbox" name="agree2" value="1" /> I agree <a href="">″Privacy Policy″</a><br/>#}
|
|
||||||
<input type="submit" value="Зарегистрироваться" class="button success" />
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="large-6">
|
<div class="large-6">
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}SSH-ключ{% endblock %}
|
{% block title %}{{ _("SSH-key") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h2>Учётная запись</h2>
|
<h2>{{ _("Account") }}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
{% include "default/id/_menu.html" %}
|
{% include "default/id/_menu.html" %}
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h3>SSH-ключ</h3>
|
<h3>{{ _("SSH-key") }}</h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -21,13 +21,13 @@
|
||||||
{% if sshkey.exists %}
|
{% if sshkey.exists %}
|
||||||
<form action="{{ url_for('account.sshkey_delete') }}" method="post">
|
<form action="{{ url_for('account.sshkey_delete') }}" method="post">
|
||||||
<input type="text" value="{{ sshkey.sshkey }}" disabled />
|
<input type="text" value="{{ sshkey.sshkey }}" disabled />
|
||||||
<input type="submit" value="Удалить ключ" class="button alert" />
|
<input type="submit" value="Delete" class="button alert" />
|
||||||
</form>
|
</form>
|
||||||
{% else %}
|
{% else %}
|
||||||
<form action="{{ url_for('account.sshkey') }}" method="post">
|
<form action="{{ url_for('account.sshkey') }}" method="post">
|
||||||
<label for="sshkey">SSH-ключ</label>
|
<label for="sshkey">SSH-key</label>
|
||||||
<input type="text" name="sshkey" value="" id="sshkey" class="form" />
|
<input type="text" name="sshkey" value="" id="sshkey" class="form" />
|
||||||
<input type="submit" value="Добавить ключ" class="button button-success" />
|
<input type="submit" value="Add" class="button button-success" />
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
11
app/templates/default/kb/index.en.html
Normal file
11
app/templates/default/kb/index.en.html
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
|
{% block title %}Knowledge base{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
{% filter markdown %}{{ kb_markdown }}{% endfilter %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -1,6 +1,6 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}База знаний{% endblock %}
|
{% block title %}{{ _("Knowledge base") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
11
app/templates/default/kb/index.ru.html
Normal file
11
app/templates/default/kb/index.ru.html
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
|
{% block title %}База знаний{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
{% filter markdown %}{{ kb_markdown }}{% endfilter %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
8
app/templates/default/payment/robokassa/success.en.html
Normal file
8
app/templates/default/payment/robokassa/success.en.html
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<html>
|
||||||
|
<head></head>
|
||||||
|
<body>
|
||||||
|
<h1>Success</h1>
|
||||||
|
<p>Balance successfully refilled.</p>
|
||||||
|
<p><a href='{{ url_for("account.billing") }}'>Account</a></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -3,6 +3,6 @@
|
||||||
<body>
|
<body>
|
||||||
<h1>Успешная оплата</h1>
|
<h1>Успешная оплата</h1>
|
||||||
<p>Баланс успешно пополнен.</p>
|
<p>Баланс успешно пополнен.</p>
|
||||||
<p><a href="{{ url_for("account.billing") }}">В личный кабинет</a></p>
|
<p><a href='{{ url_for("account.billing") }}'>В личный кабинет</a></p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
17
app/templates/default/settings/_menu.html
Normal file
17
app/templates/default/settings/_menu.html
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<table class="table table-bordered" width="100%">
|
||||||
|
<tr>
|
||||||
|
<td><a href="{{ url_for('settings.billing') }}">Billing</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="{{ url_for('settings.profile') }}">Profile</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="{{ url_for('settings.team') }}">Team</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="{{ url_for('settings.security') }}">Security</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="{{ url_for('settings.notifications') }}">Notifications</a></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
49
app/templates/default/settings/billing/_tab.creditcard.html
Normal file
49
app/templates/default/settings/billing/_tab.creditcard.html
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<form id="myCCForm" action="/order" method="post">
|
||||||
|
<input id="token" name="token" type="hidden" value="">
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<label>
|
||||||
|
<span>Card Number</span>
|
||||||
|
</label>
|
||||||
|
<input id="ccNo" type="text" size="20" value="" autocomplete="off" required />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-4 columns">
|
||||||
|
<label>
|
||||||
|
<span>Expiration month</span>
|
||||||
|
</label>
|
||||||
|
<select id="expMonth" required>
|
||||||
|
<option value="01">01</option>
|
||||||
|
<option value="02">02</option>
|
||||||
|
<option value="03">03</option>
|
||||||
|
<option value="04">04</option>
|
||||||
|
<option value="05">05</option>
|
||||||
|
<option value="06">06</option>
|
||||||
|
<option value="07">07</option>
|
||||||
|
<option value="08">08</option>
|
||||||
|
<option value="09">09</option>
|
||||||
|
<option value="10">10</option>
|
||||||
|
<option value="11">11</option>
|
||||||
|
<option value="12">12</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="large-4 columns">
|
||||||
|
<label>Expiration year</label>
|
||||||
|
<select name="expYear" id="expYear" required >
|
||||||
|
<option value="2016">2016</option>
|
||||||
|
<option value="2017">2017</option>
|
||||||
|
<option value="2018">2018</option>
|
||||||
|
<option value="2019">2019</option>
|
||||||
|
<option value="2020">2020</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="large-4 columns">
|
||||||
|
<label>
|
||||||
|
<span>CVC</span>
|
||||||
|
</label>
|
||||||
|
<input id="cvv" size="4" type="text" value="" autocomplete="off" required />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input type="submit" value="Submit Payment">
|
||||||
|
</form>
|
17
app/templates/default/settings/billing/_tab.paypal.html
Normal file
17
app/templates/default/settings/billing/_tab.paypal.html
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<form action="{{ url_for('payments.robokassa', action='process') }}" method="post">
|
||||||
|
<div class="large-6 columns">
|
||||||
|
<h4>PayPal Payment</h4>
|
||||||
|
<p>This is a one-time payment that will not recur. Payment may take up to 5 minutes to process.</p>
|
||||||
|
</div>
|
||||||
|
<div class="large-3 columns">
|
||||||
|
<select name="amount">
|
||||||
|
<option value="500">500 рублей</option>
|
||||||
|
<option value="1000">1000 рублей</option>
|
||||||
|
<option value="2000">2000 рублей</option>
|
||||||
|
<option value="5000">5000 рублей</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="large-3 columns">
|
||||||
|
<input type="submit" value="Оплатить" class="button postfix" />
|
||||||
|
</div>
|
||||||
|
</form>
|
17
app/templates/default/settings/billing/_tab.robokassa.html
Normal file
17
app/templates/default/settings/billing/_tab.robokassa.html
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<form action="{{ url_for('payments.robokassa', action='process') }}" method="post">
|
||||||
|
<div class="large-6 columns">
|
||||||
|
<h4>Robokassa Payment</h4>
|
||||||
|
<p>This is a one-time payment that will not recur. Payment may take up to 5 minutes to process.</p>
|
||||||
|
</div>
|
||||||
|
<div class="large-3 columns">
|
||||||
|
<select name="amount">
|
||||||
|
<option value="500">500 рублей</option>
|
||||||
|
<option value="1000">1000 рублей</option>
|
||||||
|
<option value="2000">2000 рублей</option>
|
||||||
|
<option value="5000">5000 рублей</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="large-3 columns">
|
||||||
|
<input type="submit" value="Оплатить" class="button postfix" />
|
||||||
|
</div>
|
||||||
|
</form>
|
149
app/templates/default/settings/billing/index.html
Normal file
149
app/templates/default/settings/billing/index.html
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
|
{% block title %}{{ _("Settings") }}{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h2>{{ _("Settings") }}</h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-3 columns">
|
||||||
|
{% include "default/settings/_menu.html" %}
|
||||||
|
</div>
|
||||||
|
<div class="large-9 columns">
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h3>{{ _("Billing") }}</h3>
|
||||||
|
</div>
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<p>Баланс: {{ user_balance }} рублей</p>
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h3>{{ _("Payment Methods") }}</h3>
|
||||||
|
<ul class="tabs" data-tab role="tablist">
|
||||||
|
<li class="tab-title active" role="presentation"><a href="#panel2-1" role="tab" tabindex="0" aria-selected="true" aria-controls="panel2-1">Credit card</a></li>
|
||||||
|
<!-- li class="tab-title" role="presentation"><a href="#panel2-2" role="tab" tabindex="0" aria-selected="false" aria-controls="panel2-2">Paypal</a></--li>
|
||||||
|
<li class="tab-title" role="presentation"><a href="#panel2-3" role="tab" tabindex="0" aria-selected="false" aria-controls="panel2-3">Robokassa</a></li -->
|
||||||
|
</ul>
|
||||||
|
<div class="tabs-content">
|
||||||
|
<section role="tabpanel" aria-hidden="false" class="content active" id="panel2-1">
|
||||||
|
{% include "default/settings/billing/_tab.creditcard.html" %}
|
||||||
|
</section>
|
||||||
|
<!-- section role="tabpanel" aria-hidden="true" class="content" id="panel2-2">
|
||||||
|
{% include "default/settings/billing/_tab.paypal.html" %}
|
||||||
|
</section>
|
||||||
|
<section role="tabpanel" aria-hidden="true" class="content" id="panel2-3">
|
||||||
|
{% if g.settings['PAY_ROBOKASSA_ENABLED'] == "1" %}
|
||||||
|
{% include "default/settings/billing/_tab.robokassa.html" %}
|
||||||
|
{% endif %}
|
||||||
|
</section -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h4>{{ _("Billing History") }}</h4>
|
||||||
|
<table width="100%">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>{{ _("ID") }}</th>
|
||||||
|
<th>{{ _("Amount") }}</th>
|
||||||
|
<th>{{ _("Date") }}</th>
|
||||||
|
<th>{{ _("Status") }}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% if history['total'] == 0 %}
|
||||||
|
<tr><td colspan="3">Нет записей.</td></tr>
|
||||||
|
{% else %}
|
||||||
|
{% for record in history['items'] %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ record['id'] }}</td>
|
||||||
|
<td>{{ record['amount'] }}</td>
|
||||||
|
<td>{{ record['created'] }}</td>
|
||||||
|
<td>
|
||||||
|
{% if record['status'] == "process" %}
|
||||||
|
<span class="label attention">{{ record['status'] }}</span>
|
||||||
|
{% elif record['status'] == "fail" %}
|
||||||
|
<span class="label error">{{ record['status'] }}</span>
|
||||||
|
{% elif record['status'] == "success" %}
|
||||||
|
<span class="label success">{{ record['status'] }}</span>
|
||||||
|
{% else %}
|
||||||
|
{{ record['status'] }}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="https://www.2checkout.com/checkout/api/2co.min.js"></script>
|
||||||
|
<script>
|
||||||
|
$(document).foundation({
|
||||||
|
tab: {
|
||||||
|
callback : function (tab) {
|
||||||
|
console.log(tab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
// Called when token created successfully.
|
||||||
|
var successCallback = function(data) {
|
||||||
|
var myForm = document.getElementById('myCCForm');
|
||||||
|
|
||||||
|
// Set the token as the value for the token input
|
||||||
|
myForm.token.value = data.response.token.token;
|
||||||
|
|
||||||
|
// IMPORTANT: Here we call `submit()` on the form element directly instead of using jQuery to prevent and infinite token request loop.
|
||||||
|
myForm.submit();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Called when token creation fails.
|
||||||
|
var errorCallback = function(data) {
|
||||||
|
if (data.errorCode === 200) {
|
||||||
|
tokenRequest();
|
||||||
|
} else {
|
||||||
|
alert(data.errorMsg);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var tokenRequest = function() {
|
||||||
|
// Setup token request arguments
|
||||||
|
var args = {
|
||||||
|
sellerId: "sandbox-seller-id",
|
||||||
|
publishableKey: "sandbox-publishable-key",
|
||||||
|
ccNo: $("#ccNo").val(),
|
||||||
|
cvv: $("#cvv").val(),
|
||||||
|
expMonth: $("#expMonth").val(),
|
||||||
|
expYear: $("#expYear").val()
|
||||||
|
};
|
||||||
|
|
||||||
|
// Make the token request
|
||||||
|
TCO.requestToken(successCallback, errorCallback, args);
|
||||||
|
};
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
// Pull in the public encryption key for our environment
|
||||||
|
TCO.loadPubKey('sandbox');
|
||||||
|
|
||||||
|
$("#myCCForm").submit(function(e) {
|
||||||
|
// Call our token request function
|
||||||
|
tokenRequest();
|
||||||
|
|
||||||
|
// Prevent form from submitting
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,21 @@
|
||||||
|
<form action="{{ url_for('settings.profile_edit') }}" method="post">
|
||||||
|
<input type="hidden" name="update_information" value="1">
|
||||||
|
<!-- BILLING BLOCK -->
|
||||||
|
<label for="fname">{{ _("First name") }}</label>
|
||||||
|
<input name="fname" id="fname" type="text" class="long-field" value="{{ user_details['fname'] }}" />
|
||||||
|
<label for="lname">{{ _("Last name") }}</label>
|
||||||
|
<input name="lname" id="lname" type="text" class="long-field" value="{{ user_details['lname'] }}" />
|
||||||
|
<label for="address">{{ _("Address") }}</label>
|
||||||
|
<input name="address" id="address" type="text" class="long-field" value="{{ user_details['address'] }}" />
|
||||||
|
<label for="city">{{ _("City") }}</label>
|
||||||
|
<input name="city" id="city" type="text" class="long-field" value="{{ user_details['city'] }}" />
|
||||||
|
<label for="country">{{ _("Country") }}</label>
|
||||||
|
<input name="country" id="country" type="text" class="long-field" value="{{ user_details['country'] }}" />
|
||||||
|
<label for="state">{{ _("Region") }}</label>
|
||||||
|
<input name="state" id="state" type="text" class="long-field" value="{{ user_details['state'] }}" />
|
||||||
|
<label for="zipcode">{{ _("ZIP") }}</label>
|
||||||
|
<input name="zipcode" id="zipcode" type="text" class="small-field" value="{{ user_details['zipcode'] }}" />
|
||||||
|
<input type="submit" value="{{ _('Save changes') }}" class="button success" />
|
||||||
|
|
||||||
|
<a href="{{ url_for('settings.profile') }}">{{ _("Cancel") }}</a>
|
||||||
|
</form>
|
|
@ -1,22 +1,15 @@
|
||||||
<label>Имя</label>
|
<label>{{ _("First name") }}</label>
|
||||||
<input type="text" class="long-field" value="{{ user_details['fname'] }}" disabled />
|
<input type="text" class="long-field" value="{{ user_details['fname'] }}" disabled />
|
||||||
|
<label>{{ _("Last name") }}</label>
|
||||||
<label>Фамилия</label>
|
|
||||||
<input type="text" class="long-field" value="{{ user_details['lname'] }}" disabled />
|
<input type="text" class="long-field" value="{{ user_details['lname'] }}" disabled />
|
||||||
|
<label>{{ _("Address") }}</label>
|
||||||
<label>Адрес</label>
|
|
||||||
<input type="text" class="long-field" value="{{ user_details['address'] }}" disabled />
|
<input type="text" class="long-field" value="{{ user_details['address'] }}" disabled />
|
||||||
|
<label>{{ _("City") }}</label>
|
||||||
<label>Город</label>
|
|
||||||
<input type="text" class="long-field" value="{{ user_details['city'] }}" disabled />
|
<input type="text" class="long-field" value="{{ user_details['city'] }}" disabled />
|
||||||
|
<label>{{ _("Country") }}</label>
|
||||||
<label>Страна</label>
|
|
||||||
<input type="text" class="long-field" value="{{ user_details['country'] }}" disabled />
|
<input type="text" class="long-field" value="{{ user_details['country'] }}" disabled />
|
||||||
|
<label>{{ _("Region") }}</label>
|
||||||
<label>Регион</label>
|
|
||||||
<input type="text" class="long-field" value="{{ user_details['state'] }}" disabled />
|
<input type="text" class="long-field" value="{{ user_details['state'] }}" disabled />
|
||||||
|
<label>{{ _("ZIP") }}</label>
|
||||||
<label>Индекс</label>
|
|
||||||
<input type="text" class="long-field" value="{{ user_details['zipcode'] }}" disabled />
|
<input type="text" class="long-field" value="{{ user_details['zipcode'] }}" disabled />
|
||||||
|
<a href="{{ url_for('settings.profile_edit') }}" class="button success">{{ _("Change") }}</a>
|
||||||
<a href="{{ url_for('account.edit') }}" class="button success">Изменить</a>
|
|
33
app/templates/default/settings/profile/edit.html
Normal file
33
app/templates/default/settings/profile/edit.html
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
|
{% block title %}{{ _("Settings") }}{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h2>{{ _("Settings") }}</h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-3 columns">
|
||||||
|
{% include "default/settings/_menu.html" %}
|
||||||
|
</div>
|
||||||
|
<div class="large-9 columns">
|
||||||
|
<div class="row">
|
||||||
|
{% if g.errors['total'] > 0 %}
|
||||||
|
<div class="alert-box alert">
|
||||||
|
<ul>
|
||||||
|
{% for error in g.errors['items'] %}<li>{{ error }}</li>{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h3>{{ _("Profile") }}</h3>
|
||||||
|
</div>
|
||||||
|
<div class="large-12 columns">
|
||||||
|
{% include "default/settings/profile/_account_information_edit.html" %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
26
app/templates/default/settings/profile/index.html
Normal file
26
app/templates/default/settings/profile/index.html
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
|
{% block title %}{{ _("Settings") }}{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h2>{{ _("Settings") }}</h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-3 columns">
|
||||||
|
{% include "default/settings/_menu.html" %}
|
||||||
|
</div>
|
||||||
|
<div class="large-9 columns">
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h3>{{ _("Profile") }}</h3>
|
||||||
|
</div>
|
||||||
|
<div class="large-12 columns">
|
||||||
|
{% include "default/settings/profile/_account_information_view.html" %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -1,26 +1,32 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Поддержка{% endblock %}
|
{% block title %}Support{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h2>Поддержка</h2>
|
<h2>Support</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="large-12 columns">
|
<div class="large-6 columns">
|
||||||
<form action="{{ url_for('support.index') }}" method="post">
|
<form action="{{ url_for('support.index') }}" method="post">
|
||||||
{% if not session['email'] %}
|
{% if not session['email'] %}
|
||||||
<label for="email">Адрес ел. почты</label>
|
<label for="email">Email</label>
|
||||||
<input type="text" name="email" id="email" value="" />
|
<input type="text" name="email" id="email" value="" />
|
||||||
{% else %}
|
{% else %}
|
||||||
<input type="hidden" name="email" value="{{ session['email'] }}" />
|
<input type="hidden" name="email" value="{{ session['email'] }}" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<label for="title">Заголовок</label>
|
<label for="title">Title</label>
|
||||||
<input type="text" name="title" id="title" value="">
|
<input type="text" name="title" id="title" value="">
|
||||||
<label for="message">Сообщение</label>
|
<label for="message">Message</label>
|
||||||
<textarea rows="14" name="message" id="message"></textarea>
|
<textarea rows="14" name="message" id="message"></textarea>
|
||||||
<input type="submit" class="button success" value="Отправить" />
|
<input type="submit" class="button success" value="Send" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="large-6 columns">
|
||||||
|
<h3>{{ _("Contacts") }}</h3>
|
||||||
|
<p>Email: support@puluttar.com</p>
|
||||||
|
<h3>Address</h3>
|
||||||
|
<p>127322, Milashenkova st. 18, of. 256, Moscow</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -1,14 +1,14 @@
|
||||||
{% extends "default/_layout.html" %}
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
{% block title %}Спасибо{% endblock %}
|
{% block title %}{{ _("Thank You!") }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<h2>Спасибо!</h2>
|
<h2>{{ _("Thank you!") }}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="large-12 columns">
|
<div class="large-12 columns">
|
||||||
<p>Спасибо за обращение в поддержку. Мы ответим вам в кротчайшее время.</p>
|
<p>{{ _("Thank you for contacting support. We will reply you as soon as possible.") }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
43
app/templates/default/tasks/index.en.html
Normal file
43
app/templates/default/tasks/index.en.html
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{% extends "default/_layout.html" %}
|
||||||
|
|
||||||
|
{% block title %}Tasks{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<h3>Tasks</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="large-12 columns">
|
||||||
|
<table width='100%'>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Id</th>
|
||||||
|
<th>Date</th>
|
||||||
|
<th>Task</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% if tasks.total == 0 %}
|
||||||
|
<tr>
|
||||||
|
<td colspan="5">No any tasks.</td>
|
||||||
|
</tr>
|
||||||
|
{% else %}
|
||||||
|
{% for task in tasks['items'] %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ task.id }}</td>
|
||||||
|
<td>{{ task.created }}</td>
|
||||||
|
<td>
|
||||||
|
{% if task.details.action == 'create' %}
|
||||||
|
{{ task.details.action }} container:{{ task.details.container_id }}
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -1,10 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head lang="en">
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title></title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>404</h1>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
12
kb/README.md
12
kb/README.md
|
@ -1,3 +1,13 @@
|
||||||
# База знаний
|
# База знаний
|
||||||
|
|
||||||
Скоро...
|
## Обзие вопросы
|
||||||
|
|
||||||
|
- Как создать контейнер
|
||||||
|
- Как оплатить
|
||||||
|
-
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
- Описание
|
||||||
|
- Запросы
|
||||||
|
- Коды ошибок
|
||||||
|
|
Loading…
Add table
Reference in a new issue