Index: branches/RL2/extensions/Gadgets/Gadgets.i18n.php |
— | — | @@ -64,6 +64,10 @@ |
65 | 65 | // TODO clean up inconsistencies between gadgetmanager- and gadgets-manager- etc |
66 | 66 | 'gadgets-manager-create-exists' => 'This gadget cannot be created because there is an existing gadget with the name $1', |
67 | 67 | |
| 68 | + # permission stuff |
| 69 | + 'gadgets-cant-create' => 'You do not have the right to create new Gadgets.', |
| 70 | + 'gadgets-cant-delete' => 'You do not have the right to delete Gadgets.', |
| 71 | + |
68 | 72 | # logging stuff |
69 | 73 | 'gadgets-gadgetmanlog-page' => 'Gadget manager log', |
70 | 74 | 'gadgets-gadgetmanlog-text' => 'This is a log of changes made to gadgets using the [[Special:GadgetManager|gadget manager]].', |
— | — | @@ -73,10 +77,9 @@ |
74 | 78 | |
75 | 79 | #rights |
76 | 80 | 'right-gadgets-edit' => 'Edit pages in the Gadget: namespace', |
77 | | - 'right-gadgets-manager-create' => 'Create new gadgets', |
78 | | - 'right-gadgets-manager-delete' => 'Permanently delete gadgets', |
79 | | - 'right-gadgets-manager-view' => 'View gadget properties', |
80 | | - 'right-gadgets-manager-modify' => 'Modify gadget properties', |
| 81 | + 'right-gadgets-definition-create' => 'Create new gadgets', |
| 82 | + 'right-gadgets-definition-delete' => 'Delete gadgets', |
| 83 | + 'right-gadgets-definition-edit' => 'Modify gadget properties', |
81 | 84 | ); |
82 | 85 | |
83 | 86 | /** Message documentation (Message documentation) |
Index: branches/RL2/extensions/Gadgets/Gadgets.namespaces.php |
— | — | @@ -5,9 +5,13 @@ |
6 | 6 | if ( !defined( 'NS_GADGET' ) ) { |
7 | 7 | define( 'NS_GADGET', 2300 ); |
8 | 8 | define( 'NS_GADGET_TALK', 2301 ); |
| 9 | + define( 'NS_GADGET_DEFINITION', 2302 ); |
| 10 | + define( 'NS_GADGET_DEFINITION_TALK', 2303 ); |
9 | 11 | } |
10 | 12 | |
11 | 13 | $namespaceNames['en'] = array( |
12 | 14 | NS_GADGET => 'Gadget', |
13 | 15 | NS_GADGET_TALK => 'Gadget_talk', |
| 16 | + NS_GADGET_DEFINITION => 'Gadget_definition', |
| 17 | + NS_GADGET_DEFINITION_TALK => 'Gadget_definition_talk', |
14 | 18 | ); |
Index: branches/RL2/extensions/Gadgets/Gadgets.php |
— | — | @@ -75,14 +75,16 @@ |
76 | 76 | |
77 | 77 | define( 'NS_GADGET', 2300 ); |
78 | 78 | define( 'NS_GADGET_TALK', 2301 ); |
| 79 | +define( 'NS_GADGET_DEFINITION', 2302 ); |
| 80 | +define( 'NS_GADGET_DEFINITION_TALK', 2303 ); |
79 | 81 | |
80 | 82 | $wgNamespaceProtection[NS_GADGET][] = 'gadgets-edit'; |
| 83 | +$wgNamespaceProtection[NS_GADGET_DEFINITION][] = 'gadgets-definition-edit'; |
81 | 84 | $wgAvailableRights = array_merge( $wgAvailableRights, array( |
82 | 85 | 'gadgets-edit', |
83 | | - 'gadgets-manager-view', |
84 | | - 'gadgets-manager-create', |
85 | | - 'gadgets-manager-modify', |
86 | | - 'gadgets-manager-delete' |
| 86 | + 'gadgets-definition-create', |
| 87 | + 'gadgets-definition-edit', |
| 88 | + 'gadgets-definition-delete' |
87 | 89 | ) ); |
88 | 90 | |
89 | 91 | $wgHooks['ArticleSaveComplete'][] = 'GadgetHooks::articleSaveComplete'; |
— | — | @@ -92,6 +94,8 @@ |
93 | 95 | $wgHooks['LoadExtensionSchemaUpdates'][] = 'GadgetHooks::loadExtensionSchemaUpdates'; |
94 | 96 | $wgHooks['ResourceLoaderRegisterModules'][] = 'GadgetHooks::registerModules'; |
95 | 97 | $wgHooks['TitleIsCssOrJsPage'][] = 'GadgetHooks::titleIsCssOrJsPage'; |
| 98 | +$wgHooks['TitleIsMovable'][] = 'GadgetHooks::titleIsMovable'; |
| 99 | +$wgHooks['getUserPermissionsErrors'][] = 'GadgetHooks::getUserPermissionsErrors'; |
96 | 100 | //$wgHooks['UnitTestsList'][] = 'GadgetHooks::unitTestsList'; // FIXME: broken |
97 | 101 | |
98 | 102 | $dir = dirname(__FILE__) . '/'; |
Index: branches/RL2/extensions/Gadgets/GadgetHooks.php |
— | — | @@ -156,6 +156,8 @@ |
157 | 157 | public static function canonicalNamespaces( &$list ) { |
158 | 158 | $list[NS_GADGET] = 'Gadget'; |
159 | 159 | $list[NS_GADGET_TALK] = 'Gadget_talk'; |
| 160 | + $list[NS_GADGET_DEFINITION] = 'Gadget_definition'; |
| 161 | + $list[NS_GADGET_DEFINITION_TALK] = 'Gadget_definition_talk'; |
160 | 162 | return true; |
161 | 163 | } |
162 | 164 | |
— | — | @@ -165,4 +167,25 @@ |
166 | 168 | } |
167 | 169 | return true; |
168 | 170 | } |
| 171 | + |
| 172 | + public static function titleIsMovable( $title, &$result ) { |
| 173 | + if ( $title->getNamespace() == NS_GADGET_DEFINITION ) { |
| 174 | + $result = false; |
| 175 | + } |
| 176 | + return true; |
| 177 | + } |
| 178 | + |
| 179 | + public static function getUserPermissionsErrors( $title, $user, $action, &$result ) { |
| 180 | + if ( $title->getNamespace() == NS_GADGET_DEFINITION ) { |
| 181 | + // Enforce restrictions on the Gadget_definition namespace |
| 182 | + if ( $action == 'create' && !$user->isAllowed( 'gadgets-definition-create' ) ) { |
| 183 | + $result[] = array( 'gadgets-cant-create' ); |
| 184 | + return false; |
| 185 | + } elseif ( $action == 'delete' && !$user->isAllowed( 'gadgets-definition-delete' ) ) { |
| 186 | + $result[] = array( 'gadgets-cant-delete' ); |
| 187 | + return false; |
| 188 | + } |
| 189 | + } |
| 190 | + return true; |
| 191 | + } |
169 | 192 | } |