Page Menu
Home
Miraheze
Search
Configure Global Search
Log In
Paste
P111
(An Untitled Masterwork)
Active
Public
Actions
Authored by
Southparkfan
on Sep 9 2018, 01:52.
Edit Paste
Archive Paste
View Raw File
Subscribe
Mute Notifications
Flag For Later
Award Token
Tags
None
Referenced Files
F847592:
Sep 9 2018, 01:54
2018-09-09 01:54:08 (UTC+0)
F847591:
Sep 9 2018, 01:52
2018-09-09 01:52:44 (UTC+0)
Subscribers
None
<?php
class
ManageWikiHooks
{
public
static
function
onRegistration
()
{
global
$wgLogTypes
;
if
(
!
in_array
(
'farmer'
,
$wgLogTypes
)
)
{
$wgLogTypes
[]
=
'farmer'
;
}
}
public
static
function
onSetupAfterCache
()
{
global
$wgManageWikiPermissionsManagement
,
$wgGroupPermissions
,
$wgAddGroups
,
$wgRemoveGroups
,
$wgCreateWikiDatabase
,
$wgDBname
,
$wgManageWikiPermissionsAdditionalRights
,
$wgManageWikiPermissionsAdditionalAddGroups
,
$wgManageWikiPermissionsAdditionalRemoveGroups
;
// Safe guard if - should not remove all existing settigs if we're not managing permissions with in.
if
(
$wgManageWikiPermissionsManagement
)
{
$wgGroupPermissions
=
[];
$wgAddGroups
=
[];
$wgRemoveGroups
=
[];
$cache
=
\MediaWiki\MediaWikiServices
::
getInstance
()->
getLocalServerObjectCache
(
CACHE_MEMCACHED
);
$wikiPermissions
=
$cache
->
getWithSetCallback
(
$cache
->
makeKey
(
'ManageWiki'
,
'mwpermissions'
),
$cache
::
TTL_HOUR
,
function
()
use
(
$wgCreateWikiDatabase
,
$wgManageWikiPermissionsAdditionalRights
,
$wgManageWikiPermissionsAdditionalAddGroups
,
$wgManageWikiPermissionsAdditionalRemoveGroups
)
{
$dbr
=
wfGetDB
(
DB_REPLICA
,
[],
$wgCreateWikiDatabase
);
$res
=
$dbr
->
select
(
'mw_permissions'
,
[
'perm_group'
,
'perm_permissions'
,
'perm_addgroups'
,
'perm_removegroups'
],
[
'perm_dbname'
=>
$wgDBname
],
__METHOD__
);
$wgGroupPermissions
=
[];
foreach
(
$res
as
$row
)
{
$permsJson
=
json_decode
(
$row
->
permissions
);
foreach
(
(
array
)
$permsJson
as
$perm
)
{
$wgGroupPermissions
[
$row
->
perm_group
][
$perm
]
=
true
;
}
if
(
$wgManageWikiPermissionsAdditionalRights
)
{
$wgGroupPermissions
=
array_merge_recursive
(
$wgGroupPermissions
,
$wgManageWikiPermissionsAdditionalRights
);
}
$wgAddGroups
[
$row
->
perm_group
]
=
json_decode
(
$row
->
perm_addgroups
);
if
(
$wgManageWikiPermissionsAdditionalAddGroups
)
{
$wgAddGroups
=
array_merge_recursive
(
$wgAddGroups
,
$wgManageWikiPermissionsAdditionalAddGroups
);
}
$wgRemoveGroups
[
$row
->
perm_group
]
=
json_decode
(
$row
->
perm_removegrups
);
if
(
$wgManageWikiPermissionsAdditionalRemoveGroups
)
{
$wgRemoveGroups
=
array_merge_recursive
(
$wgRemoveGroups
,
$wgManageWikiPermissionsAdditionalRemoveGroups
);
}
return
(
string
)
serialize
(
[
$wgGroupPermissions
,
$wgAddGroups
,
$wgRemoveGroups
,
]
);
}
}
);
$permissionsArray
=
unserialize
(
$wikiPermissions
);
$wgGroupPermissions
=
$permissionsArray
[
'wgGroupPermissions'
];
$wgAddGroups
=
$permissionsArray
[
'wgAddGroups'
];
$wgRemoveGroups
=
$permissionsArray
[
'wgRemoveGroups'
];
}
}
public
static
function
onCreateWikiCreation
(
$dbname
,
$private
)
{
global
$wgManageWikiPermissionsDefaultPrivateGroup
,
$wgCreateWikiDatabase
;
$defaultGroups
=
ManageWiki
::
defaultGroups
();
$dbw
=
wfGetDB
(
DB_MASTER
,
[],
$wgCreateWikiDatabase
);
if
(
!
$private
)
{
$defaultGroups
=
array_diff
(
$defaultGroups
,
[
"member"
]
);
}
foreach
(
$defaultGroups
as
$newgroup
)
{
$grouparray
=
ManageWiki
::
defaultGroupPermissions
(
$newgroup
);
$dbw
->
insert
(
'mw_permissions'
,
[
'perm_dbname'
=>
$dbname
,
'perm_group'
=>
$newgroup
,
'perm_permissions'
=>
json_encode
(
$grouparray
[
'permissions'
]
),
'perm_addgroups'
=>
json_encode
(
$grouparray
[
'add'
]
),
'perm_removegroups'
=>
json_encode
(
$grouparray
[
'remove'
]
)
],
__METHOD__
);
}
}
public
static
function
onCreateWikiStatePrivate
(
$dbname
)
{
global
$wgManageWikiPermissionsDefaultPrivateGroup
,
$wgCreateWikiDatabase
,
$wgManageWikiPermissionsManagement
;
if
(
$wgManageWikiPermissionsManagement
&&
$wgManageWikiPermissionsDefaultPrivateGroup
)
{
$defaultarray
=
ManageWiki
::
defaultGroupPermissions
(
$wgManageWikiPermissionsDefaultPrivateGroup
);
$dbw
=
wfGetDB
(
DB_MASTER
,
[],
$wgCreateWikiDatabase
);
$dbw
->
insert
(
'mw_permissions'
,
[
'perm_dbname'
=>
$dbname
,
'perm_group'
=>
$wgManageWikiPermissionsDefaultPrivateGroup
,
'perm_permissions'
=>
json_encode
(
$defaultarray
[
'permissions'
]
),
'perm_addgroups'
=>
json_encode
(
$defaultarray
[
'add'
]
),
'perm_removegroups'
=>
json_encode
(
$defaultarray
[
'remove'
]
),
],
__METHOD__
);
$publicGroups
=
[
'*'
,
'user'
];
foreach
(
$publicGroups
as
$group
)
{
$meta
=
ManageWiki
::
groupPermissions
(
$group
);
$perms
=
$meta
[
'permissions'
];
$newperms
=
array_diff
(
$perms
,
[
'read'
]
);
$dbw
->
update
(
'mw_permissions'
,
[
'perm_permissions'
=>
$json_encode
(
$newperms
)
],
[
'perm_dbname'
=>
$dbname
,
'perm_group'
=>
$group
],
__METHOD__
);
}
}
}
public
static
function
onCreateWikiStatePublic
(
$dbname
)
{
global
$wgManageWikiPermissionsDefaultPrivateGroup
,
$wgCreateWikiDatabase
,
$wgManageWikiPermissionsManagement
;
if
(
$wgManageWikiPermissionsManagement
&&
$wgManageWikiPermissionsDefaultPrivateGroup
)
{
$dbw
=
wfGetDB
(
DB_MASTER
,
[],
$wgCreateWikiDatabase
);
$dbw
->
delete
(
'mw_permissions'
,
[
'perm_dbname'
=>
$dbname
,
'perm_group'
=>
$wgManageWikiPermissionsDefaultPrivateGroup
],
__METHOD__
);
$meta
=
ManageWiki
::
groupPermissions
(
'*'
);
$perms
=
$meta
[
'permissions'
];
$perms
[]
=
"read"
;
$dbw
->
update
(
'mw_permissions'
,
[
'perm_permissions'
=>
json_encode
(
$perms
)
],
[
'perm_dbname'
=>
$dbname
,
'perm_group'
=>
'*'
],
__METHOD__
);
}
}
public
static
function
fnNewSidebarItem
(
$skin
,
&
$bar
)
{
global
$wgManageWikiSidebarLinks
,
$wgEnableManageWiki
,
$wgManageWikiExtensions
,
$wgManageWikiPermissionsManagement
,
$wgManageWikiSettings
;
if
(
$skin
->
getUser
()->
isAllowed
(
'managewiki'
)
&&
$wgManageWikiSidebarLinks
)
{
if
(
$wgEnableManageWiki
)
{
$bar
[
'Administration'
][]
=
[
'text'
=>
wfMessage
(
'managewiki-link'
)->
plain
(),
'id'
=>
'managewikilink'
,
'href'
=>
htmlspecialchars
(
SpecialPage
::
getTitleFor
(
'ManageWiki'
)->
getFullURL
()
)
];
if
(
$wgManageWikiExtensions
)
{
$bar
[
'Administration'
][]
=
[
'text'
=>
wfMessage
(
'managewiki-extensions-link'
)->
plain
(),
'id'
=>
'managewikiextensionslink'
,
'href'
=>
htmlspecialchars
(
SpecialPage
::
getTitleFor
(
'ManageWikiExtensions'
)->
getFullURL
()
)
];
}
if
(
$wgManageWikiPermissionsManagement
)
{
$bar
[
'Administration'
][]
=
[
'text'
=>
wfMessage
(
'managewiki-permissions-link'
)->
plain
(),
'id'
=>
'managewikipermissionslink'
,
'href'
=>
htmlspecialchars
(
SpecialPage
::
getTitleFor
(
'ManageWikiPermissions'
)->
getFullURL
()
)
];
}
if
(
$wgManageWikiSettings
)
{
$bar
[
'Administration'
][]
=
[
'text'
=>
wfMessage
(
'managewiki-settings-link'
)->
plain
(),
'id'
=>
'managewikisettingslink'
,
'href'
=>
htmlspecialchars
(
SpecialPage
::
getTitleFor
(
'ManageWikiSettings'
)->
getFullURL
()
)
];
}
}
}
}
}
Event Timeline
Southparkfan
created this paste.
Sep 9 2018, 01:52
2018-09-09 01:52:44 (UTC+0)
Southparkfan
edited the content of this paste.
(Show Details)
Log In to Comment