All files / web/bundles/pimui/js/job/execution download-archives-buttons.js

100% Statements 37/37
100% Branches 12/12
100% Functions 9/9
100% Lines 37/37

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139                383x                                   383x             644x   644x             605x   605x             1951x 15x   1936x         1936x                 1936x 1936x   1936x 1936x 855x     1936x 326x   1610x                   1936x 1936x   1936x 1936x 855x 855x 855x 792x   855x 972x 972x       1936x                 972x                       1951x 1951x 616x 1335x 1155x   180x            
'use strict';
/**
 * Download file extension
 *
 * @author    Alban Alnot <alban.alnot@consertotech.pro>
 * @copyright 2017 Akeneo SAS (http://www.akeneo.com)
 * @license   http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */
define(
    [
        'underscore',
        'oro/translator',
        'pim/form',
        'pim/template/job-execution/download-archives-buttons',
        'routing',
        'pim/common/property',
        'pim/security-context'
    ],
    function (_,
              __,
              BaseForm,
              template,
              Routing,
              propertyAccessor,
              securityContext
    ) {
        return BaseForm.extend({
            template: _.template(template),
 
            /**
             * {@inheritdoc}
             */
            initialize: function (meta) {
                this.config = meta.config;
 
                BaseForm.prototype.initialize.apply(this, arguments);
            },
 
            /**
             * {@inheritdoc}
             */
            configure: function () {
                this.listenTo(this.getRoot(), 'pim_enrich:form:entity:post_update', this.render);
 
                return BaseForm.prototype.configure.apply(this, arguments);
            },
 
            /**
             * {@inheritdoc}
             */
            render: function () {
                if (!this.isVisible()) {
                    return this;
                }
                this.$el.html(this.template({
                    label: this.getLabel(),
                    files: this.getFiles()
                }));
 
                return this;
            },
 
            /**
             * Get the main button label. If there is only one file to download, it takes the name of the file.
             *
             * @returns {string}
             */
            getLabel() {
                const formData = this.getFormData();
                const archives = propertyAccessor.accessProperty(formData, this.config.filesPath);
 
                let files = [];
                Object.values(archives).forEach((archive) => {
                    files = Object.assign({}, files, archive.files);
                });
 
                if (Object.keys(files).length === 1) {
                    return __(Object.values(archives)[0].label);
                } else {
                    return __('pim_enrich.entity.job_execution.module.download.output');
                }
            },
 
            /**
             * Get the list of files to download, under the form label => url.
             *
             * @returns {Object}
             */
            getFiles() {
                const formData = this.getFormData();
                const archives = propertyAccessor.accessProperty(formData, this.config.filesPath);
 
                let files = {};
                Object.keys(archives).forEach((archiver) => {
                    const archive = archives[archiver];
                    let label = null;
                    if (Object.keys(archive.files).length === 1) {
                        label = __(archive.label);
                    }
                    Object.keys(archive.files).forEach((key) => {
                        const archiveLabel = null === label ? key : label;
                        files[archiveLabel] = this.getUrl({id: formData.meta.id, archiver: archiver, key: key });
                    });
                });
 
                return files;
            },
 
            /**
             * Get the url from parameters
             *
             * @returns {string}
             */
            getUrl: function (parameters) {
                return Routing.generate(
                    this.config.url,
                    parameters
                );
            },
 
            /**
             * Returns true if the extension should be visible
             *
             * @returns {boolean}
             */
            isVisible: function () {
                var formData = this.getFormData();
                if (formData.jobInstance.type === 'export') {
                    return securityContext.isGranted(this.config.aclIdExport);
                } else if (formData.jobInstance.type === 'import') {
                    return securityContext.isGranted(this.config.aclIdImport);
                } else {
                    return true;
                }
            }
        });
    }
);