diff --git a/group/templates/group/group_wiki.html b/group/templates/group/group_wiki.html
index 1f1a517b65..ab8cdbc065 100644
--- a/group/templates/group/group_wiki.html
+++ b/group/templates/group/group_wiki.html
@@ -12,7 +12,7 @@
+
+
+{% endif %}
{% endblock %}
@@ -59,10 +66,10 @@
{% block extra_script %}
{% endblock %}
diff --git a/group/urls.py b/group/urls.py
index 4f237d9289..87a32f9d5b 100644
--- a/group/urls.py
+++ b/group/urls.py
@@ -10,7 +10,7 @@ urlpatterns = patterns('',
url(r'^(?P\d+)/$', group_info, name='group_info'),
url(r'^(?P\d+)/discus/$', group_discus, name='group_discus'),
url(r'^(?P\d+)/wiki/$', group_wiki, name='group_wiki'),
- url(r'^(?P\d+)/wiki/(?P[^/]+)$', group_wiki, name='group_wiki'),
+ url(r'^(?P\d+)/wiki/(?P[^/]+)/$', group_wiki, name='group_wiki'),
url(r'^(?P\d+)/wiki_create/$', group_wiki_create, name='group_wiki_create'),
url(r'^(?P\d+)/wiki_page_new/$', group_wiki_page_new, name='group_wiki_page_new'),
url(r'^(?P\d+)/wiki_page_edit/(?P[^/]+)$', group_wiki_page_edit, name='group_wiki_page_edit'),
diff --git a/group/views.py b/group/views.py
index bbb46e5e7e..1f9e99e64f 100644
--- a/group/views.py
+++ b/group/views.py
@@ -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_personal_groups_by_user, get_group, get_group_members, \
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 decorators import group_staff_required
@@ -1088,6 +1089,11 @@ def group_discus(request, group_id):
}, context_instance=RequestContext(request));
+class WikiDoesNotExist(Exception):
+ pass
+
+class WikiPageMissing(Exception):
+ pass
def find_wiki_repo(request, group_id):
repos = get_group_repos(group_id, request.user.username)
@@ -1096,9 +1102,10 @@ def find_wiki_repo(request, group_id):
return repo
return None
-
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,
'view', '')
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):
import urllib2
repo = find_wiki_repo(request, group_id)
+ if not repo:
+ raise WikiDoesNotExist
path = "/" + page_name + ".md"
filename = page_name + ".md"
url = get_file_url(repo.id, path, filename)
file_response = urllib2.urlopen(url)
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
def repl(matchobj):
- print matchobj.group(1)
linkname = matchobj.group(1)
filename = linkname + ".md"
path = "/" + filename
- return "%s" % (SITE_ROOT,
- group.id, linkname, linkname)
+ if get_file_id_by_path(repo_id, path):
+ a_tag = "%s"
+ return a_tag % (SITE_ROOT, group.id, linkname, linkname)
+ else:
+ a_tag = '''%s'''
+ return a_tag % (SITE_ROOT, group.id, linkname, linkname)
return re.sub(r'\[\[(.+)\]\]', repl, content)
-
@login_required
def group_wiki(request, group_id, page_name="home"):
-
- group_id_int = int(group_id) # Checkeb by URL Conf
+ group_id_int = int(group_id) # Checked by URL Conf
group = get_group(group_id_int)
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
- content = get_wiki_page(request, group_id_int, page_name)
- content = convert_wiki_link(content, group)
+ content = ''
+ 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", {
"group_id": group_id,
@@ -1157,9 +1175,9 @@ def group_wiki(request, group_id, page_name="home"):
"is_staff": is_staff,
"content": content,
"page": page_name,
- }, context_instance=RequestContext(request));
-
-
+ "wiki_exists": wiki_exists,
+ "wiki_page_missing": wiki_page_missing,
+ }, context_instance=RequestContext(request))
@login_required
def group_wiki_create(request, group_id):
@@ -1213,8 +1231,11 @@ def group_wiki_create(request, group_id):
print e
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
def group_wiki_page_new(request, group_id, page_name="home"):
diff --git a/media/css/seahub.css b/media/css/seahub.css
index 86728aec6e..2961a691ed 100644
--- a/media/css/seahub.css
+++ b/media/css/seahub.css
@@ -1854,4 +1854,7 @@ textarea:-moz-placeholder {/* for FF */
}
#page-edit {
margin-right:6px;
+}
+.wiki-page-missing {
+ color:red;
}
\ No newline at end of file
diff --git a/utils/__init__.py b/utils/__init__.py
index f6e13a31d2..5ce0660cd2 100644
--- a/utils/__init__.py
+++ b/utils/__init__.py
@@ -316,6 +316,9 @@ def gen_file_get_url(token, filename):
Generate httpserver file url.
Format: http:///files//
"""
+ if isinstance(filename, unicode):
+ filename = urllib2.quote(filename.encode('utf-8'))
+
return '%s/files/%s/%s' % (get_httpserver_root(), token, filename)
def gen_file_upload_url(token, op):