3 * Copyright (C) 2010 Roland Mas, Olaf Lenz
5 * This file is part of FusionForge.
7 * FusionForge is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * FusionForge is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with FusionForge; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 /** This contains the local settings for Mediawiki as used in the
22 * Mediawiki plugin of FusionForge.
25 require_once dirname(__FILE__) . '/../../env.inc.php';
26 require_once $gfwww. 'include/pre.php';
28 $IP = forge_get_config('master_path', 'mediawiki');
30 if (!isset ($fusionforgeproject)) {
31 $fusionforgeproject = 'siteadmin' ;
33 $exppath = explode ('/', $_SERVER['PHP_SELF']) ;
35 # determine $fusionforgeproject from the URL
36 while (count ($exppath) >= 4) {
37 if (($exppath[0] == 'plugins') && ($exppath[1] == 'mediawiki') && ($exppath[2] == 'wiki') && ($exppath[4] == 'index.php')) {
38 $fusionforgeproject = $exppath[3] ;
41 array_shift ($exppath) ;
45 $project_dir = forge_get_config('projects_path', 'mediawiki') . "/"
46 . $fusionforgeproject ;
48 if (!is_dir($project_dir)) {
49 exit_error (sprintf(_('Mediawiki for project %s not created yet, please wait for a few minutes.'), $fusionforgeproject)) ;
53 $path = array( $IP, "$IP/includes", "$IP/languages" );
54 set_include_path( implode( PATH_SEPARATOR, $path ) . PATH_SEPARATOR . get_include_path() );
56 require_once( "$IP/includes/DefaultSettings.php" );
58 if ( $wgCommandLineMode ) {
59 if ( isset( $_SERVER ) && array_key_exists( 'REQUEST_METHOD', $_SERVER ) ) {
60 die( "This script must be run from the command line\n" );
63 $g = group_get_object_by_name($fusionforgeproject) ;
64 $wgSitename = $g->getPublicName() . " Wiki";
65 $wgScriptPath = "/plugins/mediawiki/wiki/$fusionforgeproject" ;
67 $wgEmergencyContact = forge_get_config('admin_email');
68 $wgPasswordSender = forge_get_config('admin_email');
70 $wgDBtype = "postgres";
71 $wgDBserver = forge_get_config('database_host') ;
72 $wgDBname = forge_get_config('database_name');
73 $wgDBuser = forge_get_config('database_user') ;
74 $wgDBpassword = forge_get_config('database_password') ;
75 $wgDBadminuser = forge_get_config('database_user') ;
76 $wgDBadminpassword = forge_get_config('database_password') ;
77 $wgDBport = forge_get_config('database_port') ;
78 $wgDBmwschema = str_replace ('-', '_', "plugin_mediawiki_$fusionforgeproject") ;
79 $wgDBts2schema = str_replace ('-', '_', "plugin_mediawiki_$fusionforgeproject") ;
80 $wgMainCacheType = CACHE_NONE;
81 $wgMemCachedServers = array();
83 $wgEnableUploads = forge_get_config('enable_uploads', 'mediawiki');
84 $wgUploadDirectory = "$project_dir/images";
85 $wgUseImageMagick = true;
86 $wgImageMagickConvertCommand = "/usr/bin/convert";
87 $wgLocalInterwiki = $wgSitename;
88 $wgShowExceptionDetails = true ;
90 $wgLanguageCode = "en";
91 $wgDefaultSkin = 'fusionforge';
93 $GLOBALS['sys_dbhost'] = forge_get_config('database_host') ;
94 $GLOBALS['sys_dbport'] = forge_get_config('database_port') ;
95 $GLOBALS['sys_dbname'] = forge_get_config('database_name') ;
96 $GLOBALS['sys_dbuser'] = forge_get_config('database_user') ;
97 $GLOBALS['sys_dbpasswd'] = forge_get_config('database_password') ;
98 $GLOBALS['sys_plugins_path'] = forge_get_config('plugins_path') ;
99 $GLOBALS['sys_urlprefix'] = forge_get_config('url_prefix') ;
100 $GLOBALS['sys_use_ssl'] = forge_get_config('use_ssl') ;
101 $GLOBALS['sys_default_domain'] = forge_get_config('web_host') ;
102 $GLOBALS['sys_custom_path'] = forge_get_config('custom_path') ;
103 $GLOBALS['gfwww'] = $gfwww ;
104 $GLOBALS['gfplugins'] = $gfplugins ;
105 $GLOBALS['sys_lang'] = forge_get_config('default_language') ;
106 $GLOBALS['sys_urlroot'] = forge_get_config('url_root');
107 $GLOBALS['sys_session_key'] = forge_get_config('session_key');
108 $GLOBALS['sys_session_expire'] = $sys_session_expire;
109 $GLOBALS['REMOTE_ADDR'] = getStringFromServer('REMOTE_ADDR') ;
110 $GLOBALS['HTTP_USER_AGENT'] = getStringFromServer('HTTP_USER_AGENT') ;
112 function FusionForgeMWAuth( $user, &$result ) {
113 global $fusionforgeproject ;
115 $cookie = getStringFromCookie ('session_ser') ;
117 $s = session_check_session_cookie ($cookie);
122 $u = user_get_object ($s);
123 $g = group_get_object_by_name ($fusionforgeproject) ;
124 $perm =& $g->getPermission ();
125 $r =& $u->getRole($g) ;
127 $mwname = ucfirst($u->getUnixName ()) ;
128 $mwu = User::newFromName ($mwname);
129 if($mwu->getID() == 0) {
130 $mwu->addToDatabase ();
131 $mwu->setPassword (User::randomPassword());
132 $mwu->setRealName ($u->getRealName ()) ;
134 $mwu->loadFromDatabase ();
136 $user->mId=$mwu->getID();
137 $user->loadFromId() ;
139 $user->loadGroups() ;
140 $current_groups = $user->getGroups() ;
142 // Role-based access control
143 if (!isset ($r) || !$r || $r->isError()) {
146 $rname = "ForgeRole:".$r->getName () ;
148 $role_groups = preg_grep ("/^ForgeRole:/", $current_groups) ;
149 foreach ($role_groups as $cg) {
151 $user->removeGroup ($cg) ;
154 if (!in_array ($rname, $current_groups)) {
155 $user->addGroup ($rname) ;
158 // Previous (group-based) access control
159 $current_groups = $user->getGroups() ;
160 if ($perm && is_object($perm) && $perm->isAdmin()) {
161 if (!in_array ('sysop', $current_groups)) {
162 $user->addGroup ('sysop') ;
164 if (!in_array ('Members', $current_groups)) {
165 $user->addGroup ('Members') ;
167 if (!in_array ('ForgeUsers', $current_groups)) {
168 $user->addGroup ('ForgeUsers') ;
170 } elseif ($perm && is_object($perm) && $perm->isMember()) {
171 if (in_array ('sysop', $current_groups)) {
172 $user->removeGroup ('sysop') ;
174 if (!in_array ('Members', $current_groups)) {
175 $user->addGroup ('Members') ;
177 if (!in_array ('ForgeUsers', $current_groups)) {
178 $user->addGroup ('ForgeUsers') ;
181 if (in_array ('sysop', $current_groups)) {
182 $user->removeGroup ('sysop') ;
184 if (in_array ('Members', $current_groups)) {
185 $user->removeGroup ('Members') ;
187 if (!in_array ('ForgeUsers', $current_groups)) {
188 $user->addGroup ('ForgeUsers') ;
192 $user->setCookies ();
193 $user->saveSettings ();
203 //function NoLogoutLinkOnMainPage(&$personal_urls){unset($personal_urls['logout']);return true;}
204 //$wgHooks['PersonalUrls']['logout']='NoLogoutLinkOnMainPage';
205 //function NoLoginLinkOnMainPage(&$personal_urls){unset($personal_urls['anonlogin']);return true;}
206 //$wgHooks['PersonalUrls']['anonlogin']='NoLoginLinkOnMainPage';
207 function NoLinkOnMainPage(&$personal_urls){
208 unset($personal_urls['anonlogin']);
209 unset($personal_urls['anontalk']);
210 unset($personal_urls['logout']);
211 unset($personal_urls['login']);
214 $wgHooks['PersonalUrls'][]='NoLinkOnMainPage';
216 $GLOBALS['wgHooks']['UserLoadFromSession'][]='FusionForgeMWAuth';
218 $g = group_get_object_by_name ($fusionforgeproject) ;
219 $roles = $g->getRoles () ;
220 foreach ($roles as $role) {
221 $gr = "ForgeRole:".$role->getName () ;
222 switch ($role->getVal('plugin_mediawiki_edit', 0)) {
224 $wgGroupPermissions[$gr]['edit'] = false;
225 $wgGroupPermissions[$gr]['createpage'] = false;
226 $wgGroupPermissions[$gr]['createtalk'] = false;
229 $wgGroupPermissions[$gr]['edit'] = true;
230 $wgGroupPermissions[$gr]['createpage'] = false;
231 $wgGroupPermissions[$gr]['createtalk'] = false;
234 $wgGroupPermissions[$gr]['edit'] = true;
235 $wgGroupPermissions[$gr]['createpage'] = true;
236 $wgGroupPermissions[$gr]['createtalk'] = true;
241 $wgGroupPermissions['ForgeUsers']['createaccount'] = false;
242 $wgGroupPermissions['ForgeUsers']['edit'] = false;
243 $wgGroupPermissions['ForgeUsers']['createpage'] = false;
244 $wgGroupPermissions['ForgeUsers']['createtalk'] = false;
246 $wgGroupPermissions['user']['createaccount'] = false;
247 $wgGroupPermissions['user']['edit'] = false;
248 $wgGroupPermissions['user']['createpage'] = false;
249 $wgGroupPermissions['user']['createtalk'] = false;
251 $wgGroupPermissions['*']['createaccount'] = false;
252 $wgGroupPermissions['*']['edit'] = false;
253 $wgGroupPermissions['*']['createpage'] = false;
254 $wgGroupPermissions['*']['createtalk'] = false;
256 $res = db_query_params("SELECT is_public from groups where unix_group_name=$1", array($fusionforgeproject)) ;
257 $row = db_fetch_array($res);
258 $public = $row['is_public'];
260 // Disable read permissions for non-members
261 $wgGroupPermissions['Members']['read'] = true;
262 $wgGroupPermissions['ForgeUsers']['read'] = true;
263 $wgGroupPermissions['user']['read'] = true;
264 $wgGroupPermissions['*']['read'] = true;
266 // Disable read permissions for non-members
267 $wgGroupPermissions['Members']['read'] = true;
268 $wgGroupPermissions['ForgeUsers']['read'] = false;
269 $wgGroupPermissions['user']['read'] = false;
270 $wgGroupPermissions['*']['read'] = false;
273 $wgFavicon = '/images/icon.png' ;
274 $wgBreakFrames = false ;
275 ini_set ('memory_limit', '50M') ;
277 // LOAD THE SITE-WIDE AND PROJECT-SPECIFIC EXTRA-SETTINGS
278 if (is_file(forge_get_config('config_path')."/plugins/mediawiki/LocalSettings.php")) {
279 include(forge_get_config('config_path')."/plugins/mediawiki/LocalSettings.php");
282 // debian style system-wide mediawiki extensions
283 if (is_file("/etc/mediawiki-extensions/extensions.php")) {
284 include( "/etc/mediawiki-extensions/extensions.php" );
287 if (file_exists("$wgUploadDirectory/.wgLogo.png")) {
288 $wgLogo = "$wgScriptPath/images/.wgLogo.png";
291 // project specific settings
292 if (is_file("$project_dir/ProjectSettings.php")) {
293 include ("$project_dir/ProjectSettings.php") ;
298 // c-file-style: "bsd"