<?php
- /*
- * Copyright (C) 2010 Roland Mas, Olaf Lenz
- *
- * This file is part of FusionForge.
- *
- * FusionForge is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * FusionForge is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with FusionForge; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- /** This contains the local settings for Mediawiki as used in the
- * Mediawiki plugin of FusionForge.
- */
+/*
+ * Copyright (C) 2010 Roland Mas, Olaf Lenz
+ *
+ * This file is part of FusionForge.
+ *
+ * FusionForge is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * FusionForge is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/** This contains the local settings for Mediawiki as used in the
+ * 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
}
$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/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 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 tableName($name, $format='quoted') {
+ switch ($name) {
+ case 'interwiki':
+ return 'public.interwiki';
+ default:
+ return DatabasePostgres::tableName($name, $format);
+ }
+ }
+}
+
$g = group_get_object_by_name($fusionforgeproject) ;
$wgSitename = $g->getPublicName() . " Wiki";
$wgScriptPath = "/plugins/mediawiki/wiki/$fusionforgeproject" ;
$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') ;
$wgDefaultSkin = 'fusionforge';
+/* 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') ;
require_once("$IP/includes/Exception.php");
require_once("$IP/includes/db/Database.php");
-require_once("$IP/includes/db/DatabasePostgres.php");
-class DatabaseForge extends DatabasePostgres {
- function DatabaseForge($server=false, $user=false, $password=false,
- $dbName=false, $failFunction=false, $flags=0) {
- global $wgDBtype;
-
- $wgDBtype = "postgres";
- return DatabasePostgres::DatabasePostgres($server, $user,
- $password, $dbName, $failFunction, $flags);
- }
-
- function tableName($name) {
- switch ($name) {
- case 'interwiki':
- return 'public.plugin_mediawiki_interwiki';
- default:
- return DatabasePostgres::tableName($name);
- }
- }
+if (forge_get_config('mw_dbtype', 'mediawiki')=='mysql'){
+ require_once("DatabaseForgeMysql.php");
+}else{
+ require_once("DatabaseForgePgsql.php");
}
function FusionForgeRoleToMediawikiGroupName ($role, $project) {
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->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->hasPermission ('forge_admin') ;
+ $wgGroupPermissions[$gr]['interwiki'] = $r->hasGlobalPermission ('forge_admin') ;
}
}
class SpecialForgeRedir extends SpecialPage {
var $dstappendself = false;
- function getTitle() {
+ function getTitle($subpage="") {
return 'SpecialForgeRedir';
}
- function getRedirect() {
+ function getRedirect($subpage="") {
return $this;
}
$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) */
+}