1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-19 01:44:13 +00:00

Update group wiki

This commit is contained in:
zhengxie
2013-03-08 19:34:53 +08:00
parent 749a283768
commit 30a4eaf53b
5 changed files with 64 additions and 30 deletions

View File

@@ -12,7 +12,7 @@
<ul class="tabnav-tabs"> <ul class="tabnav-tabs">
<li class="tabnav-tab"><a href="{% url 'group_info' group.id %}">{% trans "Libraries" %}</a></li> <li class="tabnav-tab"><a href="{% url 'group_info' group.id %}">{% trans "Libraries" %}</a></li>
<li class="tabnav-tab"><a href="{% url 'group_discus' group.id %}">{% trans "Discussions" %}</a></li> <li class="tabnav-tab"><a href="{% url 'group_discus' group.id %}">{% trans "Discussions" %}</a></li>
<li class="tabnav-tab tabnav-tab-cur">{% trans "Wiki" %}</li> <li class="tabnav-tab tabnav-tab-cur"><a href="{% url 'group_wiki' group.id %}">{% trans "Wiki" %}</a></li>
{% if is_staff %} {% if is_staff %}
<li class="tabnav-tab"><a href="{% url 'pubuser' %}">{% trans "Admin" %}</a></li> <li class="tabnav-tab"><a href="{% url 'pubuser' %}">{% trans "Admin" %}</a></li>
{% endif %} {% endif %}
@@ -23,24 +23,31 @@
</div> </div>
</div> </div>
<button id="page-create" class="fright">{% trans "New Page" %}</button> {% if not wiki_exists %}
<button id="page-edit" class="fright">{% trans "Edit Page" %}</button> <a href="{% url 'group_wiki_create' group.id %}">{% trans "Create Wiki" %}</a>
{% else %}
<button id="page-create" class="fright">{% trans "New Page" %}</button>
<a href="{% url 'group_wiki_create' group.id %}">{% trans "Create Wiki" %}</a> {% if wiki_page_missing %}
<p>Seems this page is deleted by others, you can create a new page by clicking "New Page" button. </p>
{% else %}
<button id="page-edit" class="fright">{% trans "Edit Page" %}</button>
<div id="wiki-area" class="article"> <div id="wiki-area" class="article">
<h1>{{ page }}</h1> <h1>{{ page }}</h1>
<div id="wiki-content"></div> <div id="wiki-content"></div>
</div> </div>
{% endif%}
<form id="page-create-form" action="{% url 'group_wiki_page_new' group.id %}" method="post" class="hide"> <form id="page-create-form" action="{% url 'group_wiki_page_new' group.id %}" method="post" class="hide">
<h3>{% trans "New Page"%}</h3> <h3>{% trans "New Page"%}</h3>
<label>{% trans "Name"%}</label><br/> <label>{% trans "Name"%}</label><br/>
<input id="page-name" type="text" name="page_name" value="" maxlength="{{max_file_name}}"/><br /> <input id="page-name" type="text" name="page_name" value="" maxlength="{{max_file_name}}"/><br />
<p class="error hide"></p> <p class="error hide"></p>
<input type="submit" id="page-create-submit" value="{% trans "Submit"%}" class="submit"/> <input type="submit" id="page-create-submit" value="{% trans "Submit"%}" class="submit"/>
</form> </form>
{% endif %}
{% endblock %} {% endblock %}
@@ -59,10 +66,10 @@
{% block extra_script %} {% block extra_script %}
<script type="text/javascript" src="{{MEDIA_URL}}js/showdown.js"></script> <script type="text/javascript" src="{{MEDIA_URL}}js/showdown.js"></script>
<script type="text/javascript"> <script type="text/javascript">
{% if wiki_exists %}
var converter = new Showdown.converter(); var converter = new Showdown.converter();
$('#wiki-content').html(converter.makeHtml('{{ content|escapejs }}')).children(':first').css('margin-top', '0'); $('#wiki-content').html(converter.makeHtml('{{ content|escapejs }}')).children(':first').css('margin-top', '0');
<!-- wiki page operation -->
$('#page-create').click(function() { $('#page-create').click(function() {
$('#page-create-form').modal({appendTo: '#main', autoResize: true}); $('#page-create-form').modal({appendTo: '#main', autoResize: true});
}) })
@@ -70,7 +77,7 @@ $('#page-create').click(function() {
$('#page-edit').click(function() { $('#page-edit').click(function() {
window.open("{% url 'group_wiki_page_edit' group.id page %}") window.open("{% url 'group_wiki_page_edit' group.id page %}")
}) })
{% endif %}
</script> </script>
{% endblock %} {% endblock %}

View File

@@ -10,7 +10,7 @@ urlpatterns = patterns('',
url(r'^(?P<group_id>\d+)/$', group_info, name='group_info'), url(r'^(?P<group_id>\d+)/$', group_info, name='group_info'),
url(r'^(?P<group_id>\d+)/discus/$', group_discus, name='group_discus'), url(r'^(?P<group_id>\d+)/discus/$', group_discus, name='group_discus'),
url(r'^(?P<group_id>\d+)/wiki/$', group_wiki, name='group_wiki'), url(r'^(?P<group_id>\d+)/wiki/$', group_wiki, name='group_wiki'),
url(r'^(?P<group_id>\d+)/wiki/(?P<page_name>[^/]+)$', group_wiki, name='group_wiki'), url(r'^(?P<group_id>\d+)/wiki/(?P<page_name>[^/]+)/$', group_wiki, name='group_wiki'),
url(r'^(?P<group_id>\d+)/wiki_create/$', group_wiki_create, name='group_wiki_create'), url(r'^(?P<group_id>\d+)/wiki_create/$', group_wiki_create, name='group_wiki_create'),
url(r'^(?P<group_id>\d+)/wiki_page_new/$', group_wiki_page_new, name='group_wiki_page_new'), url(r'^(?P<group_id>\d+)/wiki_page_new/$', group_wiki_page_new, name='group_wiki_page_new'),
url(r'^(?P<group_id>\d+)/wiki_page_edit/(?P<page_name>[^/]+)$', group_wiki_page_edit, name='group_wiki_page_edit'), url(r'^(?P<group_id>\d+)/wiki_page_edit/(?P<page_name>[^/]+)$', group_wiki_page_edit, name='group_wiki_page_edit'),

View File

@@ -23,7 +23,8 @@ from seaserv import ccnet_rpc, ccnet_threaded_rpc, seafserv_threaded_rpc, \
get_repo, get_group_repos, check_group_staff, get_commits, is_group_user, \ get_repo, get_group_repos, check_group_staff, get_commits, is_group_user, \
get_personal_groups_by_user, get_group, get_group_members, \ get_personal_groups_by_user, get_group, get_group_members, \
get_personal_groups, create_org_repo, get_org_group_repos, \ get_personal_groups, create_org_repo, get_org_group_repos, \
get_org_groups_by_user, check_permission, is_passwd_set, unshare_group_repo get_org_groups_by_user, check_permission, is_passwd_set, \
unshare_group_repo, get_file_id_by_path
from pysearpc import SearpcError from pysearpc import SearpcError
from decorators import group_staff_required from decorators import group_staff_required
@@ -1088,6 +1089,11 @@ def group_discus(request, group_id):
}, context_instance=RequestContext(request)); }, context_instance=RequestContext(request));
class WikiDoesNotExist(Exception):
pass
class WikiPageMissing(Exception):
pass
def find_wiki_repo(request, group_id): def find_wiki_repo(request, group_id):
repos = get_group_repos(group_id, request.user.username) repos = get_group_repos(group_id, request.user.username)
@@ -1096,9 +1102,10 @@ def find_wiki_repo(request, group_id):
return repo return repo
return None return None
def get_file_url(repo_id, path, filename): def get_file_url(repo_id, path, filename):
obj_id = seafserv_threaded_rpc.get_file_id_by_path(repo_id, path) obj_id = get_file_id_by_path(repo_id, path)
if not obj_id:
raise WikiPageMissing
access_token = seafserv_rpc.web_get_access_token(repo_id, obj_id, access_token = seafserv_rpc.web_get_access_token(repo_id, obj_id,
'view', '') 'view', '')
url = gen_file_get_url(access_token, filename) url = gen_file_get_url(access_token, filename)
@@ -1107,31 +1114,34 @@ def get_file_url(repo_id, path, filename):
def get_wiki_page(request, group_id, page_name): def get_wiki_page(request, group_id, page_name):
import urllib2 import urllib2
repo = find_wiki_repo(request, group_id) repo = find_wiki_repo(request, group_id)
if not repo:
raise WikiDoesNotExist
path = "/" + page_name + ".md" path = "/" + page_name + ".md"
filename = page_name + ".md" filename = page_name + ".md"
url = get_file_url(repo.id, path, filename) url = get_file_url(repo.id, path, filename)
file_response = urllib2.urlopen(url) file_response = urllib2.urlopen(url)
content = file_response.read() content = file_response.read()
return content return content, repo.id
def convert_wiki_link(content, group): def convert_wiki_link(content, group, repo_id):
import re import re
def repl(matchobj): def repl(matchobj):
print matchobj.group(1)
linkname = matchobj.group(1) linkname = matchobj.group(1)
filename = linkname + ".md" filename = linkname + ".md"
path = "/" + filename path = "/" + filename
return "<a href='%sgroup/%d/wiki/%s'>%s</a>" % (SITE_ROOT, if get_file_id_by_path(repo_id, path):
group.id, linkname, linkname) a_tag = "<a href='%sgroup/%d/wiki/%s/'>%s</a>"
return a_tag % (SITE_ROOT, group.id, linkname, linkname)
else:
a_tag = '''<a class="wiki-page-missing" href='%sgroup/%d/wiki/%s/'>%s</a>'''
return a_tag % (SITE_ROOT, group.id, linkname, linkname)
return re.sub(r'\[\[(.+)\]\]', repl, content) return re.sub(r'\[\[(.+)\]\]', repl, content)
@login_required @login_required
def group_wiki(request, group_id, page_name="home"): def group_wiki(request, group_id, page_name="home"):
group_id_int = int(group_id) # Checked by URL Conf
group_id_int = int(group_id) # Checkeb by URL Conf
group = get_group(group_id_int) group = get_group(group_id_int)
if not group: if not group:
@@ -1148,8 +1158,16 @@ def group_wiki(request, group_id, page_name="home"):
is_staff = True if check_group_staff(group.id, request.user) else False is_staff = True if check_group_staff(group.id, request.user) else False
content = get_wiki_page(request, group_id_int, page_name) content = ''
content = convert_wiki_link(content, group) wiki_exists, wiki_page_missing = True, False
try:
content, repo_id = get_wiki_page(request, group_id_int, page_name)
except WikiDoesNotExist:
wiki_exists = False
except WikiPageMissing:
wiki_page_missing = True
else:
content = convert_wiki_link(content, group, repo_id)
return render_to_response("group/group_wiki.html", { return render_to_response("group/group_wiki.html", {
"group_id": group_id, "group_id": group_id,
@@ -1157,9 +1175,9 @@ def group_wiki(request, group_id, page_name="home"):
"is_staff": is_staff, "is_staff": is_staff,
"content": content, "content": content,
"page": page_name, "page": page_name,
}, context_instance=RequestContext(request)); "wiki_exists": wiki_exists,
"wiki_page_missing": wiki_page_missing,
}, context_instance=RequestContext(request))
@login_required @login_required
def group_wiki_create(request, group_id): def group_wiki_create(request, group_id):
@@ -1213,8 +1231,11 @@ def group_wiki_create(request, group_id):
print e print e
return json_error(_(u'Failed to create: internal error.')) return json_error(_(u'Failed to create: internal error.'))
return HttpResponseRedirect(reverse('group_info', args=[group_id])) # create home page
page_name = "home.md"
seafserv_threaded_rpc.post_empty_file(repo_id, "/", page_name, user)
return HttpResponseRedirect(reverse('group_info', args=[group_id]))
@login_required @login_required
def group_wiki_page_new(request, group_id, page_name="home"): def group_wiki_page_new(request, group_id, page_name="home"):

View File

@@ -1854,4 +1854,7 @@ textarea:-moz-placeholder {/* for FF */
} }
#page-edit { #page-edit {
margin-right:6px; margin-right:6px;
}
.wiki-page-missing {
color:red;
} }

View File

@@ -316,6 +316,9 @@ def gen_file_get_url(token, filename):
Generate httpserver file url. Generate httpserver file url.
Format: http://<domain:port>/files/<token>/<filename> Format: http://<domain:port>/files/<token>/<filename>
""" """
if isinstance(filename, unicode):
filename = urllib2.quote(filename.encode('utf-8'))
return '%s/files/%s/%s' % (get_httpserver_root(), token, filename) return '%s/files/%s/%s' % (get_httpserver_root(), token, filename)
def gen_file_upload_url(token, op): def gen_file_upload_url(token, op):