rebrending

This commit is contained in:
Vyacheslav Anzhiganov 2016-01-03 06:52:57 +03:00
parent a16c55a609
commit ddde3b08a7
67 changed files with 1144 additions and 1108 deletions

View file

@ -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
View file

@ -0,0 +1 @@
__author__ = 'vanzhiganov'

View file

@ -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)

View file

@ -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')

View file

@ -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()

View file

@ -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

View 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')

View file

@ -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
View file

@ -0,0 +1 @@
__author__ = 'vanzhiganov'

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -2,21 +2,15 @@
<div class="row"> <div class="row">
<div class="large-4 columns"> <div class="large-4 columns">
<p> <p>
GoCloud &copy; Все права защищены. {{ _("Puluttar &copy; 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>

View file

@ -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>

View file

@ -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>

View 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 %}

View file

@ -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>

View 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 %}

View file

@ -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>

View 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%">&nbsp;</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 %}

View file

@ -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%">&nbsp;</th> <th width="10%">&nbsp;</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'] %}
@ -44,22 +46,22 @@
{{ '%0.2f' | format(size_gb|float) }}GB {{ '%0.2f' | format(size_gb|float) }}GB
</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 %}

View 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 %}

View file

@ -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 %}

View 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 %}

View file

@ -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">

View 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 %}

View 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 %}

View file

@ -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 %}

View file

@ -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> <p id="sub">{{ _("Linux containers from $3.50 per month") }}</p>
<a href="{{ url_for('account.registration') }}" class="button alert">Создать контейнер</a> <p>
</p> <a href="{{ url_for('account.registration') }}" class="button alert">{{ _("Create container") }}</a>
</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>
</ul> <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>
</div>
</div>
</div> </div>
<div class="large-4 columns"> <div class="large-4 columns">
<h2>Тарификация </h2> <ul class="pricing-table">
<ul> <li class="title">Standard</li>
<li>Включено 2 Гб дискового пространства</li> <li class="price">from $3.50/mo</li>
<li>Дисковое пространство - 100 рублей в месяц за каждые 10Гб</li> <li class="description">Auto scaling LXC container</li>
</ul> <li class="bullet-item">5GB Storage</li>
<h2>Способы оплаты</h2> <li class="bullet-item">512MB Memory</li>
<ul> <li class="bullet-item">Unlimited bandwidth</li>
<li>Visa и MasterCard</li> <li class="cta-button"><a class="button" href="#">Get started</a></li>
<li>WebMoney</li>
<li>Яндекс.Деньги</li>
<li>Robokassa</li>
</ul> </ul>
</div> </div>
<div class="large-4 columns"> <!-- 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>
<!-- div class="row" data-equalizer>
<div class="large-3 columns panel" data-equalizer-watch style="background-color: #cc0000; color: #ffffff">
Advertious.com
</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 %}

View file

@ -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>

View file

@ -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>

View file

@ -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> <input type="text" name="secret" value="{{ user_secret.secret }}" id="secret" />
<label> <label for="acl">IP</label>
Ключ API <input type="text" name="acl" value="{{ user_secret.acl }}" id="acl" />
<input type="text" name="secret" value="{{ user_secret.secret }}" id="secret" /> <input type="button" value="{{ _('Update API-key') }}" class="button small default" id="generate_secret" />
</label> <input type="submit" value="{{ _('Save changes') }}" class="button small success" />
<label for="acl"> &nbsp;&nbsp;&nbsp;
IP <input type="radio" name="status" value="0" {% if user_secret.status == 0 or not user_secret.status %}checked="checked"{% endif %} /> {{ _("Inactive") }}
<input type="text" name="acl" value="{{ user_secret.acl }}" id="acl" /> <input type="radio" name="status" value="1" {% if user_secret.status == 1 %}checked="checked"{% endif %} /> {{ _("Active") }}
</label>
<input type="button" value="Обновить ключ API" class="button small default" id="generate_secret" />
<input type="submit" value="Сохранить изменения" class="button small success" />
&nbsp;
<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 %} /> Активно
</form> </form>
</div> </div>
</div> </div>

View file

@ -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>

View file

@ -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 %}

View file

@ -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 %}

View file

@ -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" %}

View file

@ -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>

View file

@ -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' /> <input type="submit" value="{{ _('Send verify code') }}" class="button success" />
</label>
<input type="submit" value="Отправить проверочный код" class="button success" />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
<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>

View file

@ -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 for='code'>{{ _("Verification code") }}</label>
</label> <input type="text" name="recovery_code" value="" id='code' />
<label for='code'> <input type="submit" value="{{ _('Reset password') }}" class="button success" />
Введите проверочный код &nbsp;&nbsp;&nbsp;
<input type="text" name="recovery_code" value="" id='code' /> <a href="{{ url_for('account.password_reset') }}">{{ _("I have no verification code") }}</a>
</label>
<input type="submit" value="Сбросить пароль" class="button success" />
<a href="{{ url_for('account.password_reset') }}">Получить код</a>
</form> </form>
</div> </div>
</div> </div>

View file

@ -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>

View 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="">&Prime;Terms of Service&Prime;</a><br/>#}
{# <input type="checkbox" name="agree2" value="1" /> I agree <a href="">&Prime;Privacy Policy&Prime;</a><br/>#}
<input type="submit" value="Register" class="button success" />
</form>
</div>
<div class="large-6">
&nbsp;
</div>
</div>
{% endblock %}

View file

@ -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 for="password">{{ _('Password') }}</label>
</label> <input type="password" name="password" value="" id="password" />
<label for="password"> <label for="password2">{{ _('Password (again)') }}</label>
Пароль <input type="password" name="password2" value="" id="password2" />
<input type="password" name="password" value="" id="password" /> <input type="submit" value="{{ _('Sign up') }}" class="button success" />
</label>
<label for="password2">
Пароль (повторно)
<input type="password" name="password2" value="" id="password2" />
</label>
{# <input type="checkbox" name="agree1" value="1" /> I agree <a href="">&Prime;Terms of Service&Prime;</a><br/>#}
{# <input type="checkbox" name="agree2" value="1" /> I agree <a href="">&Prime;Privacy Policy&Prime;</a><br/>#}
<input type="submit" value="Зарегистрироваться" class="button success" />
</form> </form>
</div> </div>
<div class="large-6"> <div class="large-6">

View file

@ -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>

View 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 %}

View file

@ -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">

View 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 %}

View 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>

View file

@ -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>

View 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>

View 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>

View 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>

View 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>

View 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 %}

View file

@ -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" />
&nbsp;&nbsp;&nbsp;
<a href="{{ url_for('settings.profile') }}">{{ _("Cancel") }}</a>
</form>

View file

@ -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>

View 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 %}

View 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 %}

View file

@ -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 %}

View file

@ -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 %}

View 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 %}

View file

@ -1,10 +0,0 @@
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>404</h1>
</body>
</html>

View file

@ -1,3 +1,13 @@
# База знаний # База знаний
Скоро... ## Обзие вопросы
- Как создать контейнер
- Как оплатить
-
## API
- Описание
- Запросы
- Коды ошибок