Difference between revisions of "Opasnet update 2017"

From Testiwiki
Jump to: navigation, search
(Opasnet-wiki server)
 
(51 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
This page contains notes produced while updating Opasnet server systems during the summer of 2017.
 
This page contains notes produced while updating Opasnet server systems during the summer of 2017.
 +
 +
== Remaining tasks ==
 +
 +
*CreateBox to InputBox conversion for page creation
 +
**Redirect to [[MediaWiki:Create exists]] does not work
 +
***Or rather it is a feature of CreatBox and will be dropped
 +
***Default behaviour is to open Editor for existing page
 +
**Also used on [http://opasnet.org/en-opwiki/index.php?title=Special%3ASearch&profile=all&search=buttonlabel&fulltext=Search these] pages
 +
*RTools map functionality and OpasnetUtilsExt
 +
**Some datasets (first example on [[Opasnet map]]) involve a PostgreSQL/PostGIS database
 +
***Datatypes make migration between versions difficult
 +
****custom dump (pg_dump -Fc) + hard upgrade (perl utils/postgis_restore.pl in root directory) seems to work
 +
*****readOGR fails for migrated data, different versions of gdal and rgdal produce different errors traceable to data types
 +
***<s>database source name / connection string does not work</s>
 +
**Sorvi package has been updated
 +
***LoadData replaced by load_sorvi_data
 +
***Need to install a non-master branch for the data used in the example:  install_github("ropengov/sorvi", ref = "data-from-gh")
 +
**<s>KML is not drawn</s>
 +
***<s>Page produces "ReferenceError: jQuery is not defined", but map loads and gives message about adding KML, which suggests the relevant part works?</s>
 +
***<s>Could probably use the mediawiki Maps extension instead and draw KML using that</s>
 +
****<s>Very hard to implement since the output (map definition by R-code on the RTools-server) would have to be parsed on the Wiki-server running the RTools-extension. Currently there is an escaping mechanism which allows raw html (including javascript) to be injected into RTools output-blocks. This might have been made harder by changes to MediaWiki ResourceLoader in newer versions (to make malicious cross-site-scripting more difficult) resulting in the jQuery error.</s>
 +
***<s>Could also be a versioning issue, as code on original page runs</s>
 +
***KML file needs to be publicly hosted for Google Maps API, which was not the case for the test wiki.
 +
*Iron out minor bugs in RTools-wiki extension, t2b, OpasnetBase-viewer
 +
*<s>Update live servers</s>
 +
**<s>Update OS</s>
 +
**<s>Update software</s>
 +
**<s>Update extensions</s>
 +
*New server running latest OS and software
 +
**[http://185.123.116.220/w/Main_Page english Opasnet duplicate]
 +
***Basic features work
 +
***<s>TODO: install updated in-house extensions</s>
 +
**<s>TODO: duplicate rest of the wikis</s>
 +
**Issues:
 +
***Page load counters were removed in 1.26
 +
****DPL using hit counters not possible anymore
 +
***Contributors extension is broken
 +
***<s>Apache Virtual server configuration breaks all functionality (likely fixed once using proper domain names)</s>
 +
***<s>Edit toolbar is missing</s>
 +
****<s>Version 1.27.3 without usebetatoolbar=1 works</s>
 +
****<s>TODO: fix custom toolbar buttons</s>
 +
**<s>TODO: lock old server, sync changes, update address, shut down old server</s>
 +
*Other notable issues
 +
**Backup scripts
 +
***Users and keys
 +
**Server users and permissions
 +
**SVN
 +
***On Wiki server
 +
***Contains source code of all software written by us
  
 
== RTools server ==
 
== RTools server ==
Line 17: Line 66:
 
**starts on test server after minor changes
 
**starts on test server after minor changes
 
**further testing needed
 
**further testing needed
*opasnet_base2
+
 
**
+
===OpasnetBase2===
 +
Runs on Apache as a PHP web application. Updating PHP and MongoDB causes a few incompatibilities and other issues with old code:
 +
*MongoDB driver updates
 +
*"Mongo" PHP library deprecated, new "MongoDB" PHP library
 +
**Mongo-class no longer available
 +
***Use MongoDB\Client instead
 +
**Other classes changed to some extent
 +
***cursor does not handle query options -> everything needs to be supplied to collection.find()
 +
***Collections do not implement __get(), hence they cannot be chained like before. db->ident->subset->dat should be combined to db->{ident.subset.dat}.
 +
*Use pecl to install driver
 +
*Use composer to download library to be included in web app
 +
*Actually, a lot of code (~1000 lines)
 +
**"mysql" to "mysqli" patching
 +
***some static functions may need new parameters e.g. OpasnetBaseActiveRecord::parse_qmarks needed a database link where one was not needed before (due to mysqli_real_escape_string requiring a database link parameter now)
 +
**The MongoDB drivers (both old and new) overload __get() to give shortcuts to queries and other functionality, which makes debugging difficult.
 +
***It might be useful to change them to use proper method calls instead.
 +
**"insert" to "insertOne" and "ensureIndex" to "createIndex" patching
 +
**"MongoDate" type changed to "MongoDB\BSON\UTCDateTime"
 +
***Different methods: "date('Y-M-d H:i:s',$obj[$index->ident]->sec)" to "$obj[$index->ident]->toDateTime()->format('Y-M-d H:i:s')"
 +
**Tracked issue with invalid times in $data to MySQL column data type issue (datetime instead of timestamp)
 +
***MySQL table download_sessions contains the keys, chunk counters and download times of every download ever
 +
****HUGE (3.5M rows), pretty much useless after download is complete. This should probably be cleaned regularly.
 +
*Current issues:
 +
**Server throws no exceptions, but returns garbage when attempting to prepare uploads using unmodified OpasnetUtils.
 +
***Using RCurl postForm() for header works.
 +
****Upload, replace, append, download, include, exclude all work.
 +
***<s>Return header seems fine</s>
 +
**test.php upload works
 +
**<s>Read APIs return errors</s> <s>ERROR: Load by columns: record not found!</s>
 +
***<s>MongoDB\Driver\Cursor and other driver classes methods are not exposed to PHP?</s>
 +
****Cursor methods not implemented in the new PHP library -> have to do foreach loop for results and manually chunk them into files.
 +
*****<s>Reasonable to implement</s> Done, performance might be worse however.
 +
***<s>Collection->find(...) executes the given query which means options such as batchSize have to be included in find() as options.</s>
 +
****Irrelevant with foreach loop. The driver handles everything.
 +
*WORKS (well enough)
  
 
== Opasnet-wiki server ==
 
== Opasnet-wiki server ==
Line 34: Line 117:
 
**MyExtension.php no longer supported, need extension.json for registering extensions
 
**MyExtension.php no longer supported, need extension.json for registering extensions
 
**Composer might be useful for managing PHP dependencies
 
**Composer might be useful for managing PHP dependencies
*RTools MediaWiki extension
+
 
**RTools special page class (now named SpecialRtools)
+
=== RTools MediaWiki extension ===
***Creates instance of rtools_client
+
*RTools special page class (now named SpecialRtools)
***separate config file, which is included by SpecialRTools instead of rtools_client for some reason
+
**Creates instance of rtools_client
***fixed: mysql->mysqli
+
**separate config file, which is included by SpecialRTools instead of rtools_client for some reason
***fixed: wfMsg->wfMessage
+
**fixed: "mysql" to "mysqli"
**<nowiki><rcode></nowiki> tag
+
**fixed: "wfMsg" to "wfMessage->text()"
***Detected by parser hooks
+
*<nowiki><rcode></nowiki> tag
***RToolsParser class
+
**Detected by parser hooks
****fixed: wfMsg->wfMessage
+
**RToolsParser class
****fixed: class instead of global functions
+
***fixed: "wfMsg" to "wfMessage->text()"
*****create class instance in parser given by hook in order to retain variable values
+
***fixed: class instead of global functions
****fixed: added wgOut->addModules( 'ext.RTools.parser' ); which enables the on-page UI
+
****create class instance in parser given by hook in order to retain variable values
**rtools_client
+
***fixed: added "wgOut->addModules( 'ext.RTools.parser' );" which enables the on-page UI
***handles connections and job submissions etc. to server
+
***fixed: changed efRCodeMBInArray to a static function and changed reference in templates/inputs/checkbox.php
***xml-rpc library
+
*rtools_client
****communicates with rtools_server API
+
**handles connections and job submissions etc. to server
**javascripts
+
**xml-rpc library
***script.aculo.us + prototype
+
***communicates with rtools_server API
****UI
+
*javascripts
****ajax
+
**script.aculo.us + prototype
****old versions, probably still acceptable
+
***UI
***loaded by mediawiki resource loader
+
***ajax
****now set up in extension.json
+
***old versions, probably still acceptable
**Current issues:
+
**loaded by mediawiki resource loader
***<s>Show code button does not work</s>
+
***now set up in extension.json
***<s>Run page throws: Didn't receive 200 OK from remote server. (HTTP/1.0 500 Internal Server Error), which is a xml-rpc related error</s>
+
*wiki database
***<s>Runs and shows outputs (oprint and cat), but code is not visible, embed also does not work</s>
+
**rtools_inputs
***Input forms are slightly broken: conditional categories do not work, checkboxes crash the whole page
+
***added schema update hook to create the necessary table if missing
*table2base MediaWiki extension
+
*Current issues:
 +
**<s>Show code button does not work</s>
 +
**<s>Run page throws: Didn't receive 200 OK from remote server. (HTTP/1.0 500 Internal Server Error), which is a xml-rpc related error</s>
 +
**<s>Runs and shows outputs (oprint and cat), but code is not visible, embed also does not work</s>
 +
**<s>Input forms are slightly broken: conditional categories do not work, checkboxes crash the whole page</s>
 +
**Rtools page does not update, shows error until refreshed once the run is over. Error on page: "jQuery is not defined", but it is loaded by mediawiki by default. <s>Caused by some linking problem between the special page and mediawiki.</s>
 +
***<s>SpecialRTools-class problem with include of "template/index.php" in method "output" not scoping as expected. Including javascript dependencies separately resolves the first issue, but results in "mw not defined" indicating no access to mediawiki.</s>
 +
***<s>Special page includes javascript for both parser and special page, which does not happen on the current server. It is loaded as part of parser initialization on every page.</s>
 +
***Works 1% of the time ...
 +
 
 +
==Extensions==
 +
 
 +
=== Our extensions ===
 +
====ExternalSourceBrowser: Einari====
 +
*Started in 2010, looks incomplete
 +
*[[Special:ExternalSourceBrowser]] - missing config
 +
*Still loaded for some reason
 +
====OpasnetBase: Einari, Juha====
 +
*Converted to use extension.json registering (maintenance/convertExtensionToRegistration.php)
 +
*wfMsg() to wfMessage()->text()
 +
*Issue: row counter does not always work
 +
**javascript autoloader does not appear to work on all included parts of the page
 +
*Seems to work otherwise
 +
====OpasnetBaseImport: Einari, Juha====
 +
*Converted to use extension.json registering (maintenance/convertExtensionToRegistration.php)
 +
**Parser stuff put in a new class
 +
**Added all classes to Autoload
 +
**Load configuration file at start of all class definition files
 +
***Added "global $wgArticlePath, $wgScript;" at config start to give access to mw globals in the new scope
 +
**Corrected extension documentation URL
 +
*wfMsg() to wfMessage()->text()
 +
*Current issues:
 +
**<s>configuration variable $obImportUploadsPath becomes null or '' somehow</s>
 +
***Changed config to use constants instead of global variables
 +
*Works
 +
====Table2Base: Juha, Einari====
 +
*Uses OpasnetBaseImporters OpasnetBaseUpload class
 +
*Converted to extension registeration
 +
*Created Table2BaseParser-class
 +
*Writes to both OpasnetBase and Wiki database
 +
**Need to figure out wiki database string escapes, may be unnecessary with proper use of wrapper functions. Can't use mysqli_real_escape_string due to mediawiki wrapping.
 +
***Wikimedia\Rdbms\Database::insert handles escaping
 +
**Need to add database update hook
 +
**OpasnetBase queries: 'mysql_real_escape_string' to 'mysqli_real_escape_string' patching
 +
*Current issues:
 +
**No index for t2b uploads in wiki base may make queries slow (affects performance on every page with t2b)?
 +
**Displays data normally, displays errors in data, <s>but does not upload</s>.
 +
***Uploads most of the time, never shows the message: "Data updated successfully!" though.
 +
====OpasnetRater: Einari====
 +
*Rater
 +
*Has seen very limited use
 +
*Low priority
 +
 
 +
====PageID====
 +
*Not ours actually. Created by Jim R. Wilson in 2008.
 +
*Implements <nowiki>{{PAGEID}}</nowiki>
 +
**Which is a [https://www.mediawiki.org/wiki/Help:Magic_words#Technical_metadata core variable] in MediaWiki 1.20+
 +
 
 +
=== Other Extensions ===
 +
Currently installed extensions, still maintained unless specified otherwise. Almost all have been updated since last time. Nothing tested yet.
 +
 
 +
*[https://www.mediawiki.org/wiki/Extension:AuthorProtect AuthorProtect]
 +
**Git maintained
 +
*CategoryTree [https://www.mediawiki.org/wiki/Extension:CategoryTree]
 +
*CheckUser [https://www.mediawiki.org/wiki/Extension:CheckUser]
 +
*ConfirmEdit is shipped with MediaWiki
 +
**ReCaptcha should be replaced with ReCaptcha(NoCaptcha)
 +
*ContactPage [https://www.mediawiki.org/wiki/Extension:ContactPage]
 +
**Need to reconfigure local settings when upgrading
 +
*Contribution Scores [https://www.mediawiki.org/wiki/Extension:Contribution_Scores]
 +
*Contributors [https://www.mediawiki.org/wiki/Extension:Contributors]
 +
*DataValues [https://github.com/DataValues/DataValues]
 +
**DataValues Geo [https://github.com/DataValues/Geo]
 +
**DataValues Time [https://github.com/DataValues/Time]
 +
**DataValues Validators [https://github.com/DataValues/Validators]
 +
**DataValues Common [https://github.com/DataValues/Common]
 +
**DataValues Interfaces [https://github.com/DataValues/Interfaces]
 +
**Still updated
 +
**Loaded via Composer
 +
**Used by Maps extension
 +
*DynamicPageList [https://www.mediawiki.org/wiki/Extension:DynamicPageList_(third-party)]
 +
**<s>Very old version, might not work on latest MediaWiki and PHP</s>
 +
*Google Analytics Integration [https://www.mediawiki.org/wiki/Extension:Google_Analytics_Integration]
 +
*ImageMap is shipped with MediaWiki
 +
*Maps [https://www.mediawiki.org/wiki/Extension:Maps]
 +
**Very active development
 +
**Possible incompatibilities with RTools when upgraded
 +
**[[Opasnet_map]]
 +
***Need to check compatibility with OpasnetUtilsExt and the RTools extension
 +
*Math [https://www.mediawiki.org/wiki/Extension:Math]
 +
*MsLinks [https://www.mediawiki.org/wiki/Extension:MsLinks]
 +
**Used to display files on pages using "<nowiki>{{#l:Testfile.pdf}}</nowiki>"
 +
***<s>Has this been used at all?</s>
 +
**<s>Very old version, likely broken</s>
 +
*MsUpload [https://www.mediawiki.org/wiki/Extension:MsUpload]
 +
**Upload files from editor
 +
***Has this seen any use?
 +
*NewPageCSS [https://www.mediawiki.org/wiki/Extension:NewPageCSS]
 +
**<s>Very old version</s>
 +
**<s>Security risk?</s>
 +
***Install by copying source from wikipage might be considered hazardous, however there are no issues with code.
 +
*PageNotice [https://www.mediawiki.org/wiki/Extension:PageNotice]
 +
*[https://www.mediawiki.org/wiki/Extension:SimpleCalendar SimpleCalendar]
 +
*User Merge and Delete [https://www.mediawiki.org/wiki/Extension:UserMerge]
 +
**Has MediaWiki 1.29+ listed on extension page, but probably works on 1.28
 +
*Validator [https://www.mediawiki.org/wiki/Extension:Validator]
 +
*Widgets [https://www.mediawiki.org/wiki/Extension:Widgets]
 +
**Works
 +
 
 +
==== Obsolete or otherwise dead ====
 +
Not maintained anymore, very old, security risk or integrated to MediaWiki.
 +
 
 +
*Ajax Show Editors [https://www.mediawiki.org/wiki/Extension:AjaxShowEditors]
 +
**Archived
 +
*CreateBox [https://www.mediawiki.org/wiki/Extension:CreateBox]
 +
**Archived
 +
**Option: InputBox [https://www.mediawiki.org/wiki/Extension:InputBox]
 +
***This is included with new installations of MediaWiki 1.21 and above
 +
**Used on [[Create_article]]
 +
***Any others?
 +
*EmailAddressImage [https://www.mediawiki.org/wiki/Extension:EmailAddressImage]
 +
**access to extensions folder is restricted in new default installation, which breaks this extension
 +
***might work in Opasnet
 +
*Google Co-op Extension [https://www.mediawiki.org/wiki/Extension:Google_Custom_Search_Engine] ?
 +
**Search functionality that was never used and is now obsolete?
 +
*NiceCategoryList [https://www.mediawiki.org/wiki/Extension:NiceCategoryList2]
 +
**Security risk
 +
**Implements ncl-tag e.g. <nowiki><ncl>Category:Traffic</ncl></nowiki>
 +
***DynamicPageList dpl-tag does the same thing with <nowiki><dpl>category = Traffic</dpl></nowiki>, is in active development, does not have known vulnerabilities and seems to be in wider use in Opasnet as well.
 +
*Todo Tasks [https://www.mediawiki.org/wiki/Extension:Todo_Tasks]
 +
**Not maintained since 2009, expect to break.
 +
 
 +
==== Not listed in [[Special:Version]] ====
 +
Have to check local settings to see if these are installed. '''Not in use.'''
 +
 
 +
*AccessControl [https://www.mediawiki.org/wiki/Extension:AccessControl]
 +
**Maintained
 +
*ArticleComments [https://www.mediawiki.org/wiki/Extension:ArticleComments]
 +
**Archived
 +
*CategoryStepper [https://www.mediawiki.org/wiki/Extension:CategoryStepper]
 +
**Unmaintained
 +
*CategorySuggest [https://www.mediawiki.org/wiki/Extension:CategorySuggest]
 +
**Maintained
 +
*Discussion [https://www.mediawiki.org/wiki/Extension:Discussion]
 +
**Not maintained, download link dead.
 +
*DiscussionThreading [https://www.mediawiki.org/wiki/Extension:DiscussionThreading]
 +
**Maintained
 +
*Header Footer [https://www.mediawiki.org/wiki/Extension:Header_Footer]
 +
**Maintained
 +
*Lockdown [https://www.mediawiki.org/wiki/Extension:Lockdown]
 +
**Maintained
 +
*mfiles, mfiles2
 +
*NamespacePermissions [https://www.mediawiki.org/wiki/Extension:NamespacePermissions]
 +
**Suggested: Lockdown, which is also present on the server
 +
*PageDisqus [https://www.mediawiki.org/wiki/Extension:PageDisqus]
 +
**Still in beta, git has some recent commits ...
 +
*PdfHandler [https://www.mediawiki.org/wiki/Extension:PdfHandler]
 +
**Shipped with current version of MediaWiki
 +
*Renameuser
 +
**Shipped with current version of MediaWiki
 +
*SelectCategory [https://www.mediawiki.org/wiki/Extension:SelectCategory]
 +
**Maintained
 +
*SimpleAntiSpam [https://www.mediawiki.org/wiki/Extension:SimpleAntiSpam]
 +
**Merged into MediaWiki
 +
*SpamBlacklist [https://www.mediawiki.org/wiki/Extension:SpamBlacklist]
 +
**Maintained
 +
*StubManager [https://www.mediawiki.org/wiki/Extension:StubManager]
 +
**Archived
 +
*Survey [https://www.mediawiki.org/wiki/Extension:Survey]
 +
**Unmaintained
 +
**Alternative if still in use: QuickSurveys [https://www.mediawiki.org/wiki/Extension:QuickSurveys]?
 +
*TitleBlacklist [https://www.mediawiki.org/wiki/Extension:TitleBlacklist]
 +
**Maintained
 +
*WhoIsWatching [https://www.mediawiki.org/wiki/Extension:WhoIsWatching]
 +
**Maintained
 +
*WhosOnlineAjax [https://www.mediawiki.org/wiki/Extension:AjaxWhosOnline]
 +
**Archived
 +
**Alternative: WhosOnline [https://www.mediawiki.org/wiki/Extension:WhosOnline]
 +
 
 +
==See Also==
 +
[[Opasnet:Technical_documentation]]

Latest revision as of 19:10, 30 August 2017

This page contains notes produced while updating Opasnet server systems during the summer of 2017.

Remaining tasks

  • CreateBox to InputBox conversion for page creation
    • Redirect to MediaWiki:Create exists does not work
      • Or rather it is a feature of CreatBox and will be dropped
      • Default behaviour is to open Editor for existing page
    • Also used on these pages
  • RTools map functionality and OpasnetUtilsExt
    • Some datasets (first example on Opasnet map) involve a PostgreSQL/PostGIS database
      • Datatypes make migration between versions difficult
        • custom dump (pg_dump -Fc) + hard upgrade (perl utils/postgis_restore.pl in root directory) seems to work
          • readOGR fails for migrated data, different versions of gdal and rgdal produce different errors traceable to data types
      • database source name / connection string does not work
    • Sorvi package has been updated
      • LoadData replaced by load_sorvi_data
      • Need to install a non-master branch for the data used in the example: install_github("ropengov/sorvi", ref = "data-from-gh")
    • KML is not drawn
      • Page produces "ReferenceError: jQuery is not defined", but map loads and gives message about adding KML, which suggests the relevant part works?
      • Could probably use the mediawiki Maps extension instead and draw KML using that
        • Very hard to implement since the output (map definition by R-code on the RTools-server) would have to be parsed on the Wiki-server running the RTools-extension. Currently there is an escaping mechanism which allows raw html (including javascript) to be injected into RTools output-blocks. This might have been made harder by changes to MediaWiki ResourceLoader in newer versions (to make malicious cross-site-scripting more difficult) resulting in the jQuery error.
      • Could also be a versioning issue, as code on original page runs
      • KML file needs to be publicly hosted for Google Maps API, which was not the case for the test wiki.
  • Iron out minor bugs in RTools-wiki extension, t2b, OpasnetBase-viewer
  • Update live servers
    • Update OS
    • Update software
    • Update extensions
  • New server running latest OS and software
    • english Opasnet duplicate
      • Basic features work
      • TODO: install updated in-house extensions
    • TODO: duplicate rest of the wikis
    • Issues:
      • Page load counters were removed in 1.26
        • DPL using hit counters not possible anymore
      • Contributors extension is broken
      • Apache Virtual server configuration breaks all functionality (likely fixed once using proper domain names)
      • Edit toolbar is missing
        • Version 1.27.3 without usebetatoolbar=1 works
        • TODO: fix custom toolbar buttons
    • TODO: lock old server, sync changes, update address, shut down old server
  • Other notable issues
    • Backup scripts
      • Users and keys
    • Server users and permissions
    • SVN
      • On Wiki server
      • Contains source code of all software written by us

RTools server

CentOS 6.4: full support ended, but still get maintenance updates.

Key software, upgrade paths and related issues:

  • apache 2.2.15 -> 2.2.32 or 2.4.25
    • newer branch not particularly important
  • PHP 5.3.3 -> 5.6.x or 7.1.x
    • incompatibilities in mysql functions
      • "mysql" -> "mysqli" (5.5)
    • should upgrade to latest version
  • MySQL 5.1 -> 5.7
  • mongoDB 2.4 -> 3.2
    • should be relatively easy as we are not using sharding etc.
  • rtools_server PHP application
    • starts on test server after minor changes
    • further testing needed

OpasnetBase2

Runs on Apache as a PHP web application. Updating PHP and MongoDB causes a few incompatibilities and other issues with old code:

  • MongoDB driver updates
  • "Mongo" PHP library deprecated, new "MongoDB" PHP library
    • Mongo-class no longer available
      • Use MongoDB\Client instead
    • Other classes changed to some extent
      • cursor does not handle query options -> everything needs to be supplied to collection.find()
      • Collections do not implement __get(), hence they cannot be chained like before. db->ident->subset->dat should be combined to db->{ident.subset.dat}.
  • Use pecl to install driver
  • Use composer to download library to be included in web app
  • Actually, a lot of code (~1000 lines)
    • "mysql" to "mysqli" patching
      • some static functions may need new parameters e.g. OpasnetBaseActiveRecord::parse_qmarks needed a database link where one was not needed before (due to mysqli_real_escape_string requiring a database link parameter now)
    • The MongoDB drivers (both old and new) overload __get() to give shortcuts to queries and other functionality, which makes debugging difficult.
      • It might be useful to change them to use proper method calls instead.
    • "insert" to "insertOne" and "ensureIndex" to "createIndex" patching
    • "MongoDate" type changed to "MongoDB\BSON\UTCDateTime"
      • Different methods: "date('Y-M-d H:i:s',$obj[$index->ident]->sec)" to "$obj[$index->ident]->toDateTime()->format('Y-M-d H:i:s')"
    • Tracked issue with invalid times in $data to MySQL column data type issue (datetime instead of timestamp)
      • MySQL table download_sessions contains the keys, chunk counters and download times of every download ever
        • HUGE (3.5M rows), pretty much useless after download is complete. This should probably be cleaned regularly.
  • Current issues:
    • Server throws no exceptions, but returns garbage when attempting to prepare uploads using unmodified OpasnetUtils.
      • Using RCurl postForm() for header works.
        • Upload, replace, append, download, include, exclude all work.
      • Return header seems fine
    • test.php upload works
    • Read APIs return errors ERROR: Load by columns: record not found!
      • MongoDB\Driver\Cursor and other driver classes methods are not exposed to PHP?
        • Cursor methods not implemented in the new PHP library -> have to do foreach loop for results and manually chunk them into files.
          • Reasonable to implement Done, performance might be worse however.
      • Collection->find(...) executes the given query which means options such as batchSize have to be included in find() as options.
        • Irrelevant with foreach loop. The driver handles everything.
  • WORKS (well enough)

Opasnet-wiki server

CentOS 6.5: full support ended, but still get maintenance updates.

Key software, upgrade paths and related issues:

  • apache 2.2.15 -> 2.2.32 or 2.4.25
  • PHP 5.4.28 -> 5.6.x or 7.1.x
    • 5.5.9+ required by currently supported mediawiki releases
    • latest php also supported
    • incompatibilities likely to occur in 5.4->5.5, hence might as well upgrade to latest
  • MySQL 5.5.37 -> 5.5.56 or 5.7.x
  • MediaWiki 1.20.0 -> 1.27 (LTS) or 1.28.2 (latest)
    • need to check supported extensions
    • MyExtension.php no longer supported, need extension.json for registering extensions
    • Composer might be useful for managing PHP dependencies

RTools MediaWiki extension

  • RTools special page class (now named SpecialRtools)
    • Creates instance of rtools_client
    • separate config file, which is included by SpecialRTools instead of rtools_client for some reason
    • fixed: "mysql" to "mysqli"
    • fixed: "wfMsg" to "wfMessage->text()"
  • <rcode> tag
    • Detected by parser hooks
    • RToolsParser class
      • fixed: "wfMsg" to "wfMessage->text()"
      • fixed: class instead of global functions
        • create class instance in parser given by hook in order to retain variable values
      • fixed: added "wgOut->addModules( 'ext.RTools.parser' );" which enables the on-page UI
      • fixed: changed efRCodeMBInArray to a static function and changed reference in templates/inputs/checkbox.php
  • rtools_client
    • handles connections and job submissions etc. to server
    • xml-rpc library
      • communicates with rtools_server API
  • javascripts
    • script.aculo.us + prototype
      • UI
      • ajax
      • old versions, probably still acceptable
    • loaded by mediawiki resource loader
      • now set up in extension.json
  • wiki database
    • rtools_inputs
      • added schema update hook to create the necessary table if missing
  • Current issues:
    • Show code button does not work
    • Run page throws: Didn't receive 200 OK from remote server. (HTTP/1.0 500 Internal Server Error), which is a xml-rpc related error
    • Runs and shows outputs (oprint and cat), but code is not visible, embed also does not work
    • Input forms are slightly broken: conditional categories do not work, checkboxes crash the whole page
    • Rtools page does not update, shows error until refreshed once the run is over. Error on page: "jQuery is not defined", but it is loaded by mediawiki by default. Caused by some linking problem between the special page and mediawiki.
      • SpecialRTools-class problem with include of "template/index.php" in method "output" not scoping as expected. Including javascript dependencies separately resolves the first issue, but results in "mw not defined" indicating no access to mediawiki.
      • Special page includes javascript for both parser and special page, which does not happen on the current server. It is loaded as part of parser initialization on every page.
      • Works 1% of the time ...

Extensions

Our extensions

ExternalSourceBrowser: Einari

OpasnetBase: Einari, Juha

  • Converted to use extension.json registering (maintenance/convertExtensionToRegistration.php)
  • wfMsg() to wfMessage()->text()
  • Issue: row counter does not always work
    • javascript autoloader does not appear to work on all included parts of the page
  • Seems to work otherwise

OpasnetBaseImport: Einari, Juha

  • Converted to use extension.json registering (maintenance/convertExtensionToRegistration.php)
    • Parser stuff put in a new class
    • Added all classes to Autoload
    • Load configuration file at start of all class definition files
      • Added "global $wgArticlePath, $wgScript;" at config start to give access to mw globals in the new scope
    • Corrected extension documentation URL
  • wfMsg() to wfMessage()->text()
  • Current issues:
    • configuration variable $obImportUploadsPath becomes null or somehow
      • Changed config to use constants instead of global variables
  • Works

Table2Base: Juha, Einari

  • Uses OpasnetBaseImporters OpasnetBaseUpload class
  • Converted to extension registeration
  • Created Table2BaseParser-class
  • Writes to both OpasnetBase and Wiki database
    • Need to figure out wiki database string escapes, may be unnecessary with proper use of wrapper functions. Can't use mysqli_real_escape_string due to mediawiki wrapping.
      • Wikimedia\Rdbms\Database::insert handles escaping
    • Need to add database update hook
    • OpasnetBase queries: 'mysql_real_escape_string' to 'mysqli_real_escape_string' patching
  • Current issues:
    • No index for t2b uploads in wiki base may make queries slow (affects performance on every page with t2b)?
    • Displays data normally, displays errors in data, but does not upload.
      • Uploads most of the time, never shows the message: "Data updated successfully!" though.

OpasnetRater: Einari

  • Rater
  • Has seen very limited use
  • Low priority

PageID

  • Not ours actually. Created by Jim R. Wilson in 2008.
  • Implements {{PAGEID}}

Other Extensions

Currently installed extensions, still maintained unless specified otherwise. Almost all have been updated since last time. Nothing tested yet.

  • AuthorProtect
    • Git maintained
  • CategoryTree [1]
  • CheckUser [2]
  • ConfirmEdit is shipped with MediaWiki
    • ReCaptcha should be replaced with ReCaptcha(NoCaptcha)
  • ContactPage [3]
    • Need to reconfigure local settings when upgrading
  • Contribution Scores [4]
  • Contributors [5]
  • DataValues [6]
    • DataValues Geo [7]
    • DataValues Time [8]
    • DataValues Validators [9]
    • DataValues Common [10]
    • DataValues Interfaces [11]
    • Still updated
    • Loaded via Composer
    • Used by Maps extension
  • DynamicPageList [12]
    • Very old version, might not work on latest MediaWiki and PHP
  • Google Analytics Integration [13]
  • ImageMap is shipped with MediaWiki
  • Maps [14]
    • Very active development
    • Possible incompatibilities with RTools when upgraded
    • Opasnet_map
      • Need to check compatibility with OpasnetUtilsExt and the RTools extension
  • Math [15]
  • MsLinks [16]
    • Used to display files on pages using "{{#l:Testfile.pdf}}"
      • Has this been used at all?
    • Very old version, likely broken
  • MsUpload [17]
    • Upload files from editor
      • Has this seen any use?
  • NewPageCSS [18]
    • Very old version
    • Security risk?
      • Install by copying source from wikipage might be considered hazardous, however there are no issues with code.
  • PageNotice [19]
  • SimpleCalendar
  • User Merge and Delete [20]
    • Has MediaWiki 1.29+ listed on extension page, but probably works on 1.28
  • Validator [21]
  • Widgets [22]
    • Works

Obsolete or otherwise dead

Not maintained anymore, very old, security risk or integrated to MediaWiki.

  • Ajax Show Editors [23]
    • Archived
  • CreateBox [24]
    • Archived
    • Option: InputBox [25]
      • This is included with new installations of MediaWiki 1.21 and above
    • Used on Create_article
      • Any others?
  • EmailAddressImage [26]
    • access to extensions folder is restricted in new default installation, which breaks this extension
      • might work in Opasnet
  • Google Co-op Extension [27] ?
    • Search functionality that was never used and is now obsolete?
  • NiceCategoryList [28]
    • Security risk
    • Implements ncl-tag e.g. <ncl>Category:Traffic</ncl>
      • DynamicPageList dpl-tag does the same thing with <dpl>category = Traffic</dpl>, is in active development, does not have known vulnerabilities and seems to be in wider use in Opasnet as well.
  • Todo Tasks [29]
    • Not maintained since 2009, expect to break.

Not listed in Special:Version

Have to check local settings to see if these are installed. Not in use.

  • AccessControl [30]
    • Maintained
  • ArticleComments [31]
    • Archived
  • CategoryStepper [32]
    • Unmaintained
  • CategorySuggest [33]
    • Maintained
  • Discussion [34]
    • Not maintained, download link dead.
  • DiscussionThreading [35]
    • Maintained
  • Header Footer [36]
    • Maintained
  • Lockdown [37]
    • Maintained
  • mfiles, mfiles2
  • NamespacePermissions [38]
    • Suggested: Lockdown, which is also present on the server
  • PageDisqus [39]
    • Still in beta, git has some recent commits ...
  • PdfHandler [40]
    • Shipped with current version of MediaWiki
  • Renameuser
    • Shipped with current version of MediaWiki
  • SelectCategory [41]
    • Maintained
  • SimpleAntiSpam [42]
    • Merged into MediaWiki
  • SpamBlacklist [43]
    • Maintained
  • StubManager [44]
    • Archived
  • Survey [45]
    • Unmaintained
    • Alternative if still in use: QuickSurveys [46]?
  • TitleBlacklist [47]
    • Maintained
  • WhoIsWatching [48]
    • Maintained
  • WhosOnlineAjax [49]
    • Archived
    • Alternative: WhosOnline [50]

See Also

Opasnet:Technical_documentation