Skip to content
Code-Schnipsel Gruppen Projekte
Bestätigt Commit 3559311f erstellt von Henning Leutz's avatar Henning Leutz :martial_arts_uniform:
Dateien durchsuchen

feat: gdpr category selection

Übergeordneter 066085f9
No related branches found
No related tags found
2 Merge Requests!2Next,!1Dev
......@@ -4,12 +4,15 @@ use QUI\HtmlSnippets\Snippets;
QUI::$Ajax->registerFunction(
'package_quiqqer_html-snippets_ajax_backend_addSnippet',
function ($projectName, $snippetName, $eventName, $snippet = '') {
function ($projectName, $snippetName, $eventName, $snippet = '', $gdpr = '') {
$Project = QUI::getProject($projectName);
$Snippet = Snippets::create($Project, $snippetName, $eventName, $snippet);
$Snippet->setGDPRCategory($gdpr);
$Snippet->save();
return $Snippet->getName();
},
['projectName', 'snippetName', 'eventName', 'snippet'],
['projectName', 'snippetName', 'eventName', 'snippet', 'gdpr'],
'Permission::checkAdminUser'
);
......@@ -4,16 +4,21 @@ use QUI\HtmlSnippets\Snippets;
QUI::$Ajax->registerFunction(
'package_quiqqer_html-snippets_ajax_backend_saveSnippet',
function ($projectName, $snippetName, $eventName, $snippet) {
function ($projectName, $snippetName, $eventName, $snippet, $gdpr) {
$Project = QUI::getProject($projectName);
$Snippet = Snippets::get($Project, $snippetName);
$Snippet->setEvent($eventName);
$Snippet->setSnippet($snippet);
if (!empty($gdpr)) {
$Snippet->setGDPRCategory($gdpr);
}
$Snippet->save();
return $Snippet->getName();
},
['projectName', 'snippetName', 'eventName', 'snippet'],
['projectName', 'snippetName', 'eventName', 'snippet', 'gdpr'],
'Permission::checkAdminUser'
);
......@@ -10,11 +10,12 @@ define('package/quiqqer/html-snippets/bin/backend/Snippets', [
'qui/QUI',
'qui/controls/Control',
'qui/controls/loader/Loader',
'package/quiqqer/html-snippets/bin/backend/Utils',
'controls/grid/Grid',
'Ajax',
'Locale'
], function(QUI, QUIControl, QUILoader, Grid, QUIAjax, QUILocale) {
], function(QUI, QUIControl, QUILoader, SnippetUtils, Grid, QUIAjax, QUILocale) {
'use strict';
const lg = 'quiqqer/html-snippets';
......@@ -65,10 +66,9 @@ define('package/quiqqer/html-snippets/bin/backend/Snippets', [
}
}).inject(Label);
this.$Grid = new Grid(Container, {
height: Label.getParent('.qui-panel-content').getSize().y - 100,
multiple: true,
columnModel: [
SnippetUtils.isGDPRInstalled().then((isInstalled) => {
const columnModel = [
{
header: QUILocale.get(lg, 'grid.name'),
dataIndex: 'name',
......@@ -80,47 +80,62 @@ define('package/quiqqer/html-snippets/bin/backend/Snippets', [
dataType: 'string',
width: 400
}
],
buttons: [
{
name: 'add',
text: QUILocale.get('quiqqer/quiqqer', 'add'),
events: {
click: this.add
];
if (isInstalled) {
columnModel.push({
header: QUILocale.get(lg, 'grid.gdpr'),
dataIndex: 'gdpr',
dataType: 'string',
width: 200
});
}
this.$Grid = new Grid(Container, {
height: Label.getParent('.qui-panel-content').getSize().y - 100,
multiple: true,
columnModel: columnModel,
buttons: [
{
name: 'add',
text: QUILocale.get('quiqqer/quiqqer', 'add'),
events: {
click: this.add
}
}, {
name: 'remove',
icon: 'fa fa-trash',
title: QUILocale.get('quiqqer/quiqqer', 'remove'),
disabled: true,
styles: {
'float': 'right'
},
events: {
click: this.remove
}
}
}, {
name: 'remove',
icon: 'fa fa-trash',
title: QUILocale.get('quiqqer/quiqqer', 'remove'),
disabled: true,
styles: {
'float': 'right'
},
events: {
click: this.remove
]
});
this.$Grid.disable();
this.$Grid.addEvents({
refresh: this.refresh,
onDblClick: this.edit,
click: () => {
const selected = this.$Grid.getSelectedData();
if (selected.length) {
this.$Grid.getButton('remove').enable();
}
}
]
});
this.$Grid.disable();
this.$Grid.addEvents({
refresh: this.refresh,
onDblClick: this.edit,
click: () => {
const selected = this.$Grid.getSelectedData();
});
if (selected.length) {
this.$Grid.getButton('remove').enable();
}
if (this.$Project) {
this.$Grid.enable();
this.$Grid.refresh();
}
});
if (this.$Project) {
this.$Grid.enable();
this.$Grid.refresh();
}
},
refresh: function() {
......
/**
* @module package/quiqqer/html-snippets/bin/backend/Utils
* @author www.pcsg.de (Henning Leutz)
*/
define('package/quiqqer/html-snippets/bin/backend/Utils', function() {
'use strict';
return {
isGDPRInstalled: function() {
return new Promise(function(resolve) {
require(['Packages'], function(Packages) {
Packages.isInstalled('quiqqer/gdpr').then(resolve);
});
});
},
getGDPRList: function() {
}
};
});
......@@ -2,4 +2,9 @@
min-height: 200px;
position: relative;
width: 100%;
}
.quiqqer-html-snippet-input select {
margin-bottom: 10px;
width: 100%;
}
\ No newline at end of file
......@@ -7,11 +7,13 @@ define('package/quiqqer/html-snippets/bin/backend/controls/SnippetInput', [
'qui/QUI',
'qui/controls/Control',
'qui/controls/loader/Loader',
'package/quiqqer/html-snippets/bin/backend/Utils',
'Ajax',
'Locale',
'css!package/quiqqer/html-snippets/bin/backend/controls/SnippetInput.css'
], function(QUI, QUIControl, QUILoader, QUIAjax) {
], function(QUI, QUIControl, QUILoader, SnippetUtils, QUIAjax, QUILocale) {
'use strict';
return new Class({
......@@ -29,8 +31,12 @@ define('package/quiqqer/html-snippets/bin/backend/controls/SnippetInput', [
this.parent(options);
this.Loader = new QUILoader();
this.$loaded = false;
this.$data = null;
this.$Project = null;
this.$GDPR = null;
this.addEvents({
onImport: this.$onImport
......@@ -54,7 +60,37 @@ define('package/quiqqer/html-snippets/bin/backend/controls/SnippetInput', [
this.Loader.inject(this.$Elm);
this.Loader.show();
this.$load().then(() => {
SnippetUtils.isGDPRInstalled().then((isInstalled) => {
if (isInstalled) {
this.$GDPR = new Element('select', {
name: 'gdpr',
html: '' +
'<option value="">---</option>' +
'<option value="essential">' +
QUILocale.get('quiqqer/gdpr', 'cookie.category.essential') +
'</option>' +
'<option value="preferences">' +
QUILocale.get('quiqqer/gdpr', 'cookie.category.preferences') +
'</option>' +
'<option value="statistics">' +
QUILocale.get('quiqqer/gdpr', 'cookie.category.statistics') +
'</option>' +
'<option value="marketing">' +
QUILocale.get('quiqqer/gdpr', 'cookie.category.marketing') +
'</option>',
events: {
change: this.$onChange
}
}).inject(this.$Elm, 'top');
if (this.$data) {
this.$GDPR.value = this.$data.gdpr;
}
}
return this.$load();
}).then(() => {
this.$Textarea.addEvents({
change: this.$onChange,
blur: this.$onChange
......@@ -72,7 +108,8 @@ define('package/quiqqer/html-snippets/bin/backend/controls/SnippetInput', [
projectName: this.$Project.getName(),
snippetName: this.getAttribute('snippetName'),
eventName: this.getAttribute('snippetEvent'),
snippet: this.$Textarea.value
snippet: this.$Textarea.value,
gdpr: this.$GDPR ? this.$GDPR.value : ''
});
},
......@@ -97,6 +134,12 @@ define('package/quiqqer/html-snippets/bin/backend/controls/SnippetInput', [
return new Promise((resolve) => {
QUIAjax.get('package_quiqqer_html-snippets_ajax_backend_getSnippet', (snippetData) => {
this.$Textarea.value = snippetData.snippet;
this.$data = snippetData;
if (this.$GDPR) {
this.$GDPR.value = snippetData.gdpr;
}
this.Loader.hide();
resolve();
}, {
......
......@@ -9,6 +9,20 @@
</label>
</td>
</tr>
<tr style="display: none" class="gdpr-row">
<td>
<label class="field-container">
<span class="field-container-item">{{textGDPR}}</span>
<select class="field-container-field" name="gdpr">
<option value="">---</option>
<option value="essential">{{textEssential}}</option>
<option value="preferences">{{textPreferences}}</option>
<option value="statistics">{{textStatistics}}</option>
<option value="marketing">{{textMarketing}}</option>
</select>
</label>
</td>
</tr>
<tr>
<td>
<label class="field-container">
......
......@@ -2,6 +2,7 @@ define('package/quiqqer/html-snippets/bin/backend/controls/windows/AddSnippet',
'qui/QUI',
'qui/controls/windows/Confirm',
'package/quiqqer/html-snippets/bin/backend/Utils',
'Ajax',
'Locale',
'Mustache',
......@@ -9,7 +10,7 @@ define('package/quiqqer/html-snippets/bin/backend/controls/windows/AddSnippet',
'text!package/quiqqer/html-snippets/bin/backend/controls/windows/AddSnippet.html',
'css!package/quiqqer/html-snippets/bin/backend/controls/windows/AddSnippet.css'
], function(QUI, QUIConfirm, QUIAjax, QUILocale, Mustache, template) {
], function(QUI, QUIConfirm, SnippetUtils, QUIAjax, QUILocale, Mustache, template) {
'use strict';
const lg = 'quiqqer/html-snippets';
......@@ -50,9 +51,20 @@ define('package/quiqqer/html-snippets/bin/backend/controls/windows/AddSnippet',
this.getContent().set('html', Mustache.render(template, {
textName: QUILocale.get(lg, 'window.name'),
textEvent: QUILocale.get(lg, 'window.event'),
textSnippet: QUILocale.get(lg, 'window.snippet')
textSnippet: QUILocale.get(lg, 'window.snippet'),
textGDPR: QUILocale.get(lg, 'window.gdpr'),
textEssential: QUILocale.get('quiqqer/gdpr', 'cookie.category.essential'),
textPreferences: QUILocale.get('quiqqer/gdpr', 'cookie.category.preferences'),
textStatistics: QUILocale.get('quiqqer/gdpr', 'cookie.category.statistics'),
textMarketing: QUILocale.get('quiqqer/gdpr', 'cookie.category.marketing')
}));
SnippetUtils.isGDPRInstalled().then((isInstalled) => {
if (isInstalled) {
this.getContent().getElement('.gdpr-row').setStyle('display', null);
}
});
this.getContent().getElement('submit', (e) => {
e.stop();
});
......@@ -95,6 +107,7 @@ define('package/quiqqer/html-snippets/bin/backend/controls/windows/AddSnippet',
snippetName: Form.elements.name.value,
eventName: Form.elements.eventName.value,
snippet: Form.elements.snippet.value,
gdpr: Form.elements.gdpr.value,
onError: () => {
this.Loader.hide();
}
......
......@@ -9,6 +9,20 @@
</label>
</td>
</tr>
<tr style="display: none" class="gdpr-row">
<td>
<label class="field-container">
<span class="field-container-item">{{textGDPR}}</span>
<select class="field-container-field" name="gdpr">
<option value="">---</option>
<option value="essential">{{textEssential}}</option>
<option value="preferences">{{textPreferences}}</option>
<option value="statistics">{{textStatistics}}</option>
<option value="marketing">{{textMarketing}}</option>
</select>
</label>
</td>
</tr>
<tr>
<td>
<label class="field-container">
......
......@@ -2,6 +2,7 @@ define('package/quiqqer/html-snippets/bin/backend/controls/windows/EditSnippet',
'qui/QUI',
'qui/controls/windows/Confirm',
'package/quiqqer/html-snippets/bin/backend/Utils',
'Ajax',
'Locale',
'Mustache',
......@@ -9,7 +10,7 @@ define('package/quiqqer/html-snippets/bin/backend/controls/windows/EditSnippet',
'text!package/quiqqer/html-snippets/bin/backend/controls/windows/EditSnippet.html',
'css!package/quiqqer/html-snippets/bin/backend/controls/windows/EditSnippet.css'
], function(QUI, QUIConfirm, QUIAjax, QUILocale, Mustache, template) {
], function(QUI, QUIConfirm, SnippetUtils, QUIAjax, QUILocale, Mustache, template) {
'use strict';
const lg = 'quiqqer/html-snippets';
......@@ -51,9 +52,20 @@ define('package/quiqqer/html-snippets/bin/backend/controls/windows/EditSnippet',
this.getContent().set('html', Mustache.render(template, {
textName: QUILocale.get(lg, 'window.name'),
textEvent: QUILocale.get(lg, 'window.event'),
textSnippet: QUILocale.get(lg, 'window.snippet')
textSnippet: QUILocale.get(lg, 'window.snippet'),
textGDPR: QUILocale.get(lg, 'window.gdpr'),
textEssential: QUILocale.get('quiqqer/gdpr', 'cookie.category.essential'),
textPreferences: QUILocale.get('quiqqer/gdpr', 'cookie.category.preferences'),
textStatistics: QUILocale.get('quiqqer/gdpr', 'cookie.category.statistics'),
textMarketing: QUILocale.get('quiqqer/gdpr', 'cookie.category.marketing')
}));
SnippetUtils.isGDPRInstalled().then((isInstalled) => {
if (isInstalled) {
this.getContent().getElement('.gdpr-row').setStyle('display', null);
}
});
this.getContent().getElement('submit', (e) => {
e.stop();
});
......@@ -67,6 +79,7 @@ define('package/quiqqer/html-snippets/bin/backend/controls/windows/EditSnippet',
Form.elements.name.value = result.name;
Form.elements.eventName.value = result.event;
Form.elements.snippet.value = result.snippet;
Form.elements.gdpr.value = result.gdpr;
this.Loader.hide();
}, {
'package': 'quiqqer/html-snippets',
......@@ -109,6 +122,7 @@ define('package/quiqqer/html-snippets/bin/backend/controls/windows/EditSnippet',
snippetName: Form.elements.name.value,
eventName: Form.elements.eventName.value,
snippet: Form.elements.snippet.value,
gdpr: Form.elements.gdpr.value,
onError: () => {
this.Loader.hide();
}
......
......@@ -6,10 +6,11 @@
<field type="VARCHAR(64)">project</field>
<field type="VARCHAR(255)">event</field>
<field type="LONGTEXT NULL">snippet</field>
<field type="VARCHAR(64) NULL">gdpr</field>
<primary>name,project</primary>
<index>event</index>
<comment>This table contains the users of QUIQQER.</comment>
<comment>This table contains the html snippets for the different projects.</comment>
</table>
</global>
</database>
\ No newline at end of file
......@@ -24,6 +24,10 @@
<de><![CDATA[Event]]></de>
<en><![CDATA[Event]]></en>
</locale>
<locale name="grid.gdpr">
<de><![CDATA[GDPR Kategorie]]></de>
<en><![CDATA[GDPR Category]]></en>
</locale>
</groups>
<groups name="quiqqer/html-snippets" datatype="js">
......@@ -47,6 +51,10 @@
<de><![CDATA[Snippet]]></de>
<en><![CDATA[Snippet]]></en>
</locale>
<locale name="window.gdpr">
<de><![CDATA[GDPR Kategorie]]></de>
<en><![CDATA[GDPR Category]]></en>
</locale>
<locale name="window.remove.title">
<de><![CDATA[Snippet löschen]]></de>
......@@ -58,10 +66,10 @@
</locale>
<locale name="window.remove.information">
<de><![CDATA[
Die folgenden Snippets werden dauerhaft gelöscht: [snippetList].
Die folgenden Snippets werden dauerhaft gelöscht: [snippetList]
]]></de>
<en><![CDATA[
The following snippets are permanently deleted: [snippetList].
The following snippets are permanently deleted: [snippetList]
]]></en>
</locale>
</groups>
......
......@@ -12,7 +12,12 @@ class Snippet
protected Project $Project;
protected string $snippet;
protected string $event;
protected string $gdprCategory = '';
/**
* @param Project $Project
* @param string $name
*/
public function __construct(Project $Project, string $name)
{
$data = Snippets::getSnippetData($Project, $name);
......@@ -21,6 +26,7 @@ class Snippet
$this->name = $name;
$this->snippet = $data['snippet'];
$this->event = $data['event'];
$this->gdprCategory = !empty($data['gdpr']) ? $data['gdpr'] : '';
}
//region get
......@@ -68,7 +74,8 @@ class Snippet
'name' => $this->name,
'event' => $this->event,
'Project' => $this->Project->getName(),
'snippet' => $this->getSnippet()
'snippet' => $this->getSnippet(),
'gdpr' => $this->gdprCategory
];
}
......@@ -98,6 +105,11 @@ class Snippet
$this->snippet = $snippet;
}
public function setGDPRCategory(string $gdprCategory): void
{
$this->gdprCategory = $gdprCategory;
}
/**
* Saves the snippet to the database.
*
......@@ -118,7 +130,8 @@ class Snippet
Snippets::table(),
[
'event' => $this->event,
'snippet' => $this->snippet
'snippet' => $this->snippet,
'gdpr' => $this->gdprCategory
],
[
'project' => $this->Project->getName(),
......
0% oder .
You are about to add 0 people to the discussion. Proceed with caution.
Bearbeitung dieser Nachricht zuerst beenden!
Bitte registrieren oder zum Kommentieren