<?php
-/*
+/*
* Copyright (C) 2010 Roland Mas, Olaf Lenz
*
* This file is part of FusionForge.
* Mediawiki plugin of FusionForge.
*/
+/* C style inclusion guard. Yes, I know. Don’t comment on it. */
+if (!isset($fusionforge_plugin_mediawiki_LocalSettings_included)) {
+$fusionforge_plugin_mediawiki_LocalSettings_included = true;
+
require_once dirname(__FILE__) . '/../../../www/env.inc.php';
require_once $gfcommon.'include/pre.php';
+require_once $gfcommon.'include/RBACEngine.class.php';
sysdebug_lazymode(true);
$IP = forge_get_config('master_path', 'mediawiki');
if (!isset ($fusionforgeproject)) {
- $fusionforgeproject = 'siteadmin' ;
+ $gr=new Group(1);
+ $fusionforgeproject=$gr->getUnixName();
}
+
$exppath = explode ('/', $_SERVER['PHP_SELF']) ;
# determine $fusionforgeproject from the URL
if (($exppath[0] == 'plugins') &&
($exppath[1] == 'mediawiki') &&
($exppath[2] == 'wiki') &&
- (($exppath[4] == 'index.php') || ($exppath[4] == 'api.php'))
- ) {
+ in_array($exppath[4], array(
+ 'api.php',
+ 'index.php',
+ 'load.php',
+ ))) {
$fusionforgeproject = $exppath[3] ;
break ;
} else {
}
$gconfig_dir = forge_get_config('mwdata_path', 'mediawiki');
-$project_dir = forge_get_config('projects_path', 'mediawiki') . "/"
+$project_dir = forge_get_config('projects_path', 'mediawiki') . "/"
. $fusionforgeproject ;
if (!is_dir($project_dir)) {
- exit_error (sprintf(_('Mediawiki for project %s not created yet, please wait for a few minutes.'), $fusionforgeproject)) ;
+ exit_error (sprintf(_('Mediawiki for project %s not created yet, please wait for a few minutes.'), $fusionforgeproject.':'.$project_dir)) ;
}
$path = array( $IP, "$IP/includes", "$IP/languages" );
set_include_path( implode( PATH_SEPARATOR, $path ) . PATH_SEPARATOR . get_include_path() );
+require_once( "$IP/includes/AutoLoader.php" );
+require_once( "$IP/includes/Defines.php" );
require_once( "$IP/includes/DefaultSettings.php" );
if ( $wgCommandLineMode ) {
die( "This script must be run from the command line\n" );
}
}
+
$g = group_get_object_by_name($fusionforgeproject) ;
$wgSitename = $g->getPublicName() . " Wiki";
$wgScriptPath = "/plugins/mediawiki/wiki/$fusionforgeproject" ;
$wgEmergencyContact = forge_get_config('admin_email');
$wgPasswordSender = forge_get_config('admin_email');
-$wgDBtype = "postgres";
+$wgDBtype = "forge";
$wgDBserver = forge_get_config('database_host') ;
-$wgDBname = forge_get_config('database_name');
+if (forge_get_config('mw_dbtype', 'mediawiki')=='mysql'){
+ // At the time writing schema in mysql is synonym for database
+ $wgDBname = 'plugin_mediawiki_'.$fusionforgeproject;
+ $wgDBprefix = 'mw';
+} else {
+ $wgDBname = forge_get_config('database_name');
+}
$wgDBuser = forge_get_config('database_user') ;
$wgDBpassword = forge_get_config('database_password') ;
$wgDBadminuser = forge_get_config('database_user') ;
$wgHtml5 = false;
$wgWellFormedXml = true;
+/* DEBUG
+$wgDebugLogFile = '/tmp/wiki.log';
+$wgDebugLogPrefix = '';
+$wgDebugRedirects = true;
+$wgDebugRawPage = true;
+$wgDebugComments = true;
+$wgLogQueries = true;
+$wgDebugDumpSql = true;
+$wgDebugLogGroups = array();
+$wgShowDebug = true;
+$wgSpecialVersionShowHooks = true;
+$wgShowSQLErrors = true;
+$wgColorErrors = true;
+$wgShowExceptionDetails = true;
+$wgShowHostnames = true;
+*/
+
+
$GLOBALS['sys_dbhost'] = forge_get_config('database_host') ;
$GLOBALS['sys_dbport'] = forge_get_config('database_port') ;
$GLOBALS['sys_dbname'] = forge_get_config('database_name') ;
$GLOBALS['REMOTE_ADDR'] = getStringFromServer('REMOTE_ADDR') ;
$GLOBALS['HTTP_USER_AGENT'] = getStringFromServer('HTTP_USER_AGENT') ;
+require_once("$IP/includes/Exception.php");
+require_once("$IP/includes/db/Database.php");
+if (forge_get_config('mw_dbtype', 'mediawiki')=='mysql'){
+ require_once 'DatabaseForgeMysql.php';
+}else{
+ require_once 'DatabaseForgePgsql.php';
+}
+
function FusionForgeRoleToMediawikiGroupName ($role, $project) {
if ($role instanceof RoleAnonymous) {
return '*';
function FusionForgeMWAuth( $user, &$result ) {
global $fusionforgeproject, $wgGroupPermissions ;
- $cookie = getStringFromCookie ('session_ser') ;
- if ($cookie != '') {
- $s = session_check_session_cookie ($cookie);
- } else {
- $s = false ;
- }
- if ($s) {
- $u = user_get_object ($s);
+ session_set();
+
+ if (session_loggedin()) {
+ $u = session_get_user();
$g = group_get_object_by_name ($fusionforgeproject) ;
$mwname = ucfirst($u->getUnixName ()) ;
$user->mId=$mwu->getID();
$user->loadFromId() ;
- $user->loadGroups() ;
$current_groups = $user->getGroups() ;
- if (USE_PFO_RBAC) {
- $available_roles = RBACEngine::getInstance()->getAvailableRoles() ;
- $rs = array () ;
- foreach ($available_roles as $r) {
- $linked_projects = $r->getLinkedProjects () ;
-
- if ($r->hasGlobalPermission('forge_admin')) {
+ $available_roles = RBACEngine::getInstance()->getAvailableRoles() ;
+ $rs = array () ;
+ foreach ($available_roles as $r) {
+ $linked_projects = $r->getLinkedProjects () ;
+
+ if ($r->hasGlobalPermission('forge_admin')) {
+ $rs[] = $r ;
+ continue ;
+ }
+
+ foreach ($linked_projects as $lp) {
+ if ($lp->getID() == $g->getID()) {
$rs[] = $r ;
continue ;
}
-
- foreach ($linked_projects as $lp) {
- if ($lp->getID() == $g->getID()) {
- $rs[] = $r ;
- }
- }
- }
- } else {
- $perm =& $g->getPermission ();
- $r = $u->getRole($g) ;
- if (isset ($r) && $r && !$r->isError()) {
- $rs = array ($r) ;
}
}
-
+
// Sync MW groups for current user with FF roles
$rnames = array () ;
foreach ($rs as $r) {
foreach ($rs as $r) {
$gr = FusionForgeRoleToMediawikiGroupName ($r, $g) ;
-
+
// Read access
$wgGroupPermissions[$gr]['read'] = $r->hasPermission ('plugin_mediawiki_read', $g->getID()) ;
-
+
// Day-to-day edit privileges
$wgGroupPermissions[$gr]['edit'] = $r->hasPermission ('plugin_mediawiki_edit', $g->getID(), 'editexisting') ;
$wgGroupPermissions[$gr]['writeapi'] = $r->hasPermission ('plugin_mediawiki_edit', $g->getID(), 'editexisting') ;
$wgGroupPermissions[$gr]['move-rootuserpages'] = $r->hasPermission ('plugin_mediawiki_edit', $g->getID(), 'editmove') ;
$wgGroupPermissions[$gr]['delete'] = $r->hasPermission ('plugin_mediawiki_edit', $g->getID(), 'editmove') ;
$wgGroupPermissions[$gr]['undelete'] = $r->hasPermission ('plugin_mediawiki_edit', $g->getID(), 'editmove') ;
-
+
// File upload privileges
$wgGroupPermissions[$gr]['upload'] = $r->hasPermission ('plugin_mediawiki_upload', $g->getID(), 'upload') ;
$wgGroupPermissions[$gr]['reupload-own'] = $r->hasPermission ('plugin_mediawiki_upload', $g->getID(), 'upload') ;
$wgGroupPermissions[$gr]['reupload'] = $r->hasPermission ('plugin_mediawiki_upload', $g->getID(), 'reupload') ;
$wgGroupPermissions[$gr]['reupload-shared'] = $r->hasPermission ('plugin_mediawiki_upload', $g->getID(), 'reupload') ;
$wgGroupPermissions[$gr]['upload_by_url'] = $r->hasPermission ('plugin_mediawiki_upload', $g->getID(), 'reupload') ;
-
+
// Administrative tasks
$wgGroupPermissions[$gr]['editinterface'] = $r->hasPermission ('plugin_mediawiki_admin', $g->getID()) ;
$wgGroupPermissions[$gr]['import'] = $r->hasPermission ('plugin_mediawiki_admin', $g->getID()) ;
$wgGroupPermissions[$gr]['importupload'] = $r->hasPermission ('plugin_mediawiki_admin', $g->getID()) ;
$wgGroupPermissions[$gr]['siteadmin'] = $r->hasPermission ('plugin_mediawiki_admin', $g->getID()) ;
-
+
// Interwiki management restricted to forge admins
$wgGroupPermissions[$gr]['interwiki'] = $r->hasGlobalPermission ('forge_admin') ;
}
$wgFavicon = '/images/icon.png' ;
$wgBreakFrames = false ;
+if (forge_get_config('unbreak_frames', 'mediawiki')) {
+ $wgEditPageFrameOptions = false;
+}
ini_set ('memory_limit', '100M') ;
// LOAD THE SITE-WIDE AND PROJECT-SPECIFIC EXTRA-SETTINGS
// debian style system-wide mediawiki extensions
if (is_file("/etc/mediawiki-extensions/extensions.php")) {
- include( "/etc/mediawiki-extensions/extensions.php" );
+ include '/etc/mediawiki-extensions/extensions.php';
}
if (file_exists("$wgUploadDirectory/.wgLogo.png")) {
// mode: php
// c-file-style: "bsd"
// End:
+
+/* !isset($fusionforge_plugin_mediawiki_LocalSettings_included) */
+}