partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

commit 9368f42cf85a0bec64a1a70e827a51b4ef7823ca
parent 8a23ce11802914da37eda3779a33218e4e3b16ae
Author: Felicia Hummel <felicia@partkeepr.com>
Date:   Wed, 18 Oct 2017 20:22:55 +0200

Merge branch 'master' of github.com:partkeepr/PartKeepr

Diffstat:
Mapp/config/config_partkeepr.yml | 31+++++++++++++++++++++++++++++++
Asrc/PartKeepr/FrontendBundle/Action/MarkAsDefaultAction.php | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/PartKeepr/FrontendBundle/Controller/IndexController.php | 1+
Asrc/PartKeepr/FrontendBundle/DependencyInjection/PartKeeprFrontendExtension.php | 21+++++++++++++++++++++
Msrc/PartKeepr/FrontendBundle/Entity/GridPreset.php | 26++++++++++++++++++++++++++
Asrc/PartKeepr/FrontendBundle/Resources/config/actions.xml | 14++++++++++++++
Asrc/PartKeepr/FrontendBundle/Resources/config/services.xml | 12++++++++++++
Msrc/PartKeepr/FrontendBundle/Resources/public/js/Components/ModelTreeMaker/ModelTreeMaker.js | 9+++++----
Msrc/PartKeepr/FrontendBundle/Resources/public/js/Components/Widgets/ColumnConfigurator/ColumnListGrid.js | 2++
Msrc/PartKeepr/FrontendBundle/Resources/public/js/Components/Widgets/ColumnConfigurator/Panel.js | 4++++
Msrc/PartKeepr/FrontendBundle/Resources/public/js/Components/Widgets/PresetComboBox.js | 50+++++++++++++++++++++++++++++++++++++++++++-------
Asrc/PartKeepr/FrontendBundle/Services/GridPresetService.php | 44++++++++++++++++++++++++++++++++++++++++++++
12 files changed, 260 insertions(+), 11 deletions(-)

diff --git a/app/config/config_partkeepr.yml b/app/config/config_partkeepr.yml @@ -336,11 +336,42 @@ services: arguments: - { groups: [ "default" ] } + resource.grid_preset.item_operation.get: + class: "Dunglas\ApiBundle\Api\Operation\Operation" + public: false + factory: [ "@api.operation_factory", "createItemOperation" ] + arguments: [ "@resource.grid_preset", "GET" ] + + resource.grid_preset.item_operation.put: + class: "Dunglas\ApiBundle\Api\Operation\Operation" + public: false + factory: [ "@api.operation_factory", "createItemOperation" ] + arguments: [ "@resource.grid_preset", "PUT" ] + + resource.grid_preset.item_operation.delete: + class: "Dunglas\ApiBundle\Api\Operation\Operation" + public: false + factory: [ "@api.operation_factory", "createItemOperation" ] + arguments: [ "@resource.grid_preset", "DELETE" ] + + resource.grid_preset.item_operation.markAsDefault: + class: "Dunglas\ApiBundle\Api\Operation\Operation" + public: false + factory: [ "@api.operation_factory", "createItemOperation" ] + arguments: + - "@resource.grid_preset" # Resource + - [ "PUT" ] # Methods + - "/grid_presets/{id}/markAsDefault" # Path + - "partkeepr.grid_preset.mark_as_default" # Controller + - "MarkGridPresetAsDefault" # Route name + resource.grid_preset: parent: "api.resource" arguments: [ "PartKeepr\FrontendBundle\Entity\GridPreset" ] tags: [ { name: "api.resource" } ] calls: + - method: "initItemOperations" + arguments: [ [ "@resource.grid_preset.item_operation.get", "@resource.grid_preset.item_operation.put", "@resource.grid_preset.item_operation.delete", "@resource.grid_preset.item_operation.markAsDefault" ] ] - method: "initFilters" arguments: [ [ "@doctrine_reflection_service.search_filter" ] ] - method: "initNormalizationContext" diff --git a/src/PartKeepr/FrontendBundle/Action/MarkAsDefaultAction.php b/src/PartKeepr/FrontendBundle/Action/MarkAsDefaultAction.php @@ -0,0 +1,57 @@ +<?php + +namespace PartKeepr\FrontendBundle\Action; + +use Dunglas\ApiBundle\Action\ActionUtilTrait; +use Dunglas\ApiBundle\Exception\RuntimeException; +use Dunglas\ApiBundle\Model\DataProviderInterface; +use PartKeepr\FrontendBundle\Entity\GridPreset; +use PartKeepr\FrontendBundle\Services\GridPresetService; +use Symfony\Component\HttpFoundation\Request; + +class MarkAsDefaultAction +{ + use ActionUtilTrait; + + /** + * @var DataProviderInterface + */ + private $dataProvider; + + /** + * @var GridPresetService + */ + private $gridPresetService; + + public function __construct( + DataProviderInterface $dataProvider, + GridPresetService $gridPresetService + ) { + $this->dataProvider = $dataProvider; + $this->gridPresetService = $gridPresetService; + } + + /** + * Sets the default flag for a grid preset. + * + * @param Request $request The request + * @param int $id The ID of the grid preset + * + * @throws RuntimeException + * + * @return array|\Dunglas\ApiBundle\Model\PaginatorInterface|\Traversable + */ + public function __invoke(Request $request, $id) + { + list($resourceType) = $this->extractAttributes($request); + + /** + * @var GridPreset + */ + $gp = $this->getItem($this->dataProvider, $resourceType, $id); + + $this->gridPresetService->markGridPresetAsDefault($gp); + + return $gp; + } +} diff --git a/src/PartKeepr/FrontendBundle/Controller/IndexController.php b/src/PartKeepr/FrontendBundle/Controller/IndexController.php @@ -67,6 +67,7 @@ class IndexController extends Controller $aParameters['password_change'] = $this->getParameterWithDefault('partkeepr.auth.allow_password_change', true); $aParameters["patreonStatus"] = $this->get("partkeepr_systemservice")->getPatreonStatus(); + $aParameters["defaultGridPresets"] = json_encode($this->get("partkeepr.gridpresetservice")->getDefaultPresets()); $renderParams = []; $renderParams['parameters'] = $aParameters; $renderParams['debug'] = $this->get('kernel')->isDebug(); diff --git a/src/PartKeepr/FrontendBundle/DependencyInjection/PartKeeprFrontendExtension.php b/src/PartKeepr/FrontendBundle/DependencyInjection/PartKeeprFrontendExtension.php @@ -0,0 +1,20 @@ +<?php +namespace PartKeepr\FrontendBundle\DependencyInjection; + +use Symfony\Component\Config\FileLocator; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Loader; +use Symfony\Component\HttpKernel\DependencyInjection\Extension; + +class PartKeeprFrontendExtension extends Extension +{ + /** + * {@inheritdoc} + */ + public function load(array $configs, ContainerBuilder $container) + { + $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + $loader->load('services.xml'); + $loader->load('actions.xml'); + } +}+ \ No newline at end of file diff --git a/src/PartKeepr/FrontendBundle/Entity/GridPreset.php b/src/PartKeepr/FrontendBundle/Entity/GridPreset.php @@ -47,6 +47,32 @@ class GridPreset extends BaseEntity private $configuration; /** + * Defines if the selected grid preset is the default + * + * @ORM\Column(type="boolean") + * @Groups({"readonly"}) + * + * @var boolean + */ + private $gridDefault = false; + + /** + * @return boolean True if the given preset is the default + */ + public function isGridDefault() + { + return $this->gridDefault; + } + + /** + * @param bool $default + */ + public function setGridDefault($default = true) + { + $this->gridDefault = $default; + } + + /** * @return string */ public function getGrid() diff --git a/src/PartKeepr/FrontendBundle/Resources/config/actions.xml b/src/PartKeepr/FrontendBundle/Resources/config/actions.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" ?> + +<container xmlns="http://symfony.com/schema/dic/services" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> + + <services> + <service id="partkeepr.grid_preset.mark_as_default" + class="PartKeepr\FrontendBundle\Action\MarkAsDefaultAction"> + <argument type="service" id="api.data_provider"/> + <argument type="service" id="partkeepr.gridpresetservice"/> + </service> + </services> +</container> diff --git a/src/PartKeepr/FrontendBundle/Resources/config/services.xml b/src/PartKeepr/FrontendBundle/Resources/config/services.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" ?> + +<container xmlns="http://symfony.com/schema/dic/services" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> + + <services> + <service id="partkeepr.gridpresetservice" class="PartKeepr\FrontendBundle\Services\GridPresetService"> + <argument type="service" id="doctrine.orm.default_entity_manager"/> + </service> + </services> +</container> diff --git a/src/PartKeepr/FrontendBundle/Resources/public/js/Components/ModelTreeMaker/ModelTreeMaker.js b/src/PartKeepr/FrontendBundle/Resources/public/js/Components/ModelTreeMaker/ModelTreeMaker.js @@ -22,7 +22,7 @@ Ext.define("PartKeepr.ModelTreeMaker.ModelTreeMaker", { /** * Adds a field to be ignored. * - * @param {String} The field to be ignored. + * @param {String} field The field to be ignored. */ addIgnoreField: function (field) { @@ -35,9 +35,10 @@ Ext.define("PartKeepr.ModelTreeMaker.ModelTreeMaker", { /** * Builds the field tree recursively. Handles infinite recursions (e.g. in trees). * - * @param {Ext.data.NodeInterface} The current node - * @param {Ext.data.Model} The model - * @param {String} The prefix. Omit if first called + * @param {Ext.data.NodeInterface} node The current node + * @param {Ext.data.Model} model The model + * @param {String} prefix The prefix. Omit if first called + * @param {Function} callback The calback, optional */ make: function (node, model, prefix, callback) { diff --git a/src/PartKeepr/FrontendBundle/Resources/public/js/Components/Widgets/ColumnConfigurator/ColumnListGrid.js b/src/PartKeepr/FrontendBundle/Resources/public/js/Components/Widgets/ColumnConfigurator/ColumnListGrid.js @@ -93,6 +93,8 @@ Ext.define("PartKeepr.Components.Widgets.ColumnConfigurator.ColumnListGrid", { xtype: 'presetcombo', model: 'PartKeepr.FrontendBundle.Entity.GridPreset', itemId: 'gridPresetCombo', + allowMarkAsDefault: true, + markedAsDefaultProperty: 'gridDefault', displayField: 'name', blankConfiguration: [ { diff --git a/src/PartKeepr/FrontendBundle/Resources/public/js/Components/Widgets/ColumnConfigurator/Panel.js b/src/PartKeepr/FrontendBundle/Resources/public/js/Components/Widgets/ColumnConfigurator/Panel.js @@ -53,6 +53,7 @@ Ext.define("PartKeepr.Components.Widgets.ColumnConfigurator.Panel", { }); this.down("#gridPresetCombo").on("selectPreset", this.onPresetSelect, this); + this.down("#gridPresetCombo").on("markAsDefault", this.onMarkAsDefault, this); this.down("#gridPresetCombo").setAdditionalFields([ { fieldName: "grid", @@ -72,6 +73,9 @@ Ext.define("PartKeepr.Components.Widgets.ColumnConfigurator.Panel", { this.applyColumnConfigurationFromGrid(); } }, + onMarkAsDefault: function (gridPreset) { + gridPreset.callPutAction("markAsDefault") + }, onPresetSelect: function (configuration) { this.grid.reconfigure(this.grid.store, configuration); diff --git a/src/PartKeepr/FrontendBundle/Resources/public/js/Components/Widgets/PresetComboBox.js b/src/PartKeepr/FrontendBundle/Resources/public/js/Components/Widgets/PresetComboBox.js @@ -41,7 +41,17 @@ Ext.define("PartKeepr.PresetCombobox", { * Defines if the configuration should be serialized or not * @var bool */ - serializeConfiguration: true + serializeConfiguration: true, + + /** + * Defines if the mark as default feature should be available + */ + allowMarkAsDefault: false, + + /** + * Defines which property defines if the preset is the default + */ + markedAsDefaultProperty: null }, @@ -74,6 +84,14 @@ Ext.define("PartKeepr.PresetCombobox", { scope: 'this', tooltip: i18n("Delete selected preset"), hidden: true + }, + default: { + cls: "x-form-trigger-default", + weight: 4, + handler: 'onMarkPresetAsDefault', + scope: 'this', + tooltip: i18n("Mark selected preset as default"), + hidden: true } }, @@ -90,6 +108,19 @@ Ext.define("PartKeepr.PresetCombobox", { initComponent: function () { + if (this.allowMarkAsDefault) { + console.log("FOO1"); + console.log(config); + this.displayTpl = Ext.create('Ext.XTemplate', + '<tpl for=".">', + '{'+this.displayField+'}', + '<tpl if="'+this.markedAsDefaultProperty+'" = 1">', + '*', + '</tpl>', + '</tpl>' + ); + } + if (this.getModel() === null) { Ext.raise("The configuration property 'model' is not configured, but is required."); } @@ -145,12 +176,9 @@ Ext.define("PartKeepr.PresetCombobox", { onPresetNameEntered: function (buttonId, value) { if (buttonId === "ok") { - if (this.getStore().find(this.nameField, value) === -1) { - this.savePreset(value); - } else { - Ext.Msg.alert(i18n("Save Preset"), i18n("The selected name is already in use"), this.onSavePreset, - this); - } + this.savePreset(value); + // The previous method where save was only allowed if the preset name doesn't exist was removed. Unclear + // why this was added in the first place. } }, /** @@ -253,6 +281,9 @@ Ext.define("PartKeepr.PresetCombobox", { { this.additionalFields = additionalFields; }, + onMarkPresetAsDefault: function () { + this.fireEvent("markAsDefault", this.getSelectedRecord()); + }, /** * Handler to show/hide the delete button */ @@ -260,8 +291,13 @@ Ext.define("PartKeepr.PresetCombobox", { { if (this.getSelectedRecord() !== null) { this.triggers.delete.show(); + + if (this.allowMarkAsDefault) { + this.triggers.default.show(); + } } else { this.triggers.delete.hide(); + this.triggers.default.hide(); } } }); diff --git a/src/PartKeepr/FrontendBundle/Services/GridPresetService.php b/src/PartKeepr/FrontendBundle/Services/GridPresetService.php @@ -0,0 +1,43 @@ +<?php + +namespace PartKeepr\FrontendBundle\Services; + + +use Doctrine\ORM\EntityManager; +use PartKeepr\FrontendBundle\Entity\GridPreset; + +class GridPresetService +{ + /** + * @var EntityManager + */ + private $entityManager; + + public function __construct(EntityManager $entityManager) + { + $this->entityManager = $entityManager; + } + + public function markGridPresetAsDefault (GridPreset $gridPreset) { + $queryBuilder = $this->entityManager->createQueryBuilder(); + + + $queryBuilder->update("PartKeeprFrontendBundle:GridPreset", "gp")->set("gp.gridDefault", ":default") + ->where("gp.grid = :grid"); + + $queryBuilder->setParameter("grid", $gridPreset->getGrid()); + $queryBuilder->setParameter("default", false); + + $queryBuilder->getQuery()->execute(); + + $gridPreset->setGridDefault(true); + } + + public function getDefaultPresets () { + $queryBuilder = $this->entityManager->createQueryBuilder(); + + $queryBuilder->select("gp.grid", "gp.configuration")->from("PartKeeprFrontendBundle:GridPreset", "gp")->where("gp.gridDefault = :default"); + $queryBuilder->setParameter("default", true); + return $queryBuilder->getQuery()->getArrayResult(); + } +}+ \ No newline at end of file