<?php
# Further documentation for configuration settings may be found at:
# https://www.mediawiki.org/wiki/Manual:Configuration_settings

# Protect against web entry
if ( !defined( 'MEDIAWIKI' ) ) {
    exit;
}

## Uncomment this to disable output compression
# $wgDisableOutputCompression = true;

$wgSitename = getenv("WG_SITENAME");
$wgMetaNamespace = "Meta";

$wgScriptPath = getenv("WG_SCRIPT_PATH");
## The URL path to static resources (images, scripts, etc.)
$wgResourceBasePath = $wgScriptPath;

$wgServer = getenv("WG_SERVER");

$wgUploadPath = getenv("WG_UPLOAD_PATH");

# Article path
$wgArticlePath = "/wiki/$1";
$wgUploadDirectory = "/var/www/localstore/images";


## UPO means: this is also a user preference option

$wgEnableEmail = !!getenv("WG_ENABLE_EMAIL");
$wgEnableUserEmail = true; # UPO

$wgEmergencyContact = getenv("WG_EMERGENCY_CONTACT");
$wgPasswordSender = getenv("WG_PASSWORD_SENDER");

$wgEnotifUserTalk = !!getenv("WG_ENABLE_EMAIL"); # UPO
$wgEnotifWatchlist = !!getenv("WG_ENABLE_EMAIL"); # UPO
$wgEmailAuthentication = true;

## Database settings
$wgDBtype = getenv("WG_DB_TYPE");
$wgDBserver = getenv("WG_DB_SERVER");
$wgDBname = getenv("WG_DB_NAME");
$wgDBuser = getenv("WG_DB_USER");
$wgDBpassword = getenv("WG_DB_PASSWORD");
$wgDBport = getenv("WG_DB_PORT");

# Postgres specific settings
if (getenv("WG_DB_MWSCHEMA")) {
    $wgDBmwschema = getenv("WG_DB_MWSCHEMA");
}

# SQLite-specific settings
$wgSQLiteDataDir = getenv("WG_DATABASE_DIR");

## Shared memory settings
if(php_sapi_name() == "cli") {
    $wgMainCacheType    = CACHE_NONE;
} else {
    $wgMainCacheType    = CACHE_ACCEL;
}
$wgMemCachedServers = [];

$wgEnableUploads = !!getenv("WG_ENABLE_UPLOADS");
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";

$wgUseInstantCommons = !!getenv("WG_USE_INSTANT_COMMONS");

# telemetry
$wgPingback = false;

## If you use ImageMagick (or any other shell command) on a
## Linux server, this will need to be set to the name of an
## available UTF-8 locale
$wgShellLocale = "C.UTF-8";

# Site language code, should be one of the list in ./languages/data/Names.php
$wgLanguageCode = "en";

# Time zone
$wgLocaltimezone = "UTC";

## Set $wgCacheDirectory to a writable directory on the web server
## to make your wiki go slightly faster. The directory should not
## be publically accessible from the web.
#$wgCacheDirectory = "$IP/cache";

# Site language code, should be one of the list in ./languages/data/Names.php
$wgLanguageCode = getenv("WG_LANGUAGE_CODE");

$wgSecretKey = getenv("WG_SECRET_KEY");

# Changing this will log out all existing sessions.
$wgAuthenticationTokenVersion = "1";

# Site upgrade key. Must be set to a string (default provided) to turn on the
# web installer while LocalSettings.php is in place
$wgUpgradeKey = "f6490612e52548f9";

## For attaching licensing metadata to pages, and displaying an
## appropriate copyright notice / icon. GNU Free Documentation
## License and Creative Commons licenses are supported so far.
$wgRightsPage = ""; # Set to the title of a wiki page that describes your license/copyright
$wgRightsUrl = "";
$wgRightsText = "";
$wgRightsIcon = "";

# Path to the GNU diff3 utility. Used for conflict resolution.
$wgDiff3 = "/usr/bin/diff3";

$wgGroupPermissions['*']['createaccount'] = !!getenv("ALLOW_PUBLIC_REGISTRATION");
$wgGroupPermissions['*']['autocreateaccount'] = !!getenv("ALLOW_AUTO_REGISTRATION");
$wgGroupPermissions['*']['edit'] = !!getenv("ALLOW_PUBLIC_EDIT");
$wgGroupPermissions['*']['read'] = !!getenv("ALLOW_PUBLIC_READ");

if (!!getenv("USE_REMOTE_AUTH")) {
    # Use remote authentication.
    # When using the VisualEditor extension create a specific parsoid user for
    # locked down wikis (no anonymous read permission), when Parsoid is running
    # on localhost.
    $wgAuthRemoteuserUserName = [
        $_SERVER[ 'REMOTE_USER' ],
        $_SERVER[ 'REDIRECT_REMOTE_USER' ],
        $_SERVER[ 'REMOTE_ADDR' ] == '127.0.0.1' ? 'parsoid' : ''
    ];
    $wgAuthRemoteuserUserPrefs = [
        'realname' => $_SERVER[ 'AUTHENTICATE_DISPLAYNAME' ],
        'language' => 'en',
        'disablemail' => 0
    ];
    // Users email address should not be changed inside MediaWiki.
    $wgAuthRemoteuserUserPrefsForced = [
        'email' => $_SERVER[ 'AUTHENTICATE_MAIL' ]
    ];
}

## Default skin: you can change the default skin. Use the internal symbolic
## names, ie 'vector', 'monobook':
$wgDefaultSkin = "vector";

# Enabled skins.
#wfLoadSkin( 'MonoBook' );
#wfLoadSkin( 'Timeless' );
wfLoadSkin( 'Vector' );

# Enabled extensions. Most of the extensions are enabled by adding
# wfLoadExtensions('ExtensionName');
# to LocalSettings.php. Check specific extension documentation for more details.
# The following extensions were automatically enabled:
wfLoadExtension( 'CategoryTree' );
wfLoadExtension( 'Cite' );
wfLoadExtension( 'CiteThisPage' );
wfLoadExtension( 'CodeEditor' );
wfLoadExtension( 'ConfirmEdit' );
wfLoadExtension( 'Gadgets' );
wfLoadExtension( 'Graph' );
wfLoadExtension( 'ImageMap' );
wfLoadExtension( 'InputBox' );
#wfLoadExtension( 'OATHAuth' );
wfLoadExtension( 'Interwiki' );
wfLoadExtension( 'JsonConfig' ); # Configuration via Special Wiki Pages containing JSON
wfLoadExtension( 'LocalisationUpdate' ); 
wfLoadExtension( 'Maps' ); # OSM Maps
wfLoadExtension( 'Mermaid' ); # Diagrams and flowcharts
wfLoadExtension( 'MsUpload' ); # Better upload formulars
wfLoadExtension( 'MultimediaViewer' );
wfLoadExtension( 'Nuke' ); # Mass delete pages
wfLoadExtension( 'PageImages' );
wfLoadExtension( 'ParserFunctions' );
wfLoadExtension( 'PdfHandler' );
wfLoadExtension( 'Poem' ); # Formatting of poems
wfLoadExtension( 'Renameuser' );
wfLoadExtension( 'ReplaceText' );
wfLoadExtension( 'Scribunto' ); # Lua Scripting
wfLoadExtension( 'SecureLinkFixer' );
wfLoadExtension( 'SpamBlacklist' );
wfLoadExtension( 'SubPageList3' );
wfLoadExtension( 'SyntaxHighlight_GeSHi' );
wfLoadExtension( 'TemplateData' ); # Template schema information
wfLoadExtension( 'TemplateStyles' ); # Embedd Styles from Wiki Pages containing CSS
wfLoadExtension( 'TextExtracts' );
wfLoadExtension( 'TitleBlacklist' );
require_once "$IP/extensions/Validator/Validator.php";
wfLoadExtension( 'VisualEditor' ); # WYSIWYG editor
wfLoadExtension( 'WikiEditor' );

# scribunto configuration
$wgScribuntoDefaultEngine = 'luastandalone';

# Load SMW Extensions
wfLoadExtension( 'PageForms' ); # SMW Dependency
wfLoadExtension( 'SemanticCompoundQueries' ); # Allow combined queries in SMW
wfLoadExtension( 'SemanticExtraSpecialProperties' );
wfLoadExtension( 'SemanticResultFormats' );
wfLoadExtension( 'SemanticScribunto' ); # Lua scripting using semantic information

# Turn on SemanticMediaWiki
$smwgUpgradeKey = 'smw:2020-04-18';
wfLoadExtension( 'SemanticMediaWiki' );
enableSemantics( getenv("SEMANTIC_URL") );

# Configure S3 Storage
if (getenv("S3_SECRET")) {
    wfLoadExtension( 'AWS' );
    $wgAWSCredentials = [
        'key' => getenv("S3_KEY"),
        'secret' => getenv("S3_SECRET"),
        'token' => false
    ];
    $wgAWSRegion = getenv("S3_REGION");
    $wgAWSBucketName = getenv("S3_BUCKET_NAME");

    # If you are using minio, you need to set a public policy like this:
    # mc policy set public instance/bucket/
    # mc admin config set instance/bucket/ api cors_allow_origin=https://wiki.example.com

    $wgAWSBucketTopSubdirectory = getenv("S3_SUBDIRECTORY");
    $wgAWSRepoHashLevels = '2';        # Default 0; But 2 means that S3 objects
                                       # will be named a/ab/Filename.png (same
                                       # as when MediaWiki stores files in local
                                       # directories)
                                       # ---
    $wgAWSRepoDeletedHashLevels = '3'; # Default 0; But 3 for naming
                                       # a/ab/abc/Filename.png (same as
                                       # when MediaWiki stores deleted
                                       # files in local directories)
                                       
    //The url used for the API (PutObject, etc.)
    $wgFileBackends['s3']['endpoint'] = getenv("S3_ENDPOINT");
    //The url used for showing images. $1 is translated to the bucket name.
    $wgAWSBucketDomain = getenv("S3_BUCKET_DOMAIN_NAME");
}

# Set Subpages on
$wgNamespacesWithSubpages[NS_MAIN] = 1;

# Enable long error messages
if (getenv("DEBUG")) {
    $wgShowExceptionDetails = true;
    $wgShowDBErrorBacktrace = true;
    $wgShowSQLErrors = true;
}

#  Local configuration for MediaWiki
ini_set( 'max_execution_time', 1000 );
ini_set('memory_limit', '-1'); 

# Move the SMW config directory
$smwgConfigFileDir = '/var/www/localstore/smwconfig';

# Logos
$wgLogos = [ '1x' => "/wiki/Special:Redirect/file/Logo.png" ];

# Footer icons
if (getenv("DISABLE_ICONS")) {
    $wgFooterIcons['poweredby']['semanticmediawiki'] = false;
    unset( $wgFooterIcons['poweredby'] ); 
}

# Responsive
$wgVectorResponsive = true;