/** * returns a json object which hold the data of all existing usergroups * @param string $output the ajax output string */ public static function getData() { if (BsCore::checkAccessAdmission('wikiadmin') === false) { return true; } global $wgGroupPermissions, $wgAdditionalGroups; $oStoreParams = BsExtJSStoreParams::newFromRequest(); $iLimit = $oStoreParams->getLimit(); $iStart = $oStoreParams->getStart(); $sSort = $oStoreParams->getSort('group_name'); $sDirection = $oStoreParams->getDirection(); $aGroups = array(); foreach (BsGroupHelper::getAvailableGroups() as $sGroup) { $aGroups['groups'][] = array('group_name' => $sGroup, 'additional_group' => isset($wgAdditionalGroups[$sGroup])); } if ($sDirection == 'DESC') { usort($aGroups['groups'], function ($a, $b) { return strnatcasecmp($b["group_name"], $a["group_name"]); }); } else { usort($aGroups['groups'], function ($a, $b) { return strnatcasecmp($a["group_name"], $b["group_name"]); }); } $aGroups['totalCount'] = sizeof($aGroups['groups']); // Apply limit and offset $aGroups['groups'] = array_slice($aGroups['groups'], $iStart, $iLimit); return FormatJson::encode($aGroups); }
public static function ajaxGetArticlesByNamespaceId() { if (BsCore::checkAccessAdmission('edit') === false) { return true; } global $wgOut, $wgRequest; $wgOut->disable(); $oParams = BsExtJSStoreParams::newFromRequest(); $iStart = $wgRequest->getInt('start', 0); $sSort = $oParams->getSort('page_title'); $sDirection = $oParams->getDirection(); $iLimit = $wgRequest->getInt('limit', 25); $sDisplayMode = $wgRequest->getVal('displayMode', 'only-assigned'); $iNamespaceId = $wgRequest->getInt('namespaceId', -99); $aActivatedNamespaces = BsConfig::get('MW::ResponsibleEditors::ActivatedNamespaces'); $oResult = new stdClass(); $aTables = array('bs_responsible_editors', 'user', 'page'); $aVariables = array('page_id', 'page_title', 'page_namespace'); $aConditions = array('page_namespace' => $aActivatedNamespaces); if ($sDisplayMode == 'only-assigned') { $aConditions[] = 're_user_id IS NOT NULL '; } else { if ($sDisplayMode == 'only-not-assigned') { $aConditions[] = 're_user_id IS NULL '; } } if ($iNamespaceId != -99) { $aConditions['page_namespace'] = $iNamespaceId; } $aOptions = array('ORDER BY' => $sSort . ' ' . $sDirection, 'LIMIT' => $iLimit, 'OFFSET' => $iStart, 'GROUP BY' => 'page_id'); if ($sSort == 'user_displayname') { $aOptions['ORDER BY'] = 'user_real_name, user_name ' . $sDirection; } $aJoinOptions = array('user' => array('JOIN', 'user_id = re_user_id'), 'page' => array('RIGHT JOIN', 'page_id = re_page_id')); $dbr = wfGetDB(DB_SLAVE); //TODO: Rework "total" calculation. This seems very complicated but it //should be as easy as excuting the main query without LIMIT/OFFSET. if ($sDisplayMode == 'only-assigned' || $sDisplayMode == 'only-not-assigned') { $row = $dbr->select(array('page', 'bs_responsible_editors'), 'page_id AS cnt', $aConditions, __METHOD__, array('GROUP BY' => 'page_id'), array('page' => array('RIGHT JOIN', 'page_id = re_page_id'))); $oResult->total = $row->numRows(); } if ($sDisplayMode == 'all') { $aConditionsWithoutRePageID = $aConditions; unset($aConditionsWithoutRePageID[0]); $row = $dbr->selectRow('page', 'COUNT( page_id ) AS cnt', $aConditionsWithoutRePageID); $oResult->total = $row->cnt; } $res = $dbr->select($aTables, $aVariables, $aConditions, __METHOD__, $aOptions, $aJoinOptions); $oResult->pages = array(); foreach ($res as $row) { $oTitle = Title::newFromId($row->page_id); $iPageId = $row->page_id; $sPageNsId = !empty($row->page_namespace) ? $row->page_namespace : 0; $sPageTitle = $row->page_title; $oPage = new stdClass(); $oPage->page_id = $iPageId; $oPage->page_namespace = $sPageNsId; $oPage->page_title = $sPageTitle; $oPage->page_prefixedtext = $oTitle->getPrefixedText(); $oPage->users = array(); $aEditorIDs = BsExtensionManager::getExtension('ResponsibleEditors')->getResponsibleEditorIdsByArticleId($row->page_id); $aEditorIDs = array_unique($aEditorIDs); foreach ($aEditorIDs as $iEditorID) { $oUser = User::newFromId($iEditorID); if ($oUser == null) { continue; } $oPage->users[] = array('user_id' => $iEditorID, 'user_page_link_url' => $oUser->getUserPage()->getFullUrl(), 'user_displayname' => BsCore::getUserDisplayName($oUser)); } $oResult->pages[] = $oPage; } return FormatJson::encode($oResult); }
public static function getUsers() { //if ( BsCore::checkAccessAdmission( 'wikiadmin' ) === false ) return true; $oStoreParams = BsExtJSStoreParams::newFromRequest(); $iLimit = $oStoreParams->getLimit(); $iStart = $oStoreParams->getStart(); $sSort = $oStoreParams->getSort('user_name'); $sDirection = $oStoreParams->getDirection(); $aFilters = $oStoreParams->getFilter(); $aSortingParams = FormatJson::decode($sSort); if (is_array($aSortingParams)) { $sSort = $aSortingParams[0]->property; $sDirection = $aSortingParams[0]->direction; } $dbr = wfGetDB(DB_SLAVE); global $wgDBtype, $wgDBprefix; //PW TODO: filter for oracle if ($wgDBtype == 'oracle') { $res = $dbr->query("SELECT * FROM\n\t\t\t\t\t(\n\t\t\t\t\t\tSELECT user_id,user_name,user_real_name,user_email,row_number() OVER (ORDER BY " . $sSort . " " . $sDirection . ") rnk\n\t\t\t\t\t\tFROM \"" . strtoupper($wgDBprefix) . "MWUSER\"\n\t\t\t\t\t)\n\t\t\t\tWHERE rnk BETWEEN " . ($iStart + 1) . " AND " . ($iLimit + $iStart)); } else { $aTables = array('user'); $aOptions = array('ORDER BY' => $sSort . ' ' . $sDirection, 'LIMIT' => $iLimit, 'OFFSET' => $iStart); $aJoins = array(); $aConditions = array(); if (!empty($aFilters)) { foreach ($aFilters as $oFilter) { switch ($oFilter->field) { case 'user_name': $aConditions[] = "user_name LIKE '%" . trim($oFilter->value) . "%'"; break; case 'user_real_name': $aConditions[] = "user_real_name LIKE '%" . trim($oFilter->value) . "%'"; break; case 'user_email': $aConditions[] = "user_email LIKE '%" . trim($oFilter->value) . "%'"; break; case 'groups': $aTables[] = 'user_groups'; $aConditions[] = "ug_group IN ('" . implode("','", $oFilter->value) . "')"; $aJoins['user_groups'] = array('LEFT JOIN', 'ug_user=user_id'); } } } $res = $dbr->select($aTables, '*', $aConditions, __METHOD__, $aOptions, $aJoins); } $data = array(); $data['users'] = array(); while ($row = $res->fetchObject()) { $oUserTitle = Title::newFromText($row->user_name, NS_USER); $tmp = array(); $tmp['user_id'] = $row->user_id; $tmp['user_name'] = $row->user_name; $tmp['user_page_link'] = Linker::link($oUserTitle, $row->user_name . ' '); //The whitespace is to aviod automatic rewrite to user_real_name by BSF $tmp['user_real_name'] = $row->user_real_name; $tmp['user_email'] = $row->user_email == null ? '' : $row->user_email; //PW: Oracle returns null when field is emtpy $tmp['groups'] = array(); $res1 = $dbr->select('user_groups', 'ug_group', 'ug_user='******'groups'][] = ( !wfMessage( 'group-' . $row1->ug_group )->inContentLanguage()->isBlank() ) ? wfMessage( 'group-' . $row1->ug_group )->plain() : $row1->ug_group ; if (!wfMessage('group-' . $row1->ug_group)->inContentLanguage()->isBlank()) { $tmp['groups'][] = array('group' => $row1->ug_group, 'displayname' => wfMessage('group-' . $row1->ug_group)->plain() . " (" . $row1->ug_group . ")"); } else { $tmp['groups'][] = array('group' => $row1->ug_group, 'displayname' => $row1->ug_group); } } if (is_array($tmp['groups'])) { sort($tmp['groups']); } $data['users'][] = $tmp; } $row = $dbr->selectRow('user', 'COUNT( user_id ) AS cnt', array()); $data['totalCount'] = $row->cnt; $oUserManager = BsExtensionManager::getExtension('UserManager'); wfRunHooks('BSWikiAdminUserManagerBeforeUserListSend', array($oUserManager, &$data)); return FormatJson::encode($data); }
/** * Get the pages for specialpage, called via ajax * @param string $sOutput Output to return * @return bool Always true */ public static function getData($iUserID) { $oDbr = wfGetDB(DB_SLAVE); $oStoreParams = BsExtJSStoreParams::newFromRequest(); $iLimit = $oStoreParams->getLimit(); $iStart = $oStoreParams->getStart(); $sSort = $oStoreParams->getSort('MAX(readers_ts)'); $sDirection = $oStoreParams->getDirection(); if ($sSort == 'pv_page') { $sSort = 'page_title'; } elseif ($sSort == 'pv_ts') { $sSort = 'MAX( readers_ts )'; } $res = $oDbr->select(array('page', 'bs_readers'), array('page_title', 'readers_page_id', 'readers_user_name', 'MAX( readers_ts ) as readers_ts'), array('readers_page_id = page_id', 'readers_user_id' => $iUserID), __METHOD__, array('GROUP BY' => 'readers_page_id', 'ORDER BY' => $sSort . " " . $sDirection, 'LIMIT' => $iLimit, 'OFFSET' => $iStart)); $aPages = array(); if ($oDbr->numRows($res) > 0) { $oLanguage = RequestContext::getMain()->getLanguage(); foreach ($res as $row) { $oTitle = Title::newFromID($row->readers_page_id); $aTmpPage = array(); $aTmpPage['pv_page'] = $oTitle->getLocalURL(); $aTmpPage['pv_page_title'] = $oTitle->getPrefixedText(); $aTmpPage['pv_ts'] = $oLanguage->timeanddate($row->readers_ts); $aPages['page'][] = $aTmpPage; } } $oDbr->freeResult($res); $rowCount = $oDbr->select('bs_readers', 'readers_page_id', array('readers_user_id' => $iUserID), __METHOD__, array('GROUP BY' => 'readers_page_id')); $aPages['totalCount'] = $oDbr->numRows($rowCount); $oDbr->freeResult($rowCount); return json_encode($aPages); }