Wiki In A Vacuum

How to create a wiki site that doesn't look like a wiki using WikkaWiki

Please visit for my workhorse implementation of these concepts.


This is an extension of the InvisibleWiki process advocated by DarTar. His motto is "Look ma, no source code changes!" My motto is "Look ma, no one can tell that it's a wiki unless they look really hard!"

Seriously, though: The difference here is one of philosophy. DarTar's goal is to set up a process that creates an "invisible wiki" (a wiki that doesn't look like a wiki to the casual observer) without the need for changes to Wikka's core code. My goal is to make an invisible wiki even more invisible through source code and configuration changes.

There will be a couple of hacks here that will require source code changes to do things like get rid of pesky headers and footers, not allow registrations (but do allow logins), and add some new stylesheet elements. This is a work in progress. I can't guarantee this will work on any specific version (I'm using the latest code from trunk), but it should give one a good idea of where code changes need to be made to disable or eliminate the "wikish" elements.



  1. I would suggest initially following the procedures in InvisibleWiki. You might find that the result is adequate for what you need, and there is no reason to modify anything else (other than stylesheets). However, you might be interested in the following step even if you choose to stop here.
  1. As an alternative to disabling Wikka default pages through the use of manual ACL changes, execute the following SQL commands against your Wikka database. Note: Use this only if you are working with a fresh install of Wikka!

INSERT INTO wikka_acls (page_tag) SELECT tag FROM wikka_pages;
UPDATE wikka_acls SET read_acl='!*', write_acl='!*', comment_read_acl='!*', comment_post_acl='!*' WHERE page_tag != 'UserSettings';

Unfortunately, using the display:none attribute in wikka.css doesn't eliminate the headers, footers, etc. These elements may be "hidden" in graphical browsers, but they're still visible by viewing the page source or using a text-based browser such as lynx. Source code changes are necessary to create a truly "hidden" WikkaWiki!

  1. For the header, I wanted it to be available for the admin user, but with all links and components (such as RSS feeds and backlink links) disabled for everyone else. So I wrapped everything I didn't want displayed to non-admin users with $this->IsAdmin(). For example:
brian@alabaster <10:18 PM>$ diff -u header.php.orig header.php
--- header.php.orig     Sat Oct  7 23:53:34 2006
+++ header.php  Mon Oct  9 01:09:02 2006
@@ -3,7 +3,7 @@
  * Generates the page header.
  * @package            Template
- * @version            $Id: header.php 189 2006-09-25 08:48:41Z DotMG $
+ * @version            $Id: header.php,v 1.1 2006/10/09 06:07:54 brian Exp brian $
  * @license GNU General Public License
  * @filesource
@@ -30,12 +30,16 @@
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		<meta name="keywords" content="<?php echo $this->GetConfigValue("meta_keywords") ?>" />
		<meta name="description" content="<?php echo $this->GetConfigValue("meta_description") ?>" />
+       <?php if($this->IsAdmin()) { ?>
		<link rel="stylesheet" type="text/css" href="css/<?php echo $this->GetConfigValue("stylesheet") ?>" />
+       <?php } else { ?>
+       <link rel="stylesheet" type="text/css" href="css/wikka_invisible.css" />
+       <?php } ?>
		<link rel="stylesheet" type="text/css" href="css/print.css" media="print" />
		<link rel="icon" href="images/favicon.ico" type="image/x-icon" />
		<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />
-if ($this->GetMethod() != 'edit' && $this->config['enable_rss_autodiscovery'] != 0) {
+       if ($this->IsAdmin() && $this->GetMethod() != 'edit' && $this->config['enable_rss_autodiscovery'] != 0) {
		$rsslink  = '   <link rel="alternate" type="application/rss+xml" title="'.$this->GetWakkaName().': revisions for '.$this->tag.' (RSS)" href="'.$this->Href('revisions.xml', $this->tag).'" />'."\n";
		$rsslink .= '   <link rel="alternate" type="application/rss+xml" title="'.$this->GetWakkaName().': recently edited pages (RSS)" href="'.$this->Href('recentchanges.xml', $this->tag).'" />'."\n";
		echo $rsslink;
@@ -44,6 +48,7 @@
 <body <?php echo $message ? "onload=\"alert('".$message."');\" " : "" ?> >
 <div class="header">
+<?php if($this->IsAdmin()) { ?>
		<h2><?php echo $this->config["wakka_name"] ?> : <a href="<?php echo $this->href('backlinks', '', ''); ?>" title="Display a list of pages linking to <?php echo $this->tag ?>"><?php echo $this->GetPageTag(); ?></a></h2>
		<?php echo $this->Link($this->config["root_page"]); ?> ::
@@ -54,4 +59,5 @@
						echo $this->config["navigation_links"] ? $this->Format($this->config["navigation_links"]) : ""; 
+<?php } ?>

  1. Footer elements in actions/footer.php were similarly disabled:
brian@alabaster <10:21 PM>$ diff -u footer.php.orig footer.php
--- footer.php.orig     Sun Oct  8 00:37:21 2006
+++ footer.php  Mon Oct  9 01:03:28 2006
@@ -24,6 +24,7 @@
  * i18n
+ if($this->IsAdmin()) {
 if (!defined('PAGE_EDIT_LINK_TITLE')) define ('PAGE_EDIT_LINK_TITLE', 'Click to edit this page');
 if (!defined('PAGE_EDIT_LINK_TEXT')) define ('PAGE_EDIT_LINK_TEXT', 'Edit page');
 if (!defined('PAGE_HISTORY_LINK_TITLE')) define ('PAGE_HISTORY_LINK_TITLE', 'Click to view recent edits to this page');
@@ -69,17 +70,26 @@
						print("Nobody".($this->GetUser() ? " (<a href=\"".$this->href("claim")."\">Take Ownership</a>) ::\n" : " ::\n")); #i18n
-<?php echo ($this->GetUser() ? "<a href='".$this->href("referrers")."' title='Click to view a list of URLs referring to this page.'>Referrers</a> :: " : "") #i18n ?> 
+if($this->IsAdmin()) {
+       echo ($this->GetUser() ? "<a href='".$this->href("referrers")."' title='Click to view a list of URLs referring to this page.'>Referrers</a> :: " : ""); #i18n
+<?php if($this->IsAdmin()) { ?>
 Search: <input name="phrase" size="15" class="searchbox" />
-<?php echo $this->FormClose(); ?>
+<?php } ?>
+<?php if($this->IsAdmin()) echo $this->FormClose(); ?>
+<?php if($this->IsAdmin()) { ?>
 <div class="smallprint">
 <?php echo $this->Link("", "", "Valid XHTML 1.0 Transitional") ?> ::
 <?php echo $this->Link("", "", "Valid CSS") ?> ::
 Powered by <?php echo $this->Link("", "", "Wikka Wakka Wiki ".$this->GetWakkaVersion()) ?>
+<?php } ?>
		// display SQL debug information to admins
@@ -92,4 +102,4 @@
				echo '</div>';

  1. I want to disable new registrations, which are still available via UserSettings. I could have disabled UserSettings, but I also want to be able to log in as an admin. As of 1.1.7, this is easily accomplished by setting 'allow_user_registration' to '0' in wikka.config.php. As an added measure to discourage the most blatant attacks, you might consider renaming UserSettings to something different. This isn't intended as a security measure, but might be useful for keeping the script kiddies at bay.

There are 2 comments on this page. [Show comments]
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki