def wiki_update_article(): su = SiteUtils() user_info = su.check_auth_cookie(request) if user_info is None: abort(403, "Forbidden") # form is defined in wiki_edit.tpl article_form = request.forms assert isinstance(article_form, FormsDict) article_name = article_form.article_title.strip() article_body = article_form.article_markdown.strip() article_id = article_form.article_id r = su.redis_conn old_article_body = r.get('wiki_article_' + article_id) # save the old revision before doing anything else r.lpush('wiki_article_revision_%s' % article_id, old_article_body) # slugs never change art_slug = r.get('wiki_article_slug_%s' % article_id) r.set('wiki_article_title_%s' % article_id, article_name) r.set('wiki_article_%s' % article_id, article_body) redirect('/wiki/%s' % art_slug)
def wiki_edit_page(slug): su = SiteUtils() categories = su.wiki_index() print("Wiki page: ", categories) user_info = su.check_auth_cookie(request) editable = False site_message = None if user_info is not None: editable = True else: site_message = u"Sorry, you do not have permission to edit this page." r = su.redis_conn art_id = r.get('wiki_slug_' + slug) if art_id is None: #art_slug = slug art_title = site_message html = "Missing article - %s <br/>Please check the URL." % slug md_src = None else: md_src = r.get('wiki_article_' + art_id) art_title = r.get('wiki_article_title_' + art_id) art_slug = r.get('wiki_article_slug_' + art_id) #md = markdown.Markdown(extensions=['wikilinks(base_url=/wiki/,html_class=mkrspc_wiki)']) #html = markdown.markdown(md_src, ['wikilinks(base_url=/wiki/)']) html = '<h4 class="page-title">Editing article: "%s" (%s)</h4>' % (art_title, art_slug) if site_message is not None: sm = SiteMessage(site_message, SM_VALIDATION_FAIL) context = { 'title': "Wiki - Newcastle Makerspace", 'menu': su.menu('sel_wiki', user_info, nav_style='wiki'), 'main_content': html, 'editable': editable, 'user_message': su.user_greeting(user_info), 'wiki_index': categories, 'site_message': site_message, 'article_id': art_id, 'article_title': art_title, 'article_markdown': md_src } return template('templates/wiki_edit', context)
def wiki(slug): su = SiteUtils() categories = su.wiki_index() print("Wiki page: ", categories) user_info = su.check_auth_cookie(request) editable = False if user_info is not None: editable = True if user_info is None: showlogin = True else: showlogin = False r = su.redis_conn art_id = r.get('wiki_slug_' + slug) if art_id is None: site_message = "Missing article - %s" % slug art_slug = slug art_title = site_message html = "Please check the URL." else: md_src = r.get('wiki_article_' + art_id) art_title = r.get('wiki_article_title_' + art_id) art_slug = r.get('wiki_article_slug_' + art_id) md = markdown.Markdown(extensions=['wikilinks(base_url=/wiki/,html_class=wiki_internal)']) #html = markdown.markdown(md_src, ['wikilinks(base_url=/wiki/)']) html = md.convert(md_src) site_message = None context = { 'title': u"Wiki - Newcastle Makerspace", 'menu': su.menu('sel_wiki', user_info, nav_style='wiki'), 'main_content': html, 'allow_edit': editable, 'user_message': su.user_greeting(user_info), 'show_login_form': showlogin, 'site_message': site_message, 'wiki_index': categories, 'slug': art_slug, 'article_title': art_title } return template('templates/wiki', context)
def wiki_cat(cat_id, site_message=None): su = SiteUtils() categories = su.wiki_index() user_info = su.check_auth_cookie(request) editable = False if user_info is not None: editable = True cat_name = su.wu.name_for_wiki_cat_id(cat_id) # html = [u'<h3 class="page-title">Wiki > %s > %s</h3>' % (maincat_name, subcat_name)] assert isinstance(cat_name, basestring) html = [u'<h3 class="page-title">Wiki > %s</h3>' % cat_name] r = su.redis_conn articles = r.lrange("wiki_category_articles_" + cat_id, 0, 999) html += u'<p>%d articles:</p>\n<ul class="category-page-list">' % len(articles) for art_id in articles: art_slug_key = "wiki_article_slug_%s" % art_id art_slug = r.get(art_slug_key) art_title_key = "wiki_article_title_%s" % art_id art_title = r.get(art_title_key) html += u'<li class="category-page"><a class="wiki_internal" href="/wiki/%s">%s</a></li>' % ( art_slug, art_title, ) html += u"</ul>" html = u"".join(html) context = { "title": "Wiki - Newcastle Makerspace", "menu": su.menu("sel_wiki", user_info, nav_style="wiki"), "main_content": html, "editable": editable, "user_message": su.user_greeting(user_info), "wiki_index": categories, "site_message": site_message, "category_id": cat_id, "category_name": cat_name, } return template("templates/wiki_cat", context)
def wiki_cat(cat_id, site_message=None): su = SiteUtils() categories = su.wiki_index() user_info = su.check_auth_cookie(request) editable = False if user_info is not None: editable = True cat_name = su.wu.name_for_wiki_cat_id(cat_id) #html = [u'<h3 class="page-title">Wiki > %s > %s</h3>' % (maincat_name, subcat_name)] assert isinstance(cat_name, basestring) html = [u'<h3 class="page-title">Wiki > %s</h3>' % cat_name] r = su.redis_conn articles = r.lrange('wiki_category_articles_' + cat_id, 0, 999) html += u'<p>%d articles:</p>\n<ul class="category-page-list">' % len(articles) for art_id in articles: art_slug_key = 'wiki_article_slug_%s' % art_id art_slug = r.get(art_slug_key) art_title_key = 'wiki_article_title_%s' % art_id art_title = r.get(art_title_key) html += u'<li class="category-page"><a class="wiki_internal" href="/wiki/%s">%s</a></li>' % (art_slug, art_title) html += u'</ul>' html = u"".join(html) context = { 'title': "Wiki - Newcastle Makerspace", 'menu': su.menu('sel_wiki', user_info, nav_style='wiki'), 'main_content': html, 'editable': editable, 'user_message': su.user_greeting(user_info), 'wiki_index': categories, 'site_message': site_message, 'category_id': cat_id, 'category_name': cat_name } return template('templates/wiki_cat', context)
def wiki_new_article(): su = SiteUtils() #categories = su.wiki_index() user_info = su.check_auth_cookie(request) if user_info is None: abort(403, "Forbidden") # form is defined in wiki_cat.tpl article_form = request.forms assert isinstance(article_form, FormsDict) article_name = article_form.article_title.strip() article_slug = article_form.article_slug.strip() cat_id = article_form.article_cat_id if len(article_slug) == 0: return wiki_cat(cat_id, site_message="No article slug given.") if len(article_name) == 0: return wiki_cat(cat_id, site_message="No article name given.") category_name = su.wu.name_for_wiki_cat_id(cat_id) if category_name is None: return wiki_cat(cat_id, site_message="Invalid category.") bad_chars = _safe_wiki_article_slug(article_slug) if bad_chars is not None: bad_slug_message = u"Sorry, these characters are not allowed in an article slug: %s" % u" ".join(bad_chars) return wiki_cat(cat_id, site_message=bad_slug_message) bad_chars = _safe_wiki_article_name(article_name) if bad_chars is not None: bad_cat_message = u"Sorry, these characters are not allowed in an article name: %s" % u" ".join(bad_chars) return wiki_cat(cat_id, site_message=bad_cat_message) #print("OK, we have a good article: %s %s" % (article_slug, article_name)) default_text = """**%s** (New article)""" % article_name su.wu.create_wiki_article(cat_id, article_slug, article_name, default_text) return wiki(article_slug)
def wiki(slug): su = SiteUtils() categories = su.wiki_index() print("Wiki page: ", categories) user_info = su.check_auth_cookie(request) editable = False if user_info is not None: editable = True r = su.redis_conn art_id = r.get("wiki_slug_" + slug) if art_id is None: site_message = "Missing article - %s" % slug art_slug = slug art_title = site_message html = "Please check the URL." else: md_src = r.get("wiki_article_" + art_id) art_title = r.get("wiki_article_title_" + art_id) art_slug = r.get("wiki_article_slug_" + art_id) md = markdown.Markdown(extensions=["wikilinks(base_url=/wiki/,html_class=wiki_internal)"]) # html = markdown.markdown(md_src, ['wikilinks(base_url=/wiki/)']) html = md.convert(md_src) site_message = None context = { "title": u"Wiki - Newcastle Makerspace", "menu": su.menu("sel_wiki", user_info, nav_style="wiki"), "main_content": html, "allow_edit": editable, "user_message": su.user_greeting(user_info), "site_message": site_message, "wiki_index": categories, "slug": art_slug, "article_title": art_title, } return template("templates/wiki", context)
def add_wiki_category(): su = SiteUtils() wu = su.wu user_info = su.check_auth_cookie(request) if user_info is None: abort(403, "Forbidden") if user_info[1] is False: # superuser? abort(403, "Forbidden") # form is defined in admin.tpl cat_form = request.forms assert isinstance(cat_form, FormsDict) cat_name = cat_form.category_name #print("add_category page got: ", cat_name) bad_cat_message = None cat_name = cat_name.strip() bad_chars = _safe_wiki_category_name(cat_name) if bad_chars is not None: bad_cat_message = u"Sorry, these characters are not allowed: %s" % u" ".join(bad_chars) if bad_cat_message is None: wiki_root_id = wu.wiki_root_category() wu.create_wiki_category(wiki_root_id, cat_name) else: print("Create category failed: %s" % bad_cat_message) context = { 'title': u"Admin - Newcastle Makerspace", 'menu': su.menu('sel_admin', user_info, nav_style='default'), 'user_message': su.user_greeting(user_info), 'site_message': bad_cat_message, 'wiki_categories': su.wiki_index() } return template('templates/admin', context)
def add_wiki_subcategory(): class SubcatCreateException(Exception): pass su = SiteUtils() wu = su.wu user_info = su.check_auth_cookie(request) if user_info is None: abort(403, "Forbidden") if user_info[1] is False: # superuser? abort(403, "Forbidden") # form is defined in admin.tpl cat_form = request.forms assert isinstance(cat_form, FormsDict) cat_name = cat_form.category_name parent_cat_id = cat_form.parent print("add_subcategory page got: ", cat_name, parent_cat_id) bad_cat_message = None try: cat_name = cat_name.strip() try: parent_cat_as_uuid = uuid.UUID(parent_cat_id) except ValueError as e: fail_message = "Invalid parent category ID." raise SubcatCreateException(fail_message) parent_cat_name = wu.name_for_wiki_cat_id(parent_cat_as_uuid) print("PArent cat: ", parent_cat_name) if parent_cat_name is None: fail_message = u"The specified parent category does not exist." raise SubcatCreateException(fail_message) bad_chars = _safe_wiki_category_name(cat_name) if bad_chars is not None: fail_message = u"Sorry, these characters are not allowed: %s" % u" ".join(bad_chars) raise SubcatCreateException(fail_message) wiki_root_id = wu.wiki_root_category() wu.create_wiki_category(wiki_root_id, cat_name) print("Created OK") except SubcatCreateException as e: print("Failed, invalid inputs: %s" % e.message) bad_cat_message = e.message except Exception as e: print("Failed (general error: %s" % e.message) context = { 'title': u"Admin - Newcastle Makerspace", 'menu': su.menu('sel_admin', user_info, nav_style='default'), 'user_message': su.user_greeting(user_info), 'site_message': bad_cat_message, 'wiki_categories': su.wiki_index() } return template('templates/admin', context)