<?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';
}
$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)) {
$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" );
}
}
+
+class DatabaseForge extends DatabasePostgres {
+ function __construct($server=false, $user=false, $password=false,
+ $dbName=false, $failFunction=false, $flags=0) {
+ global $wgDBtype;
+
+ $wgDBtype = "postgres";
+ return parent::__construct($server, $user,
+ $password, $dbName, $failFunction, $flags);
+ }
+
+ function fieldInfo($table, $field) {
+ switch ($table) {
+ case 'interwiki':
+ break;
+ default:
+ return DatabasePostgres::fieldInfo($table, $field);
+ }
+
+ global $wgDBmwschema;
+
+ $save_wgDBmwschema = $wgDBmwschema;
+ $wgDBmwschema = 'public';
+ $v = DatabasePostgres::fieldInfo($table, $field);
+ $wgDBmwschema = $save_wgDBmwschema;
+ return $v;
+ }
+
+ function open($server, $user, $password, $dbName) {
+ $v = DatabasePostgres::open($server, $user, $password, $dbName);
+
+ global $wgDBmwschema;
+ if ($this->schemaExists($wgDBmwschema)) {
+ $safeschema = $this->addIdentifierQuotes($wgDBmwschema);
+ $this->doQuery("SET search_path TO $safeschema,public");
+ }
+
+ return $v;
+ }
+
+ function query($sql, $fname='', $tempIgnore=false) {
+ /* ugh! */
+ $chk = "ALTER TABLE interwiki ";
+ $csz = strlen($chk);
+ if (substr($sql, 0, $csz) == $chk) {
+ $sql = "ALTER TABLE public.interwiki " .
+ substr($sql, $csz);
+ }
+ return DatabasePostgres::query($sql, $fname,$tempIgnore);
+ }
+
+ function tableName($name, $format='quoted') {
+ global $wgDBmwschema;
+
+ switch ($name) {
+ case 'interwiki':
+ $v = 'interwiki';
+ default:
+ return DatabasePostgres::tableName($name, $format);
+ }
+
+ if ($wgDBmwschema != 'public') {
+ $v = 'public.' . $v;
+ }
+ return $v;
+ }
+}
+
$g = group_get_object_by_name($fusionforgeproject) ;
$wgSitename = $g->getPublicName() . " Wiki";
$wgScriptPath = "/plugins/mediawiki/wiki/$fusionforgeproject" ;
$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 () ;
-
- foreach ($linked_projects as $lp) {
- if ($lp->getID() == $g->getID()) {
- $rs[] = $r ;
- }
- }
+ $available_roles = RBACEngine::getInstance()->getAvailableRoles() ;
+ $rs = array () ;
+ foreach ($available_roles as $r) {
+ $linked_projects = $r->getLinkedProjects () ;
+
+ if ($r->hasGlobalPermission('forge_admin')) {
+ $rs[] = $r ;
+ continue ;
}
- } else {
- $perm =& $g->getPermission ();
- $r = $u->getRole($g) ;
- if (isset ($r) && $r && !$r->isError()) {
- $rs = array ($r) ;
+
+ foreach ($linked_projects as $lp) {
+ if ($lp->getID() == $g->getID()) {
+ $rs[] = $r ;
+ continue ;
+ }
}
}
-
+
// Sync MW groups for current user with FF roles
$rnames = array () ;
foreach ($rs as $r) {
$g = group_get_object_by_name ($fusionforgeproject) ;
// Setup rights for all roles referenced by project
- $rs = $g->getRoles() ;
+ $rids = $g->getRolesID() ;
+ $e = RBACEngine::getInstance();
+ $grs = $e->getGlobalRoles();
+ foreach ($grs as $r) {
+ $rids[] = $r->getID();
+ }
+ $rids = array_unique($rids);
+ $rs = array();
+ foreach ($rids as $rid) {
+ $rs[] = $e->getRoleById($rid);
+ }
+
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()) ;
- }
- $rs = RBACEngine::getInstance()->getGlobalRoles();
- foreach ($rs as $r) {
- $gr = FusionForgeRoleToMediawikiGroupName ($r, $g) ;
-
// Interwiki management restricted to forge admins
$wgGroupPermissions[$gr]['interwiki'] = $r->hasGlobalPermission ('forge_admin') ;
}
$wgFavicon = '/images/icon.png' ;
$wgBreakFrames = false ;
-ini_set ('memory_limit', '50M') ;
+ini_set ('memory_limit', '100M') ;
// LOAD THE SITE-WIDE AND PROJECT-SPECIFIC EXTRA-SETTINGS
if (is_file(forge_get_config('config_path')."/plugins/mediawiki/LocalSettings.php")) {
// mode: php
// c-file-style: "bsd"
// End:
+
+/* !isset($fusionforge_plugin_mediawiki_LocalSettings_included) */
+}