Plugin Directory

Changeset 2411168


Ignore:
Timestamp:
11/02/2020 02:27:44 PM (5 years ago)
Author:
ppakier2017
Message:

Update trunk

Location:
mnumidesigner/trunk
Files:
4 added
23 edited

Legend:

Unmodified
Added
Removed
  • mnumidesigner/trunk/admin/class-mnumidesigner-templates-list-table.php

    r2315791 r2411168  
    160160            <h1 class="wp-heading-inline"><?php esc_html_e( 'Templates', 'mnumidesigner' ); ?></h1>
    161161            <?php if ( current_user_can( 'create_mnumidesigner_template' ) ) : ?>
    162             <a href class="page-title-action thickbox open-new-designer-project-dialog"><?php esc_html_e( 'Add New', 'mnumidesigner' ); ?></a>
     162            <a href class="page-title-action open-new-designer-project-dialog"><?php esc_html_e( 'Add New', 'mnumidesigner' ); ?></a>
    163163            <?php endif; ?>
    164164            <hr class="wp-header-end">
     
    189189        <?php if ( isset( $data['available_project_types'] ) ) : ?>
    190190            <?php $available_project_types = $data['available_project_types']; ?>
    191             <script type="text/html" id="tmpl-mnumidesigner-new-template">
    192191            <?php include dirname( __FILE__ ) . '/../includes/admin/backbone/html-new-project-template-form.php'; ?>
    193             </script>
    194192        <?php else : ?>
    195193            <script type="text/html" id="tmpl-mnumidesigner-new-template">
  • mnumidesigner/trunk/admin/class-mnumidesigner-translations-list-table.php

    r2299029 r2411168  
    7272            array(
    7373                'screen' => 'mnumidesigner_page_mnumidesigner-translations',
    74             // 'screen' => get_plugin_page_hookname( self::MENU, MnumiDesigner::MENU )
    7574            )
    7675        );
     
    140139            <h1 class="wp-heading-inline"><?php esc_html_e( 'Translations', 'mnumidesigner' ); ?></h1>
    141140            <?php if ( current_user_can( 'create_mnumidesigner_translation' ) ) : ?>
    142             <a href="" class="page-title-action thickbox open-new-language-dialog"><?php esc_html_e( 'Add New', 'mnumidesigner' ); ?></a>
     141            <a href="" class="page-title-action open-new-language-dialog"><?php esc_html_e( 'Add New', 'mnumidesigner' ); ?></a>
    143142            <?php endif; ?>
    144143            <hr class="wp-header-end">
  • mnumidesigner/trunk/admin/woocommerce/class-mnumidesigner-wc-order-data.php

    r2299029 r2411168  
    130130                $current_url   = mnumidesigner_get_current_admin_url( 'post.php' );
    131131                $order_item_id = $item->get_order_id();
     132                $extra         = '';
     133
     134                $cals = MnumiDesigner_WC_Product::get_event_calendars( $item->get_product() );
     135                if ( count( $cals ) > 0 ) {
     136                    $extra .= sprintf( ' calendar_ids="%s"', implode( ',', $cals ) );
     137                }
    132138
    133139                // results always is an array with one entry...
     
    149155                    $edit_btn       = do_shortcode(
    150156                        sprintf(
    151                             '[%s project="%s" back_url="%s" class="button mnumidesigner-download" text="%s"]',
     157                            '[%s project="%s" back_url="%s" class="button mnumidesigner-download" text="%s" %s]',
    152158                            MnumiDesigner_Shortcode_Edit_Project_Link::SHORTCODE,
    153159                            $project->get_project_id(),
    154160                            $current_url,
    155                             __( 'Edit', 'mnumidesigner' )
     161                            __( 'Edit', 'mnumidesigner' ),
     162                            $extra
    156163                        )
    157164                    );
  • mnumidesigner/trunk/admin/woocommerce/class-mnumidesigner-wc-product.php

    r2315791 r2411168  
    6060    public static function get_translation( $product_or_variation ) {
    6161        return get_post_meta( $product_or_variation->get_id(), 'mnumidesigner_translation', true );
     62    }
     63
     64    /**
     65     * Gets MnumiDesigner event calendars set on product/variation.
     66     *
     67     * @param WC_Product|WC_Product_Variation $product_or_variation WooCommerce product.
     68     * @return string|null
     69     */
     70    public static function get_event_calendars( $product_or_variation ) {
     71        return get_post_meta( $product_or_variation->get_id(), 'mnumidesigner_calendars', true );
    6272    }
    6373
     
    278288            )
    279289        );
     290
     291        $options = array();
     292        $request = new WP_REST_Request(
     293            'GET',
     294            '/mnumidesigner/v1/calendars'
     295        );
     296
     297        $response = rest_do_request( $request );
     298
     299        $server = rest_get_server();
     300        $data   = $server->response_to_data( $response, false );
     301        foreach ( $data as $entry ) {
     302            $options[ $entry['id'] ] = sprintf(
     303                '%s (%s / %s)',
     304                $entry['name'],
     305                $entry['type'],
     306                $entry['locale']
     307            );
     308        }
     309
     310        woocommerce_wp_select(
     311            array(
     312                'id'                => 'mnumidesigner_calendars' . ( $is_variation ? '_' . $variation_loop : '' ) . '[]',
     313                'name'              => 'mnumidesigner_calendars' . ( $is_variation ? '[' . $variation_loop . ']' : '' ) . '[]',
     314                'label'             => __( 'Custom calendars', 'mnumidesigner' ),
     315                'options'           => $options,
     316                'value'             => get_post_meta( $id, 'mnumidesigner_calendars', true ),
     317                'custom_attributes' => array(
     318                    'multiple' => 'multiple',
     319                ),
     320            )
     321        );
    280322    }
    281323
     
    390432            delete_post_meta( $post_id, $key );
    391433        }
     434
     435        $key = 'mnumidesigner_calendars';
     436        if ( ! empty( $_POST[ $key ] ) && is_array( $_POST[ $key ] ) ) {
     437            $toSave = array();
     438            foreach ( $_POST[ $key ] as $calendar ) {
     439                if ( strlen( sanitize_text_field( wp_unslash( $calendar ) ) ) > 0 ) {
     440                    $toSave[] = sanitize_text_field( wp_unslash( $calendar ) );
     441                }
     442            }
     443
     444            update_post_meta( $post_id, $key, $toSave );
     445        } else {
     446            delete_post_meta( $post_id, $key );
     447        }
    392448    }
    393449
     
    426482            delete_post_meta( $variation_id, $key );
    427483        }
     484
     485        $key = 'mnumidesigner_calendars';
     486        if ( ! empty( $_POST[ $key ] ) && isset( $_POST[ $key ][ $i ] ) && is_array( $_POST[ $key ][ $i ] ) ) {
     487            $toSave = array();
     488            foreach ( $_POST[ $key ][ $i ] as $calendar ) {
     489                if ( strlen( sanitize_text_field( wp_unslash( $calendar ) ) ) > 0 ) {
     490                    $toSave[] = sanitize_text_field( wp_unslash( $calendar ) );
     491                }
     492            }
     493
     494            update_post_meta( $post_id, $key, $toSave );
     495        } else {
     496            delete_post_meta( $post_id, $key );
     497        }
    428498    }
    429499
     
    444514        <?php if ( isset( $data['available_project_types'] ) ) : ?>
    445515            <?php $available_project_types = $data['available_project_types']; ?>
    446             <script type="text/html" id="tmpl-mnumidesigner-new-template">
    447516            <?php include dirname( __FILE__ ) . '/../../includes/admin/backbone/html-new-project-template-form.php'; ?>
    448             </script>
    449517        <?php else : ?>
    450518            <script type="text/html" id="tmpl-mnumidesigner-new-template">
  • mnumidesigner/trunk/assets/css/admin.css

    r2299029 r2411168  
    7474.mnumidesigner-dialog.ui-dialog .ui-dialog-content {
    7575    padding: .5em 1em;
     76    width: auto !important;
    7677}
    7778.mnumidesigner-dialog.ui-dialog .ui-button {
     
    9798.mnumidesigner-dialog.ui-dialog .ui-dialog-title {
    9899    margin: 0;
     100    white-space: nowrap;
     101    padding-right: 36px;
    99102}
    100103.mnumidesigner-dialog.ui-dialog .ui-dialog-titlebar,
     
    157160}
    158161
     162.mnumidesigner-calendar-event.cyclic::-webkit-datetime-edit-year-field {
     163    display: none;
     164}
    159165
    160166#woocommerce-order-items #order_line_items .mnumidesigner-download {
  • mnumidesigner/trunk/assets/js/admin/projects.js

    r2315791 r2411168  
    4040                                        if ( ! e.isDefaultPrevented() ) {
    4141                                            e.preventDefault();
    42                                             if ( ! this.model.attributes._links.edit ) {
     42                                            if ( ! this.model.get( '_links' ).edit ) {
    4343                                                return;
    4444                                            }
     
    4646                                            wp.apiRequest(
    4747                                                {
    48                                                     url: this.model.attributes._links.edit[0].href,
     48                                                    url: this.model.get( '_links' ).edit[0].href,
    4949                                                    data: {
    5050                                                        back_url: window.location.href
     
    6363                                        if ( ! e.isDefaultPrevented() ) {
    6464                                            e.preventDefault();
    65                                             if ( ! this.model.attributes._links.duplicate ) {
     65                                            if ( ! this.model.get( '_links' ).duplicate ) {
    6666                                                return;
    6767                                            }
     
    7373                                                    method: 'POST',
    7474                                                    dataType: 'json',
    75                                                     url: this.model.attributes._links.duplicate[0].href,
     75                                                    url: this.model.get( '_links' ).duplicate[0].href,
    7676                                                    success: function(response) {
    7777                                                        console.log( JSON.parse( response.body ) );
     
    9696                                        if ( ! e.isDefaultPrevented() ) {
    9797                                            e.preventDefault();
    98                                             if ( ! this.model.attributes._links.delete ) {
     98                                            if ( ! this.model.get( '_links' ).delete ) {
    9999                                                return;
    100100                                            }
  • mnumidesigner/trunk/assets/js/admin/templates.js

    r2315791 r2411168  
    1010        function() {
    1111            'use strict';
     12            var NewTemplateView = wp.Backbone.View.extend(
     13                {
     14                    className: 'new-template',
     15                    template: wp.template( 'mnumidesigner-new-template' ),
     16                    render: function() {
     17                        this.$el.html( this.template() );
     18                        return this;
     19                    },
     20                    setErrors: function(text) {
     21                        this.$el.find( '.errors' ).text( text );
     22                    },
     23                    save: function(options) {
     24                        this.model.save(
     25                            {
     26                                type: this.$el.find( '#project_type' ).val(),
     27                                width: this.$el.find( '#project_width' ).val(),
     28                                height: this.$el.find( '#project_height' ).val(),
     29                                back_url: this.options.back_url
     30                            },
     31                            options
     32                        );
     33                    }
     34                }
     35            );
    1236
    1337            wp.api.init(
     
    4064                                        if ( ! e.isDefaultPrevented() ) {
    4165                                            e.preventDefault();
    42                                             if ( ! this.model.attributes._links.edit ) {
     66                                            if ( ! this.model.get( '_links' ).edit ) {
    4367                                                return;
    4468                                            }
     
    4670                                            wp.apiRequest(
    4771                                                {
    48                                                     url: this.model.attributes._links.edit[0].href,
     72                                                    url: this.model.get( '_links' ).edit[0].href,
    4973                                                    data: {
    5074                                                        back_url: window.location.href
     
    6387                                        if ( ! e.isDefaultPrevented() ) {
    6488                                            e.preventDefault();
    65                                             if ( ! this.model.attributes._links.duplicate ) {
     89                                            if ( ! this.model.get( '_links' ).duplicate ) {
    6690                                                return;
    6791                                            }
     
    7397                                                    method: 'POST',
    7498                                                    dataType: 'json',
    75                                                     url: this.model.attributes._links.duplicate[0].href,
     99                                                    url: this.model.get( '_links' ).duplicate[0].href,
    76100                                                    success: function(response) {
    77101                                                        console.log( JSON.parse( response.body ) );
     
    96120                                        if ( ! e.isDefaultPrevented() ) {
    97121                                            e.preventDefault();
    98                                             if ( ! this.model.attributes._links.delete ) {
     122                                            if ( ! this.model.get( '_links' ).delete ) {
    99123                                                return;
    100124                                            }
     
    187211                                        var view = new NewTemplateView(
    188212                                            {
     213                                                model: new Project(),
    189214                                                back_url: window.location.href
    190215                                            }
    191216                                        );
    192                                         $( view.el ).dialog(
     217                                        $( view.render().el ).dialog(
    193218                                            {
    194219                                                show: "fadeIn",
     
    222247                                                                        window.location.href = response.redirect;
    223248                                                                        view.setErrors( '' );
    224                                                                         view.dialog( 'close' );
     249                                                                        view.dialog( 'destroy' );
    225250                                                                    }
    226251                                                                }
     
    232257                                                        'class': 'button btn-cancel',
    233258                                                        click: function () {
    234                                                             $( this ).dialog( 'close' );
     259                                                            $( this ).dialog( 'destroy' );
    235260                                                        }
    236261                                                }
     
    258283                                    }
    259284                                );
    260 
    261                             var NewTemplateView = wp.Backbone.View.extend(
    262                                 {
    263                                     className: 'new-template',
    264                                     template: wp.template( 'mnumidesigner-new-template' ),
    265                                     initialize: function( options ) {
    266                                         this.options = options;
    267                                         this.model   = new Project();
    268 
    269                                         _.bindAll( this, 'render' );
    270                                         this.render();
    271                                     },
    272                                     render: function() {
    273                                         this.$el.html( this.template() );
    274                                         return this;
    275                                     },
    276                                     setErrors: function(text) {
    277                                         this.$el.find( '.errors' ).text( text );
    278                                     },
    279                                     save: function(options) {
    280                                         this.model.save(
    281                                             {
    282                                                 type: this.$el.find( '#project_type' ).val(),
    283                                                 width: this.$el.find( '#project_width' ).val(),
    284                                                 height: this.$el.find( '#project_height' ).val(),
    285                                                 back_url: this.options.back_url
    286                                             },
    287                                             options
    288                                         );
    289                                     }
    290                                 }
    291                             );
    292285                        }
    293286                    );
  • mnumidesigner/trunk/assets/js/admin/translations.js

    r2299029 r2411168  
    1010        function() {
    1111            'use strict';
     12            var NewTranslationView = wp.Backbone.View.extend(
     13                {
     14                    className: 'new-translation',
     15                    template: wp.template( 'mnumidesigner-new-translation' ),
     16                    initialize: function( options ) {
     17                        _.bindAll( this, 'render' );
     18                        this.render();
     19                    },
     20                    render: function() {
     21                        this.$el.html( this.template() );
     22                        return this;
     23                    },
     24                    setErrors: function(text) {
     25                        this.$el.find( '.errors' ).text( text );
     26                    },
     27                    save: function(options) {
     28                        this.model.save(
     29                            {
     30                                name: this.$el.find( '#translation_name' ).val(),
     31                                locale: this.$el.find( '#translation_locale' ).val(),
     32                            },
     33                            options
     34                        );
     35                    }
     36                }
     37            );
     38
     39            var EditTranslationView = wp.Backbone.View.extend(
     40                {
     41                    className: 'edit-translations-list',
     42                    template: wp.template( 'mnumidesigner-edit-translations' ),
     43                    events : {
     44                        'change .mnumidesigner-translation-entry': 'update'
     45                    },
     46                    initialize: function( options ) {
     47                        _.bindAll( this, 'render' );
     48
     49                        this.listenTo( this.model, 'sync', this.render );
     50
     51                        this.on( 'open', this.load );
     52                    },
     53                    load: function() {
     54                        this.model.fetch( { data: { _embed: true } } );
     55                    },
     56                    update: function(e) {
     57                        this.updateEntry(
     58                            $( e.target ).data( 'entry-id' ),
     59                            e.target.value
     60                        );
     61                    },
     62                    updateEntry: function(entryId, trans) {
     63                        var object = this.model.get( 'translations' )
     64                        .find(
     65                            function(entry) {
     66                                return entry.id == entryId
     67                            }
     68                        );
     69                        if (object) {
     70                            object.translation = trans;
     71                        }
     72                    },
     73                    save: function() {
     74                        this.model.save();
     75                    },
     76                    render: function() {
     77                        this.$el.html( this.template( this.model.toJSON() ) );
     78                        return this;
     79                    },
     80                }
     81            );
    1282
    1383            wp.api.init(
     
    40110                                            e.preventDefault();
    41111
    42                                             var editView = new EditTranslationView( this.model );
     112                                            var editView = new EditTranslationView(
     113                                                {
     114                                                    model: this.model
     115                                                }
     116                                            );
    43117                                            $( editView.el ).dialog(
    44118                                                {
     
    62136                                                        "OK" : function () {
    63137                                                            editView.save();
    64                                                             $( this ).dialog( 'close' );
     138                                                            $( this ).dialog( 'destroy' );
    65139                                                        }
    66140                                                    }
     
    96170                                }
    97171                            );
    98                             var NewTranslationView = wp.Backbone.View.extend(
    99                                 {
    100                                     className: 'new-translation',
    101                                     template: wp.template( 'mnumidesigner-new-translation' ),
    102                                     initialize: function( options ) {
    103                                         this.options = options;
    104                                         this.model   = new Translation();
    105 
    106                                         _.bindAll( this, 'render' );
    107                                         this.render();
    108                                     },
    109                                     render: function() {
    110                                         this.$el.html( this.template() );
    111                                         return this;
    112                                     },
    113                                     setErrors: function(text) {
    114                                         this.$el.find( '.errors' ).text( text );
    115                                     },
    116                                     save: function(options) {
    117                                         this.model.save(
    118                                             {
    119                                                 name: this.$el.find( '#translation_name' ).val(),
    120                                                 locale: this.$el.find( '#translation_locale' ).val(),
    121                                             },
    122                                             options
    123                                         );
    124                                     }
    125                                 }
    126                             );
    127 
    128                             var EditTranslationView = wp.Backbone.View.extend(
    129                                 {
    130                                     className: 'edit-translations-list',
    131                                     template: wp.template( 'mnumidesigner-edit-translations' ),
    132                                     events : {
    133                                         'change .mnumidesigner-translation-entry': 'update'
    134                                     },
    135                                     initialize: function( options ) {
    136                                         this.options = options;
    137                                         this.model   = options;
    138                                         _.bindAll( this, 'render' );
    139 
    140                                         this.listenTo( this.model, 'sync', this.render );
    141 
    142                                         this.on( 'open', this.load );
    143                                     },
    144                                     load: function() {
    145                                         this.model.fetch( { data: { _embed: true } } );
    146                                     },
    147                                     update: function(e) {
    148                                         this.updateEntry(
    149                                             $( e.target ).data( 'entry-id' ),
    150                                             e.target.value
    151                                         );
    152                                     },
    153                                     updateEntry: function(entryId, trans) {
    154                                         var object = this.model.attributes.translations
    155                                         .find(
    156                                             function(entry) {
    157                                                 return entry.id == entryId
    158                                             }
    159                                         );
    160                                         if (object) {
    161                                             object.translation = trans;
    162                                         }
    163                                     },
    164                                     save: function() {
    165                                         this.model.save();
    166                                     },
    167                                     render: function() {
    168                                         this.$el.html( this.template( this.model.toJSON() ) );
    169                                         return this;
    170                                     },
    171                                 }
    172                             );
    173172
    174173                            var TranslationsView = Table.extend(
     
    181180                                        e.preventDefault();
    182181                                        var collection = this.collection;
    183                                         var newView    = new NewTranslationView();
     182                                        var newView    = new NewTranslationView(
     183                                            {
     184                                                model: new Translation()
     185                                            }
     186                                        );
    184187                                        $( newView.el ).dialog(
    185188                                            {
     
    207210                                                                    collection.add( model );
    208211                                                                    newView.setErrors( '' );
    209                                                                     self.dialog( 'close' );
     212                                                                    self.dialog( 'destroy' );
    210213                                                                }
    211214                                                            }
     
    214217                                                    "Cancel" : function () {
    215218                                                        newView.setErrors( '' );
    216                                                         $( this ).dialog( "close" );
     219                                                        $( this ).dialog( "destroy" );
    217220                                                    }
    218221                                                }
  • mnumidesigner/trunk/class-mnumidesigner.php

    r2315791 r2411168  
    7070        $upload_dir = wp_upload_dir( null, false );
    7171        return $upload_dir['basedir'] . '/mnumidesigner-translations';
     72    }
     73
     74    /**
     75     * Get directory path where calendars are stored.
     76     *
     77     * @return string
     78     */
     79    public static function plugin_calendars_dir() {
     80        $upload_dir = wp_upload_dir( null, false );
     81        return $upload_dir['basedir'] . '/mnumidesigner-calendars';
    7282    }
    7383
     
    126136                $controller = new MnumiDesigner_REST_Translations_Controller();
    127137                $controller->register_routes();
     138                $controller = new MnumiDesigner_REST_Calendars_Controller();
     139                $controller->register_routes();
    128140                $controller = new MnumiDesigner_REST_Projects_Controller();
    129141                $controller->register_routes();
     
    192204            array(
    193205                'MnumiDesigner_Translations_List_Table',
     206                'register_menu',
     207            )
     208        );
     209        add_action(
     210            'admin_menu',
     211            array(
     212                'MnumiDesigner_Calendars_List_Table',
    194213                'register_menu',
    195214            )
     
    345364        include_once 'admin/class-mnumidesigner-customer-projects-list-table.php';
    346365        include_once 'admin/class-mnumidesigner-translations-list-table.php';
     366        include_once 'admin/class-mnumidesigner-calendars-list-table.php';
    347367        include_once 'admin/class-mnumidesigner-settings.php';
    348368
     
    359379        include_once 'includes/rest-api/endpoints/class-mnumidesigner-rest-settings-controller.php';
    360380        include_once 'includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php';
     381        include_once 'includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php';
    361382        include_once 'includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php';
    362383
  • mnumidesigner/trunk/docs/shortcodes.md

    r2299029 r2411168  
    55----------------
    66
    7 [mnumidesigner_edit_project_url project="" back_url="" templates="" ping_url="" translation_id=""]
     7[mnumidesigner_edit_project_url project="" back_url="" templates="" ping_url="" translation_id="" calendar_ids=""]
    88
    99Outputs edit url to MnumiDesigner project
     
    1717* translation_id- optional, ID of translation which will be used in
    1818                  MnumiDesigner editor
     19* calendar_ids  - optional, comma separated IDs of calendars which will be used in
     20                  MnumiDesigner editor
    1921
    2022Edit project link
    2123-----------------
    2224
    23 [mnumidesigner_edit_project_url project="" back_url="" templates="" ping_url="" translation_id="" text="" class=""]
     25[mnumidesigner_edit_project_url project="" back_url="" templates="" ping_url="" translation_id="" calendar_ids="" text="" class=""]
    2426
    2527Outputs HTML edit link to MnumiDesigner project:
     
    3335* translation_id- optional, ID of translation which will be used in
    3436                  MnumiDesigner editor
     37* calendar_ids  - optional, comma separated IDs of calendars which will be used in
     38                  MnumiDesigner editor
    3539* text          - Text which will be displayed in link
    3640* class         - Anchor class
     
    4246---------------
    4347
    44 [mnumidesigner_wc_new_project_url product_id="" variation_id="" count="" back_url="" ping_url="" translation_id=""]
     48[mnumidesigner_wc_new_project_url product_id="" variation_id="" count="" back_url="" ping_url="" translation_id="" calendar_ids=""]
    4549
    4650Outputs url allowing creation of new MnumiDesigner projects.
     
    5862* translation_id- optional, ID of translation which will be used in
    5963                  MnumiDesigner editor
     64* calendar_ids  - optional, comma separated IDs of calendars which will be used in
     65                  MnumiDesigner editor
    6066
    6167
     
    6369----------------
    6470
    65 [mnumidesigner_wc_new_project_link product_id="" variation_id="" count="" back_url="" ping_url="" translation_id=""]
     71[mnumidesigner_wc_new_project_link product_id="" variation_id="" count="" back_url="" ping_url="" translation_id="" calendar_ids=""]
    6672
    6773Outputs link to MnumiDesigner based currently viewed product
     
    7985* translation_id- optional, ID of translation which will be used in
    8086                  MnumiDesigner editor
     87* calendar_ids  - optional, comma separated IDs of calendars which will be used in
     88                  MnumiDesigner editor
    8189* text          - Text which will be displayed in link
    8290* class         - Anchor class
  • mnumidesigner/trunk/includes/admin/backbone/html-new-project-template-form.php

    r2299029 r2411168  
    1010}
    1111?>
     12<script type="text/html" id="tmpl-mnumidesigner-new-template">
    1213<div class="errors"></div>
    1314<form onsubmit="event.preventDefault();">
    14     <table class="form-table">
     15    <table class="widefat">
    1516        <tr>
    1617            <th><label><?php esc_html_e( 'Type', 'mnumidesigner' ); ?></label></th>
     
    4344    </table>
    4445</form>
     46</script>
  • mnumidesigner/trunk/includes/admin/backbone/html-translations.php

    r2299029 r2411168  
    1414    <form onsubmit="event.preventDefault();">
    1515        <input name="domain" type="hidden" value="editor">
    16         <table class="form-table">
     16        <table class="widefat">
    1717            <tr>
    1818                <th><label><?php esc_html_e( 'Name', 'mnumidesigner' ); ?></label></th>
    19                 <td><input id="translation_name" name="name" type="text" class="small-text"></input></td>
     19                <td><input id="translation_name" name="name" type="text" class="medium-text"></input></td>
    2020            </tr>
    2121            <tr>
    2222                <th><label><?php esc_html_e( 'Base locale', 'mnumidesigner' ); ?></label></th>
    2323                <td>
    24                     <select id="translation_locale" name="locale" type="text" class="small-text">
     24                    <select id="translation_locale" name="locale" type="text" class="medium-text">
    2525                        <option value="en"><?php esc_html_e( 'English', 'mnumidesigner' ); ?></option>
    2626                        <option value="pl"><?php esc_html_e( 'Polish', 'mnumidesigner' ); ?></option>
     
    3232</script>
    3333<script type="text/html" id="tmpl-mnumidesigner-edit-translations">
    34     <table>
     34    <table class="widefat">
    3535        <thead>
    3636            <tr>
    37                 <td>id</td>
    38                 <td>original</td>
    39                 <td>translation</td>
     37                <td><?php esc_html_e( 'Id', 'mnumidesigner' ); ?></td>
     38                <td><?php esc_html_e( 'Original', 'mnumidesigner' ); ?></td>
     39                <td><?php esc_html_e( 'Translation', 'mnumidesigner' ); ?></td>
    4040            </tr>
    4141        </thead>
  • mnumidesigner/trunk/includes/class-mnumidesigner-install.php

    r2299029 r2411168  
    6464        );
    6565
    66         $capability_types = array( 'project', 'template', 'translation' );
     66        $capability_types = array( 'project', 'template', 'translation', 'calendar' );
    6767
    6868        foreach ( $capability_types as $capability_type ) {
  • mnumidesigner/trunk/includes/helper-functions.php

    r2315791 r2411168  
    188188}
    189189
    190 
    191 
    192 function mnumidesigner_get_order_item_id_by_project_id( $project_id ) {
    193     global $wpdb;
    194     return (int) $wpdb->get_var(
    195         $wpdb->prepare(
    196             "SELECT order_item_id FROM {$wpdb->prefix}woocommerce_order_itemmeta WHERE meta_key LIKE %s AND meta_value LIKE %s",
    197             "'mnumidesigner_project_id'",
    198             "'" . $project_id . "'"
    199         )
    200     );
    201 }
     190if ( ! function_exists( 'mnumidesigner_get_calendar_file_url' ) ) {
     191    /**
     192     * Returns url to calendar file.
     193     *
     194     * @param SplFileInfo $file Calendar file.
     195     * @return string|false
     196     */
     197    function mnumidesigner_get_calendar_file_url( SplFileInfo $file ) {
     198        if ( ! mnumidesigner_is_calendar_filename_valid( $file ) ) {
     199            return false;
     200        }
     201        return content_url( 'uploads/mnumidesigner-calendars/' . $file->getFilename() );
     202    }
     203}
     204
     205if ( ! function_exists( 'mnumidesigner_get_calendar_file' ) ) {
     206    /**
     207     * Returns calendar file for the given id.
     208     *
     209     * @param string $id Calendar id.
     210     *
     211     * @return SplFileInfo|false
     212     */
     213    function mnumidesigner_get_calendar_file( $id ) {
     214        if ( ! $id ) {
     215            return false;
     216        }
     217
     218        list ($name, $type, $locale) = explode( '.', $id );
     219
     220        $dir = MnumiDesigner::plugin_calendars_dir();
     221
     222        return new SplFileInfo(
     223            sprintf(
     224                '%s%s.%s.%s.json',
     225                trailingslashit( $dir ),
     226                $name,
     227                $type,
     228                $locale
     229            )
     230        );
     231    }
     232}
     233
     234if ( ! function_exists( 'mnumidesigner_get_calendar_file_meta' ) ) {
     235    /**
     236     * Returns calendar file meta data
     237     *
     238     * @param SplFileInfo $file Calendar file.
     239     * @return array
     240     */
     241    function mnumidesigner_get_calendar_file_meta( SplFileInfo $file ) {
     242        $basename = $file->getBasename( '.json' );
     243
     244        $meta = array();
     245
     246        preg_match( '/(?P<name>[\w-]+)\.(?P<type>[\w-]+)\.(?P<locale>[\w_]+)/', $basename, $meta );
     247
     248        $meta['modified'] = date_i18n(
     249            sprintf(
     250                '%s %s',
     251                get_option( 'date_format' ),
     252                get_option( 'time_format' )
     253            ),
     254            $file->getMTime()
     255        );
     256
     257        return $meta;
     258    }
     259}
     260
     261if ( ! function_exists( 'mnumidesigner_is_calendar_filename_valid' ) ) {
     262    /**
     263     * Checks if calendar file name is valid.
     264     *
     265     * @param SplFileInfo $file Calendar file.
     266     * @return boolean
     267     */
     268    function mnumidesigner_is_calendar_filename_valid( SplFileInfo $file ) {
     269        return preg_match( '/(?P<name>[\w-]+)\.(?P<type>[\w-]+)\.(?P<locale>[\w_]+)/', $file->getFilename() ) === 1;
     270    }
     271}
  • mnumidesigner/trunk/includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php

    r2315791 r2411168  
    959959
    960960        if ( in_array( 'linked_items', $fields, true ) ) {
    961             $order_item_id = mnumidesigner_get_order_item_id_by_project_id( $project->get_project_id() );
     961            $order_item_id = $this->get_order_item_id_by_project_id( $project->get_project_id() );
    962962
    963963            if ( $order_item_id > 0 ) {
     
    988988
    989989        return $response;
     990    }
     991
     992
     993    private function get_order_item_id_by_project_id( $project_id ) {
     994        global $wpdb;
     995        return (int) $wpdb->get_var(
     996            $wpdb->prepare(
     997                "SELECT order_item_id FROM {$wpdb->prefix}woocommerce_order_itemmeta WHERE meta_key LIKE %s AND meta_value LIKE %s",
     998                "'mnumidesigner_project_id'",
     999                "'" . $project_id . "'"
     1000            )
     1001        );
    9901002    }
    9911003
  • mnumidesigner/trunk/includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php

    r2299029 r2411168  
    334334        }
    335335
    336         $fs->put_contents( $file->getRealPath(), wp_json_encode( $data ) );
     336        $fs->put_contents( $file->getRealPath(), wp_json_encode( $data ), 0644 );
    337337
    338338        $data = $this->prepare_item_for_response( $file, $request );
     
    439439                        'id'          => $id,
    440440                        'original'    => $remote[ $id ],
     441                        'translation' => $translation,
     442                    );
     443                    unset( $remote[ $id ] );
     444                }
     445                foreach ( $remote as $id => $translation ) {
     446                    $data['translations'][] = array(
     447                        'id'          => $id,
     448                        'original'    => $translation,
    441449                        'translation' => $translation,
    442450                    );
  • mnumidesigner/trunk/includes/shortcodes/class-mnumidesigner-shortcode-edit-project-link.php

    r2299029 r2411168  
    3030        $atts = shortcode_atts(
    3131            array(
    32                 'project'      => '',
    33                 'back_url'     => '',
    34                 'ping_url'     => '',
    35                 'templates'    => '',
    36                 'text'         => __( 'Edit project', 'mnumidesigner' ),
    37                 'class'        => '',
    38                 'variation_id' => '',
     32                'project'        => '',
     33                'back_url'       => '',
     34                'ping_url'       => '',
     35                'templates'      => '',
     36                'translation_id' => '',
     37                'calendar_ids'   => '',
     38                'text'           => __( 'Edit project', 'mnumidesigner' ),
     39                'class'          => '',
     40                'variation_id'   => '',
    3941            ),
    4042            $atts
  • mnumidesigner/trunk/includes/shortcodes/class-mnumidesigner-shortcode-edit-project-url.php

    r2299029 r2411168  
    3030                'templates'      => '',
    3131                'translation_id' => '',
     32                'calendar_ids'   => '',
    3233            ),
    3334            $atts
     
    3637        $trans = mnumidesigner_get_translation_file( $atts['translation_id'] );
    3738        unset( $atts['translation_id'] );
     39
     40        $calendars = array();
     41        if ( $atts['calendar_ids'] ) {
     42            $calendars = explode( ',', $atts['calendar_ids'] );
     43        }
     44        unset( $atts['calendar_ids'] );
    3845
    3946        $params = array_merge(
     
    5158        }
    5259
     60        foreach ( $calendars as $calendar_id ) {
     61            $file = mnumidesigner_get_calendar_file( $calendar_id );
     62            if ( $file && mnumidesigner_is_translation_filename_valid( $file ) ) {
     63                $params['calendarUrls'][] = mnumidesigner_get_calendar_file_url( $file );
     64            }
     65        }
     66
    5367        if ( $atts['ping_url'] ) {
    5468            $params['pingUrl'] = $atts['ping_url'];
  • mnumidesigner/trunk/includes/woocommerce/class-mnumidesigner-wc-cart.php

    r2299029 r2411168  
    210210            $templates = implode( ',', MnumiDesigner_WC_Product::get_templates( $product_or_variation ) );
    211211
     212            $extra = '';
    212213            $trans = MnumiDesigner_WC_Product::get_translation( $product_or_variation );
    213214            if ( $trans ) {
    214                 $trans = sprintf( 'translation_id="%s"', $trans );
     215                $extra .= sprintf( ' translation_id="%s"', $trans );
     216            }
     217
     218            $cals = MnumiDesigner_WC_Product::get_event_calendars( $product_or_variation );
     219            if ( count( $cals ) > 0 ) {
     220                $extra .= sprintf( ' calendar_ids="%s"', implode( ',', $cals ) );
    215221            }
    216222
     
    225231                        wc_get_cart_url(),
    226232                        $templates,
    227                         $trans
     233                        $extra
    228234                    )
    229235                ),
     
    240246            $trans = MnumiDesigner_WC_Product::get_translation( $product_or_variation );
    241247            if ( $trans ) {
    242                 $variation_att = sprintf( ' translation_id="%s"', $trans );
     248                $variation_att .= sprintf( ' translation_id="%s"', $trans );
     249            }
     250
     251            $cals = MnumiDesigner_WC_Product::get_event_calendars( $product_or_variation );
     252            if ( count( $cals ) > 0 ) {
     253                $variation_att .= sprintf( ' calendar_ids="%s"', implode( ',', $cals ) );
    243254            }
    244255
     
    377388        }
    378389
     390        $cals = MnumiDesigner_WC_Product::get_event_calendars( $product_or_variation );
     391
     392        if ( count( $cals ) > 0 ) {
     393            $extra .= sprintf( ' calendar_ids="%s"', implode( ',', $cals ) );
     394        }
     395
    379396        if ( MnumiDesigner_WC_Product::is_mnumidesigner_product( $product_or_variation ) ) {
    380397            $url = do_shortcode(
  • mnumidesigner/trunk/includes/woocommerce/shortcodes/class-mnumidesigner-wc-shortcode-new-project-link.php

    r2299029 r2411168  
    3131    public static function output( $atts ) {
    3232        $defaults = array(
    33             'text'         => __( 'Add project', 'mnumidesigner' ),
    34             'class'        => '',
    35             'product_id'   => null,
    36             'count'        => 1,
    37             'back_url'     => '',
    38             'ping_url'     => '',
    39             'variation_id' => '',
     33            'text'           => __( 'Add project', 'mnumidesigner' ),
     34            'class'          => '',
     35            'product_id'     => null,
     36            'count'          => 1,
     37            'back_url'       => '',
     38            'ping_url'       => '',
     39            'translation_id' => '',
     40            'calendar_ids'   => '',
     41            'variation_id'   => '',
    4042        );
    4143
  • mnumidesigner/trunk/includes/woocommerce/shortcodes/class-mnumidesigner-wc-shortcode-new-project-url.php

    r2299029 r2411168  
    3737                'ping_url'       => '',
    3838                'translation_id' => '',
     39                'calendar_ids'   => '',
    3940            ),
    4041            $atts
     
    6364        unset( $atts['translation_id'] );
    6465
     66        $calendars = array();
     67        if ( $atts['calendar_ids'] ) {
     68            $calendars = explode( ',', $atts['calendar_ids'] );
     69        }
     70
     71        unset( $atts['calendar_ids'] );
     72
    6573        $params = array_merge(
    6674            $atts,
     
    7785        }
    7886
     87        foreach ( $calendars as $calendar_id ) {
     88            $file = mnumidesigner_get_calendar_file( $calendar_id );
     89            if ( $file && mnumidesigner_is_translation_filename_valid( $file ) ) {
     90                $params['calendarUrls'][] = mnumidesigner_get_calendar_file_url( $file );
     91            }
     92        }
     93
    7994        if ( $atts['ping_url'] ) {
    8095            $params['pingUrl'] = $atts['ping_url'];
  • mnumidesigner/trunk/languages/mnumidesigner.pot

    r2315791 r2411168  
    1010"Content-Type: text/plain; charset=UTF-8\n"
    1111"Content-Transfer-Encoding: 8bit\n"
    12 "POT-Creation-Date: 2020-06-01T11:29:23+02:00\n"
     12"POT-Creation-Date: 2020-11-02T15:05:44+01:00\n"
    1313"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
    1414"X-Generator: WP-CLI 2.4.0\n"
     
    1717#. Plugin Name of the plugin
    1818#: admin/class-mnumidesigner-settings.php:355
    19 #: admin/woocommerce/class-mnumidesigner-wc-product.php:209
     19#: admin/woocommerce/class-mnumidesigner-wc-product.php:219
    2020msgid "MnumiDesigner"
    2121msgstr ""
     
    3333msgstr ""
    3434
     35#: admin/class-mnumidesigner-calendars-list-table.php:48
     36msgid "Create new calendar"
     37msgstr ""
     38
     39#: admin/class-mnumidesigner-calendars-list-table.php:51
     40msgid "Edit calendar"
     41msgstr ""
     42
     43#: admin/class-mnumidesigner-calendars-list-table.php:102
     44#: admin/class-mnumidesigner-calendars-list-table.php:140
     45msgid "Calendars"
     46msgstr ""
     47
     48#: admin/class-mnumidesigner-calendars-list-table.php:142
     49#: admin/class-mnumidesigner-templates-list-table.php:162
     50#: admin/class-mnumidesigner-translations-list-table.php:141
     51msgid "Add New"
     52msgstr ""
     53
     54#: admin/class-mnumidesigner-calendars-list-table.php:167
     55#: admin/class-mnumidesigner-translations-list-table.php:166
     56#: includes/admin/backbone/html-calendars.php:18
     57#: includes/admin/backbone/html-translations.php:18
     58msgid "Name"
     59msgstr ""
     60
     61#: admin/class-mnumidesigner-calendars-list-table.php:168
     62#: includes/admin/backbone/html-calendars.php:22
     63#: includes/admin/backbone/html-new-project-template-form.php:17
     64msgid "Type"
     65msgstr ""
     66
     67#: admin/class-mnumidesigner-calendars-list-table.php:169
     68#: admin/class-mnumidesigner-translations-list-table.php:167
     69#: includes/admin/backbone/html-calendars.php:31
     70msgid "Locale"
     71msgstr ""
     72
     73#: admin/class-mnumidesigner-calendars-list-table.php:170
     74#: admin/class-mnumidesigner-translations-list-table.php:169
     75msgid "Last modified"
     76msgstr ""
     77
     78#: admin/class-mnumidesigner-calendars-list-table.php:195
     79#: admin/class-mnumidesigner-customer-projects-list-table.php:292
     80#: admin/class-mnumidesigner-templates-list-table.php:406
     81#: admin/class-mnumidesigner-translations-list-table.php:194
     82#: admin/woocommerce/class-mnumidesigner-wc-order-data.php:161
     83#: includes/admin/backbone/html-wc-product.php:32
     84msgid "Edit"
     85msgstr ""
     86
     87#: admin/class-mnumidesigner-calendars-list-table.php:201
     88#: admin/class-mnumidesigner-customer-projects-list-table.php:306
     89#: admin/class-mnumidesigner-templates-list-table.php:422
     90#: admin/class-mnumidesigner-translations-list-table.php:200
     91#: includes/admin/backbone/html-calendars.php:100
     92msgid "Delete"
     93msgstr ""
     94
    3595#: admin/class-mnumidesigner-customer-projects-list-table.php:104
    3696msgid "Projects"
     
    42102
    43103#: admin/class-mnumidesigner-customer-projects-list-table.php:159
     104#: admin/class-mnumidesigner-templates-list-table.php:208
     105msgid "Thumb"
     106msgstr ""
     107
     108#: admin/class-mnumidesigner-customer-projects-list-table.php:160
     109#: admin/class-mnumidesigner-templates-list-table.php:209
     110msgid "Project ID"
     111msgstr ""
     112
     113#: admin/class-mnumidesigner-customer-projects-list-table.php:161
    44114#: admin/class-mnumidesigner-templates-list-table.php:210
    45 msgid "Thumb"
    46 msgstr ""
    47 
    48 #: admin/class-mnumidesigner-customer-projects-list-table.php:160
     115msgid "Linked to"
     116msgstr ""
     117
     118#: admin/class-mnumidesigner-customer-projects-list-table.php:162
    49119#: admin/class-mnumidesigner-templates-list-table.php:211
    50 msgid "Project ID"
    51 msgstr ""
    52 
    53 #: admin/class-mnumidesigner-customer-projects-list-table.php:161
     120msgid "Created At"
     121msgstr ""
     122
     123#: admin/class-mnumidesigner-customer-projects-list-table.php:163
    54124#: admin/class-mnumidesigner-templates-list-table.php:212
    55 msgid "Linked to"
    56 msgstr ""
    57 
    58 #: admin/class-mnumidesigner-customer-projects-list-table.php:162
     125msgid "Updated At"
     126msgstr ""
     127
     128#: admin/class-mnumidesigner-customer-projects-list-table.php:164
    59129#: admin/class-mnumidesigner-templates-list-table.php:213
    60 msgid "Created At"
    61 msgstr ""
    62 
    63 #: admin/class-mnumidesigner-customer-projects-list-table.php:163
    64 #: admin/class-mnumidesigner-templates-list-table.php:214
    65 msgid "Updated At"
    66 msgstr ""
    67 
    68 #: admin/class-mnumidesigner-customer-projects-list-table.php:164
    69 #: admin/class-mnumidesigner-templates-list-table.php:215
    70 #: admin/class-mnumidesigner-templates-list-table.php:218
     130#: admin/class-mnumidesigner-templates-list-table.php:216
    71131msgid "Remove At"
    72132msgstr ""
    73133
    74 #: admin/class-mnumidesigner-customer-projects-list-table.php:292
    75 #: admin/class-mnumidesigner-templates-list-table.php:408
    76 #: admin/class-mnumidesigner-translations-list-table.php:195
    77 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:155
    78 #: includes/admin/backbone/html-wc-product.php:32
    79 msgid "Edit"
    80 msgstr ""
    81 
    82134#: admin/class-mnumidesigner-customer-projects-list-table.php:299
    83 #: admin/class-mnumidesigner-templates-list-table.php:417
     135#: admin/class-mnumidesigner-templates-list-table.php:415
    84136msgid "Duplicate"
    85137msgstr ""
    86138
    87 #: admin/class-mnumidesigner-customer-projects-list-table.php:306
    88 #: admin/class-mnumidesigner-templates-list-table.php:424
    89 #: admin/class-mnumidesigner-translations-list-table.php:201
    90 msgid "Delete"
    91 msgstr ""
    92 
    93139#: admin/class-mnumidesigner-customer-projects-list-table.php:310
    94 #: admin/class-mnumidesigner-templates-list-table.php:428
     140#: admin/class-mnumidesigner-templates-list-table.php:426
    95141msgid "Restore"
    96142msgstr ""
     
    157203
    158204#: admin/class-mnumidesigner-templates-list-table.php:58
    159 #: admin/woocommerce/class-mnumidesigner-wc-product.php:167
    160 #: admin/woocommerce/class-mnumidesigner-wc-product.php:289
     205#: admin/woocommerce/class-mnumidesigner-wc-product.php:177
     206#: admin/woocommerce/class-mnumidesigner-wc-product.php:331
    161207msgid "Create new template"
    162208msgstr ""
     
    167213msgstr ""
    168214
    169 #: admin/class-mnumidesigner-templates-list-table.php:162
    170 #: admin/class-mnumidesigner-translations-list-table.php:142
    171 msgid "Add New"
    172 msgstr ""
    173 
    174215#: admin/class-mnumidesigner-templates-list-table.php:167
    175216msgid "Search Templates"
     
    184225msgstr ""
    185226
    186 #: admin/class-mnumidesigner-translations-list-table.php:102
    187 #: admin/class-mnumidesigner-translations-list-table.php:140
    188 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:516
     227#: admin/class-mnumidesigner-translations-list-table.php:101
     228#: admin/class-mnumidesigner-translations-list-table.php:139
     229#: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:524
    189230msgid "Translations"
    190231msgstr ""
    191232
    192 #: admin/class-mnumidesigner-translations-list-table.php:167
    193 #: includes/admin/backbone/html-translations.php:18
    194 msgid "Name"
    195 msgstr ""
    196 
    197233#: admin/class-mnumidesigner-translations-list-table.php:168
    198 msgid "Locale"
    199 msgstr ""
    200 
    201 #: admin/class-mnumidesigner-translations-list-table.php:169
    202 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:483
     234#: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:491
    203235msgid "Translation domain"
    204236msgstr ""
    205237
    206 #: admin/class-mnumidesigner-translations-list-table.php:170
    207 msgid "Last modified"
    208 msgstr ""
    209 
    210238#: admin/woocommerce/class-mnumidesigner-wc-order-data.php:97
    211 #: includes/woocommerce/class-mnumidesigner-wc-cart.php:218
    212 #: includes/woocommerce/class-mnumidesigner-wc-cart.php:247
     239#: includes/woocommerce/class-mnumidesigner-wc-cart.php:224
     240#: includes/woocommerce/class-mnumidesigner-wc-cart.php:258
    213241msgid "Project"
    214242msgstr ""
     
    218246msgstr ""
    219247
    220 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:160
     248#: admin/woocommerce/class-mnumidesigner-wc-order-data.php:167
    221249msgid "Download PDF"
    222250msgstr ""
    223251
    224 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:162
     252#: admin/woocommerce/class-mnumidesigner-wc-order-data.php:169
    225253msgid "Download PDF Album"
    226254msgstr ""
    227255
    228 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:176
    229 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:194
     256#: admin/woocommerce/class-mnumidesigner-wc-order-data.php:183
     257#: admin/woocommerce/class-mnumidesigner-wc-order-data.php:201
    230258msgid "Download PDF Cover"
    231259msgstr ""
    232260
    233 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:198
    234 #: admin/woocommerce/class-mnumidesigner-wc-order-data.php:218
     261#: admin/woocommerce/class-mnumidesigner-wc-order-data.php:205
     262#: admin/woocommerce/class-mnumidesigner-wc-order-data.php:225
    235263msgid "Download PDF Book"
    236264msgstr ""
    237265
    238 #: admin/woocommerce/class-mnumidesigner-wc-product.php:178
    239 #: admin/woocommerce/class-mnumidesigner-wc-product.php:292
     266#: admin/woocommerce/class-mnumidesigner-wc-product.php:188
     267#: admin/woocommerce/class-mnumidesigner-wc-product.php:334
    240268msgid "Attach existing template"
    241269msgstr ""
    242270
    243 #: admin/woocommerce/class-mnumidesigner-wc-product.php:232
     271#: admin/woocommerce/class-mnumidesigner-wc-product.php:242
    244272msgid "Number of pages in customer project"
    245273msgstr ""
    246274
    247 #: admin/woocommerce/class-mnumidesigner-wc-product.php:233
     275#: admin/woocommerce/class-mnumidesigner-wc-product.php:243
    248276msgid "Number of pages"
    249277msgstr ""
    250278
    251 #: admin/woocommerce/class-mnumidesigner-wc-product.php:235
     279#: admin/woocommerce/class-mnumidesigner-wc-product.php:245
    252280msgid "Enter number of pages customer projects should have."
    253281msgstr ""
    254282
    255 #: admin/woocommerce/class-mnumidesigner-wc-product.php:248
     283#: admin/woocommerce/class-mnumidesigner-wc-product.php:258
    256284msgid "Additional price per page"
    257285msgstr ""
    258286
    259 #: admin/woocommerce/class-mnumidesigner-wc-product.php:275
     287#: admin/woocommerce/class-mnumidesigner-wc-product.php:285
    260288msgid "Custom translation"
    261289msgstr ""
    262290
    263 #: admin/woocommerce/class-mnumidesigner-wc-product.php:339
     291#: admin/woocommerce/class-mnumidesigner-wc-product.php:314
     292msgid "Custom calendars"
     293msgstr ""
     294
     295#: admin/woocommerce/class-mnumidesigner-wc-product.php:381
    264296msgid "Click to toggle"
    265297msgstr ""
    266298
    267 #: class-mnumidesigner.php:242
     299#: class-mnumidesigner.php:261
    268300msgid "View MnumiDesigner documentation"
    269301msgstr ""
    270302
    271 #: class-mnumidesigner.php:243
     303#: class-mnumidesigner.php:262
    272304msgid "Docs"
    273305msgstr ""
    274306
    275 #: class-mnumidesigner.php:248
     307#: class-mnumidesigner.php:267
    276308msgid "Contact"
    277309msgstr ""
    278310
    279 #: class-mnumidesigner.php:312
     311#: class-mnumidesigner.php:331
    280312msgid "Your MnumiDesigner plugin needs to be configured to work properly"
    281313msgstr ""
    282314
    283 #: class-mnumidesigner.php:313
     315#: class-mnumidesigner.php:332
    284316msgid "Enter your MnumiDesigner Api access credentials"
    285317msgstr ""
    286318
    287319#. translators: %s api access expiration date
    288 #: class-mnumidesigner.php:322
     320#: class-mnumidesigner.php:341
    289321msgid "You are using demo version of MnumiDesigner plugin which means that you can use it until: %s"
    290322msgstr ""
    291323
    292 #: class-mnumidesigner.php:393
     324#: class-mnumidesigner.php:414
    293325msgid "All"
    294326msgstr ""
    295327
    296 #: class-mnumidesigner.php:394
     328#: class-mnumidesigner.php:415
    297329msgid "Own"
    298330msgstr ""
    299331
    300 #: class-mnumidesigner.php:395
     332#: class-mnumidesigner.php:416
    301333msgid "Global"
    302334msgstr ""
    303335
    304 #: class-mnumidesigner.php:396
     336#: class-mnumidesigner.php:417
    305337msgid "Pending removal"
    306338msgstr ""
    307339
    308 #: class-mnumidesigner.php:407
     340#: class-mnumidesigner.php:428
    309341msgid "Filter by template type"
    310342msgstr ""
    311343
    312 #: class-mnumidesigner.php:408
    313 #: includes/admin/backbone/html-new-project-template-form.php:22
     344#: class-mnumidesigner.php:429
     345#: includes/admin/backbone/html-new-project-template-form.php:23
    314346msgid "Custom"
    315347msgstr ""
    316348
    317 #: class-mnumidesigner.php:409
    318 #: includes/admin/backbone/html-new-project-template-form.php:24
     349#: class-mnumidesigner.php:430
     350#: includes/admin/backbone/html-new-project-template-form.php:25
    319351msgid "Album"
    320352msgstr ""
    321353
    322 #: class-mnumidesigner.php:410
    323 #: includes/admin/backbone/html-new-project-template-form.php:26
     354#: class-mnumidesigner.php:431
     355#: includes/admin/backbone/html-new-project-template-form.php:27
    324356msgid "Calendar"
    325357msgstr ""
    326358
    327 #: includes/admin/backbone/html-new-project-template-form.php:16
    328 msgid "Type"
    329 msgstr ""
    330 
    331 #: includes/admin/backbone/html-new-project-template-form.php:28
     359#: includes/admin/backbone/html-calendars.php:25
     360msgid "Name days"
     361msgstr ""
     362
     363#: includes/admin/backbone/html-calendars.php:26
     364msgid "National days"
     365msgstr ""
     366
     367#: includes/admin/backbone/html-calendars.php:54
     368msgid "Date"
     369msgstr ""
     370
     371#: includes/admin/backbone/html-calendars.php:55
     372msgid "Is cyclic?"
     373msgstr ""
     374
     375#: includes/admin/backbone/html-calendars.php:56
     376#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:546
     377msgid "Event name"
     378msgstr ""
     379
     380#: includes/admin/backbone/html-calendars.php:58
     381#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:557
     382msgid "Event type"
     383msgstr ""
     384
     385#: includes/admin/backbone/html-calendars.php:60
     386msgid "Actions"
     387msgstr ""
     388
     389#: includes/admin/backbone/html-calendars.php:72
     390#: includes/admin/backbone/html-calendars.php:95
     391msgid "Holiday"
     392msgstr ""
     393
     394#: includes/admin/backbone/html-calendars.php:76
     395msgid "Add"
     396msgstr ""
     397
     398#: includes/admin/backbone/html-new-project-template-form.php:29
    332399msgid "Business card"
    333400msgstr ""
    334401
    335 #: includes/admin/backbone/html-new-project-template-form.php:36
     402#: includes/admin/backbone/html-new-project-template-form.php:37
    336403msgid "Width"
    337404msgstr ""
    338405
    339 #: includes/admin/backbone/html-new-project-template-form.php:40
     406#: includes/admin/backbone/html-new-project-template-form.php:41
    340407msgid "Height"
    341408msgstr ""
     
    371438#: includes/admin/backbone/html-translations.php:26
    372439msgid "Polish"
     440msgstr ""
     441
     442#: includes/admin/backbone/html-translations.php:37
     443msgid "Id"
     444msgstr ""
     445
     446#: includes/admin/backbone/html-translations.php:38
     447msgid "Original"
     448msgstr ""
     449
     450#: includes/admin/backbone/html-translations.php:39
     451msgid "Translation"
    373452msgstr ""
    374453
     
    436515#: includes/class-mnumidesigner-backbone-list-table.php:757
    437516msgid "Loading..."
     517msgstr ""
     518
     519#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:62
     520msgid "Unique identifier of the calendar."
     521msgstr ""
     522
     523#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:105
     524#: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:105
     525msgid "Filter collection by object name."
     526msgstr ""
     527
     528#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:110
     529#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:242
     530#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:394
     531msgid "Filter collection by object type."
     532msgstr ""
     533
     534#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:284
     535msgid "Calendar already exists."
     536msgstr ""
     537
     538#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:381
     539msgid "Calendar file is not a file."
     540msgstr ""
     541
     542#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:385
     543msgid "Insufficient file permissions for removing calendar."
     544msgstr ""
     545
     546#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:391
     547msgid "Calendar cannot be deleted."
     548msgstr ""
     549
     550#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:493
     551msgid "Unique id of calendar"
     552msgstr ""
     553
     554#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:499
     555msgid "Name for calendar."
     556msgstr ""
     557
     558#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:505
     559msgid "Calendar type"
     560msgstr ""
     561
     562#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:512
     563msgid "Locale of calendar."
     564msgstr ""
     565
     566#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:518
     567#: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:510
     568msgid "The date the object was last modified, in the site's timezone."
     569msgstr ""
     570
     571#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:525
     572#: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:517
     573msgid "URL to the object"
     574msgstr ""
     575
     576#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:532
     577msgid "Calendar events"
     578msgstr ""
     579
     580#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:540
     581msgid "Event date"
     582msgstr ""
     583
     584#: includes/rest-api/endpoints/class-mnumidesigner-rest-calendars-controller.php:552
     585msgid "Is event cyclic?"
    438586msgstr ""
    439587
     
    474622msgstr ""
    475623
    476 #: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:242
    477 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:394
    478 msgid "Filter collection by object type."
    479 msgstr ""
    480 
    481624#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:299
    482625msgid "Template does not exist."
     
    509652
    510653#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:691
    511 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1004
     654#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1016
    512655msgid "An alphanumeric identifier for the project."
    513656msgstr ""
    514657
    515658#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:697
    516 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1010
     659#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1022
    517660msgid "Machine type of the project."
    518661msgstr ""
    519662
    520663#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:703
    521 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1016
     664#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1028
    522665msgid "Localized type of the project."
    523666msgstr ""
    524667
    525668#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:709
    526 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1022
     669#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1034
    527670msgid "Label of the project."
    528671msgstr ""
    529672
    530673#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:715
    531 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1028
     674#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1040
    532675msgid "Creation date of the project."
    533676msgstr ""
    534677
    535678#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:722
    536 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1035
     679#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1047
    537680msgid "Last modification date of the project."
    538681msgstr ""
    539682
    540683#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:729
    541 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1042
     684#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1054
    542685msgid "Number of pages in the project."
    543686msgstr ""
    544687
    545688#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:735
    546 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1054
     689#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1066
    547690msgid "Indicates if project is derived from template."
    548691msgstr ""
    549692
    550693#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:741
    551 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1060
     694#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1072
    552695msgid "Template ID the derived project is based on."
    553696msgstr ""
    554697
    555698#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:747
    556 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1066
     699#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1078
    557700msgid "Indicates if project is global."
    558701msgstr ""
    559702
    560703#: includes/rest-api/endpoints/class-mnumidesigner-rest-products-controller.php:753
    561 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1072
     704#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1084
    562705msgid "Indicates if project will be removed"
    563706msgstr ""
     
    661804msgstr ""
    662805
    663 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1048
     806#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1060
    664807msgid "Number of priceable pages in the project"
    665808msgstr ""
    666809
    667 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1078
     810#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1090
    668811msgid "Date when project will be removed"
    669812msgstr ""
    670813
    671 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1085
     814#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1097
    672815msgid "Products to which this project is attached to"
    673816msgstr ""
    674817
    675 #: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1105
     818#: includes/rest-api/endpoints/class-mnumidesigner-rest-projects-controller.php:1117
    676819msgid "WooCommerce Order Items to which this project is attached to"
    677820msgstr ""
     
    706849msgstr ""
    707850
    708 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:105
    709 msgid "Filter collection by object name."
    710 msgstr ""
    711 
    712851#: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:110
    713852msgid "Filter collection by object locale."
     
    730869msgstr ""
    731870
    732 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:471
     871#: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:479
    733872msgid "Unique id of translation"
    734873msgstr ""
    735874
    736 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:477
     875#: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:485
    737876msgid "Name for translation."
    738877msgstr ""
    739878
    740 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:490
     879#: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:498
    741880msgid "Locale of translation."
    742881msgstr ""
    743882
    744 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:496
     883#: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:504
    745884msgid "Translation fallback locale"
    746885msgstr ""
    747886
    748 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:502
    749 msgid "The date the object was last modified, in the site's timezone."
    750 msgstr ""
    751 
    752 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:509
    753 msgid "URL to the object"
    754 msgstr ""
    755 
    756 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:524
     887#: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:532
    757888msgid "ID of translation entry"
    758889msgstr ""
    759890
    760 #: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:530
     891#: includes/rest-api/endpoints/class-mnumidesigner-rest-translations-controller.php:538
    761892msgid "Translation value"
    762893msgstr ""
    763894
    764 #: includes/shortcodes/class-mnumidesigner-shortcode-edit-project-link.php:36
     895#: includes/shortcodes/class-mnumidesigner-shortcode-edit-project-link.php:38
    765896msgid "Edit project"
    766897msgstr ""
  • mnumidesigner/trunk/readme.txt

    r2315791 r2411168  
    22Contributors: ppakier2017, mnumi
    33Tags: product customiser, product designer, custom product, print, photo book, photo album, photo calendar, photo-book, woocommerce, web2print
    4 Stable tag: 0.6
     4Stable tag: 0.7
    55Requires at least: 4.6
    6 Tested up to: 4.7
     6Tested up to: 5.4.4
    77Requires PHP: 5.6
    88License: GPLv2 or later
     
    159159== Changelog ==
    160160
     161= 0.7 - 2020-11-02 =
     162
     163* Feature - Added possibility to configure calendar events.
     164* Feature - Added new view for displaying available custom calendars.
     165
    161166= 0.6 - 2020-05-28 =
    162167
Note: See TracChangeset for help on using the changeset viewer.