User:EoNy/sandbox/WackoWiki-sc

WackoWiki

WackoWiki is a lightweight, expandable, multilingual wiki engine based on WakkaWiki '. The software is written in PHP, and uses MySQL to store pages. WackoWiki triggered research in different areas of software development e.g. security, cache, universal markup language, Linux NFS kernel module, rdf.

WackoWiki supports multiple languages, many localizations, email notification on changes/comments, several cache levels, design themes (skins) support, XHTML compliance, page rights (ACLs), and page comments. WackoWiki is licensed under BSD license.

WackoWiki is developed mainly by Russian and European programmers, but it is not a Russian-only engine. It is actively maintained in Germany and at the moment it supports Bulgarian, Danish, Dutch, English, Estonian, French, German, Greek, Italian, Spanish, Polish, Portuguese, and Russian languages. The latest release features UTF-8 compatibility.

WackoWiki allows the use of full HTML capabilities, and uses the SafeHTML parser (written by the same developers) to strip out potentially dangerous content (JavaScript, etc.) which may cause cross-site scripting vulnerabilities.

Developers of WackoWiki also created WikiEdit, a JavaScript multi-language editor that generates wiki markup using keyboard shortcuts and toolbar buttons. WikiEdit also supports auto indenting and increments in ordered lists.

WackoWiki is widely used in Russia as a wiki-engine, by many IT companies as a lightweight CMS and a knowledge management system, by research groups and in educational context. It shares several modules, developers, and a bugtracker with the NPJ engine.

License
WackoWiki is free and open-source software and is distributed under the terms of the BSD license.

Development
WackoWiki has an active volunteer community for development and maintenance. Users who have made meaningful contributions to the project by submitting patches are generally, upon request, granted access to commit revisions to the project's Bitbucket/Git repository. . ' . WackoWiki Community uses Mantis Bug Tracker. Standards set by the W3C and PHP Standard Recommendation (PSR) are also foundations of WackoWiki development.

History of WackoWiki
WackoWiki was forked from the WakkaWiki engine in 2003 when Hendrik Mans and Carlo Zottmann, the original developers, abandoned it. WackoWiki is an authorized and official "reboot" of the WakkaWiki project." The software development has since been driven by a team of international contributors who are working on WackoWiki in their spare time.

Release History
The first version of WackoWiki, R2.0, was released as a fork of WakkaWiki in March 2003.

Sites using WackoWiki
WackoWiki is often used in small and medium-sized companies as well as in small organizations such as research groups. Notable usages of WackoWiki within governments include websites of AKSW Research Group and of the department of Business Information Systems at the University of Leipzig, Germany The Russian internet search engine company Yandex uses WackoWiki for intranet workgroups. WackoWiki is listed in the Free Software Directory, Open Hub, PHP Extension and Application Repository and also hosted at SourceForge.

General overview
According to Linux Magazine WackoWiki is a compact, resource-saving wiki engine. It inherits all features from WakkaWiki including installer and upgrader, utilizes common wiki software features, improvements and the following noteworthy new features.

Installation
Since WackoWiki depends on a database and server software, it requires that the user have administrative privileges on a server running both PHP and a compatible type of SQL database. The Installation of WackoWiki on an existing server can also be done by non-expert users. Files need to be placed e.g. via FTP/FileZilla to /htdocs/yourwiki folder of a Linux/Apache/MySQL/PHP (LAMP) software bundle. An installation script is accessed via a Web browser to initialize the wiki's setup. The WackoWiki community publishes a comprehensive installation guide.

Configuration and Admin Panel
The AdminPanel provides access to numerous settings and data of your Wiki. Among other things, you can create and delete users and groups, view logs and create a backup of the database.

Tracking edits
To prevent vandalism, but also to get an overview of personal contributions or simply to easily retrieve interesting content to collaborate on, the following tracking edits features are helpful.

The Recent Changes feature, that nearly all wikis use, displays a list that contains the pages last edited, the edit summary, the timestamp and the name of the user. Also, Recent Changes and Recent Comments through the utilization of RSS can be exported as an XML file and be imported in a news aggregator. The page index also is a good feature to get an overview of the wiki and find pages to read and contribute to.

Like most wikis also WackoWiki allows us to view the version history of any given and not access a restricted page. When using the revision control link the user can choose to compare two versions of a page. WackoWiki helps users in tracking edits by providing powerful diffs between revisions. Since WackoWiki R5.5 the advanced Diff utility gives the user full revision control by displaying differences between changes made to pages in various ways e.g. full, simple, inline or source.

Authors can choose to watch/unwatch a wiki page. These page watches also appear in a watchlist when calling WackoWiki action. Users are notified via email (simple diff included in the email) when anyone changed or commented page. WackoWiki also has user profile pages where the users' changes to pages, their latest comments, and uploads are shown.

Other important tools are bookmarking, tagging and categories.

Navigation
A basic principle of any wiki is hypertextual linking via concise URLs. Links are a means for navigation. So is the main navigation of WackoWiki, which consists of general items like recent changes, recent comments and page index. WackoWiki software enables user bookmarks to easily be added to the main navigation for any page.

Editing interface
Clicking on the edit link of an existing page or creating a new page will enable the edit mode. WikiEdit, a JavaScript-driven GUI (Graphical User Interface) toolbar also starts by double-clicking on a WackoWiki page. The interface helps with editing a wiki web page not only by on-the-fly correction of punctuation typos & special characters. By clicking on the respective toolbar buttons or when using keyboard shortcuts - known from word processing programs - text gets converted into WackoWiki markup. Plain text in multiple-languages / alphabets is formatted, text-layout added, links and tables created, a user signature and WackoWiki actions are called also by typing WackoWiki markup into the editing interface. When previewing and saving a wiki page WackoFormatter, a parser, which is a WikiText to HTML renderer, converts all input. The SafeHTML parser used when saving Wiki pages is an anti-XSS HTML parser, written in PHP.

Wiki-compatible markup
The editor of WackoWiki allows the use of WackoWiki specific syntax and keywords to format a page. That way users, with a minimum visual distortion of the "source text", get a beautiful HTML after the program conversion. WackoWiki uses a markup similar but not equal to TWiki and MediaWiki-Wiki-Markup, also since there is no commonly accepted standard for wiki markup.

For easy conversion between wikis, there is Creole (markup) - a project "aimed at being a common markup language for wikis, enabling and simplifying the transfer of content between different wiki engines." ' There is also a MediaWiki2WackoWiki conversion tool.

Like any wiki markup also WackoWiki markup is based on the principles WYSIWYG and WhatYouThinkIsWhatYouGet - WYTIWYG That way HTML around the formatted text is protected from possible formatting errors.

Groups and restriction of access
WackoWiki has very good means of content access control. When creating new pages, users can assign access permissions on a per-page basis. Plain text lists give the owner, who created a page, control who may read, write, comment, create subpages and upload to this page. There are special pages for integrated user management, that shows few user statistics and groups. Groups and default permissions for working with pages can also be defined through an administration panel.

Content organization
Providing means for arranging and assembling distributed information is a notable strength of WackoWiki. The software uses hyperlinks and the so-called include, export, import, category and forum actions for content organization.

Practice: URL adressing
Among the most notable are means for clustering via URL adressing. "Directories" are created by using slashes and an addressing method similar to that used for URLs: . In WackoWiki comments are appended to the bottom of a page, in a separate space. Users can choose through usersettings whether to show or hide a page’s comments. Comments are appended to page url:. URLs are also useful for processing page handler information. For example  will enable users to rename pages and clusters.

Practice: action
"Actions are small scripts that prepare some content and output it at the given position in the wiki page." There are actions for WackoWiki similar to Help:SpecialPages plus the option to add parameters using wiki markup.

An include action for example writes the content of the included page directly into the body of another page. The have to write  into the wiki page. When including text segments anchors have to be defined in the included page.

For the owners of WackoWiki pages export and import of pages and clusters of pages to other WackoWiki instances is done by using the  and   actions. Another means for content organisation is the use of categories and forum action.

Action can be added to WackoWiki independently from program core and have to be placed into folder /action.

Caching
The caching mechanism for WackoWiki has been subject to many improvements over time. Several levels of caching (backlinks, pages) bring significant performance gain compared to Wakka. For caching data WackoWiki uses the /cache folder and several subfolders for pages, templates, RSS newsfeeds, SQL-queries, and sessions. WackoWiki also supports database caching.

Templates
WackoWiki supports content templating. Content templating enables reuse of content structures among wiki pages. WackoWiki supports functional templating without parameter passing. The include page action is also usefull for reusing contents in many wiki pages.

Security headers
WackoWiki supports the content security policiy standard and HTTP Strict Transport Security. The admin panel helps admin users to implement and define CSPs. '

Internationalization and localisation
Internationalization and localization are an integral part of software development. WackoWiki language files are separated from code and stored in special folders or files. The user interface, the installer, themes and actions (comparable to MediaWiki Special Pages), javascript files and admin panel have been translated in 14 different languages.

Extensibility
core, community, actions, themes
 * Designed for speed and extensibility

WackoWiki Development
WackoWiki is a free software project and builds upon open source software development practices '.

Scientific findings
WackoWiki Software has been studied by international scientists. Findings help improve not only WackoWiki software but also other software and internet technologies. Research results on WackoWiki storing and cache mechanisms helped to raise questions to improve Linux NFS kernel module. The usage  of  different  security  mechanisms  in  combination with the markup context of commonly used input sanitization or validation mechanisms in "25  popular  PHP  applications" with WackoWiki being one of those applications, were studied. This empirical study "helps researchers,  web  developers,  and  tool  developers  to focus on error-prone markup contexts and security mechanisms in order to detect and mitigate vulnerabilities". Other researchers implemented the RDF authoring tool in WackoWiki. The full read/write integration of RDFauthor allows users to edit both the wiki page and the structured information/basic elements for the description of ontologies in one place.

Resources to developers
The following tools help foster WackoWiki development:
 * Communication channels: WackoWiki development team uses e-mail to discuss development ideas and a Forum to ask help questions.
 * Repository: git repository hosted by GitHub
 * Bug Tracking: Mantis Bugtracker to report bugs and feature requests also /dev/FeatureRequest

Database


WackoWiki supports MySQL databases and PHP data objects, but the project has no contributions for PostgresSQL related code. This has been studied and criticized for many open-source projects.

The database of WackoWiki consists mainly of tables with data of users, pages, links, media, logging, caching and taxonomy.

Limitations
Compared to other wiki software there is no section editing, but an include action. By using the include action sections of text are editable based on user/page rights. There is good English and German documentation but besides Russian only a few other languages are supported, though UTF-8 implemented. WackoWiki has a small but serious team of developers.