Pigpen has submitted this change and it was merged.
Change subject: Latest state of development
......................................................................
Latest state of development
Change-Id: I3b3744e8e3a02d5de390fe6bad02bd1d24359c08
---
A GroupManager/doc/Hooks.txt
A PermissionManager/resources/BS.PermissionManager/GridPanelExtra.js
A PermissionManager/resources/BS.PermissionManager/TemplateEditor.js
A PermissionManager/resources/BS.PermissionManager/model/AccessData.js
A PermissionManager/resources/BS.PermissionManager/model/Template.js
M Readers/Readers.class.php
A Readers/db/readers.patch.readers_ts.sql
M Readers/db/readers.sql
A Review/views/view.StateBarBodyElementReview.php
A ShoutBox/resources/images/shoutbox-more-btn.png
10 files changed, 444 insertions(+), 3 deletions(-)
Approvals:
Pigpen: Verified; Looks good to me, approved
diff --git a/GroupManager/doc/Hooks.txt b/GroupManager/doc/Hooks.txt
new file mode 100644
index 0000000..4733e05
--- /dev/null
+++ b/GroupManager/doc/Hooks.txt
@@ -0,0 +1,10 @@
+==Groupmanager.class.php==
+
+'BSGroupManagerGroupNameChanged':
+$sGroup:
+$sNewGroup:
+&$result:
+
+'BSGroupManagerGroupDeleted':
+$sGroup:
+&$result:
\ No newline at end of file
diff --git a/PermissionManager/resources/BS.PermissionManager/GridPanelExtra.js
b/PermissionManager/resources/BS.PermissionManager/GridPanelExtra.js
new file mode 100644
index 0000000..569046f
--- /dev/null
+++ b/PermissionManager/resources/BS.PermissionManager/GridPanelExtra.js
@@ -0,0 +1,16 @@
+Ext.define('BS.PermissionManager.GridPanelExtra', {
+ extend: 'Ext.grid.Panel',
+ renderTo: 'panelPermissionManagerExtra', //TODO: Is this a good place?
+ columnLines: true,
+ width: 970,
+ height: 250,
+ //hidden: true,
+ frame: true,
+ header: false,
+ iconCls: 'icon-grid',
+ selModel: {
+ selType: 'cellmodel'
+ },
+ dockedItems: [],
+ columns: []
+});
\ No newline at end of file
diff --git a/PermissionManager/resources/BS.PermissionManager/TemplateEditor.js
b/PermissionManager/resources/BS.PermissionManager/TemplateEditor.js
new file mode 100644
index 0000000..3a6661d
--- /dev/null
+++ b/PermissionManager/resources/BS.PermissionManager/TemplateEditor.js
@@ -0,0 +1,285 @@
+Ext.require('Ext.tree.Panel');
+Ext.require('BS.AlertDialog');
+Ext.require('BS.PromptDialog');
+Ext.define('BS.PermissionManager.TemplateEditor', {
+ extend: 'Ext.window.Window',
+ title: mw.message('bs-permissionmanager-labelTemplateEditor').plain(),
+ loadMask: false,
+ width: 500,
+ height: 450,
+ layout: 'border',
+ closeAction: 'hide',
+ _cleanState: true,
+ _hasChanged: false,
+ constructor: function(config) {
+ this._treeStore = config.treeStore || {};
+ this._permissionStore = config.permissionStore || {};
+ delete config.treeStore;
+ delete config.permissionStore;
+ this.callParent([config]);
+ },
+ setCleanState: function(clean) {
+ this._cleanState = clean;
+ if (this._cleanState === true) {
+ Ext.getCmp('pmTemplateEditorSaveButton').disable();
+ } else {
+ Ext.getCmp('pmTemplateEditorSaveButton').enable();
+ }
+ },
+ getCleanState: function() {
+ return this._cleanState;
+ },
+ hasChanged: function() {
+ return this._hasChanged;
+ },
+ saveTemplate: function() {
+ var me = this;
+ var record =
Ext.getCmp('bs-template-editor-treepanel').getSelectionModel().getLastSelected();
+ var newRecord = {
+ id: record.get('id'),
+ text: record.get('text'),
+ leaf: record.get('leaf'),
+ ruleSet: [],
+ description:
Ext.getCmp('bs-template-editor-description').getRawValue()
+ };
+
+ if (typeof record != 'undefined') {
+
+ for (i in me._permissionStore.data.items) {
+ var dataSet = me._permissionStore.data.items[i].data;
+ if (dataSet.enabled === true) {
+ newRecord.ruleSet.push(dataSet.name);
+ }
+ }
+
+ Ext.Ajax.request({
+ url:
bs.util.getAjaxDispatcherUrl('PermissionManager::setTemplateData'),
+ method: 'POST',
+ params: {
+ template: Ext.JSON.encode(newRecord)
+ },
+ success: function(response) {
+ var result = Ext.JSON.decode(response.responseText);
+ if (result.success === true) {
+ var rootNode = me._treeStore.getRootNode();
+ rootNode.replaceChild(newRecord, record);
+
+ me.setCleanState(true);
+ me._permissionStore.sync();
+ me._hasChanged = true;
+
+
Ext.getCmp('bs-template-editor-treepanel').getSelectionModel().select(me._treeStore.getNodeById(newRecord.text));
+ Ext.create('BS.AlertDialog', {
+ text:
mw.message('bs-permissionmanager-template-editor-save-success').plain()
+ }).show();
+ } else {
+ Ext.create('BS.AlertDialog', {
+ text: result.msg
+ }).show();
+ }
+ },
+ failure: function(response) {
+ console.log(response);
+ }
+ });
+ }
+ },
+ discardChanges: function() {
+ Ext.getCmp('bs-template-editor-description').setRawValue('')
+ this._permissionStore.each(function(record) {
+ record.set('enabled', false);
+ });
+ this.setCleanState(true);
+ },
+ noUnsavedChanges: function(record) {
+ var me = this;
+ if (typeof record == 'undefined') {
+ record = false;
+ }
+ if (me.getCleanState() === false) {
+ var dialog = Ext.create('BS.ConfirmDialog', {
+ text:
mw.message('bs-permissionmanager-template-editor-saveOrAbort').plain()
+ });
+ dialog.on('ok', function() {
+ me.saveTemplate();
+ if (record !== false) {
+
Ext.getCmp('bs-template-editor-treepanel').getSelectionModel().select(record);
+ }
+ });
+ dialog.on('cancel', function() {
+ me.discardChanges();
+ if (record !== false) {
+
Ext.getCmp('bs-template-editor-treepanel').getSelectionModel().select(record);
+ }
+ })
+ dialog.show();
+ return false;
+ }
+ return true;
+ },
+ initComponent: function() {
+ var me = this;
+ me.items = [{
+ xtype: 'treepanel',
+ region: 'west',
+ id: 'bs-template-editor-treepanel',
+ useArrows: false,
+ width: 160,
+ store: me._treeStore,
+ rootVisible: false,
+ margins: '0 0 5 0',
+ listeners: {
+ 'select': function(rm, record, index, options) {
+ var data = [];
+ for (i in me._permissionStore.data.items) {
+ var dataSet =
me._permissionStore.data.items[i].data;
+ if (Ext.Array.contains(record.get('ruleSet'),
dataSet.name)) {
+ dataSet.enabled = true;
+ } else {
+ dataSet.enabled = false;
+ }
+ data.push(dataSet);
+ }
+ me._permissionStore.loadRawData(data);
+
Ext.getCmp('bs-template-editor-description').setRawValue(record.raw.description);
+ Ext.getCmp('pmTemplateEditorEditButton').enable();
+ Ext.getCmp('pmTemplateEditorRemoveButton').enable();
+ me.setCleanState(true);
+ },
+ 'beforeselect': function(rm, record, index, options) {
+ return me.noUnsavedChanges(record);
+ }
+ }
+ }, {
+ xtype: 'container',
+ layout: 'border',
+ region: 'center',
+ items: [{
+ xtype: 'panel',
+ layout: 'form',
+ region: 'center',
+ title:
mw.message('bs-permissionmanager-labelTemplateEditor-description').plain(),
+ id: 'bs-template-editor-formpanel',
+ margins: '0 0 5 5',
+ items: [{
+ xtype: 'textareafield',
+ grow: false,
+ id: 'bs-template-editor-description',
+ name: 'description',
+ hideLabel: true,
+ margin: 0,
+ padding: 0,
+ height: 80,
+ anchor: '100%'
+ }]
+ }, {
+ xtype: 'gridpanel',
+ region: 'south',
+ id: 'bs-template-editor-gridpanel',
+ height: 250,
+ margins: '0 0 5 5',
+ store: me._permissionStore,
+ columns: [{
+ xtype: 'checkcolumn',
+ text:
mw.message('bs-permissionmanager-labelTemplateEditor-active').plain(),
+ dataIndex: 'enabled',
+ listeners: {
+ 'checkchange': function(column, rowIndex,
checked, options) {
+ me.setCleanState(false);
+ }
+ }
+ }, {
+ text:
mw.message('bs-permissionmanager-labelTemplateEditor-permissions').plain(),
+ dataIndex: 'name',
+ flex: 1
+ }
+ ]
+ }]
+ }];
+ me.bbar = [{
+ text:
mw.message('bs-permissionmanager-template-editor-labelAdd').plain(),
+ id: 'pmTemplateEditorAddButton',
+ handler: function(button, event) {
+ if (me.noUnsavedChanges()) {
+ var dialog = Ext.create('BS.PromptDialog', {
+ text:
mw.message('bs-permissionmanager-template-editor-msgNew').plain()
+ });
+ dialog.on('ok', function(input) {
+ var node = me._treeStore.tree.root.appendChild({
+ id: 0,
+ text: input.value,
+ leaf: true,
+ description: '',
+ ruleSet: []
+ });
+
Ext.getCmp('bs-template-editor-treepanel').getSelectionModel().select(node);
+ });
+ dialog.show();
+ }
+ }
+ }, {
+ text:
mw.message('bs-permissionmanager-template-editor-labelEdit').plain(),
+ disabled: true,
+ id: 'pmTemplateEditorEditButton',
+ handler: function(button, event) {
+ var dialog = Ext.create('BS.PromptDialog', {
+ text:
mw.message('bs-permissionmanager-template-editor-msgEdit').plain()
+ });
+ dialog.on('ok', function(input) {
+
Ext.getCmp('bs-template-editor-treepanel').getSelectionModel().getLastSelected().set('text',
input.value);
+ me.setCleanState(false);
+ });
+ dialog.show();
+ }
+ }, {
+ text:
mw.message('bs-permissionmanager-template-editor-labelDelete').plain(),
+ disabled: true,
+ id: 'pmTemplateEditorRemoveButton',
+ handler: function(button, event) {
+ Ext.Ajax.request({
+ url:
bs.util.getAjaxDispatcherUrl('PermissionManager::deleteTemplate'),
+ method: 'POST',
+ params: {
+ id:
Ext.getCmp('bs-template-editor-treepanel').getSelectionModel().getLastSelected().get('id')
+ },
+ success: function(response) {
+ var result =
Ext.JSON.decode(response.responseText);
+ if (result.success === true) {
+ me.setCleanState(true);
+ me._permissionStore.sync();
+ me._hasChanged = true;
+ Ext.create('BS.AlertDialog', {
+ text:
mw.message('bs-permissionmanager-template-editor-delete-success').plain()
+ }).show();
+ } else {
+ Ext.create('BS.AlertDialog', {
+ text: result.msg
+ }).show();
+ }
+ },
+ failure: function(response) {
+ console.log(response);
+ }
+ });
+ }
+ }, '->', {
+ text:
mw.message('bs-permissionmanager-template-editor-labelSave').plain(),
+ disabled: true,
+ id: 'pmTemplateEditorSaveButton',
+ handler: function(button, event) {
+ me.saveTemplate();
+ }
+ }, {
+ text:
mw.message('bs-permissionmanager-template-editor-labelCancel').plain(),
+ handler: function(button, event) {
+ me.discardChanges();
+ me.hide();
+ }
+ }];
+ me.on('show', function() {
+
Ext.getCmp('bs-template-editor-treepanel').getSelectionModel().deselectAll();
+
Ext.getCmp('bs-template-editor-treepanel').getSelectionModel().select(me._treeStore.getRootNode().getChildAt(0));
+ });
+ this.callParent();
+ }
+});
\ No newline at end of file
diff --git
a/PermissionManager/resources/BS.PermissionManager/model/AccessData.js
b/PermissionManager/resources/BS.PermissionManager/model/AccessData.js
new file mode 100644
index 0000000..0f31e03
--- /dev/null
+++ b/PermissionManager/resources/BS.PermissionManager/model/AccessData.js
@@ -0,0 +1,8 @@
+Ext.define('BS.PermissionManager.model.AccessData', {
+ extend: 'Ext.data.Model',
+ fields: [
+ {name: 'permission', type: 'string'},
+ {name: 'data', type: 'auto'}
+ ],
+ idProperty: 'permission'
+});
\ No newline at end of file
diff --git a/PermissionManager/resources/BS.PermissionManager/model/Template.js
b/PermissionManager/resources/BS.PermissionManager/model/Template.js
new file mode 100644
index 0000000..ba23f0b
--- /dev/null
+++ b/PermissionManager/resources/BS.PermissionManager/model/Template.js
@@ -0,0 +1,12 @@
+//TODO: move to BSF
+Ext.define('BS.PermissionManager.model.Template', {
+ extend: 'Ext.data.Model',
+ fields: [
+ {name: 'id', type: 'int'},
+ {name: 'text', type: 'string'},
+ {name: 'leaf', type: 'boolean'},
+ {name: 'ruleSet'},
+ {name: 'description', type: 'string'}
+ ],
+ idProperty: 'text'
+});
\ No newline at end of file
diff --git a/Readers/Readers.class.php b/Readers/Readers.class.php
index cc9f935..ba9fb3d 100644
--- a/Readers/Readers.class.php
+++ b/Readers/Readers.class.php
@@ -92,8 +92,9 @@
* @return boolean Always true
*/
public function onLoadExtensionSchemaUpdates( $updater ) {
- global $wgExtNewTables;
+ global $wgExtNewTables, $wgExtNewFields;
$wgExtNewTables[] = array( 'bs_readers',
__DIR__.DS.'db'.DS.'readers.sql' );
+ $wgExtNewFields[] = array( 'bs_readers', 'readers_ts',
__DIR__.DS.'db/mysql/readers.patch.readers_ts.sql' );
return true;
}
@@ -137,7 +138,7 @@
$aNewRow['readers_user_name'] = $oUser->getName();
$aNewRow['readers_page_id'] = $oTitle->getArticleID();
$aNewRow['readers_rev_id'] = $oRevision->getId();
- $aNewRow['readers_ts'] = wfTimestamp( TS_MW );
+ $aNewRow['readers_ts'] = wfTimestampNow();
$oDbw->insert( 'bs_readers', $aNewRow );
diff --git a/Readers/db/readers.patch.readers_ts.sql
b/Readers/db/readers.patch.readers_ts.sql
new file mode 100644
index 0000000..9c9f5e9
--- /dev/null
+++ b/Readers/db/readers.patch.readers_ts.sql
@@ -0,0 +1 @@
+ALTER TABLE /*_*/bs_readers MODIFY /*i*/readers_ts varchar( 16 )
\ No newline at end of file
diff --git a/Readers/db/readers.sql b/Readers/db/readers.sql
index a4e37d9..1d6cb5e 100644
--- a/Readers/db/readers.sql
+++ b/Readers/db/readers.sql
@@ -4,7 +4,7 @@
readers_user_name varbinary(255) NOT NULL DEFAULT '',
readers_page_id INT(30) UNSIGNED NOT NULL,
readers_rev_id INT(30) UNSIGNED NOT NULL,
- readers_ts INT(30) UNSIGNED NOT NULL
+ readers_ts varchar(16) NOT NULL DEFAULT ''
) /*$wgDBTableOptions*/
COMMENT='BlueSpice: Readers - Stores information on users activities';
diff --git a/Review/views/view.StateBarBodyElementReview.php
b/Review/views/view.StateBarBodyElementReview.php
new file mode 100644
index 0000000..5419049
--- /dev/null
+++ b/Review/views/view.StateBarBodyElementReview.php
@@ -0,0 +1,108 @@
+<?php
+/**
+ * Renders the StateBar rating body element.
+ *
+ * Part of BlueSpice for MediaWiki
+ *
+ * @author Patric Wirth <[email protected]>
+ * @version $Id: view.StateBarBodyElementRating.php 9050 2013-03-28
15:14:36Z pwirth $
+ * @package BlueSpice_Extensions
+ * @subpackage Rating
+ * @copyright Copyright (C) 2011 Hallo Welt! - Medienwerkstatt GmbH, All
rights reserved.
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License v2 or
later
+ * @filesource
+ */
+
+/**
+ * This view renders the rating from the Rating extension.
+ * @package BlueSpice_Extensions
+ * @subpackage Rating
+ */
+class ViewStateBarBodyElementReview extends ViewStateBarBodyElement {
+
+ protected $sStatusText = '';
+ protected $sStatusReasonText = '';
+ protected $bVotable = false;
+ protected $sComment = '';
+ protected $oReview = null;
+
+ public function __construct() {
+ parent::__construct();
+ $this->sKey = 'Review';
+ $this->mOptions = array();
+ }
+
+ /**
+ * This method actually generates the output
+ * @param ms method actually generates the outpuixed $params Comes from
base class definition. Not used in this implementation.
+ * @return string HTML output
+ */
+ public function execute( $params = false ) {
+
+ $aOut[] = '<div class="bs-statebar-body-item"
id="sbb-'.$this->sKey.'">';
+ $aOut[] = '<h4 class="bs-statebar-body-itemheading"
id="sbb-'.$this->sKey.'-heading">'.wfMessage( 'bs-review-statebar-body-header'
)->plain().'</h4>';
+ $aOut[] = '<div class="bs-statebar-body-itembody"
id="sbb-'.$this->sKey.'-text">';
+ $aOut[] = $this->sStatusText;
+ $aOut[] = $this->sStatusReasonText;
+ if( $this->bVotable ) {
+ $aOut[] = '<h4
class="bs-statebar-body-itemheading" id="sbb-DoReview-heading">'.wfMessage(
'bs-review-statebar-body-do-review' )->plain().'</h4>';
+ if( !empty($this->sComment) ) {
+ $sUserName =
BsCore::getUserDisplayName(User::newFromId( $this->oReview->owner ));
+ $aOut[] =
'<b>'.wfMessage('bs-review-ownercomment', $sUserName)->plain()."</b><br
/><i>".$this->sComment."</i>";
+ }
+ $aOut[] = '<div
class="bs-statebar-body-reviewvotesection">';
+ $aOut[] = '<label
for="bs-review-voteresponse-comment">';
+ $aOut[] =
wfMessage('bs-review-commentinputlabel')->plain();
+ $aOut[] = '</label>';
+ $aOut[] = XML::input(
+ 'bs-review-voteresponse-comment',
+ false,
+ '',
+ array('id' => 'bs-review-voteresponse-comment')
+ );
+
+ $aOut[] = sprintf(
+ '<a id="%s" href="#" class="%s"
title="%s">%s</a>',
+ 'bs-review-ok',
+ 'bs-icon-accept',
+ wfMessage('bs-review-i-agree')->plain(),
+ wfMessage('bs-review-i-agree')->plain()
+ );
+ //$aOut[] = " ";
+ $aOut[] = sprintf(
+ '<a id="%s" href="#" class="%s"
title="%s">%s</a>',
+ 'bs-review-dismiss',
+ 'bs-icon-decline',
+ wfMessage('bs-review-i-dismiss')->plain(),
+ wfMessage('bs-review-i-dismiss')->plain()
+ );
+
+ $aOut[] = '</div>';
+ }
+ $aOut[] = '</div>';
+ $aOut[] = '</div>';
+
+ return implode( "\n", $aOut );
+ }
+
+ public function setStatusText( $sStatusText ) {
+ $this->sStatusText = $sStatusText;
+ return $this;
+ }
+ public function setStatusReasonText( $sStatusReasonText ) {
+ $this->sStatusReasonText = $sStatusReasonText;
+ return $this;
+ }
+ public function setComment( $sComment ) {
+ $this->sComment = $sComment;
+ return $this;
+ }
+ public function setVotable( $bVotable = true ) {
+ $this->bVotable = $bVotable;
+ return $this;
+ }
+ public function setReview( $oReview ) {
+ $this->oReview = $oReview;
+ return $this;
+ }
+}
diff --git a/ShoutBox/resources/images/shoutbox-more-btn.png
b/ShoutBox/resources/images/shoutbox-more-btn.png
new file mode 100644
index 0000000..74235bf
--- /dev/null
+++ b/ShoutBox/resources/images/shoutbox-more-btn.png
Binary files differ
--
To view, visit https://gerrit.wikimedia.org/r/96990
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I3b3744e8e3a02d5de390fe6bad02bd1d24359c08
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/BlueSpiceExtensions
Gerrit-Branch: master
Gerrit-Owner: Pigpen <[email protected]>
Gerrit-Reviewer: Pigpen <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits