[MediaWiki-commits] [Gerrit] New API: UserStore - change (mediawiki...BlueSpiceFoundation)

2015-11-10 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged.

Change subject: New API: UserStore
..


New API: UserStore

This is the first draft of the new UserStore api. It is going to replace
the BsCommonAJAXInterface::getUserStoreData implementation

PatchSet2:
* Added link to user page

Change-Id: I6895a12a059513f58ee00a1be89d3c1b4436d95f
---
M BlueSpiceFoundation.php
M includes/AutoLoader.php
A includes/api/BSApiUserStore.php
M resources/bluespice.extjs/BS/model/User.js
4 files changed, 53 insertions(+), 1 deletion(-)

Approvals:
  Robert Vogel: Looks good to me, approved
  Tweichart: Looks good to me, but someone else must approve
  jenkins-bot: Verified



diff --git a/BlueSpiceFoundation.php b/BlueSpiceFoundation.php
index 1248ff0..ef2f7c5 100644
--- a/BlueSpiceFoundation.php
+++ b/BlueSpiceFoundation.php
@@ -66,6 +66,7 @@
 $wgAjaxExportList[] = 'BsCore::ajaxBSPing';
 
 $wgAPIModules['bs-filebackend-store'] = 'BSApiFileBackendStore';
+$wgAPIModules['bs-user-store'] = 'BSApiUserStore';
 
 //I18N MW1.23+
 $wgMessagesDirs['BlueSpice'] = __DIR__ . '/i18n/core';
diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php
index 99d11e9..89604a1 100644
--- a/includes/AutoLoader.php
+++ b/includes/AutoLoader.php
@@ -56,6 +56,7 @@
 $GLOBALS['wgAutoloadClasses']['BSApiTasksBase'] = 
__DIR__."/api/BSApiTasksBase.php";
 $GLOBALS['wgAutoloadClasses']['BSApiExtJSStoreBase'] = 
__DIR__."/api/BSApiExtJSStoreBase.php";
 $GLOBALS['wgAutoloadClasses']['BSApiFileBackendStore'] = 
__DIR__."/api/BSApiFileBackendStore.php";
+$GLOBALS['wgAutoloadClasses']['BSApiUserStore'] = 
__DIR__."/api/BSApiUserStore.php";
 
 //adapter
 $GLOBALS['wgAutoloadClasses']['BsExtensionMW'] = 
__DIR__."/ExtensionMW.class.php";
diff --git a/includes/api/BSApiUserStore.php b/includes/api/BSApiUserStore.php
new file mode 100644
index 000..5076816
--- /dev/null
+++ b/includes/api/BSApiUserStore.php
@@ -0,0 +1,44 @@
+getDB();
+
+   $aGroups = array();
+   $groupsRes = $dbr->select( 'user_groups', '*' );
+   foreach( $groupsRes as $row ) {
+   if( !isset( $aGroups[$row->ug_user] ) ) {
+   $aGroups[$row->ug_user] = array();
+   }
+   $aGroups[$row->ug_user][] = $row->ug_group;
+   }
+
+   //TODO: It would be very cool to have the permissions as a 
filterable
+   //field. Unfortunately this requires some context information 
from the
+   //client. I.e. The page/namespace for which the permissions 
should be
+   //calculated. This would also be very expensive and a potential
+   //security issue.
+
+   $aData = array();
+   $userRes = $dbr->select( 'user', '*' );
+   foreach( $userRes as $row ) {
+   $oUserPageTitle = Title::makeTitle( NS_USER, 
$row->user_name );
+   $aData[] = (object)array(
+   'user_id' => $row->user_id,
+   'user_name' => $row->user_name,
+   'user_real_name' => $row->user_real_name,
+   'user_registration' => $row->user_registration,
+   'user_editcount' => $row->user_editcount,
+   'groups' => isset( $aGroups[$row->user_id] ) ? 
$aGroups[$row->user_id] : array(),
+   'page_link' => Linker::link( $oUserPageTitle, 
$row->user_name.' ' ), //The whitespace is to aviod automatic rewrite to 
user_real_name by BSF
+
+   //legacy fields
+   'display_name' => $row->user_real_name == null 
? $row->user_name : $row->user_real_name,
+   'page_prefixed_text' => 
$oUserPageTitle->getPrefixedText()
+   );
+   }
+
+   return $aData;
+   }
+}
\ No newline at end of file
diff --git a/resources/bluespice.extjs/BS/model/User.js 
b/resources/bluespice.extjs/BS/model/User.js
index bb219c4..e164b0d 100644
--- a/resources/bluespice.extjs/BS/model/User.js
+++ b/resources/bluespice.extjs/BS/model/User.js
@@ -4,7 +4,13 @@
fields: [
{ name: 'user_id', type: 'int' },
{ name: 'user_name', type: 'string' },
+   { name: 'user_real_name', type: 'string' },
+   { name: 'user_registration', type: 'date', defaultValue: 
'1970010100', dateFormat: 'YmdHis' },
+   { name: 'user_editcount', type: 'int' },
+   { name: 'groups', type: 'array', defaultValue: [] },
+
+   //legacy fields
{ name: 'display_name', type: 'string' },
-   { name: 'page_prefixed_text', type: 'string' },
+   { name: 'page_prefixed_text', type: 'string' }
]
 });

-- 
To view, visit 

[MediaWiki-commits] [Gerrit] New API: UserStore - change (mediawiki...BlueSpiceFoundation)

2015-07-06 Thread Robert Vogel (Code Review)
Robert Vogel has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/223027

Change subject: New API: UserStore
..

New API: UserStore

This is the first draft of the new UserStore api. It is going to replace
the BsCommonAJAXInterface::getUserStoreData implementation

Change-Id: I6895a12a059513f58ee00a1be89d3c1b4436d95f
---
M BlueSpiceFoundation.php
M includes/AutoLoader.php
A includes/api/BSApiUserStore.php
M resources/bluespice.extjs/BS/model/User.js
4 files changed, 51 insertions(+), 1 deletion(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BlueSpiceFoundation 
refs/changes/27/223027/1

diff --git a/BlueSpiceFoundation.php b/BlueSpiceFoundation.php
index 1248ff0..ef2f7c5 100644
--- a/BlueSpiceFoundation.php
+++ b/BlueSpiceFoundation.php
@@ -66,6 +66,7 @@
 $wgAjaxExportList[] = 'BsCore::ajaxBSPing';
 
 $wgAPIModules['bs-filebackend-store'] = 'BSApiFileBackendStore';
+$wgAPIModules['bs-user-store'] = 'BSApiUserStore';
 
 //I18N MW1.23+
 $wgMessagesDirs['BlueSpice'] = __DIR__ . '/i18n/core';
diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php
index 99d11e9..89604a1 100644
--- a/includes/AutoLoader.php
+++ b/includes/AutoLoader.php
@@ -56,6 +56,7 @@
 $GLOBALS['wgAutoloadClasses']['BSApiTasksBase'] = 
__DIR__./api/BSApiTasksBase.php;
 $GLOBALS['wgAutoloadClasses']['BSApiExtJSStoreBase'] = 
__DIR__./api/BSApiExtJSStoreBase.php;
 $GLOBALS['wgAutoloadClasses']['BSApiFileBackendStore'] = 
__DIR__./api/BSApiFileBackendStore.php;
+$GLOBALS['wgAutoloadClasses']['BSApiUserStore'] = 
__DIR__./api/BSApiUserStore.php;
 
 //adapter
 $GLOBALS['wgAutoloadClasses']['BsExtensionMW'] = 
__DIR__./ExtensionMW.class.php;
diff --git a/includes/api/BSApiUserStore.php b/includes/api/BSApiUserStore.php
new file mode 100644
index 000..e8875e2
--- /dev/null
+++ b/includes/api/BSApiUserStore.php
@@ -0,0 +1,42 @@
+?php
+
+class BSApiUserStore extends BSApiExtJSStoreBase {
+
+   protected function makeData($sQuery = '') {
+   $dbr = $this-getDB();
+
+   $aGroups = array();
+   $groupsRes = $dbr-select( 'user_groups', '*' );
+   foreach( $groupsRes as $row ) {
+   if( !isset( $aGroups[$row-ug_user] ) ) {
+   $aGroups[$row-ug_user] = array();
+   }
+   $aGroups[$row-ug_user][] = $row-ug_group;
+   }
+
+   //TODO: It would be very cool to have the permissions as a 
filterable
+   //field. Unfortunately this requires some context information 
from the
+   //client. I.e. The page/namespace for which the permissions 
should be
+   //calculated. This would also be very expensive and a potential
+   //security issue.
+
+   $aData = array();
+   $userRes = $dbr-select( 'user', '*' );
+   foreach( $userRes as $row ) {
+   $aData[] = (object)array(
+   'user_id' = $row-user_id,
+   'user_name' = $row-user_name,
+   'user_real_name' = $row-user_real_name,
+   'user_registration' = $row-user_registration,
+   'user_editcount' = $row-user_editcount,
+   'groups' = isset( $aGroups[$row-user_id] ) ? 
$aGroups[$row-user_id] : array(),
+
+   //legacy fields
+   'display_name' = $row-user_real_name == null 
? $row-user_name : $row-user_real_name,
+   'page_prefixed_text' = Title::makeTitle( 
NS_USER, $row-user_name )-getPrefixedText()
+   );
+   }
+
+   return $aData;
+   }
+}
\ No newline at end of file
diff --git a/resources/bluespice.extjs/BS/model/User.js 
b/resources/bluespice.extjs/BS/model/User.js
index bb219c4..e164b0d 100644
--- a/resources/bluespice.extjs/BS/model/User.js
+++ b/resources/bluespice.extjs/BS/model/User.js
@@ -4,7 +4,13 @@
fields: [
{ name: 'user_id', type: 'int' },
{ name: 'user_name', type: 'string' },
+   { name: 'user_real_name', type: 'string' },
+   { name: 'user_registration', type: 'date', defaultValue: 
'1970010100', dateFormat: 'YmdHis' },
+   { name: 'user_editcount', type: 'int' },
+   { name: 'groups', type: 'array', defaultValue: [] },
+
+   //legacy fields
{ name: 'display_name', type: 'string' },
-   { name: 'page_prefixed_text', type: 'string' },
+   { name: 'page_prefixed_text', type: 'string' }
]
 });

-- 
To view, visit https://gerrit.wikimedia.org/r/223027
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: