Skip to content
Code-Schnipsel Gruppen Projekte
Commit c8675fa6 erstellt von Patrick Müller's avatar Patrick Müller
Dateien durchsuchen

temp commit

Übergeordneter 3c6791b8
No related branches found
No related tags found
Keine zugehörigen Merge Requests gefunden
werden angezeigt mit 1259 Ergänzungen und 0 Löschungen
<?php
/**
* This file contains package_quiqqer_coupons_ajax_create
*/
use QUI\ERP\Coupons\Handler;
use QUI\Utils\Security\Orthos;
/**
* Create new InviteCode(s)
*
* @param array $attributes
* @return bool - success
*/
QUI::$Ajax->registerFunction(
'package_quiqqer_coupons_ajax_create',
function ($attributes) {
$attributes = Orthos::clearArray(json_decode($attributes, true));
try {
$amount = 1;
$inviteCodes = array();
if (!empty($attributes['amount'])) {
$amount = (int)$attributes['amount'];
unset($attributes['amount']);
}
for ($i = 0; $i < $amount; $i++) {
$inviteCodes[] = Handler::createCouponCode($attributes);
}
} catch (\QUI\ERP\Coupons\CouponCodeException $Exception) {
QUI::getMessagesHandler()->addError(
QUI::getLocale()->get(
'quiqqer/invitecode',
'message.ajax.create.error',
array(
'error' => $Exception->getMessage()
)
)
);
return false;
} catch (QUI\Permissions\Exception $Exception) {
throw $Exception;
} catch (\Exception $Exception) {
QUI\System\Log::writeException($Exception);
QUI::getMessagesHandler()->addError(
QUI::getLocale()->get(
'quiqqer/invitecode',
'message.ajax.general_error'
)
);
return false;
}
QUI::getMessagesHandler()->addSuccess(
QUI::getLocale()->get(
'quiqqer/invitecode',
'message.ajax.create.success'
)
);
return true;
},
array('attributes'),
'Permission::checkAdminUser'
);
<?php
/**
* This file contains package_quiqqer_coupons_ajax_delete
*/
use QUI\ERP\Coupons\Handler;
use QUI\Utils\Security\Orthos;
/**
* Delete InviteCodes
*
* @param array $ids - InviteCode IDs
* @return bool - success
*/
QUI::$Ajax->registerFunction(
'package_quiqqer_coupons_ajax_delete',
function ($ids) {
$ids = Orthos::clearArray(json_decode($ids, true));
try {
foreach ($ids as $id) {
$CouponCode = Handler::getCouponCode((int)$id);
$CouponCode->delete();
}
} catch (\QUI\ERP\Coupons\CouponCodeException $Exception) {
QUI::getMessagesHandler()->addError(
QUI::getLocale()->get(
'quiqqer/invitecode',
'message.ajax.delete.error',
array(
'error' => $Exception->getMessage()
)
)
);
return false;
} catch (QUI\Permissions\Exception $Exception) {
throw $Exception;
} catch (\Exception $Exception) {
QUI\System\Log::writeException($Exception);
QUI::getMessagesHandler()->addError(
QUI::getLocale()->get(
'quiqqer/invitecode',
'message.ajax.general_error'
)
);
return false;
}
QUI::getMessagesHandler()->addSuccess(
QUI::getLocale()->get(
'quiqqer/invitecode',
'message.ajax.delete.success'
)
);
return true;
},
array('ids'),
'Permission::checkAdminUser'
);
<?php
/**
* This file contains package_quiqqer_coupons_ajax_getList
*/
use QUI\ERP\Coupons\Handler;
use QUI\Utils\Security\Orthos;
use QUI\Utils\Grid;
use QUI\Permissions\Permission;
/**
* Get list of CouponCodes
*
* @param array $searchParams
* @return array
*/
QUI::$Ajax->registerFunction(
'package_quiqqer_coupons_ajax_getList',
function ($searchParams) {
Permission::hasPermission(Handler::PERMISSION_VIEW);
$searchParams = Orthos::clearArray(json_decode($searchParams, true));
$inviteCodes = array();
try {
foreach (Handler::search($searchParams) as $InviteCode) {
$inviteCodes[] = $InviteCode->toArray();
}
} catch (\Exception $Exception) {
QUI\System\Log::writeException($Exception);
QUI::getMessagesHandler()->addSuccess(
QUI::getLocale()->get(
'quiqqer/invitecode',
'message.ajax.general_error'
)
);
return false;
}
$Grid = new Grid($searchParams);
return $Grid->parseResult(
$inviteCodes,
Handler::search($searchParams, true)
);
},
array('searchParams'),
'Permission::checkAdminUser'
);
<?php
/**
* This file contains package_quiqqer_coupons_ajax_settings_getCodeGenerators
*/
use QUI\ERP\Coupons\CodeGenerator;
/**
* Get list of all CodeGenerators
*
* @return array
*/
QUI::$Ajax->registerFunction(
'package_quiqqer_coupons_ajax_settings_getCodeGenerators',
function () {
return CodeGenerator::getList();
},
array(),
'Permission::checkAdminUser'
);
/**
* CouponCodes Handler
*
* @module package/quiqqer/coupons/bin/classes/CouponCodes
* @author www.pcsg.de (Patrick Müller)
*
* @require Ajax
*/
define('package/quiqqer/coupons/bin/CouponCodes', [
'package/quiqqer/coupons/bin/classes/CouponCodes'
], function (CouponCodesManager) {
"use strict";
return new CouponCodesManager();
});
/**
* CouponCodes Handler
*
* @module package/quiqqer/coupons/bin/classes/CouponCodes
* @author www.pcsg.de (Patrick Müller)
*
* @require Ajax
*/
define('package/quiqqer/coupons/bin/classes/CouponCodes', [
'Ajax'
], function (QUIAjax) {
"use strict";
var pkg = 'quiqqer/coupons';
return new Class({
Type: 'package/quiqqer/coupons/bin/classes/CouponCodes',
/**
* Create new InviteCode
*
* @param {Object} Attributes
* @return {Promise}
*/
create: function (Attributes) {
return new Promise(function (resolve, reject) {
QUIAjax.post('package_quiqqer_coupons_ajax_create', resolve, {
'package' : pkg,
attributes: JSON.encode(Attributes),
onError : reject
});
});
},
/**
* Delete Invite Codes
*
* @param {Array} ids
* @return {Promise}
*/
delete: function (ids) {
return new Promise(function (resolve, reject) {
QUIAjax.post('package_quiqqer_coupons_ajax_delete', resolve, {
'package': pkg,
ids : JSON.encode(ids),
onError : reject
});
});
},
/**
* Get list of all CouponCodes
*
* @param {Object} SearchParams
* @return {Promise}
*/
getList: function (SearchParams) {
return new Promise(function (resolve, reject) {
QUIAjax.get('package_quiqqer_coupons_ajax_getList', resolve, {
'package' : pkg,
searchParams: JSON.encode(SearchParams),
onError : reject
});
});
},
/**
* Send CouponCodes via mail
*
* @param {Array} ids
* @param {Boolean} resend
* @return {Promise}
*/
sendMail: function (ids, resend) {
return new Promise(function (resolve, reject) {
QUIAjax.post('package_quiqqer_coupons_ajax_sendMail', resolve, {
'package': pkg,
ids : JSON.encode(ids),
resend : resend ? 1 : 0,
onError : reject
});
});
}
});
});
<div class="quiqqer-invitecode-manager-create">
<form>
<label>
<span>{{labelTitle}}</span>
<input type="text" name="title"/>
</label>
<label>
<span>{{labelEmail}}</span>
<input type="email" name="email"/>
</label>
<label class="quiqqer-invitecode-manager-create-sendmail">
<span>{{labelSendMail}}</span>
<input type="checkbox" name="sendmail" disabled/>
</label>
<label>
<span>{{labelDate}}</span>
<input type="date" placeholder="YYYY-MM-DD HH:MM" name="validUntil"/>
</label>
<label>
<span>{{labelAmount}}</span>
<input type="number" name="amount" min="1" value="1"/>
</label>
</form>
</div>
\ No newline at end of file
.quiqqer-invitecode-manager {
float: left;
height: 100%;
width: 100%;
}
.quiqqer-invitecode-manager-table {
float: left;
height: 100% !important;
width: 100%;
}
.quiqqer-invitecode-manager-create label {
float: left;
width: 100%;
}
.quiqqer-invitecode-manager-create label:not(:last-of-type) {
margin-bottom: 15px;
}
.quiqqer-invitecode-manager-create label span {
float: left;
margin-bottom: 5px;
}
.quiqqer-invitecode-manager-create-sendmail span,
.quiqqer-invitecode-manager-create-sendmail input {
float: right !important;
width: unset !important;
}
.quiqqer-invitecode-manager-create input {
width: 100%;
}
.quiqqer-invitecode-manager-tbl-status-unused {
color: #bb252a;
}
.quiqqer-invitecode-manager-tbl-status-used {
color: #608a0e;
}
.quiqqer-invitecode-manager-tbl-status-invalid {
color: #454545;
font-style: italic;
}
.quiqqer-invitecode-manager-sendmail-resend {
float: right;
margin-top: 20px;
}
.quiqqer-invitecode-manager-sendmail-resend input {
float: left;
}
.quiqqer-invitecode-manager-tbl-user-not_exist {
color: #999;
font-style: italic;
}
\ No newline at end of file
<div class="quiqqer-invitecode-manager-table"></div>
\ No newline at end of file
Dieser Diff ist reduziert.
/**
* Select available CodeGenerators
*
* @module package/quiqqer/coupons/bin/controls/settings/CodeGeneratorSelect
* @author www.pcsg.de (Patrick Müller)
*/
define('package/quiqqer/coupons/bin/controls/settings/CodeGeneratorSelect', [
'qui/controls/buttons/Select',
'qui/controls/loader/Loader',
'Locale',
'Ajax',
'css!package/quiqqer/coupons/bin/controls/settings/CodeGeneratorSelect.css'
], function (QUISelect, QUILoader, QUILocale, QUIAjax) {
"use strict";
var lg = 'quiqqer/coupons';
return new Class({
Extends: QUISelect,
Type : 'package/quiqqer/coupons/bin/controls/settings/CodeGeneratorSelect',
Binds: [
'$onImport'
],
options: {
showIcons: false
},
initialize: function (options) {
this.parent(options);
this.$Input = null;
this.Loader = new QUILoader();
this.addEvents({
onImport: this.$onImport
});
},
/**
* Event: onImport
*/
$onImport: function () {
var self = this;
this.$Input = this.getElm();
this.$Input.hidden = true;
var Elm = this.create().inject(this.$Input, 'after');
Elm.addClass('field-container-field');
this.Loader.inject(Elm);
this.Loader.show();
this.$getCodeGenerators().then(function(codeGenerators) {
self.Loader.hide();
for (var i = 0, len = codeGenerators.length; i < len; i++) {
self.appendChild(
codeGenerators[i],
codeGenerators[i]
);
}
if (self.$Input.value !== '') {
self.setValue(self.$Input.value);
}
self.addEvent('onChange', function(value) {
self.$Input.value = value;
});
});
},
/**
* Get list of all CodeGenerators
*
* @return {Promise}
*/
$getCodeGenerators: function () {
return new Promise(function (resolve, reject) {
QUIAjax.get('package_quiqqer_invitecode_ajax_settings_getCodeGenerators', resolve, {
'package': 'quiqqer/coupons',
onError : reject
});
});
}
});
});
bin/images/Gitlab.jpg

3,04 KiB

bin/images/Logo.jpg

39,6 KiB

bin/images/Readme.jpg

36,4 KiB

bin/images/preview/Backend_View.png

44,9 KiB

bin/images/preview/Frontend_Registrar.png

48,7 KiB

bin/images/preview/Settings.png

47,8 KiB

<?xml version="1.0" encoding="UTF-8"?>
<database>
<global>
<table name="quiqqer_coupons">
<field type="BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY">id</field>
<field type="VARCHAR(255) NOT NULL">code</field>
<field type="VARCHAR(255) NULL">title</field>
<field type="VARCHAR(255) NULL">userIds</field>
<field type="VARCHAR(255) NULL">groupIds</field>
<field type="DATETIME NOT NULL">createDate</field>
<field type="DATETIME NULL">validUntilDate</field>
<field type="MEDIUMTEXT NULL">usages</field>
<field type="TINYINT(1) NOT NULL DEFAULT 0">isReusable</field>
</table>
</global>
</database>
......@@ -9,5 +9,126 @@
<de><![CDATA[Verwaltung von Coupon-Codes für die Verwendung im QUIQQER ERP Shop]]></de>
<en><![CDATA[Management of coupon codes for usage in the QUIQQER ERP Shop]]></en>
</locale>
<!-- Menu -->
<locale name="menu.erp.title">
<de><![CDATA[Shop]]></de>
<en><![CDATA[Shop]]></en>
</locale>
<locale name="menu.erp.couponcodes.title">
<de><![CDATA[Coupon-Codes]]></de>
<en><![CDATA[Coupon codes]]></en>
</locale>
<!-- Settings -->
<locale name="settings.title">
<de><![CDATA[Allgemeine Einstellungen]]></de>
<en><![CDATA[General settings]]></en>
</locale>
<locale name="settings.menu.title">
<de><![CDATA[Coupon-Codes]]></de>
<en><![CDATA[Coupon codes]]></en>
</locale>
<locale name="settings.category.title">
<de><![CDATA[Einstellungen]]></de>
<en><![CDATA[Settings]]></en>
</locale>
<locale name="settings.prefix.title">
<de><![CDATA[Coupon-Code Präfix]]></de>
<en><![CDATA[Coupon code prefix]]></en>
</locale>
<locale name="settings.prefix.description" html="true">
<de><![CDATA[Präfix, das generierten Coupon-Codes vorangestellt wird. <b>Betrifft nicht bereits erstellte oder eigenhändig festgelegte Coupon-Codes!</b>]]></de>
<en><![CDATA[Prefix that is prepended to generated Coupon codes. <b>Does not affect already created Coupon codes or codes set by the user!</b>]]></en>
</locale>
<locale name="settings.codeGenerator.title">
<de><![CDATA[Coupon-Code Generator]]></de>
<en><![CDATA[Coupon code Generator]]></en>
</locale>
<locale name="settings.codeGenerator.description">
<de><![CDATA[Bestimmt die Klasse, die zufällige Coupon-Codes generiert. Hat auch Auswirkungen auf das Format der Coupon-Codes.]]></de>
<en><![CDATA[Determines the class that generates random invitation codes. Also affects the format of Coupon codes.]]></en>
</locale>
<!-- Permissions -->
<locale name="permission.quiqqer.invitecode._header">
<de><![CDATA[Coupon-Codes]]></de>
<en><![CDATA[Coupon codes]]></en>
</locale>
<locale name="permission.quiqqer.invitecode.view">
<de><![CDATA[Darf Liste mit Coupon-Codes ansehen]]></de>
<en><![CDATA[Is allowed to view Coupon codes list]]></en>
</locale>
<locale name="permission.quiqqer.invitecode.create">
<de><![CDATA[Darf neue Coupon-Codes erstellen]]></de>
<en><![CDATA[Is allowed to create new Coupon codes]]></en>
</locale>
<locale name="permission.quiqqer.invitecode.delete">
<de><![CDATA[Darf Coupon-Codes löschen]]></de>
<en><![CDATA[Is allowed to delete Coupon codes]]></en>
</locale>
</groups>
<groups name="quiqqer/coupons" datatype="php">
<!-- Ajax -->
<locale name="message.ajax.general_error">
<de><![CDATA[Beim Verarbeiten der Anfrage ist ein unerwarteter Fehler aufgetreten. Bitte prüfen Sie die Fehler-Logs oder kontaktieren Sie einen Administrator.]]></de>
<en><![CDATA[An unexpected error occurred while processing the request. Please check the error logs or contact an administrator.]]></en>
</locale>
<locale name="message.ajax.create.error" html="true">
<de><![CDATA[Die Coupon-Codes konnten nicht erstellt werden:<br><br>[error]]]></de>
<en><![CDATA[The Coupon codes could not be created:<br><br>[error]]]></en>
</locale>
<locale name="message.ajax.create.success">
<de><![CDATA[Die Coupon-Codes wurden erfolgreich erstellt.]]></de>
<en><![CDATA[The Coupon codes have been successfully created.]]></en>
</locale>
<locale name="message.ajax.delete.error" html="true">
<de><![CDATA[Beim Löschen der Coupon-Codes ist ein Fehler aufgetreten:<br><br>[error]]]></de>
<en><![CDATA[An error occurred while deleting the Coupon codes:<br><br>[error].]]></en>
</locale>
<locale name="message.ajax.delete.success">
<de><![CDATA[Die Coupon-Codes wurden erfolgreich gelöscht.]]></de>
<en><![CDATA[The Coupon codes have been deleted successfully.]]></en>
</locale>
<!-- Class: CouponCode -->
<locale name="exception.CouponCode.not_found">
<de><![CDATA[Der Coupon-Code mit ID #[id] wurde nicht gefunden.]]></de>
<en><![CDATA[Coupon code with ID #[id] was not found.]]></en>
</locale>
<locale name="exception.CouponCode.no_longer_valid">
<de><![CDATA[Dieser Coupon-Code ist nicht mehr gültig.]]></de>
<en><![CDATA[This coupon code is not valid anymore.]]></en>
</locale>
<locale name="exception.CouponCode.already_used">
<de><![CDATA[Dieser Coupon-Code wurde bereits verwendet.]]></de>
<en><![CDATA[This coupon code has already been redeemed.]]></en>
</locale>
<locale name="exception.CouponCode.user_not_allowed">
<de><![CDATA[Dieser Coupon-Code ist nicht für diesen Benutzer gültig.]]></de>
<en><![CDATA[This coupon code is not valid for this user.]]></en>
</locale>
<locale name="exception.CouponCode.user_not_allowed_group">
<de><![CDATA[Dieser Coupon-Code ist nicht für diesen Benutzer gültig.]]></de>
<en><![CDATA[This coupon code is not valid for this user.]]></en>
</locale>
<!-- Class: Handler -->
<locale name="exception.Handler.user_already_exists">
<de><![CDATA[Es existiert bereits ein Benutzer mit der E-Mail-Adresse "[email]".]]></de>
<en><![CDATA[A user with e-mail address "[email]" already exists.]]></en>
</locale>
<locale name="exception.Handler.code_not_found">
<de><![CDATA[]]></de>
<en><![CDATA[]]></en>
</locale>
<locale name="exception.invitecode.no_registration_site">
<de><![CDATA[Es wurde noch keine Registrierungs-Seite festgelegt, auf die in der Invite-Code E-Mail verwiesen wird.]]></de>
<en><![CDATA[No registration page has yet been specified for the Invite Code email.]]></en>
</locale>
</groups>
<groups name="quiqqer/coupons" datatype="js">
</groups>
</locales>
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