/**
  * returns a json object which hold the data of all existing usergroups
  * @param string $output the ajax output string
  */
 public static function getGroups()
 {
     if (BsCore::checkAccessAdmission('wikiadmin') === false) {
         return true;
     }
     global $wgGroupPermissions;
     $aGroups = array();
     foreach (BsGroupHelper::getAvailableGroups() as $sGroup) {
         if (in_array($sGroup, array('*', 'user', 'autoconfirmed', 'emailconfirmed'))) {
             continue;
         }
         if (!wfMessage('group-' . $sGroup)->inContentLanguage()->isBlank()) {
             $sDisplayName = wfMessage('group-' . $sGroup)->plain() . " (" . $sGroup . ")";
         } else {
             $sDisplayName = $sGroup;
         }
         $aGroups[] = array('group' => $sGroup, 'displayname' => $sDisplayName);
     }
     return FormatJson::encode(array('groups' => $aGroups));
 }
 /**
  * Add the given User to a temporary group if he is a responsible editor
  * for the given Title. This group will have special permissions for the
  * Title's namespace. The group assignment exists only during the current
  * request. This method needs to be called before a permission check is
  * performed on the Title.
  * @param Title $oTitle
  * @param User $oUser
  * @return boolean
  */
 public function applyTempPermissionsForRespEditor(Title $oTitle, User $oUser)
 {
     $iArticleID = $oTitle->getArticleID();
     $aResponsibleEditorsIDs = $this->getResponsibleEditorIdsByArticleId($iArticleID);
     if (!in_array($oUser->getId(), $aResponsibleEditorsIDs)) {
         return false;
     }
     $aAvailablePermissions = BsConfig::get('MW::ResponsibleEditors::AutoPermissions');
     if (empty($aAvailablePermissions)) {
         return false;
     }
     BsGroupHelper::addTemporaryGroupToUser($oUser, 'tmprespeditors', $aAvailablePermissions, $oTitle);
     return true;
 }
 public function getForm()
 {
     global $wgImplicitGroups, $wgGroupPermissions, $wgNamespacePermissionLockdown;
     $this->getOutput()->addModules('ext.bluespice.permissionManager');
     $aGroups = array('text' => '*', 'builtin' => true, 'implicit' => true, 'expanded' => true, 'children' => array(array('text' => 'user', 'builtin' => true, 'implicit' => true, 'expanded' => true, 'children' => array())));
     $aExplicitGroups = BsGroupHelper::getAvailableGroups(array('blacklist' => $wgImplicitGroups));
     sort($aExplicitGroups);
     $aExplicitGroupNodes = array();
     foreach ($aExplicitGroups as $sExplicitGroup) {
         $aExplicitGroupNode = array('text' => $sExplicitGroup, 'leaf' => true);
         if (in_array($sExplicitGroup, self::$aBuiltInGroups)) {
             $aExplicitGroupNode['builtin'] = true;
         }
         $aExplicitGroupNodes[] = $aExplicitGroupNode;
     }
     $aGroups['children'][0]['children'] = $aExplicitGroupNodes;
     $aJsVars = array('bsPermissionManagerGroupsTree' => $aGroups, 'bsPermissionManagerNamespaces' => self::buildNamespaceMetadata(), 'bsPermissionManagerRights' => self::buildRightsMetadata(), 'bsPermissionManagerGroupPermissions' => $wgGroupPermissions, 'bsPermissionManagerPermissionLockdown' => $wgNamespacePermissionLockdown, 'bsPermissionManagerPermissionTemplates' => self::getTemplateRules());
     wfRunHooks('BsPermissionManager::beforeLoadPermissions', array(&$aJsVars));
     //Make sure a new group without any explicit permissions is converted into an object!
     //Without any key => value it would be converted into an empty array.
     foreach ($aJsVars['bsPermissionManagerGroupPermissions'] as $sGroup => $aPermissions) {
         if (!empty($aPermissions)) {
             continue;
         }
         $aJsVars['bsPermissionManagerGroupPermissions'][$sGroup] = (object) array();
     }
     $this->getOutput()->addJsConfigVars($aJsVars);
     return '<div id="panelPermissionManager" style="height: 500px"></div>';
 }