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[] = "&nbsp;&nbsp;";
+                       $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

Reply via email to