|
|
e5b0ac |
|
|
|
e5b0ac |
import exception
|
|
|
e5b0ac |
from generator.form import Form
|
|
|
e5b0ac |
|
|
|
e5b0ac |
from page.page import Page
|
|
|
e5b0ac |
|
|
|
e5b0ac |
|
|
|
e5b0ac |
class RepoCreatePage(Page):
|
|
|
e5b0ac |
def process(self, request, path, prevpath):
|
|
|
e5b0ac |
user = request.answer.objects['user']
|
|
|
e5b0ac |
if path:
|
|
|
e5b0ac |
raise exception.HttpNotFound()
|
|
|
e146e6 |
if not request.model.repositories.can_create(user):
|
|
|
e5b0ac |
raise exception.HttpNotFound()
|
|
|
e5b0ac |
answer = request.answer
|
|
|
572081 |
answer.add_uipath_entry( answer.t('Create repository'), prevpath )
|
|
|
e5b0ac |
|
|
|
e5b0ac |
form = Form(request)
|
|
|
572081 |
form.begin('', 'repo.create')
|
|
|
e5b0ac |
form.add_hidden('user_id', user.id)
|
|
|
e5b0ac |
form.add_select('type:', 'type', { k: v.name for k, v in request.server.repotypes.items() })
|
|
|
e5b0ac |
form.add_input('name:', 'name', 'text')
|
|
|
e5b0ac |
form.add_input('title:', 'title', 'text')
|
|
|
e5b0ac |
form.add_textarea('description:', 'description')
|
|
|
e5b0ac |
form.add_submit()
|
|
|
e5b0ac |
form.end()
|
|
|
e5b0ac |
answer.content += form.content
|
|
|
e5b0ac |
|
|
|
e5b0ac |
return answer.complete_content()
|
|
|
e5b0ac |
|
|
|
e5b0ac |
|
|
|
e5b0ac |
class RepoPage(Page):
|
|
|
e5b0ac |
def __init__(self):
|
|
|
e5b0ac |
super().__init__()
|
|
|
e5b0ac |
self.view = RepoViewPage()
|
|
|
e5b0ac |
|
|
|
e5b0ac |
def process(self, request, path, prevpath):
|
|
|
e5b0ac |
if not path:
|
|
|
e5b0ac |
raise exception.HttpNotFound()
|
|
|
e5b0ac |
|
|
|
572081 |
answer = request.answer
|
|
|
572081 |
|
|
|
e5b0ac |
user = request.answer.objects['user']
|
|
|
e146e6 |
repo = request.model.repositories.get_by_name(user, str(path[0]))
|
|
|
e5b0ac |
if not repo:
|
|
|
e5b0ac |
raise exception.HttpNotFound()
|
|
|
e5b0ac |
|
|
|
572081 |
answer.objects['repo'] = repo
|
|
|
572081 |
answer.add_uipath_entry( repo.title, prevpath + [repo.name] )
|
|
|
e5b0ac |
return self.view.sub_process(request, path, prevpath)
|
|
|
e5b0ac |
|
|
|
e5b0ac |
|
|
|
e5b0ac |
class RepoViewPage(Page):
|
|
|
e5b0ac |
def __init__(self):
|
|
|
e5b0ac |
super().__init__()
|
|
|
e5b0ac |
self.edit = RepoUpdatePage()
|
|
|
e5b0ac |
self.delete = RepoDeletePage()
|
|
|
e5b0ac |
|
|
|
e5b0ac |
def process(self, request, path, prevpath):
|
|
|
e5b0ac |
repo = request.answer.objects['repo']
|
|
|
e5b0ac |
|
|
|
e5b0ac |
answer = request.answer
|
|
|
e5b0ac |
|
|
|
e5b0ac |
if path:
|
|
|
e5b0ac |
if path[0] == 'edit':
|
|
|
e5b0ac |
return self.edit.sub_process(request, path, prevpath)
|
|
|
e5b0ac |
if path[0] == 'delete':
|
|
|
e5b0ac |
return self.delete.sub_process(request, path, prevpath)
|
|
|
e5b0ac |
raise exception.HttpNotFound()
|
|
|
e5b0ac |
|
|
|
e5b0ac |
answer.content += '' + answer.te(repo.repotype.name) + ' \n'
|
|
|
e5b0ac |
answer.content += '' + answer.e(repo.name) + ' \n'
|
|
|
e5b0ac |
answer.content += '' + answer.e(repo.description) + ' \n'
|
|
|
572081 |
answer.content += '' + answer.te('clone url:') + ' ' \
|
|
|
572081 |
+ request.protocol \
|
|
|
572081 |
+ request.domain \
|
|
|
a30080 |
+ request.prefix \
|
|
|
572081 |
+ '/repo/' \
|
|
|
572081 |
+ repo.gen_subpath() \
|
|
|
572081 |
+ '\n'
|
|
|
e5b0ac |
|
|
|
e5b0ac |
if repo.can_update():
|
|
|
e5b0ac |
answer.content += '' + self.make_link(answer, prevpath + ['edit'], 'Edit repository') + ' \n'
|
|
|
e5b0ac |
|
|
|
e5b0ac |
return answer.complete_content()
|
|
|
e5b0ac |
|
|
|
e5b0ac |
|
|
|
e5b0ac |
class RepoUpdatePage(Page):
|
|
|
e5b0ac |
def process(self, request, path, prevpath):
|
|
|
e5b0ac |
if path:
|
|
|
e5b0ac |
raise exception.HttpNotFound()
|
|
|
e5b0ac |
|
|
|
e5b0ac |
answer = request.answer
|
|
|
e5b0ac |
repo = answer.objects['repo']
|
|
|
e5b0ac |
if not repo.can_update():
|
|
|
e5b0ac |
raise exception.HttpNotFound()
|
|
|
e5b0ac |
|
|
|
61454c |
answer.add_uipath_entry( answer.t('Edit repository'), prevpath )
|
|
|
e5b0ac |
|
|
|
e5b0ac |
form = Form(request)
|
|
|
572081 |
form.begin('Details', 'repo.update')
|
|
|
e5b0ac |
form.add_hidden('repository_id', repo.id)
|
|
|
e5b0ac |
form.add_input('title:', 'title', 'text', repo.title)
|
|
|
e5b0ac |
form.add_textarea('description:', 'description', repo.description)
|
|
|
e5b0ac |
form.add_submit()
|
|
|
e5b0ac |
form.end()
|
|
|
e5b0ac |
answer.content += form.content
|
|
|
e146e6 |
|
|
|
e146e6 |
user_rights = repo.get_user_rights()
|
|
|
e146e6 |
for i in user_rights:
|
|
|
e146e6 |
form = Form(request)
|
|
|
e146e6 |
form.begin('Rights', 'repo.setuserright')
|
|
|
e146e6 |
form.add_hidden('repository_id', repo.id)
|
|
|
e146e6 |
form.add_hidden('allowed', '')
|
|
|
e146e6 |
form.add_hidden('all_users', '' if i.user_id else '1')
|
|
|
e146e6 |
form.add_hidden('user_id', i.user_id)
|
|
|
e146e6 |
form.add_hidden('mode', i.mode)
|
|
|
e146e6 |
if i.user_id == 0:
|
|
|
e146e6 |
form.add_field_raw('all users', '')
|
|
|
e146e6 |
else:
|
|
|
e146e6 |
user = request.model.users.get_by_id(i.user_id)
|
|
|
e146e6 |
login = user.login if user else ''
|
|
|
e146e6 |
form.add_field_raw('login:', answer.e(login))
|
|
|
e146e6 |
form.add_field_raw('mode:', answer.te(i.mode))
|
|
|
e146e6 |
form.add_submit('Delete')
|
|
|
e146e6 |
form.end()
|
|
|
e146e6 |
answer.content += form.content
|
|
|
e146e6 |
|
|
|
e146e6 |
form = Form(request)
|
|
|
e146e6 |
form.begin('Add rights', 'repo.setuserright')
|
|
|
e146e6 |
form.add_hidden('repository_id', repo.id)
|
|
|
e146e6 |
form.add_hidden('allowed', 1)
|
|
|
e146e6 |
form.add_checkbox('for all users:', 'all_users')
|
|
|
e146e6 |
form.add_input('login:', 'user_login', 'text')
|
|
|
e146e6 |
form.add_select('mode:', 'mode', {
|
|
|
e146e6 |
request.model.repositories.READ : request.model.repositories.READ,
|
|
|
e146e6 |
request.model.repositories.REPOWRITE : request.model.repositories.REPOWRITE })
|
|
|
e146e6 |
form.add_submit()
|
|
|
e146e6 |
form.end()
|
|
|
e146e6 |
answer.content += form.content
|
|
|
e5b0ac |
|
|
|
e5b0ac |
if repo.can_delete() and prevpath:
|
|
|
e5b0ac |
url = request.get_urlpath_escaped(prevpath[:-1] + ['delete'])
|
|
|
e5b0ac |
form = Form(request)
|
|
|
e5b0ac |
form.content += '<form action="' + url + '" method="GET">' + form.GROUP_BEGIN</form>
|
|
|
e5b0ac |
form.content += form.title('Deletion')
|
|
|
e5b0ac |
form.add_submit('Delete repository')
|
|
|
e5b0ac |
form.end()
|
|
|
e5b0ac |
answer.content += form.content
|
|
|
e5b0ac |
|
|
|
e5b0ac |
return answer.complete_content()
|
|
|
e5b0ac |
|
|
|
e5b0ac |
|
|
|
e5b0ac |
class RepoDeletePage(Page):
|
|
|
e5b0ac |
def process(self, request, path, prevpath):
|
|
|
e5b0ac |
if path:
|
|
|
e5b0ac |
raise exception.HttpNotFound()
|
|
|
e5b0ac |
|
|
|
e5b0ac |
answer = request.answer
|
|
|
e5b0ac |
repo = answer.objects['repo']
|
|
|
e5b0ac |
if not repo.can_delete():
|
|
|
e5b0ac |
raise exception.HttpNotFound()
|
|
|
e5b0ac |
|
|
|
572081 |
answer.add_uipath_entry( answer.t('Delete repository'), prevpath )
|
|
|
572081 |
|
|
|
e5b0ac |
form = Form(request)
|
|
|
572081 |
form.begin('', 'repo.delete')
|
|
|
e5b0ac |
form.add_hidden('repository_id', repo.id)
|
|
|
e5b0ac |
form.content += '' + answer.te(repo.repotype.name) + ' \n'
|
|
|
e5b0ac |
form.content += '' + answer.e(repo.name) + ' \n'
|
|
|
e5b0ac |
form.content += '' + answer.e(repo.title) + ' \n'
|
|
|
e5b0ac |
form.content += '' + answer.e(repo.description) + ' \n'
|
|
|
e5b0ac |
form.content += '' + answer.e(repo.description) + ' \n'
|
|
|
e5b0ac |
form.content += '' + request.protocol + request.domain + '/repo/' + repo.gen_subpath() + ' \n'
|
|
|
572081 |
form.content += '' + answer.te('Do you really want do delete repository?') + ' \n'
|
|
|
e5b0ac |
form.add_submit('Confirm delete')
|
|
|
e5b0ac |
form.end()
|
|
|
e5b0ac |
answer.content += form.content
|
|
|
572081 |
|
|
|
e5b0ac |
return answer.complete_content()
|
|
|
e5b0ac |
|
|
|
e5b0ac |
|
|
|
e5b0ac |
class RepoListPage(Page):
|
|
|
e5b0ac |
def process(self, request, path, prevpath):
|
|
|
e5b0ac |
user = request.answer.objects['user']
|
|
|
e5b0ac |
if path:
|
|
|
e5b0ac |
raise exception.HttpNotFound()
|
|
|
e5b0ac |
if not prevpath:
|
|
|
e5b0ac |
raise exception.HttpNotFound()
|
|
|
e5b0ac |
|
|
|
e5b0ac |
repositories = request.model.repositories.get_list(user)
|
|
|
e5b0ac |
|
|
|
e5b0ac |
answer = request.answer
|
|
|
572081 |
answer.add_uipath_entry( answer.t('Repositories'), prevpath )
|
|
|
e5b0ac |
|
|
|
e5b0ac |
for repo in repositories:
|
|
|
e5b0ac |
url = request.get_urlpath_escaped(prevpath[:-1] + ['repo', str(repo.name)])
|
|
|
e5b0ac |
answer.content += '' \
|
|
|
e5b0ac |
+ answer.e(repo.name) + ' ' \
|
|
|
e5b0ac |
+ answer.e(repo.title) + '\n'
|
|
|
e5b0ac |
|
|
|
e146e6 |
if request.model.repositories.can_create(user):
|
|
|
e5b0ac |
answer.content += '' + self.make_link(answer, prevpath[:-1] + ['repo_create'], 'Create repository') + ' \n'
|
|
|
e5b0ac |
|
|
|
e5b0ac |
return answer.complete_content()
|
|
|
e5b0ac |
|
|
|
e5b0ac |
|